clang / ARM汇编-误解的绝对分支

问题描述 投票:1回答:1

我正在一个项目中,代码被链接到现有的静态链接的二进制文件中。因此,这样的带有绝对分支的代码是必要的:

.arm

.globl TestThunk
    TestThunk:
    mov     r0, #0
    b       0x01001234

gcc输出:

00000000 <TestThunk>:
   0:   e3a00000    mov r0, #0
   4:   eafffffe    b   1001234 <*ABS*0x1001234>

with

arm-none-eabi-gcc -march=armv6k -mtune=mpcore -x assembler-with-cpp -c test.s -o test_gcc.o

clang输出:

00000000 <TestThunk>:
   0:   e3a00000    mov r0, #0
   4:   ea40048d    b   1001240 <TestThunk+0x1001240>

with

clang --target=armv6k-none-eabihf -mcpu=mpcore -mtune=mpcore -x assembler-with-cpp -c test.s -o test_clang.o

您可以看到gcc发出了绝对的重定位,就像我想要的那样。clang虽然会发出相对于目标文件本身的重定位,这是错误的。

我是否可以使用特定的编译器标志或汇编器指令来强制clang发出绝对重定位?

我知道我可以为现有二进制文件创建带有符号的链接脚本,但是我不想为现有代码库创建链接脚本。

assembly gcc arm clang
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.