Thomas Schwinge | 9 Aug 2012 20:18
Gravatar

Memory corruption for host double format different from target double format

Hi!

Thanks to the recent memory checking instrastructure (well, it's been
some weeks already...), a memory corruption issue has been uncovered for
configurations where the host double format is not equal to target double
format.  I have seen this for SH, but don't believe it really is specific
to SH, it's just that the very most of all GDB targets have host double
format match the target double format.

As I'm not sufficiently experienced with GDB's expressions and type
system, I'd like some help here.

    $ install/bin/*-gdb -q -ex 'file [...]/gdb.cp/misc' -ex 'show architecture' -ex 'print (bool)17.93'
    Reading symbols from [...]/gdb.cp/misc...done.
    The target architecture is set automatically (currently sh2a-or-sh3e)
    $1 = true
    memory clobbered past end of allocated block
    Aborted

sh2a-or-sh3e configures for a 32-bit double format, as opposed to the
"normal" 64-bit double format (which also is the x86_64 host's double
format).

sh-tdep.c:sh_gdbarch_init:

        case bfd_mach_sh2a_or_sh3e:
          /* doubles on sh2e and sh3e are actually 4 byte.  */
          set_gdbarch_double_bit (gdbarch, 4 * TARGET_CHAR_BIT);

First and foremost -- is my understanding correct that given this
(Continue reading)

Thomas Schwinge | 10 Aug 2012 11:32
Gravatar

Re: Memory corruption for host double format different from target double format

Hi!

On Thu, 09 Aug 2012 20:18:27 +0200, I wrote:
> Thanks to the recent memory checking instrastructure (well, it's been
> some weeks already...), a memory corruption issue has been uncovered for
> configurations where the host double format is not equal to target double
> format.  I have seen this for SH, but don't believe it really is specific
> to SH, it's just that the very most of all GDB targets have host double
> format match the target double format.
> 
> As I'm not sufficiently experienced with GDB's expressions and type
> system, I'd like some help here.
> 
>     $ install/bin/*-gdb -q -ex 'file [...]/gdb.cp/misc' -ex 'show architecture' -ex 'print (bool)17.93'
>     Reading symbols from [...]/gdb.cp/misc...done.
>     The target architecture is set automatically (currently sh2a-or-sh3e)
>     $1 = true
>     memory clobbered past end of allocated block
>     Aborted
> 
> sh2a-or-sh3e configures for a 32-bit double format, as opposed to the
> "normal" 64-bit double format (which also is the x86_64 host's double
> format).
> 
> sh-tdep.c:sh_gdbarch_init:
> 
>         case bfd_mach_sh2a_or_sh3e:
>           /* doubles on sh2e and sh3e are actually 4 byte.  */
>           set_gdbarch_double_bit (gdbarch, 4 * TARGET_CHAR_BIT);

(Continue reading)

Yao Qi | 10 Aug 2012 12:37
Gravatar

Re: Memory corruption for host double format different from target double format

On Friday, August 10, 2012 11:32:53 AM Thomas Schwinge wrote:
> gdbarch.c:verify_gdbarch:
> 
>     [...]
>       /* Skip verify of float_bit, invalid_p == 0 */
>       if (gdbarch->float_format == 0)
>         gdbarch->float_format = floatformats_ieee_single;
>       /* Skip verify of double_bit, invalid_p == 0 */
>       if (gdbarch->double_format == 0)
>         gdbarch->double_format = floatformats_ieee_double;
>       /* Skip verify of long_double_bit, invalid_p == 0 */
>       if (gdbarch->long_double_format == 0)
>         gdbarch->long_double_format = floatformats_ieee_double;
>     [...]
> 
> That is, if set_gdbarch_double_format has not been called, it will
> default to floatformats_ieee_double -- even though set_gdbarch_double_bit
> may have been called setting it unequal to the 64-bit double format.
> Hmm, and gdbarch.c:verify_gdbarch has the following comment on top of it:
> »Ensure that all values in a GDBARCH are reasonable.«  ;-)

Looks like some checking like this is missing?

  gdbarch->float_format->totalsize <= gdbarch->float_bit
  gdbarch->double_format->totalsize <= gdbarch->double_bit

--

-- 
Yao (齐尧)

(Continue reading)

Ulrich Weigand | 10 Aug 2012 14:56
Picon
Favicon

