Stop linking libdl.a into static bins
libdl.a has a no-op dlopen, which breaks static libraries that need a real dlopen. Instead of automatically linking libdl.a into static executables, make it optional. Until recently, the libunwind_llvm.a unwinder, used on arm32, needed the no-op dladdr, but it's now built using -D_LIBUNWIND_USE_DLADDR=0. The HWASan run-time uses dlsym and dladdr, so add a libdl dependency for HWASan-built static binaries. We could also remove the dependency from libclang_rt.hwasan_static-*.a, but this is also easy to do. Bug: http://b/141485154 Test: bionic unit tests, device boots, verify that static and dynamic executables can throw/catch an exception Test: verify that a static executable using dlopen doesn't link (unless it adds an explicit dependency on libdl) Change-Id: Ic52c3f336b671b4ed335e99c94a64dfe8614b618
This commit is contained in:
@@ -2239,7 +2239,7 @@ func TestStaticExecutable(t *testing.T) {
|
||||
variant := "android_arm64_armv8-a_core"
|
||||
binModuleRule := ctx.ModuleForTests("static_test", variant).Rule("ld")
|
||||
libFlags := binModuleRule.Args["libFlags"]
|
||||
systemStaticLibs := []string{"libc.a", "libm.a", "libdl.a"}
|
||||
systemStaticLibs := []string{"libc.a", "libm.a"}
|
||||
for _, lib := range systemStaticLibs {
|
||||
if !strings.Contains(libFlags, lib) {
|
||||
t.Errorf("Static lib %q was not found in %q", lib, libFlags)
|
||||
|
Reference in New Issue
Block a user