Subject: Re: __STDC__ in cdefs_elf.h
To: None <tls@rek.tjls.com>
From: Garrett D'Amore <garrett_damore@tadpole.com>
List: tech-toolchain
Date: 09/08/2006 14:38:53
Thor Lancelot Simon wrote:
> On Fri, Sep 08, 2006 at 01:44:11PM -0700, Jason Thorpe wrote:
>   
>> On Sep 8, 2006, at 1:24 PM, Thor Lancelot Simon wrote:
>>
>>     
>>> This is because of one of my least-favorite bogosities about the GNU
>>> compilers: they implement C token pasting and stringification in the
>>> C language frontend instead of in the C preprocessor.  This has
>>> annoyed me periodically for about a decade now; I wish it would annoy
>>> someone with more GCC clue sufficiently to fix it!  :-)
>>>       
>> What?  Nonsense.  Back when it had a separate C preprocessor, it was  
>> certainly implemented there.
>>     
>
> Nope.  I've been flummoxed by this problem with the GCC C preprocessor
> since approximately 1995.  Ask erh if you don't believe me, we spent
> most of a day scratching our heads until we suddenly realized why the
> header files for our C-like (but with a different actual compiler)
> language weren't being handled properly by GCC's cpp.
>
> Get an old version of GCC and try it, if you want -- cc will get pasting
> and stringification, but no other user of cpp does, which is because the
> code to do it is not _in_ cpp, AFAICT.
>
> Thor
>   

Haha!  I've done some more research.

CPP does in fact do the right thing.  cpp does token pasting.

The _PROBLEM_ is that we have a compile command line that tells it to
use traditional cpp:

/import/meteor/tools/SunOS-i386/bin/mipsel--netbsd-gcc -mno-abicalls -x
assembler-with-cpp -traditional-cpp -D_LOCORE -Wa,-fatal-warnings
-Devbmips -I. -I/home/garrett/roofnano/src/sys/contrib/dev/ath/netbsd
-I/home/garrett/roofnano/src/sys/../common/include
-I/home/garrett/roofnano/src/sys/arch -I/home/garrett/roofnano/src/sys
-nostdinc -DMIPS3_ENABLE_CLOCK_INTR -DEVBMIPS_CLOCKSUBR -DCOM_AU1x00
-DMIPS32 -DSOFTFLOAT -DSOSEND_LOAN -DDIAGNOSTIC -DDEBUG
-DIPFILTER_LOOKUP -DAUMAC_EVENT_COUNTERS -DMAXUSERS=32 -D_KERNEL
-D_KERNEL_OPT
-I/home/garrett/roofnano/src/sys/lib/libkern/../../../common/lib/libc/quad
-I/home/garrett/roofnano/src/sys/lib/libkern/../../../common/lib/libc/string
-I/home/garrett/roofnano/src/sys/lib/libkern/../../../common/lib/libc/arch/mips/string
-I/home/garrett/roofnano/src/sys/dist/ipf -c
/home/garrett/roofnano/src/sys/arch/mips/mips/locore.S



Note the -traditional-cpp.

So, my question to all you toolchain experts out there is, is this
really necessary?  Can we use an ANSI cpp?  I don't know -- my biggest
concern surrounds some unusual assembler language which requires the use
of # or ##.  The ones I've seen all use $ and % to indicate registers,
etc., but maybe this isn't general?

Note that the special handling of # and ## should not impact things like
comments, because the token pasting/stringification handling only occurs
within a macro definition.

-- 
Garrett D'Amore, Principal Software Engineer
Tadpole Computer / Computing Technologies Division,
General Dynamics C4 Systems
http://www.tadpolecomputer.com/
Phone: 951 325-2134  Fax: 951 325-2191