COMPILATION LISTING OF SEGMENT le_make_component_ Compiled by: Multics PL/I Compiler, Release 29, of July 28, 1986 Compiled at: Honeywell Multics Op. - System M Compiled on: 12/10/86 1256.1 mst Wed Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1986 * 4* * * 5* *********************************************************** */ 6 7 /****^ HISTORY COMMENTS: 8* 1) change(86-08-12,Elhard), approve(86-08-12,MCR7505), 9* audit(86-12-10,DGHowe), install(86-12-10,MR12.0-1241): 10* Originally written to generate a single output component. This may be a 11* single standalone object or a component of an object MSF. 12* END HISTORY COMMENTS */ 13 14 /* format: style1,insnl,ifthendo,indthenelse,^indnoniterdo,^inditerdo,indcom,^indthenbegin,^indprocbody,ind2,ll78,initcol0,dclind4,idind24,struclvlind1,comcol41 */ 15 16 le_make_component_: 17 proc (dname, /** dirname (in ) */ 18 ename, /** entryname (in ) */ 19 leip, /** le input pointer (in ) */ 20 lebp, /** binaries pointer (i/o) */ 21 lecp, /** components pointer (i/o) */ 22 compx, /** output comp index (in ) */ 23 n_comp); /** no of components (in ) */ 24 25 /*** ****************************************************************/ 26 /*** */ 27 /*** Name: le_make_component_ */ 28 /*** Input: dname, ename, lebp, lecp, compx, n_comp */ 29 /*** Function: Actually creates an output binary component. */ 30 /*** Output: lebp, lecp */ 31 /*** */ 32 /*** ****************************************************************/ 33 34 /* constants */ 35 36 dcl Version_offset fixed bin (18) unsigned static 37 options (constant) init (10); 38 dcl Userid_offset fixed bin (18) unsigned static 39 options (constant) init (11); 40 dcl Backpointer_offset fixed bin (18) unsigned static 41 options (constant) init (15); 42 dcl Block_length_offset fixed bin (18) unsigned static 43 options (constant) init (15); 44 dcl Next_block_offset fixed bin (18) unsigned static 45 options (constant) init (16); 46 dcl Source_map_offset fixed bin (18) unsigned static 47 options (constant) init (14); 48 dcl Area_ptr_offset fixed bin (18) unsigned static 49 options (constant) init (14); 50 dcl None fixed bin static options (constant) init (0); 51 52 /* parameters */ 53 54 dcl compx fixed bin parameter; 55 dcl dname char (*) parameter; 56 dcl ename char (*) parameter; 57 dcl lebp ptr parameter; 58 dcl lecp ptr parameter; 59 dcl leip ptr parameter; 60 dcl n_comp fixed bin parameter; 61 62 /* procedures */ 63 64 dcl date_time_ entry (fixed bin (71), char (*)); 65 dcl get_system_free_area_ entry () returns (ptr); 66 dcl hcs_$get_uid_seg entry (ptr, bit (36) aligned, fixed bin (35)); 67 dcl initiate_file_ entry (char (*), char (*), bit (*), ptr, 68 fixed bin (24), fixed bin (35)); 69 dcl le_emit_defs_ entry (ptr, ptr, fixed bin); 70 dcl le_emit_firstref_ entry (ptr, ptr, fixed bin); 71 dcl le_emit_static_ entry (ptr, ptr, fixed bin); 72 dcl le_emit_symbol_ entry (ptr, ptr, fixed bin); 73 dcl le_emit_text_ entry (ptr, ptr, fixed bin); 74 dcl le_error_ entry options (variable); 75 dcl le_util_$get_user_and_version 76 entry (char (*), char (*)); 77 dcl object_info_$brief entry (ptr, fixed bin (24), ptr, fixed bin (35)) 78 ; 79 dcl pathname_ entry (char (*), char (*)) returns (char (168)); 80 81 /* external */ 82 83 dcl le_data_$caller external char (32) varying; 84 dcl le_data_$version_number external fixed bin; 85 dcl 01 le_data_$symbol_table 86 external aligned like std_symbol_header; 87 88 /* based */ 89 90 dcl 01 bd_map aligned based (bd_mapp), 91 02 dcl_version fixed bin, 92 02 n_components fixed bin, 93 02 component dim (comp_count refer (bd_map.n_components)) 94 aligned like bindmap.component, 95 02 bf_name aligned like bindmap.bf_name, 96 02 bf_date_up char (24), 97 02 bf_date_mod char (24); 98 dcl 01 comp aligned like le_comp based (compp); 99 dcl 01 end_overlay aligned based (addr (end_relp)), 100 02 pad bit (35) unaligned, 101 02 odd bit (1) unaligned; 102 dcl 01 leb aligned based (lebp), 103 02 header aligned like le_binaries.header, 104 02 binary dim (0:0 refer (leb.n_binaries)) 105 like le_binaries.binary; 106 dcl 01 lec aligned based (lecp), 107 02 header aligned like le_components.header, 108 02 comp dim (0 refer (lec.n_components)) like le_comp; 109 dcl 01 lei aligned based (leip), 110 02 header aligned like le_input.header, 111 02 opt dim (0 refer (lei.n_opts)) like le_option; 112 dcl 01 les aligned based (lesp), 113 02 header aligned like le_segnames.header, 114 02 segname dim (0 refer (les.n_segnames)) 115 like le_segnames.segname; 116 dcl 01 sc_map aligned based (sc_mapp), 117 02 version fixed bin, 118 02 number fixed bin, 119 02 map dim (source_count refer (sc_map.number)) 120 aligned like source_map.map; 121 dcl 01 std_sb_hdr aligned like std_symbol_header based; 122 dcl sys_area area based (sys_areap); 123 124 /* automatic */ 125 126 dcl bd_mapp ptr automatic; 127 dcl bmp ptr automatic; 128 dcl bx fixed bin automatic; 129 dcl c fixed bin automatic; 130 dcl cname char (32) automatic; 131 dcl comp_count fixed bin automatic; 132 dcl compp ptr automatic; 133 dcl date_str char (24) automatic; 134 dcl dummy fixed bin (18) unsigned automatic; 135 dcl ec fixed bin (35) automatic; 136 dcl end_relp fixed bin (18) unsigned automatic; 137 dcl i fixed bin automatic; 138 dcl lesp ptr automatic; 139 dcl source_count fixed bin automatic; 140 dcl n_words fixed bin (18) unsigned automatic; 141 dcl nm char (32) automatic; 142 dcl nml fixed bin (18) unsigned automatic; 143 dcl ocudp ptr automatic; 144 dcl 01 oi aligned like object_info automatic; 145 dcl open_flags bit (6) automatic; 146 dcl pad_word bit (36) aligned automatic; 147 dcl pn char (168) automatic; 148 dcl pnl fixed bin automatic; 149 dcl prev_start fixed bin (18) unsigned automatic; 150 dcl rel_str char (4096) varying automatic; 151 dcl rel_strp ptr automatic; 152 dcl relp fixed bin (18) unsigned automatic; 153 dcl 01 sb_hdr aligned like std_symbol_header automatic; 154 dcl sbp ptr automatic; 155 dcl sc_mapp ptr automatic; 156 dcl segname char (32) varying automatic; 157 dcl start fixed bin automatic; 158 dcl sys_areap ptr automatic; 159 dcl userid char (32) automatic; 160 dcl version char (256) automatic; 161 162 /* conditions */ 163 164 dcl cleanup condition; 165 166 /* builtin */ 167 168 dcl addr builtin; 169 dcl addrel builtin; 170 dcl bin builtin; 171 dcl bit builtin; 172 dcl char builtin; 173 dcl clock builtin; 174 dcl copy builtin; 175 dcl currentsize builtin; 176 dcl divide builtin; 177 dcl length builtin; 178 dcl ltrim builtin; 179 dcl null builtin; 180 dcl rtrim builtin; 181 dcl size builtin; 182 dcl unspec builtin; 183 184 sys_areap = get_system_free_area_ (); 185 186 /* arrange to clean up on an unexpected release */ 187 188 ocudp = null; 189 sc_mapp = null; 190 bd_mapp = null; 191 192 on cleanup 193 begin; 194 if ocudp ^= null 195 then call ocu_$release (ocudp); 196 if sc_mapp ^= null 197 then free sc_map in (sys_area); 198 if bd_mapp ^= null 199 then free bd_map in (sys_area); 200 end; 201 202 /* set up the open options for the component */ 203 204 open_flags = OPEN_FLAGS_BOUND | OPEN_FLAGS_PROCEDURE; 205 if lec.header.flags.separate_static 206 then open_flags = open_flags | OPEN_FLAGS_SEPARATE_STATIC; 207 if lec.flags.perprocess_static 208 then open_flags = open_flags | OPEN_FLAGS_PERPROCESS_STATIC; 209 if n_comp > 1 210 then open_flags = open_flags | OPEN_FLAGS_NO_HASHTABLE; 211 212 /* determine the name of the component, and the name of the segname */ 213 /* definition block to contain the symbol_table and bindmap defs */ 214 215 if n_comp > 1 216 then do; 217 cname = ltrim (char (compx)); 218 segname = rtrim (ename) || "." || rtrim (cname); 219 end; 220 else cname, segname = rtrim (ename); 221 222 /* open the new object segment */ 223 224 call ocu_$open (dname, cname, open_flags, ocudp, ec); 225 if ec ^= 0 226 then call le_error_ (LE_ABORT_ERROR, ec, "Opening ^a", 227 pathname_ (dname, cname)); 228 229 /* find the first component to be emitted */ 230 231 start = None; 232 233 do c = 1 to lec.n_components while (start = None); 234 if lec.comp (c).target = compx 235 then start = c; 236 end; 237 238 /* if we have a MSF component, emit the msf map */ 239 240 if n_comp > 1 241 then call ocu_$emit_msf_map (ocudp, n_comp + 1, (compx)); 242 243 /* emit the definition block for the bound unit */ 244 245 dummy = ocu_$emit_segname (ocudp, segname, ""b); 246 dummy = ocu_$emit_definition (ocudp, "symbol_table", Symbol, 0, ""b); 247 dummy = ocu_$emit_definition (ocudp, "bind_map", Symbol, 0, ""b); 248 249 /* emit the symbol header for the bound unit */ 250 251 unspec (sb_hdr) = ""b; 252 253 sb_hdr.dcl_version = 1; 254 sb_hdr.identifier = "bind_map"; 255 sb_hdr.gen_number = le_data_$version_number; 256 sb_hdr.gen_created = le_data_$symbol_table.object_created; 257 sb_hdr.object_created = clock (); 258 sb_hdr.generator = le_data_$caller; 259 sbp = lec.comp (start).orig.symbp; 260 sb_hdr.text_boundary = sbp -> std_sb_hdr.text_boundary; 261 sb_hdr.stat_boundary = sbp -> std_sb_hdr.stat_boundary; 262 263 /* calculate the size and relinfo */ 264 265 n_words = size (sb_hdr); 266 rel_strp = addrel (addr (rel_str), 1); 267 rel_str = copy ("aa", n_words); 268 269 /* emit the symbol header */ 270 271 dummy = ocu_$emit_symbol (ocudp, addr (sb_hdr), rel_strp, n_words); 272 273 call le_util_$get_user_and_version (userid, version); 274 275 /* create the version string, relinfo, etc and emit the version string */ 276 277 n_words = divide (length (rtrim (version)) + 3, 4, 17, 0); 278 rel_str = copy ("aa", n_words); 279 dummy = ocu_$emit_symbol (ocudp, addr (version), rel_strp, n_words); 280 281 /* backpatch the string offset and length into the symbol header */ 282 283 call ocu_$backpatch (ocudp, "symbol", Version_offset, "left 18 unsigned", 284 (dummy)); 285 call ocu_$backpatch (ocudp, "symbol", Version_offset, "right 18 unsigned", 286 length (rtrim (version))); 287 288 /* get the userid, create relinfo for it and emit it */ 289 290 n_words = divide (length (rtrim (userid)) + 3, 4, 17, 0); 291 rel_str = copy ("aa", n_words); 292 dummy = ocu_$emit_symbol (ocudp, addr (userid), rel_strp, n_words); 293 294 /* backpatch the offset and length into the symbol header */ 295 296 call ocu_$backpatch (ocudp, "symbol", Userid_offset, "left 18 unsigned", 297 (dummy)); 298 call ocu_$backpatch (ocudp, "symbol", Userid_offset, "right 18 unsigned", 299 length (rtrim (userid))); 300 301 /*** ****************************************************************/ 302 /*** */ 303 /*** NOTE: when the relocation offsets are being calculated */ 304 /*** for the various sections in le_msf_partition_, */ 305 /*** it is assumed that the only things preceeding the */ 306 /*** first components symbol block are the symbol */ 307 /*** header, the userid string, and the version string */ 308 /*** If this is changed, adjust the relocation offset */ 309 /*** calculations accordingly. */ 310 /*** */ 311 /*** ****************************************************************/ 312 313 comp_count = 0; 314 315 do c = start to lec.n_components; 316 compp = addr (lec.comp (c)); 317 318 /* if the component is in the target component currently being */ 319 /* then emit all of its sections */ 320 321 if comp.target = compx & comp.flags.include 322 then do; 323 324 /* emit each section of the object segment */ 325 326 call le_emit_defs_ (ocudp, lecp, c); 327 call le_emit_text_ (ocudp, lecp, c); 328 call le_emit_static_ (ocudp, lecp, c); 329 call le_emit_symbol_ (ocudp, lecp, c); 330 call le_emit_firstref_ (ocudp, lecp, c); 331 332 /* count the number of components in this output component */ 333 334 comp_count = comp_count + 1; 335 end; 336 end; 337 338 /* thread the symbol blocks together */ 339 340 prev_start = 0; 341 342 do c = start to lec.n_components; 343 compp = addr (lec.comp (c)); 344 if comp.target = compx & comp.flags.include 345 then do; 346 347 /* backpatch the section backpointer */ 348 349 call ocu_$backpatch (ocudp, "symbol", 350 comp.new.rel_symb + Backpointer_offset, "left 18 signed", 351 -comp.new.rel_symb); 352 353 /* backpatch the new section length */ 354 355 call ocu_$backpatch (ocudp, "symbol", 356 comp.new.rel_symb + Block_length_offset, 357 "right 18 unsigned", (comp.orig.symbl)); 358 359 /* backpatch the next block offset */ 360 361 call ocu_$backpatch (ocudp, "symbol", 362 prev_start + Next_block_offset, "left 18 unsigned", 363 comp.new.rel_symb - prev_start); 364 prev_start = comp.new.rel_symb; 365 end; 366 end; 367 368 /* create the source_map */ 369 370 source_count, i = 0; 371 372 /* find the number of unique source pathnames */ 373 374 do c = start to lec.n_components while (i < comp_count); 375 compp = addr (lec.comp (c)); 376 if comp.flags.include & comp.target = compx 377 then do; 378 i = i + 1; 379 if comp.flags.unique_path 380 then source_count = source_count + 1; 381 end; 382 end; 383 384 /* allocate the source map */ 385 386 allocate sc_map in (sys_area); 387 388 sc_map.version = 1; 389 390 i = 0; 391 do c = start to lec.n_components while (i < source_count); 392 compp = addr (lec.comp (c)); 393 if comp.target = compx & comp.flags.include & comp.flags.unique_path 394 then do; 395 396 /* if this component was included in the current output */ 397 /* component, then add it to the source map. */ 398 399 i = i + 1; 400 sc_map.map (i).uid = comp.uid; 401 sc_map.map (i).dtm = comp.dtcm; 402 403 /* emit the pathname string and save the relpointer */ 404 405 pn = comp.path; 406 pnl = length (rtrim (pn)); 407 n_words = divide (pnl + 3, 4, 17, 0); 408 rel_str = copy ("aa", n_words); 409 relp = ocu_$emit_symbol (ocudp, addr (pn), rel_strp, n_words); 410 sc_map.map (i).pathname.offset = bit (bin (relp, 18)); 411 sc_map.map (i).pathname.size = bit (bin (pnl, 18)); 412 end_relp = relp + n_words; 413 end; 414 end; 415 416 if end_overlay.odd 417 then do; 418 419 /* force source_map alignment to a doubleword boundary */ 420 421 pad_word = ""b; 422 rel_str = "aa"; 423 end_relp = ocu_$emit_symbol (ocudp, addr (pad_word), rel_strp, 1) 424 + 1; 425 end; 426 427 /* now we actually emit the source map */ 428 429 n_words = currentsize (sc_map); 430 rel_str = copy ("aa", n_words); 431 432 relp = ocu_$emit_symbol (ocudp, sc_mapp, rel_strp, n_words); 433 call ocu_$backpatch (ocudp, "symbol", Source_map_offset, 434 "left 18 unsigned", (relp)); 435 436 end_relp = relp + n_words; 437 438 /* free the local copy */ 439 440 free sc_map in (sys_area); 441 sc_mapp = null; 442 443 /* create the bind_map */ 444 445 i = 0; 446 447 allocate bd_map in (sys_area); 448 449 bd_map.dcl_version = 1; 450 451 do c = start to lec.n_components while (i < comp_count); 452 compp = addr (lec.comp (c)); 453 if comp.target = compx 454 then do; 455 456 /* for each component in the current output component, add a */ 457 /* bind map entry. */ 458 459 i = i + 1; 460 461 /* emit the name string and insert the relpointer into the map */ 462 463 nm = comp.name; 464 nml = length (rtrim (nm)); 465 n_words = divide (nml + 3, 4, 17, 0); 466 rel_str = copy ("aa", n_words); 467 relp = ocu_$emit_symbol (ocudp, addr (nm), rel_strp, n_words); 468 end_relp = relp + n_words; 469 bd_map.component (i).name.name_ptr = bit (bin (relp), 18); 470 bd_map.component (i).name.name_lng = bit (bin (nml), 18); 471 bd_map.component (i).comp_name = comp.compiler; 472 bd_map.component (i).text_start = bit (bin (comp.new.rel_text), 18); 473 bd_map.component (i).text_lng = bit (bin (comp.orig.textl), 18); 474 bd_map.component (i).stat_start = bit (bin (comp.new.rel_stat), 18); 475 bd_map.component (i).stat_lng = bit (bin (comp.orig.statl), 18); 476 bd_map.component (i).symb_start = bit (bin (comp.new.rel_symb), 18); 477 bd_map.component (i).symb_lng = bit (bin (comp.orig.symbl), 18); 478 lesp = comp.tables.lesp; 479 bd_map.component (i).defblock_ptr = 480 bit (bin (les.segname (1).relp), 18); 481 bd_map.component (i).n_blocks = 482 bit (bin (comp.orig.n_symb_blocks), 18); 483 end; 484 end; 485 486 /* determine a bindfile name string and emit it (if any) */ 487 488 if lei.bindfile.name = "" 489 then do; 490 bd_map.bf_name.bf_name_ptr = ""b; 491 bd_map.bf_name.bf_name_lng = ""b; 492 end; 493 else do; 494 nm = lei.bindfile.name; 495 nml = length (rtrim (nm)); 496 n_words = divide (nml + 3, 4, 17, 0); 497 rel_str = copy ("aa", n_words); 498 relp = ocu_$emit_symbol (ocudp, addr (nm), rel_strp, n_words); 499 bd_map.bf_name.bf_name_ptr = bit (bin (relp), 18); 500 bd_map.bf_name.bf_name_lng = bit (bin (nml), 18); 501 end; 502 503 /* get the bindfile dates from the input structure */ 504 505 call date_time_ (lei.bindfile.dt_updated, date_str); 506 bd_map.bf_date_up = date_str; 507 call date_time_ (lei.bindfile.dt_modified, date_str); 508 bd_map.bf_date_mod = date_str; 509 510 /* force bindmap alignment onto a doubleword boundary */ 511 512 if end_overlay.odd 513 then do; 514 rel_str = "aa"; 515 end_relp = ocu_$emit_symbol (ocudp, addr (pad_word), rel_strp, 1) + 1; 516 end; 517 518 n_words = currentsize (bd_map); 519 rel_str = copy ("aa", n_words); 520 521 /* emit the bindmap */ 522 523 relp = ocu_$emit_symbol (ocudp, bd_mapp, rel_strp, n_words); 524 525 /* patch the bindmap offset into the header */ 526 527 call ocu_$backpatch (ocudp, "symbol", Area_ptr_offset, "right 18 unsigned", 528 (relp)); 529 530 free bd_map in (sys_area); 531 532 bd_mapp = null; 533 534 /* close the ocu_ invocation and actually create the segment */ 535 536 call ocu_$close (ocudp, ec); 537 if ec ^= 0 538 then call le_error_ (LE_ABORT_ERROR, ec, "^/While closing component ^a.", 539 pathname_ (dname, ename)); 540 541 /* get a pointer to the output component for the binaries structure */ 542 543 bx, leb.n_binaries = leb.n_binaries + 1; 544 call initiate_file_ (dname, cname, R_ACCESS, leb.binary (bx).segp, 545 leb.binary (bx).bc, 0); 546 547 /* get the object info for the component */ 548 549 oi.version_number = object_info_version_2; 550 551 call object_info_$brief (leb.binary (bx).segp, leb.binary (bx).bc, 552 addr (oi), ec); 553 leb.binary (bx).textp = oi.textp; 554 leb.binary (bx).defnp = oi.defp; 555 leb.binary (bx).linkp = oi.linkp; 556 leb.binary (bx).symbp = oi.symbp; 557 leb.binary (bx).statp = oi.statp; 558 leb.binary (bx).textl = oi.tlng; 559 leb.binary (bx).defnl = oi.dlng; 560 leb.binary (bx).linkl = oi.llng; 561 leb.binary (bx).symbl = oi.slng; 562 leb.binary (bx).statl = oi.ilng; 563 564 call hcs_$get_uid_seg (leb.binary (bx).segp, leb.binary (bx).uid, ec); 565 566 return; 567 568 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 569 570 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 571 572 1 1 /* BEGIN INCLUDE FILE ... access_mode_values.incl.pl1 1 2* 1 3* Values for the "access mode" argument so often used in hardcore 1 4* James R. Davis 26 Jan 81 MCR 4844 1 5* Added constants for SM access 4/28/82 Jay Pattin 1 6* Added text strings 03/19/85 Chris Jones 1 7**/ 1 8 1 9 1 10 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 1 11 dcl ( 1 12 N_ACCESS init ("000"b), 1 13 R_ACCESS init ("100"b), 1 14 E_ACCESS init ("010"b), 1 15 W_ACCESS init ("001"b), 1 16 RE_ACCESS init ("110"b), 1 17 REW_ACCESS init ("111"b), 1 18 RW_ACCESS init ("101"b), 1 19 S_ACCESS init ("100"b), 1 20 M_ACCESS init ("010"b), 1 21 A_ACCESS init ("001"b), 1 22 SA_ACCESS init ("101"b), 1 23 SM_ACCESS init ("110"b), 1 24 SMA_ACCESS init ("111"b) 1 25 ) bit (3) internal static options (constant); 1 26 1 27 /* The following arrays are meant to be accessed by doing either 1) bin (bit_value) or 1 28* 2) divide (bin_value, 2) to come up with an index into the array. */ 1 29 1 30 dcl SEG_ACCESS_MODE_NAMES (0:7) init ("null", "W", "E", "EW", "R", "RW", "RE", "REW") char (4) internal 1 31 static options (constant); 1 32 1 33 dcl DIR_ACCESS_MODE_NAMES (0:7) init ("null", "A", "M", "MA", "S", "SA", "SM", "SMA") char (4) internal 1 34 static options (constant); 1 35 1 36 dcl ( 1 37 N_ACCESS_BIN init (00000b), 1 38 R_ACCESS_BIN init (01000b), 1 39 E_ACCESS_BIN init (00100b), 1 40 W_ACCESS_BIN init (00010b), 1 41 RW_ACCESS_BIN init (01010b), 1 42 RE_ACCESS_BIN init (01100b), 1 43 REW_ACCESS_BIN init (01110b), 1 44 S_ACCESS_BIN init (01000b), 1 45 M_ACCESS_BIN init (00010b), 1 46 A_ACCESS_BIN init (00001b), 1 47 SA_ACCESS_BIN init (01001b), 1 48 SM_ACCESS_BIN init (01010b), 1 49 SMA_ACCESS_BIN init (01011b) 1 50 ) fixed bin (5) internal static options (constant); 1 51 1 52 /* END INCLUDE FILE ... access_mode_values.incl.pl1 */ 573 2 1 /* BEGIN INCLUDE SEGMENT ... bind_map.incl.pl1 Michael J. Spier, 4/29/71 */ 2 2 /* last modified April, 1972 by M. Weaver */ 2 3 2 4 declare 1 bindmap aligned based(bmp), 2 5 2 6 2 dcl_version fixed bin, /* version number of this structure = 1 */ 2 7 2 n_components fixed bin, /* number of entries in this array */ 2 8 2 component(0 refer(bindmap.n_components)) aligned, 2 9 3 name, /* objectname of component object */ 2 10 4 name_ptr bit(18) unaligned, /* pointer to name string */ 2 11 4 name_lng bit(18) unaligned, /* length of name string */ 2 12 3 comp_name char(8) aligned, /* name of component's compiler */ 2 13 3 text_start bit(18) unaligned, /* text section relocation counter */ 2 14 3 text_lng bit(18) unaligned, /* length of text section */ 2 15 3 stat_start bit(18) unaligned, /* internal static relocation counter */ 2 16 3 stat_lng bit(18) unaligned, /* length of internal static */ 2 17 3 symb_start bit(18) unaligned, /* symbol section relocation counter */ 2 18 3 symb_lng bit(18) unaligned, /* length of symbol section */ 2 19 3 defblock_ptr bit(18) unaligned, /* pointer to components definition block */ 2 20 3 n_blocks bit(18) unaligned, /* number of symbol blocks the component has */ 2 21 2 bf_name aligned, /* name of bindfile */ 2 22 3 bf_name_ptr bit(18) unaligned, /* pointer to name string */ 2 23 3 bf_name_lng bit(18) unaligned, /* length of name string */ 2 24 2 bf_date_up char(24), /* date updated in archive */ 2 25 2 bf_date_mod char(24); /* date last modified */ 2 26 2 27 /* END INCLUDE SEGMENT ... bind_map.incl.pl1 */ 574 3 1 /**** START OF: le_data.incl.pl1 * * * * * */ 3 2 3 3 /****^ HISTORY COMMENTS: 3 4* 1) change(86-08-12,Elhard), approve(86-08-12,MCR7505), 3 5* audit(86-12-10,DGHowe), install(86-12-10,MR12.0-1241): 3 6* Originally written to define the structures used internally by le_. 3 7* END HISTORY COMMENTS */ 3 8 3 9 /*** ****************************************************************/ 3 10 /*** */ 3 11 /*** Name: le_data */ 3 12 /*** Function: This include file defines the data structures */ 3 13 /*** used internally by the linkage_editor subroutine. */ 3 14 /*** */ 3 15 /*** ****************************************************************/ 3 16 3 17 /* error severity constants */ 3 18 3 19 dcl LE_WARNING fixed bin static options (constant) init (1); 3 20 dcl LE_ERROR fixed bin static options (constant) init (2); 3 21 dcl LE_FATAL_ERROR fixed bin static options (constant) init (3); 3 22 dcl LE_ABORT_ERROR fixed bin static options (constant) init (4); 3 23 3 24 /* section identifier constants */ 3 25 3 26 dcl Text fixed bin (3) static options (constant) 3 27 init (0); 3 28 dcl Linkage fixed bin (3) static options (constant) 3 29 init (1); 3 30 dcl Symbol fixed bin (3) static options (constant) 3 31 init (2); 3 32 dcl Definition fixed bin (3) static options (constant) 3 33 init (3); 3 34 dcl Static fixed bin (3) static options (constant) 3 35 init (4); 3 36 dcl System fixed bin (3) static options (constant) 3 37 init (5); 3 38 dcl Heap fixed bin (3) static options (constant) 3 39 init (6); 3 40 3 41 dcl section_nm (0:6) char (16) static options (constant) 3 42 init ("text", "linkage", "symbol", "definition", 3 43 "static", "system", "heap"); 3 44 3 45 /* link type constants */ 3 46 3 47 dcl Self_Base fixed bin (3) static options (constant) 3 48 init (1); 3 49 dcl Refname_Base fixed bin (3) static options (constant) 3 50 init (3); 3 51 dcl Refname_Offsetname fixed bin (3) static options (constant) 3 52 init (4); 3 53 dcl Self_Offsetname fixed bin (3) static options (constant) 3 54 init (5); 3 55 3 56 /* backpatch type constants */ 3 57 3 58 dcl Patch_Link fixed bin static options (constant) init (1); 3 59 dcl Patch_Init fixed bin static options (constant) init (2); 3 60 dcl Patch_Symbol_Ref fixed bin static options (constant) init (3); 3 61 dcl Patch_Self_Init fixed bin static options (constant) init (4); 3 62 3 63 /*** ****************************************************************/ 3 64 /*** */ 3 65 /*** Name: le_components */ 3 66 /*** Function: the component table is used to keep information */ 3 67 /*** about the input components being used and their */ 3 68 /*** disposition in output components. */ 3 69 /*** */ 3 70 /*** ****************************************************************/ 3 71 3 72 dcl 01 le_components aligned based, 3 73 02 header aligned, 3 74 03 flags aligned, 3 75 04 separate_static bit (1) unaligned, 3 76 04 perprocess_static bit (1) unaligned, 3 77 04 mbz bit (34) unaligned, 3 78 03 n_components fixed bin, 3 79 02 comp (0 refer (le_components.n_components)) 3 80 like le_comp; 3 81 3 82 /*** ****************************************************************/ 3 83 /*** */ 3 84 /*** Name: le_comp */ 3 85 /*** Function: this is a single component table entry. */ 3 86 /*** */ 3 87 /*** ****************************************************************/ 3 88 3 89 dcl 01 le_comp aligned based, 3 90 02 segp ptr, 3 91 02 bc fixed bin (24), 3 92 02 uid bit (36) aligned, 3 93 02 dtcm fixed bin (71), 3 94 02 name char (32) varying, 3 95 02 path char (194) varying, 3 96 02 compiler char (8), 3 97 02 target fixed bin, 3 98 02 flags aligned, 3 99 03 library bit (1) unaligned, 3 100 03 include bit (1) unaligned, 3 101 03 delete_table bit (1) unaligned, 3 102 03 separate_static bit (1) unaligned, 3 103 03 io_table bit (1) unaligned, 3 104 03 unique_path bit (1) unaligned, 3 105 03 mbz bit (30) unaligned, 3 106 02 tables aligned, 3 107 03 lesp ptr, 3 108 03 ledp ptr, 3 109 03 lelp ptr, 3 110 02 orig aligned, 3 111 03 textp ptr, 3 112 03 defnp ptr, 3 113 03 linkp ptr, 3 114 03 statp ptr, 3 115 03 symbp ptr, 3 116 03 rel_textp ptr, 3 117 03 rel_symbp ptr, 3 118 03 rel_linkp ptr, 3 119 03 textl fixed bin (18) unsigned unaligned, 3 120 03 defnl fixed bin (18) unsigned unaligned, 3 121 03 linkl fixed bin (18) unsigned unaligned, 3 122 03 statl fixed bin (18) unsigned unaligned, 3 123 03 symbl fixed bin (18) unsigned unaligned, 3 124 03 symbl_no_rel fixed bin (18) unsigned unaligned, 3 125 03 symbl_no_table fixed bin (18) unsigned unaligned, 3 126 03 n_symb_blocks fixed bin (18) unsigned unaligned, 3 127 03 text_boundary fixed bin (9) unsigned unaligned, 3 128 03 static_boundary fixed bin (9) unsigned unaligned, 3 129 03 next_comp fixed bin (18) unsigned unaligned, 3 130 02 new aligned, 3 131 03 rel_text fixed bin (18) unsigned unaligned, 3 132 03 rel_symb fixed bin (18) unsigned unaligned, 3 133 03 rel_stat fixed bin (18) unsigned unaligned, 3 134 03 text_pad fixed bin (18) unsigned unaligned, 3 135 03 static_pad fixed bin (18) unsigned unaligned, 3 136 03 symbol_pad fixed bin (18) unsigned unaligned; 3 137 3 138 /*** ****************************************************************/ 3 139 /*** */ 3 140 /*** Name: le_segnames */ 3 141 /*** Function: the segname table is used for two purposes: */ 3 142 /*** - to determine the target components of links */ 3 143 /*** being resolved internally. */ 3 144 /*** - to determine the segname definitions to be */ 3 145 /*** emited for definitions being retained. */ 3 146 /*** */ 3 147 /*** ****************************************************************/ 3 148 3 149 dcl 01 le_segnames aligned based, 3 150 02 header aligned, 3 151 03 n_segnames fixed bin, 3 152 02 segname (segname_count refer (le_segnames.n_segnames)), 3 153 03 str char (32) varying, 3 154 03 relp fixed bin (18) unsigned unaligned, 3 155 03 pad bit (18) unaligned; 3 156 dcl segname_count fixed bin automatic; 3 157 3 158 /*** ****************************************************************/ 3 159 /*** */ 3 160 /*** Name: le_definitions */ 3 161 /*** Function: the definition table contains the definitions */ 3 162 /*** from the input components and is used to resolve */ 3 163 /*** link targets, and regenerate definition entries */ 3 164 /*** */ 3 165 /*** ****************************************************************/ 3 166 3 167 dcl 01 le_definitions aligned based, 3 168 02 header aligned, 3 169 03 n_defs fixed bin, 3 170 03 pad bit (36), 3 171 02 def (def_count refer (le_definitions.n_defs)) 3 172 like le_definition; 3 173 dcl def_count fixed bin automatic; 3 174 3 175 dcl 01 le_definition aligned based, 3 176 02 str char (256) varying, 3 177 02 type fixed bin (18) unsigned unaligned, 3 178 02 relp fixed bin (18) unsigned unaligned, 3 179 02 offset fixed bin (18) unsigned unaligned, 3 180 02 new_offset fixed bin (18) unsigned unaligned, 3 181 02 flags aligned, 3 182 03 force_retain bit (1) unaligned, 3 183 03 entrypoint bit (1) unaligned, 3 184 03 ignore bit (1) unaligned, 3 185 03 referenced bit (1) unaligned, 3 186 03 no_link bit (1) unaligned, 3 187 03 retain bit (1) unaligned, 3 188 03 delete bit (1) unaligned, 3 189 03 mbz bit (29) unaligned; 3 190 3 191 /*** ****************************************************************/ 3 192 /*** */ 3 193 /*** Name: le_options */ 3 194 /*** Function: the option table contains definition retention */ 3 195 /*** information. The input retentions options are */ 3 196 /*** ordered such that a linear search of the option */ 3 197 /*** table for the first matching starname will give */ 3 198 /*** the correct retention state. */ 3 199 /*** */ 3 200 /*** ****************************************************************/ 3 201 3 202 dcl 01 le_options aligned based, 3 203 02 header aligned, 3 204 03 n_opts fixed bin, 3 205 02 opt (0 refer (le_options.n_opts)), 3 206 03 type fixed bin (8) unaligned, 3 207 03 used bit (1) unaligned, 3 208 03 inhibit_error bit (1) unaligned, 3 209 03 class fixed bin (6) unaligned, 3 210 03 order fixed bin (17) unaligned, 3 211 03 segname char (32) unaligned, 3 212 03 ep_name char (256) unaligned; 3 213 3 214 /*** ****************************************************************/ 3 215 /*** */ 3 216 /*** Name: le_links */ 3 217 /*** Function: the link table contains information on all of the */ 3 218 /*** links in the input components. It is used to */ 3 219 /*** determine link targets, which library components */ 3 220 /*** will be included, and what init_info will be */ 3 221 /*** used, and where it will be placed. */ 3 222 /*** */ 3 223 /*** ****************************************************************/ 3 224 3 225 dcl 01 le_links aligned based, 3 226 02 header aligned, 3 227 03 offset_adjustment fixed bin (18), 3 228 03 n_links fixed bin, 3 229 02 link (link_count refer (le_links.n_links)) 3 230 like le_link; 3 231 dcl link_count fixed bin automatic; 3 232 3 233 dcl 01 le_link aligned based, 3 234 02 flags unaligned, 3 235 03 used bit (1), 3 236 03 mbx bit (35), 3 237 02 type fixed bin (6) unsigned unaligned, 3 238 02 class fixed bin (6) unsigned unaligned, 3 239 02 mod bit (6) unaligned, 3 240 02 exp fixed bin (17) unaligned, 3 241 02 target fixed bin (18) unsigned unaligned, 3 242 02 defx fixed bin (18) unsigned unaligned, 3 243 02 relp fixed bin (18) unsigned unaligned, 3 244 02 target_comp fixed bin (18) unsigned unaligned, 3 245 02 target_link fixed bin (18) unsigned unaligned, 3 246 02 extension fixed bin (18) unsigned unaligned, 3 247 02 initp ptr unaligned, 3 248 02 segnamep ptr unaligned, 3 249 02 offsetp ptr unaligned; 3 250 3 251 /*** ****************************************************************/ 3 252 /*** */ 3 253 /*** Name: le_binaries */ 3 254 /*** Function: This table contains information about the output */ 3 255 /*** binaries. It is primarily used for creation and */ 3 256 /*** backpatching of MSF output. */ 3 257 /*** */ 3 258 /*** ****************************************************************/ 3 259 3 260 dcl 01 le_binaries aligned based, 3 261 02 header aligned, 3 262 03 n_binaries fixed bin, 3 263 03 pad bit (36), 3 264 02 binary (0:0 refer (le_binaries.n_binaries)), 3 265 03 segp ptr, 3 266 03 bc fixed bin (24), 3 267 03 uid bit (36), 3 268 03 aclc fixed bin, 3 269 03 aclp ptr, 3 270 03 textp ptr, 3 271 03 defnp ptr, 3 272 03 linkp ptr, 3 273 03 symbp ptr, 3 274 03 statp ptr, 3 275 03 textl fixed bin (18) unsigned unaligned, 3 276 03 defnl fixed bin (18) unsigned unaligned, 3 277 03 linkl fixed bin (18) unsigned unaligned, 3 278 03 symbl fixed bin (18) unsigned unaligned, 3 279 03 statl fixed bin (18) unsigned unaligned, 3 280 03 mbz2 bit (18) unaligned; 3 281 3 282 /*** ****************************************************************/ 3 283 /*** */ 3 284 /*** Name: le_patches */ 3 285 /*** Function: This table contains the list of backpatches to be */ 3 286 /*** performed when the rest of the object creation is */ 3 287 /*** complete. Since le_backpatch_ is the only routine */ 3 288 /*** concerned with this, it is maintained completely */ 3 289 /*** internal to le_backpatch_. */ 3 290 /*** */ 3 291 /*** ****************************************************************/ 3 292 3 293 dcl 01 le_patches aligned based, 3 294 02 header aligned, 3 295 03 n_patches fixed bin, 3 296 02 patch (0 refer (le_patches.n_patches)) like le_patch; 3 297 3 298 dcl 01 le_patch aligned based, 3 299 02 type fixed bin, 3 300 02 comp fixed bin, 3 301 02 relp fixed bin (18) unsigned, 3 302 02 target fixed bin, 3 303 02 index fixed bin; 3 304 3 305 /**** END OF: le_data.incl.pl1 * * * * * */ 575 4 1 /**** START OF: le_input.incl.pl1 * * * * * */ 4 2 4 3 /****^ HISTORY COMMENTS: 4 4* 1) change(86-08-12,Elhard), approve(86-08-12,MCR7505), 4 5* audit(86-12-10,DGHowe), install(86-12-10,MR12.0-1241): 4 6* Orignally written to define the le_ input structures. 4 7* END HISTORY COMMENTS */ 4 8 4 9 /*** ****************************************************************/ 4 10 /*** */ 4 11 /*** Name: le_input */ 4 12 /*** Function: This include file declares the input structure to */ 4 13 /*** to the le_ subroutine. The structure consists of */ 4 14 /*** a set of standard data, and a variable length */ 4 15 /*** array of options. The options have a type field */ 4 16 /*** which specified what the option means. The */ 4 17 /*** options can have the following types: */ 4 18 /*** */ 4 19 /*** PATH - specified a single input component */ 4 20 /*** to be bound in with the object */ 4 21 /*** name - is the name of the component */ 4 22 /*** path_or_ep - is the pathname to the component */ 4 23 /*** this may be an archive component */ 4 24 /*** pathname. */ 4 25 /*** flags - link is used by the le command to */ 4 26 /*** keep track of the pathnames that */ 4 27 /*** were found via links for chase */ 4 28 /*** processing. */ 4 29 /*** bc - is the bit count of the component */ 4 30 /*** optp - is a pointer to the component */ 4 31 /*** */ 4 32 /*** LIBRARY - specifies a single library */ 4 33 /*** component. Library components are */ 4 34 /*** only included if they are referred */ 4 35 /*** to by a PATH component or a library */ 4 36 /*** component that is referenced and */ 4 37 /*** therefor included. */ 4 38 /*** name - same as for PATH. */ 4 39 /*** path_or_ep - same as for PATH. */ 4 40 /*** flags - same as for PATH. */ 4 41 /*** bc - same as for PATH. */ 4 42 /*** optp - same as for PATH. */ 4 43 /*** */ 4 44 /*** ADDNAME - specifies a name to be added to the */ 4 45 /*** bound object. */ 4 46 /*** name - is the name to be added to the */ 4 47 /*** bound unit */ 4 48 /*** */ 4 49 /*** SYNONYM - specifies a synonym to be added to */ 4 50 /*** a particular component. This is */ 4 51 /*** reflected as a segname definition */ 4 52 /*** added to the block for that */ 4 53 /*** component. */ 4 54 /*** name - specifies the name of the component */ 4 55 /*** to which you are adding a name. */ 4 56 /*** path_or_ep - is the name being added */ 4 57 /*** */ 4 58 /*** RETAIN - gives a starname to be used when */ 4 59 /*** determining if a definition should */ 4 60 /*** be retained. If the definition */ 4 61 /*** matches the starname and no more */ 4 62 /*** specific info is given, the name is */ 4 63 /*** retained. */ 4 64 /*** flags - the "inhibit_error" flag indicates */ 4 65 /*** that it is not an error if this */ 4 66 /*** option is unused. */ 4 67 /*** path_or_ep - is the starname to match */ 4 68 /*** */ 4 69 /*** DELETE - gives a starname to be used when */ 4 70 /*** determining if a definition should */ 4 71 /*** be retained. If the definition */ 4 72 /*** matches the starname and no more */ 4 73 /*** specific info is given, the name is */ 4 74 /*** deleted. */ 4 75 /*** flags - the "inhibit_error" flag indicates */ 4 76 /*** that it is not an error if this */ 4 77 /*** option is unused. */ 4 78 /*** path_or_ep - is the starname to match. */ 4 79 /*** */ 4 80 /*** NO_LINK - gives a starname to be used when */ 4 81 /*** determining if a definition should */ 4 82 /*** be retained. If the definition */ 4 83 /*** matches the starname and no more */ 4 84 /*** specific info is given, the name is */ 4 85 /*** retained and references to the */ 4 86 /*** definition within the bound uni */ 4 87 /*** are not resolved but are generated */ 4 88 /*** as external links. */ 4 89 /*** flags - the "inhibit_error" flag indicates */ 4 90 /*** that it is not an error if this */ 4 91 /*** option is unused. */ 4 92 /*** path_or_ep - is the starname to match */ 4 93 /*** */ 4 94 /*** TABLE - specifies that the table for a */ 4 95 /*** particular component is to be */ 4 96 /*** retained. */ 4 97 /*** name - is the name of the component to */ 4 98 /*** which the option applies. If name */ 4 99 /*** is "", this is a global option and */ 4 100 /*** applies to all component for which */ 4 101 /*** a specific option does not exist. */ 4 102 /*** */ 4 103 /*** NO_TABLE - specifies that the table for a */ 4 104 /*** particular component is to be */ 4 105 /*** deleted. */ 4 106 /*** name - is the name of the component to */ 4 107 /*** which the option applies. If name */ 4 108 /*** is "", this is a global option and */ 4 109 /*** applies to all component for which */ 4 110 /*** a specific option does not exist. */ 4 111 /*** */ 4 112 /*** ****************************************************************/ 4 113 4 114 dcl 01 le_input aligned based, 4 115 02 header aligned, 4 116 03 version char (8), 4 117 03 name char (32), 4 118 03 flags aligned, 4 119 04 perprocess_static bit (1) unaligned, 4 120 04 force bit (1) unaligned, 4 121 04 debug bit (1) unaligned, 4 122 04 list bit (1) unaligned, 4 123 04 map bit (1) unaligned, 4 124 04 auto_segnames bit (1) unaligned, 4 125 04 mbz bit (30) unaligned, 4 126 03 output_file unaligned, 4 127 04 dir char (168), 4 128 04 entry char (32), 4 129 03 component_size fixed bin, 4 130 03 display_severity fixed bin, 4 131 03 abort_severity fixed bin, 4 132 03 bindfile aligned, 4 133 04 name char (32), 4 134 04 dt_updated fixed bin (71), 4 135 04 dt_modified fixed bin (71), 4 136 03 pad bit (36), 4 137 03 n_opts fixed bin, 4 138 02 opt dim (0 refer (le_input.n_opts)) like le_option; 4 139 4 140 dcl 01 le_option aligned based, 4 141 02 name char (32) unaligned, 4 142 02 path_or_ep char (194) unaligned, 4 143 02 flags unaligned, 4 144 03 link bit (1), 4 145 03 ignore bit (1), 4 146 03 used bit (1), 4 147 03 inhibit_error bit (1), 4 148 03 mbz bit (5), 4 149 02 type fixed bin (8) unaligned, 4 150 02 bc fixed bin (24), 4 151 02 optp ptr; 4 152 4 153 dcl le_input_version_1 char (8) static options (constant) 4 154 init ("le_ 1.0 "); 4 155 4 156 /* constants for the defined option types */ 4 157 4 158 dcl PATH fixed bin static options (constant) init (1); 4 159 dcl LIBRARY fixed bin static options (constant) init (2); 4 160 dcl ADDNAME fixed bin static options (constant) init (3); 4 161 dcl SYNONYM fixed bin static options (constant) init (4); 4 162 dcl RETAIN fixed bin static options (constant) init (5); 4 163 dcl DELETE fixed bin static options (constant) init (6); 4 164 dcl NO_LINK fixed bin static options (constant) init (7); 4 165 dcl TABLE fixed bin static options (constant) init (8); 4 166 dcl NO_TABLE fixed bin static options (constant) init (9); 4 167 4 168 /**** END OF: le_input.incl.pl1 * * * * * */ 576 5 1 /* BEGIN INCLUDE FILE ... object_info.incl.pl1 5 2*coded February 8, 1972 by Michael J. Spier */ 5 3 /* modified May 26, 1972 by M. Weaver */ 5 4 /* modified 15 April, 1975 by M. Weaver */ 5 5 5 6 declare 1 object_info aligned based, /* structure containing object info based, returned by object_info_ */ 5 7 2 version_number fixed bin, /* version number of current structure format (=2) */ 5 8 2 textp pointer, /* pointer to beginning of text section */ 5 9 2 defp pointer, /* pointer to beginning of definition section */ 5 10 2 linkp pointer, /* pointer to beginning of linkage section */ 5 11 2 statp pointer, /* pointer to beginning of static section */ 5 12 2 symbp pointer, /* pointer to beginning of symbol section */ 5 13 2 bmapp pointer, /* pointer to beginning of break map (may be null) */ 5 14 2 tlng fixed bin, /* length in words of text section */ 5 15 2 dlng fixed bin, /* length in words of definition section */ 5 16 2 llng fixed bin, /* length in words of linkage section */ 5 17 2 ilng fixed bin, /* length in words of static section */ 5 18 2 slng fixed bin, /* length in words of symbol section */ 5 19 2 blng fixed bin, /* length in words of break map */ 5 20 2 format, /* word containing bit flags about object type */ 5 21 3 old_format bit(1) unaligned, /* on if segment isn't in new format, i.e. has old style object map */ 5 22 3 bound bit(1) unaligned, /* on if segment is bound */ 5 23 3 relocatable bit(1) unaligned, /* on if seg has relocation info in its first symbol block */ 5 24 3 procedure bit(1) unaligned, /* on if segment is an executable object program */ 5 25 3 standard bit(1) unaligned, /* on if seg is in standard format (more than just standard map) */ 5 26 3 gate bit(1) unaligned, /* on if segment is a gate */ 5 27 3 separate_static bit(1) unaligned, /* on if static not in linkage */ 5 28 3 links_in_text bit(1) unaligned, /* on if there are threaded links in text */ 5 29 3 perprocess_static bit (1) unaligned, /* on if static is not to be per run unit */ 5 30 3 pad bit(27) unaligned, 5 31 2 entry_bound fixed bin, /* entry bound if segment is a gate */ 5 32 2 textlinkp pointer, /* ptr to first link in text */ 5 33 5 34 /* LIMIT OF BRIEF STRUCTURE */ 5 35 5 36 2 compiler char(8) aligned, /* name of processor which generated segment */ 5 37 2 compile_time fixed bin(71), /* clock reading of date/time object was generated */ 5 38 2 userid char(32) aligned, /* standard Multics id of creator of object segment */ 5 39 2 cvers aligned, /* generator version name in printable char string form */ 5 40 3 offset bit(18) unaligned, /* offset of name in words relative to base of symbol section */ 5 41 3 length bit(18) unaligned, /* length of name in characters */ 5 42 2 comment aligned, /* printable comment concerning generator or generation of segment */ 5 43 3 offset bit(18) unaligned, /* offset of comment in words relative to base of symbol section */ 5 44 3 length bit(18) unaligned, /* length of comment in characters */ 5 45 2 source_map fixed bin, /* offset, relative to base of symbol section, of source map structure */ 5 46 5 47 /* LIMIT OF DISPLAY STRUCTURE */ 5 48 5 49 2 rel_text pointer, /* pointer to text section relocation info */ 5 50 2 rel_def pointer, /* pointer to definition section relocation info */ 5 51 2 rel_link pointer, /* pointer to linkage section relocation info */ 5 52 2 rel_static pointer, /* pointer to static section relocation info */ 5 53 2 rel_symbol pointer, /* pointer to symbol section relocation info */ 5 54 2 text_boundary fixed bin, /* specifies mod of text section base boundary */ 5 55 2 static_boundary fixed bin, /* specifies mod of internal static base boundary */ 5 56 /* currently not used by system */ 5 57 2 default_truncate fixed bin, /* offset rel to symbp for binder to automatically trunc. symb sect. */ 5 58 2 optional_truncate fixed bin; /* offset rel to symbp for binder to optionally trunc. symb sect. */ 5 59 5 60 declare object_info_version_2 fixed bin int static init(2); 5 61 5 62 /* END INCLUDE FILE ... object_info.incl.pl1 */ 577 6 1 /* START OF: ocu_dcls.incl.pl1 * * * * * */ 6 2 6 3 /****^ HISTORY COMMENTS: 6 4* 1) change(86-08-12,Elhard), approve(86-08-12,MCR7505), 6 5* audit(86-12-10,DGHowe), install(86-12-10,MR12.0-1241): 6 6* Originally written to define the subroutines and data structures used by 6 7* callers of ocu_. 6 8* END HISTORY COMMENTS */ 6 9 6 10 /*** ****************************************************************/ 6 11 /*** */ 6 12 /*** Name: ocu_dcls */ 6 13 /*** Function: These are the entrypoints and structures required */ 6 14 /*** to use the ocu_ object creation utilities. */ 6 15 /*** */ 6 16 /*** ****************************************************************/ 6 17 6 18 /* open option flags */ 6 19 6 20 dcl OPEN_FLAGS_BOUND bit (6) static options (constant) 6 21 init ("100000"b); 6 22 dcl OPEN_FLAGS_RELOCATABLE bit (6) static options (constant) 6 23 init ("010000"b); 6 24 dcl OPEN_FLAGS_PROCEDURE bit (6) static options (constant) 6 25 init ("001000"b); 6 26 dcl OPEN_FLAGS_SEPARATE_STATIC 6 27 bit (6) static options (constant) 6 28 init ("000100"b); 6 29 dcl OPEN_FLAGS_PERPROCESS_STATIC 6 30 bit (6) static options (constant) 6 31 init ("000010"b); 6 32 dcl OPEN_FLAGS_NO_HASHTABLE bit (6) static options (constant) 6 33 init ("000001"b); 6 34 6 35 /* definition flags */ 6 36 6 37 dcl DEFINITION_FLAGS_IGNORE bit (4) static options (constant) init ("1000"b); 6 38 dcl DEFINITION_FLAGS_ENTRY bit (4) static options (constant) init ("0100"b); 6 39 dcl DEFINITION_FLAGS_RETAIN bit (4) static options (constant) init ("0010"b); 6 40 dcl DEFINITION_FLAGS_INDIRECT 6 41 bit (4) static options (constant) init ("0001"b); 6 42 6 43 /* input structures */ 6 44 6 45 dcl word_arrayp ptr; 6 46 dcl word_arrayl fixed bin (18) unsigned; 6 47 6 48 dcl word_array(word_arrayl) bit (36) based (word_arrayp); 6 49 6 50 dcl reloc_strp ptr; 6 51 dcl reloc_strl fixed bin (21); 6 52 6 53 dcl reloc_str char (reloc_strl) based (reloc_strp); 6 54 6 55 dcl component_listp ptr; 6 56 dcl component_count fixed bin (15) unsigned; 6 57 6 58 dcl component_list (1:component_count) 6 59 ptr based (component_listp); 6 60 6 61 dcl 01 gen_info aligned based, 6 62 02 gen_created fixed bin (71), 6 63 02 generator char (8), 6 64 02 gen_number fixed bin, 6 65 02 gen_version char (512) varying; 6 66 6 67 /* entrypoint declarations */ 6 68 6 69 dcl ocu_$open /* setup to create an object */ 6 70 entry (char(*), /* directory name (in ) */ 6 71 char(*), /* entry name (in ) */ 6 72 bit(*), /* option flags (in ) */ 6 73 ptr, /* ocu_data pointer (out) */ 6 74 fixed bin(35)); /* error code (out) */ 6 75 6 76 dcl ocu_$close /* create the object segment */ 6 77 entry (ptr, /* ocu_data pointer (in ) */ 6 78 fixed bin(35)); /* error code (out) */ 6 79 6 80 dcl ocu_$release /* release storage on cleanup */ 6 81 entry (ptr); /* ocu_data pointer (in ) */ 6 82 6 83 dcl ocu_$emit_text /* emit a block of text words */ 6 84 entry (ptr, /* ocu_data pointer (in ) */ 6 85 ptr, /* word array pointer (in ) */ 6 86 ptr, /* reloc string pointer (in ) */ 6 87 fixed bin (18) uns) /* word count (in ) */ 6 88 returns(fixed bin (18) uns); /* text relp (out) */ 6 89 6 90 dcl ocu_$emit_definition /* emit a single definition entry */ 6 91 entry (ptr, /* ocu_data pointer (in ) */ 6 92 char(*) var, /* definition name (in ) */ 6 93 fixed bin (3), /* target section (in ) */ 6 94 fixed bin (18) uns, /* offset in section (in ) */ 6 95 bit(*)) /* definition flags (in ) */ 6 96 returns(fixed bin (18) uns); /* definition relp (out) */ 6 97 6 98 dcl ocu_$emit_segname /* emit a single segname definition */ 6 99 entry (ptr, /* ocu_data pointer (in ) */ 6 100 char(*) var, /* segname (in ) */ 6 101 bit(*)) /* definition flags (in ) */ 6 102 returns(fixed bin (18) uns); /* definition relp (out) */ 6 103 6 104 dcl ocu_$emit_msf_map /* emit an msf map (MSF components) */ 6 105 entry (ptr, /* ocu_data pointer (in ) */ 6 106 fixed bin (15) uns, /* component count (in ) */ 6 107 fixed bin (15) uns); /* my component (in ) */ 6 108 6 109 dcl ocu_$emit_static /* emit a block of static words */ 6 110 entry (ptr, /* ocu_data pointer (in ) */ 6 111 ptr, /* word array pointer (in ) */ 6 112 fixed bin (18) uns) /* word count (in ) */ 6 113 returns(fixed bin (18) uns); /* static relp (out) */ 6 114 6 115 dcl ocu_$emit_link /* emit a single external link */ 6 116 entry (ptr, /* ocu_data pointer (in ) */ 6 117 fixed bin (3), /* link type (in ) */ 6 118 fixed bin (3), /* link class (in ) */ 6 119 char(*) var, /* target refname (in ) */ 6 120 char(*) var, /* target definition (in ) */ 6 121 fixed bin, /* expression offset (in ) */ 6 122 bit(6), /* link modifier (in ) */ 6 123 ptr) /* init info pointer (in ) */ 6 124 returns(fixed bin (18) uns); /* link relp (out) */ 6 125 6 126 dcl ocu_$emit_partial_link /* emit a single partial link */ 6 127 entry (ptr, /* ocu_data pointer (in ) */ 6 128 fixed bin (15) uns, /* target component (in ) */ 6 129 fixed bin (3), /* target section (in ) */ 6 130 fixed bin (18) uns, /* offset in section (in ) */ 6 131 bit(6)) /* link modifier (in ) */ 6 132 returns(fixed bin (18) uns); /* link relp (out) */ 6 133 6 134 dcl ocu_$emit_firstref_trap /* add a trap to the firstref block */ 6 135 entry (ptr, /* ocu_data pointer (in ) */ 6 136 fixed bin (18) uns, /* call relp (in ) */ 6 137 fixed bin (18) uns); /* info relp (in ) */ 6 138 6 139 dcl ocu_$emit_symbol /* emit a block of symbol words */ 6 140 entry (ptr, /* ocu_data pointer (in ) */ 6 141 ptr, /* word array pointer (in ) */ 6 142 ptr, /* reloc string pointer (in ) */ 6 143 fixed bin (18) uns) /* word count (in ) */ 6 144 returns(fixed bin (18) uns); /* symbol relp (out) */ 6 145 6 146 dcl ocu_$backpatch /* patch a word in the text/symbol scn */ 6 147 entry (ptr, /* ocu_data pointer (in ) */ 6 148 char(*), /* section (in ) */ 6 149 fixed bin (18) uns, /* offset in section (in ) */ 6 150 char(*), /* side and size (in ) */ 6 151 fixed bin (35)); /* new value to patch (in ) */ 6 152 6 153 dcl ocu_$create_msf /* create component 0 of the MSF */ 6 154 entry (ptr, /* component array ptr (in ) */ 6 155 fixed bin (15) uns, /* component count (in ) */ 6 156 ptr, /* generator info ptr (in ) */ 6 157 fixed bin(35)); /* error code (out) */ 6 158 6 159 /* END OF: ocu_dcls.incl.pl1 * * * * * */ 578 7 1 dcl 1 std_symbol_header based aligned, 7 2 2 dcl_version fixed bin, 7 3 2 identifier char(8), 7 4 2 gen_number fixed bin, 7 5 2 gen_created fixed bin(71), 7 6 2 object_created fixed bin(71), 7 7 2 generator char(8), 7 8 2 gen_version unaligned, 7 9 3 offset bit(18), 7 10 3 size bit(18), 7 11 2 userid unaligned, 7 12 3 offset bit(18), 7 13 3 size bit(18), 7 14 2 comment unaligned, 7 15 3 offset bit(18), 7 16 3 size bit(18), 7 17 2 text_boundary bit(18) unaligned, 7 18 2 stat_boundary bit(18) unaligned, 7 19 2 source_map bit(18) unaligned, 7 20 2 area_pointer bit(18) unaligned, 7 21 2 backpointer bit(18) unaligned, 7 22 2 block_size bit(18) unaligned, 7 23 2 next_block bit(18) unaligned, 7 24 2 rel_text bit(18) unaligned, 7 25 2 rel_def bit(18) unaligned, 7 26 2 rel_link bit(18) unaligned, 7 27 2 rel_symbol bit(18) unaligned, 7 28 2 mini_truncate bit(18) unaligned, 7 29 2 maxi_truncate bit(18) unaligned; 579 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 */ 580 581 582 end le_make_component_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 12/10/86 1251.8 le_make_component_.pl1 >special_ldd>install>MR12.0-1241>le_make_component_.pl1 573 1 04/11/85 1452.6 access_mode_values.incl.pl1 >ldd>include>access_mode_values.incl.pl1 574 2 09/18/74 1700.9 bind_map.incl.pl1 >ldd>include>bind_map.incl.pl1 575 3 12/10/86 1248.4 le_data.incl.pl1 >special_ldd>install>MR12.0-1241>le_data.incl.pl1 576 4 12/10/86 1248.7 le_input.incl.pl1 >special_ldd>install>MR12.0-1241>le_input.incl.pl1 577 5 08/05/77 1022.5 object_info.incl.pl1 >ldd>include>object_info.incl.pl1 578 6 12/10/86 1248.0 ocu_dcls.incl.pl1 >special_ldd>install>MR12.0-1241>ocu_dcls.incl.pl1 579 7 05/06/74 1751.6 std_symbol_header.incl.pl1 >ldd>include>std_symbol_header.incl.pl1 580 8 11/26/79 1320.6 source_map.incl.pl1 >ldd>include>source_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. Area_ptr_offset 000002 constant fixed bin(18,0) initial unsigned dcl 48 set ref 527* Backpointer_offset constant fixed bin(18,0) initial unsigned dcl 40 ref 349 Block_length_offset constant fixed bin(18,0) initial unsigned dcl 42 ref 355 LE_ABORT_ERROR 000032 constant fixed bin(17,0) initial dcl 3-22 set ref 225* 537* Next_block_offset constant fixed bin(18,0) initial unsigned dcl 44 ref 361 None constant fixed bin(17,0) initial dcl 50 ref 231 233 OPEN_FLAGS_BOUND constant bit(6) initial unaligned dcl 6-20 ref 204 OPEN_FLAGS_NO_HASHTABLE constant bit(6) initial unaligned dcl 6-32 ref 209 OPEN_FLAGS_PERPROCESS_STATIC constant bit(6) initial unaligned dcl 6-29 ref 207 OPEN_FLAGS_PROCEDURE constant bit(6) initial unaligned dcl 6-24 ref 204 OPEN_FLAGS_SEPARATE_STATIC constant bit(6) initial unaligned dcl 6-26 ref 205 R_ACCESS 000000 constant bit(3) initial unaligned dcl 1-11 set ref 544* Source_map_offset 000002 constant fixed bin(18,0) initial unsigned dcl 46 set ref 433* Symbol 000034 constant fixed bin(3,0) initial dcl 3-30 set ref 246* 247* Userid_offset 000001 constant fixed bin(18,0) initial unsigned dcl 38 set ref 296* 298* Version_offset 000030 constant fixed bin(18,0) initial unsigned dcl 36 set ref 283* 285* addr builtin function dcl 168 ref 266 271 271 279 279 292 292 316 343 375 392 409 409 416 423 423 452 467 467 498 498 512 515 515 551 551 addrel builtin function dcl 169 ref 266 bc 4 based fixed bin(24,0) array level 3 dcl 102 set ref 544* 551* bd_map based structure level 1 dcl 90 set ref 198 447 518 530 bd_mapp 000100 automatic pointer dcl 126 set ref 190* 198 198 447* 449 469 470 471 472 473 474 475 476 477 479 481 490 491 499 500 506 508 518 523* 530 532* bf_date_mod based char(24) level 2 dcl 90 set ref 508* bf_date_up based char(24) level 2 dcl 90 set ref 506* bf_name based structure level 2 in structure "bd_map" dcl 90 in procedure "le_make_component_" bf_name based structure level 2 in structure "bindmap" dcl 2-4 in procedure "le_make_component_" bf_name_lng based bit(18) level 3 packed unaligned dcl 90 set ref 491* 500* bf_name_ptr based bit(18) level 3 packed unaligned dcl 90 set ref 490* 499* bin builtin function dcl 170 ref 410 411 469 470 472 473 474 475 476 477 479 481 499 500 binary 2 based structure array level 2 in structure "le_binaries" dcl 3-260 in procedure "le_make_component_" binary 2 based structure array level 2 in structure "leb" dcl 102 in procedure "le_make_component_" bindfile 100 based structure level 3 dcl 109 bindmap based structure level 1 dcl 2-4 bit builtin function dcl 171 ref 410 411 469 470 472 473 474 475 476 477 479 481 499 500 bx 000102 automatic fixed bin(17,0) dcl 128 set ref 543* 544 544 551 551 553 554 555 556 557 558 559 560 561 562 564 564 c 000103 automatic fixed bin(17,0) dcl 129 set ref 233* 234 234* 315* 316 326* 327* 328* 329* 330* 342* 343* 374* 375* 391* 392* 451* 452* char builtin function dcl 172 ref 217 cleanup 002500 stack reference condition dcl 164 ref 192 clock builtin function dcl 173 ref 257 cname 000104 automatic char(32) unaligned dcl 130 set ref 217* 218 220* 224* 225* 225* 544* comp based structure level 1 dcl 98 in procedure "le_make_component_" comp 2 based structure array level 2 in structure "lec" dcl 106 in procedure "le_make_component_" set ref 316 343 375 392 452 comp_count 000114 automatic fixed bin(17,0) dcl 131 set ref 313* 334* 334 374 447 447 451 comp_name 3 based char(8) array level 3 dcl 90 set ref 471* compiler 101 based char(8) level 2 dcl 98 ref 471 component 2 based structure array level 2 in structure "bd_map" dcl 90 in procedure "le_make_component_" component 2 based structure array level 2 in structure "bindmap" dcl 2-4 in procedure "le_make_component_" compp 000116 automatic pointer dcl 132 set ref 316* 321 321 343* 344 344 349 349 355 355 361 364 375* 376 376 379 392* 393 393 393 400 401 405 452* 453 463 471 472 473 474 475 476 477 478 481 compx parameter fixed bin(17,0) dcl 54 ref 16 217 234 240 321 344 376 393 453 copy builtin function dcl 174 ref 267 278 291 408 430 466 497 519 currentsize builtin function dcl 175 ref 429 518 date_str 000120 automatic char(24) unaligned dcl 133 set ref 505* 506 507* 508 date_time_ 000010 constant entry external dcl 64 ref 505 507 dcl_version 002324 automatic fixed bin(17,0) level 2 in structure "sb_hdr" dcl 153 in procedure "le_make_component_" set ref 253* dcl_version based fixed bin(17,0) level 2 in structure "bd_map" dcl 90 in procedure "le_make_component_" set ref 449* defblock_ptr 10 based bit(18) array level 3 packed unaligned dcl 90 set ref 479* defnl 24(18) based fixed bin(18,0) array level 3 packed unsigned unaligned dcl 102 set ref 559* defnp 14 based pointer array level 3 dcl 102 set ref 554* defp 4 000152 automatic pointer level 2 dcl 144 set ref 554 divide builtin function dcl 176 ref 277 290 407 465 496 dlng 17 000152 automatic fixed bin(17,0) level 2 dcl 144 set ref 559 dname parameter char unaligned dcl 55 set ref 16 224* 225* 225* 537* 537* 544* dt_modified 112 based fixed bin(71,0) level 4 dcl 109 set ref 507* dt_updated 110 based fixed bin(71,0) level 4 dcl 109 set ref 505* dtcm 4 based fixed bin(71,0) level 2 dcl 98 ref 401 dtm 4 based fixed bin(71,0) array level 3 dcl 116 set ref 401* dummy 000126 automatic fixed bin(18,0) unsigned dcl 134 set ref 245* 246* 247* 271* 279* 283 292* 296 ec 000127 automatic fixed bin(35,0) dcl 135 set ref 224* 225 225* 536* 537 537* 551* 564* ename parameter char unaligned dcl 56 set ref 16 218 220 537* 537* end_overlay based structure level 1 dcl 99 end_relp 000130 automatic fixed bin(18,0) unsigned dcl 136 set ref 412* 416 423* 436* 468* 512 515* flags 104 based structure level 2 in structure "comp" dcl 98 in procedure "le_make_component_" flags based structure level 3 in structure "lec" dcl 106 in procedure "le_make_component_" gen_created 4 002324 automatic fixed bin(71,0) level 2 dcl 153 set ref 256* gen_number 3 002324 automatic fixed bin(17,0) level 2 dcl 153 set ref 255* generator 10 002324 automatic char(8) level 2 dcl 153 set ref 258* get_system_free_area_ 000012 constant entry external dcl 65 ref 184 hcs_$get_uid_seg 000014 constant entry external dcl 66 ref 564 header based structure level 2 in structure "le_segnames" dcl 3-149 in procedure "le_make_component_" header based structure level 2 in structure "le_components" dcl 3-72 in procedure "le_make_component_" header based structure level 2 in structure "leb" dcl 102 in procedure "le_make_component_" header based structure level 2 in structure "lei" dcl 109 in procedure "le_make_component_" header based structure level 2 in structure "lec" dcl 106 in procedure "le_make_component_" header based structure level 2 in structure "le_input" dcl 4-114 in procedure "le_make_component_" header based structure level 2 in structure "le_binaries" dcl 3-260 in procedure "le_make_component_" i 000131 automatic fixed bin(17,0) dcl 137 set ref 370* 374 378* 378 390* 391 399* 399 400 401 410 411 445* 451 459* 459 469 470 471 472 473 474 475 476 477 479 481 identifier 1 002324 automatic char(8) level 2 dcl 153 set ref 254* ilng 21 000152 automatic fixed bin(17,0) level 2 dcl 144 set ref 562 include 104(01) based bit(1) level 3 packed unaligned dcl 98 ref 321 344 376 393 initiate_file_ 000016 constant entry external dcl 67 ref 544 le_binaries based structure level 1 dcl 3-260 le_comp based structure level 1 dcl 3-89 le_components based structure level 1 dcl 3-72 le_data_$caller 000042 external static varying char(32) dcl 83 ref 258 le_data_$symbol_table 000046 external static structure level 1 dcl 85 le_data_$version_number 000044 external static fixed bin(17,0) dcl 84 ref 255 le_definition based structure level 1 dcl 3-175 le_emit_defs_ 000020 constant entry external dcl 69 ref 326 le_emit_firstref_ 000022 constant entry external dcl 70 ref 330 le_emit_static_ 000024 constant entry external dcl 71 ref 328 le_emit_symbol_ 000026 constant entry external dcl 72 ref 329 le_emit_text_ 000030 constant entry external dcl 73 ref 327 le_error_ 000032 constant entry external dcl 74 ref 225 537 le_input based structure level 1 dcl 4-114 le_link based structure level 1 dcl 3-233 le_option based structure level 1 dcl 4-140 le_patch based structure level 1 dcl 3-298 le_segnames based structure level 1 dcl 3-149 le_util_$get_user_and_version 000034 constant entry external dcl 75 ref 273 leb based structure level 1 dcl 102 lebp parameter pointer dcl 57 ref 16 543 543 544 544 551 551 553 554 555 556 557 558 559 560 561 562 564 564 lec based structure level 1 dcl 106 lecp parameter pointer dcl 58 set ref 16 205 207 233 234 259 315 316 326* 327* 328* 329* 330* 342 343 374 375 391 392 451 452 lei based structure level 1 dcl 109 leip parameter pointer dcl 59 ref 16 488 494 505 507 length builtin function dcl 177 ref 277 285 285 290 298 298 406 464 495 les based structure level 1 dcl 112 lesp 106 based pointer level 3 in structure "comp" dcl 98 in procedure "le_make_component_" ref 478 lesp 000132 automatic pointer dcl 138 in procedure "le_make_component_" set ref 478* 479 linkl 25 based fixed bin(18,0) array level 3 packed unsigned unaligned dcl 102 set ref 560* linkp 16 based pointer array level 3 in structure "leb" dcl 102 in procedure "le_make_component_" set ref 555* linkp 6 000152 automatic pointer level 2 in structure "oi" dcl 144 in procedure "le_make_component_" set ref 555 llng 20 000152 automatic fixed bin(17,0) level 2 dcl 144 set ref 560 ltrim builtin function dcl 178 ref 217 map 2 based structure array level 2 in structure "source_map" dcl 8-3 in procedure "le_make_component_" map 2 based structure array level 2 in structure "sc_map" dcl 116 in procedure "le_make_component_" n_binaries based fixed bin(17,0) level 3 dcl 102 set ref 543 543* n_blocks 10(18) based bit(18) array level 3 packed unaligned dcl 90 set ref 481* n_comp parameter fixed bin(17,0) dcl 60 ref 16 209 215 240 240 n_components 1 based fixed bin(17,0) level 2 in structure "bd_map" dcl 90 in procedure "le_make_component_" set ref 198 447* 490 491 499 500 506 508 518 530 n_components 1 based fixed bin(17,0) level 3 in structure "lec" dcl 106 in procedure "le_make_component_" ref 233 315 342 374 391 451 n_symb_blocks 137(18) based fixed bin(18,0) level 3 packed unsigned unaligned dcl 98 ref 481 n_words 000135 automatic fixed bin(18,0) unsigned dcl 140 set ref 265* 267 271* 277* 278 279* 290* 291 292* 407* 408 409* 412 429* 430 432* 436 465* 466 467* 468 496* 497 498* 518* 519 523* name 6 based varying char(32) level 2 in structure "comp" dcl 98 in procedure "le_make_component_" ref 463 name 100 based char(32) level 4 in structure "lei" dcl 109 in procedure "le_make_component_" ref 488 494 name 2 based structure array level 3 in structure "bd_map" dcl 90 in procedure "le_make_component_" name_lng 2(18) based bit(18) array level 4 packed unaligned dcl 90 set ref 470* name_ptr 2 based bit(18) array level 4 packed unaligned dcl 90 set ref 469* new 141 based structure level 2 dcl 98 nm 000136 automatic char(32) unaligned dcl 141 set ref 463* 464 467 467 494* 495 498 498 nml 000146 automatic fixed bin(18,0) unsigned dcl 142 set ref 464* 465 470 495* 496 500 null builtin function dcl 179 ref 188 189 190 194 196 198 441 532 number 1 based fixed bin(17,0) level 2 dcl 116 set ref 196 386* 429 440 object_created 6 002324 automatic fixed bin(71,0) level 2 in structure "sb_hdr" dcl 153 in procedure "le_make_component_" set ref 257* object_created 6 000046 external static fixed bin(71,0) level 2 in structure "le_data_$symbol_table" dcl 85 in procedure "le_make_component_" ref 256 object_info based structure level 1 dcl 5-6 object_info_$brief 000036 constant entry external dcl 77 ref 551 object_info_version_2 constant fixed bin(17,0) initial dcl 5-60 ref 549 ocu_$backpatch 000066 constant entry external dcl 6-146 ref 283 285 296 298 349 355 361 433 527 ocu_$close 000052 constant entry external dcl 6-76 ref 536 ocu_$emit_definition 000056 constant entry external dcl 6-90 ref 246 247 ocu_$emit_msf_map 000062 constant entry external dcl 6-104 ref 240 ocu_$emit_segname 000060 constant entry external dcl 6-98 ref 245 ocu_$emit_symbol 000064 constant entry external dcl 6-139 ref 271 279 292 409 423 432 467 498 515 523 ocu_$open 000050 constant entry external dcl 6-69 ref 224 ocu_$release 000054 constant entry external dcl 6-80 ref 194 ocudp 000150 automatic pointer dcl 143 set ref 188* 194 194* 224* 240* 245* 246* 247* 271* 279* 283* 285* 292* 296* 298* 326* 327* 328* 329* 330* 349* 355* 361* 409* 423* 432* 433* 467* 498* 515* 523* 527* 536* odd 0(35) based bit(1) level 2 packed unaligned dcl 99 ref 416 512 offset 2 based bit(18) array level 4 packed unaligned dcl 116 set ref 410* oi 000152 automatic structure level 1 dcl 144 set ref 551 551 open_flags 000240 automatic bit(6) unaligned dcl 145 set ref 204* 205* 205 207* 207 209* 209 224* orig 114 based structure level 2 in structure "comp" dcl 98 in procedure "le_make_component_" orig 116 based structure array level 3 in structure "lec" dcl 106 in procedure "le_make_component_" pad_word 000241 automatic bit(36) dcl 146 set ref 421* 423 423 515 515 path 17 based varying char(194) level 2 dcl 98 ref 405 pathname 2 based structure array level 3 packed unaligned dcl 116 pathname_ 000040 constant entry external dcl 79 ref 225 225 537 537 perprocess_static 0(01) based bit(1) level 4 packed unaligned dcl 106 ref 207 pn 000242 automatic char(168) unaligned dcl 147 set ref 405* 406 409 409 pnl 000314 automatic fixed bin(17,0) dcl 148 set ref 406* 407 411 prev_start 000315 automatic fixed bin(18,0) unsigned dcl 149 set ref 340* 361 361 364* rel_stat 142 based fixed bin(18,0) level 3 packed unsigned unaligned dcl 98 ref 474 rel_str 000316 automatic varying char(4096) dcl 150 set ref 266 267* 278* 291* 408* 422* 430* 466* 497* 514* 519* rel_strp 002320 automatic pointer dcl 151 set ref 266* 271* 279* 292* 409* 423* 432* 467* 498* 515* 523* rel_symb 141(18) based fixed bin(18,0) level 3 packed unsigned unaligned dcl 98 ref 349 349 355 361 364 476 rel_text 141 based fixed bin(18,0) level 3 packed unsigned unaligned dcl 98 ref 472 relp 002322 automatic fixed bin(18,0) unsigned dcl 152 in procedure "le_make_component_" set ref 409* 410 412 432* 433 436 467* 468 469 498* 499 523* 527 relp 12 based fixed bin(18,0) array level 3 in structure "les" packed unsigned unaligned dcl 112 in procedure "le_make_component_" ref 479 rtrim builtin function dcl 180 ref 218 218 220 277 285 285 290 298 298 406 464 495 sb_hdr 002324 automatic structure level 1 dcl 153 set ref 251* 265 271 271 sbp 002350 automatic pointer dcl 154 set ref 259* 260 261 sc_map based structure level 1 dcl 116 set ref 196 386 429 440 sc_mapp 002352 automatic pointer dcl 155 set ref 189* 196 196 386* 388 400 401 410 411 429 432* 440 441* segname 1 based structure array level 2 in structure "le_segnames" dcl 3-149 in procedure "le_make_component_" segname 002354 automatic varying char(32) dcl 156 in procedure "le_make_component_" set ref 218* 220* 245* segname 1 based structure array level 2 in structure "les" dcl 112 in procedure "le_make_component_" segp 2 based pointer array level 3 dcl 102 set ref 544* 551* 564* separate_static based bit(1) level 4 packed unaligned dcl 106 ref 205 size 2(18) based bit(18) array level 4 in structure "sc_map" packed unaligned dcl 116 in procedure "le_make_component_" set ref 411* size builtin function dcl 181 in procedure "le_make_component_" ref 265 slng 22 000152 automatic fixed bin(17,0) level 2 dcl 144 set ref 561 source_count 000134 automatic fixed bin(17,0) dcl 139 set ref 370* 379* 379 386 386 391 source_map based structure level 1 dcl 8-3 start 002365 automatic fixed bin(17,0) dcl 157 set ref 231* 233 234* 259 315 342 374 391 451 stat_boundary 15(18) 002324 automatic bit(18) level 2 in structure "sb_hdr" packed unaligned dcl 153 in procedure "le_make_component_" set ref 261* stat_boundary 15(18) based bit(18) level 2 in structure "std_sb_hdr" packed unaligned dcl 121 in procedure "le_make_component_" ref 261 stat_lng 6(18) based bit(18) array level 3 packed unaligned dcl 90 set ref 475* stat_start 6 based bit(18) array level 3 packed unaligned dcl 90 set ref 474* statl 135(18) based fixed bin(18,0) level 3 in structure "comp" packed unsigned unaligned dcl 98 in procedure "le_make_component_" ref 475 statl 26 based fixed bin(18,0) array level 3 in structure "leb" packed unsigned unaligned dcl 102 in procedure "le_make_component_" set ref 562* statp 10 000152 automatic pointer level 2 in structure "oi" dcl 144 in procedure "le_make_component_" set ref 557 statp 22 based pointer array level 3 in structure "leb" dcl 102 in procedure "le_make_component_" set ref 557* std_sb_hdr based structure level 1 dcl 121 std_symbol_header based structure level 1 dcl 7-1 symb_lng 7(18) based bit(18) array level 3 packed unaligned dcl 90 set ref 477* symb_start 7 based bit(18) array level 3 packed unaligned dcl 90 set ref 476* symbl 136 based fixed bin(18,0) level 3 in structure "comp" packed unsigned unaligned dcl 98 in procedure "le_make_component_" ref 355 477 symbl 25(18) based fixed bin(18,0) array level 3 in structure "leb" packed unsigned unaligned dcl 102 in procedure "le_make_component_" set ref 561* symbp 126 based pointer array level 4 in structure "lec" dcl 106 in procedure "le_make_component_" set ref 259 symbp 12 000152 automatic pointer level 2 in structure "oi" dcl 144 in procedure "le_make_component_" set ref 556 symbp 20 based pointer array level 3 in structure "leb" dcl 102 in procedure "le_make_component_" set ref 556* sys_area based area(1024) dcl 122 ref 196 198 386 440 447 530 sys_areap 002366 automatic pointer dcl 158 set ref 184* 196 198 386 440 447 530 tables 106 based structure level 2 dcl 98 target 105 based fixed bin(17,0) array level 3 in structure "lec" dcl 106 in procedure "le_make_component_" set ref 234 target 103 based fixed bin(17,0) level 2 in structure "comp" dcl 98 in procedure "le_make_component_" ref 321 344 376 393 453 text_boundary 15 002324 automatic bit(18) level 2 in structure "sb_hdr" packed unaligned dcl 153 in procedure "le_make_component_" set ref 260* text_boundary 15 based bit(18) level 2 in structure "std_sb_hdr" packed unaligned dcl 121 in procedure "le_make_component_" ref 260 text_lng 5(18) based bit(18) array level 3 packed unaligned dcl 90 set ref 473* text_start 5 based bit(18) array level 3 packed unaligned dcl 90 set ref 472* textl 134 based fixed bin(18,0) level 3 in structure "comp" packed unsigned unaligned dcl 98 in procedure "le_make_component_" ref 473 textl 24 based fixed bin(18,0) array level 3 in structure "leb" packed unsigned unaligned dcl 102 in procedure "le_make_component_" set ref 558* textp 2 000152 automatic pointer level 2 in structure "oi" dcl 144 in procedure "le_make_component_" set ref 553 textp 12 based pointer array level 3 in structure "leb" dcl 102 in procedure "le_make_component_" set ref 553* tlng 16 000152 automatic fixed bin(17,0) level 2 dcl 144 set ref 558 uid 3 based bit(36) array level 3 in structure "sc_map" dcl 116 in procedure "le_make_component_" set ref 400* uid 3 based bit(36) level 2 in structure "comp" dcl 98 in procedure "le_make_component_" ref 400 uid 5 based bit(36) array level 3 in structure "leb" dcl 102 in procedure "le_make_component_" set ref 564* unique_path 104(05) based bit(1) level 3 packed unaligned dcl 98 ref 379 393 unspec builtin function dcl 182 set ref 251* userid 002370 automatic char(32) unaligned dcl 159 set ref 273* 290 292 292 298 298 version 002400 automatic char(256) unaligned dcl 160 in procedure "le_make_component_" set ref 273* 277 279 279 285 285 version based fixed bin(17,0) level 2 in structure "sc_map" dcl 116 in procedure "le_make_component_" set ref 388* version_number 000152 automatic fixed bin(17,0) level 2 dcl 144 set ref 549* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ADDNAME internal static fixed bin(17,0) initial dcl 4-160 A_ACCESS internal static bit(3) initial unaligned dcl 1-11 A_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 DEFINITION_FLAGS_ENTRY internal static bit(4) initial unaligned dcl 6-38 DEFINITION_FLAGS_IGNORE internal static bit(4) initial unaligned dcl 6-37 DEFINITION_FLAGS_INDIRECT internal static bit(4) initial unaligned dcl 6-40 DEFINITION_FLAGS_RETAIN internal static bit(4) initial unaligned dcl 6-39 DELETE internal static fixed bin(17,0) initial dcl 4-163 DIR_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 1-33 Definition internal static fixed bin(3,0) initial dcl 3-32 E_ACCESS internal static bit(3) initial unaligned dcl 1-11 E_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 Heap internal static fixed bin(3,0) initial dcl 3-38 LE_ERROR internal static fixed bin(17,0) initial dcl 3-20 LE_FATAL_ERROR internal static fixed bin(17,0) initial dcl 3-21 LE_WARNING internal static fixed bin(17,0) initial dcl 3-19 LIBRARY internal static fixed bin(17,0) initial dcl 4-159 Linkage internal static fixed bin(3,0) initial dcl 3-28 M_ACCESS internal static bit(3) initial unaligned dcl 1-11 M_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 NO_LINK internal static fixed bin(17,0) initial dcl 4-164 NO_TABLE internal static fixed bin(17,0) initial dcl 4-166 N_ACCESS internal static bit(3) initial unaligned dcl 1-11 N_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 OPEN_FLAGS_RELOCATABLE internal static bit(6) initial unaligned dcl 6-22 PATH internal static fixed bin(17,0) initial dcl 4-158 Patch_Init internal static fixed bin(17,0) initial dcl 3-59 Patch_Link internal static fixed bin(17,0) initial dcl 3-58 Patch_Self_Init internal static fixed bin(17,0) initial dcl 3-61 Patch_Symbol_Ref internal static fixed bin(17,0) initial dcl 3-60 RETAIN internal static fixed bin(17,0) initial dcl 4-162 REW_ACCESS internal static bit(3) initial unaligned dcl 1-11 REW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 RE_ACCESS internal static bit(3) initial unaligned dcl 1-11 RE_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 RW_ACCESS internal static bit(3) initial unaligned dcl 1-11 RW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 R_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 Refname_Base internal static fixed bin(3,0) initial dcl 3-49 Refname_Offsetname internal static fixed bin(3,0) initial dcl 3-51 SA_ACCESS internal static bit(3) initial unaligned dcl 1-11 SA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SEG_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 1-30 SMA_ACCESS internal static bit(3) initial unaligned dcl 1-11 SMA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SM_ACCESS internal static bit(3) initial unaligned dcl 1-11 SM_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SYNONYM internal static fixed bin(17,0) initial dcl 4-161 S_ACCESS internal static bit(3) initial unaligned dcl 1-11 S_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 Self_Base internal static fixed bin(3,0) initial dcl 3-47 Self_Offsetname internal static fixed bin(3,0) initial dcl 3-53 Static internal static fixed bin(3,0) initial dcl 3-34 System internal static fixed bin(3,0) initial dcl 3-36 TABLE internal static fixed bin(17,0) initial dcl 4-165 Text internal static fixed bin(3,0) initial dcl 3-26 W_ACCESS internal static bit(3) initial unaligned dcl 1-11 W_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 bmp automatic pointer dcl 127 component_count automatic fixed bin(15,0) unsigned dcl 6-56 component_list based pointer array dcl 6-58 component_listp automatic pointer dcl 6-55 def_count automatic fixed bin(17,0) dcl 3-173 gen_info based structure level 1 dcl 6-61 le_definitions based structure level 1 dcl 3-167 le_input_version_1 internal static char(8) initial unaligned dcl 4-153 le_links based structure level 1 dcl 3-225 le_options based structure level 1 dcl 3-202 le_patches based structure level 1 dcl 3-293 link_count automatic fixed bin(17,0) dcl 3-231 ocu_$create_msf 000000 constant entry external dcl 6-153 ocu_$emit_firstref_trap 000000 constant entry external dcl 6-134 ocu_$emit_link 000000 constant entry external dcl 6-115 ocu_$emit_partial_link 000000 constant entry external dcl 6-126 ocu_$emit_static 000000 constant entry external dcl 6-109 ocu_$emit_text 000000 constant entry external dcl 6-83 reloc_str based char unaligned dcl 6-53 reloc_strl automatic fixed bin(21,0) dcl 6-51 reloc_strp automatic pointer dcl 6-50 section_nm internal static char(16) initial array unaligned dcl 3-41 segname_count automatic fixed bin(17,0) dcl 3-156 word_array based bit(36) array unaligned dcl 6-48 word_arrayl automatic fixed bin(18,0) unsigned dcl 6-46 word_arrayp automatic pointer dcl 6-45 NAME DECLARED BY EXPLICIT CONTEXT. le_make_component_ 000111 constant entry external dcl 16 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 4044 4134 3540 4054 Length 4552 3540 70 402 303 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME le_make_component_ 1473 external procedure is an external procedure. on unit on line 192 68 on unit STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME le_make_component_ 000100 bd_mapp le_make_component_ 000102 bx le_make_component_ 000103 c le_make_component_ 000104 cname le_make_component_ 000114 comp_count le_make_component_ 000116 compp le_make_component_ 000120 date_str le_make_component_ 000126 dummy le_make_component_ 000127 ec le_make_component_ 000130 end_relp le_make_component_ 000131 i le_make_component_ 000132 lesp le_make_component_ 000134 source_count le_make_component_ 000135 n_words le_make_component_ 000136 nm le_make_component_ 000146 nml le_make_component_ 000150 ocudp le_make_component_ 000152 oi le_make_component_ 000240 open_flags le_make_component_ 000241 pad_word le_make_component_ 000242 pn le_make_component_ 000314 pnl le_make_component_ 000315 prev_start le_make_component_ 000316 rel_str le_make_component_ 002320 rel_strp le_make_component_ 002322 relp le_make_component_ 002324 sb_hdr le_make_component_ 002350 sbp le_make_component_ 002352 sc_mapp le_make_component_ 002354 segname le_make_component_ 002365 start le_make_component_ 002366 sys_areap le_make_component_ 002370 userid le_make_component_ 002400 version le_make_component_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_char_temp cat_realloc_chars call_ext_out_desc call_ext_out return_mac enable_op shorten_stack ext_entry_desc int_entry repeat set_chars_eis op_alloc_ op_freen_ clock_mac THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. date_time_ get_system_free_area_ hcs_$get_uid_seg initiate_file_ le_emit_defs_ le_emit_firstref_ le_emit_static_ le_emit_symbol_ le_emit_text_ le_error_ le_util_$get_user_and_version object_info_$brief ocu_$backpatch ocu_$close ocu_$emit_definition ocu_$emit_msf_map ocu_$emit_segname ocu_$emit_symbol ocu_$open ocu_$release pathname_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. le_data_$caller le_data_$symbol_table le_data_$version_number LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 16 000103 184 000131 188 000137 189 000141 190 000142 192 000143 194 000157 196 000172 198 000205 200 000220 204 000221 205 000224 207 000233 209 000240 215 000245 217 000247 218 000274 219 000354 220 000356 224 000407 225 000442 231 000521 233 000523 234 000537 236 000551 240 000553 245 000576 246 000623 247 000665 251 000727 253 000732 254 000734 255 000737 256 000742 257 000745 258 000747 259 000755 260 000764 261 000766 265 000770 266 000772 267 000776 271 001014 273 001036 277 001053 278 001067 279 001105 283 001127 285 001170 290 001243 291 001257 292 001275 296 001317 298 001360 313 001433 315 001434 316 001447 321 001455 326 001463 327 001476 328 001512 329 001526 330 001542 334 001556 336 001557 340 001561 342 001562 343 001575 344 001603 349 001611 355 001657 361 001730 364 001777 366 002003 370 002005 374 002007 375 002024 376 002033 378 002041 379 002042 382 002046 386 002050 388 002061 390 002063 391 002064 392 002102 393 002111 399 002120 400 002121 401 002126 405 002131 406 002135 407 002147 408 002152 409 002170 410 002212 411 002223 412 002231 414 002234 416 002236 421 002241 422 002242 423 002246 429 002274 430 002301 432 002317 433 002337 436 002400 440 002403 441 002411 445 002413 447 002414 449 002425 451 002427 452 002444 453 002453 459 002456 463 002457 464 002463 465 002475 466 002500 467 002516 468 002540 469 002543 470 002554 471 002562 472 002570 473 002600 474 002611 475 002621 476 002632 477 002642 478 002653 479 002655 481 002665 484 002676 488 002700 490 002707 491 002714 492 002717 494 002720 495 002723 496 002735 497 002740 498 002756 499 003000 500 003011 505 003020 506 003040 507 003050 508 003070 512 003100 514 003103 515 003107 518 003135 519 003142 523 003160 527 003200 530 003243 532 003251 536 003253 537 003264 543 003341 544 003347 549 003415 551 003417 553 003443 554 003452 555 003456 556 003462 557 003466 558 003472 559 003501 560 003504 561 003510 562 003513 564 003517 566 003532 ----------------------------------------------------------- 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