[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: "struct user" conflicts on arm



On Sat, Dec 17, 2011 at 7:57 AM, peter green <plugwash@p10link.net> wrote:
>> mind also looking at WCHAR_MIN/MAX undefined for arm?
>> http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=598937
>
> They most certainly are defined. The trouble is that WCHAR_MAX is defined
> in a strange way.
>
> #define __WCHAR_MAX     ( (wchar_t) - 1 )
>
> This definition is fine for normal c or c++ code but
> it cannot be properly evaluated in the context of a preprocessor
> conditional.
>
> The bug report has a patch (actually a replacement for
> an existing patch) which looks fine to me.

ISO C99 says that WCHAR_MAX must be a constant expression and the
above definition is such an expression. Technically the program needs
fixing (see below though for the "standards matter but so do users"),
there is nothing wrong with a type cast and a constant value e.g.
signed -1 converted to unsigned int (ARM GNU/Linux value for wchar_t).

However, the real issue here is that it differs from x86, the most
common architecture, and differences from x86 cause porting problems.
The patch itself is insufficient because it doesn't take into account
wordsize. When we switch to the 64-bit ARM ABI it should just work.
Therefore you need to check for __WORDSIZE and *only* define a value
if we are *not* 64-bits. You don't want to define anything for the
64-bit case until the 64-bit ARM ABI is out and finalized.

Your patch to fix ucontext namespace pollution looks good, please post
that to libc-ports for review and make sure to state what testing
you've done with the patch. At a minimum you should run the glibc
testsuite and build gdb with those newly installed headers.

Cheers,
Carlos.


Reply to: