8.4.1 __gp_data

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

(1)

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

注意

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

 

(2)

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

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

最大アドレスの中間値

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

最大アドレスの中間値

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

最大アドレスの中間値

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

 

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

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

 

(3)

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

Undefined external symbol "GP-symbol (__gp_data)" referenced in "FILE"