首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >llvm-gcc汇编器: LDR语法

llvm-gcc汇编器: LDR语法
EN

Stack Overflow用户
提问于 2012-02-21 17:04:00
回答 3查看 2K关注 0票数 2

这段代码在gcc上编译得很好,但是当使用llvm (llvm-gcc)时,它显示为"constant expression expected" on the line with ldr

问题出在语法上:如何指定数组所在的位置?我不想将位移硬编码为bytes:ldr r7, [pc, #some_shift],而是使用文字来保持代码的整洁和安全。

你知道怎么让它工作吗?

代码语言:javascript
复制
.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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-13 04:14:17

试着改变

代码语言:javascript
复制
ldr r7, =maskTable

代码语言:javascript
复制
ldr r7, maskTable

并删除

代码语言:javascript
复制
.data

部分。.data版块处理,gcc < 4.6似有bug/缺失能力

票数 2
EN

Stack Overflow用户

发布于 2012-03-13 16:13:42

您可以尝试以下两种方法:

将表的地址更改为adr r7, maskTable.

  • Store
  1. ,并手动加载,如下所示:

代码语言:javascript
复制
.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_adr           // 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_adr:
    .word   maskTable

maskTable:

    .word  0x00000000, 0x00000000, 0x00000000, 0x00000000
    .word  0x0000FFFF, 0x00000000, 0x00000000, 0x00000000
    .word  0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000
票数 1
EN

Stack Overflow用户

发布于 2012-03-12 18:19:24

我自己也不知道答案,但如果是我,我会看一些编译过的C代码,看看编译器是如何做到的。确保编译器没有处于PIC模式,否则它会做一些更复杂和不必要的事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9374703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档