Author: David Blaikie Date: 2025-09-12T11:22:56-07:00 New Revision: 1ff8b74c4d592f3c235460fda236e636b2f2590f
URL: https://github.com/llvm/llvm-project/commit/1ff8b74c4d592f3c235460fda236e636b2f2590f DIFF: https://github.com/llvm/llvm-project/commit/1ff8b74c4d592f3c235460fda236e636b2f2590f.diff LOG: Revert "[DebugLine] Correct debug line emittion (#157529)" This reverts commit 84f431c35b3fbd5b9c46608689f25a5d29bc0f55. Added: Modified: llvm/lib/MC/MCDwarf.cpp llvm/test/DebugInfo/X86/DW_AT_LLVM_stmt_seq_sec_offset.ll llvm/test/MC/ELF/debug-loc-label.s Removed: llvm/test/DebugInfo/ARM/stmt_seq_macho.test ################################################################################ diff --git a/llvm/lib/MC/MCDwarf.cpp b/llvm/lib/MC/MCDwarf.cpp index e8f000a584839..e7c0d37e8f99b 100644 --- a/llvm/lib/MC/MCDwarf.cpp +++ b/llvm/lib/MC/MCDwarf.cpp @@ -181,7 +181,7 @@ void MCDwarfLineTable::emitOne( unsigned FileNum, LastLine, Column, Flags, Isa, Discriminator; bool IsAtStartSeq; - MCSymbol *PrevLabel; + MCSymbol *LastLabel; auto init = [&]() { FileNum = 1; LastLine = 1; @@ -189,31 +189,21 @@ void MCDwarfLineTable::emitOne( Flags = DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0; Isa = 0; Discriminator = 0; - PrevLabel = nullptr; + LastLabel = nullptr; IsAtStartSeq = true; }; init(); // Loop through each MCDwarfLineEntry and encode the dwarf line number table. bool EndEntryEmitted = false; - for (auto It = LineEntries.begin(); It != LineEntries.end(); ++It) { - auto LineEntry = *It; - MCSymbol *CurrLabel = LineEntry.getLabel(); + for (const MCDwarfLineEntry &LineEntry : LineEntries) { + MCSymbol *Label = LineEntry.getLabel(); const MCAsmInfo *asmInfo = MCOS->getContext().getAsmInfo(); if (LineEntry.LineStreamLabel) { if (!IsAtStartSeq) { - auto *Label = CurrLabel; - auto NextIt = It + 1; - // LineEntry with a null Label is probably a fake LineEntry we added - // when `-emit-func-debug-line-table-offsets` in order to terminate the - // sequence. Look for the next Label if possible, otherwise we will set - // the PC to the end of the section. - if (!Label && NextIt != LineEntries.end()) { - Label = NextIt->getLabel(); - } - MCOS->emitDwarfLineEndEntry(Section, PrevLabel, - /*EndLabel =*/Label); + MCOS->emitDwarfLineEndEntry(Section, LastLabel, + /*EndLabel =*/LastLabel); init(); } MCOS->emitLabel(LineEntry.LineStreamLabel, LineEntry.StreamLabelDefLoc); @@ -221,7 +211,7 @@ void MCDwarfLineTable::emitOne( } if (LineEntry.IsEndEntry) { - MCOS->emitDwarfAdvanceLineAddr(INT64_MAX, PrevLabel, CurrLabel, + MCOS->emitDwarfAdvanceLineAddr(INT64_MAX, LastLabel, Label, asmInfo->getCodePointerSize()); init(); EndEntryEmitted = true; @@ -268,12 +258,12 @@ void MCDwarfLineTable::emitOne( // At this point we want to emit/create the sequence to encode the delta in // line numbers and the increment of the address from the previous Label // and the current Label. - MCOS->emitDwarfAdvanceLineAddr(LineDelta, PrevLabel, CurrLabel, + MCOS->emitDwarfAdvanceLineAddr(LineDelta, LastLabel, Label, asmInfo->getCodePointerSize()); Discriminator = 0; LastLine = LineEntry.getLine(); - PrevLabel = CurrLabel; + LastLabel = Label; IsAtStartSeq = false; } @@ -283,7 +273,7 @@ void MCDwarfLineTable::emitOne( // does not track ranges nor terminate the line table. In that case, // conservatively use the section end symbol to end the line table. if (!EndEntryEmitted && !IsAtStartSeq) - MCOS->emitDwarfLineEndEntry(Section, PrevLabel); + MCOS->emitDwarfLineEndEntry(Section, LastLabel); } void MCDwarfLineTable::endCurrentSeqAndEmitLineStreamLabel(MCStreamer *MCOS, diff --git a/llvm/test/DebugInfo/ARM/stmt_seq_macho.test b/llvm/test/DebugInfo/ARM/stmt_seq_macho.test deleted file mode 100644 index f0874bfc45ed2..0000000000000 --- a/llvm/test/DebugInfo/ARM/stmt_seq_macho.test +++ /dev/null @@ -1,98 +0,0 @@ -// RUN: split-file %s %t - -// RUN: clang++ --target=arm64-apple-macos11 \ -// RUN: %t/stmt_seq_macho.cpp -o %t/stmt_seq_macho.o \ -// RUN: -g -Oz -gdwarf-4 -c -mno-outline \ -// RUN: -mllvm -emit-func-debug-line-table-offsets \ -// RUN: -fdebug-compilation-dir=/private/tmp/stmt_seq \ -// RUN: -fno-unwind-tables -fno-exceptions - -// RUN: llvm-dwarfdump -all %t/stmt_seq_macho.o | FileCheck %s - -// CHECK: Address Line Column File ISA Discriminator OpIndex Flags -// CHECK-NEXT: ------------------ ------ ------ ------ --- ------------- ------- ------------- -// CHECK-NEXT: 0x0000000000000000 2 33 1 0 0 0 is_stmt prologue_end -// CHECK-NEXT: 0x0000000000000004 2 33 1 0 0 0 is_stmt end_sequence -// CHECK-NEXT: 0x0000000000000004 3 33 1 0 0 0 is_stmt prologue_end -// CHECK-NEXT: 0x0000000000000008 3 33 1 0 0 0 is_stmt end_sequence -// CHECK-NEXT: 0x0000000000000008 4 33 1 0 0 0 is_stmt prologue_end -// CHECK-NEXT: 0x000000000000000c 4 33 1 0 0 0 is_stmt end_sequence -// CHECK-NEXT: 0x000000000000000c 7 10 1 0 0 0 is_stmt prologue_end -// CHECK-NEXT: 0x0000000000000010 7 3 1 0 0 0 -// CHECK-NEXT: 0x0000000000000014 7 3 1 0 0 0 end_sequence -// CHECK-NEXT: 0x0000000000000014 12 14 1 0 0 0 is_stmt prologue_end -// CHECK-NEXT: 0x0000000000000018 12 5 1 0 0 0 -// CHECK-NEXT: 0x000000000000001c 12 5 1 0 0 0 end_sequence -// CHECK-NEXT: 0x000000000000001c 16 14 1 0 0 0 is_stmt prologue_end -// CHECK-NEXT: 0x0000000000000020 16 5 1 0 0 0 -// CHECK-NEXT: 0x0000000000000024 16 5 1 0 0 0 end_sequence -// CHECK-NEXT: 0x0000000000000024 21 14 1 0 0 0 is_stmt prologue_end -// CHECK-NEXT: 0x0000000000000028 21 5 1 0 0 0 -// CHECK-NEXT: 0x000000000000002c 21 5 1 0 0 0 end_sequence -// CHECK-NEXT: 0x000000000000002c 25 20 1 0 0 0 is_stmt prologue_end -// CHECK-NEXT: 0x0000000000000030 26 5 1 0 0 0 is_stmt -// CHECK-NEXT: 0x0000000000000034 26 5 1 0 0 0 is_stmt end_sequence -// CHECK-NEXT: 0x0000000000000034 37 0 1 0 0 0 is_stmt -// CHECK-NEXT: 0x0000000000000044 39 12 1 0 0 0 is_stmt prologue_end -// CHECK-NEXT: 0x0000000000000050 40 12 1 0 0 0 is_stmt -// CHECK-NEXT: 0x0000000000000058 40 9 1 0 0 0 is_stmt -// CHECK-NEXT: 0x000000000000005c 41 12 1 0 0 0 is_stmt -// CHECK-NEXT: 0x0000000000000068 42 12 1 0 0 0 is_stmt -// CHECK-NEXT: 0x0000000000000070 41 9 1 0 0 0 is_stmt -// CHECK-NEXT: 0x0000000000000074 46 18 1 0 0 0 is_stmt -// CHECK-NEXT: 0x0000000000000084 42 9 1 0 0 0 is_stmt -// CHECK-NEXT: 0x0000000000000088 47 5 1 0 0 0 is_stmt epilogue_begin -// CHECK-NEXT: 0x0000000000000098 47 5 1 0 0 0 is_stmt end_sequence -// CHECK-NEXT: 0x0000000000000098 34 85 1 0 0 0 is_stmt prologue_end -// CHECK-NEXT: 0x000000000000009c 34 85 1 0 0 0 is_stmt end_sequence -// CHECK-NEXT: 0x000000000000009c 34 86 1 0 0 0 is_stmt prologue_end - -#--- stmt_seq_macho.cpp -#define ATTRIB extern "C" __attribute__((noinline)) -ATTRIB void function_empty_1() {} -ATTRIB void function_empty_2() {} -ATTRIB void function_empty_3() {} - -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); - function_empty_1(); - function_empty_2(); - function_empty_3(); - length_error e("test"); - return sum; -} 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 f17c6e5429b6b..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 @@ -14,7 +14,7 @@ ; STMT_SEQ: DW_AT_LLVM_stmt_sequence [DW_FORM_sec_offset] (0x00000043) ; STMT_SEQ: DW_AT_name {{.*}}func01 ; STMT_SEQ: DW_TAG_subprogram [[[ABBREV_CODE2]]] -; STMT_SEQ: DW_AT_LLVM_stmt_sequence [DW_FORM_sec_offset] (0x00000058) +; STMT_SEQ: DW_AT_LLVM_stmt_sequence [DW_FORM_sec_offset] (0x00000056) ; STMT_SEQ: DW_AT_name {{.*}}main ;; Check the entire line sequence to see that it's correct @@ -29,23 +29,22 @@ ; STMT_SEQ-NEXT: 0x00000050: 05 DW_LNS_set_column (3) ; STMT_SEQ-NEXT: 0x00000052: 67 address += 6, line += 1, op-index += 0 ; STMT_SEQ-NEXT: 0x0000000000000006 6 3 0 0 0 0 is_stmt -; STMT_SEQ-NEXT: 0x00000053: 02 DW_LNS_advance_pc (addr += 2, op-index += 0) -; STMT_SEQ-NEXT: 0x00000055: 00 DW_LNE_end_sequence -; STMT_SEQ-NEXT: 0x0000000000000008 6 3 0 0 0 0 is_stmt end_sequence -; STMT_SEQ-NEXT: 0x00000058: 04 DW_LNS_set_file (0) -; STMT_SEQ-NEXT: 0x0000005a: 00 DW_LNE_set_address (0x00000008) -; STMT_SEQ-NEXT: 0x00000061: 03 DW_LNS_advance_line (10) -; STMT_SEQ-NEXT: 0x00000063: 01 DW_LNS_copy +; STMT_SEQ-NEXT: 0x00000053: 00 DW_LNE_end_sequence +; STMT_SEQ-NEXT: 0x0000000000000006 6 3 0 0 0 0 is_stmt end_sequence +; STMT_SEQ-NEXT: 0x00000056: 04 DW_LNS_set_file (0) +; STMT_SEQ-NEXT: 0x00000058: 00 DW_LNE_set_address (0x00000008) +; STMT_SEQ-NEXT: 0x0000005f: 03 DW_LNS_advance_line (10) +; STMT_SEQ-NEXT: 0x00000061: 01 DW_LNS_copy ; STMT_SEQ-NEXT: 0x0000000000000008 10 0 0 0 0 0 is_stmt -; STMT_SEQ-NEXT: 0x00000064: 05 DW_LNS_set_column (10) -; STMT_SEQ-NEXT: 0x00000066: 0a DW_LNS_set_prologue_end -; STMT_SEQ-NEXT: 0x00000067: 83 address += 8, line += 1, op-index += 0 +; STMT_SEQ-NEXT: 0x00000062: 05 DW_LNS_set_column (10) +; STMT_SEQ-NEXT: 0x00000064: 0a DW_LNS_set_prologue_end +; STMT_SEQ-NEXT: 0x00000065: 83 address += 8, line += 1, op-index += 0 ; STMT_SEQ-NEXT: 0x0000000000000010 11 10 0 0 0 0 is_stmt prologue_end -; STMT_SEQ-NEXT: 0x00000068: 05 DW_LNS_set_column (3) -; STMT_SEQ-NEXT: 0x0000006a: 9f address += 10, line += 1, op-index += 0 +; STMT_SEQ-NEXT: 0x00000066: 05 DW_LNS_set_column (3) +; STMT_SEQ-NEXT: 0x00000068: 9f address += 10, line += 1, op-index += 0 ; STMT_SEQ-NEXT: 0x000000000000001a 12 3 0 0 0 0 is_stmt -; STMT_SEQ-NEXT: 0x0000006b: 02 DW_LNS_advance_pc (addr += 5, op-index += 0) -; STMT_SEQ-NEXT: 0x0000006d: 00 DW_LNE_end_sequence +; STMT_SEQ-NEXT: 0x00000069: 02 DW_LNS_advance_pc (addr += 5, op-index += 0) +; STMT_SEQ-NEXT: 0x0000006b: 00 DW_LNE_end_sequence ; STMT_SEQ-NEXT: 0x000000000000001f 12 3 0 0 0 0 is_stmt end_sequence ; generated from: diff --git a/llvm/test/MC/ELF/debug-loc-label.s b/llvm/test/MC/ELF/debug-loc-label.s index 4200b1192107b..6b5d04777bef4 100644 --- a/llvm/test/MC/ELF/debug-loc-label.s +++ b/llvm/test/MC/ELF/debug-loc-label.s @@ -17,47 +17,43 @@ # CHECK-LINE-TABLE-NEXT: 0x0000002a: 00 DW_LNE_set_address (0x0000000000000000) # CHECK-LINE-TABLE-NEXT: 0x00000035: 01 DW_LNS_copy # CHECK-LINE-TABLE-NEXT: 0x0000000000000000 1 1 1 0 0 0 is_stmt -# CHECK-LINE-TABLE-NEXT: 0x00000036: 02 DW_LNS_advance_pc (addr += 8, op-index += 0) -# CHECK-LINE-TABLE-NEXT: 0x00000038: 00 DW_LNE_end_sequence -# CHECK-LINE-TABLE-NEXT: 0x0000000000000008 1 1 1 0 0 0 is_stmt end_sequence -# CHECK-LINE-TABLE-NEXT: 0x0000003b: 05 DW_LNS_set_column (2) -# CHECK-LINE-TABLE-NEXT: 0x0000003d: 00 DW_LNE_set_address (0x0000000000000008) -# CHECK-LINE-TABLE-NEXT: 0x00000048: 01 DW_LNS_copy +# CHECK-LINE-TABLE-NEXT: 0x00000036: 00 DW_LNE_end_sequence +# CHECK-LINE-TABLE-NEXT: 0x0000000000000000 1 1 1 0 0 0 is_stmt end_sequence +# CHECK-LINE-TABLE-NEXT: 0x00000039: 05 DW_LNS_set_column (2) +# CHECK-LINE-TABLE-NEXT: 0x0000003b: 00 DW_LNE_set_address (0x0000000000000008) +# CHECK-LINE-TABLE-NEXT: 0x00000046: 01 DW_LNS_copy # CHECK-LINE-TABLE-NEXT: 0x0000000000000008 1 2 1 0 0 0 is_stmt -# CHECK-LINE-TABLE-NEXT: 0x00000049: 02 DW_LNS_advance_pc (addr += 8, op-index += 0) -# CHECK-LINE-TABLE-NEXT: 0x0000004b: 00 DW_LNE_end_sequence -# CHECK-LINE-TABLE-NEXT: 0x0000000000000010 1 2 1 0 0 0 is_stmt end_sequence -# CHECK-LINE-TABLE-NEXT: 0x0000004e: 05 DW_LNS_set_column (3) -# CHECK-LINE-TABLE-NEXT: 0x00000050: 00 DW_LNE_set_address (0x0000000000000010) -# CHECK-LINE-TABLE-NEXT: 0x0000005b: 01 DW_LNS_copy +# CHECK-LINE-TABLE-NEXT: 0x00000047: 00 DW_LNE_end_sequence +# CHECK-LINE-TABLE-NEXT: 0x0000000000000008 1 2 1 0 0 0 is_stmt end_sequence +# CHECK-LINE-TABLE-NEXT: 0x0000004a: 05 DW_LNS_set_column (3) +# CHECK-LINE-TABLE-NEXT: 0x0000004c: 00 DW_LNE_set_address (0x0000000000000010) +# CHECK-LINE-TABLE-NEXT: 0x00000057: 01 DW_LNS_copy # CHECK-LINE-TABLE-NEXT: 0x0000000000000010 1 3 1 0 0 0 is_stmt -# CHECK-LINE-TABLE-NEXT: 0x0000005c: 02 DW_LNS_advance_pc (addr += 8, op-index += 0) -# CHECK-LINE-TABLE-NEXT: 0x0000005e: 00 DW_LNE_end_sequence -# CHECK-LINE-TABLE-NEXT: 0x0000000000000018 1 3 1 0 0 0 is_stmt end_sequence -# CHECK-LINE-TABLE-NEXT: 0x00000061: 05 DW_LNS_set_column (4) -# CHECK-LINE-TABLE-NEXT: 0x00000063: 00 DW_LNE_set_address (0x0000000000000018) -# CHECK-LINE-TABLE-NEXT: 0x0000006e: 01 DW_LNS_copy +# CHECK-LINE-TABLE-NEXT: 0x00000058: 00 DW_LNE_end_sequence +# CHECK-LINE-TABLE-NEXT: 0x0000000000000010 1 3 1 0 0 0 is_stmt end_sequence +# CHECK-LINE-TABLE-NEXT: 0x0000005b: 05 DW_LNS_set_column (4) +# CHECK-LINE-TABLE-NEXT: 0x0000005d: 00 DW_LNE_set_address (0x0000000000000018) +# CHECK-LINE-TABLE-NEXT: 0x00000068: 01 DW_LNS_copy # CHECK-LINE-TABLE-NEXT: 0x0000000000000018 1 4 1 0 0 0 is_stmt -# CHECK-LINE-TABLE-NEXT: 0x0000006f: 05 DW_LNS_set_column (5) -# CHECK-LINE-TABLE-NEXT: 0x00000071: 01 DW_LNS_copy +# CHECK-LINE-TABLE-NEXT: 0x00000069: 05 DW_LNS_set_column (5) +# CHECK-LINE-TABLE-NEXT: 0x0000006b: 01 DW_LNS_copy # CHECK-LINE-TABLE-NEXT: 0x0000000000000018 1 5 1 0 0 0 is_stmt -# CHECK-LINE-TABLE-NEXT: 0x00000072: 02 DW_LNS_advance_pc (addr += 8, op-index += 0) -# CHECK-LINE-TABLE-NEXT: 0x00000074: 00 DW_LNE_end_sequence -# CHECK-LINE-TABLE-NEXT: 0x0000000000000020 1 5 1 0 0 0 is_stmt end_sequence +# CHECK-LINE-TABLE-NEXT: 0x0000006c: 00 DW_LNE_end_sequence +# CHECK-LINE-TABLE-NEXT: 0x0000000000000018 1 5 1 0 0 0 is_stmt end_sequence # CHECK-SYM: Symbol table '.symtab' contains 9 entries: # CHECK-SYM-NEXT: Num: Value Size Type Bind Vis Ndx Name # CHECK-SYM-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND # CHECK-SYM-NEXT: 1: 0000000000000000 0 FILE LOCAL DEFAULT ABS test.c # CHECK-SYM-NEXT: 2: 0000000000000000 0 SECTION LOCAL DEFAULT 2 .text -# CHECK-SYM-NEXT: 3: 000000000000003b 0 NOTYPE LOCAL DEFAULT 3 my_label_02 -# CHECK-SYM-NEXT: 4: 000000000000004e 0 NOTYPE LOCAL DEFAULT 3 my_label_03 -# CHECK-SYM-NEXT: 5: 0000000000000061 0 NOTYPE LOCAL DEFAULT 3 my_label_04 -# CHECK-SYM-NEXT: 6: 000000000000004e 0 NOTYPE LOCAL DEFAULT 3 my_label_03.1 -# CHECK-SYM-NEXT: 7: 0000000000000077 0 NOTYPE LOCAL DEFAULT 3 my_label_05 +# CHECK-SYM-NEXT: 3: 0000000000000039 0 NOTYPE LOCAL DEFAULT 3 my_label_02 +# CHECK-SYM-NEXT: 4: 000000000000004a 0 NOTYPE LOCAL DEFAULT 3 my_label_03 +# CHECK-SYM-NEXT: 5: 000000000000005b 0 NOTYPE LOCAL DEFAULT 3 my_label_04 +# CHECK-SYM-NEXT: 6: 000000000000004a 0 NOTYPE LOCAL DEFAULT 3 my_label_03.1 +# CHECK-SYM-NEXT: 7: 000000000000006f 0 NOTYPE LOCAL DEFAULT 3 my_label_05 # CHECK-SYM-NEXT: 8: 0000000000000000 0 FUNC GLOBAL DEFAULT 2 foo -# CHECK-OFFSETS: 0000 3b000000 4e000000 61000000 +# CHECK-OFFSETS: 0000 39000000 4a000000 5b000000 .text .file "test.c" _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits