проблема кросс-ассемблера gcc - PullRequest
1 голос
/ 21 июня 2011

У меня есть кросс-компилятор bulit gcc с 'powerpc-eabi' в качестве TARGET в окнах, использующих cygwin.

При сборке следующего кода lis r4, %hi(IMMR_OFFSET) я получил следующие ошибки

.

init/code/sfiles/init_core.s:141: Error: bad expression

init/code/sfiles/init_core.s:141: Error: syntax error; found `h', expected `,'

init/code/sfiles/init_core.s:141: Error: junk at end of line: `hi(IMMR_OFFSET)'

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

Пожалуйста, помогите в этом направлении.

Значение IMMR_OFFSET определено в другом .h file, как показано ниже ....

.equ IMMR_OFFSET, 0xF0010000

Я использую следующую командудля сборки ....

c:/cygwin/home/cdot/powerpc/bin/powerpc-eabi-as -mbig-endian -g --defsym _NDI_=1

 --defsym _DBGR_ON_=1 --defsym DEBUG=1 --defsym _PARAM_DEBUG_=1 --defsym _NIU_=1

 -gdwarf-2 -I init/code/hfiles -o init/build/niu_ndi_dbgr_init_core.o init/code/
sfiles/init_core.s 2>init/build/niu_ndi_dbgr_init_core.err

1 Ответ

1 голос
/ 22 июня 2011

У меня такое чувство, что ваш источник сборки будет собираться с другим ассемблером ...

Некоторые ассемблеры PPC поддерживают синтаксис %hi(foo), но не ассемблер GNU (если нет какой-либо плохо документированной опции, о которой я не знаю).

Он также не распознает r4 как имя регистра, если вы не используете флаг -mregnames.

Эквивалентом в синтаксисе ассемблера GNU является

lis 4, IMMR_OFFSET@h

(или lis r4, IMMR_OFFSET@h также будет работать, если вы используете -mregnames).

Аналогично, %lo(foo) и %ha(foo) должны быть записаны как foo@l и foo@ha соответственно.

...