[Lldb-commits] [lldb] r339974 - Add a relocation for R_AARCH64_ABS32 in ObjectFileELF

Stephane Sezer via lldb-commits lldb-commits at lists.llvm.org
Thu Aug 16 17:35:47 PDT 2018


Author: sas
Date: Thu Aug 16 17:35:47 2018
New Revision: 339974

URL: http://llvm.org/viewvc/llvm-project?rev=339974&view=rev
Log:
Add a relocation for R_AARCH64_ABS32 in ObjectFileELF

Summary:
.rela.debug_info relocations are being done via
ObjectFileELF::ApplyRelocations for aarch64. Currently, the switch case
that iterates over the relocation type is only implemented for a few
different types and `assert(false)`es over the rest.

Implement the relocation for R_AARCH64_ABS32 in ApplyRelocations

Reviewers: sas, xiaobai, javed.absar, espindola

Reviewed By: sas

Subscribers: emaste, arichardson, kristof.beyls

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

Change by Nathan Lanza <lanza at fb.com>

Modified:
    lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp

Modified: lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp?rev=339974&r1=339973&r2=339974&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp (original)
+++ lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp Thu Aug 16 17:35:47 2018
@@ -2697,15 +2697,20 @@ unsigned ObjectFileELF::ApplyRelocations
         break;
       }
       case R_X86_64_32:
-      case R_X86_64_32S: {
+      case R_X86_64_32S:
+      case R_AARCH64_ABS32: {
         symbol = symtab->FindSymbolByID(reloc_symbol(rel));
         if (symbol) {
           addr_t value = symbol->GetAddressRef().GetFileAddress();
           value += ELFRelocation::RelocAddend32(rel);
-          assert(
-              (reloc_type(rel) == R_X86_64_32 && (value <= UINT32_MAX)) ||
+          if ((reloc_type(rel) == R_X86_64_32 && (value <= UINT32_MAX)) ||
               (reloc_type(rel) == R_X86_64_32S &&
-               ((int64_t)value <= INT32_MAX && (int64_t)value >= INT32_MIN)));
+               ((int64_t)value <= INT32_MAX && (int64_t)value >= INT32_MIN)) ||
+              (reloc_type(rel) == R_AARCH64_ABS32 && (value <= UINT32_MAX))) {
+            Log *log =
+                lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_MODULES);
+            log->Printf("Failed to apply debug info relocations");
+          }
           uint32_t truncated_addr = (value & 0xFFFFFFFF);
           DataBufferSP &data_buffer_sp = debug_data.GetSharedDataBuffer();
           uint32_t *dst = reinterpret_cast<uint32_t *>(




More information about the lldb-commits mailing list