日本-日本語 |
|
|
|
OpenVMS マニュアル |
|
HP OpenVMS MACRO コンパイラ
|
目次 | 索引 |
$LOCKED_PAGE_START |
イメージの初期化時に $LOCK_PAGE_INIT マクロによってロックされるコード・セクションの先頭をマークします。
$LOCKED_PAGE_START
このマクロには,パラメータはありません。
$LOCKED_PAGE_START は $LOCKED_PAGE_END とともに使用され,イメージの初期化時に $LOCK_PAGE_INIT マクロによって初期化されるコードを線引きします。これらのマクロで線引きされたコードには,ルーチン全体が含まれている必要があります。実行がいずれかのマクロを超えたり,ロックされたコードから外に分岐したり,外からロックされたコードの中に分岐することはできません。ロックされたコード・セクションの中に分岐した場合や,ロックされたコード・セクションから外に分岐しようとした場合,またはマクロを超えて実行しようとした場合は,コンパイラによってエラーが出力されます。
D.3.2 オンザフライのロックダウン |
以下のマクロは,オンザフライのロックダウンで使用されます。
$LOCK_PAGE |
オンザフライでロックするコード・セクションの先頭をマークします。
$LOCK_PAGE [error]
[error]
いずれかの $LKWSET 呼び出しが失敗した場合に分岐するアドレスです。
このマクロは,実行可能コードにインラインで配置され,この後で $UNLOCK_PAGE マクロを呼び出す必要があります。 $LOCK_PAGE/$UNLOCK_PAGE マクロのペアは,個別の psect に個別のルーチンを作成します。 $LOCK_PAGE は,この個別のルーチンのページとリンケージ・セクションをワーキング・セットにロックして,JSR でそこにジャンプします。このマクロとそれに対応する $UNLOCK_PAGE マクロの間のすべてのコードが,ロックされるルーチンに入れられ,ロックダウンされます。このマクロでは,すべてのレジスタが保護されます。ただし,エラー・アドレス・パラメータが指定されており,いずれかの呼び出しが失敗すると,R0 には失敗した呼び出しの状態が設定されます。 R1 には,コードをロックするための呼び出しに失敗した場合は 0,その呼び出しは成功したものの,リンケージ・セクションをロックするための呼び出しが失敗した場合には 1 が設定されます。
error パラメータを使用する場合は, error ラベルは $LOCK_PAGE と $UNLOCK_PAGE のペアの外側に配置する必要があります。これは, $LOCK_PAGE と $UNLOCK_PAGE で作成されたサブルーチンを呼び出す前にエラー・ルーチンに分岐するためです。
ロックされるコードは個別のルーチンになり,スタック・コンテキストは同じでなくなるため,ルーチン内でのローカル・スタック・ストレージを参照しているときには,すべて変更する必要があります。また,ルーチンの他の部分から,ロックされるコードに分岐したり,逆にロックされるコードからルーチンの他の部分に分岐することはできません。
$UNLOCK_PAGE |
オンザフライでロックするコード・セクションの終わりをマークします。
$UNLOCK_PAGE [error][,LINK_SECT]
[error]
いずれかの $ULKWSET 呼び出しが失敗した場合に分岐するエラー・アドレスです。[link_sect]
$LOCK_PAGE マクロを実行したときの実際のリンケージ psect がデフォルトのリンケージ psect $LINKAGE でなかった場合に戻るリンケージ psect です。
$UNLOCK_PAGE は,$LOCK_PAGE マクロと $UNLOCK_PAGE マクロのペアで作成された,ロックされるルーチンから戻り,ページとリンケージ・セクションをワーキング・セットからアンロックします。このマクロは,実行可能コード内で,$LOCK_PAGE マクロの後にインラインで配置します。このマクロでは,すべてのレジスタが保護されます。ただし,エラー・アドレス・パラメータが指定されており,いずれかの呼び出しが失敗すると,R0 には失敗した呼び出しの状態が設定されます。 R1 には,コードをアンロックするための呼び出しに失敗した場合は 0,その呼び出しは成功したものの,リンケージ・セクションをアンロックするための呼び出しが失敗した場合には 1 が設定されます。
error パラメータを使用する場合は, error ラベルは $LOCK_PAGE と $UNLOCK_PAGE のペアの外側に配置する必要があります。これは, $LOCK_PAGE と $UNLOCK_PAGE で作成されたサブルーチンから戻った後でエラー・ルーチンに分岐するためです。
目次 | 索引 |
|