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
diff --git a/linker/Android.bp b/linker/Android.bp
index a4b4573..20eb7a2 100644
--- a/linker/Android.bp
+++ b/linker/Android.bp
@@ -221,3 +221,49 @@
// 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,
+ },
+}