8.4.2 __ep_data

__ep_dataの値は次の優先順位で決定します。

(1)

アプリケーション中で__ep_dataを定義している場合は,その値で決定します。

注意

コンパイラは,__ep_dataが2または4バイト整列されている前提でコードを生成します。このため,アプリケーション中で__ep_dataを定義する場合は,値が4の倍数になるようにしてください。

 

(2)

アプリケーション中に__ep_dataの参照だけがある場合,最適化リンカ(rlink)が,次の優先順位で自動的に,__ep_dataの値を決定します。

(2-1) tdata,tdata4,tbss4,tdata5,tbss5,tdata7,tbss7,tdata8,tbss8のいずれかの属性のセクションが

存在する場合,次の優先順位で,その属性を持つ全てのセクションの最小アドレス

(a) tdata属性のセクション

(b) tdata4またはtbss4属性のセクション

(c) tdata5またはtbss5属性のセクション

(d) tdata7またはtbss7属性のセクション

(e) tdata8またはtbss8属性のセクション

注意

上記の属性のセクションを使用する場合は,上記の順序で配置してください。sld,sst命令は符号なしのオフセットを持ちます。このため,低優先度のセクションを,高優先度のセクションより小さいアドレスに配置すると,低優先度のセクションをsld,sst命令で参照できません。この場合,リンク時エラーになります。

(2-2) edataまたはebss属性のセクションが存在する場合,それら全てのセクションの最小アドレスと

最大アドレスの中間値

(2-3) edata23またはebss23属性のセクションが存在する場合,それら全てのセクションの最小アドレスと

最大アドレスの中間値

(2-4) edata32またはebss32属性のセクションが存在する場合,それら全てのセクションの最小アドレスと

最大アドレスの中間値

(2-5) 上記のいずれのセクションも存在せず,__ep_dataの参照だけがある場合,ゼロ

 

ただし,定義しようとした値が奇数値である場合,その値に1を加えます。

また,コンパイラは__ep_dataを直接参照するコードを生成しないので,通常,__ep_dataの参照とはスタートアップ・ルーチン内で,__ep_dataの値をエレメント・ポインタ・レジスタ(r30)に設定する処理を指します。

 

(3)

アプリケーション中に__ep_dataの定義や参照が無い場合,最適化リンカ(rlink)は__ep_dataを生成しません。この状態でEP相対セクションへの参照コードがあると,リンク時エラーになります。

Undefined external symbol "EP-symbol (__ep_data)" referenced in "FILE"