Index: llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp =================================================================== --- llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp +++ llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp @@ -392,7 +392,7 @@ case FK_SecRel_4: return Value; case ARM::fixup_arm_movt_hi16: - if (!IsPCRel) + if (!IsPCRel && !STI->getTargetTriple().isOSBinFormatELF()) Value >>= 16; LLVM_FALLTHROUGH; case ARM::fixup_arm_movw_lo16: { @@ -404,7 +404,7 @@ return Value; } case ARM::fixup_t2_movt_hi16: - if (!IsPCRel) + if (!IsPCRel && !STI->getTargetTriple().isOSBinFormatELF()) Value >>= 16; LLVM_FALLTHROUGH; case ARM::fixup_t2_movw_lo16: { Index: llvm/trunk/test/MC/ARM/elf-movt.s =================================================================== --- llvm/trunk/test/MC/ARM/elf-movt.s +++ llvm/trunk/test/MC/ARM/elf-movt.s @@ -14,8 +14,12 @@ movw r0, :lower16:GOT-(.LPC0_2+8) movt r0, :upper16:GOT-(.LPC0_2+8) .LPC0_2: + movw r0, :lower16:extern_symbol+1234 + movt r0, :upper16:extern_symbol+1234 @ ASM: movw r0, :lower16:(GOT-(.LPC0_2+8)) @ ASM-NEXT: movt r0, :upper16:(GOT-(.LPC0_2+8)) +@ ASM: movw r0, :lower16:(extern_symbol+1234) +@ ASM-NEXT: movt r0, :upper16:(extern_symbol+1234) @OBJ: Disassembly of section .text: @OBJ-NEXT: barf: @@ -23,6 +27,10 @@ @OBJ-NEXT: 00000000: R_ARM_MOVW_PREL_NC GOT @OBJ-NEXT: 4: f4 0f 4f e3 movt r0, #65524 @OBJ-NEXT: 00000004: R_ARM_MOVT_PREL GOT +@OBJ-NEXT: 8: d2 04 00 e3 movw r0, #1234 +@OBJ-NEXT: 00000008: R_ARM_MOVW_ABS_NC extern_symbol +@OBJ-NEXT: c: d2 04 40 e3 movt r0, #1234 +@OBJ-NEXT: 0000000c: R_ARM_MOVT_ABS extern_symbol @THUMB: Disassembly of section .text: @THUMB-NEXT: barf: @@ -30,3 +38,7 @@ @THUMB-NEXT: 00000000: R_ARM_THM_MOVW_PREL_NC GOT @THUMB-NEXT: 4: cf f6 f4 70 movt r0, #65524 @THUMB-NEXT: 00000004: R_ARM_THM_MOVT_PREL GOT +@THUMB-NEXT: 8: 40 f2 d2 40 movw r0, #1234 +@THUMB-NEXT: 00000008: R_ARM_THM_MOVW_ABS_NC extern_symbol +@THUMB-NEXT: c: c0 f2 d2 40 movt r0, #1234 +@THUMB-NEXT: 0000000c: R_ARM_THM_MOVT_ABS extern_symbol