mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
[DebugInfo] Fix reading addresses in DWARFDebugAddr.
As addresses in the address tables may have relocations, thus, the relocations should be resolved to read the correct address. That is especially important for targets that use RELA relocations because in that case addends are stored in relocation sections. Differential Revision: https://reviews.llvm.org/D74404
This commit is contained in:
parent
42881b3a20
commit
aba0bf1de0
@ -131,10 +131,7 @@ Error DWARFDebugAddrTable::extract(DWARFDataExtractor Data,
|
||||
Data.setAddressSize(HeaderData.AddrSize);
|
||||
uint32_t AddrCount = DataSize / HeaderData.AddrSize;
|
||||
for (uint32_t I = 0; I < AddrCount; ++I)
|
||||
if (HeaderData.AddrSize == 4)
|
||||
Addrs.push_back(Data.getU32(OffsetPtr));
|
||||
else
|
||||
Addrs.push_back(Data.getU64(OffsetPtr));
|
||||
Addrs.push_back(Data.getRelocatedAddress(OffsetPtr));
|
||||
return Error::success();
|
||||
}
|
||||
|
||||
|
28
test/tools/llvm-dwarfdump/X86/debug_addr_rela.s
Normal file
28
test/tools/llvm-dwarfdump/X86/debug_addr_rela.s
Normal file
@ -0,0 +1,28 @@
|
||||
# RUN: llvm-mc %s -filetype obj -triple x86_64-pc-linux -o - | \
|
||||
# RUN: llvm-dwarfdump -debug-addr - | \
|
||||
# RUN: FileCheck %s
|
||||
|
||||
## This checks that we use DWARFDataExtractor::getRelocatedAddress() to read
|
||||
## addresses of an address table. In this test, the raw data in the .debug_addr
|
||||
## section does not contain the full address, thus, it is required to resolve
|
||||
## a RELA relocation to recover the real value.
|
||||
|
||||
# CHECK: .debug_addr contents
|
||||
# CHECK-NEXT: length = 0x0000000c, version = 0x0005, addr_size = 0x08, seg_size = 0x00
|
||||
# CHECK-NEXT: Addrs: [
|
||||
# CHECK-NEXT: 0x000000000000002a
|
||||
# CHECK-NEXT: ]
|
||||
|
||||
.text
|
||||
.space 0x2a
|
||||
.Lfoo:
|
||||
|
||||
.section .debug_addr,"",@progbits
|
||||
.long .LAddr0end-.LAddr0version # Length
|
||||
.LAddr0version:
|
||||
.short 5 # Version
|
||||
.byte 8 # Address size
|
||||
.byte 0 # Segment selector size
|
||||
.LAddr0table:
|
||||
.quad .Lfoo
|
||||
.LAddr0end:
|
Loading…
Reference in New Issue
Block a user