22

私はこれを行う方法を広範囲に検索しましたが、答えを見つけることができませんでした。

私のメモリレイアウトは次のとおりです。

Fake Address | Section
     0       |  text
     7       |  relocate
    15       |  bss
    23       |  stack

スタックの最後にヒープを配置します。これは成長し、スタックは私が使用しているARMチップの完全な下降スタックです。

今、私がしたいことは、1 つのセクションを配置することです.persist。RAM の最後に常駐させ、これをリンカー スクリプトにプログラムしたいと考えています。ただし、この.persistセクションのサイズは私が定義したものではなく、含まれるシンボルからコンパイラによって計算されます。

これまでのところ、私はそれを行う良い方法を思い付いていません。RAM の開始アドレスと SIZE を知っているので、セクションのサイズが分かっていれば、セクションをどこに移動する必要があるかを計算するのは簡単です。ただし、GNU リンカーのドキュメント (pg 74)によると、次のようです。

SIZEOF(section) 指定されたセクションが割り当てられている場合、そのセクションのサイズをバイト単位で返します。これが評価されるときにセクションが割り当てられていない場合、リンカーはエラーを報告します。

そのため、リンカースクリプトでセクションのサイズを計算できません(配置/割り当ての前にサイズを計算したいため)。

これを行う良い方法を知っている人はいますか?

4

5 に答える 5