mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 11:02:59 +02:00
[MC][DWARF] Corrected handling of is_stmt flag in .loc directives
According to DWARF standard, is_stmt is a global flag; when set or cleared it should affect subsequent .loc directives. However llvm assembler handled is_stmt differently: it forced all locations to have is_stmt=1 unless is_stmt was specified explicitly as 0. The fix utilizes current DWARF state flags to compute correct is_stmt values. See https://bugs.llvm.org/show_bug.cgi?id=45529 for a detailed issue description. Reviewers: arsenm, probinson, enderby Differential Revision: https://reviews.llvm.org/D78102
This commit is contained in:
parent
4cbc237942
commit
abab96c577
@ -3528,7 +3528,8 @@ bool AsmParser::parseDirectiveLoc() {
|
||||
Lex();
|
||||
}
|
||||
|
||||
unsigned Flags = DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0;
|
||||
auto PrevFlags = getContext().getCurrentDwarfLoc().getFlags();
|
||||
unsigned Flags = PrevFlags & DWARF2_FLAG_IS_STMT;
|
||||
unsigned Isa = 0;
|
||||
int64_t Discriminator = 0;
|
||||
|
||||
|
@ -3235,7 +3235,8 @@ bool MasmParser::parseDirectiveLoc() {
|
||||
Lex();
|
||||
}
|
||||
|
||||
unsigned Flags = DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0;
|
||||
auto PrevFlags = getContext().getCurrentDwarfLoc().getFlags();
|
||||
unsigned Flags = PrevFlags & DWARF2_FLAG_IS_STMT;
|
||||
unsigned Isa = 0;
|
||||
int64_t Discriminator = 0;
|
||||
|
||||
|
25
test/MC/AsmParser/directive_loc_2.s
Normal file
25
test/MC/AsmParser/directive_loc_2.s
Normal file
@ -0,0 +1,25 @@
|
||||
# RUN: llvm-mc -triple i386-unknown-unknown -filetype=obj %s -o %t
|
||||
# RUN: llvm-dwarfdump -debug-line %t | FileCheck %s
|
||||
|
||||
.file 1 "test.c"
|
||||
.loc 1 2
|
||||
nop
|
||||
.loc 1 4 is_stmt 0
|
||||
nop
|
||||
.loc 1 6
|
||||
nop
|
||||
.loc 1 8 is_stmt 1
|
||||
nop
|
||||
.loc 1 10
|
||||
nop
|
||||
|
||||
# CHECK: .debug_line
|
||||
# CHECK: file_names[ 1]:
|
||||
# CHECK-NEXT: name: "test.c"
|
||||
# CHECK-NEXT: dir_index: 0
|
||||
# CHECK: 0x{{0+}}0 2 0 1 0 0 is_stmt
|
||||
# CHECK: 0x{{0+}}1 4 0 1 0 0 {{$}}
|
||||
# CHECK: 0x{{0+}}2 6 0 1 0 0 {{$}}
|
||||
# CHECK: 0x{{0+}}3 8 0 1 0 0 is_stmt
|
||||
# CHECK: 0x{{0+}}4 10 0 1 0 0 is_stmt
|
||||
# CHECK: 0x{{0+}}5 10 0 1 0 0 is_stmt end_sequence
|
Loading…
Reference in New Issue
Block a user