[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
Sat Jul 18 10:07:42 PDT 2020
MaskRay updated this revision to Diff 279013.
MaskRay added a comment.
Add a comment
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,16 +13,17 @@
#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"
-#include "llvm/Object/ELFTypes.h"
#include "llvm/Object/ELFObjectFile.h"
+#include "llvm/Object/ELFTypes.h"
#include "llvm/Support/Casting.h"
-#include "llvm/Support/ScopedPrinter.h"
#include "llvm/Support/Debug.h"
-#include "llvm/DebugInfo/DWARF/DWARFDataExtractor.h"
-#include "llvm/DebugInfo/DWARF/DWARFDebugFrame.h"
#include "llvm/Support/Endian.h"
#include "llvm/Support/Format.h"
+#include "llvm/Support/ScopedPrinter.h"
#include "llvm/Support/type_traits.h"
namespace llvm {
@@ -186,7 +187,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.279013.patch
Type: text/x-patch
Size: 2979 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200718/8df88e29/attachment-0001.bin>
More information about the llvm-commits
mailing list