LOADとDELETE(モジュールのローディング)
MVS,MSP,VOS3:OSの互換性:API,インターネルの違い – LOADとDELETE
ロードモジュールを仮想記憶にローディングし、またロード済みモジュールを解放するためのAPIマクロである、LOADとDELETEは基本的なパラメーターを使用する限りにおいてMVS、MSPおよびVOS3間で互換がある。ただしLOADマクロについては、MVSにおいてAPF許可プログラムのみが使用できるローディング位置を呼び出し側がコントロールできる機能などについてはVOS3ではサポートされず、MSPではマクロ命令上サポートされない。またMSP固有のしくみであるPSECTの処理に関連する機能はMVSとVOS3ではサポートされない。
基本的な構文
LOAD EP=name|EPLOC=name addr|DE=list addr, [DCB=dcb addr,] [ERRET=errrtn addr,] DELETE EP=name|EPLOC=name addr|DE=list addr
上記で示したパラメーターを使う範囲においては、いずれのOS共に互換である。マクロ命令が展開するSVCインターフェースも同様でロードモジュール・レベルでの互換がある。ただしDELETEマクロにおいてはMSPのみGR15はPSECTアドレスのポインターと解釈されるためMSPのマクロで再アセンブルした方がよい。
リターン情報の互換性
LOADマクロ完了時のGR0はローディングしたモジュールの入口点アドレス(先頭ビットはAMODE=31を示すフラグ)、GR1がAPFコードとモジュールサイズ、GR15が完了コードであることはいずれのOS共に互換である。なおERRET指定時、モジュールのLOADに失敗した場合のGR1がABENDコードを示すことも互換である。
ローディング・アドレスの指定
MVSではAPF許可プログラムであればモジュールのローディング位置をプログラム側で指定することができる。
LOAD ・・・ ADDR|ADRNAPF=loading addr, GLOBAL=YES|(YES,F), EOM=NO|YES
上記のパラメーターがモジュールのローディング・アドレスをコントロールするためのものである。これらのパラメーターが指定されるとLOAD機能はSVC 8ではなくSVC 122(ESR)のコード9(拡張LOAD)が発行される。MSPは拡張LOADのSVC122を内部的にサポートしておりMVSのLOADマクロでアセンブルされたロードモジュールが実行可能となっている(ただしMSPのLOADマクロではサポートされない)。VOS3ではLOADではなくFETCHマクロが同等機能(呼び出し側が指定したアドレスにローディングさせる)のAPIとなる。ただしマニュアルでは解説されない非公開機能となっているため必要に応じてAPIの開示を個別にメーカーに問い合わせる必要がある。
LPA及びリンクライブラリー探索の制御
MVSではモジュールの探索範囲からLPA及びシステムのリンクライブラリーを除外することができる。
LOAD ・・・ LSEARCH=YES|NO
LSEARCHパラメーターにYESを指定すると、LPAとリンクライブラリーからのモジュール探索を行わないが、この機能もMVSのみがサポートする拡張機能である。