Skip to content

Commit 84f431c

Browse files
[DebugLine] Correct debug line emittion (#157529)
### Context #99710 introduced `.loc_label` so we can terminate a line sequence. However, it did not advance PC properly. This is problematic for 1-instruction functions as it will have zero-length sequence. The test checked in that PR shows the problem: ``` # CHECK-LINE-TABLE: Address Line Column File ISA Discriminator OpIndex Flags # CHECK-LINE-TABLE-NEXT: ------------------ ------ ------ ------ --- ------------- ------- ------------- # CHECK-LINE-TABLE-NEXT: 0x00000028: 05 DW_LNS_set_column (1) # 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: 00 DW_LNE_end_sequence # CHECK-LINE-TABLE-NEXT: 0x0000000000000000 1 1 1 0 0 0 is_stmt end_sequence ``` Both rows having PC 0x0 is incorrect, and parsers won't be able to parse them. See more explanation why this is wrong in #154851. ### Design This PR attempts to fix this by advancing the PC to the next available Label, and advance to the end of the section if no Label is available. ### Implementation - `emitDwarfLineEndEntry` will advance PC to the `CurrLabel` - If `CurrLabel` is null, its probably a fake LineEntry we introduced in #110192. In that case look for the next Label - If still not label can be found, use `null` and `emitDwarfLineEndEntry` is smart enough to advance PC to the end of the section - Rename `LastLabel` to `PrevLabel`, "last" can mean "previous" or "final", this is ambigous. - Updated the tests to emit a correct label. ### Note This fix should render #154986 and #154851 obsolete, they were temporary fixes and don't resolve the root cause. --------- Signed-off-by: Peter Rong <[email protected]>
1 parent e5db36b commit 84f431c

File tree

4 files changed

+162
-49
lines changed

4 files changed

+162
-49
lines changed

llvm/lib/MC/MCDwarf.cpp

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -181,37 +181,47 @@ void MCDwarfLineTable::emitOne(
181181

182182
unsigned FileNum, LastLine, Column, Flags, Isa, Discriminator;
183183
bool IsAtStartSeq;
184-
MCSymbol *LastLabel;
184+
MCSymbol *PrevLabel;
185185
auto init = [&]() {
186186
FileNum = 1;
187187
LastLine = 1;
188188
Column = 0;
189189
Flags = DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0;
190190
Isa = 0;
191191
Discriminator = 0;
192-
LastLabel = nullptr;
192+
PrevLabel = nullptr;
193193
IsAtStartSeq = true;
194194
};
195195
init();
196196

197197
// Loop through each MCDwarfLineEntry and encode the dwarf line number table.
198198
bool EndEntryEmitted = false;
199-
for (const MCDwarfLineEntry &LineEntry : LineEntries) {
200-
MCSymbol *Label = LineEntry.getLabel();
199+
for (auto It = LineEntries.begin(); It != LineEntries.end(); ++It) {
200+
auto LineEntry = *It;
201+
MCSymbol *CurrLabel = LineEntry.getLabel();
201202
const MCAsmInfo *asmInfo = MCOS->getContext().getAsmInfo();
202203

203204
if (LineEntry.LineStreamLabel) {
204205
if (!IsAtStartSeq) {
205-
MCOS->emitDwarfLineEndEntry(Section, LastLabel,
206-
/*EndLabel =*/LastLabel);
206+
auto *Label = CurrLabel;
207+
auto NextIt = It + 1;
208+
// LineEntry with a null Label is probably a fake LineEntry we added
209+
// when `-emit-func-debug-line-table-offsets` in order to terminate the
210+
// sequence. Look for the next Label if possible, otherwise we will set
211+
// the PC to the end of the section.
212+
if (!Label && NextIt != LineEntries.end()) {
213+
Label = NextIt->getLabel();
214+
}
215+
MCOS->emitDwarfLineEndEntry(Section, PrevLabel,
216+
/*EndLabel =*/Label);
207217
init();
208218
}
209219
MCOS->emitLabel(LineEntry.LineStreamLabel, LineEntry.StreamLabelDefLoc);
210220
continue;
211221
}
212222

213223
if (LineEntry.IsEndEntry) {
214-
MCOS->emitDwarfAdvanceLineAddr(INT64_MAX, LastLabel, Label,
224+
MCOS->emitDwarfAdvanceLineAddr(INT64_MAX, PrevLabel, CurrLabel,
215225
asmInfo->getCodePointerSize());
216226
init();
217227
EndEntryEmitted = true;
@@ -258,12 +268,12 @@ void MCDwarfLineTable::emitOne(
258268
// At this point we want to emit/create the sequence to encode the delta in
259269
// line numbers and the increment of the address from the previous Label
260270
// and the current Label.
261-
MCOS->emitDwarfAdvanceLineAddr(LineDelta, LastLabel, Label,
271+
MCOS->emitDwarfAdvanceLineAddr(LineDelta, PrevLabel, CurrLabel,
262272
asmInfo->getCodePointerSize());
263273

264274
Discriminator = 0;
265275
LastLine = LineEntry.getLine();
266-
LastLabel = Label;
276+
PrevLabel = CurrLabel;
267277
IsAtStartSeq = false;
268278
}
269279

@@ -273,7 +283,7 @@ void MCDwarfLineTable::emitOne(
273283
// does not track ranges nor terminate the line table. In that case,
274284
// conservatively use the section end symbol to end the line table.
275285
if (!EndEntryEmitted && !IsAtStartSeq)
276-
MCOS->emitDwarfLineEndEntry(Section, LastLabel);
286+
MCOS->emitDwarfLineEndEntry(Section, PrevLabel);
277287
}
278288

279289
void MCDwarfLineTable::endCurrentSeqAndEmitLineStreamLabel(MCStreamer *MCOS,
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
// RUN: split-file %s %t
2+
3+
// RUN: clang++ --target=arm64-apple-macos11 \
4+
// RUN: %t/stmt_seq_macho.cpp -o %t/stmt_seq_macho.o \
5+
// RUN: -g -Oz -gdwarf-4 -c -mno-outline \
6+
// RUN: -mllvm -emit-func-debug-line-table-offsets \
7+
// RUN: -fdebug-compilation-dir=/private/tmp/stmt_seq \
8+
// RUN: -fno-unwind-tables -fno-exceptions
9+
10+
// RUN: llvm-dwarfdump -all %t/stmt_seq_macho.o | FileCheck %s
11+
12+
// CHECK: Address Line Column File ISA Discriminator OpIndex Flags
13+
// CHECK-NEXT: ------------------ ------ ------ ------ --- ------------- ------- -------------
14+
// CHECK-NEXT: 0x0000000000000000 2 33 1 0 0 0 is_stmt prologue_end
15+
// CHECK-NEXT: 0x0000000000000004 2 33 1 0 0 0 is_stmt end_sequence
16+
// CHECK-NEXT: 0x0000000000000004 3 33 1 0 0 0 is_stmt prologue_end
17+
// CHECK-NEXT: 0x0000000000000008 3 33 1 0 0 0 is_stmt end_sequence
18+
// CHECK-NEXT: 0x0000000000000008 4 33 1 0 0 0 is_stmt prologue_end
19+
// CHECK-NEXT: 0x000000000000000c 4 33 1 0 0 0 is_stmt end_sequence
20+
// CHECK-NEXT: 0x000000000000000c 7 10 1 0 0 0 is_stmt prologue_end
21+
// CHECK-NEXT: 0x0000000000000010 7 3 1 0 0 0
22+
// CHECK-NEXT: 0x0000000000000014 7 3 1 0 0 0 end_sequence
23+
// CHECK-NEXT: 0x0000000000000014 12 14 1 0 0 0 is_stmt prologue_end
24+
// CHECK-NEXT: 0x0000000000000018 12 5 1 0 0 0
25+
// CHECK-NEXT: 0x000000000000001c 12 5 1 0 0 0 end_sequence
26+
// CHECK-NEXT: 0x000000000000001c 16 14 1 0 0 0 is_stmt prologue_end
27+
// CHECK-NEXT: 0x0000000000000020 16 5 1 0 0 0
28+
// CHECK-NEXT: 0x0000000000000024 16 5 1 0 0 0 end_sequence
29+
// CHECK-NEXT: 0x0000000000000024 21 14 1 0 0 0 is_stmt prologue_end
30+
// CHECK-NEXT: 0x0000000000000028 21 5 1 0 0 0
31+
// CHECK-NEXT: 0x000000000000002c 21 5 1 0 0 0 end_sequence
32+
// CHECK-NEXT: 0x000000000000002c 25 20 1 0 0 0 is_stmt prologue_end
33+
// CHECK-NEXT: 0x0000000000000030 26 5 1 0 0 0 is_stmt
34+
// CHECK-NEXT: 0x0000000000000034 26 5 1 0 0 0 is_stmt end_sequence
35+
// CHECK-NEXT: 0x0000000000000034 37 0 1 0 0 0 is_stmt
36+
// CHECK-NEXT: 0x0000000000000044 39 12 1 0 0 0 is_stmt prologue_end
37+
// CHECK-NEXT: 0x0000000000000050 40 12 1 0 0 0 is_stmt
38+
// CHECK-NEXT: 0x0000000000000058 40 9 1 0 0 0 is_stmt
39+
// CHECK-NEXT: 0x000000000000005c 41 12 1 0 0 0 is_stmt
40+
// CHECK-NEXT: 0x0000000000000068 42 12 1 0 0 0 is_stmt
41+
// CHECK-NEXT: 0x0000000000000070 41 9 1 0 0 0 is_stmt
42+
// CHECK-NEXT: 0x0000000000000074 46 18 1 0 0 0 is_stmt
43+
// CHECK-NEXT: 0x0000000000000084 42 9 1 0 0 0 is_stmt
44+
// CHECK-NEXT: 0x0000000000000088 47 5 1 0 0 0 is_stmt epilogue_begin
45+
// CHECK-NEXT: 0x0000000000000098 47 5 1 0 0 0 is_stmt end_sequence
46+
// CHECK-NEXT: 0x0000000000000098 34 85 1 0 0 0 is_stmt prologue_end
47+
// CHECK-NEXT: 0x000000000000009c 34 85 1 0 0 0 is_stmt end_sequence
48+
// CHECK-NEXT: 0x000000000000009c 34 86 1 0 0 0 is_stmt prologue_end
49+
50+
#--- stmt_seq_macho.cpp
51+
#define ATTRIB extern "C" __attribute__((noinline))
52+
ATTRIB void function_empty_1() {}
53+
ATTRIB void function_empty_2() {}
54+
ATTRIB void function_empty_3() {}
55+
56+
ATTRIB int function1_copy1(int a) {
57+
return ++a;
58+
}
59+
60+
ATTRIB int function3_copy1(int a) {
61+
int b = a + 3;
62+
return b + 1;
63+
}
64+
65+
ATTRIB int function2_copy1(int a) {
66+
return a - 22;
67+
}
68+
69+
ATTRIB int function3_copy2(int a) {
70+
int b = a + 3;
71+
return b + 1;
72+
}
73+
74+
ATTRIB int function2_copy2(int a) {
75+
int result = a - 22;
76+
return result;
77+
}
78+
79+
struct logic_error {
80+
logic_error(const char* s) {}
81+
};
82+
83+
struct length_error : public logic_error {
84+
__attribute__((noinline)) explicit length_error(const char* s) : logic_error(s) {}
85+
};
86+
87+
int main() {
88+
int sum = 0;
89+
sum += function2_copy2(3);
90+
sum += function3_copy2(41);
91+
sum += function2_copy1(11);
92+
sum += function1_copy1(42);
93+
function_empty_1();
94+
function_empty_2();
95+
function_empty_3();
96+
length_error e("test");
97+
return sum;
98+
}

llvm/test/DebugInfo/X86/DW_AT_LLVM_stmt_seq_sec_offset.ll

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
; STMT_SEQ: DW_AT_LLVM_stmt_sequence [DW_FORM_sec_offset] (0x00000043)
1515
; STMT_SEQ: DW_AT_name {{.*}}func01
1616
; STMT_SEQ: DW_TAG_subprogram [[[ABBREV_CODE2]]]
17-
; STMT_SEQ: DW_AT_LLVM_stmt_sequence [DW_FORM_sec_offset] (0x00000056)
17+
; STMT_SEQ: DW_AT_LLVM_stmt_sequence [DW_FORM_sec_offset] (0x00000058)
1818
; STMT_SEQ: DW_AT_name {{.*}}main
1919

2020
;; Check the entire line sequence to see that it's correct
@@ -29,22 +29,23 @@
2929
; STMT_SEQ-NEXT: 0x00000050: 05 DW_LNS_set_column (3)
3030
; STMT_SEQ-NEXT: 0x00000052: 67 address += 6, line += 1, op-index += 0
3131
; STMT_SEQ-NEXT: 0x0000000000000006 6 3 0 0 0 0 is_stmt
32-
; STMT_SEQ-NEXT: 0x00000053: 00 DW_LNE_end_sequence
33-
; STMT_SEQ-NEXT: 0x0000000000000006 6 3 0 0 0 0 is_stmt end_sequence
34-
; STMT_SEQ-NEXT: 0x00000056: 04 DW_LNS_set_file (0)
35-
; STMT_SEQ-NEXT: 0x00000058: 00 DW_LNE_set_address (0x00000008)
36-
; STMT_SEQ-NEXT: 0x0000005f: 03 DW_LNS_advance_line (10)
37-
; STMT_SEQ-NEXT: 0x00000061: 01 DW_LNS_copy
32+
; STMT_SEQ-NEXT: 0x00000053: 02 DW_LNS_advance_pc (addr += 2, op-index += 0)
33+
; STMT_SEQ-NEXT: 0x00000055: 00 DW_LNE_end_sequence
34+
; STMT_SEQ-NEXT: 0x0000000000000008 6 3 0 0 0 0 is_stmt end_sequence
35+
; STMT_SEQ-NEXT: 0x00000058: 04 DW_LNS_set_file (0)
36+
; STMT_SEQ-NEXT: 0x0000005a: 00 DW_LNE_set_address (0x00000008)
37+
; STMT_SEQ-NEXT: 0x00000061: 03 DW_LNS_advance_line (10)
38+
; STMT_SEQ-NEXT: 0x00000063: 01 DW_LNS_copy
3839
; STMT_SEQ-NEXT: 0x0000000000000008 10 0 0 0 0 0 is_stmt
39-
; STMT_SEQ-NEXT: 0x00000062: 05 DW_LNS_set_column (10)
40-
; STMT_SEQ-NEXT: 0x00000064: 0a DW_LNS_set_prologue_end
41-
; STMT_SEQ-NEXT: 0x00000065: 83 address += 8, line += 1, op-index += 0
40+
; STMT_SEQ-NEXT: 0x00000064: 05 DW_LNS_set_column (10)
41+
; STMT_SEQ-NEXT: 0x00000066: 0a DW_LNS_set_prologue_end
42+
; STMT_SEQ-NEXT: 0x00000067: 83 address += 8, line += 1, op-index += 0
4243
; STMT_SEQ-NEXT: 0x0000000000000010 11 10 0 0 0 0 is_stmt prologue_end
43-
; STMT_SEQ-NEXT: 0x00000066: 05 DW_LNS_set_column (3)
44-
; STMT_SEQ-NEXT: 0x00000068: 9f address += 10, line += 1, op-index += 0
44+
; STMT_SEQ-NEXT: 0x00000068: 05 DW_LNS_set_column (3)
45+
; STMT_SEQ-NEXT: 0x0000006a: 9f address += 10, line += 1, op-index += 0
4546
; STMT_SEQ-NEXT: 0x000000000000001a 12 3 0 0 0 0 is_stmt
46-
; STMT_SEQ-NEXT: 0x00000069: 02 DW_LNS_advance_pc (addr += 5, op-index += 0)
47-
; STMT_SEQ-NEXT: 0x0000006b: 00 DW_LNE_end_sequence
47+
; STMT_SEQ-NEXT: 0x0000006b: 02 DW_LNS_advance_pc (addr += 5, op-index += 0)
48+
; STMT_SEQ-NEXT: 0x0000006d: 00 DW_LNE_end_sequence
4849
; STMT_SEQ-NEXT: 0x000000000000001f 12 3 0 0 0 0 is_stmt end_sequence
4950

5051
; generated from:

llvm/test/MC/ELF/debug-loc-label.s

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -17,43 +17,47 @@
1717
# CHECK-LINE-TABLE-NEXT: 0x0000002a: 00 DW_LNE_set_address (0x0000000000000000)
1818
# CHECK-LINE-TABLE-NEXT: 0x00000035: 01 DW_LNS_copy
1919
# CHECK-LINE-TABLE-NEXT: 0x0000000000000000 1 1 1 0 0 0 is_stmt
20-
# CHECK-LINE-TABLE-NEXT: 0x00000036: 00 DW_LNE_end_sequence
21-
# CHECK-LINE-TABLE-NEXT: 0x0000000000000000 1 1 1 0 0 0 is_stmt end_sequence
22-
# CHECK-LINE-TABLE-NEXT: 0x00000039: 05 DW_LNS_set_column (2)
23-
# CHECK-LINE-TABLE-NEXT: 0x0000003b: 00 DW_LNE_set_address (0x0000000000000008)
24-
# CHECK-LINE-TABLE-NEXT: 0x00000046: 01 DW_LNS_copy
20+
# CHECK-LINE-TABLE-NEXT: 0x00000036: 02 DW_LNS_advance_pc (addr += 8, op-index += 0)
21+
# CHECK-LINE-TABLE-NEXT: 0x00000038: 00 DW_LNE_end_sequence
22+
# CHECK-LINE-TABLE-NEXT: 0x0000000000000008 1 1 1 0 0 0 is_stmt end_sequence
23+
# CHECK-LINE-TABLE-NEXT: 0x0000003b: 05 DW_LNS_set_column (2)
24+
# CHECK-LINE-TABLE-NEXT: 0x0000003d: 00 DW_LNE_set_address (0x0000000000000008)
25+
# CHECK-LINE-TABLE-NEXT: 0x00000048: 01 DW_LNS_copy
2526
# CHECK-LINE-TABLE-NEXT: 0x0000000000000008 1 2 1 0 0 0 is_stmt
26-
# CHECK-LINE-TABLE-NEXT: 0x00000047: 00 DW_LNE_end_sequence
27-
# CHECK-LINE-TABLE-NEXT: 0x0000000000000008 1 2 1 0 0 0 is_stmt end_sequence
28-
# CHECK-LINE-TABLE-NEXT: 0x0000004a: 05 DW_LNS_set_column (3)
29-
# CHECK-LINE-TABLE-NEXT: 0x0000004c: 00 DW_LNE_set_address (0x0000000000000010)
30-
# CHECK-LINE-TABLE-NEXT: 0x00000057: 01 DW_LNS_copy
27+
# CHECK-LINE-TABLE-NEXT: 0x00000049: 02 DW_LNS_advance_pc (addr += 8, op-index += 0)
28+
# CHECK-LINE-TABLE-NEXT: 0x0000004b: 00 DW_LNE_end_sequence
29+
# CHECK-LINE-TABLE-NEXT: 0x0000000000000010 1 2 1 0 0 0 is_stmt end_sequence
30+
# CHECK-LINE-TABLE-NEXT: 0x0000004e: 05 DW_LNS_set_column (3)
31+
# CHECK-LINE-TABLE-NEXT: 0x00000050: 00 DW_LNE_set_address (0x0000000000000010)
32+
# CHECK-LINE-TABLE-NEXT: 0x0000005b: 01 DW_LNS_copy
3133
# CHECK-LINE-TABLE-NEXT: 0x0000000000000010 1 3 1 0 0 0 is_stmt
32-
# CHECK-LINE-TABLE-NEXT: 0x00000058: 00 DW_LNE_end_sequence
33-
# CHECK-LINE-TABLE-NEXT: 0x0000000000000010 1 3 1 0 0 0 is_stmt end_sequence
34-
# CHECK-LINE-TABLE-NEXT: 0x0000005b: 05 DW_LNS_set_column (4)
35-
# CHECK-LINE-TABLE-NEXT: 0x0000005d: 00 DW_LNE_set_address (0x0000000000000018)
36-
# CHECK-LINE-TABLE-NEXT: 0x00000068: 01 DW_LNS_copy
34+
# CHECK-LINE-TABLE-NEXT: 0x0000005c: 02 DW_LNS_advance_pc (addr += 8, op-index += 0)
35+
# CHECK-LINE-TABLE-NEXT: 0x0000005e: 00 DW_LNE_end_sequence
36+
# CHECK-LINE-TABLE-NEXT: 0x0000000000000018 1 3 1 0 0 0 is_stmt end_sequence
37+
# CHECK-LINE-TABLE-NEXT: 0x00000061: 05 DW_LNS_set_column (4)
38+
# CHECK-LINE-TABLE-NEXT: 0x00000063: 00 DW_LNE_set_address (0x0000000000000018)
39+
# CHECK-LINE-TABLE-NEXT: 0x0000006e: 01 DW_LNS_copy
3740
# CHECK-LINE-TABLE-NEXT: 0x0000000000000018 1 4 1 0 0 0 is_stmt
38-
# CHECK-LINE-TABLE-NEXT: 0x00000069: 05 DW_LNS_set_column (5)
39-
# CHECK-LINE-TABLE-NEXT: 0x0000006b: 01 DW_LNS_copy
41+
# CHECK-LINE-TABLE-NEXT: 0x0000006f: 05 DW_LNS_set_column (5)
42+
# CHECK-LINE-TABLE-NEXT: 0x00000071: 01 DW_LNS_copy
4043
# CHECK-LINE-TABLE-NEXT: 0x0000000000000018 1 5 1 0 0 0 is_stmt
41-
# CHECK-LINE-TABLE-NEXT: 0x0000006c: 00 DW_LNE_end_sequence
42-
# CHECK-LINE-TABLE-NEXT: 0x0000000000000018 1 5 1 0 0 0 is_stmt end_sequence
44+
# CHECK-LINE-TABLE-NEXT: 0x00000072: 02 DW_LNS_advance_pc (addr += 8, op-index += 0)
45+
# CHECK-LINE-TABLE-NEXT: 0x00000074: 00 DW_LNE_end_sequence
46+
# CHECK-LINE-TABLE-NEXT: 0x0000000000000020 1 5 1 0 0 0 is_stmt end_sequence
4347

4448
# CHECK-SYM: Symbol table '.symtab' contains 9 entries:
4549
# CHECK-SYM-NEXT: Num: Value Size Type Bind Vis Ndx Name
4650
# CHECK-SYM-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
4751
# CHECK-SYM-NEXT: 1: 0000000000000000 0 FILE LOCAL DEFAULT ABS test.c
4852
# CHECK-SYM-NEXT: 2: 0000000000000000 0 SECTION LOCAL DEFAULT 2 .text
49-
# CHECK-SYM-NEXT: 3: 0000000000000039 0 NOTYPE LOCAL DEFAULT 3 my_label_02
50-
# CHECK-SYM-NEXT: 4: 000000000000004a 0 NOTYPE LOCAL DEFAULT 3 my_label_03
51-
# CHECK-SYM-NEXT: 5: 000000000000005b 0 NOTYPE LOCAL DEFAULT 3 my_label_04
52-
# CHECK-SYM-NEXT: 6: 000000000000004a 0 NOTYPE LOCAL DEFAULT 3 my_label_03.1
53-
# CHECK-SYM-NEXT: 7: 000000000000006f 0 NOTYPE LOCAL DEFAULT 3 my_label_05
53+
# CHECK-SYM-NEXT: 3: 000000000000003b 0 NOTYPE LOCAL DEFAULT 3 my_label_02
54+
# CHECK-SYM-NEXT: 4: 000000000000004e 0 NOTYPE LOCAL DEFAULT 3 my_label_03
55+
# CHECK-SYM-NEXT: 5: 0000000000000061 0 NOTYPE LOCAL DEFAULT 3 my_label_04
56+
# CHECK-SYM-NEXT: 6: 000000000000004e 0 NOTYPE LOCAL DEFAULT 3 my_label_03.1
57+
# CHECK-SYM-NEXT: 7: 0000000000000077 0 NOTYPE LOCAL DEFAULT 3 my_label_05
5458
# CHECK-SYM-NEXT: 8: 0000000000000000 0 FUNC GLOBAL DEFAULT 2 foo
5559

56-
# CHECK-OFFSETS: 0000 39000000 4a000000 5b000000
60+
# CHECK-OFFSETS: 0000 3b000000 4e000000 61000000
5761

5862
.text
5963
.file "test.c"

0 commit comments

Comments
 (0)