aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Waterman <waterman@s141.Millennium.Berkeley.EDU>2010-12-29 18:38:28 -0800
committerAndrew Waterman <waterman@s141.Millennium.Berkeley.EDU>2010-12-29 18:38:28 -0800
commit5490b1d62710f5cf485e3ccf711bc462b9a52623 (patch)
treecc24f8b929fdba9a2550d43bfa00c41c8e54b69e
parent37ed1d3297fcb84c67040a9bcebbfc2274f62735 (diff)
downloadpk-5490b1d62710f5cf485e3ccf711bc462b9a52623.zip
pk-5490b1d62710f5cf485e3ccf711bc462b9a52623.tar.gz
pk-5490b1d62710f5cf485e3ccf711bc462b9a52623.tar.bz2
[pk] send stdout/stderr to both fesvr and debug console
-rw-r--r--pk/file.c11
-rw-r--r--pk/file.h6
-rw-r--r--pk/pcr.h1
-rw-r--r--pk/pk.c2
4 files changed, 13 insertions, 7 deletions
diff --git a/pk/file.c b/pk/file.c
index febd9f7..e35256e 100644
--- a/pk/file.c
+++ b/pk/file.c
@@ -3,6 +3,7 @@
#include "file.h"
#include "pk.h"
#include "frontend.h"
+#include "pcr.h"
#define MAX_FDS 128
file_t* fds[MAX_FDS];
@@ -112,13 +113,19 @@ int fd_close(int fd)
return 0;
}
-sysret_t file_read(file_t* f, void* buf, size_t size)
+sysret_t file_read(file_t* f, char* buf, size_t size)
{
return frontend_syscall(SYS_read,f->kfd,(long)buf,size,0);
}
-sysret_t file_write(file_t* f, const void* buf, size_t size)
+sysret_t file_write(file_t* f, const char* buf, size_t size)
{
+ if(f->kfd == 1 || f->kfd == 2)
+ {
+ for(size_t i = 0; i < size; i++)
+ mtpcr(buf[i],PCR_CONSOLE);
+ }
+
return frontend_syscall(SYS_write,f->kfd,(long)buf,size,0);
}
diff --git a/pk/file.h b/pk/file.h
index 95bf02c..b98092c 100644
--- a/pk/file.h
+++ b/pk/file.h
@@ -17,14 +17,12 @@ file_t* file_get(int fd);
sysret_t file_open(const char* fn, size_t len, int flags, int mode);
int file_dup(file_t*);
-sysret_t file_write(file_t* f, const void* buf, size_t n);
-sysret_t file_read(file_t* f, void* buf, size_t n);
+sysret_t file_write(file_t* f, const char* buf, size_t n);
+sysret_t file_read(file_t* f, char* buf, size_t n);
sysret_t file_stat(file_t* f, struct stat* s);
sysret_t file_lseek(file_t* f, size_t ptr, int dir);
int fd_close(int fd);
void file_init();
-#define cons_write(buf,sz) file_write(stdout,buf,sz)
-
#endif
diff --git a/pk/pcr.h b/pk/pcr.h
index 144b12c..fb0d1bf 100644
--- a/pk/pcr.h
+++ b/pk/pcr.h
@@ -20,6 +20,7 @@
#define PCR_CAUSE 6
#define PCR_TOHOST 16
#define PCR_FROMHOST 17
+#define PCR_CONSOLE 18
#define PCR_K0 24
#define PCR_K1 25
diff --git a/pk/pk.c b/pk/pk.c
index e9e3e71..bb0b555 100644
--- a/pk/pk.c
+++ b/pk/pk.c
@@ -87,7 +87,7 @@ void printk(const char* s, ...)
char out[1024]; // XXX
vsprintk(out,s,vl);
- cons_write(out,strlen(out));
+ file_write(stderr,out,strlen(out));
va_end(vl);
}