Re: Memory corruption for host double format different from target double format

Yao Qi wrote:
> On Friday, August 10, 2012 11:32:53 AM Thomas Schwinge wrote:
> > That is, if set_gdbarch_double_format has not been called, it will
> > default to floatformats_ieee_double -- even though set_gdbarch_double_bit
> > may have been called setting it unequal to the 64-bit double format.
> > Hmm, and gdbarch.c:verify_gdbarch has the following comment on top of it:
> > Ensure that all values in a GDBARCH are reasonable.  ;-)
> 
> Looks like some checking like this is missing?
> 
>   gdbarch->float_format->totalsize <= gdbarch->float_bit
>   gdbarch->double_format->totalsize <= gdbarch->double_bit

In fact, I'd prefer to make gdbarch_double_format etc. *mandatory*
and gdbarch_double_bit etc. optional, defaulting to the format size.
(Currently, _bit is mandatory and _format is optional.)

This would mean that nearly all calls to set_gdbarch_double_bit
could go away, with the exception of special cases like "long double"
on i386 ...

[ I guess we could also hunt down and remove the final few places
that still create a TYPE_CODE_FLT with no format set; then the
floatflormat_from_length routine could go away completely. ]

Bye,
Ulrich

--

-- 
  Dr. Ulrich Weigand
(Continue reading)

Mark Kettenis | 10 Aug 2012 16:31
Picon
Picon
Favicon

Re: Memory corruption for host double format different from target double format

> Date: Fri, 10 Aug 2012 14:56:46 +0200 (CEST)
> From: "Ulrich Weigand" <uweigand <at> de.ibm.com>
> 
> Yao Qi wrote:
> > On Friday, August 10, 2012 11:32:53 AM Thomas Schwinge wrote:
> > > That is, if set_gdbarch_double_format has not been called, it will
> > > default to floatformats_ieee_double -- even though set_gdbarch_double_bit
> > > may have been called setting it unequal to the 64-bit double format.
> > > Hmm, and gdbarch.c:verify_gdbarch has the following comment on top of it:
> > > Ensure that all values in a GDBARCH are reasonable.  ;-)
> > 
> > Looks like some checking like this is missing?
> > 
> >   gdbarch->float_format->totalsize <= gdbarch->float_bit
> >   gdbarch->double_format->totalsize <= gdbarch->double_bit
> 
> In fact, I'd prefer to make gdbarch_double_format etc. *mandatory*
> and gdbarch_double_bit etc. optional, defaulting to the format size.
> (Currently, _bit is mandatory and _format is optional.)
> 
> This would mean that nearly all calls to set_gdbarch_double_bit
> could go away, with the exception of special cases like "long double"
> on i386 ...

Initializing _bit based on _format by default makes sense, but I don't
think this is easy to implement given the way how the gdbarch.c code
is generated.

Making _format mandatory doesn't make sense to me though.  I'd say
that ieee_single and ieee_double are perfectly reasonable defaults for
(Continue reading)

Thomas Schwinge | 29 Aug 2012 17:36
Gravatar

Re: Memory corruption for host double format different from target double format

Hi!

On Fri, 10 Aug 2012 16:31:47 +0200, Mark Kettenis <mark.kettenis <at> xs4all.nl> wrote:
> > Date: Fri, 10 Aug 2012 14:56:46 +0200 (CEST)
> > From: "Ulrich Weigand" <uweigand <at> de.ibm.com>
> > 
> > Yao Qi wrote:
> > > On Friday, August 10, 2012 11:32:53 AM Thomas Schwinge wrote:
> > > > That is, if set_gdbarch_double_format has not been called, it will
> > > > default to floatformats_ieee_double -- even though set_gdbarch_double_bit
> > > > may have been called setting it unequal to the 64-bit double format.
> > > > Hmm, and gdbarch.c:verify_gdbarch has the following comment on top of it:
> > > > Ensure that all values in a GDBARCH are reasonable.  ;-)
> > > 
> > > Looks like some checking like this is missing?
> > > 
> > >   gdbarch->float_format->totalsize <= gdbarch->float_bit
> > >   gdbarch->double_format->totalsize <= gdbarch->double_bit
> > 
> > In fact, I'd prefer to make gdbarch_double_format etc. *mandatory*
> > and gdbarch_double_bit etc. optional, defaulting to the format size.
> > (Currently, _bit is mandatory and _format is optional.)
> > 
> > This would mean that nearly all calls to set_gdbarch_double_bit
> > could go away, with the exception of special cases like "long double"
> > on i386 ...
> 
> Initializing _bit based on _format by default makes sense, but I don't
> think this is easy to implement given the way how the gdbarch.c code
> is generated.
(Continue reading)

