[過去ログ] ゲームプログラミング相談室【Part5】 (970レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
8(6): 02/11/06 20:50 ID:mrrgYg+p(1) AAS
某 MIPS 系のマシンで STL コンテナを使おうとすると、リンク時に "relocation
truncated"と怒られる。どうも template がらみでできる weak object の配置に
失敗してるみたいだけど、解決策知ってる人います?
(確かに MIPS だとグローバルポインタ相対でアクセスするから、配置する箇所に
よってはグローバル変数といえどアクセスできなくなるよな。ld に喰わせるスクリ
プトファイル書けばいいのか?)
9(1): [age] 02/11/07 01:44 ID:??? AAS
>>8
ふつう -G0
ってコンパイラ何使ってるかくらい書けヨ!
11: 8 02/11/07 21:47 ID:??? AAS
>>9
Thanks
> ってコンパイラ何使ってるかくらい書けヨ!
確かに。想像の通り gcc です。
14(1): 8 02/11/08 21:31 ID:??? AAS
STL の件だけど、要するに __malloc_alloc_oom_handler などの static 変数
が .sdata セクションに配置されるのが問題なんだね。
教えてもらった -G0 を使って「全部 .data セクションに置く」方法に加えて、
問題になってる変数に個別に __attribute__((section(".data"))) 指定する
方法でも動きました。
しかし、何で __malloc_alloc_oom_handler などのクラステンプレート中で
定義された static 変数に限って .sdata に配置できないのかは謎です。
.sdata や.sbss 使い切るほど static 変数定義してないんだけど。
18(1): 8 02/11/09 01:16 ID:??? AAS
>>16
vtbl が配置されるセクションと、クラステンプレートの static 変数が配置される
セクションが違うと、何か問題がある? あと、今回の件に関しては STL のコン
テナが利用する allocator の話なんで、仮想関数は出てこないはず。
そもそも .sdata, .sbss に関しては、こういうことだと理解してるんだが、勘違い
があったら指摘して下さいな。
1. EE-core (っつーか MIPS) は 32bit 固定長命令を採用しており、アドレス
空間も 32bit ある。
2. したがって 1 命令で 32bit の任意のアドレスにアクセスすることはできない。
どうしてもアクセスしたければ
a) まず 16bit をレジスタの上位アドレスに読み込み
b) 次にオフセット付きメモリ参照命令を使って、メモリにアクセス
と 2 命令使う。
3. それだと効率が悪いので、汎用レジスタの一つ ($gp) をグローバルポインタ
として固定した値を入れて利用。static なデータは $gp から 16bit 相対で
アクセスできる範囲に入れておく。(これが .sdata と .sbss)
当然 16bit 相対でアクセスできる範囲は限られるから、そこから溢れたデータ
は効率悪くても 2 の方法でアクセスする必要がある。gcc は標準では 8byte
以下のデータは .sdata, .sbss セクションに、それ以上のデータは .data, .bss
セクションに格納する。この閾値は、必要に応じて -G オプションで変更できる。
19: 8 02/11/09 01:19 ID:??? AAS
>>18 の続き
そういうわけで gp がらみで問題になるのは
1. .sdata, .sbss が溢れるほど大量に static データを定義した場合
2. 翻訳単位によって、閾値が異なる場合。たとえば同一のグローバル変数を
参照するプログラムの片方を -G0 でコンパイル、他方を -G8 でコンパイル
とか。
3. $gp を書き換える場合。特に位置独立なコードを使うシェアードライブラリの
関数を呼ぶ場合。(ふつー Global Offset Table 用意して、$gp 書き換えた上
で関数を呼ぶスタブを作る)
といった場合。クラステンプレートの static 変数が関わるとは思えんのよ。
PS2 Linux だとなんの問題もなく動いたような気がするし。
34(1): [age] 02/11/10 00:32 ID:??? AAS
>>8
誰なのかわかりますた ヽ(´ー` )ノ
初期化してないstatic class memberが
.bssに入らないで.dataセクションに
入っちゃうみたいだけど、それじゃない?
それが正しいのか間違ってるのかしらないけど。
外部リンク:chapuni.com
でも、やっぱ -G0
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.036s