From cedce2128dc872a2f1024c9907fd78bdee4b7fe7 Mon Sep 17 00:00:00 2001 From: Peter Rong Date: Fri, 8 Aug 2025 15:22:40 -0700 Subject: [PATCH 01/12] [DWARFVerifier] Verify that DW_AT_LLVM_stmt_sequence is set correctly Signed-off-by: Peter Rong --- llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp | 46 ++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp b/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp index 8ec3f1729b974..7d6a643560643 100644 --- a/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp +++ b/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp @@ -851,6 +851,52 @@ unsigned DWARFVerifier::verifyDebugInfoAttribute(const DWARFDie &Die, } break; } + case DW_AT_LLVM_stmt_sequence: { + // Make sure the offset in the DW_AT_LLVM_stmt_sequence attribute is valid + // and points to a valid sequence start in the line table. + auto SectionOffset = AttrValue.Value.getAsSectionOffset(); + if (!SectionOffset) { + ReportError("Invalid DW_AT_LLVM_stmt_sequence encoding", + "DIE has invalid DW_AT_LLVM_stmt_sequence encoding:"); + break; + } + if (*SectionOffset >= U->getLineSection().Data.size()) { + ReportError( + "DW_AT_LLVM_stmt_sequence offset out of bounds", + "DW_AT_LLVM_stmt_sequence offset is beyond .debug_line bounds: " + + llvm::formatv("{0:x8}", *SectionOffset)); + break; + } + + // Check if the offset points to a valid sequence start + const auto *LineTable = DCtx.getLineTableForUnit(U); + if (!LineTable) { + ReportError("DW_AT_LLVM_stmt_sequence without line table", + "DIE has DW_AT_LLVM_stmt_sequence but compile unit has no " + "line table"); + break; + } + bool ValidSequenceOffset = false; + // Check if the offset matches any of the sequence start offsets using + // binary search + auto it = std::lower_bound(LineTable->Sequences.begin(), + LineTable->Sequences.end(), *SectionOffset, + [](const auto &Sequence, const uint64_t Offset) { + return Sequence.StmtSeqOffset < Offset; + }); + if (it != LineTable->Sequences.end() && + it->StmtSeqOffset == *SectionOffset) { + ValidSequenceOffset = true; + } + + if (!ValidSequenceOffset) + ReportError( + "Invalid DW_AT_LLVM_stmt_sequence offset", + "DW_AT_LLVM_stmt_sequence offset " + + llvm::formatv("{0:x8}", *SectionOffset) + + " does not point to a valid sequence start in the line table"); + break; + } default: break; } From e1a4ed7b751e134e8df8361833ae7a7d880a341f Mon Sep 17 00:00:00 2001 From: Peter Rong Date: Mon, 11 Aug 2025 15:15:32 -0700 Subject: [PATCH 02/12] add t est Signed-off-by: Peter Rong --- .../tools/llvm-dwarfdump/verify_stmt_seq.yaml | 1617 +++++++++++++++++ 1 file changed, 1617 insertions(+) create mode 100644 llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml diff --git a/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml b/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml new file mode 100644 index 0000000000000..1873eea9d49f3 --- /dev/null +++ b/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml @@ -0,0 +1,1617 @@ +# Object file copied from llvm/test/tools/dsymutil/ARM/stmt-seq-macho.test +# Then I manually tempered with some of the value of the attribute +# I hope there are easier ways to construct tests like this. + +# RUN: yaml2obj %s -o verify_stmt_seq.o +# RUN: not llvm-dwarfdump -verify -debug-info verify_stmt_seq.o | FileCheck %s --check-prefix=CHECK_INVALID + +# Line 1326 0XAB +# CHECK_INVALID: error: DW_AT_LLVM_stmt_sequence offset 0x000000ab does not point to a valid sequence start in the line table +# Line 1372 0xEEEEE7 +# CHECK_INVALID: error: DW_AT_LLVM_stmt_sequence offset is beyond .debug_line bounds: 0x00eeeee7 + +# CHECK_INVALID: error: Aggregated error counts: +# CHECK_INVALID: error: DW_AT_LLVM_stmt_sequence offset out of bounds occurred 1 time(s). +# CHECK_INVALID: error: Invalid DW_AT_LLVM_stmt_sequence offset occurred 1 time(s). + +# CHECK_INVALID-NOT: error: +--- !mach-o +IsLittleEndian: true +FileHeader: + magic: 0xFEEDFACF + cputype: 0x100000C + cpusubtype: 0x0 + filetype: 0x1 + ncmds: 5 + sizeofcmds: 1176 + flags: 0x2000 + reserved: 0x0 +LoadCommands: + - cmd: LC_SEGMENT_64 + cmdsize: 1032 + segname: '' + vmaddr: 0 + vmsize: 3125 + fileoff: 1208 + filesize: 3125 + maxprot: 7 + initprot: 7 + nsects: 12 + flags: 0 + Sections: + - sectname: __text + segname: __TEXT + addr: 0x0 + size: 148 + offset: 0x4B8 + align: 2 + reloff: 0x10F0 + nreloc: 8 + flags: 0x80000400 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + content: 00040011C0035FD600100011C0035FD600580051C0035FD600100011C0035FD600580051C0035FD6FFC300D1F44F01A9FD7B02A9FD8300916000805200000094F30300AA20058052000000941400130B6001805200000094F30300AA40058052000000947302000B0100009021000091E03F0091000000948002130BFD7B42A9F44F41A9FFC30091C0035FD600000014C0035FD6 + relocations: + - address: 0x8C + symbolnum: 4 + pcrel: true + length: 2 + extern: true + type: 2 + scattered: false + value: 0 + - address: 0x74 + symbolnum: 3 + pcrel: true + length: 2 + extern: true + type: 2 + scattered: false + value: 0 + - address: 0x6C + symbolnum: 1 + pcrel: false + length: 2 + extern: true + type: 4 + scattered: false + value: 0 + - address: 0x68 + symbolnum: 1 + pcrel: true + length: 2 + extern: true + type: 3 + scattered: false + value: 0 + - address: 0x60 + symbolnum: 5 + pcrel: true + length: 2 + extern: true + type: 2 + scattered: false + value: 0 + - address: 0x54 + symbolnum: 6 + pcrel: true + length: 2 + extern: true + type: 2 + scattered: false + value: 0 + - address: 0x48 + symbolnum: 9 + pcrel: true + length: 2 + extern: true + type: 2 + scattered: false + value: 0 + - address: 0x3C + symbolnum: 7 + pcrel: true + length: 2 + extern: true + type: 2 + scattered: false + value: 0 + - sectname: __cstring + segname: __TEXT + addr: 0x94 + size: 5 + offset: 0x54C + align: 0 + reloff: 0x0 + nreloc: 0 + flags: 0x2 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + content: '7465737400' + - sectname: __debug_loc + segname: __DWARF + addr: 0x99 + size: 412 + offset: 0x551 + align: 0 + reloff: 0x0 + nreloc: 0 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + content: 08000000000000000C000000000000000100500C0000000000000010000000000000000400A301509F0000000000000000000000000000000008000000000000000C00000000000000030070039F0000000000000000000000000000000010000000000000001400000000000000010050140000000000000018000000000000000400A301509F0000000000000000000000000000000018000000000000001C000000000000000100501C0000000000000020000000000000000400A301509F0000000000000000000000000000000018000000000000001C00000000000000030070039F0000000000000000000000000000000020000000000000002400000000000000010050240000000000000028000000000000000400A301509F00000000000000000000000000000000240000000000000028000000000000000100500000000000000000000000000000000038000000000000004400000000000000030011009F4400000000000000500000000000000001006350000000000000005C0000000000000001006400000000000000000000000000000000 + - sectname: __debug_abbrev + segname: __DWARF + addr: 0x235 + size: 372 + offset: 0x6ED + align: 0 + reloff: 0x0 + nreloc: 0 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + - sectname: __debug_info + segname: __DWARF + addr: 0x3A9 + size: 747 + offset: 0x861 + align: 0 + reloff: 0x1130 + nreloc: 16 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + relocations: + - address: 0x2A7 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x28E + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x253 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x1F5 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x1E1 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x1CE + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x1BA + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x1A7 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x169 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x12D + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0xF1 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0xC4 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x88 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x5F + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x37 + symbolnum: 2 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x22 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - sectname: __debug_str + segname: __DWARF + addr: 0x694 + size: 400 + offset: 0xB4C + align: 0 + reloff: 0x0 + nreloc: 0 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + - sectname: __apple_names + segname: __DWARF + addr: 0x824 + size: 288 + offset: 0xCDC + align: 0 + reloff: 0x0 + nreloc: 0 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + content: 485341480100000009000000090000000C00000000000000010000000100060000000000FFFFFFFFFFFFFFFF0100000003000000040000000600000007000000080000004A08311CC78E3C8288CB36CF89CB36CFD1125E53522B705390D9F86F6A7F9A7C4908311C8C0000009C000000AC000000BC000000CC000000DC000000EC00000000010000100100000601000001000000F000000000000000D6000000010000005E00000000000000F600000001000000C30000000000000016010000010000002C01000000000000440100000100000052020000000000005C01000001000000A6020000000000002B0100000200000052020000A60200000000000026010000010000006801000000000000E6000000010000008700000000000000 + - sectname: __apple_objc + segname: __DWARF + addr: 0x944 + size: 36 + offset: 0xDFC + align: 0 + reloff: 0x0 + nreloc: 0 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + content: 485341480100000001000000000000000C000000000000000100000001000600FFFFFFFF + - sectname: __apple_namespac + segname: __DWARF + addr: 0x968 + size: 36 + offset: 0xE20 + align: 0 + reloff: 0x0 + nreloc: 0 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + content: 485341480100000001000000000000000C000000000000000100000001000600FFFFFFFF + - sectname: __apple_types + segname: __DWARF + addr: 0x98C + size: 195 + offset: 0xE44 + align: 0 + reloff: 0x0 + nreloc: 0 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + content: 48534148010000000500000005000000140000000000000003000000010006000300050004000B000000000002000000FFFFFFFF03000000040000007CA8F05D90D9F86F5B738CDC3080880B6320957C64000000770000008A0000009D000000B0000000380100000100000027020000130000000000002B010000010000000502000013000000000000C20000000100000057000000240000000000007401000001000000DE02000024000000000000BD000000010000005000000024000000000000 + - sectname: __debug_frame + segname: __DWARF + addr: 0xA50 + size: 232 + offset: 0xF08 + align: 3 + reloff: 0x11B0 + nreloc: 8 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + content: 14000000FFFFFFFF0400080001781E0C1F00000000000000140000000000000000000000000000000800000000000000140000000000000008000000000000000800000000000000140000000000000010000000000000000800000000000000140000000000000018000000000000000800000000000000140000000000000020000000000000000800000000000000240000000000000028000000000000006400000000000000500C1D109E019D02930394040000000014000000000000008C000000000000000400000000000000140000000000000090000000000000000400000000000000 + relocations: + - address: 0xD8 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0xC0 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x98 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x80 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x68 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x50 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x38 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x20 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - sectname: __debug_line + segname: __DWARF + addr: 0xB38 + size: 253 + offset: 0xFF0 + align: 0 + reloff: 0x11F0 + nreloc: 8 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + relocations: + - address: 0xED + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0xD9 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0xAA + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x96 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x7E + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x66 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x50 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x3A + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - cmd: LC_BUILD_VERSION + cmdsize: 24 + platform: 1 + minos: 720896 + sdk: 0 + ntools: 0 + - cmd: LC_LINKER_OPTIMIZATION_HINT + cmdsize: 16 + dataoff: 4656 + datasize: 8 + - cmd: LC_SYMTAB + cmdsize: 24 + symoff: 4664 + nsyms: 11 + stroff: 4840 + strsize: 168 + - cmd: LC_DYSYMTAB + cmdsize: 80 + ilocalsym: 0 + nlocalsym: 3 + iextdefsym: 3 + nextdefsym: 8 + iundefsym: 11 + 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 +LinkEditData: + NameList: + - n_strx: 155 + n_type: 0xE + n_sect: 1 + n_desc: 0 + n_value: 0 + - n_strx: 1 + n_type: 0xE + n_sect: 2 + n_desc: 0 + n_value: 148 + - n_strx: 149 + n_type: 0xE + n_sect: 2 + n_desc: 0 + n_value: 148 + - n_strx: 39 + n_type: 0xF + n_sect: 1 + n_desc: 192 + n_value: 140 + - n_strx: 14 + n_type: 0xF + n_sect: 1 + n_desc: 192 + n_value: 144 + - n_strx: 132 + n_type: 0xF + n_sect: 1 + n_desc: 0 + n_value: 0 + - n_strx: 115 + n_type: 0xF + n_sect: 1 + n_desc: 0 + n_value: 16 + - n_strx: 81 + n_type: 0xF + n_sect: 1 + n_desc: 0 + n_value: 32 + - n_strx: 98 + n_type: 0xF + n_sect: 1 + n_desc: 0 + n_value: 8 + - n_strx: 64 + n_type: 0xF + n_sect: 1 + n_desc: 0 + n_value: 24 + - n_strx: 8 + n_type: 0xF + n_sect: 1 + n_desc: 0 + n_value: 40 + StringTable: + - '' + - l_.str + - _main + - __ZN12length_errorC2EPKc + - __ZN12length_errorC1EPKc + - _function3_copy2 + - _function2_copy2 + - _function3_copy1 + - _function2_copy1 + - _function1_copy1 + - ltmp1 + - ltmp0 + - '' + - '' + - '' + - '' + - '' + - '' + - '' +DWARF: + debug_str: + - 'Facebook clang version 19.1.5 (https://git.internal.tfbnw.net/repos/git/rw/osmeta/external/llvm-project b36c9ae1f8f2b39e4aafb9ca4700c608c3036365)' + - stmt_seq_macho.cpp + - '/' + - '/private/tmp/stmt_seq' + - char + - __ARRAY_SIZE_TYPE__ + - function1_copy1 + - function3_copy1 + - function2_copy1 + - function3_copy2 + - function2_copy2 + - main + - length_error + - logic_error + - _ZN12length_errorC1EPKc + - _ZN12length_errorC2EPKc + - int + - a + - b + - result + - e + - sum + - this + - s + debug_abbrev: + - ID: 0 + Table: + - Code: 0x1 + Tag: DW_TAG_compile_unit + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_producer + Form: DW_FORM_strp + - Attribute: DW_AT_language + Form: DW_FORM_data2 + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_LLVM_sysroot + Form: DW_FORM_strp + - Attribute: DW_AT_stmt_list + Form: DW_FORM_sec_offset + - Attribute: DW_AT_comp_dir + Form: DW_FORM_strp + - Attribute: DW_AT_APPLE_optimized + Form: DW_FORM_flag_present + - Attribute: DW_AT_low_pc + Form: DW_FORM_addr + - Attribute: DW_AT_high_pc + Form: DW_FORM_data4 + - Code: 0x2 + Tag: DW_TAG_variable + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_location + Form: DW_FORM_exprloc + - Code: 0x3 + Tag: DW_TAG_array_type + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Code: 0x4 + Tag: DW_TAG_subrange_type + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Attribute: DW_AT_count + Form: DW_FORM_data1 + - Code: 0x5 + Tag: DW_TAG_const_type + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Code: 0x6 + Tag: DW_TAG_base_type + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_encoding + Form: DW_FORM_data1 + - Attribute: DW_AT_byte_size + Form: DW_FORM_data1 + - Code: 0x7 + Tag: DW_TAG_base_type + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_byte_size + Form: DW_FORM_data1 + - Attribute: DW_AT_encoding + Form: DW_FORM_data1 + - Code: 0x8 + Tag: DW_TAG_subprogram + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_low_pc + Form: DW_FORM_addr + - Attribute: DW_AT_high_pc + Form: DW_FORM_data4 + - Attribute: DW_AT_APPLE_omit_frame_ptr + Form: DW_FORM_flag_present + - Attribute: DW_AT_LLVM_stmt_sequence + Form: DW_FORM_sec_offset + - Attribute: DW_AT_frame_base + Form: DW_FORM_exprloc + - Attribute: DW_AT_call_all_calls + Form: DW_FORM_flag_present + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Attribute: DW_AT_external + Form: DW_FORM_flag_present + - Attribute: DW_AT_APPLE_optimized + Form: DW_FORM_flag_present + - Code: 0x9 + Tag: DW_TAG_formal_parameter + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Code: 0xA + Tag: DW_TAG_formal_parameter + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_location + Form: DW_FORM_sec_offset + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Code: 0xB + Tag: DW_TAG_variable + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_location + Form: DW_FORM_sec_offset + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Code: 0xC + Tag: DW_TAG_subprogram + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_low_pc + Form: DW_FORM_addr + - Attribute: DW_AT_high_pc + Form: DW_FORM_data4 + - Attribute: DW_AT_LLVM_stmt_sequence + Form: DW_FORM_sec_offset + - Attribute: DW_AT_frame_base + Form: DW_FORM_exprloc + - Attribute: DW_AT_call_all_calls + Form: DW_FORM_flag_present + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Attribute: DW_AT_external + Form: DW_FORM_flag_present + - Attribute: DW_AT_APPLE_optimized + Form: DW_FORM_flag_present + - Code: 0xD + Tag: DW_TAG_variable + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_location + Form: DW_FORM_exprloc + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Code: 0xE + Tag: DW_TAG_call_site + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_call_origin + Form: DW_FORM_ref4 + - Attribute: DW_AT_call_return_pc + Form: DW_FORM_addr + - Code: 0xF + Tag: DW_TAG_call_site_parameter + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_location + Form: DW_FORM_exprloc + - Attribute: DW_AT_call_value + Form: DW_FORM_exprloc + - Code: 0x10 + Tag: DW_TAG_structure_type + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_calling_convention + Form: DW_FORM_data1 + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_byte_size + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Code: 0x11 + Tag: DW_TAG_inheritance + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Attribute: DW_AT_data_member_location + Form: DW_FORM_data1 + - Code: 0x12 + Tag: DW_TAG_subprogram + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_declaration + Form: DW_FORM_flag_present + - Attribute: DW_AT_external + Form: DW_FORM_flag_present + - Attribute: DW_AT_APPLE_optimized + Form: DW_FORM_flag_present + - Attribute: DW_AT_explicit + Form: DW_FORM_flag_present + - Code: 0x13 + Tag: DW_TAG_formal_parameter + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Attribute: DW_AT_artificial + Form: DW_FORM_flag_present + - Code: 0x14 + Tag: DW_TAG_formal_parameter + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Code: 0x15 + Tag: DW_TAG_subprogram + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_declaration + Form: DW_FORM_flag_present + - Attribute: DW_AT_external + Form: DW_FORM_flag_present + - Attribute: DW_AT_APPLE_optimized + Form: DW_FORM_flag_present + - Code: 0x16 + Tag: DW_TAG_pointer_type + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Code: 0x17 + Tag: DW_TAG_subprogram + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_low_pc + Form: DW_FORM_addr + - Attribute: DW_AT_high_pc + Form: DW_FORM_data4 + - Attribute: DW_AT_APPLE_omit_frame_ptr + Form: DW_FORM_flag_present + - Attribute: DW_AT_LLVM_stmt_sequence + Form: DW_FORM_sec_offset + - Attribute: DW_AT_frame_base + Form: DW_FORM_exprloc + - Attribute: DW_AT_object_pointer + Form: DW_FORM_ref4 + - Attribute: DW_AT_call_all_calls + Form: DW_FORM_flag_present + - Attribute: DW_AT_linkage_name + Form: DW_FORM_strp + - Attribute: DW_AT_specification + Form: DW_FORM_ref4 + - Code: 0x18 + Tag: DW_TAG_formal_parameter + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_location + Form: DW_FORM_exprloc + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Attribute: DW_AT_artificial + Form: DW_FORM_flag_present + - Code: 0x19 + Tag: DW_TAG_formal_parameter + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_location + Form: DW_FORM_exprloc + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Code: 0x1A + Tag: DW_TAG_call_site + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_call_origin + Form: DW_FORM_ref4 + - Attribute: DW_AT_call_tail_call + Form: DW_FORM_flag_present + - Attribute: DW_AT_call_pc + Form: DW_FORM_addr + debug_info: + - Length: 0x2E7 + Version: 4 + AbbrevTableID: 0 + AbbrOffset: 0x0 + AddrSize: 8 + Entries: + - AbbrCode: 0x1 + Values: + - Value: 0x0 + - Value: 0x21 + - Value: 0x92 + - Value: 0xA5 + - Value: 0x0 + - Value: 0xA7 + - Value: 0x1 + - Value: 0x0 + - Value: 0x94 + - AbbrCode: 0x2 + Values: + - Value: 0x3F + - Value: 0x1 + - Value: 0x27 + - Value: 0x9 + BlockData: [ 0x3, 0x94, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0 ] + - AbbrCode: 0x3 + Values: + - Value: 0x4B + - AbbrCode: 0x4 + Values: + - Value: 0x57 + - Value: 0x5 + - AbbrCode: 0x0 + - AbbrCode: 0x5 + Values: + - Value: 0x50 + - AbbrCode: 0x6 + Values: + - Value: 0xBD + - Value: 0x6 + - Value: 0x1 + - AbbrCode: 0x7 + Values: + - Value: 0xC2 + - Value: 0x8 + - Value: 0x7 + - AbbrCode: 0x8 + Values: + - Value: 0x0 + - Value: 0x8 + - Value: 0x1 + - Value: 0x34 + - Value: 0x1 + BlockData: [ 0x6F ] + - Value: 0x1 + - Value: 0xD6 + - Value: 0x1 + - Value: 0x2 + - Value: 0x2DE + - Value: 0x1 + - Value: 0x1 + - AbbrCode: 0x9 + Values: + - Value: 0x178 + - Value: 0x1 + - Value: 0x2 + - Value: 0x2DE + - AbbrCode: 0x0 + - AbbrCode: 0x8 + Values: + - Value: 0x8 + - Value: 0x8 + - Value: 0x1 + - Value: 0x4A + - Value: 0x1 + BlockData: [ 0x6F ] + - Value: 0x1 + - Value: 0xE6 + - Value: 0x1 + - Value: 0x6 + - Value: 0x2DE + - Value: 0x1 + - Value: 0x1 + - AbbrCode: 0xA + Values: + - Value: 0x0 + - Value: 0x178 + - Value: 0x1 + - Value: 0x6 + - Value: 0x2DE + - AbbrCode: 0xB + Values: + - Value: 0x39 + - Value: 0x17A + - Value: 0x1 + - Value: 0x7 + - Value: 0x2DE + - AbbrCode: 0x0 + - AbbrCode: 0x8 + Values: + - Value: 0x10 + - Value: 0x8 + - Value: 0x1 + - Value: 0x60 + - Value: 0x1 + BlockData: [ 0x6F ] + - Value: 0x1 + - Value: 0xF6 + - Value: 0x1 + - Value: 0xB + - Value: 0x2DE + - Value: 0x1 + - Value: 0x1 + - AbbrCode: 0xA + Values: + - Value: 0x5E + - Value: 0x178 + - Value: 0x1 + - Value: 0xB + - Value: 0x2DE + - AbbrCode: 0x0 + - AbbrCode: 0x8 + Values: + - Value: 0x18 + - Value: 0x8 + - Value: 0x1 + - Value: 0x78 + - Value: 0x1 + BlockData: [ 0x6F ] + - Value: 0x1 + - Value: 0x106 + - Value: 0x1 + - Value: 0xF + - Value: 0x2DE + - Value: 0x1 + - Value: 0x1 + - AbbrCode: 0xA + Values: + - Value: 0x97 + - Value: 0x178 + - Value: 0x1 + - Value: 0xF + - Value: 0x2DE + - AbbrCode: 0xB + Values: + - Value: 0xD0 + - Value: 0x17A + - Value: 0x1 + - Value: 0x10 + - Value: 0x2DE + - AbbrCode: 0x0 + - AbbrCode: 0x8 + Values: + - Value: 0x20 + - Value: 0x8 + - Value: 0x1 + - Value: 0x90 + - Value: 0x1 + BlockData: [ 0x6F ] + - Value: 0x1 + - Value: 0x116 + - Value: 0x1 + - Value: 0x14 + - Value: 0x2DE + - Value: 0x1 + - Value: 0x1 + - AbbrCode: 0xA + Values: + - Value: 0xF5 + - Value: 0x178 + - Value: 0x1 + - Value: 0x14 + - Value: 0x2DE + - AbbrCode: 0xB + Values: + - Value: 0x12E + - Value: 0x17C + - Value: 0x1 + - Value: 0x15 + - Value: 0x2DE + - AbbrCode: 0x0 + - AbbrCode: 0xC + Values: + - Value: 0x28 + - Value: 0x64 + - Value: 0xA7 + - Value: 0x1 + BlockData: [ 0x6D ] + - Value: 0x1 + - Value: 0x126 + - Value: 0x1 + - Value: 0x21 + - Value: 0x2DE + - Value: 0x1 + - Value: 0x1 + - AbbrCode: 0xD + Values: + - Value: 0x2 + BlockData: [ 0x8F, 0xF ] + - Value: 0x183 + - Value: 0x1 + - Value: 0x27 + - Value: 0x205 + - AbbrCode: 0xB + Values: + - Value: 0x151 + - Value: 0x185 + - Value: 0x1 + - Value: 0x22 + - Value: 0x2DE + - AbbrCode: 0xE + Values: + - Value: 0x12C + - Value: 0x40 + - AbbrCode: 0xF + Values: + - Value: 0x1 + BlockData: [ 0x50 ] + - Value: 0x1 + BlockData: [ 0x33 ] + - AbbrCode: 0x0 + - AbbrCode: 0xE + Values: + - Value: 0xF0 + - Value: 0x4C + - AbbrCode: 0xF + Values: + - Value: 0x1 + BlockData: [ 0x50 ] + - Value: 0x2 + BlockData: [ 0x10, 0x29 ] + - AbbrCode: 0x0 + - AbbrCode: 0xE + Values: + - Value: 0xC3 + - Value: 0x58 + - AbbrCode: 0xF + Values: + - Value: 0x1 + BlockData: [ 0x50 ] + - Value: 0x1 + BlockData: [ 0x3B ] + - AbbrCode: 0x0 + - AbbrCode: 0xE + Values: + - Value: 0x5E + - Value: 0x64 + - AbbrCode: 0xF + Values: + - Value: 0x1 + BlockData: [ 0x50 ] + - Value: 0x2 + BlockData: [ 0x10, 0x2A ] + - AbbrCode: 0x0 + - AbbrCode: 0xE + Values: + - Value: 0x252 + - Value: 0x78 + - AbbrCode: 0xF + Values: + - Value: 0x1 + BlockData: [ 0x50 ] + - Value: 0x2 + BlockData: [ 0x8F, 0xF ] + - AbbrCode: 0x0 + - AbbrCode: 0x0 + - AbbrCode: 0x10 + Values: + - Value: 0x5 + - Value: 0x12B + - Value: 0x1 + - Value: 0x1 + - Value: 0x1D + - AbbrCode: 0x11 + Values: + - Value: 0x227 + - Value: 0x0 + - AbbrCode: 0x12 + Values: + - Value: 0x12B + - Value: 0x1 + - Value: 0x1E + - Value: 0x1 + - Value: 0x1 + - Value: 0x1 + - Value: 0x1 + - AbbrCode: 0x13 + Values: + - Value: 0x24D + - Value: 0x1 + - AbbrCode: 0x14 + Values: + - Value: 0x248 + - AbbrCode: 0x0 + - AbbrCode: 0x0 + - AbbrCode: 0x10 + Values: + - Value: 0x5 + - Value: 0x138 + - Value: 0x1 + - Value: 0x1 + - Value: 0x19 + - AbbrCode: 0x15 + Values: + - Value: 0x138 + - Value: 0x1 + - Value: 0x1A + - Value: 0x1 + - Value: 0x1 + - Value: 0x1 + - AbbrCode: 0x13 + Values: + - Value: 0x243 + - Value: 0x1 + - AbbrCode: 0x14 + Values: + - Value: 0x248 + - AbbrCode: 0x0 + - AbbrCode: 0x0 + - AbbrCode: 0x16 + Values: + - Value: 0x227 + - AbbrCode: 0x16 + Values: + - Value: 0x4B + - AbbrCode: 0x16 + Values: + - Value: 0x205 + - AbbrCode: 0x17 + Values: + - Value: 0x8C + - Value: 0x4 + - Value: 0x1 + - Value: 0xAB + - Value: 0x1 + BlockData: [ 0x6F ] + - Value: 0x271 + - Value: 0x1 + - Value: 0x144 + - Value: 0x214 + - AbbrCode: 0x18 + Values: + - Value: 0x1 + BlockData: [ 0x50 ] + - Value: 0x189 + - Value: 0x2E5 + - Value: 0x1 + - AbbrCode: 0x19 + Values: + - Value: 0x1 + BlockData: [ 0x51 ] + - Value: 0x18E + - Value: 0x1 + - Value: 0x1E + - Value: 0x248 + - AbbrCode: 0x1A + Values: + - Value: 0x2A6 + - Value: 0x1 + - Value: 0x8C + - AbbrCode: 0xF + Values: + - Value: 0x1 + BlockData: [ 0x50 ] + - Value: 0x3 + BlockData: [ 0xA3, 0x1, 0x50 ] + - AbbrCode: 0xF + Values: + - Value: 0x1 + BlockData: [ 0x51 ] + - Value: 0x3 + BlockData: [ 0xA3, 0x1, 0x51 ] + - AbbrCode: 0x0 + - AbbrCode: 0x0 + - AbbrCode: 0x17 + Values: + - Value: 0x90 + - Value: 0x4 + - Value: 0x1 + - Value: 0xEEEEE7 + - Value: 0x1 + BlockData: [ 0x6F ] + - Value: 0x2C5 + - Value: 0x1 + - Value: 0x15C + - Value: 0x214 + - AbbrCode: 0x18 + Values: + - Value: 0x1 + BlockData: [ 0x50 ] + - Value: 0x189 + - Value: 0x2E5 + - Value: 0x1 + - AbbrCode: 0x19 + Values: + - Value: 0x1 + BlockData: [ 0x51 ] + - Value: 0x18E + - Value: 0x1 + - Value: 0x1E + - Value: 0x248 + - AbbrCode: 0x0 + - AbbrCode: 0x6 + Values: + - Value: 0x174 + - Value: 0x5 + - Value: 0x4 + - AbbrCode: 0x16 + Values: + - Value: 0x205 + - AbbrCode: 0x0 + debug_line: + - Length: 249 + Version: 4 + PrologueLength: 42 + 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: stmt_seq_macho.cpp + DirIdx: 0 + ModTime: 0 + Length: 0 + Opcodes: + - Opcode: DW_LNS_set_column + Data: 10 + - Opcode: DW_LNS_set_prologue_end + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 9 + SubOpcode: DW_LNE_set_address + Data: 0 + - Opcode: 0x14 + Data: 0 + - Opcode: DW_LNS_set_column + Data: 3 + - Opcode: DW_LNS_negate_stmt + Data: 0 + - Opcode: 0x4A + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 1 + SubOpcode: DW_LNE_end_sequence + Data: 0 + - Opcode: DW_LNS_set_column + Data: 14 + - Opcode: DW_LNS_set_prologue_end + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 9 + SubOpcode: DW_LNE_set_address + Data: 8 + - Opcode: 0x19 + Data: 0 + - Opcode: DW_LNS_set_column + Data: 5 + - Opcode: DW_LNS_negate_stmt + Data: 0 + - Opcode: 0x4A + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 1 + SubOpcode: DW_LNE_end_sequence + Data: 0 + - Opcode: DW_LNS_set_column + Data: 14 + - Opcode: DW_LNS_set_prologue_end + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 9 + SubOpcode: DW_LNE_set_address + Data: 16 + - Opcode: DW_LNS_advance_line + SData: 11 + Data: 0 + - Opcode: DW_LNS_copy + Data: 0 + - Opcode: DW_LNS_set_column + Data: 5 + - Opcode: DW_LNS_negate_stmt + Data: 0 + - Opcode: 0x4A + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 1 + SubOpcode: DW_LNE_end_sequence + Data: 0 + - Opcode: DW_LNS_set_column + Data: 14 + - Opcode: DW_LNS_set_prologue_end + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 9 + SubOpcode: DW_LNE_set_address + Data: 24 + - Opcode: DW_LNS_advance_line + SData: 16 + Data: 0 + - Opcode: DW_LNS_copy + Data: 0 + - Opcode: DW_LNS_set_column + Data: 5 + - Opcode: DW_LNS_negate_stmt + Data: 0 + - Opcode: 0x4A + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 1 + SubOpcode: DW_LNE_end_sequence + Data: 0 + - Opcode: DW_LNS_set_column + Data: 20 + - Opcode: DW_LNS_set_prologue_end + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 9 + SubOpcode: DW_LNE_set_address + Data: 32 + - Opcode: DW_LNS_advance_line + SData: 20 + Data: 0 + - Opcode: DW_LNS_copy + Data: 0 + - Opcode: DW_LNS_set_column + Data: 5 + - Opcode: 0x4B + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 1 + SubOpcode: DW_LNE_end_sequence + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 9 + SubOpcode: DW_LNE_set_address + Data: 40 + - Opcode: DW_LNS_advance_line + SData: 32 + Data: 0 + - Opcode: DW_LNS_copy + Data: 0 + - Opcode: DW_LNS_set_column + Data: 12 + - Opcode: DW_LNS_set_prologue_end + Data: 0 + - Opcode: 0xF4 + Data: 0 + - Opcode: 0xBB + Data: 0 + - Opcode: DW_LNS_set_column + Data: 9 + - Opcode: DW_LNS_negate_stmt + Data: 0 + - Opcode: 0x82 + Data: 0 + - Opcode: DW_LNS_set_column + Data: 12 + - Opcode: DW_LNS_negate_stmt + Data: 0 + - Opcode: 0x4B + Data: 0 + - Opcode: 0xBB + Data: 0 + - Opcode: DW_LNS_set_column + Data: 9 + - Opcode: 0x81 + Data: 0 + - Opcode: DW_LNS_set_column + Data: 18 + - Opcode: 0x4C + Data: 0 + - Opcode: DW_LNS_set_column + Data: 9 + - Opcode: 0xF1 + Data: 0 + - Opcode: DW_LNS_set_column + Data: 5 + - Opcode: DW_LNS_set_epilogue_begin + Data: 0 + - Opcode: 0x4C + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 1 + SubOpcode: DW_LNE_end_sequence + Data: 0 + - Opcode: DW_LNS_set_column + Data: 85 + - Opcode: DW_LNS_set_prologue_end + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 9 + SubOpcode: DW_LNE_set_address + Data: 140 + - Opcode: DW_LNS_advance_line + SData: 29 + Data: 0 + - Opcode: DW_LNS_copy + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 1 + SubOpcode: DW_LNE_end_sequence + Data: 0 + - Opcode: DW_LNS_set_column + Data: 86 + - Opcode: DW_LNS_set_prologue_end + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 9 + SubOpcode: DW_LNE_set_address + Data: 144 + - Opcode: DW_LNS_advance_line + SData: 29 + Data: 0 + - Opcode: DW_LNS_copy + Data: 0 + - Opcode: DW_LNS_advance_pc + Data: 4 + - Opcode: DW_LNS_extended_op + ExtLen: 1 + SubOpcode: DW_LNE_end_sequence + Data: 0 +... From c8f2305efad59c54da736fc7fd33857625345981 Mon Sep 17 00:00:00 2001 From: Peter Rong Date: Mon, 11 Aug 2025 16:27:02 -0700 Subject: [PATCH 03/12] [DWARF] Fix incorrect offset Signed-off-by: Peter Rong --- .../X86/DW_AT_LLVM_stmt_seq_sec_offset.ll | 2 + .../X86/DW_AT_LLVM_stmt_seq_sec_offset_2.ll | 258 ++++++++++++++++++ .../tools/dsymutil/ARM/stmt-seq-macho.test | 2 + 3 files changed, 262 insertions(+) create mode 100644 llvm/test/DebugInfo/X86/DW_AT_LLVM_stmt_seq_sec_offset_2.ll diff --git a/llvm/test/DebugInfo/X86/DW_AT_LLVM_stmt_seq_sec_offset.ll b/llvm/test/DebugInfo/X86/DW_AT_LLVM_stmt_seq_sec_offset.ll index 58f6495924b90..41ed0acd28c48 100644 --- a/llvm/test/DebugInfo/X86/DW_AT_LLVM_stmt_seq_sec_offset.ll +++ b/llvm/test/DebugInfo/X86/DW_AT_LLVM_stmt_seq_sec_offset.ll @@ -4,6 +4,8 @@ ; RUN: llc -O3 -mtriple=i686-w64-mingw32 -o %t_yes -filetype=obj %s -emit-func-debug-line-table-offsets ; RUN: llvm-dwarfdump -v -all %t_yes | FileCheck %s -check-prefix=STMT_SEQ +; RUN: llvm-dwarfdump --verify %t_yes + ; NO_STMT_SEQ-NOT: DW_AT_LLVM_stmt_sequence ; STMT_SEQ: [[[ABBREV_CODE1:[0-9]+]]] DW_TAG_subprogram diff --git a/llvm/test/DebugInfo/X86/DW_AT_LLVM_stmt_seq_sec_offset_2.ll b/llvm/test/DebugInfo/X86/DW_AT_LLVM_stmt_seq_sec_offset_2.ll new file mode 100644 index 0000000000000..d025dc8bfd0a0 --- /dev/null +++ b/llvm/test/DebugInfo/X86/DW_AT_LLVM_stmt_seq_sec_offset_2.ll @@ -0,0 +1,258 @@ +; RUN: llc -O3 -mtriple=arm64-apple-macosx11.0.0 -o %t_yes -filetype=obj %s -emit-func-debug-line-table-offsets +; RUN: llvm-dwarfdump -verify %t_yes + +; generated from: +; #define ATTRIB extern "C" __attribute__((noinline)) +; volatile int global_result = 0; +; +; ATTRIB int function1_copy1(int a) { +; return ++a; +; } +; +; ATTRIB int function3_copy1(int a) { +; int b = a + 3; +; return b + 1; +; } +; +; ATTRIB int function2_copy1(int a) { +; return a - 22; +; } +; +; ATTRIB int function3_copy2(int a) { +; int b = a + 3; +; return b + 1; +; } +; +; ATTRIB int function2_copy2(int a) { +; int result = a - 22; +; return result; +; } +; +; struct logic_error { +; logic_error(const char* s) {} +; }; +; +; struct length_error : public logic_error { +; __attribute__((noinline)) explicit length_error(const char* s) : logic_error(s) {} +; }; +; +; int main() { +; int sum = 0; +; sum += function2_copy2(3); +; sum += function3_copy2(41); +; sum += function2_copy1(11); +; sum += function1_copy1(42); +; length_error e("test"); +; return sum; +; } +; ===================== + +; ModuleID = 'stmt-seq-macho.cpp' +source_filename = "stmt-seq-macho.cpp" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "arm64-apple-macosx11.0.0" + +%struct.length_error = type { i8 } + +@.str = private unnamed_addr constant [5 x i8] c"test\00", align 1, !dbg !0 + +; Function Attrs: minsize mustprogress nofree noinline norecurse nosync nounwind optsize ssp willreturn memory(none) +define range(i32 -2147483647, -2147483648) i32 @function1_copy1(i32 noundef %a) local_unnamed_addr #0 !dbg !17 { +entry: + #dbg_value(i32 %a, !22, !DIExpression(), !23) + %inc = add nsw i32 %a, 1, !dbg !24 + #dbg_value(i32 %inc, !22, !DIExpression(), !23) + ret i32 %inc, !dbg !25 +} + +; Function Attrs: minsize mustprogress nofree noinline norecurse nosync nounwind optsize ssp willreturn memory(none) +define range(i32 -2147483644, -2147483648) i32 @function3_copy1(i32 noundef %a) local_unnamed_addr #0 !dbg !26 { +entry: + #dbg_value(i32 %a, !28, !DIExpression(), !30) + #dbg_value(i32 %a, !29, !DIExpression(DW_OP_plus_uconst, 3, DW_OP_stack_value), !30) + %add1 = add nsw i32 %a, 4, !dbg !31 + ret i32 %add1, !dbg !32 +} + +; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) +declare void @llvm.lifetime.start.p0(ptr captures(none)) #1 + +; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) +declare void @llvm.lifetime.end.p0(ptr captures(none)) #1 + +; Function Attrs: minsize mustprogress nofree noinline norecurse nosync nounwind optsize ssp willreturn memory(none) +define range(i32 -2147483648, 2147483626) i32 @function2_copy1(i32 noundef %a) local_unnamed_addr #0 !dbg !33 { +entry: + #dbg_value(i32 %a, !35, !DIExpression(), !36) + %sub = add nsw i32 %a, -22, !dbg !37 + ret i32 %sub, !dbg !38 +} + +; Function Attrs: minsize mustprogress nofree noinline norecurse nosync nounwind optsize ssp willreturn memory(none) +define range(i32 -2147483644, -2147483648) i32 @function3_copy2(i32 noundef %a) local_unnamed_addr #0 !dbg !39 { +entry: + #dbg_value(i32 %a, !41, !DIExpression(), !43) + #dbg_value(i32 %a, !42, !DIExpression(DW_OP_plus_uconst, 3, DW_OP_stack_value), !43) + %add1 = add nsw i32 %a, 4, !dbg !44 + ret i32 %add1, !dbg !45 +} + +; Function Attrs: minsize mustprogress nofree noinline norecurse nosync nounwind optsize ssp willreturn memory(none) +define range(i32 -2147483648, 2147483626) i32 @function2_copy2(i32 noundef %a) local_unnamed_addr #0 !dbg !46 { +entry: + #dbg_value(i32 %a, !48, !DIExpression(), !50) + %sub = add nsw i32 %a, -22, !dbg !51 + #dbg_value(i32 %sub, !49, !DIExpression(), !50) + ret i32 %sub, !dbg !52 +} + +; Function Attrs: minsize mustprogress norecurse nounwind optsize ssp +define noundef i32 @main() local_unnamed_addr #2 !dbg !53 { +entry: + %e = alloca %struct.length_error, align 1 + #dbg_value(i32 0, !57, !DIExpression(), !73) + %call = tail call i32 @function2_copy2(i32 noundef 3) #4, !dbg !74 + #dbg_value(i32 %call, !57, !DIExpression(), !73) + %call1 = tail call i32 @function3_copy2(i32 noundef 41) #4, !dbg !75 + %add2 = add nsw i32 %call1, %call, !dbg !76 + #dbg_value(i32 %add2, !57, !DIExpression(), !73) + %call3 = tail call i32 @function2_copy1(i32 noundef 11) #4, !dbg !77 + %add4 = add nsw i32 %add2, %call3, !dbg !78 + #dbg_value(i32 %add4, !57, !DIExpression(), !73) + %call5 = tail call i32 @function1_copy1(i32 noundef 42) #4, !dbg !79 + %add6 = add nsw i32 %add4, %call5, !dbg !80 + #dbg_value(i32 %add6, !57, !DIExpression(), !73) + call void @llvm.lifetime.start.p0(ptr nonnull %e) #5, !dbg !81 + #dbg_declare(ptr %e, !58, !DIExpression(), !82) + %call7 = call noundef ptr @_ZN12length_errorC1EPKc(ptr noundef nonnull align 1 dereferenceable(1) %e, ptr noundef nonnull @.str) #4, !dbg !82 + call void @llvm.lifetime.end.p0(ptr nonnull %e) #5, !dbg !83 + ret i32 %add6, !dbg !84 +} + +; Function Attrs: minsize mustprogress noinline nounwind optsize ssp +define linkonce_odr noundef ptr @_ZN12length_errorC1EPKc(ptr noundef nonnull returned align 1 dereferenceable(1) %this, ptr noundef %s) unnamed_addr #3 !dbg !85 { +entry: + #dbg_value(ptr %this, !87, !DIExpression(), !90) + #dbg_value(ptr %s, !89, !DIExpression(), !90) + %call = tail call noundef ptr @_ZN12length_errorC2EPKc(ptr noundef nonnull align 1 dereferenceable(1) %this, ptr noundef %s) #4, !dbg !91 + ret ptr %this, !dbg !92 +} + +; Function Attrs: minsize mustprogress noinline nounwind optsize ssp +define linkonce_odr noundef ptr @_ZN12length_errorC2EPKc(ptr noundef nonnull returned align 1 dereferenceable(1) %this, ptr noundef %s) unnamed_addr #3 !dbg !93 { +entry: + #dbg_value(ptr %this, !95, !DIExpression(), !97) + #dbg_value(ptr %s, !96, !DIExpression(), !97) + ret ptr %this, !dbg !98 +} + +attributes #0 = { minsize mustprogress nofree noinline norecurse nosync nounwind optsize ssp willreturn memory(none) "frame-pointer"="non-leaf" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="apple-m1" "target-features"="+aes,+altnzcv,+ccdp,+ccidx,+ccpp,+complxnum,+crc,+dit,+dotprod,+flagm,+fp-armv8,+fp16fml,+fptoint,+fullfp16,+jsconv,+lse,+neon,+pauth,+perfmon,+predres,+ras,+rcpc,+rdm,+sb,+sha2,+sha3,+specrestrict,+ssbs,+v8.1a,+v8.2a,+v8.3a,+v8.4a,+v8a" } +attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } +attributes #2 = { minsize mustprogress norecurse nounwind optsize ssp "frame-pointer"="non-leaf" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="apple-m1" "target-features"="+aes,+altnzcv,+ccdp,+ccidx,+ccpp,+complxnum,+crc,+dit,+dotprod,+flagm,+fp-armv8,+fp16fml,+fptoint,+fullfp16,+jsconv,+lse,+neon,+pauth,+perfmon,+predres,+ras,+rcpc,+rdm,+sb,+sha2,+sha3,+specrestrict,+ssbs,+v8.1a,+v8.2a,+v8.3a,+v8.4a,+v8a" } +attributes #3 = { minsize mustprogress noinline nounwind optsize ssp "frame-pointer"="non-leaf" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="apple-m1" "target-features"="+aes,+altnzcv,+ccdp,+ccidx,+ccpp,+complxnum,+crc,+dit,+dotprod,+flagm,+fp-armv8,+fp16fml,+fptoint,+fullfp16,+jsconv,+lse,+neon,+pauth,+perfmon,+predres,+ras,+rcpc,+rdm,+sb,+sha2,+sha3,+specrestrict,+ssbs,+v8.1a,+v8.2a,+v8.3a,+v8.4a,+v8a" } +attributes #4 = { minsize optsize } +attributes #5 = { nounwind } + +!llvm.dbg.cu = !{!8} +!llvm.module.flags = !{!11, !12, !13, !14, !15} +!llvm.ident = !{!16} + +!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression()) +!1 = distinct !DIGlobalVariable(scope: null, file: !2, line: 51, type: !3, isLocal: true, isDefinition: true) +!2 = !DIFile(filename: "stmt-seq-macho.cpp", directory: "") +!3 = !DICompositeType(tag: DW_TAG_array_type, baseType: !4, size: 40, elements: !6) +!4 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !5) +!5 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char) +!6 = !{!7} +!7 = !DISubrange(count: 5) +!8 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !9, producer: "clang version 22.0.0git (git@github.com:DataCorrupted/llvm-project.git cedce2128dc872a2f1024c9907fd78bdee4b7fe7)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, globals: !10, splitDebugInlining: false, nameTableKind: Apple, sysroot: "/") +!9 = !DIFile(filename: "stmt-seq-macho.cpp", directory: "/private/tmp/stmt_seq") +!10 = !{!0} +!11 = !{i32 7, !"Dwarf Version", i32 4} +!12 = !{i32 2, !"Debug Info Version", i32 3} +!13 = !{i32 1, !"wchar_size", i32 4} +!14 = !{i32 8, !"PIC Level", i32 2} +!15 = !{i32 7, !"frame-pointer", i32 1} +!16 = !{!"clang version 22.0.0git (git@github.com:DataCorrupted/llvm-project.git cedce2128dc872a2f1024c9907fd78bdee4b7fe7)"} +!17 = distinct !DISubprogram(name: "function1_copy1", scope: !2, file: !2, line: 14, type: !18, scopeLine: 14, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !8, retainedNodes: !21) +!18 = !DISubroutineType(types: !19) +!19 = !{!20, !20} +!20 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) +!21 = !{!22} +!22 = !DILocalVariable(name: "a", arg: 1, scope: !17, file: !2, line: 14, type: !20) +!23 = !DILocation(line: 0, scope: !17) +!24 = !DILocation(line: 15, column: 10, scope: !17) +!25 = !DILocation(line: 15, column: 3, scope: !17) +!26 = distinct !DISubprogram(name: "function3_copy1", scope: !2, file: !2, line: 18, type: !18, scopeLine: 18, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !8, retainedNodes: !27) +!27 = !{!28, !29} +!28 = !DILocalVariable(name: "a", arg: 1, scope: !26, file: !2, line: 18, type: !20) +!29 = !DILocalVariable(name: "b", scope: !26, file: !2, line: 19, type: !20) +!30 = !DILocation(line: 0, scope: !26) +!31 = !DILocation(line: 20, column: 14, scope: !26) +!32 = !DILocation(line: 20, column: 5, scope: !26) +!33 = distinct !DISubprogram(name: "function2_copy1", scope: !2, file: !2, line: 23, type: !18, scopeLine: 23, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !8, retainedNodes: !34) +!34 = !{!35} +!35 = !DILocalVariable(name: "a", arg: 1, scope: !33, file: !2, line: 23, type: !20) +!36 = !DILocation(line: 0, scope: !33) +!37 = !DILocation(line: 24, column: 14, scope: !33) +!38 = !DILocation(line: 24, column: 5, scope: !33) +!39 = distinct !DISubprogram(name: "function3_copy2", scope: !2, file: !2, line: 27, type: !18, scopeLine: 27, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !8, retainedNodes: !40) +!40 = !{!41, !42} +!41 = !DILocalVariable(name: "a", arg: 1, scope: !39, file: !2, line: 27, type: !20) +!42 = !DILocalVariable(name: "b", scope: !39, file: !2, line: 28, type: !20) +!43 = !DILocation(line: 0, scope: !39) +!44 = !DILocation(line: 29, column: 14, scope: !39) +!45 = !DILocation(line: 29, column: 5, scope: !39) +!46 = distinct !DISubprogram(name: "function2_copy2", scope: !2, file: !2, line: 32, type: !18, scopeLine: 32, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !8, retainedNodes: !47) +!47 = !{!48, !49} +!48 = !DILocalVariable(name: "a", arg: 1, scope: !46, file: !2, line: 32, type: !20) +!49 = !DILocalVariable(name: "result", scope: !46, file: !2, line: 33, type: !20) +!50 = !DILocation(line: 0, scope: !46) +!51 = !DILocation(line: 33, column: 20, scope: !46) +!52 = !DILocation(line: 34, column: 5, scope: !46) +!53 = distinct !DISubprogram(name: "main", scope: !2, file: !2, line: 45, type: !54, scopeLine: 45, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !8, retainedNodes: !56) +!54 = !DISubroutineType(types: !55) +!55 = !{!20} +!56 = !{!57, !58} +!57 = !DILocalVariable(name: "sum", scope: !53, file: !2, line: 46, type: !20) +!58 = !DILocalVariable(name: "e", scope: !53, file: !2, line: 51, type: !59) +!59 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "length_error", file: !2, line: 41, size: 8, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !60, identifier: "_ZTS12length_error") +!60 = !{!61, !69} +!61 = !DIDerivedType(tag: DW_TAG_inheritance, scope: !59, baseType: !62, extraData: i32 0) +!62 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "logic_error", file: !2, line: 37, size: 8, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !63, identifier: "_ZTS11logic_error") +!63 = !{!64} +!64 = !DISubprogram(name: "logic_error", scope: !62, file: !2, line: 38, type: !65, scopeLine: 38, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized) +!65 = !DISubroutineType(types: !66) +!66 = !{null, !67, !68} +!67 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !62, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer) +!68 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !4, size: 64) +!69 = !DISubprogram(name: "length_error", scope: !59, file: !2, line: 42, type: !70, scopeLine: 42, flags: DIFlagExplicit | DIFlagPrototyped, spFlags: DISPFlagOptimized) +!70 = !DISubroutineType(types: !71) +!71 = !{null, !72, !68} +!72 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !59, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer) +!73 = !DILocation(line: 0, scope: !53) +!74 = !DILocation(line: 47, column: 12, scope: !53) +!75 = !DILocation(line: 48, column: 12, scope: !53) +!76 = !DILocation(line: 48, column: 9, scope: !53) +!77 = !DILocation(line: 49, column: 12, scope: !53) +!78 = !DILocation(line: 49, column: 9, scope: !53) +!79 = !DILocation(line: 50, column: 12, scope: !53) +!80 = !DILocation(line: 50, column: 9, scope: !53) +!81 = !DILocation(line: 51, column: 5, scope: !53) +!82 = !DILocation(line: 51, column: 18, scope: !53) +!83 = !DILocation(line: 53, column: 1, scope: !53) +!84 = !DILocation(line: 52, column: 5, scope: !53) +!85 = distinct !DISubprogram(name: "length_error", linkageName: "_ZN12length_errorC1EPKc", scope: !59, file: !2, line: 42, type: !70, scopeLine: 42, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !8, declaration: !69, retainedNodes: !86) +!86 = !{!87, !89} +!87 = !DILocalVariable(name: "this", arg: 1, scope: !85, type: !88, flags: DIFlagArtificial | DIFlagObjectPointer) +!88 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !59, size: 64) +!89 = !DILocalVariable(name: "s", arg: 2, scope: !85, file: !2, line: 42, type: !68) +!90 = !DILocation(line: 0, scope: !85) +!91 = !DILocation(line: 42, column: 85, scope: !85) +!92 = !DILocation(line: 42, column: 86, scope: !85) +!93 = distinct !DISubprogram(name: "length_error", linkageName: "_ZN12length_errorC2EPKc", scope: !59, file: !2, line: 42, type: !70, scopeLine: 42, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !8, declaration: !69, retainedNodes: !94) +!94 = !{!95, !96} +!95 = !DILocalVariable(name: "this", arg: 1, scope: !93, type: !88, flags: DIFlagArtificial | DIFlagObjectPointer) +!96 = !DILocalVariable(name: "s", arg: 2, scope: !93, file: !2, line: 42, type: !68) +!97 = !DILocation(line: 0, scope: !93) +!98 = !DILocation(line: 42, column: 86, scope: !93) diff --git a/llvm/test/tools/dsymutil/ARM/stmt-seq-macho.test b/llvm/test/tools/dsymutil/ARM/stmt-seq-macho.test index db223cda43247..b42da261d8879 100644 --- a/llvm/test/tools/dsymutil/ARM/stmt-seq-macho.test +++ b/llvm/test/tools/dsymutil/ARM/stmt-seq-macho.test @@ -2,7 +2,9 @@ # RUN: rm -rf %t && split-file %s %t && cd %t # RUN: yaml2obj %t/stmt_seq_macho.exe.yaml -o %t/stmt_seq_macho.exe +# RUN: llvm-dwarfdump --verify %t/stmt_seq_macho.exe # RUN: yaml2obj %t/stmt_seq_macho.o.yaml -o %t/stmt_seq_macho.o +# RUN: llvm-dwarfdump --verify %t/stmt_seq_macho.o # RUN: dsymutil --flat --verify-dwarf=none -oso-prepend-path %t %t/stmt_seq_macho.exe -o %t/stmt_seq_macho.dSYM # RUN: llvm-dwarfdump --debug-info --debug-line -v %t/stmt_seq_macho.dSYM | sort | FileCheck %s -check-prefix=CHECK_DSYM # RUN: llvm-dwarfdump --debug-info --debug-line -v %t/stmt_seq_macho.dSYM > %t/stmt_seq_macho.dSYM.txt From 571552671c3483fb4df5fafaa34cd9cabc6a4c8e Mon Sep 17 00:00:00 2001 From: Peter Rong Date: Thu, 14 Aug 2025 11:14:26 -0700 Subject: [PATCH 04/12] Address Review --- llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp | 44 ++++++++++++++++--- .../tools/dsymutil/ARM/stmt-seq-macho.cpp | 41 +++++++++++++++++ .../tools/llvm-dwarfdump/verify_stmt_seq.yaml | 24 +++++++--- 3 files changed, 97 insertions(+), 12 deletions(-) create mode 100644 llvm/test/tools/dsymutil/ARM/stmt-seq-macho.cpp diff --git a/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp b/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp index 7d6a643560643..16b1b0869ffbf 100644 --- a/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp +++ b/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp @@ -853,11 +853,11 @@ unsigned DWARFVerifier::verifyDebugInfoAttribute(const DWARFDie &Die, } case DW_AT_LLVM_stmt_sequence: { // Make sure the offset in the DW_AT_LLVM_stmt_sequence attribute is valid - // and points to a valid sequence start in the line table. + // and points to a valid sequence offset in the line table. auto SectionOffset = AttrValue.Value.getAsSectionOffset(); if (!SectionOffset) { ReportError("Invalid DW_AT_LLVM_stmt_sequence encoding", - "DIE has invalid DW_AT_LLVM_stmt_sequence encoding:"); + "DIE has invalid DW_AT_LLVM_stmt_sequence encoding"); break; } if (*SectionOffset >= U->getLineSection().Data.size()) { @@ -868,7 +868,7 @@ unsigned DWARFVerifier::verifyDebugInfoAttribute(const DWARFDie &Die, break; } - // Check if the offset points to a valid sequence start + // Get the line table for this unit to validate bounds const auto *LineTable = DCtx.getLineTableForUnit(U); if (!LineTable) { ReportError("DW_AT_LLVM_stmt_sequence without line table", @@ -876,8 +876,42 @@ unsigned DWARFVerifier::verifyDebugInfoAttribute(const DWARFDie &Die, "line table"); break; } + + // Get the DW_AT_stmt_list offset from the compile unit DIE + DWARFDie CUDie = U->getUnitDIE(); + auto StmtListOffset = toSectionOffset(CUDie.find(DW_AT_stmt_list)); + if (!StmtListOffset) { + ReportError("DW_AT_LLVM_stmt_sequence without DW_AT_stmt_list", + "DIE has DW_AT_LLVM_stmt_sequence but compile unit has no " + "DW_AT_stmt_list"); + break; + } + + // Calculate the bounds of this specific line table + uint64_t LineTableStart = *StmtListOffset; + uint64_t PrologueLength = LineTable->Prologue.PrologueLength; + uint64_t TotalLength = LineTable->Prologue.TotalLength; + uint64_t LineTableEnd = + LineTableStart + TotalLength + + (LineTable->Prologue.getFormParams().Format == dwarf::DWARF64 ? 12 : 4); + uint64_t SequencesStart = + LineTableStart + PrologueLength + + (LineTable->Prologue.getFormParams().Format == dwarf::DWARF64 ? 12 : 4); + + // Check if the offset is within the bounds of this specific line table + if (*SectionOffset < SequencesStart || *SectionOffset >= LineTableEnd) { + ReportError("DW_AT_LLVM_stmt_sequence offset out of line table bounds", + "DW_AT_LLVM_stmt_sequence offset " + + llvm::formatv("{0:x8}", *SectionOffset) + + " is not within the line table bounds [" + + llvm::formatv("{0:x8}", SequencesStart) + ", " + + llvm::formatv("{0:x8}", LineTableEnd) + ")"); + break; + } + + // Check if the offset points to a valid sequence offset bool ValidSequenceOffset = false; - // Check if the offset matches any of the sequence start offsets using + // Check if the offset matches any of the sequence offset offsets using // binary search auto it = std::lower_bound(LineTable->Sequences.begin(), LineTable->Sequences.end(), *SectionOffset, @@ -894,7 +928,7 @@ unsigned DWARFVerifier::verifyDebugInfoAttribute(const DWARFDie &Die, "Invalid DW_AT_LLVM_stmt_sequence offset", "DW_AT_LLVM_stmt_sequence offset " + llvm::formatv("{0:x8}", *SectionOffset) + - " does not point to a valid sequence start in the line table"); + " does not point to a valid sequence offset in the line table"); break; } default: diff --git a/llvm/test/tools/dsymutil/ARM/stmt-seq-macho.cpp b/llvm/test/tools/dsymutil/ARM/stmt-seq-macho.cpp new file mode 100644 index 0000000000000..20f85cc43254f --- /dev/null +++ b/llvm/test/tools/dsymutil/ARM/stmt-seq-macho.cpp @@ -0,0 +1,41 @@ +#define ATTRIB extern "C" __attribute__((noinline)) +ATTRIB int function1_copy1(int a) { + return ++a; +} + +ATTRIB int function3_copy1(int a) { + int b = a + 3; + return b + 1; +} + +ATTRIB int function2_copy1(int a) { + return a - 22; +} + +ATTRIB int function3_copy2(int a) { + int b = a + 3; + return b + 1; +} + +ATTRIB int function2_copy2(int a) { + int result = a - 22; + return result; +} + +struct logic_error { + logic_error(const char* s) {} +}; + +struct length_error : public logic_error { + __attribute__((noinline)) explicit length_error(const char* s) : logic_error(s) {} +}; + +int main() { + int sum = 0; + sum += function2_copy2(3); + sum += function3_copy2(41); + sum += function2_copy1(11); + sum += function1_copy1(42); + length_error e("test"); + return sum; +} diff --git a/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml b/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml index 1873eea9d49f3..8a9407cd3c6ec 100644 --- a/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml +++ b/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml @@ -5,14 +5,24 @@ # RUN: yaml2obj %s -o verify_stmt_seq.o # RUN: not llvm-dwarfdump -verify -debug-info verify_stmt_seq.o | FileCheck %s --check-prefix=CHECK_INVALID -# Line 1326 0XAB -# CHECK_INVALID: error: DW_AT_LLVM_stmt_sequence offset 0x000000ab does not point to a valid sequence start in the line table -# Line 1372 0xEEEEE7 + +# CHECK_INVALID: error: DW_AT_LLVM_stmt_sequence offset 0x00000000 is not within the line table bounds [0x0000002e, 0x000000fd) +# CHECK_INVALID: DW_AT_LLVM_stmt_sequence [DW_FORM_sec_offset] (0x00000000) + +# CHECK_INVALID: error: DIE has invalid DW_AT_LLVM_stmt_sequence encoding +# CHECK_INVALID: DW_AT_LLVM_stmt_sequence [DW_FORM_data4] (0x000000a7) + +# CHECK_INVALID: error: DW_AT_LLVM_stmt_sequence offset 0x000000ab does not point to a valid sequence offset in the line table +# CHECK_INVALID: DW_AT_LLVM_stmt_sequence [DW_FORM_sec_offset] (0x000000ab) + # CHECK_INVALID: error: DW_AT_LLVM_stmt_sequence offset is beyond .debug_line bounds: 0x00eeeee7 +# CHECK_INVALID: DW_AT_LLVM_stmt_sequence [DW_FORM_sec_offset] (0x00eeeee7) # CHECK_INVALID: error: Aggregated error counts: -# CHECK_INVALID: error: DW_AT_LLVM_stmt_sequence offset out of bounds occurred 1 time(s). -# CHECK_INVALID: error: Invalid DW_AT_LLVM_stmt_sequence offset occurred 1 time(s). +# CHECK_INVALID-NEXT: error: DW_AT_LLVM_stmt_sequence offset out of bounds occurred 1 time(s). +# CHECK_INVALID-NEXT: error: DW_AT_LLVM_stmt_sequence offset out of line table bounds occurred 1 time(s). +# CHECK_INVALID-NEXT: error: Invalid DW_AT_LLVM_stmt_sequence encoding occurred 1 time(s). +# CHECK_INVALID-NEXT: error: Invalid DW_AT_LLVM_stmt_sequence offset occurred 1 time(s). # CHECK_INVALID-NOT: error: --- !mach-o @@ -808,7 +818,7 @@ DWARF: - Attribute: DW_AT_high_pc Form: DW_FORM_data4 - Attribute: DW_AT_LLVM_stmt_sequence - Form: DW_FORM_sec_offset + Form: DW_FORM_data4 - Attribute: DW_AT_frame_base Form: DW_FORM_exprloc - Attribute: DW_AT_call_all_calls @@ -1041,7 +1051,7 @@ DWARF: - Value: 0x0 - Value: 0x8 - Value: 0x1 - - Value: 0x34 + - BlockData: [ 0x6F ] - Value: 0x1 BlockData: [ 0x6F ] - Value: 0x1 From 01a59eb097192a69701509f499a0c70060df59d0 Mon Sep 17 00:00:00 2001 From: Peter Rong Date: Thu, 14 Aug 2025 11:18:36 -0700 Subject: [PATCH 05/12] Split input and test --- .../Inputs/verify_stmt_seq.yaml | 1600 ++++++++++++++++ .../tools/llvm-dwarfdump/verify_stmt_seq.yaml | 1604 +---------------- 2 files changed, 1602 insertions(+), 1602 deletions(-) create mode 100644 llvm/test/tools/llvm-dwarfdump/Inputs/verify_stmt_seq.yaml diff --git a/llvm/test/tools/llvm-dwarfdump/Inputs/verify_stmt_seq.yaml b/llvm/test/tools/llvm-dwarfdump/Inputs/verify_stmt_seq.yaml new file mode 100644 index 0000000000000..a3d79613613fe --- /dev/null +++ b/llvm/test/tools/llvm-dwarfdump/Inputs/verify_stmt_seq.yaml @@ -0,0 +1,1600 @@ +--- !mach-o +IsLittleEndian: true +FileHeader: + magic: 0xFEEDFACF + cputype: 0x100000C + cpusubtype: 0x0 + filetype: 0x1 + ncmds: 5 + sizeofcmds: 1176 + flags: 0x2000 + reserved: 0x0 +LoadCommands: + - cmd: LC_SEGMENT_64 + cmdsize: 1032 + segname: '' + vmaddr: 0 + vmsize: 3125 + fileoff: 1208 + filesize: 3125 + maxprot: 7 + initprot: 7 + nsects: 12 + flags: 0 + Sections: + - sectname: __text + segname: __TEXT + addr: 0x0 + size: 148 + offset: 0x4B8 + align: 2 + reloff: 0x10F0 + nreloc: 8 + flags: 0x80000400 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + content: 00040011C0035FD600100011C0035FD600580051C0035FD600100011C0035FD600580051C0035FD6FFC300D1F44F01A9FD7B02A9FD8300916000805200000094F30300AA20058052000000941400130B6001805200000094F30300AA40058052000000947302000B0100009021000091E03F0091000000948002130BFD7B42A9F44F41A9FFC30091C0035FD600000014C0035FD6 + relocations: + - address: 0x8C + symbolnum: 4 + pcrel: true + length: 2 + extern: true + type: 2 + scattered: false + value: 0 + - address: 0x74 + symbolnum: 3 + pcrel: true + length: 2 + extern: true + type: 2 + scattered: false + value: 0 + - address: 0x6C + symbolnum: 1 + pcrel: false + length: 2 + extern: true + type: 4 + scattered: false + value: 0 + - address: 0x68 + symbolnum: 1 + pcrel: true + length: 2 + extern: true + type: 3 + scattered: false + value: 0 + - address: 0x60 + symbolnum: 5 + pcrel: true + length: 2 + extern: true + type: 2 + scattered: false + value: 0 + - address: 0x54 + symbolnum: 6 + pcrel: true + length: 2 + extern: true + type: 2 + scattered: false + value: 0 + - address: 0x48 + symbolnum: 9 + pcrel: true + length: 2 + extern: true + type: 2 + scattered: false + value: 0 + - address: 0x3C + symbolnum: 7 + pcrel: true + length: 2 + extern: true + type: 2 + scattered: false + value: 0 + - sectname: __cstring + segname: __TEXT + addr: 0x94 + size: 5 + offset: 0x54C + align: 0 + reloff: 0x0 + nreloc: 0 + flags: 0x2 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + content: '7465737400' + - sectname: __debug_loc + segname: __DWARF + addr: 0x99 + size: 412 + offset: 0x551 + align: 0 + reloff: 0x0 + nreloc: 0 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + content: 08000000000000000C000000000000000100500C0000000000000010000000000000000400A301509F0000000000000000000000000000000008000000000000000C00000000000000030070039F0000000000000000000000000000000010000000000000001400000000000000010050140000000000000018000000000000000400A301509F0000000000000000000000000000000018000000000000001C000000000000000100501C0000000000000020000000000000000400A301509F0000000000000000000000000000000018000000000000001C00000000000000030070039F0000000000000000000000000000000020000000000000002400000000000000010050240000000000000028000000000000000400A301509F00000000000000000000000000000000240000000000000028000000000000000100500000000000000000000000000000000038000000000000004400000000000000030011009F4400000000000000500000000000000001006350000000000000005C0000000000000001006400000000000000000000000000000000 + - sectname: __debug_abbrev + segname: __DWARF + addr: 0x235 + size: 372 + offset: 0x6ED + align: 0 + reloff: 0x0 + nreloc: 0 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + - sectname: __debug_info + segname: __DWARF + addr: 0x3A9 + size: 747 + offset: 0x861 + align: 0 + reloff: 0x1130 + nreloc: 16 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + relocations: + - address: 0x2A7 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x28E + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x253 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x1F5 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x1E1 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x1CE + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x1BA + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x1A7 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x169 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x12D + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0xF1 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0xC4 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x88 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x5F + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x37 + symbolnum: 2 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x22 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - sectname: __debug_str + segname: __DWARF + addr: 0x694 + size: 400 + offset: 0xB4C + align: 0 + reloff: 0x0 + nreloc: 0 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + - sectname: __apple_names + segname: __DWARF + addr: 0x824 + size: 288 + offset: 0xCDC + align: 0 + reloff: 0x0 + nreloc: 0 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + content: 485341480100000009000000090000000C00000000000000010000000100060000000000FFFFFFFFFFFFFFFF0100000003000000040000000600000007000000080000004A08311CC78E3C8288CB36CF89CB36CFD1125E53522B705390D9F86F6A7F9A7C4908311C8C0000009C000000AC000000BC000000CC000000DC000000EC00000000010000100100000601000001000000F000000000000000D6000000010000005E00000000000000F600000001000000C30000000000000016010000010000002C01000000000000440100000100000052020000000000005C01000001000000A6020000000000002B0100000200000052020000A60200000000000026010000010000006801000000000000E6000000010000008700000000000000 + - sectname: __apple_objc + segname: __DWARF + addr: 0x944 + size: 36 + offset: 0xDFC + align: 0 + reloff: 0x0 + nreloc: 0 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + content: 485341480100000001000000000000000C000000000000000100000001000600FFFFFFFF + - sectname: __apple_namespac + segname: __DWARF + addr: 0x968 + size: 36 + offset: 0xE20 + align: 0 + reloff: 0x0 + nreloc: 0 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + content: 485341480100000001000000000000000C000000000000000100000001000600FFFFFFFF + - sectname: __apple_types + segname: __DWARF + addr: 0x98C + size: 195 + offset: 0xE44 + align: 0 + reloff: 0x0 + nreloc: 0 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + content: 48534148010000000500000005000000140000000000000003000000010006000300050004000B000000000002000000FFFFFFFF03000000040000007CA8F05D90D9F86F5B738CDC3080880B6320957C64000000770000008A0000009D000000B0000000380100000100000027020000130000000000002B010000010000000502000013000000000000C20000000100000057000000240000000000007401000001000000DE02000024000000000000BD000000010000005000000024000000000000 + - sectname: __debug_frame + segname: __DWARF + addr: 0xA50 + size: 232 + offset: 0xF08 + align: 3 + reloff: 0x11B0 + nreloc: 8 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + content: 14000000FFFFFFFF0400080001781E0C1F00000000000000140000000000000000000000000000000800000000000000140000000000000008000000000000000800000000000000140000000000000010000000000000000800000000000000140000000000000018000000000000000800000000000000140000000000000020000000000000000800000000000000240000000000000028000000000000006400000000000000500C1D109E019D02930394040000000014000000000000008C000000000000000400000000000000140000000000000090000000000000000400000000000000 + relocations: + - address: 0xD8 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0xC0 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x98 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x80 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x68 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x50 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x38 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x20 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - sectname: __debug_line + segname: __DWARF + addr: 0xB38 + size: 253 + offset: 0xFF0 + align: 0 + reloff: 0x11F0 + nreloc: 8 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + relocations: + - address: 0xED + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0xD9 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0xAA + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x96 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x7E + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x66 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x50 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x3A + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - cmd: LC_BUILD_VERSION + cmdsize: 24 + platform: 1 + minos: 720896 + sdk: 0 + ntools: 0 + - cmd: LC_LINKER_OPTIMIZATION_HINT + cmdsize: 16 + dataoff: 4656 + datasize: 8 + - cmd: LC_SYMTAB + cmdsize: 24 + symoff: 4664 + nsyms: 11 + stroff: 4840 + strsize: 168 + - cmd: LC_DYSYMTAB + cmdsize: 80 + ilocalsym: 0 + nlocalsym: 3 + iextdefsym: 3 + nextdefsym: 8 + iundefsym: 11 + 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 +LinkEditData: + NameList: + - n_strx: 155 + n_type: 0xE + n_sect: 1 + n_desc: 0 + n_value: 0 + - n_strx: 1 + n_type: 0xE + n_sect: 2 + n_desc: 0 + n_value: 148 + - n_strx: 149 + n_type: 0xE + n_sect: 2 + n_desc: 0 + n_value: 148 + - n_strx: 39 + n_type: 0xF + n_sect: 1 + n_desc: 192 + n_value: 140 + - n_strx: 14 + n_type: 0xF + n_sect: 1 + n_desc: 192 + n_value: 144 + - n_strx: 132 + n_type: 0xF + n_sect: 1 + n_desc: 0 + n_value: 0 + - n_strx: 115 + n_type: 0xF + n_sect: 1 + n_desc: 0 + n_value: 16 + - n_strx: 81 + n_type: 0xF + n_sect: 1 + n_desc: 0 + n_value: 32 + - n_strx: 98 + n_type: 0xF + n_sect: 1 + n_desc: 0 + n_value: 8 + - n_strx: 64 + n_type: 0xF + n_sect: 1 + n_desc: 0 + n_value: 24 + - n_strx: 8 + n_type: 0xF + n_sect: 1 + n_desc: 0 + n_value: 40 + StringTable: + - '' + - l_.str + - _main + - __ZN12length_errorC2EPKc + - __ZN12length_errorC1EPKc + - _function3_copy2 + - _function2_copy2 + - _function3_copy1 + - _function2_copy1 + - _function1_copy1 + - ltmp1 + - ltmp0 + - '' + - '' + - '' + - '' + - '' + - '' + - '' +DWARF: + debug_str: + - 'Facebook clang version 19.1.5 (https://git.internal.tfbnw.net/repos/git/rw/osmeta/external/llvm-project b36c9ae1f8f2b39e4aafb9ca4700c608c3036365)' + - stmt_seq_macho.cpp + - '/' + - '/private/tmp/stmt_seq' + - char + - __ARRAY_SIZE_TYPE__ + - function1_copy1 + - function3_copy1 + - function2_copy1 + - function3_copy2 + - function2_copy2 + - main + - length_error + - logic_error + - _ZN12length_errorC1EPKc + - _ZN12length_errorC2EPKc + - int + - a + - b + - result + - e + - sum + - this + - s + debug_abbrev: + - ID: 0 + Table: + - Code: 0x1 + Tag: DW_TAG_compile_unit + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_producer + Form: DW_FORM_strp + - Attribute: DW_AT_language + Form: DW_FORM_data2 + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_LLVM_sysroot + Form: DW_FORM_strp + - Attribute: DW_AT_stmt_list + Form: DW_FORM_sec_offset + - Attribute: DW_AT_comp_dir + Form: DW_FORM_strp + - Attribute: DW_AT_APPLE_optimized + Form: DW_FORM_flag_present + - Attribute: DW_AT_low_pc + Form: DW_FORM_addr + - Attribute: DW_AT_high_pc + Form: DW_FORM_data4 + - Code: 0x2 + Tag: DW_TAG_variable + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_location + Form: DW_FORM_exprloc + - Code: 0x3 + Tag: DW_TAG_array_type + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Code: 0x4 + Tag: DW_TAG_subrange_type + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Attribute: DW_AT_count + Form: DW_FORM_data1 + - Code: 0x5 + Tag: DW_TAG_const_type + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Code: 0x6 + Tag: DW_TAG_base_type + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_encoding + Form: DW_FORM_data1 + - Attribute: DW_AT_byte_size + Form: DW_FORM_data1 + - Code: 0x7 + Tag: DW_TAG_base_type + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_byte_size + Form: DW_FORM_data1 + - Attribute: DW_AT_encoding + Form: DW_FORM_data1 + - Code: 0x8 + Tag: DW_TAG_subprogram + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_low_pc + Form: DW_FORM_addr + - Attribute: DW_AT_high_pc + Form: DW_FORM_data4 + - Attribute: DW_AT_APPLE_omit_frame_ptr + Form: DW_FORM_flag_present + - Attribute: DW_AT_LLVM_stmt_sequence + Form: DW_FORM_sec_offset + - Attribute: DW_AT_frame_base + Form: DW_FORM_exprloc + - Attribute: DW_AT_call_all_calls + Form: DW_FORM_flag_present + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Attribute: DW_AT_external + Form: DW_FORM_flag_present + - Attribute: DW_AT_APPLE_optimized + Form: DW_FORM_flag_present + - Code: 0x9 + Tag: DW_TAG_formal_parameter + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Code: 0xA + Tag: DW_TAG_formal_parameter + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_location + Form: DW_FORM_sec_offset + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Code: 0xB + Tag: DW_TAG_variable + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_location + Form: DW_FORM_sec_offset + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Code: 0xC + Tag: DW_TAG_subprogram + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_low_pc + Form: DW_FORM_addr + - Attribute: DW_AT_high_pc + Form: DW_FORM_data4 + - Attribute: DW_AT_LLVM_stmt_sequence + Form: DW_FORM_data4 + - Attribute: DW_AT_frame_base + Form: DW_FORM_exprloc + - Attribute: DW_AT_call_all_calls + Form: DW_FORM_flag_present + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Attribute: DW_AT_external + Form: DW_FORM_flag_present + - Attribute: DW_AT_APPLE_optimized + Form: DW_FORM_flag_present + - Code: 0xD + Tag: DW_TAG_variable + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_location + Form: DW_FORM_exprloc + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Code: 0xE + Tag: DW_TAG_call_site + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_call_origin + Form: DW_FORM_ref4 + - Attribute: DW_AT_call_return_pc + Form: DW_FORM_addr + - Code: 0xF + Tag: DW_TAG_call_site_parameter + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_location + Form: DW_FORM_exprloc + - Attribute: DW_AT_call_value + Form: DW_FORM_exprloc + - Code: 0x10 + Tag: DW_TAG_structure_type + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_calling_convention + Form: DW_FORM_data1 + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_byte_size + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Code: 0x11 + Tag: DW_TAG_inheritance + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Attribute: DW_AT_data_member_location + Form: DW_FORM_data1 + - Code: 0x12 + Tag: DW_TAG_subprogram + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_declaration + Form: DW_FORM_flag_present + - Attribute: DW_AT_external + Form: DW_FORM_flag_present + - Attribute: DW_AT_APPLE_optimized + Form: DW_FORM_flag_present + - Attribute: DW_AT_explicit + Form: DW_FORM_flag_present + - Code: 0x13 + Tag: DW_TAG_formal_parameter + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Attribute: DW_AT_artificial + Form: DW_FORM_flag_present + - Code: 0x14 + Tag: DW_TAG_formal_parameter + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Code: 0x15 + Tag: DW_TAG_subprogram + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_declaration + Form: DW_FORM_flag_present + - Attribute: DW_AT_external + Form: DW_FORM_flag_present + - Attribute: DW_AT_APPLE_optimized + Form: DW_FORM_flag_present + - Code: 0x16 + Tag: DW_TAG_pointer_type + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Code: 0x17 + Tag: DW_TAG_subprogram + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_low_pc + Form: DW_FORM_addr + - Attribute: DW_AT_high_pc + Form: DW_FORM_data4 + - Attribute: DW_AT_APPLE_omit_frame_ptr + Form: DW_FORM_flag_present + - Attribute: DW_AT_LLVM_stmt_sequence + Form: DW_FORM_sec_offset + - Attribute: DW_AT_frame_base + Form: DW_FORM_exprloc + - Attribute: DW_AT_object_pointer + Form: DW_FORM_ref4 + - Attribute: DW_AT_call_all_calls + Form: DW_FORM_flag_present + - Attribute: DW_AT_linkage_name + Form: DW_FORM_strp + - Attribute: DW_AT_specification + Form: DW_FORM_ref4 + - Code: 0x18 + Tag: DW_TAG_formal_parameter + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_location + Form: DW_FORM_exprloc + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Attribute: DW_AT_artificial + Form: DW_FORM_flag_present + - Code: 0x19 + Tag: DW_TAG_formal_parameter + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_location + Form: DW_FORM_exprloc + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Code: 0x1A + Tag: DW_TAG_call_site + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_call_origin + Form: DW_FORM_ref4 + - Attribute: DW_AT_call_tail_call + Form: DW_FORM_flag_present + - Attribute: DW_AT_call_pc + Form: DW_FORM_addr + debug_info: + - Length: 0x2E7 + Version: 4 + AbbrevTableID: 0 + AbbrOffset: 0x0 + AddrSize: 8 + Entries: + - AbbrCode: 0x1 + Values: + - Value: 0x0 + - Value: 0x21 + - Value: 0x92 + - Value: 0xA5 + - Value: 0x0 + - Value: 0xA7 + - Value: 0x1 + - Value: 0x0 + - Value: 0x94 + - AbbrCode: 0x2 + Values: + - Value: 0x3F + - Value: 0x1 + - Value: 0x27 + - Value: 0x9 + BlockData: [ 0x3, 0x94, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0 ] + - AbbrCode: 0x3 + Values: + - Value: 0x4B + - AbbrCode: 0x4 + Values: + - Value: 0x57 + - Value: 0x5 + - AbbrCode: 0x0 + - AbbrCode: 0x5 + Values: + - Value: 0x50 + - AbbrCode: 0x6 + Values: + - Value: 0xBD + - Value: 0x6 + - Value: 0x1 + - AbbrCode: 0x7 + Values: + - Value: 0xC2 + - Value: 0x8 + - Value: 0x7 + - AbbrCode: 0x8 + Values: + - Value: 0x0 + - Value: 0x8 + - Value: 0x1 + - BlockData: [ 0x6F ] + - Value: 0x1 + BlockData: [ 0x6F ] + - Value: 0x1 + - Value: 0xD6 + - Value: 0x1 + - Value: 0x2 + - Value: 0x2DE + - Value: 0x1 + - Value: 0x1 + - AbbrCode: 0x9 + Values: + - Value: 0x178 + - Value: 0x1 + - Value: 0x2 + - Value: 0x2DE + - AbbrCode: 0x0 + - AbbrCode: 0x8 + Values: + - Value: 0x8 + - Value: 0x8 + - Value: 0x1 + - Value: 0x4A + - Value: 0x1 + BlockData: [ 0x6F ] + - Value: 0x1 + - Value: 0xE6 + - Value: 0x1 + - Value: 0x6 + - Value: 0x2DE + - Value: 0x1 + - Value: 0x1 + - AbbrCode: 0xA + Values: + - Value: 0x0 + - Value: 0x178 + - Value: 0x1 + - Value: 0x6 + - Value: 0x2DE + - AbbrCode: 0xB + Values: + - Value: 0x39 + - Value: 0x17A + - Value: 0x1 + - Value: 0x7 + - Value: 0x2DE + - AbbrCode: 0x0 + - AbbrCode: 0x8 + Values: + - Value: 0x10 + - Value: 0x8 + - Value: 0x1 + - Value: 0x60 + - Value: 0x1 + BlockData: [ 0x6F ] + - Value: 0x1 + - Value: 0xF6 + - Value: 0x1 + - Value: 0xB + - Value: 0x2DE + - Value: 0x1 + - Value: 0x1 + - AbbrCode: 0xA + Values: + - Value: 0x5E + - Value: 0x178 + - Value: 0x1 + - Value: 0xB + - Value: 0x2DE + - AbbrCode: 0x0 + - AbbrCode: 0x8 + Values: + - Value: 0x18 + - Value: 0x8 + - Value: 0x1 + - Value: 0x78 + - Value: 0x1 + BlockData: [ 0x6F ] + - Value: 0x1 + - Value: 0x106 + - Value: 0x1 + - Value: 0xF + - Value: 0x2DE + - Value: 0x1 + - Value: 0x1 + - AbbrCode: 0xA + Values: + - Value: 0x97 + - Value: 0x178 + - Value: 0x1 + - Value: 0xF + - Value: 0x2DE + - AbbrCode: 0xB + Values: + - Value: 0xD0 + - Value: 0x17A + - Value: 0x1 + - Value: 0x10 + - Value: 0x2DE + - AbbrCode: 0x0 + - AbbrCode: 0x8 + Values: + - Value: 0x20 + - Value: 0x8 + - Value: 0x1 + - Value: 0x90 + - Value: 0x1 + BlockData: [ 0x6F ] + - Value: 0x1 + - Value: 0x116 + - Value: 0x1 + - Value: 0x14 + - Value: 0x2DE + - Value: 0x1 + - Value: 0x1 + - AbbrCode: 0xA + Values: + - Value: 0xF5 + - Value: 0x178 + - Value: 0x1 + - Value: 0x14 + - Value: 0x2DE + - AbbrCode: 0xB + Values: + - Value: 0x12E + - Value: 0x17C + - Value: 0x1 + - Value: 0x15 + - Value: 0x2DE + - AbbrCode: 0x0 + - AbbrCode: 0xC + Values: + - Value: 0x28 + - Value: 0x64 + - Value: 0xA7 + - Value: 0x1 + BlockData: [ 0x6D ] + - Value: 0x1 + - Value: 0x126 + - Value: 0x1 + - Value: 0x21 + - Value: 0x2DE + - Value: 0x1 + - Value: 0x1 + - AbbrCode: 0xD + Values: + - Value: 0x2 + BlockData: [ 0x8F, 0xF ] + - Value: 0x183 + - Value: 0x1 + - Value: 0x27 + - Value: 0x205 + - AbbrCode: 0xB + Values: + - Value: 0x151 + - Value: 0x185 + - Value: 0x1 + - Value: 0x22 + - Value: 0x2DE + - AbbrCode: 0xE + Values: + - Value: 0x12C + - Value: 0x40 + - AbbrCode: 0xF + Values: + - Value: 0x1 + BlockData: [ 0x50 ] + - Value: 0x1 + BlockData: [ 0x33 ] + - AbbrCode: 0x0 + - AbbrCode: 0xE + Values: + - Value: 0xF0 + - Value: 0x4C + - AbbrCode: 0xF + Values: + - Value: 0x1 + BlockData: [ 0x50 ] + - Value: 0x2 + BlockData: [ 0x10, 0x29 ] + - AbbrCode: 0x0 + - AbbrCode: 0xE + Values: + - Value: 0xC3 + - Value: 0x58 + - AbbrCode: 0xF + Values: + - Value: 0x1 + BlockData: [ 0x50 ] + - Value: 0x1 + BlockData: [ 0x3B ] + - AbbrCode: 0x0 + - AbbrCode: 0xE + Values: + - Value: 0x5E + - Value: 0x64 + - AbbrCode: 0xF + Values: + - Value: 0x1 + BlockData: [ 0x50 ] + - Value: 0x2 + BlockData: [ 0x10, 0x2A ] + - AbbrCode: 0x0 + - AbbrCode: 0xE + Values: + - Value: 0x252 + - Value: 0x78 + - AbbrCode: 0xF + Values: + - Value: 0x1 + BlockData: [ 0x50 ] + - Value: 0x2 + BlockData: [ 0x8F, 0xF ] + - AbbrCode: 0x0 + - AbbrCode: 0x0 + - AbbrCode: 0x10 + Values: + - Value: 0x5 + - Value: 0x12B + - Value: 0x1 + - Value: 0x1 + - Value: 0x1D + - AbbrCode: 0x11 + Values: + - Value: 0x227 + - Value: 0x0 + - AbbrCode: 0x12 + Values: + - Value: 0x12B + - Value: 0x1 + - Value: 0x1E + - Value: 0x1 + - Value: 0x1 + - Value: 0x1 + - Value: 0x1 + - AbbrCode: 0x13 + Values: + - Value: 0x24D + - Value: 0x1 + - AbbrCode: 0x14 + Values: + - Value: 0x248 + - AbbrCode: 0x0 + - AbbrCode: 0x0 + - AbbrCode: 0x10 + Values: + - Value: 0x5 + - Value: 0x138 + - Value: 0x1 + - Value: 0x1 + - Value: 0x19 + - AbbrCode: 0x15 + Values: + - Value: 0x138 + - Value: 0x1 + - Value: 0x1A + - Value: 0x1 + - Value: 0x1 + - Value: 0x1 + - AbbrCode: 0x13 + Values: + - Value: 0x243 + - Value: 0x1 + - AbbrCode: 0x14 + Values: + - Value: 0x248 + - AbbrCode: 0x0 + - AbbrCode: 0x0 + - AbbrCode: 0x16 + Values: + - Value: 0x227 + - AbbrCode: 0x16 + Values: + - Value: 0x4B + - AbbrCode: 0x16 + Values: + - Value: 0x205 + - AbbrCode: 0x17 + Values: + - Value: 0x8C + - Value: 0x4 + - Value: 0x1 + - Value: 0xAB + - Value: 0x1 + BlockData: [ 0x6F ] + - Value: 0x271 + - Value: 0x1 + - Value: 0x144 + - Value: 0x214 + - AbbrCode: 0x18 + Values: + - Value: 0x1 + BlockData: [ 0x50 ] + - Value: 0x189 + - Value: 0x2E5 + - Value: 0x1 + - AbbrCode: 0x19 + Values: + - Value: 0x1 + BlockData: [ 0x51 ] + - Value: 0x18E + - Value: 0x1 + - Value: 0x1E + - Value: 0x248 + - AbbrCode: 0x1A + Values: + - Value: 0x2A6 + - Value: 0x1 + - Value: 0x8C + - AbbrCode: 0xF + Values: + - Value: 0x1 + BlockData: [ 0x50 ] + - Value: 0x3 + BlockData: [ 0xA3, 0x1, 0x50 ] + - AbbrCode: 0xF + Values: + - Value: 0x1 + BlockData: [ 0x51 ] + - Value: 0x3 + BlockData: [ 0xA3, 0x1, 0x51 ] + - AbbrCode: 0x0 + - AbbrCode: 0x0 + - AbbrCode: 0x17 + Values: + - Value: 0x90 + - Value: 0x4 + - Value: 0x1 + - Value: 0xEEEEE7 + - Value: 0x1 + BlockData: [ 0x6F ] + - Value: 0x2C5 + - Value: 0x1 + - Value: 0x15C + - Value: 0x214 + - AbbrCode: 0x18 + Values: + - Value: 0x1 + BlockData: [ 0x50 ] + - Value: 0x189 + - Value: 0x2E5 + - Value: 0x1 + - AbbrCode: 0x19 + Values: + - Value: 0x1 + BlockData: [ 0x51 ] + - Value: 0x18E + - Value: 0x1 + - Value: 0x1E + - Value: 0x248 + - AbbrCode: 0x0 + - AbbrCode: 0x6 + Values: + - Value: 0x174 + - Value: 0x5 + - Value: 0x4 + - AbbrCode: 0x16 + Values: + - Value: 0x205 + - AbbrCode: 0x0 + debug_line: + - Length: 249 + Version: 4 + PrologueLength: 42 + 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: stmt_seq_macho.cpp + DirIdx: 0 + ModTime: 0 + Length: 0 + Opcodes: + - Opcode: DW_LNS_set_column + Data: 10 + - Opcode: DW_LNS_set_prologue_end + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 9 + SubOpcode: DW_LNE_set_address + Data: 0 + - Opcode: 0x14 + Data: 0 + - Opcode: DW_LNS_set_column + Data: 3 + - Opcode: DW_LNS_negate_stmt + Data: 0 + - Opcode: 0x4A + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 1 + SubOpcode: DW_LNE_end_sequence + Data: 0 + - Opcode: DW_LNS_set_column + Data: 14 + - Opcode: DW_LNS_set_prologue_end + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 9 + SubOpcode: DW_LNE_set_address + Data: 8 + - Opcode: 0x19 + Data: 0 + - Opcode: DW_LNS_set_column + Data: 5 + - Opcode: DW_LNS_negate_stmt + Data: 0 + - Opcode: 0x4A + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 1 + SubOpcode: DW_LNE_end_sequence + Data: 0 + - Opcode: DW_LNS_set_column + Data: 14 + - Opcode: DW_LNS_set_prologue_end + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 9 + SubOpcode: DW_LNE_set_address + Data: 16 + - Opcode: DW_LNS_advance_line + SData: 11 + Data: 0 + - Opcode: DW_LNS_copy + Data: 0 + - Opcode: DW_LNS_set_column + Data: 5 + - Opcode: DW_LNS_negate_stmt + Data: 0 + - Opcode: 0x4A + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 1 + SubOpcode: DW_LNE_end_sequence + Data: 0 + - Opcode: DW_LNS_set_column + Data: 14 + - Opcode: DW_LNS_set_prologue_end + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 9 + SubOpcode: DW_LNE_set_address + Data: 24 + - Opcode: DW_LNS_advance_line + SData: 16 + Data: 0 + - Opcode: DW_LNS_copy + Data: 0 + - Opcode: DW_LNS_set_column + Data: 5 + - Opcode: DW_LNS_negate_stmt + Data: 0 + - Opcode: 0x4A + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 1 + SubOpcode: DW_LNE_end_sequence + Data: 0 + - Opcode: DW_LNS_set_column + Data: 20 + - Opcode: DW_LNS_set_prologue_end + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 9 + SubOpcode: DW_LNE_set_address + Data: 32 + - Opcode: DW_LNS_advance_line + SData: 20 + Data: 0 + - Opcode: DW_LNS_copy + Data: 0 + - Opcode: DW_LNS_set_column + Data: 5 + - Opcode: 0x4B + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 1 + SubOpcode: DW_LNE_end_sequence + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 9 + SubOpcode: DW_LNE_set_address + Data: 40 + - Opcode: DW_LNS_advance_line + SData: 32 + Data: 0 + - Opcode: DW_LNS_copy + Data: 0 + - Opcode: DW_LNS_set_column + Data: 12 + - Opcode: DW_LNS_set_prologue_end + Data: 0 + - Opcode: 0xF4 + Data: 0 + - Opcode: 0xBB + Data: 0 + - Opcode: DW_LNS_set_column + Data: 9 + - Opcode: DW_LNS_negate_stmt + Data: 0 + - Opcode: 0x82 + Data: 0 + - Opcode: DW_LNS_set_column + Data: 12 + - Opcode: DW_LNS_negate_stmt + Data: 0 + - Opcode: 0x4B + Data: 0 + - Opcode: 0xBB + Data: 0 + - Opcode: DW_LNS_set_column + Data: 9 + - Opcode: 0x81 + Data: 0 + - Opcode: DW_LNS_set_column + Data: 18 + - Opcode: 0x4C + Data: 0 + - Opcode: DW_LNS_set_column + Data: 9 + - Opcode: 0xF1 + Data: 0 + - Opcode: DW_LNS_set_column + Data: 5 + - Opcode: DW_LNS_set_epilogue_begin + Data: 0 + - Opcode: 0x4C + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 1 + SubOpcode: DW_LNE_end_sequence + Data: 0 + - Opcode: DW_LNS_set_column + Data: 85 + - Opcode: DW_LNS_set_prologue_end + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 9 + SubOpcode: DW_LNE_set_address + Data: 140 + - Opcode: DW_LNS_advance_line + SData: 29 + Data: 0 + - Opcode: DW_LNS_copy + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 1 + SubOpcode: DW_LNE_end_sequence + Data: 0 + - Opcode: DW_LNS_set_column + Data: 86 + - Opcode: DW_LNS_set_prologue_end + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 9 + SubOpcode: DW_LNE_set_address + Data: 144 + - Opcode: DW_LNS_advance_line + SData: 29 + Data: 0 + - Opcode: DW_LNS_copy + Data: 0 + - Opcode: DW_LNS_advance_pc + Data: 4 + - Opcode: DW_LNS_extended_op + ExtLen: 1 + SubOpcode: DW_LNE_end_sequence + Data: 0 +... diff --git a/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml b/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml index 8a9407cd3c6ec..271fd3c9517f2 100644 --- a/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml +++ b/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml @@ -1,8 +1,8 @@ # Object file copied from llvm/test/tools/dsymutil/ARM/stmt-seq-macho.test -# Then I manually tempered with some of the value of the attribute +# Then manually tempered with some of the value of the attribute # I hope there are easier ways to construct tests like this. -# RUN: yaml2obj %s -o verify_stmt_seq.o +# RUN: yaml2obj %p/Inputs/verify_stmt_seq.yaml -o verify_stmt_seq.o # RUN: not llvm-dwarfdump -verify -debug-info verify_stmt_seq.o | FileCheck %s --check-prefix=CHECK_INVALID @@ -25,1603 +25,3 @@ # CHECK_INVALID-NEXT: error: Invalid DW_AT_LLVM_stmt_sequence offset occurred 1 time(s). # CHECK_INVALID-NOT: error: ---- !mach-o -IsLittleEndian: true -FileHeader: - magic: 0xFEEDFACF - cputype: 0x100000C - cpusubtype: 0x0 - filetype: 0x1 - ncmds: 5 - sizeofcmds: 1176 - flags: 0x2000 - reserved: 0x0 -LoadCommands: - - cmd: LC_SEGMENT_64 - cmdsize: 1032 - segname: '' - vmaddr: 0 - vmsize: 3125 - fileoff: 1208 - filesize: 3125 - maxprot: 7 - initprot: 7 - nsects: 12 - flags: 0 - Sections: - - sectname: __text - segname: __TEXT - addr: 0x0 - size: 148 - offset: 0x4B8 - align: 2 - reloff: 0x10F0 - nreloc: 8 - flags: 0x80000400 - reserved1: 0x0 - reserved2: 0x0 - reserved3: 0x0 - content: 00040011C0035FD600100011C0035FD600580051C0035FD600100011C0035FD600580051C0035FD6FFC300D1F44F01A9FD7B02A9FD8300916000805200000094F30300AA20058052000000941400130B6001805200000094F30300AA40058052000000947302000B0100009021000091E03F0091000000948002130BFD7B42A9F44F41A9FFC30091C0035FD600000014C0035FD6 - relocations: - - address: 0x8C - symbolnum: 4 - pcrel: true - length: 2 - extern: true - type: 2 - scattered: false - value: 0 - - address: 0x74 - symbolnum: 3 - pcrel: true - length: 2 - extern: true - type: 2 - scattered: false - value: 0 - - address: 0x6C - symbolnum: 1 - pcrel: false - length: 2 - extern: true - type: 4 - scattered: false - value: 0 - - address: 0x68 - symbolnum: 1 - pcrel: true - length: 2 - extern: true - type: 3 - scattered: false - value: 0 - - address: 0x60 - symbolnum: 5 - pcrel: true - length: 2 - extern: true - type: 2 - scattered: false - value: 0 - - address: 0x54 - symbolnum: 6 - pcrel: true - length: 2 - extern: true - type: 2 - scattered: false - value: 0 - - address: 0x48 - symbolnum: 9 - pcrel: true - length: 2 - extern: true - type: 2 - scattered: false - value: 0 - - address: 0x3C - symbolnum: 7 - pcrel: true - length: 2 - extern: true - type: 2 - scattered: false - value: 0 - - sectname: __cstring - segname: __TEXT - addr: 0x94 - size: 5 - offset: 0x54C - align: 0 - reloff: 0x0 - nreloc: 0 - flags: 0x2 - reserved1: 0x0 - reserved2: 0x0 - reserved3: 0x0 - content: '7465737400' - - sectname: __debug_loc - segname: __DWARF - addr: 0x99 - size: 412 - offset: 0x551 - align: 0 - reloff: 0x0 - nreloc: 0 - flags: 0x2000000 - reserved1: 0x0 - reserved2: 0x0 - reserved3: 0x0 - content: 08000000000000000C000000000000000100500C0000000000000010000000000000000400A301509F0000000000000000000000000000000008000000000000000C00000000000000030070039F0000000000000000000000000000000010000000000000001400000000000000010050140000000000000018000000000000000400A301509F0000000000000000000000000000000018000000000000001C000000000000000100501C0000000000000020000000000000000400A301509F0000000000000000000000000000000018000000000000001C00000000000000030070039F0000000000000000000000000000000020000000000000002400000000000000010050240000000000000028000000000000000400A301509F00000000000000000000000000000000240000000000000028000000000000000100500000000000000000000000000000000038000000000000004400000000000000030011009F4400000000000000500000000000000001006350000000000000005C0000000000000001006400000000000000000000000000000000 - - sectname: __debug_abbrev - segname: __DWARF - addr: 0x235 - size: 372 - offset: 0x6ED - align: 0 - reloff: 0x0 - nreloc: 0 - flags: 0x2000000 - reserved1: 0x0 - reserved2: 0x0 - reserved3: 0x0 - - sectname: __debug_info - segname: __DWARF - addr: 0x3A9 - size: 747 - offset: 0x861 - align: 0 - reloff: 0x1130 - nreloc: 16 - flags: 0x2000000 - reserved1: 0x0 - reserved2: 0x0 - reserved3: 0x0 - relocations: - - address: 0x2A7 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x28E - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x253 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x1F5 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x1E1 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x1CE - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x1BA - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x1A7 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x169 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x12D - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0xF1 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0xC4 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x88 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x5F - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x37 - symbolnum: 2 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x22 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - sectname: __debug_str - segname: __DWARF - addr: 0x694 - size: 400 - offset: 0xB4C - align: 0 - reloff: 0x0 - nreloc: 0 - flags: 0x2000000 - reserved1: 0x0 - reserved2: 0x0 - reserved3: 0x0 - - sectname: __apple_names - segname: __DWARF - addr: 0x824 - size: 288 - offset: 0xCDC - align: 0 - reloff: 0x0 - nreloc: 0 - flags: 0x2000000 - reserved1: 0x0 - reserved2: 0x0 - reserved3: 0x0 - content: 485341480100000009000000090000000C00000000000000010000000100060000000000FFFFFFFFFFFFFFFF0100000003000000040000000600000007000000080000004A08311CC78E3C8288CB36CF89CB36CFD1125E53522B705390D9F86F6A7F9A7C4908311C8C0000009C000000AC000000BC000000CC000000DC000000EC00000000010000100100000601000001000000F000000000000000D6000000010000005E00000000000000F600000001000000C30000000000000016010000010000002C01000000000000440100000100000052020000000000005C01000001000000A6020000000000002B0100000200000052020000A60200000000000026010000010000006801000000000000E6000000010000008700000000000000 - - sectname: __apple_objc - segname: __DWARF - addr: 0x944 - size: 36 - offset: 0xDFC - align: 0 - reloff: 0x0 - nreloc: 0 - flags: 0x2000000 - reserved1: 0x0 - reserved2: 0x0 - reserved3: 0x0 - content: 485341480100000001000000000000000C000000000000000100000001000600FFFFFFFF - - sectname: __apple_namespac - segname: __DWARF - addr: 0x968 - size: 36 - offset: 0xE20 - align: 0 - reloff: 0x0 - nreloc: 0 - flags: 0x2000000 - reserved1: 0x0 - reserved2: 0x0 - reserved3: 0x0 - content: 485341480100000001000000000000000C000000000000000100000001000600FFFFFFFF - - sectname: __apple_types - segname: __DWARF - addr: 0x98C - size: 195 - offset: 0xE44 - align: 0 - reloff: 0x0 - nreloc: 0 - flags: 0x2000000 - reserved1: 0x0 - reserved2: 0x0 - reserved3: 0x0 - content: 48534148010000000500000005000000140000000000000003000000010006000300050004000B000000000002000000FFFFFFFF03000000040000007CA8F05D90D9F86F5B738CDC3080880B6320957C64000000770000008A0000009D000000B0000000380100000100000027020000130000000000002B010000010000000502000013000000000000C20000000100000057000000240000000000007401000001000000DE02000024000000000000BD000000010000005000000024000000000000 - - sectname: __debug_frame - segname: __DWARF - addr: 0xA50 - size: 232 - offset: 0xF08 - align: 3 - reloff: 0x11B0 - nreloc: 8 - flags: 0x2000000 - reserved1: 0x0 - reserved2: 0x0 - reserved3: 0x0 - content: 14000000FFFFFFFF0400080001781E0C1F00000000000000140000000000000000000000000000000800000000000000140000000000000008000000000000000800000000000000140000000000000010000000000000000800000000000000140000000000000018000000000000000800000000000000140000000000000020000000000000000800000000000000240000000000000028000000000000006400000000000000500C1D109E019D02930394040000000014000000000000008C000000000000000400000000000000140000000000000090000000000000000400000000000000 - relocations: - - address: 0xD8 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0xC0 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x98 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x80 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x68 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x50 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x38 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x20 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - sectname: __debug_line - segname: __DWARF - addr: 0xB38 - size: 253 - offset: 0xFF0 - align: 0 - reloff: 0x11F0 - nreloc: 8 - flags: 0x2000000 - reserved1: 0x0 - reserved2: 0x0 - reserved3: 0x0 - relocations: - - address: 0xED - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0xD9 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0xAA - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x96 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x7E - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x66 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x50 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x3A - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - cmd: LC_BUILD_VERSION - cmdsize: 24 - platform: 1 - minos: 720896 - sdk: 0 - ntools: 0 - - cmd: LC_LINKER_OPTIMIZATION_HINT - cmdsize: 16 - dataoff: 4656 - datasize: 8 - - cmd: LC_SYMTAB - cmdsize: 24 - symoff: 4664 - nsyms: 11 - stroff: 4840 - strsize: 168 - - cmd: LC_DYSYMTAB - cmdsize: 80 - ilocalsym: 0 - nlocalsym: 3 - iextdefsym: 3 - nextdefsym: 8 - iundefsym: 11 - 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 -LinkEditData: - NameList: - - n_strx: 155 - n_type: 0xE - n_sect: 1 - n_desc: 0 - n_value: 0 - - n_strx: 1 - n_type: 0xE - n_sect: 2 - n_desc: 0 - n_value: 148 - - n_strx: 149 - n_type: 0xE - n_sect: 2 - n_desc: 0 - n_value: 148 - - n_strx: 39 - n_type: 0xF - n_sect: 1 - n_desc: 192 - n_value: 140 - - n_strx: 14 - n_type: 0xF - n_sect: 1 - n_desc: 192 - n_value: 144 - - n_strx: 132 - n_type: 0xF - n_sect: 1 - n_desc: 0 - n_value: 0 - - n_strx: 115 - n_type: 0xF - n_sect: 1 - n_desc: 0 - n_value: 16 - - n_strx: 81 - n_type: 0xF - n_sect: 1 - n_desc: 0 - n_value: 32 - - n_strx: 98 - n_type: 0xF - n_sect: 1 - n_desc: 0 - n_value: 8 - - n_strx: 64 - n_type: 0xF - n_sect: 1 - n_desc: 0 - n_value: 24 - - n_strx: 8 - n_type: 0xF - n_sect: 1 - n_desc: 0 - n_value: 40 - StringTable: - - '' - - l_.str - - _main - - __ZN12length_errorC2EPKc - - __ZN12length_errorC1EPKc - - _function3_copy2 - - _function2_copy2 - - _function3_copy1 - - _function2_copy1 - - _function1_copy1 - - ltmp1 - - ltmp0 - - '' - - '' - - '' - - '' - - '' - - '' - - '' -DWARF: - debug_str: - - 'Facebook clang version 19.1.5 (https://git.internal.tfbnw.net/repos/git/rw/osmeta/external/llvm-project b36c9ae1f8f2b39e4aafb9ca4700c608c3036365)' - - stmt_seq_macho.cpp - - '/' - - '/private/tmp/stmt_seq' - - char - - __ARRAY_SIZE_TYPE__ - - function1_copy1 - - function3_copy1 - - function2_copy1 - - function3_copy2 - - function2_copy2 - - main - - length_error - - logic_error - - _ZN12length_errorC1EPKc - - _ZN12length_errorC2EPKc - - int - - a - - b - - result - - e - - sum - - this - - s - debug_abbrev: - - ID: 0 - Table: - - Code: 0x1 - Tag: DW_TAG_compile_unit - Children: DW_CHILDREN_yes - Attributes: - - Attribute: DW_AT_producer - Form: DW_FORM_strp - - Attribute: DW_AT_language - Form: DW_FORM_data2 - - Attribute: DW_AT_name - Form: DW_FORM_strp - - Attribute: DW_AT_LLVM_sysroot - Form: DW_FORM_strp - - Attribute: DW_AT_stmt_list - Form: DW_FORM_sec_offset - - Attribute: DW_AT_comp_dir - Form: DW_FORM_strp - - Attribute: DW_AT_APPLE_optimized - Form: DW_FORM_flag_present - - Attribute: DW_AT_low_pc - Form: DW_FORM_addr - - Attribute: DW_AT_high_pc - Form: DW_FORM_data4 - - Code: 0x2 - Tag: DW_TAG_variable - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Attribute: DW_AT_decl_file - Form: DW_FORM_data1 - - Attribute: DW_AT_decl_line - Form: DW_FORM_data1 - - Attribute: DW_AT_location - Form: DW_FORM_exprloc - - Code: 0x3 - Tag: DW_TAG_array_type - Children: DW_CHILDREN_yes - Attributes: - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Code: 0x4 - Tag: DW_TAG_subrange_type - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Attribute: DW_AT_count - Form: DW_FORM_data1 - - Code: 0x5 - Tag: DW_TAG_const_type - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Code: 0x6 - Tag: DW_TAG_base_type - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_name - Form: DW_FORM_strp - - Attribute: DW_AT_encoding - Form: DW_FORM_data1 - - Attribute: DW_AT_byte_size - Form: DW_FORM_data1 - - Code: 0x7 - Tag: DW_TAG_base_type - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_name - Form: DW_FORM_strp - - Attribute: DW_AT_byte_size - Form: DW_FORM_data1 - - Attribute: DW_AT_encoding - Form: DW_FORM_data1 - - Code: 0x8 - Tag: DW_TAG_subprogram - Children: DW_CHILDREN_yes - Attributes: - - Attribute: DW_AT_low_pc - Form: DW_FORM_addr - - Attribute: DW_AT_high_pc - Form: DW_FORM_data4 - - Attribute: DW_AT_APPLE_omit_frame_ptr - Form: DW_FORM_flag_present - - Attribute: DW_AT_LLVM_stmt_sequence - Form: DW_FORM_sec_offset - - Attribute: DW_AT_frame_base - Form: DW_FORM_exprloc - - Attribute: DW_AT_call_all_calls - Form: DW_FORM_flag_present - - Attribute: DW_AT_name - Form: DW_FORM_strp - - Attribute: DW_AT_decl_file - Form: DW_FORM_data1 - - Attribute: DW_AT_decl_line - Form: DW_FORM_data1 - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Attribute: DW_AT_external - Form: DW_FORM_flag_present - - Attribute: DW_AT_APPLE_optimized - Form: DW_FORM_flag_present - - Code: 0x9 - Tag: DW_TAG_formal_parameter - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_name - Form: DW_FORM_strp - - Attribute: DW_AT_decl_file - Form: DW_FORM_data1 - - Attribute: DW_AT_decl_line - Form: DW_FORM_data1 - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Code: 0xA - Tag: DW_TAG_formal_parameter - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_location - Form: DW_FORM_sec_offset - - Attribute: DW_AT_name - Form: DW_FORM_strp - - Attribute: DW_AT_decl_file - Form: DW_FORM_data1 - - Attribute: DW_AT_decl_line - Form: DW_FORM_data1 - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Code: 0xB - Tag: DW_TAG_variable - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_location - Form: DW_FORM_sec_offset - - Attribute: DW_AT_name - Form: DW_FORM_strp - - Attribute: DW_AT_decl_file - Form: DW_FORM_data1 - - Attribute: DW_AT_decl_line - Form: DW_FORM_data1 - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Code: 0xC - Tag: DW_TAG_subprogram - Children: DW_CHILDREN_yes - Attributes: - - Attribute: DW_AT_low_pc - Form: DW_FORM_addr - - Attribute: DW_AT_high_pc - Form: DW_FORM_data4 - - Attribute: DW_AT_LLVM_stmt_sequence - Form: DW_FORM_data4 - - Attribute: DW_AT_frame_base - Form: DW_FORM_exprloc - - Attribute: DW_AT_call_all_calls - Form: DW_FORM_flag_present - - Attribute: DW_AT_name - Form: DW_FORM_strp - - Attribute: DW_AT_decl_file - Form: DW_FORM_data1 - - Attribute: DW_AT_decl_line - Form: DW_FORM_data1 - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Attribute: DW_AT_external - Form: DW_FORM_flag_present - - Attribute: DW_AT_APPLE_optimized - Form: DW_FORM_flag_present - - Code: 0xD - Tag: DW_TAG_variable - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_location - Form: DW_FORM_exprloc - - Attribute: DW_AT_name - Form: DW_FORM_strp - - Attribute: DW_AT_decl_file - Form: DW_FORM_data1 - - Attribute: DW_AT_decl_line - Form: DW_FORM_data1 - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Code: 0xE - Tag: DW_TAG_call_site - Children: DW_CHILDREN_yes - Attributes: - - Attribute: DW_AT_call_origin - Form: DW_FORM_ref4 - - Attribute: DW_AT_call_return_pc - Form: DW_FORM_addr - - Code: 0xF - Tag: DW_TAG_call_site_parameter - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_location - Form: DW_FORM_exprloc - - Attribute: DW_AT_call_value - Form: DW_FORM_exprloc - - Code: 0x10 - Tag: DW_TAG_structure_type - Children: DW_CHILDREN_yes - Attributes: - - Attribute: DW_AT_calling_convention - Form: DW_FORM_data1 - - Attribute: DW_AT_name - Form: DW_FORM_strp - - Attribute: DW_AT_byte_size - Form: DW_FORM_data1 - - Attribute: DW_AT_decl_file - Form: DW_FORM_data1 - - Attribute: DW_AT_decl_line - Form: DW_FORM_data1 - - Code: 0x11 - Tag: DW_TAG_inheritance - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Attribute: DW_AT_data_member_location - Form: DW_FORM_data1 - - Code: 0x12 - Tag: DW_TAG_subprogram - Children: DW_CHILDREN_yes - Attributes: - - Attribute: DW_AT_name - Form: DW_FORM_strp - - Attribute: DW_AT_decl_file - Form: DW_FORM_data1 - - Attribute: DW_AT_decl_line - Form: DW_FORM_data1 - - Attribute: DW_AT_declaration - Form: DW_FORM_flag_present - - Attribute: DW_AT_external - Form: DW_FORM_flag_present - - Attribute: DW_AT_APPLE_optimized - Form: DW_FORM_flag_present - - Attribute: DW_AT_explicit - Form: DW_FORM_flag_present - - Code: 0x13 - Tag: DW_TAG_formal_parameter - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Attribute: DW_AT_artificial - Form: DW_FORM_flag_present - - Code: 0x14 - Tag: DW_TAG_formal_parameter - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Code: 0x15 - Tag: DW_TAG_subprogram - Children: DW_CHILDREN_yes - Attributes: - - Attribute: DW_AT_name - Form: DW_FORM_strp - - Attribute: DW_AT_decl_file - Form: DW_FORM_data1 - - Attribute: DW_AT_decl_line - Form: DW_FORM_data1 - - Attribute: DW_AT_declaration - Form: DW_FORM_flag_present - - Attribute: DW_AT_external - Form: DW_FORM_flag_present - - Attribute: DW_AT_APPLE_optimized - Form: DW_FORM_flag_present - - Code: 0x16 - Tag: DW_TAG_pointer_type - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Code: 0x17 - Tag: DW_TAG_subprogram - Children: DW_CHILDREN_yes - Attributes: - - Attribute: DW_AT_low_pc - Form: DW_FORM_addr - - Attribute: DW_AT_high_pc - Form: DW_FORM_data4 - - Attribute: DW_AT_APPLE_omit_frame_ptr - Form: DW_FORM_flag_present - - Attribute: DW_AT_LLVM_stmt_sequence - Form: DW_FORM_sec_offset - - Attribute: DW_AT_frame_base - Form: DW_FORM_exprloc - - Attribute: DW_AT_object_pointer - Form: DW_FORM_ref4 - - Attribute: DW_AT_call_all_calls - Form: DW_FORM_flag_present - - Attribute: DW_AT_linkage_name - Form: DW_FORM_strp - - Attribute: DW_AT_specification - Form: DW_FORM_ref4 - - Code: 0x18 - Tag: DW_TAG_formal_parameter - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_location - Form: DW_FORM_exprloc - - Attribute: DW_AT_name - Form: DW_FORM_strp - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Attribute: DW_AT_artificial - Form: DW_FORM_flag_present - - Code: 0x19 - Tag: DW_TAG_formal_parameter - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_location - Form: DW_FORM_exprloc - - Attribute: DW_AT_name - Form: DW_FORM_strp - - Attribute: DW_AT_decl_file - Form: DW_FORM_data1 - - Attribute: DW_AT_decl_line - Form: DW_FORM_data1 - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Code: 0x1A - Tag: DW_TAG_call_site - Children: DW_CHILDREN_yes - Attributes: - - Attribute: DW_AT_call_origin - Form: DW_FORM_ref4 - - Attribute: DW_AT_call_tail_call - Form: DW_FORM_flag_present - - Attribute: DW_AT_call_pc - Form: DW_FORM_addr - debug_info: - - Length: 0x2E7 - Version: 4 - AbbrevTableID: 0 - AbbrOffset: 0x0 - AddrSize: 8 - Entries: - - AbbrCode: 0x1 - Values: - - Value: 0x0 - - Value: 0x21 - - Value: 0x92 - - Value: 0xA5 - - Value: 0x0 - - Value: 0xA7 - - Value: 0x1 - - Value: 0x0 - - Value: 0x94 - - AbbrCode: 0x2 - Values: - - Value: 0x3F - - Value: 0x1 - - Value: 0x27 - - Value: 0x9 - BlockData: [ 0x3, 0x94, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0 ] - - AbbrCode: 0x3 - Values: - - Value: 0x4B - - AbbrCode: 0x4 - Values: - - Value: 0x57 - - Value: 0x5 - - AbbrCode: 0x0 - - AbbrCode: 0x5 - Values: - - Value: 0x50 - - AbbrCode: 0x6 - Values: - - Value: 0xBD - - Value: 0x6 - - Value: 0x1 - - AbbrCode: 0x7 - Values: - - Value: 0xC2 - - Value: 0x8 - - Value: 0x7 - - AbbrCode: 0x8 - Values: - - Value: 0x0 - - Value: 0x8 - - Value: 0x1 - - BlockData: [ 0x6F ] - - Value: 0x1 - BlockData: [ 0x6F ] - - Value: 0x1 - - Value: 0xD6 - - Value: 0x1 - - Value: 0x2 - - Value: 0x2DE - - Value: 0x1 - - Value: 0x1 - - AbbrCode: 0x9 - Values: - - Value: 0x178 - - Value: 0x1 - - Value: 0x2 - - Value: 0x2DE - - AbbrCode: 0x0 - - AbbrCode: 0x8 - Values: - - Value: 0x8 - - Value: 0x8 - - Value: 0x1 - - Value: 0x4A - - Value: 0x1 - BlockData: [ 0x6F ] - - Value: 0x1 - - Value: 0xE6 - - Value: 0x1 - - Value: 0x6 - - Value: 0x2DE - - Value: 0x1 - - Value: 0x1 - - AbbrCode: 0xA - Values: - - Value: 0x0 - - Value: 0x178 - - Value: 0x1 - - Value: 0x6 - - Value: 0x2DE - - AbbrCode: 0xB - Values: - - Value: 0x39 - - Value: 0x17A - - Value: 0x1 - - Value: 0x7 - - Value: 0x2DE - - AbbrCode: 0x0 - - AbbrCode: 0x8 - Values: - - Value: 0x10 - - Value: 0x8 - - Value: 0x1 - - Value: 0x60 - - Value: 0x1 - BlockData: [ 0x6F ] - - Value: 0x1 - - Value: 0xF6 - - Value: 0x1 - - Value: 0xB - - Value: 0x2DE - - Value: 0x1 - - Value: 0x1 - - AbbrCode: 0xA - Values: - - Value: 0x5E - - Value: 0x178 - - Value: 0x1 - - Value: 0xB - - Value: 0x2DE - - AbbrCode: 0x0 - - AbbrCode: 0x8 - Values: - - Value: 0x18 - - Value: 0x8 - - Value: 0x1 - - Value: 0x78 - - Value: 0x1 - BlockData: [ 0x6F ] - - Value: 0x1 - - Value: 0x106 - - Value: 0x1 - - Value: 0xF - - Value: 0x2DE - - Value: 0x1 - - Value: 0x1 - - AbbrCode: 0xA - Values: - - Value: 0x97 - - Value: 0x178 - - Value: 0x1 - - Value: 0xF - - Value: 0x2DE - - AbbrCode: 0xB - Values: - - Value: 0xD0 - - Value: 0x17A - - Value: 0x1 - - Value: 0x10 - - Value: 0x2DE - - AbbrCode: 0x0 - - AbbrCode: 0x8 - Values: - - Value: 0x20 - - Value: 0x8 - - Value: 0x1 - - Value: 0x90 - - Value: 0x1 - BlockData: [ 0x6F ] - - Value: 0x1 - - Value: 0x116 - - Value: 0x1 - - Value: 0x14 - - Value: 0x2DE - - Value: 0x1 - - Value: 0x1 - - AbbrCode: 0xA - Values: - - Value: 0xF5 - - Value: 0x178 - - Value: 0x1 - - Value: 0x14 - - Value: 0x2DE - - AbbrCode: 0xB - Values: - - Value: 0x12E - - Value: 0x17C - - Value: 0x1 - - Value: 0x15 - - Value: 0x2DE - - AbbrCode: 0x0 - - AbbrCode: 0xC - Values: - - Value: 0x28 - - Value: 0x64 - - Value: 0xA7 - - Value: 0x1 - BlockData: [ 0x6D ] - - Value: 0x1 - - Value: 0x126 - - Value: 0x1 - - Value: 0x21 - - Value: 0x2DE - - Value: 0x1 - - Value: 0x1 - - AbbrCode: 0xD - Values: - - Value: 0x2 - BlockData: [ 0x8F, 0xF ] - - Value: 0x183 - - Value: 0x1 - - Value: 0x27 - - Value: 0x205 - - AbbrCode: 0xB - Values: - - Value: 0x151 - - Value: 0x185 - - Value: 0x1 - - Value: 0x22 - - Value: 0x2DE - - AbbrCode: 0xE - Values: - - Value: 0x12C - - Value: 0x40 - - AbbrCode: 0xF - Values: - - Value: 0x1 - BlockData: [ 0x50 ] - - Value: 0x1 - BlockData: [ 0x33 ] - - AbbrCode: 0x0 - - AbbrCode: 0xE - Values: - - Value: 0xF0 - - Value: 0x4C - - AbbrCode: 0xF - Values: - - Value: 0x1 - BlockData: [ 0x50 ] - - Value: 0x2 - BlockData: [ 0x10, 0x29 ] - - AbbrCode: 0x0 - - AbbrCode: 0xE - Values: - - Value: 0xC3 - - Value: 0x58 - - AbbrCode: 0xF - Values: - - Value: 0x1 - BlockData: [ 0x50 ] - - Value: 0x1 - BlockData: [ 0x3B ] - - AbbrCode: 0x0 - - AbbrCode: 0xE - Values: - - Value: 0x5E - - Value: 0x64 - - AbbrCode: 0xF - Values: - - Value: 0x1 - BlockData: [ 0x50 ] - - Value: 0x2 - BlockData: [ 0x10, 0x2A ] - - AbbrCode: 0x0 - - AbbrCode: 0xE - Values: - - Value: 0x252 - - Value: 0x78 - - AbbrCode: 0xF - Values: - - Value: 0x1 - BlockData: [ 0x50 ] - - Value: 0x2 - BlockData: [ 0x8F, 0xF ] - - AbbrCode: 0x0 - - AbbrCode: 0x0 - - AbbrCode: 0x10 - Values: - - Value: 0x5 - - Value: 0x12B - - Value: 0x1 - - Value: 0x1 - - Value: 0x1D - - AbbrCode: 0x11 - Values: - - Value: 0x227 - - Value: 0x0 - - AbbrCode: 0x12 - Values: - - Value: 0x12B - - Value: 0x1 - - Value: 0x1E - - Value: 0x1 - - Value: 0x1 - - Value: 0x1 - - Value: 0x1 - - AbbrCode: 0x13 - Values: - - Value: 0x24D - - Value: 0x1 - - AbbrCode: 0x14 - Values: - - Value: 0x248 - - AbbrCode: 0x0 - - AbbrCode: 0x0 - - AbbrCode: 0x10 - Values: - - Value: 0x5 - - Value: 0x138 - - Value: 0x1 - - Value: 0x1 - - Value: 0x19 - - AbbrCode: 0x15 - Values: - - Value: 0x138 - - Value: 0x1 - - Value: 0x1A - - Value: 0x1 - - Value: 0x1 - - Value: 0x1 - - AbbrCode: 0x13 - Values: - - Value: 0x243 - - Value: 0x1 - - AbbrCode: 0x14 - Values: - - Value: 0x248 - - AbbrCode: 0x0 - - AbbrCode: 0x0 - - AbbrCode: 0x16 - Values: - - Value: 0x227 - - AbbrCode: 0x16 - Values: - - Value: 0x4B - - AbbrCode: 0x16 - Values: - - Value: 0x205 - - AbbrCode: 0x17 - Values: - - Value: 0x8C - - Value: 0x4 - - Value: 0x1 - - Value: 0xAB - - Value: 0x1 - BlockData: [ 0x6F ] - - Value: 0x271 - - Value: 0x1 - - Value: 0x144 - - Value: 0x214 - - AbbrCode: 0x18 - Values: - - Value: 0x1 - BlockData: [ 0x50 ] - - Value: 0x189 - - Value: 0x2E5 - - Value: 0x1 - - AbbrCode: 0x19 - Values: - - Value: 0x1 - BlockData: [ 0x51 ] - - Value: 0x18E - - Value: 0x1 - - Value: 0x1E - - Value: 0x248 - - AbbrCode: 0x1A - Values: - - Value: 0x2A6 - - Value: 0x1 - - Value: 0x8C - - AbbrCode: 0xF - Values: - - Value: 0x1 - BlockData: [ 0x50 ] - - Value: 0x3 - BlockData: [ 0xA3, 0x1, 0x50 ] - - AbbrCode: 0xF - Values: - - Value: 0x1 - BlockData: [ 0x51 ] - - Value: 0x3 - BlockData: [ 0xA3, 0x1, 0x51 ] - - AbbrCode: 0x0 - - AbbrCode: 0x0 - - AbbrCode: 0x17 - Values: - - Value: 0x90 - - Value: 0x4 - - Value: 0x1 - - Value: 0xEEEEE7 - - Value: 0x1 - BlockData: [ 0x6F ] - - Value: 0x2C5 - - Value: 0x1 - - Value: 0x15C - - Value: 0x214 - - AbbrCode: 0x18 - Values: - - Value: 0x1 - BlockData: [ 0x50 ] - - Value: 0x189 - - Value: 0x2E5 - - Value: 0x1 - - AbbrCode: 0x19 - Values: - - Value: 0x1 - BlockData: [ 0x51 ] - - Value: 0x18E - - Value: 0x1 - - Value: 0x1E - - Value: 0x248 - - AbbrCode: 0x0 - - AbbrCode: 0x6 - Values: - - Value: 0x174 - - Value: 0x5 - - Value: 0x4 - - AbbrCode: 0x16 - Values: - - Value: 0x205 - - AbbrCode: 0x0 - debug_line: - - Length: 249 - Version: 4 - PrologueLength: 42 - 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: stmt_seq_macho.cpp - DirIdx: 0 - ModTime: 0 - Length: 0 - Opcodes: - - Opcode: DW_LNS_set_column - Data: 10 - - Opcode: DW_LNS_set_prologue_end - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 9 - SubOpcode: DW_LNE_set_address - Data: 0 - - Opcode: 0x14 - Data: 0 - - Opcode: DW_LNS_set_column - Data: 3 - - Opcode: DW_LNS_negate_stmt - Data: 0 - - Opcode: 0x4A - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 1 - SubOpcode: DW_LNE_end_sequence - Data: 0 - - Opcode: DW_LNS_set_column - Data: 14 - - Opcode: DW_LNS_set_prologue_end - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 9 - SubOpcode: DW_LNE_set_address - Data: 8 - - Opcode: 0x19 - Data: 0 - - Opcode: DW_LNS_set_column - Data: 5 - - Opcode: DW_LNS_negate_stmt - Data: 0 - - Opcode: 0x4A - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 1 - SubOpcode: DW_LNE_end_sequence - Data: 0 - - Opcode: DW_LNS_set_column - Data: 14 - - Opcode: DW_LNS_set_prologue_end - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 9 - SubOpcode: DW_LNE_set_address - Data: 16 - - Opcode: DW_LNS_advance_line - SData: 11 - Data: 0 - - Opcode: DW_LNS_copy - Data: 0 - - Opcode: DW_LNS_set_column - Data: 5 - - Opcode: DW_LNS_negate_stmt - Data: 0 - - Opcode: 0x4A - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 1 - SubOpcode: DW_LNE_end_sequence - Data: 0 - - Opcode: DW_LNS_set_column - Data: 14 - - Opcode: DW_LNS_set_prologue_end - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 9 - SubOpcode: DW_LNE_set_address - Data: 24 - - Opcode: DW_LNS_advance_line - SData: 16 - Data: 0 - - Opcode: DW_LNS_copy - Data: 0 - - Opcode: DW_LNS_set_column - Data: 5 - - Opcode: DW_LNS_negate_stmt - Data: 0 - - Opcode: 0x4A - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 1 - SubOpcode: DW_LNE_end_sequence - Data: 0 - - Opcode: DW_LNS_set_column - Data: 20 - - Opcode: DW_LNS_set_prologue_end - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 9 - SubOpcode: DW_LNE_set_address - Data: 32 - - Opcode: DW_LNS_advance_line - SData: 20 - Data: 0 - - Opcode: DW_LNS_copy - Data: 0 - - Opcode: DW_LNS_set_column - Data: 5 - - Opcode: 0x4B - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 1 - SubOpcode: DW_LNE_end_sequence - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 9 - SubOpcode: DW_LNE_set_address - Data: 40 - - Opcode: DW_LNS_advance_line - SData: 32 - Data: 0 - - Opcode: DW_LNS_copy - Data: 0 - - Opcode: DW_LNS_set_column - Data: 12 - - Opcode: DW_LNS_set_prologue_end - Data: 0 - - Opcode: 0xF4 - Data: 0 - - Opcode: 0xBB - Data: 0 - - Opcode: DW_LNS_set_column - Data: 9 - - Opcode: DW_LNS_negate_stmt - Data: 0 - - Opcode: 0x82 - Data: 0 - - Opcode: DW_LNS_set_column - Data: 12 - - Opcode: DW_LNS_negate_stmt - Data: 0 - - Opcode: 0x4B - Data: 0 - - Opcode: 0xBB - Data: 0 - - Opcode: DW_LNS_set_column - Data: 9 - - Opcode: 0x81 - Data: 0 - - Opcode: DW_LNS_set_column - Data: 18 - - Opcode: 0x4C - Data: 0 - - Opcode: DW_LNS_set_column - Data: 9 - - Opcode: 0xF1 - Data: 0 - - Opcode: DW_LNS_set_column - Data: 5 - - Opcode: DW_LNS_set_epilogue_begin - Data: 0 - - Opcode: 0x4C - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 1 - SubOpcode: DW_LNE_end_sequence - Data: 0 - - Opcode: DW_LNS_set_column - Data: 85 - - Opcode: DW_LNS_set_prologue_end - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 9 - SubOpcode: DW_LNE_set_address - Data: 140 - - Opcode: DW_LNS_advance_line - SData: 29 - Data: 0 - - Opcode: DW_LNS_copy - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 1 - SubOpcode: DW_LNE_end_sequence - Data: 0 - - Opcode: DW_LNS_set_column - Data: 86 - - Opcode: DW_LNS_set_prologue_end - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 9 - SubOpcode: DW_LNE_set_address - Data: 144 - - Opcode: DW_LNS_advance_line - SData: 29 - Data: 0 - - Opcode: DW_LNS_copy - Data: 0 - - Opcode: DW_LNS_advance_pc - Data: 4 - - Opcode: DW_LNS_extended_op - ExtLen: 1 - SubOpcode: DW_LNE_end_sequence - Data: 0 -... From 8fc1a3bc39ff519219daadbc8df58fb696bf32d1 Mon Sep 17 00:00:00 2001 From: Peter Rong Date: Thu, 14 Aug 2025 11:22:16 -0700 Subject: [PATCH 06/12] Revert unrelated change --- .../X86/DW_AT_LLVM_stmt_seq_sec_offset.ll | 2 - .../X86/DW_AT_LLVM_stmt_seq_sec_offset_2.ll | 258 ------------------ .../tools/dsymutil/ARM/stmt-seq-macho.cpp | 41 --- .../tools/dsymutil/ARM/stmt-seq-macho.test | 2 - 4 files changed, 303 deletions(-) delete mode 100644 llvm/test/DebugInfo/X86/DW_AT_LLVM_stmt_seq_sec_offset_2.ll delete mode 100644 llvm/test/tools/dsymutil/ARM/stmt-seq-macho.cpp diff --git a/llvm/test/DebugInfo/X86/DW_AT_LLVM_stmt_seq_sec_offset.ll b/llvm/test/DebugInfo/X86/DW_AT_LLVM_stmt_seq_sec_offset.ll index 41ed0acd28c48..58f6495924b90 100644 --- a/llvm/test/DebugInfo/X86/DW_AT_LLVM_stmt_seq_sec_offset.ll +++ b/llvm/test/DebugInfo/X86/DW_AT_LLVM_stmt_seq_sec_offset.ll @@ -4,8 +4,6 @@ ; RUN: llc -O3 -mtriple=i686-w64-mingw32 -o %t_yes -filetype=obj %s -emit-func-debug-line-table-offsets ; RUN: llvm-dwarfdump -v -all %t_yes | FileCheck %s -check-prefix=STMT_SEQ -; RUN: llvm-dwarfdump --verify %t_yes - ; NO_STMT_SEQ-NOT: DW_AT_LLVM_stmt_sequence ; STMT_SEQ: [[[ABBREV_CODE1:[0-9]+]]] DW_TAG_subprogram diff --git a/llvm/test/DebugInfo/X86/DW_AT_LLVM_stmt_seq_sec_offset_2.ll b/llvm/test/DebugInfo/X86/DW_AT_LLVM_stmt_seq_sec_offset_2.ll deleted file mode 100644 index d025dc8bfd0a0..0000000000000 --- a/llvm/test/DebugInfo/X86/DW_AT_LLVM_stmt_seq_sec_offset_2.ll +++ /dev/null @@ -1,258 +0,0 @@ -; RUN: llc -O3 -mtriple=arm64-apple-macosx11.0.0 -o %t_yes -filetype=obj %s -emit-func-debug-line-table-offsets -; RUN: llvm-dwarfdump -verify %t_yes - -; generated from: -; #define ATTRIB extern "C" __attribute__((noinline)) -; volatile int global_result = 0; -; -; ATTRIB int function1_copy1(int a) { -; return ++a; -; } -; -; ATTRIB int function3_copy1(int a) { -; int b = a + 3; -; return b + 1; -; } -; -; ATTRIB int function2_copy1(int a) { -; return a - 22; -; } -; -; ATTRIB int function3_copy2(int a) { -; int b = a + 3; -; return b + 1; -; } -; -; ATTRIB int function2_copy2(int a) { -; int result = a - 22; -; return result; -; } -; -; struct logic_error { -; logic_error(const char* s) {} -; }; -; -; struct length_error : public logic_error { -; __attribute__((noinline)) explicit length_error(const char* s) : logic_error(s) {} -; }; -; -; int main() { -; int sum = 0; -; sum += function2_copy2(3); -; sum += function3_copy2(41); -; sum += function2_copy1(11); -; sum += function1_copy1(42); -; length_error e("test"); -; return sum; -; } -; ===================== - -; ModuleID = 'stmt-seq-macho.cpp' -source_filename = "stmt-seq-macho.cpp" -target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32" -target triple = "arm64-apple-macosx11.0.0" - -%struct.length_error = type { i8 } - -@.str = private unnamed_addr constant [5 x i8] c"test\00", align 1, !dbg !0 - -; Function Attrs: minsize mustprogress nofree noinline norecurse nosync nounwind optsize ssp willreturn memory(none) -define range(i32 -2147483647, -2147483648) i32 @function1_copy1(i32 noundef %a) local_unnamed_addr #0 !dbg !17 { -entry: - #dbg_value(i32 %a, !22, !DIExpression(), !23) - %inc = add nsw i32 %a, 1, !dbg !24 - #dbg_value(i32 %inc, !22, !DIExpression(), !23) - ret i32 %inc, !dbg !25 -} - -; Function Attrs: minsize mustprogress nofree noinline norecurse nosync nounwind optsize ssp willreturn memory(none) -define range(i32 -2147483644, -2147483648) i32 @function3_copy1(i32 noundef %a) local_unnamed_addr #0 !dbg !26 { -entry: - #dbg_value(i32 %a, !28, !DIExpression(), !30) - #dbg_value(i32 %a, !29, !DIExpression(DW_OP_plus_uconst, 3, DW_OP_stack_value), !30) - %add1 = add nsw i32 %a, 4, !dbg !31 - ret i32 %add1, !dbg !32 -} - -; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) -declare void @llvm.lifetime.start.p0(ptr captures(none)) #1 - -; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) -declare void @llvm.lifetime.end.p0(ptr captures(none)) #1 - -; Function Attrs: minsize mustprogress nofree noinline norecurse nosync nounwind optsize ssp willreturn memory(none) -define range(i32 -2147483648, 2147483626) i32 @function2_copy1(i32 noundef %a) local_unnamed_addr #0 !dbg !33 { -entry: - #dbg_value(i32 %a, !35, !DIExpression(), !36) - %sub = add nsw i32 %a, -22, !dbg !37 - ret i32 %sub, !dbg !38 -} - -; Function Attrs: minsize mustprogress nofree noinline norecurse nosync nounwind optsize ssp willreturn memory(none) -define range(i32 -2147483644, -2147483648) i32 @function3_copy2(i32 noundef %a) local_unnamed_addr #0 !dbg !39 { -entry: - #dbg_value(i32 %a, !41, !DIExpression(), !43) - #dbg_value(i32 %a, !42, !DIExpression(DW_OP_plus_uconst, 3, DW_OP_stack_value), !43) - %add1 = add nsw i32 %a, 4, !dbg !44 - ret i32 %add1, !dbg !45 -} - -; Function Attrs: minsize mustprogress nofree noinline norecurse nosync nounwind optsize ssp willreturn memory(none) -define range(i32 -2147483648, 2147483626) i32 @function2_copy2(i32 noundef %a) local_unnamed_addr #0 !dbg !46 { -entry: - #dbg_value(i32 %a, !48, !DIExpression(), !50) - %sub = add nsw i32 %a, -22, !dbg !51 - #dbg_value(i32 %sub, !49, !DIExpression(), !50) - ret i32 %sub, !dbg !52 -} - -; Function Attrs: minsize mustprogress norecurse nounwind optsize ssp -define noundef i32 @main() local_unnamed_addr #2 !dbg !53 { -entry: - %e = alloca %struct.length_error, align 1 - #dbg_value(i32 0, !57, !DIExpression(), !73) - %call = tail call i32 @function2_copy2(i32 noundef 3) #4, !dbg !74 - #dbg_value(i32 %call, !57, !DIExpression(), !73) - %call1 = tail call i32 @function3_copy2(i32 noundef 41) #4, !dbg !75 - %add2 = add nsw i32 %call1, %call, !dbg !76 - #dbg_value(i32 %add2, !57, !DIExpression(), !73) - %call3 = tail call i32 @function2_copy1(i32 noundef 11) #4, !dbg !77 - %add4 = add nsw i32 %add2, %call3, !dbg !78 - #dbg_value(i32 %add4, !57, !DIExpression(), !73) - %call5 = tail call i32 @function1_copy1(i32 noundef 42) #4, !dbg !79 - %add6 = add nsw i32 %add4, %call5, !dbg !80 - #dbg_value(i32 %add6, !57, !DIExpression(), !73) - call void @llvm.lifetime.start.p0(ptr nonnull %e) #5, !dbg !81 - #dbg_declare(ptr %e, !58, !DIExpression(), !82) - %call7 = call noundef ptr @_ZN12length_errorC1EPKc(ptr noundef nonnull align 1 dereferenceable(1) %e, ptr noundef nonnull @.str) #4, !dbg !82 - call void @llvm.lifetime.end.p0(ptr nonnull %e) #5, !dbg !83 - ret i32 %add6, !dbg !84 -} - -; Function Attrs: minsize mustprogress noinline nounwind optsize ssp -define linkonce_odr noundef ptr @_ZN12length_errorC1EPKc(ptr noundef nonnull returned align 1 dereferenceable(1) %this, ptr noundef %s) unnamed_addr #3 !dbg !85 { -entry: - #dbg_value(ptr %this, !87, !DIExpression(), !90) - #dbg_value(ptr %s, !89, !DIExpression(), !90) - %call = tail call noundef ptr @_ZN12length_errorC2EPKc(ptr noundef nonnull align 1 dereferenceable(1) %this, ptr noundef %s) #4, !dbg !91 - ret ptr %this, !dbg !92 -} - -; Function Attrs: minsize mustprogress noinline nounwind optsize ssp -define linkonce_odr noundef ptr @_ZN12length_errorC2EPKc(ptr noundef nonnull returned align 1 dereferenceable(1) %this, ptr noundef %s) unnamed_addr #3 !dbg !93 { -entry: - #dbg_value(ptr %this, !95, !DIExpression(), !97) - #dbg_value(ptr %s, !96, !DIExpression(), !97) - ret ptr %this, !dbg !98 -} - -attributes #0 = { minsize mustprogress nofree noinline norecurse nosync nounwind optsize ssp willreturn memory(none) "frame-pointer"="non-leaf" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="apple-m1" "target-features"="+aes,+altnzcv,+ccdp,+ccidx,+ccpp,+complxnum,+crc,+dit,+dotprod,+flagm,+fp-armv8,+fp16fml,+fptoint,+fullfp16,+jsconv,+lse,+neon,+pauth,+perfmon,+predres,+ras,+rcpc,+rdm,+sb,+sha2,+sha3,+specrestrict,+ssbs,+v8.1a,+v8.2a,+v8.3a,+v8.4a,+v8a" } -attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } -attributes #2 = { minsize mustprogress norecurse nounwind optsize ssp "frame-pointer"="non-leaf" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="apple-m1" "target-features"="+aes,+altnzcv,+ccdp,+ccidx,+ccpp,+complxnum,+crc,+dit,+dotprod,+flagm,+fp-armv8,+fp16fml,+fptoint,+fullfp16,+jsconv,+lse,+neon,+pauth,+perfmon,+predres,+ras,+rcpc,+rdm,+sb,+sha2,+sha3,+specrestrict,+ssbs,+v8.1a,+v8.2a,+v8.3a,+v8.4a,+v8a" } -attributes #3 = { minsize mustprogress noinline nounwind optsize ssp "frame-pointer"="non-leaf" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="apple-m1" "target-features"="+aes,+altnzcv,+ccdp,+ccidx,+ccpp,+complxnum,+crc,+dit,+dotprod,+flagm,+fp-armv8,+fp16fml,+fptoint,+fullfp16,+jsconv,+lse,+neon,+pauth,+perfmon,+predres,+ras,+rcpc,+rdm,+sb,+sha2,+sha3,+specrestrict,+ssbs,+v8.1a,+v8.2a,+v8.3a,+v8.4a,+v8a" } -attributes #4 = { minsize optsize } -attributes #5 = { nounwind } - -!llvm.dbg.cu = !{!8} -!llvm.module.flags = !{!11, !12, !13, !14, !15} -!llvm.ident = !{!16} - -!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression()) -!1 = distinct !DIGlobalVariable(scope: null, file: !2, line: 51, type: !3, isLocal: true, isDefinition: true) -!2 = !DIFile(filename: "stmt-seq-macho.cpp", directory: "") -!3 = !DICompositeType(tag: DW_TAG_array_type, baseType: !4, size: 40, elements: !6) -!4 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !5) -!5 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char) -!6 = !{!7} -!7 = !DISubrange(count: 5) -!8 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !9, producer: "clang version 22.0.0git (git@github.com:DataCorrupted/llvm-project.git cedce2128dc872a2f1024c9907fd78bdee4b7fe7)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, globals: !10, splitDebugInlining: false, nameTableKind: Apple, sysroot: "/") -!9 = !DIFile(filename: "stmt-seq-macho.cpp", directory: "/private/tmp/stmt_seq") -!10 = !{!0} -!11 = !{i32 7, !"Dwarf Version", i32 4} -!12 = !{i32 2, !"Debug Info Version", i32 3} -!13 = !{i32 1, !"wchar_size", i32 4} -!14 = !{i32 8, !"PIC Level", i32 2} -!15 = !{i32 7, !"frame-pointer", i32 1} -!16 = !{!"clang version 22.0.0git (git@github.com:DataCorrupted/llvm-project.git cedce2128dc872a2f1024c9907fd78bdee4b7fe7)"} -!17 = distinct !DISubprogram(name: "function1_copy1", scope: !2, file: !2, line: 14, type: !18, scopeLine: 14, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !8, retainedNodes: !21) -!18 = !DISubroutineType(types: !19) -!19 = !{!20, !20} -!20 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) -!21 = !{!22} -!22 = !DILocalVariable(name: "a", arg: 1, scope: !17, file: !2, line: 14, type: !20) -!23 = !DILocation(line: 0, scope: !17) -!24 = !DILocation(line: 15, column: 10, scope: !17) -!25 = !DILocation(line: 15, column: 3, scope: !17) -!26 = distinct !DISubprogram(name: "function3_copy1", scope: !2, file: !2, line: 18, type: !18, scopeLine: 18, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !8, retainedNodes: !27) -!27 = !{!28, !29} -!28 = !DILocalVariable(name: "a", arg: 1, scope: !26, file: !2, line: 18, type: !20) -!29 = !DILocalVariable(name: "b", scope: !26, file: !2, line: 19, type: !20) -!30 = !DILocation(line: 0, scope: !26) -!31 = !DILocation(line: 20, column: 14, scope: !26) -!32 = !DILocation(line: 20, column: 5, scope: !26) -!33 = distinct !DISubprogram(name: "function2_copy1", scope: !2, file: !2, line: 23, type: !18, scopeLine: 23, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !8, retainedNodes: !34) -!34 = !{!35} -!35 = !DILocalVariable(name: "a", arg: 1, scope: !33, file: !2, line: 23, type: !20) -!36 = !DILocation(line: 0, scope: !33) -!37 = !DILocation(line: 24, column: 14, scope: !33) -!38 = !DILocation(line: 24, column: 5, scope: !33) -!39 = distinct !DISubprogram(name: "function3_copy2", scope: !2, file: !2, line: 27, type: !18, scopeLine: 27, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !8, retainedNodes: !40) -!40 = !{!41, !42} -!41 = !DILocalVariable(name: "a", arg: 1, scope: !39, file: !2, line: 27, type: !20) -!42 = !DILocalVariable(name: "b", scope: !39, file: !2, line: 28, type: !20) -!43 = !DILocation(line: 0, scope: !39) -!44 = !DILocation(line: 29, column: 14, scope: !39) -!45 = !DILocation(line: 29, column: 5, scope: !39) -!46 = distinct !DISubprogram(name: "function2_copy2", scope: !2, file: !2, line: 32, type: !18, scopeLine: 32, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !8, retainedNodes: !47) -!47 = !{!48, !49} -!48 = !DILocalVariable(name: "a", arg: 1, scope: !46, file: !2, line: 32, type: !20) -!49 = !DILocalVariable(name: "result", scope: !46, file: !2, line: 33, type: !20) -!50 = !DILocation(line: 0, scope: !46) -!51 = !DILocation(line: 33, column: 20, scope: !46) -!52 = !DILocation(line: 34, column: 5, scope: !46) -!53 = distinct !DISubprogram(name: "main", scope: !2, file: !2, line: 45, type: !54, scopeLine: 45, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !8, retainedNodes: !56) -!54 = !DISubroutineType(types: !55) -!55 = !{!20} -!56 = !{!57, !58} -!57 = !DILocalVariable(name: "sum", scope: !53, file: !2, line: 46, type: !20) -!58 = !DILocalVariable(name: "e", scope: !53, file: !2, line: 51, type: !59) -!59 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "length_error", file: !2, line: 41, size: 8, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !60, identifier: "_ZTS12length_error") -!60 = !{!61, !69} -!61 = !DIDerivedType(tag: DW_TAG_inheritance, scope: !59, baseType: !62, extraData: i32 0) -!62 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "logic_error", file: !2, line: 37, size: 8, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !63, identifier: "_ZTS11logic_error") -!63 = !{!64} -!64 = !DISubprogram(name: "logic_error", scope: !62, file: !2, line: 38, type: !65, scopeLine: 38, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized) -!65 = !DISubroutineType(types: !66) -!66 = !{null, !67, !68} -!67 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !62, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer) -!68 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !4, size: 64) -!69 = !DISubprogram(name: "length_error", scope: !59, file: !2, line: 42, type: !70, scopeLine: 42, flags: DIFlagExplicit | DIFlagPrototyped, spFlags: DISPFlagOptimized) -!70 = !DISubroutineType(types: !71) -!71 = !{null, !72, !68} -!72 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !59, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer) -!73 = !DILocation(line: 0, scope: !53) -!74 = !DILocation(line: 47, column: 12, scope: !53) -!75 = !DILocation(line: 48, column: 12, scope: !53) -!76 = !DILocation(line: 48, column: 9, scope: !53) -!77 = !DILocation(line: 49, column: 12, scope: !53) -!78 = !DILocation(line: 49, column: 9, scope: !53) -!79 = !DILocation(line: 50, column: 12, scope: !53) -!80 = !DILocation(line: 50, column: 9, scope: !53) -!81 = !DILocation(line: 51, column: 5, scope: !53) -!82 = !DILocation(line: 51, column: 18, scope: !53) -!83 = !DILocation(line: 53, column: 1, scope: !53) -!84 = !DILocation(line: 52, column: 5, scope: !53) -!85 = distinct !DISubprogram(name: "length_error", linkageName: "_ZN12length_errorC1EPKc", scope: !59, file: !2, line: 42, type: !70, scopeLine: 42, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !8, declaration: !69, retainedNodes: !86) -!86 = !{!87, !89} -!87 = !DILocalVariable(name: "this", arg: 1, scope: !85, type: !88, flags: DIFlagArtificial | DIFlagObjectPointer) -!88 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !59, size: 64) -!89 = !DILocalVariable(name: "s", arg: 2, scope: !85, file: !2, line: 42, type: !68) -!90 = !DILocation(line: 0, scope: !85) -!91 = !DILocation(line: 42, column: 85, scope: !85) -!92 = !DILocation(line: 42, column: 86, scope: !85) -!93 = distinct !DISubprogram(name: "length_error", linkageName: "_ZN12length_errorC2EPKc", scope: !59, file: !2, line: 42, type: !70, scopeLine: 42, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !8, declaration: !69, retainedNodes: !94) -!94 = !{!95, !96} -!95 = !DILocalVariable(name: "this", arg: 1, scope: !93, type: !88, flags: DIFlagArtificial | DIFlagObjectPointer) -!96 = !DILocalVariable(name: "s", arg: 2, scope: !93, file: !2, line: 42, type: !68) -!97 = !DILocation(line: 0, scope: !93) -!98 = !DILocation(line: 42, column: 86, scope: !93) diff --git a/llvm/test/tools/dsymutil/ARM/stmt-seq-macho.cpp b/llvm/test/tools/dsymutil/ARM/stmt-seq-macho.cpp deleted file mode 100644 index 20f85cc43254f..0000000000000 --- a/llvm/test/tools/dsymutil/ARM/stmt-seq-macho.cpp +++ /dev/null @@ -1,41 +0,0 @@ -#define ATTRIB extern "C" __attribute__((noinline)) -ATTRIB int function1_copy1(int a) { - return ++a; -} - -ATTRIB int function3_copy1(int a) { - int b = a + 3; - return b + 1; -} - -ATTRIB int function2_copy1(int a) { - return a - 22; -} - -ATTRIB int function3_copy2(int a) { - int b = a + 3; - return b + 1; -} - -ATTRIB int function2_copy2(int a) { - int result = a - 22; - return result; -} - -struct logic_error { - logic_error(const char* s) {} -}; - -struct length_error : public logic_error { - __attribute__((noinline)) explicit length_error(const char* s) : logic_error(s) {} -}; - -int main() { - int sum = 0; - sum += function2_copy2(3); - sum += function3_copy2(41); - sum += function2_copy1(11); - sum += function1_copy1(42); - length_error e("test"); - return sum; -} diff --git a/llvm/test/tools/dsymutil/ARM/stmt-seq-macho.test b/llvm/test/tools/dsymutil/ARM/stmt-seq-macho.test index b42da261d8879..db223cda43247 100644 --- a/llvm/test/tools/dsymutil/ARM/stmt-seq-macho.test +++ b/llvm/test/tools/dsymutil/ARM/stmt-seq-macho.test @@ -2,9 +2,7 @@ # RUN: rm -rf %t && split-file %s %t && cd %t # RUN: yaml2obj %t/stmt_seq_macho.exe.yaml -o %t/stmt_seq_macho.exe -# RUN: llvm-dwarfdump --verify %t/stmt_seq_macho.exe # RUN: yaml2obj %t/stmt_seq_macho.o.yaml -o %t/stmt_seq_macho.o -# RUN: llvm-dwarfdump --verify %t/stmt_seq_macho.o # RUN: dsymutil --flat --verify-dwarf=none -oso-prepend-path %t %t/stmt_seq_macho.exe -o %t/stmt_seq_macho.dSYM # RUN: llvm-dwarfdump --debug-info --debug-line -v %t/stmt_seq_macho.dSYM | sort | FileCheck %s -check-prefix=CHECK_DSYM # RUN: llvm-dwarfdump --debug-info --debug-line -v %t/stmt_seq_macho.dSYM > %t/stmt_seq_macho.dSYM.txt From 41a9fbf0b85bce51108ad90f17c39837aa7a1894 Mon Sep 17 00:00:00 2001 From: Peter Rong Date: Mon, 18 Aug 2025 10:29:20 -0700 Subject: [PATCH 07/12] address comments --- llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp | 6 ++---- llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml | 4 +--- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp b/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp index 16b1b0869ffbf..b433faf15ce20 100644 --- a/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp +++ b/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp @@ -918,10 +918,8 @@ unsigned DWARFVerifier::verifyDebugInfoAttribute(const DWARFDie &Die, [](const auto &Sequence, const uint64_t Offset) { return Sequence.StmtSeqOffset < Offset; }); - if (it != LineTable->Sequences.end() && - it->StmtSeqOffset == *SectionOffset) { - ValidSequenceOffset = true; - } + ValidSequenceOffset = + it != LineTable->Sequences.end() && it->StmtSeqOffset == *SectionOffset; if (!ValidSequenceOffset) ReportError( diff --git a/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml b/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml index 271fd3c9517f2..a8ead5983bf57 100644 --- a/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml +++ b/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml @@ -3,7 +3,7 @@ # I hope there are easier ways to construct tests like this. # RUN: yaml2obj %p/Inputs/verify_stmt_seq.yaml -o verify_stmt_seq.o -# RUN: not llvm-dwarfdump -verify -debug-info verify_stmt_seq.o | FileCheck %s --check-prefix=CHECK_INVALID +# RUN: not llvm-dwarfdump -verify -debug-info verify_stmt_seq.o | FileCheck %s --check-prefix=CHECK_INVALID --implicit-check-not=error: # CHECK_INVALID: error: DW_AT_LLVM_stmt_sequence offset 0x00000000 is not within the line table bounds [0x0000002e, 0x000000fd) @@ -23,5 +23,3 @@ # CHECK_INVALID-NEXT: error: DW_AT_LLVM_stmt_sequence offset out of line table bounds occurred 1 time(s). # CHECK_INVALID-NEXT: error: Invalid DW_AT_LLVM_stmt_sequence encoding occurred 1 time(s). # CHECK_INVALID-NEXT: error: Invalid DW_AT_LLVM_stmt_sequence offset occurred 1 time(s). - -# CHECK_INVALID-NOT: error: From dc053bca8ad47e2b4e7abab350654470a9a8f5e9 Mon Sep 17 00:00:00 2001 From: Peter Rong Date: Wed, 20 Aug 2025 17:22:37 -0700 Subject: [PATCH 08/12] Address comments --- llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp | 44 +- .../Inputs/verify_stmt_seq.yaml | 1600 ---------------- .../tools/llvm-dwarfdump/verify_stmt_seq.yaml | 1603 ++++++++++++++++- 3 files changed, 1637 insertions(+), 1610 deletions(-) delete mode 100644 llvm/test/tools/llvm-dwarfdump/Inputs/verify_stmt_seq.yaml diff --git a/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp b/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp index b433faf15ce20..e654f229d0873 100644 --- a/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp +++ b/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp @@ -887,16 +887,14 @@ unsigned DWARFVerifier::verifyDebugInfoAttribute(const DWARFDie &Die, break; } + const int8_t DwarfOffset = + LineTable->Prologue.getFormParams().getDwarfOffsetByteSize(); // Calculate the bounds of this specific line table uint64_t LineTableStart = *StmtListOffset; uint64_t PrologueLength = LineTable->Prologue.PrologueLength; uint64_t TotalLength = LineTable->Prologue.TotalLength; - uint64_t LineTableEnd = - LineTableStart + TotalLength + - (LineTable->Prologue.getFormParams().Format == dwarf::DWARF64 ? 12 : 4); - uint64_t SequencesStart = - LineTableStart + PrologueLength + - (LineTable->Prologue.getFormParams().Format == dwarf::DWARF64 ? 12 : 4); + uint64_t LineTableEnd = LineTableStart + TotalLength + DwarfOffset; + uint64_t SequencesStart = LineTableStart + PrologueLength + DwarfOffset; // Check if the offset is within the bounds of this specific line table if (*SectionOffset < SequencesStart || *SectionOffset >= LineTableEnd) { @@ -913,13 +911,41 @@ unsigned DWARFVerifier::verifyDebugInfoAttribute(const DWARFDie &Die, bool ValidSequenceOffset = false; // Check if the offset matches any of the sequence offset offsets using // binary search - auto it = std::lower_bound(LineTable->Sequences.begin(), + auto It = std::lower_bound(LineTable->Sequences.begin(), LineTable->Sequences.end(), *SectionOffset, [](const auto &Sequence, const uint64_t Offset) { return Sequence.StmtSeqOffset < Offset; }); - ValidSequenceOffset = - it != LineTable->Sequences.end() && it->StmtSeqOffset == *SectionOffset; + + if (It == LineTable->Sequences.end()) { + ReportError("DW_AT_LLVM_stmt_sequence offset sequence not found", + "There is no line table sequences that contains the offset" + + llvm::formatv("{0:x8}", *SectionOffset)); + break; + } + + ValidSequenceOffset = It->StmtSeqOffset == *SectionOffset; + if (!ValidSequenceOffset) { + // Go over all Rows in this Section (It) and make sure that the + // previous Row of the SectionOffset is EndSequence + for (unsigned RowIdx = It->FirstRowIndex; RowIdx < It->LastRowIndex; + ++RowIdx) { + const auto &CurrentRow = LineTable->Rows[RowIdx]; + + auto IsPrevRowEndSequence = [&](unsigned RowIdx) { + // There is no previous row in the first place. + return RowIdx != 0 && LineTable->Rows[RowIdx - 1].EndSequence; + }; + + // Check if current row's address matches our section offset + // and if the previous row has EndSequence set + if (CurrentRow.Address.Address == *SectionOffset && + IsPrevRowEndSequence(RowIdx)) { + ValidSequenceOffset = true; + break; + } + } + } if (!ValidSequenceOffset) ReportError( diff --git a/llvm/test/tools/llvm-dwarfdump/Inputs/verify_stmt_seq.yaml b/llvm/test/tools/llvm-dwarfdump/Inputs/verify_stmt_seq.yaml deleted file mode 100644 index a3d79613613fe..0000000000000 --- a/llvm/test/tools/llvm-dwarfdump/Inputs/verify_stmt_seq.yaml +++ /dev/null @@ -1,1600 +0,0 @@ ---- !mach-o -IsLittleEndian: true -FileHeader: - magic: 0xFEEDFACF - cputype: 0x100000C - cpusubtype: 0x0 - filetype: 0x1 - ncmds: 5 - sizeofcmds: 1176 - flags: 0x2000 - reserved: 0x0 -LoadCommands: - - cmd: LC_SEGMENT_64 - cmdsize: 1032 - segname: '' - vmaddr: 0 - vmsize: 3125 - fileoff: 1208 - filesize: 3125 - maxprot: 7 - initprot: 7 - nsects: 12 - flags: 0 - Sections: - - sectname: __text - segname: __TEXT - addr: 0x0 - size: 148 - offset: 0x4B8 - align: 2 - reloff: 0x10F0 - nreloc: 8 - flags: 0x80000400 - reserved1: 0x0 - reserved2: 0x0 - reserved3: 0x0 - content: 00040011C0035FD600100011C0035FD600580051C0035FD600100011C0035FD600580051C0035FD6FFC300D1F44F01A9FD7B02A9FD8300916000805200000094F30300AA20058052000000941400130B6001805200000094F30300AA40058052000000947302000B0100009021000091E03F0091000000948002130BFD7B42A9F44F41A9FFC30091C0035FD600000014C0035FD6 - relocations: - - address: 0x8C - symbolnum: 4 - pcrel: true - length: 2 - extern: true - type: 2 - scattered: false - value: 0 - - address: 0x74 - symbolnum: 3 - pcrel: true - length: 2 - extern: true - type: 2 - scattered: false - value: 0 - - address: 0x6C - symbolnum: 1 - pcrel: false - length: 2 - extern: true - type: 4 - scattered: false - value: 0 - - address: 0x68 - symbolnum: 1 - pcrel: true - length: 2 - extern: true - type: 3 - scattered: false - value: 0 - - address: 0x60 - symbolnum: 5 - pcrel: true - length: 2 - extern: true - type: 2 - scattered: false - value: 0 - - address: 0x54 - symbolnum: 6 - pcrel: true - length: 2 - extern: true - type: 2 - scattered: false - value: 0 - - address: 0x48 - symbolnum: 9 - pcrel: true - length: 2 - extern: true - type: 2 - scattered: false - value: 0 - - address: 0x3C - symbolnum: 7 - pcrel: true - length: 2 - extern: true - type: 2 - scattered: false - value: 0 - - sectname: __cstring - segname: __TEXT - addr: 0x94 - size: 5 - offset: 0x54C - align: 0 - reloff: 0x0 - nreloc: 0 - flags: 0x2 - reserved1: 0x0 - reserved2: 0x0 - reserved3: 0x0 - content: '7465737400' - - sectname: __debug_loc - segname: __DWARF - addr: 0x99 - size: 412 - offset: 0x551 - align: 0 - reloff: 0x0 - nreloc: 0 - flags: 0x2000000 - reserved1: 0x0 - reserved2: 0x0 - reserved3: 0x0 - content: 08000000000000000C000000000000000100500C0000000000000010000000000000000400A301509F0000000000000000000000000000000008000000000000000C00000000000000030070039F0000000000000000000000000000000010000000000000001400000000000000010050140000000000000018000000000000000400A301509F0000000000000000000000000000000018000000000000001C000000000000000100501C0000000000000020000000000000000400A301509F0000000000000000000000000000000018000000000000001C00000000000000030070039F0000000000000000000000000000000020000000000000002400000000000000010050240000000000000028000000000000000400A301509F00000000000000000000000000000000240000000000000028000000000000000100500000000000000000000000000000000038000000000000004400000000000000030011009F4400000000000000500000000000000001006350000000000000005C0000000000000001006400000000000000000000000000000000 - - sectname: __debug_abbrev - segname: __DWARF - addr: 0x235 - size: 372 - offset: 0x6ED - align: 0 - reloff: 0x0 - nreloc: 0 - flags: 0x2000000 - reserved1: 0x0 - reserved2: 0x0 - reserved3: 0x0 - - sectname: __debug_info - segname: __DWARF - addr: 0x3A9 - size: 747 - offset: 0x861 - align: 0 - reloff: 0x1130 - nreloc: 16 - flags: 0x2000000 - reserved1: 0x0 - reserved2: 0x0 - reserved3: 0x0 - relocations: - - address: 0x2A7 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x28E - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x253 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x1F5 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x1E1 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x1CE - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x1BA - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x1A7 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x169 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x12D - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0xF1 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0xC4 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x88 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x5F - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x37 - symbolnum: 2 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x22 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - sectname: __debug_str - segname: __DWARF - addr: 0x694 - size: 400 - offset: 0xB4C - align: 0 - reloff: 0x0 - nreloc: 0 - flags: 0x2000000 - reserved1: 0x0 - reserved2: 0x0 - reserved3: 0x0 - - sectname: __apple_names - segname: __DWARF - addr: 0x824 - size: 288 - offset: 0xCDC - align: 0 - reloff: 0x0 - nreloc: 0 - flags: 0x2000000 - reserved1: 0x0 - reserved2: 0x0 - reserved3: 0x0 - content: 485341480100000009000000090000000C00000000000000010000000100060000000000FFFFFFFFFFFFFFFF0100000003000000040000000600000007000000080000004A08311CC78E3C8288CB36CF89CB36CFD1125E53522B705390D9F86F6A7F9A7C4908311C8C0000009C000000AC000000BC000000CC000000DC000000EC00000000010000100100000601000001000000F000000000000000D6000000010000005E00000000000000F600000001000000C30000000000000016010000010000002C01000000000000440100000100000052020000000000005C01000001000000A6020000000000002B0100000200000052020000A60200000000000026010000010000006801000000000000E6000000010000008700000000000000 - - sectname: __apple_objc - segname: __DWARF - addr: 0x944 - size: 36 - offset: 0xDFC - align: 0 - reloff: 0x0 - nreloc: 0 - flags: 0x2000000 - reserved1: 0x0 - reserved2: 0x0 - reserved3: 0x0 - content: 485341480100000001000000000000000C000000000000000100000001000600FFFFFFFF - - sectname: __apple_namespac - segname: __DWARF - addr: 0x968 - size: 36 - offset: 0xE20 - align: 0 - reloff: 0x0 - nreloc: 0 - flags: 0x2000000 - reserved1: 0x0 - reserved2: 0x0 - reserved3: 0x0 - content: 485341480100000001000000000000000C000000000000000100000001000600FFFFFFFF - - sectname: __apple_types - segname: __DWARF - addr: 0x98C - size: 195 - offset: 0xE44 - align: 0 - reloff: 0x0 - nreloc: 0 - flags: 0x2000000 - reserved1: 0x0 - reserved2: 0x0 - reserved3: 0x0 - content: 48534148010000000500000005000000140000000000000003000000010006000300050004000B000000000002000000FFFFFFFF03000000040000007CA8F05D90D9F86F5B738CDC3080880B6320957C64000000770000008A0000009D000000B0000000380100000100000027020000130000000000002B010000010000000502000013000000000000C20000000100000057000000240000000000007401000001000000DE02000024000000000000BD000000010000005000000024000000000000 - - sectname: __debug_frame - segname: __DWARF - addr: 0xA50 - size: 232 - offset: 0xF08 - align: 3 - reloff: 0x11B0 - nreloc: 8 - flags: 0x2000000 - reserved1: 0x0 - reserved2: 0x0 - reserved3: 0x0 - content: 14000000FFFFFFFF0400080001781E0C1F00000000000000140000000000000000000000000000000800000000000000140000000000000008000000000000000800000000000000140000000000000010000000000000000800000000000000140000000000000018000000000000000800000000000000140000000000000020000000000000000800000000000000240000000000000028000000000000006400000000000000500C1D109E019D02930394040000000014000000000000008C000000000000000400000000000000140000000000000090000000000000000400000000000000 - relocations: - - address: 0xD8 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0xC0 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x98 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x80 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x68 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x50 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x38 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x20 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - sectname: __debug_line - segname: __DWARF - addr: 0xB38 - size: 253 - offset: 0xFF0 - align: 0 - reloff: 0x11F0 - nreloc: 8 - flags: 0x2000000 - reserved1: 0x0 - reserved2: 0x0 - reserved3: 0x0 - relocations: - - address: 0xED - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0xD9 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0xAA - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x96 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x7E - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x66 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x50 - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - address: 0x3A - symbolnum: 1 - pcrel: false - length: 3 - extern: false - type: 0 - scattered: false - value: 0 - - cmd: LC_BUILD_VERSION - cmdsize: 24 - platform: 1 - minos: 720896 - sdk: 0 - ntools: 0 - - cmd: LC_LINKER_OPTIMIZATION_HINT - cmdsize: 16 - dataoff: 4656 - datasize: 8 - - cmd: LC_SYMTAB - cmdsize: 24 - symoff: 4664 - nsyms: 11 - stroff: 4840 - strsize: 168 - - cmd: LC_DYSYMTAB - cmdsize: 80 - ilocalsym: 0 - nlocalsym: 3 - iextdefsym: 3 - nextdefsym: 8 - iundefsym: 11 - 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 -LinkEditData: - NameList: - - n_strx: 155 - n_type: 0xE - n_sect: 1 - n_desc: 0 - n_value: 0 - - n_strx: 1 - n_type: 0xE - n_sect: 2 - n_desc: 0 - n_value: 148 - - n_strx: 149 - n_type: 0xE - n_sect: 2 - n_desc: 0 - n_value: 148 - - n_strx: 39 - n_type: 0xF - n_sect: 1 - n_desc: 192 - n_value: 140 - - n_strx: 14 - n_type: 0xF - n_sect: 1 - n_desc: 192 - n_value: 144 - - n_strx: 132 - n_type: 0xF - n_sect: 1 - n_desc: 0 - n_value: 0 - - n_strx: 115 - n_type: 0xF - n_sect: 1 - n_desc: 0 - n_value: 16 - - n_strx: 81 - n_type: 0xF - n_sect: 1 - n_desc: 0 - n_value: 32 - - n_strx: 98 - n_type: 0xF - n_sect: 1 - n_desc: 0 - n_value: 8 - - n_strx: 64 - n_type: 0xF - n_sect: 1 - n_desc: 0 - n_value: 24 - - n_strx: 8 - n_type: 0xF - n_sect: 1 - n_desc: 0 - n_value: 40 - StringTable: - - '' - - l_.str - - _main - - __ZN12length_errorC2EPKc - - __ZN12length_errorC1EPKc - - _function3_copy2 - - _function2_copy2 - - _function3_copy1 - - _function2_copy1 - - _function1_copy1 - - ltmp1 - - ltmp0 - - '' - - '' - - '' - - '' - - '' - - '' - - '' -DWARF: - debug_str: - - 'Facebook clang version 19.1.5 (https://git.internal.tfbnw.net/repos/git/rw/osmeta/external/llvm-project b36c9ae1f8f2b39e4aafb9ca4700c608c3036365)' - - stmt_seq_macho.cpp - - '/' - - '/private/tmp/stmt_seq' - - char - - __ARRAY_SIZE_TYPE__ - - function1_copy1 - - function3_copy1 - - function2_copy1 - - function3_copy2 - - function2_copy2 - - main - - length_error - - logic_error - - _ZN12length_errorC1EPKc - - _ZN12length_errorC2EPKc - - int - - a - - b - - result - - e - - sum - - this - - s - debug_abbrev: - - ID: 0 - Table: - - Code: 0x1 - Tag: DW_TAG_compile_unit - Children: DW_CHILDREN_yes - Attributes: - - Attribute: DW_AT_producer - Form: DW_FORM_strp - - Attribute: DW_AT_language - Form: DW_FORM_data2 - - Attribute: DW_AT_name - Form: DW_FORM_strp - - Attribute: DW_AT_LLVM_sysroot - Form: DW_FORM_strp - - Attribute: DW_AT_stmt_list - Form: DW_FORM_sec_offset - - Attribute: DW_AT_comp_dir - Form: DW_FORM_strp - - Attribute: DW_AT_APPLE_optimized - Form: DW_FORM_flag_present - - Attribute: DW_AT_low_pc - Form: DW_FORM_addr - - Attribute: DW_AT_high_pc - Form: DW_FORM_data4 - - Code: 0x2 - Tag: DW_TAG_variable - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Attribute: DW_AT_decl_file - Form: DW_FORM_data1 - - Attribute: DW_AT_decl_line - Form: DW_FORM_data1 - - Attribute: DW_AT_location - Form: DW_FORM_exprloc - - Code: 0x3 - Tag: DW_TAG_array_type - Children: DW_CHILDREN_yes - Attributes: - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Code: 0x4 - Tag: DW_TAG_subrange_type - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Attribute: DW_AT_count - Form: DW_FORM_data1 - - Code: 0x5 - Tag: DW_TAG_const_type - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Code: 0x6 - Tag: DW_TAG_base_type - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_name - Form: DW_FORM_strp - - Attribute: DW_AT_encoding - Form: DW_FORM_data1 - - Attribute: DW_AT_byte_size - Form: DW_FORM_data1 - - Code: 0x7 - Tag: DW_TAG_base_type - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_name - Form: DW_FORM_strp - - Attribute: DW_AT_byte_size - Form: DW_FORM_data1 - - Attribute: DW_AT_encoding - Form: DW_FORM_data1 - - Code: 0x8 - Tag: DW_TAG_subprogram - Children: DW_CHILDREN_yes - Attributes: - - Attribute: DW_AT_low_pc - Form: DW_FORM_addr - - Attribute: DW_AT_high_pc - Form: DW_FORM_data4 - - Attribute: DW_AT_APPLE_omit_frame_ptr - Form: DW_FORM_flag_present - - Attribute: DW_AT_LLVM_stmt_sequence - Form: DW_FORM_sec_offset - - Attribute: DW_AT_frame_base - Form: DW_FORM_exprloc - - Attribute: DW_AT_call_all_calls - Form: DW_FORM_flag_present - - Attribute: DW_AT_name - Form: DW_FORM_strp - - Attribute: DW_AT_decl_file - Form: DW_FORM_data1 - - Attribute: DW_AT_decl_line - Form: DW_FORM_data1 - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Attribute: DW_AT_external - Form: DW_FORM_flag_present - - Attribute: DW_AT_APPLE_optimized - Form: DW_FORM_flag_present - - Code: 0x9 - Tag: DW_TAG_formal_parameter - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_name - Form: DW_FORM_strp - - Attribute: DW_AT_decl_file - Form: DW_FORM_data1 - - Attribute: DW_AT_decl_line - Form: DW_FORM_data1 - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Code: 0xA - Tag: DW_TAG_formal_parameter - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_location - Form: DW_FORM_sec_offset - - Attribute: DW_AT_name - Form: DW_FORM_strp - - Attribute: DW_AT_decl_file - Form: DW_FORM_data1 - - Attribute: DW_AT_decl_line - Form: DW_FORM_data1 - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Code: 0xB - Tag: DW_TAG_variable - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_location - Form: DW_FORM_sec_offset - - Attribute: DW_AT_name - Form: DW_FORM_strp - - Attribute: DW_AT_decl_file - Form: DW_FORM_data1 - - Attribute: DW_AT_decl_line - Form: DW_FORM_data1 - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Code: 0xC - Tag: DW_TAG_subprogram - Children: DW_CHILDREN_yes - Attributes: - - Attribute: DW_AT_low_pc - Form: DW_FORM_addr - - Attribute: DW_AT_high_pc - Form: DW_FORM_data4 - - Attribute: DW_AT_LLVM_stmt_sequence - Form: DW_FORM_data4 - - Attribute: DW_AT_frame_base - Form: DW_FORM_exprloc - - Attribute: DW_AT_call_all_calls - Form: DW_FORM_flag_present - - Attribute: DW_AT_name - Form: DW_FORM_strp - - Attribute: DW_AT_decl_file - Form: DW_FORM_data1 - - Attribute: DW_AT_decl_line - Form: DW_FORM_data1 - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Attribute: DW_AT_external - Form: DW_FORM_flag_present - - Attribute: DW_AT_APPLE_optimized - Form: DW_FORM_flag_present - - Code: 0xD - Tag: DW_TAG_variable - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_location - Form: DW_FORM_exprloc - - Attribute: DW_AT_name - Form: DW_FORM_strp - - Attribute: DW_AT_decl_file - Form: DW_FORM_data1 - - Attribute: DW_AT_decl_line - Form: DW_FORM_data1 - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Code: 0xE - Tag: DW_TAG_call_site - Children: DW_CHILDREN_yes - Attributes: - - Attribute: DW_AT_call_origin - Form: DW_FORM_ref4 - - Attribute: DW_AT_call_return_pc - Form: DW_FORM_addr - - Code: 0xF - Tag: DW_TAG_call_site_parameter - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_location - Form: DW_FORM_exprloc - - Attribute: DW_AT_call_value - Form: DW_FORM_exprloc - - Code: 0x10 - Tag: DW_TAG_structure_type - Children: DW_CHILDREN_yes - Attributes: - - Attribute: DW_AT_calling_convention - Form: DW_FORM_data1 - - Attribute: DW_AT_name - Form: DW_FORM_strp - - Attribute: DW_AT_byte_size - Form: DW_FORM_data1 - - Attribute: DW_AT_decl_file - Form: DW_FORM_data1 - - Attribute: DW_AT_decl_line - Form: DW_FORM_data1 - - Code: 0x11 - Tag: DW_TAG_inheritance - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Attribute: DW_AT_data_member_location - Form: DW_FORM_data1 - - Code: 0x12 - Tag: DW_TAG_subprogram - Children: DW_CHILDREN_yes - Attributes: - - Attribute: DW_AT_name - Form: DW_FORM_strp - - Attribute: DW_AT_decl_file - Form: DW_FORM_data1 - - Attribute: DW_AT_decl_line - Form: DW_FORM_data1 - - Attribute: DW_AT_declaration - Form: DW_FORM_flag_present - - Attribute: DW_AT_external - Form: DW_FORM_flag_present - - Attribute: DW_AT_APPLE_optimized - Form: DW_FORM_flag_present - - Attribute: DW_AT_explicit - Form: DW_FORM_flag_present - - Code: 0x13 - Tag: DW_TAG_formal_parameter - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Attribute: DW_AT_artificial - Form: DW_FORM_flag_present - - Code: 0x14 - Tag: DW_TAG_formal_parameter - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Code: 0x15 - Tag: DW_TAG_subprogram - Children: DW_CHILDREN_yes - Attributes: - - Attribute: DW_AT_name - Form: DW_FORM_strp - - Attribute: DW_AT_decl_file - Form: DW_FORM_data1 - - Attribute: DW_AT_decl_line - Form: DW_FORM_data1 - - Attribute: DW_AT_declaration - Form: DW_FORM_flag_present - - Attribute: DW_AT_external - Form: DW_FORM_flag_present - - Attribute: DW_AT_APPLE_optimized - Form: DW_FORM_flag_present - - Code: 0x16 - Tag: DW_TAG_pointer_type - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Code: 0x17 - Tag: DW_TAG_subprogram - Children: DW_CHILDREN_yes - Attributes: - - Attribute: DW_AT_low_pc - Form: DW_FORM_addr - - Attribute: DW_AT_high_pc - Form: DW_FORM_data4 - - Attribute: DW_AT_APPLE_omit_frame_ptr - Form: DW_FORM_flag_present - - Attribute: DW_AT_LLVM_stmt_sequence - Form: DW_FORM_sec_offset - - Attribute: DW_AT_frame_base - Form: DW_FORM_exprloc - - Attribute: DW_AT_object_pointer - Form: DW_FORM_ref4 - - Attribute: DW_AT_call_all_calls - Form: DW_FORM_flag_present - - Attribute: DW_AT_linkage_name - Form: DW_FORM_strp - - Attribute: DW_AT_specification - Form: DW_FORM_ref4 - - Code: 0x18 - Tag: DW_TAG_formal_parameter - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_location - Form: DW_FORM_exprloc - - Attribute: DW_AT_name - Form: DW_FORM_strp - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Attribute: DW_AT_artificial - Form: DW_FORM_flag_present - - Code: 0x19 - Tag: DW_TAG_formal_parameter - Children: DW_CHILDREN_no - Attributes: - - Attribute: DW_AT_location - Form: DW_FORM_exprloc - - Attribute: DW_AT_name - Form: DW_FORM_strp - - Attribute: DW_AT_decl_file - Form: DW_FORM_data1 - - Attribute: DW_AT_decl_line - Form: DW_FORM_data1 - - Attribute: DW_AT_type - Form: DW_FORM_ref4 - - Code: 0x1A - Tag: DW_TAG_call_site - Children: DW_CHILDREN_yes - Attributes: - - Attribute: DW_AT_call_origin - Form: DW_FORM_ref4 - - Attribute: DW_AT_call_tail_call - Form: DW_FORM_flag_present - - Attribute: DW_AT_call_pc - Form: DW_FORM_addr - debug_info: - - Length: 0x2E7 - Version: 4 - AbbrevTableID: 0 - AbbrOffset: 0x0 - AddrSize: 8 - Entries: - - AbbrCode: 0x1 - Values: - - Value: 0x0 - - Value: 0x21 - - Value: 0x92 - - Value: 0xA5 - - Value: 0x0 - - Value: 0xA7 - - Value: 0x1 - - Value: 0x0 - - Value: 0x94 - - AbbrCode: 0x2 - Values: - - Value: 0x3F - - Value: 0x1 - - Value: 0x27 - - Value: 0x9 - BlockData: [ 0x3, 0x94, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0 ] - - AbbrCode: 0x3 - Values: - - Value: 0x4B - - AbbrCode: 0x4 - Values: - - Value: 0x57 - - Value: 0x5 - - AbbrCode: 0x0 - - AbbrCode: 0x5 - Values: - - Value: 0x50 - - AbbrCode: 0x6 - Values: - - Value: 0xBD - - Value: 0x6 - - Value: 0x1 - - AbbrCode: 0x7 - Values: - - Value: 0xC2 - - Value: 0x8 - - Value: 0x7 - - AbbrCode: 0x8 - Values: - - Value: 0x0 - - Value: 0x8 - - Value: 0x1 - - BlockData: [ 0x6F ] - - Value: 0x1 - BlockData: [ 0x6F ] - - Value: 0x1 - - Value: 0xD6 - - Value: 0x1 - - Value: 0x2 - - Value: 0x2DE - - Value: 0x1 - - Value: 0x1 - - AbbrCode: 0x9 - Values: - - Value: 0x178 - - Value: 0x1 - - Value: 0x2 - - Value: 0x2DE - - AbbrCode: 0x0 - - AbbrCode: 0x8 - Values: - - Value: 0x8 - - Value: 0x8 - - Value: 0x1 - - Value: 0x4A - - Value: 0x1 - BlockData: [ 0x6F ] - - Value: 0x1 - - Value: 0xE6 - - Value: 0x1 - - Value: 0x6 - - Value: 0x2DE - - Value: 0x1 - - Value: 0x1 - - AbbrCode: 0xA - Values: - - Value: 0x0 - - Value: 0x178 - - Value: 0x1 - - Value: 0x6 - - Value: 0x2DE - - AbbrCode: 0xB - Values: - - Value: 0x39 - - Value: 0x17A - - Value: 0x1 - - Value: 0x7 - - Value: 0x2DE - - AbbrCode: 0x0 - - AbbrCode: 0x8 - Values: - - Value: 0x10 - - Value: 0x8 - - Value: 0x1 - - Value: 0x60 - - Value: 0x1 - BlockData: [ 0x6F ] - - Value: 0x1 - - Value: 0xF6 - - Value: 0x1 - - Value: 0xB - - Value: 0x2DE - - Value: 0x1 - - Value: 0x1 - - AbbrCode: 0xA - Values: - - Value: 0x5E - - Value: 0x178 - - Value: 0x1 - - Value: 0xB - - Value: 0x2DE - - AbbrCode: 0x0 - - AbbrCode: 0x8 - Values: - - Value: 0x18 - - Value: 0x8 - - Value: 0x1 - - Value: 0x78 - - Value: 0x1 - BlockData: [ 0x6F ] - - Value: 0x1 - - Value: 0x106 - - Value: 0x1 - - Value: 0xF - - Value: 0x2DE - - Value: 0x1 - - Value: 0x1 - - AbbrCode: 0xA - Values: - - Value: 0x97 - - Value: 0x178 - - Value: 0x1 - - Value: 0xF - - Value: 0x2DE - - AbbrCode: 0xB - Values: - - Value: 0xD0 - - Value: 0x17A - - Value: 0x1 - - Value: 0x10 - - Value: 0x2DE - - AbbrCode: 0x0 - - AbbrCode: 0x8 - Values: - - Value: 0x20 - - Value: 0x8 - - Value: 0x1 - - Value: 0x90 - - Value: 0x1 - BlockData: [ 0x6F ] - - Value: 0x1 - - Value: 0x116 - - Value: 0x1 - - Value: 0x14 - - Value: 0x2DE - - Value: 0x1 - - Value: 0x1 - - AbbrCode: 0xA - Values: - - Value: 0xF5 - - Value: 0x178 - - Value: 0x1 - - Value: 0x14 - - Value: 0x2DE - - AbbrCode: 0xB - Values: - - Value: 0x12E - - Value: 0x17C - - Value: 0x1 - - Value: 0x15 - - Value: 0x2DE - - AbbrCode: 0x0 - - AbbrCode: 0xC - Values: - - Value: 0x28 - - Value: 0x64 - - Value: 0xA7 - - Value: 0x1 - BlockData: [ 0x6D ] - - Value: 0x1 - - Value: 0x126 - - Value: 0x1 - - Value: 0x21 - - Value: 0x2DE - - Value: 0x1 - - Value: 0x1 - - AbbrCode: 0xD - Values: - - Value: 0x2 - BlockData: [ 0x8F, 0xF ] - - Value: 0x183 - - Value: 0x1 - - Value: 0x27 - - Value: 0x205 - - AbbrCode: 0xB - Values: - - Value: 0x151 - - Value: 0x185 - - Value: 0x1 - - Value: 0x22 - - Value: 0x2DE - - AbbrCode: 0xE - Values: - - Value: 0x12C - - Value: 0x40 - - AbbrCode: 0xF - Values: - - Value: 0x1 - BlockData: [ 0x50 ] - - Value: 0x1 - BlockData: [ 0x33 ] - - AbbrCode: 0x0 - - AbbrCode: 0xE - Values: - - Value: 0xF0 - - Value: 0x4C - - AbbrCode: 0xF - Values: - - Value: 0x1 - BlockData: [ 0x50 ] - - Value: 0x2 - BlockData: [ 0x10, 0x29 ] - - AbbrCode: 0x0 - - AbbrCode: 0xE - Values: - - Value: 0xC3 - - Value: 0x58 - - AbbrCode: 0xF - Values: - - Value: 0x1 - BlockData: [ 0x50 ] - - Value: 0x1 - BlockData: [ 0x3B ] - - AbbrCode: 0x0 - - AbbrCode: 0xE - Values: - - Value: 0x5E - - Value: 0x64 - - AbbrCode: 0xF - Values: - - Value: 0x1 - BlockData: [ 0x50 ] - - Value: 0x2 - BlockData: [ 0x10, 0x2A ] - - AbbrCode: 0x0 - - AbbrCode: 0xE - Values: - - Value: 0x252 - - Value: 0x78 - - AbbrCode: 0xF - Values: - - Value: 0x1 - BlockData: [ 0x50 ] - - Value: 0x2 - BlockData: [ 0x8F, 0xF ] - - AbbrCode: 0x0 - - AbbrCode: 0x0 - - AbbrCode: 0x10 - Values: - - Value: 0x5 - - Value: 0x12B - - Value: 0x1 - - Value: 0x1 - - Value: 0x1D - - AbbrCode: 0x11 - Values: - - Value: 0x227 - - Value: 0x0 - - AbbrCode: 0x12 - Values: - - Value: 0x12B - - Value: 0x1 - - Value: 0x1E - - Value: 0x1 - - Value: 0x1 - - Value: 0x1 - - Value: 0x1 - - AbbrCode: 0x13 - Values: - - Value: 0x24D - - Value: 0x1 - - AbbrCode: 0x14 - Values: - - Value: 0x248 - - AbbrCode: 0x0 - - AbbrCode: 0x0 - - AbbrCode: 0x10 - Values: - - Value: 0x5 - - Value: 0x138 - - Value: 0x1 - - Value: 0x1 - - Value: 0x19 - - AbbrCode: 0x15 - Values: - - Value: 0x138 - - Value: 0x1 - - Value: 0x1A - - Value: 0x1 - - Value: 0x1 - - Value: 0x1 - - AbbrCode: 0x13 - Values: - - Value: 0x243 - - Value: 0x1 - - AbbrCode: 0x14 - Values: - - Value: 0x248 - - AbbrCode: 0x0 - - AbbrCode: 0x0 - - AbbrCode: 0x16 - Values: - - Value: 0x227 - - AbbrCode: 0x16 - Values: - - Value: 0x4B - - AbbrCode: 0x16 - Values: - - Value: 0x205 - - AbbrCode: 0x17 - Values: - - Value: 0x8C - - Value: 0x4 - - Value: 0x1 - - Value: 0xAB - - Value: 0x1 - BlockData: [ 0x6F ] - - Value: 0x271 - - Value: 0x1 - - Value: 0x144 - - Value: 0x214 - - AbbrCode: 0x18 - Values: - - Value: 0x1 - BlockData: [ 0x50 ] - - Value: 0x189 - - Value: 0x2E5 - - Value: 0x1 - - AbbrCode: 0x19 - Values: - - Value: 0x1 - BlockData: [ 0x51 ] - - Value: 0x18E - - Value: 0x1 - - Value: 0x1E - - Value: 0x248 - - AbbrCode: 0x1A - Values: - - Value: 0x2A6 - - Value: 0x1 - - Value: 0x8C - - AbbrCode: 0xF - Values: - - Value: 0x1 - BlockData: [ 0x50 ] - - Value: 0x3 - BlockData: [ 0xA3, 0x1, 0x50 ] - - AbbrCode: 0xF - Values: - - Value: 0x1 - BlockData: [ 0x51 ] - - Value: 0x3 - BlockData: [ 0xA3, 0x1, 0x51 ] - - AbbrCode: 0x0 - - AbbrCode: 0x0 - - AbbrCode: 0x17 - Values: - - Value: 0x90 - - Value: 0x4 - - Value: 0x1 - - Value: 0xEEEEE7 - - Value: 0x1 - BlockData: [ 0x6F ] - - Value: 0x2C5 - - Value: 0x1 - - Value: 0x15C - - Value: 0x214 - - AbbrCode: 0x18 - Values: - - Value: 0x1 - BlockData: [ 0x50 ] - - Value: 0x189 - - Value: 0x2E5 - - Value: 0x1 - - AbbrCode: 0x19 - Values: - - Value: 0x1 - BlockData: [ 0x51 ] - - Value: 0x18E - - Value: 0x1 - - Value: 0x1E - - Value: 0x248 - - AbbrCode: 0x0 - - AbbrCode: 0x6 - Values: - - Value: 0x174 - - Value: 0x5 - - Value: 0x4 - - AbbrCode: 0x16 - Values: - - Value: 0x205 - - AbbrCode: 0x0 - debug_line: - - Length: 249 - Version: 4 - PrologueLength: 42 - 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: stmt_seq_macho.cpp - DirIdx: 0 - ModTime: 0 - Length: 0 - Opcodes: - - Opcode: DW_LNS_set_column - Data: 10 - - Opcode: DW_LNS_set_prologue_end - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 9 - SubOpcode: DW_LNE_set_address - Data: 0 - - Opcode: 0x14 - Data: 0 - - Opcode: DW_LNS_set_column - Data: 3 - - Opcode: DW_LNS_negate_stmt - Data: 0 - - Opcode: 0x4A - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 1 - SubOpcode: DW_LNE_end_sequence - Data: 0 - - Opcode: DW_LNS_set_column - Data: 14 - - Opcode: DW_LNS_set_prologue_end - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 9 - SubOpcode: DW_LNE_set_address - Data: 8 - - Opcode: 0x19 - Data: 0 - - Opcode: DW_LNS_set_column - Data: 5 - - Opcode: DW_LNS_negate_stmt - Data: 0 - - Opcode: 0x4A - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 1 - SubOpcode: DW_LNE_end_sequence - Data: 0 - - Opcode: DW_LNS_set_column - Data: 14 - - Opcode: DW_LNS_set_prologue_end - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 9 - SubOpcode: DW_LNE_set_address - Data: 16 - - Opcode: DW_LNS_advance_line - SData: 11 - Data: 0 - - Opcode: DW_LNS_copy - Data: 0 - - Opcode: DW_LNS_set_column - Data: 5 - - Opcode: DW_LNS_negate_stmt - Data: 0 - - Opcode: 0x4A - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 1 - SubOpcode: DW_LNE_end_sequence - Data: 0 - - Opcode: DW_LNS_set_column - Data: 14 - - Opcode: DW_LNS_set_prologue_end - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 9 - SubOpcode: DW_LNE_set_address - Data: 24 - - Opcode: DW_LNS_advance_line - SData: 16 - Data: 0 - - Opcode: DW_LNS_copy - Data: 0 - - Opcode: DW_LNS_set_column - Data: 5 - - Opcode: DW_LNS_negate_stmt - Data: 0 - - Opcode: 0x4A - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 1 - SubOpcode: DW_LNE_end_sequence - Data: 0 - - Opcode: DW_LNS_set_column - Data: 20 - - Opcode: DW_LNS_set_prologue_end - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 9 - SubOpcode: DW_LNE_set_address - Data: 32 - - Opcode: DW_LNS_advance_line - SData: 20 - Data: 0 - - Opcode: DW_LNS_copy - Data: 0 - - Opcode: DW_LNS_set_column - Data: 5 - - Opcode: 0x4B - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 1 - SubOpcode: DW_LNE_end_sequence - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 9 - SubOpcode: DW_LNE_set_address - Data: 40 - - Opcode: DW_LNS_advance_line - SData: 32 - Data: 0 - - Opcode: DW_LNS_copy - Data: 0 - - Opcode: DW_LNS_set_column - Data: 12 - - Opcode: DW_LNS_set_prologue_end - Data: 0 - - Opcode: 0xF4 - Data: 0 - - Opcode: 0xBB - Data: 0 - - Opcode: DW_LNS_set_column - Data: 9 - - Opcode: DW_LNS_negate_stmt - Data: 0 - - Opcode: 0x82 - Data: 0 - - Opcode: DW_LNS_set_column - Data: 12 - - Opcode: DW_LNS_negate_stmt - Data: 0 - - Opcode: 0x4B - Data: 0 - - Opcode: 0xBB - Data: 0 - - Opcode: DW_LNS_set_column - Data: 9 - - Opcode: 0x81 - Data: 0 - - Opcode: DW_LNS_set_column - Data: 18 - - Opcode: 0x4C - Data: 0 - - Opcode: DW_LNS_set_column - Data: 9 - - Opcode: 0xF1 - Data: 0 - - Opcode: DW_LNS_set_column - Data: 5 - - Opcode: DW_LNS_set_epilogue_begin - Data: 0 - - Opcode: 0x4C - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 1 - SubOpcode: DW_LNE_end_sequence - Data: 0 - - Opcode: DW_LNS_set_column - Data: 85 - - Opcode: DW_LNS_set_prologue_end - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 9 - SubOpcode: DW_LNE_set_address - Data: 140 - - Opcode: DW_LNS_advance_line - SData: 29 - Data: 0 - - Opcode: DW_LNS_copy - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 1 - SubOpcode: DW_LNE_end_sequence - Data: 0 - - Opcode: DW_LNS_set_column - Data: 86 - - Opcode: DW_LNS_set_prologue_end - Data: 0 - - Opcode: DW_LNS_extended_op - ExtLen: 9 - SubOpcode: DW_LNE_set_address - Data: 144 - - Opcode: DW_LNS_advance_line - SData: 29 - Data: 0 - - Opcode: DW_LNS_copy - Data: 0 - - Opcode: DW_LNS_advance_pc - Data: 4 - - Opcode: DW_LNS_extended_op - ExtLen: 1 - SubOpcode: DW_LNE_end_sequence - Data: 0 -... diff --git a/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml b/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml index a8ead5983bf57..dea4d904c1d9f 100644 --- a/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml +++ b/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml @@ -2,7 +2,7 @@ # Then manually tempered with some of the value of the attribute # I hope there are easier ways to construct tests like this. -# RUN: yaml2obj %p/Inputs/verify_stmt_seq.yaml -o verify_stmt_seq.o +# RUN: yaml2obj %s -o verify_stmt_seq.o # RUN: not llvm-dwarfdump -verify -debug-info verify_stmt_seq.o | FileCheck %s --check-prefix=CHECK_INVALID --implicit-check-not=error: @@ -23,3 +23,1604 @@ # CHECK_INVALID-NEXT: error: DW_AT_LLVM_stmt_sequence offset out of line table bounds occurred 1 time(s). # CHECK_INVALID-NEXT: error: Invalid DW_AT_LLVM_stmt_sequence encoding occurred 1 time(s). # CHECK_INVALID-NEXT: error: Invalid DW_AT_LLVM_stmt_sequence offset occurred 1 time(s). + +--- !mach-o +IsLittleEndian: true +FileHeader: + magic: 0xFEEDFACF + cputype: 0x100000C + cpusubtype: 0x0 + filetype: 0x1 + ncmds: 5 + sizeofcmds: 1176 + flags: 0x2000 + reserved: 0x0 +LoadCommands: + - cmd: LC_SEGMENT_64 + cmdsize: 1032 + segname: '' + vmaddr: 0 + vmsize: 3125 + fileoff: 1208 + filesize: 3125 + maxprot: 7 + initprot: 7 + nsects: 12 + flags: 0 + Sections: + - sectname: __text + segname: __TEXT + addr: 0x0 + size: 148 + offset: 0x4B8 + align: 2 + reloff: 0x10F0 + nreloc: 8 + flags: 0x80000400 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + content: 00040011C0035FD600100011C0035FD600580051C0035FD600100011C0035FD600580051C0035FD6FFC300D1F44F01A9FD7B02A9FD8300916000805200000094F30300AA20058052000000941400130B6001805200000094F30300AA40058052000000947302000B0100009021000091E03F0091000000948002130BFD7B42A9F44F41A9FFC30091C0035FD600000014C0035FD6 + relocations: + - address: 0x8C + symbolnum: 4 + pcrel: true + length: 2 + extern: true + type: 2 + scattered: false + value: 0 + - address: 0x74 + symbolnum: 3 + pcrel: true + length: 2 + extern: true + type: 2 + scattered: false + value: 0 + - address: 0x6C + symbolnum: 1 + pcrel: false + length: 2 + extern: true + type: 4 + scattered: false + value: 0 + - address: 0x68 + symbolnum: 1 + pcrel: true + length: 2 + extern: true + type: 3 + scattered: false + value: 0 + - address: 0x60 + symbolnum: 5 + pcrel: true + length: 2 + extern: true + type: 2 + scattered: false + value: 0 + - address: 0x54 + symbolnum: 6 + pcrel: true + length: 2 + extern: true + type: 2 + scattered: false + value: 0 + - address: 0x48 + symbolnum: 9 + pcrel: true + length: 2 + extern: true + type: 2 + scattered: false + value: 0 + - address: 0x3C + symbolnum: 7 + pcrel: true + length: 2 + extern: true + type: 2 + scattered: false + value: 0 + - sectname: __cstring + segname: __TEXT + addr: 0x94 + size: 5 + offset: 0x54C + align: 0 + reloff: 0x0 + nreloc: 0 + flags: 0x2 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + content: '7465737400' + - sectname: __debug_loc + segname: __DWARF + addr: 0x99 + size: 412 + offset: 0x551 + align: 0 + reloff: 0x0 + nreloc: 0 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + content: 08000000000000000C000000000000000100500C0000000000000010000000000000000400A301509F0000000000000000000000000000000008000000000000000C00000000000000030070039F0000000000000000000000000000000010000000000000001400000000000000010050140000000000000018000000000000000400A301509F0000000000000000000000000000000018000000000000001C000000000000000100501C0000000000000020000000000000000400A301509F0000000000000000000000000000000018000000000000001C00000000000000030070039F0000000000000000000000000000000020000000000000002400000000000000010050240000000000000028000000000000000400A301509F00000000000000000000000000000000240000000000000028000000000000000100500000000000000000000000000000000038000000000000004400000000000000030011009F4400000000000000500000000000000001006350000000000000005C0000000000000001006400000000000000000000000000000000 + - sectname: __debug_abbrev + segname: __DWARF + addr: 0x235 + size: 372 + offset: 0x6ED + align: 0 + reloff: 0x0 + nreloc: 0 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + - sectname: __debug_info + segname: __DWARF + addr: 0x3A9 + size: 747 + offset: 0x861 + align: 0 + reloff: 0x1130 + nreloc: 16 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + relocations: + - address: 0x2A7 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x28E + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x253 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x1F5 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x1E1 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x1CE + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x1BA + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x1A7 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x169 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x12D + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0xF1 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0xC4 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x88 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x5F + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x37 + symbolnum: 2 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x22 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - sectname: __debug_str + segname: __DWARF + addr: 0x694 + size: 400 + offset: 0xB4C + align: 0 + reloff: 0x0 + nreloc: 0 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + - sectname: __apple_names + segname: __DWARF + addr: 0x824 + size: 288 + offset: 0xCDC + align: 0 + reloff: 0x0 + nreloc: 0 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + content: 485341480100000009000000090000000C00000000000000010000000100060000000000FFFFFFFFFFFFFFFF0100000003000000040000000600000007000000080000004A08311CC78E3C8288CB36CF89CB36CFD1125E53522B705390D9F86F6A7F9A7C4908311C8C0000009C000000AC000000BC000000CC000000DC000000EC00000000010000100100000601000001000000F000000000000000D6000000010000005E00000000000000F600000001000000C30000000000000016010000010000002C01000000000000440100000100000052020000000000005C01000001000000A6020000000000002B0100000200000052020000A60200000000000026010000010000006801000000000000E6000000010000008700000000000000 + - sectname: __apple_objc + segname: __DWARF + addr: 0x944 + size: 36 + offset: 0xDFC + align: 0 + reloff: 0x0 + nreloc: 0 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + content: 485341480100000001000000000000000C000000000000000100000001000600FFFFFFFF + - sectname: __apple_namespac + segname: __DWARF + addr: 0x968 + size: 36 + offset: 0xE20 + align: 0 + reloff: 0x0 + nreloc: 0 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + content: 485341480100000001000000000000000C000000000000000100000001000600FFFFFFFF + - sectname: __apple_types + segname: __DWARF + addr: 0x98C + size: 195 + offset: 0xE44 + align: 0 + reloff: 0x0 + nreloc: 0 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + content: 48534148010000000500000005000000140000000000000003000000010006000300050004000B000000000002000000FFFFFFFF03000000040000007CA8F05D90D9F86F5B738CDC3080880B6320957C64000000770000008A0000009D000000B0000000380100000100000027020000130000000000002B010000010000000502000013000000000000C20000000100000057000000240000000000007401000001000000DE02000024000000000000BD000000010000005000000024000000000000 + - sectname: __debug_frame + segname: __DWARF + addr: 0xA50 + size: 232 + offset: 0xF08 + align: 3 + reloff: 0x11B0 + nreloc: 8 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + content: 14000000FFFFFFFF0400080001781E0C1F00000000000000140000000000000000000000000000000800000000000000140000000000000008000000000000000800000000000000140000000000000010000000000000000800000000000000140000000000000018000000000000000800000000000000140000000000000020000000000000000800000000000000240000000000000028000000000000006400000000000000500C1D109E019D02930394040000000014000000000000008C000000000000000400000000000000140000000000000090000000000000000400000000000000 + relocations: + - address: 0xD8 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0xC0 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x98 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x80 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x68 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x50 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x38 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x20 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - sectname: __debug_line + segname: __DWARF + addr: 0xB38 + size: 253 + offset: 0xFF0 + align: 0 + reloff: 0x11F0 + nreloc: 8 + flags: 0x2000000 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + relocations: + - address: 0xED + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0xD9 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0xAA + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x96 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x7E + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x66 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x50 + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - address: 0x3A + symbolnum: 1 + pcrel: false + length: 3 + extern: false + type: 0 + scattered: false + value: 0 + - cmd: LC_BUILD_VERSION + cmdsize: 24 + platform: 1 + minos: 720896 + sdk: 0 + ntools: 0 + - cmd: LC_LINKER_OPTIMIZATION_HINT + cmdsize: 16 + dataoff: 4656 + datasize: 8 + - cmd: LC_SYMTAB + cmdsize: 24 + symoff: 4664 + nsyms: 11 + stroff: 4840 + strsize: 168 + - cmd: LC_DYSYMTAB + cmdsize: 80 + ilocalsym: 0 + nlocalsym: 3 + iextdefsym: 3 + nextdefsym: 8 + iundefsym: 11 + 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 +LinkEditData: + NameList: + - n_strx: 155 + n_type: 0xE + n_sect: 1 + n_desc: 0 + n_value: 0 + - n_strx: 1 + n_type: 0xE + n_sect: 2 + n_desc: 0 + n_value: 148 + - n_strx: 149 + n_type: 0xE + n_sect: 2 + n_desc: 0 + n_value: 148 + - n_strx: 39 + n_type: 0xF + n_sect: 1 + n_desc: 192 + n_value: 140 + - n_strx: 14 + n_type: 0xF + n_sect: 1 + n_desc: 192 + n_value: 144 + - n_strx: 132 + n_type: 0xF + n_sect: 1 + n_desc: 0 + n_value: 0 + - n_strx: 115 + n_type: 0xF + n_sect: 1 + n_desc: 0 + n_value: 16 + - n_strx: 81 + n_type: 0xF + n_sect: 1 + n_desc: 0 + n_value: 32 + - n_strx: 98 + n_type: 0xF + n_sect: 1 + n_desc: 0 + n_value: 8 + - n_strx: 64 + n_type: 0xF + n_sect: 1 + n_desc: 0 + n_value: 24 + - n_strx: 8 + n_type: 0xF + n_sect: 1 + n_desc: 0 + n_value: 40 + StringTable: + - '' + - l_.str + - _main + - __ZN12length_errorC2EPKc + - __ZN12length_errorC1EPKc + - _function3_copy2 + - _function2_copy2 + - _function3_copy1 + - _function2_copy1 + - _function1_copy1 + - ltmp1 + - ltmp0 + - '' + - '' + - '' + - '' + - '' + - '' + - '' +DWARF: + debug_str: + - 'Facebook clang version 19.1.5 (https://git.internal.tfbnw.net/repos/git/rw/osmeta/external/llvm-project b36c9ae1f8f2b39e4aafb9ca4700c608c3036365)' + - stmt_seq_macho.cpp + - '/' + - '/private/tmp/stmt_seq' + - char + - __ARRAY_SIZE_TYPE__ + - function1_copy1 + - function3_copy1 + - function2_copy1 + - function3_copy2 + - function2_copy2 + - main + - length_error + - logic_error + - _ZN12length_errorC1EPKc + - _ZN12length_errorC2EPKc + - int + - a + - b + - result + - e + - sum + - this + - s + debug_abbrev: + - ID: 0 + Table: + - Code: 0x1 + Tag: DW_TAG_compile_unit + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_producer + Form: DW_FORM_strp + - Attribute: DW_AT_language + Form: DW_FORM_data2 + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_LLVM_sysroot + Form: DW_FORM_strp + - Attribute: DW_AT_stmt_list + Form: DW_FORM_sec_offset + - Attribute: DW_AT_comp_dir + Form: DW_FORM_strp + - Attribute: DW_AT_APPLE_optimized + Form: DW_FORM_flag_present + - Attribute: DW_AT_low_pc + Form: DW_FORM_addr + - Attribute: DW_AT_high_pc + Form: DW_FORM_data4 + - Code: 0x2 + Tag: DW_TAG_variable + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_location + Form: DW_FORM_exprloc + - Code: 0x3 + Tag: DW_TAG_array_type + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Code: 0x4 + Tag: DW_TAG_subrange_type + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Attribute: DW_AT_count + Form: DW_FORM_data1 + - Code: 0x5 + Tag: DW_TAG_const_type + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Code: 0x6 + Tag: DW_TAG_base_type + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_encoding + Form: DW_FORM_data1 + - Attribute: DW_AT_byte_size + Form: DW_FORM_data1 + - Code: 0x7 + Tag: DW_TAG_base_type + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_byte_size + Form: DW_FORM_data1 + - Attribute: DW_AT_encoding + Form: DW_FORM_data1 + - Code: 0x8 + Tag: DW_TAG_subprogram + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_low_pc + Form: DW_FORM_addr + - Attribute: DW_AT_high_pc + Form: DW_FORM_data4 + - Attribute: DW_AT_APPLE_omit_frame_ptr + Form: DW_FORM_flag_present + - Attribute: DW_AT_LLVM_stmt_sequence + Form: DW_FORM_sec_offset + - Attribute: DW_AT_frame_base + Form: DW_FORM_exprloc + - Attribute: DW_AT_call_all_calls + Form: DW_FORM_flag_present + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Attribute: DW_AT_external + Form: DW_FORM_flag_present + - Attribute: DW_AT_APPLE_optimized + Form: DW_FORM_flag_present + - Code: 0x9 + Tag: DW_TAG_formal_parameter + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Code: 0xA + Tag: DW_TAG_formal_parameter + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_location + Form: DW_FORM_sec_offset + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Code: 0xB + Tag: DW_TAG_variable + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_location + Form: DW_FORM_sec_offset + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Code: 0xC + Tag: DW_TAG_subprogram + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_low_pc + Form: DW_FORM_addr + - Attribute: DW_AT_high_pc + Form: DW_FORM_data4 + - Attribute: DW_AT_LLVM_stmt_sequence + Form: DW_FORM_data4 + - Attribute: DW_AT_frame_base + Form: DW_FORM_exprloc + - Attribute: DW_AT_call_all_calls + Form: DW_FORM_flag_present + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Attribute: DW_AT_external + Form: DW_FORM_flag_present + - Attribute: DW_AT_APPLE_optimized + Form: DW_FORM_flag_present + - Code: 0xD + Tag: DW_TAG_variable + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_location + Form: DW_FORM_exprloc + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Code: 0xE + Tag: DW_TAG_call_site + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_call_origin + Form: DW_FORM_ref4 + - Attribute: DW_AT_call_return_pc + Form: DW_FORM_addr + - Code: 0xF + Tag: DW_TAG_call_site_parameter + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_location + Form: DW_FORM_exprloc + - Attribute: DW_AT_call_value + Form: DW_FORM_exprloc + - Code: 0x10 + Tag: DW_TAG_structure_type + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_calling_convention + Form: DW_FORM_data1 + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_byte_size + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Code: 0x11 + Tag: DW_TAG_inheritance + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Attribute: DW_AT_data_member_location + Form: DW_FORM_data1 + - Code: 0x12 + Tag: DW_TAG_subprogram + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_declaration + Form: DW_FORM_flag_present + - Attribute: DW_AT_external + Form: DW_FORM_flag_present + - Attribute: DW_AT_APPLE_optimized + Form: DW_FORM_flag_present + - Attribute: DW_AT_explicit + Form: DW_FORM_flag_present + - Code: 0x13 + Tag: DW_TAG_formal_parameter + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Attribute: DW_AT_artificial + Form: DW_FORM_flag_present + - Code: 0x14 + Tag: DW_TAG_formal_parameter + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Code: 0x15 + Tag: DW_TAG_subprogram + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_declaration + Form: DW_FORM_flag_present + - Attribute: DW_AT_external + Form: DW_FORM_flag_present + - Attribute: DW_AT_APPLE_optimized + Form: DW_FORM_flag_present + - Code: 0x16 + Tag: DW_TAG_pointer_type + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Code: 0x17 + Tag: DW_TAG_subprogram + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_low_pc + Form: DW_FORM_addr + - Attribute: DW_AT_high_pc + Form: DW_FORM_data4 + - Attribute: DW_AT_APPLE_omit_frame_ptr + Form: DW_FORM_flag_present + - Attribute: DW_AT_LLVM_stmt_sequence + Form: DW_FORM_sec_offset + - Attribute: DW_AT_frame_base + Form: DW_FORM_exprloc + - Attribute: DW_AT_object_pointer + Form: DW_FORM_ref4 + - Attribute: DW_AT_call_all_calls + Form: DW_FORM_flag_present + - Attribute: DW_AT_linkage_name + Form: DW_FORM_strp + - Attribute: DW_AT_specification + Form: DW_FORM_ref4 + - Code: 0x18 + Tag: DW_TAG_formal_parameter + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_location + Form: DW_FORM_exprloc + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Attribute: DW_AT_artificial + Form: DW_FORM_flag_present + - Code: 0x19 + Tag: DW_TAG_formal_parameter + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_location + Form: DW_FORM_exprloc + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_decl_file + Form: DW_FORM_data1 + - Attribute: DW_AT_decl_line + Form: DW_FORM_data1 + - Attribute: DW_AT_type + Form: DW_FORM_ref4 + - Code: 0x1A + Tag: DW_TAG_call_site + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_call_origin + Form: DW_FORM_ref4 + - Attribute: DW_AT_call_tail_call + Form: DW_FORM_flag_present + - Attribute: DW_AT_call_pc + Form: DW_FORM_addr + debug_info: + - Length: 0x2E7 + Version: 4 + AbbrevTableID: 0 + AbbrOffset: 0x0 + AddrSize: 8 + Entries: + - AbbrCode: 0x1 + Values: + - Value: 0x0 + - Value: 0x21 + - Value: 0x92 + - Value: 0xA5 + - Value: 0x0 + - Value: 0xA7 + - Value: 0x1 + - Value: 0x0 + - Value: 0x94 + - AbbrCode: 0x2 + Values: + - Value: 0x3F + - Value: 0x1 + - Value: 0x27 + - Value: 0x9 + BlockData: [ 0x3, 0x94, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0 ] + - AbbrCode: 0x3 + Values: + - Value: 0x4B + - AbbrCode: 0x4 + Values: + - Value: 0x57 + - Value: 0x5 + - AbbrCode: 0x0 + - AbbrCode: 0x5 + Values: + - Value: 0x50 + - AbbrCode: 0x6 + Values: + - Value: 0xBD + - Value: 0x6 + - Value: 0x1 + - AbbrCode: 0x7 + Values: + - Value: 0xC2 + - Value: 0x8 + - Value: 0x7 + - AbbrCode: 0x8 + Values: + - Value: 0x0 + - Value: 0x8 + - Value: 0x1 + - BlockData: [ 0x6F ] + - Value: 0x1 + BlockData: [ 0x6F ] + - Value: 0x1 + - Value: 0xD6 + - Value: 0x1 + - Value: 0x2 + - Value: 0x2DE + - Value: 0x1 + - Value: 0x1 + - AbbrCode: 0x9 + Values: + - Value: 0x178 + - Value: 0x1 + - Value: 0x2 + - Value: 0x2DE + - AbbrCode: 0x0 + - AbbrCode: 0x8 + Values: + - Value: 0x8 + - Value: 0x8 + - Value: 0x1 + - Value: 0x4A + - Value: 0x1 + BlockData: [ 0x6F ] + - Value: 0x1 + - Value: 0xE6 + - Value: 0x1 + - Value: 0x6 + - Value: 0x2DE + - Value: 0x1 + - Value: 0x1 + - AbbrCode: 0xA + Values: + - Value: 0x0 + - Value: 0x178 + - Value: 0x1 + - Value: 0x6 + - Value: 0x2DE + - AbbrCode: 0xB + Values: + - Value: 0x39 + - Value: 0x17A + - Value: 0x1 + - Value: 0x7 + - Value: 0x2DE + - AbbrCode: 0x0 + - AbbrCode: 0x8 + Values: + - Value: 0x10 + - Value: 0x8 + - Value: 0x1 + - Value: 0x60 + - Value: 0x1 + BlockData: [ 0x6F ] + - Value: 0x1 + - Value: 0xF6 + - Value: 0x1 + - Value: 0xB + - Value: 0x2DE + - Value: 0x1 + - Value: 0x1 + - AbbrCode: 0xA + Values: + - Value: 0x5E + - Value: 0x178 + - Value: 0x1 + - Value: 0xB + - Value: 0x2DE + - AbbrCode: 0x0 + - AbbrCode: 0x8 + Values: + - Value: 0x18 + - Value: 0x8 + - Value: 0x1 + - Value: 0x78 + - Value: 0x1 + BlockData: [ 0x6F ] + - Value: 0x1 + - Value: 0x106 + - Value: 0x1 + - Value: 0xF + - Value: 0x2DE + - Value: 0x1 + - Value: 0x1 + - AbbrCode: 0xA + Values: + - Value: 0x97 + - Value: 0x178 + - Value: 0x1 + - Value: 0xF + - Value: 0x2DE + - AbbrCode: 0xB + Values: + - Value: 0xD0 + - Value: 0x17A + - Value: 0x1 + - Value: 0x10 + - Value: 0x2DE + - AbbrCode: 0x0 + - AbbrCode: 0x8 + Values: + - Value: 0x20 + - Value: 0x8 + - Value: 0x1 + - Value: 0x90 + - Value: 0x1 + BlockData: [ 0x6F ] + - Value: 0x1 + - Value: 0x116 + - Value: 0x1 + - Value: 0x14 + - Value: 0x2DE + - Value: 0x1 + - Value: 0x1 + - AbbrCode: 0xA + Values: + - Value: 0xF5 + - Value: 0x178 + - Value: 0x1 + - Value: 0x14 + - Value: 0x2DE + - AbbrCode: 0xB + Values: + - Value: 0x12E + - Value: 0x17C + - Value: 0x1 + - Value: 0x15 + - Value: 0x2DE + - AbbrCode: 0x0 + - AbbrCode: 0xC + Values: + - Value: 0x28 + - Value: 0x64 + - Value: 0xA7 + - Value: 0x1 + BlockData: [ 0x6D ] + - Value: 0x1 + - Value: 0x126 + - Value: 0x1 + - Value: 0x21 + - Value: 0x2DE + - Value: 0x1 + - Value: 0x1 + - AbbrCode: 0xD + Values: + - Value: 0x2 + BlockData: [ 0x8F, 0xF ] + - Value: 0x183 + - Value: 0x1 + - Value: 0x27 + - Value: 0x205 + - AbbrCode: 0xB + Values: + - Value: 0x151 + - Value: 0x185 + - Value: 0x1 + - Value: 0x22 + - Value: 0x2DE + - AbbrCode: 0xE + Values: + - Value: 0x12C + - Value: 0x40 + - AbbrCode: 0xF + Values: + - Value: 0x1 + BlockData: [ 0x50 ] + - Value: 0x1 + BlockData: [ 0x33 ] + - AbbrCode: 0x0 + - AbbrCode: 0xE + Values: + - Value: 0xF0 + - Value: 0x4C + - AbbrCode: 0xF + Values: + - Value: 0x1 + BlockData: [ 0x50 ] + - Value: 0x2 + BlockData: [ 0x10, 0x29 ] + - AbbrCode: 0x0 + - AbbrCode: 0xE + Values: + - Value: 0xC3 + - Value: 0x58 + - AbbrCode: 0xF + Values: + - Value: 0x1 + BlockData: [ 0x50 ] + - Value: 0x1 + BlockData: [ 0x3B ] + - AbbrCode: 0x0 + - AbbrCode: 0xE + Values: + - Value: 0x5E + - Value: 0x64 + - AbbrCode: 0xF + Values: + - Value: 0x1 + BlockData: [ 0x50 ] + - Value: 0x2 + BlockData: [ 0x10, 0x2A ] + - AbbrCode: 0x0 + - AbbrCode: 0xE + Values: + - Value: 0x252 + - Value: 0x78 + - AbbrCode: 0xF + Values: + - Value: 0x1 + BlockData: [ 0x50 ] + - Value: 0x2 + BlockData: [ 0x8F, 0xF ] + - AbbrCode: 0x0 + - AbbrCode: 0x0 + - AbbrCode: 0x10 + Values: + - Value: 0x5 + - Value: 0x12B + - Value: 0x1 + - Value: 0x1 + - Value: 0x1D + - AbbrCode: 0x11 + Values: + - Value: 0x227 + - Value: 0x0 + - AbbrCode: 0x12 + Values: + - Value: 0x12B + - Value: 0x1 + - Value: 0x1E + - Value: 0x1 + - Value: 0x1 + - Value: 0x1 + - Value: 0x1 + - AbbrCode: 0x13 + Values: + - Value: 0x24D + - Value: 0x1 + - AbbrCode: 0x14 + Values: + - Value: 0x248 + - AbbrCode: 0x0 + - AbbrCode: 0x0 + - AbbrCode: 0x10 + Values: + - Value: 0x5 + - Value: 0x138 + - Value: 0x1 + - Value: 0x1 + - Value: 0x19 + - AbbrCode: 0x15 + Values: + - Value: 0x138 + - Value: 0x1 + - Value: 0x1A + - Value: 0x1 + - Value: 0x1 + - Value: 0x1 + - AbbrCode: 0x13 + Values: + - Value: 0x243 + - Value: 0x1 + - AbbrCode: 0x14 + Values: + - Value: 0x248 + - AbbrCode: 0x0 + - AbbrCode: 0x0 + - AbbrCode: 0x16 + Values: + - Value: 0x227 + - AbbrCode: 0x16 + Values: + - Value: 0x4B + - AbbrCode: 0x16 + Values: + - Value: 0x205 + - AbbrCode: 0x17 + Values: + - Value: 0x8C + - Value: 0x4 + - Value: 0x1 + - Value: 0xAB + - Value: 0x1 + BlockData: [ 0x6F ] + - Value: 0x271 + - Value: 0x1 + - Value: 0x144 + - Value: 0x214 + - AbbrCode: 0x18 + Values: + - Value: 0x1 + BlockData: [ 0x50 ] + - Value: 0x189 + - Value: 0x2E5 + - Value: 0x1 + - AbbrCode: 0x19 + Values: + - Value: 0x1 + BlockData: [ 0x51 ] + - Value: 0x18E + - Value: 0x1 + - Value: 0x1E + - Value: 0x248 + - AbbrCode: 0x1A + Values: + - Value: 0x2A6 + - Value: 0x1 + - Value: 0x8C + - AbbrCode: 0xF + Values: + - Value: 0x1 + BlockData: [ 0x50 ] + - Value: 0x3 + BlockData: [ 0xA3, 0x1, 0x50 ] + - AbbrCode: 0xF + Values: + - Value: 0x1 + BlockData: [ 0x51 ] + - Value: 0x3 + BlockData: [ 0xA3, 0x1, 0x51 ] + - AbbrCode: 0x0 + - AbbrCode: 0x0 + - AbbrCode: 0x17 + Values: + - Value: 0x90 + - Value: 0x4 + - Value: 0x1 + - Value: 0xEEEEE7 + - Value: 0x1 + BlockData: [ 0x6F ] + - Value: 0x2C5 + - Value: 0x1 + - Value: 0x15C + - Value: 0x214 + - AbbrCode: 0x18 + Values: + - Value: 0x1 + BlockData: [ 0x50 ] + - Value: 0x189 + - Value: 0x2E5 + - Value: 0x1 + - AbbrCode: 0x19 + Values: + - Value: 0x1 + BlockData: [ 0x51 ] + - Value: 0x18E + - Value: 0x1 + - Value: 0x1E + - Value: 0x248 + - AbbrCode: 0x0 + - AbbrCode: 0x6 + Values: + - Value: 0x174 + - Value: 0x5 + - Value: 0x4 + - AbbrCode: 0x16 + Values: + - Value: 0x205 + - AbbrCode: 0x0 + debug_line: + - Length: 249 + Version: 4 + PrologueLength: 42 + 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: stmt_seq_macho.cpp + DirIdx: 0 + ModTime: 0 + Length: 0 + Opcodes: + - Opcode: DW_LNS_set_column + Data: 10 + - Opcode: DW_LNS_set_prologue_end + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 9 + SubOpcode: DW_LNE_set_address + Data: 0 + - Opcode: 0x14 + Data: 0 + - Opcode: DW_LNS_set_column + Data: 3 + - Opcode: DW_LNS_negate_stmt + Data: 0 + - Opcode: 0x4A + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 1 + SubOpcode: DW_LNE_end_sequence + Data: 0 + - Opcode: DW_LNS_set_column + Data: 14 + - Opcode: DW_LNS_set_prologue_end + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 9 + SubOpcode: DW_LNE_set_address + Data: 8 + - Opcode: 0x19 + Data: 0 + - Opcode: DW_LNS_set_column + Data: 5 + - Opcode: DW_LNS_negate_stmt + Data: 0 + - Opcode: 0x4A + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 1 + SubOpcode: DW_LNE_end_sequence + Data: 0 + - Opcode: DW_LNS_set_column + Data: 14 + - Opcode: DW_LNS_set_prologue_end + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 9 + SubOpcode: DW_LNE_set_address + Data: 16 + - Opcode: DW_LNS_advance_line + SData: 11 + Data: 0 + - Opcode: DW_LNS_copy + Data: 0 + - Opcode: DW_LNS_set_column + Data: 5 + - Opcode: DW_LNS_negate_stmt + Data: 0 + - Opcode: 0x4A + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 1 + SubOpcode: DW_LNE_end_sequence + Data: 0 + - Opcode: DW_LNS_set_column + Data: 14 + - Opcode: DW_LNS_set_prologue_end + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 9 + SubOpcode: DW_LNE_set_address + Data: 24 + - Opcode: DW_LNS_advance_line + SData: 16 + Data: 0 + - Opcode: DW_LNS_copy + Data: 0 + - Opcode: DW_LNS_set_column + Data: 5 + - Opcode: DW_LNS_negate_stmt + Data: 0 + - Opcode: 0x4A + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 1 + SubOpcode: DW_LNE_end_sequence + Data: 0 + - Opcode: DW_LNS_set_column + Data: 20 + - Opcode: DW_LNS_set_prologue_end + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 9 + SubOpcode: DW_LNE_set_address + Data: 32 + - Opcode: DW_LNS_advance_line + SData: 20 + Data: 0 + - Opcode: DW_LNS_copy + Data: 0 + - Opcode: DW_LNS_set_column + Data: 5 + - Opcode: 0x4B + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 1 + SubOpcode: DW_LNE_end_sequence + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 9 + SubOpcode: DW_LNE_set_address + Data: 40 + - Opcode: DW_LNS_advance_line + SData: 32 + Data: 0 + - Opcode: DW_LNS_copy + Data: 0 + - Opcode: DW_LNS_set_column + Data: 12 + - Opcode: DW_LNS_set_prologue_end + Data: 0 + - Opcode: 0xF4 + Data: 0 + - Opcode: 0xBB + Data: 0 + - Opcode: DW_LNS_set_column + Data: 9 + - Opcode: DW_LNS_negate_stmt + Data: 0 + - Opcode: 0x82 + Data: 0 + - Opcode: DW_LNS_set_column + Data: 12 + - Opcode: DW_LNS_negate_stmt + Data: 0 + - Opcode: 0x4B + Data: 0 + - Opcode: 0xBB + Data: 0 + - Opcode: DW_LNS_set_column + Data: 9 + - Opcode: 0x81 + Data: 0 + - Opcode: DW_LNS_set_column + Data: 18 + - Opcode: 0x4C + Data: 0 + - Opcode: DW_LNS_set_column + Data: 9 + - Opcode: 0xF1 + Data: 0 + - Opcode: DW_LNS_set_column + Data: 5 + - Opcode: DW_LNS_set_epilogue_begin + Data: 0 + - Opcode: 0x4C + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 1 + SubOpcode: DW_LNE_end_sequence + Data: 0 + - Opcode: DW_LNS_set_column + Data: 85 + - Opcode: DW_LNS_set_prologue_end + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 9 + SubOpcode: DW_LNE_set_address + Data: 140 + - Opcode: DW_LNS_advance_line + SData: 29 + Data: 0 + - Opcode: DW_LNS_copy + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 1 + SubOpcode: DW_LNE_end_sequence + Data: 0 + - Opcode: DW_LNS_set_column + Data: 86 + - Opcode: DW_LNS_set_prologue_end + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 9 + SubOpcode: DW_LNE_set_address + Data: 144 + - Opcode: DW_LNS_advance_line + SData: 29 + Data: 0 + - Opcode: DW_LNS_copy + Data: 0 + - Opcode: DW_LNS_advance_pc + Data: 4 + - Opcode: DW_LNS_extended_op + ExtLen: 1 + SubOpcode: DW_LNE_end_sequence + Data: 0 +... From c7461d3bfedf1448ca60b49f2722bae312ca2652 Mon Sep 17 00:00:00 2001 From: Peter Rong Date: Thu, 21 Aug 2025 15:11:38 -0700 Subject: [PATCH 09/12] Not testing --- llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp | 45 +++---------------- .../tools/llvm-dwarfdump/verify_stmt_seq.yaml | 4 +- 2 files changed, 8 insertions(+), 41 deletions(-) diff --git a/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp b/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp index e654f229d0873..55450a92402ed 100644 --- a/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp +++ b/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp @@ -907,47 +907,14 @@ unsigned DWARFVerifier::verifyDebugInfoAttribute(const DWARFDie &Die, break; } - // Check if the offset points to a valid sequence offset - bool ValidSequenceOffset = false; // Check if the offset matches any of the sequence offset offsets using - // binary search - auto It = std::lower_bound(LineTable->Sequences.begin(), - LineTable->Sequences.end(), *SectionOffset, - [](const auto &Sequence, const uint64_t Offset) { - return Sequence.StmtSeqOffset < Offset; - }); - - if (It == LineTable->Sequences.end()) { - ReportError("DW_AT_LLVM_stmt_sequence offset sequence not found", - "There is no line table sequences that contains the offset" + - llvm::formatv("{0:x8}", *SectionOffset)); - break; - } - - ValidSequenceOffset = It->StmtSeqOffset == *SectionOffset; - if (!ValidSequenceOffset) { - // Go over all Rows in this Section (It) and make sure that the - // previous Row of the SectionOffset is EndSequence - for (unsigned RowIdx = It->FirstRowIndex; RowIdx < It->LastRowIndex; - ++RowIdx) { - const auto &CurrentRow = LineTable->Rows[RowIdx]; - - auto IsPrevRowEndSequence = [&](unsigned RowIdx) { - // There is no previous row in the first place. - return RowIdx != 0 && LineTable->Rows[RowIdx - 1].EndSequence; - }; - - // Check if current row's address matches our section offset - // and if the previous row has EndSequence set - if (CurrentRow.Address.Address == *SectionOffset && - IsPrevRowEndSequence(RowIdx)) { - ValidSequenceOffset = true; - break; - } - } - } + auto It = + std::find_if(LineTable->Sequences.begin(), LineTable->Sequences.end(), + [SectionOffset](const auto &Sequence) { + return Sequence.StmtSeqOffset == *SectionOffset; + }); - if (!ValidSequenceOffset) + if (It == LineTable->Sequences.end()) ReportError( "Invalid DW_AT_LLVM_stmt_sequence offset", "DW_AT_LLVM_stmt_sequence offset " + diff --git a/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml b/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml index dea4d904c1d9f..559c087363d91 100644 --- a/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml +++ b/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml @@ -1125,7 +1125,7 @@ DWARF: - Value: 0x18 - Value: 0x8 - Value: 0x1 - - Value: 0x78 + - Value: 0xD3 - Value: 0x1 BlockData: [ 0x6F ] - Value: 0x1 @@ -1155,7 +1155,7 @@ DWARF: - Value: 0x20 - Value: 0x8 - Value: 0x1 - - Value: 0x90 + - Value: 0xE7 - Value: 0x1 BlockData: [ 0x6F ] - Value: 0x1 From 25bbe1a43f2bf974ec9611f9dc825d4ff9795ebd Mon Sep 17 00:00:00 2001 From: Peter Rong Date: Thu, 28 Aug 2025 14:40:48 -0700 Subject: [PATCH 10/12] We should not bend if the line table is wrong --- llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml b/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml index 559c087363d91..ced0dcf9c8277 100644 --- a/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml +++ b/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml @@ -9,6 +9,9 @@ # CHECK_INVALID: error: DW_AT_LLVM_stmt_sequence offset 0x00000000 is not within the line table bounds [0x0000002e, 0x000000fd) # CHECK_INVALID: DW_AT_LLVM_stmt_sequence [DW_FORM_sec_offset] (0x00000000) +# CHECK_INVALID: error: DW_AT_LLVM_stmt_sequence offset 0x000000d3 does not point to a valid sequence offset in the line table +# CHECK_INVALID: DW_AT_LLVM_stmt_sequence [DW_FORM_sec_offset] (0x000000d3) + # CHECK_INVALID: error: DIE has invalid DW_AT_LLVM_stmt_sequence encoding # CHECK_INVALID: DW_AT_LLVM_stmt_sequence [DW_FORM_data4] (0x000000a7) @@ -22,7 +25,7 @@ # CHECK_INVALID-NEXT: error: DW_AT_LLVM_stmt_sequence offset out of bounds occurred 1 time(s). # CHECK_INVALID-NEXT: error: DW_AT_LLVM_stmt_sequence offset out of line table bounds occurred 1 time(s). # CHECK_INVALID-NEXT: error: Invalid DW_AT_LLVM_stmt_sequence encoding occurred 1 time(s). -# CHECK_INVALID-NEXT: error: Invalid DW_AT_LLVM_stmt_sequence offset occurred 1 time(s). +# CHECK_INVALID-NEXT: error: Invalid DW_AT_LLVM_stmt_sequence offset occurred 2 time(s). --- !mach-o IsLittleEndian: true From c463b7ec3c9566db99a1bf1c80f47c4342a314fb Mon Sep 17 00:00:00 2001 From: Peter Rong Date: Thu, 28 Aug 2025 15:06:55 -0700 Subject: [PATCH 11/12] Demostrate where Debug line is wrong --- llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml b/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml index ced0dcf9c8277..224653823b0f9 100644 --- a/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml +++ b/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml @@ -4,14 +4,25 @@ # RUN: yaml2obj %s -o verify_stmt_seq.o # RUN: not llvm-dwarfdump -verify -debug-info verify_stmt_seq.o | FileCheck %s --check-prefix=CHECK_INVALID --implicit-check-not=error: +# RUN: llvm-dwarfdump -debug-line -verbose -debug-info verify_stmt_seq.o | FileCheck %s --check-prefix=CHECK_DEBUG_LINE # CHECK_INVALID: error: DW_AT_LLVM_stmt_sequence offset 0x00000000 is not within the line table bounds [0x0000002e, 0x000000fd) # CHECK_INVALID: DW_AT_LLVM_stmt_sequence [DW_FORM_sec_offset] (0x00000000) +# 0xd3 would be a valid offset, if the line table wan't ill formed with two rows having the same PC (0x8c). # CHECK_INVALID: error: DW_AT_LLVM_stmt_sequence offset 0x000000d3 does not point to a valid sequence offset in the line table # CHECK_INVALID: DW_AT_LLVM_stmt_sequence [DW_FORM_sec_offset] (0x000000d3) +# CHECK_DEBUG_LINE: 0x000000d3: 05 DW_LNS_set_column (85) +# CHECK_DEBUG_LINE-NEXT: 0x000000d5: 0a DW_LNS_set_prologue_end +# CHECK_DEBUG_LINE-NEXT: 0x000000d6: 00 DW_LNE_set_address (0x000000000000008c) +# CHECK_DEBUG_LINE-NEXT: 0x000000e1: 03 DW_LNS_advance_line (30) +# CHECK_DEBUG_LINE-NEXT: 0x000000e3: 01 DW_LNS_copy +# CHECK_DEBUG_LINE-NEXT: 0x000000000000008c 30 85 1 0 0 0 is_stmt prologue_end +# CHECK_DEBUG_LINE-NEXT: 0x000000e4: 00 DW_LNE_end_sequence +# CHECK_DEBUG_LINE-NEXT: 0x000000000000008c 30 85 1 0 0 0 is_stmt end_sequence + # CHECK_INVALID: error: DIE has invalid DW_AT_LLVM_stmt_sequence encoding # CHECK_INVALID: DW_AT_LLVM_stmt_sequence [DW_FORM_data4] (0x000000a7) From 03f6b8bfadd86a6980d0413d9cac9addeb97e59a Mon Sep 17 00:00:00 2001 From: Peter Rong Date: Fri, 29 Aug 2025 12:55:37 -0700 Subject: [PATCH 12/12] 1. Address comment 2. Bug fix on where line table starts --- llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp | 13 ++++++++-- .../tools/llvm-dwarfdump/verify_stmt_seq.yaml | 24 +++++++++++++++---- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp b/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp index 55450a92402ed..5ab80e339a1ad 100644 --- a/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp +++ b/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp @@ -894,7 +894,16 @@ unsigned DWARFVerifier::verifyDebugInfoAttribute(const DWARFDie &Die, uint64_t PrologueLength = LineTable->Prologue.PrologueLength; uint64_t TotalLength = LineTable->Prologue.TotalLength; uint64_t LineTableEnd = LineTableStart + TotalLength + DwarfOffset; - uint64_t SequencesStart = LineTableStart + PrologueLength + DwarfOffset; + + // See DWARF definition for this, the following three do not + // count toward prologue length. Calculate SequencesStart correctly + // according to DWARF specification: + uint64_t InitialLengthSize = DwarfOffset; + // Version field is always 2 bytes + uint64_t VersionSize = 2; + uint64_t PrologueLengthSize = DwarfOffset; + uint64_t SequencesStart = LineTableStart + InitialLengthSize + VersionSize + + PrologueLengthSize + PrologueLength; // Check if the offset is within the bounds of this specific line table if (*SectionOffset < SequencesStart || *SectionOffset >= LineTableEnd) { @@ -907,7 +916,7 @@ unsigned DWARFVerifier::verifyDebugInfoAttribute(const DWARFDie &Die, break; } - // Check if the offset matches any of the sequence offset offsets using + // Check if the offset matches any of the sequence offset. auto It = std::find_if(LineTable->Sequences.begin(), LineTable->Sequences.end(), [SectionOffset](const auto &Sequence) { diff --git a/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml b/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml index 224653823b0f9..5312c2573902d 100644 --- a/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml +++ b/llvm/test/tools/llvm-dwarfdump/verify_stmt_seq.yaml @@ -6,11 +6,24 @@ # RUN: not llvm-dwarfdump -verify -debug-info verify_stmt_seq.o | FileCheck %s --check-prefix=CHECK_INVALID --implicit-check-not=error: # RUN: llvm-dwarfdump -debug-line -verbose -debug-info verify_stmt_seq.o | FileCheck %s --check-prefix=CHECK_DEBUG_LINE - -# CHECK_INVALID: error: DW_AT_LLVM_stmt_sequence offset 0x00000000 is not within the line table bounds [0x0000002e, 0x000000fd) +# CHECK_INVALID: error: DW_AT_LLVM_stmt_sequence offset 0x00000000 is not within the line table bounds [0x00000034, 0x000000fd) # CHECK_INVALID: DW_AT_LLVM_stmt_sequence [DW_FORM_sec_offset] (0x00000000) -# 0xd3 would be a valid offset, if the line table wan't ill formed with two rows having the same PC (0x8c). +# CHECK_DEBUG_LINE: Address Line Column File ISA Discriminator OpIndex Flags +# CHECK_DEBUG_LINE-NEXT: ------------------ ------ ------ ------ --- ------------- ------- ------------- +# CHECK_DEBUG_LINE-NEXT: 0x00000034: 05 DW_LNS_set_column (10) +# CHECK_DEBUG_LINE-NEXT: 0x00000036: 0a DW_LNS_set_prologue_end +# CHECK_DEBUG_LINE-NEXT: 0x00000037: 00 DW_LNE_set_address (0x0000000000000000) +# CHECK_DEBUG_LINE-NEXT: 0x00000042: 14 address += 0, line += 2, op-index += 0 +# CHECK_DEBUG_LINE-NEXT: 0x0000000000000000 3 10 1 0 0 0 is_stmt prologue_end +# CHECK_DEBUG_LINE-NEXT: 0x00000043: 05 DW_LNS_set_column (3) +# CHECK_DEBUG_LINE-NEXT: 0x00000045: 06 DW_LNS_negate_stmt +# CHECK_DEBUG_LINE-NEXT: 0x00000046: 4a address += 4, line += 0, op-index += 0 +# CHECK_DEBUG_LINE-NEXT: 0x0000000000000004 3 3 1 0 0 0 +# CHECK_DEBUG_LINE-NEXT: 0x00000047: 00 DW_LNE_end_sequence +# CHECK_DEBUG_LINE-NEXT: 0x0000000000000004 3 3 1 0 0 0 end_sequence + +# 0xd3 would be a valid offset, if the line table wasn't ill formed with two rows having the same PC (0x8c). # CHECK_INVALID: error: DW_AT_LLVM_stmt_sequence offset 0x000000d3 does not point to a valid sequence offset in the line table # CHECK_INVALID: DW_AT_LLVM_stmt_sequence [DW_FORM_sec_offset] (0x000000d3) @@ -25,13 +38,16 @@ # CHECK_INVALID: error: DIE has invalid DW_AT_LLVM_stmt_sequence encoding # CHECK_INVALID: DW_AT_LLVM_stmt_sequence [DW_FORM_data4] (0x000000a7) - # CHECK_INVALID: error: DW_AT_LLVM_stmt_sequence offset 0x000000ab does not point to a valid sequence offset in the line table # CHECK_INVALID: DW_AT_LLVM_stmt_sequence [DW_FORM_sec_offset] (0x000000ab) # CHECK_INVALID: error: DW_AT_LLVM_stmt_sequence offset is beyond .debug_line bounds: 0x00eeeee7 # CHECK_INVALID: DW_AT_LLVM_stmt_sequence [DW_FORM_sec_offset] (0x00eeeee7) +# CHECK_DEBUG_LINE: 0x000000f8: 02 DW_LNS_advance_pc (addr += 4, op-index += 0) +# CHECK_DEBUG_LINE-NEXT: 0x000000fa: 00 DW_LNE_end_sequence +# CHECK_DEBUG_LINE-NEXT: 0x0000000000000094 30 86 1 0 0 0 is_stmt end_sequence + # CHECK_INVALID: error: Aggregated error counts: # CHECK_INVALID-NEXT: error: DW_AT_LLVM_stmt_sequence offset out of bounds occurred 1 time(s). # CHECK_INVALID-NEXT: error: DW_AT_LLVM_stmt_sequence offset out of line table bounds occurred 1 time(s).