/*===========================================================================* * image_dmp * *===========================================================================*/ PUBLIC void image_dmp() { int m, i,j,r; struct boot_image *ip; static char ipc_to[BITCHUNK_BITS*2]; if ((r = sys_getimage(image)) != OK) { report("IS","warning: couldn't get copy of image table", r); return; } printf("Image table dump showing all processes included in system image.\n"); printf("---name-- -nr- -flags- -traps- -sq- ----pc- -stack- -ipc_to[0]--------\n"); for (m=0; m<NR_BOOT_PROCS; m++) { ip = &image[m]; for (i=j=0; i < BITCHUNK_BITS; i++, j++) { ipc_to[j] = (ip->ipc_to & (1<<i)) ? '1' : '0'; if (i % 8 == 7) ipc_to[++j] = ' '; } ipc_to[j] = '\0'; printf("%8s %4d %s %s %3d %7lu %7lu %s\n", ip->proc_name, ip->proc_nr, s_flags_str(ip->flags), s_traps_str(ip->trap_mask), ip->priority, (long)ip->initial_pc, ip->stksize, ipc_to); } printf("\n"); }
/*===========================================================================* * rproc_dmp * *===========================================================================*/ void rproc_dmp() { struct rproc *rp; struct rprocpub *rpub; int i, n=0; static int prev_i=0; if (getsysinfo(RS_PROC_NR, SI_PROCPUB_TAB, rprocpub, sizeof(rprocpub)) != OK || getsysinfo(RS_PROC_NR, SI_PROC_TAB, rproc, sizeof(rproc)) != OK) { printf("Error obtaining table from RS. Perhaps recompile IS?\n"); return; } printf("Reincarnation Server (RS) system process table dump\n"); printf("----label---- endpoint- -pid- flags- -dev- -T- alive_tm starts command\n"); for (i=prev_i; i<NR_SYS_PROCS; i++) { rp = &rproc[i]; rpub = &rprocpub[i]; if (! (rp->r_flags & RS_IN_USE)) continue; if (++n > 22) break; printf("%13s %9d %5d %6s %3d/%1d %3ld %8ld %5dx %s", rpub->label, rpub->endpoint, rp->r_pid, s_flags_str(rp->r_flags, rpub->sys_flags), rpub->dev_nr, rpub->dev_style, rp->r_period, rp->r_alive_tm, rp->r_restarts, rp->r_args ); printf("\n"); } if (i >= NR_SYS_PROCS) i = 0; else printf("--more--\r"); prev_i = i; }
/*===========================================================================* * rproc_dmp * *===========================================================================*/ PUBLIC void rproc_dmp() { struct rproc *rp; int i,j, n=0; static int prev_i=0; getsysinfo(RS_PROC_NR, SI_PROC_TAB, rproc); printf("Reincarnation Server (RS) system process table dump\n"); printf("-----proc---pid-flag--dev- -T---checked----alive-starts-backoff-command (argc)-\n"); for (i=prev_i; i<NR_SYS_PROCS; i++) { rp = &rproc[i]; if (! rp->r_flags & RS_IN_USE) continue; if (++n > 22) break; printf("%9d %5d %s %3d/%2d %3u %8u %8u %4dx %3d %s (%d)", rp->r_proc_nr_e, rp->r_pid, s_flags_str(rp->r_flags), rp->r_dev_nr, rp->r_dev_style, rp->r_period, rp->r_check_tm, rp->r_alive_tm, rp->r_restarts, rp->r_backoff, rp->r_cmd, rp->r_argc ); printf("\n"); } if (i >= NR_SYS_PROCS) i = 0; else printf("--more--\r"); prev_i = i; }
/*===========================================================================* * privileges_dmp * *===========================================================================*/ PUBLIC void privileges_dmp() { register struct proc *rp; static struct proc *oldrp = BEG_PROC_ADDR; register struct priv *sp; static char ipc_to[NR_SYS_PROCS + 1 + NR_SYS_PROCS/8]; int r, i,j, n = 0; /* First obtain a fresh copy of the current process and system table. */ if ((r = sys_getprivtab(priv)) != OK) { report("IS","warning: couldn't get copy of system privileges table", r); return; } if ((r = sys_getproctab(proc)) != OK) { report("IS","warning: couldn't get copy of process table", r); return; } printf("\n--nr-id-name---- -flags- -traps- -ipc_to mask------------------------ \n"); for (rp = oldrp; rp < END_PROC_ADDR; rp++) { if (isemptyp(rp)) continue; if (++n > 23) break; if (proc_nr(rp) == IDLE) printf("(%2d) ", proc_nr(rp)); else if (proc_nr(rp) < 0) printf("[%2d] ", proc_nr(rp)); else printf(" %2d ", proc_nr(rp)); r = -1; for (sp = &priv[0]; sp < &priv[NR_SYS_PROCS]; sp++) if (sp->s_proc_nr == rp->p_nr) { r ++; break; } if (r == -1 && ! (rp->p_rts_flags & SLOT_FREE)) { sp = &priv[USER_PRIV_ID]; } printf("(%02u) %-7.7s %s %s ", sp->s_id, rp->p_name, s_flags_str(sp->s_flags), s_traps_str(sp->s_trap_mask) ); for (i=j=0; i < NR_SYS_PROCS; i++, j++) { ipc_to[j] = get_sys_bit(sp->s_ipc_to, i) ? '1' : '0'; if (i % 8 == 7) ipc_to[++j] = ' '; } ipc_to[j] = '\0'; printf(" %s \n", ipc_to); } if (rp == END_PROC_ADDR) rp = BEG_PROC_ADDR; else printf("--more--\r"); oldrp = rp; }
/*===========================================================================* * privileges_dmp * *===========================================================================*/ void privileges_dmp() { register struct proc *rp; static struct proc *oldrp = BEG_PROC_ADDR; register struct priv *sp; int r, i; /* First obtain a fresh copy of the current process and system table. */ if ((r = sys_getprivtab(priv)) != OK) { printf("IS: warning: couldn't get copy of system privileges table: %d\n", r); return; } if ((r = sys_getproctab(proc)) != OK) { printf("IS: warning: couldn't get copy of process table: %d\n", r); return; } printf("-nr- -id- -name-- -flags- traps grants -ipc_to--" " -kernel calls-\n"); PROCLOOP(rp, oldrp) r = -1; for (sp = &priv[0]; sp < &priv[NR_SYS_PROCS]; sp++) if (sp->s_proc_nr == rp->p_nr) { r ++; break; } if (r == -1 && !isemptyp(rp)) { sp = &priv[USER_PRIV_ID]; } printf("(%02u) %-7.7s %s %s %6d", sp->s_id, rp->p_name, s_flags_str(sp->s_flags), s_traps_str(sp->s_trap_mask), sp->s_grant_entries); for (i=0; i < NR_SYS_PROCS; i += BITCHUNK_BITS) { printf(" %08x", get_sys_bits(sp->s_ipc_to, i)); } printf(" "); for (i=0; i < NR_SYS_CALLS; i += BITCHUNK_BITS) { printf(" %08x", sp->s_k_call_mask[i/BITCHUNK_BITS]); } printf("\n"); }