COMPILATION LISTING OF SEGMENT form_bind_map_ Compiled by: Multics PL/I Compiler, Release 27d, of October 11, 1982 Compiled at: Honeywell LISD Phoenix, System M Compiled on: 11/04/82 1804.2 mst Thu 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 /* Form Bind Map - subroutine to produce a printable bind_map segment from the 12* information stored in a bound object's symbol table. 13*Designed and Initially coded by Michael J. Spier, May 3, 1971 */ 14 /* modified 5/26/75 by M. Weaver to use version 2 object_info_ structure */ 15 /* modified 1/22/81 by E. N. Kittlitz for page_offset option */ 16 17 form_bind_map_: procedure(arg_pointer, code); 18 19 declare arg_pointer pointer, code fixed bin(35); 20 21 22 /* DECLARATION OF EXTERNAL ENTRIES */ 23 24 declare date_time_ external entry(fixed bin(71), char(*) aligned); 25 declare get_bound_seg_info_ entry(ptr, fixed bin(24), ptr, ptr, ptr, fixed bin(35)); 26 declare (error_table_$oldobj, error_table_$bad_segment) external fixed bin(35); 27 declare hcs_$fs_get_path_name external entry(ptr, char(*) aligned, fixed bin, 28 char(*) aligned, fixed bin(35)); 29 declare hcs_$status_mins entry (ptr, fixed bin(2), fixed bin(24), fixed bin(35)); 30 declare ioa_$rs external entry options(variable); 31 32 /* DECLARATION OF AUTOMATIC STORAGE VARIABLES */ 33 34 declare (j,k,lng,count,bfx,n_extra_bfs) fixed bin; 35 declare i fixed bin (21); 36 declare (tx_lng,tx_pg1,tx_pg2,tx_start) fixed bin (18); 37 declare extra_bfs (20) fixed bin; 38 declare trel fixed bin(18); 39 declare bitcount fixed bin(24); 40 declare (bm_lng,l1) fixed bin; 41 declare (p,bmp,sblkp,mapp,listp,argp) pointer; 42 declare wst char(256) aligned; 43 declare (objname char(32), dirname char(168)) aligned; 44 declare address char(12) aligned; 45 declare bf_name char(32) aligned; 46 declare short_date char(15) aligned; 47 declare date char(24) aligned; 48 declare maker char(40) aligned; 49 declare (nl char(1), bnl char(2)) aligned; 50 declare print bit(1) aligned; 51 52 declare 1 dd aligned, 53 2 next_def pointer, 54 2 last_def pointer, 55 2 block_ptr pointer, 56 2 section char(4) aligned, 57 2 offset fixed bin, 58 2 entrypoint fixed bin, 59 2 defname char(32) aligned; 60 61 /* DECLARATION OF BUILTIN FUNCTIONS */ 62 63 declare (addr,addrel,divide,fixed,index,rel,substr,unspec) builtin; 64 65 /* DECLARATION OF BASED STRUCTURES */ 66 67 declare 1 x aligned based(argp), 68 2 objp pointer, /* pointer to base of object segment */ 69 2 list_ptr pointer, /* pointer to base of listing segment */ 70 2 list_bc fixed bin(21), /* list segment bitcount */ 71 2 flags aligned, /* option indicators */ 72 3 pad bit(33) unaligned, /* this field used to be fixed bin */ 73 3 page_offset bit (1) unaligned, /* "1"b->show text page number */ 74 3 no_header bit(1) unaligned, /* "1"b->do not print header */ 75 3 long bit(1) unaligned, /* 1 -> long option; 0 -> brief option */ 76 2 nopts fixed bin, /* size of following option array */ 77 2 op(1000) aligned, 78 3 opt_name char(32) aligned, /* name of option component */ 79 3 opt_offset fixed bin, /* desired option offset */ 80 3 name_sw bit(1) unaligned, /* 1 -> option name; 0 -> offset */ 81 3 found bit(1) unaligned; /* 1 -> option found; 0 -> not found */ 82 83 declare 1 link_header aligned based(linkp), 84 2 dum(3) pointer, 85 2 link_begin bit(18) unaligned; 86 87 declare 1 map aligned based(mapp), 88 2 decl_vers fixed bin, 89 2 size fixed bin, 90 2 entry(1000) aligned, 91 3 name_offset bit(18) unaligned, 92 3 name_length bit(18) unaligned, 93 3 uid fixed bin, 94 3 dtm fixed bin(71); 95 96 declare 1 omap(1000) aligned based(mapp), 97 2 inp_ptr bit(18) unaligned, 98 2 inp_lng bit(18) unaligned; 99 100 declare string char(1000) aligned based(oi.symbp); 101 declare bind_map char(10000) based(listp); 102 103 104 /* */ 105 106 declare 1 oi aligned like object_info; 107 1 1 /* BEGIN INCLUDE FILE ... object_info.incl.pl1 1 2*coded February 8, 1972 by Michael J. Spier */ 1 3 /* modified May 26, 1972 by M. Weaver */ 1 4 /* modified 15 April, 1975 by M. Weaver */ 1 5 1 6 declare 1 object_info aligned based, /* structure containing object info based, returned by object_info_ */ 1 7 2 version_number fixed bin, /* version number of current structure format (=2) */ 1 8 2 textp pointer, /* pointer to beginning of text section */ 1 9 2 defp pointer, /* pointer to beginning of definition section */ 1 10 2 linkp pointer, /* pointer to beginning of linkage section */ 1 11 2 statp pointer, /* pointer to beginning of static section */ 1 12 2 symbp pointer, /* pointer to beginning of symbol section */ 1 13 2 bmapp pointer, /* pointer to beginning of break map (may be null) */ 1 14 2 tlng fixed bin, /* length in words of text section */ 1 15 2 dlng fixed bin, /* length in words of definition section */ 1 16 2 llng fixed bin, /* length in words of linkage section */ 1 17 2 ilng fixed bin, /* length in words of static section */ 1 18 2 slng fixed bin, /* length in words of symbol section */ 1 19 2 blng fixed bin, /* length in words of break map */ 1 20 2 format, /* word containing bit flags about object type */ 1 21 3 old_format bit(1) unaligned, /* on if segment isn't in new format, i.e. has old style object map */ 1 22 3 bound bit(1) unaligned, /* on if segment is bound */ 1 23 3 relocatable bit(1) unaligned, /* on if seg has relocation info in its first symbol block */ 1 24 3 procedure bit(1) unaligned, /* on if segment is an executable object program */ 1 25 3 standard bit(1) unaligned, /* on if seg is in standard format (more than just standard map) */ 1 26 3 gate bit(1) unaligned, /* on if segment is a gate */ 1 27 3 separate_static bit(1) unaligned, /* on if static not in linkage */ 1 28 3 links_in_text bit(1) unaligned, /* on if there are threaded links in text */ 1 29 3 perprocess_static bit (1) unaligned, /* on if static is not to be per run unit */ 1 30 3 pad bit(27) unaligned, 1 31 2 entry_bound fixed bin, /* entry bound if segment is a gate */ 1 32 2 textlinkp pointer, /* ptr to first link in text */ 1 33 1 34 /* LIMIT OF BRIEF STRUCTURE */ 1 35 1 36 2 compiler char(8) aligned, /* name of processor which generated segment */ 1 37 2 compile_time fixed bin(71), /* clock reading of date/time object was generated */ 1 38 2 userid char(32) aligned, /* standard Multics id of creator of object segment */ 1 39 2 cvers aligned, /* generator version name in printable char string form */ 1 40 3 offset bit(18) unaligned, /* offset of name in words relative to base of symbol section */ 1 41 3 length bit(18) unaligned, /* length of name in characters */ 1 42 2 comment aligned, /* printable comment concerning generator or generation of segment */ 1 43 3 offset bit(18) unaligned, /* offset of comment in words relative to base of symbol section */ 1 44 3 length bit(18) unaligned, /* length of comment in characters */ 1 45 2 source_map fixed bin, /* offset, relative to base of symbol section, of source map structure */ 1 46 1 47 /* LIMIT OF DISPLAY STRUCTURE */ 1 48 1 49 2 rel_text pointer, /* pointer to text section relocation info */ 1 50 2 rel_def pointer, /* pointer to definition section relocation info */ 1 51 2 rel_link pointer, /* pointer to linkage section relocation info */ 1 52 2 rel_static pointer, /* pointer to static section relocation info */ 1 53 2 rel_symbol pointer, /* pointer to symbol section relocation info */ 1 54 2 text_boundary fixed bin, /* specifies mod of text section base boundary */ 1 55 2 static_boundary fixed bin, /* specifies mod of internal static base boundary */ 1 56 /* currently not used by system */ 1 57 2 default_truncate fixed bin, /* offset rel to symbp for binder to automatically trunc. symb sect. */ 1 58 2 optional_truncate fixed bin; /* offset rel to symbp for binder to optionally trunc. symb sect. */ 1 59 1 60 declare object_info_version_2 fixed bin int static init(2); 1 61 1 62 /* END INCLUDE FILE ... object_info.incl.pl1 */ 108 109 110 /* */ 111 2 1 /* BEGIN INCLUDE SEGMENT ... symbol_block.incl.pl1 2 2*coded February 8, 1972 by Michael J. Spier */ 2 3 2 4 /* last modified may 3, 1972 by M. Weaver */ 2 5 2 6 declare 1 sb aligned based(sblkp), /* structure describing a standard symbol block */ 2 7 2 decl_vers fixed bin, /* version number of current structure format */ 2 8 2 identifier char(8) aligned, /* symbolic code to define purpose of this symb block */ 2 9 2 gen_version_number fixed bin, /* positive integer designating version of object generator */ 2 10 2 gen_creation_time fixed bin(71), /* clock reading of date/time generator was created */ 2 11 2 obj_creation_time fixed bin(71), /* clock reading of date/time object was generated */ 2 12 2 generator char(8) aligned, /* name of processor which generated segment */ 2 13 2 gen_name_offset bit(18) unaligned, /* offset of generator name in words rel to base of symbol block */ 2 14 2 gen_name_length bit(18) unaligned, /* length of printable generator version name in characters */ 2 15 2 uid_offset bit(18) unaligned, /* offset of creator id in words rel to base of symbol block */ 2 16 2 uid_length bit(18) unaligned, /* length of standard Multics id of object creator in characters */ 2 17 2 comment_offset bit(18) unaligned, /* offset of comment in words relative to base of symbol block */ 2 18 2 comment_length bit(18) unaligned, /* length of printable generator comment in characters */ 2 19 2 tbound bit(18) unaligned, /* specifies mod of text section base boundary */ 2 20 2 stat_bound bit(18) unaligned, /* specifies mod of internal static base boundary */ 2 21 2 source_map bit(18) unaligned, /* offset relative to base of symbol block of source map structure */ 2 22 2 area_ptr bit(18) unaligned, /* offset of block info in words relative to base of symbol block */ 2 23 2 symb_base bit(18) unaligned, /* back pointer (rel to base of symb block) to base of symb section */ 2 24 2 block_size bit(18) unaligned, /* size in words of entire symbol block */ 2 25 2 next_block bit(18) unaligned, /* if ^= "0"b, is thread (rel to base of symb section) to next symb block */ 2 26 2 rel_text bit(18) unaligned, /* offset rel to base of symbol block of text sect relocation info */ 2 27 2 rel_def bit(18) unaligned, /* offset rel to base of symb block of def section relocation info */ 2 28 2 rel_link bit(18) unaligned, /* offset rel to base of symb block of link sect relocation info */ 2 29 2 rel_symb bit(18) unaligned, /* offset rel to base of symb block of symb sect relocation info */ 2 30 2 default_truncate bit(18) unaligned, /* offset RTBOSB for binder to automatically trunc. symb sect. */ 2 31 2 optional_truncate bit(18) unaligned; /* offset RTBOSB for binder to optionally truncate symb section */ 2 32 2 33 /* END INCLUDE SEGMENT ... symbol_block.incl.pl1 */ 112 113 114 /* */ 115 116 /* Declaration of obsolete symbol block temporarily 117* generated by the binder */ 118 119 declare 1 symblk_head aligned based(sblkp), 120 121 2 block_id char(8) aligned, /* identifier of this symbol block */ 122 2 dcl_version fixed bin, /* version number of this structure = 1 */ 123 2 comp_version_number fixed bin, /* generator's version number */ 124 2 comp_creation_time fixed bin(71), /* compiler creation time (compatible with old symb table) */ 125 2 object_creation_time fixed bin(71), /* clock reading (compatible with old symb table) */ 126 2 comp_id char(8) aligned, /* identifier of object generator */ 127 2 comp_version_name, 128 3 name_ptr bit(18) unaligned, /* pointer to string */ 129 3 name_lng bit(18) unaligned, /* length of string */ 130 2 userid, 131 3 id_ptr bit(18) unaligned, /* pointer to userid string */ 132 3 id_lng bit(18) unaligned, /* lng of userid string */ 133 2 comment, 134 3 com_ptr bit(18) unaligned, /* pointer to comment string */ 135 3 com_lng bit(18) unaligned, /* length of comment string */ 136 2 source_map_ptr bit(18) unaligned, /* pointer to array of sourcefile specifiers */ 137 2 source_map_size bit(18) unaligned, /* dimension of source map */ 138 2 block_ptr bit(18) unaligned, /* pointer to beginning of symbol block */ 139 2 section_base bit(18) unaligned, /* backpointer to symbol section base */ 140 2 block_size bit(18) unaligned, /* size of symbol block (incl header) */ 141 2 next_block bit(18) unaligned, /* thread to next symbol block */ 142 2 rel_text bit(18) unaligned, /* pointer to text relocation bits */ 143 2 rel_link bit(18) unaligned, /* pointer to linkage relocation bits */ 144 2 rel_symbol bit(18) unaligned, /* pointer to symbol relocation bits */ 145 2 mini_truncate bit(18) unaligned, /* minimum truncate value */ 146 2 maxi_truncate bit(18) unaligned; /* maximum truncate value */ 147 148 /* */ 149 3 1 /* BEGIN INCLUDE SEGMENT ... bind_map.incl.pl1 Michael J. Spier, 4/29/71 */ 3 2 /* last modified April, 1972 by M. Weaver */ 3 3 3 4 declare 1 bindmap aligned based(bmp), 3 5 3 6 2 dcl_version fixed bin, /* version number of this structure = 1 */ 3 7 2 n_components fixed bin, /* number of entries in this array */ 3 8 2 component(0 refer(bindmap.n_components)) aligned, 3 9 3 name, /* objectname of component object */ 3 10 4 name_ptr bit(18) unaligned, /* pointer to name string */ 3 11 4 name_lng bit(18) unaligned, /* length of name string */ 3 12 3 comp_name char(8) aligned, /* name of component's compiler */ 3 13 3 text_start bit(18) unaligned, /* text section relocation counter */ 3 14 3 text_lng bit(18) unaligned, /* length of text section */ 3 15 3 stat_start bit(18) unaligned, /* internal static relocation counter */ 3 16 3 stat_lng bit(18) unaligned, /* length of internal static */ 3 17 3 symb_start bit(18) unaligned, /* symbol section relocation counter */ 3 18 3 symb_lng bit(18) unaligned, /* length of symbol section */ 3 19 3 defblock_ptr bit(18) unaligned, /* pointer to components definition block */ 3 20 3 n_blocks bit(18) unaligned, /* number of symbol blocks the component has */ 3 21 2 bf_name aligned, /* name of bindfile */ 3 22 3 bf_name_ptr bit(18) unaligned, /* pointer to name string */ 3 23 3 bf_name_lng bit(18) unaligned, /* length of name string */ 3 24 2 bf_date_up char(24), /* date updated in archive */ 3 25 2 bf_date_mod char(24); /* date last modified */ 3 26 3 27 /* END INCLUDE SEGMENT ... bind_map.incl.pl1 */ 150 151 152 /* */ 153 154 argp = arg_pointer; /* copy for efficiency */ 155 listp = list_ptr; /* ... */ 156 bm_lng = divide(list_bc,9,21,0); /* convert bitcount into character count */ 157 code = 0; /* preset error code */ 158 count = 0; /* preset count to see how many opts were processed */ 159 bfx, n_extra_bfs = 0; /* preset counts for bindfile names */ 160 unspec(nl) = "000001010"b; 161 unspec(bnl) = "000001111000001010"b; 162 163 call hcs_$fs_get_path_name(objp,dirname,lng,objname,code); 164 if code ^= 0 then goto return_noline; 165 call hcs_$status_mins(objp,(0),bitcount,code); 166 if code ^= 0 then goto return_noline; 167 168 oi.version_number = object_info_version_2; 169 call get_bound_seg_info_(objp, bitcount, addr(oi), bmp, sblkp, code); 170 if code ^= 0 then goto return_noline; 171 172 if bindmap.dcl_version = 1 then bf_name = " "; /* no bindfile info */ 173 else do; /* extract name for comparisons */ 174 p = addrel(sblkp, bindmap.bf_name_ptr); 175 lng =fixed(bindmap.bf_name_lng, 18); 176 bf_name = substr(p -> string, 1, lng); 177 end; 178 179 print_bind_map: 180 if no_header then go to print_components; 181 if nopts > 0 then goto print_header; 182 maker = " "; 183 if oi.userid ^= " " then 184 do; 185 substr(maker,1,5) = ", by "; 186 substr(maker,6,32) = oi.userid; 187 end; 188 call date_time_(oi.compile_time, date); 189 call ioa_$rs("^2/Bindmap for ^a>^a^/Created on ^a^a",wst,l1,dirname,objname,date,maker); 190 substr(bind_map,bm_lng+1,l1) = substr(wst,1,l1); /* copy into bind_map area */ 191 bm_lng = bm_lng + l1; /* update length */ 192 i = fixed(oi.cvers.offset, 18)*4 +1; 193 lng = fixed(oi.cvers.length, 18); 194 if ^oi.format.separate_static 195 then call ioa_$rs("using ^a",wst,l1,substr(string,i,lng)); 196 else call ioa_$rs("using ^a^/with separate static",wst,l1,substr(string,i,lng)); 197 substr(bind_map,bm_lng+1,l1) = substr(wst,1,l1); /* copy into bind_map area */ 198 bm_lng = bm_lng + l1; /* update length */ 199 if oi.source_map ^= 0 then 200 do; /* there is a source map */ 201 mapp = addrel(sblkp, oi.source_map); 202 if oi.format.old_format = "0"b 203 then j = map.size; 204 else j = fixed(source_map_size, 18); 205 do i = 1 to j; /* print out source map */ 206 if oi.format.old_format = "0"b then 207 do; 208 p = addrel(sblkp,map.entry(i).name_offset); 209 lng = fixed(map.entry(i).name_length, 18); 210 end; 211 else do; 212 p = addrel(sblkp, omap(i).inp_ptr); 213 lng = fixed(omap(i).inp_lng, 18); 214 end; 215 call ioa_$rs("^a",wst,l1,substr(p->string,1,lng)); 216 substr(bind_map,bm_lng+1,l1) = substr(wst,1,l1); /* copy into bind_map area */ 217 bm_lng = bm_lng + l1; /* update length */ 218 end; 219 end; 220 221 222 call ioa_$rs("^/^8xObject Text Defs Link Symb Static",wst,l1); 223 substr(bind_map,bm_lng+1,l1) = substr(wst,1,l1); /* copy into bind_map area */ 224 bm_lng = bm_lng + l1; /* update length */ 225 trel = fixed(rel(oi.textp), 18); /* Find offset of text (eg, for component of archive) */ 226 call ioa_$rs("Start ^6o ^6o ^6o ^6o ^6o ^6o",wst,l1, 227 fixed(rel(oi.textp), 18) - trel, fixed(rel(oi.textp), 18) - trel, fixed(rel(oi.defp), 18) - trel, 228 fixed(rel(oi.linkp), 18) - trel, fixed(rel(oi.symbp), 18) - trel, fixed(rel(oi.statp), 18) - trel); 229 230 substr(bind_map,bm_lng+1,l1) = substr(wst,1,l1); /* copy into bind_map area */ 231 bm_lng = bm_lng + l1; /* update length */ 232 call ioa_$rs("Length ^6o ^6o ^6o ^6o ^6o ^6o",wst,l1,divide(bitcount,36,18,0),oi.tlng, 233 oi.dlng, oi.llng, oi.slng, oi.ilng); 234 substr(bind_map,bm_lng+1,l1) = substr(wst,1,l1); /* copy into bind_map area */ 235 bm_lng = bm_lng + l1; /* update length */ 236 237 print_header: 238 call ioa_$rs("^2/Component^28x^[^3xText^2x^;Text^]^8xInt-Stat^7xSymbol^[^9xDate^6xSource^]",wst,l1,page_offset,long); 239 substr(bind_map,bm_lng+1,l1) = substr(wst,1,l1); /* copy into bind_map area */ 240 bm_lng = bm_lng + l1; /* update length */ 241 call ioa_$rs("^33xStart Length^[ Page^] Start Length Start Length^[^3xCompiled^4xLanguage^]^/",wst,l1,page_offset,long); 242 substr(bind_map,bm_lng+1,l1) = substr(wst,1,l1); /* copy into bind_map area */ 243 bm_lng = bm_lng + l1; /* update length */ 244 print_components: 245 do i = 1 to n_components; 246 print = "1"b; /* assume line will be printed */ 247 p = addrel(sblkp, component(i).name_ptr); 248 lng = fixed(component(i).name_lng, 18); 249 tx_start = fixed(component(i).text_start, 18); 250 tx_lng = fixed(component(i).text_lng, 18); 251 tx_pg1 = divide (tx_start, 1024, 18, 0); 252 tx_pg2 = divide (tx_start + tx_lng - 1, 1024, 18, 0); 253 if nopts > 0 then /* there are options */ 254 do; 255 print = "0"b; /* assume line won't be printed */ 256 do j = 1 to nopts; /* lookup option table */ 257 if op(j).name_sw = "1"b then 258 do; 259 if op(j).opt_name = substr(p->string,1,lng) then 260 do; 261 display: 262 op(j).found = "1"b; 263 k = k + 1; 264 print = "1"b; 265 count = count + 1; 266 end; 267 end; 268 else do; 269 if op(j).opt_offset >= tx_start then 270 if op(j).opt_offset < tx_start + tx_lng then goto display; 271 end; 272 end; 273 end; 274 275 if print = "0"b then goto skip; 276 j = fixed(component(i).symb_start,18); /* get symbol table offset */ 277 mapp = addrel(oi.symbp, j); /* pointer to component's symbol table */ 278 call date_time_(mapp->sb.obj_creation_time, date); 279 substr(short_date,1,8) = substr(date,1,8); 280 substr(short_date,9,7) = substr(date,10,7); 281 call ioa_$rs("^32a^6o ^6o^[^x^3o^[+^; ^]^;^2s^] ^6o ^6o ^6o ^6o^[ ^15a ^a^;^2s^]",wst, l1, 282 substr(p->string,1,lng), 283 tx_start,tx_lng, 284 page_offset, tx_pg1, (tx_pg2 ^= tx_pg1), 285 fixed(component(i).stat_start,18),fixed(component(i).stat_lng,18), 286 j,fixed(component(i).symb_lng,18), 287 long,short_date,component(i).comp_name); 288 substr(bind_map,bm_lng+1,l1) = substr(wst,1,l1); /* copy into bind_map area */ 289 bm_lng = bm_lng + l1; /* update length */ 290 skip: 291 end; 292 293 return: 294 if nopts > 0 & count < nopts then do; /* had errors */ 295 if count = 0 then do; /* had only errors */ 296 listp = list_ptr; /* re-initialize; don't print any header */ 297 bm_lng = divide(list_bc, 9, 21, 0); 298 end; 299 else do; /* separate map fram errors */ 300 substr(bind_map, bm_lng+1, 1) = nl; 301 bm_lng = bm_lng + 1; 302 end; 303 do i = 1 to nopts; /* rescan option table */ 304 if op(i).found = "0"b then 305 do; 306 if op(i).name_sw then do; 307 if index(op(i).opt_name, ".bind") > 0 then do; /* special case bindfiles */ 308 if op(i).opt_name = bf_name then bfx = i; /* real name was requested */ 309 else do; /* just guessing; print error */ 310 n_extra_bfs = n_extra_bfs + 1; 311 extra_bfs(n_extra_bfs) = i; 312 end; 313 l1 = 0; /* nothing to add to output yet */ 314 end; 315 else call ioa_$rs("Component ^a not found",wst,l1,op(i).opt_name); 316 end; 317 else call ioa_$rs("Offset ^o out of bounds",wst,l1,op(i).opt_offset); 318 substr(bind_map,bm_lng+1,l1) = substr(wst,1,l1); /* copy into bind_map area */ 319 bm_lng = bm_lng + l1; /* update length */ 320 end; 321 end; 322 end; 323 324 if bf_name = " " then do; /* no bindfile info exists */ 325 if n_extra_bfs = 0 then go to return_noline; /* no bf info requested */ 326 else do; 327 call ioa_$rs("^/There is no bindfile information", wst, l1); 328 substr(bind_map,bm_lng+1,l1) = substr(wst,1,l1); 329 bm_lng = bm_lng + l1; 330 end; 331 end; 332 333 else do; /* there is bindfile info */ 334 if (nopts > 0) & (bfx = 0) & (n_extra_bfs = 0) then go to return_noline; 335 /* but none was requested */ 336 if (nopts = 0) | (bfx > 0) then do; /* print bindfile info */ 337 if ^no_header then do; 338 call ioa_$rs("^2/Bindfile^[^28xDate Updated^8xDate Modified^]",wst,l1,long); 339 substr(bind_map, bm_lng+1, l1) = substr(wst,1,l1); 340 bm_lng = bm_lng + l1; 341 end; 342 call ioa_$rs("^/^34a^[^16a^4x^16a^;^2s^]",wst,l1, 343 bf_name, long, bindmap.bf_date_up, bindmap.bf_date_mod); 344 substr(bind_map, bm_lng+1, l1) = substr(wst, 1, l1); 345 bm_lng = bm_lng + l1; 346 end; 347 if n_extra_bfs > 0 then do; 348 substr(bind_map, bm_lng+1,1) = nl; /* separate errors */ 349 bm_lng = bm_lng + 1; 350 do i = 1 to n_extra_bfs; 351 call ioa_$rs("^a not found",wst,l1,op(extra_bfs(i)).opt_name); 352 substr(bind_map, bm_lng+1, l1) = substr(wst, 1, l1); 353 bm_lng = bm_lng + l1; 354 end; 355 end; 356 end; 357 358 return_noline: 359 if (nopts > 0) & (count = 0) & (bfx = 0) then no_header = "1"b; 360 /* had only errors; don't want title */ 361 list_bc = bm_lng * 9; /* return new listing bitcount */ 362 363 end form_bind_map_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/04/82 1608.6 form_bind_map_.pl1 >dumps>old>recomp>form_bind_map_.pl1 108 1 08/05/77 1022.5 object_info.incl.pl1 >ldd>include>object_info.incl.pl1 112 2 05/06/74 1752.6 symbol_block.incl.pl1 >ldd>include>symbol_block.incl.pl1 150 3 09/18/74 1700.9 bind_map.incl.pl1 >ldd>include>bind_map.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. addr builtin function dcl 63 ref 169 169 addrel builtin function dcl 63 ref 174 201 208 212 247 277 arg_pointer parameter pointer dcl 19 ref 17 154 argp 000156 automatic pointer dcl 41 set ref 154* 155 156 163 165 169 179 181 237 237 241 241 253 256 257 259 261 269 269 281 281 293 293 296 297 303 304 306 307 308 315 317 334 336 337 338 342 351 358 358 361 bf_date_mod based char(24) level 2 dcl 3-4 set ref 342* bf_date_up based char(24) level 2 dcl 3-4 set ref 342* bf_name based structure level 2 in structure "bindmap" dcl 3-4 in procedure "form_bind_map_" bf_name 000342 automatic char(32) dcl 45 in procedure "form_bind_map_" set ref 172* 176* 308 324 342* bf_name_lng based bit(18) level 3 packed unaligned dcl 3-4 ref 175 bf_name_ptr based bit(18) level 3 packed unaligned dcl 3-4 ref 174 bfx 000104 automatic fixed bin(17,0) dcl 34 set ref 159* 308* 334 336 358 bind_map based char(10000) unaligned dcl 101 set ref 190* 197* 216* 223* 230* 234* 239* 242* 288* 300* 318* 328* 339* 344* 348* 352* bindmap based structure level 1 dcl 3-4 bitcount 000140 automatic fixed bin(24,0) dcl 39 set ref 165* 169* 232 232 bm_lng 000141 automatic fixed bin(17,0) dcl 40 set ref 156* 190 191* 191 197 198* 198 216 217* 217 223 224* 224 230 231* 231 234 235* 235 239 240* 240 242 243* 243 288 289* 289 297* 300 301* 301 318 319* 319 328 329* 329 339 340* 340 344 345* 345 348 349* 349 352 353* 353 361 bmp 000146 automatic pointer dcl 41 set ref 169* 172 174 175 244 247 248 249 250 276 281 281 281 281 281 281 281 342 342 bnl 000377 automatic char(2) dcl 49 set ref 161* code parameter fixed bin(35,0) dcl 19 set ref 17 157* 163* 164 165* 166 169* 170 comp_name 3 based char(8) array level 3 dcl 3-4 set ref 281* compile_time 32 000402 automatic fixed bin(71,0) level 2 dcl 106 set ref 188* component 2 based structure array level 2 dcl 3-4 count 000103 automatic fixed bin(17,0) dcl 34 set ref 158* 265* 265 293 295 358 cvers 44 000402 automatic structure level 2 dcl 106 date 000356 automatic char(24) dcl 47 set ref 188* 189* 278* 279 280 date_time_ 000010 constant entry external dcl 24 ref 188 278 dcl_version based fixed bin(17,0) level 2 dcl 3-4 ref 172 defp 4 000402 automatic pointer level 2 dcl 106 set ref 226 dirname 000270 automatic char(168) dcl 43 set ref 163* 189* divide builtin function dcl 63 ref 156 232 232 251 252 297 dlng 17 000402 automatic fixed bin(17,0) level 2 dcl 106 set ref 232* entry 2 based structure array level 2 dcl 87 extra_bfs 000113 automatic fixed bin(17,0) array dcl 37 set ref 311* 351 fixed builtin function dcl 63 ref 175 192 193 204 209 213 225 226 226 226 226 226 226 248 249 250 276 281 281 281 281 281 281 flags 5 based structure level 2 dcl 67 format 24 000402 automatic structure level 2 dcl 106 found 20(01) based bit(1) array level 3 packed unaligned dcl 67 set ref 261* 304 get_bound_seg_info_ 000012 constant entry external dcl 25 ref 169 hcs_$fs_get_path_name 000014 constant entry external dcl 27 ref 163 hcs_$status_mins 000016 constant entry external dcl 29 ref 165 i 000106 automatic fixed bin(21,0) dcl 35 set ref 192* 194 194 196 196 205* 208 209 212 213* 244* 247 248 249 250 276 281 281 281 281 281 281 281* 303* 304 306 307 308 308 311 315 317* 350* 351* ilng 21 000402 automatic fixed bin(17,0) level 2 dcl 106 set ref 232* index builtin function dcl 63 ref 307 inp_lng 0(18) based bit(18) array level 2 packed unaligned dcl 96 ref 213 inp_ptr based bit(18) array level 2 packed unaligned dcl 96 ref 212 ioa_$rs 000020 constant entry external dcl 30 ref 189 194 196 215 222 226 232 237 241 281 315 317 327 338 342 351 j 000100 automatic fixed bin(17,0) dcl 34 set ref 202* 204* 205 256* 257 259 261 269 269* 276* 277 281* k 000101 automatic fixed bin(17,0) dcl 34 set ref 263* 263 l1 000142 automatic fixed bin(17,0) dcl 40 set ref 189* 190 190 191 194* 196* 197 197 198 215* 216 216 217 222* 223 223 224 226* 230 230 231 232* 234 234 235 237* 239 239 240 241* 242 242 243 281* 288 288 289 313* 315* 317* 318 318 319 327* 328 328 329 338* 339 339 340 342* 344 344 345 351* 352 352 353 length 44(18) 000402 automatic bit(18) level 3 packed unaligned dcl 106 set ref 193 linkp 6 000402 automatic pointer level 2 dcl 106 set ref 226 list_bc 4 based fixed bin(21,0) level 2 dcl 67 set ref 156 297 361* list_ptr 2 based pointer level 2 dcl 67 ref 155 296 listp 000154 automatic pointer dcl 41 set ref 155* 190 197 216 223 230 234 239 242 288 296* 300 318 328 339 344 348 352 llng 20 000402 automatic fixed bin(17,0) level 2 dcl 106 set ref 232* lng 000102 automatic fixed bin(17,0) dcl 34 set ref 163* 175* 176 193* 194 194 196 196 209* 213* 215 215 248* 259 281 281 long 5(35) based bit(1) level 3 packed unaligned dcl 67 set ref 237* 241* 281* 338* 342* maker 000364 automatic char(40) dcl 48 set ref 182* 185* 186* 189* map based structure level 1 dcl 87 mapp 000152 automatic pointer dcl 41 set ref 201* 202 208 209 212 213 277* 278 n_components 1 based fixed bin(17,0) level 2 dcl 3-4 ref 174 175 244 342 342 n_extra_bfs 000105 automatic fixed bin(17,0) dcl 34 set ref 159* 310* 310 311 325 334 347 350 name 2 based structure array level 3 dcl 3-4 name_length 2(18) based bit(18) array level 3 packed unaligned dcl 87 ref 209 name_lng 2(18) based bit(18) array level 4 packed unaligned dcl 3-4 ref 248 name_offset 2 based bit(18) array level 3 packed unaligned dcl 87 ref 208 name_ptr 2 based bit(18) array level 4 packed unaligned dcl 3-4 ref 247 name_sw 20 based bit(1) array level 3 packed unaligned dcl 67 ref 257 306 nl 000376 automatic char(1) dcl 49 set ref 160* 300 348 no_header 5(34) based bit(1) level 3 packed unaligned dcl 67 set ref 179 337 358* nopts 6 based fixed bin(17,0) level 2 dcl 67 ref 181 253 256 293 293 303 334 336 358 obj_creation_time 6 based fixed bin(71,0) level 2 dcl 2-6 set ref 278* object_info based structure level 1 dcl 1-6 object_info_version_2 constant fixed bin(17,0) initial dcl 1-60 ref 168 objname 000260 automatic char(32) dcl 43 set ref 163* 189* objp based pointer level 2 dcl 67 set ref 163* 165* 169* offset 44 000402 automatic bit(18) level 3 packed unaligned dcl 106 set ref 192 oi 000402 automatic structure level 1 dcl 106 set ref 169 169 old_format 24 000402 automatic bit(1) level 3 packed unaligned dcl 106 set ref 202 206 omap based structure array level 1 dcl 96 op 7 based structure array level 2 dcl 67 opt_name 7 based char(32) array level 3 dcl 67 set ref 259 307 308 315* 351* opt_offset 17 based fixed bin(17,0) array level 3 dcl 67 set ref 269 269 317* p 000144 automatic pointer dcl 41 set ref 174* 176 208* 212* 215 215 247* 259 281 281 page_offset 5(33) based bit(1) level 3 packed unaligned dcl 67 set ref 237* 241* 281* print 000400 automatic bit(1) dcl 50 set ref 246* 255* 264* 275 rel builtin function dcl 63 ref 225 226 226 226 226 226 226 sb based structure level 1 dcl 2-6 sblkp 000150 automatic pointer dcl 41 set ref 169* 174 201 204 208 212 247 separate_static 24(06) 000402 automatic bit(1) level 3 packed unaligned dcl 106 set ref 194 short_date 000352 automatic char(15) dcl 46 set ref 279* 280* 281* size 1 based fixed bin(17,0) level 2 dcl 87 ref 202 slng 22 000402 automatic fixed bin(17,0) level 2 dcl 106 set ref 232* source_map 46 000402 automatic fixed bin(17,0) level 2 dcl 106 set ref 199 201 source_map_size 15(18) based bit(18) level 2 packed unaligned dcl 119 ref 204 stat_lng 6(18) based bit(18) array level 3 packed unaligned dcl 3-4 ref 281 281 stat_start 6 based bit(18) array level 3 packed unaligned dcl 3-4 ref 281 281 statp 10 000402 automatic pointer level 2 dcl 106 set ref 226 string based char(1000) dcl 100 ref 176 194 194 196 196 215 215 259 281 281 substr builtin function dcl 63 set ref 176 185* 186* 190* 190 194 194 196 196 197* 197 215 215 216* 216 223* 223 230* 230 234* 234 239* 239 242* 242 259 279* 279 280* 280 281 281 288* 288 300* 318* 318 328* 328 339* 339 344* 344 348* 352* 352 symb_lng 7(18) based bit(18) array level 3 packed unaligned dcl 3-4 ref 281 281 symb_start 7 based bit(18) array level 3 packed unaligned dcl 3-4 ref 276 symblk_head based structure level 1 dcl 119 symbp 12 000402 automatic pointer level 2 dcl 106 set ref 194 194 196 196 226 277 text_lng 5(18) based bit(18) array level 3 packed unaligned dcl 3-4 ref 250 text_start 5 based bit(18) array level 3 packed unaligned dcl 3-4 ref 249 textp 2 000402 automatic pointer level 2 dcl 106 set ref 225 226 226 tlng 16 000402 automatic fixed bin(17,0) level 2 dcl 106 set ref 232* trel 000137 automatic fixed bin(18,0) dcl 38 set ref 225* 226 226 226 226 226 226 tx_lng 000107 automatic fixed bin(18,0) dcl 36 set ref 250* 252 269 281* tx_pg1 000110 automatic fixed bin(18,0) dcl 36 set ref 251* 281* 281 tx_pg2 000111 automatic fixed bin(18,0) dcl 36 set ref 252* 281 tx_start 000112 automatic fixed bin(18,0) dcl 36 set ref 249* 251 252 269 269 281* unspec builtin function dcl 63 set ref 160* 161* userid 34 000402 automatic char(32) level 2 dcl 106 set ref 183 186 version_number 000402 automatic fixed bin(17,0) level 2 dcl 106 set ref 168* wst 000160 automatic char(256) dcl 42 set ref 189* 190 194* 196* 197 215* 216 222* 223 226* 230 232* 234 237* 239 241* 242 281* 288 315* 317* 318 327* 328 338* 339 342* 344 351* 352 x based structure level 1 dcl 67 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. address automatic char(12) dcl 44 dd automatic structure level 1 dcl 52 error_table_$bad_segment external static fixed bin(35,0) dcl 26 error_table_$oldobj external static fixed bin(35,0) dcl 26 link_header based structure level 1 dcl 83 NAMES DECLARED BY EXPLICIT CONTEXT. display 001516 constant label dcl 261 ref 269 form_bind_map_ 000275 constant entry external dcl 17 print_bind_map 000457 constant label dcl 179 print_components 001422 constant label dcl 244 set ref 179 print_header 001302 constant label dcl 237 set ref 181 return 001752 constant label dcl 293 return_noline 002427 constant label dcl 358 ref 164 166 170 325 334 skip 001750 constant label dcl 290 ref 275 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 2540 2562 2447 2550 Length 3012 2447 22 214 71 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME form_bind_map_ 484 external procedure is an external procedure. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME form_bind_map_ 000100 j form_bind_map_ 000101 k form_bind_map_ 000102 lng form_bind_map_ 000103 count form_bind_map_ 000104 bfx form_bind_map_ 000105 n_extra_bfs form_bind_map_ 000106 i form_bind_map_ 000107 tx_lng form_bind_map_ 000110 tx_pg1 form_bind_map_ 000111 tx_pg2 form_bind_map_ 000112 tx_start form_bind_map_ 000113 extra_bfs form_bind_map_ 000137 trel form_bind_map_ 000140 bitcount form_bind_map_ 000141 bm_lng form_bind_map_ 000142 l1 form_bind_map_ 000144 p form_bind_map_ 000146 bmp form_bind_map_ 000150 sblkp form_bind_map_ 000152 mapp form_bind_map_ 000154 listp form_bind_map_ 000156 argp form_bind_map_ 000160 wst form_bind_map_ 000260 objname form_bind_map_ 000270 dirname form_bind_map_ 000342 bf_name form_bind_map_ 000352 short_date form_bind_map_ 000356 date form_bind_map_ 000364 maker form_bind_map_ 000376 nl form_bind_map_ 000377 bnl form_bind_map_ 000400 print form_bind_map_ 000402 oi form_bind_map_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_ne_as alloc_cs call_ext_out_desc call_ext_out return shorten_stack ext_entry set_cs_eis index_cs_eis THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. date_time_ get_bound_seg_info_ hcs_$fs_get_path_name hcs_$status_mins ioa_$rs NO EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 17 000271 154 000302 155 000306 156 000310 157 000313 158 000314 159 000315 160 000317 161 000321 163 000323 164 000353 165 000356 166 000374 168 000377 169 000401 170 000424 172 000427 174 000436 175 000447 176 000454 179 000457 181 000463 182 000465 183 000470 185 000474 186 000477 188 000502 189 000517 190 000563 191 000571 192 000573 193 000600 194 000603 196 000646 197 000707 198 000716 199 000720 201 000722 202 000725 204 000733 205 000737 206 000745 208 000750 209 000760 210 000763 212 000764 213 000772 215 000776 216 001034 217 001043 218 001045 222 001047 223 001073 224 001101 225 001103 226 001107 230 001210 231 001216 232 001220 234 001272 235 001300 237 001302 239 001342 240 001350 241 001352 242 001412 243 001420 244 001422 246 001432 247 001434 248 001444 249 001447 250 001452 251 001455 252 001460 253 001465 255 001470 256 001471 257 001477 259 001506 261 001516 263 001523 264 001524 265 001526 267 001527 269 001530 272 001540 275 001542 276 001544 277 001552 278 001555 279 001572 280 001574 281 001600 288 001737 289 001746 290 001750 293 001752 295 001757 296 001761 297 001763 298 001766 300 001767 301 001774 303 001775 304 002004 306 002012 307 002015 308 002025 310 002035 311 002036 313 002041 314 002042 315 002043 316 002073 317 002074 318 002124 319 002132 321 002134 324 002136 325 002142 327 002144 328 002170 329 002176 331 002200 334 002201 336 002210 337 002214 338 002217 339 002251 340 002257 342 002261 344 002332 345 002340 347 002342 348 002344 349 002351 350 002352 351 002360 352 002415 353 002423 354 002425 358 002427 361 002440 363 002443 ----------------------------------------------------------- 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