BUILD: compiler: workaround a glibc madness around __attribute__()
For whatever reason, glibc decided that the __attribute__ keyword is the exclusive property of gcc, and redefines it to an empty macro on other compilers. Some non-gcc compilers also support it (possibly partially), tinycc is one of them. By doing this, glibc silently broke all constructors, resulting in code that arrives in main() with uninitialized variables. The solution we use here consists in undefining the macro on non-gcc compilers, and redefining it to itself in order to cause a conflict in the event the redefinition would happen afterwards. This visibly solved the problem.
This commit is contained in:
parent
d9537f6082
commit
f6afda6539
|
@ -34,6 +34,15 @@
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#if !defined(__GNUC__)
|
||||
/* Some versions of glibc irresponsibly redefine __attribute__() to empty for
|
||||
* non-gcc compilers, and as such, silently break all constructors with other
|
||||
* other compilers. Let's make sure such incompatibilities are detected if any,
|
||||
* or that the attribute is properly enforced.
|
||||
*/
|
||||
#undef __attribute__
|
||||
#define __attribute__(x) __attribute__(x)
|
||||
#endif
|
||||
|
||||
/* By default, gcc does not inline large chunks of code, but we want it to
|
||||
* respect our choices.
|
||||
|
|
Loading…
Reference in New Issue