[llvm] 2966d6e - [MachOYAML] Allow handcrafting custom contents for DWARF sections.

Xing GUO via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 4 07:43:15 PDT 2020


Author: Xing GUO
Date: 2020-09-04T22:42:45+08:00
New Revision: 2966d6e80b77c97f65805920d4d3288885de53c9

URL: https://github.com/llvm/llvm-project/commit/2966d6e80b77c97f65805920d4d3288885de53c9
DIFF: https://github.com/llvm/llvm-project/commit/2966d6e80b77c97f65805920d4d3288885de53c9.diff

LOG: [MachOYAML] Allow handcrafting custom contents for DWARF sections.

This patch enables users to handcraft custom contents for DWARF
sections. If we specify the contents of DWARF sections both in the
'DWARF' entry and the 'content', yaml2obj will emit an error message.
In addition, this patch helps remove the restriction that only the
content of sections whose segname are __DWARF can be specified in the
"DWARF" entry.

Reviewed By: jhenderson

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

Added: 
    llvm/test/ObjectYAML/MachO/dwarf-content-conflict.yaml

Modified: 
    llvm/lib/ObjectYAML/MachOEmitter.cpp
    llvm/test/ObjectYAML/MachO/DWARF-debug_ranges.yaml
    llvm/test/tools/llvm-dwarfdump/X86/verify_overlapping_cu_ranges.yaml
    llvm/test/tools/llvm-gsymutil/ARM_AArch64/fat-macho-dwarf.yaml
    llvm/test/tools/llvm-gsymutil/X86/mach-dwarf.yaml
    llvm/test/tools/obj2yaml/MachO/unrecognized-debug-section.yaml

Removed: 
    


