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: Id26741f79dca50256a2dc23453af3026a6c88dca
This commit is contained in:
parent
3322f6ec35
commit
acf8b0ff00
|
@ -182,7 +182,9 @@ ifneq ($(filter hwaddress,$(my_sanitize)),)
|
|||
my_shared_libraries += $($(LOCAL_2ND_ARCH_VAR_PREFIX)HWADDRESS_SANITIZER_RUNTIME_LIBRARY)
|
||||
ifneq ($(filter EXECUTABLES NATIVE_TESTS,$(LOCAL_MODULE_CLASS)),)
|
||||
ifeq ($(LOCAL_FORCE_STATIC_EXECUTABLE),true)
|
||||
my_static_libraries := $(my_static_libraries) $($(LOCAL_2ND_ARCH_VAR_PREFIX)HWADDRESS_SANITIZER_STATIC_LIBRARY)
|
||||
my_static_libraries := $(my_static_libraries) \
|
||||
$($(LOCAL_2ND_ARCH_VAR_PREFIX)HWADDRESS_SANITIZER_STATIC_LIBRARY) \
|
||||
libdl
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
|
|
@ -82,7 +82,7 @@ ifneq ($(filter $(my_cxx_stl),libc++ libc++_static),)
|
|||
endif
|
||||
|
||||
ifeq ($(my_link_type),static)
|
||||
my_static_libraries += libm libc libdl
|
||||
my_static_libraries += libm libc
|
||||
endif
|
||||
endif
|
||||
else ifeq ($(my_cxx_stl),ndk)
|
||||
|
|
Loading…
Reference in New Issue