diff --git a/pipe.c b/pipe.c index b866a0e..a207df1 100644 --- a/pipe.c +++ b/pipe.c @@ -45,6 +45,7 @@ pipe_alloc(struct file **f0, struct file **f1) (*f1)->writable = 1; (*f1)->pipe = p; return 0; + oops: if(p) kfree((char*) p, PAGE); @@ -78,6 +79,7 @@ pipe_close(struct pipe *p, int writable) kfree((char*) p, PAGE); } +//PAGEBREAK: 20 int pipe_write(struct pipe *p, char *addr, int n) { @@ -117,7 +119,6 @@ pipe_read(struct pipe *p, char *addr, int n) } sleep(&p->readp, &p->lock); } - for(i = 0; i < n; i++){ if(p->readp == p->writep) break; diff --git a/runoff b/runoff index 919d837..092c8b6 100755 --- a/runoff +++ b/runoff @@ -35,6 +35,7 @@ pr -e8 -t runoff.list | awk ' close(f) n=$1 printf("%02d %s\n", n/100, s); + printf("TOC: %04d %s\n", n, s) >"fmt/tocdata" next } { @@ -42,6 +43,48 @@ pr -e8 -t runoff.list | awk ' }' | pr -3 -t >>fmt/toc cat toc.ftr >>fmt/toc +# check for bad alignments +perl -e ' + while(<>){ + chomp; + s!#.*!!; + s!\s+! !g; + s! +$!!; + next if /^$/; + + if(/TOC: (\d+) (.*)/){ + $toc{$2} = $1; + next; + } + + if(/even: (.*)/){ + $file = $1; + if(!defined($toc{$file})){ + print STDERR "Have no toc for $file\n"; + next; + } + if($toc{$file} =~ /^\d\d[^0]/){ + print STDERR "$file does not start on a fresh page.\n"; + } + next; + } + + if(/odd: (.*)/){ + $file = $1; + if(!defined($toc{$file})){ + print STDERR "Have no toc for $file\n"; + next; + } + if($toc{$file} =~ /^\d\d[^5]/){ + print STDERR "$file does not start on a second half page.\n"; + } + next; + } + + print STDERR "Unknown spec: $_\n"; + } +' fmt/tocdata runoff.spec + # make definition list cd fmt perl -e ' diff --git a/runoff.spec b/runoff.spec new file mode 100644 index 0000000..53e98ee --- /dev/null +++ b/runoff.spec @@ -0,0 +1,11 @@ +even: mmu.h +even: bootasm.S +even: bootother.S +even: bootmain.c +even: main.c +even: spinlock.c +even: proc.h +even: proc.c +odd: kalloc.c +even: trap.c +odd: bio.c diff --git a/show1 b/show1 new file mode 100755 index 0000000..3637c72 --- /dev/null +++ b/show1 @@ -0,0 +1,3 @@ +#!/bin/sh + +runoff1 "$@" | pr.pl -h "xv6/$@" | mpage -m50t50b -o -bLetter -T -t -2 -FCourier -L60 >x.ps; gv --swap x.ps diff --git a/syscall.c b/syscall.c index d697337..7f4caa1 100644 --- a/syscall.c +++ b/syscall.c @@ -98,6 +98,7 @@ extern int sys_kill(void); extern int sys_link(void); extern int sys_mkdir(void); extern int sys_mknod(void); +//PAGEBREAK: 0 extern int sys_open(void); extern int sys_pipe(void); extern int sys_read(void); diff --git a/trap.c b/trap.c index 1faa49e..43b5a42 100644 --- a/trap.c +++ b/trap.c @@ -40,11 +40,11 @@ trap(struct trapframe *tf) return; } - // PAGEBREAK: 10 // Increment nlock to make sure interrupts stay off // during interrupt handler. Decrement before returning. cpus[cpu()].nlock++; + // PAGEBREAK: 10 switch(tf->trapno){ case IRQ_OFFSET + IRQ_TIMER: lapic_timerintr(); @@ -80,8 +80,8 @@ trap(struct trapframe *tf) default: if(cp) { // Assume process divided by zero or dereferenced null, etc. - cprintf("pid %d %s: unhandled trap %d on cpu %d eip %x -- kill proc\n", - cp->pid, cp->name, tf->trapno, cpu(), tf->eip); + cprintf("pid %d %s: unhandled trap %d err %d on cpu %d eip %x -- kill proc\n", + cp->pid, cp->name, tf->trapno, tf->err, cpu(), tf->eip); proc_exit(); }