Thomas Schwinge | 30 Aug 2012 17:37
Gravatar

Re: Memory corruption for host double format different from target double format

Hi!

On Wed, 29 Aug 2012 17:36:54 +0200, I wrote:
> On Fri, 10 Aug 2012 16:31:47 +0200, Mark Kettenis <mark.kettenis <at> xs4all.nl> wrote:
> > > Date: Fri, 10 Aug 2012 14:56:46 +0200 (CEST)
> > > From: "Ulrich Weigand" <uweigand <at> de.ibm.com>
> > > 
> > > Yao Qi wrote:
> > > > On Friday, August 10, 2012 11:32:53 AM Thomas Schwinge wrote:
> > > > > That is, if set_gdbarch_double_format has not been called, it will
> > > > > default to floatformats_ieee_double -- even though set_gdbarch_double_bit
> > > > > may have been called setting it unequal to the 64-bit double format.
> > > > > Hmm, and gdbarch.c:verify_gdbarch has the following comment on top of it:
> > > > > Ensure that all values in a GDBARCH are reasonable.  ;-)
> > > > 
> > > > Looks like some checking like this is missing?
> > > > 
> > > >   gdbarch->float_format->totalsize <= gdbarch->float_bit
> > > >   gdbarch->double_format->totalsize <= gdbarch->double_bit
> > > 
> > > In fact, I'd prefer to make gdbarch_double_format etc. *mandatory*
> > > and gdbarch_double_bit etc. optional, defaulting to the format size.
> > > (Currently, _bit is mandatory and _format is optional.)
> > > 
> > > This would mean that nearly all calls to set_gdbarch_double_bit
> > > could go away, with the exception of special cases like "long double"
> > > on i386 ...
> > 
> > Initializing _bit based on _format by default makes sense, but I don't
> > think this is easy to implement given the way how the gdbarch.c code
(Continue reading)

Thomas Schwinge | 7 Sep 2012 10:20
Gravatar

Re: Memory corruption for host double format different from target double format

Hi!

Ping.

On Thu, 30 Aug 2012 17:37:45 +0200, I wrote:
> On Wed, 29 Aug 2012 17:36:54 +0200, I wrote:
> > On Fri, 10 Aug 2012 16:31:47 +0200, Mark Kettenis <mark.kettenis <at> xs4all.nl> wrote:
> > > > Date: Fri, 10 Aug 2012 14:56:46 +0200 (CEST)
> > > > From: "Ulrich Weigand" <uweigand <at> de.ibm.com>
> > > > 
> > > > Yao Qi wrote:
> > > > > On Friday, August 10, 2012 11:32:53 AM Thomas Schwinge wrote:
> > > > > > That is, if set_gdbarch_double_format has not been called, it will
> > > > > > default to floatformats_ieee_double -- even though set_gdbarch_double_bit
> > > > > > may have been called setting it unequal to the 64-bit double format.
> > > > > > Hmm, and gdbarch.c:verify_gdbarch has the following comment on top of it:
> > > > > > Ensure that all values in a GDBARCH are reasonable.  ;-)
> > > > > 
> > > > > Looks like some checking like this is missing?
> > > > > 
> > > > >   gdbarch->float_format->totalsize <= gdbarch->float_bit
> > > > >   gdbarch->double_format->totalsize <= gdbarch->double_bit
> > > > 
> > > > In fact, I'd prefer to make gdbarch_double_format etc. *mandatory*
> > > > and gdbarch_double_bit etc. optional, defaulting to the format size.
> > > > (Currently, _bit is mandatory and _format is optional.)
> > > > 
> > > > This would mean that nearly all calls to set_gdbarch_double_bit
> > > > could go away, with the exception of special cases like "long double"
> > > > on i386 ...
(Continue reading)

Mark Kettenis | 7 Sep 2012 11:15
Picon
Picon
Favicon

Re: Memory corruption for host double format different from target double format

