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.
This commit is contained in:
Rich Felker
2011-02-24 16:37:21 -05:00
parent 73d310e1d2
commit 41d518360f
4 changed files with 24 additions and 8 deletions

View File

@ -1,6 +1,6 @@
#include "libc.h"
#ifdef __PIC__
#ifdef USE_LIBC_ACCESSOR
struct __libc *__libc_loc()
{
static struct __libc __libc;