" " Begin include file ...... proc.incl.alm " Modified 6/30/77 by Noel I. Morris " Dump option feature by bsg 12/11/78 " Modified 4/30/80 by J. A. Bush to add ELIG, PP, and DIRS keywords " Modified by Sherman D. Sprague 02/11/81 for DPS8 support. " Modified April 1981 by J. Bongiovanni for picking up apte size from tc_data equ dir_modify,0 directory header modify word " ****** THE FOLLOWING EQU'S MAY HAVE TO BE CHANGED IF TC_DATA IS REASSEMBLED. ****** bool default_aptorg,400 origin of array of APT entries in tc_data bool aptoff,253 word containing offset of origin of APT entries bool aptsize,313 loc'n containing # of APT entries bool aptentsize,327 location containing size of an APTE proc: stx2 pcx2 here to dumpprocesses stx1 pcx2+1 stx0 pcx2+2 stx3 pcx2+3 ldaq cmdbr save current dbr staq pcdbr tsx2 printreg print regs once eax7 nsegbitab say no segments dumped csl (),(rl),bool(00) descb *,0 descb segbitab,x7 stc1 pcfirst first proc, dump unpaged segs stz pcddbr We havent dumped the cmdbr yet tsx2 sltsearch search the SLT to find tc_data arg tcd_name tra pcer lrl 36-1 move to QU and multiply by 2 tsx2 apnd fetch the SDW for tc_data arg hcdbr arg pcer ldaq fetchout,* staq aptsdw tsx2 grab get information from tc_data zero pclist using list tra pcer eaa default_aptorg default origin in AU stac aptorg if cell was zero, use default lda size_of_apt_entry,dl default size of APTE stac pcaptsize if cell was zero, use default tsx2 sltsearch search for dseg arg dseg_name tra pcer sta dseg_no tsx2 sltsearch search for pds arg pds_name tra pcer sta pds_no tsx2 sltsearch search for prds arg prds_name tra pcer sta prds_no tsx2 sltsearch search for kst_seg arg kst_name tra pcer sta kst_no " " Select the segment dumping options. stz pcallopt Init the option collectors. stz pcelgopt stz pcinzopt stz pcrunopt lda arg+1 Check for default and old compatibility eax2 0 rpt pcnmacroopts,4,tze checking for fdump with no args, fdump short cmpa pcmacroopttbl,2 or fdump long ttn pcnmacop xfer if not macro-op lda -3,2 Load running process options sta pcrunopt and save lda -2,2 Load eligible process options sta pcelgopt and save lda -1,2 Load all process options sta pcallopt and save tra pcmrgop pcnmacop: eax3 1 Parse RUN, ELIG and ALL ctlargs. lda arg,3 Start at arg+1 and check major word. pcselmaj: eax2 0 Scan for major keywords rpt pcnmajoropts,2,tze cmpa pcmajoropttbl,2 ttn pcseler must be error if no compare ldx1 -1,2 Get or-ing word address tnz pcselmin Wasn't fence. pcmrgop: lda pcallopt Merge all and eligible options down orsa pcelgopt i.e. all processes includes eligible lda pcelgopt and running processes orsa pcrunopt tra pc_begin_dumping pcselmin: eax3 1,3 get next arg lda arg,3 eax2 0 rpt pcnminorkeys,2,tze cmpa pcminorkeys,2 ttn pcselmaj not minor keyword, go look for major ldq -1,2 orsq 0,1 Or into control opt word. tra pcselmin pcseler: tsx2 erpt acc "Syntax error in segment selecting keywords." tra pcer " " " Dumping option tables " even bool dopt.hc,000001 bool dopt.pp,000002 bool dopt.dirs,000004 bool dopt.stk,000010 bool dopt.write,000020 pcmacroopttbl: bci " short" zero dopt.hc+dopt.pp+dopt.dirs,0 RUN HC PP DIRS zero dopt.hc,0 ELIG HC zero 0,0 No All options bci " long" zero 0,0 Running process options zero 0,0 Eligible process options zero dopt.write,0 ALL WRIT oct 777777777777 fdump with no args (fence) zero dopt.hc+dopt.pp+dopt.dirs,0 RUN HC PP DIRS zero 0,0 No eligible options zero 0,0 no all options equ pcnmacroopts,(*-pcmacroopttbl)/4 pcmajoropttbl: bci " run" zero pcrunopt bci " elig" zero pcelgopt bci " inzr" zero pcinzopt bci " all" zero pcallopt oct 777777777777 argument fence zero 0 equ pcnmajoropts,(*-pcmajoropttbl)/2 pcminorkeys: bci " hc" zero dopt.hc,0 bci " pp" zero dopt.pp,0 bci " dirs" zero dopt.dirs,0 bci "stacks" zero dopt.stk,0 bci " writ" zero dopt.write,0 equ pcnminorkeys,(*-pcminorkeys)/2 pcrunopt: oct 0 Opts for running procs pcelgopt: oct 0 opts for eligible procs pcinzopt: oct 0 Opts for initializer process pcallopt: oct 0 Opts for all procs pcopt: oct 0 Selected options, for current process " pc_begin_dumping: lda 1,dl start at proc 1 pclp: cmpa pcnapt any more APT entries? tpnz pcer exit loop if not sta pcno store process number eaq -1,al mpy pcaptsize compute index to this APT entry adlq aptorg add offset of origin stq pcapte save this pointer eaq apte.dbr,qu tsx2 apnd Then get DBR from APT. arg aptsdw tra pcer ldaq fetchout,* staq cmdbr qls 36-14 get the stack base qrl 1 stq pcstklim era pcdbr If old dbr, print it. ana =o777777770000 tnz pcproc stc1 pcddbr Mark dumped so we won't do it at end tra pcsetrun this is a running process, go pick up option word pcproc: eaq pcapte,* QU -> APT entry eaq apte.state,qu Get state of process and switches. tsx2 apnd arg aptsdw tra pcer lda fetchout,* get flags and state ldq -1,du set mask to look at lower half of word only cmk empty,dl ignore if zero state tze pcle szn pcrunopt Do we want to dump running procs? tze pcckelg xfer if no cana apte.dbr_loaded,du dbr loaded? tnz pcsetrun This is running proc cmk stopped,dl Stopped proc? tze pcsetrun yes, treat like running proc pcckelg: cana apte.eligible,du is this an eligible process? tze pcsetall no, go get all option word lda pcelgopt get eligible options tra pcsavopt pcsetall: lda pcallopt no, must be all option word tra pcsavopt pcsetrun: lda pcrunopt pcsavopt: ldq pcno check to see if initializer proc cmpq 1,dl if first proc, its the initializer tnz pcnoinzr no, some other proc ora pcinzopt yes, or in inzr option word pcnoinzr: ada 0,dl add zero to set (or reset) zero ind. tze pcle no dumpage for this option set sta pcopt save option word " pcnoc: tsx2 erpt print out what we are doing acc 'proc ^o, dbr = ^w, ^w' arg pcno arg cmdbr arg cmdbr+1 tsx2 getinit tsx2 descrseg eax1 0 x1 is segno psegl: stx1 segno lda segno segment # in AU tsx2 getsdw get SDW tra pcosdone error tra pcled end of descseg staq pcsdw save SDW of segment ldx3 pcopt load current process dumping options canx3 dopt.hc,du HC option in effect? tze pcnohcop no don't bother eax2 0 see if this seg gets dumped ldq segno .. rpt pcshnon,1,tze .. cmpq pcshno,2 if in list ttf pcosegp then dump it pcnohcop: ldq pcsdw+1 get second word of SDW canq sdw.write,du Check for write permit tze pcosdone if not, don't dump szn pcstklim no stack base? (idle process) tze pckfproc yes, check if first proc dump`ed cmpx1 pcstklim is current seg hc? tpl pckstkop no not hc seg go check stack option pckfproc: szn pcfirst is this first process dumped? tnz pcosegp yes, go dump hc segs tra pcosdone no, don't dump this seg pckstkop: canx3 dopt.stk,du is STK option in force? tze pcdmpunique no, go check other options eaa 0,1 yes, copy segno into a reg sba pcstklim is this a stack seg? cmpa 8,du if range is 0 to 7 yes it is tmi pcosegp xfer if yes, dump seg pcdmpunique: "dump if not already dumped. canq sdw.unpaged,dl If not paged tnz pcosegp dump unpaged segs lda pcsdw reload sements sdw address sbla sstsdw get ast index als 6 in AU ana -1,du .. sta rel_pt_add save page table address canx3 dopt.write,du if write option on byspass PP & DIRS check tnz pcnockdirs canx3 dopt.pp,du is PP option set? tze pcckdirs no, go check DIRS options eaq 0,au copy rel page table address to qu sblq aste_size,du get aste address eaq aste.per_process_word,qu get pp flag from aste tsx2 apnd arg sstsdw tra pcer ldaq fetchout,* get the per-process flag cana aste.per_process,du is this a per-process seg? tnz pcnockdirs yes, go make further checks pcckdirs: canx3 dopt.dirs,du is DIRS option set? tze pcosdone xfer if no. This seg will not be dumped. ldq rel_pt_add reload segs page table base sblq aste_size,du get aste address eaq aste.dirsw_word,qu get dirsw flag from aste tsx2 apnd arg sstsdw tra pcer lda fetchout,* get dirsw word cana aste.dirsw,dl is this a directory seg? tze pcosdone xfer if no. don't dump this seg eaq dir_modify get dir modified word tsx2 apnd arg pcsdw tra pcer szn fetchout,* has the dir been modified? tze pcosdone xfer if no. don't dump this seg pcnockdirs: lda rel_pt_add reload segs page table base sbla castap,* cana =o3,du all page tables start at 0 mod 4 tnz pcosegp arl 18+4 divide by 16 to get bit table index cmpa nsegbitab,dl this code assumes that min size of ASTE + PT = 16 tpl pcosegp sztl (),(al),bool(05) test bit descb *,0 descb segbitab,1 tnz pcosdone if on, skip the segment csl (),(al),bool(17) turn the bit on descb *,0 descb segbitab,1 pcosegp: tsx2 segprint print seg tra *+1 ignore errors pcosdone: eax1 1,1 go to next seg tra psegl pcled: stz pcfirst pcle: lda pcno get process number ada 1,dl increment tra pclp and loop pcer: szn pcddbr if process in machine conditions tnz pcx2 hasn't been dumped, then do it stc1 pcddbr only once. stz pcno stz pcnapt tra pcnoc pcx2: eax2 * restore and return eax1 * eax0 * eax3 * ldaq pcdbr restor dbr staq cmdbr tra 0,2 " pcfirst: arg * if on, dumping first proc pcno: oct 0 pcapte: oct 0 rel. pointer to APT entry rel_pt_add: oct 0 rel address of segments page table in sst seg tcd_name: dec 7 aci "tc_data " pclist: arg aptoff aptorg: bss ,1 offset of origin of APTE array arg aptsize pcnapt: bss ,1 number of entries in array arg aptentsize pcaptsize: bss ,1 size of an APTE dec -1 even aptsdw: oct 0,0 pcsdw: oct 0,0 pcdbr: oct 0,0 pcrptadd: oct 0 temp storage for segments rel page table address pcshno: dseg_no: bss ,1 pds_no: bss ,1 prds_no: bss ,1 kst_no: bss ,1 pcstklim: zero 0,0 upper is stack segno. equ pcshnon,*-pcshno dseg_name:dec 4 aci 'dseg' pds_name: dec 3 aci 'pds ' prds_name:dec 4 aci 'prds' kst_name: dec 7 aci 'kst_seg ' pcddbr: oct 0 non-zero if cmdbr has been dumped equ nsegbitab,2880 max length of ast/16 segbitab: bss ,(nsegbitab+35)/36 " End of include file ...... proc.incl.alm " " " ----------------------------------------------------------- " " " " 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 " "