[llvm] r307713 - [ARM, ELF] Don't shift movt relocation offsets

Vitaly Buka via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 11 18:38:52 PDT 2017


Revert conflicts with r307730
maybe update of arm-mov-relocs.s is enough?

On Tue, Jul 11, 2017 at 5:32 PM, Vitaly Buka <vitalybuka at google.com> wrote:

> http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/6341/steps/check-lld%20asan/logs/stdio
>
> FAIL: lld :: ELF/arm-mov-relocs.s (207 of 1213)
> ******************** TEST 'lld :: ELF/arm-mov-relocs.s' FAILED ********************
> Script:
> --
> /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_msan/./bin/llvm-mc -filetype=obj -triple=armv7a-unknown-linux-gnueabi /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/tools/lld/test/ELF/arm-mov-relocs.s -o /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_msan/tools/lld/test/ELF/Output/arm-mov-relocs.s.tmp
> /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_msan/./bin/ld.lld --full-shutdown /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_msan/tools/lld/test/ELF/Output/arm-mov-relocs.s.tmp -o /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_msan/tools/lld/test/ELF/Output/arm-mov-relocs.s.tmp2
> /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_msan/./bin/llvm-objdump -d /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_msan/tools/lld/test/ELF/Output/arm-mov-relocs.s.tmp2 -triple=armv7a-unknown-linux-gnueabi | /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_msan/./bin/FileCheck /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/tools/lld/test/ELF/arm-mov-relocs.s
> /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_msan/./bin/llvm-mc -filetype=obj -triple=thumbv7a-unknown-linux-gnueabi /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/tools/lld/test/ELF/arm-mov-relocs.s -o /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_msan/tools/lld/test/ELF/Output/arm-mov-relocs.s.tmp3
> /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_msan/./bin/ld.lld --full-shutdown /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_msan/tools/lld/test/ELF/Output/arm-mov-relocs.s.tmp3 -o /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_msan/tools/lld/test/ELF/Output/arm-mov-relocs.s.tmp4
> /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_msan/./bin/llvm-objdump -d /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_msan/tools/lld/test/ELF/Output/arm-mov-relocs.s.tmp4 -triple=thumbv7a-unknown-linux-gnueabi | /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_msan/./bin/FileCheck /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/tools/lld/test/ELF/arm-mov-relocs.s
> --
> Exit Code: 1
>
> Command Output (stderr):
> --
> /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/tools/lld/test/ELF/arm-mov-relocs.s:42:11: error: expected string not found in input
> // CHECK: movt r4, #3
>           ^
> <stdin>:17:2: note: scanning from here
>  11024: 02 40 40 e3 movt r4, #2
>  ^
> <stdin>:17:21: note: possible intended match here
>  11024: 02 40 40 e3 movt r4, #2
>                     ^
>
>
> On Tue, Jul 11, 2017 at 2:07 PM, Martin Storsjo via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
>
>> Author: mstorsjo
>> Date: Tue Jul 11 14:07:10 2017
>> New Revision: 307713
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=307713&view=rev
>> Log:
>> [ARM, ELF] Don't shift movt relocation offsets
>>
>> For ELF, a movw+movt pair is handled as two separate relocations.
>> If an offset should be applied to the symbol address, this offset is
>> stored as an immediate in the instruction (as opposed to stored as an
>> offset in the relocation itself).
>>
>> Even though the actual value stored in the movt immediate after linking
>> is the top half of the value, we need to store the unshifted offset
>> prior to linking. When the relocation is made during linking, the offset
>> gets added to the target symbol value, and the upper half of the value
>> is stored in the instruction.
>>
>> This makes sure that movw+movt with offset symbols get properly
>> handled, in case the offset addition in the lower half should be
>> carried over to the upper half.
>>
>> This makes the output from the additions to the test case match
>> the output from GNU binutils.
>>
>> For COFF and MachO, the movw/movt relocations are handled as a pair,
>> and the overflow from the lower half gets carried over to the movt,
>> so they should keep the shifted offset just as before.
>>
>> Differential Revision: https://reviews.llvm.org/D35242
>>
>> Modified:
>>     llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
>>     llvm/trunk/test/MC/ARM/elf-movt.s
>>
>> Modified: llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AR
>> M/MCTargetDesc/ARMAsmBackend.cpp?rev=307713&r1=307712&r2=307713&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp (original)
>> +++ llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp Tue Jul 11
>> 14:07:10 2017
>> @@ -392,7 +392,7 @@ unsigned ARMAsmBackend::adjustFixupValue
>>    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 @@ unsigned ARMAsmBackend::adjustFixupValue
>>      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: {
>>
>> Modified: llvm/trunk/test/MC/ARM/elf-movt.s
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/
>> elf-movt.s?rev=307713&r1=307712&r2=307713&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/test/MC/ARM/elf-movt.s (original)
>> +++ llvm/trunk/test/MC/ARM/elf-movt.s Tue Jul 11 14:07:10 2017
>> @@ -14,8 +14,12 @@ barf:
>>         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 @@ barf:
>>  @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
>> + at OBJ-NEXT: 8:             d2 04 00 e3     movw    r0, #1234
>> + at OBJ-NEXT: 00000008:         R_ARM_MOVW_ABS_NC    extern_symbol
>> + at OBJ-NEXT: c:             d2 04 40 e3     movt    r0, #1234
>> + at OBJ-NEXT: 0000000c:         R_ARM_MOVT_ABS       extern_symbol
>>
>>  @THUMB:      Disassembly of section .text:
>>  @THUMB-NEXT: barf:
>> @@ -30,3 +38,7 @@ barf:
>>  @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
>> + at THUMB-NEXT: 8:             40 f2 d2 40     movw    r0, #1234
>> + at THUMB-NEXT: 00000008:         R_ARM_THM_MOVW_ABS_NC  extern_symbol
>> + at THUMB-NEXT: c:             c0 f2 d2 40     movt    r0, #1234
>> + at THUMB-NEXT: 0000000c:         R_ARM_THM_MOVT_ABS     extern_symbol
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170711/e89c0851/attachment-0001.html>


More information about the llvm-commits mailing list