[lld] r259386 - Atomize the ObjC category list section.

Pete Cooper via llvm-commits llvm-commits at lists.llvm.org
Mon Feb 1 11:10:10 PST 2016


Author: pete
Date: Mon Feb  1 13:10:10 2016
New Revision: 259386

URL: http://llvm.org/viewvc/llvm-project?rev=259386&view=rev
Log:
Atomize the ObjC category list section.

__DATA, __objc_catlist contains a list of pointers to categories.

We want to atomize it so that the ObjC pass can later optimize and remove
categories.  That will be a later patch.

Added:
    lld/trunk/test/mach-o/objc-category-list-atom.yaml
Modified:
    lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileToAtoms.cpp

Modified: lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileToAtoms.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileToAtoms.cpp?rev=259386&r1=259385&r2=259386&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileToAtoms.cpp (original)
+++ lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileToAtoms.cpp Mon Feb  1 13:10:10 2016
@@ -89,6 +89,7 @@ const MachORelocatableSectionToAtomType
   ENTRY("__DATA", "__thread_bss",     S_THREAD_LOCAL_ZEROFILL,
                                                         typeTLVInitialZeroFill),
   ENTRY("__DATA", "__objc_imageinfo", S_REGULAR,          typeObjCImageInfo),
+  ENTRY("__DATA", "__objc_catlist",   S_REGULAR,          typeObjC2CategoryList),
   ENTRY("",       "",                 S_INTERPOSING,      typeInterposingTuples),
   ENTRY("__LD",   "__compact_unwind", S_REGULAR,
                                                          typeCompactUnwindInfo),
@@ -181,6 +182,8 @@ void sectionParseInfo(DefinedAtom::Conte
                                                             atomizeCU),
     ENTRY(typeGOT,               4, scopeLinkageUnit,     mergeByContent,
                                                             atomizePointerSize),
+    ENTRY(typeObjC2CategoryList, 4, scopeTranslationUnit, mergeByContent,
+                                                            atomizePointerSize),
     ENTRY(typeUnknown,           1, scopeGlobal,          mergeNo,
                                                             atomizeAtSymbols)
   };

Added: lld/trunk/test/mach-o/objc-category-list-atom.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/mach-o/objc-category-list-atom.yaml?rev=259386&view=auto
==============================================================================
--- lld/trunk/test/mach-o/objc-category-list-atom.yaml (added)
+++ lld/trunk/test/mach-o/objc-category-list-atom.yaml Mon Feb  1 13:10:10 2016
@@ -0,0 +1,70 @@
+# RUN: lld -flavor darwin -arch x86_64 -r -print_atoms %s -o %t | FileCheck %s
+# RUN: lld -flavor darwin -arch x86_64 -r -print_atoms %t -o %t2 | FileCheck %s
+
+
+--- !mach-o
+arch:            x86_64
+file-type:       MH_OBJECT
+flags:           [ MH_SUBSECTIONS_VIA_SYMBOLS ]
+compat-version:  0.0
+current-version: 0.0
+has-UUID:        false
+OS:              unknown
+sections:
+  - segment:         __DATA
+    section:         __objc_catlist
+    type:            S_REGULAR
+    attributes:      [ S_ATTR_NO_DEAD_STRIP ]
+    alignment:       8
+    address:         0x00000000000003F8
+    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:          0
+      - offset:          0x00000000
+        type:            X86_64_RELOC_UNSIGNED
+        length:          3
+        pc-rel:          false
+        extern:          true
+        symbol:          1
+undefined-symbols: 
+  - name:            __category1
+    type:            N_UNDF
+    scope:           [ N_EXT ]
+    value:           0x0000000000000000
+  - name:            __category2
+    type:            N_UNDF
+    scope:           [ N_EXT ]
+    value:           0x0000000000000000
+page-size:       0x00000000
+...
+
+# Make sure we atomize the category list section by pointer sized atoms.
+
+# CHECK: path:            '<linker-internal>'
+# CHECK: defined-atoms:   
+# CHECK:   - type:            objc-category-list
+# CHECK:     content:         [ 00, 00, 00, 00, 00, 00, 00, 00 ]
+# CHECK:     merge:           by-content
+# CHECK:     alignment:       8
+# CHECK:     references:      
+# CHECK:       - kind:            pointer64
+# CHECK:         offset:          0
+# CHECK:         target:          __category2
+# CHECK:   - type:            objc-category-list
+# CHECK:     content:         [ 00, 00, 00, 00, 00, 00, 00, 00 ]
+# CHECK:     merge:           by-content
+# CHECK:     alignment:       8
+# CHECK:     references:      
+# CHECK:       - kind:            pointer64
+# CHECK:         offset:          0
+# CHECK:         target:          __category1
+# CHECK: undefined-atoms: 
+# CHECK:   - name:            __category1
+# CHECK:   - name:            __category2
+# CHECK: ...




More information about the llvm-commits mailing list