mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-23 19:59:57 +00:00
[dwarfdump] Do not apply relocations in mach-o files if there is no LoadedObjectInfo.
Not only do we not need to do anything to read correct values from the object files, but the current logic actually wrongly applies twice the section base address when there is no LoadedObjectInfo passed to the DWARFContext creation (as the added test shows). Simply do not apply any relocations on the mach-o debug info if there is no load offset to apply. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245807 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8f7e8462cd
commit
d2681e8812
@ -637,6 +637,14 @@ DWARFContextInMemory::DWARFContextInMemory(const object::ObjectFile &Obj,
|
||||
if (L && L->getLoadedSectionContents(*RelocatedSection,RelSecData))
|
||||
continue;
|
||||
|
||||
// In Mach-o files, the relocations do not need to be applied if
|
||||
// there is no load offset to apply. The value read at the
|
||||
// relocation point already factors in the section address
|
||||
// (actually applying the relocations will produce wrong results
|
||||
// as the section address will be added twice).
|
||||
if (!L && dyn_cast<MachOObjectFile>(&Obj))
|
||||
continue;
|
||||
|
||||
RelSecName = RelSecName.substr(
|
||||
RelSecName.find_first_not_of("._")); // Skip . and _ prefixes.
|
||||
|
||||
|
BIN
test/DebugInfo/Inputs/dwarfdump-macho-relocs.macho.x86_64.o
Normal file
BIN
test/DebugInfo/Inputs/dwarfdump-macho-relocs.macho.x86_64.o
Normal file
Binary file not shown.
27
test/DebugInfo/dwarfdump-macho-relocs.test
Normal file
27
test/DebugInfo/dwarfdump-macho-relocs.test
Normal file
@ -0,0 +1,27 @@
|
||||
// RUN: llvm-dwarfdump -debug-dump=info %p/Inputs/dwarfdump-macho-relocs.macho.x86_64.o | FileCheck %s
|
||||
|
||||
// The dumped file has 2 functions in different sections of the __TEXT segment.
|
||||
// Check that the addresses are are dumped correctly
|
||||
|
||||
// Compiled with: clang -x c -g -c -o dwarfdump-macho-relocs.macho.x86_64.o dwarfdump-macho-relocs.test
|
||||
|
||||
__attribute__((section("__TEXT,__blah")))
|
||||
int foo() {
|
||||
return 42;
|
||||
}
|
||||
|
||||
// CHECK: DW_TAG_subprogram
|
||||
// CHECK-NEXT: DW_AT_low_pc{{.*}}0x0000000000000020
|
||||
// CHECK-NEXT: DW_AT_high_pc{{.*}}0x000000000000002b
|
||||
// CHECK-NEXT: DW_AT_frame_base
|
||||
// CHECK-NEXT: DW_AT_name{{.*}}"foo"
|
||||
|
||||
int main() {
|
||||
return foo();
|
||||
}
|
||||
|
||||
// CHECK: DW_TAG_subprogram
|
||||
// CHECK-NEXT: DW_AT_low_pc{{.*}}0x0000000000000000
|
||||
// CHECK-NEXT: DW_AT_high_pc{{.*}}0x000000000000001a
|
||||
// CHECK-NEXT: DW_AT_frame_base
|
||||
// CHECK-NEXT: DW_AT_name{{.*}}"main"
|
Loading…
Reference in New Issue
Block a user