HP-UX General
1758055 メンバー
2907 オンライン
108867 解決策
新規ポスト

CのプログラムをILP32で動作させる方法

 
M_II
時折のコントリビューター

CのプログラムをILP32で動作させる方法

現在、データモデルがILP32で動作するC言語のプログラムのシステムを新ハードへの移植を検討しており、
リソースはそのまま移植し、リコンパイルのみを実施して移植可能かどうかを検討しております。

■移植元システム
・ハード:C8000 CPU:PA-RISC、OS:HP-UX11i
※現在使用しているコンパイルオプション
cc +z -g +DAportable -Ae +M1 +w1 +ESconstlit +u1 -mt

■移植先システム
・ハード:rx2660相当 CPU Itanium、OS HP-UX 11v3
※コンパイルオプションは今後検討し、決定

STKツール等で影響調査はしておりますが、
移植先システムではハード(CPU)・OS変更により、単純にコンパイルすると、データモデルがLP64になることがわかりました。

※参考URL
<>

データモデルがLP64になることで、下記の差異があることがわかりました。
・long型のサイズが4バイトから8バイトに変更
・ポインタのサイズが4バイトから8バイトに変更

long型・ポインタのメンバを持つ構造体・変数のサイズが変更/ポインタをキャストしている箇所が多数あることから、
移植するにあたり、ソース改修が発生することを懸念しております。

「HP-UX リファレンス セクション 1 : ユーザーコマンド (A~M)」を参照したところ、
HP-UX11v3のCコンパイラには「+DD」オプションがあるようなのですが、
当オプションを使えばILP32データモデルで動作させることができるかを検証する環境がないので質問させていただきました。

同様の事象を解消するノウハウをご教授していただいたいです。

1件の返信1
M_II
時折のコントリビューター

CのプログラムをILP32で動作させる方法

+DD32で可能であることを確認できました。
※尚、デフォルト(+DD32を指定せずとも)でもILP32で動作するようです。