summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile12
-rw-r--r--kernel/entry.S7
-rw-r--r--kernel/proc.c2
-rw-r--r--kernel/spinlock.c2
-rwxr-xr-xrunoff249
-rw-r--r--runoff.list66
-rw-r--r--runoff.spec102
-rwxr-xr-xrunoff1108
-rw-r--r--toc.ftr13
-rw-r--r--toc.hdr6
10 files changed, 7 insertions, 560 deletions
diff --git a/Makefile b/Makefile
index f98f03a..7f6d032 100644
--- a/Makefile
+++ b/Makefile
@@ -143,16 +143,6 @@ clean:
$U/usys.S \
$(UPROGS)
-# make a printout
-FILES = $(shell grep -v '^\#' runoff.list)
-PRINT = runoff.list runoff.spec README toc.hdr toc.ftr $(FILES)
-
-xv6.pdf: $(PRINT)
- ./runoff
- ls -l xv6.pdf
-
-print: xv6.pdf
-
# try to generate a unique GDB port
GDBPORT = $(shell expr `id -u` % 5000 + 25000)
# QEMU's gdb stub command line changed in 0.11
@@ -185,7 +175,7 @@ EXTRA=\
mkfs.c ulib.c user.h cat.c echo.c forktest.c grep.c kill.c\
ln.c ls.c mkdir.c rm.c stressfs.c usertests.c wc.c zombie.c\
printf.c umalloc.c\
- README dot-bochsrc *.pl toc.* runoff runoff1 runoff.list\
+ README dot-bochsrc *.pl \
.gdbinit.tmpl gdbutil\
dist:
diff --git a/kernel/entry.S b/kernel/entry.S
index b3d2c55..97eaf11 100644
--- a/kernel/entry.S
+++ b/kernel/entry.S
@@ -2,7 +2,7 @@
# there seem to be provided by qemu, as if it
# were a ROM. the code at 0x1000 jumps to
# 0x8000000, the _start function here,
- # in machine mode.
+ # in machine mode. each CPU starts here.
.section .data
.globl stack0
.section .text
@@ -11,8 +11,9 @@
.globl _entry
_entry:
# set up a stack for C.
- # stack0 is declared in start,
- # with 4096 bytes per CPU.
+ # stack0 is declared in start.c,
+ # with a 4096-byte stack per CPU.
+ # sp = stack0 + (hartid * 4096)
la sp, stack0
li a0, 1024*4
csrr a1, mhartid
diff --git a/kernel/proc.c b/kernel/proc.c
index 81c0e98..cebef1a 100644
--- a/kernel/proc.c
+++ b/kernel/proc.c
@@ -46,7 +46,7 @@ cpuid()
return id;
}
-// Return this core's cpu struct.
+// Return this CPU's cpu struct.
// Interrupts must be disabled.
struct cpu*
mycpu(void) {
diff --git a/kernel/spinlock.c b/kernel/spinlock.c
index 83512bb..563532e 100644
--- a/kernel/spinlock.c
+++ b/kernel/spinlock.c
@@ -52,7 +52,7 @@ release(struct spinlock *lk)
// Tell the C compiler and the CPU to not move loads or stores
// past this point, to ensure that all the stores in the critical
- // section are visible to other cores before the lock is released.
+ // section are visible to other CPUs before the lock is released.
// On RISC-V, this turns into a fence instruction.
__sync_synchronize();
diff --git a/runoff b/runoff
deleted file mode 100755
index c6580ca..0000000
--- a/runoff
+++ /dev/null
@@ -1,249 +0,0 @@
-#!/bin/sh
-
-echo This script takes a minute to run. Be patient. 1>&2
-
-LC_CTYPE=C export LC_CTYPE
-
-# pad stdin to multiple of 120 lines
-pad()
-{
- awk '{print} END{for(; NR%120!=0; NR++) print ""}'
-}
-
-# create formatted (numbered) files
-mkdir -p fmt
-mkdir -p fmt/kernel
-mkdir -p fmt/user
-rm -f fmt/kernel/*
-rm -f fmt/user/*
-cp README fmt
-echo > fmt/blank
-files=`grep -v '^#' runoff.list | awk '{print $1}'`
-n=99
-for i in $files
-do
- ./runoff1 -n $n $i >fmt/$i
- nn=`tail -1 fmt/$i | sed 's/ .*//; s/^0*//'`
- if [ "x$nn" != x ]; then
- n=$nn
- fi
-done
-
-# create table of contents
-cat toc.hdr >fmt/toc
-pr -e8 -t runoff.list | awk '
-/^[a-z0-9]/ {
- s=$0
- f="fmt/"$1
- getline<f
- close(f)
- n=$1
- printf("%02d %s\n", n/100, s);
- printf("TOC: %04d %s\n", n, s) >"fmt/tocdata"
- next
-}
-{
- print
-}' | pr -3 -t >>fmt/toc
-cat toc.ftr >>fmt/toc
-
-# check for bad alignments
-perl -e '
- $leftwarn = 0;
- while(<>){
- chomp;
- s!#.*!!;
- s!\s+! !g;
- s! +$!!;
- next if /^$/;
-
- if(/TOC: (\d+) (.*)/){
- $toc{$2} = $1;
- next;
- }
-
- if(/sheet1: (left|right)$/){
- print STDERR "assuming that sheet 1 is a $1 page. double-check!\n";
- $left = $1 eq "left" ? "13579" : "02468";
- $right = $1 eq "left" ? "02468" : "13579";
- 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\d5/){
- print STDERR "$file does not start on a second half page.\n";
- }
- next;
- }
-
- if(/(left|right): (.*)/){
- $what = $1;
- $file = $2;
- if(!defined($toc{$file})){
- print STDERR "Have no toc for $file\n";
- next;
- }
- if($what eq "left" && !($toc{$file} =~ /^\d[$left][05]/)){
- print STDERR "$file does not start on a left page [$toc{$file}]\n";
- }
- # why does this not work if I inline $x in the if?
- $x = ($toc{$file} =~ /^\d[$right][05]/);
- if($what eq "right" && !$x){
- print STDERR "$file does not start on a right page [$toc{$file}] [$x]\n";
- }
- next;
- }
-
- print STDERR "Unknown spec: $_\n";
- }
-' fmt/tocdata runoff.spec
-
-# make definition list
-cd fmt
-perl -e '
- while(<>) {
- chomp;
-
- s!//.*!!;
- s!/\*([^*]|[*][^/])*\*/!!g;
- s!\s! !g;
- s! +$!!;
-
- # look for declarations like char* x;
- if (/^[0-9]+ typedef .* u(int|short|long|char);/) {
- next;
- }
- if (/^[0-9]+ extern/) {
- next;
- }
- if (/^[0-9]+ struct [a-zA-Z0-9_]+;/) {
- next;
- }
- if (/^([0-9]+) #define +([A-za-z0-9_]+) +?\(.*/) {
- print "$1 $2\n"
- }
- elsif (/^([0-9]+) #define +([A-Za-z0-9_]+) +([^ ]+)/) {
- print "$1 $2 $3\n";
- }
- elsif (/^([0-9]+) #define +([A-Za-z0-9_]+)/) {
- print "$1 $2\n";
- }
-
- if(/^^([0-9]+) \.globl ([a-zA-Z0-9_]+)/){
- $isglobl{$2} = 1;
- }
- if(/^^([0-9]+) ([a-zA-Z0-9_]+):$/ && $isglobl{$2}){
- print "$1 $2\n";
- }
-
- if (/\(/) {
- next;
- }
-
- if (/^([0-9]+) (((static|struct|extern|union|enum) +)*([A-Za-z0-9_]+))( .*)? +([A-Za-z_][A-Za-z0-9_]*)(,|;|=| =)/) {
- print "$1 $7\n";
- }
-
- elsif(/^([0-9]+) (enum|struct|union) +([A-Za-z0-9_]+) +{/){
- print "$1 $3\n";
- }
- # TODO: enum members
- }
-' $files >defs
-
-(for i in $files
-do
- case "$i" in
- *.S)
- cat $i | sed 's;#.*;;; s;//.*;;;'
- ;;
- *)
- cat $i | sed 's;//.*;;; s;"([^"\\]|\\.)*";;;'
- esac
-done
-) >alltext
-
-perl -n -e 'print if s/^([0-9]+ [a-zA-Z0-9_]+)\(.*$/\1/;' alltext |
- egrep -v ' (STUB|usage|main|if|for)$' >>defs
-#perl -n -e 'print if s/^([0-9]+) STUB\(([a-zA-Z0-9_]+)\)$/\1 \2/;' alltext \
-# >>defs
-(
->s.defs
-
-# make reference list
-for i in `awk '{print $2}' defs | sort -f | uniq`
-do
- defs=`egrep '^[0-9]+ '$i'( |$)' defs | awk '{print $1}'`
- echo $i $defs >>s.defs
- uses=`egrep -h '([^a-zA-Z_0-9])'$i'($|[^a-zA-Z_0-9])' alltext | awk '{print $1}'`
- if [ "x$defs" != "x$uses" ]; then
- echo $i $defs
- echo $uses |fmt -29 | sed 's/^/ /'
-# else
-# echo $i defined but not used >&2
- fi
-done
-) >refs
-
-# build defs list
-awk '
-{
- printf("%04d %s\n", $2, $1);
- for(i=3; i<=NF; i++)
- printf("%04d \" \n", $i);
-}
-' s.defs > t.defs
-
-# format the whole thing
-(
- ../pr.pl README
- ../pr.pl -h "table of contents" toc
- # pr -t -2 t.defs | ../pr.pl -h "definitions" | pad
- pr -t -l50 -2 refs | ../pr.pl -h "cross-references" | pad
- # pr.pl -h "definitions" -2 t.defs | pad
- # pr.pl -h "cross-references" -2 refs | pad
- ../pr.pl blank # make sheet 1 start on left page
- ../pr.pl blank
- for i in $files
- do
- ../pr.pl -h "xv6/$i" $i
- done
-) | mpage -m50t50b -o -bLetter -T -t -2 -FCourier -L60 >all.ps
-grep Pages: all.ps
-
-# if we have the nice font, use it
-nicefont=LucidaSans-Typewriter83
-if [ ! -f ../$nicefont ]
-then
- if git cat-file blob font:$nicefont > ../$nicefont~; then
- mv ../$nicefont~ ../$nicefont
- fi
-fi
-if [ -f ../$nicefont ]
-then
- echo nicefont
- (sed 1q all.ps; cat ../$nicefont; sed "1d; s/Courier/$nicefont/" all.ps) >allf.ps
-else
- echo ugly font!
- cp all.ps allf.ps
-fi
-ps2pdf allf.ps ../xv6.pdf
-# cd ..
-# pdftops xv6.pdf xv6.ps
diff --git a/runoff.list b/runoff.list
deleted file mode 100644
index f3e9224..0000000
--- a/runoff.list
+++ /dev/null
@@ -1,66 +0,0 @@
-# basic headers
-kernel/types.h
-kernel/param.h
-kernel/memlayout.h
-kernel/defs.h
-kernel/riscv.h
-kernel/elf.h
-kernel/date.h
-
-# entering xv6
-kernel/entry.S
-kernel/start.c
-kernel/main.c
-
-# locks
-kernel/spinlock.h
-kernel/spinlock.c
-
-# processes
-kernel/vm.c
-kernel/proc.h
-kernel/proc.c
-kernel/swtch.S
-kernel/kalloc.c
-
-# system calls
-user/usys.pl
-kernel/kernelvec.S
-kernel/trap.c
-kernel/syscall.h
-kernel/syscall.c
-kernel/sysproc.c
-
-# file system
-kernel/buf.h
-kernel/sleeplock.h
-kernel/fcntl.h
-kernel/stat.h
-kernel/fs.h
-kernel/file.h
-kernel/virtio_disk.c
-kernel/bio.c
-kernel/sleeplock.c
-kernel/log.c
-kernel/fs.c
-kernel/file.c
-kernel/sysfile.c
-kernel/exec.c
-
-# pipes
-kernel/pipe.c
-
-# string operations
-kernel/string.c
-
-# low-level hardware
-kernel/uart.c
-
-# user-level
-user/initcode.S
-user/usys.S
-user/init.c
-user/sh.c
-
-# link
-kernel/kernel.ld
diff --git a/runoff.spec b/runoff.spec
deleted file mode 100644
index 9247948..0000000
--- a/runoff.spec
+++ /dev/null
@@ -1,102 +0,0 @@
-# Is sheet 01 (after the TOC) a left sheet or a right sheet?
-sheet1: left
-
-# "left" and "right" specify which page of a two-page spread a file
-# must start on. "left" means that a file must start on the first of
-# the two pages. "right" means it must start on the second of the two
-# pages. The file may start in either column.
-#
-# "even" and "odd" specify which column a file must start on. "even"
-# means it must start in the left of the two columns (00). "odd" means it
-# must start in the right of the two columns (50).
-#
-# You'd think these would be the other way around.
-
-# types.h either
-# param.h either
-# defs.h either
-# x86.h either
-# asm.h either
-# mmu.h either
-# elf.h either
-# mp.h either
-
-even: entry.S # mild preference
-even: entryother.S # mild preference
-even: main.c
-# mp.c don't care at all
-# even: initcode.S
-# odd: init.c
-
-left: spinlock.h
-even: spinlock.h
-
-# This gets struct proc and allocproc on the same spread
-left: proc.h
-even: proc.h
-
-# goal is to have two action-packed 2-page spreads,
-# one with
-# userinit growproc fork exit wait
-# and another with
-# scheduler sched yield forkret sleep wakeup1 wakeup
-right: proc.c # VERY important
-even: proc.c # VERY important
-
-# A few more action packed spreads
-# page table creation and process loading
-# walkpgdir mappages setupkvm switch[ku]vm inituvm (loaduvm)
-# process memory management
-# allocuvm deallocuvm freevm
-left: vm.c
-
-even: kalloc.c # mild preference
-
-# syscall.h either
-# trapasm.S either
-# traps.h either
-# even: trap.c
-# vectors.pl either
-# syscall.c either
-# sysproc.c either
-
-# buf.h either
-# dev.h either
-# fcntl.h either
-# stat.h either
-# file.h either
-# fs.h either
-# fsvar.h either
-# left: ide.c # mild preference
-even: ide.c
-# odd: bio.c
-
-# log.c fits nicely in a spread
-even: log.c
-left: log.c
-
-# with fs.c starting on 2nd column of a left page, we get these 2-page spreads:
-# ialloc iupdate iget idup ilock iunlock iput iunlockput
-# bmap itrunc stati readi writei
-# namecmp dirlookup dirlink skipelem namex namei
-# fileinit filealloc filedup fileclose filestat fileread filewrite
-# starting on 2nd column of a right page is not terrible either
-odd: fs.c # VERY important
-left: fs.c # mild preference
-# file.c either
-# exec.c either
-# sysfile.c either
-
-# Mild preference, but makes spreads of mp.c, lapic.c, and ioapic.c+picirq.c
-even: mp.c
-left: mp.c
-
-# even: pipe.c # mild preference
-# string.c either
-# left: kbd.h # mild preference
-even: kbd.h
-even: console.c
-odd: sh.c
-
-even: bootasm.S # mild preference
-even: bootmain.c # mild preference
diff --git a/runoff1 b/runoff1
deleted file mode 100755
index 532f844..0000000
--- a/runoff1
+++ /dev/null
@@ -1,108 +0,0 @@
-#!/usr/bin/perl
-
-$n = 0;
-$v = 0;
-if($ARGV[0] eq "-v") {
- $v = 1;
- shift @ARGV;
-}
-if($ARGV[0] eq "-n") {
- $n = $ARGV[1];
- shift @ARGV;
- shift @ARGV;
-}
-$n = int(($n+49)/50)*50 - 1;
-
-$file = $ARGV[0];
-@lines = <>;
-$linenum = 0;
-foreach (@lines) {
- $linenum++;
- chomp;
- s/\s+$//;
- if(length() >= 75){
- print STDERR "$file:$linenum: line too long\n";
- }
-}
-@outlines = ();
-$nextout = 0;
-
-for($i=0; $i<@lines; ){
- # Skip leading blank lines.
- $i++ while $i<@lines && $lines[$i] =~ /^$/;
- last if $i>=@lines;
-
- # If the rest of the file fits, use the whole thing.
- if(@lines <= $i+50 && !grep { /PAGEBREAK/ } @lines){
- $breakbefore = @lines;
- }else{
- # Find a good next page break;
- # Hope for end of function.
- # but settle for a blank line (but not first blank line
- # in function, which comes after variable declarations).
- $breakbefore = $i;
- $lastblank = $i;
- $sawbrace = 0;
- $breaksize = 15; # 15 lines to get to function
- for($j=$i; $j<$i+50 && $j < @lines; $j++){
- if($lines[$j] =~ /PAGEBREAK!/){
- $lines[$j] = "";
- $breakbefore = $j;
- $breaksize = 100;
- last;
- }
- if($lines[$j] =~ /PAGEBREAK:\s*([0-9]+)/){
- $breaksize = $1;
- $breakbefore = $j;
- $lines[$j] = "";
- }
- if($lines[$j] =~ /^};?$/){
- $breakbefore = $j+1;
- $breaksize = 15;
- }
- if($lines[$j] =~ /^{$/){
- $sawbrace = 1;
- }
- if($lines[$j] =~ /^$/){
- if($sawbrace){
- $sawbrace = 0;
- }else{
- $lastblank = $j;
- }
- }
- }
- if($j<@lines && $lines[$j] =~ /^$/){
- $lastblank = $j;
- }
-
- # If we are not putting enough on a page, try a blank line.
- if($breakbefore - $i < 50 - $breaksize && $lastblank > $breakbefore && $lastblank >= $i+50 - 5){
- if($v){
- print STDERR "breakbefore $breakbefore i $i breaksize $breaksize\n";
- }
- $breakbefore = $lastblank;
- $breaksize = 5; # only 5 lines to get to blank line
- }
-
- # If we are not putting enough on a page, force a full page.
- if($breakbefore - $i < 50 - $breaksize && $breakbefore != @lines){
- $breakbefore = $i + 50;
- $breakbefore = @lines if @lines < $breakbefore;
- }
-
- if($breakbefore < $i+2){
- $breakbefore = $i+2;
- }
- }
-
- # Emit the page.
- $i50 = $i + 50;
- for(; $i<$breakbefore; $i++){
- printf "%04d %s\n", ++$n, $lines[$i];
- }
-
- # Finish page
- for($j=$i; $j<$i50; $j++){
- printf "%04d \n", ++$n;
- }
-}
diff --git a/toc.ftr b/toc.ftr
deleted file mode 100644
index 0061c1d..0000000
--- a/toc.ftr
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-The source listing is preceded by a cross-reference that lists every defined
-constant, struct, global variable, and function in xv6. Each entry gives,
-on the same line as the name, the line number (or, in a few cases, numbers)
-where the name is defined. Successive lines in an entry list the line
-numbers where the name is used. For example, this entry:
-
- swtch 2658
- 0374 2428 2466 2657 2658
-
-indicates that swtch is defined on line 2658 and is mentioned on five lines
-on sheets 03, 24, and 26.
diff --git a/toc.hdr b/toc.hdr
deleted file mode 100644
index 3698d81..0000000
--- a/toc.hdr
+++ /dev/null
@@ -1,6 +0,0 @@
-The numbers to the left of the file names in the table are sheet numbers.
-The source code has been printed in a double column format with fifty
-lines per column, giving one hundred lines per sheet (or page).
-Thus there is a convenient relationship between line numbers and sheet numbers.
-
-