about summary refs log tree commit diff
path: root/dynamic.list
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2018-04-16 20:12:12 -0400
committerRich Felker <dalias@aerifal.cx>2018-04-17 19:23:00 -0400
commitb9410061e2ad6fe91bb3910c3adc7d4a315b7ce9 (patch)
treea651e123b301644c513cc5a79ca46d19b89680c7 /dynamic.list
parent4bf0717e5141518c1d34ac84253d3973be1fa260 (diff)
downloadmusl-b9410061e2ad6fe91bb3910c3adc7d4a315b7ce9.tar.gz
musl-b9410061e2ad6fe91bb3910c3adc7d4a315b7ce9.tar.xz
musl-b9410061e2ad6fe91bb3910c3adc7d4a315b7ce9.zip
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.
Diffstat (limited to 'dynamic.list')
-rw-r--r--dynamic.list35
1 files changed, 35 insertions, 0 deletions
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;
+};