2011-06-21 20 views
1

私はcygwinを使用してWindowsでTARGETとして 'powerpc-eabi'を持つbulit gccクロスコンパイラを持っています。 follwingコードlis r4, %hi(IMMR_OFFSET)を組み立てる際gccクロスアセンブラ問題

、私は次の

エラーを得ていました。

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

私は解決策を手助けすることはできませんが、IMMR_OFFSETはあなたの問題に関係していないことに注意してください。コンパイラは、 'lis r4、%'の後にカンマが必要だと言います...言い換えれば、 '%hi(...)'がこの文脈で何を意味するのかを理解していません。 –

答えて

1

私はその気持ちを持っていますあなたのアセンブリソースは別のアセンブラでビルドされる予定です...

一部のPPCアセンブラは、%hi(foo)構文をサポートしていますが、GNUアセンブラはサポートしていません(私が気づいていない、文書化されていないオプションがいくつかある場合を除いて)。

-mregnamesフラグを使用しない限り、レジスタ名としてr4も認識されません。 GNUアセンブラ構文で

同等は

lis 4, [email protected] 

である(またはlis r4, [email protected]あなたが-mregnamesを使用している場合も動作します)。

同様に、%lo(foo)および%ha(foo)は、それぞれ[email protected]および[email protected]と表記する必要があります。

関連する問題