summaryrefslogtreecommitdiff
path: root/linker/linker.cpp
diff options
context:
space:
mode:
authorRyan Prichard <rprichard@google.com>2019-03-11 17:06:02 -0700
committerRyan Prichard <rprichard@google.com>2019-03-11 17:53:21 -0700
commitb0e2dd090bc74f36e3f2cafe85f542b785d760df (patch)
tree7d53a90d17baf773c9c9e8179074a21bf9c9a219 /linker/linker.cpp
parent7a15aa83f496e74456279cbe299eca971b5c441c (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.cpp5
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;
}