Messages in this thread | | | Subject | Re: [PATCH] Use -fno-unit-at-a-time if gcc supports it | From | Andreas Jaeger <> | Date | Fri, 05 Sep 2003 18:10:17 +0200 |
| |
Robert Love <rml@tech9.net> 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 [unhandled content-type:application/pgp-signature] | |