diff options
author | dimitry <dimitry@google.com> | 2018-01-05 13:35:43 +0100 |
---|---|---|
committer | dimitry <dimitry@google.com> | 2018-01-09 11:13:40 +0100 |
commit | 11da1dcd8c35f16a6e6bf869250ca06381e71dca (patch) | |
tree | 627146f228fee73aa8fadead8f62ee902626b390 /linker/Android.bp | |
parent | 8e8c2c001380ad98f2e239c0c840dad80ebec35c (diff) | |
download | bionic-11da1dcd8c35f16a6e6bf869250ca06381e71dca.tar.gz |
Move ld-android.so build under linker/
This will allow us to apply linker's version script to the "fake"
version of ld-android.so.
Test: make
Change-Id: I55645cc0fc90e6c65e2269ba2340a908aeed1eaa
Diffstat (limited to 'linker/Android.bp')
-rw-r--r-- | linker/Android.bp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/linker/Android.bp b/linker/Android.bp index a4b4573b1..20eb7a25e 100644 --- a/linker/Android.bp +++ b/linker/Android.bp @@ -221,3 +221,49 @@ cc_binary { // looking up symbols in the linker by mistake. prefix_symbols: "__dl_", } + +cc_library { + // NOTE: --exclude-libs=libgcc.a makes sure that any symbols ld-android.so pulls from + // libgcc.a are made static to ld-android.so. This in turn ensures that libraries that + // a) pull symbols from libgcc.a and b) depend on ld-android.so will not rely on ld-android.so + // to provide those symbols, but will instead pull them from libgcc.a. Specifically, + // we use this property to make sure libc.so has its own copy of the code from + // libgcc.a it uses. + // + // DO NOT REMOVE --exclude-libs! + + ldflags: ["-Wl,--exclude-libs=libgcc.a"], + + // for x86, exclude libgcc_eh.a for the same reasons as above + arch: { + x86: { + ldflags: ["-Wl,--exclude-libs=libgcc_eh.a"], + }, + x86_64: { + ldflags: ["-Wl,--exclude-libs=libgcc_eh.a"], + }, + }, + srcs: ["ld_android.c"], + cflags: [ + "-Wall", + "-Wextra", + "-Wunused", + "-Werror", + ], + stl: "none", + + name: "ld-android", + defaults: ["linux_bionic_supported"], + + // NOTE: ld-android.so needs __aeabi_unwind_cpp_pr0 from libgcc.a but libgcc.a + // needs a few symbols from libc. Using --no-undefined here results in having to + // link against libc creating a circular dependency which is removed and we end + // up with missing symbols. Since this library is just a bunch of stubs, we set + // allow_undefined_symbols to remove --no-undefined from the linker flags. + allow_undefined_symbols: true, + system_shared_libs: [], + + sanitize: { + never: true, + }, +} |