Robert Love writes: > On Fri, 2003-09-05 at 11:17, Andreas Jaeger wrote: > > >> Since unit-at-a-time has better inlining heuristics the better way is >> to add the used attribute - but that takes some time. The short-term >> solution would be to add the compiler flag, > > Won't we get a linker error if a static symbol is used but > optimized-away? It shouldn't be hard to fix the n linker errors that > crop up. Yes, we would get a linker error. > And why are we using static symbols in inline assembly outside of the > compilation scope? Don't know. > Anyhow, if it generates an error, this isn't hard to fix. Just lots of places... > Here is the start... > > Robert Love > > > --- linux-rml/include/linux/compiler.h Fri Sep 5 11:57:56 2003 > +++ linux/include/linux/compiler.h Fri Sep 5 12:02:02 2003 > @@ -74,6 +74,19 @@ > #define __attribute_pure__ /* unimplemented */ > #endif > > +/* > + * As of gcc 3.2, we can mark a function as 'used' and gcc will assume that, > + * even if it does not find a reference to it in any compilation unit. We > + * need this for gcc 3.4 and beyond, which can optimize on a program-wide > + * scope, and not just one file at a time, to avoid static symbols being > + * discarded. > + */ > +#if (__GNUC__ == 3 && __GNUC_MINOR__ > 1) || __GNUC__ > 3 > +#define __attribute_used__ __attribute__((used)) > +#else > +#define __attribute_used__ /* unimplemented */ In glibc we have for the else case: # define __attribute_used__ __attribute__ ((__unused__)) This might reduce warnings about unused functions. But this change is not critical IMO, so your patch looks fine! > +#endif > + > /* This macro obfuscates arithmetic on a variable address so that gcc > shouldn't recognize the original var, and make assumptions about it */ > #define RELOC_HIDE(ptr, off) \ Andreas -- Andreas Jaeger, aj@suse.de, http://www.suse.de/~aj SuSE Linux AG, Deutschherrnstr. 15-19, 90429 Nürnberg, Germany GPG fingerprint = 93A3 365E CE47 B889 DF7F FED1 389A 563C C272 A126