about summary refs log tree commit diff
path: root/Makefile
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2011-02-24 16:37:21 -0500
committerRich Felker <dalias@aerifal.cx>2011-02-24 16:37:21 -0500
commit41d518360fd2da0f19d6a2f8d8c5f226b201c1e9 (patch)
tree5c977c65efcc6c6ce159e0a5fbcdd566b0ddf061 /Makefile
parent73d310e1d2b76cd14b9913bbc3d8e75be91be5a6 (diff)
downloadmusl-41d518360fd2da0f19d6a2f8d8c5f226b201c1e9.tar.gz
musl-41d518360fd2da0f19d6a2f8d8c5f226b201c1e9.tar.xz
musl-41d518360fd2da0f19d6a2f8d8c5f226b201c1e9.zip
various changes in preparation for dynamic linking support
prefer using visibility=hidden for __libc internal data, rather than
an accessor function, if the compiler has visibility.

optimize with -O3 for PIC targets (shared library). without heavy
inlining, reloading the GOT register in small functions kills
performance. 20-30% size increase for a single libc.so is not a big
deal, compared to comparaible size increase in every static binaries.

use -Bsymbolic-functions, not -Bsymbolic. global variables are subject
to COPY relocations, and thus binding their addresses in the library
at link time will cause library functions to read the wrong (original)
copies instead of the copies made in the main program's bss section.

add entry point, _start, for dynamic linker.
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile6
1 files changed, 3 insertions, 3 deletions
diff --git a/Makefile b/Makefile
index a47439b8..5c176423 100644
--- a/Makefile
+++ b/Makefile
@@ -21,16 +21,16 @@ LOBJS = $(OBJS:.o=.lo)
 GENH = include/bits/alltypes.h
 
 CFLAGS  = -Os -nostdinc -ffreestanding -std=c99 -D_XOPEN_SOURCE=700 -pipe
-LDFLAGS = -nostdlib -shared -Wl,-Bsymbolic
+LDFLAGS = -nostdlib -shared -fPIC -Wl,-e,_start -Wl,-Bsymbolic-functions
 INC     = -I./include -I./src/internal -I./arch/$(ARCH)
-PIC     = -fPIC
+PIC     = -fPIC -O3
 AR      = $(CROSS_COMPILE)ar
 RANLIB  = $(CROSS_COMPILE)ranlib
 OBJCOPY = $(CROSS_COMPILE)objcopy
 
 ALL_INCLUDES = $(sort $(wildcard include/*.h include/*/*.h) $(GENH))
 
-EMPTY_LIB_NAMES = m rt pthread crypt util xnet resolv
+EMPTY_LIB_NAMES = m rt pthread crypt util xnet resolv dl
 EMPTY_LIBS = $(EMPTY_LIB_NAMES:%=lib/lib%.a)
 CRT_LIBS = lib/crt1.o lib/crti.o lib/crtn.o
 LIBC_LIBS = lib/libc.a