Switch libc.so and linker to prebuilt LLVM libunwind
For libc.so, use a special build of libunwind.a whose symbols aren't
hidden ("libunwind-exported"), because libc.so exports the _Unwind_*
APIs.
Bug: http://b/153025717
Test: bionic unit tests
Change-Id: I7435e076ec8cc4410e3e6086d3cf5d2c6011c80c
diff --git a/libc/Android.bp b/libc/Android.bp
index 10f4311..cdd5473 100644
--- a/libc/Android.bp
+++ b/libc/Android.bp
@@ -1631,6 +1631,7 @@
"gwp_asan",
"libc_init_dynamic",
"libc_common_shared",
+ "libunwind-exported",
],
},
@@ -1672,8 +1673,6 @@
srcs: [":libc_sources_shared_arm"],
// special for arm
cflags: ["-DCRT_LEGACY_WORKAROUND"],
-
- whole_static_libs: [ "libunwind_llvm" ],
},
// Arm 32 bit does not produce complete exidx unwind information
@@ -1692,10 +1691,6 @@
strip: {
keep_symbols: true,
},
-
- shared: {
- whole_static_libs: [ "libgcc_stripped" ],
- },
},
x86: {
// TODO: This is to work around b/24465209. Remove after root cause is fixed.
@@ -1709,10 +1704,6 @@
strip: {
keep_symbols: true,
},
-
- shared: {
- whole_static_libs: [ "libgcc_stripped" ],
- },
},
x86_64: {
version_script: ":libc.x86_64.map",
@@ -1722,10 +1713,6 @@
strip: {
keep_symbols: true,
},
-
- shared: {
- whole_static_libs: [ "libgcc_stripped" ],
- },
},
},
diff --git a/linker/Android.bp b/linker/Android.bp
index 3ebae59..efda312 100644
--- a/linker/Android.bp
+++ b/linker/Android.bp
@@ -232,19 +232,15 @@
arch: {
arm: {
srcs: [":linker_sources_arm"],
- static_libs: ["libunwind_llvm"],
},
arm64: {
srcs: [":linker_sources_arm64"],
- static_libs: ["libgcc_stripped"],
},
x86: {
srcs: [":linker_sources_x86"],
- static_libs: ["libgcc_stripped"],
},
x86_64: {
srcs: [":linker_sources_x86_64"],
- static_libs: ["libgcc_stripped"],
},
},
@@ -292,6 +288,7 @@
"libc_nomalloc",
"libc_dynamic_dispatch",
"libm",
+ "libunwind",
],
// Ensure that if the linker needs __gnu_Unwind_Find_exidx, then the linker will have a