# /* * * This is a program to analyse the contents * of the proc array, found in a dump of memory * after a crash. * * P. Ivanov. UNSW. 14-4-77. * * C. McGregor. UNSW. Jan-78. * * P. Ivanov. UNSW. April-78. */ #define UNSW #define DZ11 #include <local-system> #include <defines.h> #include <param.h> #include <proc.h> #include <tty.h> #include <user.h> #include <inode.h> #include <file.h> #ifdef AUSAM #include <passwd.h> #endif AUSAM #ifdef ZOMBIE #include <pzomb.h> #endif ZOMBIE #define NBUF 1 #include <buf.h> #include <text.h> struct tty tty; #define NOSTAT 7 /* number of status codes possible */ #define NOFLAG 8 /* number of flag codes possible */ #define NOTFLAG 2 /* number of flag codes possible */ #define NOTTYFLG 16 /* number of stty flag codes */ #define NOTTYIST 16 /* number of tty internal states */ #define MAXMEM 024000 /* the real amount of memory on this system */ #define MINSWAP 15960 /* start of swap area on this system */ #define MAXSWAP 3990+15960 /* the end of swap on this system */ #define U_PTAB "%5t%r" /* user area indent */ #define T_PTAB "%5t%r" /* text area indent */ #define S_PTAB " %r" /* stack trace indent */ #define SS_PTAB "%50t%r" /* secondary stack indent - local variables */ #define Y_PTAB " %r" /* ttydecode indent */ #define C_PTAB " %r" /* char list decode indent */ #define DEBUG if (dflg) #define WARNING if (!wflg) #define LINEWIDTH 132 /* line size for line and star */ #define TAB " %r" /* tab indent */ #define USERADR 0140000 /* present user start address */ #ifdef _1170 #define FULLPAGE 020000 #endif _1170 #ifdef BIG_UNIX #define PAGEADR 0120000 /* start address of re-mapped page */ #define KISA5 0172352 #endif int coremap[CMAPSIZ]; /* space for core allocation */ int swapmap[SMAPSIZ]; /* space for swap allocation */ char *stat[]; char *flag[NOFLAG]; char *signals[NSIG+1]; char *tflag[]; struct symtab { char st_sym[8]; int st_sz; }; struct symtab symbols[]; struct regs { int r_word0; int r_word1; int r_reg[7]; int r_kisa6; #ifdef BIG_UNIX int r_kisa5; #endif } regs; struct symbol { char s_symbol[8]; #ifndef BIG_UNIX int s_symflg; #endif #ifdef BIG_UNIX char s_symflg; char s_symseg; #endif unsigned s_symval; } names; struct map { unsigned m_size; unsigned m_addr; }; #ifdef BIG_UNIX #define MAXSEG 30 int segbase[MAXSEG]; int maxseg; #endif unsigned txtoff; char wkbuf[512]; int *regbuf; /* equivalenced to wkbuf */ int corefd; int namefd; int aflg, bflg, cflg, dflg; int fflg, gflg; int capfflg; int iflg; int kflg, lflg; int nflg; int oflg, pflg; int sflg, tflg, uflg; int wflg, xflg, yflg, zflg; int capcflg, capsflg; /* * flags: * a - dump in ascii * b - dump in bytes * c - dump in chars * C - dump the coremap * d - debugging output flag * f - decode file structure references * F - (capital F) full dump flag * i - decode inode structure references * k - expects ka6 and aps values to be given (not yet implemented) * l - list all process slots, even unassigned ones * n - give alternate namelist file (default /unix) as last arg * o - dump in octal * p - followed by digits dumps only that process * s - user structure stack trace * S - dump the swap map * t - examine forking trees * u - dump user area, including ka6 if given * w - warnings off flag * x - dump only text structures * y - dump only tty structures * z - do it all baby (very wordy) */ /* other random declarations */ struct { int hiword; int loword; }; struct { unsigned unsign; }; struct symbol nullnum;