COMPILATION LISTING OF SEGMENT ocu_ Compiled by: Multics PL/I Compiler, Release 31a, of October 12, 1988 Compiled at: Honeywell Bull, Phoenix AZ, SysM Compiled on: 10/26/88 0822.5 mst Wed Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1988 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1986 * 6* * * 7* *********************************************************** */ 8 9 /****^ HISTORY COMMENTS: 10* 1) change(86-08-12,Elhard), approve(86-08-12,MCR7505), 11* audit(86-12-10,DGHowe), install(86-12-10,MR12.0-1241): 12* Originally written to provide a subroutine library for creating standard 13* object segments. 14* 2) change(86-12-19,Elhard), approve(86-12-19,PBF7505), 15* audit(86-12-22,DGHowe), install(87-01-05,MR12.0-1256): 16* Changed declarations of list templates to put in explicit declaration of 17* the template words (instead of letting them default to fixed bin (17)) so 18* that debugging versions compiled with -prefix size dont explode. 19* 3) change(88-10-06,Elhard), approve(88-10-06,MCR8015), 20* audit(88-10-24,DGHowe), install(88-10-26,MR12.2-1185): 21* Fixed phx21213 Re: invalid deferred init template relocation, and bug in 22* definition hash table generation. 23* END HISTORY COMMENTS */ 24 25 /* format: style1,insnl,ifthendo,indthenelse,^indnoniterdo,^inditerdo,indcom,^indthenbegin,^indprocbody,ind2,ll78,initcol0,dclind4,idind24,struclvlind1,comcol41 */ 26 27 ocu_: 28 proc; 29 30 /*** ****************************************************************/ 31 /*** */ 32 /*** Name: ocu_ */ 33 /*** Function: This is a set of object creation utilities used */ 34 /*** to create standard format object segments. */ 35 /*** */ 36 /*** ****************************************************************/ 37 38 /* constants */ 39 40 dcl true bit (1) static options (constant) init ("1"b); 41 dcl false bit (1) static options (constant) init ("0"b); 42 43 dcl Left fixed bin static options (constant) init (1); 44 dcl Right fixed bin static options (constant) init (2); 45 46 dcl reloc_bits (1:12) bit (5) static options (constant) 47 init ("10000"b, "10001"b, "10010"b, 48 "10011"b, "10100"b, "10101"b, 49 "10110"b, "10111"b, "11000"b, 50 "11001"b, "11010"b, "11111"b); 51 dcl reloc_chars char (12) static options (constant) 52 init ("t123lds78ire"); 53 dcl class_relinfo (0:4) char (1) static options (constant) 54 init ("t", "l", "s", "d", "i"); 55 56 dcl STD_RELINFO char (13) static options (constant) 57 init ("at123lds78ire"); 58 dcl ALM_RELINFO char (13) static options (constant) 59 init ("a0123456789L*"); 60 61 /* static structures for currentsize references */ 62 63 dcl 01 s_vlh aligned like virgin_linkage_header 64 static options (constant); 65 dcl 01 s_lk aligned like object_link 66 static options (constant); 67 dcl 01 s_dh aligned like definition_header 68 static options (constant); 69 dcl 01 s_def aligned like definition 70 static options (constant); 71 72 /* parameters */ 73 74 dcl A_call_relp fixed bin (18) unsigned parameter; 75 dcl A_class fixed bin (3) parameter; 76 dcl A_code fixed bin (35) parameter; 77 dcl A_component fixed bin (15) unsigned parameter; 78 dcl A_component_count fixed bin (15) unsigned parameter; 79 dcl A_component_listp ptr parameter; 80 dcl A_dir_name char (*) parameter; 81 dcl A_entry_name char (*) parameter; 82 dcl A_expression fixed bin (17) parameter; 83 dcl A_flags bit (*) parameter; 84 dcl A_generator_infop ptr; 85 dcl A_info_relp fixed bin (18) unsigned parameter; 86 dcl A_init_infop ptr parameter; 87 dcl A_modifier bit (6) parameter; 88 dcl A_my_component fixed bin (15) unsigned parameter; 89 dcl A_name char (*) varying parameter; 90 dcl A_new_value fixed bin (35) parameter; 91 dcl A_ocu_datap ptr parameter; 92 dcl A_offset fixed bin (18) unsigned parameter; 93 dcl A_offsetname char (*) varying parameter; 94 dcl A_patch_section char (*) parameter; 95 dcl A_relocationp ptr parameter; 96 dcl A_section fixed bin (3) parameter; 97 dcl A_segname char (*) varying parameter; 98 dcl A_side char (*) parameter; 99 dcl A_type fixed bin (3) parameter; 100 dcl A_word_count fixed bin (18) unsigned parameter; 101 dcl A_wordp ptr parameter; 102 103 /* procedures */ 104 105 dcl expand_pathname_ entry (char (*), char (*), char (*), 106 fixed bin (35)); 107 dcl get_group_id_ entry () returns (char (32)); 108 dcl get_shortest_path_ entry (char (*)) returns (char (168)); 109 dcl get_system_free_area_ entry () returns (ptr); 110 dcl get_temp_segment_ entry (char (*), ptr, fixed bin (35)); 111 dcl get_temp_segments_ entry (char (*), (*) ptr, fixed bin (35)); 112 dcl hcs_$fs_get_path_name entry (ptr, char (*), fixed bin, char (*), 113 fixed bin (35)); 114 dcl hcs_$set_bc entry (char (*), char (*), fixed bin (24), 115 fixed bin (35)); 116 dcl hcs_$star_ entry (char (*), char (*), fixed bin (2), ptr, 117 fixed bin, ptr, ptr, fixed bin (35)); 118 dcl hcs_$status_mins entry (ptr, fixed bin (2), fixed bin (24), 119 fixed bin (35)); 120 dcl object_info_$brief entry (ptr, fixed bin (24), ptr, 121 fixed bin (35)); 122 dcl release_temp_segment_ entry (char (*), ptr, fixed bin (35)); 123 dcl release_temp_segments_ entry (char (*), (*) ptr, fixed bin (35)); 124 dcl sub_err_ entry () options (variable); 125 dcl tssi_$get_segment entry (char (*), char (*), ptr, ptr, 126 fixed bin (35)); 127 dcl tssi_$finish_segment entry (ptr, fixed bin (24), bit (36) aligned, 128 ptr, fixed bin (35)); 129 dcl tssi_$clean_up_segment entry (ptr); 130 131 /* external */ 132 133 dcl error_table_$bad_arg external fixed bin (35); 134 dcl error_table_$improper_data_format 135 external fixed bin (35); 136 dcl error_table_$inconsistent_object_msf 137 external fixed bin (35); 138 dcl error_table_$namedup external fixed bin (35); 139 dcl error_table_$out_of_sequence 140 external fixed bin (35); 141 dcl error_table_$unimplemented_version 142 external fixed bin (35); 143 144 /* static */ 145 146 dcl vlh_size fixed bin static; 147 dcl lk_size fixed bin static; 148 dcl dh_size fixed bin static; 149 dcl def_size fixed bin static; 150 151 /* based */ 152 153 dcl 01 de aligned like def_entry based (dep); 154 dcl 01 di aligned based (dip), 155 02 header aligned like def_info.header, 156 02 def dim (0 refer (di.N_defs)) like def_entry; 157 dcl 01 frti aligned based (frtip), 158 02 header aligned like firstref_trap_info.header, 159 02 trap dim (0 refer (frti.N_traps)) 160 like firstref_trap_entry; 161 dcl 01 li aligned based (lip), 162 02 header aligned like link_info.header, 163 02 link dim (0 refer (li.N_links)) like link_entry; 164 dcl 01 si aligned based (sip), 165 02 header aligned like static_info.header, 166 02 static_word dim (0 refer (si.N_static_words)) bit (36); 167 dcl 01 sbi aligned based (sbip), 168 02 header aligned like symbol_info.header, 169 02 symbol_word dim (0 refer (sbi.N_symbol_words)) bit (36); 170 dcl 01 ti aligned based (tip), 171 02 header aligned like text_info.header, 172 02 text_word dim (0 refer (ti.N_text_words)) bit (36); 173 dcl 01 mi aligned based (mip), 174 02 header aligned like msf_info.header, 175 02 component dim (0 refer (mi.N_components)) 176 like msf_info.component; 177 dcl 01 w15 aligned based (wordp), 178 02 pad1 bit (3) unaligned, 179 02 left fixed bin (15) unsigned unaligned, 180 02 pad2 bit (18) unaligned; 181 dcl 01 w18 aligned based (wordp), 182 02 left fixed bin (18) unsigned unaligned, 183 02 right fixed bin (18) unsigned unaligned; 184 dcl 01 w15s aligned based (wordp), 185 02 pad1 bit (3) unaligned, 186 02 left fixed bin (14) unaligned, 187 02 pad2 bit (18) unaligned; 188 dcl 01 w18s aligned based (wordp), 189 02 left fixed bin (17) unaligned, 190 02 right fixed bin (17) unaligned; 191 192 /* automatic */ 193 194 dcl c fixed bin automatic; 195 dcl call_relp fixed bin (18) unsigned automatic; 196 dcl defx fixed bin automatic; 197 dcl dep ptr automatic; 198 dcl dip ptr automatic; 199 dcl dname char (168) automatic; 200 dcl ec fixed bin (35) automatic; 201 dcl ename char (32) automatic; 202 dcl frtip ptr automatic; 203 dcl i fixed bin automatic; 204 dcl info_relp fixed bin (18) unsigned automatic; 205 dcl lip ptr automatic; 206 dcl 01 linke aligned like link_entry automatic; 207 dcl linkx fixed bin automatic; 208 dcl mode bit (36) aligned automatic; 209 dcl next_word fixed bin (18) unsigned automatic; 210 dcl odp ptr automatic; 211 dcl reloc_infop ptr automatic; 212 dcl relp fixed bin (18) unsigned automatic; 213 dcl sbip ptr automatic; 214 dcl sip ptr automatic; 215 dcl static_arrayp ptr automatic; 216 dcl strx fixed bin automatic; 217 dcl symbol_arrayp ptr automatic; 218 dcl text_arrayp ptr automatic; 219 dcl tip ptr automatic; 220 dcl mip ptr automatic; 221 dcl wordp ptr automatic; 222 223 /* conditions */ 224 225 dcl cleanup condition; 226 dcl size condition; 227 228 /* builtin */ 229 230 dcl addr builtin; 231 dcl addwordno builtin; 232 dcl bit builtin; 233 dcl char builtin; 234 dcl clock builtin; 235 dcl copy builtin; 236 dcl currentsize builtin; 237 dcl divide builtin; 238 dcl fixed builtin; 239 dcl hbound builtin; 240 dcl index builtin; 241 dcl ltrim builtin; 242 dcl min builtin; 243 dcl mod builtin; 244 dcl null builtin; 245 dcl ptr builtin; 246 dcl rel builtin; 247 dcl rtrim builtin; 248 dcl search builtin; 249 dcl string builtin; 250 dcl substr builtin; 251 dcl translate builtin; 252 dcl unspec builtin; 253 254 return; 255 256 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 257 258 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 259 260 261 open: 262 entry (A_dir_name, /** output dir name (in ) */ 263 A_entry_name, /** output entry name (in ) */ 264 A_flags, /** option flags (in ) */ 265 A_ocu_datap, /** ocu_data pointer (out) */ 266 A_code); /** error code (out) */ 267 268 /*** ****************************************************************/ 269 /*** */ 270 /*** Name: ocu_$open */ 271 /*** Input: dir_name, entry_name, flags */ 272 /*** Function: allocates all of the structures to be used and */ 273 /*** initialize them. Since most of the structures */ 274 /*** are extensible, each structure has its own temp */ 275 /*** seg. */ 276 /*** Output: ocu_datap, code */ 277 /*** */ 278 /*** ****************************************************************/ 279 280 /* arrange to clean up if we are interrupted */ 281 282 ocu_datap, A_ocu_datap = null; 283 284 vlh_size = currentsize (s_vlh); 285 lk_size = currentsize (s_lk); 286 dh_size = currentsize (s_dh); 287 def_size = currentsize (s_def); 288 289 on cleanup 290 begin; 291 if ocu_datap ^= null 292 then do; 293 if temp_segs (1) ^= null 294 then call release_temp_segments_ ("ocu_", temp_segs, 0); 295 call release_temp_segment_ ("ocu_", ocu_datap, 0); 296 end; 297 A_ocu_datap = null; 298 end; 299 300 /* get the ocu_data temp seg */ 301 302 call get_temp_segment_ ("ocu_", ocu_datap, ec); 303 if ec ^= 0 304 then call exit (ec); 305 306 /* get the temp segs for the extensible structures */ 307 308 call get_temp_segments_ ("ocu_", temp_segs, ec); 309 if ec ^= 0 310 then call exit (ec); 311 312 /* now set up the rest of the ocu_data structure */ 313 314 ocu_data.version = ocu_data_version_1; 315 string (ocu_data.flags) = ""b; 316 ocu_data.target.dir = A_dir_name; 317 ocu_data.target.entry = A_entry_name; 318 ocu_data.msf_info.component_count = 0; 319 ocu_data.msf_info.my_component = 0; 320 if (A_flags & OPEN_FLAGS_BOUND) 321 then ocu_data.flags.bound = true; 322 if A_flags & OPEN_FLAGS_RELOCATABLE 323 then ocu_data.flags.relocatable = true; 324 if A_flags & OPEN_FLAGS_PROCEDURE 325 then ocu_data.flags.procedure = true; 326 if A_flags & OPEN_FLAGS_SEPARATE_STATIC 327 then ocu_data.flags.separate_static = true; 328 if A_flags & OPEN_FLAGS_PERPROCESS_STATIC 329 then ocu_data.flags.perprocess_static = true; 330 if A_flags & OPEN_FLAGS_NO_HASHTABLE 331 then ocu_data.flags.no_hash_table = true; 332 333 /* the variables determining the sizes of the extensible structures */ 334 /* are assumed to be zero since they are in temp-segs which should */ 335 /* be zero length when received. */ 336 337 /* set the returned parameter */ 338 339 A_ocu_datap = ocu_datap; 340 341 call exit (0); 342 343 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 344 345 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 346 347 348 close: 349 entry (A_ocu_datap, /** ocu_data pointer (in ) */ 350 A_code); /** error code (out) */ 351 352 /*** ****************************************************************/ 353 /*** */ 354 /*** Name: ocu_$close */ 355 /*** Input: ocu_datap */ 356 /*** Function: closes the ocu_ invocation and creates the actual */ 357 /*** object segment from the tables created. */ 358 /*** Output: code */ 359 /*** */ 360 /*** ****************************************************************/ 361 362 /* check out the pointer we received */ 363 364 ocu_datap = A_ocu_datap; 365 if ocu_data.version ^= ocu_data_version_1 366 then call exit (error_table_$unimplemented_version); 367 368 /* arrange to cleanup if this is interrupted */ 369 370 ocu_data.target.acinfop = null; 371 reloc_infop = null; 372 373 /* perform a few consistency checks before building the object */ 374 375 376 on cleanup 377 begin; 378 if ocu_datap ^= null 379 then if ocu_data.target.acinfop ^= null 380 then call tssi_$clean_up_segment (ocu_data.target.acinfop); 381 if reloc_infop ^= null 382 then call release_temp_segment_ ("ocu_", reloc_infop, 0); 383 end; 384 385 /* create/truncate the target object segment */ 386 387 call tssi_$get_segment (ocu_data.target.dir, ocu_data.target.entry, 388 ocu_data.target.segp, ocu_data.target.acinfop, ec); 389 if ec ^= 0 390 then call exit (ec); 391 392 /* allocate a temp_seg for the relocation blocks */ 393 394 call get_temp_segment_ ("ocu_", reloc_infop, ec); 395 396 reloc_infop -> relinfo_blocks.no_relinfo = ^ocu_data.flags.relocatable; 397 398 /* create each section of the object segment */ 399 400 call create_text (ocu_datap, reloc_infop); 401 call create_defs (ocu_datap, reloc_infop); 402 call create_link (ocu_datap, reloc_infop); 403 call create_stat (ocu_datap); 404 call create_symb (ocu_datap, reloc_infop); 405 call create_obj_map (ocu_datap); 406 407 /* release the relocation_info temp seg */ 408 409 call release_temp_segment_ ("ocu_", reloc_infop, ec); 410 reloc_infop = null; 411 412 /* determine what ACL mode should be on the resulting object */ 413 414 if ocu_data.flags.procedure 415 then mode = RE_ACCESS; 416 else mode = RW_ACCESS; 417 418 /* and finish off the object segment */ 419 420 call tssi_$finish_segment (ocu_data.target.segp, ocu_data.target.bc, 421 mode, ocu_data.target.acinfop, ec); 422 423 /* now release the storage */ 424 425 call release (ocu_datap); 426 A_ocu_datap = null; 427 428 call exit (ec); 429 430 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 431 432 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 433 434 435 release: 436 entry (A_ocu_datap); /** ocu_data pointer (in ) */ 437 438 /*** ****************************************************************/ 439 /*** */ 440 /*** Name: ocu_$release */ 441 /*** Input: ocu_datap */ 442 /*** Function: frees the storage associated with an open ocu_ */ 443 /*** invocation. This entry is provided for use by */ 444 /*** cleanup handlers. */ 445 /*** Output: none */ 446 /*** */ 447 /*** ****************************************************************/ 448 449 /* release the temp segs for the extensible structures, and then */ 450 /* the ocu_data structure itself. */ 451 452 ocu_datap = A_ocu_datap; 453 if ocu_datap ^= null 454 then do; 455 if ocu_data_ptrs.temp_segs (1) ^= null 456 then call release_temp_segments_ ("ocu_", ocu_data_ptrs.temp_segs, 0); 457 call release_temp_segment_ ("ocu_", ocu_datap, 0); 458 end; 459 460 return; 461 462 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 463 464 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 465 466 467 emit_text: 468 entry (A_ocu_datap, /** ocu_data pointer (in ) */ 469 A_wordp, /** word array ptr (in ) */ 470 A_relocationp, /** relocation string (in ) */ 471 A_word_count) /** word count (in ) */ 472 returns (fixed bin (18) uns); /** text relp (out) */ 473 474 /*** ****************************************************************/ 475 /*** */ 476 /*** Name: ocu_$emit_text */ 477 /*** Input: ocu_datap, wordp, relocationp, word_count */ 478 /*** Function: appends a block of words to the text section of */ 479 /*** the object segment. Relocation info is also */ 480 /*** appended for use in relocating linkage section */ 481 /*** references. If the object segment being created */ 482 /*** is not relocatable, the relocation information */ 483 /*** will not be placed into the final object segment. */ 484 /*** Output: text_relp */ 485 /*** */ 486 /*** ****************************************************************/ 487 488 /* check out the pointer we received */ 489 490 ocu_datap = A_ocu_datap; 491 if ocu_data.version ^= ocu_data_version_1 492 then call sub_err_ (error_table_$unimplemented_version, "argument", 493 ACTION_CANT_RESTART, null, 0); 494 495 /* get the pointers to the structures to be used */ 496 497 tip = ocu_data.text_infop; 498 499 /* set up the word array and relocation string */ 500 501 word_arrayp = A_wordp; 502 word_arrayl = A_word_count; 503 504 reloc_strp = A_relocationp; 505 reloc_strl = A_word_count * 2; 506 507 /* get the info for the text section relocation info string */ 508 509 relinfo_strp = ocu_data.text_relinfop; 510 relinfo_strl = ti.text_relinfol + reloc_strl; 511 512 /* save the relpointer to the new text */ 513 514 relp = ti.N_text_words; 515 516 /* copy the text words into the text section table */ 517 518 next_word = ti.N_text_words + 1; 519 ti.N_text_words = ti.N_text_words + A_word_count; 520 text_arrayp = addr (ti.text_word (next_word)); 521 522 unspec (text_arrayp -> word_array) = unspec (word_array); 523 524 /* append the relinfo string to the text section relinfo string */ 525 526 substr (relinfo_str, ti.text_relinfol + 1, reloc_strl) = 527 translate (reloc_str, STD_RELINFO, ALM_RELINFO); 528 ti.text_relinfol = relinfo_strl; 529 530 return (relp); 531 532 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 533 534 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 535 536 537 emit_definition: 538 entry (A_ocu_datap, /** ocu_data pointer (in ) */ 539 A_name, /** definition name (in ) */ 540 A_section, /** target section (in ) */ 541 A_offset, /** offset in section (in ) */ 542 A_flags) /** definition flags (in ) */ 543 returns (fixed bin (18) uns); /** definition relp (out) */ 544 545 /*** ****************************************************************/ 546 /*** */ 547 /*** Name: ocu_$emit_definition */ 548 /*** Input: ocu_datap, name, section, offset, flags */ 549 /*** Function: appends a single non-class-3 definition to the */ 550 /*** definition list. If the definition target is in */ 551 /*** the static section, and we are combining the */ 552 /*** static and linkage sections, then convert the */ 553 /*** static reference to a linkage reference. */ 554 /*** Output: definition_relp */ 555 /*** */ 556 /*** ****************************************************************/ 557 558 /* check out the pointer we received */ 559 560 ocu_datap = A_ocu_datap; 561 if ocu_data.version ^= ocu_data_version_1 562 then call sub_err_ (error_table_$unimplemented_version, 563 "argument", ACTION_CANT_RESTART, null, 0); 564 565 /* get a pointer to the definition list structure */ 566 567 dip = ocu_data.def_infop; 568 569 /* make sure this call is preceeded by a call to ocu_$emit_definition */ 570 571 if di.N_defs = 0 572 then call sub_err_ (error_table_$out_of_sequence, "sequence", 573 ACTION_CANT_RESTART, null, 0, 574 "^/ocu_$emit_segname must be called " || 575 "before calling ocu_$emit_definition"); 576 577 /* increment the number of definitions */ 578 579 di.N_defs = di.N_defs + 1; 580 581 dep = addr (di.def (di.N_defs)); 582 583 /* set up the definition, and add the name to the stringmap, if not */ 584 /* already present. */ 585 586 de.strx = find_string (ocu_datap, rtrim (A_name)); 587 588 de.class = A_section; 589 de.offset = A_offset; 590 591 string (de.flags) = ""b; 592 593 if A_flags & DEFINITION_FLAGS_IGNORE 594 then de.flags.ignore = true; 595 if A_flags & DEFINITION_FLAGS_ENTRY 596 then de.flags.entry = true; 597 if A_flags & DEFINITION_FLAGS_RETAIN 598 then de.flags.retain = true; 599 if A_flags & DEFINITION_FLAGS_INDIRECT 600 then de.flags.indirect = true; 601 de.dup_tbl_relp = 0; 602 603 /* return calculated definition offset */ 604 605 return (dh_size + ((di.N_defs - 1) * def_size)); 606 607 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 608 609 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 610 611 612 emit_segname: 613 entry (A_ocu_datap, /** ocu_data pointer (in ) */ 614 A_name, /** segname (in ) */ 615 A_flags) /** definition flags (in ) */ 616 returns (fixed bin (18) uns); /** definition relp (out) */ 617 618 /*** ****************************************************************/ 619 /*** */ 620 /*** Name: ocu_$emit_segname */ 621 /*** Input: ocu_datap, name, flags */ 622 /*** Function: emits a single class-3 segname definition. */ 623 /*** Output: definition_relp */ 624 /*** */ 625 /*** ****************************************************************/ 626 627 /* check out the pointer we received */ 628 629 ocu_datap = A_ocu_datap; 630 if ocu_data.version ^= ocu_data_version_1 631 then call sub_err_ (error_table_$unimplemented_version, 632 "argument", ACTION_CANT_RESTART, null, 0); 633 634 /* get a pointer to the definition list structure */ 635 636 dip = ocu_data.def_infop; 637 638 /* make sure this is not a duplicate segname */ 639 640 strx = find_string (ocu_datap, rtrim (A_name)); 641 642 do defx = 1 to di.N_defs; 643 if di.def (defx).class = 3 & di.def (defx).strx = strx 644 then call sub_err_ (error_table_$namedup, "argument", 645 ACTION_CANT_RESTART, null, 0, 646 "^/There is already a segname definition ""^a""", A_name); 647 end; 648 649 /* increment the number of definitions */ 650 651 di.N_defs = di.N_defs + 1; 652 653 /* create the segname, and add the name to the stringmap if not */ 654 /* already present. */ 655 656 dep = addr (di.def (defx)); 657 658 de.strx = strx; 659 de.class = 3; 660 de.offset = 0; 661 de.dup_tbl_relp = 0; 662 663 string (de.flags) = ""b; 664 if A_flags & DEFINITION_FLAGS_IGNORE 665 then de.flags.ignore = true; 666 if A_flags & DEFINITION_FLAGS_ENTRY 667 then de.flags.entry = true; 668 if A_flags & DEFINITION_FLAGS_RETAIN 669 then de.flags.retain = true; 670 671 if (A_flags & DEFINITION_FLAGS_INDIRECT) ^= ""b 672 then call sub_err_ (error_table_$bad_arg, "argument", 673 ACTION_CAN_RESTART, null, 0, 674 "^/Segname definitions may not be indirect."); 675 676 /* return the calculated definition relpointer */ 677 678 return (dh_size + ((defx - 1) * def_size)); 679 680 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 681 682 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 683 684 685 emit_msf_map: 686 entry (A_ocu_datap, /** ocu_data pointer (in ) */ 687 A_component_count, /** no. of components (in ) */ 688 A_my_component); /** this component no (in ) */ 689 690 /*** ****************************************************************/ 691 /*** */ 692 /*** Name: ocu_$emit_msf_map */ 693 /*** Input: ocu_datap, component_count, my_component */ 694 /*** Function: saves the values to be used for the msf_map in */ 695 /*** the definition structure. */ 696 /*** Output: code */ 697 /*** */ 698 /*** ****************************************************************/ 699 700 /* check out the pointer we were passed */ 701 702 ocu_datap = A_ocu_datap; 703 if ocu_data.version ^= ocu_data_version_1 704 then call sub_err_ (error_table_$unimplemented_version, 705 "argument", ACTION_CANT_RESTART, null, 0); 706 707 if A_component_count <= 0 708 then call sub_err_ (error_table_$bad_arg, "argument", 709 ACTION_CANT_RESTART, null, 0, 710 "^/The number of components in an object MSF must be positive." 711 ); 712 713 if (A_my_component < 0) | (A_my_component > A_component_count) 714 then call sub_err_ (error_table_$bad_arg, "argument", 715 ACTION_CANT_RESTART, null, 0, 716 "^/The component number must be in the range " || 717 "0 .. component_count."); 718 719 /* store the count and component number in ocu_data */ 720 721 ocu_data.component_count = A_component_count; 722 ocu_data.my_component = A_my_component; 723 724 return; 725 726 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 727 728 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 729 730 731 emit_static: 732 entry (A_ocu_datap, /** ocu_data pointer (in ) */ 733 A_wordp, /** static word array (in ) */ 734 A_word_count) /** size of word array (in ) */ 735 returns (fixed bin (18) uns); /** static relp (out) */ 736 737 /*** ****************************************************************/ 738 /*** */ 739 /*** Name: ocu_$emit_static */ 740 /*** Input: ocu_datap, wordp, word_count */ 741 /*** Function: adds a block of words to the static section. */ 742 /*** Output: static_relp */ 743 /*** */ 744 /*** ****************************************************************/ 745 746 /* check out the pointer we were passed */ 747 748 ocu_datap = A_ocu_datap; 749 if ocu_data.version ^= ocu_data_version_1 750 then call sub_err_ (error_table_$unimplemented_version, "argument", 751 ACTION_CANT_RESTART, null, 0); 752 753 /* get a pointer to the static section info structure */ 754 755 sip = ocu_data.static_infop; 756 757 /* set up the input word array */ 758 759 word_arrayp = A_wordp; 760 word_arrayl = A_word_count; 761 762 /* determine the return relpointer offset */ 763 764 relp = si.N_static_words; 765 766 /* copy the word array into the static info structure */ 767 768 next_word = si.N_static_words + 1; 769 si.N_static_words = si.N_static_words + A_word_count; 770 static_arrayp = addr (si.static_word (next_word)); 771 772 unspec (static_arrayp -> word_array) = unspec (word_array); 773 774 return (relp); 775 776 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 777 778 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 779 780 781 emit_link: 782 entry (A_ocu_datap, /** ocu_data pointer (in ) */ 783 A_type, /** link type (in ) */ 784 A_class, /** link class (in ) */ 785 A_segname, /** target segment (in ) */ 786 A_offsetname, /** target definition (in ) */ 787 A_expression, /** word offset (in ) */ 788 A_modifier, /** link modifier (in ) */ 789 A_init_infop) /** initialization (in ) */ 790 returns (fixed bin (18) uns); /** link relp (out) */ 791 792 /*** ****************************************************************/ 793 /*** */ 794 /*** Name: ocu_$emit_link */ 795 /*** Input: ocu_datap, type, class, segname, offsetname, */ 796 /*** expression, modifier, init_infop */ 797 /*** Function: emits a single external link. The link relpointer */ 798 /*** returned is calculated as if the static section */ 799 /*** is separate. If the static section is internal */ 800 /*** to the linkage section, references to the linkage */ 801 /*** section in the text, symbol, and definition */ 802 /*** sections will be relocated to the actual location */ 803 /*** of the link. */ 804 /*** Output: link_relp */ 805 /*** */ 806 /*** ****************************************************************/ 807 808 /* check out the pointer we were passed */ 809 810 ocu_datap = A_ocu_datap; 811 if ocu_data.version ^= ocu_data_version_1 812 then call sub_err_ (error_table_$unimplemented_version, "argument", 813 ACTION_CANT_RESTART, null, 0); 814 815 /* get a pointer to the link array structure */ 816 817 lip = ocu_data.link_infop; 818 819 /* locate/create the expression_word, type_pair, strings, etc. */ 820 821 unspec (linke) = ""b; 822 linke.modifier = A_modifier; 823 linke.exp_wordx = find_exp_word (ocu_datap, A_expression, A_type, A_class, 824 A_segname, A_offsetname, A_init_infop); 825 826 /* search for a link with the same expression_word and modifier. If */ 827 /* found, return a relpointer to that link. */ 828 829 do linkx = 1 to li.N_links; 830 if unspec (li.link (linkx)) = unspec (linke) 831 then return (vlh_size + (lk_size * (linkx - 1))); 832 end; 833 834 /* if not found, create a new link */ 835 836 linkx, li.N_links = li.N_links + 1; 837 unspec (li.link (linkx)) = unspec (linke); 838 839 /* return the relpointer to the new link */ 840 841 return (vlh_size + (lk_size * (linkx - 1))); 842 843 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 844 845 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 846 847 848 emit_partial_link: 849 entry (A_ocu_datap, /** ocu_data pointer (in ) */ 850 A_component, /** target component (in ) */ 851 A_section, /** target section (in ) */ 852 A_offset, /** offset in section (in ) */ 853 A_modifier) /** link modifier (in ) */ 854 returns (fixed bin (18) uns); /** link relp (out) */ 855 856 /*** ****************************************************************/ 857 /*** */ 858 /*** Name: ocu_$emit_partial_link */ 859 /*** Input: ocu_datap, component, section, offset, modifier */ 860 /*** Function: emits a single partially snapped link in the */ 861 /*** linkage section of the new object. */ 862 /*** Output: link_relp */ 863 /*** */ 864 /*** ****************************************************************/ 865 866 /* check out the pointer we were passed */ 867 868 ocu_datap = A_ocu_datap; 869 if ocu_data.version ^= ocu_data_version_1 870 then call sub_err_ (error_table_$unimplemented_version, 871 "argument", ACTION_CANT_RESTART, null, 0); 872 873 /* get a pointer to the link array structure */ 874 875 lip = ocu_data.link_infop; 876 877 linke.exp_wordx = 0; 878 linke.type = A_section; 879 linke.component = A_component; 880 linke.offset = A_offset; 881 linke.modifier = A_modifier; 882 883 /* look for an identical partial link and use it if one exists */ 884 885 do linkx = 1 to li.N_links; 886 if unspec (li.link (linkx)) = unspec (linke) 887 then return (vlh_size + (lk_size * (linkx - 1))); 888 end; 889 890 /* if no matching link is found, generate a new link */ 891 892 linkx, li.N_links = li.N_links + 1; 893 894 unspec (li.link (linkx)) = unspec (linke); 895 896 /* return a relpointer to the new partial link */ 897 898 return (vlh_size + (lk_size * (linkx - 1))); 899 900 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 901 902 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 903 904 905 emit_firstref_trap: 906 entry (A_ocu_datap, /** ocu_data pointer (in ) */ 907 A_call_relp, /** relp to call link (in ) */ 908 A_info_relp); /** relp to info link (in ) */ 909 910 /*** ****************************************************************/ 911 /*** */ 912 /*** Name: ocu_$emit_firtstref_trap */ 913 /*** Input: ocu_datap, call_relp, info_relp */ 914 /*** Function: adds a first reference trap to the firstref trap */ 915 /*** block to be placed into the linkage section. If */ 916 /*** no firstref traps are emitted, no trap block is */ 917 /*** placed in the linkage section. */ 918 /*** Output: none */ 919 /*** */ 920 /*** ****************************************************************/ 921 922 /* check out the pointer we were passed */ 923 924 ocu_datap = A_ocu_datap; 925 if ocu_data.version ^= ocu_data_version_1 926 then call sub_err_ (error_table_$unimplemented_version, 927 "argument", ACTION_CANT_RESTART, null, 0); 928 929 /* get a pointer to the firstref trap array */ 930 931 frtip = ocu_data.firstref_trap_infop; 932 933 /* increment the number of traps */ 934 935 frti.N_traps = frti.N_traps + 1; 936 937 /* copy the relpointers into the trap array */ 938 939 frti.trap (frti.N_traps).call_relp = A_call_relp; 940 frti.trap (frti.N_traps).info_relp = A_info_relp; 941 942 return; 943 944 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 945 946 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 947 948 949 emit_symbol: 950 entry (A_ocu_datap, /** ocu_data pointer (in ) */ 951 A_wordp, /** symbol word array (in ) */ 952 A_relocationp, /** relocation string (in ) */ 953 A_word_count) /** word count (in ) */ 954 returns (fixed bin (18) uns); /** symbol relp (out) */ 955 956 /*** ****************************************************************/ 957 /*** */ 958 /*** Name: ocu_$emit_symbol */ 959 /*** Input: ocu_datap, wordp, relocationp, word_count */ 960 /*** Function: emits a block of symbol section words and their */ 961 /*** associated relocation information. Note that */ 962 /*** while the relocation information is located in */ 963 /*** the symbol section, it should not be emitted */ 964 /*** by the caller. It will be synthesized by ocu_ */ 965 /*** and placed at the end of the symbol section. */ 966 /*** Note also that ocu_ assumes the first thing in */ 967 /*** the symbol section is a std_symbol_header */ 968 /*** structure into which the relocation offsets will */ 969 /*** patched when the object segment is assembled. */ 970 /*** Output: symbol_relp */ 971 /*** */ 972 /*** ****************************************************************/ 973 974 /* check out the pointer we were passed */ 975 976 ocu_datap = A_ocu_datap; 977 if ocu_data.version ^= ocu_data_version_1 978 then call sub_err_ (error_table_$unimplemented_version, "argument", 979 ACTION_CANT_RESTART, null, 0); 980 981 /* get a pointer to the symbol section info structure */ 982 983 sbip = ocu_data.symbol_infop; 984 985 /* set up the input word array and relocation string */ 986 987 word_arrayp = A_wordp; 988 word_arrayl = A_word_count; 989 990 reloc_strp = A_relocationp; 991 reloc_strl = A_word_count * 2; 992 993 /* set up the symbol section relocation string */ 994 995 relinfo_strp = ocu_data.symbol_relinfop; 996 relinfo_strl = sbi.symbol_relinfol + reloc_strl; 997 998 /* determine the return value */ 999 1000 relp = sbi.N_symbol_words; 1001 1002 /* copy the word array into the symbol section */ 1003 1004 next_word = sbi.N_symbol_words + 1; 1005 sbi.N_symbol_words = sbi.N_symbol_words + A_word_count; 1006 symbol_arrayp = addr (sbi.symbol_word (next_word)); 1007 1008 unspec (symbol_arrayp -> word_array) = unspec (word_array); 1009 1010 /* append the relocation sting to the symbol section relocation string */ 1011 1012 substr (relinfo_str, sbi.symbol_relinfol + 1, reloc_strl) = 1013 translate (reloc_str, STD_RELINFO, ALM_RELINFO); 1014 1015 sbi.symbol_relinfol = relinfo_strl; 1016 1017 return (relp); 1018 1019 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 1020 1021 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 1022 1023 1024 backpatch: 1025 entry (A_ocu_datap, /** ocu_data pointer (in ) */ 1026 A_patch_section, /** section to patch (in ) */ 1027 A_offset, /** word to patch (in ) */ 1028 A_side, /** halfword to patch (in ) */ 1029 A_new_value); /** value to patch in (in ) */ 1030 1031 /*** ****************************************************************/ 1032 /*** */ 1033 /*** Name: ocu_$backpatch */ 1034 /*** Input: ocu_datap, patch_section, offset, side, value */ 1035 /*** Function: allows specific halfwords withing the text and */ 1036 /*** symbol sections to be patched. This is to allow */ 1037 /*** changes to be made after the section has been */ 1038 /*** emitted to install values unknown at that time. */ 1039 /*** Halfwords can be patched as signed or unsigned */ 1040 /*** 15 or 18 bit values. Note that the use of 15 */ 1041 /*** bit patching is restricted to the left halfword */ 1042 /*** of text section references. This reflects the */ 1043 /*** restriction on use of 15 bit relocation info. */ 1044 /*** Output: none */ 1045 /*** */ 1046 /*** ****************************************************************/ 1047 1048 /* check out the pointer we received */ 1049 1050 ocu_datap = A_ocu_datap; 1051 if ocu_data.version ^= ocu_data_version_1 1052 then call sub_err_ (error_table_$unimplemented_version, "argument", 1053 ACTION_CANT_RESTART, null, 0); 1054 1055 /* make sure the offset is positive */ 1056 1057 if A_offset < 0 1058 then call sub_err_ (error_table_$bad_arg, "argument", 1059 ACTION_CANT_RESTART, null, 0, 1060 "^/Negative word offset is invalid."); 1061 1062 /* NB: The pl1 prefix (size): is used to determine whether the */ 1063 /* value given is suitable for the type of patching being done */ 1064 /* since overlays are used with appropriate precision and sign */ 1065 /* the parameter is declared fixed bin (35) and we let PL/I */ 1066 /* figure out whether this is legitimate or not. */ 1067 1068 on size 1069 call sub_err_ (error_table_$bad_arg, 1070 "argument", ACTION_CANT_RESTART, null, 0, 1071 "^/Invalid value specified for halfword."); 1072 1073 /* determine which section is being patched */ 1074 1075 if A_patch_section = "text" 1076 then do; 1077 1078 /* patching text section: make sure the word offset is OK. */ 1079 1080 tip = ocu_data.text_infop; 1081 if A_offset >= ti.N_text_words 1082 then call sub_err_ (error_table_$bad_arg, "argument", 1083 ACTION_CANT_RESTART, null, 0, 1084 "^/Specified offset is not within the text section."); 1085 1086 wordp = addr (ti.text_word (A_offset + 1)); 1087 1088 /* enable size checking and asign to an appropriate overlay */ 1089 /* based on the side specification given. */ 1090 1091 (size): 1092 if A_side = "left 15 unsigned" 1093 then w15.left = A_new_value; 1094 else if A_side = "left 15 signed" 1095 then w15s.left = A_new_value; 1096 else if A_side = "left 18 unsigned" 1097 then w18.left = A_new_value; 1098 else if A_side = "left 18 signed" 1099 then w18s.left = A_new_value; 1100 else if A_side = "right 18 unsigned" 1101 then w18.right = A_new_value; 1102 else if A_side = "right 18 signed" 1103 then w18s.right = A_new_value; 1104 else call sub_err_ (error_table_$bad_arg, "argument", 1105 ACTION_CANT_RESTART, null, 0, 1106 "^/Invalid text section side specification."); 1107 (nosize): 1108 end; 1109 else if A_patch_section = "symbol" 1110 then do; 1111 1112 /* symbol section: Make sure the offset is in the section */ 1113 1114 sbip = ocu_data.symbol_infop; 1115 if A_offset >= sbi.N_symbol_words 1116 then call sub_err_ (error_table_$bad_arg, "argument", 1117 ACTION_CANT_RESTART, null, 0, 1118 "^/Specified offset is not within the symbol section."); 1119 1120 wordp = addr (sbi.symbol_word (A_offset + 1)); 1121 1122 /* enable size checking and assign to the appropriate overlay */ 1123 1124 (size): 1125 if A_side = "left 18 unsigned" 1126 then w18.left = A_new_value; 1127 else if A_side = "left 18 signed" 1128 then w18s.left = A_new_value; 1129 else if A_side = "right 18 unsigned" 1130 then w18.right = A_new_value; 1131 else if A_side = "right 18 signed" 1132 then w18s.right = A_new_value; 1133 else call sub_err_ (error_table_$bad_arg, "argument", 1134 ACTION_CANT_RESTART, null, 0, 1135 "^/Invalid symbol section side specification."); 1136 (nosize): 1137 end; 1138 else if A_patch_section = "static" 1139 then do; 1140 1141 /* static section: make sure the offset is in the section */ 1142 1143 sip = ocu_data.static_infop; 1144 if A_offset >= si.N_static_words 1145 then call sub_err_ (error_table_$bad_arg, "argument", 1146 ACTION_CANT_RESTART, null, 0, 1147 "^/Specified offset is not within the static section."); 1148 1149 wordp = addr (si.static_word (A_offset + 1)); 1150 1151 /* enable size checking and assign to the appropriate overlay */ 1152 1153 (size): 1154 if A_side = "left 18 unsigned" 1155 then w18.left = A_new_value; 1156 else if A_side = "left 18 signed" 1157 then w18s.left = A_new_value; 1158 else if A_side = "right 18 unsigned" 1159 then w18.right = A_new_value; 1160 else if A_side = "right 18 signed" 1161 then w18s.right = A_new_value; 1162 else call sub_err_ (error_table_$bad_arg, "argument", 1163 ACTION_CANT_RESTART, null, 0, 1164 "^/Invalid static section side specification."); 1165 (nosize): 1166 end; 1167 1168 /* unknown section */ 1169 1170 else call sub_err_ (error_table_$bad_arg, "argument", 1171 ACTION_CANT_RESTART, null, 0, 1172 "^/Invalid section specification."); 1173 1174 return; 1175 1176 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 1177 1178 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 1179 1180 1181 create_msf: 1182 entry (A_component_listp, /** component array (in ) */ 1183 A_component_count, /** component count (in ) */ 1184 A_generator_infop, /** generator info (in ) */ 1185 A_code); /** error code (out) */ 1186 1187 /*** ****************************************************************/ 1188 /*** */ 1189 /*** Name: ocu_$create_msf */ 1190 /*** Input: component_listp, component_count */ 1191 /*** Function: This entrypoint is used to construct component 0 */ 1192 /*** of an Object MSF. This involves creating */ 1193 /*** an object segment containing the definitions for */ 1194 /*** each accessible point in each of the other MSF */ 1195 /*** components, generating transfer vectors and */ 1196 /*** partial links in the internal static area and */ 1197 /*** link array of the linkage section (respectively) */ 1198 /*** and generating the first reference trap to cause */ 1199 /*** the snapping of partial links. Note that it */ 1200 /*** is NOT in this procedures contract to create the */ 1201 /*** actual Multi-Segment File. It will validate */ 1202 /*** that the segments to be used are all in the same */ 1203 /*** directory, have the appropriate names, have */ 1204 /*** msf_maps, and that there are no other segments */ 1205 /*** or directories in the containing directory */ 1206 /*** It will then create component 0 in the same */ 1207 /*** directory and set the bit count on the directory. */ 1208 /*** Output: code */ 1209 /*** */ 1210 /*** ****************************************************************/ 1211 1212 /* get a temp_segment for out working structure */ 1213 1214 mip = null; 1215 odp = null; 1216 1217 on cleanup 1218 begin; 1219 if mip ^= null 1220 then call release_temp_segment_ ("ocu_", mip, 0); 1221 if odp ^= null 1222 then call release (odp); 1223 end; 1224 1225 call get_temp_segment_ ("ocu_", mip, ec); 1226 1227 /* copy the arguments into the working structure */ 1228 1229 mi.containing_dir = ""; 1230 mi.gen_info = A_generator_infop -> gen_info; 1231 mi.N_components, component_count = A_component_count; 1232 component_listp = A_component_listp; 1233 1234 /* make sure the segment pointers point to the base of the segment */ 1235 1236 do c = 1 to component_count; 1237 mi.component (c).segp = ptr (component_list (c), 0); 1238 end; 1239 1240 /* make sure all of the components are correct */ 1241 1242 do c = 1 to component_count; 1243 call validate_component (mip, c); 1244 end; 1245 1246 call open (mi.containing_dir, "0", 1247 OPEN_FLAGS_RELOCATABLE | OPEN_FLAGS_PROCEDURE | OPEN_FLAGS_BOUND, 1248 odp, ec); 1249 if ec ^= 0 1250 then call exit (ec); 1251 1252 /* emit the first reference trap and associated links */ 1253 1254 call_relp = emit_link (odp, (LINK_REFNAME_OFFSETNAME), 0, 1255 "msf_prelink_", "msf_prelink_", 0, ""b, null); 1256 info_relp = emit_link (odp, (LINK_SELF_BASE), (SECTION_LINK), "", "", 1257 0, ""b, null); 1258 call emit_firstref_trap (odp, call_relp, info_relp); 1259 1260 /* emit the component 0 msf map */ 1261 1262 call emit_msf_map (odp, component_count + 1, 0); 1263 1264 /* copy the external definitions for each component */ 1265 1266 do c = 1 to mi.N_components; 1267 call copy_defs (odp, mip, c); 1268 end; 1269 1270 /* create the symbol section */ 1271 1272 call mk_symbol_scn (odp, mip); 1273 1274 /* close the ocu_ invocation to create component 0 */ 1275 1276 call close (odp, ec); 1277 1278 /* set the bit count on the MSF */ 1279 1280 call expand_pathname_ (mi.containing_dir, dname, ename, ec); 1281 call hcs_$set_bc (dname, ename, mi.N_components + 1, ec); 1282 1283 /* release the msf_info structure */ 1284 1285 call release_temp_segment_ ("ocu_", mip, ec); 1286 1287 call exit (ec); 1288 1289 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 1290 1291 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 1292 1293 1294 exit: 1295 proc (ec); /** error code (in ) */ 1296 1297 /*** ****************************************************************/ 1298 /*** */ 1299 /*** Name: exit */ 1300 /*** Input: ec */ 1301 /*** Function: returns from the object creation utilities */ 1302 /*** returning a specified error code. */ 1303 /*** Output: none */ 1304 /*** */ 1305 /*** ****************************************************************/ 1306 1307 /* parameters */ 1308 1309 dcl ec fixed bin (35) parameter; 1310 1311 A_code = ec; 1312 1313 /* do non-local goto to unwind stack and return from ocu_ */ 1314 1315 goto EXIT; 1316 1317 end exit; 1318 1319 EXIT: 1320 return; 1321 1322 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 1323 1324 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 1325 1326 1327 find_exp_word: 1328 proc (odp, /** pointer to ocu_data (in ) */ 1329 exp, /** expression value (in ) */ 1330 type, /** link type (in ) */ 1331 class, /** link class (in ) */ 1332 segname, /** segname string (in ) */ 1333 offsetname, /** offsetname string (in ) */ 1334 init_infop) /** init_info pointer (in ) */ 1335 returns (fixed bin); /** exp_word index (out) */ 1336 1337 /*** ****************************************************************/ 1338 /*** */ 1339 /*** Name: find_exp_word */ 1340 /*** Input: odp, exp, type, class, segname, offsetname, */ 1341 /*** init_infop */ 1342 /*** Function: looks for an expression_word matching the info */ 1343 /*** supplied and returns the index in the exp_word */ 1344 /*** table. If no matching expression_word exists, */ 1345 /*** it it created. */ 1346 /*** Output: exp_wordx */ 1347 /*** */ 1348 /*** ****************************************************************/ 1349 1350 /* parameters */ 1351 1352 dcl odp ptr parameter; 1353 dcl exp fixed bin parameter; 1354 dcl type fixed bin (3) parameter; 1355 dcl class fixed bin (3) parameter; 1356 dcl segname char (*) varying parameter; 1357 dcl offsetname char (*) varying parameter; 1358 dcl init_infop ptr parameter; 1359 1360 /* based */ 1361 1362 dcl 01 ewi aligned based (ewip), 1363 02 header aligned like exp_word_info.header, 1364 02 exp_wd dim (0 refer (ewi.N_exp_words)) 1365 like exp_word_entry; 1366 dcl 01 od aligned like ocu_data based (odp); 1367 1368 /* automatic */ 1369 1370 dcl ewip ptr automatic; 1371 dcl 01 expe aligned like exp_word_entry automatic; 1372 dcl expx fixed bin automatic; 1373 dcl type_pairx fixed bin automatic; 1374 1375 /* get a pointer to the expression word array */ 1376 1377 ewip = od.exp_word_infop; 1378 1379 /* find/create the type pair referenced */ 1380 1381 type_pairx = find_type_pair (odp, type, class, segname, offsetname, 1382 init_infop); 1383 1384 /* see if a matching expression word exists and return the index */ 1385 /* if one is found */ 1386 1387 expe.expression = exp; 1388 expe.type_pairx = type_pairx; 1389 expe.relp = 0; 1390 1391 do expx = 1 to ewi.N_exp_words; 1392 if unspec (ewi.exp_wd (expx)) = unspec (expe) 1393 then return (expx); 1394 end; 1395 1396 /* if not found, create a new expression word */ 1397 1398 expx, ewi.N_exp_words = ewi.N_exp_words + 1; 1399 1400 unspec (ewi.exp_wd (expx)) = unspec (expe); 1401 1402 return (expx); 1403 1404 end find_exp_word; 1405 1406 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 1407 1408 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 1409 1410 1411 find_type_pair: 1412 proc (odp, /** pointer to ocu_data (in ) */ 1413 type, /** link type (in ) */ 1414 class, /** link class (in ) */ 1415 segname, /** segname string (in ) */ 1416 offsetname, /** offsetname string (in ) */ 1417 init_infop) /** init info for link (in ) */ 1418 returns (fixed bin); /** type pair index (out) */ 1419 1420 /*** ****************************************************************/ 1421 /*** */ 1422 /*** Name: find_type_pair */ 1423 /*** Input: odp, type, class, segname, offsetname, init_infop */ 1424 /*** Function: finds a type pair matching the given criteria. */ 1425 /*** If no such type pair exists, create one. */ 1426 /*** Output: type_pairx */ 1427 /*** */ 1428 /*** ****************************************************************/ 1429 1430 /* parameters */ 1431 1432 dcl odp ptr parameter; 1433 dcl type fixed bin (3) parameter; 1434 dcl class fixed bin (3) parameter; 1435 dcl segname char (*) varying parameter; 1436 dcl offsetname char (*) varying parameter; 1437 dcl init_infop ptr parameter; 1438 1439 /* based */ 1440 1441 dcl 01 od aligned like ocu_data based (odp); 1442 dcl 01 tpi aligned based (tpip), 1443 02 header aligned like type_pair_info.header, 1444 02 type_pr dim (0 refer (tpi.N_type_pairs)) 1445 like type_pair_entry; 1446 1447 /* automatic */ 1448 1449 dcl tpip ptr automatic; 1450 dcl 01 type_paire aligned like type_pair_entry automatic; 1451 dcl type_pairx fixed bin automatic; 1452 1453 /* get a pointer to the type_pair array */ 1454 1455 tpip = od.type_pair_infop; 1456 1457 type_paire.type = type; 1458 1459 /* encode the refname value, either as a string relpointer, if the */ 1460 /* link is a LINK_REFNAME_BASE or LINK_REFNAME_OFFSETNAME link, or */ 1461 /* as the class for a LINK_SELF_BASE or LINK_SELF_OFFSETNAME link. */ 1462 1463 if type = LINK_REFNAME_BASE | type = LINK_REFNAME_OFFSETNAME 1464 then type_paire.segnamex = find_string (odp, segname); 1465 else type_paire.segnamex = class; 1466 1467 /* store the offsetname value sting index. This is only valid for */ 1468 /* LINK_SELF_OFFSETNAME and LINK_REFNAME_OFFSETNAME links. */ 1469 1470 if type = LINK_SELF_OFFSETNAME | type = LINK_REFNAME_OFFSETNAME 1471 then type_paire.offsetnamex = find_string (odp, offsetname); 1472 else type_paire.offsetnamex = 0; 1473 1474 /* if we have an init_info pointer, determine whether this is init */ 1475 /* info or a trap pair and generate the appropriate structure. */ 1476 1477 if init_infop ^= null 1478 then if type = LINK_SELF_OFFSETNAME 1479 then type_paire.init_infox = find_init_info (odp, init_infop); 1480 else type_paire.init_infox = find_trap_pair (odp, init_infop); 1481 else type_paire.init_infox = 0; 1482 1483 type_paire.relp = 0; 1484 1485 /* now that we have filled in all the fields, try to find a type */ 1486 /* pair that matches this description. Return the index if found */ 1487 1488 do type_pairx = 1 to tpi.N_type_pairs; 1489 if unspec (tpi.type_pr (type_pairx)) = unspec (type_paire) 1490 then return (type_pairx); 1491 end; 1492 1493 /* if not generate a new type pair and fill in the values */ 1494 1495 type_pairx, tpi.N_type_pairs = tpi.N_type_pairs + 1; 1496 1497 unspec (tpi.type_pr (type_pairx)) = unspec (type_paire); 1498 1499 return (type_pairx); 1500 1501 end find_type_pair; 1502 1503 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 1504 1505 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 1506 1507 1508 find_init_info: 1509 proc (odp, /** pointer to ocu_data (in ) */ 1510 init_infop) /** init info pointer (in ) */ 1511 returns (fixed bin); /** init table index (out) */ 1512 1513 /*** ****************************************************************/ 1514 /*** */ 1515 /*** Name: find_init_info */ 1516 /*** Input: odp, init_infop */ 1517 /*** Function: locates an init_info block matching the block */ 1518 /*** specified. If one does not exist, it is created. */ 1519 /*** Output: init_infox */ 1520 /*** */ 1521 /*** ****************************************************************/ 1522 1523 /* parameters */ 1524 1525 dcl odp ptr parameter; 1526 dcl init_infop ptr parameter; 1527 1528 /* based */ 1529 1530 dcl 01 ii aligned based (iip), 1531 02 header aligned like init_info.header, 1532 02 init dim (0 refer (ii.N_inits)) like init_entry; 1533 dcl 01 in_init aligned like link_init based (init_infop); 1534 dcl 01 in_init_copy aligned based (init_infop), 1535 02 header aligned like link_init_copy_info.header, 1536 02 initial_data dim (0 refer (in_init_copy.n_words)) bit (36); 1537 dcl 01 in_init_deferred aligned like link_init_deferred 1538 based (init_infop); 1539 dcl 01 in_init_template aligned based (init_infop), 1540 02 full_header aligned like init_list_template.full_header, 1541 02 template dim (0 refer 1542 (in_init_template.n_words_in_list)) bit (36); 1543 dcl init_str char (init_len) based (init_infop); 1544 dcl 01 od aligned like ocu_data based (odp); 1545 dcl 01 st_init aligned like link_init based (stored_initp); 1546 dcl 01 st_init_copy aligned based (stored_initp), 1547 02 header aligned like link_init_copy_info.header, 1548 02 initial_data dim (0 refer (st_init_copy.n_words)) bit (36); 1549 dcl 01 st_init_deferred aligned like link_init_deferred 1550 based (stored_initp); 1551 dcl 01 st_init_template aligned based (stored_initp), 1552 02 full_header aligned like init_list_template.full_header, 1553 02 template dim (0 refer 1554 (st_init_template.n_words_in_list)) bit (36); 1555 dcl stored_str char (stored_len) based (stored_initp); 1556 1557 /* automatic */ 1558 1559 dcl iip ptr automatic; 1560 dcl init_infox fixed bin automatic; 1561 dcl init_len fixed bin (21) automatic; 1562 dcl len fixed bin (18) automatic; 1563 dcl stored_initp ptr automatic; 1564 dcl stored_len fixed bin (21) automatic; 1565 1566 /* get a pointer to the init_info array */ 1567 1568 iip = od.init_infop; 1569 1570 /* first try to find an existing init_info matching the given one */ 1571 1572 do init_infox = 1 to ii.N_inits; 1573 1574 /* get a pointer to the current existing init_info */ 1575 1576 stored_initp = addwordno (od.init_segp, ii.init (init_infox).start); 1577 1578 /* figure out the lengths of the stored and given init infos and */ 1579 /* compare them by overlaying character strings */ 1580 1581 if (st_init.n_words = in_init.n_words) & (st_init.type = in_init.type) 1582 then do; 1583 stored_len = ii.init (init_infox).length * 4; 1584 init_len = currentsize (in_init) * 4; 1585 if in_init.type = INIT_DEFERRED 1586 then init_len = currentsize (in_init_deferred) * 4; 1587 else if in_init.type = INIT_LIST_TEMPLATE 1588 then init_len = currentsize (in_init_template) * 4; 1589 else if in_init.type = INIT_COPY_INFO 1590 then init_len = currentsize (in_init_copy) * 4; 1591 if init_len = stored_len 1592 then if stored_str = init_str 1593 then return (init_infox); 1594 end; 1595 end; 1596 1597 /* no matching init_info exists. Now we create one */ 1598 1599 stored_initp = addwordno (od.init_segp, ii.init_segl); 1600 init_infox, ii.N_inits = ii.N_inits + 1; 1601 ii.init (init_infox).start = ii.init_segl; 1602 1603 /* copy the init_info depending on the type */ 1604 1605 if in_init.type = INIT_LIST_TEMPLATE 1606 then do; 1607 st_init_template.n_words = in_init_template.n_words; 1608 st_init_template.type = in_init_template.type; 1609 st_init_template.n_words_in_list = in_init_template.n_words_in_list; 1610 st_init_template.template (*) = in_init_template.template (*); 1611 len = currentsize (in_init_template); 1612 end; 1613 else if in_init.type = INIT_COPY_INFO 1614 then do; 1615 st_init_copy.n_words = in_init_copy.n_words; 1616 st_init_copy.type = in_init_copy.type; 1617 st_init_copy.initial_data (*) = in_init_copy.initial_data (*); 1618 len = currentsize (in_init_copy); 1619 end; 1620 else if in_init.type = INIT_DEFERRED 1621 then do; 1622 st_init_deferred.n_words = in_init_deferred.n_words; 1623 st_init_deferred.type = in_init_deferred.type; 1624 st_init_deferred.target_relp = in_init_deferred.target_relp; 1625 st_init_deferred.link_relp = in_init_deferred.link_relp; 1626 len = currentsize (in_init_deferred); 1627 end; 1628 else do; 1629 st_init.n_words = in_init.n_words; 1630 st_init.type = in_init.type; 1631 len = currentsize (in_init); 1632 end; 1633 1634 /* adjust the size of the init_info seg and the array entry */ 1635 1636 ii.init (init_infox).length = len; 1637 ii.init_segl = ii.init_segl + len; 1638 1639 return (init_infox); 1640 1641 end find_init_info; 1642 1643 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 1644 1645 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 1646 1647 1648 find_trap_pair: 1649 proc (odp, /** pointer to ocu_data (in ) */ 1650 trapp) /** trap-pair block ptr (in ) */ 1651 returns (fixed bin); /** trap_pair index (out) */ 1652 1653 /*** ****************************************************************/ 1654 /*** */ 1655 /*** Name: find_trap_pair */ 1656 /*** Input: odp, trapp */ 1657 /*** Function: finds a trap pair matching the one given. If no */ 1658 /*** such trap_pair exists, it is created and the */ 1659 /*** index returned. */ 1660 /*** Output: trap_pairx */ 1661 /*** */ 1662 /*** ****************************************************************/ 1663 1664 /* parameters */ 1665 1666 dcl odp ptr parameter; 1667 dcl trapp ptr parameter; 1668 1669 /* based */ 1670 1671 dcl 01 od aligned like ocu_data based (odp); 1672 dcl 01 trap aligned like link_trap_pair based (trapp); 1673 dcl 01 trpi aligned based (trpip), 1674 02 header aligned like trap_pair_info.header, 1675 02 trap_pair dim (0 refer (trpi.N_trap_pairs)) 1676 like trap_pair_entry; 1677 1678 /* automatic */ 1679 1680 dcl trap_pairx fixed bin automatic; 1681 dcl trpip ptr automatic; 1682 1683 /* get a pointer to the trap_pair array */ 1684 1685 trpip = od.trap_pair_infop; 1686 1687 /* look for a matching existing trap pair and return the index if found */ 1688 1689 do trap_pairx = 1 to trpi.N_trap_pairs; 1690 if (trpi.trap_pair (trap_pairx).call_relp = trap.call_relp) & 1691 (trpi.trap_pair (trap_pairx).info_relp = trap.info_relp) 1692 then return (trap_pairx); 1693 end; 1694 1695 /* if not found, create the new trap_pair */ 1696 1697 trap_pairx, trpi.N_trap_pairs = trpi.N_trap_pairs + 1; 1698 1699 trpi.trap_pair (trap_pairx).call_relp = trap.call_relp; 1700 trpi.trap_pair (trap_pairx).info_relp = trap.info_relp; 1701 1702 return (trap_pairx); 1703 1704 end find_trap_pair; 1705 1706 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 1707 1708 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 1709 1710 1711 find_string: 1712 proc (odp, /** pointer to ocu_data (in ) */ 1713 string) /** string to find (in ) */ 1714 returns (fixed bin); /** stringmap index (out) */ 1715 1716 /*** ****************************************************************/ 1717 /*** */ 1718 /*** Name: find_string */ 1719 /*** Input: odp, string */ 1720 /*** Function: adds the string given to the definition stringmap */ 1721 /*** and returns the stringmap entry index. If the */ 1722 /*** string already exists in the stringmap, the index */ 1723 /*** of the existing entry is returned. */ 1724 /*** Output: stringmap_index */ 1725 /*** */ 1726 /*** ****************************************************************/ 1727 1728 /* parameters */ 1729 1730 dcl odp ptr parameter; 1731 dcl string char (*) varying parameter; 1732 1733 /* based */ 1734 1735 dcl 01 od aligned like ocu_data based (odp); 1736 dcl 01 sme aligned like string_map_entry based (smep); 1737 dcl 01 smi aligned based (smip), 1738 02 header aligned like string_map_info.header, 1739 02 string dim (0 refer (smi.N_strings)) 1740 like string_map_entry; 1741 1742 /* automatic */ 1743 1744 dcl smep ptr automatic; 1745 dcl smip ptr automatic; 1746 dcl stringmapx fixed bin automatic; 1747 1748 /* builtin */ 1749 1750 dcl length builtin; 1751 1752 /* get pointers to the string_map and string text segment */ 1753 1754 smip = od.string_map_infop; 1755 text_segp = od.string_segp; 1756 text_segl = smi.string_segl; 1757 1758 /* first try to locate the string in the stringmap */ 1759 1760 do stringmapx = 1 to smi.N_strings; 1761 smep = addr (smi.string (stringmapx)); 1762 if string = substr (text_seg, sme.start_offset, sme.length) 1763 then return (stringmapx); 1764 end; 1765 1766 /* if it isn't there, then we have to add it. */ 1767 1768 stringmapx, smi.N_strings = smi.N_strings + 1; 1769 1770 /* create the stringmap entry */ 1771 1772 smep = addr (smi.string (stringmapx)); 1773 sme.start_offset = text_segl + 1; 1774 sme.length = length (string); 1775 1776 /* add the actual string to the text segment */ 1777 1778 text_segl, smi.string_segl = text_segl + sme.length; 1779 1780 substr (text_seg, sme.start_offset, sme.length) = string; 1781 1782 /* return the stringmap offset */ 1783 1784 return (stringmapx); 1785 1786 end find_string; 1787 1788 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 1789 1790 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 1791 1792 1793 create_text: 1794 proc (odp, /** pointer to ocu_data (in ) */ 1795 reloc_infop); /** ptr to relinfo blk (out) */ 1796 1797 /*** ****************************************************************/ 1798 /*** */ 1799 /*** Name: create_text */ 1800 /*** Input: odp, reloc_infop */ 1801 /*** Function: copies the text section from the intermediate */ 1802 /*** into the object segment. Any references to the */ 1803 /*** section are relocated to take static section size */ 1804 /*** into account if the static section is in the */ 1805 /*** linkage section, and static relocation codes */ 1806 /*** converted to linkage relocation. */ 1807 /*** Output: reloc_infop */ 1808 /*** */ 1809 /*** ****************************************************************/ 1810 1811 /* parameters */ 1812 1813 dcl odp ptr parameter; 1814 dcl reloc_infop ptr parameter; 1815 1816 /* based */ 1817 1818 dcl 01 od aligned like ocu_data based (odp); 1819 dcl 01 si aligned based (sip), 1820 02 header aligned like static_info.header, 1821 02 static_word dim (0 refer (si.N_static_words)) bit (36); 1822 dcl 01 ti aligned based (tip), 1823 02 header aligned like text_info.header, 1824 02 text_word dim (0 refer (ti.N_text_words)) bit (36); 1825 1826 /* automatic */ 1827 1828 dcl abs_count fixed bin automatic; 1829 1830 /* get pointers to the required data structures */ 1831 1832 tip = od.text_infop; 1833 sip = od.static_infop; 1834 /* initialize the relocation info generation stuff */ 1835 1836 abs_count = 0; 1837 1838 /* copy each word into the actual text section */ 1839 1840 call install_words (addr (ti.text_word), od.text_relinfop, ti.N_text_words, 1841 si.N_static_words, reloc_infop, Rel_text, (ocu_data.target.segp), 1842 abs_count); 1843 1844 /* force the segment onto a doubleword boundary */ 1845 1846 if mod (ti.N_text_words, 2) ^= 0 1847 then do; 1848 call append_relinfo (reloc_infop, Rel_text, "aa", abs_count); 1849 od.lengths.text = ti.N_text_words + 1; 1850 end; 1851 else od.lengths.text = ti.N_text_words; 1852 1853 /* force any remaining absolute relinfo into the block */ 1854 1855 call append_relinfo (reloc_infop, Rel_text, " ", abs_count); 1856 1857 /* save the segment bit_count */ 1858 1859 od.target.bc = od.lengths.text * 36; 1860 1861 end create_text; 1862 1863 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 1864 1865 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 1866 1867 1868 create_defs: 1869 proc (odp, /** pointer to ocu_data (in ) */ 1870 reloc_infop); /** pointer to relinfo (i/o) */ 1871 1872 /*** ****************************************************************/ 1873 /*** */ 1874 /*** Name: create_defs */ 1875 /*** Input: odp, reloc_infop */ 1876 /*** Function: creates the definition section of the object */ 1877 /*** segment. This is done is a set of discrete steps */ 1878 /*** - creation of the definition header */ 1879 /*** - installation of the definition list */ 1880 /*** - installation of the stringmap */ 1881 /*** - rescan of the def list to patch in stringmap */ 1882 /*** relpointers */ 1883 /*** - threading of the definition list */ 1884 /*** - installation of the init_infos */ 1885 /*** - installation of the trap_pairs */ 1886 /*** - installation of the type_pairs */ 1887 /*** - installation of the expression_words */ 1888 /*** - installation of the msf_map */ 1889 /*** - creation of the definiiton hash_table */ 1890 /*** Output: reloc_infop */ 1891 /*** */ 1892 /*** ****************************************************************/ 1893 1894 /* parameters */ 1895 1896 dcl odp ptr parameter; 1897 dcl reloc_infop ptr parameter; 1898 1899 /* based */ 1900 1901 dcl 01 acc aligned based (accp), 1902 02 count fixed bin (9) unsigned unaligned, 1903 02 string char (0 refer (acc.count)) unaligned; 1904 dcl 01 defn aligned like definition based (defnp); 1905 dcl 01 dh aligned like definition_header based (dhp); 1906 dcl 01 di aligned based (dip), 1907 02 header aligned like def_info.header, 1908 02 def dim (0 refer (di.N_defs)) like def_entry; 1909 dcl 01 ewi aligned based (ewip), 1910 02 header aligned like exp_word_info.header, 1911 02 exp_wd dim (0 refer (ewi.N_exp_words)) 1912 like exp_word_entry; 1913 dcl 01 expr aligned like exp_word based (exprp); 1914 dcl 01 ii aligned based (iip), 1915 02 header aligned like init_info.header, 1916 02 init dim (0 refer (ii.N_inits)) like init_entry; 1917 dcl 01 lte aligned based (ltep), 1918 02 header aligned like template_entry.header, 1919 02 datum bit (0 refer (lte.n_bits)); 1920 dcl 01 mm aligned like msf_map based (mmp); 1921 dcl new_init_str char (init_strl) based (new_init_strp); 1922 dcl 01 new_type_pair aligned like type_pair based (new_type_pairp); 1923 dcl obj_init_str char (init_strl) based (obj_init_strp); 1924 dcl 01 od aligned like ocu_data based (odp); 1925 dcl 01 pit aligned like pointer_init_template based (pitp); 1926 dcl 01 prev_sn aligned like segname_definition 1927 based (prev_snp); 1928 dcl 01 si aligned based (sip), 1929 02 header aligned like static_info.header, 1930 02 static_word dim (0 refer (si.N_static_words)) bit (36); 1931 dcl 01 smi aligned based (smip), 1932 02 header aligned like string_map_info.header, 1933 02 string dim (0 refer (smi.N_strings)) 1934 like string_map_entry; 1935 dcl 01 sn aligned like segname_definition based (snp); 1936 dcl 01 tpi aligned based (tpip), 1937 02 header aligned like type_pair_info.header, 1938 02 type_pr dim (0 refer (tpi.N_type_pairs)) 1939 like type_pair_entry; 1940 dcl 01 trap_pr aligned like link_trap_pair based (trap_prp); 1941 dcl 01 trpi aligned based (trpip), 1942 02 header aligned like trap_pair_info.header, 1943 02 trap_pair dim (0 refer (trpi.N_trap_pairs)) 1944 like trap_pair_entry; 1945 dcl word bit (36) aligned based (wordp); 1946 1947 /* automatic */ 1948 1949 dcl abs_count fixed bin automatic; 1950 dcl acc_relp fixed bin (18) unsigned automatic; 1951 dcl accp ptr automatic; 1952 dcl backward_relp fixed bin (18) unsigned automatic; 1953 dcl block_relp fixed bin (18) unsigned automatic; 1954 dcl def_relp fixed bin (18) unsigned automatic; 1955 dcl defnp ptr automatic; 1956 dcl dhp ptr automatic; 1957 dcl dip ptr automatic; 1958 dcl ewip ptr automatic; 1959 dcl exprp ptr automatic; 1960 dcl forward_relp fixed bin (18) unsigned automatic; 1961 dcl iip ptr automatic; 1962 dcl init_segp ptr automatic; 1963 dcl init_segl fixed bin (18) automatic; 1964 dcl init_strl fixed bin (21) automatic; 1965 dcl ltep ptr automatic; 1966 dcl n_words fixed bin (18) automatic; 1967 dcl new_block bit (1) automatic; 1968 dcl new_init_strp ptr automatic; 1969 dcl new_type_pairp ptr automatic; 1970 dcl obj_init_strp ptr automatic; 1971 dcl pitp ptr automatic; 1972 dcl prev_snp ptr automatic; 1973 dcl relchrs char (10) varying automatic; 1974 dcl relpair char (2) varying automatic; 1975 dcl set_first bit (1) automatic; 1976 dcl sip ptr automatic; 1977 dcl smip ptr automatic; 1978 dcl snp ptr automatic; 1979 dcl tpip ptr automatic; 1980 dcl tpx fixed bin automatic; 1981 dcl trap_prp ptr automatic; 1982 dcl trpip ptr automatic; 1983 dcl mmp ptr automatic; 1984 dcl wordp ptr automatic; 1985 dcl zero_relp fixed bin (18) unsigned automatic; 1986 1987 /* builtin */ 1988 1989 dcl string builtin; 1990 1991 /* set up the structures to be used */ 1992 1993 dip = od.def_infop; 1994 smip = od.string_map_infop; 1995 iip = od.init_infop; 1996 trpip = od.trap_pair_infop; 1997 tpip = od.type_pair_infop; 1998 ewip = od.exp_word_infop; 1999 sip = od.static_infop; 2000 2001 /* initialize the relocation generation variables */ 2002 2003 abs_count = 0; 2004 2005 /* create the defintion_header */ 2006 2007 dhp = addwordno (od.target.segp, od.target.bc / 36); 2008 dh.def_list_relp = currentsize (dh); 2009 string (dh.flags) = ""b; 2010 dh.flags.new = true; 2011 dh.flags.ignore = true; 2012 2013 od.lengths.defs = currentsize (dh); 2014 2015 /* generate the definition header relinfo */ 2016 2017 if ocu_data.msf_info.component_count > 0 2018 then call append_relinfo (reloc_infop, Rel_defs, "dd", abs_count); 2019 else call append_relinfo (reloc_infop, Rel_defs, "da", abs_count); 2020 if ocu_data.flags.no_hash_table 2021 then call append_relinfo (reloc_infop, Rel_defs, "aa", abs_count); 2022 else call append_relinfo (reloc_infop, Rel_defs, "da", abs_count); 2023 2024 /* create the definition list */ 2025 2026 defnp = addwordno (dhp, dh.def_list_relp); 2027 zero_relp = currentsize (dh) + N_defs * currentsize (defn); 2028 2029 backward_relp = zero_relp; 2030 forward_relp = dh.def_list_relp + currentsize (defn); 2031 2032 do i = 1 to di.N_defs; 2033 2034 /* set up the basic threading */ 2035 2036 defn.forward_relp = forward_relp; 2037 defn.backward_relp = backward_relp; 2038 2039 /* adjust the thread values for the next definition */ 2040 2041 backward_relp = forward_relp - currentsize (defn); 2042 forward_relp = forward_relp + currentsize (defn); 2043 2044 /* adjust the section size */ 2045 2046 od.lengths.defs = od.lengths.defs + currentsize (defn); 2047 2048 /* set the values for the definition */ 2049 2050 defn.class = di.def (i).class; 2051 string (defn.flags) = ""b; 2052 defn.flags.new = true; 2053 defn.flags.ignore = di.def (i).flags.ignore; 2054 defn.flags.entry = di.def (i).flags.entry; 2055 defn.flags.retain = di.def (i).flags.retain; 2056 defn.flags.indirect = di.def (i).flags.indirect; 2057 defn.name_relp = di.def (i).strx; 2058 2059 /* set up the relocation info */ 2060 2061 if di.def (i).class = 3 2062 then call append_relinfo (reloc_infop, Rel_defs, "dddadd", abs_count); 2063 else do; 2064 2065 /* set the thing relpointer */ 2066 2067 defn.thing_relp = di.def (i).offset; 2068 2069 /* extract the relocation info and relocate link references */ 2070 2071 relpair = class_relinfo (di.def (i).class) || "a"; 2072 wordp = addr (defn.thing_relp); 2073 call relocate_link_ref (word, relpair, si.N_static_words); 2074 2075 /* if the reference is to the static section and we have */ 2076 /* combined static, then convert the definition class to link */ 2077 2078 if (relpair = "ia" | relpair = "8a") & ^od.flags.separate_static 2079 then defn.class = CLASS_LINKAGE; 2080 2081 /* append the relinfo to the relinfo block */ 2082 2083 relchrs = "dd" || relpair || "dd"; 2084 call append_relinfo (reloc_infop, Rel_defs, relchrs, abs_count); 2085 end; 2086 defnp = addwordno (defnp, currentsize (defn)); 2087 end; 2088 2089 /* leave space for the zero word */ 2090 2091 od.lengths.defs = od.lengths.defs + 1; 2092 text_segp = od.string_segp; 2093 text_segl = smi.string_segl; 2094 call append_relinfo (reloc_infop, Rel_defs, "aa", abs_count); 2095 2096 /* create the stringmap */ 2097 2098 acc_relp = od.lengths.defs; 2099 2100 do i = 1 to smi.N_strings; 2101 2102 /* copy the count and string into the object segment */ 2103 2104 accp = addwordno (dhp, acc_relp); 2105 acc.count = smi.string (i).length; 2106 acc.string = substr (text_seg, smi.string (i).start_offset, 2107 smi.string (i).length); 2108 smi.string (i).relp = acc_relp; 2109 2110 /* determine how big this thing is */ 2111 2112 n_words = currentsize (acc); 2113 2114 /* synthesize the relinfo */ 2115 2116 call append_relinfo (reloc_infop, Rel_defs, 2117 copy ("a", n_words + n_words), abs_count); 2118 acc_relp = acc_relp + n_words; 2119 2120 /* adjust the section length */ 2121 2122 od.lengths.defs = od.lengths.defs + n_words; 2123 end; 2124 2125 /* backpatch the stringmap relpointers into the definition list */ 2126 2127 defnp = addwordno (dhp, dh.def_list_relp); 2128 2129 do i = 1 to di.N_defs; 2130 defn.name_relp = smi.string (defn.name_relp).relp; 2131 defnp = addwordno (dhp, defn.forward_relp); 2132 end; 2133 2134 /* now thread the definition list */ 2135 2136 /* first make a pass setting the segname_relp values for each */ 2137 /* non-type-3 definition to point back to the first type-3 def in */ 2138 /* the block. */ 2139 2140 block_relp = 0; 2141 new_block = true; 2142 2143 def_relp = dh.def_list_relp; 2144 defnp = addwordno (dhp, def_relp); 2145 2146 do while ((defn.forward_relp ^= 0) | (defn.backward_relp ^= 0)); 2147 2148 /* if this is the first type 3 in the block, remember the relp */ 2149 2150 if (defn.class = 3) & new_block 2151 then block_relp = def_relp; 2152 2153 /* if this is not type 3, then set the segname relp */ 2154 2155 else if defn.class ^= 3 2156 then do; 2157 defn.segname_relp = block_relp; 2158 new_block = true; 2159 end; 2160 2161 /* go to the next definition */ 2162 2163 def_relp = defn.forward_relp; 2164 defnp = addwordno (dhp, def_relp); 2165 end; 2166 2167 /* now we make another pass, setting the first_relp and */ 2168 /* next_segname_relp values in each type-3 definition. */ 2169 2170 def_relp = dh.def_list_relp; 2171 snp = addwordno (dhp, def_relp); 2172 2173 prev_snp = null; 2174 2175 do while ((sn.forward_relp ^= 0) | (sn.backward_relp ^= 0)); 2176 2177 /* set the next_segname_relp */ 2178 2179 if (sn.class = 3) & prev_snp ^= null 2180 then prev_sn.next_segname_relp = def_relp; 2181 2182 if sn.class = 3 2183 then do; 2184 prev_snp = addwordno (dhp, def_relp); 2185 set_first = true; 2186 end; 2187 2188 /* now set the first_relp values for the segnames in the block */ 2189 2190 if (sn.class ^= 3) & set_first 2191 then do; 2192 2193 /* save the current definition pointer */ 2194 2195 defnp = snp; 2196 2197 /* find the first segname in the block */ 2198 2199 snp = addwordno (dhp, defn.segname_relp); 2200 2201 /* scan forward, setting the first_relp until we find a */ 2202 /* non-class-3 definition */ 2203 2204 do while (sn.class = 3); 2205 sn.first_relp = def_relp; 2206 snp = addwordno (dhp, sn.forward_relp); 2207 end; 2208 2209 /* restore the current definition */ 2210 2211 snp = defnp; 2212 2213 /* flag that the next type 3 starts a new block */ 2214 2215 set_first = false; 2216 end; 2217 2218 def_relp = sn.forward_relp; 2219 snp = addwordno (dhp, def_relp); 2220 end; 2221 2222 /* set the next_segname relp on the last class-3 definition, and */ 2223 /* set the first_relp values if the last block had no non-class-3 */ 2224 /* definitions. */ 2225 2226 if prev_snp ^= null 2227 then do; 2228 prev_sn.next_segname_relp = zero_relp; 2229 if set_first 2230 then 2231 do while ((prev_sn.first_relp = 0) & 2232 (prev_sn.backward_relp ^= 0)); 2233 prev_sn.first_relp = zero_relp; 2234 prev_snp = addwordno (dhp, prev_sn.backward_relp); 2235 end; 2236 end; 2237 2238 /* install any init_infos into the object segment */ 2239 2240 init_segp = od.init_segp; 2241 init_segl = ii.init_segl; 2242 2243 do i = 1 to ii.N_inits; 2244 2245 /* save the relpointer */ 2246 2247 ii.init (i).relp = od.lengths.defs; 2248 od.lengths.defs = od.lengths.defs + ii.init (i).length; 2249 2250 /* get pointers to the object segment location and existing init */ 2251 /* info structures for copying */ 2252 2253 obj_init_strp = addwordno (dhp, ii.init (i).relp); 2254 new_init_strp = addwordno (init_segp, ii.init (i).start); 2255 2256 /* calculate the length if treated as as character string */ 2257 2258 init_strl = ii.init (i).length * 4; 2259 2260 /* copy character string overlays */ 2261 2262 obj_init_str = new_init_str; 2263 2264 /* the deferred initialization contains a link relpointer, which */ 2265 /* must be relocated for it to work. So we check for that type */ 2266 /* of init_info and relocate the link reference. */ 2267 2268 if obj_init_strp -> link_init.type = INIT_DEFERRED 2269 then call relocate_link_ref ( 2270 addr (obj_init_strp->link_init_deferred.target_relp) -> word, 2271 "2a", si.N_static_words); 2272 2273 /* if the init info is a list template, it may have pointer init */ 2274 /* templates containing a reference to a link which mist also be */ 2275 /* relocated. */ 2276 2277 else if obj_init_strp -> link_init.type = INIT_LIST_TEMPLATE 2278 then do; 2279 ltep = addr (obj_init_strp -> link_init_list_template.template); 2280 2281 do while (lte.n_bits ^= 0); 2282 2283 /* see if the template is for a pointer init */ 2284 2285 if lte.init_type ^= 0 2286 then do; 2287 2288 /* get a pointer to the pointer datum structure */ 2289 2290 pitp = addr (lte.datum); 2291 2292 if pit.ptr_type = CLASS_LINKAGE 2293 then call relocate_link_ref (pitp -> word, "a2", 2294 si.N_static_words); 2295 end; 2296 2297 ltep = addwordno (ltep, currentsize (lte)); 2298 end; 2299 end; 2300 2301 /* generate and append the relinfo */ 2302 2303 call append_relinfo (reloc_infop, Rel_defs, 2304 copy ("a", ii.init (i).length * 2), abs_count); 2305 end; 2306 2307 /* install any trap pairs into the object segment */ 2308 2309 do i = 1 to trpi.N_trap_pairs; 2310 trap_prp = addwordno (dhp, od.lengths.defs); 2311 trap_pr.call_relp = trpi.trap_pair (i).call_relp; 2312 trap_pr.info_relp = trpi.trap_pair (i).info_relp; 2313 2314 /* generate the relinfo for the trap word */ 2315 2316 if trap_pr.call_relp = 0 2317 then substr (relpair, 1, 1) = "a"; 2318 else substr (relpair, 1, 1) = "2"; 2319 2320 if trap_pr.info_relp = 0 2321 then substr (relpair, 2, 1) = "a"; 2322 else substr (relpair, 2, 1) = "2"; 2323 2324 /* relocate any link references */ 2325 2326 wordp = trap_prp; 2327 call relocate_link_ref (word, relpair, si.N_static_words); 2328 2329 /* append the relinfo to the relinfo block */ 2330 2331 call append_relinfo (reloc_infop, Rel_defs, relpair, abs_count); 2332 2333 /* and grow the definition section */ 2334 2335 od.lengths.defs = od.lengths.defs + currentsize (trap_pr); 2336 end; 2337 2338 /* now install the type pairs into the object segment */ 2339 2340 do i = 1 to tpi.N_type_pairs; 2341 2342 /* set the relp of the type pair block */ 2343 2344 tpi.type_pr (i).relp = od.lengths.defs; 2345 2346 /* get a pointer to the new type pair */ 2347 2348 new_type_pairp = addwordno (dhp, od.lengths.defs); 2349 od.lengths.defs = od.lengths.defs + currentsize (new_type_pair); 2350 2351 /* generate the relinfo depending on the type since the fields */ 2352 /* vary with the type value. */ 2353 2354 relchrs = "a"; 2355 new_type_pair.type = tpi.type_pr (i).type; 2356 2357 /* decode the offsetname */ 2358 2359 if (new_type_pair.type = 1) | (new_type_pair.type = 3) 2360 then do; 2361 new_type_pair.offsetname_relp = 0; 2362 relchrs = relchrs || "a"; 2363 end; 2364 else do; 2365 new_type_pair.offsetname_relp = 2366 smi.string (tpi.type_pr (i).offsetnamex).relp; 2367 relchrs = relchrs || "d"; 2368 end; 2369 2370 /* decode the segname */ 2371 2372 if (new_type_pair.type = 1) | (new_type_pair.type = 5) 2373 then do; 2374 2375 /* convert Self-Base and Self-Offsetname links to static to */ 2376 /* linkage references if there is no separate static section */ 2377 2378 if tpi.type_pr (i).segnamex = SECTION_STATIC & 2379 ^od.flags.separate_static 2380 then new_type_pair.segname_relp = SECTION_LINK; 2381 else new_type_pair.segname_relp = tpi.type_pr (i).segnamex; 2382 relchrs = relchrs || "a"; 2383 end; 2384 else do; 2385 new_type_pair.segname_relp = 2386 smi.string (tpi.type_pr (i).segnamex).relp; 2387 relchrs = relchrs || "d"; 2388 end; 2389 2390 /* decode the init_info value */ 2391 2392 if tpi.type_pr (i).init_infox ^= 0 2393 then do; 2394 if (new_type_pair.type = 5) 2395 then new_type_pair.trap_relp = 2396 ii.init (tpi.type_pr (i).init_infox).relp; 2397 else new_type_pair.trap_relp = 2398 trpi.trap_pair (tpi.type_pr (i).init_infox).relp; 2399 relchrs = relchrs || "d"; 2400 end; 2401 else relchrs = relchrs || "a"; 2402 2403 /* add the generated relinfo to the relinfo block */ 2404 2405 call append_relinfo (reloc_infop, Rel_defs, relchrs, abs_count); 2406 end; 2407 2408 /* now create the expression words */ 2409 2410 do i = 1 to ewi.N_exp_words; 2411 2412 /* set the relp value */ 2413 2414 ewi.exp_wd (i).relp = od.lengths.defs; 2415 2416 /* get a pointer to the new expression word */ 2417 2418 exprp = addwordno (dhp, od.lengths.defs); 2419 od.lengths.defs = od.lengths.defs + currentsize (expr); 2420 2421 /* set the type_relp and expression values */ 2422 2423 tpx = ewi.exp_wd (i).type_pairx; 2424 2425 expr.type_relp = tpi.type_pr (tpx).relp; 2426 expr.expression = ewi.exp_wd (i).expression; 2427 2428 /* if the link is a self-base link to the linkage section, then */ 2429 /* we want to relocate the expression value to account for the */ 2430 /* insertion of the static section. If it is a self-base link to */ 2431 /* static, we must convert it to a self-base link to linkage with */ 2432 /* an appropriately adjusted expression value. */ 2433 2434 if tpi.type_pr (tpx).type = LINK_SELF_BASE 2435 then do; 2436 if tpi.type_pr (tpx).segnamex = SECTION_LINK 2437 then call relocate_link_ref (exprp -> word, "d2", 2438 si.N_static_words); 2439 else if tpi.type_pr (tpx).segnamex = SECTION_STATIC 2440 then call relocate_link_ref (exprp -> word, "d8", 2441 si.N_static_words); 2442 end; 2443 2444 /* append the relinfo to the defs relinfo block */ 2445 2446 call append_relinfo (reloc_infop, Rel_defs, "da", abs_count); 2447 end; 2448 2449 /* generate the msf_map (if any) */ 2450 2451 if ocu_data.msf_info.component_count > 0 2452 then do; 2453 2454 /* get a pointer to the new msf_map */ 2455 2456 mmp = addwordno (dhp, od.lengths.defs); 2457 2458 /* patch the relpointer into the definition header */ 2459 2460 dh.msf_map_relp = od.lengths.defs; 2461 od.lengths.defs = od.lengths.defs + currentsize (mm); 2462 2463 /* set the values for the component and count */ 2464 2465 mm.version = msf_map_version_1; 2466 mm.component_count = od.msf_info.component_count; 2467 mm.my_component = od.msf_info.my_component; 2468 2469 /* and generate relinfo */ 2470 2471 call append_relinfo (reloc_infop, Rel_defs, "aaaaaaaa", abs_count); 2472 end; 2473 2474 /* now create the definition hash_table */ 2475 2476 if ^od.flags.no_hash_table 2477 then call create_hash_table (dhp, dip, smip, od.lengths.defs); 2478 2479 /* force the segment onto a doubleword boundary */ 2480 2481 if mod (od.lengths.text + od.lengths.defs, 2) ^= 0 2482 then do; 2483 call append_relinfo (reloc_infop, Rel_defs, "aa", abs_count); 2484 od.lengths.defs = od.lengths.defs + 1; 2485 end; 2486 2487 /* finish off the relinfo block */ 2488 2489 call append_relinfo (reloc_infop, Rel_defs, " ", abs_count); 2490 2491 /* set the new bit count */ 2492 2493 od.target.bc = od.target.bc + 36 * od.lengths.defs; 2494 2495 end create_defs; 2496 2497 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 2498 2499 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 2500 2501 2502 create_link: 2503 proc (odp, /** pointer to ocu_data (in ) */ 2504 reloc_infop); /** pointer to relinfo (i/o) */ 2505 2506 /*** ****************************************************************/ 2507 /*** */ 2508 /*** Name: create_link */ 2509 /*** Input: reloc_info */ 2510 /*** Function: creates the linkage section of the new object */ 2511 /*** segment. */ 2512 /*** Output: reloc_info */ 2513 /*** */ 2514 /*** ****************************************************************/ 2515 2516 /* parameters */ 2517 2518 dcl odp ptr parameter; 2519 dcl reloc_infop ptr parameter; 2520 2521 /* based */ 2522 2523 dcl 01 ewi aligned based (ewip), 2524 02 header aligned like exp_word_info.header, 2525 02 exp_wd dim (0 refer (ewi.N_exp_words)) 2526 like exp_word_entry; 2527 dcl 01 frt aligned based (frtp), 2528 02 decl_vers fixed bin, 2529 02 n_traps fixed bin, 2530 02 trap_array dim (0 refer (frt.n_traps)) 2531 like fr_traps.trap_array; 2532 dcl 01 frti aligned based (frtip), 2533 02 header aligned like firstref_trap_info.header, 2534 02 trap dim (0 refer (frti.N_traps)) 2535 like firstref_trap_entry; 2536 dcl 01 li aligned based (lip), 2537 02 header aligned like link_info.header, 2538 02 link dim (0 refer (li.N_links)) like link_entry; 2539 dcl 01 lk aligned like object_link based (lkp); 2540 dcl new_stat_str char (stat_strl) based (new_stat_strp); 2541 dcl obj_stat_str char (stat_strl) based (obj_stat_strp); 2542 dcl 01 od aligned like ocu_data based (odp); 2543 dcl 01 si aligned based (sip), 2544 02 header aligned like static_info.header, 2545 02 static_word dim (0 refer (si.N_static_words)) bit (36); 2546 dcl 01 partial_lk aligned like partial_link based (partial_lkp); 2547 dcl 01 vlh aligned like virgin_linkage_header based (vlhp); 2548 dcl word bit (36) aligned based (wordp); 2549 2550 /* automatic */ 2551 2552 dcl abs_count fixed bin automatic; 2553 dcl ewip ptr automatic; 2554 dcl frtip ptr automatic; 2555 dcl frtp ptr automatic; 2556 dcl lip ptr automatic; 2557 dcl lkp ptr automatic; 2558 dcl new_stat_strp ptr automatic; 2559 dcl obj_stat_strp ptr automatic; 2560 dcl relchars char (32) varying automatic; 2561 dcl relpair char (2) varying automatic; 2562 dcl sip ptr automatic; 2563 dcl stat_strl fixed bin (21) automatic; 2564 dcl static_size fixed bin (18) automatic; 2565 dcl vlhp ptr automatic; 2566 dcl partial_lkp ptr automatic; 2567 dcl wordp ptr automatic; 2568 2569 /* builtin */ 2570 2571 dcl currentsize builtin; 2572 2573 /* get pointers to the structures to be used */ 2574 2575 sip = od.static_infop; 2576 lip = od.link_infop; 2577 frtip = od.firstref_trap_infop; 2578 ewip = od.exp_word_infop; 2579 2580 /* initialize the relocation generation variables */ 2581 2582 abs_count = 0; 2583 2584 /* create the linkage header */ 2585 2586 vlhp = addwordno (od.target.segp, od.target.bc / 36); 2587 2588 relchars = "aataaaaaaaaa22aa"; 2589 2590 vlh.pad = ""b; 2591 vlh.defs_in_link = ""b; 2592 vlh.def_offset = od.lengths.text; 2593 vlh.filled_in_later = ""b; 2594 vlh.static_length = si.N_static_words; 2595 vlh.link_begin = currentsize (vlh); 2596 vlh.linkage_section_lng = currentsize (vlh) + N_links * currentsize (lk); 2597 2598 /* adjust the header for static in linkage */ 2599 2600 if ^od.flags.separate_static 2601 then do; 2602 static_size = si.N_static_words + mod (si.N_static_words, 2); 2603 vlh.link_begin = vlh.link_begin + static_size; 2604 vlh.linkage_section_lng = vlh.linkage_section_lng + static_size; 2605 end; 2606 2607 /* adjust the header for the presence of firstref traps */ 2608 2609 if frti.N_traps > 0 2610 then do; 2611 vlh.first_ref_relp = vlh.linkage_section_lng; 2612 substr (relchars, 4, 1) = "2"; 2613 vlh.linkage_section_lng = vlh.linkage_section_lng + frti.N_traps + 2; 2614 end; 2615 2616 /* add the relocation info for the linkage header */ 2617 2618 call append_relinfo (reloc_infop, Rel_link, relchars, abs_count); 2619 od.lengths.link = currentsize (vlh); 2620 2621 /* if the static section is in the linkage section, copy it now */ 2622 2623 if ^od.flags.separate_static & si.N_static_words > 0 2624 then do; 2625 obj_stat_strp = addwordno (vlhp, od.lengths.link); 2626 new_stat_strp = addr (static_word (1)); 2627 stat_strl = si.N_static_words * 4; 2628 obj_stat_str = new_stat_str; 2629 call append_relinfo (reloc_infop, Rel_link, 2630 copy ("a", static_size * 2), abs_count); 2631 od.lengths.link = od.lengths.link + static_size; 2632 od.lengths.stat = si.N_static_words; 2633 end; 2634 2635 /* now copy the link array */ 2636 2637 do i = 1 to li.N_links; 2638 if li.link (i).exp_wordx = 0 2639 then do; /* emit a partial link */ 2640 2641 /* make sure that a msf_map was present */ 2642 2643 if od.msf_info.component_count = 0 2644 then call sub_err_ (error_table_$improper_data_format, "format", 2645 ACTION_CANT_RESTART, null, 0, 2646 "^/Partial links cannot be emitted " || 2647 "without an msf_map."); 2648 2649 /* make sure the given component number is in range */ 2650 2651 if li.link (i).component > od.msf_info.component_count 2652 then call sub_err_ (error_table_$improper_data_format, "format", 2653 ACTION_CANT_RESTART, null, 0, 2654 "^/Partial link refers to component " || 2655 "outside the range in the msf_map."); 2656 2657 partial_lkp = addwordno (vlhp, od.lengths.link); 2658 partial_lk.type = li.link (i).type; 2659 partial_lk.component = li.link (i).component; 2660 partial_lk.mbz1 = ""b; 2661 partial_lk.tag = FAULT_TAG_3; 2662 partial_lk.offset = li.link (i).offset; 2663 partial_lk.mbz2 = ""b; 2664 partial_lk.bit_offset = 0; 2665 partial_lk.mbz3 = ""b; 2666 partial_lk.modifier = li.link (i).modifier; 2667 call append_relinfo (reloc_infop, Rel_link, "aaaa", abs_count); 2668 od.lengths.link = od.lengths.link + currentsize (partial_lk); 2669 end; 2670 else do; /* emit a normal link */ 2671 lkp = addwordno (vlhp, od.lengths.link); 2672 lk.header_relp = -od.lengths.link; 2673 lk.ringno = 0; 2674 lk.mbz = ""b; 2675 lk.run_depth = 0; 2676 lk.tag = FAULT_TAG_2; 2677 lk.expression_relp = ewi.exp_wd (li.link (i).exp_wordx).relp; 2678 lk.mbz2 = ""b; 2679 lk.modifier = li.link (i).modifier; 2680 call append_relinfo (reloc_infop, Rel_link, "iada", abs_count); 2681 od.lengths.link = od.lengths.link + currentsize (lk); 2682 end; 2683 end; 2684 2685 /* if there are firstref traps to be added, add them */ 2686 2687 if frti.N_traps > 0 2688 then do; 2689 2690 /* emit the header for the firstref trap block */ 2691 2692 frtp = addwordno (vlhp, vlh.first_ref_relp); 2693 frt.decl_vers = FR_TRAPS_VERSION_1; 2694 frt.n_traps = frti.N_traps; 2695 od.lengths.link = od.lengths.link + currentsize (frt); 2696 call append_relinfo (reloc_infop, Rel_link, "aaaa", abs_count); 2697 2698 /* copy the trap array */ 2699 2700 do i = 1 to frti.N_traps; 2701 frt.trap_array (i).call_relp = frti.trap (i).call_relp; 2702 frt.trap_array (i).info_relp = frti.trap (i).info_relp; 2703 wordp = addr (frt.trap_array (i)); 2704 relpair = "22"; 2705 2706 /* adjust the relinfo for zero info relp values */ 2707 2708 if frt.trap_array (i).info_relp = 0 2709 then relpair = "2a"; 2710 2711 /* relocate the link references */ 2712 2713 call relocate_link_ref (word, relpair, si.N_static_words); 2714 call append_relinfo (reloc_infop, Rel_link, relpair, abs_count); 2715 end; 2716 end; 2717 2718 /* force the segment to a doubleword boundary */ 2719 2720 if mod (od.lengths.link, 2) ^= 0 2721 then do; 2722 call append_relinfo (reloc_infop, Rel_link, "aa", abs_count); 2723 od.lengths.link = od.lengths.link + 1; 2724 end; 2725 2726 /* clean up the relocation info */ 2727 2728 call append_relinfo (reloc_infop, Rel_link, " ", abs_count); 2729 2730 /* set the new bit count */ 2731 2732 od.target.bc = od.target.bc + 36 * od.lengths.link; 2733 2734 end create_link; 2735 2736 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 2737 2738 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 2739 2740 2741 create_stat: 2742 proc (odp); /** pointer to ocu_data (in ) */ 2743 2744 /*** ****************************************************************/ 2745 /*** */ 2746 /*** Name: create_stat */ 2747 /*** Input: odp */ 2748 /*** Function: creates the static section of the new object */ 2749 /*** segment if the new object is to have a separate */ 2750 /*** static section. */ 2751 /*** Output: none */ 2752 /*** */ 2753 /*** ****************************************************************/ 2754 2755 /* parameters */ 2756 2757 dcl odp ptr parameter; 2758 2759 /* based */ 2760 2761 dcl obj_stat_str char (stat_strl) based (obj_stat_strp); 2762 dcl 01 od aligned like ocu_data based (odp); 2763 dcl new_stat_str char (stat_strl) based (new_stat_strp); 2764 dcl 01 si aligned based (sip), 2765 02 header aligned like static_info.header, 2766 02 static_word dim (0 refer (si.N_static_words)) bit (36); 2767 2768 /* automatic */ 2769 2770 dcl sip ptr automatic; 2771 dcl stat_strl fixed bin (21) automatic; 2772 dcl obj_stat_strp ptr automatic; 2773 dcl new_stat_strp ptr automatic; 2774 2775 /* get a pointer to the static section info structure */ 2776 2777 sip = od.static_infop; 2778 2779 /* save the length */ 2780 2781 od.lengths.stat = si.N_static_words; 2782 2783 /* if the static is in linkage, just return */ 2784 2785 if ^od.flags.separate_static | (si.N_static_words = 0) 2786 then return; 2787 2788 /* copy the static section into the object */ 2789 2790 obj_stat_strp = addwordno (od.target.segp, od.target.bc / 36); 2791 new_stat_strp = addr (si.static_word (1)); 2792 stat_strl = si.N_static_words * 4; 2793 2794 obj_stat_str = new_stat_str; 2795 2796 end create_stat; 2797 2798 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 2799 2800 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 2801 2802 2803 create_symb: 2804 proc (odp, /** pointer to ocu_data (in ) */ 2805 reloc_infop); /** reloc info pointer (in ) */ 2806 2807 /*** ****************************************************************/ 2808 /*** */ 2809 /*** Name: create_symb */ 2810 /*** Input: odp, reloc_info */ 2811 /*** Function: creates the symbol section and appends the */ 2812 /*** generated relocation info to the new object */ 2813 /*** segment. */ 2814 /*** Output: none */ 2815 /*** */ 2816 /*** ****************************************************************/ 2817 2818 /* parameter */ 2819 2820 dcl odp ptr; 2821 dcl reloc_infop ptr; 2822 2823 /* based */ 2824 2825 dcl 01 od aligned like ocu_data based (odp); 2826 dcl 01 rel_info aligned based (rel_infop), 2827 02 header aligned like relinfo.header, 2828 02 relbits bit (0 refer (rel_info.n_bits)) aligned; 2829 dcl 01 reloc_info aligned based (reloc_infop), 2830 02 header aligned like relinfo_blocks.header, 2831 02 relbits bit (0 refer (reloc_info.header.n_bits)) 2832 aligned; 2833 dcl 01 sbi aligned based (sbip), 2834 02 header aligned like symbol_info.header, 2835 02 symbol_word dim (0 refer (sbi.N_symbol_words)) bit (36); 2836 dcl 01 si aligned based (sip), 2837 02 header aligned like static_info.header, 2838 02 static_word dim (0 refer (si.N_static_words)) bit (36); 2839 dcl 01 ssh aligned like std_symbol_header based (sshp); 2840 2841 /* automatic */ 2842 2843 dcl abs_count fixed bin automatic; 2844 dcl defs_relp fixed bin (18) unsigned automatic; 2845 dcl link_relp fixed bin (18) unsigned automatic; 2846 dcl rel_infop ptr automatic; 2847 dcl sbip ptr automatic; 2848 dcl sip ptr automatic; 2849 dcl sshp ptr automatic; 2850 dcl symb_relp fixed bin (18) unsigned automatic; 2851 dcl symbol_size fixed bin (18) unsigned automatic; 2852 dcl text_relp fixed bin (18) unsigned automatic; 2853 dcl wordp ptr automatic; 2854 2855 /* get pointers to the required structures */ 2856 2857 sip = od.static_infop; 2858 sbip = od.symbol_infop; 2859 relinfo_strp = od.symbol_relinfop; 2860 relinfo_strl = sbi.symbol_relinfol; 2861 2862 wordp = addwordno (od.target.segp, od.target.bc / 36); 2863 sshp = wordp; 2864 2865 /* initialize the relocation generation variables */ 2866 2867 text_relp = 0; 2868 defs_relp = 0; 2869 link_relp = 0; 2870 symb_relp = 0; 2871 2872 abs_count = 0; 2873 2874 /* relocate and install each symbol word */ 2875 2876 call install_words (addr (sbi.symbol_word), relinfo_strp, 2877 sbi.N_symbol_words, si.N_static_words, reloc_infop, Rel_symb, wordp, 2878 abs_count); 2879 2880 symbol_size = sbi.N_symbol_words; 2881 2882 /* finish off the relocation info */ 2883 2884 call append_relinfo (reloc_infop, Rel_symb, " ", abs_count); 2885 2886 /* if the object is to be relocatable, add the relocation to the */ 2887 /* object segment. */ 2888 2889 if od.flags.relocatable 2890 then do; 2891 2892 /* now append the relocation blocks to the object segment */ 2893 2894 /* append the text relinfo block */ 2895 2896 text_relp = sbi.N_symbol_words; 2897 rel_infop = wordp; 2898 rel_info.decl_vers = 2; 2899 rel_info.n_bits = reloc_info.section (Rel_text).n_bits; 2900 rel_info.relbits = substr (reloc_info.relbits, 2901 reloc_info.section (Rel_text).start_offset, 2902 reloc_info.section (Rel_text).n_bits); 2903 2904 /* append the definition relinfo block */ 2905 2906 defs_relp = text_relp + currentsize (rel_info); 2907 rel_infop = addwordno (rel_infop, currentsize (rel_info)); 2908 rel_info.decl_vers = 2; 2909 rel_info.n_bits = reloc_info.section (Rel_defs).n_bits; 2910 rel_info.relbits = substr (reloc_info.relbits, 2911 reloc_info.section (Rel_defs).start_offset, 2912 reloc_info.section (Rel_defs).n_bits); 2913 2914 /* append the linkage relinfo block */ 2915 2916 link_relp = defs_relp + currentsize (rel_info); 2917 rel_infop = addwordno (rel_infop, currentsize (rel_info)); 2918 rel_info.decl_vers = 2; 2919 rel_info.n_bits = reloc_info.section (Rel_link).n_bits; 2920 rel_info.relbits = substr (reloc_info.relbits, 2921 reloc_info.section (Rel_link).start_offset, 2922 reloc_info.section (Rel_link).n_bits); 2923 2924 /* append the symbol relinfo block */ 2925 2926 symb_relp = link_relp + currentsize (rel_info); 2927 rel_infop = addwordno (rel_infop, currentsize (rel_info)); 2928 rel_info.decl_vers = 2; 2929 rel_info.n_bits = reloc_info.section (Rel_symb).n_bits; 2930 rel_info.relbits = substr (reloc_info.relbits, 2931 reloc_info.section (Rel_symb).start_offset, 2932 reloc_info.section (Rel_symb).n_bits); 2933 2934 /* calculate the new symbol section size */ 2935 2936 symbol_size = symb_relp + currentsize (rel_info); 2937 end; 2938 2939 /* check to make sure the first thing in the symbol section is */ 2940 /* a std_symbol_header before writing the relinfo relptrs in. */ 2941 2942 if (ssh.dcl_version ^= 1) | 2943 (ssh.identifier ^= "symbtree" & ssh.identifier ^= "bind_map") 2944 then call sub_err_ (error_table_$improper_data_format, "format", 2945 ACTION_CAN_RESTART, null, 0); 2946 2947 /* install the block size into the symbol header */ 2948 2949 ssh.block_size = bit (symbol_size, 18); 2950 2951 /* install the relinfo relpointers into the symbol section */ 2952 2953 ssh.rel_text = bit (text_relp, 18); 2954 ssh.rel_def = bit (defs_relp, 18); 2955 ssh.rel_link = bit (link_relp, 18); 2956 ssh.rel_symbol = bit (symb_relp, 18); 2957 2958 /* save the section length and adjust the segment bit_count */ 2959 2960 od.lengths.symb = symbol_size; 2961 od.target.bc = od.target.bc + symbol_size * 36; 2962 2963 end create_symb; 2964 2965 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 2966 2967 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 2968 2969 2970 create_obj_map: 2971 proc (odp); /** pointer to ocu_data (in ) */ 2972 2973 /*** ****************************************************************/ 2974 /*** */ 2975 /*** Name: create_obj_map */ 2976 /*** Input: odp */ 2977 /*** Function: creates the object_map and inserts it into the */ 2978 /*** new object segment. */ 2979 /*** Output: none */ 2980 /*** */ 2981 /*** ****************************************************************/ 2982 2983 /* parameters */ 2984 2985 dcl odp ptr parameter; 2986 2987 /* based */ 2988 2989 dcl 01 obj_map_relp aligned based (obj_map_relpp), 2990 02 relp fixed bin (18) unsigned unaligned, 2991 02 mbz bit (18) unaligned; 2992 dcl 01 od aligned like ocu_data based (odp); 2993 dcl 01 om aligned like object_map based (omp); 2994 2995 /* automatic */ 2996 2997 dcl end_relp fixed bin (18) unsigned automatic; 2998 dcl obj_map_relpp ptr automatic; 2999 dcl omp ptr automatic; 3000 dcl om_relp fixed bin (18) unsigned automatic; 3001 dcl relp fixed bin (18) unsigned automatic; 3002 3003 /* get a pointer to the new object_map and determine the relpointer */ 3004 3005 om_relp = divide (od.target.bc, 36, 18); 3006 omp = addwordno (od.target.segp, om_relp); 3007 3008 /* set up the object map */ 3009 3010 om.decl_vers = 2; 3011 om.identifier = "obj_map"; 3012 3013 /* set the section lengths */ 3014 3015 end_relp = 0; 3016 om.text_offset = bit (end_relp); 3017 om.text_length = bit (od.lengths.text, 18); 3018 end_relp = end_relp + od.lengths.text; 3019 om.definition_offset = bit (end_relp, 18); 3020 om.definition_length = bit (od.lengths.defs, 18); 3021 end_relp = end_relp + od.lengths.defs; 3022 om.linkage_offset = bit (end_relp, 18); 3023 om.linkage_length = bit (od.lengths.link, 18); 3024 end_relp = end_relp + od.lengths.link; 3025 om.static_length = bit (od.lengths.stat, 18); 3026 3027 /* determind the static offset depending on whether it is separate */ 3028 3029 if od.flags.separate_static 3030 then do; 3031 om.static_offset = bit (end_relp, 18); 3032 end_relp = end_relp + od.lengths.stat; 3033 om.symbol_offset = bit (end_relp, 18); 3034 end; 3035 else do; 3036 relp = fixed (om.linkage_offset, 18) + vlh_size; 3037 om.static_offset = bit (relp, 18); 3038 om.symbol_offset = bit (end_relp, 18); 3039 end; 3040 om.symbol_length = bit (od.lengths.symb, 18); 3041 3042 /* set various constant values (for a standard object segment) */ 3043 3044 om.break_map_offset = ""b; 3045 om.break_map_length = ""b; 3046 om.entry_bound = ""b; 3047 om.text_link_offset = ""b; 3048 3049 /* set the flags */ 3050 3051 om.format.bound = od.flags.bound; 3052 om.format.relocatable = od.flags.relocatable; 3053 om.format.procedure = od.flags.procedure; 3054 om.format.standard = true; 3055 om.format.separate_static = od.flags.separate_static; 3056 om.format.perprocess_static = od.flags.perprocess_static; 3057 3058 /* generate the object map relpointer in the last word */ 3059 3060 obj_map_relpp = addwordno (omp, currentsize (om)); 3061 obj_map_relp.relp = om_relp; 3062 3063 /* calculate the final segment bit_count */ 3064 3065 od.target.bc = od.target.bc + currentsize (om) * 36 + 36; 3066 3067 end create_obj_map; 3068 3069 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 3070 3071 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 3072 3073 3074 install_words: 3075 proc (wordsp, /** ptr to word array (in ) */ 3076 relstrp, /** ptr to relinfo str (in ) */ 3077 n_words, /** number of words (in ) */ 3078 n_static, /** static size (in ) */ 3079 reloc_infop, /** reloc info pointer (i/o) */ 3080 section, /** section being moved (in ) */ 3081 targetp, /** target to move to (i/o) */ 3082 abs_count); /** reloc abs count (i/o) */ 3083 3084 /*** ****************************************************************/ 3085 /*** */ 3086 /*** Name: install_words */ 3087 /*** Input: wordsp, relstrp, n_words, n_static, reloc_infop, */ 3088 /*** section, targetp, abs_count */ 3089 /*** Function: copies a word block/relocation string format */ 3090 /*** into the object segment and relocates all of the */ 3091 /*** link and static references. */ 3092 /*** Output: reloc_infop, targetp, abs_count */ 3093 /*** */ 3094 /*** ****************************************************************/ 3095 3096 /* parameters */ 3097 3098 dcl wordsp ptr parameter; 3099 dcl relstrp ptr parameter; 3100 dcl n_words fixed bin parameter; 3101 dcl n_static fixed bin parameter; 3102 dcl reloc_infop ptr parameter; 3103 dcl section fixed bin parameter; 3104 dcl targetp ptr parameter; 3105 dcl abs_count fixed bin parameter; 3106 3107 /* based */ 3108 3109 dcl relstr char (relstrl) based (relstrp); 3110 dcl copy char (copyl) based (copyp); 3111 dcl target char (copyl) based (targetp); 3112 dcl word bit (36) aligned based; 3113 3114 /* automatic */ 3115 3116 dcl copyl fixed bin (21) automatic; 3117 dcl copyp ptr automatic; 3118 dcl first fixed bin (21) automatic; 3119 dcl halfwords fixed bin (21) automatic; 3120 dcl left fixed bin (21) automatic; 3121 dcl relpair char (2) varying automatic; 3122 dcl relstrl fixed bin (21) automatic; 3123 dcl start fixed bin (21) automatic; 3124 3125 /* calculate the length of the relinfo */ 3126 3127 relstrl = n_words * 2; 3128 3129 start = 1; 3130 left = relstrl; 3131 copyp = wordsp; 3132 3133 do while (left > 0); 3134 3135 /* search for the first halfword needing relocation */ 3136 3137 first = search (substr (relstr, start, left), "23l8i"); 3138 if first > 0 3139 then first = first - 1; 3140 else first = left; 3141 3142 /* calculate the number of intervening words to be copied */ 3143 3144 first = divide (first, 2, 18, 0); 3145 3146 if first > 0 3147 then do; 3148 3149 /* convert to a character string length */ 3150 3151 copyl = first * 4; 3152 3153 /* copy the words as a character string */ 3154 3155 target = copy; 3156 3157 /* adjust the source and destination pointers for the copied words */ 3158 3159 copyp = addwordno (copyp, first); 3160 targetp = addwordno (targetp, first); 3161 3162 /* calculate the number of halfwords copied */ 3163 3164 halfwords = first + first; 3165 3166 /* add the relinfo and adjust the counts */ 3167 3168 call append_relinfo (reloc_infop, section, 3169 substr (relstr, start, halfwords), abs_count); 3170 start = start + halfwords; 3171 left = left - halfwords; 3172 end; 3173 3174 if left > 0 3175 then do; 3176 3177 /* if not done, then extract the relinfo, relocate the link */ 3178 /* or static reference, and append the relinfo */ 3179 3180 relpair = substr (relstr, start, 2); 3181 call relocate_link_ref (copyp -> word, relpair, n_static); 3182 call append_relinfo (reloc_infop, section, relpair, abs_count); 3183 3184 /* length is 4 bytes (1 word) */ 3185 3186 copyl = 4; 3187 3188 /* copy the word, adjust the pointers and counts */ 3189 3190 target = copy; 3191 targetp = addwordno (targetp, 1); 3192 copyp = addwordno (copyp, 1); 3193 start = start + 2; 3194 left = left - 2; 3195 end; 3196 end; 3197 3198 end install_words; 3199 3200 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 3201 3202 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 3203 3204 3205 create_hash_table: 3206 proc (dhp, /** def header ptr (i/o) */ 3207 dip, /** def info pointer (in ) */ 3208 smip, /** string map pointer (in ) */ 3209 defnl); /** def section length (i/o) */ 3210 3211 /*** ****************************************************************/ 3212 /*** */ 3213 /*** Name: create_hash_table */ 3214 /*** Input: dhp, dip, smip, defnl */ 3215 /*** Function: creates the definition section hash table, */ 3216 /*** adjusts the section length, and backpatches the */ 3217 /*** hash table relp back into the definition header. */ 3218 /*** Output: dhp, defnl */ 3219 /*** */ 3220 /*** ****************************************************************/ 3221 3222 /* parameters */ 3223 3224 dcl dhp ptr parameter; 3225 dcl dip ptr parameter; 3226 dcl smip ptr parameter; 3227 dcl defnl fixed bin (18) unsigned parameter; 3228 3229 /* based */ 3230 3231 dcl 01 di aligned based (dip), 3232 02 header aligned like def_info.header, 3233 02 def dim (0 refer (di.N_defs)) like def_entry; 3234 dcl 01 smi aligned based (smip), 3235 02 header aligned like string_map_info.header, 3236 02 string dim (0 refer (smi.N_strings)) 3237 like string_map_entry; 3238 dcl 01 def aligned like definition based (defp); 3239 dcl 01 sn aligned like segname_definition based (snp); 3240 dcl 01 de aligned like def_entry based (dep); 3241 dcl 01 srch_de aligned like def_entry based (srch_dep); 3242 dcl 01 dt aligned based (dtp), 3243 02 mbz bit (18) unaligned, 3244 02 n_names fixed bin (18) unsigned unaligned, 3245 02 table dim (0 refer (dt.n_names)) aligned 3246 like duplicate_table.table; 3247 dcl 01 dh aligned like definition_header based (dhp); 3248 dcl 01 dht aligned based (dhtp), 3249 02 n_entries fixed bin, 3250 02 table dim (0 refer (dht.n_entries)) aligned 3251 like definition_ht.table; 3252 dcl 01 cht aligned based (chtp), 3253 02 n_entries fixed bin, 3254 02 table dim (0 refer (cht.n_entries)) aligned 3255 like component_ht.table; 3256 3257 /* automatic */ 3258 3259 dcl defp ptr automatic; 3260 dcl snp ptr automatic; 3261 dcl dep ptr automatic; 3262 dcl srch_dep ptr automatic; 3263 dcl d fixed bin automatic; 3264 dcl n_names fixed bin automatic; 3265 dcl n_segnames fixed bin automatic; 3266 dcl make_comp_ht bit (1) automatic; 3267 dcl dtp ptr automatic; 3268 dcl dhtp ptr automatic; 3269 dcl chtp ptr automatic; 3270 dcl accp ptr automatic; 3271 dcl htx fixed bin automatic; 3272 dcl relp fixed bin (18) unsigned automatic; 3273 3274 n_names = 0; 3275 n_segnames = 0; 3276 make_comp_ht = false; 3277 3278 /* pass 1: create the duplicate tables */ 3279 3280 do d = 1 to di.N_defs; 3281 dep = addr (di.def (d)); 3282 if de.flags.ignore 3283 then ; 3284 else if de.class = 3 3285 then n_segnames = n_segnames + 1; 3286 else if ^de.flags.duplicate 3287 then do; 3288 n_names = n_names + 1; 3289 dtp = null; 3290 3291 do i = d + 1 to di.N_defs; 3292 srch_dep = addr (di.def (i)); 3293 if srch_de.strx = de.strx & ^srch_de.flags.ignore & 3294 srch_de.class ^= 3 3295 then do; 3296 if dtp ^= null 3297 then do; 3298 dt.n_names = dt.n_names + 1; 3299 dt.table (dt.n_names).def_relp = 3300 dh_size + (i - 1) * def_size; 3301 defp = addwordno (dhp, dt.table (dt.n_names).def_relp); 3302 dt.table (dt.n_names).block_hdr_relp = def.segname_relp; 3303 srch_de.flags.duplicate = true; 3304 end; 3305 else do; 3306 dtp = addwordno (dhp, defnl); 3307 dt.mbz = ""b; 3308 dt.n_names = 2; 3309 3310 /* set up the table entry for the original name */ 3311 3312 dt.table (1).def_relp = dh_size + ((d - 1) * def_size); 3313 defp = addwordno (dhp, dt.table (1).def_relp); 3314 dt.table (1).block_hdr_relp = def.segname_relp; 3315 de.flags.duplicate = true; 3316 de.dup_tbl_relp = defnl; 3317 3318 /* set up the table entry for the duplicate name found */ 3319 3320 dt.table (2).def_relp = dh_size + ((i - 1) * def_size); 3321 defp = addwordno (dhp, dt.table (2).def_relp); 3322 dt.table (2).block_hdr_relp = def.segname_relp; 3323 srch_de.flags.duplicate = true; 3324 srch_de.dup_tbl_relp = 0; 3325 end; 3326 end; 3327 end; 3328 3329 if de.flags.duplicate 3330 then do; 3331 defnl = defnl + currentsize (dt); 3332 make_comp_ht = true; 3333 end; 3334 end; 3335 end; 3336 3337 /* pass 2: create the actual definition hash table */ 3338 3339 dh.hash_table_relp = defnl; 3340 dhtp = addwordno (dhp, defnl); 3341 dht.n_entries = opt_size (n_names); 3342 defnl = defnl + currentsize (dht); 3343 3344 do d = 1 to di.N_defs; 3345 dep = addr (di.def (d)); 3346 3347 if (de.flags.duplicate & de.dup_tbl_relp = 0) | de.class = 3 | 3348 de.flags.ignore 3349 then ; 3350 else do; 3351 accp = addwordno (dhp, smi.string (de.strx).relp); 3352 htx = hash (accp, dht.n_entries); 3353 3354 do while (unspec (dht.table (htx)) ^= ""b); 3355 htx = mod (htx, dht.n_entries) + 1; 3356 end; 3357 3358 if de.duplicate 3359 then dht.table (htx).def_relp = de.dup_tbl_relp; 3360 else dht.table (htx).def_relp = dh_size + (d - 1) * def_size; 3361 end; 3362 end; 3363 3364 /* pass 3: if we need a component hash table we build that now */ 3365 3366 if make_comp_ht 3367 then do; 3368 3369 chtp = addwordno (dhp, defnl); 3370 cht.n_entries = opt_size (n_segnames); 3371 defnl = defnl + currentsize (cht); 3372 3373 do d = 1 to di.N_defs; 3374 dep = addr (di.def (d)); 3375 if de.class = 3 & ^de.flags.ignore 3376 then do; 3377 accp = addwordno (dhp, smi.string (de.strx).relp); 3378 3379 htx = hash (accp, cht.n_entries); 3380 3381 do while (unspec (cht.table (htx)) ^= ""b); 3382 htx = mod (htx, cht.n_entries) + 1; 3383 end; 3384 3385 relp, cht.table (htx).def_relp = dh_size + (d - 1) * def_size; 3386 snp = addwordno (dhp, relp); 3387 defp = addwordno (dhp, sn.first_relp); 3388 cht.table (htx).block_hdr_relp = def.segname_relp; 3389 end; 3390 end; 3391 end; 3392 3393 end create_hash_table; 3394 3395 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 3396 3397 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 3398 3399 3400 opt_size: 3401 proc (n_names) /** valid entry count (in ) */ 3402 returns (fixed bin); /** opt table size (out) */ 3403 3404 /*** ****************************************************************/ 3405 /*** */ 3406 /*** Name: opt_size */ 3407 /*** Input: n_names */ 3408 /*** Function: calculates the definition hash table size from */ 3409 /*** the number of entries to be included. */ 3410 /*** Output: ht_size */ 3411 /*** */ 3412 /*** ****************************************************************/ 3413 3414 /* constants */ 3415 3416 dcl sizes (1:11) fixed bin static options (constant) 3417 init (13, 27, 53, 89, 157, 307, 503, 733, 3418 1009, 1451, 2003); 3419 3420 /* parameters */ 3421 3422 dcl n_names fixed bin parameter; 3423 3424 /* automatic */ 3425 3426 dcl i fixed bin automatic; 3427 dcl ht_size fixed bin automatic; 3428 3429 /* allow for 20% of the buckets to be empty */ 3430 3431 ht_size = n_names * 1.25; 3432 3433 /* pick an appropriate number of entries */ 3434 3435 do i = 1 to hbound (sizes, 1); 3436 if ht_size <= sizes (i) 3437 then return (sizes (i)); 3438 end; 3439 3440 /* default for very large hash tables */ 3441 3442 return (ht_size); 3443 3444 end opt_size; 3445 3446 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 3447 3448 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 3449 3450 3451 hash: 3452 proc (strp, /** acc string pointer (in ) */ 3453 size) /** hash table size (in ) */ 3454 returns (fixed bin); /** hash index (out) */ 3455 3456 /*** ****************************************************************/ 3457 /*** */ 3458 /*** Name: hash */ 3459 /*** Input: strp, size */ 3460 /*** Function: computes the hash function for a definition hash */ 3461 /*** table. */ 3462 /*** Output: index */ 3463 /*** */ 3464 /*** ****************************************************************/ 3465 3466 /* parameter */ 3467 3468 dcl strp ptr parameter; 3469 dcl size fixed bin parameter; 3470 3471 /* based */ 3472 3473 dcl word fixed bin (35) based (strp); 3474 3475 return (mod (word, size) + 1); 3476 3477 end hash; 3478 3479 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 3480 3481 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 3482 3483 3484 relocate_link_ref: 3485 proc (word, /** word to relocate (i/o) */ 3486 relinfo, /** relinfo for word (i/o) */ 3487 static_size); /** size of static scn (in ) */ 3488 3489 /*** ****************************************************************/ 3490 /*** */ 3491 /*** Name: relocate_link_ref */ 3492 /*** Input: word, relinfo, static_size */ 3493 /*** Function: takes a word and relocation info and adjusts any */ 3494 /*** reference to the linkage section to compensate */ 3495 /*** for the insertion of the static section. */ 3496 /*** Output: word, relinfo */ 3497 /*** */ 3498 /*** ****************************************************************/ 3499 3500 /* parameters */ 3501 3502 dcl word bit (36) aligned parameter; 3503 dcl relinfo char (2) varying parameter; 3504 dcl static_size fixed bin parameter; 3505 3506 /* based */ 3507 3508 dcl 01 w15 (1:2) unaligned based (addr (word)), 3509 02 pad bit (3), 3510 02 value fixed bin (15) unsigned; 3511 dcl 01 w18 (1:2) unaligned based (addr (word)), 3512 02 value fixed bin (18) unsigned; 3513 3514 /* automatic */ 3515 3516 dcl min fixed bin automatic; 3517 dcl s fixed bin automatic; 3518 dcl st_size fixed bin (18) unsigned automatic; 3519 3520 /* don't bother if the static section is separate */ 3521 3522 if ocu_data.flags.separate_static 3523 then return; 3524 3525 /* leave link references that are not into the link array */ 3526 3527 min = vlh_size; 3528 3529 /* round the static section size to an even word boundary to keep */ 3530 /* the link array aligned properly (ITS pointers must be on a */ 3531 /* doubleword boundary or the hardware complains. . .) */ 3532 3533 st_size = static_size + mod (static_size, 2); 3534 3535 /* relocate each halfword */ 3536 3537 do s = Left, Right; 3538 if (index ("23", substr (relinfo, s, 1)) > 0) & (w18 (s).value >= min) 3539 then w18 (s).value = w18 (s).value + st_size; 3540 if (substr (relinfo, s, 1) = "l") & (w15 (s).value >= min) 3541 then w15 (s).value = w15 (s).value + st_size; 3542 3543 /* adjust static references for the size of the linkage header */ 3544 /* and convert the relinfo into linkage section relinfo */ 3545 3546 if substr (relinfo, s, 1) = "8" 3547 then w18 (s).value = w18 (s).value + vlh_size; 3548 if substr (relinfo, s, 1) = "i" 3549 then w15 (s).value = w15 (s).value + vlh_size; 3550 end; 3551 3552 end relocate_link_ref; 3553 3554 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 3555 3556 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 3557 3558 3559 append_relinfo: 3560 proc (relinfop, /** prt to relinfo blk (i/o) */ 3561 scn, /** section to add to (in ) */ 3562 relinfo_chrs, /** relinfo char string (in ) */ 3563 abs_count); /** pending abs halfwds (i/o) */ 3564 3565 /*** ****************************************************************/ 3566 /*** */ 3567 /*** Name: append_relinfo */ 3568 /*** Input: relinfop, scn, relinfo_chrs, abs_count */ 3569 /*** Function: appends the specified relinfo to the relinfo */ 3570 /*** block given. */ 3571 /*** Absolute relocation is not appended to the */ 3572 /*** relinfo until the number of consecutive */ 3573 /*** halfwords is determined. If the relinfo_chr */ 3574 /*** specified is a blank, no additional relinfo is */ 3575 /*** emitted but any saved absolute relinfo is */ 3576 /*** appended to the relinfo block. This is used to */ 3577 /*** force all the relinfo into the block when it is */ 3578 /*** complete. */ 3579 /*** Output: relinfop, abs_count */ 3580 /*** */ 3581 /*** ****************************************************************/ 3582 3583 /* parameters */ 3584 3585 dcl relinfop ptr parameter; 3586 dcl scn fixed bin parameter; 3587 dcl relinfo_chrs char (*) varying parameter; 3588 dcl abs_count fixed bin parameter; 3589 3590 /* based */ 3591 3592 dcl 01 reloc_info aligned based (relinfop), 3593 02 header like relinfo_blocks.header, 3594 02 relbits bit (0 refer (reloc_info.header.n_bits)) 3595 aligned; 3596 3597 /* automatic */ 3598 3599 dcl c fixed bin (21) automatic; 3600 dcl 01 exp_abs unaligned automatic, 3601 02 code bit (5), 3602 02 count fixed bin (10) unsigned; 3603 dcl i fixed bin (21) automatic; 3604 dcl old_len fixed bin (24) automatic; 3605 dcl relinfo_chr char (1) automatic; 3606 3607 /* builtin */ 3608 3609 dcl length builtin; 3610 3611 /* don't bother is the output is not relocatable */ 3612 3613 if reloc_info.no_relinfo 3614 then return; 3615 3616 /* set the section start if necessary */ 3617 3618 if reloc_info.section (scn).start_offset = 0 3619 then reloc_info.section (scn).start_offset = reloc_info.header.n_bits + 1; 3620 3621 /* for each character in the relinfo string */ 3622 3623 do c = 1 to length (relinfo_chrs); 3624 relinfo_chr = substr (relinfo_chrs, c, 1); 3625 3626 /* if the relinfo is not absolute . . . */ 3627 3628 if relinfo_chr ^= "a" 3629 then do; 3630 3631 /* see if we have pending absolute stuff to insert */ 3632 3633 do while (abs_count > 15); 3634 3635 /* use expanded absolute if possible */ 3636 3637 old_len = reloc_info.header.n_bits; 3638 exp_abs.code = "11110"b; 3639 exp_abs.count = min (abs_count, 1023); 3640 abs_count = abs_count - exp_abs.count; 3641 reloc_info.header.n_bits = reloc_info.header.n_bits + 15; 3642 reloc_info.section (scn).n_bits = 3643 reloc_info.section (scn).n_bits + 15; 3644 substr (reloc_info.relbits, old_len + 1, 15) = unspec (exp_abs); 3645 end; 3646 3647 /* get the remainder using normal (non-expanded) absolute */ 3648 3649 if abs_count > 0 3650 then do; 3651 old_len = reloc_info.header.n_bits; 3652 reloc_info.header.n_bits = reloc_info.header.n_bits + abs_count; 3653 reloc_info.section (scn).n_bits = 3654 reloc_info.section (scn).n_bits + abs_count; 3655 substr (reloc_info.relbits, old_len + 1, abs_count) = 3656 copy ("0"b, abs_count); 3657 abs_count = 0; 3658 end; 3659 3660 /* now search for the proper relocation bits */ 3661 3662 i = index (reloc_chars, relinfo_chr); 3663 if i > 0 3664 then do; 3665 old_len = reloc_info.header.n_bits; 3666 reloc_info.header.n_bits = reloc_info.header.n_bits + 5; 3667 reloc_info.section (scn).n_bits = 3668 reloc_info.section (scn).n_bits + 5; 3669 substr (reloc_info.relbits, old_len + 1, 5) = reloc_bits (i); 3670 end; 3671 end; 3672 3673 /* otherwise, if the relocation is absolute, just increment the */ 3674 /* count and continue. */ 3675 3676 else abs_count = abs_count + 1; 3677 end; 3678 3679 end append_relinfo; 3680 3681 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 3682 3683 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 3684 3685 3686 validate_component: 3687 proc (mip, /** pointer to msf_info (in ) */ 3688 comp); /** component index (in ) */ 3689 3690 /*** ****************************************************************/ 3691 /*** */ 3692 /*** Name: validate_component */ 3693 /*** Input: mip, comp */ 3694 /*** Function: This procedure is used to attempt to validate */ 3695 /*** a given object segment within a set of object */ 3696 /*** segments is valid as an MSF component. This is */ 3697 /*** determined based on the following criteria: */ 3698 /*** -- all of the segments must be in the same */ 3699 /*** directory. This values is set when the */ 3700 /*** first component is evaluated and checked */ 3701 /*** by the others. */ 3702 /*** -- the directory must otherwise be empty. */ 3703 /*** -- the name of the segment must correspond */ 3704 /*** to the component number of the segment. */ 3705 /*** -- the component must be an object segment. */ 3706 /*** -- the segment must have a msf_map. */ 3707 /*** -- the component number must correspond to */ 3708 /*** the component number stored in the msf_map. */ 3709 /*** -- the number of components must correspond */ 3710 /*** to the component count in the msf_map. */ 3711 /*** In the process of determining validity, the */ 3712 /*** bit count and relpointers to the various */ 3713 /*** sections are also filled in in the msf_info */ 3714 /*** structure. */ 3715 /*** Output: none */ 3716 /*** */ 3717 /*** ****************************************************************/ 3718 3719 /* parameters */ 3720 3721 dcl mip ptr parameter; 3722 dcl comp fixed bin parameter; 3723 3724 /* based */ 3725 3726 dcl 01 dh aligned like definition_header based (dhp); 3727 dcl 01 mi aligned based (mip), 3728 02 header aligned like msf_info.header, 3729 02 component dim (0 refer (mi.N_components)) 3730 like msf_info.component; 3731 dcl 01 mm aligned like msf_map based (mmp); 3732 3733 /* automatic */ 3734 3735 dcl bc fixed bin (24) automatic; 3736 dcl count fixed bin automatic; 3737 dcl dname char (168) automatic; 3738 dcl dhp ptr automatic; 3739 dcl dnl fixed bin automatic; 3740 dcl ename char (32) automatic; 3741 dcl 01 oi aligned like object_info automatic; 3742 dcl segp ptr automatic; 3743 dcl mmp ptr automatic; 3744 3745 segp = mi.component (comp).segp; 3746 3747 /* get the directory and entry names of the segment */ 3748 3749 call hcs_$fs_get_path_name (segp, dname, dnl, ename, ec); 3750 if ec ^= 0 3751 then call sub_err_ (ec, "argument", ACTION_CANT_RESTART, null, 0); 3752 3753 if mi.containing_dir = "" 3754 then do; 3755 3756 /* save the directory name */ 3757 3758 mi.containing_dir = get_shortest_path_ (substr (dname, 1, dnl)); 3759 3760 /* check out the directory to make sure there are no extraneous */ 3761 /* segments, directories, etc. */ 3762 3763 retry_star_match: 3764 call hcs_$star_ (mi.containing_dir, "**", star_ALL_ENTRIES, null, 3765 count, null, null, ec); 3766 if ec ^= 0 3767 then do; 3768 call sub_err_ (ec, "", ACTION_CAN_RESTART, null, 0); 3769 goto retry_star_match; 3770 end; 3771 3772 if count > mi.N_components + 1 3773 then call sub_err_ (error_table_$bad_arg, "argument", 3774 ACTION_CANT_RESTART, null, 0, 3775 "^/There are extra entries in the containing directory."); 3776 end; 3777 else if mi.containing_dir ^= get_shortest_path_ (substr (dname, 1, dnl)) 3778 then call sub_err_ (error_table_$bad_arg, "argument", 3779 ACTION_CANT_RESTART, null, 0, 3780 "^/All of the components do not reside in the same directory."); 3781 3782 if ename ^= ltrim (char (comp)) 3783 then call sub_err_ (error_table_$bad_arg, "argument", 3784 ACTION_CANT_RESTART, null, 0, 3785 "^/The entryname for component ^d is ""^a"" instead of ""^d""", 3786 comp, ename, comp); 3787 3788 call hcs_$status_mins (segp, 0, bc, ec); 3789 mi.component (comp).bc = bc; 3790 3791 oi.version_number = object_info_version_2; 3792 3793 /* see if this is actually an object segment */ 3794 3795 call object_info_$brief (segp, bc, addr (oi), ec); 3796 if ec ^= 0 3797 then call sub_err_ (ec, "argument", ACTION_CANT_RESTART, null, 0, 3798 "^/Component ^d is not an object segment.", comp); 3799 3800 /* extract the section relpointers */ 3801 3802 mi.component (comp).text_relp = fixed (rel (oi.textp), 18); 3803 mi.component (comp).defn_relp = fixed (rel (oi.defp), 18); 3804 mi.component (comp).link_relp = fixed (rel (oi.linkp), 18); 3805 mi.component (comp).stat_relp = fixed (rel (oi.statp), 18); 3806 mi.component (comp).symb_relp = fixed (rel (oi.symbp), 18); 3807 3808 /* check for presence and validity of the msf_map */ 3809 3810 dhp = oi.defp; 3811 3812 if dh.msf_map_relp = 0 3813 then call sub_err_ (error_table_$inconsistent_object_msf, "argument", 3814 ACTION_CANT_RESTART, null, 0, 3815 "^/Component ^d has no msf_map.", comp); 3816 3817 mmp = addwordno (dhp, dh.msf_map_relp); 3818 3819 if mm.version ^= msf_map_version_1 3820 then call sub_err_ (error_table_$unimplemented_version, "argument", 3821 ACTION_CANT_RESTART, null, 0, 3822 "^/Incorrect version in msf_map for component ^d.", comp); 3823 3824 if mm.component_count ^= mi.N_components + 1 3825 then call sub_err_ (error_table_$inconsistent_object_msf, "argument", 3826 ACTION_CANT_RESTART, null, 0, 3827 "^/Number of components in input list (^d) disagrees with the" 3828 || 3829 "^/number given in the msf_map (^d) for component ^d.", 3830 mi.N_components + 1, mm.component_count, comp); 3831 3832 if mm.my_component ^= comp 3833 then call sub_err_ (error_table_$inconsistent_object_msf, "argument", 3834 ACTION_CANT_RESTART, null, 0, 3835 "^/Component number ^d has the component number ^d in the msf_map.", 3836 comp, mm.my_component); 3837 3838 end validate_component; 3839 3840 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 3841 3842 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 3843 3844 3845 copy_defs: 3846 proc (odp, /** ocu_data ptr (in ) */ 3847 mip, /** msf_info pointer (in ) */ 3848 comp); /** component number (in ) */ 3849 3850 /*** ****************************************************************/ 3851 /*** */ 3852 /*** Name: copy_defs */ 3853 /*** Input: odp, mip, comp */ 3854 /*** Function: scans the definition list of component in */ 3855 /*** the msf_info structure and emits partial links */ 3856 /*** and corresponding indirect definitions. */ 3857 /*** Output: none */ 3858 /*** */ 3859 /*** ****************************************************************/ 3860 3861 /* parameters */ 3862 3863 dcl odp ptr parameter; 3864 dcl mip ptr parameter; 3865 dcl comp fixed bin parameter; 3866 3867 /* based */ 3868 3869 dcl 01 acc aligned based (accp), 3870 02 count fixed bin (9) unsigned unaligned, 3871 02 string char (0 refer (acc.count)) unaligned; 3872 dcl 01 def aligned like definition based (defp); 3873 dcl 01 dh aligned like definition_header based (dhp); 3874 dcl 01 mi aligned based (mip), 3875 02 header aligned like msf_info.header, 3876 02 component dim (0 refer (mi.N_components)) 3877 like msf_info.component; 3878 dcl word aligned fixed bin (35) based (defp); 3879 3880 /* automatic */ 3881 3882 dcl accp ptr automatic; 3883 dcl dhp ptr automatic; 3884 dcl defp ptr automatic; 3885 dcl dummy fixed bin (18) unsigned automatic; 3886 dcl lk_relp fixed bin (18) unsigned automatic; 3887 dcl flags bit (4) automatic; 3888 3889 /* get the definition header */ 3890 3891 dhp = addwordno (mi.component (comp).segp, mi.component (comp).defn_relp); 3892 3893 /* scan the definition list */ 3894 3895 do defp = addwordno (dhp, dh.def_list_relp) 3896 repeat (addwordno (dhp, def.forward_relp)) 3897 while (word ^= 0); 3898 3899 /* for each externally visible definition . . . */ 3900 3901 if ^def.flags.ignore 3902 then do; 3903 3904 /* get the name ACC string */ 3905 3906 accp = addwordno (dhp, def.name_relp); 3907 3908 /* if it is a segname (class = 3), then emit a segname */ 3909 3910 if def.class = 3 3911 then dummy = emit_segname (odp, (acc.string), 3912 DEFINITION_FLAGS_RETAIN); 3913 else do; 3914 3915 /* if not a segname, emit a partial link to the target */ 3916 /* and an indirect definition to the link. */ 3917 3918 flags = DEFINITION_FLAGS_INDIRECT | DEFINITION_FLAGS_RETAIN; 3919 if def.flags.entry 3920 then flags = flags | DEFINITION_FLAGS_ENTRY; 3921 3922 lk_relp = emit_partial_link (odp, (comp), (def.class), 3923 (def.thing_relp), ""b); 3924 dummy = emit_definition (odp, (acc.string), (CLASS_LINKAGE), 3925 lk_relp, flags); 3926 end; 3927 end; 3928 end; 3929 3930 end copy_defs; 3931 3932 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 3933 3934 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 3935 3936 3937 mk_symbol_scn: 3938 proc (odp, /** ocu_data pointer (in ) */ 3939 mip); /** msf_info pointer (in ) */ 3940 3941 /*** ****************************************************************/ 3942 /*** */ 3943 /*** Name: mk_symbol_hdr */ 3944 /*** Input: odp, mip */ 3945 /*** Function: creates the symbol section to be used for object */ 3946 /*** MSF component 0 and emits it. */ 3947 /*** Output: none */ 3948 /*** */ 3949 /*** ****************************************************************/ 3950 3951 /* parameters */ 3952 3953 dcl odp ptr parameter; 3954 dcl mip ptr parameter; 3955 3956 /* based */ 3957 3958 dcl 01 mi aligned based (mip), 3959 02 header aligned like msf_info.header, 3960 02 component dim (0 refer (mi.N_components)) 3961 like msf_info.component; 3962 dcl 01 mss aligned based (mssp), 3963 02 header aligned like msf_symbol_scn.header, 3964 02 user char (user_length 3965 refer (mss.header.userid.size)) aligned, 3966 02 version char (version_length 3967 refer (mss.header.gen_version.size)) aligned; 3968 dcl system_free_area area based (system_free_areap); 3969 3970 /* automatic */ 3971 3972 dcl dummy fixed bin (18) unsigned automatic; 3973 dcl group_id char (40) varying automatic; 3974 dcl mssp ptr automatic; 3975 dcl reloc_str char (2048) automatic; 3976 dcl system_free_areap ptr automatic; 3977 dcl user_length fixed bin automatic; 3978 dcl version_length fixed bin automatic; 3979 3980 /* builtin */ 3981 3982 dcl length builtin; 3983 dcl size builtin; 3984 3985 system_free_areap = get_system_free_area_ (); 3986 3987 mssp = null; 3988 3989 on cleanup 3990 begin; 3991 if mssp ^= null 3992 then free mss in (system_free_area); 3993 end; 3994 3995 /* find the user id string */ 3996 3997 group_id = get_group_id_ (); 3998 version_length = length (mi.gen_info.gen_version); 3999 user_length = length (group_id); 4000 4001 /* allocate the symbol section structure */ 4002 4003 allocate mss in (system_free_area); 4004 4005 /* set all of the values in the symbol section */ 4006 4007 mss.header.decl_version = 1; 4008 mss.header.identifier = "symbtree"; 4009 mss.header.gen_number = mi.gen_info.gen_number; 4010 mss.header.gen_created = mi.gen_info.gen_created; 4011 mss.header.object_created = clock (); 4012 mss.header.generator = mi.gen_info.generator; 4013 mss.header.text_boundary = 2; 4014 mss.header.stat_boundary = 2; 4015 mss.header.source_map = 0; 4016 mss.header.area_pointer = currentsize (mss); 4017 mss.header.backpointer = 0; 4018 mss.header.block_size = 0; 4019 mss.header.next_block = 0; 4020 mss.header.rel_text = 0; 4021 mss.header.rel_def = 0; 4022 mss.header.rel_link = 0; 4023 mss.header.rel_symbol = 0; 4024 mss.header.mini_truncate = currentsize (mss); 4025 mss.header.maxi_truncate = currentsize (mss); 4026 4027 /* store the character strings */ 4028 4029 mss.user = group_id; 4030 mss.version = mi.gen_info.gen_version; 4031 4032 /* calculate the offsets */ 4033 4034 mss.header.userid.offset = size (std_symbol_header); 4035 mss.header.gen_version.offset = size (std_symbol_header) + 4036 divide (user_length + 3, 4, 18); 4037 mss.header.comment.offset = 0; 4038 mss.header.comment.size = 0; 4039 4040 /* overlay a word array on the structure */ 4041 4042 word_arrayp = mssp; 4043 word_arrayl = currentsize (mss); 4044 4045 /* generate the relocation information */ 4046 4047 reloc_str = "aaaaaaaaaaaaaaaaaaaararaaaaaaraaaaaaaaaa" || 4048 copy ("a", currentsize (mss) - size (std_symbol_header)); 4049 4050 /* emit the symbol section */ 4051 4052 dummy = emit_symbol (odp, word_arrayp, addr (reloc_str), word_arrayl); 4053 4054 /* free the symbol section structure */ 4055 4056 free mss in (system_free_area); 4057 mssp = null; 4058 4059 end mk_symbol_scn; 4060 4061 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 4062 4063 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 4064 4065 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 */ 4066 2 1 /* Begin include file definition_dcls.incl.pl1 BIM 1981 */ 2 2 2 3 2 4 /****^ HISTORY COMMENTS: 2 5* 1) change(86-05-02,Elhard), approve(86-05-02,MCR7391), 2 6* audit(86-07-18,DGHowe), install(86-11-20,MR12.0-1222): 2 7* Modified to add indirect bit to definition flags, add msf_map_relp to the 2 8* definition header, declare the msf_map, and add structures and constants 2 9* for deferred initialization. 2 10* 2) change(86-06-24,DGHowe), approve(86-06-24,MCR7420), 2 11* audit(86-08-05,Schroth), install(86-11-20,MR12.0-1222): 2 12* added the structures for pointer initialization. pointer_init_template. 2 13* changed list_template_entry 2 14* END HISTORY COMMENTS */ 2 15 2 16 2 17 /* Modified: */ 2 18 /* 13 Dec 1982 by Lee A. Newcomb to put definition_header.hash_table_relp */ 2 19 /* after unused half-word instead of before it. */ 2 20 /* 1 March 1983 by M. Weaver to add list template init type */ 2 21 2 22 /* format: style3,idind25 */ 2 23 /* everything for the definition section */ 2 24 2 25 declare ( 2 26 CLASS_TEXT init (0), /* text section definition */ 2 27 CLASS_LINKAGE init (1), /* linkage section definition */ 2 28 CLASS_SYMBOL init (2), /* symbol section definition */ 2 29 CLASS_SEGNAME init (3), /* segment name definition */ 2 30 CLASS_STATIC init (4), /* static section definition */ 2 31 CLASS_SYSTEM init (5), /* valid only in self links, not def class */ 2 32 CLASS_HEAP init (6) /* valid only in self links, not def class */ 2 33 ) fixed bin (3) unsigned internal static options (constant); 2 34 2 35 declare CLASS_NAMES (0:6) character (12) internal static options (constant) 2 36 init ("text", "linkage", "symbol", "segname", "static", "system", "heap"); 2 37 2 38 declare SYMBOLIC_SECTION_NAMES (0:6) character (8) 2 39 init ("*text", "*link", "*symbol", *, "*static", "*system", "*heap") internal static 2 40 options (constant); 2 41 2 42 declare 1 definition_flags unaligned based, 2 43 2 new bit (1), /* should be "1"b */ 2 44 2 ignore bit (1), /* cannot snap link to this */ 2 45 2 entry bit (1), /* can tra here */ 2 46 2 retain bit (1), /* binder respects this */ 2 47 2 argcount bit (1), /* OBSOLETE */ 2 48 2 descriptors bit (1), /* OBSOLETE */ 2 49 2 indirect bit (1), /* target is a pointer to actual target */ 2 50 2 unused bit (8); /* Must be zero */ 2 51 2 52 2 53 2 54 2 55 /* Header of the definition section */ 2 56 2 57 declare def_header_ptr pointer; 2 58 declare 1 definition_header aligned based (def_header_ptr), 2 59 2 def_list_relp fixed bin (18) unsigned unaligned, 2 60 /* first definition, reloc def18 */ 2 61 2 msf_map_relp fixed bin (18) unsigned unaligned, 2 62 /* msf_map if any, or 0 if none. reloc def18 unless none */ 2 63 2 hash_table_relp fixed bin (18) unsigned unaligned, 2 64 /* def hash table, if any, or 0 if none. reloc def18 unless none */ 2 65 2 flags unaligned like definition_flags; 2 66 /* both new and ignore must be "1"b here */ 2 67 2 68 /* A non class=3 definition. See segname_definition below for class=3 */ 2 69 2 70 2 71 declare def_ptr pointer; 2 72 declare 1 definition aligned based (def_ptr), 2 73 2 forward_relp unal fixed bin (18) unsigned, 2 74 /* offset of next def */ 2 75 2 backward_relp unal fixed bin (18) unsigned, 2 76 /* offset of previous def */ 2 77 2 thing_relp unal fixed bin (18) unsigned, 2 78 /* offset in section specified by class of thing this defines */ 2 79 2 flags unaligned like definition_flags, 2 80 2 class unal fixed bin (3) unsigned, 2 81 /* Type of definition */ 2 82 2 name_relp unal fixed bin (18) unsigned, 2 83 /* offset of ACC for symbol */ 2 84 2 segname_relp unal fixed bin (18) unsigned; 2 85 /* offset of segname def to which this belongs */ 2 86 2 87 /* Class=3, segname definition */ 2 88 2 89 declare segname_ptr pointer; 2 90 declare 1 segname_definition aligned based (segname_ptr), 2 91 2 forward_relp unal fixed bin (18) unsigned, 2 92 /* offset of next def */ 2 93 2 backward_relp unal fixed bin (18) unsigned, 2 94 /* offset of previous def */ 2 95 2 next_segname_relp unal fixed bin (18) unsigned, 2 96 /* offset of next segname def */ 2 97 2 flags unaligned like definition_flags, 2 98 2 class unal fixed bin (3) unsigned, 2 99 /* 3 for segname */ 2 100 2 name_relp unal fixed bin (18) unsigned, 2 101 /* offset of ACC for symbol */ 2 102 2 first_relp unal fixed bin (18) unsigned; 2 103 /* see following : */ 2 104 2 105 /* Definition blocks are chained off of segname definitions. 2 106* segname_definition.first_relp is one of three things: 2 107* (1) the def section offset of the first ordinary (class^=3) definition 2 108* belonging to this segname block. In the case where there are more than 2 109* one segname's on a block, all their first_relp will point 2 110* to the same place. 2 111* 2 112* (2) if there are no ordinary definitions associated with this segname, 2 113* then it is the def section offset of the next segname. 2 114* 2 115* (3) if there are no ordinary definitions in the block, and it 2 116* is the last block, then it points to a word containing 0. 2 117* 2 118* Thus the end of a list of synonym segnames can be detected by forward_relp 2 119* pointing to a class=3 definition whose first_relp is not the same as 2 120* the current definitions first_relp. 2 121**/ 2 122 2 123 /* All the definitions are linked through the forward and 2 124* backward thread variables. The end of the chain can is indicated 2 125* by forward pointing to a zero word. */ 2 126 2 127 2 128 declare exp_ptr pointer; 2 129 declare 1 exp_word based (exp_ptr) aligned, /* expression word in link definition */ 2 130 2 type_relp fixed bin (18) unsigned unal, 2 131 /* pointer (rel to defs) of type pair structure */ 2 132 2 expression fixed bin (17) unal; /* constant expression to be added in when snapping link */ 2 133 2 134 declare ( 2 135 LINK_SELF_BASE init (1), /* *section|0+expression,modifier */ 2 136 /* which section determined by segname_relp */ 2 137 LINK_OBSOLETE_2 init (2), /* not used */ 2 138 LINK_REFNAME_BASE init (3), /* refname|0+expression,modifier */ 2 139 LINK_REFNAME_OFFSETNAME init (4), /* refname|offsetname+expression,modifier */ 2 140 LINK_SELF_OFFSETNAME init (5), /* *section|offsetname+expression,modifier */ 2 141 LINK_CREATE_IF_NOT_FOUND init (6), /* OBSOLETE: like LINK_REFNAME_OFFSETNAME except that it will create instead of taking linkage_error */ 2 142 SECTION_TEXT init (0), /* *text */ 2 143 SECTION_LINK init (1), /* *link */ 2 144 SECTION_SYMBOL init (2), /* *symbol */ 2 145 SECTION_UNUSED init (3), /* reserved */ 2 146 SECTION_STATIC init (4), /* *static */ 2 147 SECTION_SYSTEM init (5), /* *system */ 2 148 SECTION_HEAP init (6) /* *heap */ 2 149 ) fixed bin (18) unsigned unaligned internal static options (constant); 2 150 2 151 /* use CLASS_NAMES for section names */ 2 152 2 153 declare LINK_TYPE_NAMES (1:6) 2 154 init ("absolute in section", "unused", "absolute off of refname", 2 155 "symbolic off of refname", "symbolic in section", "symbolic off of refname; create") 2 156 character (32) varying internal static options (constant); 2 157 2 158 2 159 declare type_ptr pointer; 2 160 declare 1 type_pair based (type_ptr) aligned,/* type pair in link definition */ 2 161 2 type fixed bin (18) unsigned unal, 2 162 /* see above */ 2 163 2 trap_relp fixed bin (18) unsigned unal, 2 164 /* pointer (rel to defs) to the trap word */ 2 165 /* unless LINK_SELF_OFFSETNAME off of *system or create link */ 2 166 2 segname_relp fixed bin (18) unsigned unal, 2 167 /* pointer (rel to defs) to ACC reference name for segment referenced, 2 168* /*or section code for SELF links */ 2 169 2 offsetname_relp fixed bin (18) unsigned unal; 2 170 /* for OFFSETNAME links, ACC string of name of location. */ 2 171 /* for others, must be ZERO */ 2 172 2 173 2 174 /* Link Trap Pair */ 2 175 2 176 declare link_trap_ptr pointer; 2 177 declare 1 link_trap_pair aligned based (link_trap_ptr), 2 178 2 call_relp fixed bin (18) unsigned unaligned, 2 179 /* LINK18, link to thing to call */ 2 180 2 info_relp fixed bin (18) unsigned unaligned; 2 181 /* LINK18, link to argument list */ 2 182 2 183 2 184 /* initialization info for *system or *heap link */ 2 185 2 186 2 187 /* NOTE -------------------------------------------------- 2 188* the following structures defining initialization information are also 2 189* defined in fortran_storage.incl.pl1 system_link_init_info.incl.pl1 2 190* and should be kept equivalent 2 191* ------------------------------------------------------- 2 192**/ 2 193 2 194 declare ( 2 195 INIT_NO_INIT init (0), 2 196 INIT_COPY_INFO init (3), 2 197 INIT_DEFINE_AREA init (4), 2 198 INIT_LIST_TEMPLATE init (5), 2 199 INIT_DEFERRED init (6) 2 200 ) fixed bin internal static options (constant); 2 201 2 202 /* for type = 0 or 4 */ 2 203 2 204 declare link_init_ptr pointer; 2 205 declare 1 link_init aligned based (link_init_ptr), 2 206 2 n_words fixed bin (35), /* number to invent */ 2 207 2 type fixed bin; /* see types above */ 2 208 2 209 /* for type=3, there is data to copy */ 2 210 2 211 declare 1 link_init_copy_info aligned based (link_init_ptr), 2 212 2 header aligned like link_init, 2 213 2 initial_data (link_init_n_words refer (link_init_copy_info.header.n_words)) bit (36) aligned; 2 214 2 215 declare link_init_n_words fixed bin; 2 216 2 217 /* for type = 5, there is a list template to copy */ 2 218 2 219 declare 1 link_init_list_template 2 220 aligned based (link_init_ptr), 2 221 2 header aligned like link_init, 2 222 2 pad bit (18) unaligned, 2 223 2 n_words_in_list fixed bin (18) unsigned unaligned, 2 224 2 template (link_init_n_words_in_list refer (link_init_list_template.n_words_in_list)); 2 225 2 226 declare link_init_n_words_in_list 2 227 fixed bin; 2 228 2 229 /* A list template consists of a series of entries with the following 2 230* description, concatenated together. n_bits and datum are bit items, 2 231* to permit a wide range of inputs. 2 232* 2 233* 1. A 'repeat' of '0' signifies skipping of 'n_bits' bits. 2 234* 2. A 'n_bits' of '0' signifies the last item of the list. 2 235* 2 236* COMMON, VLA's, and LA's are presumed to start at the base pointer 2 237* of their particular storage section. */ 2 238 2 239 declare 1 list_template_entry aligned based, 2 240 2 n_bits fixed bin (35) aligned, /* size of datum */ 2 241 2 mbz bit (3) unaligned, /* future expansion */ 2 242 2 init_type fixed bin (3) unsigned unaligned, /* 0 normal init, 1 ptr init, 2 packed ptr init */ 2 243 2 repeat fixed bin (30) unsigned unaligned, 2 244 /* number of times to repeat datum */ 2 245 2 datum bit (link_init_n_bits_in_datum refer (list_template_entry.n_bits)); 2 246 2 247 2 248 /* the pointer_init_template represents the initialization information 2 249* for ITS and packed pointers. Both pointer types require the entire 2 250* 72 bit structure. 2 251**/ 2 252 2 253 dcl 1 pointer_init_template based, 2 254 2 ptr_type fixed bin (18) unsigned unaligned, /* 0 text section, 1 linkage section, 2 static section */ 2 255 2 section_offset fixed bin (18) unsigned unaligned, /* offset to item in specified section */ 2 256 2 word_offset fixed bin (18) unsigned unaligned, /* offset from section item to target in words */ 2 257 2 mbz bit (12) unaligned, 2 258 2 bit_offset fixed bin (6) unsigned unaligned; /* offset from section item|word offset to target in bits */ 2 259 2 260 2 261 declare link_init_n_bits_in_datum 2 262 fixed bin (35); 2 263 2 264 /* for type = 6, the init_info resides in another MSF component */ 2 265 /* target_relp is a linkage section offset to a partial link to */ 2 266 /* the base of the linkage section of the component containing */ 2 267 /* the actual init_info. link_relp is the offset of the actual */ 2 268 /* link within that linkage section. */ 2 269 2 270 declare 1 link_init_deferred aligned based (link_init_ptr), 2 271 2 header aligned like link_init, 2 272 2 target_relp fixed bin (18) unsigned unaligned, 2 273 2 link_relp fixed bin (18) unsigned unaligned; 2 274 2 275 /* Definition section hash table */ 2 276 2 277 declare def_ht_ptr pointer; 2 278 declare 1 definition_ht aligned based (def_ht_ptr), 2 279 2 n_entries fixed bin, 2 280 2 table (def_ht_n_entries refer (definition_ht.n_entries)) aligned, 2 281 3 def_relp fixed bin (18) unsigned unaligned, 2 282 3 unused bit (18) unaligned; 2 283 2 284 declare def_ht_n_entries fixed bin; 2 285 2 286 2 287 /* Component name ht */ 2 288 declare comp_ht_ptr pointer; 2 289 declare 1 component_ht aligned based (comp_ht_ptr), 2 290 2 n_entries fixed bin, 2 291 2 table (comp_ht_n_entries refer (component_ht.n_entries)) aligned, 2 292 3 def_relp fixed bin (18) unsigned unaligned, 2 293 /* hashed segname */ 2 294 3 block_hdr_relp fixed bin (18) unsigned unaligned; 2 295 /* first segname def of block containing def_relp */ 2 296 2 297 declare comp_ht_n_entries fixed bin; 2 298 2 299 /* Duplicate name table */ 2 300 2 301 declare dup_table_ptr pointer; 2 302 declare 1 duplicate_table aligned based (dup_table_ptr), 2 303 2 mbz bit (18) unaligned, /* to tell it from a definition */ 2 304 2 n_names fixed bin (18) unsigned unaligned, 2 305 /* n in table */ 2 306 2 table (dup_table_n_names refer (duplicate_table.n_names)) aligned, 2 307 3 def_relp fixed bin (18) unsigned unaligned, 2 308 3 block_hdr_relp fixed bin (18) unsigned unaligned; 2 309 2 310 declare dup_table_n_names fixed bin; 2 311 2 312 /* The msf_map is found in the definition section of an */ 2 313 /* object MSF component. It is used by the linker to */ 2 314 /* determine whether a segment is a component of an object */ 2 315 /* MSF or a standard single-segment object. */ 2 316 2 317 dcl msf_map_ptr ptr; 2 318 dcl 01 msf_map aligned based (msf_map_ptr), 2 319 02 version char (8), 2 320 02 component_count fixed bin (15) unsigned, 2 321 02 my_component fixed bin (15) unsigned; 2 322 2 323 dcl msf_map_version_1 char (8) static options (constant) 2 324 init ("msfmp1.0"); 2 325 2 326 declare acc_string_ptr pointer; 2 327 declare 1 acc_string aligned based (acc_string_ptr), 2 328 2 count fixed bin (9) unsigned unaligned, 2 329 2 string character (max (3, acc_string_length) refer (acc_string.count)) unaligned, 2 330 2 mbz bit (0) aligned; /* this causes the statement */ 2 331 /* unspec (acc_string) = ""b to zero out */ 2 332 /* the last word, if the string is not of length 0mod4 */ 2 333 2 334 declare acc_string_length fixed bin (21); 2 335 2 336 2 337 /* end include file definitions_dcls.incl.pl1 */ 4067 3 1 /* BEGIN INCLUDE FILE ... object_info.incl.pl1 3 2*coded February 8, 1972 by Michael J. Spier */ 3 3 /* modified May 26, 1972 by M. Weaver */ 3 4 /* modified 15 April, 1975 by M. Weaver */ 3 5 3 6 declare 1 object_info aligned based, /* structure containing object info based, returned by object_info_ */ 3 7 2 version_number fixed bin, /* version number of current structure format (=2) */ 3 8 2 textp pointer, /* pointer to beginning of text section */ 3 9 2 defp pointer, /* pointer to beginning of definition section */ 3 10 2 linkp pointer, /* pointer to beginning of linkage section */ 3 11 2 statp pointer, /* pointer to beginning of static section */ 3 12 2 symbp pointer, /* pointer to beginning of symbol section */ 3 13 2 bmapp pointer, /* pointer to beginning of break map (may be null) */ 3 14 2 tlng fixed bin, /* length in words of text section */ 3 15 2 dlng fixed bin, /* length in words of definition section */ 3 16 2 llng fixed bin, /* length in words of linkage section */ 3 17 2 ilng fixed bin, /* length in words of static section */ 3 18 2 slng fixed bin, /* length in words of symbol section */ 3 19 2 blng fixed bin, /* length in words of break map */ 3 20 2 format, /* word containing bit flags about object type */ 3 21 3 old_format bit(1) unaligned, /* on if segment isn't in new format, i.e. has old style object map */ 3 22 3 bound bit(1) unaligned, /* on if segment is bound */ 3 23 3 relocatable bit(1) unaligned, /* on if seg has relocation info in its first symbol block */ 3 24 3 procedure bit(1) unaligned, /* on if segment is an executable object program */ 3 25 3 standard bit(1) unaligned, /* on if seg is in standard format (more than just standard map) */ 3 26 3 gate bit(1) unaligned, /* on if segment is a gate */ 3 27 3 separate_static bit(1) unaligned, /* on if static not in linkage */ 3 28 3 links_in_text bit(1) unaligned, /* on if there are threaded links in text */ 3 29 3 perprocess_static bit (1) unaligned, /* on if static is not to be per run unit */ 3 30 3 pad bit(27) unaligned, 3 31 2 entry_bound fixed bin, /* entry bound if segment is a gate */ 3 32 2 textlinkp pointer, /* ptr to first link in text */ 3 33 3 34 /* LIMIT OF BRIEF STRUCTURE */ 3 35 3 36 2 compiler char(8) aligned, /* name of processor which generated segment */ 3 37 2 compile_time fixed bin(71), /* clock reading of date/time object was generated */ 3 38 2 userid char(32) aligned, /* standard Multics id of creator of object segment */ 3 39 2 cvers aligned, /* generator version name in printable char string form */ 3 40 3 offset bit(18) unaligned, /* offset of name in words relative to base of symbol section */ 3 41 3 length bit(18) unaligned, /* length of name in characters */ 3 42 2 comment aligned, /* printable comment concerning generator or generation of segment */ 3 43 3 offset bit(18) unaligned, /* offset of comment in words relative to base of symbol section */ 3 44 3 length bit(18) unaligned, /* length of comment in characters */ 3 45 2 source_map fixed bin, /* offset, relative to base of symbol section, of source map structure */ 3 46 3 47 /* LIMIT OF DISPLAY STRUCTURE */ 3 48 3 49 2 rel_text pointer, /* pointer to text section relocation info */ 3 50 2 rel_def pointer, /* pointer to definition section relocation info */ 3 51 2 rel_link pointer, /* pointer to linkage section relocation info */ 3 52 2 rel_static pointer, /* pointer to static section relocation info */ 3 53 2 rel_symbol pointer, /* pointer to symbol section relocation info */ 3 54 2 text_boundary fixed bin, /* specifies mod of text section base boundary */ 3 55 2 static_boundary fixed bin, /* specifies mod of internal static base boundary */ 3 56 /* currently not used by system */ 3 57 2 default_truncate fixed bin, /* offset rel to symbp for binder to automatically trunc. symb sect. */ 3 58 2 optional_truncate fixed bin; /* offset rel to symbp for binder to optionally trunc. symb sect. */ 3 59 3 60 declare object_info_version_2 fixed bin int static init(2); 3 61 3 62 /* END INCLUDE FILE ... object_info.incl.pl1 */ 4068 4 1 /* BEGIN INCLUDE FILE object_link_dcls.incl.pl1 BIM 1981 from linkdcl */ 4 2 4 3 4 4 /****^ HISTORY COMMENTS: 4 5* 1) change(86-05-02,Elhard), approve(86-05-02,MCR7391), 4 6* audit(86-11-18,Schroth), install(86-11-20,MR12.0-1222): 4 7* Modified to add partial_link structure for an object MSF partially snapped 4 8* link. 4 9* 2) change(86-11-13,DGHowe), approve(86-11-13,MCR7391), audit(86-11-13,Zwick), 4 10* install(86-11-20,MR12.0-1222): 4 11* Added a declaration of FAULT_TAG_1, FAULT_TAG_2 and FAULT_TAG_3. 4 12* END HISTORY COMMENTS */ 4 13 4 14 4 15 /* format: style3 */ 4 16 /* everything you ever wanted in a linkage section */ 4 17 4 18 /* 4 19* Last Modified (Date and Reason): 4 20* 15 Nov 1971 by C Garman 4 21* 6/75 by M.Weaver to add virgin_linkage_header declaration 4 22* 6/75 by S.Webber to comment existing structures better 4 23* 9/77 by M. Weaver to add run_depth to link 4 24* 7/81 by B. Margulies for firstref structure, unsigned fixed bins. 4 25* 3/83 by M. Weaver to add flags overlaying def_ptr 4 26**/ 4 27 4 28 declare 1 object_link based aligned, /* link pair in linkage section */ 4 29 2 header_relp fixed bin (17) unal, /* rel pointer to beginning of linkage, always negative */ 4 30 2 ringno fixed bin (3) unsigned unal, /* MBZ */ 4 31 2 mbz bit (6) unal, 4 32 2 run_depth fixed bin (2) unal, /* run unit depth, filled when link is snapped */ 4 33 2 tag bit (6) unal, /* fault tag. 46(8) if not snapped, 43(8) if snapped */ 4 34 2 expression_relp fixed bin (18) unsigned unal, /* pointer (rel to defs) of expression word */ 4 35 2 mbz2 bit (12) unal, 4 36 2 modifier bit (6) unal; /* modifier to be left in snapped link */ 4 37 4 38 declare 1 partial_link based aligned, /* partially snapped link */ 4 39 2 type fixed bin (3) unsigned unal, /* target section of link */ 4 40 2 component fixed bin (15) unsigned unal, /* target component index */ 4 41 2 mbz1 bit (12) unal, 4 42 2 tag bit (6) unal, /* fault tag 3 47(8), ITS 43(8) if snapped */ 4 43 4 44 2 offset fixed bin (18) unsigned unal, /* word offset of link */ 4 45 2 mbz2 bit (3) unal, 4 46 2 bit_offset fixed bin (6) unsigned unal, /* bit offset (in practice, always 0) */ 4 47 2 mbz3 bit (3) unal, 4 48 2 modifier bit (6) unal; /* modifier to be left in snapped link */ 4 49 4 50 declare 1 linkage_header based aligned, /* linkage block header */ 4 51 2 def_ptr ptr, /* pointer to definition section */ 4 52 2 symbol_ptr ptr unal, /* pointer to symbol section in object segment */ 4 53 2 original_linkage_ptr 4 54 ptr unal, /* pointer to linkage section in object segment */ 4 55 2 unused bit (72), 4 56 2 stats, 4 57 3 begin_links fixed bin (18) unsigned unal, /* offset (rel to this section) of first link */ 4 58 3 block_length fixed bin (18) unsigned unal, /* number of words in this linkage section */ 4 59 3 segment_number 4 60 fixed bin (18) unsigned unal, /* text segment number associated with this section */ 4 61 3 static_length fixed bin (18) unsigned unal; /* number of words of static for this segment */ 4 62 4 63 declare 1 linkage_header_flags 4 64 aligned based, /* overlay of def_ptr for flags */ 4 65 2 pad1 bit (28) unaligned, /* flags are in first word */ 4 66 2 static_vlas bit (1) unaligned, /* static section "owns" some LA/VLA segments */ 4 67 2 perprocess_static 4 68 bit (1) unaligned, /* 1 copy of static section is shared among all tasks/run units */ 4 69 2 pad2 bit (6) unaligned; 4 70 4 71 declare 1 virgin_linkage_header 4 72 aligned based, /* template for linkage header in object segment */ 4 73 2 pad bit (30) unaligned, /* is filled in by linker */ 4 74 2 defs_in_link bit (6) unaligned, /* =o20 if defs in linkage (nonstandard) */ 4 75 2 def_offset fixed bin (18) unsigned unaligned, 4 76 /* offset of definition section */ 4 77 2 first_ref_relp fixed bin (18) unsigned unaligned, 4 78 /* offset of trap-at-first-reference offset array */ 4 79 2 filled_in_later bit (144), 4 80 2 link_begin fixed bin (18) unsigned unaligned, 4 81 /* offset of first link */ 4 82 2 linkage_section_lng 4 83 fixed bin (18) unsigned unaligned, 4 84 /* length of linkage section */ 4 85 2 segno_pad fixed bin (18) unsigned unaligned, 4 86 /* will be segment number of copied linkage */ 4 87 2 static_length fixed bin (18) unsigned unaligned; 4 88 /* length of static section */ 4 89 4 90 declare 1 fr_traps based aligned, /* First Reference Trap Procedures */ 4 91 2 decl_vers fixed bin, /* version of this struc, value=1, ABS reloc */ 4 92 2 n_traps fixed bin, /* number of traps on this segment, ABS */ 4 93 2 trap_array (n_fr_traps refer (fr_traps.n_traps)) aligned, 4 94 3 call_relp fixed bin (18) unsigned unaligned, 4 95 /* LINK18, offset of link defining procedure to call */ 4 96 3 info_relp fixed bin (18) unsigned unaligned; 4 97 /* LINK18, offser of link defining argument list for trap proc */ 4 98 4 99 declare FR_TRAPS_VERSION_1 init (1) fixed bin internal static options (constant); 4 100 declare FAULT_TAG_1 bit(6) unaligned init ("40"b3) static options (constant); 4 101 declare FAULT_TAG_2 bit(6) unaligned init ("46"b3) static options (constant); 4 102 declare FAULT_TAG_3 bit(6) unaligned init ("47"b3) static options (constant); 4 103 4 104 /* END INCLUDE FILE object_link_dcls.incl.pl1 */ 4069 5 1 /* BEGIN INCLUDE FILE ... object_map.incl.pl1 */ 5 2 /* coded February 8, 1972 by Michael J. Spier */ 5 3 /* Last modified on 05/20/72 at 13:29:38 by R F Mabee. */ 5 4 /* Made to agree with Spier's document on 20 May 1972 by R F Mabee. */ 5 5 /* modified on 6 May 1972 by R F Mabee to add map_ptr at end of object map. */ 5 6 /* modified May, 1972 by M. Weaver */ 5 7 /* modified 5/75 by E. Wiatrowski and 6/75 by M. Weaver */ 5 8 /* modified 5/77 by M. Weaver to add perprocess_static bit */ 5 9 5 10 declare 1 object_map aligned based, /* Structure describing standard object map */ 5 11 5 12 2 decl_vers fixed bin, /* Version number of current structure format */ 5 13 2 identifier char (8) aligned, /* Must be the constant "obj_map" */ 5 14 2 text_offset bit (18) unaligned, /* Offset relative to base of object segment of base of text section */ 5 15 2 text_length bit (18) unaligned, /* Length in words of text section */ 5 16 2 definition_offset bit (18) unaligned, /* Offset relative to base of object seg of base of definition section */ 5 17 2 definition_length bit (18) unaligned, /* Length in words of definition section */ 5 18 2 linkage_offset bit (18) unaligned, /* Offset relative to base of object seg of base of linkage section */ 5 19 2 linkage_length bit (18) unaligned, /* Length in words of linkage section */ 5 20 2 static_offset bit (18) unaligned, /* Offset relative to base of obj seg of static section */ 5 21 2 static_length bit (18) unaligned, /* Length in words of static section */ 5 22 2 symbol_offset bit (18) unaligned, /* Offset relative to base of object seg of base of symbol section */ 5 23 2 symbol_length bit (18) unaligned, /* Length in words of symbol section */ 5 24 2 break_map_offset bit (18) unaligned, /* Offset relative to base of object seg of base of break map */ 5 25 2 break_map_length bit (18) unaligned, /* Length in words of break map */ 5 26 2 entry_bound bit (18) unaligned, /* Offset in text of last gate entry */ 5 27 2 text_link_offset bit (18) unaligned, /* Offset of first text-embedded link */ 5 28 2 format aligned, /* Word containing bit flags about object type */ 5 29 3 bound bit (1) unaligned, /* On if segment is bound */ 5 30 3 relocatable bit (1) unaligned, /* On if segment has relocation info in its first symbol block */ 5 31 3 procedure bit (1) unaligned, /* On if segment is an executable object program */ 5 32 3 standard bit (1) unaligned, /* On if segment is in standard format (more than just standard map) */ 5 33 3 separate_static bit(1) unaligned, /* On if static is a separate section from linkage */ 5 34 3 links_in_text bit (1) unaligned, /* On if there are text-embedded links */ 5 35 3 perprocess_static bit (1) unaligned, /* On if static is not to be per run unit */ 5 36 3 unused bit (29) unaligned; /* Reserved */ 5 37 5 38 declare map_ptr bit(18) aligned based; /* Last word of the segment. It points to the base of the object map. */ 5 39 5 40 declare object_map_version_2 fixed bin static init(2); 5 41 5 42 /* END INCLUDE FILE ... object_map.incl.pl1 */ 4070 6 1 /**** START OF: ocu_structures.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 structures used internally be ocu_ 6 7* during object segment definition and generation. 6 8* 2) change(86-12-19,Elhard), approve(86-12-19,PBF7505), 6 9* audit(86-12-22,DGHowe), install(87-01-05,MR12.0-1256): 6 10* Changed declaration of list_template initialization to explicitly declare 6 11* template words as bit (36) rather than letting them default to fixed bin 6 12* (17) to prevent size errors in debugging versions. 6 13* END HISTORY COMMENTS */ 6 14 6 15 /*** ****************************************************************/ 6 16 /*** */ 6 17 /*** Name: ocu_structures */ 6 18 /*** Function: these structures are the intermediate structures */ 6 19 /*** used by ocu_ to maintain object segment info */ 6 20 /*** until the object segment is created. */ 6 21 /*** */ 6 22 /*** ****************************************************************/ 6 23 6 24 /*** ****************************************************************/ 6 25 /*** */ 6 26 /*** Name: ocu_data */ 6 27 /*** Function: This data structure maintains the general data */ 6 28 /*** for the object segment and pointers to the info */ 6 29 /*** structures for the various sections. */ 6 30 /*** */ 6 31 /*** ****************************************************************/ 6 32 6 33 dcl ocu_datap ptr; 6 34 dcl ocu_data_version_1 char (8) static options (constant) 6 35 init ("ocu_ 1.0"); 6 36 6 37 dcl 01 ocu_data aligned based (ocu_datap), 6 38 02 version char (8), 6 39 02 flags aligned, 6 40 03 bound bit (1) unaligned, 6 41 03 relocatable bit (1) unaligned, 6 42 03 procedure bit (1) unaligned, 6 43 03 separate_static bit (1) unaligned, 6 44 03 perprocess_static bit (1) unaligned, 6 45 03 no_hash_table bit (1) unaligned, 6 46 03 mbz bit (30) unaligned, 6 47 02 target aligned, 6 48 03 dir char (168) unaligned, 6 49 03 entry char (32) unaligned, 6 50 03 segp ptr, 6 51 03 bc fixed bin (24), 6 52 03 acinfop ptr, 6 53 02 msf_info aligned, 6 54 03 component_count fixed bin, 6 55 03 my_component fixed bin, 6 56 02 lengths aligned, 6 57 03 text fixed bin (18) unsigned, 6 58 03 defs fixed bin (18) unsigned, 6 59 03 link fixed bin (18) unsigned, 6 60 03 stat fixed bin (18) unsigned, 6 61 03 symb fixed bin (18) unsigned, 6 62 02 text_infop ptr, 6 63 02 text_relinfop ptr, 6 64 02 def_infop ptr, 6 65 02 string_map_infop ptr, 6 66 02 string_segp ptr, 6 67 02 exp_word_infop ptr, 6 68 02 type_pair_infop ptr, 6 69 02 trap_pair_infop ptr, 6 70 02 init_infop ptr, 6 71 02 init_segp ptr, 6 72 02 static_infop ptr, 6 73 02 link_infop ptr, 6 74 02 firstref_trap_infop ptr, 6 75 02 symbol_infop ptr, 6 76 02 symbol_relinfop ptr; 6 77 6 78 /*** ****************************************************************/ 6 79 /*** */ 6 80 /*** Name: ocu_data_ptrs */ 6 81 /*** Function: This data structure is identical to the ocu_data */ 6 82 /*** structure except that the pointers to the other */ 6 83 /*** extensible structures are replaced by an array of */ 6 84 /*** pointers to be used by the get_temp_segments_ */ 6 85 /*** and release_temp_segments_ subroutines. */ 6 86 /*** */ 6 87 /*** ****************************************************************/ 6 88 6 89 dcl 01 ocu_data_ptrs aligned based (ocu_datap), 6 90 02 version char (8), 6 91 02 flags aligned, 6 92 03 bound bit (1) unaligned, 6 93 03 relocatable bit (1) unaligned, 6 94 03 procedure bit (1) unaligned, 6 95 03 separate_static bit (1) unaligned, 6 96 03 perprocess_static bit (1) unaligned, 6 97 03 no_hash_table bit (1) unaligned, 6 98 03 mbz bit (30) unaligned, 6 99 02 target aligned, 6 100 03 dir char (168) unaligned, 6 101 03 entry char (32) unaligned, 6 102 03 segp ptr, 6 103 03 bc fixed bin (24), 6 104 03 acinfop ptr, 6 105 02 msf_map aligned, 6 106 03 component_count fixed bin, 6 107 03 my_component fixed bin, 6 108 02 lengths aligned, 6 109 03 text fixed bin (18) unsigned, 6 110 03 defs fixed bin (18) unsigned, 6 111 03 link fixed bin (18) unsigned, 6 112 03 stat fixed bin (18) unsigned, 6 113 03 symb fixed bin (18) unsigned, 6 114 02 temp_segs (15) ptr; 6 115 6 116 /*** ****************************************************************/ 6 117 /*** */ 6 118 /*** Name: text_info */ 6 119 /*** Function: This structure contains the block of words which */ 6 120 /*** make up the text section. */ 6 121 /*** */ 6 122 /*** ****************************************************************/ 6 123 6 124 dcl 01 text_info aligned based, 6 125 02 header aligned, 6 126 03 N_text_words fixed bin, 6 127 03 text_relinfol fixed bin (21), 6 128 02 text_word (0 refer (text_info.N_text_words)) 6 129 bit (36); 6 130 6 131 /*** ****************************************************************/ 6 132 /*** */ 6 133 /*** Name: relinfo_str */ 6 134 /*** Function: This string contains the relocation info for the */ 6 135 /*** text or symbol word arrays. The relinfo is */ 6 136 /*** stored in a separate segment since these sections */ 6 137 /*** could conceivably be close to a full segment in */ 6 138 /*** size. */ 6 139 /*** */ 6 140 /*** ****************************************************************/ 6 141 6 142 dcl relinfo_strl fixed bin (21); 6 143 dcl relinfo_strp ptr; 6 144 dcl relinfo_str char (relinfo_strl) based (relinfo_strp); 6 145 6 146 /*** ****************************************************************/ 6 147 /*** */ 6 148 /*** Name: def_info */ 6 149 /*** Function: This structure contains the definition list for */ 6 150 /*** the object segment. No threading information is */ 6 151 /*** included as this will be synthesized when the */ 6 152 /*** object is closed and the real definition section */ 6 153 /*** is constructed. */ 6 154 /*** */ 6 155 /*** ****************************************************************/ 6 156 6 157 dcl 01 def_info aligned based, 6 158 02 header aligned, 6 159 03 N_defs fixed bin, 6 160 02 def (0 refer (def_info.N_defs)) like def_entry; 6 161 6 162 dcl 01 def_entry aligned based, 6 163 02 strx fixed bin, 6 164 02 class fixed bin, 6 165 02 offset fixed bin, 6 166 02 flags aligned, 6 167 03 ignore bit (1) unaligned, 6 168 03 entry bit (1) unaligned, 6 169 03 retain bit (1) unaligned, 6 170 03 indirect bit (1) unaligned, 6 171 03 duplicate bit (1) unaligned, 6 172 03 mbz bit (13) unaligned, 6 173 02 dup_tbl_relp fixed bin (18) unsigned unaligned; 6 174 6 175 /*** ****************************************************************/ 6 176 /*** */ 6 177 /*** Name: string_map_info */ 6 178 /*** Function: This structure defines the ACC strings to be */ 6 179 /*** placed in the definition section. All references */ 6 180 /*** to strings in other structures are stores as the */ 6 181 /*** stringmap index of the appropriate string. The */ 6 182 /*** actual text is stored in a separate segment and */ 6 183 /*** individual strings identified as a start point */ 6 184 /*** and length. */ 6 185 /*** */ 6 186 /*** ****************************************************************/ 6 187 6 188 dcl 01 string_map_info aligned based, 6 189 02 header aligned, 6 190 03 string_segl fixed bin (21), 6 191 03 N_strings fixed bin, 6 192 02 string dim (0 refer (string_map_info.N_strings)) 6 193 like string_map_entry; 6 194 6 195 dcl 01 string_map_entry aligned based, 6 196 02 start_offset fixed bin (18) unsigned, 6 197 02 length fixed bin (18) unsigned, 6 198 02 relp fixed bin (18) unsigned; 6 199 6 200 /*** ****************************************************************/ 6 201 /*** */ 6 202 /*** Name: exp_word_info */ 6 203 /*** Function: This structure maintains an array of expression */ 6 204 /*** words to be inserted into the definition section. */ 6 205 /*** Expression words are referenced in the associated */ 6 206 /*** link by an array index in this array. The type */ 6 207 /*** pair associated with this expression word is */ 6 208 /*** identified by index in the type_pairs structure. */ 6 209 /*** */ 6 210 /*** ****************************************************************/ 6 211 6 212 dcl 01 exp_word_info aligned based, 6 213 02 header aligned, 6 214 03 N_exp_words fixed bin, 6 215 02 exp_wd (0 refer (exp_word_info.N_exp_words)) 6 216 like exp_word_entry; 6 217 6 218 dcl 01 exp_word_entry aligned based, 6 219 02 expression fixed bin (18) unsigned, 6 220 02 type_pairx fixed bin (18) unsigned, 6 221 02 relp fixed bin (18) unsigned; 6 222 6 223 /*** ****************************************************************/ 6 224 /*** */ 6 225 /*** Name: type_pair_info */ 6 226 /*** Function: This structure contains an array of type pairs to */ 6 227 /*** be inserted into the definition section. Each */ 6 228 /*** type pair entry contains the type, and class */ 6 229 /*** (only for type=1 and type=5), init_info table */ 6 230 /*** index (only for type=5), trap table index (only */ 6 231 /*** for type^=5, hopefully not ever), segname */ 6 232 /*** stringmap index (only for type=3 and type=4), and */ 6 233 /*** offsetname stringmap index (only for type=4 and */ 6 234 /*** type=5). */ 6 235 /*** */ 6 236 /*** ****************************************************************/ 6 237 6 238 dcl 01 type_pair_info aligned based, 6 239 02 header aligned, 6 240 03 N_type_pairs fixed bin, 6 241 02 type_pr (0 refer (type_pair_info.N_type_pairs)) 6 242 like type_pair_entry; 6 243 6 244 dcl 01 type_pair_entry aligned based, 6 245 02 type fixed bin (18) unsigned, 6 246 02 init_infox fixed bin (18) unsigned, 6 247 02 segnamex fixed bin (18) unsigned, 6 248 02 offsetnamex fixed bin (18) unsigned, 6 249 02 relp fixed bin (18) unsigned; 6 250 6 251 /*** ****************************************************************/ 6 252 /*** */ 6 253 /*** Name: trap_pair_info */ 6 254 /*** Function: This structure contains trap pairs for specifying */ 6 255 /*** trap-before-links. Hopefully, this will never be */ 6 256 /*** used, but since it is still documented, it should */ 6 257 /*** be supported. */ 6 258 /*** */ 6 259 /*** ****************************************************************/ 6 260 6 261 dcl 01 trap_pair_info aligned based, 6 262 02 header aligned, 6 263 03 N_trap_pairs fixed bin, 6 264 02 trap_pair (0 refer (trap_pair_info.N_trap_pairs)) 6 265 like trap_pair_entry; 6 266 6 267 dcl 01 trap_pair_entry aligned based, 6 268 02 call_relp fixed bin (18) unsigned, 6 269 02 info_relp fixed bin (18) unsigned, 6 270 02 relp fixed bin (18) unsigned; 6 271 6 272 /*** ****************************************************************/ 6 273 /*** */ 6 274 /*** Name: init_info */ 6 275 /*** Function: This structure defines the init_info to be used */ 6 276 /*** for each type-5, class-5, (*system) link. Each */ 6 277 /*** entry defines a single initialization info. Since */ 6 278 /*** init_infos are of variable length, the actual */ 6 279 /*** init_info blocks supplied are appended back to */ 6 280 /*** back in another segment (pointed to by */ 6 281 /*** ocu_data.init_segp), and the init_info array */ 6 282 /*** giving start word and length. */ 6 283 /*** */ 6 284 /*** ****************************************************************/ 6 285 6 286 dcl 01 init_info aligned based, 6 287 02 header aligned, 6 288 03 init_segl fixed bin, 6 289 03 N_inits fixed bin, 6 290 02 init (0 refer (init_info.N_inits)) like init_entry; 6 291 6 292 dcl 01 init_entry aligned based, 6 293 02 start fixed bin (18) unsigned, 6 294 02 length fixed bin (18) unsigned, 6 295 02 relp fixed bin (18) unsigned; 6 296 6 297 /*** ****************************************************************/ 6 298 /*** */ 6 299 /*** Name: text_seg */ 6 300 /*** Function: This is the character string used to contain the */ 6 301 /*** actual text of the strings in the stringmap. */ 6 302 /*** */ 6 303 /*** ****************************************************************/ 6 304 6 305 dcl text_segl fixed bin (21); 6 306 dcl text_segp ptr; 6 307 dcl text_seg char (text_segl) based (text_segp); 6 308 6 309 /*** ****************************************************************/ 6 310 /*** */ 6 311 /*** Name: static_info */ 6 312 /*** Function: This structure defines the block of words that */ 6 313 /*** will make up the static section. No relocation */ 6 314 /*** information is required. */ 6 315 /*** */ 6 316 /*** ****************************************************************/ 6 317 6 318 dcl 01 static_info aligned based, 6 319 02 header aligned, 6 320 03 N_static_words fixed bin, 6 321 02 static_word dim (0 refer (static_info.N_static_words)) 6 322 bit (36); 6 323 6 324 /*** ****************************************************************/ 6 325 /*** */ 6 326 /*** Name: link_info */ 6 327 /*** Function: This structure defines the information required */ 6 328 /*** to construct the linkage section. It contains */ 6 329 /*** the information to be inserted as the link array. */ 6 330 /*** Each link entry contains the index of the */ 6 331 /*** exp_word entry for this link as well as the link */ 6 332 /*** modifier. No header information or header offset */ 6 333 /*** is included as this will be calculated when the */ 6 334 /*** real linkage section is produced. */ 6 335 /*** */ 6 336 /*** ****************************************************************/ 6 337 6 338 dcl 01 link_info aligned based, 6 339 02 header aligned, 6 340 03 N_links fixed bin, 6 341 02 link (0 refer (link_info.N_links)) like link_entry; 6 342 6 343 dcl 01 link_entry aligned based, 6 344 02 exp_wordx fixed bin (18) unsigned, 6 345 02 type fixed bin (18) unsigned, 6 346 02 component fixed bin (18) unsigned, 6 347 02 offset fixed bin (18) unsigned, 6 348 02 modifier bit (6); 6 349 6 350 /*** ****************************************************************/ 6 351 /*** */ 6 352 /*** Name: firstref_trap_info */ 6 353 /*** Function: This structure contains the information required */ 6 354 /*** to construct a first reference trap block in the */ 6 355 /*** linkage section if one is required. Each trap */ 6 356 /*** entry contains a relpointer to the call link, */ 6 357 /*** which must be relocated to account for the static */ 6 358 /*** section, as other linkage references, and a */ 6 359 /*** relpointer to the info link (likewise), or 0 if */ 6 360 /*** no info link is required. */ 6 361 /*** */ 6 362 /*** ****************************************************************/ 6 363 6 364 dcl 01 firstref_trap_info aligned based, 6 365 02 header aligned, 6 366 03 N_traps fixed bin, 6 367 02 trap (0 refer (firstref_trap_info.N_traps)) 6 368 like firstref_trap_entry; 6 369 6 370 dcl 01 firstref_trap_entry aligned based, 6 371 02 call_relp fixed bin (18) unsigned, 6 372 02 info_relp fixed bin (18) unsigned; 6 373 6 374 /*** ****************************************************************/ 6 375 /*** */ 6 376 /*** Name: symbol_info */ 6 377 /*** Function: This data structure contains the words which will */ 6 378 /*** make up the symbol section and the associated */ 6 379 /*** relocation info for each halfword. Note that the */ 6 380 /*** relocation info itself should not be included in */ 6 381 /*** the symbol words emitted as it will be generated */ 6 382 /*** by ocu_. Also note that the first thing in the */ 6 383 /*** symbol section is assumed to be a standard symbol */ 6 384 /*** header, so that the relocation relp values can be */ 6 385 /*** properly inserted. */ 6 386 /*** */ 6 387 /*** ****************************************************************/ 6 388 6 389 dcl 01 symbol_info aligned based (ocu_data.symbol_infop), 6 390 02 header aligned, 6 391 03 N_symbol_words fixed bin, 6 392 03 symbol_relinfol fixed bin (21), 6 393 02 symbol_word (0 refer (symbol_info.N_symbol_words)) 6 394 bit (36); 6 395 6 396 /*** ****************************************************************/ 6 397 /*** */ 6 398 /*** Name: relinfo_blocks */ 6 399 /*** Function: this is the relocation info bit strings to be */ 6 400 /*** inserted into the symbol section. */ 6 401 /*** */ 6 402 /*** ****************************************************************/ 6 403 6 404 dcl 01 relinfo_blocks aligned based, 6 405 02 header aligned, 6 406 03 no_relinfo bit (1), 6 407 03 n_bits fixed bin, 6 408 03 section dim (1:4), 6 409 04 start_offset fixed bin, 6 410 04 n_bits fixed bin, 6 411 02 relbits bit (0 refer (relinfo_blocks.header.n_bits)) 6 412 aligned; 6 413 6 414 dcl Rel_text fixed bin static options (constant) init (1); 6 415 dcl Rel_defs fixed bin static options (constant) init (2); 6 416 dcl Rel_link fixed bin static options (constant) init (3); 6 417 dcl Rel_symb fixed bin static options (constant) init (4); 6 418 6 419 /*** ****************************************************************/ 6 420 /*** */ 6 421 /*** Name: relinfo */ 6 422 /*** Function: This structure is the structure of the relocation */ 6 423 /*** information as stored in the object segment and */ 6 424 /*** as used in the creation time relocation info */ 6 425 /*** storage. */ 6 426 /*** */ 6 427 /*** ****************************************************************/ 6 428 6 429 dcl 01 relinfo aligned based, 6 430 02 header aligned, 6 431 03 decl_vers fixed bin, 6 432 03 n_bits fixed bin, 6 433 02 relbits bit (0 refer (relinfo.n_bits)) aligned; 6 434 6 435 /*** ****************************************************************/ 6 436 /*** */ 6 437 /*** Name: init_list_template */ 6 438 /*** Function: This structure is the link_init_list_template */ 6 439 /*** init info block restructured so a like attribute */ 6 440 /*** can be used without contortions. */ 6 441 /*** */ 6 442 /*** ****************************************************************/ 6 443 6 444 dcl 01 init_list_template aligned based, 6 445 02 full_header aligned, 6 446 03 header aligned like link_init, 6 447 03 pad bit (18) unaligned, 6 448 03 n_words_in_list fixed bin (18) unsigned unaligned, 6 449 02 template (0 refer (init_list_template.n_words_in_list)) 6 450 bit (36); 6 451 6 452 /*** ****************************************************************/ 6 453 /*** */ 6 454 /*** Name: template_entry */ 6 455 /*** Function: This structure is the list_template_entry */ 6 456 /*** reorganized so that a like attribute declaration */ 6 457 /*** can be used without contortions. */ 6 458 /*** */ 6 459 /*** ****************************************************************/ 6 460 6 461 dcl 01 template_entry aligned based, 6 462 02 header aligned, 6 463 03 n_bits fixed bin (35) aligned, 6 464 03 mbz bit (3) unaligned, 6 465 03 init_type fixed bin (3) unsigned unaligned, 6 466 03 repeat fixed bin (30) unsigned unaligned, 6 467 02 datum bit (0 refer (list_template_entry.n_bits)); 6 468 6 469 /*** ****************************************************************/ 6 470 /*** */ 6 471 /*** Name: msf_symbol_scn */ 6 472 /*** Function: This structure is the symbol section for creating */ 6 473 /*** component 0 of an object MSF. It contains the */ 6 474 /*** minimal information required for component 0 to */ 6 475 /*** be a real live object segment. */ 6 476 /*** */ 6 477 /*** ****************************************************************/ 6 478 6 479 dcl 01 msf_symbol_scn aligned based, 6 480 02 header aligned, 6 481 03 decl_version fixed bin, 6 482 03 identifier char (8) aligned, 6 483 03 gen_number fixed bin, 6 484 03 gen_created fixed bin (71), 6 485 03 object_created fixed bin (71), 6 486 03 generator char (8), 6 487 03 gen_version unaligned, 6 488 04 offset fixed bin (18) unsigned, 6 489 04 size fixed bin (18) unsigned, 6 490 03 userid unaligned, 6 491 04 offset fixed bin (18) unsigned, 6 492 04 size fixed bin (18) unsigned, 6 493 03 comment unaligned, 6 494 04 offset fixed bin (18) unsigned, 6 495 04 size fixed bin (18) unsigned, 6 496 03 text_boundary fixed bin (18) unsigned unaligned, 6 497 03 stat_boundary fixed bin (18) unsigned unaligned, 6 498 03 source_map fixed bin (18) unsigned unaligned, 6 499 03 area_pointer fixed bin (18) unsigned unaligned, 6 500 03 backpointer fixed bin (18) unsigned unaligned, 6 501 03 block_size fixed bin (18) unsigned unaligned, 6 502 03 next_block fixed bin (18) unsigned unaligned, 6 503 03 rel_text fixed bin (18) unsigned unaligned, 6 504 03 rel_def fixed bin (18) unsigned unaligned, 6 505 03 rel_link fixed bin (18) unsigned unaligned, 6 506 03 rel_symbol fixed bin (18) unsigned unaligned, 6 507 03 mini_truncate fixed bin (18) unsigned unaligned, 6 508 03 maxi_truncate fixed bin (18) unsigned unaligned, 6 509 02 user aligned char (user_length 6 510 refer(msf_symbol_scn.header.userid.size)), 6 511 02 version aligned char (version_length 6 512 refer(msf_symbol_scn.header.gen_version.size)); 6 513 dcl user_length fixed bin; 6 514 dcl version_length fixed bin; 6 515 6 516 /*** ****************************************************************/ 6 517 /*** */ 6 518 /*** Name: msf_info */ 6 519 /*** Function: this structure is used to retain the list of */ 6 520 /*** components in the MSF */ 6 521 /*** */ 6 522 /*** ****************************************************************/ 6 523 6 524 dcl 01 msf_info aligned based, 6 525 02 header aligned, 6 526 03 containing_dir char (168) unaligned, 6 527 03 gen_info aligned, 6 528 04 gen_created fixed bin (71), 6 529 04 generator char (8), 6 530 04 gen_number fixed bin, 6 531 04 gen_version char (512) varying, 6 532 03 N_components fixed bin, 6 533 02 component dim (0 refer (msf_info.N_components)), 6 534 03 segp ptr, 6 535 03 bc fixed bin (24), 6 536 03 text_relp fixed bin (18) unsigned, 6 537 03 defn_relp fixed bin (18) unsigned, 6 538 03 link_relp fixed bin (18) unsigned, 6 539 03 stat_relp fixed bin (18) unsigned, 6 540 03 symb_relp fixed bin (18) unsigned; 6 541 6 542 /**** END OF: ocu_structures.incl.pl1 * * * * * */ 4071 7 1 /* START OF: ocu_dcls.incl.pl1 * * * * * */ 7 2 7 3 /****^ HISTORY COMMENTS: 7 4* 1) change(86-08-12,Elhard), approve(86-08-12,MCR7505), 7 5* audit(86-12-10,DGHowe), install(86-12-10,MR12.0-1241): 7 6* Originally written to define the subroutines and data structures used by 7 7* callers of ocu_. 7 8* END HISTORY COMMENTS */ 7 9 7 10 /*** ****************************************************************/ 7 11 /*** */ 7 12 /*** Name: ocu_dcls */ 7 13 /*** Function: These are the entrypoints and structures required */ 7 14 /*** to use the ocu_ object creation utilities. */ 7 15 /*** */ 7 16 /*** ****************************************************************/ 7 17 7 18 /* open option flags */ 7 19 7 20 dcl OPEN_FLAGS_BOUND bit (6) static options (constant) 7 21 init ("100000"b); 7 22 dcl OPEN_FLAGS_RELOCATABLE bit (6) static options (constant) 7 23 init ("010000"b); 7 24 dcl OPEN_FLAGS_PROCEDURE bit (6) static options (constant) 7 25 init ("001000"b); 7 26 dcl OPEN_FLAGS_SEPARATE_STATIC 7 27 bit (6) static options (constant) 7 28 init ("000100"b); 7 29 dcl OPEN_FLAGS_PERPROCESS_STATIC 7 30 bit (6) static options (constant) 7 31 init ("000010"b); 7 32 dcl OPEN_FLAGS_NO_HASHTABLE bit (6) static options (constant) 7 33 init ("000001"b); 7 34 7 35 /* definition flags */ 7 36 7 37 dcl DEFINITION_FLAGS_IGNORE bit (4) static options (constant) init ("1000"b); 7 38 dcl DEFINITION_FLAGS_ENTRY bit (4) static options (constant) init ("0100"b); 7 39 dcl DEFINITION_FLAGS_RETAIN bit (4) static options (constant) init ("0010"b); 7 40 dcl DEFINITION_FLAGS_INDIRECT 7 41 bit (4) static options (constant) init ("0001"b); 7 42 7 43 /* input structures */ 7 44 7 45 dcl word_arrayp ptr; 7 46 dcl word_arrayl fixed bin (18) unsigned; 7 47 7 48 dcl word_array(word_arrayl) bit (36) based (word_arrayp); 7 49 7 50 dcl reloc_strp ptr; 7 51 dcl reloc_strl fixed bin (21); 7 52 7 53 dcl reloc_str char (reloc_strl) based (reloc_strp); 7 54 7 55 dcl component_listp ptr; 7 56 dcl component_count fixed bin (15) unsigned; 7 57 7 58 dcl component_list (1:component_count) 7 59 ptr based (component_listp); 7 60 7 61 dcl 01 gen_info aligned based, 7 62 02 gen_created fixed bin (71), 7 63 02 generator char (8), 7 64 02 gen_number fixed bin, 7 65 02 gen_version char (512) varying; 7 66 7 67 /* entrypoint declarations */ 7 68 7 69 dcl ocu_$open /* setup to create an object */ 7 70 entry (char(*), /* directory name (in ) */ 7 71 char(*), /* entry name (in ) */ 7 72 bit(*), /* option flags (in ) */ 7 73 ptr, /* ocu_data pointer (out) */ 7 74 fixed bin(35)); /* error code (out) */ 7 75 7 76 dcl ocu_$close /* create the object segment */ 7 77 entry (ptr, /* ocu_data pointer (in ) */ 7 78 fixed bin(35)); /* error code (out) */ 7 79 7 80 dcl ocu_$release /* release storage on cleanup */ 7 81 entry (ptr); /* ocu_data pointer (in ) */ 7 82 7 83 dcl ocu_$emit_text /* emit a block of text words */ 7 84 entry (ptr, /* ocu_data pointer (in ) */ 7 85 ptr, /* word array pointer (in ) */ 7 86 ptr, /* reloc string pointer (in ) */ 7 87 fixed bin (18) uns) /* word count (in ) */ 7 88 returns(fixed bin (18) uns); /* text relp (out) */ 7 89 7 90 dcl ocu_$emit_definition /* emit a single definition entry */ 7 91 entry (ptr, /* ocu_data pointer (in ) */ 7 92 char(*) var, /* definition name (in ) */ 7 93 fixed bin (3), /* target section (in ) */ 7 94 fixed bin (18) uns, /* offset in section (in ) */ 7 95 bit(*)) /* definition flags (in ) */ 7 96 returns(fixed bin (18) uns); /* definition relp (out) */ 7 97 7 98 dcl ocu_$emit_segname /* emit a single segname definition */ 7 99 entry (ptr, /* ocu_data pointer (in ) */ 7 100 char(*) var, /* segname (in ) */ 7 101 bit(*)) /* definition flags (in ) */ 7 102 returns(fixed bin (18) uns); /* definition relp (out) */ 7 103 7 104 dcl ocu_$emit_msf_map /* emit an msf map (MSF components) */ 7 105 entry (ptr, /* ocu_data pointer (in ) */ 7 106 fixed bin (15) uns, /* component count (in ) */ 7 107 fixed bin (15) uns); /* my component (in ) */ 7 108 7 109 dcl ocu_$emit_static /* emit a block of static words */ 7 110 entry (ptr, /* ocu_data pointer (in ) */ 7 111 ptr, /* word array pointer (in ) */ 7 112 fixed bin (18) uns) /* word count (in ) */ 7 113 returns(fixed bin (18) uns); /* static relp (out) */ 7 114 7 115 dcl ocu_$emit_link /* emit a single external link */ 7 116 entry (ptr, /* ocu_data pointer (in ) */ 7 117 fixed bin (3), /* link type (in ) */ 7 118 fixed bin (3), /* link class (in ) */ 7 119 char(*) var, /* target refname (in ) */ 7 120 char(*) var, /* target definition (in ) */ 7 121 fixed bin, /* expression offset (in ) */ 7 122 bit(6), /* link modifier (in ) */ 7 123 ptr) /* init info pointer (in ) */ 7 124 returns(fixed bin (18) uns); /* link relp (out) */ 7 125 7 126 dcl ocu_$emit_partial_link /* emit a single partial link */ 7 127 entry (ptr, /* ocu_data pointer (in ) */ 7 128 fixed bin (15) uns, /* target component (in ) */ 7 129 fixed bin (3), /* target section (in ) */ 7 130 fixed bin (18) uns, /* offset in section (in ) */ 7 131 bit(6)) /* link modifier (in ) */ 7 132 returns(fixed bin (18) uns); /* link relp (out) */ 7 133 7 134 dcl ocu_$emit_firstref_trap /* add a trap to the firstref block */ 7 135 entry (ptr, /* ocu_data pointer (in ) */ 7 136 fixed bin (18) uns, /* call relp (in ) */ 7 137 fixed bin (18) uns); /* info relp (in ) */ 7 138 7 139 dcl ocu_$emit_symbol /* emit a block of symbol words */ 7 140 entry (ptr, /* ocu_data pointer (in ) */ 7 141 ptr, /* word array pointer (in ) */ 7 142 ptr, /* reloc string pointer (in ) */ 7 143 fixed bin (18) uns) /* word count (in ) */ 7 144 returns(fixed bin (18) uns); /* symbol relp (out) */ 7 145 7 146 dcl ocu_$backpatch /* patch a word in the text/symbol scn */ 7 147 entry (ptr, /* ocu_data pointer (in ) */ 7 148 char(*), /* section (in ) */ 7 149 fixed bin (18) uns, /* offset in section (in ) */ 7 150 char(*), /* side and size (in ) */ 7 151 fixed bin (35)); /* new value to patch (in ) */ 7 152 7 153 dcl ocu_$create_msf /* create component 0 of the MSF */ 7 154 entry (ptr, /* component array ptr (in ) */ 7 155 fixed bin (15) uns, /* component count (in ) */ 7 156 ptr, /* generator info ptr (in ) */ 7 157 fixed bin(35)); /* error code (out) */ 7 158 7 159 /* END OF: ocu_dcls.incl.pl1 * * * * * */ 4072 8 1 /* BEGIN INCLUDE FILE . . . star_structures.incl.pl1 */ 8 2 8 3 /* This include file contains structures for the hcs_$star_, 8 4* hcs_$star_list_ and hcs_$star_dir_list_ entry points. 8 5* 8 6* Written 23 October 1978 by Monte Davidoff. 8 7* Modified January 1979 by Michael R. Jordan to use unsigned and different pointers for different structures. 8 8* Modified June 1981 by C. Hornig to count link pathnames more efficiently. 8 9**/ 8 10 8 11 /* automatic */ 8 12 8 13 declare star_branch_count fixed binary; /* hcs_$star_list_, hcs_$star_dir_list_: matching branch count */ 8 14 declare star_entry_count fixed binary; /* hcs_$star_: number of matching entries */ 8 15 declare star_entry_ptr pointer; /* hcs_$star_: pointer to array of entry information */ 8 16 declare star_list_branch_ptr pointer; /* hcs_$star_list_, hcs_$star_dir_list_: ptr to array of info */ 8 17 declare star_link_count fixed binary; /* hcs_$star_list_, hcs_$star_dir_list_: matching link count */ 8 18 declare star_linkx fixed binary; /* hcs_$star_list_, hcs_$star_dir_list_: index into star_links */ 8 19 declare star_names_ptr pointer; /* hcs_$star_: pointer to array of entry names */ 8 20 declare star_list_names_ptr pointer; /* hcs_$star_list_, hcs_$star_dir_list_: ptr to entry names */ 8 21 declare star_select_sw fixed binary (3); /* hcs_$star_list_, hcs_$star_dir_list_: what info to return */ 8 22 8 23 /* based */ 8 24 8 25 /* hcs_$star_ entry structure */ 8 26 8 27 declare 1 star_entries (star_entry_count) aligned based (star_entry_ptr), 8 28 2 type fixed binary (2) unsigned unaligned, 8 29 /* storage system type */ 8 30 2 nnames fixed binary (16) unsigned unaligned, 8 31 /* number of names of entry that match star_name */ 8 32 2 nindex fixed binary (18) unsigned unaligned; 8 33 /* index of first name in star_names */ 8 34 8 35 /* hcs_$star_ name structure */ 8 36 8 37 declare star_names (sum (star_entries (*).nnames)) char (32) based (star_names_ptr); 8 38 8 39 /* hcs_$star_list_ branch structure */ 8 40 8 41 declare 1 star_list_branch (star_branch_count + star_link_count) aligned based (star_list_branch_ptr), 8 42 2 type fixed binary (2) unsigned unaligned, 8 43 /* storage system type */ 8 44 2 nnames fixed binary (16) unsigned unaligned, 8 45 /* number of names of entry that match star_name */ 8 46 2 nindex fixed binary (18) unsigned unaligned, 8 47 /* index of first name in star_list_names */ 8 48 2 dtcm bit (36) unaligned, /* date-time contents of branch were last modified */ 8 49 2 dtu bit (36) unaligned, /* date-time branch was last used */ 8 50 2 mode bit (5) unaligned, /* user's access mode to the branch */ 8 51 2 raw_mode bit (5) unaligned, /* user's ACL access mode */ 8 52 2 master_dir bit (1) unaligned, /* is branch a master directory */ 8 53 2 pad bit (7) unaligned, 8 54 2 records fixed binary (18) unsigned unaligned; 8 55 /* records used by branch */ 8 56 8 57 /* hcs_$star_dir_list_ branch structure */ 8 58 8 59 declare 1 star_dir_list_branch (star_branch_count + star_link_count) aligned based (star_list_branch_ptr), 8 60 2 type fixed binary (2) unsigned unaligned, 8 61 /* storage system type */ 8 62 2 nnames fixed binary (16) unsigned unaligned, 8 63 /* number of names of entry that match star_name */ 8 64 2 nindex fixed binary (18) unsigned unaligned, 8 65 /* index of first name in star_list_names */ 8 66 2 dtem bit (36) unaligned, /* date-time directory entry of branch was last modified */ 8 67 2 pad bit (36) unaligned, 8 68 2 mode bit (5) unaligned, /* user's access mode to the branch */ 8 69 2 raw_mode bit (5) unaligned, /* user's ACL access mode */ 8 70 2 master_dir bit (1) unaligned, /* is branch a master directory */ 8 71 2 bit_count fixed binary (24) unaligned; 8 72 /* bit count of the branch */ 8 73 8 74 /* hcs_$star_list_ and hcs_$star_dir_list_ link structure */ 8 75 8 76 declare 1 star_links (star_branch_count + star_link_count) aligned based (star_list_branch_ptr), 8 77 2 type fixed binary (2) unsigned unaligned, 8 78 /* storage system type */ 8 79 2 nnames fixed binary (16) unsigned unaligned, 8 80 /* number of names of entry that match star_name */ 8 81 2 nindex fixed binary (18) unsigned unaligned, 8 82 /* index of first name in star_list_names */ 8 83 2 dtem bit (36) unaligned, /* date-time link was last modified */ 8 84 2 dtd bit (36) unaligned, /* date-time the link was last dumped */ 8 85 2 pathname_len fixed binary (18) unsigned unaligned, 8 86 /* length of the pathname of the link */ 8 87 2 pathname_index fixed binary (18) unsigned unaligned; 8 88 /* index of start of pathname in star_list_names */ 8 89 8 90 /* hcs_$star_list_ and hcs_$star_dir_list_ name array */ 8 91 8 92 declare star_list_names char (32) based (star_list_names_ptr) 8 93 dimension (star_links (star_branch_count + star_link_count).nindex 8 94 + star_links (star_branch_count + star_link_count).nnames 8 95 + divide (star_links (star_branch_count + star_link_count).pathname_len + 31, 32, 17, 0) 8 96 * binary ( 8 97 (star_links (star_branch_count + star_link_count).type = star_LINK) 8 98 & (star_select_sw >= star_LINKS_ONLY_WITH_LINK_PATHS), 1)); 8 99 8 100 /* hcs_$star_list_ and hcs_$star_dir_list_ link pathname */ 8 101 8 102 declare star_link_pathname char (star_links (star_linkx).pathname_len) 8 103 based (addr (star_list_names (star_links (star_linkx).pathname_index))); 8 104 8 105 /* internal static */ 8 106 8 107 /* star_select_sw values */ 8 108 8 109 declare star_LINKS_ONLY fixed binary (2) internal static options (constant) initial (1); 8 110 declare star_BRANCHES_ONLY fixed binary (2) internal static options (constant) initial (2); 8 111 declare star_ALL_ENTRIES fixed binary (2) internal static options (constant) initial (3); 8 112 declare star_LINKS_ONLY_WITH_LINK_PATHS 8 113 fixed binary (3) internal static options (constant) initial (5); 8 114 declare star_ALL_ENTRIES_WITH_LINK_PATHS 8 115 fixed binary (3) internal static options (constant) initial (7); 8 116 8 117 /* storage system types */ 8 118 8 119 declare star_LINK fixed binary (2) unsigned internal static options (constant) initial (0); 8 120 declare star_SEGMENT fixed binary (2) unsigned internal static options (constant) initial (1); 8 121 declare star_DIRECTORY fixed binary (2) unsigned internal static options (constant) initial (2); 8 122 8 123 /* END INCLUDE FILE . . . star_structures.incl.pl1 */ 4073 9 1 dcl 1 std_symbol_header based aligned, 9 2 2 dcl_version fixed bin, 9 3 2 identifier char(8), 9 4 2 gen_number fixed bin, 9 5 2 gen_created fixed bin(71), 9 6 2 object_created fixed bin(71), 9 7 2 generator char(8), 9 8 2 gen_version unaligned, 9 9 3 offset bit(18), 9 10 3 size bit(18), 9 11 2 userid unaligned, 9 12 3 offset bit(18), 9 13 3 size bit(18), 9 14 2 comment unaligned, 9 15 3 offset bit(18), 9 16 3 size bit(18), 9 17 2 text_boundary bit(18) unaligned, 9 18 2 stat_boundary bit(18) unaligned, 9 19 2 source_map bit(18) unaligned, 9 20 2 area_pointer bit(18) unaligned, 9 21 2 backpointer bit(18) unaligned, 9 22 2 block_size bit(18) unaligned, 9 23 2 next_block bit(18) unaligned, 9 24 2 rel_text bit(18) unaligned, 9 25 2 rel_def bit(18) unaligned, 9 26 2 rel_link bit(18) unaligned, 9 27 2 rel_symbol bit(18) unaligned, 9 28 2 mini_truncate bit(18) unaligned, 9 29 2 maxi_truncate bit(18) unaligned; 4074 10 1 /* BEGIN INCLUDE FILE sub_err_flags.incl.pl1 BIM 11/81 */ 10 2 /* format: style3 */ 10 3 10 4 /* These constants are to be used for the flags argument of sub_err_ */ 10 5 /* They are just "string (condition_info_header.action_flags)" */ 10 6 10 7 declare ( 10 8 ACTION_CAN_RESTART init (""b), 10 9 ACTION_CANT_RESTART init ("1"b), 10 10 ACTION_DEFAULT_RESTART 10 11 init ("01"b), 10 12 ACTION_QUIET_RESTART 10 13 init ("001"b), 10 14 ACTION_SUPPORT_SIGNAL 10 15 init ("0001"b) 10 16 ) bit (36) aligned internal static options (constant); 10 17 10 18 /* End include file */ 4075 4076 4077 end ocu_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 10/26/88 0822.6 ocu_.pl1 >spec>install>1185>ocu_.pl1 4066 1 04/11/85 1452.6 access_mode_values.incl.pl1 >ldd>include>access_mode_values.incl.pl1 4067 2 11/24/86 1226.9 definition_dcls.incl.pl1 >ldd>include>definition_dcls.incl.pl1 4068 3 08/05/77 1022.5 object_info.incl.pl1 >ldd>include>object_info.incl.pl1 4069 4 11/24/86 1226.9 object_link_dcls.incl.pl1 >ldd>include>object_link_dcls.incl.pl1 4070 5 08/05/77 1022.5 object_map.incl.pl1 >ldd>include>object_map.incl.pl1 4071 6 01/05/87 1318.8 ocu_structures.incl.pl1 >ldd>include>ocu_structures.incl.pl1 4072 7 12/10/86 1316.8 ocu_dcls.incl.pl1 >ldd>include>ocu_dcls.incl.pl1 4073 8 06/10/82 1045.5 star_structures.incl.pl1 >ldd>include>star_structures.incl.pl1 4074 9 05/06/74 1751.6 std_symbol_header.incl.pl1 >ldd>include>std_symbol_header.incl.pl1 4075 10 04/16/82 0958.1 sub_err_flags.incl.pl1 >ldd>include>sub_err_flags.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. ACTION_CANT_RESTART 000060 constant bit(36) initial dcl 10-7 set ref 491* 561* 571* 630* 643* 703* 707* 713* 749* 811* 869* 925* 977* 1051* 1057* 1068* 1081* 1104* 1115* 1133* 1144* 1162* 1170* 2643* 2651* 3750* 3772* 3777* 3782* 3796* 3812* 3819* 3824* 3832* ACTION_CAN_RESTART 000135 constant bit(36) initial dcl 10-7 set ref 671* 2942* 3768* ALM_RELINFO 000040 constant char(13) initial packed unaligned dcl 58 ref 526 1012 A_call_relp parameter fixed bin(18,0) unsigned dcl 74 ref 905 939 A_class parameter fixed bin(3,0) dcl 75 set ref 781 823* A_code parameter fixed bin(35,0) dcl 76 set ref 261 348 1181 1311* A_component parameter fixed bin(15,0) unsigned dcl 77 ref 848 879 A_component_count parameter fixed bin(15,0) unsigned dcl 78 ref 685 707 713 721 1181 1231 A_component_listp parameter pointer dcl 79 ref 1181 1232 A_dir_name parameter char packed unaligned dcl 80 ref 261 316 A_entry_name parameter char packed unaligned dcl 81 ref 261 317 A_expression parameter fixed bin(17,0) dcl 82 set ref 781 823* A_flags parameter bit packed unaligned dcl 83 ref 261 320 322 324 326 328 330 537 593 595 597 599 612 664 666 668 671 A_generator_infop parameter pointer dcl 84 ref 1181 1230 A_info_relp parameter fixed bin(18,0) unsigned dcl 85 ref 905 940 A_init_infop parameter pointer dcl 86 set ref 781 823* A_modifier parameter bit(6) packed unaligned dcl 87 ref 781 822 848 881 A_my_component parameter fixed bin(15,0) unsigned dcl 88 ref 685 713 713 722 A_name parameter varying char dcl 89 set ref 537 586 586 612 640 640 643* A_new_value parameter fixed bin(35,0) dcl 90 ref 1024 1091 1094 1096 1098 1100 1102 1124 1127 1129 1131 1153 1156 1158 1160 A_ocu_datap parameter pointer dcl 91 set ref 261 282* 297* 339* 348 364 426* 435 452 467 490 537 560 612 629 685 702 731 748 781 810 848 868 905 924 949 976 1024 1050 A_offset parameter fixed bin(18,0) unsigned dcl 92 ref 537 589 848 880 1024 1057 1081 1086 1115 1120 1144 1149 A_offsetname parameter varying char dcl 93 set ref 781 823* A_patch_section parameter char packed unaligned dcl 94 ref 1024 1075 1109 1138 A_relocationp parameter pointer dcl 95 ref 467 504 949 990 A_section parameter fixed bin(3,0) dcl 96 ref 537 588 848 878 A_segname parameter varying char dcl 97 set ref 781 823* A_side parameter char packed unaligned dcl 98 ref 1024 1091 1094 1096 1098 1100 1102 1124 1127 1129 1131 1153 1156 1158 1160 A_type parameter fixed bin(3,0) dcl 99 set ref 781 823* A_word_count parameter fixed bin(18,0) unsigned dcl 100 ref 467 502 505 519 731 760 769 949 988 991 1005 A_wordp parameter pointer dcl 101 ref 467 501 731 759 949 987 CLASS_LINKAGE constant fixed bin(3,0) initial unsigned dcl 2-25 ref 2078 2292 3924 DEFINITION_FLAGS_ENTRY 020103 constant bit(4) initial packed unaligned dcl 7-38 ref 595 666 3919 DEFINITION_FLAGS_IGNORE 000060 constant bit(4) initial packed unaligned dcl 7-37 ref 593 664 DEFINITION_FLAGS_INDIRECT 020102 constant bit(4) initial packed unaligned dcl 7-40 ref 599 671 3918 DEFINITION_FLAGS_RETAIN 000032 constant bit(4) initial packed unaligned dcl 7-39 set ref 597 668 3910* 3918 FAULT_TAG_2 constant bit(6) initial packed unaligned dcl 4-101 ref 2676 FAULT_TAG_3 constant bit(6) initial packed unaligned dcl 4-102 ref 2661 FR_TRAPS_VERSION_1 constant fixed bin(17,0) initial dcl 4-99 ref 2693 INIT_COPY_INFO constant fixed bin(17,0) initial dcl 2-194 ref 1589 1613 INIT_DEFERRED constant fixed bin(17,0) initial dcl 2-194 ref 1585 1620 2268 INIT_LIST_TEMPLATE constant fixed bin(17,0) initial dcl 2-194 ref 1587 1605 2277 LINK_REFNAME_BASE constant fixed bin(18,0) initial packed unsigned unaligned dcl 2-134 ref 1463 LINK_REFNAME_OFFSETNAME constant fixed bin(18,0) initial packed unsigned unaligned dcl 2-134 ref 1254 1463 1470 LINK_SELF_BASE constant fixed bin(18,0) initial packed unsigned unaligned dcl 2-134 ref 1256 2434 LINK_SELF_OFFSETNAME constant fixed bin(18,0) initial packed unsigned unaligned dcl 2-134 ref 1470 1477 Left constant fixed bin(17,0) initial dcl 43 ref 3537 N_components 260 based fixed bin(17,0) level 3 in structure "mi" dcl 173 in procedure "ocu_" set ref 1231* 1266 1281 N_components 260 based fixed bin(17,0) level 3 in structure "mi" dcl 3727 in procedure "validate_component" ref 3772 3824 3824 N_defs based fixed bin(17,0) level 3 in structure "di" dcl 154 in procedure "ocu_" set ref 571 579* 579 581 605 642 651* 651 N_defs based fixed bin(17,0) level 3 in structure "di" dcl 3231 in procedure "create_hash_table" ref 3280 3291 3344 3373 N_defs based fixed bin(17,0) level 3 in structure "di" dcl 1906 in procedure "create_defs" ref 2027 2032 2129 N_exp_words based fixed bin(17,0) level 3 in structure "ewi" dcl 1362 in procedure "find_exp_word" set ref 1391 1398 1398* N_exp_words based fixed bin(17,0) level 3 in structure "ewi" dcl 1909 in procedure "create_defs" ref 2410 N_inits 1 based fixed bin(17,0) level 3 in structure "ii" dcl 1914 in procedure "create_defs" ref 2243 N_inits 1 based fixed bin(17,0) level 3 in structure "ii" dcl 1530 in procedure "find_init_info" set ref 1572 1600 1600* N_links based fixed bin(17,0) level 3 in structure "li" dcl 2536 in procedure "create_link" ref 2596 2637 N_links based fixed bin(17,0) level 3 in structure "li" dcl 161 in procedure "ocu_" set ref 829 836 836* 885 892 892* N_static_words based fixed bin(17,0) level 3 in structure "si" dcl 1928 in procedure "create_defs" set ref 2073* 2268* 2292* 2327* 2436* 2439* N_static_words based fixed bin(17,0) level 3 in structure "si" dcl 2764 in procedure "create_stat" ref 2781 2785 2792 N_static_words based fixed bin(17,0) level 3 in structure "si" dcl 164 in procedure "ocu_" set ref 764 768 769* 769 1144 N_static_words based fixed bin(17,0) level 3 in structure "si" dcl 1819 in procedure "create_text" set ref 1840* N_static_words based fixed bin(17,0) level 3 in structure "si" dcl 2836 in procedure "create_symb" set ref 2876* N_static_words based fixed bin(17,0) level 3 in structure "si" dcl 2543 in procedure "create_link" set ref 2594 2602 2602 2623 2627 2632 2713* N_strings 1 based fixed bin(17,0) level 3 in structure "smi" dcl 1737 in procedure "find_string" set ref 1760 1768 1768* N_strings 1 based fixed bin(17,0) level 3 in structure "smi" dcl 1931 in procedure "create_defs" ref 2100 N_symbol_words based fixed bin(17,0) level 3 in structure "sbi" dcl 2833 in procedure "create_symb" set ref 2876* 2880 2896 N_symbol_words based fixed bin(17,0) level 3 in structure "sbi" dcl 167 in procedure "ocu_" set ref 1000 1004 1005* 1005 1115 N_text_words based fixed bin(17,0) level 3 in structure "ti" dcl 1822 in procedure "create_text" set ref 1840* 1846 1849 1851 N_text_words based fixed bin(17,0) level 3 in structure "ti" dcl 170 in procedure "ocu_" set ref 514 518 519* 519 1081 N_trap_pairs based fixed bin(17,0) level 3 in structure "trpi" dcl 1941 in procedure "create_defs" ref 2309 N_trap_pairs based fixed bin(17,0) level 3 in structure "trpi" dcl 1673 in procedure "find_trap_pair" set ref 1689 1697 1697* N_traps based fixed bin(17,0) level 3 in structure "frti" dcl 2532 in procedure "create_link" ref 2609 2613 2687 2694 2700 N_traps based fixed bin(17,0) level 3 in structure "frti" dcl 157 in procedure "ocu_" set ref 935* 935 939 940 N_type_pairs based fixed bin(17,0) level 3 in structure "tpi" dcl 1936 in procedure "create_defs" ref 2340 N_type_pairs based fixed bin(17,0) level 3 in structure "tpi" dcl 1442 in procedure "find_type_pair" set ref 1488 1495 1495* OPEN_FLAGS_BOUND 000060 constant bit(6) initial packed unaligned dcl 7-20 ref 320 1246 OPEN_FLAGS_NO_HASHTABLE 020104 constant bit(6) initial packed unaligned dcl 7-32 ref 330 OPEN_FLAGS_PERPROCESS_STATIC 020105 constant bit(6) initial packed unaligned dcl 7-29 ref 328 OPEN_FLAGS_PROCEDURE 000032 constant bit(6) initial packed unaligned dcl 7-24 ref 324 1246 OPEN_FLAGS_RELOCATABLE 020103 constant bit(6) initial packed unaligned dcl 7-22 ref 322 1246 OPEN_FLAGS_SEPARATE_STATIC 020102 constant bit(6) initial packed unaligned dcl 7-26 ref 326 RE_ACCESS constant bit(3) initial packed unaligned dcl 1-11 ref 414 RW_ACCESS constant bit(3) initial packed unaligned dcl 1-11 ref 416 Rel_defs 000154 constant fixed bin(17,0) initial dcl 6-415 set ref 2017* 2019* 2020* 2022* 2061* 2084* 2094* 2116* 2303* 2331* 2405* 2446* 2471* 2483* 2489* 2909 2910 2910 Rel_link 000152 constant fixed bin(17,0) initial dcl 6-416 set ref 2618* 2629* 2667* 2680* 2696* 2714* 2722* 2728* 2919 2920 2920 Rel_symb 000141 constant fixed bin(17,0) initial dcl 6-417 set ref 2876* 2884* 2929 2930 2930 Rel_text 000155 constant fixed bin(17,0) initial dcl 6-414 set ref 1840* 1848* 1855* 2899 2900 2900 Right constant fixed bin(17,0) initial dcl 44 ref 3537 SECTION_LINK constant fixed bin(18,0) initial packed unsigned unaligned dcl 2-134 ref 1256 2378 2436 SECTION_STATIC constant fixed bin(18,0) initial packed unsigned unaligned dcl 2-134 ref 2378 2439 STD_RELINFO 000044 constant char(13) initial packed unaligned dcl 56 ref 526 1012 abs_count 000452 automatic fixed bin(17,0) dcl 1949 in procedure "create_defs" set ref 2003* 2017* 2019* 2020* 2022* 2061* 2084* 2094* 2116* 2303* 2331* 2405* 2446* 2471* 2483* 2489* abs_count parameter fixed bin(17,0) dcl 3105 in procedure "install_words" set ref 3074 3168* 3182* abs_count parameter fixed bin(17,0) dcl 3588 in procedure "append_relinfo" set ref 3559 3633 3639 3640* 3640 3649 3652 3653 3655 3655 3657* 3676* 3676 abs_count 000666 automatic fixed bin(17,0) dcl 2843 in procedure "create_symb" set ref 2872* 2876* 2884* abs_count 000442 automatic fixed bin(17,0) dcl 1828 in procedure "create_text" set ref 1836* 1840* 1848* 1855* abs_count 000572 automatic fixed bin(17,0) dcl 2552 in procedure "create_link" set ref 2582* 2618* 2629* 2667* 2680* 2696* 2714* 2722* 2728* acc based structure level 1 dcl 1901 in procedure "create_defs" set ref 2112 acc based structure level 1 dcl 3869 in procedure "copy_defs" acc_relp 000453 automatic fixed bin(18,0) unsigned dcl 1950 set ref 2098* 2104 2108 2118* 2118 accp 000454 automatic pointer dcl 1951 in procedure "create_defs" set ref 2104* 2105 2106 2112 accp 001240 automatic pointer dcl 3882 in procedure "copy_defs" set ref 3906* 3910 3924 accp 001000 automatic pointer dcl 3270 in procedure "create_hash_table" set ref 3351* 3352* 3377* 3379* acinfop 72 based pointer level 3 dcl 6-37 set ref 370* 378 378* 387* 420* addr builtin function dcl 230 ref 520 581 656 770 1006 1086 1120 1149 1761 1772 1840 1840 2072 2268 2279 2290 2626 2703 2791 2876 2876 3281 3292 3345 3374 3538 3538 3538 3540 3540 3540 3546 3546 3548 3548 3795 3795 4052 4052 addwordno builtin function dcl 231 ref 1576 1599 2007 2026 2086 2104 2127 2131 2144 2164 2171 2184 2199 2206 2219 2234 2253 2254 2297 2310 2348 2418 2456 2586 2625 2657 2671 2692 2790 2862 2907 2917 2927 3006 3060 3159 3160 3191 3192 3301 3306 3313 3321 3340 3351 3369 3377 3386 3387 3817 3891 3895 3906 3928 area_pointer 16(18) based fixed bin(18,0) level 3 packed packed unsigned unaligned dcl 3962 set ref 4016* backpointer 17 based fixed bin(18,0) level 3 packed packed unsigned unaligned dcl 3962 set ref 4017* backward_relp 000456 automatic fixed bin(18,0) unsigned dcl 1952 in procedure "create_defs" set ref 2029* 2037 2041* backward_relp 0(18) based fixed bin(18,0) level 2 in structure "sn" packed packed unsigned unaligned dcl 1935 in procedure "create_defs" ref 2175 backward_relp 0(18) based fixed bin(18,0) level 2 in structure "defn" packed packed unsigned unaligned dcl 1904 in procedure "create_defs" set ref 2037* 2146 backward_relp 0(18) based fixed bin(18,0) level 2 in structure "prev_sn" packed packed unsigned unaligned dcl 1926 in procedure "create_defs" ref 2229 2234 bc 70 based fixed bin(24,0) level 3 in structure "ocu_data" dcl 6-37 in procedure "ocu_" set ref 420* bc 70 based fixed bin(24,0) level 3 in structure "od" dcl 2762 in procedure "create_stat" ref 2790 bc 70 based fixed bin(24,0) level 3 in structure "od" dcl 1818 in procedure "create_text" set ref 1859* bc 264 based fixed bin(24,0) array level 3 in structure "mi" dcl 3727 in procedure "validate_component" set ref 3789* bc 70 based fixed bin(24,0) level 3 in structure "od" dcl 1924 in procedure "create_defs" set ref 2007 2493* 2493 bc 70 based fixed bin(24,0) level 3 in structure "od" dcl 2542 in procedure "create_link" set ref 2586 2732* 2732 bc 70 based fixed bin(24,0) level 3 in structure "od" dcl 2825 in procedure "create_symb" set ref 2862 2961* 2961 bc 70 based fixed bin(24,0) level 3 in structure "od" dcl 2992 in procedure "create_obj_map" set ref 3005 3065* 3065 bc 001050 automatic fixed bin(24,0) dcl 3735 in procedure "validate_component" set ref 3788* 3789 3795* bit builtin function dcl 232 ref 2949 2953 2954 2955 2956 3016 3017 3019 3020 3022 3023 3025 3031 3033 3037 3038 3040 bit_offset 1(21) based fixed bin(6,0) level 2 packed packed unsigned unaligned dcl 2546 set ref 2664* block_hdr_relp 1(18) based fixed bin(18,0) array level 3 in structure "cht" packed packed unsigned unaligned dcl 3252 in procedure "create_hash_table" set ref 3388* block_hdr_relp 1(18) based fixed bin(18,0) array level 3 in structure "dt" packed packed unsigned unaligned dcl 3242 in procedure "create_hash_table" set ref 3302* 3314* 3322* block_relp 000457 automatic fixed bin(18,0) unsigned dcl 1953 set ref 2140* 2150* 2157 block_size 17(18) based fixed bin(18,0) level 3 in structure "mss" packed packed unsigned unaligned dcl 3962 in procedure "mk_symbol_scn" set ref 4018* block_size 17(18) based bit(18) level 2 in structure "ssh" packed packed unaligned dcl 2839 in procedure "create_symb" set ref 2949* bound 2 based bit(1) level 3 in structure "od" packed packed unaligned dcl 2992 in procedure "create_obj_map" ref 3051 bound 2 based bit(1) level 3 in structure "ocu_data" packed packed unaligned dcl 6-37 in procedure "ocu_" set ref 320* bound 12 based bit(1) level 3 in structure "om" packed packed unaligned dcl 2993 in procedure "create_obj_map" set ref 3051* break_map_length 10(18) based bit(18) level 2 packed packed unaligned dcl 2993 set ref 3045* break_map_offset 10 based bit(18) level 2 packed packed unaligned dcl 2993 set ref 3044* c 000100 automatic fixed bin(17,0) dcl 194 in procedure "ocu_" set ref 1236* 1237 1237* 1242* 1243* 1266* 1267* c 000100 automatic fixed bin(21,0) dcl 3599 in procedure "append_relinfo" set ref 3623* 3624* call_relp 1 based fixed bin(18,0) array level 3 in structure "trpi" unsigned dcl 1941 in procedure "create_defs" ref 2311 call_relp 1 based fixed bin(18,0) array level 3 in structure "trpi" unsigned dcl 1673 in procedure "find_trap_pair" set ref 1690 1699* call_relp based fixed bin(18,0) level 2 in structure "trap_pr" packed packed unsigned unaligned dcl 1940 in procedure "create_defs" set ref 2311* 2316 call_relp based fixed bin(18,0) level 2 in structure "trap" packed packed unsigned unaligned dcl 1672 in procedure "find_trap_pair" ref 1690 1699 call_relp 2 based fixed bin(18,0) array level 3 in structure "frt" packed packed unsigned unaligned dcl 2527 in procedure "create_link" set ref 2701* call_relp 1 based fixed bin(18,0) array level 3 in structure "frti" unsigned dcl 157 in procedure "ocu_" set ref 939* call_relp 1 based fixed bin(18,0) array level 3 in structure "frti" unsigned dcl 2532 in procedure "create_link" ref 2701 call_relp 000101 automatic fixed bin(18,0) unsigned dcl 195 in procedure "ocu_" set ref 1254* 1258* char builtin function dcl 233 ref 3782 cht based structure level 1 dcl 3252 set ref 3371 chtp 000776 automatic pointer dcl 3269 set ref 3369* 3370 3371 3379 3381 3382 3385 3388 class 1(33) based fixed bin(3,0) level 2 in structure "sn" packed packed unsigned unaligned dcl 1935 in procedure "create_defs" ref 2179 2182 2190 2204 class 2 based fixed bin(17,0) array level 3 in structure "di" dcl 1906 in procedure "create_defs" ref 2050 2061 2071 class 1(33) based fixed bin(3,0) level 2 in structure "defn" packed packed unsigned unaligned dcl 1904 in procedure "create_defs" set ref 2050* 2078* 2150 2155 class 2 based fixed bin(17,0) array level 3 in structure "di" dcl 154 in procedure "ocu_" set ref 643 class 1 based fixed bin(17,0) level 2 in structure "de" dcl 3240 in procedure "create_hash_table" ref 3284 3347 3375 class 1 based fixed bin(17,0) level 2 in structure "de" dcl 153 in procedure "ocu_" set ref 588* 659* class parameter fixed bin(3,0) dcl 1434 in procedure "find_type_pair" ref 1411 1465 class parameter fixed bin(3,0) dcl 1355 in procedure "find_exp_word" set ref 1327 1381* class 1(33) based fixed bin(3,0) level 2 in structure "def" packed packed unsigned unaligned dcl 3872 in procedure "copy_defs" ref 3910 3922 class 1 based fixed bin(17,0) level 2 in structure "srch_de" dcl 3241 in procedure "create_hash_table" ref 3293 class_relinfo 000050 constant char(1) initial array packed unaligned dcl 53 ref 2071 cleanup 000242 stack reference condition dcl 225 ref 289 376 1217 3989 clock builtin function dcl 234 ref 4011 code 000101 automatic bit(5) level 2 packed packed unaligned dcl 3600 set ref 3638* comment 14 based structure level 3 packed packed unaligned dcl 3962 comp parameter fixed bin(17,0) dcl 3865 in procedure "copy_defs" ref 3845 3891 3891 3922 comp parameter fixed bin(17,0) dcl 3722 in procedure "validate_component" set ref 3686 3745 3782 3782* 3782* 3789 3796* 3802 3803 3804 3805 3806 3812* 3819* 3824* 3832 3832* component 262 based structure array level 2 in structure "mi" dcl 3874 in procedure "copy_defs" component 262 based structure array level 2 in structure "mi" dcl 3727 in procedure "validate_component" component 0(03) based fixed bin(15,0) level 2 in structure "partial_lk" packed packed unsigned unaligned dcl 2546 in procedure "create_link" set ref 2659* component 2 000202 automatic fixed bin(18,0) level 2 in structure "linke" unsigned dcl 206 in procedure "ocu_" set ref 879* component 262 based structure array level 2 in structure "msf_info" dcl 6-524 in procedure "ocu_" component 3 based fixed bin(18,0) array level 3 in structure "li" unsigned dcl 2536 in procedure "create_link" ref 2651 2659 component 262 based structure array level 2 in structure "mi" dcl 173 in procedure "ocu_" component_count 74 based fixed bin(17,0) level 3 in structure "od" dcl 1924 in procedure "create_defs" ref 2466 component_count 74 based fixed bin(17,0) level 3 in structure "od" dcl 2542 in procedure "create_link" ref 2643 2651 component_count 2 based fixed bin(15,0) level 2 in structure "mm" unsigned dcl 3731 in procedure "validate_component" set ref 3824 3824* component_count 2 based fixed bin(15,0) level 2 in structure "mm" unsigned dcl 1920 in procedure "create_defs" set ref 2466* component_count 000302 automatic fixed bin(15,0) unsigned dcl 7-56 in procedure "ocu_" set ref 1231* 1236 1242 1262 component_count 74 based fixed bin(17,0) level 3 in structure "ocu_data" dcl 6-37 in procedure "ocu_" set ref 318* 721* 2017 2451 component_ht based structure level 1 dcl 2-289 component_list based pointer array dcl 7-58 ref 1237 component_listp 000300 automatic pointer dcl 7-55 set ref 1232* 1237 containing_dir based char(168) level 3 in structure "mi" packed packed unaligned dcl 173 in procedure "ocu_" set ref 1229* 1246* 1280* containing_dir based char(168) level 3 in structure "mi" packed packed unaligned dcl 3727 in procedure "validate_component" set ref 3753 3758* 3763* 3777 copy based char packed unaligned dcl 3110 in procedure "install_words" ref 3155 3190 copy builtin function dcl 235 in procedure "ocu_" ref 2116 2116 2303 2303 2629 2629 3655 4047 copyl 000734 automatic fixed bin(21,0) dcl 3116 set ref 3151* 3155 3155 3186* 3190 3190 copyp 000736 automatic pointer dcl 3117 set ref 3131* 3155 3159* 3159 3181 3190 3192* 3192 count based fixed bin(9,0) level 2 in structure "acc" packed packed unsigned unaligned dcl 1901 in procedure "create_defs" set ref 2105* 2106 2112 count 0(05) 000101 automatic fixed bin(10,0) level 2 in structure "exp_abs" packed packed unsigned unaligned dcl 3600 in procedure "append_relinfo" set ref 3639* 3640 count 001051 automatic fixed bin(17,0) dcl 3736 in procedure "validate_component" set ref 3763* 3772 count based fixed bin(9,0) level 2 in structure "acc" packed packed unsigned unaligned dcl 3869 in procedure "copy_defs" ref 3910 3924 currentsize builtin function dcl 2571 in procedure "create_link" ref 2595 2596 2596 2619 2668 2681 2695 currentsize builtin function dcl 236 in procedure "ocu_" ref 284 285 286 287 1584 1585 1587 1589 1611 1618 1626 1631 2008 2013 2027 2027 2030 2041 2042 2046 2086 2112 2297 2335 2349 2419 2461 2906 2907 2916 2917 2926 2927 2936 3060 3065 3331 3342 3371 4016 4024 4025 4043 4047 d 000766 automatic fixed bin(17,0) dcl 3263 set ref 3280* 3281 3291 3312* 3344* 3345 3360* 3373* 3374 3385* datum 2 based bit level 2 dcl 1917 set ref 2290 dcl_version based fixed bin(17,0) level 2 dcl 2839 ref 2942 de based structure level 1 dcl 3240 in procedure "create_hash_table" de based structure level 1 dcl 153 in procedure "ocu_" decl_vers based fixed bin(17,0) level 3 in structure "rel_info" dcl 2826 in procedure "create_symb" set ref 2898* 2908* 2918* 2928* decl_vers based fixed bin(17,0) level 2 in structure "frt" dcl 2527 in procedure "create_link" set ref 2693* decl_vers based fixed bin(17,0) level 2 in structure "om" dcl 2993 in procedure "create_obj_map" set ref 3010* decl_version based fixed bin(17,0) level 3 dcl 3962 set ref 4007* def based structure level 1 dcl 3872 in procedure "copy_defs" def 1 based structure array level 2 in structure "di" dcl 154 in procedure "ocu_" set ref 581 656 def 1 based structure array level 2 in structure "di" dcl 1906 in procedure "create_defs" def based structure level 1 dcl 3238 in procedure "create_hash_table" def 1 based structure array level 2 in structure "di" dcl 3231 in procedure "create_hash_table" set ref 3281 3292 3345 3374 def_entry based structure level 1 dcl 6-162 def_info based structure level 1 dcl 6-157 def_infop 110 based pointer level 2 in structure "od" dcl 1924 in procedure "create_defs" ref 1993 def_infop 110 based pointer level 2 in structure "ocu_data" dcl 6-37 in procedure "ocu_" ref 567 636 def_list_relp based fixed bin(18,0) level 2 in structure "dh" packed packed unsigned unaligned dcl 3873 in procedure "copy_defs" ref 3895 def_list_relp based fixed bin(18,0) level 2 in structure "dh" packed packed unsigned unaligned dcl 1905 in procedure "create_defs" set ref 2008* 2026 2030 2127 2143 2170 def_offset 1 based fixed bin(18,0) level 2 packed packed unsigned unaligned dcl 2547 set ref 2592* def_relp 1 based fixed bin(18,0) array level 3 in structure "dt" packed packed unsigned unaligned dcl 3242 in procedure "create_hash_table" set ref 3299* 3301 3312* 3313 3320* 3321 def_relp 000460 automatic fixed bin(18,0) unsigned dcl 1954 in procedure "create_defs" set ref 2143* 2144 2150 2163* 2164 2170* 2171 2179 2184 2205 2218* 2219 def_relp 1 based fixed bin(18,0) array level 3 in structure "cht" packed packed unsigned unaligned dcl 3252 in procedure "create_hash_table" set ref 3385* def_relp 1 based fixed bin(18,0) array level 3 in structure "dht" packed packed unsigned unaligned dcl 3248 in procedure "create_hash_table" set ref 3358* 3360* def_size 000013 internal static fixed bin(17,0) dcl 149 set ref 287* 605 678 3299 3312 3320 3360 3385 definition based structure level 1 dcl 2-72 definition_flags based structure level 1 packed packed unaligned dcl 2-42 definition_header based structure level 1 dcl 2-58 definition_ht based structure level 1 dcl 2-278 definition_length 4(18) based bit(18) level 2 packed packed unaligned dcl 2993 set ref 3020* definition_offset 4 based bit(18) level 2 packed packed unaligned dcl 2993 set ref 3019* defn based structure level 1 dcl 1904 set ref 2027 2030 2041 2042 2046 2086 defn_relp 266 based fixed bin(18,0) array level 3 in structure "mi" unsigned dcl 3727 in procedure "validate_component" set ref 3803* defn_relp 266 based fixed bin(18,0) array level 3 in structure "mi" unsigned dcl 3874 in procedure "copy_defs" ref 3891 defnl parameter fixed bin(18,0) unsigned dcl 3227 set ref 3205 3306 3316 3331* 3331 3339 3340 3342* 3342 3369 3371* 3371 defnp 000462 automatic pointer dcl 1955 set ref 2026* 2027 2030 2036 2037 2041 2042 2046 2050 2051 2052 2053 2054 2055 2056 2057 2067 2072 2078 2086* 2086 2086 2127* 2130 2130 2131* 2131 2144* 2146 2146 2150 2155 2157 2163 2164* 2195* 2199 2211 defp 000756 automatic pointer dcl 3259 in procedure "create_hash_table" set ref 3301* 3302 3313* 3314 3321* 3322 3387* 3388 defp 4 001140 automatic pointer level 2 in structure "oi" dcl 3741 in procedure "validate_component" set ref 3803 3810 defp 001244 automatic pointer dcl 3884 in procedure "copy_defs" set ref 3895* 3895* 3901 3906 3910 3919 3922 3922* 3928 defs 77 based fixed bin(18,0) level 3 in structure "od" unsigned dcl 2992 in procedure "create_obj_map" ref 3020 3021 defs 77 based fixed bin(18,0) level 3 in structure "od" unsigned dcl 1924 in procedure "create_defs" set ref 2013* 2046* 2046 2091* 2091 2098 2122* 2122 2247 2248* 2248 2310 2335* 2335 2344 2348 2349* 2349 2414 2418 2419* 2419 2456 2460 2461* 2461 2476* 2481 2484* 2484 2493 defs_in_link 0(30) based bit(6) level 2 packed packed unaligned dcl 2547 set ref 2591* defs_relp 000667 automatic fixed bin(18,0) unsigned dcl 2844 set ref 2868* 2906* 2916 2954 defx 000102 automatic fixed bin(17,0) dcl 196 set ref 642* 643 643* 656 678 dep 000762 automatic pointer dcl 3261 in procedure "create_hash_table" set ref 3281* 3282 3284 3286 3293 3315 3316 3329 3345* 3347 3347 3347 3347 3351 3358 3358 3374* 3375 3375 3377 dep 000104 automatic pointer dcl 197 in procedure "ocu_" set ref 581* 586 588 589 591 593 595 597 599 601 656* 658 659 660 661 663 664 666 668 dh based structure level 1 dcl 3726 in procedure "validate_component" dh based structure level 1 dcl 3247 in procedure "create_hash_table" dh based structure level 1 dcl 1905 in procedure "create_defs" set ref 2008 2013 2027 dh based structure level 1 dcl 3873 in procedure "copy_defs" dh_size 000012 internal static fixed bin(17,0) dcl 148 set ref 286* 605 678 3299 3312 3320 3360 3385 dhp 001124 automatic pointer dcl 3738 in procedure "validate_component" set ref 3810* 3812 3817 3817 dhp 000464 automatic pointer dcl 1956 in procedure "create_defs" set ref 2007* 2008 2008 2009 2010 2011 2013 2026 2026 2027 2030 2104 2127 2127 2131 2143 2144 2164 2170 2171 2184 2199 2206 2219 2234 2253 2310 2348 2418 2456 2460 2476* dhp 001242 automatic pointer dcl 3883 in procedure "copy_defs" set ref 3891* 3895 3895 3906 3928 dhp parameter pointer dcl 3224 in procedure "create_hash_table" ref 3205 3301 3306 3313 3321 3339 3340 3351 3369 3377 3386 3387 dht based structure level 1 dcl 3248 set ref 3342 dhtp 000774 automatic pointer dcl 3268 set ref 3340* 3341 3342 3352 3354 3355 3358 3360 di based structure level 1 dcl 154 in procedure "ocu_" di based structure level 1 dcl 1906 in procedure "create_defs" di based structure level 1 dcl 3231 in procedure "create_hash_table" dip 000106 automatic pointer dcl 198 in procedure "ocu_" set ref 567* 571 579 579 581 581 605 636* 642 643 643 651 651 656 dip parameter pointer dcl 3225 in procedure "create_hash_table" ref 3205 3280 3281 3291 3292 3344 3345 3373 3374 dip 000466 automatic pointer dcl 1957 in procedure "create_defs" set ref 1993* 2027 2032 2050 2053 2054 2055 2056 2057 2061 2067 2071 2129 2476* dir 4 based char(168) level 3 packed packed unaligned dcl 6-37 set ref 316* 387* divide builtin function dcl 237 ref 3005 3144 4035 dname 001052 automatic char(168) packed unaligned dcl 3737 in procedure "validate_component" set ref 3749* 3758 3758 3777 3777 dname 000110 automatic char(168) packed unaligned dcl 199 in procedure "ocu_" set ref 1280* 1281* dnl 001126 automatic fixed bin(17,0) dcl 3739 set ref 3749* 3758 3758 3777 3777 dt based structure level 1 dcl 3242 set ref 3331 dtp 000772 automatic pointer dcl 3267 set ref 3289* 3296 3298 3298 3299 3299 3301 3301 3302 3302 3306* 3307 3308 3312 3313 3314 3320 3321 3322 3331 dummy 001246 automatic fixed bin(18,0) unsigned dcl 3885 in procedure "copy_defs" set ref 3910* 3924* dummy 000100 automatic fixed bin(18,0) unsigned dcl 3972 in procedure "mk_symbol_scn" set ref 4052* dup_tbl_relp 4 based fixed bin(18,0) level 2 in structure "de" packed packed unsigned unaligned dcl 153 in procedure "ocu_" set ref 601* 661* dup_tbl_relp 4 based fixed bin(18,0) level 2 in structure "de" packed packed unsigned unaligned dcl 3240 in procedure "create_hash_table" set ref 3316* 3347 3358 dup_tbl_relp 4 based fixed bin(18,0) level 2 in structure "srch_de" packed packed unsigned unaligned dcl 3241 in procedure "create_hash_table" set ref 3324* duplicate 3(04) based bit(1) level 3 in structure "de" packed packed unaligned dcl 3240 in procedure "create_hash_table" set ref 3286 3315* 3329 3347 3358 duplicate 3(04) based bit(1) level 3 in structure "srch_de" packed packed unaligned dcl 3241 in procedure "create_hash_table" set ref 3303* 3323* duplicate_table based structure level 1 dcl 2-302 ec 000162 automatic fixed bin(35,0) dcl 200 in procedure "ocu_" set ref 302* 303 303* 308* 309 309* 387* 389 389* 394* 409* 420* 428* 1225* 1246* 1249 1249* 1276* 1280* 1281* 1285* 1287* 3749* 3750 3750* 3763* 3766 3768* 3788* 3795* 3796 3796* ec parameter fixed bin(35,0) dcl 1309 in procedure "exit" ref 1294 1311 ename 001127 automatic char(32) packed unaligned dcl 3740 in procedure "validate_component" set ref 3749* 3782 3782* ename 000163 automatic char(32) packed unaligned dcl 201 in procedure "ocu_" set ref 1280* 1281* end_relp 000716 automatic fixed bin(18,0) unsigned dcl 2997 set ref 3015* 3016 3018* 3018 3019 3021* 3021 3022 3024* 3024 3031 3032* 3032 3033 3038 entry 1(20) based bit(1) level 3 in structure "def" packed packed unaligned dcl 3872 in procedure "copy_defs" ref 3919 entry 56 based char(32) level 3 in structure "ocu_data" packed packed unaligned dcl 6-37 in procedure "ocu_" set ref 317* 387* entry 1(20) based bit(1) level 3 in structure "defn" packed packed unaligned dcl 1904 in procedure "create_defs" set ref 2054* entry 3(01) based bit(1) level 3 in structure "de" packed packed unaligned dcl 153 in procedure "ocu_" set ref 595* 666* entry 4(01) based bit(1) array level 4 in structure "di" packed packed unaligned dcl 1906 in procedure "create_defs" ref 2054 entry_bound 11 based bit(18) level 2 packed packed unaligned dcl 2993 set ref 3046* error_table_$bad_arg 000056 external static fixed bin(35,0) dcl 133 set ref 671* 707* 713* 1057* 1068* 1081* 1104* 1115* 1133* 1144* 1162* 1170* 3772* 3777* 3782* error_table_$improper_data_format 000060 external static fixed bin(35,0) dcl 134 set ref 2643* 2651* 2942* error_table_$inconsistent_object_msf 000062 external static fixed bin(35,0) dcl 136 set ref 3812* 3824* 3832* error_table_$namedup 000064 external static fixed bin(35,0) dcl 138 set ref 643* error_table_$out_of_sequence 000066 external static fixed bin(35,0) dcl 139 set ref 571* error_table_$unimplemented_version 000070 external static fixed bin(35,0) dcl 141 set ref 365* 491* 561* 630* 703* 749* 811* 869* 925* 977* 1051* 3819* ewi based structure level 1 dcl 1362 in procedure "find_exp_word" ewi based structure level 1 dcl 2523 in procedure "create_link" ewi based structure level 1 dcl 1909 in procedure "create_defs" ewip 000470 automatic pointer dcl 1958 in procedure "create_defs" set ref 1998* 2410 2414 2423 2426 ewip 000574 automatic pointer dcl 2553 in procedure "create_link" set ref 2578* 2677 ewip 000346 automatic pointer dcl 1370 in procedure "find_exp_word" set ref 1377* 1391 1392 1398 1398 1400 exp parameter fixed bin(17,0) dcl 1353 ref 1327 1387 exp_abs 000101 automatic structure level 1 packed packed unaligned dcl 3600 set ref 3644 exp_wd 1 based structure array level 2 in structure "ewi" dcl 1909 in procedure "create_defs" exp_wd 1 based structure array level 2 in structure "ewi" dcl 2523 in procedure "create_link" exp_wd 1 based structure array level 2 in structure "ewi" dcl 1362 in procedure "find_exp_word" set ref 1392 1400* exp_word based structure level 1 dcl 2-129 exp_word_entry based structure level 1 dcl 6-218 exp_word_info based structure level 1 dcl 6-212 exp_word_infop 116 based pointer level 2 in structure "od" dcl 1366 in procedure "find_exp_word" ref 1377 exp_word_infop 116 based pointer level 2 in structure "od" dcl 1924 in procedure "create_defs" ref 1998 exp_word_infop 116 based pointer level 2 in structure "od" dcl 2542 in procedure "create_link" ref 2578 exp_wordx 000202 automatic fixed bin(18,0) level 2 in structure "linke" unsigned dcl 206 in procedure "ocu_" set ref 823* 877* exp_wordx 1 based fixed bin(18,0) array level 3 in structure "li" unsigned dcl 2536 in procedure "create_link" ref 2638 2677 expand_pathname_ 000014 constant entry external dcl 105 ref 1280 expe 000350 automatic structure level 1 dcl 1371 set ref 1392 1400 expr based structure level 1 dcl 1913 set ref 2419 expression 000350 automatic fixed bin(18,0) level 2 in structure "expe" unsigned dcl 1371 in procedure "find_exp_word" set ref 1387* expression 1 based fixed bin(18,0) array level 3 in structure "ewi" unsigned dcl 1909 in procedure "create_defs" ref 2426 expression 0(18) based fixed bin(17,0) level 2 in structure "expr" packed packed unaligned dcl 1913 in procedure "create_defs" set ref 2426* expression_relp 1 based fixed bin(18,0) level 2 packed packed unsigned unaligned dcl 2539 set ref 2677* exprp 000472 automatic pointer dcl 1959 set ref 2418* 2419 2425 2426 2436 2439 expx 000353 automatic fixed bin(17,0) dcl 1372 set ref 1391* 1392 1392* 1398* 1400 1402 false constant bit(1) initial packed unaligned dcl 41 ref 2215 3276 filled_in_later 2 based bit(144) level 2 dcl 2547 set ref 2593* first 000740 automatic fixed bin(21,0) dcl 3118 set ref 3137* 3138 3138* 3138 3140* 3144* 3144 3146 3151 3159 3160 3164 3164 first_ref_relp 1(18) based fixed bin(18,0) level 2 packed packed unsigned unaligned dcl 2547 set ref 2611* 2692 first_relp 2(18) based fixed bin(18,0) level 2 in structure "sn" packed packed unsigned unaligned dcl 1935 in procedure "create_defs" set ref 2205* first_relp 2(18) based fixed bin(18,0) level 2 in structure "prev_sn" packed packed unsigned unaligned dcl 1926 in procedure "create_defs" set ref 2229 2233* first_relp 2(18) based fixed bin(18,0) level 2 in structure "sn" packed packed unsigned unaligned dcl 3239 in procedure "create_hash_table" ref 3387 firstref_trap_entry based structure level 1 dcl 6-370 firstref_trap_info based structure level 1 dcl 6-364 firstref_trap_infop 134 based pointer level 2 in structure "ocu_data" dcl 6-37 in procedure "ocu_" ref 931 firstref_trap_infop 134 based pointer level 2 in structure "od" dcl 2542 in procedure "create_link" ref 2577 fixed builtin function dcl 238 ref 3036 3802 3803 3804 3805 3806 flags 2 based structure level 2 in structure "od" dcl 1924 in procedure "create_defs" flags 3 based structure level 2 in structure "de" dcl 3240 in procedure "create_hash_table" flags 1(18) based structure level 2 in structure "defn" packed packed unaligned dcl 1904 in procedure "create_defs" set ref 2051* flags 2 based structure level 2 in structure "od" dcl 2762 in procedure "create_stat" flags 1(18) based structure level 2 in structure "dh" packed packed unaligned dcl 1905 in procedure "create_defs" set ref 2009* flags 001250 automatic bit(4) packed unaligned dcl 3887 in procedure "copy_defs" set ref 3918* 3919* 3919 3924* flags 2 based structure level 2 in structure "od" dcl 2825 in procedure "create_symb" flags 2 based structure level 2 in structure "od" dcl 2992 in procedure "create_obj_map" flags 1(18) based structure level 2 in structure "def" packed packed unaligned dcl 3872 in procedure "copy_defs" flags 2 based structure level 2 in structure "od" dcl 2542 in procedure "create_link" flags 3 based structure level 2 in structure "de" dcl 153 in procedure "ocu_" set ref 591* 663* flags 3 based structure level 2 in structure "srch_de" dcl 3241 in procedure "create_hash_table" flags 4 based structure array level 3 in structure "di" dcl 1906 in procedure "create_defs" flags 2 based structure level 2 in structure "ocu_data" dcl 6-37 in procedure "ocu_" set ref 315* format 12 based structure level 2 dcl 2993 forward_relp based fixed bin(18,0) level 2 in structure "defn" packed packed unsigned unaligned dcl 1904 in procedure "create_defs" set ref 2036* 2131 2146 2163 forward_relp 000474 automatic fixed bin(18,0) unsigned dcl 1960 in procedure "create_defs" set ref 2030* 2036 2041 2042* 2042 forward_relp based fixed bin(18,0) level 2 in structure "sn" packed packed unsigned unaligned dcl 1935 in procedure "create_defs" ref 2175 2206 2218 forward_relp based fixed bin(18,0) level 2 in structure "def" packed packed unsigned unaligned dcl 3872 in procedure "copy_defs" ref 3928 fr_traps based structure level 1 dcl 4-90 frt based structure level 1 dcl 2527 set ref 2695 frti based structure level 1 dcl 2532 in procedure "create_link" frti based structure level 1 dcl 157 in procedure "ocu_" frtip 000174 automatic pointer dcl 202 in procedure "ocu_" set ref 931* 935 935 939 939 940 940 frtip 000576 automatic pointer dcl 2554 in procedure "create_link" set ref 2577* 2609 2613 2687 2694 2700 2701 2702 frtp 000600 automatic pointer dcl 2555 set ref 2692* 2693 2694 2695 2701 2702 2703 2708 full_header based structure level 2 in structure "in_init_template" dcl 1539 in procedure "find_init_info" full_header based structure level 2 in structure "st_init_template" dcl 1551 in procedure "find_init_info" full_header based structure level 2 in structure "init_list_template" dcl 6-444 in procedure "ocu_" gen_created 4 based fixed bin(71,0) level 3 in structure "mss" dcl 3962 in procedure "mk_symbol_scn" set ref 4010* gen_created 52 based fixed bin(71,0) level 4 in structure "mi" dcl 3958 in procedure "mk_symbol_scn" ref 4010 gen_info based structure level 1 dcl 7-61 in procedure "ocu_" ref 1230 gen_info 52 based structure level 3 in structure "mi" dcl 3958 in procedure "mk_symbol_scn" gen_info 52 based structure level 3 in structure "mi" dcl 173 in procedure "ocu_" set ref 1230* gen_number 56 based fixed bin(17,0) level 4 in structure "mi" dcl 3958 in procedure "mk_symbol_scn" ref 4009 gen_number 3 based fixed bin(17,0) level 3 in structure "mss" dcl 3962 in procedure "mk_symbol_scn" set ref 4009* gen_version 57 based varying char(512) level 4 in structure "mi" dcl 3958 in procedure "mk_symbol_scn" ref 3998 4030 gen_version 12 based structure level 3 in structure "mss" packed packed unaligned dcl 3962 in procedure "mk_symbol_scn" generator 54 based char(8) level 4 in structure "mi" dcl 3958 in procedure "mk_symbol_scn" ref 4012 generator 10 based char(8) level 3 in structure "mss" dcl 3962 in procedure "mk_symbol_scn" set ref 4012* get_group_id_ 000016 constant entry external dcl 107 ref 3997 get_shortest_path_ 000020 constant entry external dcl 108 ref 3758 3777 get_system_free_area_ 000022 constant entry external dcl 109 ref 3985 get_temp_segment_ 000024 constant entry external dcl 110 ref 302 394 1225 get_temp_segments_ 000026 constant entry external dcl 111 ref 308 group_id 000101 automatic varying char(40) dcl 3973 set ref 3997* 3999 4029 halfwords 000741 automatic fixed bin(21,0) dcl 3119 set ref 3164* 3168 3168 3170 3171 hash_table_relp 1 based fixed bin(18,0) level 2 packed packed unsigned unaligned dcl 3247 set ref 3339* hbound builtin function dcl 239 ref 3435 hcs_$fs_get_path_name 000030 constant entry external dcl 112 ref 3749 hcs_$set_bc 000032 constant entry external dcl 114 ref 1281 hcs_$star_ 000034 constant entry external dcl 116 ref 3763 hcs_$status_mins 000036 constant entry external dcl 118 ref 3788 header based structure level 2 in structure "in_init_copy" dcl 1534 in procedure "find_init_info" header based structure level 3 in structure "st_init_template" dcl 1551 in procedure "find_init_info" header based structure level 2 in structure "trap_pair_info" dcl 6-261 in procedure "ocu_" header based structure level 2 in structure "ti" dcl 1822 in procedure "create_text" header based structure level 2 in structure "si" dcl 2764 in procedure "create_stat" header based structure level 2 in structure "text_info" dcl 6-124 in procedure "ocu_" header based structure level 2 in structure "type_pair_info" dcl 6-238 in procedure "ocu_" header based structure level 2 in structure "static_info" dcl 6-318 in procedure "ocu_" header based structure level 2 in structure "symbol_info" dcl 6-389 in procedure "ocu_" header based structure level 2 in structure "si" dcl 1819 in procedure "create_text" header based structure level 2 in structure "string_map_info" dcl 6-188 in procedure "ocu_" header based structure level 2 in structure "di" dcl 154 in procedure "ocu_" header based structure level 2 in structure "lte" dcl 1917 in procedure "create_defs" header based structure level 2 in structure "msf_info" dcl 6-524 in procedure "ocu_" header based structure level 2 in structure "tpi" dcl 1442 in procedure "find_type_pair" header based structure level 2 in structure "mi" dcl 3727 in procedure "validate_component" header based structure level 2 in structure "tpi" dcl 1936 in procedure "create_defs" header based structure level 2 in structure "si" dcl 164 in procedure "ocu_" header based structure level 2 in structure "frti" dcl 2532 in procedure "create_link" header based structure level 2 in structure "st_init_copy" dcl 1546 in procedure "find_init_info" header based structure level 2 in structure "rel_info" dcl 2826 in procedure "create_symb" header based structure level 2 in structure "li" dcl 2536 in procedure "create_link" header based structure level 2 in structure "relinfo_blocks" dcl 6-404 in procedure "ocu_" header based structure level 2 in structure "si" dcl 1928 in procedure "create_defs" header based structure level 2 in structure "sbi" dcl 2833 in procedure "create_symb" header based structure level 2 in structure "in_init_deferred" dcl 1537 in procedure "find_init_info" header based structure level 2 in structure "ewi" dcl 1909 in procedure "create_defs" header based structure level 2 in structure "link_info" dcl 6-338 in procedure "ocu_" header based structure level 2 in structure "msf_symbol_scn" dcl 6-479 in procedure "ocu_" header based structure level 2 in structure "ti" dcl 170 in procedure "ocu_" header based structure level 2 in structure "st_init_deferred" dcl 1549 in procedure "find_init_info" header based structure level 2 in structure "di" dcl 1906 in procedure "create_defs" header based structure level 2 in structure "smi" dcl 1737 in procedure "find_string" header based structure level 2 in structure "sbi" dcl 167 in procedure "ocu_" header based structure level 2 in structure "mi" dcl 3958 in procedure "mk_symbol_scn" header based structure level 2 in structure "frti" dcl 157 in procedure "ocu_" header based structure level 2 in structure "trpi" dcl 1673 in procedure "find_trap_pair" header based structure level 2 in structure "ii" dcl 1914 in procedure "create_defs" header based structure level 2 in structure "di" dcl 3231 in procedure "create_hash_table" header based structure level 2 in structure "def_info" dcl 6-157 in procedure "ocu_" header based structure level 2 in structure "relinfo" dcl 6-429 in procedure "ocu_" header based structure level 2 in structure "mss" dcl 3962 in procedure "mk_symbol_scn" header based structure level 2 in structure "exp_word_info" dcl 6-212 in procedure "ocu_" header based structure level 2 in structure "reloc_info" dcl 2829 in procedure "create_symb" header based structure level 2 in structure "trpi" dcl 1941 in procedure "create_defs" header based structure level 2 in structure "ii" dcl 1530 in procedure "find_init_info" header based structure level 2 in structure "reloc_info" dcl 3592 in procedure "append_relinfo" header based structure level 2 in structure "mi" dcl 173 in procedure "ocu_" header based structure level 2 in structure "init_info" dcl 6-286 in procedure "ocu_" header based structure level 2 in structure "si" dcl 2543 in procedure "create_link" header based structure level 2 in structure "smi" dcl 1931 in procedure "create_defs" header based structure level 3 in structure "in_init_template" dcl 1539 in procedure "find_init_info" header based structure level 2 in structure "li" dcl 161 in procedure "ocu_" header based structure level 2 in structure "firstref_trap_info" dcl 6-364 in procedure "ocu_" header based structure level 2 in structure "ewi" dcl 1362 in procedure "find_exp_word" header based structure level 2 in structure "link_init_copy_info" dcl 2-211 in procedure "ocu_" header based structure level 2 in structure "template_entry" dcl 6-461 in procedure "ocu_" header based structure level 2 in structure "si" dcl 2836 in procedure "create_symb" header_relp based fixed bin(17,0) level 2 packed packed unaligned dcl 2539 set ref 2672* ht_size 001017 automatic fixed bin(17,0) dcl 3427 set ref 3431* 3436 3442 htx 001002 automatic fixed bin(17,0) dcl 3271 set ref 3352* 3354 3355* 3355 3358 3360 3379* 3381 3382* 3382 3385 3388 i 000102 automatic fixed bin(21,0) dcl 3603 in procedure "append_relinfo" set ref 3662* 3663 3669 i 001016 automatic fixed bin(17,0) dcl 3426 in procedure "opt_size" set ref 3435* 3436 3436* i 000176 automatic fixed bin(17,0) dcl 203 in procedure "ocu_" set ref 2032* 2050 2053 2054 2055 2056 2057 2061 2067 2071* 2100* 2105 2106 2106 2108* 2129* 2243* 2247 2248 2253 2254 2258 2303 2303* 2309* 2311 2312* 2340* 2344 2355 2365 2378 2381 2385 2392 2394 2397* 2410* 2414 2423 2426* 2637* 2638 2651 2658 2659 2662 2666 2677 2679* 2700* 2701 2701 2702 2702 2703 2708* 3291* 3292 3299 3320* identifier 1 based char(8) level 3 in structure "mss" dcl 3962 in procedure "mk_symbol_scn" set ref 4008* identifier 1 based char(8) level 2 in structure "ssh" dcl 2839 in procedure "create_symb" ref 2942 2942 identifier 1 based char(8) level 2 in structure "om" dcl 2993 in procedure "create_obj_map" set ref 3011* ignore 4 based bit(1) array level 4 in structure "di" packed packed unaligned dcl 1906 in procedure "create_defs" ref 2053 ignore 1(19) based bit(1) level 3 in structure "def" packed packed unaligned dcl 3872 in procedure "copy_defs" ref 3901 ignore 3 based bit(1) level 3 in structure "de" packed packed unaligned dcl 153 in procedure "ocu_" set ref 593* 664* ignore 3 based bit(1) level 3 in structure "srch_de" packed packed unaligned dcl 3241 in procedure "create_hash_table" ref 3293 ignore 1(19) based bit(1) level 3 in structure "defn" packed packed unaligned dcl 1904 in procedure "create_defs" set ref 2053* ignore 1(19) based bit(1) level 3 in structure "dh" packed packed unaligned dcl 1905 in procedure "create_defs" set ref 2011* ignore 3 based bit(1) level 3 in structure "de" packed packed unaligned dcl 3240 in procedure "create_hash_table" ref 3282 3347 3375 ii based structure level 1 dcl 1914 in procedure "create_defs" ii based structure level 1 dcl 1530 in procedure "find_init_info" iip 000404 automatic pointer dcl 1559 in procedure "find_init_info" set ref 1568* 1572 1576 1583 1599 1600 1600 1601 1601 1636 1637 1637 iip 000476 automatic pointer dcl 1961 in procedure "create_defs" set ref 1995* 2241 2243 2247 2248 2253 2254 2258 2303 2303 2394 in_init based structure level 1 dcl 1533 ref 1584 1631 in_init_copy based structure level 1 dcl 1534 ref 1589 1618 in_init_deferred based structure level 1 dcl 1537 ref 1585 1626 in_init_template based structure level 1 dcl 1539 ref 1587 1611 index builtin function dcl 240 ref 3538 3662 indirect 4(03) based bit(1) array level 4 in structure "di" packed packed unaligned dcl 1906 in procedure "create_defs" ref 2056 indirect 3(03) based bit(1) level 3 in structure "de" packed packed unaligned dcl 153 in procedure "ocu_" set ref 599* indirect 1(24) based bit(1) level 3 in structure "defn" packed packed unaligned dcl 1904 in procedure "create_defs" set ref 2056* info_relp 2 based fixed bin(18,0) array level 3 in structure "trpi" unsigned dcl 1673 in procedure "find_trap_pair" set ref 1690 1700* info_relp 000177 automatic fixed bin(18,0) unsigned dcl 204 in procedure "ocu_" set ref 1256* 1258* info_relp 2 based fixed bin(18,0) array level 3 in structure "trpi" unsigned dcl 1941 in procedure "create_defs" ref 2312 info_relp 2(18) based fixed bin(18,0) array level 3 in structure "frt" packed packed unsigned unaligned dcl 2527 in procedure "create_link" set ref 2702* 2708 info_relp 0(18) based fixed bin(18,0) level 2 in structure "trap" packed packed unsigned unaligned dcl 1672 in procedure "find_trap_pair" ref 1690 1700 info_relp 2 based fixed bin(18,0) array level 3 in structure "frti" unsigned dcl 2532 in procedure "create_link" ref 2702 info_relp 0(18) based fixed bin(18,0) level 2 in structure "trap_pr" packed packed unsigned unaligned dcl 1940 in procedure "create_defs" set ref 2312* 2320 info_relp 2 based fixed bin(18,0) array level 3 in structure "frti" unsigned dcl 157 in procedure "ocu_" set ref 940* init 2 based structure array level 2 in structure "ii" dcl 1530 in procedure "find_init_info" init 2 based structure array level 2 in structure "ii" dcl 1914 in procedure "create_defs" init_entry based structure level 1 dcl 6-292 init_info based structure level 1 dcl 6-286 init_infop parameter pointer dcl 1437 in procedure "find_type_pair" set ref 1411 1477 1477* 1480* init_infop parameter pointer dcl 1358 in procedure "find_exp_word" set ref 1327 1381* init_infop 124 based pointer level 2 in structure "od" dcl 1544 in procedure "find_init_info" ref 1568 init_infop parameter pointer dcl 1526 in procedure "find_init_info" ref 1508 1581 1581 1584 1585 1585 1587 1587 1589 1589 1591 1605 1607 1608 1609 1610 1611 1613 1615 1616 1617 1618 1620 1622 1623 1624 1625 1626 1629 1630 1631 init_infop 124 based pointer level 2 in structure "od" dcl 1924 in procedure "create_defs" ref 1995 init_infox 2 based fixed bin(18,0) array level 3 in structure "tpi" unsigned dcl 1936 in procedure "create_defs" ref 2392 2394 2397 init_infox 000406 automatic fixed bin(17,0) dcl 1560 in procedure "find_init_info" set ref 1572* 1576 1583 1591* 1600* 1601 1636 1639 init_infox 1 000366 automatic fixed bin(18,0) level 2 in structure "type_paire" unsigned dcl 1450 in procedure "find_type_pair" set ref 1477* 1480* 1481* init_len 000407 automatic fixed bin(21,0) dcl 1561 set ref 1584* 1585* 1587* 1589* 1591 1591 init_list_template based structure level 1 dcl 6-444 init_segl based fixed bin(17,0) level 3 in structure "ii" dcl 1530 in procedure "find_init_info" set ref 1599 1601 1637* 1637 init_segl based fixed bin(17,0) level 3 in structure "ii" dcl 1914 in procedure "create_defs" ref 2241 init_segl 000502 automatic fixed bin(18,0) dcl 1963 in procedure "create_defs" set ref 2241* init_segp 126 based pointer level 2 in structure "od" dcl 1544 in procedure "find_init_info" ref 1576 1599 init_segp 126 based pointer level 2 in structure "od" dcl 1924 in procedure "create_defs" ref 2240 init_segp 000500 automatic pointer dcl 1962 in procedure "create_defs" set ref 2240* 2254 init_str based char packed unaligned dcl 1543 ref 1591 init_strl 000503 automatic fixed bin(21,0) dcl 1964 set ref 2258* 2262 2262 init_type 1(03) based fixed bin(3,0) level 3 packed packed unsigned unaligned dcl 1917 ref 2285 initial_data 2 based bit(36) array level 2 in structure "st_init_copy" dcl 1546 in procedure "find_init_info" set ref 1617* initial_data 2 based bit(36) array level 2 in structure "in_init_copy" dcl 1534 in procedure "find_init_info" ref 1617 left based fixed bin(17,0) level 2 in structure "w18s" packed packed unaligned dcl 188 in procedure "ocu_" set ref 1098* 1127* 1156* left based fixed bin(18,0) level 2 in structure "w18" packed packed unsigned unaligned dcl 181 in procedure "ocu_" set ref 1096* 1124* 1153* left 0(03) based fixed bin(14,0) level 2 in structure "w15s" packed packed unaligned dcl 184 in procedure "ocu_" set ref 1094* left 0(03) based fixed bin(15,0) level 2 in structure "w15" packed packed unsigned unaligned dcl 177 in procedure "ocu_" set ref 1091* left 000742 automatic fixed bin(21,0) dcl 3120 in procedure "install_words" set ref 3130* 3133 3137 3140 3171* 3171 3174 3194* 3194 len 000410 automatic fixed bin(18,0) dcl 1562 set ref 1611* 1618* 1626* 1631* 1636 1637 length 1 based fixed bin(18,0) level 2 in structure "sme" unsigned dcl 1736 in procedure "find_string" set ref 1762 1774* 1778 1780 length 3 based fixed bin(18,0) array level 3 in structure "ii" unsigned dcl 1530 in procedure "find_init_info" set ref 1583 1636* length builtin function dcl 3609 in procedure "append_relinfo" ref 3623 length builtin function dcl 1750 in procedure "find_string" ref 1774 length 3 based fixed bin(18,0) array level 3 in structure "smi" unsigned dcl 1931 in procedure "create_defs" ref 2105 2106 length 3 based fixed bin(18,0) array level 3 in structure "ii" unsigned dcl 1914 in procedure "create_defs" ref 2248 2258 2303 2303 length builtin function dcl 3982 in procedure "mk_symbol_scn" ref 3998 3999 lengths 76 based structure level 2 in structure "od" dcl 1818 in procedure "create_text" lengths 76 based structure level 2 in structure "od" dcl 1924 in procedure "create_defs" lengths 76 based structure level 2 in structure "od" dcl 2762 in procedure "create_stat" lengths 76 based structure level 2 in structure "od" dcl 2542 in procedure "create_link" lengths 76 based structure level 2 in structure "od" dcl 2992 in procedure "create_obj_map" lengths 76 based structure level 2 in structure "od" dcl 2825 in procedure "create_symb" li based structure level 1 dcl 2536 in procedure "create_link" li based structure level 1 dcl 161 in procedure "ocu_" link 100 based fixed bin(18,0) level 3 in structure "od" unsigned dcl 2992 in procedure "create_obj_map" ref 3023 3024 link 1 based structure array level 2 in structure "li" dcl 161 in procedure "ocu_" set ref 830 837* 886 894* link 100 based fixed bin(18,0) level 3 in structure "od" unsigned dcl 2542 in procedure "create_link" set ref 2619* 2625 2631* 2631 2657 2668* 2668 2671 2672 2681* 2681 2695* 2695 2720 2723* 2723 2732 link 1 based structure array level 2 in structure "li" dcl 2536 in procedure "create_link" link_begin 6 based fixed bin(18,0) level 2 packed packed unsigned unaligned dcl 2547 set ref 2595* 2603* 2603 link_entry based structure level 1 dcl 6-343 link_info based structure level 1 dcl 6-338 link_infop 132 based pointer level 2 in structure "od" dcl 2542 in procedure "create_link" ref 2576 link_infop 132 based pointer level 2 in structure "ocu_data" dcl 6-37 in procedure "ocu_" ref 817 875 link_init based structure level 1 dcl 2-205 link_init_copy_info based structure level 1 dcl 2-211 link_init_deferred based structure level 1 dcl 2-270 link_init_list_template based structure level 1 dcl 2-219 link_relp 267 based fixed bin(18,0) array level 3 in structure "mi" unsigned dcl 3727 in procedure "validate_component" set ref 3804* link_relp 000670 automatic fixed bin(18,0) unsigned dcl 2845 in procedure "create_symb" set ref 2869* 2916* 2926 2955 link_relp 2(18) based fixed bin(18,0) level 2 in structure "st_init_deferred" packed packed unsigned unaligned dcl 1549 in procedure "find_init_info" set ref 1625* link_relp 2(18) based fixed bin(18,0) level 2 in structure "in_init_deferred" packed packed unsigned unaligned dcl 1537 in procedure "find_init_info" ref 1625 link_trap_pair based structure level 1 dcl 2-177 linkage_length 5(18) based bit(18) level 2 packed packed unaligned dcl 2993 set ref 3023* linkage_offset 5 based bit(18) level 2 packed packed unaligned dcl 2993 set ref 3022* 3036 linkage_section_lng 6(18) based fixed bin(18,0) level 2 packed packed unsigned unaligned dcl 2547 set ref 2596* 2604* 2604 2611 2613* 2613 linke 000202 automatic structure level 1 dcl 206 set ref 821* 830 837 886 894 linkp 6 001140 automatic pointer level 2 dcl 3741 set ref 3804 linkx 000207 automatic fixed bin(17,0) dcl 207 set ref 829* 830 830* 836* 837 841 885* 886 886* 892* 894 898 lip 000602 automatic pointer dcl 2556 in procedure "create_link" set ref 2576* 2596 2637 2638 2651 2658 2659 2662 2666 2677 2679 lip 000200 automatic pointer dcl 205 in procedure "ocu_" set ref 817* 829 830 836 836 837 875* 885 886 892 892 894 lk based structure level 1 dcl 2539 set ref 2596 2681 lk_relp 001247 automatic fixed bin(18,0) unsigned dcl 3886 set ref 3922* 3924* lk_size 000011 internal static fixed bin(17,0) dcl 147 set ref 285* 830 841 886 898 lkp 000604 automatic pointer dcl 2557 set ref 2596 2671* 2672 2673 2674 2675 2676 2677 2678 2679 2681 lte based structure level 1 dcl 1917 set ref 2297 ltep 000504 automatic pointer dcl 1965 set ref 2279* 2281 2285 2290 2297* 2297 2297 ltrim builtin function dcl 241 ref 3782 make_comp_ht 000771 automatic bit(1) packed unaligned dcl 3266 set ref 3276* 3332* 3366 maxi_truncate 23 based fixed bin(18,0) level 3 packed packed unsigned unaligned dcl 3962 set ref 4025* mbz 0(21) based bit(6) level 2 in structure "lk" packed packed unaligned dcl 2539 in procedure "create_link" set ref 2674* mbz based bit(18) level 2 in structure "dt" packed packed unaligned dcl 3242 in procedure "create_hash_table" set ref 3307* mbz1 0(18) based bit(12) level 2 packed packed unaligned dcl 2546 set ref 2660* mbz2 1(18) based bit(3) level 2 in structure "partial_lk" packed packed unaligned dcl 2546 in procedure "create_link" set ref 2663* mbz2 1(18) based bit(12) level 2 in structure "lk" packed packed unaligned dcl 2539 in procedure "create_link" set ref 2678* mbz3 1(27) based bit(3) level 2 packed packed unaligned dcl 2546 set ref 2665* mi based structure level 1 dcl 3958 in procedure "mk_symbol_scn" mi based structure level 1 dcl 173 in procedure "ocu_" mi based structure level 1 dcl 3874 in procedure "copy_defs" mi based structure level 1 dcl 3727 in procedure "validate_component" min builtin function dcl 242 in procedure "ocu_" ref 3639 min 001034 automatic fixed bin(17,0) dcl 3516 in procedure "relocate_link_ref" set ref 3527* 3538 3540 mini_truncate 22(18) based fixed bin(18,0) level 3 packed packed unsigned unaligned dcl 3962 set ref 4024* mip parameter pointer dcl 3864 in procedure "copy_defs" ref 3845 3891 3891 mip 000236 automatic pointer dcl 220 in procedure "ocu_" set ref 1214* 1219 1219* 1225* 1229 1230 1231 1237 1243* 1246 1266 1267* 1272* 1280 1281 1285* mip parameter pointer dcl 3721 in procedure "validate_component" ref 3686 3745 3753 3758 3763 3772 3777 3789 3802 3803 3804 3805 3806 3824 3824 mip parameter pointer dcl 3954 in procedure "mk_symbol_scn" ref 3937 3998 4009 4010 4012 4030 mm based structure level 1 dcl 1920 in procedure "create_defs" set ref 2461 mm based structure level 1 dcl 3731 in procedure "validate_component" mmp 000550 automatic pointer dcl 1983 in procedure "create_defs" set ref 2456* 2461 2465 2466 2467 mmp 001230 automatic pointer dcl 3743 in procedure "validate_component" set ref 3817* 3819 3824 3824 3832 3832 mod builtin function dcl 243 ref 1846 2481 2602 2720 3355 3382 3475 3533 mode 000210 automatic bit(36) dcl 208 set ref 414* 416* 420* modifier 1(30) based bit(6) level 2 in structure "lk" packed packed unaligned dcl 2539 in procedure "create_link" set ref 2679* modifier 4 000202 automatic bit(6) level 2 in structure "linke" dcl 206 in procedure "ocu_" set ref 822* 881* modifier 5 based bit(6) array level 3 in structure "li" dcl 2536 in procedure "create_link" ref 2666 2679 modifier 1(30) based bit(6) level 2 in structure "partial_lk" packed packed unaligned dcl 2546 in procedure "create_link" set ref 2666* msf_info 74 based structure level 2 in structure "od" dcl 1924 in procedure "create_defs" msf_info based structure level 1 dcl 6-524 in procedure "ocu_" msf_info 74 based structure level 2 in structure "od" dcl 2542 in procedure "create_link" msf_info 74 based structure level 2 in structure "ocu_data" dcl 6-37 in procedure "ocu_" msf_map based structure level 1 dcl 2-318 msf_map_relp 0(18) based fixed bin(18,0) level 2 in structure "dh" packed packed unsigned unaligned dcl 3726 in procedure "validate_component" ref 3812 3817 msf_map_relp 0(18) based fixed bin(18,0) level 2 in structure "dh" packed packed unsigned unaligned dcl 1905 in procedure "create_defs" set ref 2460* msf_map_version_1 000036 constant char(8) initial packed unaligned dcl 2-323 ref 2465 3819 msf_symbol_scn based structure level 1 dcl 6-479 mss based structure level 1 dcl 3962 set ref 3991 4003 4016 4024 4025 4043 4047 4056 mssp 000114 automatic pointer dcl 3974 set ref 3987* 3991 3991 4003* 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4016 4017 4018 4019 4020 4021 4022 4023 4024 4024 4025 4025 4029 4030 4034 4035 4037 4038 4042 4043 4047 4056 4057* my_component 75 based fixed bin(17,0) level 3 in structure "od" dcl 1924 in procedure "create_defs" ref 2467 my_component 75 based fixed bin(17,0) level 3 in structure "ocu_data" dcl 6-37 in procedure "ocu_" set ref 319* 722* my_component 3 based fixed bin(15,0) level 2 in structure "mm" unsigned dcl 3731 in procedure "validate_component" set ref 3832 3832* my_component 3 based fixed bin(15,0) level 2 in structure "mm" unsigned dcl 1920 in procedure "create_defs" set ref 2467* n_bits 3 based fixed bin(17,0) array level 4 in structure "reloc_info" dcl 3592 in procedure "append_relinfo" set ref 3642* 3642 3653* 3653 3667* 3667 n_bits 3 based fixed bin(17,0) array level 4 in structure "reloc_info" dcl 2829 in procedure "create_symb" ref 2899 2900 2909 2910 2919 2920 2929 2930 n_bits 1 based fixed bin(17,0) level 3 in structure "reloc_info" dcl 3592 in procedure "append_relinfo" set ref 3618 3637 3641* 3641 3644 3651 3652* 3652 3655 3665 3666* 3666 3669 n_bits 1 based fixed bin(17,0) level 3 in structure "rel_info" dcl 2826 in procedure "create_symb" set ref 2899* 2900 2906 2907 2909* 2910 2916 2917 2919* 2920 2926 2927 2929* 2930 2936 n_bits based fixed bin(35,0) level 3 in structure "lte" dcl 1917 in procedure "create_defs" ref 2281 2290 2297 n_bits 1 based fixed bin(17,0) level 3 in structure "reloc_info" dcl 2829 in procedure "create_symb" ref 2900 2910 2920 2930 n_entries based fixed bin(17,0) level 2 in structure "dht" dcl 3248 in procedure "create_hash_table" set ref 3341* 3342 3352* 3355 n_entries based fixed bin(17,0) level 2 in structure "cht" dcl 3252 in procedure "create_hash_table" set ref 3370* 3371 3379* 3382 n_names 0(18) based fixed bin(18,0) level 2 in structure "dt" packed packed unsigned unaligned dcl 3242 in procedure "create_hash_table" set ref 3298* 3298 3299 3301 3302 3308* 3331 n_names parameter fixed bin(17,0) dcl 3422 in procedure "opt_size" ref 3400 3431 n_names 000767 automatic fixed bin(17,0) dcl 3264 in procedure "create_hash_table" set ref 3274* 3288* 3288 3341* n_segnames 000770 automatic fixed bin(17,0) dcl 3265 set ref 3275* 3284* 3284 3370* n_static parameter fixed bin(17,0) dcl 3101 set ref 3074 3181* n_traps 1 based fixed bin(17,0) level 2 dcl 2527 set ref 2694* 2695 n_words parameter fixed bin(17,0) dcl 3100 in procedure "install_words" ref 3074 3127 n_words based fixed bin(35,0) level 3 in structure "st_init_deferred" dcl 1549 in procedure "find_init_info" set ref 1622* n_words based fixed bin(35,0) level 3 in structure "in_init_copy" dcl 1534 in procedure "find_init_info" ref 1589 1615 1617 1618 n_words 000506 automatic fixed bin(18,0) dcl 1966 in procedure "create_defs" set ref 2112* 2116 2116 2116 2116 2118 2122 n_words based fixed bin(35,0) level 4 in structure "st_init_template" dcl 1551 in procedure "find_init_info" set ref 1607* n_words based fixed bin(35,0) level 4 in structure "in_init_template" dcl 1539 in procedure "find_init_info" ref 1607 n_words based fixed bin(35,0) level 3 in structure "in_init_deferred" dcl 1537 in procedure "find_init_info" ref 1622 n_words based fixed bin(35,0) level 2 in structure "in_init" dcl 1533 in procedure "find_init_info" ref 1581 1629 n_words based fixed bin(35,0) level 2 in structure "st_init" dcl 1545 in procedure "find_init_info" set ref 1581 1629* n_words based fixed bin(35,0) level 3 in structure "st_init_copy" dcl 1546 in procedure "find_init_info" set ref 1615* 1617 n_words_in_list 2(18) based fixed bin(18,0) level 3 in structure "in_init_template" packed packed unsigned unaligned dcl 1539 in procedure "find_init_info" ref 1587 1609 1610 1611 n_words_in_list 2(18) based fixed bin(18,0) level 3 in structure "st_init_template" packed packed unsigned unaligned dcl 1551 in procedure "find_init_info" set ref 1609* 1610 name_relp 2 based fixed bin(18,0) level 2 in structure "def" packed packed unsigned unaligned dcl 3872 in procedure "copy_defs" ref 3906 name_relp 2 based fixed bin(18,0) level 2 in structure "defn" packed packed unsigned unaligned dcl 1904 in procedure "create_defs" set ref 2057* 2130* 2130 new 1(18) based bit(1) level 3 in structure "defn" packed packed unaligned dcl 1904 in procedure "create_defs" set ref 2052* new 1(18) based bit(1) level 3 in structure "dh" packed packed unaligned dcl 1905 in procedure "create_defs" set ref 2010* new_block 000507 automatic bit(1) packed unaligned dcl 1967 set ref 2141* 2150 2158* new_init_str based char packed unaligned dcl 1921 ref 2262 new_init_strp 000510 automatic pointer dcl 1968 set ref 2254* 2262 new_stat_str based char packed unaligned dcl 2763 in procedure "create_stat" ref 2794 new_stat_str based char packed unaligned dcl 2540 in procedure "create_link" ref 2628 new_stat_strp 000606 automatic pointer dcl 2558 in procedure "create_link" set ref 2626* 2628 new_stat_strp 000656 automatic pointer dcl 2773 in procedure "create_stat" set ref 2791* 2794 new_type_pair based structure level 1 dcl 1922 set ref 2349 new_type_pairp 000512 automatic pointer dcl 1969 set ref 2348* 2349 2355 2359 2359 2361 2365 2372 2372 2378 2381 2385 2394 2394 2397 next_block 20 based fixed bin(18,0) level 3 packed packed unsigned unaligned dcl 3962 set ref 4019* next_segname_relp 1 based fixed bin(18,0) level 2 packed packed unsigned unaligned dcl 1926 set ref 2179* 2228* next_word 000211 automatic fixed bin(18,0) unsigned dcl 209 set ref 518* 520 768* 770 1004* 1006 no_hash_table 2(05) based bit(1) level 3 in structure "od" packed packed unaligned dcl 1924 in procedure "create_defs" ref 2476 no_hash_table 2(05) based bit(1) level 3 in structure "ocu_data" packed packed unaligned dcl 6-37 in procedure "ocu_" set ref 330* 2020 no_relinfo based bit(1) level 3 in structure "reloc_info" dcl 3592 in procedure "append_relinfo" ref 3613 no_relinfo based bit(1) level 3 in structure "relinfo_blocks" dcl 6-404 in procedure "ocu_" set ref 396* null builtin function dcl 244 ref 282 291 293 297 370 371 378 378 381 410 426 453 455 491 491 561 561 571 571 630 630 643 643 671 671 703 703 707 707 713 713 749 749 811 811 869 869 925 925 977 977 1051 1051 1057 1057 1068 1068 1081 1081 1104 1104 1115 1115 1133 1133 1144 1144 1162 1162 1170 1170 1214 1215 1219 1221 1254 1254 1256 1256 1477 2173 2179 2226 2643 2643 2651 2651 2942 2942 3289 3296 3750 3750 3763 3763 3763 3763 3763 3763 3768 3768 3772 3772 3777 3777 3782 3782 3796 3796 3812 3812 3819 3819 3824 3824 3832 3832 3987 3991 4057 obj_init_str based char packed unaligned dcl 1923 set ref 2262* obj_init_strp 000514 automatic pointer dcl 1970 set ref 2253* 2262 2268 2268 2277 2279 obj_map_relp based structure level 1 dcl 2989 obj_map_relpp 000720 automatic pointer dcl 2998 set ref 3060* 3061 obj_stat_str based char packed unaligned dcl 2541 in procedure "create_link" set ref 2628* obj_stat_str based char packed unaligned dcl 2761 in procedure "create_stat" set ref 2794* obj_stat_strp 000610 automatic pointer dcl 2559 in procedure "create_link" set ref 2625* 2628 obj_stat_strp 000654 automatic pointer dcl 2772 in procedure "create_stat" set ref 2790* 2794 object_created 6 based fixed bin(71,0) level 3 dcl 3962 set ref 4011* object_info based structure level 1 dcl 3-6 object_info_$brief 000040 constant entry external dcl 120 ref 3795 object_info_version_2 constant fixed bin(17,0) initial dcl 3-60 ref 3791 object_link based structure level 1 dcl 4-28 object_map based structure level 1 dcl 5-10 ocu_data based structure level 1 dcl 6-37 ocu_data_ptrs based structure level 1 dcl 6-89 ocu_data_version_1 000034 constant char(8) initial packed unaligned dcl 6-34 ref 314 365 491 561 630 703 749 811 869 925 977 1051 ocu_datap 000256 automatic pointer dcl 6-33 set ref 282* 291 293 293 295* 302* 308 314 315 316 317 318 319 320 322 324 326 328 330 339 364* 365 370 378 378 378 387 387 387 387 396 400* 401* 402* 403* 404* 405* 414 420 420 420 425* 452* 453 455 455 457* 490* 491 497 509 560* 561 567 586* 629* 630 636 640* 702* 703 721 722 748* 749 755 810* 811 817 823* 868* 869 875 924* 925 931 976* 977 983 995 1050* 1051 1080 1114 1143 1840 2017 2020 2451 3522 od based structure level 1 dcl 1924 in procedure "create_defs" od based structure level 1 dcl 1671 in procedure "find_trap_pair" od based structure level 1 dcl 2762 in procedure "create_stat" od based structure level 1 dcl 2825 in procedure "create_symb" od based structure level 1 dcl 1441 in procedure "find_type_pair" od based structure level 1 dcl 2542 in procedure "create_link" od based structure level 1 dcl 1735 in procedure "find_string" od based structure level 1 dcl 1818 in procedure "create_text" od based structure level 1 dcl 1544 in procedure "find_init_info" od based structure level 1 dcl 1366 in procedure "find_exp_word" od based structure level 1 dcl 2992 in procedure "create_obj_map" odp parameter pointer dcl 1432 in procedure "find_type_pair" set ref 1411 1455 1463* 1470* 1477* 1480* odp parameter pointer dcl 2820 in procedure "create_symb" ref 2803 2857 2858 2859 2862 2862 2889 2960 2961 2961 odp parameter pointer dcl 1896 in procedure "create_defs" ref 1868 1993 1994 1995 1996 1997 1998 1999 2007 2007 2013 2046 2046 2078 2091 2091 2092 2098 2122 2122 2240 2247 2248 2248 2310 2335 2335 2344 2348 2349 2349 2378 2414 2418 2419 2419 2456 2460 2461 2461 2466 2467 2476 2476 2481 2481 2484 2484 2493 2493 2493 odp parameter pointer dcl 3953 in procedure "mk_symbol_scn" set ref 3937 4052* odp parameter pointer dcl 1666 in procedure "find_trap_pair" ref 1648 1685 odp parameter pointer dcl 1352 in procedure "find_exp_word" set ref 1327 1377 1381* odp 000212 automatic pointer dcl 210 in procedure "ocu_" set ref 1215* 1221 1221* 1246* 1254* 1256* 1258* 1262* 1267* 1272* 1276* odp parameter pointer dcl 2518 in procedure "create_link" ref 2502 2575 2576 2577 2578 2586 2586 2592 2600 2619 2623 2625 2631 2631 2632 2643 2651 2657 2668 2668 2671 2672 2681 2681 2695 2695 2720 2723 2723 2732 2732 2732 odp parameter pointer dcl 2757 in procedure "create_stat" ref 2741 2777 2781 2785 2790 2790 odp parameter pointer dcl 1730 in procedure "find_string" ref 1711 1754 1755 odp parameter pointer dcl 3863 in procedure "copy_defs" set ref 3845 3910* 3922* 3924* odp parameter pointer dcl 1813 in procedure "create_text" ref 1793 1832 1833 1840 1849 1851 1859 1859 odp parameter pointer dcl 2985 in procedure "create_obj_map" ref 2970 3005 3006 3017 3018 3020 3021 3023 3024 3025 3029 3032 3040 3051 3052 3053 3055 3056 3065 3065 odp parameter pointer dcl 1525 in procedure "find_init_info" ref 1508 1568 1576 1599 offset 3 based fixed bin(17,0) array level 3 in structure "di" dcl 1906 in procedure "create_defs" ref 2067 offset 1 based fixed bin(18,0) level 2 in structure "partial_lk" packed packed unsigned unaligned dcl 2546 in procedure "create_link" set ref 2662* offset 13 based fixed bin(18,0) level 4 in structure "mss" packed packed unsigned unaligned dcl 3962 in procedure "mk_symbol_scn" set ref 4034* offset 3 000202 automatic fixed bin(18,0) level 2 in structure "linke" unsigned dcl 206 in procedure "ocu_" set ref 880* offset 12 based fixed bin(18,0) level 4 in structure "mss" packed packed unsigned unaligned dcl 3962 in procedure "mk_symbol_scn" set ref 4035* offset 2 based fixed bin(17,0) level 2 in structure "de" dcl 153 in procedure "ocu_" set ref 589* 660* offset 4 based fixed bin(18,0) array level 3 in structure "li" unsigned dcl 2536 in procedure "create_link" ref 2662 offset 14 based fixed bin(18,0) level 4 in structure "mss" packed packed unsigned unaligned dcl 3962 in procedure "mk_symbol_scn" set ref 4037* offsetname parameter varying char dcl 1436 in procedure "find_type_pair" set ref 1411 1470* offsetname parameter varying char dcl 1357 in procedure "find_exp_word" set ref 1327 1381* offsetname_relp 1(18) based fixed bin(18,0) level 2 packed packed unsigned unaligned dcl 1922 set ref 2361* 2365* offsetnamex 3 000366 automatic fixed bin(18,0) level 2 in structure "type_paire" unsigned dcl 1450 in procedure "find_type_pair" set ref 1470* 1472* offsetnamex 4 based fixed bin(18,0) array level 3 in structure "tpi" unsigned dcl 1936 in procedure "create_defs" ref 2365 oi 001140 automatic structure level 1 dcl 3741 set ref 3795 3795 old_len 000103 automatic fixed bin(24,0) dcl 3604 set ref 3637* 3644 3651* 3655 3665* 3669 om based structure level 1 dcl 2993 set ref 3060 3065 om_relp 000724 automatic fixed bin(18,0) unsigned dcl 3000 set ref 3005* 3006 3061 omp 000722 automatic pointer dcl 2999 set ref 3006* 3010 3011 3016 3017 3019 3020 3022 3023 3025 3031 3033 3036 3037 3038 3040 3044 3045 3046 3047 3051 3052 3053 3054 3055 3056 3060 3060 3065 pad based bit(30) level 2 packed packed unaligned dcl 2547 set ref 2590* partial_link based structure level 1 dcl 4-38 partial_lk based structure level 1 dcl 2546 set ref 2668 partial_lkp 000634 automatic pointer dcl 2566 set ref 2657* 2658 2659 2660 2661 2662 2663 2664 2665 2666 2668 perprocess_static 2(04) based bit(1) level 3 in structure "od" packed packed unaligned dcl 2992 in procedure "create_obj_map" ref 3056 perprocess_static 2(04) based bit(1) level 3 in structure "ocu_data" packed packed unaligned dcl 6-37 in procedure "ocu_" set ref 328* perprocess_static 12(06) based bit(1) level 3 in structure "om" packed packed unaligned dcl 2993 in procedure "create_obj_map" set ref 3056* pit based structure level 1 dcl 1925 pitp 000516 automatic pointer dcl 1971 set ref 2290* 2292 2292 pointer_init_template based structure level 1 packed packed unaligned dcl 2-253 prev_sn based structure level 1 dcl 1926 prev_snp 000520 automatic pointer dcl 1972 set ref 2173* 2179 2179 2184* 2226 2228 2229 2229 2233 2234* 2234 procedure 2(02) based bit(1) level 3 in structure "ocu_data" packed packed unaligned dcl 6-37 in procedure "ocu_" set ref 324* 414 procedure 12(02) based bit(1) level 3 in structure "om" packed packed unaligned dcl 2993 in procedure "create_obj_map" set ref 3053* procedure 2(02) based bit(1) level 3 in structure "od" packed packed unaligned dcl 2992 in procedure "create_obj_map" ref 3053 ptr builtin function dcl 245 ref 1237 ptr_type based fixed bin(18,0) level 2 packed packed unsigned unaligned dcl 1925 ref 2292 rel builtin function dcl 246 ref 3802 3803 3804 3805 3806 rel_def 21 based bit(18) level 2 in structure "ssh" packed packed unaligned dcl 2839 in procedure "create_symb" set ref 2954* rel_def 21 based fixed bin(18,0) level 3 in structure "mss" packed packed unsigned unaligned dcl 3962 in procedure "mk_symbol_scn" set ref 4021* rel_info based structure level 1 dcl 2826 set ref 2906 2907 2916 2917 2926 2927 2936 rel_infop 000672 automatic pointer dcl 2846 set ref 2897* 2898 2899 2900 2906 2907* 2907 2907 2908 2909 2910 2916 2917* 2917 2917 2918 2919 2920 2926 2927* 2927 2927 2928 2929 2930 2936 rel_link 21(18) based bit(18) level 2 in structure "ssh" packed packed unaligned dcl 2839 in procedure "create_symb" set ref 2955* rel_link 21(18) based fixed bin(18,0) level 3 in structure "mss" packed packed unsigned unaligned dcl 3962 in procedure "mk_symbol_scn" set ref 4022* rel_symbol 22 based bit(18) level 2 in structure "ssh" packed packed unaligned dcl 2839 in procedure "create_symb" set ref 2956* rel_symbol 22 based fixed bin(18,0) level 3 in structure "mss" packed packed unsigned unaligned dcl 3962 in procedure "mk_symbol_scn" set ref 4023* rel_text 20(18) based bit(18) level 2 in structure "ssh" packed packed unaligned dcl 2839 in procedure "create_symb" set ref 2953* rel_text 20(18) based fixed bin(18,0) level 3 in structure "mss" packed packed unsigned unaligned dcl 3962 in procedure "mk_symbol_scn" set ref 4020* relbits 2 based bit level 2 in structure "rel_info" dcl 2826 in procedure "create_symb" set ref 2900* 2910* 2920* 2930* relbits 12 based bit level 2 in structure "reloc_info" dcl 3592 in procedure "append_relinfo" set ref 3644* 3655* 3669* relbits 12 based bit level 2 in structure "reloc_info" dcl 2829 in procedure "create_symb" ref 2900 2910 2920 2930 relchars 000612 automatic varying char(32) dcl 2560 set ref 2588* 2612* 2618* relchrs 000522 automatic varying char(10) dcl 1973 set ref 2083* 2084* 2354* 2362* 2362 2367* 2367 2382* 2382 2387* 2387 2399* 2399 2401* 2401 2405* release_temp_segment_ 000042 constant entry external dcl 122 ref 295 381 409 457 1219 1285 release_temp_segments_ 000044 constant entry external dcl 123 ref 293 455 relinfo based structure level 1 dcl 6-429 in procedure "ocu_" relinfo parameter varying char(2) dcl 3503 in procedure "relocate_link_ref" ref 3484 3538 3540 3546 3548 relinfo_blocks based structure level 1 dcl 6-404 relinfo_chr 000104 automatic char(1) packed unaligned dcl 3605 set ref 3624* 3628 3662 relinfo_chrs parameter varying char dcl 3587 ref 3559 3623 3624 relinfo_str based char packed unaligned dcl 6-144 set ref 526* 1012* relinfo_strl 000260 automatic fixed bin(21,0) dcl 6-142 set ref 510* 526 528 996* 1012 1015 2860* relinfo_strp 000262 automatic pointer dcl 6-143 set ref 509* 526 995* 1012 2859* 2876* relinfop parameter pointer dcl 3585 ref 3559 3613 3618 3618 3618 3637 3641 3641 3642 3642 3644 3651 3652 3652 3653 3653 3655 3665 3666 3666 3667 3667 3669 reloc_bits 000056 constant bit(5) initial array packed unaligned dcl 46 ref 3669 reloc_chars 000052 constant char(12) initial packed unaligned dcl 51 ref 3662 reloc_info based structure level 1 dcl 3592 in procedure "append_relinfo" reloc_info based structure level 1 dcl 2829 in procedure "create_symb" reloc_infop 000214 automatic pointer dcl 211 in procedure "ocu_" set ref 371* 381 381* 394* 396 400* 401* 402* 404* 409* 410* reloc_infop parameter pointer dcl 2821 in procedure "create_symb" set ref 2803 2876* 2884* 2899 2900 2900 2900 2909 2910 2910 2910 2919 2920 2920 2920 2929 2930 2930 2930 reloc_infop parameter pointer dcl 2519 in procedure "create_link" set ref 2502 2618* 2629* 2667* 2680* 2696* 2714* 2722* 2728* reloc_infop parameter pointer dcl 1814 in procedure "create_text" set ref 1793 1840* 1848* 1855* reloc_infop parameter pointer dcl 1897 in procedure "create_defs" set ref 1868 2017* 2019* 2020* 2022* 2061* 2084* 2094* 2116* 2303* 2331* 2405* 2446* 2471* 2483* 2489* reloc_infop parameter pointer dcl 3102 in procedure "install_words" set ref 3074 3168* 3182* reloc_str 000116 automatic char(2048) packed unaligned dcl 3975 in procedure "mk_symbol_scn" set ref 4047* 4052 4052 reloc_str based char packed unaligned dcl 7-53 in procedure "ocu_" ref 526 1012 reloc_strl 000276 automatic fixed bin(21,0) dcl 7-51 set ref 505* 510 526 526 991* 996 1012 1012 reloc_strp 000274 automatic pointer dcl 7-50 set ref 504* 526 990* 1012 relocatable 2(01) based bit(1) level 3 in structure "ocu_data" packed packed unaligned dcl 6-37 in procedure "ocu_" set ref 322* 396 relocatable 12(01) based bit(1) level 3 in structure "om" packed packed unaligned dcl 2993 in procedure "create_obj_map" set ref 3052* relocatable 2(01) based bit(1) level 3 in structure "od" packed packed unaligned dcl 2825 in procedure "create_symb" ref 2889 relocatable 2(01) based bit(1) level 3 in structure "od" packed packed unaligned dcl 2992 in procedure "create_obj_map" ref 3052 relp 5 based fixed bin(18,0) array level 3 in structure "tpi" unsigned dcl 1936 in procedure "create_defs" set ref 2344* 2425 relp 3 based fixed bin(18,0) array level 3 in structure "ewi" unsigned dcl 2523 in procedure "create_link" ref 2677 relp 3 based fixed bin(18,0) array level 3 in structure "trpi" unsigned dcl 1941 in procedure "create_defs" ref 2397 relp 000216 automatic fixed bin(18,0) unsigned dcl 212 in procedure "ocu_" set ref 514* 530 764* 774 1000* 1017 relp 001003 automatic fixed bin(18,0) unsigned dcl 3272 in procedure "create_hash_table" set ref 3385* 3386 relp 4 based fixed bin(18,0) array level 3 in structure "smi" unsigned dcl 1931 in procedure "create_defs" set ref 2108* 2130 2365 2385 relp 4 000366 automatic fixed bin(18,0) level 2 in structure "type_paire" unsigned dcl 1450 in procedure "find_type_pair" set ref 1483* relp 4 based fixed bin(18,0) array level 3 in structure "smi" unsigned dcl 3234 in procedure "create_hash_table" ref 3351 3377 relp 000725 automatic fixed bin(18,0) unsigned dcl 3001 in procedure "create_obj_map" set ref 3036* 3037 relp 2 000350 automatic fixed bin(18,0) level 2 in structure "expe" unsigned dcl 1371 in procedure "find_exp_word" set ref 1389* relp 3 based fixed bin(18,0) array level 3 in structure "ewi" unsigned dcl 1909 in procedure "create_defs" set ref 2414* relp 4 based fixed bin(18,0) array level 3 in structure "ii" unsigned dcl 1914 in procedure "create_defs" set ref 2247* 2253 2394 relp based fixed bin(18,0) level 2 in structure "obj_map_relp" packed packed unsigned unaligned dcl 2989 in procedure "create_obj_map" set ref 3061* relpair 000526 automatic varying char(2) dcl 1974 in procedure "create_defs" set ref 2071* 2073* 2078 2078 2083 2316* 2318* 2320* 2322* 2327* 2331* relpair 000744 automatic varying char(2) dcl 3121 in procedure "install_words" set ref 3180* 3181* 3182* relpair 000624 automatic varying char(2) dcl 2561 in procedure "create_link" set ref 2704* 2708* 2713* 2714* relstr based char packed unaligned dcl 3109 ref 3137 3168 3168 3180 relstrl 000746 automatic fixed bin(21,0) dcl 3122 set ref 3127* 3130 3137 3168 3168 3180 relstrp parameter pointer dcl 3099 ref 3074 3137 3168 3168 3180 retain 3(02) based bit(1) level 3 in structure "de" packed packed unaligned dcl 153 in procedure "ocu_" set ref 597* 668* retain 1(21) based bit(1) level 3 in structure "defn" packed packed unaligned dcl 1904 in procedure "create_defs" set ref 2055* retain 4(02) based bit(1) array level 4 in structure "di" packed packed unaligned dcl 1906 in procedure "create_defs" ref 2055 right 0(18) based fixed bin(18,0) level 2 in structure "w18" packed packed unsigned unaligned dcl 181 in procedure "ocu_" set ref 1100* 1129* 1158* right 0(18) based fixed bin(17,0) level 2 in structure "w18s" packed packed unaligned dcl 188 in procedure "ocu_" set ref 1102* 1131* 1160* ringno 0(18) based fixed bin(3,0) level 2 packed packed unsigned unaligned dcl 2539 set ref 2673* rtrim builtin function dcl 247 ref 586 586 640 640 run_depth 0(27) based fixed bin(2,0) level 2 packed packed unaligned dcl 2539 set ref 2675* s 001035 automatic fixed bin(17,0) dcl 3517 set ref 3537* 3538 3538 3538 3538 3540 3540 3540 3540 3546 3546 3546 3548 3548 3548* s_def 000014 constant structure level 1 dcl 69 ref 287 s_dh 000012 constant structure level 1 dcl 67 ref 286 s_lk 000010 constant structure level 1 dcl 65 ref 285 s_vlh 000000 constant structure level 1 dcl 63 ref 284 sbi based structure level 1 dcl 2833 in procedure "create_symb" sbi based structure level 1 dcl 167 in procedure "ocu_" sbip 000220 automatic pointer dcl 213 in procedure "ocu_" set ref 983* 996 1000 1004 1005 1005 1006 1012 1015 1114* 1115 1120 sbip 000674 automatic pointer dcl 2847 in procedure "create_symb" set ref 2858* 2860 2876 2876 2876 2880 2896 scn parameter fixed bin(17,0) dcl 3586 ref 3559 3618 3618 3642 3642 3653 3653 3667 3667 search builtin function dcl 248 ref 3137 section parameter fixed bin(17,0) dcl 3103 in procedure "install_words" set ref 3074 3168* 3182* section 2 based structure array level 3 in structure "reloc_info" dcl 2829 in procedure "create_symb" section 2 based structure array level 3 in structure "reloc_info" dcl 3592 in procedure "append_relinfo" segname parameter varying char dcl 1435 in procedure "find_type_pair" set ref 1411 1463* segname parameter varying char dcl 1356 in procedure "find_exp_word" set ref 1327 1381* segname_definition based structure level 1 dcl 2-90 segname_relp 1 based fixed bin(18,0) level 2 in structure "new_type_pair" packed packed unsigned unaligned dcl 1922 in procedure "create_defs" set ref 2378* 2381* 2385* segname_relp 2(18) based fixed bin(18,0) level 2 in structure "defn" packed packed unsigned unaligned dcl 1904 in procedure "create_defs" set ref 2157* 2199 segname_relp 2(18) based fixed bin(18,0) level 2 in structure "def" packed packed unsigned unaligned dcl 3238 in procedure "create_hash_table" ref 3302 3314 3322 3388 segnamex 3 based fixed bin(18,0) array level 3 in structure "tpi" unsigned dcl 1936 in procedure "create_defs" ref 2378 2381 2385 2436 2439 segnamex 2 000366 automatic fixed bin(18,0) level 2 in structure "type_paire" unsigned dcl 1450 in procedure "find_type_pair" set ref 1463* 1465* segp 262 based pointer array level 3 in structure "mi" dcl 3727 in procedure "validate_component" ref 3745 segp 262 based pointer array level 3 in structure "mi" dcl 3874 in procedure "copy_defs" ref 3891 segp 66 based pointer level 3 in structure "od" dcl 1924 in procedure "create_defs" ref 2007 segp 262 based pointer array level 3 in structure "mi" dcl 173 in procedure "ocu_" set ref 1237* segp 001226 automatic pointer dcl 3742 in procedure "validate_component" set ref 3745* 3749* 3788* 3795* segp 66 based pointer level 3 in structure "od" dcl 2542 in procedure "create_link" ref 2586 segp 66 based pointer level 3 in structure "od" dcl 2992 in procedure "create_obj_map" ref 3006 segp 66 based pointer level 3 in structure "od" dcl 2762 in procedure "create_stat" ref 2790 segp 66 based pointer level 3 in structure "ocu_data" dcl 6-37 in procedure "ocu_" set ref 387* 420* 1840 segp 66 based pointer level 3 in structure "od" dcl 2825 in procedure "create_symb" ref 2862 separate_static 2(03) based bit(1) level 3 in structure "od" packed packed unaligned dcl 2992 in procedure "create_obj_map" ref 3029 3055 separate_static 2(03) based bit(1) level 3 in structure "ocu_data" packed packed unaligned dcl 6-37 in procedure "ocu_" set ref 326* 3522 separate_static 12(04) based bit(1) level 3 in structure "om" packed packed unaligned dcl 2993 in procedure "create_obj_map" set ref 3055* separate_static 2(03) based bit(1) level 3 in structure "od" packed packed unaligned dcl 1924 in procedure "create_defs" ref 2078 2378 separate_static 2(03) based bit(1) level 3 in structure "od" packed packed unaligned dcl 2542 in procedure "create_link" ref 2600 2623 separate_static 2(03) based bit(1) level 3 in structure "od" packed packed unaligned dcl 2762 in procedure "create_stat" ref 2785 set_first 000530 automatic bit(1) packed unaligned dcl 1975 set ref 2185* 2190 2215* 2229 si based structure level 1 dcl 1928 in procedure "create_defs" si based structure level 1 dcl 164 in procedure "ocu_" si based structure level 1 dcl 2836 in procedure "create_symb" si based structure level 1 dcl 2764 in procedure "create_stat" si based structure level 1 dcl 1819 in procedure "create_text" si based structure level 1 dcl 2543 in procedure "create_link" sip 000532 automatic pointer dcl 1976 in procedure "create_defs" set ref 1999* 2073 2268 2292 2327 2436 2439 sip 000650 automatic pointer dcl 2770 in procedure "create_stat" set ref 2777* 2781 2785 2791 2792 sip 000222 automatic pointer dcl 214 in procedure "ocu_" set ref 755* 764 768 769 769 770 1143* 1144 1149 1833* 1840 sip 000626 automatic pointer dcl 2562 in procedure "create_link" set ref 2575* 2594 2602 2602 2623 2626 2627 2632 2713 sip 000676 automatic pointer dcl 2848 in procedure "create_symb" set ref 2857* 2876 size 13(18) based fixed bin(18,0) level 4 in structure "mss" packed packed unsigned unaligned dcl 3962 in procedure "mk_symbol_scn" set ref 3991 4003* 4016 4024 4025 4029 4030 4043 4047 4056 size 14(18) based fixed bin(18,0) level 4 in structure "mss" packed packed unsigned unaligned dcl 3962 in procedure "mk_symbol_scn" set ref 4038* size parameter fixed bin(17,0) dcl 3469 in procedure "hash" ref 3451 3475 size 12(18) based fixed bin(18,0) level 4 in structure "mss" packed packed unsigned unaligned dcl 3962 in procedure "mk_symbol_scn" set ref 3991 4003* 4016 4024 4025 4030 4043 4047 4056 size builtin function dcl 3983 in procedure "mk_symbol_scn" ref 4034 4035 4047 size 000250 stack reference condition dcl 226 in procedure "ocu_" ref 1068 sizes 000017 constant fixed bin(17,0) initial array dcl 3416 ref 3435 3436 3436 sme based structure level 1 dcl 1736 smep 000100 automatic pointer dcl 1744 set ref 1761* 1762 1762 1772* 1773 1774 1778 1780 1780 smi based structure level 1 dcl 3234 in procedure "create_hash_table" smi based structure level 1 dcl 1931 in procedure "create_defs" smi based structure level 1 dcl 1737 in procedure "find_string" smip 000102 automatic pointer dcl 1745 in procedure "find_string" set ref 1754* 1756 1760 1761 1768 1768 1772 1778 smip parameter pointer dcl 3226 in procedure "create_hash_table" ref 3205 3351 3377 smip 000534 automatic pointer dcl 1977 in procedure "create_defs" set ref 1994* 2093 2100 2105 2106 2106 2108 2130 2365 2385 2476* sn based structure level 1 dcl 1935 in procedure "create_defs" sn based structure level 1 dcl 3239 in procedure "create_hash_table" snp 000536 automatic pointer dcl 1978 in procedure "create_defs" set ref 2171* 2175 2175 2179 2182 2190 2195 2199* 2204 2205 2206* 2206 2211* 2218 2219* snp 000760 automatic pointer dcl 3260 in procedure "create_hash_table" set ref 3386* 3387 source_map 16 based fixed bin(18,0) level 3 packed packed unsigned unaligned dcl 3962 set ref 4015* srch_de based structure level 1 dcl 3241 srch_dep 000764 automatic pointer dcl 3262 set ref 3292* 3293 3293 3293 3303 3323 3324 ssh based structure level 1 dcl 2839 sshp 000700 automatic pointer dcl 2849 set ref 2863* 2942 2942 2942 2949 2953 2954 2955 2956 st_init based structure level 1 dcl 1545 st_init_copy based structure level 1 dcl 1546 st_init_deferred based structure level 1 dcl 1549 st_init_template based structure level 1 dcl 1551 st_size 001036 automatic fixed bin(18,0) unsigned dcl 3518 set ref 3533* 3538 3540 standard 12(03) based bit(1) level 3 packed packed unaligned dcl 2993 set ref 3054* star_ALL_ENTRIES 000152 constant fixed bin(2,0) initial dcl 8-111 set ref 3763* start 000747 automatic fixed bin(21,0) dcl 3123 in procedure "install_words" set ref 3129* 3137 3168 3168 3170* 3170 3180 3193* 3193 start 2 based fixed bin(18,0) array level 3 in structure "ii" unsigned dcl 1530 in procedure "find_init_info" set ref 1576 1601* start 2 based fixed bin(18,0) array level 3 in structure "ii" unsigned dcl 1914 in procedure "create_defs" ref 2254 start_offset 2 based fixed bin(17,0) array level 4 in structure "reloc_info" dcl 3592 in procedure "append_relinfo" set ref 3618 3618* start_offset 2 based fixed bin(17,0) array level 4 in structure "reloc_info" dcl 2829 in procedure "create_symb" ref 2900 2910 2920 2930 start_offset based fixed bin(18,0) level 2 in structure "sme" unsigned dcl 1736 in procedure "find_string" set ref 1762 1773* 1780 start_offset 2 based fixed bin(18,0) array level 3 in structure "smi" unsigned dcl 1931 in procedure "create_defs" ref 2106 stat 101 based fixed bin(18,0) level 3 in structure "od" unsigned dcl 2542 in procedure "create_link" set ref 2632* stat 101 based fixed bin(18,0) level 3 in structure "od" unsigned dcl 2762 in procedure "create_stat" set ref 2781* stat 101 based fixed bin(18,0) level 3 in structure "od" unsigned dcl 2992 in procedure "create_obj_map" ref 3025 3032 stat_boundary 15(18) based fixed bin(18,0) level 3 packed packed unsigned unaligned dcl 3962 set ref 4014* stat_relp 270 based fixed bin(18,0) array level 3 unsigned dcl 3727 set ref 3805* stat_strl 000630 automatic fixed bin(21,0) dcl 2563 in procedure "create_link" set ref 2627* 2628 2628 stat_strl 000652 automatic fixed bin(21,0) dcl 2771 in procedure "create_stat" set ref 2792* 2794 2794 static_arrayp 000224 automatic pointer dcl 215 set ref 770* 772 static_info based structure level 1 dcl 6-318 static_infop 130 based pointer level 2 in structure "od" dcl 2762 in procedure "create_stat" ref 2777 static_infop 130 based pointer level 2 in structure "ocu_data" dcl 6-37 in procedure "ocu_" ref 755 1143 static_infop 130 based pointer level 2 in structure "od" dcl 2825 in procedure "create_symb" ref 2857 static_infop 130 based pointer level 2 in structure "od" dcl 2542 in procedure "create_link" ref 2575 static_infop 130 based pointer level 2 in structure "od" dcl 1818 in procedure "create_text" ref 1833 static_infop 130 based pointer level 2 in structure "od" dcl 1924 in procedure "create_defs" ref 1999 static_length 7(18) based fixed bin(18,0) level 2 in structure "vlh" packed packed unsigned unaligned dcl 2547 in procedure "create_link" set ref 2594* static_length 6(18) based bit(18) level 2 in structure "om" packed packed unaligned dcl 2993 in procedure "create_obj_map" set ref 3025* static_offset 6 based bit(18) level 2 packed packed unaligned dcl 2993 set ref 3031* 3037* static_size 000631 automatic fixed bin(18,0) dcl 2564 in procedure "create_link" set ref 2602* 2603 2604 2629 2629 2631 static_size parameter fixed bin(17,0) dcl 3504 in procedure "relocate_link_ref" ref 3484 3533 3533 static_word 1 based bit(36) array level 2 in structure "si" dcl 164 in procedure "ocu_" set ref 770 1149 static_word 1 based bit(36) array level 2 in structure "si" dcl 2543 in procedure "create_link" set ref 2626 static_word 1 based bit(36) array level 2 in structure "si" dcl 2764 in procedure "create_stat" set ref 2791 statp 10 001140 automatic pointer level 2 dcl 3741 set ref 3805 std_symbol_header based structure level 1 dcl 9-1 ref 4034 4035 4047 stored_initp 000412 automatic pointer dcl 1563 set ref 1576* 1581 1581 1591 1599* 1607 1608 1609 1610 1615 1616 1617 1622 1623 1624 1625 1629 1630 stored_len 000414 automatic fixed bin(21,0) dcl 1564 set ref 1583* 1591 1591 stored_str based char packed unaligned dcl 1555 ref 1591 string parameter varying char dcl 1731 in procedure "find_string" ref 1711 1762 1774 1780 string 2 based structure array level 2 in structure "smi" dcl 1931 in procedure "create_defs" string builtin function dcl 249 in procedure "ocu_" set ref 315* 591* 663* string 2 based structure array level 2 in structure "smi" dcl 1737 in procedure "find_string" set ref 1761 1772 string 0(09) based char level 2 in structure "acc" packed packed unaligned dcl 3869 in procedure "copy_defs" ref 3910 3924 string 2 based structure array level 2 in structure "smi" dcl 3234 in procedure "create_hash_table" string 0(09) based char level 2 in structure "acc" packed packed unaligned dcl 1901 in procedure "create_defs" set ref 2106* string builtin function dcl 1989 in procedure "create_defs" set ref 2009* 2051* string_map_entry based structure level 1 dcl 6-195 string_map_info based structure level 1 dcl 6-188 string_map_infop 112 based pointer level 2 in structure "od" dcl 1735 in procedure "find_string" ref 1754 string_map_infop 112 based pointer level 2 in structure "od" dcl 1924 in procedure "create_defs" ref 1994 string_segl based fixed bin(21,0) level 3 in structure "smi" dcl 1931 in procedure "create_defs" ref 2093 string_segl based fixed bin(21,0) level 3 in structure "smi" dcl 1737 in procedure "find_string" set ref 1756 1778* string_segp 114 based pointer level 2 in structure "od" dcl 1735 in procedure "find_string" ref 1755 string_segp 114 based pointer level 2 in structure "od" dcl 1924 in procedure "create_defs" ref 2092 stringmapx 000104 automatic fixed bin(17,0) dcl 1746 set ref 1760* 1761 1762* 1768* 1772 1784 strp parameter pointer dcl 3468 ref 3451 3475 strx based fixed bin(17,0) level 2 in structure "de" dcl 153 in procedure "ocu_" set ref 586* 658* strx 1 based fixed bin(17,0) array level 3 in structure "di" dcl 154 in procedure "ocu_" set ref 643 strx based fixed bin(17,0) level 2 in structure "srch_de" dcl 3241 in procedure "create_hash_table" ref 3293 strx 1 based fixed bin(17,0) array level 3 in structure "di" dcl 1906 in procedure "create_defs" ref 2057 strx 000226 automatic fixed bin(17,0) dcl 216 in procedure "ocu_" set ref 640* 643 658 strx based fixed bin(17,0) level 2 in structure "de" dcl 3240 in procedure "create_hash_table" ref 3293 3351 3377 sub_err_ 000046 constant entry external dcl 124 ref 491 561 571 630 643 671 703 707 713 749 811 869 925 977 1051 1057 1068 1081 1104 1115 1133 1144 1162 1170 2643 2651 2942 3750 3768 3772 3777 3782 3796 3812 3819 3824 3832 substr builtin function dcl 250 set ref 526* 1012* 1762 1780* 2106 2316* 2318* 2320* 2322* 2612* 2900 2910 2920 2930 3137 3168 3168 3180 3538 3540 3546 3548 3624 3644* 3655* 3669* 3758 3758 3777 3777 symb 102 based fixed bin(18,0) level 3 in structure "od" unsigned dcl 2992 in procedure "create_obj_map" ref 3040 symb 102 based fixed bin(18,0) level 3 in structure "od" unsigned dcl 2825 in procedure "create_symb" set ref 2960* symb_relp 000702 automatic fixed bin(18,0) unsigned dcl 2850 in procedure "create_symb" set ref 2870* 2926* 2936 2956 symb_relp 271 based fixed bin(18,0) array level 3 in structure "mi" unsigned dcl 3727 in procedure "validate_component" set ref 3806* symbol_arrayp 000230 automatic pointer dcl 217 set ref 1006* 1008 symbol_info based structure level 1 dcl 6-389 symbol_infop 136 based pointer level 2 in structure "ocu_data" dcl 6-37 in procedure "ocu_" ref 983 1114 symbol_infop 136 based pointer level 2 in structure "od" dcl 2825 in procedure "create_symb" ref 2858 symbol_length 7(18) based bit(18) level 2 packed packed unaligned dcl 2993 set ref 3040* symbol_offset 7 based bit(18) level 2 packed packed unaligned dcl 2993 set ref 3033* 3038* symbol_relinfol 1 based fixed bin(21,0) level 3 in structure "sbi" dcl 2833 in procedure "create_symb" ref 2860 symbol_relinfol 1 based fixed bin(21,0) level 3 in structure "sbi" dcl 167 in procedure "ocu_" set ref 996 1012 1015* symbol_relinfop 140 based pointer level 2 in structure "ocu_data" dcl 6-37 in procedure "ocu_" ref 995 symbol_relinfop 140 based pointer level 2 in structure "od" dcl 2825 in procedure "create_symb" ref 2859 symbol_size 000703 automatic fixed bin(18,0) unsigned dcl 2851 set ref 2880* 2936* 2949 2960 2961 symbol_word 2 based bit(36) array level 2 in structure "sbi" dcl 2833 in procedure "create_symb" set ref 2876 2876 symbol_word 2 based bit(36) array level 2 in structure "sbi" dcl 167 in procedure "ocu_" set ref 1006 1120 symbp 12 001140 automatic pointer level 2 dcl 3741 set ref 3806 system_free_area based area(1024) dcl 3968 ref 3991 4003 4056 system_free_areap 001116 automatic pointer dcl 3976 set ref 3985* 3991 4003 4056 table 1 based structure array level 2 in structure "definition_ht" dcl 2-278 in procedure "ocu_" table 1 based structure array level 2 in structure "dt" dcl 3242 in procedure "create_hash_table" table 1 based structure array level 2 in structure "cht" dcl 3252 in procedure "create_hash_table" set ref 3381 table 1 based structure array level 2 in structure "duplicate_table" dcl 2-302 in procedure "ocu_" table 1 based structure array level 2 in structure "component_ht" dcl 2-289 in procedure "ocu_" table 1 based structure array level 2 in structure "dht" dcl 3248 in procedure "create_hash_table" set ref 3354 tag 0(30) based bit(6) level 2 in structure "lk" packed packed unaligned dcl 2539 in procedure "create_link" set ref 2676* tag 0(30) based bit(6) level 2 in structure "partial_lk" packed packed unaligned dcl 2546 in procedure "create_link" set ref 2661* target 4 based structure level 2 in structure "od" dcl 2762 in procedure "create_stat" target 4 based structure level 2 in structure "od" dcl 2992 in procedure "create_obj_map" target 4 based structure level 2 in structure "od" dcl 1924 in procedure "create_defs" target 4 based structure level 2 in structure "od" dcl 2542 in procedure "create_link" target based char packed unaligned dcl 3111 in procedure "install_words" set ref 3155* 3190* target 4 based structure level 2 in structure "od" dcl 2825 in procedure "create_symb" target 4 based structure level 2 in structure "ocu_data" dcl 6-37 in procedure "ocu_" target 4 based structure level 2 in structure "od" dcl 1818 in procedure "create_text" target_relp 2 based fixed bin(18,0) level 2 in structure "st_init_deferred" packed packed unsigned unaligned dcl 1549 in procedure "find_init_info" set ref 1624* target_relp 2 based fixed bin(18,0) level 2 in structure "link_init_deferred" packed packed unsigned unaligned dcl 2-270 in procedure "ocu_" set ref 2268 target_relp 2 based fixed bin(18,0) level 2 in structure "in_init_deferred" packed packed unsigned unaligned dcl 1537 in procedure "find_init_info" ref 1624 targetp parameter pointer dcl 3104 set ref 3074 3155 3160* 3160 3190 3191* 3191 temp_segs 104 based pointer array level 2 dcl 6-89 set ref 293 293* 308* 455 455* template 3 based bit(36) array level 2 in structure "st_init_template" dcl 1551 in procedure "find_init_info" set ref 1610* template 3 based fixed bin(17,0) array level 2 in structure "link_init_list_template" dcl 2-219 in procedure "ocu_" set ref 2279 template 3 based bit(36) array level 2 in structure "in_init_template" dcl 1539 in procedure "find_init_info" ref 1610 template_entry based structure level 1 dcl 6-461 text 76 based fixed bin(18,0) level 3 in structure "od" unsigned dcl 2992 in procedure "create_obj_map" ref 3017 3018 text 76 based fixed bin(18,0) level 3 in structure "od" unsigned dcl 1818 in procedure "create_text" set ref 1849* 1851* 1859 text 76 based fixed bin(18,0) level 3 in structure "od" unsigned dcl 2542 in procedure "create_link" ref 2592 text 76 based fixed bin(18,0) level 3 in structure "od" unsigned dcl 1924 in procedure "create_defs" ref 2481 text_arrayp 000232 automatic pointer dcl 218 set ref 520* 522 text_boundary 15 based fixed bin(18,0) level 3 packed packed unsigned unaligned dcl 3962 set ref 4013* text_info based structure level 1 dcl 6-124 text_infop 104 based pointer level 2 in structure "ocu_data" dcl 6-37 in procedure "ocu_" ref 497 1080 text_infop 104 based pointer level 2 in structure "od" dcl 1818 in procedure "create_text" ref 1832 text_length 3(18) based bit(18) level 2 packed packed unaligned dcl 2993 set ref 3017* text_link_offset 11(18) based bit(18) level 2 packed packed unaligned dcl 2993 set ref 3047* text_offset 3 based bit(18) level 2 packed packed unaligned dcl 2993 set ref 3016* text_relinfol 1 based fixed bin(21,0) level 3 dcl 170 set ref 510 526 528* text_relinfop 106 based pointer level 2 in structure "od" dcl 1818 in procedure "create_text" set ref 1840* text_relinfop 106 based pointer level 2 in structure "ocu_data" dcl 6-37 in procedure "ocu_" ref 509 text_relp 000704 automatic fixed bin(18,0) unsigned dcl 2852 in procedure "create_symb" set ref 2867* 2896* 2906 2953 text_relp 265 based fixed bin(18,0) array level 3 in structure "mi" unsigned dcl 3727 in procedure "validate_component" set ref 3802* text_seg based char packed unaligned dcl 6-307 set ref 1762 1780* 2106 text_segl 000264 automatic fixed bin(21,0) dcl 6-305 set ref 1756* 1762 1773 1778 1778* 1780 2093* 2106 text_segp 000266 automatic pointer dcl 6-306 set ref 1755* 1762 1780 2092* 2106 text_word 2 based bit(36) array level 2 in structure "ti" dcl 170 in procedure "ocu_" set ref 520 1086 text_word 2 based bit(36) array level 2 in structure "ti" dcl 1822 in procedure "create_text" set ref 1840 1840 textp 2 001140 automatic pointer level 2 dcl 3741 set ref 3802 thing_relp 1 based fixed bin(18,0) level 2 in structure "def" packed packed unsigned unaligned dcl 3872 in procedure "copy_defs" ref 3922 thing_relp 1 based fixed bin(18,0) level 2 in structure "defn" packed packed unsigned unaligned dcl 1904 in procedure "create_defs" set ref 2067* 2072 ti based structure level 1 dcl 1822 in procedure "create_text" ti based structure level 1 dcl 170 in procedure "ocu_" tip 000234 automatic pointer dcl 219 set ref 497* 510 514 518 519 519 520 526 528 1080* 1081 1086 1832* 1840 1840 1840 1846 1849 1851 tpi based structure level 1 dcl 1442 in procedure "find_type_pair" tpi based structure level 1 dcl 1936 in procedure "create_defs" tpip 000364 automatic pointer dcl 1449 in procedure "find_type_pair" set ref 1455* 1488 1489 1495 1495 1497 tpip 000540 automatic pointer dcl 1979 in procedure "create_defs" set ref 1997* 2340 2344 2355 2365 2378 2381 2385 2392 2394 2397 2425 2434 2436 2439 tpx 000542 automatic fixed bin(17,0) dcl 1980 set ref 2423* 2425 2434 2436 2439 translate builtin function dcl 251 ref 526 1012 trap based structure level 1 dcl 1672 in procedure "find_trap_pair" trap 1 based structure array level 2 in structure "frti" dcl 157 in procedure "ocu_" trap 1 based structure array level 2 in structure "frti" dcl 2532 in procedure "create_link" trap_array 2 based structure array level 2 in structure "frt" dcl 2527 in procedure "create_link" set ref 2703 trap_array 2 based structure array level 2 in structure "fr_traps" dcl 4-90 in procedure "ocu_" trap_pair 1 based structure array level 2 in structure "trpi" dcl 1941 in procedure "create_defs" trap_pair 1 based structure array level 2 in structure "trpi" dcl 1673 in procedure "find_trap_pair" trap_pair_entry based structure level 1 dcl 6-267 trap_pair_info based structure level 1 dcl 6-261 trap_pair_infop 122 based pointer level 2 in structure "od" dcl 1671 in procedure "find_trap_pair" ref 1685 trap_pair_infop 122 based pointer level 2 in structure "od" dcl 1924 in procedure "create_defs" ref 1996 trap_pairx 000426 automatic fixed bin(17,0) dcl 1680 set ref 1689* 1690 1690 1690* 1697* 1699 1700 1702 trap_pr based structure level 1 dcl 1940 set ref 2335 trap_prp 000544 automatic pointer dcl 1981 set ref 2310* 2311 2312 2316 2320 2326 2335 trap_relp 0(18) based fixed bin(18,0) level 2 packed packed unsigned unaligned dcl 1922 set ref 2394* 2397* trapp parameter pointer dcl 1667 ref 1648 1690 1690 1699 1700 trpi based structure level 1 dcl 1673 in procedure "find_trap_pair" trpi based structure level 1 dcl 1941 in procedure "create_defs" trpip 000430 automatic pointer dcl 1681 in procedure "find_trap_pair" set ref 1685* 1689 1690 1690 1697 1697 1699 1700 trpip 000546 automatic pointer dcl 1982 in procedure "create_defs" set ref 1996* 2309 2311 2312 2397 true 000060 constant bit(1) initial packed unaligned dcl 40 ref 320 322 324 326 328 330 593 595 597 599 664 666 668 2010 2011 2052 2141 2158 2185 3054 3303 3315 3323 3332 tssi_$clean_up_segment 000054 constant entry external dcl 129 ref 378 tssi_$finish_segment 000052 constant entry external dcl 127 ref 420 tssi_$get_segment 000050 constant entry external dcl 125 ref 387 type 1 000202 automatic fixed bin(18,0) level 2 in structure "linke" unsigned dcl 206 in procedure "ocu_" set ref 878* type parameter fixed bin(3,0) dcl 1354 in procedure "find_exp_word" set ref 1327 1381* type 1 based fixed bin(17,0) level 3 in structure "st_init_deferred" dcl 1549 in procedure "find_init_info" set ref 1623* type 1 based fixed bin(17,0) level 4 in structure "in_init_template" dcl 1539 in procedure "find_init_info" ref 1608 type 2 based fixed bin(18,0) array level 3 in structure "li" unsigned dcl 2536 in procedure "create_link" ref 2658 type 1 based fixed bin(17,0) level 3 in structure "in_init_copy" dcl 1534 in procedure "find_init_info" ref 1616 type 1 based fixed bin(17,0) level 4 in structure "st_init_template" dcl 1551 in procedure "find_init_info" set ref 1608* type 1 based fixed bin(17,0) level 2 in structure "link_init" dcl 2-205 in procedure "ocu_" ref 2268 2277 type 000366 automatic fixed bin(18,0) level 2 in structure "type_paire" unsigned dcl 1450 in procedure "find_type_pair" set ref 1457* type based fixed bin(3,0) level 2 in structure "partial_lk" packed packed unsigned unaligned dcl 2546 in procedure "create_link" set ref 2658* type parameter fixed bin(3,0) dcl 1433 in procedure "find_type_pair" ref 1411 1457 1463 1463 1470 1470 1477 type based fixed bin(18,0) level 2 in structure "new_type_pair" packed packed unsigned unaligned dcl 1922 in procedure "create_defs" set ref 2355* 2359 2359 2372 2372 2394 type 1 based fixed bin(17,0) level 3 in structure "in_init_deferred" dcl 1537 in procedure "find_init_info" ref 1623 type 1 based fixed bin(17,0) level 2 in structure "in_init" dcl 1533 in procedure "find_init_info" ref 1581 1585 1587 1589 1605 1613 1620 1630 type 1 based fixed bin(17,0) level 3 in structure "st_init_copy" dcl 1546 in procedure "find_init_info" set ref 1616* type 1 based fixed bin(18,0) array level 3 in structure "tpi" unsigned dcl 1936 in procedure "create_defs" ref 2355 2434 type 1 based fixed bin(17,0) level 2 in structure "st_init" dcl 1545 in procedure "find_init_info" set ref 1581 1630* type_pair based structure level 1 dcl 2-160 type_pair_entry based structure level 1 dcl 6-244 type_pair_info based structure level 1 dcl 6-238 type_pair_infop 120 based pointer level 2 in structure "od" dcl 1924 in procedure "create_defs" ref 1997 type_pair_infop 120 based pointer level 2 in structure "od" dcl 1441 in procedure "find_type_pair" ref 1455 type_paire 000366 automatic structure level 1 dcl 1450 set ref 1489 1497 type_pairx 000373 automatic fixed bin(17,0) dcl 1451 in procedure "find_type_pair" set ref 1488* 1489 1489* 1495* 1497 1499 type_pairx 000354 automatic fixed bin(17,0) dcl 1373 in procedure "find_exp_word" set ref 1381* 1388 type_pairx 2 based fixed bin(18,0) array level 3 in structure "ewi" unsigned dcl 1909 in procedure "create_defs" ref 2423 type_pairx 1 000350 automatic fixed bin(18,0) level 2 in structure "expe" unsigned dcl 1371 in procedure "find_exp_word" set ref 1388* type_pr 1 based structure array level 2 in structure "tpi" dcl 1442 in procedure "find_type_pair" set ref 1489 1497* type_pr 1 based structure array level 2 in structure "tpi" dcl 1936 in procedure "create_defs" type_relp based fixed bin(18,0) level 2 packed packed unsigned unaligned dcl 1913 set ref 2425* unspec builtin function dcl 252 set ref 522* 522 772* 772 821* 830 830 837* 837 886 886 894* 894 1008* 1008 1392 1392 1400* 1400 1489 1489 1497* 1497 3354 3381 3644 user 24 based char level 2 dcl 3962 set ref 4029* user_length 001120 automatic fixed bin(17,0) dcl 3977 set ref 3999* 4003 4003 4035 userid 13 based structure level 3 packed packed unaligned dcl 3962 value 0(03) based fixed bin(15,0) array level 2 in structure "w15" packed packed unsigned unaligned dcl 3508 in procedure "relocate_link_ref" set ref 3540 3540* 3540 3548* 3548 value based fixed bin(18,0) array level 2 in structure "w18" packed packed unsigned unaligned dcl 3511 in procedure "relocate_link_ref" set ref 3538 3538* 3538 3546* 3546 version based char(8) level 2 in structure "mm" dcl 3731 in procedure "validate_component" ref 3819 version based char level 2 in structure "mss" dcl 3962 in procedure "mk_symbol_scn" set ref 4030* version based char(8) level 2 in structure "mm" dcl 1920 in procedure "create_defs" set ref 2465* version based char(8) level 2 in structure "ocu_data" dcl 6-37 in procedure "ocu_" set ref 314* 365 491 561 630 703 749 811 869 925 977 1051 version_length 001121 automatic fixed bin(17,0) dcl 3978 set ref 3998* 4003 4003 version_number 001140 automatic fixed bin(17,0) level 2 dcl 3741 set ref 3791* virgin_linkage_header based structure level 1 dcl 4-71 vlh based structure level 1 dcl 2547 set ref 2595 2596 2619 vlh_size 000010 internal static fixed bin(17,0) dcl 146 set ref 284* 830 841 886 898 3036 3527 3546 3548 vlhp 000632 automatic pointer dcl 2565 set ref 2586* 2590 2591 2592 2593 2594 2595 2595 2596 2596 2603 2603 2604 2604 2611 2611 2613 2613 2619 2625 2657 2671 2692 2692 w15 based structure level 1 dcl 177 in procedure "ocu_" w15 based structure array level 1 packed packed unaligned dcl 3508 in procedure "relocate_link_ref" w15s based structure level 1 dcl 184 w18 based structure array level 1 packed packed unaligned dcl 3511 in procedure "relocate_link_ref" w18 based structure level 1 dcl 181 in procedure "ocu_" w18s based structure level 1 dcl 188 word based fixed bin(35,0) dcl 3878 in procedure "copy_defs" ref 3895 word parameter bit(36) dcl 3502 in procedure "relocate_link_ref" set ref 3484 3538 3538 3538 3540 3540 3540 3546 3546 3548 3548 word based bit(36) dcl 2548 in procedure "create_link" set ref 2713* word based bit(36) dcl 1945 in procedure "create_defs" set ref 2073* 2268* 2292* 2327* 2436* 2439* word based fixed bin(35,0) dcl 3473 in procedure "hash" ref 3475 word based bit(36) dcl 3112 in procedure "install_words" set ref 3181* word_array based bit(36) array packed unaligned dcl 7-48 set ref 522* 522 772* 772 1008* 1008 word_arrayl 000272 automatic fixed bin(18,0) unsigned dcl 7-46 set ref 502* 522 522 760* 772 772 988* 1008 1008 4043* 4052* word_arrayp 000270 automatic pointer dcl 7-45 set ref 501* 522 759* 772 987* 1008 4042* 4052* wordp 000706 automatic pointer dcl 2853 in procedure "create_symb" set ref 2862* 2863 2876* 2897 wordp 000240 automatic pointer dcl 221 in procedure "ocu_" set ref 1086* 1091 1094 1096 1098 1100 1102 1120* 1124 1127 1129 1131 1149* 1153 1156 1158 1160 wordp 000636 automatic pointer dcl 2567 in procedure "create_link" set ref 2703* 2713 wordp 000552 automatic pointer dcl 1984 in procedure "create_defs" set ref 2072* 2073 2326* 2327 wordsp parameter pointer dcl 3098 ref 3074 3131 zero_relp 000554 automatic fixed bin(18,0) unsigned dcl 1985 set ref 2027* 2029 2228 2233 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ACTION_DEFAULT_RESTART internal static bit(36) initial dcl 10-7 ACTION_QUIET_RESTART internal static bit(36) initial dcl 10-7 ACTION_SUPPORT_SIGNAL internal static bit(36) initial dcl 10-7 A_ACCESS internal static bit(3) initial packed unaligned dcl 1-11 A_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 CLASS_HEAP internal static fixed bin(3,0) initial unsigned dcl 2-25 CLASS_NAMES internal static char(12) initial array packed unaligned dcl 2-35 CLASS_SEGNAME internal static fixed bin(3,0) initial unsigned dcl 2-25 CLASS_STATIC internal static fixed bin(3,0) initial unsigned dcl 2-25 CLASS_SYMBOL internal static fixed bin(3,0) initial unsigned dcl 2-25 CLASS_SYSTEM internal static fixed bin(3,0) initial unsigned dcl 2-25 CLASS_TEXT internal static fixed bin(3,0) initial unsigned dcl 2-25 DIR_ACCESS_MODE_NAMES internal static char(4) initial array packed unaligned dcl 1-33 E_ACCESS internal static bit(3) initial packed unaligned dcl 1-11 E_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 FAULT_TAG_1 internal static bit(6) initial packed unaligned dcl 4-100 INIT_DEFINE_AREA internal static fixed bin(17,0) initial dcl 2-194 INIT_NO_INIT internal static fixed bin(17,0) initial dcl 2-194 LINK_CREATE_IF_NOT_FOUND internal static fixed bin(18,0) initial packed unsigned unaligned dcl 2-134 LINK_OBSOLETE_2 internal static fixed bin(18,0) initial packed unsigned unaligned dcl 2-134 LINK_TYPE_NAMES internal static varying char(32) initial array dcl 2-153 M_ACCESS internal static bit(3) initial packed unaligned dcl 1-11 M_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 N_ACCESS internal static bit(3) initial packed unaligned dcl 1-11 N_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 REW_ACCESS internal static bit(3) initial packed unaligned dcl 1-11 REW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 RE_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 RW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 R_ACCESS internal static bit(3) initial packed unaligned dcl 1-11 R_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SA_ACCESS internal static bit(3) initial packed unaligned dcl 1-11 SA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SECTION_HEAP internal static fixed bin(18,0) initial packed unsigned unaligned dcl 2-134 SECTION_SYMBOL internal static fixed bin(18,0) initial packed unsigned unaligned dcl 2-134 SECTION_SYSTEM internal static fixed bin(18,0) initial packed unsigned unaligned dcl 2-134 SECTION_TEXT internal static fixed bin(18,0) initial packed unsigned unaligned dcl 2-134 SECTION_UNUSED internal static fixed bin(18,0) initial packed unsigned unaligned dcl 2-134 SEG_ACCESS_MODE_NAMES internal static char(4) initial array packed unaligned dcl 1-30 SMA_ACCESS internal static bit(3) initial packed unaligned dcl 1-11 SMA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SM_ACCESS internal static bit(3) initial packed unaligned dcl 1-11 SM_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SYMBOLIC_SECTION_NAMES internal static char(8) initial array packed unaligned dcl 2-38 S_ACCESS internal static bit(3) initial packed unaligned dcl 1-11 S_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 W_ACCESS internal static bit(3) initial packed unaligned dcl 1-11 W_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 acc_string based structure level 1 dcl 2-327 acc_string_length automatic fixed bin(21,0) dcl 2-334 acc_string_ptr automatic pointer dcl 2-326 comp_ht_n_entries automatic fixed bin(17,0) dcl 2-297 comp_ht_ptr automatic pointer dcl 2-288 def_header_ptr automatic pointer dcl 2-57 def_ht_n_entries automatic fixed bin(17,0) dcl 2-284 def_ht_ptr automatic pointer dcl 2-277 def_ptr automatic pointer dcl 2-71 dup_table_n_names automatic fixed bin(17,0) dcl 2-310 dup_table_ptr automatic pointer dcl 2-301 exp_ptr automatic pointer dcl 2-128 link_init_n_bits_in_datum automatic fixed bin(35,0) dcl 2-261 link_init_n_words automatic fixed bin(17,0) dcl 2-215 link_init_n_words_in_list automatic fixed bin(17,0) dcl 2-226 link_init_ptr automatic pointer dcl 2-204 link_trap_ptr automatic pointer dcl 2-176 linkage_header based structure level 1 dcl 4-50 linkage_header_flags based structure level 1 dcl 4-63 list_template_entry based structure level 1 dcl 2-239 map_ptr based bit(18) dcl 5-38 msf_map_ptr automatic pointer dcl 2-317 object_map_version_2 internal static fixed bin(17,0) initial dcl 5-40 ocu_$backpatch 000000 constant entry external dcl 7-146 ocu_$close 000000 constant entry external dcl 7-76 ocu_$create_msf 000000 constant entry external dcl 7-153 ocu_$emit_definition 000000 constant entry external dcl 7-90 ocu_$emit_firstref_trap 000000 constant entry external dcl 7-134 ocu_$emit_link 000000 constant entry external dcl 7-115 ocu_$emit_msf_map 000000 constant entry external dcl 7-104 ocu_$emit_partial_link 000000 constant entry external dcl 7-126 ocu_$emit_segname 000000 constant entry external dcl 7-98 ocu_$emit_static 000000 constant entry external dcl 7-109 ocu_$emit_symbol 000000 constant entry external dcl 7-139 ocu_$emit_text 000000 constant entry external dcl 7-83 ocu_$open 000000 constant entry external dcl 7-69 ocu_$release 000000 constant entry external dcl 7-80 segname_ptr automatic pointer dcl 2-89 star_ALL_ENTRIES_WITH_LINK_PATHS internal static fixed bin(3,0) initial dcl 8-114 star_BRANCHES_ONLY internal static fixed bin(2,0) initial dcl 8-110 star_DIRECTORY internal static fixed bin(2,0) initial unsigned dcl 8-121 star_LINK internal static fixed bin(2,0) initial unsigned dcl 8-119 star_LINKS_ONLY internal static fixed bin(2,0) initial dcl 8-109 star_LINKS_ONLY_WITH_LINK_PATHS internal static fixed bin(3,0) initial dcl 8-112 star_SEGMENT internal static fixed bin(2,0) initial unsigned dcl 8-120 star_branch_count automatic fixed bin(17,0) dcl 8-13 star_dir_list_branch based structure array level 1 dcl 8-59 star_entries based structure array level 1 dcl 8-27 star_entry_count automatic fixed bin(17,0) dcl 8-14 star_entry_ptr automatic pointer dcl 8-15 star_link_count automatic fixed bin(17,0) dcl 8-17 star_link_pathname based char packed unaligned dcl 8-102 star_links based structure array level 1 dcl 8-76 star_linkx automatic fixed bin(17,0) dcl 8-18 star_list_branch based structure array level 1 dcl 8-41 star_list_branch_ptr automatic pointer dcl 8-16 star_list_names based char(32) array packed unaligned dcl 8-92 star_list_names_ptr automatic pointer dcl 8-20 star_names based char(32) array packed unaligned dcl 8-37 star_names_ptr automatic pointer dcl 8-19 star_select_sw automatic fixed bin(3,0) dcl 8-21 type_ptr automatic pointer dcl 2-159 user_length automatic fixed bin(17,0) dcl 6-513 version_length automatic fixed bin(17,0) dcl 6-514 NAMES DECLARED BY EXPLICIT CONTEXT. EXIT 006343 constant label dcl 1319 set ref 1315 append_relinfo 015162 constant entry internal dcl 3559 ref 1848 1855 2017 2019 2020 2022 2061 2084 2094 2116 2303 2331 2405 2446 2471 2483 2489 2618 2629 2667 2680 2696 2714 2722 2728 2884 3168 3182 backpatch 004432 constant entry external dcl 1024 close 001356 constant entry external dcl 348 ref 1276 copy_defs 016611 constant entry internal dcl 3845 ref 1267 create_defs 007616 constant entry internal dcl 1868 ref 401 create_hash_table 014206 constant entry internal dcl 3205 ref 2476 create_link 012110 constant entry internal dcl 2502 ref 402 create_msf 005544 constant entry external dcl 1181 create_obj_map 013603 constant entry internal dcl 2970 ref 405 create_stat 013164 constant entry internal dcl 2741 ref 403 create_symb 013224 constant entry internal dcl 2803 ref 404 create_text 007445 constant entry internal dcl 1793 ref 400 emit_definition 002174 constant entry external dcl 537 ref 3924 emit_firstref_trap 004143 constant entry external dcl 905 ref 1258 emit_link 003465 constant entry external dcl 781 ref 1254 1256 emit_msf_map 003111 constant entry external dcl 685 ref 1262 emit_partial_link 003741 constant entry external dcl 848 ref 3922 emit_segname 002510 constant entry external dcl 612 ref 3910 emit_static 003334 constant entry external dcl 731 emit_symbol 004247 constant entry external dcl 949 ref 4052 emit_text 002010 constant entry external dcl 467 exit 006352 constant entry internal dcl 1294 ref 303 309 341 365 389 428 1249 1287 find_exp_word 006357 constant entry internal dcl 1327 ref 823 find_init_info 006745 constant entry internal dcl 1508 ref 1477 find_string 007323 constant entry internal dcl 1711 ref 586 640 1463 1470 find_trap_pair 007240 constant entry internal dcl 1648 ref 1480 find_type_pair 006514 constant entry internal dcl 1411 ref 1381 hash 014771 constant entry internal dcl 3451 ref 3352 3379 install_words 013763 constant entry internal dcl 3074 ref 1840 2876 mk_symbol_scn 017036 constant entry internal dcl 3937 ref 1272 ocu_ 001000 constant entry external dcl 27 open 001022 constant entry external dcl 261 ref 1246 opt_size 014736 constant entry internal dcl 3400 ref 3341 3370 release 001677 constant entry external dcl 435 ref 425 1221 relocate_link_ref 015003 constant entry internal dcl 3484 ref 2073 2268 2292 2327 2436 2439 2713 3181 retry_star_match 015521 constant label dcl 3763 ref 3769 validate_component 015365 constant entry internal dcl 3686 ref 1243 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 20634 20726 20115 20644 Length 21476 20115 72 534 516 4 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME ocu_ 1306 external procedure is an external procedure. on unit on line 289 80 on unit on unit on line 376 84 on unit on unit on line 1068 106 on unit on unit on line 1217 80 on unit exit internal procedure shares stack frame of external procedure ocu_. find_exp_word internal procedure shares stack frame of external procedure ocu_. find_type_pair internal procedure shares stack frame of external procedure ocu_. find_init_info internal procedure shares stack frame of external procedure ocu_. find_trap_pair internal procedure shares stack frame of external procedure ocu_. find_string 73 internal procedure is called during a stack extension. create_text internal procedure shares stack frame of external procedure ocu_. create_defs internal procedure shares stack frame of external procedure ocu_. create_link internal procedure shares stack frame of external procedure ocu_. create_stat internal procedure shares stack frame of external procedure ocu_. create_symb internal procedure shares stack frame of external procedure ocu_. create_obj_map internal procedure shares stack frame of external procedure ocu_. install_words internal procedure shares stack frame of external procedure ocu_. create_hash_table internal procedure shares stack frame of external procedure ocu_. opt_size internal procedure shares stack frame of external procedure ocu_. hash internal procedure shares stack frame of external procedure ocu_. relocate_link_ref internal procedure shares stack frame of external procedure ocu_. append_relinfo 72 internal procedure is called during a stack extension. validate_component internal procedure shares stack frame of external procedure ocu_. copy_defs internal procedure shares stack frame of external procedure ocu_. mk_symbol_scn 630 internal procedure enables or reverts conditions. on unit on line 3989 65 on unit STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 vlh_size ocu_ 000011 lk_size ocu_ 000012 dh_size ocu_ 000013 def_size ocu_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME append_relinfo 000100 c append_relinfo 000101 exp_abs append_relinfo 000102 i append_relinfo 000103 old_len append_relinfo 000104 relinfo_chr append_relinfo find_string 000100 smep find_string 000102 smip find_string 000104 stringmapx find_string mk_symbol_scn 000100 dummy mk_symbol_scn 000101 group_id mk_symbol_scn 000114 mssp mk_symbol_scn 000116 reloc_str mk_symbol_scn 001116 system_free_areap mk_symbol_scn 001120 user_length mk_symbol_scn 001121 version_length mk_symbol_scn ocu_ 000100 c ocu_ 000101 call_relp ocu_ 000102 defx ocu_ 000104 dep ocu_ 000106 dip ocu_ 000110 dname ocu_ 000162 ec ocu_ 000163 ename ocu_ 000174 frtip ocu_ 000176 i ocu_ 000177 info_relp ocu_ 000200 lip ocu_ 000202 linke ocu_ 000207 linkx ocu_ 000210 mode ocu_ 000211 next_word ocu_ 000212 odp ocu_ 000214 reloc_infop ocu_ 000216 relp ocu_ 000220 sbip ocu_ 000222 sip ocu_ 000224 static_arrayp ocu_ 000226 strx ocu_ 000230 symbol_arrayp ocu_ 000232 text_arrayp ocu_ 000234 tip ocu_ 000236 mip ocu_ 000240 wordp ocu_ 000256 ocu_datap ocu_ 000260 relinfo_strl ocu_ 000262 relinfo_strp ocu_ 000264 text_segl ocu_ 000266 text_segp ocu_ 000270 word_arrayp ocu_ 000272 word_arrayl ocu_ 000274 reloc_strp ocu_ 000276 reloc_strl ocu_ 000300 component_listp ocu_ 000302 component_count ocu_ 000346 ewip find_exp_word 000350 expe find_exp_word 000353 expx find_exp_word 000354 type_pairx find_exp_word 000364 tpip find_type_pair 000366 type_paire find_type_pair 000373 type_pairx find_type_pair 000404 iip find_init_info 000406 init_infox find_init_info 000407 init_len find_init_info 000410 len find_init_info 000412 stored_initp find_init_info 000414 stored_len find_init_info 000426 trap_pairx find_trap_pair 000430 trpip find_trap_pair 000442 abs_count create_text 000452 abs_count create_defs 000453 acc_relp create_defs 000454 accp create_defs 000456 backward_relp create_defs 000457 block_relp create_defs 000460 def_relp create_defs 000462 defnp create_defs 000464 dhp create_defs 000466 dip create_defs 000470 ewip create_defs 000472 exprp create_defs 000474 forward_relp create_defs 000476 iip create_defs 000500 init_segp create_defs 000502 init_segl create_defs 000503 init_strl create_defs 000504 ltep create_defs 000506 n_words create_defs 000507 new_block create_defs 000510 new_init_strp create_defs 000512 new_type_pairp create_defs 000514 obj_init_strp create_defs 000516 pitp create_defs 000520 prev_snp create_defs 000522 relchrs create_defs 000526 relpair create_defs 000530 set_first create_defs 000532 sip create_defs 000534 smip create_defs 000536 snp create_defs 000540 tpip create_defs 000542 tpx create_defs 000544 trap_prp create_defs 000546 trpip create_defs 000550 mmp create_defs 000552 wordp create_defs 000554 zero_relp create_defs 000572 abs_count create_link 000574 ewip create_link 000576 frtip create_link 000600 frtp create_link 000602 lip create_link 000604 lkp create_link 000606 new_stat_strp create_link 000610 obj_stat_strp create_link 000612 relchars create_link 000624 relpair create_link 000626 sip create_link 000630 stat_strl create_link 000631 static_size create_link 000632 vlhp create_link 000634 partial_lkp create_link 000636 wordp create_link 000650 sip create_stat 000652 stat_strl create_stat 000654 obj_stat_strp create_stat 000656 new_stat_strp create_stat 000666 abs_count create_symb 000667 defs_relp create_symb 000670 link_relp create_symb 000672 rel_infop create_symb 000674 sbip create_symb 000676 sip create_symb 000700 sshp create_symb 000702 symb_relp create_symb 000703 symbol_size create_symb 000704 text_relp create_symb 000706 wordp create_symb 000716 end_relp create_obj_map 000720 obj_map_relpp create_obj_map 000722 omp create_obj_map 000724 om_relp create_obj_map 000725 relp create_obj_map 000734 copyl install_words 000736 copyp install_words 000740 first install_words 000741 halfwords install_words 000742 left install_words 000744 relpair install_words 000746 relstrl install_words 000747 start install_words 000756 defp create_hash_table 000760 snp create_hash_table 000762 dep create_hash_table 000764 srch_dep create_hash_table 000766 d create_hash_table 000767 n_names create_hash_table 000770 n_segnames create_hash_table 000771 make_comp_ht create_hash_table 000772 dtp create_hash_table 000774 dhtp create_hash_table 000776 chtp create_hash_table 001000 accp create_hash_table 001002 htx create_hash_table 001003 relp create_hash_table 001016 i opt_size 001017 ht_size opt_size 001034 min relocate_link_ref 001035 s relocate_link_ref 001036 st_size relocate_link_ref 001050 bc validate_component 001051 count validate_component 001052 dname validate_component 001124 dhp validate_component 001126 dnl validate_component 001127 ename validate_component 001140 oi validate_component 001226 segp validate_component 001230 mmp validate_component 001240 accp copy_defs 001242 dhp copy_defs 001244 defp copy_defs 001246 dummy copy_defs 001247 lk_relp copy_defs 001250 flags copy_defs THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_char_temp realloc_char_temp cat_realloc_chars call_ext_in_desc call_ext_in call_ext_out_desc call_ext_out call_int_this_desc call_int_this return_mac bound_ck_signal mdfx1 signal_op enable_op shorten_stack ext_entry ext_entry_desc int_entry int_entry_desc trunc_fx1 trunc_fx2 divide_fx1 op_alloc_ op_freen_ clock_mac THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. expand_pathname_ get_group_id_ get_shortest_path_ get_system_free_area_ get_temp_segment_ get_temp_segments_ hcs_$fs_get_path_name hcs_$set_bc hcs_$star_ hcs_$status_mins object_info_$brief release_temp_segment_ release_temp_segments_ sub_err_ tssi_$clean_up_segment tssi_$finish_segment tssi_$get_segment THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$bad_arg error_table_$improper_data_format error_table_$inconsistent_object_msf error_table_$namedup error_table_$out_of_sequence error_table_$unimplemented_version LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 27 000777 254 001007 261 001015 282 001055 284 001060 285 001063 286 001065 287 001066 289 001070 291 001104 293 001111 295 001141 297 001166 298 001171 302 001172 303 001215 308 001221 309 001245 314 001251 315 001255 316 001256 317 001264 318 001271 319 001272 320 001273 322 001307 324 001315 326 001323 328 001331 330 001337 339 001345 341 001346 348 001351 364 001372 365 001375 370 001410 371 001413 376 001414 378 001430 381 001450 383 001501 387 001502 389 001533 394 001537 396 001562 400 001570 401 001572 402 001574 403 001576 404 001600 405 001602 409 001604 410 001627 414 001631 416 001640 420 001642 425 001661 426 001667 428 001671 435 001673 452 001711 453 001714 455 001720 457 001750 460 001774 467 002003 490 002025 491 002030 497 002072 501 002075 502 002101 504 002103 505 002106 509 002110 510 002113 514 002116 518 002120 519 002122 520 002124 522 002127 526 002135 528 002152 530 002155 537 002166 560 002224 561 002227 567 002271 571 002274 579 002343 581 002344 586 002351 588 002414 589 002421 591 002423 593 002424 595 002440 597 002446 599 002454 601 002462 605 002464 612 002503 629 002535 630 002540 636 002602 640 002605 642 002650 643 002661 647 002746 651 002750 656 002751 658 002755 659 002757 660 002761 661 002762 663 002764 664 002765 666 003001 668 003007 671 003015 678 003066 685 003105 702 003123 703 003126 707 003170 713 003240 721 003312 722 003316 724 003320 731 003327 748 003351 749 003354 755 003416 759 003421 760 003425 764 003427 768 003431 769 003433 770 003435 772 003440 774 003445 781 003456 810 003515 811 003520 817 003562 821 003565 822 003570 823 003575 829 003642 830 003651 832 003677 836 003701 837 003705 841 003714 848 003733 868 003760 869 003763 875 004025 877 004030 878 004031 879 004034 880 004036 881 004040 885 004045 886 004055 888 004103 892 004105 894 004111 898 004120 905 004137 924 004155 925 004160 931 004222 935 004225 939 004226 940 004234 942 004236 949 004245 976 004264 977 004267 983 004331 987 004334 988 004340 990 004342 991 004345 995 004347 996 004352 1000 004355 1004 004357 1005 004361 1006 004363 1008 004366 1012 004374 1015 004411 1017 004414 1024 004425 1050 004461 1051 004464 1057 004526 1068 004575 1075 004656 1080 004665 1081 004670 1086 004740 1091 004744 1094 004761 1096 004773 1098 005003 1100 005013 1102 005022 1104 005031 1107 005076 1109 005077 1114 005103 1115 005106 1120 005156 1124 005162 1127 005175 1129 005205 1131 005214 1133 005223 1136 005270 1138 005271 1143 005275 1144 005300 1149 005350 1153 005354 1156 005367 1158 005377 1160 005406 1162 005415 1165 005462 1170 005463 1174 005530 1181 005537 1214 005556 1215 005560 1217 005561 1219 005575 1221 005625 1223 005640 1225 005641 1229 005664 1230 005670 1231 005676 1232 005701 1236 005704 1237 005713 1238 005723 1242 005725 1243 005735 1244 005737 1246 005741 1249 005777 1254 006003 1256 006072 1258 006154 1262 006166 1266 006204 1267 006215 1268 006217 1272 006221 1276 006231 1280 006241 1281 006265 1285 006316 1287 006341 1319 006343 1294 006352 1311 006354 1315 006356 1327 006357 1377 006375 1381 006402 1387 006441 1388 006444 1389 006446 1391 006447 1392 006457 1394 006472 1398 006474 1400 006500 1402 006510 1411 006514 1455 006532 1457 006537 1463 006541 1465 006575 1470 006577 1472 006634 1477 006635 1480 006663 1481 006700 1483 006701 1488 006702 1489 006711 1491 006724 1495 006726 1497 006732 1499 006741 1508 006745 1568 006747 1572 006753 1576 006763 1581 006775 1583 007005 1584 007011 1585 007013 1587 007021 1589 007031 1591 007040 1595 007053 1599 007055 1600 007064 1601 007071 1605 007075 1607 007103 1608 007105 1609 007107 1610 007111 1611 007143 1612 007146 1613 007147 1615 007151 1616 007153 1617 007155 1618 007201 1619 007206 1620 007207 1622 007211 1623 007213 1624 007215 1625 007217 1626 007221 1627 007223 1629 007224 1630 007226 1631 007230 1636 007232 1637 007234 1639 007235 1648 007240 1685 007242 1689 007246 1690 007255 1693 007276 1697 007300 1699 007304 1700 007314 1702 007317 1711 007322 1754 007336 1755 007343 1756 007346 1760 007350 1761 007357 1762 007363 1764 007403 1768 007405 1772 007412 1773 007415 1774 007421 1778 007425 1780 007430 1784 007442 1793 007445 1832 007447 1833 007453 1836 007455 1840 007456 1846 007510 1848 007514 1849 007544 1850 007552 1851 007553 1855 007560 1859 007607 1861 007615 1868 007616 1993 007620 1994 007624 1995 007626 1996 007630 1997 007632 1998 007634 1999 007636 2003 007640 2007 007641 2008 007652 2009 007654 2010 007656 2011 007660 2013 007662 2017 007664 2019 007720 2020 007750 2022 010005 2026 010035 2027 010042 2029 010047 2030 010050 2032 010053 2036 010063 2037 010067 2041 010072 2042 010075 2046 010077 2050 010103 2051 010114 2052 010116 2053 010120 2054 010125 2055 010132 2056 010137 2057 010144 2061 010147 2067 010204 2071 010207 2072 010220 2073 010222 2078 010234 2083 010261 2084 010313 2086 010340 2087 010343 2091 010345 2092 010351 2093 010353 2094 010355 2098 010404 2100 010411 2104 010421 2105 010425 2106 010433 2108 010450 2112 010452 2116 010457 2118 010515 2122 010520 2123 010524 2127 010526 2129 010533 2130 010543 2131 010553 2132 010560 2140 010562 2141 010563 2143 010565 2144 010570 2146 010573 2150 010602 2155 010615 2157 010617 2158 010621 2163 010623 2164 010626 2165 010631 2170 010632 2171 010635 2173 010640 2175 010642 2179 010650 2182 010666 2184 010671 2185 010675 2190 010677 2195 010704 2199 010705 2204 010713 2205 010721 2206 010723 2207 010730 2211 010731 2215 010733 2218 010734 2219 010737 2220 010742 2226 010743 2228 010747 2229 010753 2233 010765 2234 010767 2235 010774 2240 010775 2241 011002 2243 011004 2247 011015 2248 011025 2253 011027 2254 011033 2258 011037 2262 011042 2268 011045 2277 011067 2279 011071 2281 011073 2285 011076 2290 011103 2292 011105 2297 011127 2298 011136 2303 011137 2305 011200 2309 011203 2310 011213 2311 011222 2312 011231 2316 011233 2318 011241 2320 011243 2322 011251 2326 011253 2327 011254 2331 011266 2335 011312 2336 011316 2340 011320 2344 011327 2348 011336 2349 011342 2354 011344 2355 011350 2359 011354 2361 011364 2362 011366 2363 011375 2365 011376 2367 011403 2372 011412 2378 011421 2381 011433 2382 011436 2383 011445 2385 011446 2387 011454 2392 011463 2394 011465 2397 011477 2399 011503 2400 011512 2401 011513 2405 011522 2406 011545 2410 011547 2414 011557 2418 011566 2419 011572 2423 011573 2425 011576 2426 011603 2434 011605 2436 011612 2439 011635 2446 011656 2447 011706 2451 011710 2456 011713 2460 011722 2461 011724 2465 011726 2466 011731 2467 011733 2471 011735 2476 011765 2481 012007 2483 012017 2484 012046 2489 012052 2493 012101 2495 012107 2502 012110 2575 012112 2576 012116 2577 012120 2578 012122 2582 012124 2586 012125 2588 012136 2590 012143 2591 012145 2592 012147 2593 012152 2594 012155 2595 012157 2596 012161 2600 012165 2602 012170 2603 012175 2604 012203 2609 012207 2611 012211 2612 012214 2613 012216 2618 012223 2619 012247 2623 012254 2625 012261 2626 012265 2627 012270 2628 012273 2629 012276 2631 012334 2632 012342 2637 012344 2638 012353 2643 012360 2651 012432 2657 012510 2658 012517 2659 012530 2660 012535 2661 012537 2662 012541 2663 012544 2664 012546 2665 012552 2666 012554 2667 012557 2668 012606 2669 012613 2671 012614 2672 012623 2673 012626 2674 012632 2675 012634 2676 012640 2677 012642 2678 012650 2679 012652 2680 012655 2681 012704 2683 012711 2687 012713 2692 012715 2693 012723 2694 012725 2695 012727 2696 012734 2700 012763 2701 012773 2702 013004 2703 013007 2704 013011 2708 013015 2713 013024 2714 013036 2715 013062 2720 013064 2722 013073 2723 013122 2728 013126 2732 013155 2734 013163 2741 013164 2777 013166 2781 013172 2785 013174 2790 013202 2791 013213 2792 013215 2794 013220 2796 013223 2803 013224 2857 013226 2858 013232 2859 013234 2860 013236 2862 013240 2863 013253 2867 013254 2868 013255 2869 013256 2870 013257 2872 013260 2876 013261 2880 013310 2884 013312 2889 013342 2896 013350 2897 013352 2898 013354 2899 013356 2900 013364 2906 013373 2907 013402 2908 013405 2909 013407 2910 013412 2916 013421 2917 013430 2918 013433 2919 013435 2920 013440 2926 013447 2927 013456 2928 013461 2929 013463 2930 013466 2936 013475 2942 013503 2949 013553 2953 013557 2954 013562 2955 013565 2956 013570 2960 013573 2961 013600 2963 013602 2970 013603 3005 013605 3006 013612 3010 013615 3011 013617 3015 013622 3016 013623 3017 013626 3018 013631 3019 013633 3020 013636 3021 013641 3022 013643 3023 013646 3024 013651 3025 013653 3029 013656 3031 013661 3032 013664 3033 013666 3034 013671 3036 013672 3037 013677 3038 013702 3040 013705 3044 013710 3045 013712 3046 013714 3047 013716 3051 013720 3052 013724 3053 013730 3054 013734 3055 013736 3056 013743 3060 013750 3061 013753 3065 013756 3067 013762 3074 013763 3127 013765 3129 013770 3130 013772 3131 013774 3133 013777 3137 014002 3138 014020 3140 014024 3144 014026 3146 014031 3151 014032 3155 014034 3159 014042 3160 014045 3164 014047 3168 014051 3170 014105 3171 014110 3174 014112 3180 014114 3181 014125 3182 014137 3186 014163 3190 014165 3191 014174 3192 014176 3193 014200 3194 014202 3196 014204 3198 014205 3205 014206 3274 014210 3275 014211 3276 014212 3280 014213 3281 014223 3282 014231 3284 014235 3286 014242 3288 014245 3289 014246 3291 014250 3292 014261 3293 014267 3296 014300 3298 014304 3299 014311 3301 014322 3302 014331 3303 014334 3304 014336 3306 014337 3307 014344 3308 014346 3312 014350 3313 014357 3314 014365 3315 014367 3316 014372 3320 014375 3321 014403 3322 014411 3323 014414 3324 014416 3327 014420 3329 014422 3331 014426 3332 014433 3335 014435 3339 014437 3340 014445 3341 014450 3342 014460 3344 014464 3345 014475 3347 014503 3351 014520 3352 014531 3354 014543 3355 014547 3356 014554 3358 014555 3360 014565 3362 014575 3366 014577 3369 014601 3370 014607 3371 014617 3373 014623 3374 014633 3375 014641 3377 014647 3379 014660 3381 014672 3382 014675 3383 014702 3385 014703 3386 014714 3387 014722 3388 014730 3390 014733 3393 014735 3400 014736 3431 014740 3435 014745 3436 014753 3438 014763 3442 014765 3451 014771 3475 014773 3484 015003 3522 015005 3527 015012 3533 015015 3537 015023 3538 015027 3540 015073 3546 015114 3548 015133 3550 015152 3552 015160 3559 015161 3613 015175 3618 015201 3623 015213 3624 015223 3628 015231 3633 015234 3637 015240 3638 015244 3639 015250 3640 015260 3641 015266 3642 015270 3644 015275 3645 015301 3649 015302 3651 015304 3652 015310 3653 015312 3655 015317 3657 015324 3662 015325 3663 015336 3665 015337 3666 015343 3667 015345 3669 015352 3671 015360 3676 015361 3677 015362 3679 015364 3686 015365 3745 015367 3749 015375 3750 015426 3753 015466 3758 015475 3763 015521 3766 015575 3768 015577 3769 015633 3772 015634 3776 015710 3777 015711 3782 016011 3788 016121 3789 016137 3791 016147 3795 016151 3796 016170 3802 016244 3803 016255 3804 016260 3805 016263 3806 016266 3810 016271 3812 016273 3817 016347 3819 016354 3824 016432 3832 016526 3838 016610 3845 016611 3891 016613 3895 016624 3901 016634 3906 016640 3910 016645 3913 016712 3918 016713 3919 016716 3922 016723 3924 016755 3926 017025 3928 017026 3930 017034 3937 017035 3985 017043 3987 017051 3989 017053 3991 017067 3993 017112 3997 017113 3998 017127 3999 017134 4003 017136 4007 017157 4008 017161 4009 017164 4010 017171 4011 017173 4012 017175 4013 017201 4014 017203 4015 017205 4016 017207 4017 017223 4018 017225 4019 017227 4020 017231 4021 017233 4022 017235 4023 017237 4024 017241 4025 017255 4029 017272 4030 017277 4034 017311 4035 017313 4037 017321 4038 017323 4042 017325 4043 017327 4047 017343 4052 017367 4056 017411 4057 017427 4059 017431 ----------------------------------------------------------- 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