[compiler-rt] [ORC-RT] Fix ptrauth signing for dlsym return value (PR #75972)

Ben Langmuir via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 19 13:52:07 PST 2023


https://github.com/benlangmuir created https://github.com/llvm/llvm-project/pull/75972

dlsym signs text symbols as functions rather than data in dyld, so match that for orc runtime dlsym. This fixes run_program on arm64e.

>From 3878f0ffa4f97b132f05693ea8873970b5031f10 Mon Sep 17 00:00:00 2001
From: Ben Langmuir <blangmuir at apple.com>
Date: Tue, 19 Dec 2023 13:32:56 -0800
Subject: [PATCH] [ORC-RT] Fix ptrauth signing for dlsym return value

dlsym signs text symbols as functions rather than data in dyld, so match
that for orc runtime dlsym. This fixes run_program on arm64e.
---
 compiler-rt/lib/orc/macho_platform.cpp | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/compiler-rt/lib/orc/macho_platform.cpp b/compiler-rt/lib/orc/macho_platform.cpp
index e3a1cdf3c4fcc3..340846f5f90017 100644
--- a/compiler-rt/lib/orc/macho_platform.cpp
+++ b/compiler-rt/lib/orc/macho_platform.cpp
@@ -825,6 +825,10 @@ void *MachOPlatformRuntimeState::dlsym(void *DSOHandle, const char *Symbol) {
     return nullptr;
   }
 
+  // Sign callable symbols as functions, to match dyld.
+  if ((Result.second & MachOExecutorSymbolFlags::Callable) ==
+      MachOExecutorSymbolFlags::Callable)
+    return reinterpret_cast<void *>(Result.first.toPtr<void(void)>());
   return Result.first.toPtr<void *>();
 }
 



More information about the llvm-commits mailing list