[PATCH] D84106: [llvm-readobj] Construct relocation-aware DWARFDataExtractor to decode .eh_frame addresses correctly
Fangrui Song via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 20 21:16:20 PDT 2020
MaskRay updated this revision to Diff 279304.
MaskRay edited the summary of this revision.
MaskRay added a comment.
Fix description (Use a relocation-aware DWARFDataExtractor constructor)
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D84106/new/
https://reviews.llvm.org/D84106
Files:
llvm/test/tools/llvm-readobj/ELF/AArch64/dwarf-cfi.s
llvm/test/tools/llvm-readobj/ELF/ARM/dwarf-cfi.s
llvm/tools/llvm-readobj/DwarfCFIEHPrinter.h
Index: llvm/tools/llvm-readobj/DwarfCFIEHPrinter.h
===================================================================
--- llvm/tools/llvm-readobj/DwarfCFIEHPrinter.h
+++ llvm/tools/llvm-readobj/DwarfCFIEHPrinter.h
@@ -13,6 +13,7 @@
#include "llvm-readobj.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/BinaryFormat/Dwarf.h"
+#include "llvm/DebugInfo/DWARF/DWARFContext.h"
#include "llvm/DebugInfo/DWARF/DWARFDataExtractor.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugFrame.h"
#include "llvm/Object/ELF.h"
@@ -185,7 +186,10 @@
if (!DataOrErr)
reportError(DataOrErr.takeError(), ObjF->getFileName());
- DWARFDataExtractor DE(*DataOrErr,
+ // Construct DWARFDataExtractor to handle relocations ("PC Begin" fields).
+ std::unique_ptr<DWARFContext> DICtx = DWARFContext::create(*ObjF, nullptr);
+ DWARFDataExtractor DE(DICtx->getDWARFObj(),
+ DICtx->getDWARFObj().getEHFrameSection(),
ELFT::TargetEndianness == support::endianness::little,
ELFT::Is64Bits ? 8 : 4);
DWARFDebugFrame EHFrame(Triple::ArchType(ObjF->getArch()), /*IsEH=*/true,
Index: llvm/test/tools/llvm-readobj/ELF/ARM/dwarf-cfi.s
===================================================================
--- llvm/test/tools/llvm-readobj/ELF/ARM/dwarf-cfi.s
+++ llvm/test/tools/llvm-readobj/ELF/ARM/dwarf-cfi.s
@@ -10,10 +10,9 @@
# CHECK: Program:
# CHECK-NEXT: DW_CFA_def_cfa: reg13 +0
-## FIXME Use getEHFrameSection() so that the address is decoded correctly.
# CHECK: [0x14] FDE length=16 cie=[0x0]
-# CHECK-NEXT: initial_location: 0x1c
-# CHECK-NEXT: address_range: 0x4 (end : 0x20)
+# CHECK-NEXT: initial_location: 0x0
+# CHECK-NEXT: address_range: 0x4 (end : 0x4)
# CHECK: Program:
# CHECK-NEXT: DW_CFA_nop:
Index: llvm/test/tools/llvm-readobj/ELF/AArch64/dwarf-cfi.s
===================================================================
--- llvm/test/tools/llvm-readobj/ELF/AArch64/dwarf-cfi.s
+++ llvm/test/tools/llvm-readobj/ELF/AArch64/dwarf-cfi.s
@@ -10,10 +10,9 @@
# CHECK: Program:
# CHECK-NEXT: DW_CFA_def_cfa: reg31 +0
-## FIXME Use getEHFrameSection() so that the address is decoded correctly.
# CHECK: [0x14] FDE length=16 cie=[0x0]
-# CHECK-NEXT: initial_location: 0x1c
-# CHECK-NEXT: address_range: 0x4 (end : 0x20)
+# CHECK-NEXT: initial_location: 0x0
+# CHECK-NEXT: address_range: 0x4 (end : 0x4)
# CHECK: Program:
# CHECK-NEXT: DW_CFA_nop:
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D84106.279304.patch
Type: text/x-patch
Size: 2485 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200721/8d19f5df/attachment.bin>
More information about the llvm-commits
mailing list