COMPILATION LISTING OF SEGMENT profile Compiled by: Multics PL/I Compiler, Release 29, of July 28, 1986 Compiled at: Honeywell Multics Op. - System M Compiled on: 11/05/86 1042.1 mst Wed Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* * Copyright (c) 1972 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* *********************************************************** */ 9 10 11 /* The profile command, main section. 12* Acquires, stores, prints, lists, plots, and resets program execution performance data. 13* 14* Last Modified: 15* 14 May 1979 by D. Spector: completely rewritten to include new features. 16* August 1979 by RE Mullen: bug fixes and performance improvements. 17* 12-Sep-79 by M. N. Davidoff: bug fixes, some clean up, added include file profile data reporting. 18* 1982, CAH, bug fix to long_profile with seperate static. 19* 20* Algorithm is as follows: 21* 1. Get arguments. 22* 2. If -input_file specified, then use given file, 23* else construct data in temp segs from current 24* (internal static) data. 25* 3. If -output_file specified, then copy temp segs to given file. 26* 4. If -list specified, generate listing. 27* 5. If -plot specified, plot profile. 28* 6. If -print specified or implied, print profile data. 29* 7. If -reset specified, reset current (internal static) data. 30* 31* Profile data exists in three separate formats: 32* 1. Current (internal static) data. Stored in active linkage section. 33* 2. Temporary data used for sorting and passing to display subroutines. 34* Stored in temp segs using permanent data format. See pfd_format.incl.pl1. 35* 3. Permanent data (pfd file). See pfd_format.incl.pl1. 36**/ 37 profile: 38 pf: 39 procedure; 40 41 /* automatic */ 42 43 declare arg_len fixed binary (21); 44 declare arg_ptr ptr; 45 declare 1 args, /* Flags for control args */ 46 2 brief bit (1), 47 2 comment bit (1), 48 2 exclude bit (1), /* Not implemented */ 49 2 first bit (1), 50 2 from bit (1), 51 2 hardcore bit (1), 52 2 input_file bit (1), 53 2 last bit (1), /* Not implemented */ 54 2 line_length bit (1), 55 2 list bit (1), 56 2 long bit (1), 57 2 max_points bit (1), 58 2 no_header bit (1), 59 2 output_file bit (1), 60 2 plot bit (1), 61 2 print bit (1), 62 2 reset bit (1), 63 2 search_dir bit (1), 64 2 sort bit (1), 65 2 source_dir bit (1), 66 2 to bit (1); 67 declare code fixed binary (35); 68 declare comment char (128); 69 declare comparing bit (1); 70 declare dirname char (168); 71 declare entryname char (32); 72 declare exclude_fields (5) bit (1); /* Not implemented */ 73 declare exit bit (1); 74 declare first fixed binary (35); 75 declare from fixed binary (35); 76 declare i fixed binary (18); 77 declare input_file char (168); 78 declare interval fixed binary (18); 79 declare j fixed binary (18); 80 declare k fixed binary (18); 81 declare 1 last_temp_data_word aligned like msf_ptr_template; 82 declare line_buffer char (1200) varying; 83 declare line_length fixed binary (35); 84 declare list_iocb ptr; 85 declare max_points fixed binary (35); 86 declare n_program_names fixed binary; 87 declare n_search_paths fixed binary; 88 declare n_values fixed binary (18); 89 declare output_fcb ptr; 90 declare output_file char (168); 91 declare 1 pfd_file_control aligned, 92 2 fcb ptr, /* File control block for msf_manager_ */ 93 2 last_component fixed binary, 94 2 component (0:9) ptr; /* Pointers to MSF components */ 95 declare plot_field (5) bit (1); 96 declare prog_nr fixed binary; 97 declare program_name_array (100) fixed binary; 98 declare search_path (8) char (168); 99 declare sort_field (5) bit (1); 100 declare source_dir char (168); 101 declare source_ptr ptr; 102 declare temp_seg_array (3) ptr; 103 declare to fixed binary (35); 104 declare value fixed binary (18); 105 declare y_legend fixed binary; 106 107 /* based */ 108 109 declare arg char (arg_len) based (arg_ptr); 110 111 /* builtin */ 112 113 declare addr builtin; 114 declare addrel builtin; 115 declare baseno builtin; 116 declare bin builtin; 117 declare clock builtin; 118 declare codeptr builtin; 119 declare divide builtin; 120 declare float builtin; 121 declare hbound builtin; 122 declare index builtin; 123 declare length builtin; 124 declare min builtin; 125 declare mod builtin; 126 declare null builtin; 127 declare ptr builtin; 128 declare reverse builtin; 129 declare rtrim builtin; 130 declare search builtin; 131 declare size builtin; 132 declare stackbaseptr builtin; 133 declare string builtin; 134 declare substr builtin; 135 declare unspec builtin; 136 137 /* condition */ 138 139 declare cleanup condition; 140 141 /* internal static */ 142 143 declare HT char (1) internal static options (constant) initial (" "); 144 declare HT_NL char (2) internal static options (constant) initial (" 145 "); 146 declare NL char (1) internal static options (constant) initial (" 147 "); 148 declare me char (7) internal static options (constant) initial ("profile"); 149 declare profile_data_suffix char (3) internal static options (constant) initial ("pfd"); 150 declare profile_listing_suffix char (3) internal static options (constant) initial ("pfl"); 151 declare table_1 (5) char (12) internal static options (constant) 152 initial ("count", "cost", "time", "page_faults", "pfs"); 153 declare table_1_upper_case (5) char (12) internal static options (constant) 154 initial ("COUNT", "COST", "TIME", "PAGE FAULTS", "PAGE FAULTS"); 155 156 /* external static */ 157 158 declare error_table_$badopt fixed binary (35) external static; 159 declare error_table_$bigarg fixed binary (35) external static; 160 declare error_table_$file_is_full 161 fixed binary (35) external static; 162 declare error_table_$improper_data_format 163 fixed binary (35) external static; 164 declare error_table_$inconsistent 165 fixed binary (35) external static; 166 declare error_table_$name_not_found 167 fixed binary (35) external static; 168 declare error_table_$noarg fixed binary (35) external static; 169 declare error_table_$noentry fixed binary (35) external static; 170 declare error_table_$too_many_args 171 fixed binary (35) external static; 172 declare error_table_$zero_length_seg 173 fixed binary (35) external static; 174 declare iox_$user_output ptr external static; 175 declare sys_info$max_seg_size fixed binary (19) external static; 176 177 /* entry */ 178 179 declare absolute_pathname_ entry (char (*), char (*), fixed binary (35)); 180 declare com_err_ entry options (variable); 181 declare com_err_$suppress_name entry options (variable); 182 declare cu_$arg_count entry (fixed binary); 183 declare cu_$arg_ptr entry (fixed binary, ptr, fixed binary (21), fixed binary (35)); 184 declare cv_dec_check_ entry (char (*), fixed binary (35)) returns (fixed binary (35)); 185 declare cv_ptr_ entry (char (*), fixed binary (35)) returns (ptr); 186 declare date_time_ entry (fixed binary (71), char (*)); 187 declare expand_pathname_ entry (char (*), char (*), char (*), fixed binary (35)); 188 declare expand_pathname_$add_suffix 189 entry (char (*), char (*), char (*), char (*), fixed binary (35)); 190 declare find_operator_name_ entry (char (*), ptr, char (32) aligned); 191 declare get_group_id_ entry () returns (char (32)); 192 declare get_temp_segment_ entry (char (*), ptr, fixed binary (35)); 193 declare hcs_$initiate_count entry (char (*), char (*), char (*), fixed binary (24), fixed binary (2), ptr, 194 fixed binary (35)); 195 declare hcs_$terminate_noname entry (ptr, fixed binary (35)); 196 declare ioa_ entry options (variable); 197 declare ioa_$ioa_switch entry options (variable); 198 declare ioa_$ioa_switch_nnl entry options (variable); 199 declare iox_$attach_name entry (char (*), ptr, char (*), ptr, fixed binary (35)); 200 declare iox_$close entry (ptr, fixed binary (35)); 201 declare iox_$detach_iocb entry (ptr, fixed binary (35)); 202 declare iox_$open entry (ptr, fixed binary, bit (1) aligned, fixed binary (35)); 203 declare iox_$put_chars entry (ptr, ptr, fixed binary (21), fixed binary (35)); 204 declare msf_manager_$adjust entry (ptr, fixed binary, fixed binary (24), bit (3), fixed binary (35)); 205 declare msf_manager_$close entry (ptr); 206 declare msf_manager_$get_ptr entry (ptr, fixed binary, bit (1), ptr, fixed binary (24), fixed binary (35)); 207 declare msf_manager_$open entry (char (*), char (*), ptr, fixed binary (35)); 208 declare release_temp_segments_ entry (char (*), (*) ptr, fixed binary (35)); 209 declare ring0_get_$name entry (char (*), char (*), ptr, fixed binary (35)); 210 declare ring0_get_$segptr entry (char (*), char (*), ptr, fixed binary (35)); 211 declare ring_zero_peek_ entry (ptr, ptr, fixed binary (18), fixed binary (35)); 212 declare unique_chars_ entry (bit (*)) returns (char (15)); 213 1 1 /* BEGIN INCLUDE FILE ... pfd_format.incl.pl1 */ 1 2 /* Written June, 1979 by D. Spector. 1 3* Modified 12-Sep-79 by M. N. Davidoff to pack msf_ptr_template, add source_path array and null_msf_ptr. */ 1 4 1 5 /* Format of profile data (pfd) files: 1 6* 1. Fixed-length header. 1 7* 2. Linked list of fixed-length data for each program. 1 8* 3. For each program, variable-length array of those instructions which call operators. 1 9* 4. For each program, variable-length array of per-statement profile data values. */ 1 10 1 11 dcl pfd_format_version_1 fixed bin int static options (constant) init (1); 1 12 1 13 /* Fixed-length header at start of profile data file */ 1 14 1 15 dcl 1 pfd_header aligned based (pfd_ptr), 1 16 2 version fixed bin, /* See pfd format version above */ 1 17 2 mbz bit (36), /* Unused */ 1 18 2 date_time_stored fixed bin (71), 1 19 2 person_project char (32) unal, 1 20 2 comment char (128) unal, 1 21 2 first_program like msf_ptr_template; /* Msf pointer to first program data */ 1 22 1 23 /* Data for one program or component */ 1 24 1 25 dcl 1 program aligned based (program_ptr), 1 26 2 next_program like msf_ptr_template, /* Msf pointer to next program data */ 1 27 2 name char (32) unal, /* Program name (does not include a language suffix) */ 1 28 2 translator char (8) unal, /* Language name */ 1 29 2 flags, 1 30 3 long_profile bit (1) unal, 1 31 3 mbz bit (35) unal, /* Unused */ 1 32 2 last_source_path fixed bin (10), 1 33 2 source_path_array like msf_ptr_template, 1 34 2 n_operators fixed bin (18), 1 35 2 operator_array like msf_ptr_template, 1 36 2 n_values fixed bin (18), 1 37 2 value_array like msf_ptr_template, 1 38 2 total_count fixed binary (35), 1 39 2 total_cost_or_time fixed binary (35), 1 40 2 total_page_faults fixed binary (35); /* (long_profile only) */ 1 41 1 42 /* Array of source segments */ 1 43 1 44 dcl source_path_array (0:program.last_source_path) char (168) based (source_path_ptr); 1 45 1 46 /* Arrays of instructions that reference operators */ 1 47 1 48 dcl operator_array (program.n_operators) bit (36) aligned based (operator_ptr); 1 49 1 50 /* Arrays of profile data values (sorted by value.source) */ 1 51 1 52 dcl 1 value_array (program.n_values) aligned based (value_ptr), 1 53 2 source, 1 54 3 file fixed bin (10) unsigned unal, 1 55 3 line fixed bin (16) unsigned unal, 1 56 3 statement fixed bin (5) unsigned unal, 1 57 3 pf_entry_seq fixed bin (5) unsigned unal, 1 58 2 n_operators fixed bin (18) unsigned unal, 1 59 /* Number of operator_array elements for this statement */ 1 60 2 first_operator fixed bin (18) unsigned unal, 1 61 /* First operator_array element, if any, for this statement */ 1 62 2 count fixed bin (35), /* Execution count */ 1 63 2 cost_or_time fixed bin (35), /* Instructions or VCPU time (long_profile) */ 1 64 2 page_faults fixed bin (35); /* (long_profile only) */ 1 65 1 66 /* Automatic variables */ 1 67 1 68 dcl operator_ptr ptr; /* Pointer calculated from program.operator_array */ 1 69 dcl pfd_ptr ptr; /* Pointer to base of pfd file (component 0) */ 1 70 dcl program_ptr ptr; /* Ptr from pfd_header.first_program or program.next_program */ 1 71 dcl source_path_ptr ptr; /* Pointer calculated from program.source_path_array */ 1 72 dcl value_ptr ptr; /* Pointer calculated from program.value_array */ 1 73 1 74 /* Generalized MSF pointer into profile data file */ 1 75 1 76 dcl 1 msf_ptr_template aligned based, 1 77 2 component fixed bin (17) unal, 1 78 2 offset fixed bin (18) unsigned unal; 1 79 1 80 dcl 1 null_msf_ptr aligned internal static options (constant), 1 81 2 component fixed bin (17) unal initial (-1), 1 82 2 offset fixed bin (18) unsigned unal initial (0); 1 83 1 84 /* END INCLUDE FILE ... pfd_format.incl.pl1 */ 214 2 1 /* BEGIN INCLUDE FILE -- lot.incl.pl1 S.Webber 9/74, Modified by R. Bratt 04/76, modified by M. Weaver 7/76 */ 2 2 /* modified by M. Weaver 3/77 */ 2 3 2 4 dcl lotp ptr; 2 5 2 6 dcl 1 lot based (lotp) aligned, 2 7 2 lp (0:9999) ptr unaligned; /* array of packed pointers to linkage sections */ 2 8 2 9 dcl lot_fault bit (36) aligned static options (constant) init ("111000000000000000000000000000000000"b); 2 10 /* lot fault has fault code = 0 and offset = 0 */ 2 11 2 12 dcl isotp ptr; 2 13 dcl 1 isot based (isotp) aligned, 2 14 2 isp (0:9999) ptr unaligned; 2 15 2 16 dcl 1 isot1 (0 :9999) aligned based, 2 17 2 flags unaligned, 2 18 3 fault bit (2) unaligned, 2 19 3 system bit (1) unaligned, 2 20 3 mbz bit (6) unaligned, 2 21 2 fault_code fixed bin (8) unaligned, 2 22 2 static_offset bit (18) unaligned; 2 23 2 24 2 25 /* END INCLUDE FILE lot.incl.pl1 */ 215 3 1 /* BEGIN INCLUDE FILE linkdcl.incl.pl1 --- last modified 15 Nov 1971 by C Garman */ 3 2 3 3 /* Last Modified (Date and Reason): 3 4* 6/75 by M.Weaver to add virgin_linkage_header declaration 3 5* 6/75 by S.Webber to comment existing structures better 3 6* 9/77 by M. Weaver to add run_depth to link 3 7* 2/83 by M. Weaver to add linkage header flags and change run_depth precision 3 8**/ 3 9 3 10 /* format: style3 */ 3 11 dcl 1 link based aligned, /* link pair in linkage section */ 3 12 2 head_ptr bit (18) unal, /* rel pointer to beginning of linkage section */ 3 13 2 ringno bit (3) unal, 3 14 2 mbz bit (6) unal, 3 15 2 run_depth fixed bin (2) unal, /* run unit depth, filled when link is snapped */ 3 16 2 ft2 bit (6) unal, /* fault tag. 46(8) if not snapped, 43(8) if snapped */ 3 17 2 exp_ptr bit (18) unal, /* pointer (rel to defs) of expression word */ 3 18 2 mbz2 bit (12) unal, 3 19 2 modifier bit (6) unal; /* modifier to be left in snapped link */ 3 20 3 21 dcl 1 exp_word based aligned, /* expression word in link definition */ 3 22 2 type_ptr bit (18) unal, /* pointer (rel to defs) of type pair structure */ 3 23 2 exp bit (18) unal; /* constant expression to be added in when snapping link */ 3 24 3 25 dcl 1 type_pair based aligned, /* type pair in link definition */ 3 26 2 type bit (18) unal, /* type of link. may be 1,2,3,4,5, or 6 */ 3 27 2 trap_ptr bit (18) unal, /* pointer (rel to defs) to the trap word */ 3 28 2 seg_ptr bit (18) unal, /* pointer to ACC reference name for segment referenced */ 3 29 2 ext_ptr bit (18) unal; /* pointer (rel to defs) of ACC segdef name */ 3 30 3 31 dcl 1 header based aligned, /* linkage block header */ 3 32 2 def_ptr ptr, /* pointer to definition section */ 3 33 2 symbol_ptr ptr unal, /* pointer to symbol section in object segment */ 3 34 2 original_linkage_ptr 3 35 ptr unal, /* pointer to linkage section in object segment */ 3 36 2 unused bit (72), 3 37 2 stats, 3 38 3 begin_links bit (18) unal, /* offset (rel to this section) of first link */ 3 39 3 block_length bit (18) unal, /* number of words in this linkage section */ 3 40 3 segment_number 3 41 bit (18) unal, /* text segment number associated with this section */ 3 42 3 static_length bit (18) unal; /* number of words of static for this segment */ 3 43 3 44 dcl 1 linkage_header_flags 3 45 aligned based, /* overlay of def_ptr for flags */ 3 46 2 pad1 bit (28) unaligned, /* flags are in first word */ 3 47 2 static_vlas bit (1) unaligned, /* static section "owns" some LA/VLA segments */ 3 48 2 perprocess_static 3 49 bit (1) unaligned, /* 1 copy of static section is used by all tasks/run units */ 3 50 2 pad2 bit (6) unaligned; 3 51 3 52 dcl 1 virgin_linkage_header 3 53 aligned based, /* template for linkage header in object segment */ 3 54 2 pad bit (30) unaligned, /* is filled in by linker */ 3 55 2 defs_in_link bit (6) unaligned, /* =o20 if defs in linkage (nonstandard) */ 3 56 2 def_offset bit (18) unaligned, /* offset of definition section */ 3 57 2 first_ref_relp bit (18) unaligned, /* offset of trap-at-first-reference offset array */ 3 58 2 filled_in_later bit (144), 3 59 2 link_begin bit (18) unaligned, /* offset of first link */ 3 60 2 linkage_section_lng 3 61 bit (18) unaligned, /* length of linkage section */ 3 62 2 segno_pad bit (18) unaligned, /* will be segment number of copied linkage */ 3 63 2 static_length bit (18) unaligned; /* length of static section */ 3 64 3 65 3 66 dcl 1 trap_word based aligned, /* trap word in link definition */ 3 67 2 call_ptr bit (18) unal, /* pointer (rel to link) of link to trap procedure */ 3 68 2 arg_ptr bit (18) unal; /* pointer (rel to link) of link to arg info for trap proc */ 3 69 3 70 dcl 1 name based aligned, /* storage of ASCII names in definitions */ 3 71 2 nchars bit (9) unaligned, /* number of characters in name */ 3 72 2 char_string char (31) unaligned; /* 31-character name */ 3 73 3 74 /* END INCLUDE FILE linkdcl.incl.pl1 */ 216 4 1 /* BEGIN INCLUDE FILE ... stack_header.incl.pl1 .. 3/72 Bill Silver */ 4 2 /* modified 7/76 by M. Weaver for *system links and more system use of areas */ 4 3 /* modified 3/77 by M. Weaver to add rnt_ptr */ 4 4 /* Modified April 1983 by C. Hornig for tasking */ 4 5 4 6 /****^ HISTORY COMMENTS: 4 7* 1) change(86-06-24,DGHowe), approve(86-06-24,MCR7396), 4 8* audit(86-08-05,Schroth), install(86-11-03,MR12.0-1206): 4 9* added the heap_header_ptr definition. 4 10* 2) change(86-08-12,Kissel), approve(86-08-12,MCR7473), 4 11* audit(86-10-10,Fawcett), install(86-11-03,MR12.0-1206): 4 12* Modified to support control point management. These changes were actually 4 13* made in February 1985 by G. Palter. 4 14* 3) change(86-10-22,Fawcett), approve(86-10-22,MCR7473), 4 15* audit(86-10-22,Farley), install(86-11-03,MR12.0-1206): 4 16* Remove the old_lot pointer and replace it with cpm_data_ptr. Use the 18 4 17* bit pad after cur_lot_size for the cpm_enabled. This was done to save some 4 18* space int the stack header and change the cpd_ptr unal to cpm_data_ptr 4 19* (ITS pair). 4 20* END HISTORY COMMENTS */ 4 21 4 22 /* format: style2 */ 4 23 4 24 dcl sb ptr; /* the main pointer to the stack header */ 4 25 4 26 dcl 1 stack_header based (sb) aligned, 4 27 2 pad1 (4) fixed bin, /* (0) also used as arg list by outward_call_handler */ 4 28 2 cpm_data_ptr ptr, /* (4) pointer to control point which owns this stack */ 4 29 2 combined_stat_ptr ptr, /* (6) pointer to area containing separate static */ 4 30 2 clr_ptr ptr, /* (8) pointer to area containing linkage sections */ 4 31 2 max_lot_size fixed bin (17) unal, /* (10) DU number of words allowed in lot */ 4 32 2 main_proc_invoked fixed bin (11) unal, /* (10) DL nonzero if main procedure invoked in run unit */ 4 33 2 have_static_vlas bit (1) unal, /* (10) DL "1"b if (very) large arrays are being used in static */ 4 34 2 pad4 bit (2) unal, 4 35 2 run_unit_depth fixed bin (2) unal, /* (10) DL number of active run units stacked */ 4 36 2 cur_lot_size fixed bin (17) unal, /* (11) DU number of words (entries) in lot */ 4 37 2 cpm_enabled bit (18) unal, /* (11) DL non-zero if control point management is enabled */ 4 38 2 system_free_ptr ptr, /* (12) pointer to system storage area */ 4 39 2 user_free_ptr ptr, /* (14) pointer to user storage area */ 4 40 2 null_ptr ptr, /* (16) */ 4 41 2 stack_begin_ptr ptr, /* (18) pointer to first stack frame on the stack */ 4 42 2 stack_end_ptr ptr, /* (20) pointer to next useable stack frame */ 4 43 2 lot_ptr ptr, /* (22) pointer to the lot for the current ring */ 4 44 2 signal_ptr ptr, /* (24) pointer to signal procedure for current ring */ 4 45 2 bar_mode_sp ptr, /* (26) value of sp before entering bar mode */ 4 46 2 pl1_operators_ptr ptr, /* (28) pointer to pl1_operators_$operator_table */ 4 47 2 call_op_ptr ptr, /* (30) pointer to standard call operator */ 4 48 2 push_op_ptr ptr, /* (32) pointer to standard push operator */ 4 49 2 return_op_ptr ptr, /* (34) pointer to standard return operator */ 4 50 2 return_no_pop_op_ptr 4 51 ptr, /* (36) pointer to standard return / no pop operator */ 4 52 2 entry_op_ptr ptr, /* (38) pointer to standard entry operator */ 4 53 2 trans_op_tv_ptr ptr, /* (40) pointer to translator operator ptrs */ 4 54 2 isot_ptr ptr, /* (42) pointer to ISOT */ 4 55 2 sct_ptr ptr, /* (44) pointer to System Condition Table */ 4 56 2 unwinder_ptr ptr, /* (46) pointer to unwinder for current ring */ 4 57 2 sys_link_info_ptr ptr, /* (48) pointer to *system link name table */ 4 58 2 rnt_ptr ptr, /* (50) pointer to Reference Name Table */ 4 59 2 ect_ptr ptr, /* (52) pointer to event channel table */ 4 60 2 assign_linkage_ptr ptr, /* (54) pointer to storage for (obsolete) hcs_$assign_linkage */ 4 61 2 heap_header_ptr ptr, /* (56) pointer to the heap header for this ring */ 4 62 2 trace, 4 63 3 frames, 4 64 4 count fixed bin, /* (58) number of trace frames */ 4 65 4 top_ptr ptr unal, /* (59) pointer to last trace frame */ 4 66 3 in_trace bit (36) aligned, /* (60) trace antirecursion flag */ 4 67 2 pad2 bit (36), /* (61) */ 4 68 2 pad5 pointer; /* (62) pointer to future stuff */ 4 69 4 70 /* The following offset refers to a table within the pl1 operator table. */ 4 71 4 72 dcl tv_offset fixed bin init (361) internal static; 4 73 /* (551) octal */ 4 74 4 75 4 76 /* The following constants are offsets within this transfer vector table. */ 4 77 4 78 dcl ( 4 79 call_offset fixed bin init (271), 4 80 push_offset fixed bin init (272), 4 81 return_offset fixed bin init (273), 4 82 return_no_pop_offset fixed bin init (274), 4 83 entry_offset fixed bin init (275) 4 84 ) internal static; 4 85 4 86 4 87 4 88 4 89 4 90 /* The following declaration is an overlay of the whole stack header. Procedures which 4 91* move the whole stack header should use this overlay. 4 92**/ 4 93 4 94 dcl stack_header_overlay (size (stack_header)) fixed bin based (sb); 4 95 4 96 4 97 4 98 /* END INCLUDE FILE ... stack_header.incl.pl1 */ 217 5 1 dcl 1 std_symbol_header based aligned, 5 2 2 dcl_version fixed bin, 5 3 2 identifier char(8), 5 4 2 gen_number fixed bin, 5 5 2 gen_created fixed bin(71), 5 6 2 object_created fixed bin(71), 5 7 2 generator char(8), 5 8 2 gen_version unaligned, 5 9 3 offset bit(18), 5 10 3 size bit(18), 5 11 2 userid unaligned, 5 12 3 offset bit(18), 5 13 3 size bit(18), 5 14 2 comment unaligned, 5 15 3 offset bit(18), 5 16 3 size bit(18), 5 17 2 text_boundary bit(18) unaligned, 5 18 2 stat_boundary bit(18) unaligned, 5 19 2 source_map bit(18) unaligned, 5 20 2 area_pointer bit(18) unaligned, 5 21 2 backpointer bit(18) unaligned, 5 22 2 block_size bit(18) unaligned, 5 23 2 next_block bit(18) unaligned, 5 24 2 rel_text bit(18) unaligned, 5 25 2 rel_def bit(18) unaligned, 5 26 2 rel_link bit(18) unaligned, 5 27 2 rel_symbol bit(18) unaligned, 5 28 2 mini_truncate bit(18) unaligned, 5 29 2 maxi_truncate bit(18) unaligned; 218 219 220 /* Non-standard object segment symbol block format */ 221 6 1 dcl 1 symbol_header aligned based, 6 2 2 translator, /* dope for translator name */ 6 3 3 offset fixed bin(35), 6 4 3 code unal bit(9), 6 5 3 size unal bit(27), 6 6 2 version, /* dope for version name */ 6 7 3 offset fixed bin(35), 6 8 3 code unal bit(9), 6 9 3 size unal bit(27), 6 10 2 times, 6 11 3 creation fixed bin(71), 6 12 3 translation fixed bin(71), 6 13 2 root unal bit(18), 6 14 2 extension unal bit(18), 6 15 2 map unal bit(18), 6 16 2 n_files unal bit(18), 6 17 2 next_header unal bit(18), 6 18 2 bind_indicator unal bit(18), 6 19 2 text_size unal bit(18), 6 20 2 link_size unal bit(18), 6 21 2 program, /* dope for program name */ 6 22 3 offset fixed bin(35), 6 23 3 code unal bit(9), 6 24 3 size unal bit(27); 222 7 1 dcl 1 pl1_symbol_block aligned based, 7 2 2 version fixed bin, 7 3 2 identifier char(8), /* must be "pl1info" */ 7 4 2 flags, 7 5 3 profile bit(1) unal, 7 6 3 table bit(1) unal, 7 7 3 map bit(1) unal, 7 8 3 flow bit(1) unal, 7 9 3 io bit(1) unal, 7 10 3 table_removed bit(1) unal, 7 11 3 long_profile bit(1) unal, 7 12 3 pad bit(29) unal, 7 13 2 greatest_severity fixed bin, 7 14 2 root unal bit(18), 7 15 2 profile unal bit(18), 7 16 2 map unal, 7 17 3 first bit(18), 7 18 3 last bit(18), 7 19 2 segname unaligned, 7 20 3 offset bit(18), 7 21 3 size bit(18); 223 8 1 /* BEGIN INCLUDE FILE ... source_map.incl.pl1 */ 8 2 8 3 dcl 1 source_map aligned based, 8 4 2 version fixed bin, 8 5 2 number fixed bin, 8 6 2 map(n refer(source_map.number)) aligned, 8 7 3 pathname unaligned, 8 8 4 offset bit(18), 8 9 4 size bit(18), 8 10 3 uid bit(36), 8 11 3 dtm fixed bin(71); 8 12 8 13 /* END INCLUDE FILE ... source_map.incl.pl1 */ 224 9 1 dcl 1 statement_map aligned based, 9 2 2 location bit(18) unaligned, 9 3 2 source_id unaligned, 9 4 3 file bit(8), 9 5 3 line bit(14), 9 6 3 statement bit(5), 9 7 2 source_info unaligned, 9 8 3 start bit(18), 9 9 3 length bit(9); 225 10 1 /* BEGIN INCLUDE FILE profile_entry.incl.pl1 */ 10 2 10 3 dcl 1 profile_entry aligned based, 10 4 2 map bit(18) unaligned, 10 5 2 skip bit(18) unaligned, 10 6 2 count fixed bin; 10 7 10 8 /* END INCLUDE FILE profile_entry.incl.pl1 */ 226 11 1 /* BEGIN INCLUDE FILE ... long_profile.incl.pl1 */ 11 2 /* coded December 1, 1976 by Richard A. Barnes */ 11 3 11 4 dcl 1 long_profile_header based aligned, 11 5 2 last_vcpu fixed bin(71), /* last virtual cpu reading */ 11 6 2 last_pf fixed bin, /* last page faults reading */ 11 7 2 last_offset fixed bin, /* offset of last profile entry metered */ 11 8 2 nentries fixed bin, /* number of profile entries */ 11 9 2 dummy like long_profile_entry aligned, /* dummy profile entry */ 11 10 2 control like long_profile_entry aligned; /* control profile entry for overhead calc */ 11 11 11 12 dcl 1 long_profile_entry based aligned, 11 13 2 map bit(18) unaligned, /* rel ptr to statement map entry */ 11 14 2 skip bit(18) unaligned, 11 15 2 count fixed bin, /* number of times stmt encountered */ 11 16 2 vcpu fixed bin, /* total execution time for this statement */ 11 17 2 pf fixed bin; /* total page faults for this statement */ 11 18 11 19 dcl (dummy_entry_offset init(5), /* offset in long_profile_header of dummy */ 11 20 control_entry_offset init(9)) /* offset in long_profile_header of control */ 11 21 fixed bin int static options(constant); 11 22 11 23 /* END INCLUDE FILE ... long_profile.incl.pl1 */ 227 12 1 /* --------------- BEGIN include file plot_entry_dcls.incl.pl1 --------------- */ 12 2 12 3 dcl plot_ ext entry (float bin dimension (*), float bin dimension (*), fixed bin, fixed bin, char (1)), 12 4 plot_$setup ext entry (char (*), char (*), char (*), fixed bin, float bin, fixed bin, fixed bin), 12 5 plot_$scale ext entry (float bin, float bin, float bin, float bin); 12 6 12 7 dcl (Vectors_only initial (1), /* vec_sw; fourth arg to plot_ */ 12 8 Vectors_and_symbols initial (2), 12 9 Symbols_only initial (3), 12 10 12 11 Linear_linear initial (1), /* type; fourth arg to plot_$setup */ 12 12 Log_linear initial (2), 12 13 Linear_log initial (3), 12 14 Log_log initial (4), 12 15 12 16 Tick_marks initial (0), /* grid_sw; fifth arg to plot_$setup */ 12 17 Dotted_grid initial (1), 12 18 Solid_grid initial (2), 12 19 No_grid initial (3), 12 20 12 21 Normal_scaling initial (0), /* eq_scale_sw; sixth arg to plot_$setup */ 12 22 Equal_scaling initial (1)) fixed bin static options (constant); 12 23 12 24 /* ---------------- END include file plot_entry_dcls.incl.pl1 ---------------- */ 228 13 1 /* Begin include file ..... iox_modes.incl.pl1 */ 13 2 13 3 /* Written by C. D. Tavares, 03/17/75 */ 13 4 /* Updated 10/31/77 by CDT to include short iox mode strings */ 13 5 13 6 dcl iox_modes (13) char (24) int static options (constant) aligned initial 13 7 ("stream_input", "stream_output", "stream_input_output", 13 8 "sequential_input", "sequential_output", "sequential_input_output", "sequential_update", 13 9 "keyed_sequential_input", "keyed_sequential_output", "keyed_sequential_update", 13 10 "direct_input", "direct_output", "direct_update"); 13 11 13 12 dcl short_iox_modes (13) char (4) int static options (constant) aligned initial 13 13 ("si", "so", "sio", "sqi", "sqo", "sqio", "squ", "ksqi", "ksqo", "ksqu", "di", "do", "du"); 13 14 13 15 dcl (Stream_input initial (1), 13 16 Stream_output initial (2), 13 17 Stream_input_output initial (3), 13 18 Sequential_input initial (4), 13 19 Sequential_output initial (5), 13 20 Sequential_input_output initial (6), 13 21 Sequential_update initial (7), 13 22 Keyed_sequential_input initial (8), 13 23 Keyed_sequential_output initial (9), 13 24 Keyed_sequential_update initial (10), 13 25 Direct_input initial (11), 13 26 Direct_output initial (12), 13 27 Direct_update initial (13)) fixed bin int static options (constant); 13 28 13 29 /* End include file ..... iox_modes.incl.pl1 */ 229 230 231 /* Start of command */ 232 233 call initialize; 234 on cleanup 235 call clean; 236 237 call get_arguments; 238 239 /* Process -input_file */ 240 241 if args.input_file 242 then call open_input_file; 243 else call scan_data ("1"b); 244 245 /* Process -output_file */ 246 247 if args.output_file 248 then call store_output_file; 249 250 /* Process display options */ 251 252 if args.list 253 then call print_or_list ("1"b); 254 255 if args.plot 256 then call plot; 257 258 if args.print 259 then call print_or_list ("0"b); 260 261 /* Process -reset */ 262 263 if args.reset 264 then call scan_data ("0"b); 265 266 /* Done */ 267 268 quit: 269 call clean; 270 return; 271 272 /* Error handling subroutines */ 273 274 err_check: 275 procedure; 276 277 if code ^= 0 278 then call error (code, ""); 279 end err_check; 280 281 error: 282 procedure (code, text); 283 declare code fixed binary (35); /* (Input) */ 284 declare text char (*); /* (Input) */ 285 286 call com_err_ (code, me, "^a", text); 287 goto quit; 288 end error; 289 290 file_error: 291 procedure; 292 293 call com_err_ (code, me, "^a>^a", dirname, entryname); 294 goto quit; 295 end file_error; 296 297 /* Initialization */ 298 299 initialize: 300 procedure; 301 302 /* Initialize cleanup handling */ 303 304 temp_seg_array (*) = null; 305 306 pfd_file_control.component (*) = null; 307 pfd_file_control.fcb = null; 308 309 output_fcb = null; 310 source_ptr = null; 311 list_iocb = null; 312 313 /* Other initialization */ 314 315 n_search_paths = 0; 316 n_program_names = 0; 317 string (args) = ""b; 318 end initialize; 319 320 /* Free temporary storage at end and upon QUIT/release */ 321 322 clean: 323 procedure; 324 325 call release_temp_segments_ (me, temp_seg_array, code); 326 call release_temp_segments_ (me, pfd_file_control.component, code); 327 328 if pfd_file_control.fcb ^= null 329 then do; 330 call msf_manager_$close (pfd_file_control.fcb); 331 pfd_file_control.fcb = null; 332 end; 333 334 if output_fcb ^= null 335 then do; 336 call msf_manager_$adjust (output_fcb, 0, 0, "111"b, code); 337 call msf_manager_$close (output_fcb); 338 output_fcb = null; 339 end; 340 341 if source_ptr ^= null 342 then do; 343 call hcs_$terminate_noname (source_ptr, code); 344 source_ptr = null; 345 end; 346 347 if list_iocb ^= null 348 then do; 349 call iox_$close (list_iocb, code); 350 call iox_$detach_iocb (list_iocb, code); 351 list_iocb = null; 352 end; 353 end clean; 354 355 /* Get arguments */ 356 357 get_arguments: 358 procedure; 359 360 declare arg_nr fixed binary; 361 declare n_args fixed binary; 362 declare operand_len fixed binary (21); 363 declare operand_ptr ptr; 364 365 declare operand char (operand_len) based (operand_ptr); 366 367 call cu_$arg_count (n_args); 368 do arg_nr = 1 to n_args; 369 call cu_$arg_ptr (arg_nr, arg_ptr, arg_len, code); 370 call err_check; 371 372 if index (arg, "-") = 1 373 then if arg = "-pr" | arg = "-print" 374 then args.print = "1"b; 375 376 else if arg = "-nhe" | arg = "-no_header" 377 then args.no_header = "1"b; 378 379 else if arg = "-sort" 380 then call accept_field (args.sort, sort_field, "0"b, table_1, (0)); 381 382 else if arg = "-ft" | arg = "-first" 383 then call accept_number (args.first, first, "first"); 384 385 else if arg = "-lg" | arg = "-long" 386 then do; 387 args.brief = "0"b; 388 args.long = "1"b; 389 end; 390 391 else if arg = "-ls" | arg = "-list" 392 then args.list = "1"b; 393 394 else if arg = "-scd" | arg = "-source_dir" 395 then call accept_pathname (args.source_dir, source_dir); 396 397 else if arg = "-ll" | arg = "-line_length" 398 then call accept_number (args.line_length, line_length, "line_length"); 399 400 else if arg = "-plot" 401 then call accept_field (args.plot, plot_field, "0"b, table_1, y_legend); 402 403 else if arg = "-fm" | arg = "-from" 404 then call accept_number (args.from, from, "from"); 405 406 else if arg = "-to" 407 then call accept_number (args.to, to, "to"); 408 409 else if arg = "-mp" | arg = "-max_points" 410 then call accept_number (args.max_points, max_points, "max_points"); 411 412 else if arg = "-of" | arg = "-output_file" 413 then call accept_pathname (args.output_file, output_file); 414 415 else if arg = "-com" | arg = "-comment" 416 then call accept_string (args.comment, comment); 417 418 else if arg = "-if" | arg = "-input_file" 419 then call accept_pathname (args.input_file, input_file); 420 421 else if arg = "-rs" | arg = "-reset" 422 then args.reset = "1"b; 423 424 else if arg = "-hard" | arg = "-hardcore" 425 then args.hardcore = "1"b; 426 427 else if arg = "-srhd" | arg = "-search_dir" 428 then call accept_search_path; 429 430 else if arg = "-bf" | arg = "-brief" 431 then do; 432 args.brief = "1"b; 433 args.long = "0"b; 434 end; 435 436 else call error (error_table_$badopt, arg); 437 438 /* Arguments (program names) */ 439 440 else do; 441 if search (arg, "$|") ^= 0 442 then call error (0, "Invalid program name. " || arg); 443 444 if n_program_names >= hbound (program_name_array, 1) 445 then call error (error_table_$too_many_args, "Program names."); 446 447 n_program_names = n_program_names + 1; 448 program_name_array (n_program_names) = arg_nr; 449 end; 450 end; 451 452 /* Apply defaults */ 453 454 if ^args.line_length 455 then line_length = 132; /* Default printer width */ 456 457 if ^args.max_points 458 then max_points = 250; /* Default graphics resolution */ 459 460 if args.hardcore & ^args.search_dir 461 then do; 462 n_search_paths = 1; 463 search_path (1) = ">ldd>hard>o"; 464 end; 465 466 if ^args.list & ^args.plot & ^args.output_file & ^args.reset 467 then args.print = "1"b; 468 469 if args.print & ^args.long 470 then args.brief = "1"b; 471 472 /* Consistency checking */ 473 474 if n_program_names = 0 & ^args.input_file 475 then do; 476 call com_err_$suppress_name (0, me, "Usage: ^a {program_names} {-control_args}", me); 477 goto quit; 478 end; 479 480 if args.sort & ^args.print 481 then call missing ("sort", "print"); 482 483 if args.first & ^args.sort 484 then call missing ("first", "sort"); 485 486 if args.no_header & ^args.print 487 then call missing ("no_header", "print"); 488 489 if args.brief & ^args.print 490 then call missing ("brief", "print"); 491 492 if args.long & ^args.print 493 then call missing ("long", "print"); 494 495 if args.line_length & ^args.list 496 then call missing ("line_length", "list"); 497 498 if line_length < 50 499 then call error (error_table_$improper_data_format, "Line length too small."); 500 501 if args.from & ^args.print & ^args.plot 502 then call missing ("from", "print or -plot"); 503 504 if args.to & ^args.print & ^args.plot 505 then call missing ("to", "print or -plot"); 506 507 if args.comment & ^args.output_file & ^args.plot 508 then call missing ("comment", "output_file or -plot"); 509 510 if args.max_points & ^args.plot 511 then call missing ("max_points", "plot"); 512 513 if args.search_dir & ^args.hardcore 514 then call missing ("search_dir", "hardcore"); 515 516 if args.source_dir & ^args.list 517 then call missing ("source_dir", "list"); 518 519 if args.reset & args.input_file 520 then call error (error_table_$inconsistent, "-reset and -input_file"); 521 522 if args.reset & args.hardcore 523 then call error (error_table_$inconsistent, "-reset and -hardcore"); 524 525 if args.output_file & args.input_file 526 then call error (error_table_$inconsistent, "-input_file and -output_file"); 527 528 if args.comment & args.input_file 529 then call error (error_table_$inconsistent, "-comment and -input_file"); 530 531 if args.hardcore & args.input_file 532 then call error (error_table_$inconsistent, "-hardcore and -input_file"); 533 534 if args.sort & args.to 535 then call error (error_table_$inconsistent, "-sort and -to"); 536 537 if args.sort & args.from 538 then call error (error_table_$inconsistent, "-sort and -from"); 539 540 return; 541 542 /* Argument handling */ 543 544 accept_number: 545 procedure (arg_flag, value, text); 546 declare arg_flag bit (1); /* (Output) */ 547 declare value fixed binary (35); /* (Output) */ 548 declare text char (*); /* (Input) */ 549 550 call get_next_arg; 551 value = cv_dec_check_ (operand, code); 552 if code ^= 0 | value < 0 553 then call error (error_table_$improper_data_format, "After -" || text || ". " || operand); 554 555 arg_flag = "1"b; 556 end accept_number; 557 558 accept_string: 559 procedure (arg_flag, value); 560 declare arg_flag bit (1); /* (Output) */ 561 declare value char (*); /* (Output) */ 562 563 call get_next_arg; 564 if length (operand) > length (value) 565 then call error (error_table_$bigarg, operand); 566 567 value = operand; 568 arg_flag = "1"b; 569 end accept_string; 570 571 accept_pathname: 572 procedure (arg_flag, value); 573 declare arg_flag bit (1); /* (Output) */ 574 declare value char (*); /* (Output) */ 575 576 call get_next_arg; 577 578 call absolute_pathname_ (operand, value, code); 579 if code ^= 0 580 then call error (code, operand); 581 582 arg_flag = "1"b; 583 end accept_pathname; 584 585 accept_field: 586 procedure (arg_flag, value, inclusive, table, subscript); 587 declare arg_flag bit (1); /* (Output) */ 588 declare value (*) bit (1); /* (Input/Output) */ 589 declare inclusive bit (1); /* (Input) */ 590 declare table (*) char (*); /* (Input) */ 591 declare subscript fixed binary; /* (Output) */ 592 593 call get_next_arg; 594 do i = 1 to hbound (table, 1) while (table (i) ^= operand); 595 end; 596 if i > hbound (table, 1) 597 then call error (0, "Invalid field name. " || operand); 598 599 if ^arg_flag | ^inclusive 600 then value (*) = "0"b; /* Clear value if first field specified or non-inclusive field */ 601 602 value (i) = "1"b; 603 subscript = i; 604 arg_flag = "1"b; 605 end accept_field; 606 607 accept_search_path: 608 procedure; 609 610 if n_search_paths >= hbound (search_path, 1) 611 then call error (error_table_$too_many_args, "Search paths."); 612 613 n_search_paths = n_search_paths + 1; 614 call accept_pathname (args.search_dir, search_path (n_search_paths)); 615 end accept_search_path; 616 617 get_next_arg: 618 procedure; 619 620 arg_nr = arg_nr + 1; 621 if arg_nr > n_args 622 then call error (error_table_$noarg, "Value for " || arg || "."); 623 624 call cu_$arg_ptr (arg_nr, operand_ptr, operand_len, code); 625 call err_check; 626 end get_next_arg; 627 628 missing: 629 procedure (dependent_arg, main_arg); 630 declare dependent_arg char (*); /* (Input) */ 631 declare main_arg char (*); /* (Input) */ 632 633 call com_err_ (0, me, "Invalid specification of -^a without -^a.", dependent_arg, main_arg); 634 goto quit; 635 end missing; 636 637 end get_arguments; 638 639 /* Open input profile data file */ 640 641 open_input_file: 642 procedure; 643 644 declare arg_program_name char (32); 645 646 call expand_pathname_$add_suffix (input_file, profile_data_suffix, dirname, entryname, code); 647 if code ^= 0 648 then call error (code, input_file); 649 650 call msf_manager_$open (dirname, entryname, pfd_file_control.fcb, code); 651 if pfd_file_control.fcb = null | code = error_table_$noentry 652 then call file_error; 653 654 exit = "0"b; 655 do i = 0 to hbound (pfd_file_control.component, 1) while (^exit); 656 call msf_manager_$get_ptr (pfd_file_control.fcb, (i), "0"b /* Do not create */, pfd_file_control.component (i), 657 (0), code); 658 if pfd_file_control.component (i) = null /* No more components */ 659 then exit = "1"b; 660 end; 661 662 /* Validate pfd data */ 663 664 pfd_ptr = pfd_file_control.component (0); 665 if pfd_header.version ^= pfd_format_version_1 666 then do; 667 code = error_table_$improper_data_format; 668 call file_error; 669 end; 670 671 /* Make sure all requested programs are in the profile data file. */ 672 673 do prog_nr = 1 to n_program_names; 674 arg_program_name = get_program_name (prog_nr); 675 676 exit = "0"b; 677 do program_ptr = ptr_from_msf_ptr (pfd_header.first_program) 678 repeat ptr_from_msf_ptr (program.next_program) while (program_ptr ^= null & ^exit); 679 exit = arg_program_name = program.name; 680 end; 681 682 if ^exit 683 then call error (0, 684 "Program not in profile data file. " || rtrim (arg_program_name) || " not in " || rtrim (dirname) 685 || ">" || rtrim (entryname)); 686 end; 687 end open_input_file; 688 689 /* Scan the current (internal static) profile data in order to construct 690* temporary data in pf format or in order to reset it (see beginning for 691* a discussion of the various data formats used) */ 692 693 scan_data: 694 procedure (constructing); 695 declare constructing bit (1); /* (Input) "0"b: resetting, "1"b: constructing data */ 696 697 declare another_component bit (1); 698 declare bound_object_segment bit (1); 699 declare 1 found, 700 2 profile bit (1), 701 2 symbol_table bit (1), 702 2 data bit (1); 703 declare hardcore_bound_segpath char (168); 704 declare hardcore_object_ptr ptr; 705 declare hardlp ptr; 706 declare hp ptr; 707 declare last_program_ptr ptr; 708 declare linkage_copy_ptr ptr; 709 declare lp ptr; 710 declare p ptr; 711 712 /* A temp segment is needed to store a copy of the internal static profile data 713* for hardcore segments, since ring 0 data cannot be read directly from ring 4 */ 714 715 if args.hardcore 716 then call get_seg (1, linkage_copy_ptr); 717 718 /* Get temp segs for temp profile data storage */ 719 720 if constructing 721 then do; 722 call get_seg (2, program_ptr); 723 call get_seg (3, value_ptr); 724 725 pfd_file_control.last_component = -1; 726 call extend_temp_data_file; 727 pfd_ptr = pfd_file_control.component (0); 728 729 /* Set up temp profile data header */ 730 731 pfd_header.version = pfd_format_version_1; 732 pfd_header.mbz = "0"b; 733 pfd_header.date_time_stored = clock (); 734 pfd_header.person_project = get_group_id_ (); 735 pfd_header.first_program = null_msf_ptr; 736 737 if args.comment 738 then pfd_header.comment = comment; 739 else pfd_header.comment = ""; 740 741 last_temp_data_word.component = 0; 742 last_temp_data_word.offset = size (pfd_header) - 1; 743 744 last_program_ptr = null; /* No previous program data */ 745 end; 746 747 /* Other initialization */ 748 749 hardlp = null; /* Hardcore linkage section not copied yet */ 750 sb = stackbaseptr (); 751 752 /* Scan all specified program names. */ 753 754 do prog_nr = 1 to n_program_names; 755 call cu_$arg_ptr (program_name_array (prog_nr), arg_ptr, arg_len, code); 756 call err_check; /* No error expected */ 757 758 /* Initialize scan of this program data */ 759 760 string (found) = ""b; 761 762 /* Get pointer to the program's symbol table. For hardcore programs, 763* find name of bound segment containing the program and use this name 764* to search for the ring 4 library copy of the bound segment (using the specified search dirs). */ 765 766 if args.hardcore 767 then begin; 768 declare hardcore_bound_segname char (32); 769 770 call ring0_get_$segptr ("", arg, hardcore_object_ptr, code); 771 /* Get ptr to ring 0 object seg */ 772 if code = 0 773 then call ring0_get_$name ("", hardcore_bound_segname, ptr (hardcore_object_ptr, 0), code); 774 /* Get primary program name */ 775 if code = 0 776 then begin; 777 declare search_nr fixed binary; 778 779 code = error_table_$noentry; 780 do search_nr = 1 to n_search_paths while (code ^= 0); 781 hardcore_bound_segpath = 782 rtrim (search_path (search_nr)) || ">" || hardcore_bound_segname; 783 /* Pathname of ring 4 library copy */ 784 call find_object (hardcore_bound_segpath, p, hp, bound_object_segment, code); 785 /* Try to initiate the copy */ 786 end; 787 end; 788 end; 789 else call find_object (arg, p, hp, bound_object_segment, code); 790 791 if code ^= 0 792 then if code = error_table_$name_not_found 793 then call error (0, "Reference name not found. Program has not been executed. " || arg); 794 else call error (code, arg); /* Probably entry not found */ 795 796 /* Find linkage section */ 797 798 if args.hardcore 799 then begin; 800 declare hardcore_object_segnr fixed binary; 801 declare 1 lot_item aligned, 802 2 linkage_ptr ptr unaligned; 803 declare lot_ptr ptr; 804 805 hardcore_object_segnr = bin (baseno (hardcore_object_ptr)); 806 call ring0_get_$segptr ("", "lot", lot_ptr, code); 807 /* Get ptr to ring 0 table of linkage sections */ 808 call err_check; /* No error expected */ 809 810 call ring_zero_peek_ (addrel (lot_ptr, hardcore_object_segnr), addr (lot_item), 1, code); 811 call err_check; /* No error expected */ 812 813 if unspec (lot_item) = "0"b 814 then call error (error_table_$noentry, arg); 815 /* Program's active linkage nonexistent */ 816 817 lp = lot_item.linkage_ptr; /* Unal to aligned */ 818 end; 819 else begin; /* Non-hardcore */ 820 declare object_segnr fixed binary; 821 822 object_segnr = bin (baseno (p)); 823 isotp = stack_header.isot_ptr; 824 825 if unspec (isot.isp (object_segnr)) = "0"b | (isotp -> isot1(object_segnr).fault = "11"b) 826 then call error (0, "Program has not been executed. " || arg); 827 828 lp = isot.isp (object_segnr); /* Ptr to active linkage */ 829 end; 830 831 /* Scan data of each component of bound object segment */ 832 833 another_component = "1"b; 834 do while (another_component); 835 call scan_component; 836 837 another_component = p -> std_symbol_header.next_block ^= ""b; 838 if another_component 839 then p = addrel (hp, p -> std_symbol_header.next_block); 840 end; 841 842 /* Check for no profile data */ 843 844 if ^found.profile 845 then call error (0, "Program was not compiled with -profile. " || arg); 846 847 if ^found.symbol_table 848 then call error (0, "Program's symbol table has been removed. " || arg); 849 850 if ^found.data & constructing 851 then call error (0, "Program has not been executed since its profile data was reset. " || arg); 852 end; 853 854 return; 855 856 /* Scan data of an unbound object segment or one component of a bound object segment. */ 857 858 scan_component: 859 procedure; 860 861 declare 1 last_temp_data aligned like msf_ptr_template; 862 declare long bit (1); 863 declare map ptr; 864 declare overhead fixed binary; 865 declare pf ptr; 866 declare pf_loc bit (18); 867 declare pfh ptr; 868 declare q ptr; 869 declare sp ptr; 870 declare total_cost_or_time fixed binary (35); 871 declare total_count fixed binary (35); 872 declare total_page_faults fixed binary (35); 873 874 if p -> std_symbol_header.identifier ^= "symbtree" 875 then if p -> symbol_header.translator.code = "010100000"b 876 then call error (0, arg || " is not a standard object segment."); 877 else return; 878 879 if p -> std_symbol_header.area_pointer = "0"b 880 then return; 881 882 q = addrel (p, p -> std_symbol_header.area_pointer); 883 if q -> pl1_symbol_block.identifier ^= "pl1info" 884 then return; 885 886 long = q -> pl1_symbol_block.flags.long_profile; 887 888 if ^q -> pl1_symbol_block.flags.profile & ^long 889 then return; 890 891 pf_loc = q -> pl1_symbol_block.profile; 892 893 /* At this point it is known that the program component has profile data (zero or not) */ 894 895 found.profile = "1"b; 896 897 if q -> pl1_symbol_block.table_removed 898 then return; 899 900 found.symbol_table = "1"b; 901 902 /* Set up temp (partial) program data header */ 903 904 if constructing 905 then begin; 906 declare source_map_ptr ptr; 907 declare string_len fixed binary (21); 908 declare string_ptr ptr; 909 910 declare based_string char (string_len) based (string_ptr); 911 912 program.next_program = null_msf_ptr; 913 914 string_ptr = addrel (p, q -> pl1_symbol_block.segname.offset); 915 string_len = bin (q -> pl1_symbol_block.segname.size); 916 program.name = based_string; 917 918 if args.output_file & ^bound_object_segment & get_program_name (prog_nr) ^= program.name 919 then call com_err_ (0, me, "Name of ^a in profile data file is ^a.", arg, program.name); 920 921 program.translator = p -> std_symbol_header.generator; 922 program.flags.long_profile = long; 923 program.flags.mbz = "0"b; 924 program.source_path_array = null_msf_ptr; 925 program.n_operators = 0; 926 program.operator_array = null_msf_ptr; 927 program.n_values = 0; 928 program.value_array = null_msf_ptr; 929 930 source_map_ptr = addrel (p, p -> std_symbol_header.source_map); 931 program.last_source_path = source_map_ptr -> source_map.number - 1; 932 933 source_path_ptr = addrel (program_ptr, size (program)); 934 operator_ptr = addrel (source_path_ptr, size (source_path_array)); 935 936 do i = 0 to hbound (source_path_array, 1); 937 string_ptr = addrel (p, source_map_ptr -> source_map.map (i + 1).pathname.offset); 938 string_len = bin (source_map_ptr -> source_map.map (i + 1).pathname.size); 939 source_path_array (i) = based_string; 940 end; 941 942 total_count = 0; 943 total_cost_or_time = 0; 944 total_page_faults = 0; 945 end; 946 947 /* Initialize statement map base */ 948 949 sp = addrel (p, q -> pl1_symbol_block.map.first); 950 951 if args.hardcore 952 then do; /* copy entire linkage if hardcore */ 953 if hardlp ^= lp 954 then begin; /* suppress copy if same seg */ 955 declare bword bit (36) aligned based; 956 declare 1 copy_lh aligned like header; 957 /* Copy of hardcore linkage header */ 958 declare same bit (1); 959 declare word bit (36) aligned; 960 declare reloff fixed binary (18); 961 962 reloff = bin (p -> std_symbol_header.mini_truncate) - 1; 963 call ring_zero_peek_ (addrel (hardcore_object_ptr, reloff), addr (word), 1, code); 964 /* check right seg */ 965 if code = 0 966 then same = ptr (hp, reloff) -> bword = word; 967 else same = "0"b; 968 969 if ^same 970 then do; 971 call com_err_ (0, me, "Hardcore program ^a does not match library copy ^a|^o", arg, 972 hardcore_bound_segpath, reloff); 973 goto quit; 974 end; 975 976 call ring_zero_peek_ (lp, addr (copy_lh), size (copy_lh), code); 977 if code ^= 0 978 then call error (code, arg); 979 980 call ring_zero_peek_ (lp, linkage_copy_ptr, bin (copy_lh.block_length), code); 981 if code ^= 0 982 then call error (code, arg); 983 984 hardlp = lp; 985 end; 986 987 pf = addrel (linkage_copy_ptr, pf_loc); /* generate profile ptr */ 988 end; 989 else pf = addrel (lp, pf_loc); /* non-hardcore */ 990 991 /* Scan through a single program's profile. */ 992 993 if long 994 then do; 995 pfh = pf; /* Pointer to long_profile header */ 996 if pfh -> long_profile_header.control.count ^= 0 997 then begin; 998 declare entry_index fixed binary; 999 1000 overhead = 1001 float (pfh -> long_profile_header.control.vcpu) 1002 / float (pfh -> long_profile_header.control.count); 1003 1004 pf = addrel (pfh, size (long_profile_header)); 1005 /* Skip past header to find first data */ 1006 do entry_index = 1 to pfh -> long_profile_header.nentries; 1007 map = addrel (sp, pf -> long_profile_entry.map); 1008 call scan_statement_data; 1009 pf = addrel (pf, size (long_profile_entry)); 1010 end; 1011 end; 1012 end; 1013 1014 else do map = addrel (sp, pf -> profile_entry.map) repeat addrel (sp, pf -> profile_entry.map) 1015 while (map -> statement_map.line ^= (14)"1"b); 1016 call scan_statement_data; 1017 pf = addrel (pf, size (profile_entry)); 1018 end; 1019 1020 /* Reset long_profile current data header */ 1021 1022 if ^constructing 1023 then do; 1024 if long 1025 then begin; 1026 declare n fixed binary; 1027 1028 n = pfh -> long_profile_header.nentries; 1029 unspec (pfh -> long_profile_header) = "0"b; 1030 pfh -> long_profile_header.nentries = n; 1031 pfh -> long_profile_header.last_offset = dummy_entry_offset; 1032 end; 1033 1034 return; 1035 end; 1036 1037 /* Finish storing data for this program component */ 1038 1039 program.total_count = total_count; 1040 program.total_cost_or_time = total_cost_or_time; 1041 program.total_page_faults = total_page_faults; 1042 1043 /* Sort values into ascending line order */ 1044 /* Algorithm is Shell sort */ 1045 1046 n_values = program.n_values; /* For efficiency */ 1047 interval = n_values; 1048 do while (interval > 1); 1049 interval = 2 * divide (interval, 4, 18) + 1; 1050 do i = 1 to n_values - interval; 1051 k = i + interval; 1052 comparing = "1"b; 1053 do while (comparing); 1054 comparing = "0"b; 1055 j = k - interval; 1056 if unspec (value_array (j).source) > unspec (value_array (k).source) 1057 then begin; 1058 declare 1 temp_value aligned like value_array; 1059 1060 temp_value = value_array (k); 1061 value_array (k) = value_array (j); 1062 value_array (j) = temp_value; 1063 if j > interval 1064 then do; 1065 comparing = "1"b; 1066 k = j; 1067 end; 1068 end; 1069 end; 1070 end; 1071 end; 1072 1073 /* Copy and thread partial program data (now complete) to latest temp profile data file. */ 1074 1075 call store_temp_data (program_ptr, size (program)); 1076 1077 if last_program_ptr = null 1078 then pfd_header.first_program = last_temp_data; 1079 else last_program_ptr -> program.next_program = last_temp_data; 1080 1081 last_program_ptr = ptr_from_msf_ptr (last_temp_data); 1082 1083 call store_temp_data (source_path_ptr, size (source_path_array)); 1084 last_program_ptr -> program.source_path_array = last_temp_data; 1085 1086 if program.n_operators ^= 0 1087 then do; 1088 call store_temp_data (operator_ptr, size (operator_array)); 1089 last_program_ptr -> program.operator_array = last_temp_data; 1090 end; 1091 1092 if program.n_values ^= 0 1093 then do; 1094 call store_temp_data (value_ptr, size (value_array)); 1095 last_program_ptr -> program.value_array = last_temp_data; 1096 end; 1097 1098 return; 1099 1100 /* Scan the profile data for one statement. */ 1101 1102 scan_statement_data: 1103 procedure; 1104 1105 declare cost_or_time fixed binary (35); 1106 declare count fixed binary (35); 1107 declare instruction fixed binary (35); 1108 declare instruction_array_ptr ptr; 1109 declare map2 ptr; 1110 declare masked_instruction bit (36); 1111 declare n_instructions fixed binary; 1112 1113 declare instruction_array (n_instructions) bit (36) aligned based (instruction_array_ptr); 1114 1115 /* Reset current profile data */ 1116 1117 if ^constructing 1118 then do; 1119 if long 1120 then do; 1121 pf -> long_profile_entry.count = 0; 1122 pf -> long_profile_entry.vcpu = 0; 1123 pf -> long_profile_entry.pf = 0; 1124 end; 1125 else pf -> profile_entry.count = 0; 1126 1127 return; 1128 end; 1129 1130 map2 = addrel (map, size (statement_map)); /* Pointer to next statement map entry */ 1131 n_instructions = bin (map2 -> statement_map.location) - bin (map -> statement_map.location); 1132 instruction_array_ptr = ptr (p, map -> statement_map.location); 1133 1134 /* Create next temp (partial) value element */ 1135 1136 program.n_values = program.n_values + 1; 1137 value = program.n_values; 1138 value_array (value).source.file = bin (map -> statement_map.file); 1139 value_array (value).source.line = bin (map -> statement_map.line); 1140 value_array (value).source.statement = bin (map -> statement_map.statement); 1141 1142 value_array (value).source.pf_entry_seq = 0; 1143 if value > 1 1144 then if value_array (value).source.file = value_array (value - 1).source.file 1145 & value_array (value).source.line = value_array (value - 1).source.line 1146 & value_array (value).source.statement = value_array (value - 1).source.statement 1147 then value_array (value).source.pf_entry_seq = value_array (value - 1).source.pf_entry_seq + 1; 1148 1149 value_array (value).n_operators = 0; 1150 value_array (value).first_operator = program.n_operators + 1; 1151 1152 if long 1153 then count = pf -> long_profile_entry.count; 1154 else count = pf -> profile_entry.count; 1155 1156 if count ^= 0 1157 then found.data = "1"b; 1158 1159 /* Store all instructions in this statement that call operators */ 1160 1161 if long 1162 then i = 2; /* Skip long_profile operator */ 1163 else i = 1; 1164 1165 do instruction = i to n_instructions; 1166 masked_instruction = instruction_array (instruction) & "700000777777"b3; 1167 if masked_instruction = "000000700100"b3 /* tsx0 pr0|0 */ 1168 | masked_instruction = "000000710100"b3 /* tra pr0|0 */ 1169 | masked_instruction = "000000273100"b3 /* tsp3 pr0|0 */ 1170 | masked_instruction = "200000272100"b3 /* tsp2 pr2|0 (entry operators) */ 1171 | masked_instruction = "000000707100"b3 /* tsx7 pr0|0 (BASIC operators) */ 1172 then do; /* Found an instruction that calls an operator */ 1173 program.n_operators = program.n_operators + 1; 1174 /* Per program */ 1175 value_array (value).n_operators = value_array (value).n_operators + 1; 1176 /* Per statement */ 1177 operator_array (program.n_operators) = instruction_array (instruction); 1178 /* Store instruction as next operator_array element */ 1179 end; 1180 end; 1181 1182 /* Calculate statement cost */ 1183 1184 if long 1185 then do; 1186 if count = 0 1187 then cost_or_time = 0; 1188 else cost_or_time = pf -> long_profile_entry.vcpu - overhead * count; 1189 /* Virtual CPU time minus long_profile overhead */ 1190 1191 if cost_or_time < 0 1192 then cost_or_time = 0; /* Null statements should have zero time */ 1193 end; 1194 1195 else do; 1196 cost_or_time = n_instructions - 1; /* Subtract cost of the aos instruction */ 1197 cost_or_time = cost_or_time + 9 * value_array (value).n_operators; 1198 /* Each operator call counts as 10 */ 1199 1200 /* Subtract cost of epplp instruction at start of profile aos sequence if it would have been generated without profile. This 1201* check is not made correctly for some EIS instructions. */ 1202 1203 if instruction_array (1) = "600044370120"b3 1204 /* epplp sp|44,* */ 1205 then begin; 1206 declare epplp bit (1) aligned; 1207 declare use_lp bit (1) aligned; 1208 1209 epplp = "0"b; 1210 use_lp = "0"b; 1211 do instruction = 3 to n_instructions while (^epplp & ^use_lp); 1212 use_lp = (instruction_array (instruction) & "700000000100"b3) = "400000000100"b3; 1213 1214 if ^use_lp 1215 then epplp = substr (instruction_array (instruction), 19, 10) = "370"b3 || "0"b; 1216 end; 1217 1218 if epplp | ^use_lp 1219 then cost_or_time = cost_or_time - 1; 1220 end; 1221 1222 cost_or_time = cost_or_time * count; /* Statement cost times executions */ 1223 end; 1224 1225 /* Store statement data */ 1226 1227 value_array (value).count = count; 1228 value_array (value).cost_or_time = cost_or_time; 1229 1230 if long 1231 then value_array (value).page_faults = pf -> long_profile_entry.pf; 1232 else value_array (value).page_faults = 0; 1233 1234 /* Sum up totals */ 1235 1236 total_count = total_count + count; 1237 total_cost_or_time = total_cost_or_time + cost_or_time; 1238 1239 if long 1240 then total_page_faults = total_page_faults + pf -> long_profile_entry.pf; 1241 end scan_statement_data; 1242 1243 /* Copy partial (now complete) data structure into latest temp data segment */ 1244 1245 /* On return, last_temp_data msf-points to the copied data, 1246* last_temp_data_word msf-points to the last word of the copied data. */ 1247 1248 store_temp_data: 1249 procedure (from_ptr, n_words); 1250 declare from_ptr ptr; /* (Input) */ 1251 declare n_words fixed binary (19); /* (Input) */ 1252 1253 declare word_array (n_words) bit (36) aligned based; 1254 1255 if last_temp_data_word.offset + n_words >= sys_info$max_seg_size 1256 then do; 1257 call extend_temp_data_file; 1258 last_temp_data.component = pfd_file_control.last_component; 1259 last_temp_data.offset = 0; 1260 end; 1261 else do; 1262 last_temp_data.component = last_temp_data_word.component; 1263 last_temp_data.offset = last_temp_data_word.offset + 1; 1264 end; 1265 1266 ptr_from_msf_ptr (last_temp_data) -> word_array = from_ptr -> word_array; 1267 1268 last_temp_data_word.component = last_temp_data.component; 1269 last_temp_data_word.offset = last_temp_data.offset + n_words - 1; 1270 end store_temp_data; 1271 1272 end scan_component; 1273 1274 /* Find (and initiate) the specified program */ 1275 1276 find_object: 1277 procedure (name, p, hp, bound_object_segment, code); 1278 1279 declare name char (*); /* (Input) */ 1280 declare p ptr; /* (Output) Component symbol block pointer */ 1281 declare hp ptr; /* (Output) Base of symbol section pointer */ 1282 declare bound_object_segment bit (1); /* (Output) */ 1283 declare code fixed binary (35); /* (Output) */ 1284 1285 declare delim char (1); 1286 1287 bound_object_segment = "1"b; 1288 1289 if search (name, "<>") = 0 1290 then delim = "$"; /* Reference name */ 1291 else delim = "|"; /* Pathname */ 1292 1293 hp = cv_ptr_ (rtrim (name) || delim || "bind_map", code); 1294 /* Bound segment */ 1295 if code = 0 1296 then p = addrel (hp, hp -> std_symbol_header.next_block); 1297 else do; /* Non-bound segment */ 1298 hp = cv_ptr_ (rtrim (name) || delim || "symbol_table", code); 1299 p = hp; 1300 bound_object_segment = "0"b; 1301 end; 1302 end find_object; 1303 1304 /* Extend temp profile data by one segment */ 1305 1306 extend_temp_data_file: 1307 procedure; 1308 1309 if pfd_file_control.last_component >= hbound (pfd_file_control.component, 1) 1310 then call error (error_table_$file_is_full, "Temporary (internal) data."); 1311 /* Should never happen */ 1312 1313 pfd_file_control.last_component = pfd_file_control.last_component + 1; 1314 call get_temp_segment_ (me, pfd_file_control.component (pfd_file_control.last_component), code); 1315 call err_check; 1316 end extend_temp_data_file; 1317 1318 end scan_data; 1319 1320 /* Copy entire temp profile data to permanent pfd file. */ 1321 1322 store_output_file: 1323 procedure; 1324 1325 declare component fixed binary; 1326 1327 call expand_pathname_$add_suffix (output_file, profile_data_suffix, dirname, entryname, code); 1328 if code ^= 0 1329 then call error (code, output_file); 1330 1331 call msf_manager_$open (dirname, entryname, output_fcb, code); 1332 if output_fcb = null 1333 then call file_error; 1334 1335 do component = 0 to pfd_file_control.last_component - 1; 1336 call store_output_data (sys_info$max_seg_size); 1337 end; 1338 1339 call store_output_data (last_temp_data_word.offset + 1); 1340 1341 call msf_manager_$adjust (output_fcb, component, 36 * (last_temp_data_word.offset + 1), "111"b, code); 1342 if code ^= 0 1343 then call file_error; 1344 1345 call msf_manager_$close (output_fcb); 1346 output_fcb = null; 1347 1348 return; 1349 1350 store_output_data: 1351 procedure (n_words); 1352 declare n_words fixed binary (19); /* (Input) */ 1353 1354 declare output_ptr ptr; 1355 1356 declare word_array (n_words) bit (36) aligned based; 1357 1358 call msf_manager_$get_ptr (output_fcb, component, "1"b /* Create */, output_ptr, (0), code); 1359 if output_ptr = null 1360 then call file_error; 1361 1362 output_ptr -> word_array = pfd_file_control.component (component) -> word_array; 1363 end store_output_data; 1364 1365 end store_output_file; 1366 1367 /* Subroutine to print or list profile data (-print or -list control args) */ 1368 1369 print_or_list: 1370 procedure (listing); 1371 declare listing bit (1); /* -list rather than -print */ 1372 1373 declare date_time char (24); 1374 declare print_program bit (1); 1375 declare more_than_one_program bit (1); 1376 declare this_value fixed binary (18); 1377 declare threshold (4) fixed binary (35); 1378 1379 more_than_one_program = "0"b; /* Assume one program (for newpages) */ 1380 1381 /* Output data header */ 1382 1383 if args.input_file & ^args.no_header & ^listing 1384 then call output_header (iox_$user_output); 1385 1386 /* Output data for all programs */ 1387 1388 do program_ptr = ptr_from_msf_ptr (pfd_header.first_program) repeat ptr_from_msf_ptr (program.next_program) 1389 while (program_ptr ^= null); 1390 1391 /* Select subset of programs (-input_file only) */ 1392 1393 if args.input_file & n_program_names > 0 1394 then do; 1395 do prog_nr = 1 to n_program_names while (get_program_name (prog_nr) ^= program.name); 1396 end; 1397 print_program = prog_nr <= n_program_names; 1398 end; 1399 else print_program = "1"b; 1400 1401 if print_program 1402 then if listing 1403 then call list_one_program; 1404 else call print_one_program; 1405 end; 1406 1407 return; 1408 1409 /* Print the profile data for one program. */ 1410 1411 print_one_program: 1412 procedure; 1413 1414 declare skip bit (1); 1415 declare sort_array_ptr ptr; 1416 1417 declare sort_array (n_values) fixed binary (18) aligned based (sort_array_ptr); 1418 1419 call ioa_ ("^/Program: ^a", program.name); 1420 1421 if ^args.no_header 1422 then call ioa_ (" LINE STMT COUNT ^[TIME^;COST^] STARS^[ AVGTIME PGEFLTS^] OPERATORS", 1423 program.long_profile, program.long_profile); 1424 1425 operator_ptr = ptr_from_msf_ptr (program.operator_array); 1426 value_ptr = ptr_from_msf_ptr (program.value_array); 1427 n_values = program.n_values; 1428 1429 /* Sort via sorting array */ 1430 1431 if args.sort 1432 then begin; 1433 declare disordered bit (1); 1434 declare sort_test fixed binary; 1435 1436 declare cost_or_time_test fixed binary internal static options (constant) initial (3); 1437 declare count_test fixed binary internal static options (constant) initial (1); 1438 declare page_faults_test fixed binary internal static options (constant) initial (2); 1439 1440 call get_seg (2, sort_array_ptr); 1441 1442 do value = 1 to n_values; /* Initialize to identity vector */ 1443 sort_array (value) = value; 1444 end; 1445 1446 /* Select field on which to sort */ 1447 1448 if sort_field (1) 1449 then sort_test = count_test; 1450 1451 else if (sort_field (4) | sort_field (5)) & program.long_profile 1452 then sort_test = page_faults_test; 1453 1454 else sort_test = cost_or_time_test; /* Default */ 1455 1456 /* Shell sort algorithm */ 1457 1458 interval = n_values; 1459 do while (interval > 1); 1460 interval = 2 * divide (interval, 4, 18) + 1; 1461 do i = 1 to n_values - interval; 1462 k = i + interval; 1463 comparing = "1"b; 1464 do while (comparing); 1465 comparing = "0"b; 1466 j = k - interval; 1467 goto case (sort_test); 1468 1469 case (1): /* count_test */ 1470 disordered = value_array (sort_array (j)).count < value_array (sort_array (k)).count; 1471 goto end_case; 1472 1473 case (2): /* page_faults_test */ 1474 disordered = 1475 value_array (sort_array (j)).page_faults < value_array (sort_array (k)).page_faults; 1476 goto end_case; 1477 1478 case (3): /* cost_or_time_test */ 1479 disordered = 1480 value_array (sort_array (j)).cost_or_time < value_array (sort_array (k)).cost_or_time; 1481 goto end_case; 1482 1483 end_case: 1484 if disordered 1485 then do; 1486 value = sort_array (k); 1487 sort_array (k) = sort_array (j); 1488 sort_array (j) = value; 1489 if j > interval 1490 then do; 1491 comparing = "1"b; 1492 k = j; 1493 end; 1494 end; 1495 end; 1496 end; 1497 end; 1498 end; 1499 1500 call init_star_thresholds (program.total_cost_or_time); 1501 1502 exit = "0"b; 1503 do value = 1 to n_values while (^exit); 1504 skip = "0"b; 1505 1506 /* Test for terminating conditions */ 1507 1508 if args.sort 1509 then this_value = sort_array (value); 1510 else this_value = value; 1511 1512 if args.first 1513 then if value > first 1514 then exit = "1"b; 1515 1516 if (args.to | args.from) & value_array (value).file ^= 0 1517 then exit = "1"b; 1518 1519 if args.to 1520 then if value_array (value).line > to 1521 then exit = "1"b; 1522 1523 if args.from 1524 then if value_array (value).line < from 1525 then skip = "1"b; 1526 1527 if args.brief & value_array (this_value).count = 0 1528 then skip = "1"b; 1529 1530 if ^exit & ^skip 1531 then begin; 1532 declare average_time fixed binary (35); 1533 declare operator_name char (32) aligned; 1534 1535 /* Output this value */ 1536 1537 if program.long_profile & value_array (this_value).count ^= 0 1538 then average_time = 1539 float (value_array (this_value).cost_or_time) / float (value_array (this_value).count) 1540 + 0.5; 1541 else average_time = 0; 1542 1543 line_buffer = ""; 1544 do i = value_array (this_value).first_operator 1545 to value_array (this_value).first_operator + value_array (this_value).n_operators - 1; 1546 call find_operator_name_ (program.translator, addr (operator_array (i)), operator_name); 1547 1548 if operator_name ^= "" & line_buffer ^= "" 1549 then line_buffer = line_buffer || ", "; 1550 1551 line_buffer = line_buffer || rtrim (operator_name); 1552 end; 1553 1554 call ioa_ 1555 ( 1556 "^[^s^6d ^;^d-^d^8t^]^[^4d^;^s^4x^] ^7d ^9d ^4a ^[^[^7d^;^s^7x^] ^[^8d^;^s^8x^] ^;^4s^]^a", 1557 value_array (this_value).file = 0, value_array (this_value).file, value_array (this_value).line, 1558 value_array (this_value).statement ^= 1, value_array (this_value).statement, 1559 value_array (this_value).count, value_array (this_value).cost_or_time, stars (), 1560 program.long_profile, average_time ^= 0, average_time, 1561 value_array (this_value).page_faults ^= 0, value_array (this_value).page_faults, line_buffer); 1562 end; 1563 end; 1564 1565 /* Output totals for this program */ 1566 1567 call ioa_ ("-------"); /* Separator for clarity */ 1568 call ioa_ ("Totals: ^11d ^9d^[ ^24d^]", program.total_count, program.total_cost_or_time, program.long_profile, 1569 program.total_page_faults); 1570 end print_one_program; 1571 1572 /* List the profile data for one program. */ 1573 1574 list_one_program: 1575 procedure; 1576 1577 declare source_length fixed binary (21); 1578 1579 /* Open the source segment. */ 1580 1581 call open_file (0); 1582 1583 /* Open the listing file */ 1584 1585 if list_iocb = null 1586 then begin; 1587 declare list_file char (32); 1588 1589 if n_program_names = 0 1590 then list_file = rtrim (program.name) || "." || profile_listing_suffix; 1591 else list_file = rtrim (get_program_name (1)) || "." || profile_listing_suffix; 1592 1593 call iox_$attach_name (me || "." || unique_chars_ (""b), list_iocb, "vfile_ " || list_file, 1594 codeptr (list_one_program), code); 1595 if code = 0 1596 then call iox_$open (list_iocb, Stream_output, "0"b, code); 1597 1598 if code ^= 0 1599 then call error (code, list_file); 1600 end; 1601 1602 /* Output program data header */ 1603 1604 if more_than_one_program 1605 then call ioa_$ioa_switch (list_iocb, "^|"); 1606 else more_than_one_program = "1"b; 1607 1608 call ioa_$ioa_switch_nnl (list_iocb, "Profile listing of ^a>^a", dirname, entryname); 1609 if args.input_file 1610 then do; 1611 call expand_pathname_$add_suffix (input_file, profile_data_suffix, dirname, entryname, code); 1612 call err_check; 1613 call output_header (list_iocb); 1614 end; 1615 else call ioa_$ioa_switch (list_iocb, ""); 1616 1617 call date_time_ (clock (), date_time); 1618 call ioa_$ioa_switch (list_iocb, "Date: ^a", date_time); 1619 call ioa_$ioa_switch (list_iocb, "Total count: ^d Total ^[time: ^d Total page faults: ^d^;cost: ^d^s^]", 1620 program.total_count, program.long_profile, program.total_cost_or_time, program.total_page_faults); 1621 1622 /* Output profile data for all source segments that contain code. */ 1623 1624 call init_star_thresholds (program.total_cost_or_time); 1625 1626 value_ptr = ptr_from_msf_ptr (program.value_array); 1627 n_values = program.n_values; 1628 this_value = 1; 1629 1630 call list_file (0); 1631 do while (this_value <= n_values); 1632 call open_file (value_array (this_value).file); 1633 call ioa_$ioa_switch (list_iocb, "^/Include file ^d: ^a>^a", value_array (this_value).file, dirname, entryname) 1634 ; 1635 1636 call list_file (value_array (this_value).file); 1637 end; 1638 1639 return; 1640 1641 /* Open one source segment. */ 1642 1643 open_file: 1644 procedure (file); 1645 declare file fixed binary (10) unsigned unaligned; 1646 /* (Input) */ 1647 1648 declare source_bc fixed binary (24); 1649 1650 source_path_ptr = ptr_from_msf_ptr (program.source_path_array); 1651 call expand_pathname_ (source_path_array (file), dirname, entryname, code); 1652 if code ^= 0 1653 then call error (code, source_path_array (file)); 1654 1655 /* Specified source_dir overrides original directory */ 1656 1657 if args.source_dir 1658 then dirname = source_dir; 1659 1660 call hcs_$initiate_count (dirname, entryname, "", source_bc, 0, source_ptr, code); 1661 if source_ptr = null & (file = 0 | ^args.source_dir) 1662 then call file_error; 1663 1664 /* Look for include files in their original directory if they weren't in the source_dir. */ 1665 1666 if source_ptr = null 1667 then do; 1668 call expand_pathname_ (source_path_array (file), dirname, entryname, code); 1669 call err_check; 1670 1671 call hcs_$initiate_count (dirname, entryname, "", source_bc, 0, source_ptr, code); 1672 if source_ptr = null 1673 then do; 1674 dirname = source_dir; 1675 call file_error; 1676 end; 1677 end; 1678 1679 source_length = divide (source_bc + 8, 9, 21); 1680 if source_length = 0 1681 then do; 1682 code = error_table_$zero_length_seg; 1683 call file_error; 1684 end; 1685 end open_file; 1686 1687 /* Create a profile listing for one source segment. */ 1688 1689 list_file: 1690 procedure (file); 1691 declare file fixed binary (10) unsigned unaligned; 1692 /* (Input) */ 1693 1694 declare column fixed binary; 1695 declare continuation_line bit (1); 1696 declare line fixed binary (21); 1697 declare scan_length fixed binary (21); 1698 declare source_position fixed binary (21); 1699 declare tab_column fixed binary; 1700 1701 declare source char (source_length) based (source_ptr); 1702 1703 /* Print the listing header. */ 1704 1705 call ioa_$ioa_switch (list_iocb, "^/ COUNT ^[TIME STARS P ^;COST STARS^] LINE SOURCE", program.long_profile); 1706 1707 /* Output all requested values for this program data */ 1708 1709 call initialize_line; 1710 1711 line = 1; 1712 source_position = 1; 1713 do while (source_position <= length (source)); 1714 scan_length = search (substr (source, source_position), HT_NL) - 1; 1715 if scan_length < 0 1716 then scan_length = length (substr (source, source_position)); 1717 1718 begin; 1719 declare chars char (scan_length) defined (source) position (source_position); 1720 1721 call put_chars (chars); 1722 end; 1723 1724 if source_position + scan_length <= length (source) 1725 then if substr (source, source_position + scan_length, 1) = HT 1726 then begin; 1727 declare SP10 char (10) internal static options (constant) initial (""); 1728 declare spaces_to_tab_stop char (10 - mod (tab_column - 1, 10)) defined (SP10); 1729 1730 call put_chars (spaces_to_tab_stop); 1731 end; 1732 1733 else call put_nl; /* NL */ 1734 1735 source_position = source_position + scan_length + 1; 1736 end; 1737 1738 /* Finish last line if the source segment doesn't end with a NL. */ 1739 1740 if index (reverse (source), NL) ^= 1 1741 then call put_nl; 1742 1743 /* Output multiple profile data for the last line. */ 1744 1745 call put_profile_data ("0"b); 1746 1747 /* All finished with this source segment. */ 1748 1749 call hcs_$terminate_noname (source_ptr, code); 1750 source_ptr = null; 1751 call err_check; 1752 1753 return; 1754 1755 /* Store characters into the listing file. */ 1756 1757 put_chars: 1758 procedure (chars); 1759 declare chars char (*); /* (Input) */ 1760 1761 declare chars_to_store fixed binary (21); 1762 declare start_position fixed binary (21); 1763 1764 start_position = 1; 1765 do while (start_position <= length (chars)); 1766 call put_profile_data ("1"b); 1767 1768 chars_to_store = min (length (substr (chars, start_position)), line_length - column + 1); 1769 line_buffer = line_buffer || substr (chars, start_position, chars_to_store); 1770 1771 start_position = start_position + chars_to_store; 1772 column = column + chars_to_store; 1773 tab_column = tab_column + chars_to_store; 1774 1775 if column > line_length 1776 then call put_line; 1777 end; 1778 end put_chars; 1779 1780 /* Store a NL in the listing file. */ 1781 1782 put_nl: 1783 procedure; 1784 1785 call put_profile_data ("1"b); 1786 call put_line; 1787 call initialize_line; 1788 line = line + 1; 1789 end put_nl; 1790 1791 /* Prefix a line in the listing file with profile data if necessary. */ 1792 1793 put_profile_data: 1794 procedure (more_source_characters); 1795 declare more_source_characters bit (1) aligned; /* (Input) */ 1796 1797 declare previous_line_profile_data 1798 bit (1) aligned; 1799 declare this_line_profile_data bit (1) aligned; 1800 1801 do while (column = 1); 1802 previous_line_profile_data = "0"b; 1803 this_line_profile_data = "0"b; 1804 1805 if this_value <= n_values 1806 then if value_array (this_value).line < line & value_array (this_value).file = file 1807 then previous_line_profile_data = "1"b; 1808 1809 else if value_array (this_value).line = line & value_array (this_value).file = file 1810 then this_line_profile_data = "1"b; 1811 1812 if previous_line_profile_data | this_line_profile_data 1813 then do; 1814 call ioa_$ioa_switch_nnl (list_iocb, 1815 "^[^7d^;^7x^s^] ^[^8d^;^8x^s^] ^4a ^[^[^2d^;^2x^s^] ^;^2s^]^[^5d^;^5x^s^]^[^/^; ^]", 1816 value_array (this_value).count ^= 0, value_array (this_value).count, 1817 value_array (this_value).cost_or_time ^= 0, value_array (this_value).cost_or_time, stars (), 1818 program.long_profile, value_array (this_value).page_faults ^= 0, 1819 value_array (this_value).page_faults, ^continuation_line & this_line_profile_data, line, 1820 previous_line_profile_data); 1821 1822 this_value = this_value + 1; 1823 end; 1824 1825 else if more_source_characters 1826 then call ioa_$ioa_switch_nnl (list_iocb, "^22x^[^3x^]^[^5d^;^5x^s^] ", program.long_profile, 1827 ^continuation_line, line); 1828 1829 if ^previous_line_profile_data 1830 then do; 1831 continuation_line = "1"b; 1832 1833 if program.long_profile 1834 then column = 32; 1835 else column = 29; 1836 end; 1837 end; 1838 end put_profile_data; 1839 1840 /* Initialize line buffer */ 1841 1842 initialize_line: 1843 procedure; 1844 1845 column = 1; 1846 tab_column = 1; 1847 line_buffer = ""; 1848 continuation_line = "0"b; 1849 end initialize_line; 1850 1851 /* Store source portion of line into listing file */ 1852 1853 put_line: 1854 procedure; 1855 1856 line_buffer = line_buffer || NL; 1857 1858 call iox_$put_chars (list_iocb, addrel (addr (line_buffer), 1), length (line_buffer), code); 1859 call err_check; 1860 1861 line_buffer = ""; 1862 column = 1; 1863 end put_line; 1864 1865 end list_file; 1866 1867 end list_one_program; 1868 1869 /* Output header describing profile data file */ 1870 1871 output_header: 1872 procedure (iocb); 1873 declare iocb ptr; /* (Input) */ 1874 1875 call ioa_$ioa_switch (iocb, "^/Profile data file ^a>^a", dirname, entryname); 1876 call date_time_ (pfd_header.date_time_stored, date_time); 1877 call ioa_$ioa_switch (iocb, "Created by ^a on ^a", pfd_header.person_project, date_time); 1878 1879 if pfd_header.comment ^= "" 1880 then call ioa_$ioa_switch (iocb, "Comment: ^a", pfd_header.comment); 1881 end output_header; 1882 1883 /* Initialize thresholds to print given numbers of stars. 1884* 1885* Algorithm: 1886* if this_value_cost_or_time = 0 | total_cost_or_time = 0 1887* then number_stars = 0 1888* else number_stars = min (floor (log_base_2 (5 * this_value_cost_or_time / total_cost_or_time) + 4), 4) 1889**/ 1890 init_star_thresholds: 1891 procedure (total_cost_or_time); 1892 declare total_cost_or_time fixed binary (35); /* (Input) */ 1893 1894 threshold (1) = divide (total_cost_or_time, 40, 35) + 1; 1895 threshold (2) = divide (total_cost_or_time, 20, 35) + 1; 1896 threshold (3) = divide (total_cost_or_time, 10, 35) + 1; 1897 threshold (4) = divide (total_cost_or_time, 5, 35) + 1; 1898 end init_star_thresholds; 1899 1900 /* Prepare stars field */ 1901 1902 stars: 1903 procedure returns (char (4)); 1904 1905 declare n fixed binary (35); 1906 1907 n = value_array (this_value).cost_or_time; 1908 if value_array (this_value).count = 0 1909 then return ("."); 1910 1911 else if n < threshold (1) 1912 then return (""); 1913 1914 else if n < threshold (2) 1915 then return ("*"); 1916 1917 else if n < threshold (3) 1918 then return ("**"); 1919 1920 else if n < threshold (4) 1921 then return ("***"); 1922 1923 else return ("****"); 1924 end stars; 1925 1926 end print_or_list; 1927 1928 /* Subroutine to plot profile data on graphics terminal */ 1929 1930 plot: 1931 procedure; 1932 1933 declare plot_program bit (1); 1934 1935 /* Plot data for all specified programs */ 1936 1937 do program_ptr = ptr_from_msf_ptr (pfd_header.first_program) repeat ptr_from_msf_ptr (program.next_program) 1938 while (program_ptr ^= null); 1939 1940 /* Select subset of programs (-input_file only) */ 1941 1942 if args.input_file & n_program_names > 0 1943 then do; 1944 do prog_nr = 1 to n_program_names while (get_program_name (prog_nr) ^= program.name); 1945 end; 1946 plot_program = prog_nr <= n_program_names; 1947 end; 1948 else plot_program = "1"b; 1949 1950 if plot_program 1951 then call plot_one_program; 1952 end; 1953 1954 return; 1955 1956 /* Plot profile data for one program. */ 1957 1958 plot_one_program: 1959 procedure; 1960 1961 declare plot_array_ptr ptr; 1962 declare skip bit (1); 1963 declare x_array_ptr ptr; 1964 declare y_array_ptr ptr; 1965 1966 declare 1 plot_array (divide (sys_info$max_seg_size, 2, 19)) aligned based (plot_array_ptr), 1967 2 line float binary, 1968 2 data float binary; 1969 declare x_array (2 * n_values + 2) float binary based (x_array_ptr); 1970 declare y_array (2 * n_values + 2) float binary based (y_array_ptr); 1971 1972 call get_seg (1, plot_array_ptr); 1973 call get_seg (2, x_array_ptr); 1974 call get_seg (3, y_array_ptr); 1975 1976 value_ptr = ptr_from_msf_ptr (program.value_array); 1977 1978 /* Copy data into plot_array so it can be manipulated easily */ 1979 1980 n_values = 0; 1981 exit = "0"b; 1982 do value = 1 to program.n_values while (^exit); 1983 skip = "0"b; 1984 1985 /* Select data values within range */ 1986 1987 if value_array (value).file ^= 0 1988 then exit = "1"b; 1989 1990 if args.to 1991 then if value_array (value).line > to 1992 then exit = "1"b; 1993 1994 if args.from 1995 then if value_array (value).line < from 1996 then skip = "1"b; 1997 1998 if ^exit & ^skip 1999 then do; 2000 2001 /* Create zero values between active line numbers */ 2002 2003 if n_values ^= 0 /* Start at 2nd value */ 2004 then do while (value_array (value).line > plot_array (n_values).line + 1); 2005 n_values = n_values + 1; /* Create new point */ 2006 plot_array (n_values).line = plot_array (n_values - 1).line + 1.0; 2007 plot_array (n_values).data = 0.0; 2008 end; 2009 2010 /* Store next selected active point */ 2011 2012 n_values = n_values + 1; /* Copy one selected data value */ 2013 plot_array (n_values).line = float (value_array (value).line); 2014 2015 if plot_field (1) 2016 then plot_array (n_values).data = float (value_array (value).count); 2017 2018 else if (plot_field (4) | plot_field (5)) & program.long_profile 2019 then plot_array (n_values).data = float (value_array (value).page_faults); 2020 2021 else plot_array (n_values).data = float (value_array (value).cost_or_time); 2022 end; 2023 end; 2024 2025 if n_values = 0 2026 then do; 2027 n_values = 1; 2028 plot_array (1).line = 0.0; 2029 plot_array (1).data = 0.0; 2030 end; 2031 2032 /* Merge points together if too many to plot in reasonable time */ 2033 /* The algorithm used is distributed multiplication: an appropriate constant c is found by division 2034* and it is integrated (added), with the overflow (=1) indicating when to merge adjacent points. 2035* Thus, for example, if c=.5 (the case where n_values=2*max_points) then merging will happen 2036* for every other point. */ 2037 2038 if n_values > max_points 2039 then begin; 2040 declare c float binary; 2041 declare c1 float binary; 2042 2043 c = 1.0 - (max_points - 1) / n_values; /* Complement of when NOT to merge */ 2044 c1 = c; /* Initial value */ 2045 i = 1; /* Target for merging */ 2046 do value = 2 to n_values; 2047 c1 = c1 + c; /* Integrate */ 2048 2049 if c1 >= 1.0 /* Overflow */ 2050 then do; 2051 c1 = c1 - 1.0; /* Truncate the overflow */ 2052 plot_array (i).data = plot_array (i).data + plot_array (value).data; 2053 /* Merge by adding */ 2054 end; 2055 else do; 2056 i = i + 1; /* Copy point without merging */ 2057 plot_array (i) = plot_array (value); 2058 end; 2059 end; 2060 n_values = i; /* Merging changes number of points */ 2061 end; 2062 2063 /* Add data for all statements on each line (to convert data from per-statement to per-line, and 2064* delete points having same data values (to speed plotting) */ 2065 2066 i = 1; 2067 do value = 2 to n_values; 2068 if plot_array (value).line = plot_array (i).line 2069 then plot_array (i).data = plot_array (i).data + plot_array (value).data; 2070 /* Add data for same lines */ 2071 2072 else if plot_array (i).data ^= plot_array (value).data | value = n_values 2073 /* Distinct or last point */ 2074 then do; 2075 i = i + 1; /* Copy each distinct point */ 2076 plot_array (i) = plot_array (value); 2077 end; 2078 end; 2079 n_values = i; 2080 2081 /* Construct bar graph x_array and y_array */ 2082 /* Each value is turned into two points having same y value but x values of (line)+_0.5 to create 2083* the flat top of each bar. In addition, two endpoints are added at y=0 to create the sides of 2084* the outermost bars. */ 2085 2086 y_array (1) = 0.0; /* Left endpoint */ 2087 do value = 1 to n_values; 2088 i = 2 * value - 1; /* Subscript of next xy point */ 2089 x_array (i), x_array (i + 1) = plot_array (value).line - 0.5; 2090 y_array (i + 1), y_array (i + 2) = plot_array (value).data; 2091 end; 2092 2093 i = 2 * n_values + 1; /* Subscript of next-to-last xy point */ 2094 x_array (i), x_array (i + 1) = plot_array (n_values).line + 0.5; 2095 y_array (i + 1) = 0.0; /* Right endpoint */ 2096 2097 /* Plot the points, connecting them with lines */ 2098 2099 line_buffer = "Program: " || rtrim (program.name); 2100 2101 if pfd_header.comment ^= "" 2102 then line_buffer = line_buffer || " (" || rtrim (pfd_header.comment) || ")"; 2103 2104 call plot_$setup ((line_buffer), "LINE NUMBER" /* x legend */, table_1_upper_case (y_legend), Linear_linear, 0.0, 2105 Tick_marks, Normal_scaling); 2106 call plot_ (x_array, y_array, hbound (x_array, 1), Vectors_only, ""); 2107 end plot_one_program; 2108 2109 end plot; 2110 2111 /* Get a temp segment */ 2112 2113 get_seg: 2114 procedure (number, target); 2115 declare number fixed binary; /* (Input) */ 2116 declare target ptr; /* (Output) */ 2117 2118 if temp_seg_array (number) = null /* Else reuse previous temp segment */ 2119 then do; 2120 call get_temp_segment_ (me, temp_seg_array (number), code); 2121 call err_check; /* No error expected */ 2122 end; 2123 2124 target = temp_seg_array (number); 2125 end get_seg; 2126 2127 /* Get the program name from a command argument */ 2128 2129 get_program_name: 2130 procedure (program_index) returns (char (32)); 2131 declare program_index fixed binary; /* (Input) */ 2132 2133 declare entryname char (32); 2134 2135 call cu_$arg_ptr (program_name_array (program_index), arg_ptr, arg_len, code); 2136 call err_check; 2137 2138 call expand_pathname_ (arg, "", entryname, code); 2139 if code ^= 0 2140 then call error (code, arg); 2141 2142 return (entryname); 2143 end get_program_name; 2144 2145 /* Convert msf pointer to pointer */ 2146 2147 ptr_from_msf_ptr: 2148 procedure (msf_ptr) returns (ptr); 2149 declare 1 msf_ptr aligned like msf_ptr_template; 2150 2151 if unspec (msf_ptr) = unspec (null_msf_ptr) 2152 then return (null); 2153 else return (ptr (pfd_file_control.component (msf_ptr.component), msf_ptr.offset)); 2154 end ptr_from_msf_ptr; 2155 2156 end profile; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/04/86 1034.0 profile.pl1 >special_ldd>install>MR12.0-1206>profile.pl1 214 1 10/16/79 1541.1 pfd_format.incl.pl1 >ldd>include>pfd_format.incl.pl1 215 2 08/05/77 1022.4 lot.incl.pl1 >ldd>include>lot.incl.pl1 216 3 07/27/83 0910.0 linkdcl.incl.pl1 >ldd>include>linkdcl.incl.pl1 217 4 11/04/86 1324.3 stack_header.incl.pl1 >special_ldd>install>MR12.0-1206>stack_header.incl.pl1 218 5 05/06/74 1751.6 std_symbol_header.incl.pl1 >ldd>include>std_symbol_header.incl.pl1 222 6 05/06/74 1752.6 symbol_header.incl.pl1 >ldd>include>symbol_header.incl.pl1 223 7 03/10/77 1345.4 pl1_symbol_block.incl.pl1 >ldd>include>pl1_symbol_block.incl.pl1 224 8 11/26/79 1320.6 source_map.incl.pl1 >ldd>include>source_map.incl.pl1 225 9 05/06/74 1751.6 statement_map.incl.pl1 >ldd>include>statement_map.incl.pl1 226 10 10/30/80 1648.7 profile_entry.incl.pl1 >ldd>include>profile_entry.incl.pl1 227 11 03/10/77 1345.4 long_profile.incl.pl1 >ldd>include>long_profile.incl.pl1 228 12 06/07/77 1233.5 plot_entry_dcls.incl.pl1 >ldd>include>plot_entry_dcls.incl.pl1 229 13 02/02/78 1229.7 iox_modes.incl.pl1 >ldd>include>iox_modes.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. HT 016536 constant char(1) initial unaligned dcl 143 ref 1724 HT_NL constant char(2) initial unaligned dcl 144 ref 1714 Linear_linear 000207 constant fixed bin(17,0) initial dcl 12-7 set ref 2104* NL 016535 constant char(1) initial unaligned dcl 146 ref 1740 1856 Normal_scaling 000201 constant fixed bin(17,0) initial dcl 12-7 set ref 2104* SP10 016532 constant char(10) initial unaligned dcl 1727 ref 1730 1730 Stream_output 000206 constant fixed bin(17,0) initial dcl 13-15 set ref 1595* Tick_marks 000201 constant fixed bin(17,0) initial dcl 12-7 set ref 2104* Vectors_only 000207 constant fixed bin(17,0) initial dcl 12-7 set ref 2106* absolute_pathname_ 000040 constant entry external dcl 179 ref 578 addr builtin function dcl 113 ref 810 810 963 963 976 976 1546 1546 1858 1858 addrel builtin function dcl 114 ref 810 810 838 882 914 930 933 934 937 949 963 963 987 989 1004 1007 1009 1014 1017 1018 1130 1295 1858 1858 another_component 002252 automatic bit(1) unaligned dcl 697 set ref 833* 834 837* 838 area_pointer 16(18) based bit(18) level 2 packed unaligned dcl 5-1 ref 879 882 arg based char unaligned dcl 109 set ref 372 372 372 376 376 379 382 382 385 385 391 391 394 394 397 397 400 403 403 406 409 409 412 412 415 415 418 418 421 421 424 424 427 427 430 430 436* 441 441 621 770* 789* 791 794* 813* 825 844 847 850 874 918* 971* 977* 981* 2138* 2139* arg_flag parameter bit(1) unaligned dcl 587 in procedure "accept_field" set ref 585 599 604* arg_flag parameter bit(1) unaligned dcl 573 in procedure "accept_pathname" set ref 571 582* arg_flag parameter bit(1) unaligned dcl 560 in procedure "accept_string" set ref 558 568* arg_flag parameter bit(1) unaligned dcl 546 in procedure "accept_number" set ref 544 555* arg_len 000100 automatic fixed bin(21,0) dcl 43 set ref 369* 372 372 372 376 376 379 382 382 385 385 391 391 394 394 397 397 400 403 403 406 409 409 412 412 415 415 418 418 421 421 424 424 427 427 430 430 436 436 441 441 621 755* 770 770 789 789 791 794 794 813 813 825 844 847 850 874 918 918 971 971 977 977 981 981 2135* 2138 2138 2139 2139 arg_nr 002140 automatic fixed bin(17,0) dcl 360 set ref 368* 369* 448* 620* 620 621 624* arg_program_name 002232 automatic char(32) unaligned dcl 644 set ref 674* 679 682 arg_ptr 000102 automatic pointer dcl 44 set ref 369* 372 372 372 376 376 379 382 382 385 385 391 391 394 394 397 397 400 403 403 406 409 409 412 412 415 415 418 418 421 421 424 424 427 427 430 430 436 441 441 621 755* 770 789 791 794 813 825 844 847 850 874 918 971 977 981 2135* 2138 2139 args 000104 automatic structure level 1 packed unaligned dcl 45 set ref 317* average_time 002611 automatic fixed bin(35,0) dcl 1532 set ref 1537* 1541* 1554 1554* based_string based char unaligned dcl 910 ref 916 939 baseno builtin function dcl 115 ref 805 822 bin builtin function dcl 116 ref 805 822 915 938 962 980 980 1131 1131 1138 1139 1140 block_length 6(18) 002432 automatic bit(18) level 3 packed unaligned dcl 956 set ref 980 980 bound_object_segment parameter bit(1) unaligned dcl 1282 in procedure "find_object" set ref 1276 1287* 1300* bound_object_segment 002253 automatic bit(1) unaligned dcl 698 in procedure "scan_data" set ref 784* 789* 918 brief 000104 automatic bit(1) level 2 packed unaligned dcl 45 set ref 387* 432* 469* 489 1527 bword based bit(36) dcl 955 ref 965 c 003013 automatic float bin(27) dcl 2040 set ref 2043* 2044 2047 c1 003014 automatic float bin(27) dcl 2041 set ref 2044* 2047* 2047 2049 2051* 2051 chars parameter char unaligned dcl 1759 in procedure "put_chars" ref 1757 1765 1768 1769 chars defined char unaligned dcl 1719 in begin block on line 1718 set ref 1721* chars_to_store 002702 automatic fixed bin(21,0) dcl 1761 set ref 1768* 1769 1771 1772 1773 cleanup 002062 stack reference condition dcl 139 ref 234 clock builtin function dcl 117 ref 733 1617 1617 code parameter fixed bin(35,0) dcl 1283 in procedure "find_object" set ref 1276 1293* 1295 1298* code parameter fixed bin(35,0) dcl 283 in procedure "error" set ref 281 286* code 1 based bit(9) level 3 in structure "symbol_header" packed unaligned dcl 6-1 in procedure "pf" ref 874 code 000105 automatic fixed bin(35,0) dcl 67 in procedure "pf" set ref 277 277* 293* 325* 326* 336* 343* 349* 350* 369* 551* 552 578* 579 579* 624* 646* 647 647* 650* 651 656* 667* 755* 770* 772 772* 775 779* 780 784* 789* 791 791 794* 806* 810* 963* 965 976* 977 977* 980* 981 981* 1314* 1327* 1328 1328* 1331* 1341* 1342 1358* 1593* 1595 1595* 1598 1598* 1611* 1651* 1652 1652* 1660* 1668* 1671* 1682* 1749* 1858* 2120* 2135* 2138* 2139 2139* codeptr builtin function dcl 118 ref 1593 1593 column 002662 automatic fixed bin(17,0) dcl 1694 set ref 1768 1772* 1772 1775 1801 1833* 1835* 1845* 1862* com_err_ 000042 constant entry external dcl 180 ref 286 293 633 918 971 com_err_$suppress_name 000044 constant entry external dcl 181 ref 476 comment 14 based char(128) level 2 in structure "pfd_header" packed unaligned dcl 1-15 in procedure "pf" set ref 737* 739* 1879 1879* 2101 2101 comment 000106 automatic char(128) unaligned dcl 68 in procedure "pf" set ref 415* 737 comment 0(01) 000104 automatic bit(1) level 2 in structure "args" packed unaligned dcl 45 in procedure "pf" set ref 415* 507 528 737 comparing 000146 automatic bit(1) unaligned dcl 69 set ref 1052* 1053 1054* 1065* 1463* 1464 1465* 1491* component 4 001054 automatic pointer array level 2 in structure "pfd_file_control" dcl 91 in procedure "pf" set ref 306* 326* 655 656* 658 664 727 1309 1314* 1362 2153 component 002534 automatic fixed bin(17,0) dcl 1325 in procedure "store_output_file" set ref 1335* 1341* 1358* 1362 component 002376 automatic fixed bin(17,0) level 2 in structure "last_temp_data" packed unaligned dcl 861 in procedure "scan_component" set ref 1258* 1262* 1268 component parameter fixed bin(17,0) level 2 in structure "msf_ptr" packed unaligned dcl 2149 in procedure "ptr_from_msf_ptr" ref 2153 component 000312 automatic fixed bin(17,0) level 2 in structure "last_temp_data_word" packed unaligned dcl 81 in procedure "pf" set ref 741* 1262 1268* constructing parameter bit(1) unaligned dcl 695 ref 693 720 850 904 1022 1117 continuation_line 002663 automatic bit(1) unaligned dcl 1695 set ref 1814 1825 1831* 1848* control 11 based structure level 2 dcl 11-4 copy_lh 002432 automatic structure level 1 dcl 956 set ref 976 976 976 976 cost_or_time 002464 automatic fixed bin(35,0) dcl 1105 in procedure "scan_statement_data" set ref 1186* 1188* 1191 1191* 1196* 1197* 1197 1218* 1218 1222* 1222 1228 1237 cost_or_time 3 based fixed bin(35,0) array level 2 in structure "value_array" dcl 1-52 in procedure "pf" set ref 1228* 1478 1478 1537 1554* 1814 1814* 1907 2021 cost_or_time_test constant fixed bin(17,0) initial dcl 1436 ref 1454 count 1 based fixed bin(17,0) level 2 in structure "long_profile_entry" dcl 11-12 in procedure "pf" set ref 1121* 1152 count 12 based fixed bin(17,0) level 3 in structure "long_profile_header" dcl 11-4 in procedure "pf" set ref 996 1000 count 002465 automatic fixed bin(35,0) dcl 1106 in procedure "scan_statement_data" set ref 1152* 1154* 1156 1186 1188 1222 1227 1236 count 2 based fixed bin(35,0) array level 2 in structure "value_array" dcl 1-52 in procedure "pf" set ref 1227* 1469 1469 1527 1537 1537 1554* 1814 1814* 1908 2015 count 1 based fixed bin(17,0) level 2 in structure "profile_entry" dcl 10-3 in procedure "pf" set ref 1125* 1154 count_test constant fixed bin(17,0) initial dcl 1437 ref 1448 cu_$arg_count 000046 constant entry external dcl 182 ref 367 cu_$arg_ptr 000050 constant entry external dcl 183 ref 369 624 755 2135 cv_dec_check_ 000052 constant entry external dcl 184 ref 551 cv_ptr_ 000054 constant entry external dcl 185 ref 1293 1298 data 0(02) 002254 automatic bit(1) level 2 in structure "found" packed unaligned dcl 699 in procedure "scan_data" set ref 850 1156* data 1 based float bin(27) array level 2 in structure "plot_array" dcl 1966 in procedure "plot_one_program" set ref 2007* 2015* 2018* 2021* 2029* 2052* 2052 2052 2068* 2068 2068 2072 2072 2090 date_time 002554 automatic char(24) unaligned dcl 1373 set ref 1617* 1618* 1876* 1877* date_time_ 000056 constant entry external dcl 186 ref 1617 1876 date_time_stored 2 based fixed bin(71,0) level 2 dcl 1-15 set ref 733* 1876* delim 002516 automatic char(1) unaligned dcl 1285 set ref 1289* 1291* 1293 1298 dependent_arg parameter char unaligned dcl 630 set ref 628 633* dirname 000147 automatic char(168) unaligned dcl 70 set ref 293* 646* 650* 682 1327* 1331* 1608* 1611* 1633* 1651* 1657* 1660* 1668* 1671* 1674* 1875* disordered 002605 automatic bit(1) unaligned dcl 1433 set ref 1469* 1473* 1478* 1483 divide builtin function dcl 119 ref 1049 1460 1679 1894 1895 1896 1897 dummy_entry_offset constant fixed bin(17,0) initial dcl 11-19 ref 1031 entry_index 002445 automatic fixed bin(17,0) dcl 998 set ref 1006* entryname 000221 automatic char(32) unaligned dcl 71 in procedure "pf" set ref 293* 646* 650* 682 1327* 1331* 1608* 1611* 1633* 1651* 1660* 1668* 1671* 1875* entryname 003032 automatic char(32) unaligned dcl 2133 in procedure "get_program_name" set ref 2138* 2142 epplp 002477 automatic bit(1) dcl 1206 set ref 1209* 1211 1214* 1218 error_table_$badopt 000010 external static fixed bin(35,0) dcl 158 set ref 436* error_table_$bigarg 000012 external static fixed bin(35,0) dcl 159 set ref 564* error_table_$file_is_full 000014 external static fixed bin(35,0) dcl 160 set ref 1309* error_table_$improper_data_format 000016 external static fixed bin(35,0) dcl 162 set ref 498* 552* 667 error_table_$inconsistent 000020 external static fixed bin(35,0) dcl 164 set ref 519* 522* 525* 528* 531* 534* 537* error_table_$name_not_found 000022 external static fixed bin(35,0) dcl 166 ref 791 error_table_$noarg 000024 external static fixed bin(35,0) dcl 168 set ref 621* error_table_$noentry 000026 external static fixed bin(35,0) dcl 169 set ref 651 779 813* error_table_$too_many_args 000030 external static fixed bin(35,0) dcl 170 set ref 444* 610* error_table_$zero_length_seg 000032 external static fixed bin(35,0) dcl 172 ref 1682 exit 000231 automatic bit(1) unaligned dcl 73 set ref 654* 655 658* 676* 677 679* 682 1502* 1503 1512* 1516* 1519* 1530 1981* 1982 1987* 1990* 1998 expand_pathname_ 000060 constant entry external dcl 187 ref 1651 1668 2138 expand_pathname_$add_suffix 000062 constant entry external dcl 188 ref 646 1327 1611 fault based bit(2) array level 3 packed unaligned dcl 2-16 ref 825 fcb 001054 automatic pointer level 2 dcl 91 set ref 307* 328 330* 331* 650* 651 656* file based fixed bin(10,0) array level 3 in structure "value_array" packed unsigned unaligned dcl 1-52 in procedure "pf" set ref 1138* 1143 1143 1516 1554 1554* 1632* 1633* 1636* 1805 1809 1987 file parameter fixed bin(10,0) unsigned unaligned dcl 1645 in procedure "open_file" ref 1643 1651 1652 1661 1668 file 0(18) based bit(8) level 3 in structure "statement_map" packed unaligned dcl 9-1 in procedure "pf" ref 1138 file parameter fixed bin(10,0) unsigned unaligned dcl 1691 in procedure "list_file" ref 1689 1805 1809 find_operator_name_ 000064 constant entry external dcl 190 ref 1546 first 000232 automatic fixed bin(35,0) dcl 74 in procedure "pf" set ref 382* 1512 first 0(03) 000104 automatic bit(1) level 2 in structure "args" packed unaligned dcl 45 in procedure "pf" set ref 382* 483 1512 first 6 based bit(18) level 3 in structure "pl1_symbol_block" packed unaligned dcl 7-1 in procedure "pf" ref 949 first_operator 1(18) based fixed bin(18,0) array level 2 packed unsigned unaligned dcl 1-52 set ref 1150* 1544 1544 first_program 54 based structure level 2 dcl 1-15 set ref 677* 735* 1077* 1388* 1937* flags 3 based structure level 2 in structure "pl1_symbol_block" dcl 7-1 in procedure "pf" flags 13 based structure level 2 in structure "program" dcl 1-25 in procedure "pf" flags based structure array level 2 in structure "isot1" packed unaligned dcl 2-16 in procedure "pf" float builtin function dcl 120 ref 1000 1000 1537 1537 2013 2015 2018 2021 found 002254 automatic structure level 1 packed unaligned dcl 699 set ref 760* from 000233 automatic fixed bin(35,0) dcl 75 in procedure "pf" set ref 403* 1523 1994 from 0(04) 000104 automatic bit(1) level 2 in structure "args" packed unaligned dcl 45 in procedure "pf" set ref 403* 501 537 1516 1523 1994 from_ptr parameter pointer dcl 1250 ref 1248 1266 generator 10 based char(8) level 2 dcl 5-1 ref 921 get_group_id_ 000066 constant entry external dcl 191 ref 734 get_temp_segment_ 000070 constant entry external dcl 192 ref 1314 2120 hardcore 0(05) 000104 automatic bit(1) level 2 packed unaligned dcl 45 set ref 424* 460 513 522 531 715 766 798 951 hardcore_bound_segname 002347 automatic char(32) unaligned dcl 768 set ref 772* 781 hardcore_bound_segpath 002255 automatic char(168) unaligned dcl 703 set ref 781* 784* 971* hardcore_object_ptr 002330 automatic pointer dcl 704 set ref 770* 772 772 805 963 963 hardcore_object_segnr 002361 automatic fixed bin(17,0) dcl 800 set ref 805* 810 810 hardlp 002332 automatic pointer dcl 705 set ref 749* 953 984* hbound builtin function dcl 121 ref 444 594 596 610 655 936 1309 2106 2106 hcs_$initiate_count 000072 constant entry external dcl 193 ref 1660 1671 hcs_$terminate_noname 000074 constant entry external dcl 195 ref 343 1749 header based structure level 1 dcl 3-31 hp 002334 automatic pointer dcl 706 in procedure "scan_data" set ref 784* 789* 838 965 hp parameter pointer dcl 1281 in procedure "find_object" set ref 1276 1293* 1295 1295 1298* 1299 i 000234 automatic fixed bin(18,0) dcl 76 set ref 594* 594* 596 602 603 655* 656 656 658* 936* 937 938 939* 1050* 1051* 1161* 1163* 1165 1461* 1462* 1544* 1546 1546* 2045* 2052 2052 2056* 2056 2057 2060 2066* 2068 2068 2068 2072 2075* 2075 2076 2079 2088* 2089 2089 2090 2090 2093* 2094 2094 2095 identifier 1 based char(8) level 2 in structure "pl1_symbol_block" dcl 7-1 in procedure "pf" ref 883 identifier 1 based char(8) level 2 in structure "std_symbol_header" dcl 5-1 in procedure "pf" ref 874 inclusive parameter bit(1) unaligned dcl 589 ref 585 599 index builtin function dcl 122 ref 372 1740 input_file 0(06) 000104 automatic bit(1) level 2 in structure "args" packed unaligned dcl 45 in procedure "pf" set ref 241 418* 474 519 525 528 531 1383 1393 1609 1942 input_file 000235 automatic char(168) unaligned dcl 77 in procedure "pf" set ref 418* 646* 647* 1611* instruction 002466 automatic fixed bin(35,0) dcl 1107 set ref 1165* 1166 1177* 1211* 1212 1214* instruction_array based bit(36) array dcl 1113 ref 1166 1177 1203 1212 1214 instruction_array_ptr 002470 automatic pointer dcl 1108 set ref 1132* 1166 1177 1203 1212 1214 interval 000307 automatic fixed bin(18,0) dcl 78 set ref 1047* 1048 1049* 1049 1050 1051 1055 1063 1458* 1459 1460* 1460 1461 1462 1466 1489 ioa_ 000076 constant entry external dcl 196 ref 1419 1421 1554 1567 1568 ioa_$ioa_switch 000100 constant entry external dcl 197 ref 1604 1615 1618 1619 1633 1705 1875 1877 1879 ioa_$ioa_switch_nnl 000102 constant entry external dcl 198 ref 1608 1814 1825 iocb parameter pointer dcl 1873 set ref 1871 1875* 1877* 1879* iox_$attach_name 000104 constant entry external dcl 199 ref 1593 iox_$close 000106 constant entry external dcl 200 ref 349 iox_$detach_iocb 000110 constant entry external dcl 201 ref 350 iox_$open 000112 constant entry external dcl 202 ref 1595 iox_$put_chars 000114 constant entry external dcl 203 ref 1858 iox_$user_output 000034 external static pointer dcl 174 set ref 1383* isot based structure level 1 dcl 2-13 isot1 based structure array level 1 dcl 2-16 isot_ptr 52 based pointer level 2 dcl 4-26 ref 823 isotp 002102 automatic pointer dcl 2-12 set ref 823* 825 825 828 isp based pointer array level 2 packed unaligned dcl 2-13 ref 825 828 j 000310 automatic fixed bin(18,0) dcl 79 set ref 1055* 1056 1061 1062 1063 1066 1466* 1469 1473 1478 1487 1488 1489 1492 k 000311 automatic fixed bin(18,0) dcl 80 set ref 1051* 1055 1056 1060 1061 1066* 1462* 1466 1469 1473 1478 1486 1487 1492* last_component 2 001054 automatic fixed bin(17,0) level 2 dcl 91 set ref 725* 1258 1309 1313* 1313 1314 1335 last_offset 3 based fixed bin(17,0) level 2 dcl 11-4 set ref 1031* last_program_ptr 002336 automatic pointer dcl 707 set ref 744* 1077 1079 1081* 1084 1089 1095 last_source_path 14 based fixed bin(10,0) level 2 dcl 1-25 set ref 931* 934 936 1083 1083 last_temp_data 002376 automatic structure level 1 dcl 861 set ref 1077 1079 1081* 1084 1089 1095 1266* last_temp_data_word 000312 automatic structure level 1 dcl 81 length builtin function dcl 123 ref 564 564 1713 1715 1724 1765 1768 1858 1858 line 0(26) based bit(14) level 3 in structure "statement_map" packed unaligned dcl 9-1 in procedure "pf" ref 1014 1139 line 0(10) based fixed bin(16,0) array level 3 in structure "value_array" packed unsigned unaligned dcl 1-52 in procedure "pf" set ref 1139* 1143 1143 1519 1523 1554* 1805 1809 1990 1994 2003 2013 line based float bin(27) array level 2 in structure "plot_array" dcl 1966 in procedure "plot_one_program" set ref 2003 2006* 2006 2013* 2028* 2068 2068 2089 2094 line 002664 automatic fixed bin(21,0) dcl 1696 in procedure "list_file" set ref 1711* 1788* 1788 1805 1809 1814* 1825* line_buffer 000313 automatic varying char(1200) dcl 82 set ref 1543* 1548 1548* 1548 1551* 1551 1554* 1769* 1769 1847* 1856* 1856 1858 1858 1858 1858 1861* 2099* 2101* 2101 2104 line_length 000770 automatic fixed bin(35,0) dcl 83 in procedure "pf" set ref 397* 454* 498 1768 1775 line_length 0(08) 000104 automatic bit(1) level 2 in structure "args" packed unaligned dcl 45 in procedure "pf" set ref 397* 454 495 linkage_copy_ptr 002340 automatic pointer dcl 708 set ref 715* 980* 987 linkage_ptr 002362 automatic pointer level 2 packed unaligned dcl 801 set ref 817 list 0(09) 000104 automatic bit(1) level 2 packed unaligned dcl 45 set ref 252 391* 466 495 516 list_file 002633 automatic char(32) unaligned dcl 1587 set ref 1589* 1591* 1593 1598* list_iocb 000772 automatic pointer dcl 84 set ref 311* 347 349* 350* 351* 1585 1593* 1595* 1604* 1608* 1613* 1615* 1618* 1619* 1633* 1705* 1814* 1825* 1858* listing parameter bit(1) unaligned dcl 1371 ref 1369 1383 1401 location based bit(18) level 2 packed unaligned dcl 9-1 ref 1131 1131 1132 long 002377 automatic bit(1) unaligned dcl 862 in procedure "scan_component" set ref 886* 888 922 993 1024 1119 1152 1161 1184 1230 1239 long 0(10) 000104 automatic bit(1) level 2 in structure "args" packed unaligned dcl 45 in procedure "pf" set ref 388* 433* 469 492 long_profile 3(06) based bit(1) level 3 in structure "pl1_symbol_block" packed unaligned dcl 7-1 in procedure "pf" ref 886 long_profile 13 based bit(1) level 3 in structure "program" packed unaligned dcl 1-25 in procedure "pf" set ref 922* 1421* 1421* 1451 1537 1554* 1568* 1619* 1705* 1814* 1825* 1833 2018 long_profile_entry based structure level 1 dcl 11-12 set ref 1009 long_profile_header based structure level 1 dcl 11-4 set ref 1004 1029* lot_item 002362 automatic structure level 1 dcl 801 set ref 810 810 813 lot_ptr 002364 automatic pointer dcl 803 set ref 806* 810 810 lp 002342 automatic pointer dcl 709 set ref 817* 828* 953 976* 980* 984 989 main_arg parameter char unaligned dcl 631 set ref 628 633* map 6 based structure level 2 in structure "pl1_symbol_block" packed unaligned dcl 7-1 in procedure "pf" map 002400 automatic pointer dcl 863 in procedure "scan_component" set ref 1007* 1014* 1014* 1130 1131 1132 1138 1139 1140 map based bit(18) level 2 in structure "profile_entry" packed unaligned dcl 10-3 in procedure "pf" ref 1014 1018 map 2 based structure array level 2 in structure "source_map" dcl 8-3 in procedure "pf" map based bit(18) level 2 in structure "long_profile_entry" packed unaligned dcl 11-12 in procedure "pf" ref 1007 map2 002472 automatic pointer dcl 1109 set ref 1130* 1131 masked_instruction 002474 automatic bit(36) unaligned dcl 1110 set ref 1166* 1167 1167 1167 1167 1167 max_points 000774 automatic fixed bin(35,0) dcl 85 in procedure "pf" set ref 409* 457* 2038 2043 max_points 0(11) 000104 automatic bit(1) level 2 in structure "args" packed unaligned dcl 45 in procedure "pf" set ref 409* 457 510 mbz 13(01) based bit(35) level 3 in structure "program" packed unaligned dcl 1-25 in procedure "pf" set ref 923* mbz 1 based bit(36) level 2 in structure "pfd_header" dcl 1-15 in procedure "pf" set ref 732* me 000044 constant char(7) initial unaligned dcl 148 set ref 286* 293* 325* 326* 476* 476* 633* 918* 971* 1314* 1593 2120* min builtin function dcl 124 ref 1768 mini_truncate 22(18) based bit(18) level 2 packed unaligned dcl 5-1 ref 962 mod builtin function dcl 125 ref 1728 more_source_characters parameter bit(1) dcl 1795 ref 1793 1825 more_than_one_program 002563 automatic bit(1) unaligned dcl 1375 set ref 1379* 1604 1606* msf_manager_$adjust 000116 constant entry external dcl 204 ref 336 1341 msf_manager_$close 000120 constant entry external dcl 205 ref 330 337 1345 msf_manager_$get_ptr 000122 constant entry external dcl 206 ref 656 1358 msf_manager_$open 000124 constant entry external dcl 207 ref 650 1331 msf_ptr parameter structure level 1 dcl 2149 ref 2147 2151 msf_ptr_template based structure level 1 dcl 1-76 n 002760 automatic fixed bin(35,0) dcl 1905 in procedure "stars" set ref 1907* 1911 1914 1917 1920 n 002447 automatic fixed bin(17,0) dcl 1026 in begin block on line 1024 set ref 1028* 1030 n_args 002141 automatic fixed bin(17,0) dcl 361 set ref 367* 368 621 n_instructions 002475 automatic fixed bin(17,0) dcl 1111 set ref 1131* 1165 1196 1211 n_operators 16 based fixed bin(18,0) level 2 in structure "program" dcl 1-25 in procedure "pf" set ref 925* 1086 1088 1088 1150 1173* 1173 1177 n_operators 1 based fixed bin(18,0) array level 2 in structure "value_array" packed unsigned unaligned dcl 1-52 in procedure "pf" set ref 1149* 1175* 1175 1197 1544 n_program_names 000775 automatic fixed bin(17,0) dcl 86 set ref 316* 444 447* 447 448 474 673 754 1393 1395 1397 1589 1942 1944 1946 n_search_paths 000776 automatic fixed bin(17,0) dcl 87 set ref 315* 462* 610 613* 613 614 780 n_values 20 based fixed bin(18,0) level 2 in structure "program" dcl 1-25 in procedure "pf" set ref 927* 1046 1092 1094 1094 1136* 1136 1137 1427 1627 1982 n_values 000777 automatic fixed bin(18,0) dcl 88 in procedure "pf" set ref 1046* 1047 1050 1427* 1442 1458 1461 1503 1627* 1631 1805 1980* 2003 2003 2005* 2005 2006 2006 2007 2012* 2012 2013 2015 2018 2021 2025 2027* 2038 2043 2046 2060* 2067 2072 2079* 2087 2093 2094 2106 2106 2106 2106 n_words parameter fixed bin(19,0) dcl 1352 in procedure "store_output_data" ref 1350 1362 n_words parameter fixed bin(19,0) dcl 1251 in procedure "store_temp_data" ref 1248 1255 1266 1269 name 1 based char(32) level 2 in structure "program" packed unaligned dcl 1-25 in procedure "pf" set ref 679 916* 918 918* 1395 1419* 1589 1944 2099 name parameter char unaligned dcl 1279 in procedure "find_object" ref 1276 1289 1293 1298 nentries 4 based fixed bin(17,0) level 2 dcl 11-4 set ref 1006 1028 1030* next_block 20 based bit(18) level 2 packed unaligned dcl 5-1 ref 837 838 1295 next_program based structure level 2 dcl 1-25 set ref 680* 912* 1079* 1405* 1952* no_header 0(12) 000104 automatic bit(1) level 2 packed unaligned dcl 45 set ref 376* 486 1383 1421 null builtin function dcl 126 ref 304 306 307 309 310 311 328 331 334 338 341 344 347 351 651 658 677 744 749 1077 1332 1346 1359 1388 1585 1661 1666 1672 1750 1937 2118 2151 null_msf_ptr 000000 constant structure level 1 dcl 1-80 ref 735 912 924 926 928 2151 number 1 based fixed bin(17,0) level 2 in structure "source_map" dcl 8-3 in procedure "pf" ref 931 number parameter fixed bin(17,0) dcl 2115 in procedure "get_seg" ref 2113 2118 2120 2124 object_segnr 002366 automatic fixed bin(17,0) dcl 820 set ref 822* 825 825 828 offset 0(18) 002376 automatic fixed bin(18,0) level 2 in structure "last_temp_data" packed unsigned unaligned dcl 861 in procedure "scan_component" set ref 1259* 1263* 1269 offset 2 based bit(18) array level 4 in structure "source_map" packed unaligned dcl 8-3 in procedure "pf" ref 937 offset 0(18) 000312 automatic fixed bin(18,0) level 2 in structure "last_temp_data_word" packed unsigned unaligned dcl 81 in procedure "pf" set ref 742* 1255 1263 1269* 1339 1341 offset 0(18) parameter fixed bin(18,0) level 2 in structure "msf_ptr" packed unsigned unaligned dcl 2149 in procedure "ptr_from_msf_ptr" ref 2153 offset 7 based bit(18) level 3 in structure "pl1_symbol_block" packed unaligned dcl 7-1 in procedure "pf" ref 914 operand based char unaligned dcl 365 set ref 551* 552 564 564* 567 578* 579* 594 596 operand_len 002142 automatic fixed bin(21,0) dcl 362 set ref 551 551 552 564 564 564 567 578 578 579 579 594 596 624* operand_ptr 002144 automatic pointer dcl 363 set ref 551 552 564 564 567 578 579 594 596 624* operator_array based bit(36) array dcl 1-48 in procedure "pf" set ref 1088 1088 1177* 1546 1546 operator_array 17 based structure level 2 in structure "program" dcl 1-25 in procedure "pf" set ref 926* 1089* 1425* operator_name 002612 automatic char(32) dcl 1533 set ref 1546* 1548 1551 operator_ptr 002070 automatic pointer dcl 1-68 set ref 934* 1088* 1088 1088 1177 1425* 1546 1546 output_fcb 001000 automatic pointer dcl 89 set ref 309* 334 336* 337* 338* 1331* 1332 1341* 1345* 1346* 1358* output_file 0(13) 000104 automatic bit(1) level 2 in structure "args" packed unaligned dcl 45 in procedure "pf" set ref 247 412* 466 507 525 918 output_file 001002 automatic char(168) unaligned dcl 90 in procedure "pf" set ref 412* 1327* 1328* output_ptr 002544 automatic pointer dcl 1354 set ref 1358* 1359 1362 overhead 002402 automatic fixed bin(17,0) dcl 864 set ref 1000* 1188 p 002344 automatic pointer dcl 710 in procedure "scan_data" set ref 784* 789* 822 837 838* 838 874 874 879 882 882 914 921 930 930 937 949 962 1132 p parameter pointer dcl 1280 in procedure "find_object" set ref 1276 1295* 1299* page_faults 4 based fixed bin(35,0) array level 2 dcl 1-52 set ref 1230* 1232* 1473 1473 1554 1554* 1814 1814* 2018 page_faults_test constant fixed bin(17,0) initial dcl 1438 ref 1451 pathname 2 based structure array level 3 packed unaligned dcl 8-3 person_project 4 based char(32) level 2 packed unaligned dcl 1-15 set ref 734* 1877* pf 3 based fixed bin(17,0) level 2 in structure "long_profile_entry" dcl 11-12 in procedure "pf" set ref 1123* 1230 1239 pf 002404 automatic pointer dcl 865 in procedure "scan_component" set ref 987* 989* 995 1004* 1007 1009* 1009 1014 1017* 1017 1018 1121 1122 1123 1125 1152 1154 1188 1230 1239 pf_entry_seq 0(31) based fixed bin(5,0) array level 3 packed unsigned unaligned dcl 1-52 set ref 1142* 1143* 1143 pf_loc 002406 automatic bit(18) unaligned dcl 866 set ref 891* 987 989 pfd_file_control 001054 automatic structure level 1 dcl 91 pfd_format_version_1 constant fixed bin(17,0) initial dcl 1-11 ref 665 731 pfd_header based structure level 1 dcl 1-15 set ref 742 pfd_ptr 002072 automatic pointer dcl 1-69 set ref 664* 665 677 727* 731 732 733 734 735 737 739 742 1077 1388 1876 1877 1879 1879 1937 2101 2101 pfh 002410 automatic pointer dcl 867 set ref 995* 996 1000 1000 1004 1006 1028 1029 1030 1031 pl1_symbol_block based structure level 1 dcl 7-1 plot 0(14) 000104 automatic bit(1) level 2 packed unaligned dcl 45 set ref 255 400* 466 501 504 507 510 plot_ 000140 constant entry external dcl 12-3 ref 2106 plot_$setup 000142 constant entry external dcl 12-3 ref 2104 plot_array based structure array level 1 dcl 1966 set ref 2057* 2057 2076* 2076 plot_array_ptr 003000 automatic pointer dcl 1961 set ref 1972* 2003 2006 2006 2007 2013 2015 2018 2021 2028 2029 2052 2052 2052 2057 2057 2068 2068 2068 2068 2068 2072 2072 2076 2076 2089 2090 2094 plot_field 001104 automatic bit(1) array unaligned dcl 95 set ref 400* 2015 2018 2018 plot_program 002770 automatic bit(1) unaligned dcl 1933 set ref 1946* 1948* 1950 previous_line_profile_data 002720 automatic bit(1) dcl 1797 set ref 1802* 1805* 1812 1814* 1829 print 0(15) 000104 automatic bit(1) level 2 packed unaligned dcl 45 set ref 258 372* 466* 469 480 486 489 492 501 504 print_program 002562 automatic bit(1) unaligned dcl 1374 set ref 1397* 1399* 1401 profile 002254 automatic bit(1) level 2 in structure "found" packed unaligned dcl 699 in procedure "scan_data" set ref 844 895* profile 5(18) based bit(18) level 2 in structure "pl1_symbol_block" packed unaligned dcl 7-1 in procedure "pf" ref 891 profile 3 based bit(1) level 3 in structure "pl1_symbol_block" packed unaligned dcl 7-1 in procedure "pf" ref 888 profile_data_suffix 000043 constant char(3) initial unaligned dcl 149 set ref 646* 1327* 1611* profile_entry based structure level 1 dcl 10-3 set ref 1017 profile_listing_suffix 000042 constant char(3) initial unaligned dcl 150 ref 1589 1591 prog_nr 001105 automatic fixed bin(17,0) dcl 96 set ref 673* 674* 754* 755* 918* 1395* 1395* 1397 1944* 1944* 1946 program based structure level 1 dcl 1-25 set ref 933 1075 1075 program_index parameter fixed bin(17,0) dcl 2131 ref 2129 2135 program_name_array 001106 automatic fixed bin(17,0) array dcl 97 set ref 444 448* 755* 2135* program_ptr 002074 automatic pointer dcl 1-70 set ref 677* 677* 679* 680 722* 912 916 918 918 921 922 923 924 925 926 927 928 931 933 933 934 936 1039 1040 1041 1046 1075* 1075 1075 1083 1083 1086 1088 1088 1092 1094 1094 1136 1136 1137 1150 1173 1173 1177 1388* 1388* 1395* 1405 1419 1421 1421 1425 1426 1427 1451 1500 1537 1546 1554 1568 1568 1568 1568 1589 1619 1619 1619 1619 1624 1626 1627 1650 1705 1814 1825 1833 1937* 1937* 1944* 1952 1976 1982 2018 2099 ptr builtin function dcl 127 ref 772 772 965 1132 2153 q 002412 automatic pointer dcl 868 set ref 882* 883 886 888 891 897 914 915 949 release_temp_segments_ 000126 constant entry external dcl 208 ref 325 326 reloff 002444 automatic fixed bin(18,0) dcl 960 set ref 962* 963 963 965 971* reset 0(16) 000104 automatic bit(1) level 2 packed unaligned dcl 45 set ref 263 421* 466 519 522 reverse builtin function dcl 128 ref 1740 ring0_get_$name 000130 constant entry external dcl 209 ref 772 ring0_get_$segptr 000132 constant entry external dcl 210 ref 770 806 ring_zero_peek_ 000134 constant entry external dcl 211 ref 810 963 976 980 rtrim builtin function dcl 129 ref 682 682 682 781 1293 1298 1551 1589 1591 2099 2101 same 002442 automatic bit(1) unaligned dcl 958 set ref 965* 967* 969 sb 002104 automatic pointer dcl 4-24 set ref 750* 823 scan_length 002665 automatic fixed bin(21,0) dcl 1697 set ref 1714* 1715 1715* 1719 1724 1724 1735 search builtin function dcl 130 ref 441 1289 1714 search_dir 0(17) 000104 automatic bit(1) level 2 packed unaligned dcl 45 set ref 460 513 614* search_nr 002357 automatic fixed bin(17,0) dcl 777 set ref 780* 781* search_path 001252 automatic char(168) array unaligned dcl 98 set ref 463* 610 614* 781 segname 7 based structure level 2 packed unaligned dcl 7-1 size 2(18) based bit(18) array level 4 in structure "source_map" packed unaligned dcl 8-3 in procedure "pf" ref 938 size builtin function dcl 131 in procedure "pf" ref 742 933 934 976 976 1004 1009 1017 1075 1075 1083 1083 1088 1088 1094 1094 1130 size 7(18) based bit(18) level 3 in structure "pl1_symbol_block" packed unaligned dcl 7-1 in procedure "pf" ref 915 skip 002600 automatic bit(1) unaligned dcl 1414 in procedure "print_one_program" set ref 1504* 1523* 1527* 1530 skip 003002 automatic bit(1) unaligned dcl 1962 in procedure "plot_one_program" set ref 1983* 1994* 1998 sort 0(18) 000104 automatic bit(1) level 2 packed unaligned dcl 45 set ref 379* 480 483 534 537 1431 1508 sort_array based fixed bin(18,0) array dcl 1417 set ref 1443* 1469 1469 1473 1473 1478 1478 1486 1487* 1487 1488* 1508 sort_array_ptr 002602 automatic pointer dcl 1415 set ref 1440* 1443 1469 1469 1473 1473 1478 1478 1486 1487 1487 1488 1508 sort_field 001772 automatic bit(1) array unaligned dcl 99 set ref 379* 1448 1451 1451 sort_test 002606 automatic fixed bin(17,0) dcl 1434 set ref 1448* 1451* 1454* 1467 source based structure array level 2 in structure "value_array" dcl 1-52 in procedure "pf" set ref 1056 1056 source based char unaligned dcl 1701 in procedure "list_file" ref 1713 1714 1715 1721 1721 1724 1724 1740 source_bc 002652 automatic fixed bin(24,0) dcl 1648 set ref 1660* 1671* 1679 source_dir 0(19) 000104 automatic bit(1) level 2 in structure "args" packed unaligned dcl 45 in procedure "pf" set ref 394* 516 1657 1661 source_dir 001773 automatic char(168) unaligned dcl 100 in procedure "pf" set ref 394* 1657 1674 source_id 0(18) based structure level 2 packed unaligned dcl 9-1 source_length 002632 automatic fixed bin(21,0) dcl 1577 set ref 1679* 1680 1713 1714 1715 1721 1724 1724 1740 source_map 16 based bit(18) level 2 in structure "std_symbol_header" packed unaligned dcl 5-1 in procedure "pf" ref 930 source_map based structure level 1 dcl 8-3 in procedure "pf" source_map_ptr 002422 automatic pointer dcl 906 set ref 930* 931 937 938 source_path_array based char(168) array unaligned dcl 1-44 in procedure "pf" set ref 934 936 939* 1083 1083 1651* 1652* 1668* source_path_array 15 based structure level 2 in structure "program" dcl 1-25 in procedure "pf" set ref 924* 1084* 1650* source_path_ptr 002076 automatic pointer dcl 1-71 set ref 933* 934 934 936 939 1083* 1083 1083 1650* 1651 1652 1668 source_position 002666 automatic fixed bin(21,0) dcl 1698 set ref 1712* 1713 1714 1715 1721 1724 1724 1735* 1735 source_ptr 002046 automatic pointer dcl 101 set ref 310* 341 343* 344* 1660* 1661 1666 1671* 1672 1713 1714 1715 1721 1724 1724 1740 1749* 1750* sp 002414 automatic pointer dcl 869 set ref 949* 1007 1014 1018 spaces_to_tab_stop defined char unaligned dcl 1728 set ref 1730* stack_header based structure level 1 dcl 4-26 stackbaseptr builtin function dcl 132 ref 750 start_position 002703 automatic fixed bin(21,0) dcl 1762 set ref 1764* 1765 1768 1769 1771* 1771 statement 1(04) based bit(5) level 3 in structure "statement_map" packed unaligned dcl 9-1 in procedure "pf" ref 1140 statement 0(26) based fixed bin(5,0) array level 3 in structure "value_array" packed unsigned unaligned dcl 1-52 in procedure "pf" set ref 1140* 1143 1143 1554 1554* statement_map based structure level 1 dcl 9-1 ref 1130 stats 6 002432 automatic structure level 2 dcl 956 std_symbol_header based structure level 1 dcl 5-1 string builtin function dcl 133 set ref 317* 760* string_len 002424 automatic fixed bin(21,0) dcl 907 set ref 915* 916 938* 939 string_ptr 002426 automatic pointer dcl 908 set ref 914* 916 937* 939 subscript parameter fixed bin(17,0) dcl 591 set ref 585 603* substr builtin function dcl 134 ref 1214 1714 1715 1724 1768 1769 symbol_header based structure level 1 dcl 6-1 symbol_table 0(01) 002254 automatic bit(1) level 2 packed unaligned dcl 699 set ref 847 900* sys_info$max_seg_size 000036 external static fixed bin(19,0) dcl 175 set ref 1255 1336* tab_column 002667 automatic fixed bin(17,0) dcl 1699 set ref 1728 1773* 1773 1846* table parameter char array unaligned dcl 590 ref 585 594 594 596 table_1 000023 constant char(12) initial array unaligned dcl 151 set ref 379* 400* table_1_upper_case 000004 constant char(12) initial array unaligned dcl 153 set ref 2104* table_removed 3(05) based bit(1) level 3 packed unaligned dcl 7-1 ref 897 target parameter pointer dcl 2116 set ref 2113 2124* temp_seg_array 002050 automatic pointer array dcl 102 set ref 304* 325* 2118 2120* 2124 temp_value 002450 automatic structure level 1 dcl 1058 set ref 1060* 1062 text parameter char unaligned dcl 284 in procedure "error" set ref 281 286* text parameter char unaligned dcl 548 in procedure "accept_number" ref 544 552 this_line_profile_data 002721 automatic bit(1) dcl 1799 set ref 1803* 1809* 1812 1814 this_value 002564 automatic fixed bin(18,0) dcl 1376 set ref 1508* 1510* 1527 1537 1537 1537 1544 1544 1544 1554 1554 1554 1554 1554 1554 1554 1554 1554 1628* 1631 1632 1633 1636 1805 1805 1805 1809 1809 1814 1814 1814 1814 1814 1814 1822* 1822 "a"CP6_Hardcore.forum qRyȿ2o00a~2rTwhc6.forum q*@qHĶBcT@a8End User & Data Base.forum Ķ3>udd>cp6>users>info>mtgs>End User & Data Base.forumTw@8eu.forum Ķ8H$@Ca&metaphysics.forum $@.>udd>Multics>Bubric>meetings>metaphysics.forumTwmeta.forum $@:H!D r,a,^jokes.forum !0>user_dir_dir>Multics>Mabey>meetings>jokes.forumTwgj.forum !n&gD&B`a`:#SUN_Support.forum g!>site>forum_dir>SUN_Support.forumTwB:wsun.forum g:&D?vanSr&d.forum !>udd>CDC>Smith>meetings>r&d.forumTwvnResearch.forum n&3EO^aSEI.forum 3>udd>m>an>meetings>SEI.forumTw sei.forum 3 &ΈFi*aCoding_Standards.forum Έ&>site>forum_dir>Coding_Standards.forumTwcode.forum Έ>& vF!0a0 change_proc_mtg.forum v(>udd>m>an>meetings>change_proc_mtg.forumTw ?cpm.forum v HeG <Fa>SEI_Management_Issues.forum e1>udd>Fortran>Westcott>SEI_Management_Issues.forumTwF>sei_mi.forum e>H9GSaesei_training.forum 9/>user_dir_dir>Multics>Collin>sei_training.forumTwsei_train.forum 9&GaGCOS_risk_tracking.forum >udd>m>Elliott>mtgs>grt.forumTw<grt.forum tH(gH&faf&GCOS_change_log.forum (g3>udd>Multics>Hinatsu>meetings>GCOS_change_log.forumTw&gcl.forum (gH H^|athGCOS8_to_UNIX_migration.forum ;>udd>Multics>Hinatsu>meetings>GCOS8_to_UNIX_migration.forumTw|tgcos_mig.forum t&3H JiadMCR_Packet.forum 3!>udd>m>mcrb>mtgs>MCR_Packet.forumTwbpmcr.forum 32&1137* 1138 1139 1140 1142 1143 1143 1143 1143 1143 1143 1143 1143 1143 1149 1150 1175 1175 1197 1227 1228 1230 1232 1442* 1443 1443* 1486* 1488 1503* 1508 1510 1512 1516 1519 1523* 1982* 1987 1990 1994 2003 2013 2015 2018 2021* 2046* 2052 2057* 2067* 2068 2068 2072 2072 2076* 2087* 2088 2089 2090* value parameter char unaligned dcl 561 in procedure "accept_string" set ref 558 564 567* value_array 21 based structure level 2 in structure "program" dcl 1-25 in procedure "pf" set ref 928* 1095* 1426* 1626* 1976* value_array based structure array level 1 dcl 1-52 in procedure "pf" set ref 1060 1061* 1061 1062* 1094 1094 value_ptr 002100 automatic pointer dcl 1-72 set ref 723* 1056 1056 1060 1061 1061 1062 1094* 1094 1094 1138 1139 1140 1142 1143 1143 1143 1143 1143 1143 1143 1143 1149 1150 1175 1175 1197 1227 1228 1230 1232 1426* 1469 1469 1473 1473 1478 1478 1516 1519 1523 1527 1537 1537 1537 1544 1544 1544 1554 1554 1554 1554 1554 1554 1554 1554 1554 1626* 1632 1633 1636 1805 1805 1809 1809 1814 1814 1814 1814 1814 1814 1907 1908 1976* 1987 1990 1994 2003 2013 2015 2018 2021 vcpu 13 based fixed bin(17,0) level 3 in structure "long_profile_header" dcl 11-4 in procedure "pf" set ref 1000 vcpu 2 based fixed bin(17,0) level 2 in structure "long_profile_entry" dcl 11-12 in procedure "pf" set ref 1122* 1188 version based fixed bin(17,0) level 2 dcl 1-15 set ref 665 731* word 002443 automatic bit(36) dcl 959 set ref 963 963 965 word_array based bit(36) array dcl 1356 in procedure "store_output_data" set ref 1362* 1362 word_array based bit(36) array dcl 1253 in procedure "store_temp_data" set ref 1266* 1266 x_array based float bin(27) array dcl 1969 set ref 2089* 2089* 2094* 2094* 2106* 2106 2106 x_array_ptr 003004 automatic pointer dcl 1963 set ref 1973* 2089 2089 2094 2094 2106 2106 2106 y_array based float bin(27) array dcl 1970 set ref 2086* 2090* 2090* 2095* 2106* y_array_ptr 003006 automatic pointer dcl 1964 set ref 1974* 2086 2090 2090 2095 2106 y_legend 002060 automatic fixed bin(17,0) dcl 105 set ref 400* 2104 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. Direct_input internal static fixed bin(17,0) initial dcl 13-15 Direct_output internal static fixed bin(17,0) initial dcl 13-15 Direct_update internal static fixed bin(17,0) initial dcl 13-15 Dotted_grid internal static fixed bin(17,0) initial dcl 12-7 Equal_scaling internal static fixed bin(17,0) initial dcl 12-7 Keyed_sequential_input internal static fixed bin(17,0) initial dcl 13-15 Keyed_sequential_output internal static fixed bin(17,0) initial dcl 13-15 Keyed_sequential_update internal static fixed bin(17,0) initial dcl 13-15 Linear_log internal static fixed bin(17,0) initial dcl 12-7 Log_linear internal static fixed bin(17,0) initial dcl 12-7 Log_log internal static fixed bin(17,0) initial dcl 12-7 No_grid internal static fixed bin(17,0) initial dcl 12-7 Sequential_input internal static fixed bin(17,0) initial dcl 13-15 Sequential_input_output internal static fixed bin(17,0) initial dcl 13-15 Sequential_output internal static fixed bin(17,0) initial dcl 13-15 Sequential_update internal static fixed bin(17,0) initial dcl 13-15 Solid_grid internal static fixed bin(17,0) initial dcl 12-7 Stream_input internal static fixed bin(17,0) initial dcl 13-15 Stream_input_output internal static fixed bin(17,0) initial dcl 13-15 Symbols_only internal static fixed bin(17,0) initial dcl 12-7 Vectors_and_symbols internal static fixed bin(17,0) initial dcl 12-7 call_offset internal static fixed bin(17,0) initial dcl 4-78 control_entry_offset internal static fixed bin(17,0) initial dcl 11-19 entry_offset internal static fixed bin(17,0) initial dcl 4-78 exclude_fields automatic bit(1) array unaligned dcl 72 exp_word based structure level 1 dcl 3-21 iox_modes internal static char(24) initial array dcl 13-6 link based structure level 1 dcl 3-11 linkage_header_flags based structure level 1 dcl 3-44 lot based structure level 1 dcl 2-6 lot_fault internal static bit(36) initial dcl 2-9 lotp automatic pointer dcl 2-4 name based structure level 1 dcl 3-70 plot_$scale 000000 constant entry external dcl 12-3 push_offset internal static fixed bin(17,0) initial dcl 4-78 return_no_pop_offset internal static fixed bin(17,0) initial dcl 4-78 return_offset internal static fixed bin(17,0) initial dcl 4-78 short_iox_modes internal static char(4) initial array dcl 13-12 stack_header_overlay based fixed bin(17,0) array dcl 4-94 trap_word based structure level 1 dcl 3-66 tv_offset internal static fixed bin(17,0) initial dcl 4-72 type_pair based structure level 1 dcl 3-25 virgin_linkage_header based structure level 1 dcl 3-52 NAMES DECLARED BY EXPLICIT CONTEXT. accept_field 003553 constant entry internal dcl 585 ref 379 400 accept_number 003263 constant entry internal dcl 544 ref 382 397 403 406 409 accept_pathname 003464 constant entry internal dcl 571 ref 394 412 418 614 accept_search_path 003763 constant entry internal dcl 607 ref 427 accept_string 003413 constant entry internal dcl 558 ref 415 case 000001 constant label array(3) dcl 1469 ref 1467 clean 001456 constant entry internal dcl 322 ref 234 268 end_case 010556 constant label dcl 1483 ref 1471 1476 1481 err_check 001267 constant entry internal dcl 274 ref 370 625 756 808 811 1315 1612 1669 1751 1859 2121 2136 error 001310 constant entry internal dcl 281 ref 277 436 441 444 498 519 522 525 528 531 534 537 552 564 579 596 610 621 647 682 791 794 813 825 844 847 850 874 977 981 1309 1328 1598 1652 2139 extend_temp_data_file 007644 constant entry internal dcl 1306 ref 726 1257 file_error 001355 constant entry internal dcl 290 ref 651 668 1332 1342 1359 1661 1675 1683 find_object 007420 constant entry internal dcl 1276 ref 784 789 get_arguments 001662 constant entry internal dcl 357 ref 237 get_next_arg 004032 constant entry internal dcl 617 ref 550 563 576 593 get_program_name 014716 constant entry internal dcl 2129 ref 674 918 1395 1591 1944 get_seg 014654 constant entry internal dcl 2113 ref 715 722 723 1440 1972 1973 1974 init_star_thresholds 013520 constant entry internal dcl 1890 ref 1500 1624 initialize 001412 constant entry internal dcl 299 ref 233 initialize_line 013307 constant entry internal dcl 1842 ref 1709 1787 list_file 012502 constant entry internal dcl 1689 ref 1630 1636 list_one_program 011324 constant entry internal dcl 1574 ref 1401 1593 1593 missing 004122 constant entry internal dcl 628 ref 480 483 486 489 492 495 501 504 507 510 513 516 open_file 012160 constant entry internal dcl 1643 ref 1581 1632 open_input_file 004200 constant entry internal dcl 641 ref 241 output_header 013357 constant entry internal dcl 1871 ref 1383 1613 pf 001154 constant entry external dcl 37 plot 013634 constant entry internal dcl 1930 ref 255 plot_one_program 013721 constant entry internal dcl 1958 ref 1950 print_one_program 010301 constant entry internal dcl 1411 ref 1404 print_or_list 010160 constant entry internal dcl 1369 ref 252 258 profile 001163 constant entry external dcl 37 ptr_from_msf_ptr 015016 constant entry internal dcl 2147 ref 677 680 1081 1266 1388 1405 1425 1426 1626 1650 1937 1952 1976 put_chars 012704 constant entry internal dcl 1757 ref 1721 1730 put_line 013316 constant entry internal dcl 1853 ref 1775 1786 put_nl 013000 constant entry internal dcl 1782 ref 1733 1740 put_profile_data 013011 constant entry internal dcl 1793 ref 1745 1766 1785 quit 001262 constant label dcl 268 ref 287 294 477 634 973 scan_component 005577 constant entry internal dcl 858 ref 835 scan_data 004600 constant entry internal dcl 693 ref 243 263 scan_statement_data 006713 constant entry internal dcl 1102 ref 1008 1016 stars 013553 constant entry internal dcl 1902 ref 1554 1554 1814 1814 store_output_data 010111 constant entry internal dcl 1350 ref 1336 1339 store_output_file 007716 constant entry internal dcl 1322 ref 247 store_temp_data 007350 constant entry internal dcl 1248 ref 1075 1083 1088 1094 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 17274 17440 16546 17304 Length 20256 16546 144 602 526 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME pf 2771 external procedure is an external procedure. on unit on line 234 64 on unit err_check internal procedure shares stack frame of external procedure pf. error 84 internal procedure is called during a stack extension. file_error internal procedure shares stack frame of external procedure pf. initialize internal procedure shares stack frame of external procedure pf. clean 81 internal procedure is called by several nonquick procedures. get_arguments internal procedure shares stack frame of external procedure pf. accept_number internal procedure shares stack frame of external procedure pf. accept_string internal procedure shares stack frame of external procedure pf. accept_pathname internal procedure shares stack frame of external procedure pf. accept_field internal procedure shares stack frame of external procedure pf. accept_search_path internal procedure shares stack frame of external procedure pf. get_next_arg internal procedure shares stack frame of external procedure pf. missing internal procedure shares stack frame of external procedure pf. open_input_file internal procedure shares stack frame of external procedure pf. scan_data internal procedure shares stack frame of external procedure pf. begin block on line 766 begin block shares stack frame of external procedure pf. begin block on line 775 begin block shares stack frame of external procedure pf. begin block on line 798 begin block shares stack frame of external procedure pf. begin block on line 819 begin block shares stack frame of external procedure pf. scan_component internal procedure shares stack frame of external procedure pf. begin block on line 904 begin block shares stack frame of external procedure pf. begin block on line 953 begin block shares stack frame of external procedure pf. begin block on line 996 begin block shares stack frame of external procedure pf. begin block on line 1024 begin block shares stack frame of external procedure pf. begin block on line 1056 begin block shares stack frame of external procedure pf. scan_statement_data internal procedure shares stack frame of external procedure pf. begin block on line 1203 begin block shares stack frame of external procedure pf. store_temp_data internal procedure shares stack frame of external procedure pf. find_object internal procedure shares stack frame of external procedure pf. extend_temp_data_file internal procedure shares stack frame of external procedure pf. store_output_file internal procedure shares stack frame of external procedure pf. store_output_data internal procedure shares stack frame of external procedure pf. print_or_list internal procedure shares stack frame of external procedure pf. print_one_program internal procedure shares stack frame of external procedure pf. begin block on line 1431 begin block shares stack frame of external procedure pf. begin block on line 1530 begin block shares stack frame of external procedure pf. list_one_program internal procedure shares stack frame of external procedure pf. begin block on line 1585 begin block shares stack frame of external procedure pf. open_file internal procedure shares stack frame of external procedure pf. list_file internal procedure shares stack frame of external procedure pf. begin block on line 1718 begin block shares stack frame of external procedure pf. begin block on line 1724 begin block shares stack frame of external procedure pf. put_chars internal procedure shares stack frame of external procedure pf. put_nl internal procedure shares stack frame of external procedure pf. put_profile_data internal procedure shares stack frame of external procedure pf. initialize_line internal procedure shares stack frame of external procedure pf. put_line internal procedure shares stack frame of external procedure pf. output_header internal procedure shares stack frame of external procedure pf. init_star_thresholds internal procedure shares stack frame of external procedure pf. stars internal procedure shares stack frame of external procedure pf. plot internal procedure shares stack frame of external procedure pf. plot_one_program internal procedure shares stack frame of external procedure pf. begin block on line 2038 begin block shares stack frame of external procedure pf. get_seg internal procedure shares stack frame of external procedure pf. get_program_name internal procedure shares stack frame of external procedure pf. ptr_from_msf_ptr internal procedure shares stack frame of external procedure pf. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME pf 000100 arg_len pf 000102 arg_ptr pf 000104 args pf 000105 code pf 000106 comment pf 000146 comparing pf 000147 dirname pf 000221 entryname pf 000231 exit pf 000232 first pf 000233 from pf 000234 i pf 000235 input_file pf 000307 interval pf 000310 j pf 000311 k pf 000312 last_temp_data_word pf 000313 line_buffer pf 000770 line_length pf 000772 list_iocb pf 000774 max_points pf 000775 n_program_names pf 000776 n_search_paths pf 000777 n_values pf 001000 output_fcb pf 001002 output_file pf 001054 pfd_file_control pf 001104 plot_field pf 001105 prog_nr pf 001106 program_name_array pf 001252 search_path pf 001772 sort_field pf 001773 source_dir pf 002046 source_ptr pf 002050 temp_seg_array pf 002056 to pf 002057 value pf 002060 y_legend pf 002070 operator_ptr pf 002072 pfd_ptr pf 002074 program_ptr pf 002076 source_path_ptr pf 002100 value_ptr pf 002102 isotp pf 002104 sb pf 002140 arg_nr get_arguments 002141 n_args get_arguments 002142 operand_len get_arguments 002144 operand_ptr get_arguments 002232 arg_program_name open_input_file 002252 another_component scan_data 002253 bound_object_segment scan_data 002254 found scan_data 002255 hardcore_bound_segpath scan_data 002330 hardcore_object_ptr scan_data 002332 hardlp scan_data 002334 hp scan_data 002336 last_program_ptr scan_data 002340 linkage_copy_ptr scan_data 002342 lp scan_data 002344 p scan_data 002347 hardcore_bound_segname begin block on line 766 002357 search_nr begin block on line 775 002361 hardcore_object_segnr begin block on line 798 002362 lot_item begin block on line 798 002364 lot_ptr begin block on line 798 002366 object_segnr begin block on line 819 002376 last_temp_data scan_component 002377 long scan_component 002400 map scan_component 002402 overhead scan_component 002404 pf scan_component 002406 pf_loc scan_component 002410 pfh scan_component 002412 q scan_component 002414 sp scan_component 002416 total_cost_or_time scan_component 002417 total_count scan_component 002420 total_page_faults scan_component 002422 source_map_ptr begin block on line 904 002424 string_len begin block on line 904 002426 string_ptr begin block on line 904 002432 copy_lh begin block on line 953 002442 same begin block on line 953 002443 word begin block on line 953 002444 reloff begin block on line 953 002445 entry_index begin block on line 996 002447 n begin block on line 1024 002450 temp_value begin block on line 1056 002464 cost_or_time scan_statement_data 002465 count scan_statement_data 002466 instruction scan_statement_data 002470 instruction_array_ptr scan_statement_data 002472 map2 scan_statement_data 002474 masked_instruction scan_statement_data 002475 n_instructions scan_statement_data 002477 epplp begin block on line 1203 002500 use_lp begin block on line 1203 002516 delim find_object 002534 component store_output_file 002544 output_ptr store_output_data 002554 date_time print_or_list 002562 print_program print_or_list 002563 more_than_one_program print_or_list 002564 this_value print_or_list 002565 threshold print_or_list 002600 skip print_one_program 002602 sort_array_ptr print_one_program 002605 disordered begin block on line 1431 002606 sort_test begin block on line 1431 002611 average_time begin block on line 1530 002612 operator_name begin block on line 1530 002632 source_length list_one_program 002633 list_file begin block on line 1585 002652 source_bc open_file 002662 column list_file 002663 continuation_line list_file 002664 line list_file 002665 scan_length list_file 002666 source_position list_file 002667 tab_column list_file 002702 chars_to_store put_chars 002703 start_position put_chars 002720 previous_line_profile_data put_profile_data 002721 this_line_profile_data put_profile_data 002760 n stars 002770 plot_program plot 003000 plot_array_ptr plot_one_program 003002 skip plot_one_program 003004 x_array_ptr plot_one_program 003006 y_array_ptr plot_one_program 003013 c begin block on line 2038 003014 c1 begin block on line 2038 003032 entryname get_program_name THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. fx1_to_fl2 r_l_a r_e_as r_ne_as r_le_a alloc_char_temp cat_realloc_chars call_ext_out_desc call_ext_out call_int_this_desc call_int_this call_int_other return_mac fl2_to_fx1 tra_ext_1 mdfx1 enable_op shorten_stack ext_entry int_entry int_entry_desc trunc_fx2 divide_fx3 clock_mac THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. absolute_pathname_ com_err_ com_err_$suppress_name cu_$arg_count cu_$arg_ptr cv_dec_check_ cv_ptr_ date_time_ expand_pathname_ expand_pathname_$add_suffix find_operator_name_ get_group_id_ get_temp_segment_ hcs_$initiate_count hcs_$terminate_noname ioa_ ioa_$ioa_switch ioa_$ioa_switch_nnl iox_$attach_name iox_$close iox_$detach_iocb iox_$open iox_$put_chars msf_manager_$adjust msf_manager_$close msf_manager_$get_ptr msf_manager_$open plot_ plot_$setup release_temp_segments_ ring0_get_$name ring0_get_$segptr ring_zero_peek_ unique_chars_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$badopt error_table_$bigarg error_table_$file_is_full error_table_$improper_data_format error_table_$inconsistent error_table_$name_not_found error_table_$noarg error_table_$noentry error_table_$too_many_args error_table_$zero_length_seg iox_$user_output sys_info$max_seg_size LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 37 001153 233 001170 234 001171 237 001213 241 001214 243 001221 247 001225 252 001231 255 001240 258 001244 263 001253 268 001262 270 001266 274 001267 277 001270 279 001306 281 001307 286 001323 287 001352 290 001355 293 001356 294 001411 299 001412 304 001413 306 001427 307 001443 309 001445 310 001446 311 001447 315 001450 316 001451 317 001452 318 001454 322 001455 325 001463 326 001504 328 001526 330 001533 331 001542 334 001545 336 001551 337 001574 338 001604 341 001607 343 001613 344 001624 347 001627 349 001633 350 001644 351 001656 353 001661 357 001662 367 001663 368 001672 369 001701 370 001716 372 001717 376 001746 379 001761 382 001774 385 002012 387 002022 388 002024 389 002026 391 002027 394 002042 397 002056 400 002077 403 002111 406 002127 409 002141 412 002162 415 002176 418 002212 421 002226 424 002241 427 002254 430 002266 432 002276 433 002300 434 002302 436 002303 441 002324 444 002370 447 002415 448 002416 450 002421 454 002423 457 002430 460 002435 462 002443 463 002445 466 002450 469 002455 474 002467 476 002474 477 002524 480 002525 483 002541 486 002556 489 002576 492 002613 495 002630 498 002650 501 002676 504 002715 507 002734 510 002752 513 002772 516 003011 519 003031 522 003060 525 003107 528 003133 531 003162 534 003206 537 003235 540 003262 544 003263 550 003274 551 003275 552 003321 555 003404 556 003412 558 003413 563 003424 564 003425 567 003447 568 003457 569 003463 571 003464 576 003475 578 003476 579 003524 582 003545 583 003552 585 003553 593 003564 594 003565 595 003623 596 003625 599 003665 602 003737 603 003754 604 003756 605 003762 607 003763 610 003764 613 004010 614 004011 615 004031 617 004032 620 004033 621 004034 624 004102 625 004120 626 004121 628 004122 633 004140 634 004177 641 004200 646 004201 647 004231 650 004247 651 004274 654 004305 655 004306 656 004315 658 004343 660 004353 664 004355 665 004357 667 004362 668 004365 673 004366 674 004375 676 004377 677 004400 679 004422 680 004430 682 004441 686 004574 687 004577 693 004600 715 004602 720 004611 722 004617 723 004623 725 004627 726 004631 727 004632 731 004634 732 004636 733 004637 734 004642 735 004651 737 004654 739 004663 741 004666 742 004670 744 004672 749 004674 750 004676 754 004700 755 004707 756 004724 760 004725 766 004727 770 004732 772 004762 775 005013 779 005015 780 005020 781 005031 784 005100 786 005104 766 005106 789 005107 791 005141 794 005202 798 005222 805 005225 806 005231 808 005260 810 005261 811 005306 813 005307 817 005331 798 005333 822 005334 823 005340 825 005343 828 005404 833 005410 834 005412 835 005414 837 005415 838 005423 840 005430 844 005431 847 005467 850 005526 852 005573 854 005576 858 005577 874 005600 877 005645 879 005647 882 005655 883 005660 886 005667 888 005673 891 005701 895 005704 897 005706 900 005712 904 005714 912 005722 914 005724 915 005732 916 005735 918 005741 921 006023 922 006031 923 006035 924 006037 925 006041 926 006042 927 006044 928 006045 930 006047 931 006054 933 006057 934 006062 936 006071 937 006101 938 006110 939 006116 940 006125 942 006127 943 006130 944 006131 949 006132 951 006140 953 006143 962 006147 963 006156 965 006202 967 006214 969 006215 971 006217 973 006263 976 006264 977 006305 980 006326 981 006346 984 006367 987 006371 988 006375 989 006376 993 006402 995 006404 996 006406 1000 006411 1004 006422 1006 006425 1007 006435 1008 006442 1009 006443 1010 006446 1012 006450 1014 006451 1016 006465 1017 006466 1018 006471 1022 006477 1024 006505 1028 006507 1029 006512 1030 006515 1031 006516 1034 006520 1039 006521 1040 006524 1041 006526 1046 006530 1047 006532 1048 006533 1049 006537 1050 006543 1051 006553 1052 006555 1053 006557 1054 006562 1055 006563 1056 006566 1060 006577 1061 006607 1062 006617 1063 006623 1065 006626 1066 006630 1069 006631 1070 006632 1071 006634 1075 006635 1077 006641 1079 006651 1081 006653 1083 006655 1084 006664 1086 006667 1088 006672 1089 006675 1092 006700 1094 006703 1095 006707 1098 006712 1102 006713 1117 006714 1119 006722 1121 006724 1122 006726 1123 006727 1124 006730 1125 006731 1127 006733 1130 006734 1131 006737 1132 006750 1136 006754 1137 006756 1138 006760 1139 006772 1140 007003 1142 007012 1143 007016 1149 007067 1150 007072 1152 007077 1154 007105 1156 007110 1161 007113 1163 007120 1165 007122 1166 007131 1167 007135 1173 007147 1175 007151 1177 007163 1180 007170 1184 007175 1186 007177 1188 007203 1191 007210 1193 007213 1196 007214 1197 007217 1203 007231 1209 007234 1210 007235 1211 007236 1212 007251 1214 007257 1216 007266 1218 007273 1222 007305 1227 007310 1228 007316 1230 007320 1232 007327 1236 007330 1237 007334 1239 007340 1241 007347 1248 007350 1255 007352 1257 007361 1258 007362 1259 007365 1260 007367 1262 007370 1263 007372 1266 007375 1268 007410 1269 007412 1270 007417 1276 007420 1287 007431 1289 007436 1291 007454 1293 007456 1295 007536 1298 007551 1299 007632 1300 007637 1302 007643 1306 007644 1309 007645 1313 007670 1314 007671 1315 007714 1316 007715 1322 007716 1327 007717 1328 007747 1331 007765 1332 010012 1335 010017 1336 010027 1337 010036 1339 010040 1341 010046 1342 010074 1345 010077 1346 010106 1348 010110 1350 010111 1358 010113 1359 010137 1362 010144 1363 010157 1369 010160 1379 010162 1383 010163 1388 010205 1393 010222 1395 010227 1396 010244 1397 010246 1398 010252 1399 010253 1401 010255 1404 010266 1405 010267 1407 010300 1411 010301 1419 010302 1421 010324 1425 010353 1426 010364 1427 010375 1431 010400 1440 010403 1442 010407 1443 010417 1444 010421 1448 010423 1451 010431 1454 010443 1458 010445 1459 010447 1460 010453 1461 010457 1462 010467 1463 010471 1464 010473 1465 010476 1466 010477 1467 010502 1469 010504 1471 010521 1473 010522 1476 010537 1478 010540 1481 010555 1483 010556 1486 010557 1487 010561 1488 010563 1489 010565 1491 010570 1492 010572 1495 010573 1496 010574 1497 010576 1500 010577 1502 010606 1503 010607 1504 010621 1508 010622 1510 010631 1512 010632 1516 010642 1519 010667 1523 010702 1527 010715 1530 010727 1537 010733 1541 010757 1543 010760 1544 010761 1546 011001 1548 011026 1551 011051 1552 011075 1554 011077 1563 011253 1567 011255 1568 011270 1570 011323 1574 011324 1581 011325 1585 011333 1589 011337 1591 011402 1593 011446 1595 011537 1598 011560 1604 011576 1606 011620 1608 011622 1609 011655 1611 011660 1612 011710 1613 011711 1614 011713 1615 011714 1617 011731 1618 011750 1619 011773 1624 012032 1626 012041 1627 012052 1628 012055 1630 012057 1631 012065 1632 012071 1633 012101 1636 012146 1637 012156 1639 012157 1643 012160 1650 012162 1651 012173 1652 012232 1657 012262 1660 012270 1661 012332 1666 012352 1668 012356 1669 012415 1671 012416 1672 012460 1674 012464 1675 012467 1679 012470 1680 012474 1682 012475 1683 012500 1685 012501 1689 012502 1705 012504 1709 012531 1711 012532 1712 012534 1713 012535 1714 012541 1715 012560 1719 012564 1721 012566 1724 012604 1728 012615 1730 012625 1724 012637 1733 012640 1735 012641 1736 012645 1740 012646 1745 012663 1749 012667 1750 012700 1751 012702 1753 012703 1757 012704 1764 012715 1765 012717 1766 012723 1768 012727 1769 012751 1771 012766 1772 012770 1773 012771 1775 012772 1777 012776 1778 012777 1782 013000 1785 013001 1786 013005 1787 013006 1788 013007 1789 013010 1793 013011 1801 013013 1802 013017 1803 013020 1805 013021 1809 013057 1812 013066 1814 013073 1822 013221 1823 013222 1825 013223 1829 013267 1831 013272 1833 013274 1835 013303 1837 013305 1838 013306 1842 013307 1845 013310 1846 013312 1847 013313 1848 013314 1849 013315 1853 013316 1856 013317 1858 013326 1859 013352 1861 013353 1862 013354 1863 013356 1871 013357 1875 013361 1876 013411 1877 013427 1879 013464 1881 013517 1890 013520 1894 013522 1895 013530 1896 013536 1897 013544 1898 013552 1902 013553 1907 013555 1908 013563 1911 013572 1914 013602 1917 013611 1920 013620 1923 013627 1930 013634 1937 013635 1942 013652 1944 013657 1945 013674 1946 013676 1947 013702 1948 013703 1950 013705 1952 013707 1954 013720 1958 013721 1972 013722 1973 013726 1974 013732 1976 013736 1980 013747 1981 013750 1982 013751 1983 013763 1987 013764 1990 013774 1994 014007 1998 014022 2003 014026 2005 014047 2006 014050 2007 014056 2008 014060 2012 014061 2013 014062 2015 014077 2018 014110 2021 014124 2023 014130 2025 014132 2027 014134 2028 014136 2029 014140 2038 014142 2043 014145 2044 014167 2045 014170 2046 014172 2047 014201 2049 014204 2051 014206 2052 014210 2054 014222 2056 014223 2057 014224 2059 014237 2060 014241 2066 014243 2067 014245 2068 014255 2072 014274 2075 014304 2076 014305 2078 014314 2079 014316 2086 014320 2087 014322 2088 014331 2089 014334 2090 014346 2091 014352 2093 014354 2094 014360 2095 014371 2099 014373 2101 014426 2104 014512 2106 014573 2107 014653 2113 014654 2118 014656 2120 014665 2121 014707 2124 014710 2125 014715 2129 014716 2135 014720 2136 014736 2138 014737 2139 014767 2142 015010 2147 015016 2151 015020 2153 015026 ----------------------------------------------------------- Historical Background This edition of the Multics software materials and documentation is provided and donated to Massachusetts Institute of Technology by Group BULL including BULL HN Information Systems Inc. as a contribution to computer science knowledge. This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology, Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell BULL Inc., Groupe BULL and BULL HN Information Systems Inc. to the development of this operating system. Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970), renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership of Professor Fernando Jose Corbato. Users consider that Multics provided the best software architecture for managing computer hardware properly and for executing programs. Many subsequent operating systems incorporated Multics principles. Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc., as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. . ----------------------------------------------------------- Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without fee is hereby granted,provided that the below copyright notice and historical background appear in all copies and that both the copyright notice and historical background and this permission notice appear in supporting documentation, and that the names of MIT, HIS, BULL or BULL HN not be used in advertising or publicity pertaining to distribution of the programs without specific prior written permission. Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc. Copyright 2006 by BULL HN Information Systems Inc. Copyright 2006 by Bull SAS All Rights Reserved