Сборка iPhone, ошибка компиляции с параметрами LDR - PullRequest
1 голос
/ 16 марта 2012

Я пытаюсь скомпилировать некоторый код сборки (как часть библиотеки Theora), используя XCode 4.2 и Apple LLVM compiller 3.0 (без большого пальца), но в инструкциях ldr (ne) есть некоторые ошибки:

.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 ассемблер: синтаксис LDR не помог мне решить эту проблему.

Ответы [ 2 ]

4 голосов
/ 16 марта 2012

Ассемблер iOS не поддерживает псевдо-немедленную форму =258014.Вам нужно будет либо заменить их нагрузками из постоянного пула, либо разбить их на mov + movt.

. Вы также должны подать отчет об ошибке, чтобы попросить добавить поддержку.

1 голос
/ 16 марта 2012
.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, ассемблер ищет место поблизости, чтобы разместить это число, а затем использует относительный адрес компьютера для его загрузки. Если ассемблер не может найти место, где вы получаете ошибку, я не знаю, была ли это причина жалобы. не похоже на правильную ошибку. Выше приведены два решения, в которых вы явно размещаете значения и не полагаетесь на ассемблер, либо помещаете .pool или другую подобную директиву в тень ветви или в другое место, через которое вы не будете выполнять, чтобы заставить ассемблер использовать его поместите эти виды констант.

b somewhere
.pool

Я подозреваю из сообщения об ошибке что-то еще может происходить. оставьте ответ, отредактируйте или задайте вопрос, если это так.

...