From b9410061e2ad6fe91bb3910c3adc7d4a315b7ce9 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Mon, 16 Apr 2018 20:12:12 -0400 Subject: use explicit dynamic-list rather than symbolic-functions for linking we have always bound symbols at libc.so link time rather than runtime to minimize startup-time relocations and overhead of calls through the PLT, and possibly also to preclude interposition that would not work correctly anyway if allowed. historically, binding at link-time was also necessary for the dynamic linker to work, but the dynamic linker bootstrap overhaul in commit f3ddd173806fd5c60b3f034528ca24542aecc5b9 made it unnecessary. our use of -Bsymbolic-functions, rather than -Bsymbolic, was chosen because the latter is incompatible with public global data; it makes it incompatible with copy relocations in the main program. however, not all global data needs to be public. by using --dynamic-list instead with an explicit list, we can reduce the number of symbolic relocations left for runtime. this change will also allow us to permit interposition of specific functions (e.g. the allocator) if/when we want to, by adding them to the dynamic list. --- dynamic.list | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 dynamic.list (limited to 'dynamic.list') diff --git a/dynamic.list b/dynamic.list new file mode 100644 index 00000000..8b4f2366 --- /dev/null +++ b/dynamic.list @@ -0,0 +1,35 @@ +{ +environ; +__environ; + +stdin; +stdout; +stderr; + +timezone; +daylight; +tzname; +__timezone; +__daylight; +__tzname; + +signgam; +__signgam; + +optarg; +optind; +opterr; +optreset; +__optreset; + +getdate_err; + +h_errno; + +program_invocation_name; +program_invocation_short_name; +__progname; +__progname_full; + +__stack_chk_guard; +}; -- cgit v1.2.1