Date: Wed, 22 Jul 1998 07:51:23 -0700 (PDT) From: "Jonathan M. Bresler" <jmb> To: rivers@dignus.com (Thomas David Rivers) Cc: hackers@hub.freebsd.org, jmb@FreeBSD.ORG Subject: Re: macro expansion with gcc Message-ID: <199807221451.HAA14189@hub.freebsd.org> In-Reply-To: <199807221444.KAA00397@lakes.dignus.com> from Thomas David Rivers at "Jul 22, 98 10:44:47 am"
next in thread | previous in thread | raw e-mail | index | archive | help
Thomas David Rivers wrote:
> >
> > gcc -E runs the preprocessor, so i expected that all macros
> > would be expanded....but thats not what happened.
> >
> > what switch do i need to get the token pasting "##"
> > operation to take effect and leave behind the C code?
> >
> >
> > jmb
> >
> > To Unsubscribe: send mail to majordomo@FreeBSD.org
> > with "unsubscribe freebsd-hackers" in the body of the message
> >
>
> It should have expanded everything... token pasting is a little
> tricky though..., so it may not be pasting the way you expect.
> [I know I, personally, frequently get this wrong.] Can you point us
> to an example where it didn't seem to do the expansion?
will do.
/sys/kern/kern_clock.c contains:
SYSCTL_NODE(_kern, OID_AUTO, timecounter, CTLFLAG_RW, 0, "");
SYSCTL_PROC(_kern_timecounter, OID_AUTO, frequency, CTLTYPE_INT | CTLFLAG_RW,
0, sizeof(u_int), sysctl_kern_timecounter_frequency, "I", "");
SYSCTL_PROC(_kern_timecounter, OID_AUTO, adjustment, CTLTYPE_INT | CTLFLAG_RW,
0, sizeof(int), sysctl_kern_timecounter_adjustment, "I", "");
which "cd /sys/kern; gcc -E kern_clock.c" expands to:
SYSCTL_NODE(_kern, (-1) , timecounter, (0x80000000 | 0x40000000 ) , 0, "");
SYSCTL_PROC(_kern_timecounter, (-1) , frequency,
2 | (0x80000000 | 0x40000000 ) ,
0, sizeof(u_int), sysctl_kern_timecounter_frequency, "I", "");
SYSCTL_PROC(_kern_timecounter, (-1) , adjustment,
2 | (0x80000000 | 0x40000000 ) ,
0, sizeof(int), sysctl_kern_timecounter_adjustment, "I", "");
defining KERNEL......grrr.....make all the difference in the world!
sorry to have bothered you all ;)
extern struct linker_set sysctl__kern_timecounter ; static const struct sysctl_o
id sysctl___kern_timecounter = { (-1) , 1 | (0x80000000 | 0x40000000
) , (void*)&sysctl__kern_timecounter , 0 , "timecounter", 0 , "N"
}; static void const * const __set_sysctl__kern_sym_sysctl___kern_timecounter
= & sysctl___kern_timecounter ; __asm(".stabs \"_" "sysctl__kern" "\",
" "23" ", 0, 0, _" "sysctl___kern_timecounter") ; static void const * const __
set_sysctl__kern_timecounter_sym_sysctl___kern_timecounter = & sysctl___ke
rn_timecounter ; __asm(".stabs \"_" "sysctl__kern_timecounter" "\", " "23" ",
0, 0, _" "sysctl___kern_timecounter") ;
etc...
jmb
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199807221451.HAA14189>
