From 7a55a4b35869b5c96dd77d83e73ce56006391189 Mon Sep 17 00:00:00 2001 From: Ryan Mansfield Date: Sun, 31 May 2026 19:21:08 -0400 Subject: [PATCH] Use raw .debug_line bytes for Mach-O dwarfv5 inlines test yaml2obj's dwarfv5 debug_line support is incomplete and newer versions require an AddressSize key. To avoid incompatibilities with the pinned CI yaml2obj and newer versions, switch to using raw bytes which should work for all versions of yaml2obj. Also add a dwarfv4 version of the test. --- tests/macho/inlines-dwarf4.test | 468 ++++++++++++++++++++++++++++++++ tests/macho/inlines.test | 115 +++----- 2 files changed, 500 insertions(+), 83 deletions(-) create mode 100644 tests/macho/inlines-dwarf4.test diff --git a/tests/macho/inlines-dwarf4.test b/tests/macho/inlines-dwarf4.test new file mode 100644 index 00000000..e7c075d7 --- /dev/null +++ b/tests/macho/inlines-dwarf4.test @@ -0,0 +1,468 @@ +# Test -d inlines for Mach-O with DWARF v4 debug info. + +## Test inlines data source with DWARF v4 dSYM debug info +# RUN: %yaml2obj --docnum=1 %s -o %t.binary +# RUN: %yaml2obj --docnum=2 %s -o %t.dsym +# RUN: %bloaty %t.binary --debug-file=%t.dsym -d inlines --domain=vm | %FileCheck %s + +# CHECK: VM SIZE +# CHECK-DAG: test_inlines.c:5 +# CHECK-DAG: test_inlines.c:9 +# CHECK-DAG: test_inlines.c:14 + +--- !mach-o +FileHeader: + magic: 0xFEEDFACF + cputype: 0x100000C + cpusubtype: 0x0 + filetype: 0x2 + ncmds: 16 + sizeofcmds: 744 + flags: 0x200085 + reserved: 0x0 +LoadCommands: + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: __PAGEZERO + vmaddr: 0 + vmsize: 4294967296 + fileoff: 0 + filesize: 0 + maxprot: 0 + initprot: 0 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 232 + segname: __TEXT + vmaddr: 4294967296 + vmsize: 16384 + fileoff: 0 + filesize: 16384 + maxprot: 5 + initprot: 5 + nsects: 2 + flags: 0 + Sections: + - sectname: __text + segname: __TEXT + addr: 0x100000328 + size: 20 + offset: 0x328 + align: 2 + reloff: 0x0 + nreloc: 0 + flags: 0x80000400 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + content: 0804000B00150011C0035FD660048052C0035FD6 + - sectname: __unwind_info + segname: __TEXT + addr: 0x10000033C + size: 88 + offset: 0x33C + align: 2 + reloff: 0x0 + nreloc: 0 + flags: 0x0 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + content: 010000001C000000000000001C000000000000001C000000020000002803000040000000400000003C0300000000000040000000000000000000000000000000030000000C00010010000100000000000000000200000000 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: __LINKEDIT + vmaddr: 4294983680 + vmsize: 16384 + fileoff: 16384 + filesize: 848 + maxprot: 1 + initprot: 1 + nsects: 0 + flags: 0 + - cmd: LC_DYLD_CHAINED_FIXUPS + cmdsize: 16 + dataoff: 16384 + datasize: 56 + - cmd: LC_DYLD_EXPORTS_TRIE + cmdsize: 16 + dataoff: 16440 + datasize: 72 + - cmd: LC_SYMTAB + cmdsize: 24 + symoff: 16520 + nsyms: 16 + stroff: 16776 + strsize: 111 + - cmd: LC_DYSYMTAB + cmdsize: 80 + ilocalsym: 0 + nlocalsym: 13 + iextdefsym: 13 + nextdefsym: 3 + iundefsym: 16 + nundefsym: 0 + tocoff: 0 + ntoc: 0 + modtaboff: 0 + nmodtab: 0 + extrefsymoff: 0 + nextrefsyms: 0 + indirectsymoff: 0 + nindirectsyms: 0 + extreloff: 0 + nextrel: 0 + locreloff: 0 + nlocrel: 0 + - cmd: LC_LOAD_DYLINKER + cmdsize: 32 + name: 12 + Content: '/usr/lib/dyld' + ZeroPadBytes: 7 + - cmd: LC_UUID + cmdsize: 24 + uuid: 23DDA184-79C3-3900-9D6F-B8E82011BEBD + - cmd: LC_BUILD_VERSION + cmdsize: 32 + platform: 1 + minos: 0 + sdk: 0 + ntools: 1 + Tools: + - tool: 3 + version: 0 + - cmd: LC_SOURCE_VERSION + cmdsize: 16 + version: 0 + - cmd: LC_MAIN + cmdsize: 24 + entryoff: 820 + stacksize: 0 + - cmd: LC_LOAD_DYLIB + cmdsize: 56 + dylib: + name: 24 + timestamp: 2 + current_version: 0 + compatibility_version: 65536 + Content: '/usr/lib/libSystem.B.dylib' + ZeroPadBytes: 6 + - cmd: LC_FUNCTION_STARTS + cmdsize: 16 + dataoff: 16512 + datasize: 8 + - cmd: LC_DATA_IN_CODE + cmdsize: 16 + dataoff: 16520 + datasize: 0 + - cmd: LC_CODE_SIGNATURE + cmdsize: 16 + dataoff: 16944 + datasize: 288 +LinkEditData: + ExportTrie: + TerminalSize: 0 + NodeOffset: 0 + Name: '' + Flags: 0x0 + Address: 0x0 + Other: 0x0 + ImportName: '' + Children: + - TerminalSize: 0 + NodeOffset: 23 + Name: _ + Flags: 0x0 + Address: 0x0 + Other: 0x0 + ImportName: '' + Children: + - TerminalSize: 2 + NodeOffset: 9 + Name: _mh_execute_header + Flags: 0x0 + Address: 0x0 + Other: 0x0 + ImportName: '' + - TerminalSize: 3 + NodeOffset: 13 + Name: external_call + Flags: 0x0 + Address: 0x328 + Other: 0x0 + ImportName: '' + - TerminalSize: 3 + NodeOffset: 18 + Name: main + Flags: 0x0 + Address: 0x334 + Other: 0x0 + ImportName: '' + NameList: + - n_strx: 1 + n_type: 0x64 + n_sect: 1 + n_desc: 0 + n_value: 0 + - n_strx: 43 + n_type: 0x64 + n_sect: 0 + n_desc: 0 + n_value: 0 + - n_strx: 67 + n_type: 0x64 + n_sect: 0 + n_desc: 0 + n_value: 0 + - n_strx: 82 + n_type: 0x66 + n_sect: 0 + n_desc: 1 + n_value: 1764945864 + - n_strx: 1 + n_type: 0x2E + n_sect: 1 + n_desc: 0 + n_value: 4294968104 + - n_strx: 22 + n_type: 0x24 + n_sect: 1 + n_desc: 0 + n_value: 4294968104 + - n_strx: 1 + n_type: 0x24 + n_sect: 0 + n_desc: 0 + n_value: 12 + - n_strx: 1 + n_type: 0x4E + n_sect: 1 + n_desc: 0 + n_value: 4294968104 + - n_strx: 1 + n_type: 0x2E + n_sect: 1 + n_desc: 0 + n_value: 4294968116 + - n_strx: 37 + n_type: 0x24 + n_sect: 1 + n_desc: 0 + n_value: 4294968116 + - n_strx: 1 + n_type: 0x24 + n_sect: 0 + n_desc: 0 + n_value: 8 + - n_strx: 1 + n_type: 0x4E + n_sect: 1 + n_desc: 0 + n_value: 4294968116 + - n_strx: 1 + n_type: 0x64 + n_sect: 1 + n_desc: 0 + n_value: 0 + - n_strx: 2 + n_type: 0xF + n_sect: 1 + n_desc: 16 + n_value: 4294967296 + - n_strx: 22 + n_type: 0xF + n_sect: 1 + n_desc: 0 + n_value: 4294968104 + - n_strx: 37 + n_type: 0xF + n_sect: 1 + n_desc: 0 + n_value: 4294968116 + StringTable: + - ' ' + - __mh_execute_header + - _external_call + - _main + - '/build/' + - test_inlines.c + - '/build/test_inlines.o' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + FunctionStarts: [ 0x328, 0x334 ] + ChainedFixups: [ 0x0, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x30, 0x0, + 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 ] +... +... +--- !mach-o +FileHeader: + magic: 0xFEEDFACF + cputype: 0x100000C + cpusubtype: 0x0 + filetype: 0xA + ncmds: 5 + sizeofcmds: 624 + flags: 0x0 + reserved: 0x0 +LoadCommands: + - cmd: LC_UUID + cmdsize: 24 + uuid: 23DDA184-79C3-3900-9D6F-B8E82011BEBD + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: __PAGEZERO + vmaddr: 0 + vmsize: 4294967296 + fileoff: 0 + filesize: 0 + maxprot: 0 + initprot: 0 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 152 + segname: __TEXT + vmaddr: 4294967296 + vmsize: 16384 + fileoff: 0 + filesize: 0 + maxprot: 5 + initprot: 5 + nsects: 1 + flags: 0 + Sections: + - sectname: __text + segname: __TEXT + addr: 0x100000328 + size: 20 + offset: 0x0 + align: 2 + reloff: 0x0 + nreloc: 0 + flags: 0x80000400 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: __LINKEDIT + vmaddr: 4294983680 + vmsize: 4096 + fileoff: 4096 + filesize: 0 + maxprot: 1 + initprot: 1 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 312 + segname: __DWARF + vmaddr: 4294987776 + vmsize: 4096 + fileoff: 8192 + filesize: 116 + maxprot: 7 + initprot: 3 + nsects: 3 + flags: 0 + Sections: + - sectname: __debug_abbrev + segname: __DWARF + addr: 0x100005000 + size: 16 + offset: 0x2000 + align: 0 + reloff: 0x0 + nreloc: 0 + flags: 0x0 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + - sectname: __debug_info + segname: __DWARF + addr: 0x100005010 + size: 32 + offset: 0x2010 + align: 0 + reloff: 0x0 + nreloc: 0 + flags: 0x0 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + - sectname: __debug_line + segname: __DWARF + addr: 0x100005030 + size: 68 + offset: 0x2030 + align: 0 + reloff: 0x0 + nreloc: 0 + flags: 0x0 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 +DWARF: + debug_abbrev: + - Table: + - Code: 1 + Tag: DW_TAG_compile_unit + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_stmt_list + Form: DW_FORM_sec_offset + - Attribute: DW_AT_name + Form: DW_FORM_string + debug_info: + - Version: 4 + AbbrOffset: 0 + AddrSize: 8 + Entries: + - AbbrCode: 1 + Values: + - Value: 0 + - CStr: test_inlines.c + - AbbrCode: 0 + debug_line: + - Version: 4 + MinInstLength: 1 + MaxOpsPerInst: 1 + DefaultIsStmt: 1 + LineBase: 251 + LineRange: 14 + OpcodeBase: 13 + StandardOpcodeLengths: [ 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 ] + Files: + - Name: test_inlines.c + DirIdx: 0 + ModTime: 0 + Length: 0 + Opcodes: + - Opcode: DW_LNS_extended_op + ExtLen: 9 + SubOpcode: DW_LNE_set_address + Data: 4294968104 + - Opcode: 0x16 + Data: 0 + - Opcode: 0x4E + Data: 0 + - Opcode: 0x4A + Data: 0 + - Opcode: 0x4F + Data: 0 + - Opcode: DW_LNS_advance_pc + Data: 8 + - Opcode: DW_LNS_extended_op + ExtLen: 1 + SubOpcode: DW_LNE_end_sequence +... diff --git a/tests/macho/inlines.test b/tests/macho/inlines.test index 33147563..f5fa8820 100644 --- a/tests/macho/inlines.test +++ b/tests/macho/inlines.test @@ -1,16 +1,6 @@ -# Test that -d inlines works for Mach-O binaries -# -# The YAML below was generated from tests/testdata/macho/test_inlines.c. -# -# On macOS: -# clang -g1 -O2 -o test_inlines tests/testdata/macho/test_inlines.c -# obj2yaml test_inlines > binary.yaml -# obj2yaml test_inlines.dSYM/Contents/Resources/DWARF/test_inlines > dsym.yaml -# -# Then manually modified to work around yaml2obj roundtrip bug -# https://github.com/llvm/llvm-project/issues/166993: -# - Removed Length field from debug_aranges and debug_line sections -# - Manually adjusted __DWARF segment size and section offsets to match actual content sizes +# Test -d inlines for Mach-O with DWARF v5 debug info. +# .debug_line is raw bytes because yaml2obj can't yet emit a v5 line table +# (llvm/llvm-project#191167). ## Test inlines data source with dSYM debug info # RUN: %yaml2obj --docnum=1 %s -o %t.binary @@ -107,7 +97,7 @@ LoadCommands: symoff: 16520 nsyms: 16 stroff: 16776 - strsize: 160 + strsize: 111 - cmd: LC_DYSYMTAB cmdsize: 80 ilocalsym: 0 @@ -139,12 +129,12 @@ LoadCommands: - cmd: LC_BUILD_VERSION cmdsize: 32 platform: 1 - minos: 1703936 - sdk: 1703936 + minos: 0 + sdk: 0 ntools: 1 Tools: - tool: 3 - version: 80020480 + version: 0 - cmd: LC_SOURCE_VERSION cmdsize: 16 version: 0 @@ -157,7 +147,7 @@ LoadCommands: dylib: name: 24 timestamp: 2 - current_version: 88866816 + current_version: 0 compatibility_version: 65536 Content: '/usr/lib/libSystem.B.dylib' ZeroPadBytes: 6 @@ -300,7 +290,7 @@ LinkEditData: - _main - '/build/' - test_inlines.c - - '/var/folders/kj/fky4wd_x10x_5snv5v9d7lrm0000gn/T/test_inlines-2d34e4.o' + - '/build/test_inlines.o' - '' - '' - '' @@ -325,7 +315,7 @@ FileHeader: cpusubtype: 0x0 filetype: 0xA ncmds: 7 - sizeofcmds: 1240 + sizeofcmds: 1160 flags: 0x0 reserved: 0x0 LoadCommands: @@ -335,8 +325,8 @@ LoadCommands: - cmd: LC_BUILD_VERSION cmdsize: 24 platform: 1 - minos: 1703936 - sdk: 1703936 + minos: 0 + sdk: 0 ntools: 0 - cmd: LC_SYMTAB cmdsize: 24 @@ -405,21 +395,21 @@ LoadCommands: nsects: 0 flags: 0 - cmd: LC_SEGMENT_64 - cmdsize: 792 + cmdsize: 712 segname: __DWARF vmaddr: 4294987776 vmsize: 4096 fileoff: 8192 - filesize: 780 + filesize: 680 maxprot: 7 initprot: 3 - nsects: 9 + nsects: 8 flags: 0 Sections: - sectname: __debug_line segname: __DWARF addr: 0x100005000 - size: 268 + size: 101 offset: 0x2000 align: 0 reloff: 0x0 @@ -428,11 +418,12 @@ LoadCommands: reserved1: 0x0 reserved2: 0x0 reserved3: 0x0 + content: 610000000500080037000000010101fb0e0d00010101010000000100000101011f010000000003011f020f051e010f00000000000000000000000000000000000000000009022803000001000000040005300a16052d4e051c064a0503060a4f0208000101 - sectname: __debug_aranges segname: __DWARF - addr: 0x10000510C + addr: 0x100005065 size: 48 - offset: 0x210C + offset: 0x2065 align: 0 reloff: 0x0 nreloc: 0 @@ -442,9 +433,9 @@ LoadCommands: reserved3: 0x0 - sectname: __debug_addr segname: __DWARF - addr: 0x10000513C + addr: 0x100005095 size: 24 - offset: 0x213C + offset: 0x2095 align: 0 reloff: 0x0 nreloc: 0 @@ -455,9 +446,9 @@ LoadCommands: content: '140000000500080028030000010000003403000001000000' - sectname: __debug_info segname: __DWARF - addr: 0x100005154 + addr: 0x1000050AD size: 104 - offset: 0x2154 + offset: 0x20AD align: 0 reloff: 0x0 nreloc: 0 @@ -467,9 +458,9 @@ LoadCommands: reserved3: 0x0 - sectname: __debug_abbrev segname: __DWARF - addr: 0x1000051BC + addr: 0x100005115 size: 92 - offset: 0x21BC + offset: 0x2115 align: 0 reloff: 0x0 nreloc: 0 @@ -479,9 +470,9 @@ LoadCommands: reserved3: 0x0 - sectname: __debug_str segname: __DWARF - addr: 0x100005218 + addr: 0x100005171 size: 233 - offset: 0x2218 + offset: 0x2171 align: 0 reloff: 0x0 nreloc: 0 @@ -491,9 +482,9 @@ LoadCommands: reserved3: 0x0 - sectname: __debug_str_offs segname: __DWARF - addr: 0x100005301 + addr: 0x10000525A size: 40 - offset: 0x2301 + offset: 0x225A align: 0 reloff: 0x0 nreloc: 0 @@ -504,9 +495,9 @@ LoadCommands: content: 2400000005000000010000003000000045000000B6000000C1000000D2000000D6000000E4000000 - sectname: __debug_line_str segname: __DWARF - addr: 0x100005329 + addr: 0x100005282 size: 38 - offset: 0x2329 + offset: 0x2282 align: 0 reloff: 0x0 nreloc: 0 @@ -515,19 +506,6 @@ LoadCommands: reserved2: 0x0 reserved3: 0x0 content: 2f6275696c642f736f7572636573006275696c642f746573745f696e6c696e65732e6300 - - sectname: __debug_names - segname: __DWARF - addr: 0x10000534F - size: 136 - offset: 0x234F - align: 2 - reloff: 0x0 - nreloc: 0 - flags: 0x0 - reserved1: 0x0 - reserved2: 0x0 - reserved3: 0x0 - content: 8400000005000000010000000000000000000000030000000300000011000000080000004C4C564D3037303000000000000000000100000000000000CE5C880B833E1C476A7F9A7CD2000000D6000000E4000000000000000A00000010000000011D031304130000022E03130419000000012E0000000A00000000022700000000023C0000000000 LinkEditData: NameList: - n_strx: 2 @@ -685,7 +663,7 @@ DWARF: - Value: 0x6 - AbbrCode: 0x4 Values: - - Value: 0x25 + - Value: 0x2E - Value: 0xDEADBEEFDEADBEEF - Value: 0x4 - Value: 0x0 @@ -700,33 +678,4 @@ DWARF: - Value: 0x1 - Value: 0x7 - AbbrCode: 0x0 - debug_line: - - Length: 97 - Version: 5 - PrologueLength: 3604488 - MinInstLength: 0 - MaxOpsPerInst: 0 - DefaultIsStmt: 1 - LineBase: 1 - LineRange: 1 - OpcodeBase: 251 - StandardOpcodeLengths: [ 14, 13, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, - 1, 1, 1, 31, 1, 0, 0, 0, 0, 3, 1, 31, 2, - 11, 5, 30, 1, 17, 0, 0, 0, 0, 126, 254, - 107, 147, 231, 16, 142, 48, 183, 68, 7, - 134, 86, 92, 116, 244, 0, 9, 2, 40, 3, 0, - 0, 1, 0, 0, 0, 4, 0, 5, 48, 10, 22, 5, 45, - 78, 5, 28, 6, 74, 5, 3, 6, 10, 79, 2, 8, - 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] ...