[llvm] r174874 - AArch64: Add basic relocation processing for llvm-dwarfdump.

Tim Northover Tim.Northover at arm.com
Mon Feb 11 03:16:02 PST 2013


Author: tnorthover
Date: Mon Feb 11 05:16:02 2013
New Revision: 174874

URL: http://llvm.org/viewvc/llvm-project?rev=174874&view=rev
Log:
AArch64: Add basic relocation processing for llvm-dwarfdump.

This allows llvm-dwarfdump to handle the relocations needed, at least
for LLVM-produced code.

Added:
    llvm/trunk/test/DebugInfo/Inputs/dwarfdump-test.elf-aarch64   (with props)
    llvm/trunk/test/DebugInfo/dwarfdump-aarch64.test   (with props)
Modified:
    llvm/trunk/include/llvm/Object/RelocVisitor.h

Modified: llvm/trunk/include/llvm/Object/RelocVisitor.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/RelocVisitor.h?rev=174874&r1=174873&r2=174874&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Object/RelocVisitor.h (original)
+++ llvm/trunk/include/llvm/Object/RelocVisitor.h Mon Feb 11 05:16:02 2013
@@ -92,6 +92,16 @@ public:
         HasError = true;
         return RelocToApply();
       }
+    } else if (FileFormat == "ELF64-aarch64") {
+      switch (RelocType) {
+      case llvm::ELF::R_AARCH64_ABS32:
+        return visitELF_AARCH64_ABS32(R, Value);
+      case llvm::ELF::R_AARCH64_ABS64:
+        return visitELF_AARCH64_ABS64(R, Value);
+      default:
+        HasError = true;
+        return RelocToApply();
+      }
     }
     HasError = true;
     return RelocToApply();
@@ -172,6 +182,26 @@ private:
     uint32_t Res = (Value + Addend) & 0xFFFFFFFF;
     return RelocToApply(Res, 4);
   }
+
+  // AArch64 ELF
+  RelocToApply visitELF_AARCH64_ABS32(RelocationRef R, uint64_t Value) {
+    int64_t Addend;
+    R.getAdditionalInfo(Addend);
+    int64_t Res =  Value + Addend;
+
+    // Overflow check allows for both signed and unsigned interpretation.
+    if (Res < INT32_MIN || Res > UINT32_MAX)
+      HasError = true;
+
+    return RelocToApply(static_cast<uint32_t>(Res), 4);
+  }
+
+  RelocToApply visitELF_AARCH64_ABS64(RelocationRef R, uint64_t Value) {
+    int64_t Addend;
+    R.getAdditionalInfo(Addend);
+    return RelocToApply(Value + Addend, 8);
+  }
+
 };
 
 }

Added: llvm/trunk/test/DebugInfo/Inputs/dwarfdump-test.elf-aarch64
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Inputs/dwarfdump-test.elf-aarch64?rev=174874&view=auto
==============================================================================
Binary files llvm/trunk/test/DebugInfo/Inputs/dwarfdump-test.elf-aarch64 (added) and llvm/trunk/test/DebugInfo/Inputs/dwarfdump-test.elf-aarch64 Mon Feb 11 05:16:02 2013 differ

Propchange: llvm/trunk/test/DebugInfo/Inputs/dwarfdump-test.elf-aarch64
------------------------------------------------------------------------------
    svn:eol-style = native

Added: llvm/trunk/test/DebugInfo/dwarfdump-aarch64.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/dwarfdump-aarch64.test?rev=174874&view=auto
==============================================================================
--- llvm/trunk/test/DebugInfo/dwarfdump-aarch64.test (added)
+++ llvm/trunk/test/DebugInfo/dwarfdump-aarch64.test Mon Feb 11 05:16:02 2013
@@ -0,0 +1,16 @@
+RUN: llvm-dwarfdump %p/Inputs/dwarfdump-test.elf-aarch64  \
+RUN:     | FileCheck %s
+
+We're mostly checking that relocations are applied correctly
+here. Currently R_AARCH64_ABS32 is used for references to debug data
+and R_AARCH64_ABS64 is used for program addresses.
+
+A couple of ABS32s, both at 0 and elsewhere, interpreted correctly:
+
+CHECK: DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 3.3 ")
+CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000013] = "tmp.c")
+
+A couple of ABS64s similarly:
+
+CHECK: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000)
+CHECK: DW_AT_high_pc [DW_FORM_addr] (0x000000000000005c)

Propchange: llvm/trunk/test/DebugInfo/dwarfdump-aarch64.test
------------------------------------------------------------------------------
    svn:eol-style = native





More information about the llvm-commits mailing list