2012-03-16 20 views
1

我試圖編譯一些彙編代碼(如Theora格式庫的一部分),使用的XCode 4.2和蘋果LLVM compiller 3.0(無拇指),但也有一些錯誤的LDR(NE)說明:iPhone組裝,帶LDR編譯錯誤參數

.text 
.set DEC_OPB, 0xC944 
ldrne r2, =258014  @ ERROR: Unsupported relocation on symbol L0. ERROR: Undefined local symbol 0 (0f or 0b) 
ldr r6, =0x00800080  @ ERROR: Unsupported relocation on symbol L0. 
ldr r5, =DEC_OPB  @ ERROR: Unsupported relocation on symbol L0. ERROR: Undefined local symbol 0 (0f or 0b) 
ldr r5, DEC_OPB   @ ERROR: Bad immediate value for offset (51024). ERROR: Unsupported relocation on symbol (null) 

是否有可能用一些其他指令覆蓋這些行?或者用常量替換它們? 請幫忙,因爲這個帖子llvm-gcc assembler: LDR syntax沒有幫我解決這個問題。

回答

1
.text 
.set DEC_OPB, 0xC944 
ldrne r2,r2num 
ldr r6,r6num 
ldr r5,r5num 
... 

r2num: .word 258014 
r6num: .word 0x00800080 
r5num: .word DEC_OPB 
當你這樣做的LDR R2

,爲0x1234,彙編查找附近的地方到另一個地方,這個數字,然後使用PC相對地址加載它。如果彙編程序找不到一個地方,你會得到一個錯誤,我不知道這是什麼投訴。聽起來不像是正確的錯誤。上述兩種解決方案是您明確地放置值並且不依賴彙編程序的上述方法,或者將.pool或其他類似的指令放在分支影子或其他類似的地方,您不會執行它們來鼓勵彙編程序使用它放置這些常量。

b somewhere 
.pool 

我懷疑從錯誤消息可能會發生其他事情。發佈回覆或編輯或問題,如果是這樣的話。

+0

感謝斯蒂芬,我不是意識到裝配是不同的,我要提的是,這是一個彙編功能/細微差別,這也不是一個應該依靠,尤其因爲它涉及彙編添加的東西到你的代碼,你輸了那一對一的彙編語言的東西。 – 2012-03-17 01:47:55

4

iOS的彙編器不支持=258014僞直接的形式。您需要將其替換爲來自常量池的負載,或者將它們分爲mov + movt

你也應該提交錯誤報告,請求支持添加。