[llvm] [BOLT] Support instrumentation hook via DT_INIT_ARRAY (PR #167467)

Paschalis Mpeis via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 12 06:42:48 PST 2025


================
@@ -1407,6 +1414,55 @@ void RewriteInstance::discoverBOLTReserved() {
   NextAvailableAddress = BC->BOLTReserved.start();
 }
 
+Error RewriteInstance::discoverRtInitAddress() {
+  if (BC->HasInterpHeader && !opts::InstrumentNoUseEntryPoint)
+    return Error::success();
+
+  // Use DT_INIT if it's available.
+  if (BC->InitAddress) {
+    BC->StartFunctionAddress = BC->InitAddress;
+    return Error::success();
+  }
+
+  if (!BC->InitArrayAddress || !BC->InitArraySize) {
+    return createStringError(std::errc::not_supported,
+                             "Instrumentation of shared library needs either "
+                             "DT_INIT or DT_INIT_ARRAY");
+  }
+
+  if (*BC->InitArraySize < BC->AsmInfo->getCodePointerSize()) {
+    return createStringError(std::errc::not_supported,
+                             "Need at least 1 DT_FINI_ARRAY slot");
----------------
paschalis-mpeis wrote:

typo?
```suggestion
                             "Need at least 1 DT_INIT_ARRAY slot");
```

https://github.com/llvm/llvm-project/pull/167467


More information about the llvm-commits mailing list