tinycc-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Tinycc-devel] [FreeBSD support] __aligned(n) + __pure issues


From: Michael Matz
Subject: Re: [Tinycc-devel] [FreeBSD support] __aligned(n) + __pure issues
Date: Mon, 17 Oct 2016 00:06:54 +0200 (CEST)
User-agent: Alpine 2.20 (LSU 67 2015-01-07)

Hi,

On Sun, 16 Oct 2016, Christian Jullien wrote:

Ok Michael,
It is defined in sys/cdefs.h as:

#if __GNUC_PREREQ__(2, 7) || defined(__INTEL_COMPILER)
#define __dead2         __attribute__((__noreturn__))
#define __pure2         __attribute__((__const__))
#define __unused        __attribute__((__unused__))
#define __used          __attribute__((__used__))
#define __packed        __attribute__((__packed__))
#define __aligned(x)    __attribute__((__aligned__(x)))
#define __section(x)    __attribute__((__section__(x)))
#endif

Yeah, we gathered this meanwhile from grischkas research. A bug in FreeBSDs header (the bug being that there's no fallback definition of the macros that are nevertheless used unconditionally in standard headers).

Now, I do agree that we'd want to add a work around for this in tcc. I think a better work-around than defining __GNUC__ is to define the above macros instead. __GNUC__ simply has quite some side-effects. (E.g. after the patch you can't compile programs on some versions of glibc anymore because it then uses facilities of GNU C that tcc simply doesn't implement).

-    tcc_define_symbol(s, "__GNUC_MINOR__", "1");
+    tcc_define_symbol(s, "__GNUC_MINOR__", "7");

And it helps a little bit, now I get the same result as if I define
__aligned(x) __attribute__((__aligned__(x))) i.e. code compiles (with
__aligned defined) but std C library is not found.

------------ test3 ------------
../tcc -B.. -I../include -I.. -I.. -DTCC_TARGET_I386 -DONE_SOURCE -run
../tcc.c -B.. -I../include -I.. -I.. -DTCC_TARGET_I386 -DONE_SOURCE -run
../tcc.c -B.. -I../include -I.. -I.. -DTCC_TARGET_I386 -DONE_SOURCE -run
../tcc.c -B.. -I../include -I.. -I.. -run tcctest.c > test.out3
tcc: error: undefined symbol 'memcpy'
...

Yes, I wrote a paragraph about this in my initial answer of how you should start trying to corner this problem.


Ciao,
Michael.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]