|
|
1.1 ! root 1: #include "hostcore.h" ! 2: #include "master.pri" ! 3: #include "process.pri" ! 4: #include "symtab.pri" ! 5: #include <CC/stdio.h> ! 6: SRCFILE("kernmaster.c") ! 7: ! 8: Process *KernMaster::domakeproc(char *p, char *s, char* c) ! 9: { ! 10: return (Process*) new KernProcess(child, p, s, c); ! 11: } ! 12: ! 13: extern char *UNIX; ! 14: ! 15: KernMaster::KernMaster(SymTab *s) ! 16: { ! 17: trace( "%d.KernMaster()", this ); VOK; ! 18: pad = new Pad( (PadRcv*) this ); /* this code cannot */ ! 19: pad->options(TRUNCATE|SORTED); /* be in base ctor */ ! 20: pad->name("kpi"); ! 21: pad->banner("Kernel pi:"); ! 22: pad->makecurrent(); ! 23: core = new KernCore(0,this); ! 24: core->_symtab = s; ! 25: refresh(); ! 26: } ! 27: ! 28: void KernMaster::refresh() ! 29: { ! 30: trace( "%d.refresh()", this ); VOK; ! 31: pad->clear(); ! 32: findcores("/tmp/dump"); ! 33: findcores("/u/d"); ! 34: findcores("/usr/dumps"); ! 35: findcores("/usr1/dumps"); ! 36: findcores("/usr2/dumps"); ! 37: findcores("/usrc/dumps"); ! 38: findcores("."); ! 39: for( Process *p = child; p; p = p->sibling ) ! 40: if( p->core ) insert(p); ! 41: } ! 42: ! 43: void KernMaster::findcores(char *dir) ! 44: { ! 45: FILE *fp, *Popen(char*,char*); ! 46: void Pclose(FILE *); ! 47: char file[16], n; ! 48: int fd; ! 49: ! 50: trace( "%d.findcores(%s)", this, dir ); VOK; ! 51: fd = open(dir, 0); ! 52: if( fd < 0 ) return; ! 53: close(fd); ! 54: if( !(fp = Popen( sf("ls -t %s", dir), "r")) ) ! 55: return; ! 56: for( int i = 0; i < 5; ++i ){ ! 57: if( !fgets(file, 16, fp) ) ! 58: break; ! 59: if( 1 == sscanf(file, "vmcore.%d", &n) ) ! 60: makeproc(sf("%s/vmcore.%d",dir,n),sf("%s/unix.%d",dir,n)); ! 61: } ! 62: Pclose(fp); ! 63: } ! 64: char *KernMaster::kbd(char *s) ! 65: { ! 66: char *corep, core[64], syms[64], star = 0; ! 67: KernProcess *p; ! 68: ! 69: trace( "%d.kbd(%s)", this, s ); OK("kbd"); ! 70: while( *s == ' ' ) ++s; ! 71: while( *s==' ' ) ++s; ! 72: switch( *s ){ ! 73: case '*': ! 74: star = 1; ! 75: for( ++s; *s==' '; ++s ) {} ! 76: default: ! 77: switch( sscanf(s, "%s %s \n", corep = core, syms) ){ ! 78: case 1: syms[0] = '\0'; ! 79: case 2: p = (KernProcess*) makeproc(corep, syms[0]?syms:0, 0); ! 80: if( star && p ) p->open(); ! 81: break; ! 82: default: ! 83: return help(); ! 84: } ! 85: } ! 86: return 0; ! 87: } ! 88: ! 89: char *KernMaster::help() ! 90: { ! 91: trace( "%d.help()", this ); ! 92: return ".../vmcore.N [.../unix.N] {identify system dump}"; ! 93: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.