[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