コンパイラはさらに、ロード モジュールのビルドで使用するコンパイラ オプションを含んだ 32 バイトの文字列を、ロード モジュールに保存します。
このトピックでは、保存済みオプション文字列の PL/I 宣言を示します。構造体に含まれている大半のフィールドの意味はその名前から推測できますが、次に一部のフィールドについて説明します。
次に、保存済みオプション文字列の DECLARE を示します。
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_gn_in_sidefile bit(1) /* set with version >= 12 */ ,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 sos_nonullstraddr bit(1) /* set with version >= 10 */ ,3 sos_nullstrptr_sysnull bit(1) /* set with version >= 11 */ ,3 sos_ignore_display bit(1) /* set with version >= 11 */ ,3 sos_ignore_put bit(1) /* set with version >= 11 */ ,3 sos_onsnap_stringsize /* set with version >= 11 */ bit(1) ,3 sos_onsnap_stringrange /* set with version >= 11 */ bit(1) ,3 sos_rtcheck_nullptr /* set with version >= 11 */ bit(1) ,3 sos_initauto_short bit(1) /* set with version >= 11 */ ,3 sos_pp_cics bit(1) /* set with version >= 11 */ ,3 sos_pp_sql bit(1) /* set with version >= 11 */ ,3 sos_cuname_offset fixed bin(16) unsigned ,2 sos_extension02 ,3 sos_xref_in_sidefile /* set with version >= 13 */ bit(1) ,3 sos_unroll bit(1) /* set with version >= 14 */ ,3 sos_nolaxreturn bit(1) /* set with version >= 14 */ ,3 * bit(29) /* reserved */
sos_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_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 の 10 進数オフセット 20 でのフラグ バイトによって、PPA2 で示されます。このバイトと '20'bx による AND 演算の結果がゼロでなければ、サービス文字列が存在します。
以前にリリースされた PL/I コンパイラによっては、保存済みオプション文字列をロード モジュールに置かない場合がありました。保存済みオプション文字列の存在は、PPA2 の 10 進数オフセット 20 でのフラグ バイトによって、PPA2 で示されます。このバイトと '02'bx による AND 演算の結果がゼロでなければ、保存済みオプション文字列が存在します。