llvm-gcc 汇编器:LDR 语法 [英] llvm-gcc assembler: LDR syntax

查看:33
本文介绍了llvm-gcc 汇编器:LDR 语法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这段代码在 gcc 上编译得很好,但是当使用 llvm (llvm-gcc) 时,它会在 ldr

"constant expression expected">

问题在于语法:如何指定数组所在的位置?我不想以字节为单位对位移进行硬编码:ldr r7, [pc, #some_shift] 而是使用文字来保持代码的清洁和安全.

知道如何让它工作吗?

.globl func_name功能名称:推 {r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}//[一些剥离的代码]添加 r6, r6, sl, lsl #2子 ip, ip, slldr r7, =maskTable//这里崩溃了添加 sl, sl, #4 @ 0x4//这里有一些剥离的代码mov r0, #0 @ 0x0//返回 0流行 {r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}.word 0x00000000.数据.对齐 5掩码表:.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

This code compiles just fine on gcc, but when using llvm (llvm-gcc), it says "constant expression expected" on the line with ldr

The problem is the syntax: How do I specify the place where my array is? I do not want to hard-code the displacement in bytes: ldr r7, [pc, #some_shift] but to use a literal to keep the code clean and safe.

Any idea how to make it working?

.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

解决方案

Try changing

ldr r7, =maskTable

to

ldr r7, maskTable

and remove

.data

section. It seems to be a bug/missing capability of gcc < 4.6 to deal with .data section

这篇关于llvm-gcc 汇编器:LDR 语法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