[lld] 642ffbb - [lld-macho]Use install_name as Identifier for code-sign, if available.

Vy Nguyen via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 19 11:19:25 PDT 2023


Author: Vy Nguyen
Date: 2023-07-19T14:19:15-04:00
New Revision: 642ffbbf38bbe996a7934b3e607ca08151c76163

URL: https://github.com/llvm/llvm-project/commit/642ffbbf38bbe996a7934b3e607ca08151c76163
DIFF: https://github.com/llvm/llvm-project/commit/642ffbbf38bbe996a7934b3e607ca08151c76163.diff

LOG: [lld-macho]Use install_name  as Identifier for code-sign, if available.

Detail:
LD64 uses the name provided via  -[dylib]install_name as "Identifier", when available.
For compatiblity, LLD should do that too.

Differential Revision: https://reviews.llvm.org/D155508

Added: 
    

Modified: 
    lld/MachO/SyntheticSections.cpp
    lld/test/MachO/adhoc-codesign.s

Removed: 
    


################################################################################
diff  --git a/lld/MachO/SyntheticSections.cpp b/lld/MachO/SyntheticSections.cpp
index 00e97a5e972822..e123dcb6803c1e 100644
--- a/lld/MachO/SyntheticSections.cpp
+++ b/lld/MachO/SyntheticSections.cpp
@@ -1460,8 +1460,15 @@ static_assert((CodeSignatureSection::fixedHeadersSize % 8) == 0);
 CodeSignatureSection::CodeSignatureSection()
     : LinkEditSection(segment_names::linkEdit, section_names::codeSignature) {
   align = 16; // required by libstuff
-  // FIXME: Consider using finalOutput instead of outputFile.
-  fileName = config->outputFile;
+
+  // XXX: This mimics LD64, where it uses the install-name as codesign
+  // identifier, if available.
+  if (!config->installName.empty())
+    fileName = config->installName;
+  else
+    // FIXME: Consider using finalOutput instead of outputFile.
+    fileName = config->outputFile;
+
   size_t slashIndex = fileName.rfind("/");
   if (slashIndex != std::string::npos)
     fileName = fileName.drop_front(slashIndex + 1);

diff  --git a/lld/test/MachO/adhoc-codesign.s b/lld/test/MachO/adhoc-codesign.s
index ca08f40102c9f0..79503e0dd2624c 100644
--- a/lld/test/MachO/adhoc-codesign.s
+++ b/lld/test/MachO/adhoc-codesign.s
@@ -77,11 +77,30 @@
 # RUN: %no-arg-lld -arch arm64 -platform_version ios-simulator 14.0 15.0 -bundle  -no_adhoc_codesign -o %t/out %t/foo-arm64-sim.o
 # RUN: llvm-objdump --macho --all-headers %t/out| FileCheck --check-prefix=NO-ADHOC %s
 
+# RUN: %lld -arch x86_64 -dylib -o %t/out_installname.dylib -install_name @rpath/MyInstallName %t/foo-x86_64-macos.o -adhoc_codesign
+# RUN: %lld -arch x86_64 -dylib -o %t/out_no_installname.dylib %t/foo-x86_64-macos.o -adhoc_codesign
+
+## Smoke check to verify the dataoff and datasize value before using them with code-signature-check.py
+# RUN: llvm-objdump --macho --all-headers %t/out_installname.dylib | FileCheck %s --check-prefix CS-ID-PRE -D#DATA_OFFSET=4176 -D#DATA_SIZE=192 
+# RUN: llvm-objdump --macho --all-headers %t/out_no_installname.dylib | FileCheck %s --check-prefix CS-ID-PRE -D#DATA_OFFSET=4176 -D#DATA_SIZE=208 
+
+## Verify that the 'Identifier' (aka 'Code Directory ID') field are set to the install-name, if available.
+# RUN: %python %p/Inputs/code-signature-check.py %t/out_installname.dylib 4176 192 0 4176 | FileCheck %s --check-prefix CS-ID-INSTALL
+# RUN:  %python %p/Inputs/code-signature-check.py %t/out_no_installname.dylib 4176 208 0 4176 | FileCheck %s --check-prefix CS-ID-NO-INSTALL
+
 # ADHOC:          cmd LC_CODE_SIGNATURE
 # ADHOC-NEXT: cmdsize 16
 
 # NO-ADHOC-NOT:          cmd LC_CODE_SIGNATURE
 
+# CS-ID-PRE: cmd LC_CODE_SIGNATURE
+# CS-ID-PRE-NEXT: cmdsize 16
+# CS-ID-PRE-NEXT: dataoff [[#DATA_OFFSET]]
+# CS-ID-PRE-NEXT: datasize [[#DATA_SIZE]]
+
+# CS-ID-INSTALL: Code Directory ID: MyInstallName
+# CS-ID-NO-INSTALL: Code Directory ID: out_no_installname.dylib
+
 #--- foo.s
 .globl _foo
 _foo:


        


More information about the llvm-commits mailing list