COMPILATION LISTING OF SEGMENT le_emit_static_ Compiled by: Multics PL/I Compiler, Release 29, of July 28, 1986 Compiled at: Honeywell Multics Op. - System M Compiled on: 12/10/86 1254.3 mst Wed Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1986 * 4* * * 5* *********************************************************** */ 6 7 /****^ HISTORY COMMENTS: 8* 1) change(86-08-12,Elhard), approve(86-08-12,MCR7505), 9* audit(86-12-10,DGHowe), install(86-12-10,MR12.0-1241): 10* Originally written to emit the static section for a single input 11* component. 12* END HISTORY COMMENTS */ 13 14 /* format: style1,insnl,ifthendo,indthenelse,^indnoniterdo,^inditerdo,indcom,^indthenbegin,^indprocbody,ind2,ll78,initcol0,dclind4,idind24,struclvlind1,comcol41 */ 15 16 le_emit_static_: 17 proc (ocudp, /** ocu data pointer (in ) */ 18 lecp, /** components pointer (i/o) */ 19 c); /** component index (in ) */ 20 21 /*** ****************************************************************/ 22 /*** */ 23 /*** Name: le_emit_static_ */ 24 /*** Input: ocudp, lecp, c */ 25 /*** Function: emits the static section of a given input */ 26 /*** component. */ 27 /*** Output: lecp */ 28 /*** */ 29 /*** ****************************************************************/ 30 31 /* constants */ 32 33 dcl true bit (1) static options (constant) init ("1"b); 34 dcl false bit (1) static options (constant) init ("0"b); 35 dcl Left fixed bin static options (constant) init (1); 36 dcl Right fixed bin static options (constant) init (2); 37 38 /* parameters */ 39 40 dcl ocudp ptr parameter; 41 dcl lecp ptr parameter; 42 dcl c fixed bin parameter; 43 44 /* procedures */ 45 46 dcl le_error_ entry options (variable); 47 dcl le_util_$scan_relinfo entry (ptr, fixed bin, bit (1), fixed bin, 48 char (*)); 49 50 /* external */ 51 52 dcl le_et_$implementation_error 53 external fixed bin (35); 54 dcl le_et_$invalid_relinfo external fixed bin (35); 55 56 /* based */ 57 58 dcl 01 lec aligned based (lecp), 59 02 header aligned like le_components.header, 60 02 comp dim (0 refer (lec.n_components)) like le_comp; 61 dcl 01 word18 aligned based (addr (word)), 62 02 side (1:2) fixed bin (18) unsigned unaligned; 63 64 /* automatic */ 65 66 dcl found bit (1) automatic; 67 dcl len fixed bin (18) unsigned automatic; 68 dcl n_words fixed bin automatic; 69 dcl odd bit (1) automatic; 70 dcl original_relp fixed bin (19) automatic; 71 dcl pad (1:16) bit (36) aligned automatic; 72 dcl rel char (2) automatic; 73 dcl rel_char char (1) automatic; 74 dcl relindex fixed bin automatic; 75 dcl relinfop ptr automatic; 76 dcl relp fixed bin (18) unsigned automatic; 77 dcl s fixed bin automatic; 78 dcl skip fixed bin automatic; 79 dcl statp ptr automatic; 80 dcl text_relp fixed bin (18) unsigned automatic; 81 dcl word bit (36) aligned automatic; 82 83 /* builtin */ 84 85 dcl addr builtin; 86 dcl addrel builtin; 87 dcl hbound builtin; 88 dcl min builtin; 89 dcl size builtin; 90 dcl substr builtin; 91 dcl unspec builtin; 92 93 /* align the static as required by padding with zeros */ 94 95 n_words = lec.comp (c).new.static_pad; 96 unspec (pad) = ""b; 97 98 do while (n_words > 0); 99 len = min (hbound (pad, 1), n_words); 100 relp = ocu_$emit_static (ocudp, addr (pad), len); 101 n_words = n_words - len; 102 end; 103 104 /* if there is no static, just return */ 105 106 original_relp = -1; 107 if lec.comp (c).orig.statl = 0 108 then return; 109 110 /* if the static is separate, there is no relinfo so just emit it */ 111 112 if lec.comp (c).flags.separate_static 113 then original_relp = ocu_$emit_static (ocudp, lec.comp (c).orig.statp, 114 (lec.comp (c).orig.statl)); 115 else do; 116 117 /* the static is combined, so if the object is an error table */ 118 /* there may be text relocation for the message offsets, so we */ 119 /* relocate it. */ 120 121 n_words = 0; 122 relinfop = lec.comp (c).orig.rel_linkp; 123 text_relp = lec.comp (c).new.rel_text; 124 relindex = 1; 125 odd = false; 126 found = false; 127 128 /* first we skip over the relocation info for the linkage header */ 129 130 do while (n_words < size (virgin_linkage_header)); 131 call le_util_$scan_relinfo (relinfop, relindex, odd, skip, rel); 132 if n_words + skip >= size (virgin_linkage_header) 133 then do; 134 n_words = size (virgin_linkage_header); 135 skip = skip + n_words - size (virgin_linkage_header); 136 found = true; 137 end; 138 else n_words = n_words + skip + 1; 139 end; 140 141 /* if we used all of the info from the last scan in skipping */ 142 /* over the header scan for the next non-absolute word. */ 143 144 if ^found 145 then call le_util_$scan_relinfo (relinfop, relindex, odd, skip, rel); 146 147 n_words = 0; 148 statp = lec.comp (c).orig.statp; 149 150 do while (n_words < lec.comp (c).orig.statl); 151 152 /* emit the intervening static words */ 153 154 if skip > 0 155 then do; 156 157 /* since there may be links after the end of the static */ 158 /* section, we may end up skipping more than the length */ 159 /* of the section so only emit as may words as are left */ 160 /* in the static section. */ 161 162 len = min (skip, lec.comp (c).orig.statl - n_words); 163 relp = ocu_$emit_static (ocudp, statp, len); 164 if original_relp < 0 165 then original_relp = relp; 166 statp = addrel (statp, len); 167 n_words = n_words + len; 168 end; 169 170 /* copy the word to be relocated */ 171 172 unspec (word) = unspec (statp -> word18); 173 174 do s = Left to Right while (n_words < lec.comp (c).orig.statl); 175 176 /* for each side of the non-absolute word */ 177 178 rel_char = substr (rel, s, 1); 179 180 if rel_char = "a" 181 then ; 182 else if rel_char = "t" 183 then word18.side (s) = word18.side (s) + text_relp; 184 else call le_error_ (LE_ERROR, le_et_$invalid_relinfo, 185 "^/Relocation ""^a"" at static|^o of component ""^a"".", 186 rel, n_words, lec.comp (c).name); 187 end; 188 189 /* if the word is within the static section, then emit it. */ 190 191 if n_words < lec.comp (c).orig.statl 192 then do; 193 relp = ocu_$emit_static (ocudp, addr (word), 1); 194 if original_relp < 0 195 then original_relp = relp; 196 statp = addrel (statp, 1); 197 n_words = n_words + 1; 198 call le_util_$scan_relinfo (relinfop, relindex, odd, skip, rel); 199 end; 200 201 end; 202 end; 203 204 /* make sure it was emitted where we calculated is should be emitted */ 205 206 if original_relp ^= lec.comp (c).new.rel_stat 207 then call le_error_ (LE_ABORT_ERROR, le_et_$implementation_error, 208 "^/Static for ^a relocated to ^d instead of ^d as expected.", 209 lec.comp (c).name, original_relp, lec.comp (c).new.rel_stat); 210 211 return; 212 213 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 214 215 /**** * * * * * * * * * * * * * * * * * * * * * * * */ 216 217 1 1 /**** START OF: le_data.incl.pl1 * * * * * */ 1 2 1 3 /****^ HISTORY COMMENTS: 1 4* 1) change(86-08-12,Elhard), approve(86-08-12,MCR7505), 1 5* audit(86-12-10,DGHowe), install(86-12-10,MR12.0-1241): 1 6* Originally written to define the structures used internally by le_. 1 7* END HISTORY COMMENTS */ 1 8 1 9 /*** ****************************************************************/ 1 10 /*** */ 1 11 /*** Name: le_data */ 1 12 /*** Function: This include file defines the data structures */ 1 13 /*** used internally by the linkage_editor subroutine. */ 1 14 /*** */ 1 15 /*** ****************************************************************/ 1 16 1 17 /* error severity constants */ 1 18 1 19 dcl LE_WARNING fixed bin static options (constant) init (1); 1 20 dcl LE_ERROR fixed bin static options (constant) init (2); 1 21 dcl LE_FATAL_ERROR fixed bin static options (constant) init (3); 1 22 dcl LE_ABORT_ERROR fixed bin static options (constant) init (4); 1 23 1 24 /* section identifier constants */ 1 25 1 26 dcl Text fixed bin (3) static options (constant) 1 27 init (0); 1 28 dcl Linkage fixed bin (3) static options (constant) 1 29 init (1); 1 30 dcl Symbol fixed bin (3) static options (constant) 1 31 init (2); 1 32 dcl Definition fixed bin (3) static options (constant) 1 33 init (3); 1 34 dcl Static fixed bin (3) static options (constant) 1 35 init (4); 1 36 dcl System fixed bin (3) static options (constant) 1 37 init (5); 1 38 dcl Heap fixed bin (3) static options (constant) 1 39 init (6); 1 40 1 41 dcl section_nm (0:6) char (16) static options (constant) 1 42 init ("text", "linkage", "symbol", "definition", 1 43 "static", "system", "heap"); 1 44 1 45 /* link type constants */ 1 46 1 47 dcl Self_Base fixed bin (3) static options (constant) 1 48 init (1); 1 49 dcl Refname_Base fixed bin (3) static options (constant) 1 50 init (3); 1 51 dcl Refname_Offsetname fixed bin (3) static options (constant) 1 52 init (4); 1 53 dcl Self_Offsetname fixed bin (3) static options (constant) 1 54 init (5); 1 55 1 56 /* backpatch type constants */ 1 57 1 58 dcl Patch_Link fixed bin static options (constant) init (1); 1 59 dcl Patch_Init fixed bin static options (constant) init (2); 1 60 dcl Patch_Symbol_Ref fixed bin static options (constant) init (3); 1 61 dcl Patch_Self_Init fixed bin static options (constant) init (4); 1 62 1 63 /*** ****************************************************************/ 1 64 /*** */ 1 65 /*** Name: le_components */ 1 66 /*** Function: the component table is used to keep information */ 1 67 /*** about the input components being used and their */ 1 68 /*** disposition in output components. */ 1 69 /*** */ 1 70 /*** ****************************************************************/ 1 71 1 72 dcl 01 le_components aligned based, 1 73 02 header aligned, 1 74 03 flags aligned, 1 75 04 separate_static bit (1) unaligned, 1 76 04 perprocess_static bit (1) unaligned, 1 77 04 mbz bit (34) unaligned, 1 78 03 n_components fixed bin, 1 79 02 comp (0 refer (le_components.n_components)) 1 80 like le_comp; 1 81 1 82 /*** ****************************************************************/ 1 83 /*** */ 1 84 /*** Name: le_comp */ 1 85 /*** Function: this is a single component table entry. */ 1 86 /*** */ 1 87 /*** ****************************************************************/ 1 88 1 89 dcl 01 le_comp aligned based, 1 90 02 segp ptr, 1 91 02 bc fixed bin (24), 1 92 02 uid bit (36) aligned, 1 93 02 dtcm fixed bin (71), 1 94 02 name char (32) varying, 1 95 02 path char (194) varying, 1 96 02 compiler char (8), 1 97 02 target fixed bin, 1 98 02 flags aligned, 1 99 03 library bit (1) unaligned, 1 100 03 include bit (1) unaligned, 1 101 03 delete_table bit (1) unaligned, 1 102 03 separate_static bit (1) unaligned, 1 103 03 io_table bit (1) unaligned, 1 104 03 unique_path bit (1) unaligned, 1 105 03 mbz bit (30) unaligned, 1 106 02 tables aligned, 1 107 03 lesp ptr, 1 108 03 ledp ptr, 1 109 03 lelp ptr, 1 110 02 orig aligned, 1 111 03 textp ptr, 1 112 03 defnp ptr, 1 113 03 linkp ptr, 1 114 03 statp ptr, 1 115 03 symbp ptr, 1 116 03 rel_textp ptr, 1 117 03 rel_symbp ptr, 1 118 03 rel_linkp ptr, 1 119 03 textl fixed bin (18) unsigned unaligned, 1 120 03 defnl fixed bin (18) unsigned unaligned, 1 121 03 linkl fixed bin (18) unsigned unaligned, 1 122 03 statl fixed bin (18) unsigned unaligned, 1 123 03 symbl fixed bin (18) unsigned unaligned, 1 124 03 symbl_no_rel fixed bin (18) unsigned unaligned, 1 125 03 symbl_no_table fixed bin (18) unsigned unaligned, 1 126 03 n_symb_blocks fixed bin (18) unsigned unaligned, 1 127 03 text_boundary fixed bin (9) unsigned unaligned, 1 128 03 static_boundary fixed bin (9) unsigned unaligned, 1 129 03 next_comp fixed bin (18) unsigned unaligned, 1 130 02 new aligned, 1 131 03 rel_text fixed bin (18) unsigned unaligned, 1 132 03 rel_symb fixed bin (18) unsigned unaligned, 1 133 03 rel_stat fixed bin (18) unsigned unaligned, 1 134 03 text_pad fixed bin (18) unsigned unaligned, 1 135 03 static_pad fixed bin (18) unsigned unaligned, 1 136 03 symbol_pad fixed bin (18) unsigned unaligned; 1 137 1 138 /*** ****************************************************************/ 1 139 /*** */ 1 140 /*** Name: le_segnames */ 1 141 /*** Function: the segname table is used for two purposes: */ 1 142 /*** - to determine the target components of links */ 1 143 /*** being resolved internally. */ 1 144 /*** - to determine the segname definitions to be */ 1 145 /*** emited for definitions being retained. */ 1 146 /*** */ 1 147 /*** ****************************************************************/ 1 148 1 149 dcl 01 le_segnames aligned based, 1 150 02 header aligned, 1 151 03 n_segnames fixed bin, 1 152 02 segname (segname_count refer (le_segnames.n_segnames)), 1 153 03 str char (32) varying, 1 154 03 relp fixed bin (18) unsigned unaligned, 1 155 03 pad bit (18) unaligned; 1 156 dcl segname_count fixed bin automatic; 1 157 1 158 /*** ****************************************************************/ 1 159 /*** */ 1 160 /*** Name: le_definitions */ 1 161 /*** Function: the definition table contains the definitions */ 1 162 /*** from the input components and is used to resolve */ 1 163 /*** link targets, and regenerate definition entries */ 1 164 /*** */ 1 165 /*** ****************************************************************/ 1 166 1 167 dcl 01 le_definitions aligned based, 1 168 02 header aligned, 1 169 03 n_defs fixed bin, 1 170 03 pad bit (36), 1 171 02 def (def_count refer (le_definitions.n_defs)) 1 172 like le_definition; 1 173 dcl def_count fixed bin automatic; 1 174 1 175 dcl 01 le_definition aligned based, 1 176 02 str char (256) varying, 1 177 02 type fixed bin (18) unsigned unaligned, 1 178 02 relp fixed bin (18) unsigned unaligned, 1 179 02 offset fixed bin (18) unsigned unaligned, 1 180 02 new_offset fixed bin (18) unsigned unaligned, 1 181 02 flags aligned, 1 182 03 force_retain bit (1) unaligned, 1 183 03 entrypoint bit (1) unaligned, 1 184 03 ignore bit (1) unaligned, 1 185 03 referenced bit (1) unaligned, 1 186 03 no_link bit (1) unaligned, 1 187 03 retain bit (1) unaligned, 1 188 03 delete bit (1) unaligned, 1 189 03 mbz bit (29) unaligned; 1 190 1 191 /*** ****************************************************************/ 1 192 /*** */ 1 193 /*** Name: le_options */ 1 194 /*** Function: the option table contains definition retention */ 1 195 /*** information. The input retentions options are */ 1 196 /*** ordered such that a linear search of the option */ 1 197 /*** table for the first matching starname will give */ 1 198 /*** the correct retention state. */ 1 199 /*** */ 1 200 /*** ****************************************************************/ 1 201 1 202 dcl 01 le_options aligned based, 1 203 02 header aligned, 1 204 03 n_opts fixed bin, 1 205 02 opt (0 refer (le_options.n_opts)), 1 206 03 type fixed bin (8) unaligned, 1 207 03 used bit (1) unaligned, 1 208 03 inhibit_error bit (1) unaligned, 1 209 03 class fixed bin (6) unaligned, 1 210 03 order fixed bin (17) unaligned, 1 211 03 segname char (32) unaligned, 1 212 03 ep_name char (256) unaligned; 1 213 1 214 /*** ****************************************************************/ 1 215 /*** */ 1 216 /*** Name: le_links */ 1 217 /*** Function: the link table contains information on all of the */ 1 218 /*** links in the input components. It is used to */ 1 219 /*** determine link targets, which library components */ 1 220 /*** will be included, and what init_info will be */ 1 221 /*** used, and where it will be placed. */ 1 222 /*** */ 1 223 /*** ****************************************************************/ 1 224 1 225 dcl 01 le_links aligned based, 1 226 02 header aligned, 1 227 03 offset_adjustment fixed bin (18), 1 228 03 n_links fixed bin, 1 229 02 link (link_count refer (le_links.n_links)) 1 230 like le_link; 1 231 dcl link_count fixed bin automatic; 1 232 1 233 dcl 01 le_link aligned based, 1 234 02 flags unaligned, 1 235 03 used bit (1), 1 236 03 mbx bit (35), 1 237 02 type fixed bin (6) unsigned unaligned, 1 238 02 class fixed bin (6) unsigned unaligned, 1 239 02 mod bit (6) unaligned, 1 240 02 exp fixed bin (17) unaligned, 1 241 02 target fixed bin (18) unsigned unaligned, 1 242 02 defx fixed bin (18) unsigned unaligned, 1 243 02 relp fixed bin (18) unsigned unaligned, 1 244 02 target_comp fixed bin (18) unsigned unaligned, 1 245 02 target_link fixed bin (18) unsigned unaligned, 1 246 02 extension fixed bin (18) unsigned unaligned, 1 247 02 initp ptr unaligned, 1 248 02 segnamep ptr unaligned, 1 249 02 offsetp ptr unaligned; 1 250 1 251 /*** ****************************************************************/ 1 252 /*** */ 1 253 /*** Name: le_binaries */ 1 254 /*** Function: This table contains information about the output */ 1 255 /*** binaries. It is primarily used for creation and */ 1 256 /*** backpatching of MSF output. */ 1 257 /*** */ 1 258 /*** ****************************************************************/ 1 259 1 260 dcl 01 le_binaries aligned based, 1 261 02 header aligned, 1 262 03 n_binaries fixed bin, 1 263 03 pad bit (36), 1 264 02 binary (0:0 refer (le_binaries.n_binaries)), 1 265 03 segp ptr, 1 266 03 bc fixed bin (24), 1 267 03 uid bit (36), 1 268 03 aclc fixed bin, 1 269 03 aclp ptr, 1 270 03 textp ptr, 1 271 03 defnp ptr, 1 272 03 linkp ptr, 1 273 03 symbp ptr, 1 274 03 statp ptr, 1 275 03 textl fixed bin (18) unsigned unaligned, 1 276 03 defnl fixed bin (18) unsigned unaligned, 1 277 03 linkl fixed bin (18) unsigned unaligned, 1 278 03 symbl fixed bin (18) unsigned unaligned, 1 279 03 statl fixed bin (18) unsigned unaligned, 1 280 03 mbz2 bit (18) unaligned; 1 281 1 282 /*** ****************************************************************/ 1 283 /*** */ 1 284 /*** Name: le_patches */ 1 285 /*** Function: This table contains the list of backpatches to be */ 1 286 /*** performed when the rest of the object creation is */ 1 287 /*** complete. Since le_backpatch_ is the only routine */ 1 288 /*** concerned with this, it is maintained completely */ 1 289 /*** internal to le_backpatch_. */ 1 290 /*** */ 1 291 /*** ****************************************************************/ 1 292 1 293 dcl 01 le_patches aligned based, 1 294 02 header aligned, 1 295 03 n_patches fixed bin, 1 296 02 patch (0 refer (le_patches.n_patches)) like le_patch; 1 297 1 298 dcl 01 le_patch aligned based, 1 299 02 type fixed bin, 1 300 02 comp fixed bin, 1 301 02 relp fixed bin (18) unsigned, 1 302 02 target fixed bin, 1 303 02 index fixed bin; 1 304 1 305 /**** END OF: le_data.incl.pl1 * * * * * */ 218 2 1 /* BEGIN INCLUDE FILE object_link_dcls.incl.pl1 BIM 1981 from linkdcl */ 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-11-18,Schroth), install(86-11-20,MR12.0-1222): 2 7* Modified to add partial_link structure for an object MSF partially snapped 2 8* link. 2 9* 2) change(86-11-13,DGHowe), approve(86-11-13,MCR7391), audit(86-11-13,Zwick), 2 10* install(86-11-20,MR12.0-1222): 2 11* Added a declaration of FAULT_TAG_1, FAULT_TAG_2 and FAULT_TAG_3. 2 12* END HISTORY COMMENTS */ 2 13 2 14 2 15 /* format: style3 */ 2 16 /* everything you ever wanted in a linkage section */ 2 17 2 18 /* 2 19* Last Modified (Date and Reason): 2 20* 15 Nov 1971 by C Garman 2 21* 6/75 by M.Weaver to add virgin_linkage_header declaration 2 22* 6/75 by S.Webber to comment existing structures better 2 23* 9/77 by M. Weaver to add run_depth to link 2 24* 7/81 by B. Margulies for firstref structure, unsigned fixed bins. 2 25* 3/83 by M. Weaver to add flags overlaying def_ptr 2 26**/ 2 27 2 28 declare 1 object_link based aligned, /* link pair in linkage section */ 2 29 2 header_relp fixed bin (17) unal, /* rel pointer to beginning of linkage, always negative */ 2 30 2 ringno fixed bin (3) unsigned unal, /* MBZ */ 2 31 2 mbz bit (6) unal, 2 32 2 run_depth fixed bin (2) unal, /* run unit depth, filled when link is snapped */ 2 33 2 tag bit (6) unal, /* fault tag. 46(8) if not snapped, 43(8) if snapped */ 2 34 2 expression_relp fixed bin (18) unsigned unal, /* pointer (rel to defs) of expression word */ 2 35 2 mbz2 bit (12) unal, 2 36 2 modifier bit (6) unal; /* modifier to be left in snapped link */ 2 37 2 38 declare 1 partial_link based aligned, /* partially snapped link */ 2 39 2 type fixed bin (3) unsigned unal, /* target section of link */ 2 40 2 component fixed bin (15) unsigned unal, /* target component index */ 2 41 2 mbz1 bit (12) unal, 2 42 2 tag bit (6) unal, /* fault tag 3 47(8), ITS 43(8) if snapped */ 2 43 2 44 2 offset fixed bin (18) unsigned unal, /* word offset of link */ 2 45 2 mbz2 bit (3) unal, 2 46 2 bit_offset fixed bin (6) unsigned unal, /* bit offset (in practice, always 0) */ 2 47 2 mbz3 bit (3) unal, 2 48 2 modifier bit (6) unal; /* modifier to be left in snapped link */ 2 49 2 50 declare 1 linkage_header based aligned, /* linkage block header */ 2 51 2 def_ptr ptr, /* pointer to definition section */ 2 52 2 symbol_ptr ptr unal, /* pointer to symbol section in object segment */ 2 53 2 original_linkage_ptr 2 54 ptr unal, /* pointer to linkage section in object segment */ 2 55 2 unused bit (72), 2 56 2 stats, 2 57 3 begin_links fixed bin (18) unsigned unal, /* offset (rel to this section) of first link */ 2 58 3 block_length fixed bin (18) unsigned unal, /* number of words in this linkage section */ 2 59 3 segment_number 2 60 fixed bin (18) unsigned unal, /* text segment number associated with this section */ 2 61 3 static_length fixed bin (18) unsigned unal; /* number of words of static for this segment */ 2 62 2 63 declare 1 linkage_header_flags 2 64 aligned based, /* overlay of def_ptr for flags */ 2 65 2 pad1 bit (28) unaligned, /* flags are in first word */ 2 66 2 static_vlas bit (1) unaligned, /* static section "owns" some LA/VLA segments */ 2 67 2 perprocess_static 2 68 bit (1) unaligned, /* 1 copy of static section is shared among all tasks/run units */ 2 69 2 pad2 bit (6) unaligned; 2 70 2 71 declare 1 virgin_linkage_header 2 72 aligned based, /* template for linkage header in object segment */ 2 73 2 pad bit (30) unaligned, /* is filled in by linker */ 2 74 2 defs_in_link bit (6) unaligned, /* =o20 if defs in linkage (nonstandard) */ 2 75 2 def_offset fixed bin (18) unsigned unaligned, 2 76 /* offset of definition section */ 2 77 2 first_ref_relp fixed bin (18) unsigned unaligned, 2 78 /* offset of trap-at-first-reference offset array */ 2 79 2 filled_in_later bit (144), 2 80 2 link_begin fixed bin (18) unsigned unaligned, 2 81 /* offset of first link */ 2 82 2 linkage_section_lng 2 83 fixed bin (18) unsigned unaligned, 2 84 /* length of linkage section */ 2 85 2 segno_pad fixed bin (18) unsigned unaligned, 2 86 /* will be segment number of copied linkage */ 2 87 2 static_length fixed bin (18) unsigned unaligned; 2 88 /* length of static section */ 2 89 2 90 declare 1 fr_traps based aligned, /* First Reference Trap Procedures */ 2 91 2 decl_vers fixed bin, /* version of this struc, value=1, ABS reloc */ 2 92 2 n_traps fixed bin, /* number of traps on this segment, ABS */ 2 93 2 trap_array (n_fr_traps refer (fr_traps.n_traps)) aligned, 2 94 3 call_relp fixed bin (18) unsigned unaligned, 2 95 /* LINK18, offset of link defining procedure to call */ 2 96 3 info_relp fixed bin (18) unsigned unaligned; 2 97 /* LINK18, offser of link defining argument list for trap proc */ 2 98 2 99 declare FR_TRAPS_VERSION_1 init (1) fixed bin internal static options (constant); 2 100 declare FAULT_TAG_1 bit(6) unaligned init ("40"b3) static options (constant); 2 101 declare FAULT_TAG_2 bit(6) unaligned init ("46"b3) static options (constant); 2 102 declare FAULT_TAG_3 bit(6) unaligned init ("47"b3) static options (constant); 2 103 2 104 /* END INCLUDE FILE object_link_dcls.incl.pl1 */ 219 3 1 /* START OF: ocu_dcls.incl.pl1 * * * * * */ 3 2 3 3 /****^ HISTORY COMMENTS: 3 4* 1) change(86-08-12,Elhard), approve(86-08-12,MCR7505), 3 5* audit(86-12-10,DGHowe), install(86-12-10,MR12.0-1241): 3 6* Originally written to define the subroutines and data structures used by 3 7* callers of ocu_. 3 8* END HISTORY COMMENTS */ 3 9 3 10 /*** ****************************************************************/ 3 11 /*** */ 3 12 /*** Name: ocu_dcls */ 3 13 /*** Function: These are the entrypoints and structures required */ 3 14 /*** to use the ocu_ object creation utilities. */ 3 15 /*** */ 3 16 /*** ****************************************************************/ 3 17 3 18 /* open option flags */ 3 19 3 20 dcl OPEN_FLAGS_BOUND bit (6) static options (constant) 3 21 init ("100000"b); 3 22 dcl OPEN_FLAGS_RELOCATABLE bit (6) static options (constant) 3 23 init ("010000"b); 3 24 dcl OPEN_FLAGS_PROCEDURE bit (6) static options (constant) 3 25 init ("001000"b); 3 26 dcl OPEN_FLAGS_SEPARATE_STATIC 3 27 bit (6) static options (constant) 3 28 init ("000100"b); 3 29 dcl OPEN_FLAGS_PERPROCESS_STATIC 3 30 bit (6) static options (constant) 3 31 init ("000010"b); 3 32 dcl OPEN_FLAGS_NO_HASHTABLE bit (6) static options (constant) 3 33 init ("000001"b); 3 34 3 35 /* definition flags */ 3 36 3 37 dcl DEFINITION_FLAGS_IGNORE bit (4) static options (constant) init ("1000"b); 3 38 dcl DEFINITION_FLAGS_ENTRY bit (4) static options (constant) init ("0100"b); 3 39 dcl DEFINITION_FLAGS_RETAIN bit (4) static options (constant) init ("0010"b); 3 40 dcl DEFINITION_FLAGS_INDIRECT 3 41 bit (4) static options (constant) init ("0001"b); 3 42 3 43 /* input structures */ 3 44 3 45 dcl word_arrayp ptr; 3 46 dcl word_arrayl fixed bin (18) unsigned; 3 47 3 48 dcl word_array(word_arrayl) bit (36) based (word_arrayp); 3 49 3 50 dcl reloc_strp ptr; 3 51 dcl reloc_strl fixed bin (21); 3 52 3 53 dcl reloc_str char (reloc_strl) based (reloc_strp); 3 54 3 55 dcl component_listp ptr; 3 56 dcl component_count fixed bin (15) unsigned; 3 57 3 58 dcl component_list (1:component_count) 3 59 ptr based (component_listp); 3 60 3 61 dcl 01 gen_info aligned based, 3 62 02 gen_created fixed bin (71), 3 63 02 generator char (8), 3 64 02 gen_number fixed bin, 3 65 02 gen_version char (512) varying; 3 66 3 67 /* entrypoint declarations */ 3 68 3 69 dcl ocu_$open /* setup to create an object */ 3 70 entry (char(*), /* directory name (in ) */ 3 71 char(*), /* entry name (in ) */ 3 72 bit(*), /* option flags (in ) */ 3 73 ptr, /* ocu_data pointer (out) */ 3 74 fixed bin(35)); /* error code (out) */ 3 75 3 76 dcl ocu_$close /* create the object segment */ 3 77 entry (ptr, /* ocu_data pointer (in ) */ 3 78 fixed bin(35)); /* error code (out) */ 3 79 3 80 dcl ocu_$release /* release storage on cleanup */ 3 81 entry (ptr); /* ocu_data pointer (in ) */ 3 82 3 83 dcl ocu_$emit_text /* emit a block of text words */ 3 84 entry (ptr, /* ocu_data pointer (in ) */ 3 85 ptr, /* word array pointer (in ) */ 3 86 ptr, /* reloc string pointer (in ) */ 3 87 fixed bin (18) uns) /* word count (in ) */ 3 88 returns(fixed bin (18) uns); /* text relp (out) */ 3 89 3 90 dcl ocu_$emit_definition /* emit a single definition entry */ 3 91 entry (ptr, /* ocu_data pointer (in ) */ 3 92 char(*) var, /* definition name (in ) */ 3 93 fixed bin (3), /* target section (in ) */ 3 94 fixed bin (18) uns, /* offset in section (in ) */ 3 95 bit(*)) /* definition flags (in ) */ 3 96 returns(fixed bin (18) uns); /* definition relp (out) */ 3 97 3 98 dcl ocu_$emit_segname /* emit a single segname definition */ 3 99 entry (ptr, /* ocu_data pointer (in ) */ 3 100 char(*) var, /* segname (in ) */ 3 101 bit(*)) /* definition flags (in ) */ 3 102 returns(fixed bin (18) uns); /* definition relp (out) */ 3 103 3 104 dcl ocu_$emit_msf_map /* emit an msf map (MSF components) */ 3 105 entry (ptr, /* ocu_data pointer (in ) */ 3 106 fixed bin (15) uns, /* component count (in ) */ 3 107 fixed bin (15) uns); /* my component (in ) */ 3 108 3 109 dcl ocu_$emit_static /* emit a block of static words */ 3 110 entry (ptr, /* ocu_data pointer (in ) */ 3 111 ptr, /* word array pointer (in ) */ 3 112 fixed bin (18) uns) /* word count (in ) */ 3 113 returns(fixed bin (18) uns); /* static relp (out) */ 3 114 3 115 dcl ocu_$emit_link /* emit a single external link */ 3 116 entry (ptr, /* ocu_data pointer (in ) */ 3 117 fixed bin (3), /* link type (in ) */ 3 118 fixed bin (3), /* link class (in ) */ 3 119 char(*) var, /* target refname (in ) */ 3 120 char(*) var, /* target definition (in ) */ 3 121 fixed bin, /* expression offset (in ) */ 3 122 bit(6), /* link modifier (in ) */ 3 123 ptr) /* init info pointer (in ) */ 3 124 returns(fixed bin (18) uns); /* link relp (out) */ 3 125 3 126 dcl ocu_$emit_partial_link /* emit a single partial link */ 3 127 entry (ptr, /* ocu_data pointer (in ) */ 3 128 fixed bin (15) uns, /* target component (in ) */ 3 129 fixed bin (3), /* target section (in ) */ 3 130 fixed bin (18) uns, /* offset in section (in ) */ 3 131 bit(6)) /* link modifier (in ) */ 3 132 returns(fixed bin (18) uns); /* link relp (out) */ 3 133 3 134 dcl ocu_$emit_firstref_trap /* add a trap to the firstref block */ 3 135 entry (ptr, /* ocu_data pointer (in ) */ 3 136 fixed bin (18) uns, /* call relp (in ) */ 3 137 fixed bin (18) uns); /* info relp (in ) */ 3 138 3 139 dcl ocu_$emit_symbol /* emit a block of symbol words */ 3 140 entry (ptr, /* ocu_data pointer (in ) */ 3 141 ptr, /* word array pointer (in ) */ 3 142 ptr, /* reloc string pointer (in ) */ 3 143 fixed bin (18) uns) /* word count (in ) */ 3 144 returns(fixed bin (18) uns); /* symbol relp (out) */ 3 145 3 146 dcl ocu_$backpatch /* patch a word in the text/symbol scn */ 3 147 entry (ptr, /* ocu_data pointer (in ) */ 3 148 char(*), /* section (in ) */ 3 149 fixed bin (18) uns, /* offset in section (in ) */ 3 150 char(*), /* side and size (in ) */ 3 151 fixed bin (35)); /* new value to patch (in ) */ 3 152 3 153 dcl ocu_$create_msf /* create component 0 of the MSF */ 3 154 entry (ptr, /* component array ptr (in ) */ 3 155 fixed bin (15) uns, /* component count (in ) */ 3 156 ptr, /* generator info ptr (in ) */ 3 157 fixed bin(35)); /* error code (out) */ 3 158 3 159 /* END OF: ocu_dcls.incl.pl1 * * * * * */ 220 221 222 end le_emit_static_; 223 224 SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 12/10/86 1251.5 le_emit_static_.pl1 >special_ldd>install>MR12.0-1241>le_emit_static_.pl1 218 1 12/10/86 1248.4 le_data.incl.pl1 >special_ldd>install>MR12.0-1241>le_data.incl.pl1 219 2 11/24/86 1226.9 object_link_dcls.incl.pl1 >ldd>include>object_link_dcls.incl.pl1 220 3 12/10/86 1248.0 ocu_dcls.incl.pl1 >special_ldd>install>MR12.0-1241>ocu_dcls.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. LE_ABORT_ERROR 000011 constant fixed bin(17,0) initial dcl 1-22 set ref 206* LE_ERROR 000013 constant fixed bin(17,0) initial dcl 1-20 set ref 184* Left constant fixed bin(17,0) initial dcl 35 ref 174 Right constant fixed bin(17,0) initial dcl 36 ref 174 addr builtin function dcl 85 ref 100 100 182 182 193 193 addrel builtin function dcl 86 ref 166 196 c parameter fixed bin(17,0) dcl 42 ref 16 95 107 112 112 112 122 123 148 150 162 174 184 191 206 206 206 comp 2 based structure array level 2 dcl 58 false constant bit(1) initial unaligned dcl 34 ref 125 126 flags 106 based structure array level 3 dcl 58 found 000100 automatic bit(1) unaligned dcl 66 set ref 126* 136* 144 hbound builtin function dcl 87 ref 99 header based structure level 2 dcl 1-72 le_comp based structure level 1 dcl 1-89 le_components based structure level 1 dcl 1-72 le_definition based structure level 1 dcl 1-175 le_error_ 000010 constant entry external dcl 46 ref 184 206 le_et_$implementation_error 000014 external static fixed bin(35,0) dcl 52 set ref 206* le_et_$invalid_relinfo 000016 external static fixed bin(35,0) dcl 54 set ref 184* le_link based structure level 1 dcl 1-233 le_patch based structure level 1 dcl 1-298 le_util_$scan_relinfo 000012 constant entry external dcl 47 ref 131 144 198 lec based structure level 1 dcl 58 lecp parameter pointer dcl 41 ref 16 95 107 112 112 112 122 123 148 150 162 174 184 191 206 206 206 len 000101 automatic fixed bin(18,0) unsigned dcl 67 set ref 99* 100* 101 162* 163* 166 167 min builtin function dcl 88 ref 99 162 n_words 000102 automatic fixed bin(17,0) dcl 68 set ref 95* 98 99 101* 101 121* 130 132 134* 135 138* 138 147* 150 162 167* 167 174 184* 191 197* 197 name 10 based varying char(32) array level 3 dcl 58 set ref 184* 206* new 143 based structure array level 3 dcl 58 ocu_$emit_static 000020 constant entry external dcl 3-109 ref 100 112 163 193 ocudp parameter pointer dcl 40 set ref 16 100* 112* 163* 193* odd 000103 automatic bit(1) unaligned dcl 69 set ref 125* 131* 144* 198* orig 116 based structure array level 3 dcl 58 original_relp 000104 automatic fixed bin(19,0) dcl 70 set ref 106* 112* 164 164* 194 194* 206 206* pad 000105 automatic bit(36) array dcl 71 set ref 96* 99 100 100 rel 000125 automatic char(2) unaligned dcl 72 set ref 131* 144* 178 184* 198* rel_char 000126 automatic char(1) unaligned dcl 73 set ref 178* 180 182 rel_linkp 134 based pointer array level 4 dcl 58 ref 122 rel_stat 144 based fixed bin(18,0) array level 4 packed unsigned unaligned dcl 58 set ref 206 206* rel_text 143 based fixed bin(18,0) array level 4 packed unsigned unaligned dcl 58 ref 123 relindex 000127 automatic fixed bin(17,0) dcl 74 set ref 124* 131* 144* 198* relinfop 000130 automatic pointer dcl 75 set ref 122* 131* 144* 198* relp 000132 automatic fixed bin(18,0) unsigned dcl 76 set ref 100* 163* 164 193* 194 s 000133 automatic fixed bin(17,0) dcl 77 set ref 174* 178 182 182* separate_static 106(03) based bit(1) array level 4 packed unaligned dcl 58 ref 112 side based fixed bin(18,0) array level 2 packed unsigned unaligned dcl 61 set ref 182* 182 size builtin function dcl 89 ref 130 132 134 135 skip 000134 automatic fixed bin(17,0) dcl 78 set ref 131* 132 135* 135 138 144* 154 162 198* static_pad 145 based fixed bin(18,0) array level 4 packed unsigned unaligned dcl 58 ref 95 statl 137(18) based fixed bin(18,0) array level 4 packed unsigned unaligned dcl 58 ref 107 112 150 162 174 191 statp 124 based pointer array level 4 in structure "lec" dcl 58 in procedure "le_emit_static_" set ref 112* 148 statp 000136 automatic pointer dcl 79 in procedure "le_emit_static_" set ref 148* 163* 166* 166 172 196* 196 substr builtin function dcl 90 ref 178 text_relp 000140 automatic fixed bin(18,0) unsigned dcl 80 set ref 123* 182 true constant bit(1) initial unaligned dcl 33 ref 136 unspec builtin function dcl 91 set ref 96* 172* 172 virgin_linkage_header based structure level 1 dcl 2-71 ref 130 132 134 135 word 000141 automatic bit(36) dcl 81 set ref 172* 182 182 193 193 word18 based structure level 1 dcl 61 set ref 172 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. DEFINITION_FLAGS_ENTRY internal static bit(4) initial unaligned dcl 3-38 DEFINITION_FLAGS_IGNORE internal static bit(4) initial unaligned dcl 3-37 DEFINITION_FLAGS_INDIRECT internal static bit(4) initial unaligned dcl 3-40 DEFINITION_FLAGS_RETAIN internal static bit(4) initial unaligned dcl 3-39 Definition internal static fixed bin(3,0) initial dcl 1-32 FAULT_TAG_1 internal static bit(6) initial unaligned dcl 2-100 FAULT_TAG_2 internal static bit(6) initial unaligned dcl 2-101 FAULT_TAG_3 internal static bit(6) initial unaligned dcl 2-102 FR_TRAPS_VERSION_1 internal static fixed bin(17,0) initial dcl 2-99 Heap internal static fixed bin(3,0) initial dcl 1-38 LE_FATAL_ERROR internal static fixed bin(17,0) initial dcl 1-21 LE_WARNING internal static fixed bin(17,0) initial dcl 1-19 Linkage internal static fixed bin(3,0) initial dcl 1-28 OPEN_FLAGS_BOUND internal static bit(6) initial unaligned dcl 3-20 OPEN_FLAGS_NO_HASHTABLE internal static bit(6) initial unaligned dcl 3-32 OPEN_FLAGS_PERPROCESS_STATIC internal static bit(6) initial unaligned dcl 3-29 OPEN_FLAGS_PROCEDURE internal static bit(6) initial unaligned dcl 3-24 OPEN_FLAGS_RELOCATABLE internal static bit(6) initial unaligned dcl 3-22 OPEN_FLAGS_SEPARATE_STATIC internal static bit(6) initial unaligned dcl 3-26 Patch_Init internal static fixed bin(17,0) initial dcl 1-59 Patch_Link internal static fixed bin(17,0) initial dcl 1-58 Patch_Self_Init internal static fixed bin(17,0) initial dcl 1-61 Patch_Symbol_Ref internal static fixed bin(17,0) initial dcl 1-60 Refname_Base internal static fixed bin(3,0) initial dcl 1-49 Refname_Offsetname internal static fixed bin(3,0) initial dcl 1-51 Self_Base internal static fixed bin(3,0) initial dcl 1-47 Self_Offsetname internal static fixed bin(3,0) initial dcl 1-53 Static internal static fixed bin(3,0) initial dcl 1-34 Symbol internal static fixed bin(3,0) initial dcl 1-30 System internal static fixed bin(3,0) initial dcl 1-36 Text internal static fixed bin(3,0) initial dcl 1-26 component_count automatic fixed bin(15,0) unsigned dcl 3-56 component_list based pointer array dcl 3-58 component_listp automatic pointer dcl 3-55 def_count automatic fixed bin(17,0) dcl 1-173 fr_traps based structure level 1 dcl 2-90 gen_info based structure level 1 dcl 3-61 le_binaries based structure level 1 dcl 1-260 le_definitions based structure level 1 dcl 1-167 le_links based structure level 1 dcl 1-225 le_options based structure level 1 dcl 1-202 le_patches based structure level 1 dcl 1-293 le_segnames based structure level 1 dcl 1-149 link_count automatic fixed bin(17,0) dcl 1-231 linkage_header based structure level 1 dcl 2-50 linkage_header_flags based structure level 1 dcl 2-63 object_link based structure level 1 dcl 2-28 ocu_$backpatch 000000 constant entry external dcl 3-146 ocu_$close 000000 constant entry external dcl 3-76 ocu_$create_msf 000000 constant entry external dcl 3-153 ocu_$emit_definition 000000 constant entry external dcl 3-90 ocu_$emit_firstref_trap 000000 constant entry external dcl 3-134 ocu_$emit_link 000000 constant entry external dcl 3-115 ocu_$emit_msf_map 000000 constant entry external dcl 3-104 ocu_$emit_partial_link 000000 constant entry external dcl 3-126 ocu_$emit_segname 000000 constant entry external dcl 3-98 ocu_$emit_symbol 000000 constant entry external dcl 3-139 ocu_$emit_text 000000 constant entry external dcl 3-83 ocu_$open 000000 constant entry external dcl 3-69 ocu_$release 000000 constant entry external dcl 3-80 partial_link based structure level 1 dcl 2-38 reloc_str based char unaligned dcl 3-53 reloc_strl automatic fixed bin(21,0) dcl 3-51 reloc_strp automatic pointer dcl 3-50 section_nm internal static char(16) initial array unaligned dcl 1-41 segname_count automatic fixed bin(17,0) dcl 1-156 word_array based bit(36) array unaligned dcl 3-48 word_arrayl automatic fixed bin(18,0) unsigned dcl 3-46 word_arrayp automatic pointer dcl 3-45 NAME DECLARED BY EXPLICIT CONTEXT. le_emit_static_ 000055 constant entry external dcl 16 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 770 1012 671 1000 Length 1252 671 22 224 77 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME le_emit_static_ 162 external procedure is an external procedure. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME le_emit_static_ 000100 found le_emit_static_ 000101 len le_emit_static_ 000102 n_words le_emit_static_ 000103 odd le_emit_static_ 000104 original_relp le_emit_static_ 000105 pad le_emit_static_ 000125 rel le_emit_static_ 000126 rel_char le_emit_static_ 000127 relindex le_emit_static_ 000130 relinfop le_emit_static_ 000132 relp le_emit_static_ 000133 s le_emit_static_ 000134 skip le_emit_static_ 000136 statp le_emit_static_ 000140 text_relp le_emit_static_ 000141 word le_emit_static_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out return_mac ext_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. le_error_ le_util_$scan_relinfo ocu_$emit_static THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. le_et_$implementation_error le_et_$invalid_relinfo LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 16 000051 95 000062 96 000072 98 000075 99 000100 100 000104 101 000124 102 000126 106 000127 107 000131 112 000143 121 000171 122 000172 123 000174 124 000177 125 000201 126 000202 130 000203 131 000207 132 000237 134 000244 135 000246 136 000251 137 000253 138 000254 139 000256 144 000257 147 000311 148 000312 150 000321 154 000336 162 000340 163 000346 164 000363 166 000367 167 000373 172 000374 174 000376 178 000420 180 000425 182 000431 184 000452 187 000514 191 000516 193 000527 194 000550 196 000554 197 000557 198 000560 201 000610 206 000611 211 000670 ----------------------------------------------------------- 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