2016-11-22 87 views
0

arm926ejsのために書かれた単純なRTOSを移植して、Cortex-A9を処理しようとしました。コンテキストスイッチを参照しながら、私はコードをコンパイルしようとすると、私はARMアセンブリ内のSTRとLDR命令

Error: internal_relocation (type: OFFSET_IMM) not fixed up 

エラーを取得し、

_userIntrStackPtr: 
    .word 0x0 

STR  sp,_userIntrStackPtr 

LDR  r0,__userStackPtr2Ptr 

、次の手順に出会いました。しかし、誰かが上記の命令を説明していただけますか?私が他のコードを参照したときも、同様の指示がありました。

LDR  r0,=__userStackPtr2Ptr 

どのような違いがありますか?これらのラベルをstrとldr命令でどのように使用できますか? 私は組立が良くありません。助けてください。

答えて

2

命令の指定された形式は、PC相対アドレッシングを使用します。シンボルが同じセクションにあるようにオフセットが分かっているなど、いくつかのアセンブラで制限があります。上記のコードは、gnuアセンブラ2.24.51.20131021でアセンブルします。私はあなたが実際のMCVEを提供しなかったと推測しています。

質問の2番目の部分については、がアドレスをロードするので、メモリ操作を実行するには別のLDR/STRが必要です。例:

LDR r0, =_userIntrStackPtr 
STR sp, [r0] 
LDR r0, =__userStackPtr2Ptr 
LDR r0, [r0] 
+0

返信いただきありがとうございます。私はセクションを変更し、エラーはなくなりました。リンカーのすべての.textセクションに属していましたが、1つは.textに、残りは.text.vectorsにありました。私は.textとそのコンパイル済みの両方に変更しました。私は作業をテストしていませんが、エラーはなくなりました。 – Ajeesh

関連する問題