[llvm] 5d58eb9 - [DebugInfo] Fix reading addresses in DWARFDebugAddr.

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


Author: Igor Kudrin
Date: 2020-02-12T13:32:59+07:00
New Revision: 5d58eb9f4f71292d9c67517d8cb0eb05e9fe82a3

URL: https://github.com/llvm/llvm-project/commit/5d58eb9f4f71292d9c67517d8cb0eb05e9fe82a3
DIFF: https://github.com/llvm/llvm-project/commit/5d58eb9f4f71292d9c67517d8cb0eb05e9fe82a3.diff

LOG: [DebugInfo] Fix reading addresses in DWARFDebugAddr.

As addresses in the address tables may have relocations, thus,
the relocations should be resolved to read the correct address.
That is especially important for targets that use RELA relocations
because in that case addends are stored in relocation sections.

Differential Revision: https://reviews.llvm.org/D74404

Added: 
    llvm/test/tools/llvm-dwarfdump/X86/debug_addr_rela.s

Modified: 
    llvm/lib/DebugInfo/DWARF/DWARFDebugAddr.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/DebugInfo/DWARF/DWARFDebugAddr.cpp b/llvm/lib/DebugInfo/DWARF/DWARFDebugAddr.cpp
index 02b8b8ee4bfe..ba2c17749091 100644
--- a/llvm/lib/DebugInfo/DWARF/DWARFDebugAddr.cpp
+++ b/llvm/lib/DebugInfo/DWARF/DWARFDebugAddr.cpp
@@ -131,10 +131,7 @@ Error DWARFDebugAddrTable::extract(DWARFDataExtractor Data,
   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();
 }
 

diff  --git a/llvm/test/tools/llvm-dwarfdump/X86/debug_addr_rela.s b/llvm/test/tools/llvm-dwarfdump/X86/debug_addr_rela.s
new file mode 100644
index 000000000000..f0058b95475b
--- /dev/null
+++ b/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:


        


More information about the llvm-commits mailing list