clang 无法从 PowerPC 解析 LR 寄存器
clang fails to parse the LR register from PowerPC
代码:
.globl main
main:
mfspr 0, lr
clang 内部汇编程序认为 lr 是一个符号,而不是寄存器:
$ clang --target=ppc32 regs.s -c; nm regs.o
U lr
00000000 T main
有人知道怎么回事吗?
使用 %lr
根据 llvm-objdump -d
得到 7c 08 02 a6 mflr 0
,没有未解析的 lr
符号。
gcc -mregnames
将 C 编译为 PPC asm 使用类似 %r3
的名称:https://godbolt.org/z/7dMnK74vc
Clang 不支持该选项;除非有不同名称的类似选项,否则 clang 的 asm 输出总是使用像 add 3, 3, 4
这样只有数字的指令。但我猜 clang / LLVM 的汇编程序支持与 GAS 相同的“符号”寄存器名称,并且这些名称以 %
开头,大概是为了将它们与符号区分开来。 (同样,以数字开头意味着它们不能是符号。)
代码:
.globl main
main:
mfspr 0, lr
clang 内部汇编程序认为 lr 是一个符号,而不是寄存器:
$ clang --target=ppc32 regs.s -c; nm regs.o
U lr
00000000 T main
有人知道怎么回事吗?
使用 %lr
根据 llvm-objdump -d
得到 7c 08 02 a6 mflr 0
,没有未解析的 lr
符号。
gcc -mregnames
将 C 编译为 PPC asm 使用类似 %r3
的名称:https://godbolt.org/z/7dMnK74vc
Clang 不支持该选项;除非有不同名称的类似选项,否则 clang 的 asm 输出总是使用像 add 3, 3, 4
这样只有数字的指令。但我猜 clang / LLVM 的汇编程序支持与 GAS 相同的“符号”寄存器名称,并且这些名称以 %
开头,大概是为了将它们与符号区分开来。 (同样,以数字开头意味着它们不能是符号。)