From 4609ef5d02e15ca4d9a2f2d2235c4310b4ed0d97 Mon Sep 17 00:00:00 2001 From: Mikhail Maltsev Date: Wed, 26 Jun 2019 10:48:40 +0000 Subject: [PATCH] [ARM] Handle fixup_arm_pcrel_9 correctly on big-endian targets Summary: The getFixupKindContainerSizeBytes function returns the size of the instruction containing a given fixup. Currently fixup_arm_pcrel_9 is not handled in this function, this causes an assertion failure in the debug build and incorrect codegen in the release build. This patch fixes the problem. Reviewers: ostannard, simon_tatham Reviewed By: ostannard Subscribers: javed.absar, kristof.beyls, hiraditya, pbarrio, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D63778 llvm-svn: 364404 --- lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp | 1 + test/MC/ARM/fixup-pcrel9.s | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 test/MC/ARM/fixup-pcrel9.s diff --git a/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp b/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp index a1eeeab2841..aeab5be78ab 100644 --- a/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp +++ b/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp @@ -1000,6 +1000,7 @@ static unsigned getFixupKindContainerSizeBytes(unsigned Kind) { case ARM::fixup_arm_pcrel_10_unscaled: case ARM::fixup_arm_ldst_pcrel_12: case ARM::fixup_arm_pcrel_10: + case ARM::fixup_arm_pcrel_9: case ARM::fixup_arm_adr_pcrel_12: case ARM::fixup_arm_uncondbl: case ARM::fixup_arm_condbl: diff --git a/test/MC/ARM/fixup-pcrel9.s b/test/MC/ARM/fixup-pcrel9.s new file mode 100644 index 00000000000..620b6799a07 --- /dev/null +++ b/test/MC/ARM/fixup-pcrel9.s @@ -0,0 +1,18 @@ +// RUN: llvm-mc -triple=armebv8.2a-eabi -filetype=obj < %s | llvm-objdump -s - | FileCheck %s --check-prefix=CHECK-BE +// RUN: llvm-mc -triple=armv8.2a-eabi -filetype=obj < %s | llvm-objdump -s - | FileCheck %s --check-prefix=CHECK-LE + + .text + .fpu crypto-neon-fp-armv8 + .arch_extension fp16 + +.section s_pcrel_9,"ax",%progbits +// CHECK-BE-LABEL: Contents of section s_pcrel_9 +// CHECK-LE-LABEL: Contents of section s_pcrel_9 +// CHECK-BE: 0000 ed9f0902 +// CHECK-LE: 0000 02099fed + vldr.16 s0, .LCPI0_0 + nop + bx lr +.LCPI0_0: + .short 28012 +