dbx には、8Mバイトの限界に達したユーザーのために、いくつかの回避策が用意されています。これらの回避策では、SUN WorkShop に含まれる rtc_patch_area と呼ばれるユーティリティを使用する必要があります。
このユーティリティは、ユーザーのプログラムにリンク可能なオブジェクトファイルまたは共有オブジェクトファイルを作成し、RTC が使用するパッチ領域を作成します。
実行可能イメージ内のすべてのロードおよびストア命令から 8Mバイト以内で、dbx がパッチ領域を見つけられない場合、考えられる原因は次の 2 つです。
ケース 1: 静的にリンクされた a.out ファイルが大きすぎる。
ケース 2: 動的にリンクされた共有ライブラリ (1 つ以上) が大きすぎる。
dbx はこの限界に達すると、どのくらいのパッチ領域が必要かを示すメッセージを出力して、該当するケース (ケース 1 または 2) を指示します。
ケース 1 では、rtc_patch_area を使用して、パッチ領域として機能する 1 つまたは複数のオブジェクトファイルを作成し、それらを a.out にリンクすることができます。
次のようなメッセージが表示されたら、以下の手順に従ってください。
実行時検査を有効にしています... dbx: warning: rtc: cannot find patch space within 8Mb (need 6490432 bytes for ./a.out) dbx: patch area too far (8Mb limitation); Access checking disabled (See `help rtc8M', case 1)
サイズが 8Mバイト以下のオブジェクトファイル patch.o をパッチ領域として作成します。
rtc_patch_area -o patch.o -size 6490432
-size フラグは任意指定です。デフォルト値は 8000000 です。
エラーメッセージからのサイズ要求を満たしたら、次の手順に進みます。それ以外の場合は、手順 1 を繰り返して、さらに多くの .o ファイルを必要に応じて作成します。
a.out を再リンクして、patch.o ファイルをリンク行に追加します。
RTC を新しいバイナリで再試行します。
それでも RTC が失敗する場合は、リンク行上の patch.o ファイルを再配置することができます。
代替手段として、a.out をより小さい a.out と共有ライブラリに分割する方法があります。
RTC を接続されたプロセスで実行する場合は、ケース 2a を参照してください。それ以外の場合、唯一の対策は、余分なパッチスペースを持つ共有ライブラリの再作成です。
次のようなメッセージが表示されたら、以下の手順に従ってください。
実行時検査を有効にしています... dbx: warning: rtc: cannot find patch space within 8Mb (need 563332 bytes for ./sh1.so) dbx: patch area too far (8Mb limitation); Access checking disabled (See `help rtc8M', case 2)
サイズが 8Mバイト以下のオブジェクトファイル patch.o をパッチ領域として作成します。
rtc_patch_area -o patch.o -size 563332
-size フラグは任意指定です。デフォルト値は 8000000 です。
エラーメッセージからのサイズ要求を満たしたら、次の手順に進みます。それ以外の場合は、手順 1 を繰り返して、さらに多くの .o ファイルを必要に応じて作成します。
sh1.so を再リンクして、patch.o ファイルをリンク行に追加します。
RTC を新しいバイナリで再試行します。dbx が、別の共有ライブラリに対してパッチスペースを要求する場合は、そのライブラリについて、手順 1 〜 手順 2 を繰り返します。
ケース 2a では、dbx によって要求される共有ライブラリのパッチスペースが 8Mバイト以下の場合、rtc_patch_area を使用して、パッチ領域として機能する共有ライブラリを作成し、それを a.out にリンクすることができます。
次のようなメッセージが表示されたら、以下の手順に従ってください。
実行時検査を有効にしています... dbx: warning: rtc: cannot find patch space within 8Mb (need 563332 bytes for ./sh1.so) dbx: patch area too far (8Mb limitation); Access checking disabled (See `help rtc8M', case 2)
共有オブジェクト patch1.so をパッチ領域として作成します。
rtc_patch_area -so patch1.so -size 563332
-size フラグは任意指定です。デフォルト値は 8000000 です。
リンク行で sh1.so の隣に patch1.so を置いてプログラムを再リンクします。dbx が同じ sh1.so に対してさらにパッチスペースを要求する場合は、patch1.so を sh1.so の直前に入れてみてください。
必要な共有ライブラリ順序を得るには、ld -l オプションではなくフルパス名を使用する必要があります。
新しいバイナリで RTC を再試行します。dbx が、別の共有ライブラリに対してパッチスペースを要求する場合は、そのライブラリについて手順 1〜2 を繰り返します。
dbx によって要求されるパッチスペースが、指定の共有ライブラリごとに 8Mバイトを超える場合は、上記のケース 2 の手順に従ってください。