From 3451543e87c70c9de6eb445a2c08e5b62df8e698 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Fri, 20 Jul 1990 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1990-07-20 --- gnot/dat.h | 2 +- port/devcons.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++ port/page.c | 1 + power/dat.h | 6 ++--- power/fns.h | 1 + 5 files changed, 76 insertions(+), 4 deletions(-) diff --git a/gnot/dat.h b/gnot/dat.h index 6d3d915d8a8772e0ddad34304b2dd95bde1e198f..487ef5c6350cfce7618d7879e4509cfc31c6ae2b 100644 --- a/gnot/dat.h +++ b/gnot/dat.h @@ -454,7 +454,7 @@ enum { Sctlqid = Sdataqid-1, Slowqid = Sctlqid, Streamhi= (9*1024), /* byte count high water mark */ - Streambhi= 16, /* block count high water mark */ + Streambhi= 32, /* block count high water mark */ }; #define PRINTSIZE 256 diff --git a/port/devcons.c b/port/devcons.c index 606b9ea33fd695b6217652c4b09c60d53e0b7a6b..694b3c9d7f9bad81a008affa49db3352bca38e93 100644 --- a/port/devcons.c +++ b/port/devcons.c @@ -290,6 +290,7 @@ enum{ Qdir, Qcons, Qcputime, + Qlog, Qnull, Qpgrpid, Qpid, @@ -301,6 +302,7 @@ enum{ Dirtab consdir[]={ "cons", Qcons, 0, 0600, "cputime", Qcputime, 72, 0600, + "log", Qlog, sizeof(SYSLOG->buf), 0600, "null", Qnull, 0, 0600, "pgrpid", Qpgrpid, 12, 0600, "pid", Qpid, 12, 0600, @@ -496,6 +498,9 @@ consread(Chan *c, void *buf, long n) case Quser: return readstr(c->offset, buf, n, u->p->pgrp->user); + case Qlog: + return readlog(c->offset, buf, n); + case Qnull: return 0; @@ -588,3 +593,68 @@ consuserstr(Error *e, char *buf) { strcpy(buf, u->p->pgrp->user); } + +/* + * crash info + */ +void +sysloginit(void) +{ + Syslog *s; + char *p; + + s = SYSLOG; + if(s->magic!=SYSLOGMAGIC || s->next>=&s->buf[sizeof(s->buf)] + || s->nextbuf){ + s->next = s->buf; + s->magic = SYSLOGMAGIC; + } +} + +void +syslog(char *p, int n) +{ + int i; + Syslog *s; + char *end; + + s = SYSLOG; + end = &s->buf[sizeof(s->buf)]; + while(n-- > 0){ + *s->next++ = *p++; + if(s->next >= end) + s->next = s->buf; + } +} + +long +readlog(ulong off, char *buf, ulong n) +{ + Syslog *s; + int i; + char *p; + char *end; + + s = SYSLOG; + + /* past end */ + if(off >= sizeof(s->buf)) + return 0; + + /* trim length */ + if(off + n >= sizeof(s->buf)) + n = sizeof(s->buf) - off; + + /* point to start of area to be read */ + end = &s->buf[sizeof(s->buf)]; + p = s->next + off; + if(p > end) + p -= sizeof(s->buf); + + for(i = 0; i < n; i++){ + *buf++ = *p++; + if(p >= end) + p = s->buf; + } + return n; +} diff --git a/port/page.c b/port/page.c index f7bf7bb6ffc7846a73dc12266b18429e92103bfb..d284ee0592394791b3f993dac68716e5c6ac318b 100644 --- a/port/page.c +++ b/port/page.c @@ -493,6 +493,7 @@ segaddr(Seg *s, ulong min, ulong max) if(max < min) return 0; +if(max > 20*1024*1024) pprint("segaddr %lux\n", max); if(min != s->minva) /* can't grow down yet (stacks: fault.c) */ return 0; max = (max+(BY2PG-1)) & ~(BY2PG-1); diff --git a/power/dat.h b/power/dat.h index c693ccecdcc3555346db63e4fb3312b4d3ce791e..4ded1c5c557da090fb7015fa2c24bb1416940220 100644 --- a/power/dat.h +++ b/power/dat.h @@ -694,11 +694,11 @@ extern FPsave initfp; /* * kernel based system log, passed between crashes */ -#define SYSLOG ((Syslog *)(0x80001B00)) -#define SYSLOGMAGIC 0x12345678 +#define SYSLOG ((Syslog *)(0xa0001B00)) +#define SYSLOGMAGIC 0x87654321 struct Syslog { ulong magic; char *next; - char buf[16*1024]; + char buf[8*1024]; }; diff --git a/power/fns.h b/power/fns.h index 9f30cc64beee1670374cc406bda092be0bb5c070..4a9554429ce39ebf96d3cc6bebdbc9a18320edde 100644 --- a/power/fns.h +++ b/power/fns.h @@ -139,6 +139,7 @@ void putbq(Blist*, Block*); int putq(Queue*, Block*); void putstrn(char*, long); ulong pwait(Waitmsg*); +int readlog(ulong, char*, ulong); int readnum(ulong, char*, ulong, ulong, int); void ready(Proc*); void rooterrstr(Error*, char*);