diff options
-rw-r--r-- | llvm/include/llvm/Object/RelocVisitor.h | 13 | ||||
-rw-r--r-- | llvm/test/DebugInfo/Inputs/arm-relocs.elf-arm | bin | 0 -> 3012 bytes | |||
-rw-r--r-- | llvm/test/DebugInfo/arm-relocs.test | 5 |
3 files changed, 18 insertions, 0 deletions
diff --git a/llvm/include/llvm/Object/RelocVisitor.h b/llvm/include/llvm/Object/RelocVisitor.h index c72db2ce412..a3aaf17f1d6 100644 --- a/llvm/include/llvm/Object/RelocVisitor.h +++ b/llvm/include/llvm/Object/RelocVisitor.h @@ -153,6 +153,14 @@ public: HasError = true; return RelocToApply(); } + } else if (FileFormat == "ELF32-arm") { + switch (RelocType) { + default: + HasError = true; + return RelocToApply(); + case llvm::ELF::R_ARM_ABS32: + return visitELF_ARM_ABS32(R, Value); + } } HasError = true; return RelocToApply(); @@ -325,6 +333,11 @@ private: return RelocToApply(Value + Addend, 8); } + RelocToApply visitELF_ARM_ABS32(RelocationRef R, uint64_t Value) { + int64_t Addend = getAddend32LE(R); + return RelocToApply(Value + Addend, 4); + } + }; } diff --git a/llvm/test/DebugInfo/Inputs/arm-relocs.elf-arm b/llvm/test/DebugInfo/Inputs/arm-relocs.elf-arm Binary files differnew file mode 100644 index 00000000000..4864c36256f --- /dev/null +++ b/llvm/test/DebugInfo/Inputs/arm-relocs.elf-arm diff --git a/llvm/test/DebugInfo/arm-relocs.test b/llvm/test/DebugInfo/arm-relocs.test new file mode 100644 index 00000000000..13e11f7043f --- /dev/null +++ b/llvm/test/DebugInfo/arm-relocs.test @@ -0,0 +1,5 @@ +RUN: llvm-dwarfdump %p/Inputs/arm-relocs.elf-arm | FileCheck %s + +; CHECK: debug_info contents +; CHECK: DW_TAG_enumeration_type +; CHECK-NEXT: DW_AT_name{{.*}} = "e1" |