[lld] r221424 - [mach-o] Add support for interposing tuples section

Nick Kledzik kledzik at apple.com
Wed Nov 5 17:14:09 PST 2014


Author: kledzik
Date: Wed Nov  5 19:14:09 2014
New Revision: 221424

URL: http://llvm.org/viewvc/llvm-project?rev=221424&view=rev
Log:
[mach-o] Add support for interposing tuples section

Darwin uses two-level-namespace lookup for symbols which means the static
linker records where each symbol must be found at runtime.  Thus defining a
symbol in a dylib loaded earlier will not effect where symbols needed by
later dylibs will be found.  Instead overriding is done through a section
of type S_INTERPOSING which contains tuples of <interposer, interposee>.

Added:
    lld/trunk/test/mach-o/interposing-section.yaml

Added: lld/trunk/test/mach-o/interposing-section.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/mach-o/interposing-section.yaml?rev=221424&view=auto
==============================================================================
--- lld/trunk/test/mach-o/interposing-section.yaml (added)
+++ lld/trunk/test/mach-o/interposing-section.yaml Wed Nov  5 19:14:09 2014
@@ -0,0 +1,79 @@
+# RUN: lld -flavor darwin -arch x86_64  %s -dylib -o %t %p/Inputs/libSystem.yaml
+# RUN: llvm-objdump -private-headers %t | FileCheck %s
+#
+# RUN: lld -flavor darwin -arch x86_64  %s -r -o %t1
+# RUN: llvm-objdump -private-headers %t1 | FileCheck %s
+#
+# Test that interposing section is preserved by linker.
+#
+
+--- !mach-o
+arch:            x86_64
+file-type:       MH_OBJECT
+flags:           [ MH_SUBSECTIONS_VIA_SYMBOLS ]
+sections:        
+  - segment:         __TEXT
+    section:         __text
+    type:            S_REGULAR
+    attributes:      [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
+    address:         0x0000000000000000
+    content:         [ 0x55, 0x48, 0x89, 0xE5, 0x31, 0xC0, 0x5D, 0xE9, 
+                       0x00, 0x00, 0x00, 0x00 ]
+    relocations:     
+      - offset:          0x00000008
+        type:            X86_64_RELOC_BRANCH
+        length:          2
+        pc-rel:          true
+        extern:          true
+        symbol:          2
+  - segment:         __DATA
+    section:         __interpose
+    type:            S_INTERPOSING
+    attributes:      [  ]
+    alignment:       3
+    address:         0x0000000000000010
+    content:         [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]
+    relocations:     
+      - offset:          0x00000008
+        type:            X86_64_RELOC_UNSIGNED
+        length:          3
+        pc-rel:          false
+        extern:          true
+        symbol:          2
+      - offset:          0x00000000
+        type:            X86_64_RELOC_UNSIGNED
+        length:          3
+        pc-rel:          false
+        extern:          true
+        symbol:          0
+local-symbols:   
+  - name:            _my_open
+    type:            N_SECT
+    sect:            1
+    value:           0x0000000000000000
+  - name:            __interpose_open
+    type:            N_SECT
+    sect:            2
+    desc:            [ N_NO_DEAD_STRIP ]
+    value:           0x0000000000000010
+undefined-symbols: 
+  - name:            _open
+    type:            N_UNDF
+    scope:           [ N_EXT ]
+    value:           0x0000000000000000
+    
+--- !mach-o
+arch:            x86_64
+file-type:       MH_DYLIB
+install-name:    /usr/lib/libSystem.B.dylib
+exports:
+  - name:            _open
+
+...
+
+
+# CHECK:	  sectname __interposing
+# CHECK:	   segname __DATA
+# CHECK:	      type S_INTERPOSING
+





More information about the llvm-commits mailing list