コンパイラーも、ロード・モジュールに 32 バイトの「ストリング」を保管し、ロード・モジュールのビルドに使用されるコンパイラー・オプションを記録します。
保存されたオプション・ストリングの PL/I 宣言は、図 101 にあります。構造体の中のほとんどのフィールドにおいて、そのフィールドの意味は名前によって明白ですが、いくつかのフィールドについてはいくらかの説明が必要です。
dcl
1 sos based
,2 sos_words fixed bin(8) unsigned
,2 sos_version fixed bin(8) unsigned
,2 sos_arch fixed bin(8) unsigned
,2 sos_tune fixed bin(8) unsigned
,2 sos_currency char(1)
,2 sos_optlevel bit(4) /* set with version >= 2 */
,2 sos_scheduler bit(1) /* set with version >= 5 */
,2 sos_nowritable_prv bit(1) /* set with version >= 4 */
,2 sos_noblockedio bit(1) /* set with version >= 3 */
,2 sos_optimize bit(1)
,2 sos_window fixed bin(15)
,2 sos_codepage fixed bin(31)
,2 sos_limits_intname fixed bin(8) unsigned
,2 sos_limits_extname fixed bin(8) unsigned
,2 sos_limits_fixbinp1 fixed bin(8) unsigned
,2 sos_limits_fixbinp2 fixed bin(8) unsigned
,2 sos_limits_fixdecp1 fixed bin(8) unsigned
,2 sos_limits_fixdecp2 /* set with version >= 4 */
fixed bin(8) unsigned
,2 sos_flags1
,3 sos_check_stg bit(1)
,3 sos_compact bit(1)
,3 sos_csect bit(1)
,3 sos_dbcs bit(1)
,3 sos_display_wto bit(1)
,3 sos_extrn_full bit(1)
,3 sos_graphic bit(1)
,3 sos_check_conform bit(1) /* set with version >= 6 */
,2 sos_flags2
,3 sos_interrupt bit(1)
,3 sos_reduce bit(1)
,3 sos_norent bit(1)
,3 sos_respect_date bit(1)
,3 sos_rules_ans bit(1)
,3 sos_stdsys bit(1)
,3 sos_nowritable bit(1)
,3 sos_wchar_big bit(1)
,2 sos_flags3
,3 sos_cmpat bit(4)
,3 sos_system bit(4)
,2 sos_flags4
,3 sos_dllinit bit(1)
,3 sos_xinfo_def bit(1)
,3 sos_xinfo_xml bit(1)
,3 sos_static_full bit(1)
,3 sos_backreg_5 bit(1)
,3 sos_noresexp bit(1) /* set with version >= 2 */
,3 sos_bifprec bit(2) /* set with version >= 2 */
/* 01 => bifprec(15) */
/* 10 => bifprec(31) */
,2 sos_test
,3 sos_test_hooks bit(4)
,3 sos_test_sym bit(1)
,3 sos_test_nohook bit(1) /* set with version >= 5 */
,3 sos_test_separate bit(1) /* set with version >= 7 */
,3 sos_Static_Length bit(1) /* set with version >= 2 */
,2 sos_float
,3 sos_afp bit(1)
,3 sos_dft_nobin1arg bit(1) /* set with version >>= 7 */
,3 sos_dec_forcedsign bit(1) /* set with version >= 6 */
,3 sos_dec_nofoflonasgn bit(1) /* set with version >= 6 */
,3 sos_prectype bit(2) /* set with version >= 5 */
,3 sos_floatinmath bit(2) /* set with version >= 2 */
,2 sos_usage
,3 sos_ans_round bit(1)
,3 sos_ans_unspec bit(1)
,3 sos_common bit(1) /* set with version >= 6 */
,3 sos_initauto bit(1) /* set with version >= 5 */
,3 sos_initbased bit(1) /* set with version >= 5 */
,3 sos_initctl bit(1) /* set with version >= 5 */
,3 sos_initstatic bit(1) /* set with version >= 5 */
,3 sos_stringofg_is_c bit(1) /* set with version >= 5 */
,2 sos_default
,3 sos_ans bit(1)
,3 sos_asgn bit(1)
,3 sos_byaddr bit(1)
,3 sos_conn bit(1)
,3 sos_descriptor bit(1)
,3 sos_ebcdic bit(1)
,3 sos_nonnative bit(1)
,3 sos_nonnativeaddr bit(1)
,3 sos_inline bit(1)
,3 sos_reorder bit(1)
,3 sos_evendec bit(1)
,3 sos_null370 bit(1)
,3 sos_recursive bit(1)
,3 sos_desclctr bit(1)
,3 sos_ret_byaddr bit(1)
,3 sos_initfill bit(1)
,3 sos_initfill_char char(1)
,3 sos_short_ieee bit(1)
,3 sos_dummy_unal bit(1)
,3 sos_retcode bit(1)
,3 sos_unaligned bit(1)
,3 sos_ordinal_max bit(1)
,3 sos_overlap bit(1)
,3 sos_hex bit(1)
,3 sos_e_hex bit(1)
,3 sos_linkage fixed bin(8) unsigned
,2 sos_prefix
,3 sos_size bit(1)
,3 sos_stringrange bit(1)
,3 sos_stringsize bit(1)
,3 sos_subrg bit(1)
,3 sos_fofl bit(1)
,3 sos_ofl bit(1)
,3 sos_invalidop bit(1)
,3 sos_ufl bit(1)
,3 sos_zdiv bit(1)
,3 sos_conv bit(1)
,3 * bit(1)
,3 sos_dfp bit(1) /* set with version >= 9 */
,3 sos_nosepname bit(1) /* set with version >= 8 */
,3 sos_csectcut bit(3) /* set with version >= 5 */
,2 sos_extension01
,3 sos_hgpr bit(1) /* set with version >= 10 */
,3 sos_hgpr_preserve bit(1) /* set with version >= 10 */
,3 sos_goff bit(1) /* set with version >= 10 */
,3 sos_dec_foflonmult bit(1) /* set with version >= 10 */
,3 sos_usage_hex_cstg bit(1) /* set with version >= 10 */
,3 sos_usage_substr_loose /* set with version >= 10 */
bit(1)
,3 * bit(10)
,3 sos_cuname_offset fixed bin(16) unsignedsos_cmpat フィールドにおいて考えられる値が、これらの宣言によって与えられます。
dcl sos_cmpat_le bit(4) value('0000'b);
dcl sos_cmpat_v1 bit(4) value('0001'b);
dcl sos_cmpat_v2 bit(4) value('0010'b);
dcl sos_cmpat_v3 bit(4) value('0011'b);
sos_system フィールドにおいて考えられる値が、これらの宣言によって与えられます。
dcl sos_system_mvs bit(4) value('0001'b);
dcl sos_system_tso bit(4) value('0010'b);
dcl sos_system_cics bit(4) value('0011'b);
dcl sos_system_ims bit(4) value('0100'b);
dcl sos_system_os bit(4) value('0101'b);
sos_test_hooks フィールドにおいて考えられる値が、これらの宣言によって与えられます。
dcl sos_test_hooks_none bit(4) value('0000'b);
dcl sos_test_hooks_block bit(4) value('0001'b);
dcl sos_test_hooks_stmt bit(4) value('0011'b);
dcl sos_test_hooks_path bit(4) value('0101'b);
dcl sos_test_hooks_all bit(4) value('0111'b);
sos_linkage フィールドにおいて考えられる値が、これらの宣言によって与えられます。
dcl sos_linkage_optlink fixed bin(8) unsigned value(1); dcl sos_linkage_system fixed bin(8) unsigned value(2);
sos_bifprec フィールドにおいて考えられる値が、これらの宣言によって与えられます。
dcl sos_bifprec_15 bit(2) value('01'b);
dcl sos_bifprec_31 bit(2) value('10'b);
sos_floatinmath フィールドにおいて考えられる値が、これらの宣言によって与えられます。
dcl sos_floatinmath_asis bit(2) value('00'b);
dcl sos_floatinmath_long bit(2) value('10'b);
dcl sos_floatinmath_extndd bit(2) value('11'b);
保存されたオプション・ストリングは、次の 2 つのどちらかの方法でタイム・スタンプの後に位置指定されます。
保存されたオプション・ストリングを保持する可変ストリング の長さは、保存されたオプション・ストリングそれ自体のサイズより長くなります。
サービス・ストリングの存在 (または不在) は、PPA2 内に、PPA2 の 10 進数のオフセット 20 にフラグ・バイトで示されます。このバイトとボックス 20 の AND 演算結果がゼロでなければ、サービス・ストリングが存在します。
以前にリリースされた PL/I コンパイラーには、保存されたオプション・ストリングを、コンパイラーがロード・モジュールに置かないものがありました。保存されたオプション・ストリングの存在 (または不在) は、PPA2 内に、10 進数のオフセット 20 にフラグ・バイトで示されます。このバイトとボックス 02 の AND 演算結果がゼロでなければ、保存されたオプション・ストリングが存在します。