aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2011-12-22 21:36:43 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2011-12-22 21:36:43 +0000
commitb975c27adc2371a9666fa9b8cecd9487966ec5b1 (patch)
treef861fd4481b75eb4b4b60a800118691ad4f1deac
parenta816bf7c0d00f5335faa92741945e5c622147fdf (diff)
Fix incorrect relocation generation. Patch by Kristof Beyls.
Fixes PR11214. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147180 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp9
-rw-r--r--test/MC/ARM/elf-thumbfunc-reloc.s23
2 files changed, 24 insertions, 8 deletions
diff --git a/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp b/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp
index 4ffaa52bd8..4f4b86a7e7 100644
--- a/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp
+++ b/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp
@@ -209,14 +209,7 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
break;
case ARM::fixup_arm_thumb_bl:
case ARM::fixup_arm_thumb_blx:
- switch (Modifier) {
- case MCSymbolRefExpr::VK_ARM_PLT:
- Type = ELF::R_ARM_THM_CALL;
- break;
- default:
- Type = ELF::R_ARM_NONE;
- break;
- }
+ Type = ELF::R_ARM_THM_CALL;
break;
}
} else {
diff --git a/test/MC/ARM/elf-thumbfunc-reloc.s b/test/MC/ARM/elf-thumbfunc-reloc.s
new file mode 100644
index 0000000000..4a311dd511
--- /dev/null
+++ b/test/MC/ARM/elf-thumbfunc-reloc.s
@@ -0,0 +1,23 @@
+@@ test st_value bit 0 of thumb function
+@ RUN: llvm-mc %s -triple=arm-freebsd-eabi -filetype=obj -o - | \
+@ RUN: elf-dump | FileCheck %s
+
+
+ .syntax unified
+ .text
+ .globl f
+ .align 2
+ .type f,%function
+ .code 16
+ .thumb_func
+f:
+ push {r7, lr}
+ mov r7, sp
+ bl g
+ pop {r7, pc}
+
+@@ make sure an R_ARM_THM_CALL relocation is generated for the call to g
+@CHECK: ('_relocations', [
+@CHECK: (('r_offset', 0x00000004)
+@CHECK-NEXT: ('r_sym', 0x{{[0-9a-fA-F]+}})
+@CHECK-NEXT: ('r_type', 0x0a)