Subject: Re: cross compile on solaris fails using SunStudio Compiler
To: None <current-users@NetBSD.org>
From: David Young <dyoung@pobox.com>
List: current-users
Date: 09/06/2006 12:24:24
On Wed, Sep 06, 2006 at 11:27:45AM +0200, Kurt Schreiner wrote:
> On Tue, Sep 05, 2006 at 10:30:21PM +0200, Alan Barrett wrote:
> > On Tue, 05 Sep 2006, David Laight wrote:
> > > IIRC __inline is a gcc-ism, because 'inline' was a valid user variable name
> > > before being added to C (posibly via C++) in C99.
> > > Possibly _inline is valid, in any case a simple #define will suffice.
> > > 
> > > The  '__attribute__ ((unused))' is definitely a gcc-ism.
> > > One of the NetBSD header files (maybe sys/cdefs.h) might contain something
> > > that should be used instead of '__attribute__ ((unused))' so that it
> > > can be #defined to the appropraite string (if any) for the compiler.
> > 
> > src/sys/sys/cdefs.h already defines both __inline and __attribute__(foo)
> > to the empty string if it thinks that the compiler won't like them.  I
> > don't know what's going wrong with the compiler detection, or perhaps
> > the wrong <sys/cdefs.h> is being used.
> Hm, looking at cc -E output I can see sys/cdefs.h beeing used:
> 
> [...]
> # 1 "/u/NetBSD/arch/i386/obj/tools/compat/include/sys/cdefs.h"
> [...]
> 
> BUT: This file is empty!
> 
> ls -l /u/NetBSD/arch/i386/obj/tools/compat/include/sys/cdefs.h
> -rw-r-----   1 ks       nbstaff        0 Sep  5 16:29 /u/NetBSD/arch/i386/obj/tools/compat/include/sys/cdefs.h
>  
> HM! Is this ok so?
> 
> Anyway, as sys/cdefs.h is empty, there is no preprocessor "magic"
> to #define __inline away...
> Hm, but '__attribute__ ((unused))' is reduced to '' in cc -E output:
> 
> [...]
> static __inline int isonum_711(u_char *) ;
> static __inline int isonum_712(char *) ;
> [...]
> 
> Couldn't find a #define for this in the #include-d header files,
> seems sun cc (the preprocessor) "knows" __attribute__(foobar)?!
> 
> The cheap trick would be to just #define __inline /*nothing*/
> in src/usr.sbin/makefs/cd9660.c somewhere but what would be
> TRT(C) to do in this case? 

That's not the right thing to do.

Where does sys/cdefs.h come from?  Surely it is not supposed to be empty?

Dave

-- 
David Young             OJC Technologies
dyoung@ojctech.com      Urbana, IL * (217) 278-3933