此代碼編譯海合會就好,但使用LLVM(LLVM-GCC)時,與ldr
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
你問LLVM的郵件列表上? LLVM 3.1將具有ARM彙編器,但同時它們是解決LLVM行爲問題的最佳資源。或者閱讀源代碼,當然。 http://llvm.org/docs/CodeGenerator.html#targetfeatures表示ARM的asm解析器不被支持,所以它使用gas代碼。 – 2012-03-10 15:37:13
你能告訴你正在發佈的命令來構建這些代碼嗎?像'gcc -fpic hello.c'一樣? – 2012-03-12 20:20:03
@vasile任何運氣?我想知道你的構建命令,以便我可以準確地重現你的情況 – 2012-03-13 06:51:38