The compiler also stores in the load module a 32-byte "string" that records the compiler options used in building the load module.
A PL/I declare for the saved options string is given in Figure 101. For most of the fields in the structure, the meaning of the field is obvious given its name, but a few of the fields need some explanation:
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) unsignedThe possible values for the sos_cmpat field are given by these declares:
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);
The possible values for the sos_system field are given by these declares:
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);
The possible values for the sos_test_hooks field are given by these declares:
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);
The possible values for the sos_linkage field are given by these declares:
dcl sos_linkage_optlink fixed bin(8) unsigned value(1); dcl sos_linkage_system fixed bin(8) unsigned value(2);
The possible values for the sos_bifprec field are given by these declares:
dcl sos_bifprec_15 bit(2) value('01'b);
dcl sos_bifprec_31 bit(2) value('10'b);
The possible values for the sos_floatinmath field are given by these declares:
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);
The saved options string is located after the timestamp in one of two ways:
The length of the varying string that holds the saved options string may be longer than the size of the saved options string itself.
The presence (or absence) of the service string is indicated in the PPA2 by the flag byte at decimal offset 20 in the PPA2: if the result of anding this byte with '20'bx is not zero, then the service string is present.
In some earlier releases of the PL/I compiler, the compiler did not place a saved options string in the load module. The presence (or absence) of the saved options string is indicated in the PPA2 by the flag byte at decimal offset 20 in the PPA2: if the result of anding this byte with '02'bx is not zero, then the saved options string is present.