remove forced -O3 from shared library CFLAGS
authorRich Felker <dalias@aerifal.cx>
Sat, 15 Sep 2012 03:38:10 +0000 (23:38 -0400)
committerRich Felker <dalias@aerifal.cx>
Sat, 15 Sep 2012 03:38:10 +0000 (23:38 -0400)
I originally added -O3 for shared libraries to counteract very bad
behavior by GCC when building PIC code: it insists on reloading the
GOT register in static functions that need it, even if the address of
the function is never leaked from the translation unit and all local
callers of the function have already loaded the GOT register. this
measurably degrades performance in a few key areas like malloc. the
inlining done at -O3 avoids the issue, but that's really not a good
reason for overriding the user's choice of optimization level.

Makefile

index 21a2c8d64578c5f24b41ce266c624e9948f1e559..10c174ce48cb08878c21f201872ecd983b0417e2 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -32,7 +32,7 @@ CFLAGS_ALL = $(CFLAGS_C99FSE)
 CFLAGS_ALL += -D_XOPEN_SOURCE=700 -I./arch/$(ARCH) -I./src/internal -I./include
 CFLAGS_ALL += $(CPPFLAGS) $(CFLAGS)
 CFLAGS_ALL_STATIC = $(CFLAGS_ALL)
-CFLAGS_ALL_SHARED = $(CFLAGS_ALL) -fPIC -DSHARED -O3
+CFLAGS_ALL_SHARED = $(CFLAGS_ALL) -fPIC -DSHARED
 
 AR      = $(CROSS_COMPILE)ar
 RANLIB  = $(CROSS_COMPILE)ranlib