[lld] [lld] load rpaths from tbd files (PR #134925)

via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 8 13:20:33 PDT 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-lld

Author: Richard Howell (rmaz)

<details>
<summary>Changes</summary>

TBD files can contain rpaths, add support for setting them in DylibFile during construction.

---
Full diff: https://github.com/llvm/llvm-project/pull/134925.diff


2 Files Affected:

- (modified) lld/MachO/InputFiles.cpp (+2) 
- (added) lld/test/MachO/tapi-rpath.s (+87) 


``````````diff
diff --git a/lld/MachO/InputFiles.cpp b/lld/MachO/InputFiles.cpp
index 9adfbc9d3f6f5..97b3ed8eb537d 100644
--- a/lld/MachO/InputFiles.cpp
+++ b/lld/MachO/InputFiles.cpp
@@ -1879,6 +1879,8 @@ DylibFile::DylibFile(const InterfaceFile &interface, DylibFile *umbrella,
   installName = saver().save(interface.getInstallName());
   compatibilityVersion = interface.getCompatibilityVersion().rawValue();
   currentVersion = interface.getCurrentVersion().rawValue();
+  for (auto rpath : interface.rpaths())
+        rpaths.push_back(saver().save(rpath.second));
 
   if (config->printEachFile)
     message(toString(this));
diff --git a/lld/test/MachO/tapi-rpath.s b/lld/test/MachO/tapi-rpath.s
new file mode 100644
index 0000000000000..48032f28a6ce6
--- /dev/null
+++ b/lld/test/MachO/tapi-rpath.s
@@ -0,0 +1,87 @@
+# REQUIRES: aarch64, shell
+# RUN: rm -rf %t; split-file %s %t
+# RUN: ln -s Versions/A/Developer %t/Developer/Library/Frameworks/Developer.framework/
+# RUN: ln -s Versions/A/DeveloperCore %t/Developer/Library/PrivateFrameworks/DeveloperCore.framework/
+# RUN: llvm-mc -filetype obj -triple arm64-apple-macos11.0 %t/test.s -o %t/test.o
+# RUN: %lld -arch arm64 -platform_version macos 11.0 11.0 -o %t/test -framework Developer -F %t/Developer/Library/Frameworks %t/test.o
+
+# RUN: llvm-objdump --bind --no-show-raw-insn -d %t/test | FileCheck %s
+# CHECK:     Bind table:
+# CHECK-DAG: __DATA __data {{.*}} pointer 0 Developer         _funcPublic
+# CHECK-DAG: __DATA __data {{.*}} pointer 0 Developer         _funcCore
+
+#--- Developer/Library/Frameworks/Developer.framework/Versions/A/Developer
+{
+  "tapi_tbd_version": 5,
+  "main_library": {
+    "target_info": [
+      {
+        "target": "arm64-macos"
+      }
+    ],
+    "install_names": [
+      {
+        "name": "@rpath/Developer.framework/Versions/A/Developer"
+      }
+    ],
+    "rpaths": [
+      {
+        "paths": [
+          "@loader_path/../../../../PrivateFrameworks/"
+        ]
+      }
+    ],
+    "reexported_libraries": [
+      {
+        "names": [
+          "@rpath/DeveloperCore.framework/Versions/A/DeveloperCore"
+        ]
+      }
+    ],
+    "exported_symbols": [
+      {
+        "text": {
+          "global": ["_funcPublic"]
+        }
+      }
+    ]
+  }
+}
+#--- Developer/Library/PrivateFrameworks/DeveloperCore.framework/Versions/A/DeveloperCore
+{
+  "tapi_tbd_version": 5,
+  "main_library": {
+    "target_info": [
+      {
+        "target": "arm64-macos"
+      }
+    ],
+    "install_names": [
+      {
+        "name": "@rpath/DeveloperCore.framework/Versions/A/DeveloperCore"
+      }
+    ],
+    "allowable_clients": [
+      {
+        "clients": ["Developer"]
+      }
+    ],
+    "exported_symbols": [
+      {
+        "text": {
+          "global": ["_funcCore"]
+        }
+      }
+    ]
+  }
+}
+#--- test.s
+.text
+.globl _main
+
+_main:
+  ret
+
+.data
+  .quad _funcPublic
+  .quad _funcCore

``````````

</details>


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


More information about the llvm-commits mailing list