[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