gcc - llvm-gcc 汇编器 : LDR syntax

标签 gcc assembly arm llvm

这段代码在 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/

相关文章:

c++ - 如何在 NaCl 中为 ARM 提供不同的实现

android - Playstore 会拒绝带有 armeabi-v7a、arm64-v8a、x86 但不支持 x86-64 的应用程序吗?

linux - 使用arm-linux-androideabi-gcc和android ndk编译对象时出现问题

c - GCC 相关搜索目录

linux - 查询 : Why am I getting a clang error on my OSX terminal?

loops - 汇编语言 : difference between ja and jg?

c - 将FPU与C内联汇编一起使用

assembly - PowerPC组件立即加载

linux - 如何将键盘连接到 tinyX 服务器

c - 臂组件 memset 更换