diff options
author | Rich Felker <dalias@aerifal.cx> | 2011-02-24 16:37:21 -0500 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2011-02-24 16:37:21 -0500 |
commit | 41d518360fd2da0f19d6a2f8d8c5f226b201c1e9 (patch) | |
tree | 5c977c65efcc6c6ce159e0a5fbcdd566b0ddf061 /Makefile | |
parent | 73d310e1d2b76cd14b9913bbc3d8e75be91be5a6 (diff) | |
download | musl-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-- | Makefile | 6 |
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 |