[PATCH] D74404: [DebugInfo] Fix reading addresses in DWARFDebugAddr.

Igor Kudrin via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 11 22:36:48 PST 2020


This revision was automatically updated to reflect the committed changes.
Closed by commit rG5d58eb9f4f71: [DebugInfo] Fix reading addresses in DWARFDebugAddr. (authored by ikudrin).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D74404/new/

https://reviews.llvm.org/D74404

Files:
  llvm/lib/DebugInfo/DWARF/DWARFDebugAddr.cpp
  llvm/test/tools/llvm-dwarfdump/X86/debug_addr_rela.s


Index: llvm/test/tools/llvm-dwarfdump/X86/debug_addr_rela.s
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-dwarfdump/X86/debug_addr_rela.s
@@ -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,"", at progbits
+    .long   .LAddr0end-.LAddr0version   # Length
+.LAddr0version:
+    .short  5                           # Version
+    .byte   8                           # Address size
+    .byte   0                           # Segment selector size
+.LAddr0table:
+    .quad   .Lfoo
+.LAddr0end:
Index: llvm/lib/DebugInfo/DWARF/DWARFDebugAddr.cpp
===================================================================
--- llvm/lib/DebugInfo/DWARF/DWARFDebugAddr.cpp
+++ llvm/lib/DebugInfo/DWARF/DWARFDebugAddr.cpp
@@ -131,10 +131,7 @@
   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();
 }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D74404.244065.patch
Type: text/x-patch
Size: 1818 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200212/db273c39/attachment.bin>


More information about the llvm-commits mailing list