From 5753553213df8f9de851adb68377db43faecb91f Mon Sep 17 00:00:00 2001 From: Robert Morris Date: Tue, 11 Jun 2019 09:57:14 -0400 Subject: [PATCH] separate source into kernel/ user/ mkfs/ --- .gdbinit.tmpl-i386 | 6 -- .gdbinit.tmpl-riscv | 2 +- .gdbinit.tmpl-x64 | 18 ---- .gitignore | 1 - Makefile | 148 ++++++++++++++-------------- ioapic.c | 76 -------------- bio.c => kernel/bio.c | 0 buf.h => kernel/buf.h | 0 console.c => kernel/console.c | 0 date.h => kernel/date.h | 0 defs.h => kernel/defs.h | 0 elf.h => kernel/elf.h | 0 entry.S => kernel/entry.S | 0 exec.c => kernel/exec.c | 0 fcntl.h => kernel/fcntl.h | 0 file.c => kernel/file.c | 0 file.h => kernel/file.h | 0 fs.c => kernel/fs.c | 0 fs.h => kernel/fs.h | 0 kalloc.c => kernel/kalloc.c | 0 kernel.ld => kernel/kernel.ld | 0 kernelvec.S => kernel/kernelvec.S | 0 log.c => kernel/log.c | 0 main.c => kernel/main.c | 0 memlayout.h => kernel/memlayout.h | 0 param.h => kernel/param.h | 0 pipe.c => kernel/pipe.c | 0 plic.c => kernel/plic.c | 0 proc.c => kernel/proc.c | 0 proc.h => kernel/proc.h | 0 ramdisk.c => kernel/ramdisk.c | 0 riscv.h => kernel/riscv.h | 0 sleeplock.c => kernel/sleeplock.c | 0 sleeplock.h => kernel/sleeplock.h | 0 spinlock.c => kernel/spinlock.c | 0 spinlock.h => kernel/spinlock.h | 0 start.c => kernel/start.c | 0 stat.h => kernel/stat.h | 0 string.c => kernel/string.c | 0 swtch.S => kernel/swtch.S | 0 syscall.c => kernel/syscall.c | 0 syscall.h => kernel/syscall.h | 0 sysfile.c => kernel/sysfile.c | 0 sysproc.c => kernel/sysproc.c | 0 trampoline.S => kernel/trampoline.S | 0 trap.c => kernel/trap.c | 0 types.h => kernel/types.h | 0 uart.c => kernel/uart.c | 0 vm.c => kernel/vm.c | 0 mkfs.c => mkfs/mkfs.c | 23 +++-- cat.c => user/cat.c | 6 +- echo.c => user/echo.c | 6 +- forktest.c => user/forktest.c | 6 +- grep.c => user/grep.c | 6 +- init.c => user/init.c | 8 +- initcode.S => user/initcode.S | 0 kill.c => user/kill.c | 6 +- ln.c => user/ln.c | 6 +- ls.c => user/ls.c | 8 +- mkdir.c => user/mkdir.c | 6 +- printf.c => user/printf.c | 6 +- rm.c => user/rm.c | 6 +- sh.c => user/sh.c | 6 +- stressfs.c => user/stressfs.c | 10 +- ulib.c => user/ulib.c | 8 +- umalloc.c => user/umalloc.c | 8 +- user.h => user/user.h | 0 usertests.c => user/usertests.c | 16 +-- usys.pl => user/usys.pl | 2 +- wc.c => user/wc.c | 6 +- zombie.c => user/zombie.c | 6 +- vectors.pl | 47 --------- 72 files changed, 157 insertions(+), 296 deletions(-) delete mode 100644 .gdbinit.tmpl-i386 delete mode 100644 .gdbinit.tmpl-x64 delete mode 100644 ioapic.c rename bio.c => kernel/bio.c (100%) rename buf.h => kernel/buf.h (100%) rename console.c => kernel/console.c (100%) rename date.h => kernel/date.h (100%) rename defs.h => kernel/defs.h (100%) rename elf.h => kernel/elf.h (100%) rename entry.S => kernel/entry.S (100%) rename exec.c => kernel/exec.c (100%) rename fcntl.h => kernel/fcntl.h (100%) rename file.c => kernel/file.c (100%) rename file.h => kernel/file.h (100%) rename fs.c => kernel/fs.c (100%) rename fs.h => kernel/fs.h (100%) rename kalloc.c => kernel/kalloc.c (100%) rename kernel.ld => kernel/kernel.ld (100%) rename kernelvec.S => kernel/kernelvec.S (100%) rename log.c => kernel/log.c (100%) rename main.c => kernel/main.c (100%) rename memlayout.h => kernel/memlayout.h (100%) rename param.h => kernel/param.h (100%) rename pipe.c => kernel/pipe.c (100%) rename plic.c => kernel/plic.c (100%) rename proc.c => kernel/proc.c (100%) rename proc.h => kernel/proc.h (100%) rename ramdisk.c => kernel/ramdisk.c (100%) rename riscv.h => kernel/riscv.h (100%) rename sleeplock.c => kernel/sleeplock.c (100%) rename sleeplock.h => kernel/sleeplock.h (100%) rename spinlock.c => kernel/spinlock.c (100%) rename spinlock.h => kernel/spinlock.h (100%) rename start.c => kernel/start.c (100%) rename stat.h => kernel/stat.h (100%) rename string.c => kernel/string.c (100%) rename swtch.S => kernel/swtch.S (100%) rename syscall.c => kernel/syscall.c (100%) rename syscall.h => kernel/syscall.h (100%) rename sysfile.c => kernel/sysfile.c (100%) rename sysproc.c => kernel/sysproc.c (100%) rename trampoline.S => kernel/trampoline.S (100%) rename trap.c => kernel/trap.c (100%) rename types.h => kernel/types.h (100%) rename uart.c => kernel/uart.c (100%) rename vm.c => kernel/vm.c (100%) rename mkfs.c => mkfs/mkfs.c (93%) rename cat.c => user/cat.c (87%) rename echo.c => user/echo.c (65%) rename forktest.c => user/forktest.c (90%) rename grep.c => user/grep.c (96%) rename init.c => user/init.c (85%) rename initcode.S => user/initcode.S (100%) rename kill.c => user/kill.c (70%) rename ln.c => user/ln.c (73%) rename ls.c => user/ls.c (93%) rename mkdir.c => user/mkdir.c (78%) rename printf.c => user/printf.c (95%) rename rm.c => user/rm.c (78%) rename sh.c => user/sh.c (99%) rename stressfs.c => user/stressfs.c (88%) rename ulib.c => user/ulib.c (92%) rename umalloc.c => user/umalloc.c (94%) rename user.h => user/user.h (100%) rename usertests.c => user/usertests.c (99%) rename usys.pl => user/usys.pl (93%) rename wc.c => user/wc.c (91%) rename zombie.c => user/zombie.c (68%) delete mode 100755 vectors.pl diff --git a/.gdbinit.tmpl-i386 b/.gdbinit.tmpl-i386 deleted file mode 100644 index a3a274b..0000000 --- a/.gdbinit.tmpl-i386 +++ /dev/null @@ -1,6 +0,0 @@ -set confirm off -python -gdb.execute("target remote localhost:26000") -gdb.execute("set architecture i386") -gdb.execute("symbol-file kernel") -gdb.execute("break *0x7c00") diff --git a/.gdbinit.tmpl-riscv b/.gdbinit.tmpl-riscv index c1616b6..8d461a1 100644 --- a/.gdbinit.tmpl-riscv +++ b/.gdbinit.tmpl-riscv @@ -1,4 +1,4 @@ set confirm off set architecture riscv target remote 127.0.0.1:1234 -symbol-file kernel +symbol-file kernel/kernel diff --git a/.gdbinit.tmpl-x64 b/.gdbinit.tmpl-x64 deleted file mode 100644 index 9c120ff..0000000 --- a/.gdbinit.tmpl-x64 +++ /dev/null @@ -1,18 +0,0 @@ -#if you would like to use gdb in 32bit mode, comment out lines 8 and 15, then uncomment -#the lines after. Note this will only work properly until 64bit mode is enabled in entry.S - -python -gdb.execute("set architecture i386:x86-64:intel") -gdb.execute("target remote localhost:26000") -gdb.execute("symbol-file kernel") -gdb.execute("break start64") -#gdb.execute("break *0x7c00") -try: - gdb.execute("continue") -except: - pass -gdb.execute("disconnect") -gdb.execute("set architecture i386:x86-64") -#gdb.execute("set architecture i386") -gdb.execute("target remote localhost:26000") -gdb.execute("delete break 1") diff --git a/.gitignore b/.gitignore index 3e2c9de..fe754f0 100644 --- a/.gitignore +++ b/.gitignore @@ -10,7 +10,6 @@ bootblock entryother initcode initcode.out -kernel kernelmemfs mkfs .gdbinit diff --git a/Makefile b/Makefile index 731a157..545f28c 100644 --- a/Makefile +++ b/Makefile @@ -1,29 +1,33 @@ +K=kernel +U=user + OBJS = \ - start.o \ - console.o \ - uart.o \ - kalloc.o \ - spinlock.o \ - string.o \ - main.o \ - vm.o \ - proc.o \ - swtch.o \ - trampoline.o \ - trap.o \ - syscall.o \ - sysproc.o \ - bio.o \ - fs.o \ - log.o \ - sleeplock.o \ - file.o \ - pipe.o \ - ramdisk.o \ - exec.o \ - sysfile.o \ - kernelvec.o \ - plic.o + $K/entry.o \ + $K/start.o \ + $K/console.o \ + $K/uart.o \ + $K/kalloc.o \ + $K/spinlock.o \ + $K/string.o \ + $K/main.o \ + $K/vm.o \ + $K/proc.o \ + $K/swtch.o \ + $K/trampoline.o \ + $K/trap.o \ + $K/syscall.o \ + $K/sysproc.o \ + $K/bio.o \ + $K/fs.o \ + $K/log.o \ + $K/sleeplock.o \ + $K/file.o \ + $K/pipe.o \ + $K/ramdisk.o \ + $K/exec.o \ + $K/sysfile.o \ + $K/kernelvec.o \ + $K/plic.o # riscv64-unknown-elf- or riscv64-linux-gnu- # perhaps in /opt/riscv/bin @@ -53,6 +57,7 @@ OBJDUMP = $(TOOLPREFIX)objdump CFLAGS = -Wall -Werror -O -fno-omit-frame-pointer -ggdb CFLAGS += -mcmodel=medany CFLAGS += -ffreestanding -fno-common -nostdlib -mno-relax +CFLAGS += -I. CFLAGS += $(shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1 && echo -fno-stack-protector) # Disable PIE when possible (for Ubuntu 16.10 toolchain) @@ -65,41 +70,41 @@ endif LDFLAGS = -z max-page-size=4096 -kernel: $(OBJS) entry.o kernel.ld initcode - $(LD) $(LDFLAGS) -T kernel.ld -o kernel entry.o $(OBJS) - $(OBJDUMP) -S kernel > kernel.asm - $(OBJDUMP) -t kernel | sed '1,/SYMBOL TABLE/d; s/ .* / /; /^$$/d' > kernel.sym +$K/kernel: $(OBJS) $K/kernel.ld $U/initcode + $(LD) $(LDFLAGS) -T $K/kernel.ld -o $K/kernel $(OBJS) + $(OBJDUMP) -S $K/kernel > $K/kernel.asm + $(OBJDUMP) -t $K/kernel | sed '1,/SYMBOL TABLE/d; s/ .* / /; /^$$/d' > $K/kernel.sym -initcode: initcode.S - $(CC) $(CFLAGS) -nostdinc -I. -c initcode.S - $(LD) $(LDFLAGS) -N -e start -Ttext 0 -o initcode.out initcode.o - $(OBJCOPY) -S -O binary initcode.out initcode - $(OBJDUMP) -S initcode.o > initcode.asm +$U/initcode: $U/initcode.S + $(CC) $(CFLAGS) -nostdinc -I. -Ikernel -c $U/initcode.S -o $U/initcode.o + $(LD) $(LDFLAGS) -N -e start -Ttext 0 -o $U/initcode.out $U/initcode.o + $(OBJCOPY) -S -O binary $U/initcode.out $U/initcode + $(OBJDUMP) -S $U/initcode.o > $U/initcode.asm -tags: $(OBJS) entryother.S _init +tags: $(OBJS) _init etags *.S *.c -vectors.S: vectors.pl - ./vectors.pl > vectors.S - -ULIB = ulib.o usys.o printf.o umalloc.o +ULIB = $U/ulib.o $U/usys.o $U/printf.o $U/umalloc.o _%: %.o $(ULIB) $(LD) $(LDFLAGS) -N -e main -Ttext 0 -o $@ $^ $(OBJDUMP) -S $@ > $*.asm $(OBJDUMP) -t $@ | sed '1,/SYMBOL TABLE/d; s/ .* / /; /^$$/d' > $*.sym -usys.S : usys.pl - perl ./usys.pl > usys.S +$U/usys.S : $U/usys.pl + perl $U/usys.pl > $U/usys.S -_forktest: forktest.o $(ULIB) +$U/usys.o : $U/usys.S + $(CC) $(CFLAGS) -c -o $U/usys.o $U/usys.S + +$U/_forktest: $U/forktest.o $(ULIB) # forktest has less library code linked in - needs to be small # in order to be able to max out the proc table. - $(LD) $(LDFLAGS) -N -e main -Ttext 0 -o _forktest forktest.o ulib.o usys.o - $(OBJDUMP) -S _forktest > forktest.asm + $(LD) $(LDFLAGS) -N -e main -Ttext 0 -o $U/_forktest $U/forktest.o $U/ulib.o $U/usys.o + $(OBJDUMP) -S $U/_forktest > $U/forktest.asm -mkfs: mkfs.c fs.h - gcc -Werror -Wall -o mkfs mkfs.c +mkfs/mkfs: mkfs/mkfs.c $K/fs.h + gcc -Werror -Wall -I. -o mkfs/mkfs mkfs/mkfs.c # Prevent deletion of intermediate files, e.g. cat.o, after first build, so # that disk image changes after first build are persistent until clean. More @@ -108,32 +113,33 @@ mkfs: mkfs.c fs.h .PRECIOUS: %.o UPROGS=\ - _cat\ - _echo\ - _forktest\ - _grep\ - _init\ - _kill\ - _ln\ - _ls\ - _mkdir\ - _rm\ - _sh\ - _stressfs\ - _usertests\ - _wc\ - _zombie\ + $U/_cat\ + $U/_echo\ + $U/_forktest\ + $U/_grep\ + $U/_init\ + $U/_kill\ + $U/_ln\ + $U/_ls\ + $U/_mkdir\ + $U/_rm\ + $U/_sh\ + $U/_stressfs\ + $U/_usertests\ + $U/_wc\ + $U/_zombie\ -fs.img: mkfs README $(UPROGS) - ./mkfs fs.img README $(UPROGS) +fs.img: mkfs/mkfs README $(UPROGS) + mkfs/mkfs fs.img README $(UPROGS) -include *.d clean: rm -f *.tex *.dvi *.idx *.aux *.log *.ind *.ilg \ - *.o *.d *.asm *.sym vectors.S bootblock entryother \ - initcode initcode.out kernel fs.img kernelmemfs \ - mkfs .gdbinit \ + */*.o */*.d */*.asm */*.sym \ + $U/initcode $U/initcode.out $K/kernel fs.img \ + mkfs/mkfs .gdbinit \ + $U/usys.S \ $(UPROGS) # make a printout @@ -155,23 +161,19 @@ QEMUGDB = $(shell if $(QEMU) -help | grep -q '^-gdb'; \ ifndef CPUS CPUS := 3 endif -QEMUOPTS = -machine virt -kernel kernel -m 3G -smp $(CPUS) -nographic +QEMUOPTS = -machine virt -kernel $K/kernel -m 3G -smp $(CPUS) -nographic QEMUOPTS += -initrd fs.img -qemu: kernel fs.img +qemu: $K/kernel fs.img $(QEMU) $(QEMUOPTS) .gdbinit: .gdbinit.tmpl-riscv sed "s/:1234/:$(GDBPORT)/" < $^ > $@ -qemu-gdb: kernel .gdbinit fs.img +qemu-gdb: $K/kernel .gdbinit fs.img @echo "*** Now run 'gdb'." 1>&2 $(QEMU) $(QEMUOPTS) -S $(QEMUGDB) -qemu-nox-gdb: fs.img kernel .gdbinit - @echo "*** Now run 'gdb'." 1>&2 - $(QEMU) -nographic $(QEMUOPTS) -S $(QEMUGDB) - # CUT HERE # prepare dist for students # after running make dist, probably want to diff --git a/ioapic.c b/ioapic.c deleted file mode 100644 index bbe5f9b..0000000 --- a/ioapic.c +++ /dev/null @@ -1,76 +0,0 @@ -// The I/O APIC manages hardware interrupts for an SMP system. -// http://www.intel.com/design/chipsets/datashts/29056601.pdf -// See also picirq.c. - -#include "types.h" -#include "defs.h" -#include "memlayout.h" -#include "traps.h" - -#define IOAPIC 0xFEC00000 // Default physical address of IO APIC - -#define REG_ID 0x00 // Register index: ID -#define REG_VER 0x01 // Register index: version -#define REG_TABLE 0x10 // Redirection table base - -// The redirection table starts at REG_TABLE and uses -// two registers to configure each interrupt. -// The first (low) register in a pair contains configuration bits. -// The second (high) register contains a bitmask telling which -// CPUs can serve that interrupt. -#define INT_DISABLED 0x00010000 // Interrupt disabled -#define INT_LEVEL 0x00008000 // Level-triggered (vs edge-) -#define INT_ACTIVELOW 0x00002000 // Active low (vs high) -#define INT_LOGICAL 0x00000800 // Destination is CPU id (vs APIC ID) - -volatile struct ioapic *ioapic; - -// IO APIC MMIO structure: write reg, then read or write data. -struct ioapic { - uint reg; - uint pad[3]; - uint data; -}; - -static uint -ioapicread(int reg) -{ - ioapic->reg = reg; - return ioapic->data; -} - -static void -ioapicwrite(int reg, uint data) -{ - ioapic->reg = reg; - ioapic->data = data; -} - -void -ioapicinit(void) -{ - int i, id, maxintr; - - ioapic = P2V((volatile struct ioapic*)IOAPIC); - maxintr = (ioapicread(REG_VER) >> 16) & 0xFF; - id = ioapicread(REG_ID) >> 24; - if(id != ioapicid) - cprintf("ioapicinit: id isn't equal to ioapicid; not a MP\n"); - - // Mark all interrupts edge-triggered, active high, disabled, - // and not routed to any CPUs. - for(i = 0; i <= maxintr; i++){ - ioapicwrite(REG_TABLE+2*i, INT_DISABLED | (T_IRQ0 + i)); - ioapicwrite(REG_TABLE+2*i+1, 0); - } -} - -void -ioapicenable(int irq, int cpunum) -{ - // Mark interrupt edge-triggered, active high, - // enabled, and routed to the given cpunum, - // which happens to be that cpu's APIC ID. - ioapicwrite(REG_TABLE+2*irq, T_IRQ0 + irq); - ioapicwrite(REG_TABLE+2*irq+1, cpunum << 24); -} diff --git a/bio.c b/kernel/bio.c similarity index 100% rename from bio.c rename to kernel/bio.c diff --git a/buf.h b/kernel/buf.h similarity index 100% rename from buf.h rename to kernel/buf.h diff --git a/console.c b/kernel/console.c similarity index 100% rename from console.c rename to kernel/console.c diff --git a/date.h b/kernel/date.h similarity index 100% rename from date.h rename to kernel/date.h diff --git a/defs.h b/kernel/defs.h similarity index 100% rename from defs.h rename to kernel/defs.h diff --git a/elf.h b/kernel/elf.h similarity index 100% rename from elf.h rename to kernel/elf.h diff --git a/entry.S b/kernel/entry.S similarity index 100% rename from entry.S rename to kernel/entry.S diff --git a/exec.c b/kernel/exec.c similarity index 100% rename from exec.c rename to kernel/exec.c diff --git a/fcntl.h b/kernel/fcntl.h similarity index 100% rename from fcntl.h rename to kernel/fcntl.h diff --git a/file.c b/kernel/file.c similarity index 100% rename from file.c rename to kernel/file.c diff --git a/file.h b/kernel/file.h similarity index 100% rename from file.h rename to kernel/file.h diff --git a/fs.c b/kernel/fs.c similarity index 100% rename from fs.c rename to kernel/fs.c diff --git a/fs.h b/kernel/fs.h similarity index 100% rename from fs.h rename to kernel/fs.h diff --git a/kalloc.c b/kernel/kalloc.c similarity index 100% rename from kalloc.c rename to kernel/kalloc.c diff --git a/kernel.ld b/kernel/kernel.ld similarity index 100% rename from kernel.ld rename to kernel/kernel.ld diff --git a/kernelvec.S b/kernel/kernelvec.S similarity index 100% rename from kernelvec.S rename to kernel/kernelvec.S diff --git a/log.c b/kernel/log.c similarity index 100% rename from log.c rename to kernel/log.c diff --git a/main.c b/kernel/main.c similarity index 100% rename from main.c rename to kernel/main.c diff --git a/memlayout.h b/kernel/memlayout.h similarity index 100% rename from memlayout.h rename to kernel/memlayout.h diff --git a/param.h b/kernel/param.h similarity index 100% rename from param.h rename to kernel/param.h diff --git a/pipe.c b/kernel/pipe.c similarity index 100% rename from pipe.c rename to kernel/pipe.c diff --git a/plic.c b/kernel/plic.c similarity index 100% rename from plic.c rename to kernel/plic.c diff --git a/proc.c b/kernel/proc.c similarity index 100% rename from proc.c rename to kernel/proc.c diff --git a/proc.h b/kernel/proc.h similarity index 100% rename from proc.h rename to kernel/proc.h diff --git a/ramdisk.c b/kernel/ramdisk.c similarity index 100% rename from ramdisk.c rename to kernel/ramdisk.c diff --git a/riscv.h b/kernel/riscv.h similarity index 100% rename from riscv.h rename to kernel/riscv.h diff --git a/sleeplock.c b/kernel/sleeplock.c similarity index 100% rename from sleeplock.c rename to kernel/sleeplock.c diff --git a/sleeplock.h b/kernel/sleeplock.h similarity index 100% rename from sleeplock.h rename to kernel/sleeplock.h diff --git a/spinlock.c b/kernel/spinlock.c similarity index 100% rename from spinlock.c rename to kernel/spinlock.c diff --git a/spinlock.h b/kernel/spinlock.h similarity index 100% rename from spinlock.h rename to kernel/spinlock.h diff --git a/start.c b/kernel/start.c similarity index 100% rename from start.c rename to kernel/start.c diff --git a/stat.h b/kernel/stat.h similarity index 100% rename from stat.h rename to kernel/stat.h diff --git a/string.c b/kernel/string.c similarity index 100% rename from string.c rename to kernel/string.c diff --git a/swtch.S b/kernel/swtch.S similarity index 100% rename from swtch.S rename to kernel/swtch.S diff --git a/syscall.c b/kernel/syscall.c similarity index 100% rename from syscall.c rename to kernel/syscall.c diff --git a/syscall.h b/kernel/syscall.h similarity index 100% rename from syscall.h rename to kernel/syscall.h diff --git a/sysfile.c b/kernel/sysfile.c similarity index 100% rename from sysfile.c rename to kernel/sysfile.c diff --git a/sysproc.c b/kernel/sysproc.c similarity index 100% rename from sysproc.c rename to kernel/sysproc.c diff --git a/trampoline.S b/kernel/trampoline.S similarity index 100% rename from trampoline.S rename to kernel/trampoline.S diff --git a/trap.c b/kernel/trap.c similarity index 100% rename from trap.c rename to kernel/trap.c diff --git a/types.h b/kernel/types.h similarity index 100% rename from types.h rename to kernel/types.h diff --git a/uart.c b/kernel/uart.c similarity index 100% rename from uart.c rename to kernel/uart.c diff --git a/vm.c b/kernel/vm.c similarity index 100% rename from vm.c rename to kernel/vm.c diff --git a/mkfs.c b/mkfs/mkfs.c similarity index 93% rename from mkfs.c rename to mkfs/mkfs.c index 17040b7..246a4e2 100644 --- a/mkfs.c +++ b/mkfs/mkfs.c @@ -6,10 +6,10 @@ #include #define stat xv6_stat // avoid clash with host struct stat -#include "types.h" -#include "fs.h" -#include "stat.h" -#include "param.h" +#include "kernel/types.h" +#include "kernel/fs.h" +#include "kernel/stat.h" +#include "kernel/param.h" #ifndef static_assert #define static_assert(a, b) do { switch (0) case 0: case (a): ; } while (0) @@ -129,7 +129,14 @@ main(int argc, char *argv[]) iappend(rootino, &de, sizeof(de)); for(i = 2; i < argc; i++){ - assert(index(argv[i], '/') == 0); + // get rid of "user/" + char *shortname; + if(strncmp(argv[i], "user/", 5) == 0) + shortname = argv[i] + 5; + else + shortname = argv[i]; + + assert(index(shortname, '/') == 0); if((fd = open(argv[i], 0)) < 0){ perror(argv[i]); @@ -140,14 +147,14 @@ main(int argc, char *argv[]) // The binaries are named _rm, _cat, etc. to keep the // build operating system from trying to execute them // in place of system binaries like rm and cat. - if(argv[i][0] == '_') - ++argv[i]; + if(shortname[0] == '_') + shortname += 1; inum = ialloc(T_FILE); bzero(&de, sizeof(de)); de.inum = xshort(inum); - strncpy(de.name, argv[i], DIRSIZ); + strncpy(de.name, shortname, DIRSIZ); iappend(rootino, &de, sizeof(de)); while((cc = read(fd, buf, sizeof(buf))) > 0) diff --git a/cat.c b/user/cat.c similarity index 87% rename from cat.c rename to user/cat.c index 5ddc820..d3d16c4 100644 --- a/cat.c +++ b/user/cat.c @@ -1,6 +1,6 @@ -#include "types.h" -#include "stat.h" -#include "user.h" +#include "kernel/types.h" +#include "kernel/stat.h" +#include "user/user.h" char buf[512]; diff --git a/echo.c b/user/echo.c similarity index 65% rename from echo.c rename to user/echo.c index 806dee0..ef744ab 100644 --- a/echo.c +++ b/user/echo.c @@ -1,6 +1,6 @@ -#include "types.h" -#include "stat.h" -#include "user.h" +#include "kernel/types.h" +#include "kernel/stat.h" +#include "user/user.h" int main(int argc, char *argv[]) diff --git a/forktest.c b/user/forktest.c similarity index 90% rename from forktest.c rename to user/forktest.c index 8bc984d..be4915e 100644 --- a/forktest.c +++ b/user/forktest.c @@ -1,9 +1,9 @@ // Test that fork fails gracefully. // Tiny executable so that the limit can be filling the proc table. -#include "types.h" -#include "stat.h" -#include "user.h" +#include "kernel/types.h" +#include "kernel/stat.h" +#include "user/user.h" #define N 1000 diff --git a/grep.c b/user/grep.c similarity index 96% rename from grep.c rename to user/grep.c index adc4835..b5fdfc2 100644 --- a/grep.c +++ b/user/grep.c @@ -1,8 +1,8 @@ // Simple grep. Only supports ^ . * $ operators. -#include "types.h" -#include "stat.h" -#include "user.h" +#include "kernel/types.h" +#include "kernel/stat.h" +#include "user/user.h" char buf[1024]; int match(char*, char*); diff --git a/init.c b/user/init.c similarity index 85% rename from init.c rename to user/init.c index 046b551..f36ba31 100644 --- a/init.c +++ b/user/init.c @@ -1,9 +1,9 @@ // init: The initial user-level program -#include "types.h" -#include "stat.h" -#include "user.h" -#include "fcntl.h" +#include "kernel/types.h" +#include "kernel/stat.h" +#include "user/user.h" +#include "kernel/fcntl.h" char *argv[] = { "sh", 0 }; diff --git a/initcode.S b/user/initcode.S similarity index 100% rename from initcode.S rename to user/initcode.S diff --git a/kill.c b/user/kill.c similarity index 70% rename from kill.c rename to user/kill.c index 364f6af..4b19d3c 100644 --- a/kill.c +++ b/user/kill.c @@ -1,6 +1,6 @@ -#include "types.h" -#include "stat.h" -#include "user.h" +#include "kernel/types.h" +#include "kernel/stat.h" +#include "user/user.h" int main(int argc, char **argv) diff --git a/ln.c b/user/ln.c similarity index 73% rename from ln.c rename to user/ln.c index cf8a64e..482dd79 100644 --- a/ln.c +++ b/user/ln.c @@ -1,6 +1,6 @@ -#include "types.h" -#include "stat.h" -#include "user.h" +#include "kernel/types.h" +#include "kernel/stat.h" +#include "user/user.h" int main(int argc, char *argv[]) diff --git a/ls.c b/user/ls.c similarity index 93% rename from ls.c rename to user/ls.c index 2862913..c649c57 100644 --- a/ls.c +++ b/user/ls.c @@ -1,7 +1,7 @@ -#include "types.h" -#include "stat.h" -#include "user.h" -#include "fs.h" +#include "kernel/types.h" +#include "kernel/stat.h" +#include "user/user.h" +#include "kernel/fs.h" char* fmtname(char *path) diff --git a/mkdir.c b/user/mkdir.c similarity index 78% rename from mkdir.c rename to user/mkdir.c index 6e4c954..5f1e155 100644 --- a/mkdir.c +++ b/user/mkdir.c @@ -1,6 +1,6 @@ -#include "types.h" -#include "stat.h" -#include "user.h" +#include "kernel/types.h" +#include "kernel/stat.h" +#include "user/user.h" int main(int argc, char *argv[]) diff --git a/printf.c b/user/printf.c similarity index 95% rename from printf.c rename to user/printf.c index c820305..0c6b34b 100644 --- a/printf.c +++ b/user/printf.c @@ -1,6 +1,6 @@ -#include "types.h" -#include "stat.h" -#include "user.h" +#include "kernel/types.h" +#include "kernel/stat.h" +#include "user/user.h" #include diff --git a/rm.c b/user/rm.c similarity index 78% rename from rm.c rename to user/rm.c index 4fd33c8..3076d83 100644 --- a/rm.c +++ b/user/rm.c @@ -1,6 +1,6 @@ -#include "types.h" -#include "stat.h" -#include "user.h" +#include "kernel/types.h" +#include "kernel/stat.h" +#include "user/user.h" int main(int argc, char *argv[]) diff --git a/sh.c b/user/sh.c similarity index 99% rename from sh.c rename to user/sh.c index 054bab9..13c7883 100644 --- a/sh.c +++ b/user/sh.c @@ -1,8 +1,8 @@ // Shell. -#include "types.h" -#include "user.h" -#include "fcntl.h" +#include "kernel/types.h" +#include "user/user.h" +#include "kernel/fcntl.h" // Parsed command representation #define EXEC 1 diff --git a/stressfs.c b/user/stressfs.c similarity index 88% rename from stressfs.c rename to user/stressfs.c index c0a4743..ef8f1cd 100644 --- a/stressfs.c +++ b/user/stressfs.c @@ -7,11 +7,11 @@ // for (i = 0; i < 40000; i++) // asm volatile(""); -#include "types.h" -#include "stat.h" -#include "user.h" -#include "fs.h" -#include "fcntl.h" +#include "kernel/types.h" +#include "kernel/stat.h" +#include "user/user.h" +#include "kernel/fs.h" +#include "kernel/fcntl.h" int main(int argc, char *argv[]) diff --git a/ulib.c b/user/ulib.c similarity index 92% rename from ulib.c rename to user/ulib.c index 532fe42..ddda0f5 100644 --- a/ulib.c +++ b/user/ulib.c @@ -1,7 +1,7 @@ -#include "types.h" -#include "stat.h" -#include "fcntl.h" -#include "user.h" +#include "kernel/types.h" +#include "kernel/stat.h" +#include "kernel/fcntl.h" +#include "user/user.h" char* strcpy(char *s, const char *t) diff --git a/umalloc.c b/user/umalloc.c similarity index 94% rename from umalloc.c rename to user/umalloc.c index a7e7d2c..2092a32 100644 --- a/umalloc.c +++ b/user/umalloc.c @@ -1,7 +1,7 @@ -#include "types.h" -#include "stat.h" -#include "user.h" -#include "param.h" +#include "kernel/types.h" +#include "kernel/stat.h" +#include "user/user.h" +#include "kernel/param.h" // Memory allocator by Kernighan and Ritchie, // The C programming Language, 2nd ed. Section 8.7. diff --git a/user.h b/user/user.h similarity index 100% rename from user.h rename to user/user.h diff --git a/usertests.c b/user/usertests.c similarity index 99% rename from usertests.c rename to user/usertests.c index 292319e..beca8f9 100644 --- a/usertests.c +++ b/user/usertests.c @@ -1,11 +1,11 @@ -#include "param.h" -#include "types.h" -#include "stat.h" -#include "user.h" -#include "fs.h" -#include "fcntl.h" -#include "syscall.h" -#include "memlayout.h" +#include "kernel/param.h" +#include "kernel/types.h" +#include "kernel/stat.h" +#include "user/user.h" +#include "kernel/fs.h" +#include "kernel/fcntl.h" +#include "kernel/syscall.h" +#include "kernel/memlayout.h" char buf[8192]; char name[3]; diff --git a/usys.pl b/user/usys.pl similarity index 93% rename from usys.pl rename to user/usys.pl index f8d47d5..01e426e 100755 --- a/usys.pl +++ b/user/usys.pl @@ -4,7 +4,7 @@ print "# generated by usys.pl - do not edit\n"; -print "#include \"syscall.h\"\n"; +print "#include \"kernel/syscall.h\"\n"; sub entry { my $name = shift; diff --git a/wc.c b/user/wc.c similarity index 91% rename from wc.c rename to user/wc.c index d6a54df..e2543a6 100644 --- a/wc.c +++ b/user/wc.c @@ -1,6 +1,6 @@ -#include "types.h" -#include "stat.h" -#include "user.h" +#include "kernel/types.h" +#include "kernel/stat.h" +#include "user/user.h" char buf[512]; diff --git a/zombie.c b/user/zombie.c similarity index 68% rename from zombie.c rename to user/zombie.c index ee817da..b56231a 100644 --- a/zombie.c +++ b/user/zombie.c @@ -1,9 +1,9 @@ // Create a zombie process that // must be reparented at exit. -#include "types.h" -#include "stat.h" -#include "user.h" +#include "kernel/types.h" +#include "kernel/stat.h" +#include "user/user.h" int main(void) diff --git a/vectors.pl b/vectors.pl deleted file mode 100755 index d746d6b..0000000 --- a/vectors.pl +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/perl -w - -# Generate vectors.S, the trap/interrupt entry points. -# There has to be one entry point per interrupt number -# since otherwise there's no way for trap() to discover -# the interrupt number. - -print "# generated by vectors.pl - do not edit\n"; -print "# handlers\n"; -print ".globl alltraps\n"; -for(my $i = 0; $i < 256; $i++){ - print ".globl vector$i\n"; - print "vector$i:\n"; - if(!($i == 8 || ($i >= 10 && $i <= 14) || $i == 17)){ - print " push \$0\n"; - } - print " push \$$i\n"; - print " jmp alltraps\n"; -} - -print "\n# vector table\n"; -print ".data\n"; -print ".globl vectors\n"; -print "vectors:\n"; -for(my $i = 0; $i < 256; $i++){ - print " .quad vector$i\n"; -} - -# sample output: -# # handlers -# .globl alltraps -# .globl vector0 -# vector0: -# push $0 -# push $0 -# jmp alltraps -# ... -# -# # vector table -# .data -# .globl vectors -# vectors: -# .quad vector0 -# .quad vector1 -# .quad vector2 -# ... -