gcc交叉汇编问题

时间:2011-06-21 11:21:05

标签: gcc cross-compiling

我使用cygwin在windows中使用'powerpc-eabi'作为TARGET来构建gcc交叉编译器。

在汇编下面的代码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

我正在使用follwing命令进行汇编....

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 个答案:

答案 0 :(得分:1)

我感觉你的汇编源代码是用不同的汇编程序构建的......

有些PPC汇编程序确实支持%hi(foo)语法,但不支持GNU汇编程序(除非有一些我不知道的文档记录很差)。

除非您使用r4标志,否则它也不会将-mregnames识别为注册名称。

GNU汇编语法中的等价物是

lis 4, IMMR_OFFSET@h

(或lis r4, IMMR_OFFSET@h如果您使用-mregnames)也会有效。

同样,%lo(foo)%ha(foo)需要分别写为foo@lfoo@ha