Hi Michael, > do you happen to know which ones are the case for you? (E.g. register > reduction due to position independend code on i386; or function call overhead > for do-mostly-nothing functions; or something else?)
Lisp interpreter calls zillion of small functions, overhead is clearly the culprit where the penalty is around 5%-10%. It is less obvious with compiled code where most common accessors are inlined by the compiler. I also designed several ultra fast optimized C++ libraries used in by automatic low latency trading applications where each nanosecond matters (code is compiled by PGO and many other optimization technics). Shared lib is close to 10% slower compared to static one. Needless to say that we don't advice customers to use dynamic libs but they generally know that and all their code is also static. C. -----Original Message----- From: Tinycc-devel [mailto:tinycc-devel-bounces+eligis=orange...@nongnu.org] On Behalf Of Michael Matz Sent: Wednesday, June 03, 2020 17:16 To: jull...@eligis.com; tinycc-devel@nongnu.org Cc: John Scott Subject: Re: [Tinycc-devel] error: Unknown relocation type for got: 23 with -static Hello, On Sun, 31 May 2020, Christian Jullien wrote: > I confirm! I tested this sample with mod on Debian RPi 4 armv7l and had a > similar error: > > $ tcc -static foo.c > tcc: error: Unknown relocation type for got: 107 This, as well as Scotts problem, are relocations for thread local storage. Several facilities of glibc (and other libc's) are implemented as thread local variables (e.g. 'errno' is thread local, as well as some management structures for the malloc implementation) and when linking statically all of these are exposed to TCC. TCC doesn't implement thread local storage, so that's why there's the error. As long as that's the case static linking against glibc (or any other library containing such variables) isn't going to work. I have a patch somewhere that implements TLS at least for x86-64, maybe I find time to dust it off over the next days. Until then: missing feature in TCC with not workaround except not linking statically. > $ tcc foo.c > > -hh help says: > -static link to static libraries (not recommended) > > Why is it not recommended? Because it is not well supported or just because > shared lib, by ideology, is generally preferred? I think the comment is indeed about the general recommendation to not link statically. But it should be noted that linking statically against glibc specifically is even more discouraged. I.e. even if you link most of an executable statically glibc should stay as shared library dependency. > My OpenLisp comes in two flavors with gcc: static and shared. When speed > matters, I recommend the static one which is significantly faster. A significant performance difference should only happen in fairly special circumstances. Out of couriosity: do you happen to know which ones are the case for you? (E.g. register reduction due to position independend code on i386; or function call overhead for do-mostly-nothing functions; or something else?) Ciao, Michael. > > C. > > -----Original Message----- > From: Tinycc-devel [mailto:tinycc-devel-bounces+eligis=orange...@nongnu.org] > On Behalf Of John Scott > Sent: Saturday, May 30, 2020 16:55 > To: tinycc-devel@nongnu.org > Subject: [Tinycc-devel] error: Unknown relocation type for got: 23 with > -static > > Hi, > > I was trying to do a build of Tor statically but ran into this issue with > current master and 0.9.27 package in Debian. I can reproduce with this: > #include <stdlib.h> > int main(){ char *p = NULL; free(p); } > > and tcc -static gives the error. Is this a bug in tcc or elsewhere? > > Sincerely, > John Scott > > > _______________________________________________ > Tinycc-devel mailing list > Tinycc-devel@nongnu.org > https://lists.nongnu.org/mailman/listinfo/tinycc-devel _______________________________________________ Tinycc-devel mailing list Tinycc-devel@nongnu.org https://lists.nongnu.org/mailman/listinfo/tinycc-devel _______________________________________________ Tinycc-devel mailing list Tinycc-devel@nongnu.org https://lists.nongnu.org/mailman/listinfo/tinycc-devel