开发者

gcc cross assembler problem

开发者 https://www.devze.com 2023-03-14 19:58 出处:网络
I have bulit gcc cross compiler with \'powerpc-eabi\' as TARGET in windows using cygwin. When assembling the follwing code lis r4, %hi(IMMR_OFFSET), I was getting the following

I have bulit gcc cross compiler with 'powerpc-eabi' as TARGET in windows using cygwin.

When assembling the follwing code lis r4, %hi(IMMR_OFFSET), I was getting the following

errors.

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)'

I would like to know why the above errors appear for every lis instruction similar to above.

Please help in this direction.

The value of IMMR_OFFSET is defined in another .h file as below....

.equ IMMR_OFFSET, 0xF0010000

I am using the follwing command for assembly....

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


I have a feeling that your assembly source is expecting to be built with a different assembler...

Some PPC assemblers do support the %hi(foo) syntax, but not the GNU assembler (unless there is some poorly documented option that I'm not aware of).

It also won't recognise r4 as a register name unless you use the -mregnames flag.

The equivalent in the GNU assembler syntax is

lis 4, IMMR_OFFSET@h

(or lis r4, IMMR_OFFSET@h will also work if you use -mregnames).

Similarly, %lo(foo) and %ha(foo) would need to be written as foo@l and foo@ha respectively.

0

精彩评论

暂无评论...
验证码 换一张
取 消