这段代码在 gcc 上编译得很好,但是当使用 llvm (llvm-gcc) 时,它会在 ldr
行上显示 “constant expression Expected”
问题是语法:如何指定数组所在的位置?我不想对字节位移进行硬编码:ldr r7, [pc, #some_shift]
,而是使用文字来保持代码干净和安全。
知道如何让它发挥作用吗?
.globl func_name
func_name:
push {r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
//[Some stripped code]
add r6, r6, sl, lsl #2
sub ip, ip, sl
ldr r7, =maskTable // Here it crashes
add sl, sl, #4 @ 0x4
// Some stripped code here
mov r0, #0 @ 0x0 // return 0
pop {r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
.word 0x00000000
.data
.align 5
maskTable:
.word 0x00000000, 0x00000000, 0x00000000, 0x00000000
.word 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000
.word 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000
最佳答案
尝试改变
ldr r7, =maskTable
到
ldr r7, maskTable
并删除
.data
部分。这似乎是 gcc < 4.6 处理 .data
部分的错误/缺失功能
关于gcc - llvm-gcc 汇编器 : LDR syntax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9374703/