diff options
| author | Robert Morris <rtm@csail.mit.edu> | 2019-07-23 11:14:10 -0400 | 
|---|---|---|
| committer | Robert Morris <rtm@csail.mit.edu> | 2019-07-23 11:14:10 -0400 | 
| commit | 55bc96d4190e40704fb5e447cef9597b08b8f088 (patch) | |
| tree | c418a737973e8f4371fb9c9d488ecb988db87d36 | |
| parent | b8a31c494cb535d9eb3e4c1971c4c9020c27c239 (diff) | |
| download | xv6-labs-55bc96d4190e40704fb5e447cef9597b08b8f088.tar.gz xv6-labs-55bc96d4190e40704fb5e447cef9597b08b8f088.tar.bz2 xv6-labs-55bc96d4190e40704fb5e447cef9597b08b8f088.zip | |
a few core -> CPU
get rid of PDF generating support
| -rw-r--r-- | Makefile | 12 | ||||
| -rw-r--r-- | kernel/entry.S | 7 | ||||
| -rw-r--r-- | kernel/proc.c | 2 | ||||
| -rw-r--r-- | kernel/spinlock.c | 2 | ||||
| -rwxr-xr-x | runoff | 249 | ||||
| -rw-r--r-- | runoff.list | 66 | ||||
| -rw-r--r-- | runoff.spec | 102 | ||||
| -rwxr-xr-x | runoff1 | 108 | ||||
| -rw-r--r-- | toc.ftr | 13 | ||||
| -rw-r--r-- | toc.hdr | 6 | 
10 files changed, 7 insertions, 560 deletions
| @@ -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(); @@ -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. - - | 
