mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-03-07 11:59:09 +00:00
DWARF v5: fix directory index in the line table
Summary: Prior to DWARF v5, a directory index of 0 represents DW_AT_comp_dir. In DWARF v5, the index starts with 0 and Entry.DirIdx is the index into Prologue.IncludeDirectories. Reviewed By: labath Differential Revision: https://reviews.llvm.org/D61253 llvm-svn: 360015
This commit is contained in:
parent
e9c080a2f0
commit
ea281158ef
@ -1020,20 +1020,24 @@ bool DWARFDebugLine::LineTable::getFileNameByIndex(uint64_t FileIndex,
|
||||
}
|
||||
|
||||
SmallString<16> FilePath;
|
||||
uint64_t IncludeDirIndex = Entry.DirIdx;
|
||||
StringRef IncludeDir;
|
||||
// Be defensive about the contents of Entry.
|
||||
if (IncludeDirIndex > 0 &&
|
||||
IncludeDirIndex <= Prologue.IncludeDirectories.size())
|
||||
IncludeDir = Prologue.IncludeDirectories[IncludeDirIndex - 1]
|
||||
.getAsCString()
|
||||
.getValue();
|
||||
if (Prologue.getVersion() >= 5) {
|
||||
if (Entry.DirIdx < Prologue.IncludeDirectories.size())
|
||||
IncludeDir =
|
||||
Prologue.IncludeDirectories[Entry.DirIdx].getAsCString().getValue();
|
||||
} else {
|
||||
if (0 < Entry.DirIdx && Entry.DirIdx <= Prologue.IncludeDirectories.size())
|
||||
IncludeDir = Prologue.IncludeDirectories[Entry.DirIdx - 1]
|
||||
.getAsCString()
|
||||
.getValue();
|
||||
|
||||
// We may still need to append compilation directory of compile unit.
|
||||
// We know that FileName is not absolute, the only way to have an
|
||||
// absolute path at this point would be if IncludeDir is absolute.
|
||||
if (CompDir && !isPathAbsoluteOnWindowsOrPosix(IncludeDir))
|
||||
sys::path::append(FilePath, CompDir);
|
||||
// We may still need to append compilation directory of compile unit.
|
||||
// We know that FileName is not absolute, the only way to have an
|
||||
// absolute path at this point would be if IncludeDir is absolute.
|
||||
if (CompDir && !isPathAbsoluteOnWindowsOrPosix(IncludeDir))
|
||||
sys::path::append(FilePath, CompDir);
|
||||
}
|
||||
|
||||
// sys::path::append skips empty strings.
|
||||
sys::path::append(FilePath, IncludeDir, FileName);
|
||||
|
62
test/DebugInfo/symbolize-directory.s
Normal file
62
test/DebugInfo/symbolize-directory.s
Normal file
@ -0,0 +1,62 @@
|
||||
# REQUIRES: x86-registered-target
|
||||
|
||||
# RUN: llvm-mc -filetype=obj -triple=x86_64 -dwarf-version=5 %s -o %t.o
|
||||
# RUN: llvm-symbolizer --obj=%t.o --functions=none 0 1 | FileCheck %s
|
||||
|
||||
# CHECK: /home/0.cc:1:0
|
||||
# CHECK: /tmp/1.cc:2:1
|
||||
|
||||
.Lfunc_begin0:
|
||||
.file 0 "/home" "0.cc"
|
||||
.file 1 "/tmp" "1.cc"
|
||||
.loc 0 1 0 # 0.cc:1:0
|
||||
nop
|
||||
.loc 1 2 1 # 1.cc:2:1
|
||||
nop
|
||||
.loc 0 1 1 prologue_end # 0.cc:1:1
|
||||
.Lfunc_end0:
|
||||
|
||||
.section .debug_abbrev,"",@progbits
|
||||
.byte 1 # Abbreviation Code
|
||||
.byte 17 # DW_TAG_compile_unit
|
||||
.byte 1 # DW_children_yes
|
||||
.byte 16 # DW_AT_stmt_list
|
||||
.byte 23 # DW_FROM_sec_offset
|
||||
.byte 17 # DW_AT_low_pc
|
||||
.byte 1 # DW_FORM_addr
|
||||
.byte 18 # DW_AT_high_pc
|
||||
.byte 6 # DW_FORM_data4
|
||||
.byte 0 # EOM(1)
|
||||
.byte 0 # EOM(2)
|
||||
|
||||
.byte 2 # Abbreviation Code
|
||||
.byte 46 # DW_TAG_subprogram
|
||||
.byte 0 # DW_children_no
|
||||
.byte 3 # DW_AT_name
|
||||
.byte 8 # DW_FORM_string
|
||||
.byte 17 # DW_AT_low_pc
|
||||
.byte 1 # DW_FORM_addr
|
||||
.byte 18 # DW_AT_high_pc
|
||||
.byte 6 # DW_FORM_data4
|
||||
.byte 0 # EOM(1)
|
||||
.byte 0 # EOM(2)
|
||||
|
||||
.byte 0 # EOM(3)
|
||||
|
||||
.section .debug_info,"",@progbits
|
||||
.Lcu_begin0:
|
||||
.long .Lcu_end0-.Lcu_begin0-4 # Length of Unit
|
||||
.short 5 # DWARF version number
|
||||
.byte 1 # DWARF Unit Type
|
||||
.byte 8 # Address Size (in bytes)
|
||||
.long .debug_abbrev # Offset Into Abbrev.
|
||||
.byte 1 # Abbrev [1]
|
||||
.long 0 # DW_AT_stmt_list
|
||||
.quad 0 # DW_AT_low_pc
|
||||
.long 2 # DW_AT_high_pc
|
||||
.byte 2 # Abbrev [2] DW_TAG_subprogram
|
||||
.asciz "0.c" # DW_AT_name
|
||||
.quad 0 # DW_AT_low_pc
|
||||
.long 2 # DW_AT_high_pc
|
||||
.byte 0
|
||||
.Lcu_end0:
|
Loading…
x
Reference in New Issue
Block a user