diff options
author | Ryan Prichard <rprichard@google.com> | 2019-03-11 17:06:02 -0700 |
---|---|---|
committer | Ryan Prichard <rprichard@google.com> | 2019-03-11 17:53:21 -0700 |
commit | b0e2dd090bc74f36e3f2cafe85f542b785d760df (patch) | |
tree | 7d53a90d17baf773c9c9e8179074a21bf9c9a219 /linker/linker.cpp | |
parent | 7a15aa83f496e74456279cbe299eca971b5c441c (diff) |
Allow building the linker with -O0
The tlsdesc_resolver_dynamic function is only defined on arm64, but the
code was taking its address on all targets. (Apparently the optimizer was
removing the entire deferred_tlsdesc_relocs loop?)
Bug: none
Test: bionic unit tests
Test: add -O0 to cc_defaults in linker/Android.bp, device boots
Change-Id: I899c78018cbe82aeaca7856c9f7b04300c1d3196
Diffstat (limited to 'linker/linker.cpp')
-rw-r--r-- | linker/linker.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/linker/linker.cpp b/linker/linker.cpp index 56e85e4ed..fc6d10204 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -3133,7 +3133,7 @@ bool soinfo::relocate(const VersionTracker& version_tracker, ElfRelIteratorT&& r } } break; -#endif // defined(R_GENERIC_TLSDESC) +#endif // defined(__aarch64__) #if defined(__aarch64__) case R_AARCH64_ABS64: @@ -3305,11 +3305,14 @@ bool soinfo::relocate(const VersionTracker& version_tracker, ElfRelIteratorT&& r } } +#if defined(__aarch64__) + // Bionic currently only implements TLSDESC for arm64. for (const std::pair<TlsDescriptor*, size_t>& pair : deferred_tlsdesc_relocs) { TlsDescriptor* desc = pair.first; desc->func = tlsdesc_resolver_dynamic; desc->arg = reinterpret_cast<size_t>(&tlsdesc_args_[pair.second]); } +#endif return true; } |