diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp index 0489caa69a30..c7739b4d792a 100644 --- a/llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp +++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp @@ -156,6 +156,14 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target, break; } break; + case FK_Data_2: + switch (Modifier) { + default: llvm_unreachable("unsupported modifier"); + case MCSymbolRefExpr::VK_None: + Type = ELF::R_ARM_ABS16; + break; + } + break; case FK_Data_4: switch (Modifier) { default: llvm_unreachable("Unsupported Modifier"); diff --git a/llvm/test/MC/ARM/reloc-abs16.s b/llvm/test/MC/ARM/reloc-abs16.s new file mode 100644 index 000000000000..c3c2b497b824 --- /dev/null +++ b/llvm/test/MC/ARM/reloc-abs16.s @@ -0,0 +1,13 @@ +@ RUN: llvm-mc -triple armv7-eabi -filetype obj -o - %s | llvm-objdump -r - \ +@ RUN: | FileCheck %s +@ RUN: llvm-mc -triple thumbv7-eabi -filetype obj -o - %s | llvm-objdump -r - \ +@ RUN: | FileCheck %s + + .syntax unified + + .short abs16_0 -32768 + .short abs16_1 +65535 + +@ CHECK: 0 R_ARM_ABS16 abs16_0 +@ CHECK: 2 R_ARM_ABS16 abs16_1 +