> From: Thomas Schwinge <thomas <at> codesourcery.com>
> Date: Fri, 7 Sep 2012 10:20:09 +0200
> 
> Hi!
> 
> Ping.

Looks correct to me.  Guess enough time has passed to give people an
opportunity to object.  So go ahead with this.

> On Thu, 30 Aug 2012 17:37:45 +0200, I wrote:
> > On Wed, 29 Aug 2012 17:36:54 +0200, I wrote:
> > > On Fri, 10 Aug 2012 16:31:47 +0200, Mark Kettenis <mark.kettenis <at> xs4all=
> .nl> wrote:
> > > > > Date: Fri, 10 Aug 2012 14:56:46 +0200 (CEST)
> > > > > From: "Ulrich Weigand" <uweigand <at> de.ibm.com>
> > > > >=20
> > > > > Yao Qi wrote:
> > > > > > On Friday, August 10, 2012 11:32:53 AM Thomas Schwinge wrote:
> > > > > > > That is, if set_gdbarch_double_format has not been called, it w=
> ill
> > > > > > > default to floatformats_ieee_double -- even though set_gdbarch_=
> double_bit
> > > > > > > may have been called setting it unequal to the 64-bit double fo=
> rmat.
> > > > > > > Hmm, and gdbarch.c:verify_gdbarch has the following comment on =
> top of it:
> > > > > > > Ensure that all values in a GDBARCH are reasonable.  ;-)
> > > > > >=20
> > > > > > Looks like some checking like this is missing?
(Continue reading)

Thomas Schwinge | 7 Sep 2012 10:20
Gravatar

Re: Memory corruption for host double format different from target double format

Hi!

Ping.

On Thu, 30 Aug 2012 17:37:45 +0200, I wrote:
> On Wed, 29 Aug 2012 17:36:54 +0200, I wrote:
> > On Fri, 10 Aug 2012 16:31:47 +0200, Mark Kettenis <mark.kettenis <at> xs4all.nl> wrote:
> > > > Date: Fri, 10 Aug 2012 14:56:46 +0200 (CEST)
> > > > From: "Ulrich Weigand" <uweigand <at> de.ibm.com>
> > > > 
> > > > Yao Qi wrote:
> > > > > On Friday, August 10, 2012 11:32:53 AM Thomas Schwinge wrote:
> > > > > > That is, if set_gdbarch_double_format has not been called, it will
> > > > > > default to floatformats_ieee_double -- even though set_gdbarch_double_bit
> > > > > > may have been called setting it unequal to the 64-bit double format.
> > > > > > Hmm, and gdbarch.c:verify_gdbarch has the following comment on top of it:
> > > > > > Ensure that all values in a GDBARCH are reasonable.  ;-)
> > > > > 
> > > > > Looks like some checking like this is missing?
> > > > > 
> > > > >   gdbarch->float_format->totalsize <= gdbarch->float_bit
> > > > >   gdbarch->double_format->totalsize <= gdbarch->double_bit
> > > > 
> > > > In fact, I'd prefer to make gdbarch_double_format etc. *mandatory*
> > > > and gdbarch_double_bit etc. optional, defaulting to the format size.
> > > > (Currently, _bit is mandatory and _format is optional.)
> > > > 
> > > > This would mean that nearly all calls to set_gdbarch_double_bit
> > > > could go away, with the exception of special cases like "long double"
> > > > on i386 ...
(Continue reading)

Thomas Schwinge | 30 Aug 2012 17:37
Gravatar

Re: Memory corruption for host double format different from target double format

Hi!

