aboutsummaryrefslogtreecommitdiff
path: root/linker/Android.bp
diff options
context:
space:
mode:
authordimitry <dimitry@google.com>2018-01-05 13:35:43 +0100
committerdimitry <dimitry@google.com>2018-01-09 11:13:40 +0100
commit11da1dcd8c35f16a6e6bf869250ca06381e71dca (patch)
tree627146f228fee73aa8fadead8f62ee902626b390 /linker/Android.bp
parent8e8c2c001380ad98f2e239c0c840dad80ebec35c (diff)
downloadbionic-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.bp46
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,
+ },
+}