M port/devcons.c => port/devcons.c +1 -0
@@ 89,6 89,7 @@ putstrn(char *str, int n)
s = splhi();
lock(&printq);
+ syslog(str, n);
while(n > 0){
if(*str == '\n')
puts("\r", 1);
M power/dat.h => power/dat.h +13 -0
@@ 37,6 37,7 @@ typedef struct Seg Seg;
typedef struct Stream Stream;
typedef struct Ureg Ureg;
typedef struct User User;
+typedef struct Syslog Syslog;
typedef int Devgen(Chan*, Dirtab*, int, int, Dir*);
@@ 689,3 690,15 @@ extern ulong initcode[];
extern Dev devtab[];
extern char devchar[];
extern FPsave initfp;
+
+/*
+ * kernel based system log, passed between crashes
+ */
+#define SYSLOG ((Syslog *)(0x80001B00))
+#define SYSLOGMAGIC 0x12345678
+struct Syslog
+{
+ ulong magic;
+ char *next;
+ char buf[16*1024];
+};
M power/fns.h => power/fns.h +2 -0
@@ 172,6 172,8 @@ void streamopen(Chan*, Qinfo*);
int streamparse(char*, Block*);
long stringread(Chan*, void*, long, char*);
long syscall(Ureg*);
+void sysloginit(void);
+void syslog(char*, int);
void tlbinit(void);
void touser(void *);
void tsleep(Rendez*, int (*)(void*), void*, int);
M power/io.h => power/io.h +1 -1
@@ 77,4 77,4 @@ struct INTVEC {
#define IO2MASK IO2(ushort, 0xFE8000)
#define MPBERR0 IO2(ulong, 0xF48000)
#define MPBERR1 IO2(ulong, 0xF4C000)
-#define SBEADDR ((ulong *)(UNCACHED|0x1f080000))
+#define SBEADDR ((ulong *)(UNCACHED|0x1F080000))
M power/main.c => power/main.c +1 -0
@@ 57,6 57,7 @@ main(void)
io2init();
chandevreset();
streaminit();
+ sysloginit();
pageinit();
userinit();
launchinit();