From d64bc3ec0be609c6c82819facc84dce758c8fd0c Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Tue, 7 Jun 2016 10:34:33 +0000 Subject: [PATCH] [ARM] Incorrect relocation type for Thumb2 B.w The Thumb2 conditional branch B.W has a different encoding (T3) to the unconditional branch B.W (T4) as it needs to record . As the encoding is different the B.W is given a different relocation type. ELF for the ARM Architecture 4.6.1.6 (Table-13) states that R_ARM_THM_JUMP19 should be used for B.W. At present the MC layer is using the R_ARM_THM_JUMP24 from B.W. This change makes B.W use R_ARM_THM_JUMP19 and alters the existing test that checks for R_ARM_THM_JUMP24 to expect R_ARM_THM_JUMP19. llvm-svn: 271997 --- lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp | 2 ++ test/MC/ARM/thumb1-relax-bcc.s | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp b/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp index d618df446fc..4118fe8e8cd 100644 --- a/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp +++ b/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp @@ -123,6 +123,8 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target, Type = ELF::R_ARM_JUMP24; break; case ARM::fixup_t2_condbranch: + Type = ELF::R_ARM_THM_JUMP19; + break; case ARM::fixup_t2_uncondbranch: Type = ELF::R_ARM_THM_JUMP24; break; diff --git a/test/MC/ARM/thumb1-relax-bcc.s b/test/MC/ARM/thumb1-relax-bcc.s index 02fde2e040e..f17840ff763 100644 --- a/test/MC/ARM/thumb1-relax-bcc.s +++ b/test/MC/ARM/thumb1-relax-bcc.s @@ -9,4 +9,4 @@ _func1: @ CHECK-ERROR: unsupported relocation on symbol @ CHECK-ELF: 7f f4 fe af bne.w #-4 -@ CHECK-ELF-NEXT: R_ARM_THM_JUMP24 _func2 +@ CHECK-ELF-NEXT: R_ARM_THM_JUMP19 _func2