On Wed, 29 Aug 2012 17:36:54 +0200, I wrote:
> On Fri, 10 Aug 2012 16:31:47 +0200, Mark Kettenis <mark.kettenis <at> xs4all.nl> wrote:
> > > Date: Fri, 10 Aug 2012 14:56:46 +0200 (CEST)
> > > From: "Ulrich Weigand" <uweigand <at> de.ibm.com>
> > > 
> > > Yao Qi wrote:
> > > > On Friday, August 10, 2012 11:32:53 AM Thomas Schwinge wrote:
> > > > > That is, if set_gdbarch_double_format has not been called, it will
> > > > > default to floatformats_ieee_double -- even though set_gdbarch_double_bit
> > > > > may have been called setting it unequal to the 64-bit double format.
> > > > > Hmm, and gdbarch.c:verify_gdbarch has the following comment on top of it:
> > > > > Ensure that all values in a GDBARCH are reasonable.  ;-)
> > > > 
> > > > Looks like some checking like this is missing?
> > > > 
> > > >   gdbarch->float_format->totalsize <= gdbarch->float_bit
> > > >   gdbarch->double_format->totalsize <= gdbarch->double_bit
> > > 
> > > In fact, I'd prefer to make gdbarch_double_format etc. *mandatory*
> > > and gdbarch_double_bit etc. optional, defaulting to the format size.
> > > (Currently, _bit is mandatory and _format is optional.)
> > > 
> > > This would mean that nearly all calls to set_gdbarch_double_bit
> > > could go away, with the exception of special cases like "long double"
> > > on i386 ...
> > 
> > Initializing _bit based on _format by default makes sense, but I don't
> > think this is easy to implement given the way how the gdbarch.c code
(Continue reading)

Thomas Schwinge | 29 Aug 2012 17:36
Gravatar

Re: Memory corruption for host double format different from target double format

Hi!

On Fri, 10 Aug 2012 16:31:47 +0200, Mark Kettenis <mark.kettenis <at> xs4all.nl> wrote:
> > Date: Fri, 10 Aug 2012 14:56:46 +0200 (CEST)
> > From: "Ulrich Weigand" <uweigand <at> de.ibm.com>
> > 
> > Yao Qi wrote:
> > > On Friday, August 10, 2012 11:32:53 AM Thomas Schwinge wrote:
> > > > That is, if set_gdbarch_double_format has not been called, it will
> > > > default to floatformats_ieee_double -- even though set_gdbarch_double_bit
> > > > may have been called setting it unequal to the 64-bit double format.
> > > > Hmm, and gdbarch.c:verify_gdbarch has the following comment on top of it:
> > > > Ensure that all values in a GDBARCH are reasonable.  ;-)
> > > 
> > > Looks like some checking like this is missing?
> > > 
> > >   gdbarch->float_format->totalsize <= gdbarch->float_bit
> > >   gdbarch->double_format->totalsize <= gdbarch->double_bit
> > 
> > In fact, I'd prefer to make gdbarch_double_format etc. *mandatory*
> > and gdbarch_double_bit etc. optional, defaulting to the format size.
> > (Currently, _bit is mandatory and _format is optional.)
> > 
> > This would mean that nearly all calls to set_gdbarch_double_bit
> > could go away, with the exception of special cases like "long double"
> > on i386 ...
> 
> Initializing _bit based on _format by default makes sense, but I don't
> think this is easy to implement given the way how the gdbarch.c code
> is generated.
(Continue reading)

Mark Kettenis | 10 Aug 2012 16:31
Picon
Picon
Favicon

Re: Memory corruption for host double format different from target double format

> Date: Fri, 10 Aug 2012 14:56:46 +0200 (CEST)
> From: "Ulrich Weigand" <uweigand <at> de.ibm.com>
> 
> Yao Qi wrote:
> > On Friday, August 10, 2012 11:32:53 AM Thomas Schwinge wrote:
> > > That is, if set_gdbarch_double_format has not been called, it will
> > > default to floatformats_ieee_double -- even though set_gdbarch_double_bit
> > > may have been called setting it unequal to the 64-bit double format.
> > > Hmm, and gdbarch.c:verify_gdbarch has the following comment on top of it:
> > > Ensure that all values in a GDBARCH are reasonable.  ;-)
> > 
> > Looks like some checking like this is missing?
> > 
> >   gdbarch->float_format->totalsize <= gdbarch->float_bit
> >   gdbarch->double_format->totalsize <= gdbarch->double_bit
> 
> In fact, I'd prefer to make gdbarch_double_format etc. *mandatory*
> and gdbarch_double_bit etc. optional, defaulting to the format size.
> (Currently, _bit is mandatory and _format is optional.)
> 
> This would mean that nearly all calls to set_gdbarch_double_bit
> could go away, with the exception of special cases like "long double"
> on i386 ...

Initializing _bit based on _format by default makes sense, but I don't
think this is easy to implement given the way how the gdbarch.c code
is generated.

Making _format mandatory doesn't make sense to me though.  I'd say
that ieee_single and ieee_double are perfectly reasonable defaults for
(Continue reading)

