8.24 相対ベースアドレスのロード領域と ZI 実行領域を含むスキャッタファイル

ロード領域に ゼロ初期化(ZI)データを配置し、次のロード領域に相対ベースアドレスを使用する例を考えます。

ロード領域 LR1 に ZI データを配置し、次のロード領域 LR2 に相対ベースアドレスを使用するには、たとえば、次のようにします。

LR1 0x8000 {     er_progbits +0     {         *(+RO,+RW) ; ロード領域にスペースを確保する     }     er_zi +0     {         *(+ZI) ; ロード領域にスペースを確保しない     } } LR2 +0 ; LR1 の直後のロード領域 {     er_moreprogbits +0     {         file1.o(+RO) ; ロード領域にスペースを確保する     } }

リンカは、ZI データに合わせて LR2 のベースアドレスを調整することをしないため、実行領域 er_zi は、実行領域 er_moreprogbits とオーバラップします。リンク時には、これが原因でエラーが生成されます。

これを解決するには、ImageLimit() 関数に ZI 実行領域の名前を指定して、LR2 のベースアドレスを計算します。以下に例を示します。

LR1 0x8000 {     er_progbits +0     {         *(+RO,+RW) ; ロード領域にスペースを確保する     }     er_zi +0     {         *(+ZI) ; ロード領域にスペースを確保しない     } } LR2 ImageLimit(er_zi) ; LR2 のアドレスを er_zi の上限に設定 {     er_moreprogbits +0     {         file1.o(+RO) ; ロード領域にスペースを確保する     } }
関連する概念
8.23 スキャッタファイルで使用する実行アドレスの組み込み関数
8.20 スキャッタファイル内の式の評価
8.21 スキャッタファイルでの式の使用
8.22 スキャッタファイル内の式の規則
8.23 スキャッタファイルで使用する実行アドレスの組み込み関数
関連する参考文書
8.2 スキャッタファイルの構文
8.4 ロード領域記述の構文
8.7 実行領域の記述に含まれている構文
6.4 Image$$ 実行領域シンボル
非機密扱いPDF file icon PDF 版ARM DUI0474JJ
Copyright © 2010-2013 ARM.All rights reserved.