################################################################################
diff  --git a/llvm/lib/ObjectYAML/MachOEmitter.cpp b/llvm/lib/ObjectYAML/MachOEmitter.cpp
index ecae386fd1ba..9eba391032b9 100644
--- a/llvm/lib/ObjectYAML/MachOEmitter.cpp
+++ b/llvm/lib/ObjectYAML/MachOEmitter.cpp
@@ -285,16 +285,20 @@ Error MachOWriter::writeSectionData(raw_ostream &OS) {
           return createStringError(
               errc::invalid_argument,
               "wrote too much data somewhere, section offsets don't line up");
-        if (0 == strncmp(&Sec.segname[0], "__DWARF", sizeof(Sec.segname))) {
-          StringRef SectName(Sec.sectname,
-                             strnlen(Sec.sectname, sizeof(Sec.sectname)));
-          if (Obj.DWARF.getNonEmptySectionNames().count(SectName.substr(2))) {
-            auto EmitFunc =
-                DWARFYAML::getDWARFEmitterByName(SectName.substr(2));
-            if (Error Err = EmitFunc(OS, Obj.DWARF))
-              return Err;
-          }
 
+        StringRef SectName(Sec.sectname,
+                           strnlen(Sec.sectname, sizeof(Sec.sectname)));
+        // If the section's content is specified in the 'DWARF' entry, we will
+        // emit it regardless of the section's segname.
+        if (Obj.DWARF.getNonEmptySectionNames().count(SectName.substr(2))) {
+          if (Sec.content)
+            return createStringError(errc::invalid_argument,
+                                     "cannot specify section '" + SectName +
+                                         "' contents in the 'DWARF' entry and "
+                                         "the 'content' at the same time");
+          auto EmitFunc = DWARFYAML::getDWARFEmitterByName(SectName.substr(2));
+          if (Error Err = EmitFunc(OS, Obj.DWARF))
+            return Err;
           continue;
         }
 

diff  --git a/llvm/test/ObjectYAML/MachO/DWARF-debug_ranges.yaml b/llvm/test/ObjectYAML/MachO/DWARF-debug_ranges.yaml
index fced0be79d38..8948bf92b7d7 100644
--- a/llvm/test/ObjectYAML/MachO/DWARF-debug_ranges.yaml
+++ b/llvm/test/ObjectYAML/MachO/DWARF-debug_ranges.yaml
@@ -93,7 +93,6 @@ LoadCommands:
         reserved1:       0x00000000
         reserved2:       0x00000000
         reserved3:       0x00000000
-        content:         011101030E1305110155170000022E00030E110112060000032E00030E11011201000000
       - sectname:        __debug_info
         segname:         __DWARF
         addr:            0x0000000000000024
@@ -106,7 +105,6 @@ LoadCommands:
         reserved1:       0x00000000
         reserved2:       0x00000000
         reserved3:       0x00000000
-        content:         520000000400000000000801010000000400000000000000000000000000020D000000000000000000000020000000031700000000000000000000003000000000000000022100000000100000000000000010000000
       - sectname:        __debug_ranges
         segname:         __DWARF
         addr:            0x000000000000007A
@@ -119,7 +117,6 @@ LoadCommands:
         reserved1:       0x00000000
         reserved2:       0x00000000
         reserved3:       0x00000000
-        content:         0000000000000000200000000000000000000000000000003000000000000000FFFFFFFFFFFFFFFF00100000000000000000000000000000001000000000000000000000000000000000000000000000
       - sectname:        __debug_str
         segname:         __DWARF
         addr:            0x00000000000000CA
@@ -132,7 +129,6 @@ LoadCommands:
         reserved1:       0x00000000
         reserved2:       0x00000000
         reserved3:       0x00000000
-        content:         002F746D702F6D61696E2E630073747269707065643100737472697070656432006D61696E00
   - cmd:             LC_SYMTAB
     cmdsize:         24
     symoff:          0

diff  --git a/llvm/test/ObjectYAML/MachO/dwarf-content-conflict.yaml b/llvm/test/ObjectYAML/MachO/dwarf-content-conflict.yaml
new file mode 100644
index 000000000000..a4b2b4810c5a
--- /dev/null
+++ b/llvm/test/ObjectYAML/MachO/dwarf-content-conflict.yaml
@@ -0,0 +1,45 @@
+## Test that yaml2obj emits an error message if we specify the DWARF section
+## contents both in the 'DWARF' entry and in the 'content'.
+
+# RUN: not yaml2obj %s 2>&1 | FileCheck %s --check-prefix=CONFLICT
+
+# CONFLICT: yaml2obj: error: cannot specify section '__debug_str' contents in the 'DWARF' entry and the 'content' at the same time
+
+--- !mach-o
+FileHeader:
+  magic:      0xFEEDFACF
+  cputype:    0x01000007
+  cpusubtype: 0x00000003
+  filetype:   0x0000000A
+  ncmds:      1
+  sizeofcmds: 232
+  flags:      0x00000000
+  reserved:   0x00000000
+LoadCommands:
+  - cmd:      LC_SEGMENT_64
+    cmdsize:  152
+    segname:  __DWARF
+    vmaddr:   0x00
+    vmsize:   0x00
+    fileoff:  0x00
+    filesize: 0x00
+    maxprot:  0
+    initprot: 0
+    nsects:   1
+    flags:    0
+    Sections:
+      - sectname:  __debug_str
+        segname:   __DWARF
+        addr:      0x00
+        size:      12
+        offset:    528
+        align:     0
+        reloff:    0x00000000
+        nreloc:    0
+        flags:     0x00000000
+        reserved1: 0x00000000
+        reserved2: 0x00000000
+        reserved3: 0x00000000
+        content:   1234
+DWARF:
+  debug_str: [ a, abc ]

diff  --git a/llvm/test/tools/llvm-dwarfdump/X86/verify_overlapping_cu_ranges.yaml b/llvm/test/tools/llvm-dwarfdump/X86/verify_overlapping_cu_ranges.yaml
index 0775de8907ea..b0970cdac8b2 100644
--- a/llvm/test/tools/llvm-dwarfdump/X86/verify_overlapping_cu_ranges.yaml
+++ b/llvm/test/tools/llvm-dwarfdump/X86/verify_overlapping_cu_ranges.yaml
@@ -101,7 +101,6 @@ LoadCommands:
         reserved1:       0x00000000
         reserved2:       0x00000000
         reserved3:       0x00000000
-        content:         011101030E1305110155170000022E00030E110112060000032E00030E11011201000000
       - sectname:        __debug_info
         segname:         __DWARF
         addr:            0x0000000000000024
@@ -114,7 +113,6 @@ LoadCommands:
         reserved1:       0x00000000
         reserved2:       0x00000000
         reserved3:       0x00000000
-        content:         630000000400000000000801010000000200000000000000000000000000020D0000000000000000000000200000000317000000000000000000000030000000000000000221000000001000000000000000100000022600000000200000000000000010000000
       - sectname:        __debug_ranges
         segname:         __DWARF
         addr:            0x000000000000008B
@@ -127,7 +125,6 @@ LoadCommands:
         reserved1:       0x00000000
         reserved2:       0x00000000
         reserved3:       0x00000000
-        content:         '0020000000000000003000000000000000000000000000002000000000000000000000000000000030000000000000000010000000000000002000000000000000000000000000000000000000000000'
       - sectname:        __debug_str
         segname:         __DWARF
         addr:            0x00000000000000DB
@@ -140,7 +137,6 @@ LoadCommands:
         reserved1:       0x00000000
         reserved2:       0x00000000
         reserved3:       0x00000000
-        content:         002F746D702F6D61696E2E630073747269707065643100737472697070656432006D61696E00666F6F00
   - cmd:             LC_SYMTAB
     cmdsize:         24
     symoff:          0

diff  --git a/llvm/test/tools/llvm-gsymutil/ARM_AArch64/fat-macho-dwarf.yaml b/llvm/test/tools/llvm-gsymutil/ARM_AArch64/fat-macho-dwarf.yaml
index d516b3704e71..0315e18795bc 100644
--- a/llvm/test/tools/llvm-gsymutil/ARM_AArch64/fat-macho-dwarf.yaml
+++ b/llvm/test/tools/llvm-gsymutil/ARM_AArch64/fat-macho-dwarf.yaml
@@ -139,7 +139,6 @@ Slices:
             reserved1:       0x00000000
             reserved2:       0x00000000
             reserved3:       0x00000000
-            content:         37000000040020000000010101FB0E0D000101010100000001000001006D61696E2E6370700000000000000502F0BF00000105020A9F0206000101
           - sectname:        __debug_pubnames
             segname:         __DWARF
             addr:            0x000000000000D03B
@@ -152,7 +151,6 @@ Slices:
             reserved1:       0x00000000
             reserved2:       0x00000000
             reserved3:       0x00000000
-            content:         1700000002000000000077000000260000006D61696E0000000000
           - sectname:        __debug_pubtypes
             segname:         __DWARF
             addr:            0x000000000000D056
@@ -165,7 +163,6 @@ Slices:
             reserved1:       0x00000000
             reserved2:       0x00000000
             reserved3:       0x00000000
-            content:         1F0000000200000000007700000059000000696E74006F000000636861720000000000
           - sectname:        __debug_aranges
             segname:         __DWARF
             addr:            0x000000000000D079
@@ -178,7 +175,6 @@ Slices:
             reserved1:       0x00000000
             reserved2:       0x00000000
             reserved3:       0x00000000
-            content:         1C000000020000000000040000000000F0BF0000100000000000000000000000
           - sectname:        __debug_info
             segname:         __DWARF
             addr:            0x000000000000D099
@@ -191,7 +187,6 @@ Slices:
             reserved1:       0x00000000
             reserved2:       0x00000000
             reserved3:       0x00000000
-            content:         73000000040000000000040101000000040031000000000000003A000000F0BF00001000000002F0BF00001000000001573F0000000101590000000103027D044400000001015900000003027D004900000001016000000000044E00000005040565000000056A000000066F0000000452000000060100
           - sectname:        __debug_abbrev
             segname:         __DWARF
             addr:            0x000000000000D110
@@ -204,7 +199,6 @@ Slices:
             reserved1:       0x00000000
             reserved2:       0x00000000
             reserved3:       0x00000000
-            content:         011101250E1305030E10171B0EB44219110112060000022E01110112064018030E3A0B3B0B49103F19E37F0C00000305000218030E3A0B3B0B49100000042400030E3E0B0B0B0000050F00491000000626004910000000
           - sectname:        __debug_str
             segname:         __DWARF
             addr:            0x000000000000D167
@@ -217,7 +211,6 @@ Slices:
             reserved1:       0x00000000
             reserved2:       0x00000000
             reserved3:       0x00000000
-            content:         004170706C6520636C616E672076657273696F6E2031312E302E302028636C616E672D313130302E302E33332E313729006D61696E2E637070002F746D70006D61696E0061726763006172677600696E74006368617200
           - sectname:        __apple_names
             segname:         __DWARF
             addr:            0x000000000000D1BE
@@ -614,7 +607,6 @@ Slices:
             reserved1:       0x00000000
             reserved2:       0x00000000
             reserved3:       0x00000000
-            content:         3B000000040020000000010101FB0E0D000101010100000001000001006D61696E2E63707000000000000009029C7F0000010000000105020AF3020C000101
           - sectname:        __debug_pubnames
             segname:         __DWARF
             addr:            0x000000010000903F
@@ -627,7 +619,6 @@ Slices:
             reserved1:       0x00000000
             reserved2:       0x00000000
             reserved3:       0x00000000
-            content:         170000000200000000007E0000002A0000006D61696E0000000000
           - sectname:        __debug_pubtypes
             segname:         __DWARF
             addr:            0x000000010000905A
@@ -640,7 +631,6 @@ Slices:
             reserved1:       0x00000000
             reserved2:       0x00000000
             reserved3:       0x00000000
-            content:         1F0000000200000000007E00000060000000696E740076000000636861720000000000
           - sectname:        __debug_aranges
             segname:         __DWARF
             addr:            0x000000010000907D
@@ -653,7 +643,6 @@ Slices:
             reserved1:       0x00000000
             reserved2:       0x00000000
             reserved3:       0x00000000
-            content:         2C0000000200000000000800000000009C7F0000010000001C0000000000000000000000000000000000000000000000
           - sectname:        __debug_info
             segname:         __DWARF
             addr:            0x00000001000090AD
@@ -666,7 +655,6 @@ Slices:
             reserved1:       0x00000000
             reserved2:       0x00000000
             reserved3:       0x00000000
-            content:         7A000000040000000000080101000000040031000000000000003A0000009C7F0000010000001C000000029C7F0000010000001C000000016F3F0000000101600000000302910844000000010160000000030291004900000001016700000000044E0000000504056C000000057100000006760000000452000000060100
           - sectname:        __debug_abbrev
             segname:         __DWARF
             addr:            0x000000010000912B
@@ -679,7 +667,6 @@ Slices:
             reserved1:       0x00000000
             reserved2:       0x00000000
             reserved3:       0x00000000
-            content:         011101250E1305030E10171B0EB44219110112060000022E01110112064018030E3A0B3B0B49103F1900000305000218030E3A0B3B0B49100000042400030E3E0B0B0B0000050F00491000000626004910000000
           - sectname:        __debug_str
             segname:         __DWARF
             addr:            0x000000010000917F
@@ -692,7 +679,6 @@ Slices:
             reserved1:       0x00000000
             reserved2:       0x00000000
             reserved3:       0x00000000
-            content:         004170706C6520636C616E672076657273696F6E2031312E302E302028636C616E672D313130302E302E33332E313729006D61696E2E637070002F746D70006D61696E0061726763006172677600696E74006368617200
           - sectname:        __apple_names
             segname:         __DWARF
             addr:            0x00000001000091D6

diff  --git a/llvm/test/tools/llvm-gsymutil/X86/mach-dwarf.yaml b/llvm/test/tools/llvm-gsymutil/X86/mach-dwarf.yaml
index a1d3a50c6c82..8a358ea0700c 100644
--- a/llvm/test/tools/llvm-gsymutil/X86/mach-dwarf.yaml
+++ b/llvm/test/tools/llvm-gsymutil/X86/mach-dwarf.yaml
@@ -215,7 +215,6 @@ LoadCommands:
         reserved1:       0x00000000
         reserved2:       0x00000000
         reserved3:       0x00000000
-        content:         66000000040020000000010101FB0E0D000101010100000001000001006D61696E2E6370700000000000000902700F00000100000001050C0A75050B063C05033C0204000101000902900F00000100000015050E0A083D050C63050B063C0506063F05023D0202000101
       - sectname:        __debug_pubnames
         segname:         __DWARF
         addr:            0x000000010000206A
@@ -228,7 +227,6 @@ LoadCommands:
         reserved1:       0x00000000
         reserved2:       0x00000000
         reserved3:       0x00000000
-        content:         2B000000020000000000E00000002A0000005F5A33666F6F69002A000000666F6F00690000006D61696E0000000000
       - sectname:        __debug_pubtypes
         segname:         __DWARF
         addr:            0x0000000100002099
@@ -241,7 +239,6 @@ LoadCommands:
         reserved1:       0x00000000
         reserved2:       0x00000000
         reserved3:       0x00000000
-        content:         1F000000020000000000E000000062000000696E7400D8000000636861720000000000
       - sectname:        __debug_aranges
         segname:         __DWARF
         addr:            0x00000001000020BC
@@ -254,7 +251,6 @@ LoadCommands:
         reserved1:       0x00000000
         reserved2:       0x00000000
         reserved3:       0x00000000
-        content:         3C000000020000000000080000000000700F0000010000001100000000000000900F000001000000250000000000000000000000000000000000000000000000
       - sectname:        __debug_info
         segname:         __DWARF
         addr:            0x00000001000020FC
@@ -267,7 +263,6 @@ LoadCommands:
         reserved1:       0x00000000
         reserved2:       0x00000000
         reserved3:       0x00000000
-        content:         DC000000040000000000080101000000040031000000000000003A000000700F0000010000004500000002700F000001000000110000000156460000000302917C5600000000043F0000004700000001016200000001054B00000001016200000000064D000000050407900F000001000000250000000156510000000104620000000802917456000000010462000000080291685B0000000104C9000000090291644B0000000105620000000A46000000AA0F0000010000000600000001050302917C5600000000000BCE0000000BD30000000CD80000000660000000060100
       - sectname:        __debug_abbrev
         segname:         __DWARF
         addr:            0x00000001000021DC
@@ -280,7 +275,6 @@ LoadCommands:
         reserved1:       0x00000000
         reserved2:       0x00000000
         reserved3:       0x00000000
-        content:         011101250E1305030E10171B0EB44219110112060000022E0111011206401831100000030500021831100000042E016E0E030E3A0B3B0B49103F19200B0000050500030E3A0B3B0B49100000062400030E3E0B0B0B0000072E01110112064018030E3A0B3B0B49103F1900000805000218030E3A0B3B0B491000000934000218030E3A0B3B0B491000000A1D01311011011206580B590B00000B0F00491000000C26004910000000
       - sectname:        __debug_str
         segname:         __DWARF
         addr:            0x0000000100002284
@@ -293,7 +287,6 @@ LoadCommands:
         reserved1:       0x00000000
         reserved2:       0x00000000
         reserved3:       0x00000000
-        content:         004170706C6520636C616E672076657273696F6E2031312E302E302028636C616E672D313130302E302E33332E313729006D61696E2E637070002F746D70005F5A33666F6F6900666F6F006900696E74006D61696E00617267630061726776006368617200
       - sectname:        __apple_names
         segname:         __DWARF
         addr:            0x00000001000022E9

diff  --git a/llvm/test/tools/obj2yaml/MachO/unrecognized-debug-section.yaml b/llvm/test/tools/obj2yaml/MachO/unrecognized-debug-section.yaml
index 161805b30834..4583fdde27fb 100644
--- a/llvm/test/tools/obj2yaml/MachO/unrecognized-debug-section.yaml
+++ b/llvm/test/tools/obj2yaml/MachO/unrecognized-debug-section.yaml
@@ -1,16 +1,11 @@
 ## Test that macho2yaml dumps the __debug_foo section (unrecognized debug section)
 ## as a raw content section.
 
-## Due to the current implementation of yaml2macho being buggy, we cannot generate a DWARF section
-## where the sectname starts with '__debug_' and the segname is '__DWARF', from a raw content section.
-## We've slightly modified the segname to be '__FOO'. macho2yaml will still treat it as a debug
-## section.
-
 # RUN: yaml2obj %s | obj2yaml | FileCheck %s --check-prefix=UNRECOGNIZED
 
 #      UNRECOGNIZED: Sections:
 # UNRECOGNIZED-NEXT:   - sectname:        __debug_foo
-# UNRECOGNIZED-NEXT:     segname:         __FOO
+# UNRECOGNIZED-NEXT:     segname:         __DWARF
 # UNRECOGNIZED-NEXT:     addr:            0x0000000000000000
 # UNRECOGNIZED-NEXT:     size:            5
 # UNRECOGNIZED-NEXT:     offset:          0x00000210
@@ -48,7 +43,7 @@ LoadCommands:
     flags:    0
     Sections:
       - sectname:  __debug_foo
-        segname:   __FOO
+        segname:   __DWARF
         addr:      0x00
         size:      5
         offset:    528


        


More information about the llvm-commits mailing list