Ulrich Weigand | 10 Aug 2012 14:56
Picon
Favicon

Re: Memory corruption for host double format different from target double format

Yao Qi wrote:
> On Friday, August 10, 2012 11:32:53 AM Thomas Schwinge wrote:
> > That is, if set_gdbarch_double_format has not been called, it will
> > default to floatformats_ieee_double -- even though set_gdbarch_double_bit
> > may have been called setting it unequal to the 64-bit double format.
> > Hmm, and gdbarch.c:verify_gdbarch has the following comment on top of it:
> > Ensure that all values in a GDBARCH are reasonable.  ;-)
> 
> Looks like some checking like this is missing?
> 
>   gdbarch->float_format->totalsize <= gdbarch->float_bit
>   gdbarch->double_format->totalsize <= gdbarch->double_bit

In fact, I'd prefer to make gdbarch_double_format etc. *mandatory*
and gdbarch_double_bit etc. optional, defaulting to the format size.
(Currently, _bit is mandatory and _format is optional.)

This would mean that nearly all calls to set_gdbarch_double_bit
could go away, with the exception of special cases like "long double"
on i386 ...

[ I guess we could also hunt down and remove the final few places
that still create a TYPE_CODE_FLT with no format set; then the
floatflormat_from_length routine could go away completely. ]

Bye,
Ulrich

--

-- 
  Dr. Ulrich Weigand
(Continue reading)

Yao Qi | 10 Aug 2012 12:37
Gravatar

Re: Memory corruption for host double format different from target double format

On Friday, August 10, 2012 11:32:53 AM Thomas Schwinge wrote:
> gdbarch.c:verify_gdbarch:
> 
>     [...]
>       /* Skip verify of float_bit, invalid_p == 0 */
>       if (gdbarch->float_format == 0)
>         gdbarch->float_format = floatformats_ieee_single;
>       /* Skip verify of double_bit, invalid_p == 0 */
>       if (gdbarch->double_format == 0)
>         gdbarch->double_format = floatformats_ieee_double;
>       /* Skip verify of long_double_bit, invalid_p == 0 */
>       if (gdbarch->long_double_format == 0)
>         gdbarch->long_double_format = floatformats_ieee_double;
>     [...]
> 
> That is, if set_gdbarch_double_format has not been called, it will
> default to floatformats_ieee_double -- even though set_gdbarch_double_bit
> may have been called setting it unequal to the 64-bit double format.
> Hmm, and gdbarch.c:verify_gdbarch has the following comment on top of it:
> »Ensure that all values in a GDBARCH are reasonable.«  ;-)

Looks like some checking like this is missing?

  gdbarch->float_format->totalsize <= gdbarch->float_bit
  gdbarch->double_format->totalsize <= gdbarch->double_bit

--

-- 
Yao (齐尧)

(Continue reading)

Thomas Schwinge | 10 Aug 2012 11:32
Gravatar

Re: Memory corruption for host double format different from target double format

Hi!

On Thu, 09 Aug 2012 20:18:27 +0200, I wrote:
> Thanks to the recent memory checking instrastructure (well, it's been
> some weeks already...), a memory corruption issue has been uncovered for
> configurations where the host double format is not equal to target double
> format.  I have seen this for SH, but don't believe it really is specific
> to SH, it's just that the very most of all GDB targets have host double
> format match the target double format.
> 
> As I'm not sufficiently experienced with GDB's expressions and type
> system, I'd like some help here.
> 
>     $ install/bin/*-gdb -q -ex 'file [...]/gdb.cp/misc' -ex 'show architecture' -ex 'print (bool)17.93'
>     Reading symbols from [...]/gdb.cp/misc...done.
>     The target architecture is set automatically (currently sh2a-or-sh3e)
>     $1 = true
>     memory clobbered past end of allocated block
>     Aborted
> 
> sh2a-or-sh3e configures for a 32-bit double format, as opposed to the
> "normal" 64-bit double format (which also is the x86_64 host's double
> format).
> 
> sh-tdep.c:sh_gdbarch_init:
> 
>         case bfd_mach_sh2a_or_sh3e:
>           /* doubles on sh2e and sh3e are actually 4 byte.  */
>           set_gdbarch_double_bit (gdbarch, 4 * TARGET_CHAR_BIT);

(Continue reading)


Gmane