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
diff --git a/linker/linker.cpp b/linker/linker.cpp
index 56e85e4..fc6d102 100644
--- a/linker/linker.cpp
+++ b/linker/linker.cpp
@@ -3133,7 +3133,7 @@
}
}
break;
-#endif // defined(R_GENERIC_TLSDESC)
+#endif // defined(__aarch64__)
#if defined(__aarch64__)
case R_AARCH64_ABS64:
@@ -3305,11 +3305,14 @@
}
}
+#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;
}