From b07a129f17bc514294a27f658f560dca17475185 Mon Sep 17 00:00:00 2001 From: Jordaen Graham Date: Wed, 16 Sep 2015 23:08:33 -0600 Subject: [PATCH 1/8] Assignment 1 Part 1 --- xv6-public/Makefile | 1 + xv6-public/getpcount.c | 9 +++++++++ xv6-public/syscall.c | 2 ++ xv6-public/syscall.h | 1 + xv6-public/sysproc.c | 34 ++++++++++++++++++++++++++++++++++ xv6-public/user.h | 1 + xv6-public/usys.S | 1 + 7 files changed, 49 insertions(+) mode change 100755 => 100644 xv6-public/Makefile create mode 100644 xv6-public/getpcount.c mode change 100755 => 100644 xv6-public/syscall.c mode change 100755 => 100644 xv6-public/syscall.h mode change 100755 => 100644 xv6-public/sysproc.c mode change 100755 => 100644 xv6-public/user.h mode change 100755 => 100644 xv6-public/usys.S diff --git a/xv6-public/Makefile b/xv6-public/Makefile old mode 100755 new mode 100644 index b4fd9a2..af4e706 --- a/xv6-public/Makefile +++ b/xv6-public/Makefile @@ -172,6 +172,7 @@ UPROGS=\ _usertests\ _wc\ _zombie\ + _getpcount\ fs.img: mkfs README $(UPROGS) ./mkfs fs.img README $(UPROGS) diff --git a/xv6-public/getpcount.c b/xv6-public/getpcount.c new file mode 100644 index 0000000..62294c7 --- /dev/null +++ b/xv6-public/getpcount.c @@ -0,0 +1,9 @@ +#include "types.h" +#include "stat.h" +#include "user.h" + +int +main(void){ + printf(1, "Running getpcount: %d\n\tSuccess\n", getpcount()); + return 0; +} diff --git a/xv6-public/syscall.c b/xv6-public/syscall.c old mode 100755 new mode 100644 index 799ebc2..35e7c3a --- a/xv6-public/syscall.c +++ b/xv6-public/syscall.c @@ -98,6 +98,7 @@ extern int sys_unlink(void); extern int sys_wait(void); extern int sys_write(void); extern int sys_uptime(void); +extern int sys_getpcount(void); static int (*syscalls[])(void) = { [SYS_fork] sys_fork, @@ -121,6 +122,7 @@ static int (*syscalls[])(void) = { [SYS_link] sys_link, [SYS_mkdir] sys_mkdir, [SYS_close] sys_close, +[SYS_getpcount] sys_getpcount, }; void diff --git a/xv6-public/syscall.h b/xv6-public/syscall.h old mode 100755 new mode 100644 index bc5f356..694e78c --- a/xv6-public/syscall.h +++ b/xv6-public/syscall.h @@ -20,3 +20,4 @@ #define SYS_link 19 #define SYS_mkdir 20 #define SYS_close 21 +#define SYS_getpcount 22 diff --git a/xv6-public/sysproc.c b/xv6-public/sysproc.c old mode 100755 new mode 100644 index 027a5e5..56cfffa --- a/xv6-public/sysproc.c +++ b/xv6-public/sysproc.c @@ -6,6 +6,40 @@ #include "memlayout.h" #include "mmu.h" #include "proc.h" +#include "spinlock.h" + +struct { + struct spinlock lock; + struct proc proc[NPROC]; +} ptable; + +// static struct proc *initproc; + +int +sys_getpcount(void) +{ + struct proc *p; +// char *sp; + + acquire(&ptable.lock); + int count = 0; + for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){ + // UNUSED, EMBRYO, SLEEPING, RUNNABLE, RUNNING, ZOMBIE + if(p->state == UNUSED){cprintf("UNUSED\n");} + else if(p->state == EMBRYO){cprintf("EMBRYO\n");} + else if(p->state == SLEEPING){cprintf("SLEEPING\n");} + else if(p->state == RUNNABLE){cprintf("RUNNABLE\n");} + else if(p->state == RUNNING){cprintf("RUNNING\n");} + else if(p->state == ZOMBIE){cprintf("ZOMBIE\n");} + else {cprintf("NONE\n");} + cprintf("proc: %s\nstatus: %s\n\n", p->name, p->state); + count++; + } + release(&ptable.lock); + +// printf(1, "Final Count: %d\n", count); + return count; +} int sys_fork(void) diff --git a/xv6-public/user.h b/xv6-public/user.h old mode 100755 new mode 100644 index f45b8d5..dd28e61 --- a/xv6-public/user.h +++ b/xv6-public/user.h @@ -23,6 +23,7 @@ int getpid(void); char* sbrk(int); int sleep(int); int uptime(void); +int getpcount(void); // ulib.c int stat(char*, struct stat*); diff --git a/xv6-public/usys.S b/xv6-public/usys.S old mode 100755 new mode 100644 index 8bfd8a1..2175e63 --- a/xv6-public/usys.S +++ b/xv6-public/usys.S @@ -29,3 +29,4 @@ SYSCALL(getpid) SYSCALL(sbrk) SYSCALL(sleep) SYSCALL(uptime) +SYSCALL(getpcount) From eb25b3cf20d79136e7fdd3cfe3c83a9d029fb633 Mon Sep 17 00:00:00 2001 From: Jordaen Graham Date: Wed, 16 Sep 2015 23:29:31 -0600 Subject: [PATCH 2/8] Assignment1 Problem 1, initial attempt --- xv6-public/getpcount.c | 8 +++++--- xv6-public/sysproc.c | 18 ++++++------------ 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/xv6-public/getpcount.c b/xv6-public/getpcount.c index 62294c7..4b63488 100644 --- a/xv6-public/getpcount.c +++ b/xv6-public/getpcount.c @@ -4,6 +4,8 @@ int main(void){ - printf(1, "Running getpcount: %d\n\tSuccess\n", getpcount()); - return 0; -} + int running_count; + running_count = getpcount(); + printf(1, "Processes currently running: %d\n", running_count); + return 0; +} \ No newline at end of file diff --git a/xv6-public/sysproc.c b/xv6-public/sysproc.c index 56cfffa..6b8dc75 100644 --- a/xv6-public/sysproc.c +++ b/xv6-public/sysproc.c @@ -12,32 +12,26 @@ struct { struct spinlock lock; struct proc proc[NPROC]; } ptable; - -// static struct proc *initproc; - + int sys_getpcount(void) { struct proc *p; -// char *sp; acquire(&ptable.lock); int count = 0; for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){ - // UNUSED, EMBRYO, SLEEPING, RUNNABLE, RUNNING, ZOMBIE + // Process states: UNUSED, EMBRYO, SLEEPING, RUNNABLE, RUNNING, ZOMBIE + cprintf("Process: %s\nState: ", p->name); if(p->state == UNUSED){cprintf("UNUSED\n");} else if(p->state == EMBRYO){cprintf("EMBRYO\n");} - else if(p->state == SLEEPING){cprintf("SLEEPING\n");} - else if(p->state == RUNNABLE){cprintf("RUNNABLE\n");} - else if(p->state == RUNNING){cprintf("RUNNING\n");} + else if(p->state == SLEEPING){cprintf("SLEEPING\n");count++;} + else if(p->state == RUNNABLE){cprintf("RUNNABLE\n");count++;} + else if(p->state == RUNNING){cprintf("RUNNING\n");count++;} else if(p->state == ZOMBIE){cprintf("ZOMBIE\n");} else {cprintf("NONE\n");} - cprintf("proc: %s\nstatus: %s\n\n", p->name, p->state); - count++; } release(&ptable.lock); - -// printf(1, "Final Count: %d\n", count); return count; } From e3930778c772fe267e03ff8befa8261f94cfb11d Mon Sep 17 00:00:00 2001 From: grahamj7 Date: Fri, 18 Sep 2015 11:09:47 -0600 Subject: [PATCH 3/8] Removed class name from README --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index ab1450a..8b13789 100644 --- a/README.md +++ b/README.md @@ -1,2 +1 @@ -# CMPT332 -Assignments for CMPT 332 + From dc675e6d67a2ccf05fd3229ba70c50b52f7cf3ea Mon Sep 17 00:00:00 2001 From: Jordaen Graham Date: Tue, 22 Sep 2015 12:40:12 -0600 Subject: [PATCH 4/8] Added gitignore file to ignore all the binaries that get made at compile time, also updated sysproc.c --- .gitignore | 8 + qemu/share/qemu/s390-ccw.img | Bin 9336 -> 0 bytes xv6-public/bio.d | 2 - xv6-public/bio.o | Bin 6084 -> 0 bytes xv6-public/bootasm.d | 1 - xv6-public/bootasm.o | Bin 1528 -> 0 bytes xv6-public/bootblock.asm | 384 - xv6-public/bootblock.o | Bin 5302 -> 0 bytes xv6-public/bootblockother.o | Bin 1221 -> 0 bytes xv6-public/bootmain.d | 1 - xv6-public/bootmain.o | Bin 6004 -> 0 bytes xv6-public/cat.asm | 1272 --- xv6-public/cat.d | 1 - xv6-public/cat.o | Bin 4084 -> 0 bytes xv6-public/cat.sym | 63 - xv6-public/console.d | 2 - xv6-public/console.o | Bin 15864 -> 0 bytes xv6-public/echo.asm | 1185 --- xv6-public/echo.d | 1 - xv6-public/echo.o | Bin 2820 -> 0 bytes xv6-public/echo.sym | 61 - xv6-public/entry.o | Bin 1380 -> 0 bytes xv6-public/entryother.asm | 114 - xv6-public/entryother.d | 1 - xv6-public/entryother.o | Bin 1476 -> 0 bytes xv6-public/exec.d | 2 - xv6-public/exec.o | Bin 8232 -> 0 bytes xv6-public/file.d | 2 - xv6-public/file.o | Bin 8580 -> 0 bytes xv6-public/forktest.asm | 694 -- xv6-public/forktest.d | 1 - xv6-public/forktest.o | Bin 4108 -> 0 bytes xv6-public/fs.d | 2 - xv6-public/fs.img | Bin 512000 -> 0 bytes xv6-public/fs.o | Bin 24804 -> 0 bytes xv6-public/grep.asm | 1543 --- xv6-public/grep.d | 1 - xv6-public/grep.o | Bin 6224 -> 0 bytes xv6-public/grep.sym | 66 - xv6-public/ide.d | 2 - xv6-public/ide.o | Bin 11312 -> 0 bytes xv6-public/init.asm | 1245 --- xv6-public/init.d | 1 - xv6-public/init.o | Bin 3972 -> 0 bytes xv6-public/init.sym | 62 - xv6-public/initcode.asm | 43 - xv6-public/initcode.d | 1 - xv6-public/initcode.o | Bin 1308 -> 0 bytes xv6-public/initcode.out | Bin 1069 -> 0 bytes xv6-public/ioapic.d | 1 - xv6-public/ioapic.o | Bin 4404 -> 0 bytes xv6-public/kalloc.d | 2 - xv6-public/kalloc.o | Bin 5600 -> 0 bytes xv6-public/kbd.d | 1 - xv6-public/kbd.o | Bin 5752 -> 0 bytes xv6-public/kernel.asm | 17918 --------------------------------- xv6-public/kernel.sym | 579 -- xv6-public/kill.asm | 1192 --- xv6-public/kill.d | 1 - xv6-public/kill.o | Bin 3064 -> 0 bytes xv6-public/kill.sym | 61 - xv6-public/lapic.d | 2 - xv6-public/lapic.o | Bin 7972 -> 0 bytes xv6-public/ln.asm | 1188 --- xv6-public/ln.d | 1 - xv6-public/ln.o | Bin 2884 -> 0 bytes xv6-public/ln.sym | 61 - xv6-public/log.d | 2 - xv6-public/log.o | Bin 10160 -> 0 bytes xv6-public/ls.asm | 1497 --- xv6-public/ls.d | 1 - xv6-public/ls.o | Bin 6252 -> 0 bytes xv6-public/ls.sym | 64 - xv6-public/main.d | 2 - xv6-public/main.o | Bin 17984 -> 0 bytes xv6-public/mkdir.asm | 1209 --- xv6-public/mkdir.d | 1 - xv6-public/mkdir.o | Bin 3036 -> 0 bytes xv6-public/mkdir.sym | 61 - xv6-public/mp.d | 2 - xv6-public/mp.o | Bin 11600 -> 0 bytes xv6-public/picirq.d | 1 - xv6-public/picirq.o | Bin 3780 -> 0 bytes xv6-public/pipe.d | 2 - xv6-public/pipe.o | Bin 9144 -> 0 bytes xv6-public/printf.d | 1 - xv6-public/printf.o | Bin 4760 -> 0 bytes xv6-public/proc.d | 2 - xv6-public/proc.o | Bin 18844 -> 0 bytes xv6-public/rm.asm | 1209 --- xv6-public/rm.d | 1 - xv6-public/rm.o | Bin 3028 -> 0 bytes xv6-public/rm.sym | 61 - xv6-public/sh.asm | 2737 ----- xv6-public/sh.d | 1 - xv6-public/sh.o | Bin 18068 -> 0 bytes xv6-public/sh.sym | 82 - xv6-public/spinlock.d | 2 - xv6-public/spinlock.o | Bin 9092 -> 0 bytes xv6-public/stressfs.asm | 1287 --- xv6-public/stressfs.d | 2 - xv6-public/stressfs.o | Bin 4140 -> 0 bytes xv6-public/stressfs.sym | 61 - xv6-public/string.d | 1 - xv6-public/string.o | Bin 6892 -> 0 bytes xv6-public/swtch.o | Bin 1152 -> 0 bytes xv6-public/syscall.d | 2 - xv6-public/syscall.o | Bin 7060 -> 0 bytes xv6-public/sysfile.d | 2 - xv6-public/sysfile.o | Bin 19132 -> 0 bytes xv6-public/sysproc.c | 12 +- xv6-public/sysproc.d | 2 - xv6-public/sysproc.o | Bin 7044 -> 0 bytes xv6-public/timer.d | 1 - xv6-public/timer.o | Bin 2784 -> 0 bytes xv6-public/trap.d | 2 - xv6-public/trap.o | Bin 10528 -> 0 bytes xv6-public/trapasm.o | Bin 1284 -> 0 bytes xv6-public/uart.d | 2 - xv6-public/uart.o | Bin 5004 -> 0 bytes xv6-public/ulib.d | 2 - xv6-public/ulib.o | Bin 6764 -> 0 bytes xv6-public/umalloc.d | 2 - xv6-public/umalloc.o | Bin 4616 -> 0 bytes xv6-public/usertests.asm | 7891 --------------- xv6-public/usertests.d | 2 - xv6-public/usertests.o | Bin 69192 -> 0 bytes xv6-public/usertests.sym | 105 - xv6-public/usys.o | Bin 1736 -> 0 bytes xv6-public/vectors.o | Bin 16332 -> 0 bytes xv6-public/vm.d | 2 - xv6-public/vm.o | Bin 19796 -> 0 bytes xv6-public/wc.asm | 1340 --- xv6-public/wc.d | 1 - xv6-public/wc.o | Bin 4712 -> 0 bytes xv6-public/wc.sym | 63 - xv6-public/xv6.img | Bin 5120000 -> 0 bytes xv6-public/zombie.asm | 1157 --- xv6-public/zombie.d | 1 - xv6-public/zombie.o | Bin 2504 -> 0 bytes xv6-public/zombie.sym | 61 - 141 files changed, 11 insertions(+), 46696 deletions(-) create mode 100644 .gitignore delete mode 100755 qemu/share/qemu/s390-ccw.img delete mode 100755 xv6-public/bio.d delete mode 100755 xv6-public/bio.o delete mode 100755 xv6-public/bootasm.d delete mode 100755 xv6-public/bootasm.o delete mode 100755 xv6-public/bootblock.asm delete mode 100755 xv6-public/bootblock.o delete mode 100755 xv6-public/bootblockother.o delete mode 100755 xv6-public/bootmain.d delete mode 100755 xv6-public/bootmain.o delete mode 100755 xv6-public/cat.asm delete mode 100755 xv6-public/cat.d delete mode 100755 xv6-public/cat.o delete mode 100755 xv6-public/cat.sym delete mode 100755 xv6-public/console.d delete mode 100755 xv6-public/console.o delete mode 100755 xv6-public/echo.asm delete mode 100755 xv6-public/echo.d delete mode 100755 xv6-public/echo.o delete mode 100755 xv6-public/echo.sym delete mode 100755 xv6-public/entry.o delete mode 100755 xv6-public/entryother.asm delete mode 100755 xv6-public/entryother.d delete mode 100755 xv6-public/entryother.o delete mode 100755 xv6-public/exec.d delete mode 100755 xv6-public/exec.o delete mode 100755 xv6-public/file.d delete mode 100755 xv6-public/file.o delete mode 100755 xv6-public/forktest.asm delete mode 100755 xv6-public/forktest.d delete mode 100755 xv6-public/forktest.o delete mode 100755 xv6-public/fs.d delete mode 100755 xv6-public/fs.img delete mode 100755 xv6-public/fs.o delete mode 100755 xv6-public/grep.asm delete mode 100755 xv6-public/grep.d delete mode 100755 xv6-public/grep.o delete mode 100755 xv6-public/grep.sym delete mode 100755 xv6-public/ide.d delete mode 100755 xv6-public/ide.o delete mode 100755 xv6-public/init.asm delete mode 100755 xv6-public/init.d delete mode 100755 xv6-public/init.o delete mode 100755 xv6-public/init.sym delete mode 100755 xv6-public/initcode.asm delete mode 100755 xv6-public/initcode.d delete mode 100755 xv6-public/initcode.o delete mode 100755 xv6-public/initcode.out delete mode 100755 xv6-public/ioapic.d delete mode 100755 xv6-public/ioapic.o delete mode 100755 xv6-public/kalloc.d delete mode 100755 xv6-public/kalloc.o delete mode 100755 xv6-public/kbd.d delete mode 100755 xv6-public/kbd.o delete mode 100755 xv6-public/kernel.asm delete mode 100755 xv6-public/kernel.sym delete mode 100755 xv6-public/kill.asm delete mode 100755 xv6-public/kill.d delete mode 100755 xv6-public/kill.o delete mode 100755 xv6-public/kill.sym delete mode 100755 xv6-public/lapic.d delete mode 100755 xv6-public/lapic.o delete mode 100755 xv6-public/ln.asm delete mode 100755 xv6-public/ln.d delete mode 100755 xv6-public/ln.o delete mode 100755 xv6-public/ln.sym delete mode 100755 xv6-public/log.d delete mode 100755 xv6-public/log.o delete mode 100755 xv6-public/ls.asm delete mode 100755 xv6-public/ls.d delete mode 100755 xv6-public/ls.o delete mode 100755 xv6-public/ls.sym delete mode 100755 xv6-public/main.d delete mode 100755 xv6-public/main.o delete mode 100755 xv6-public/mkdir.asm delete mode 100755 xv6-public/mkdir.d delete mode 100755 xv6-public/mkdir.o delete mode 100755 xv6-public/mkdir.sym delete mode 100755 xv6-public/mp.d delete mode 100755 xv6-public/mp.o delete mode 100755 xv6-public/picirq.d delete mode 100755 xv6-public/picirq.o delete mode 100755 xv6-public/pipe.d delete mode 100755 xv6-public/pipe.o delete mode 100755 xv6-public/printf.d delete mode 100755 xv6-public/printf.o delete mode 100755 xv6-public/proc.d delete mode 100755 xv6-public/proc.o delete mode 100755 xv6-public/rm.asm delete mode 100755 xv6-public/rm.d delete mode 100755 xv6-public/rm.o delete mode 100755 xv6-public/rm.sym delete mode 100755 xv6-public/sh.asm delete mode 100755 xv6-public/sh.d delete mode 100755 xv6-public/sh.o delete mode 100755 xv6-public/sh.sym delete mode 100755 xv6-public/spinlock.d delete mode 100755 xv6-public/spinlock.o delete mode 100755 xv6-public/stressfs.asm delete mode 100755 xv6-public/stressfs.d delete mode 100755 xv6-public/stressfs.o delete mode 100755 xv6-public/stressfs.sym delete mode 100755 xv6-public/string.d delete mode 100755 xv6-public/string.o delete mode 100755 xv6-public/swtch.o delete mode 100755 xv6-public/syscall.d delete mode 100755 xv6-public/syscall.o delete mode 100755 xv6-public/sysfile.d delete mode 100755 xv6-public/sysfile.o delete mode 100755 xv6-public/sysproc.d delete mode 100755 xv6-public/sysproc.o delete mode 100755 xv6-public/timer.d delete mode 100755 xv6-public/timer.o delete mode 100755 xv6-public/trap.d delete mode 100755 xv6-public/trap.o delete mode 100755 xv6-public/trapasm.o delete mode 100755 xv6-public/uart.d delete mode 100755 xv6-public/uart.o delete mode 100755 xv6-public/ulib.d delete mode 100755 xv6-public/ulib.o delete mode 100755 xv6-public/umalloc.d delete mode 100755 xv6-public/umalloc.o delete mode 100755 xv6-public/usertests.asm delete mode 100755 xv6-public/usertests.d delete mode 100755 xv6-public/usertests.o delete mode 100755 xv6-public/usertests.sym delete mode 100755 xv6-public/usys.o delete mode 100755 xv6-public/vectors.o delete mode 100755 xv6-public/vm.d delete mode 100755 xv6-public/vm.o delete mode 100755 xv6-public/wc.asm delete mode 100755 xv6-public/wc.d delete mode 100755 xv6-public/wc.o delete mode 100755 xv6-public/wc.sym delete mode 100755 xv6-public/xv6.img delete mode 100755 xv6-public/zombie.asm delete mode 100755 xv6-public/zombie.d delete mode 100755 xv6-public/zombie.o delete mode 100755 xv6-public/zombie.sym diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..875ac17 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +_* +*.o +*.d +*.sym +*.asm +*.img +*.out +kernel diff --git a/qemu/share/qemu/s390-ccw.img b/qemu/share/qemu/s390-ccw.img deleted file mode 100755 index 6727f0ca39d6bf6d114974d1535cb7ad9e56355f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9336 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 U<32@#56aKxd7D2r=jhYF0b?J4UH||9 diff --git a/xv6-public/bio.d b/xv6-public/bio.d deleted file mode 100755 index 2a78178..0000000 --- a/xv6-public/bio.d +++ /dev/null @@ -1,2 +0,0 @@ -bio.o: bio.c /usr/include/stdc-predef.h types.h defs.h param.h spinlock.h \ - fs.h buf.h diff --git a/xv6-public/bio.o b/xv6-public/bio.o deleted file mode 100755 index 572a37af7617e7cbb6ace70e701c31d46869a09b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6084 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 HgBt$>1LUm; diff --git a/xv6-public/bootasm.d b/xv6-public/bootasm.d deleted file mode 100755 index 3b3dc19..0000000 --- a/xv6-public/bootasm.d +++ /dev/null @@ -1 +0,0 @@ -bootasm.o: bootasm.S asm.h memlayout.h mmu.h diff --git a/xv6-public/bootasm.o b/xv6-public/bootasm.o deleted file mode 100755 index 014fa31d89dcf061fce0add29b04a48973be58a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1528 zcma)6&ubGw6n>LUYt*)BZP7yoLrbBc-Ay*dixgCQJoQ$+d9w#8MGw7KF@A4%XR`%CAI!e*dvE4@Z)axr*|po(g%Bi7 zkU~916p#6tSh4zZk; zS<2_;v|Kti0ij!1G8AmAaeF>RN04;!M41mP-Y?v2Zta zWih3z`Yeg(VuXhKN5m1?kAQ_r|WXsYwL;u|{!n*$f&S4JkOMftz z??klscn}|lKOSIqukq&7@Pin^aG9uc1ZuX)^$T*D%)x6B|g znM;F5`|F@T*605CkYs=Jz;X>B4T3B%2u$WKgGcqYA(BFj^^Rdky*t2i4InLpj4=pI z=1g#jIaLQqF$j!%WxJ0Nt-Fu9!-#R+6Bx4Y2(a8cK-z@fBL;!VTI_?*-OJ=z0Kp+R z9!y!EYex0*sCx-9X;M$}zxkto8P!uj51B771!AK}x$ zs}UYT0L440UPL*vvz+If(K7|zT#00-e^1ZqafI: -# with %cs=0 %ip=7c00. - -.code16 # Assemble for 16-bit mode -.globl start -start: - cli # BIOS enabled interrupts; disable - 7c00: fa cli - - # Zero data segment registers DS, ES, and SS. - xorw %ax,%ax # Set %ax to zero - 7c01: 31 c0 xor %eax,%eax - movw %ax,%ds # -> Data Segment - 7c03: 8e d8 mov %eax,%ds - movw %ax,%es # -> Extra Segment - 7c05: 8e c0 mov %eax,%es - movw %ax,%ss # -> Stack Segment - 7c07: 8e d0 mov %eax,%ss - -00007c09 : - - # Physical address line A20 is tied to zero so that the first PCs - # with 2 MB would run software that assumed 1 MB. Undo that. -seta20.1: - inb $0x64,%al # Wait for not busy - 7c09: e4 64 in $0x64,%al - testb $0x2,%al - 7c0b: a8 02 test $0x2,%al - jnz seta20.1 - 7c0d: 75 fa jne 7c09 - - movb $0xd1,%al # 0xd1 -> port 0x64 - 7c0f: b0 d1 mov $0xd1,%al - outb %al,$0x64 - 7c11: e6 64 out %al,$0x64 - -00007c13 : - -seta20.2: - inb $0x64,%al # Wait for not busy - 7c13: e4 64 in $0x64,%al - testb $0x2,%al - 7c15: a8 02 test $0x2,%al - jnz seta20.2 - 7c17: 75 fa jne 7c13 - - movb $0xdf,%al # 0xdf -> port 0x60 - 7c19: b0 df mov $0xdf,%al - outb %al,$0x60 - 7c1b: e6 60 out %al,$0x60 - - # Switch from real to protected mode. Use a bootstrap GDT that makes - # virtual addresses map directly to physical addresses so that the - # effective memory map doesn't change during the transition. - lgdt gdtdesc - 7c1d: 0f 01 16 lgdtl (%esi) - 7c20: 78 7c js 7c9e - movl %cr0, %eax - 7c22: 0f 20 c0 mov %cr0,%eax - orl $CR0_PE, %eax - 7c25: 66 83 c8 01 or $0x1,%ax - movl %eax, %cr0 - 7c29: 0f 22 c0 mov %eax,%cr0 - -//PAGEBREAK! - # Complete transition to 32-bit protected mode by using long jmp - # to reload %cs and %eip. The segment descriptors are set up with no - # translation, so that the mapping is still the identity mapping. - ljmp $(SEG_KCODE<<3), $start32 - 7c2c: ea 31 7c 08 00 66 b8 ljmp $0xb866,$0x87c31 - -00007c31 : - -.code32 # Tell assembler to generate 32-bit code now. -start32: - # Set up the protected-mode data segment registers - movw $(SEG_KDATA<<3), %ax # Our data segment selector - 7c31: 66 b8 10 00 mov $0x10,%ax - movw %ax, %ds # -> DS: Data Segment - 7c35: 8e d8 mov %eax,%ds - movw %ax, %es # -> ES: Extra Segment - 7c37: 8e c0 mov %eax,%es - movw %ax, %ss # -> SS: Stack Segment - 7c39: 8e d0 mov %eax,%ss - movw $0, %ax # Zero segments not ready for use - 7c3b: 66 b8 00 00 mov $0x0,%ax - movw %ax, %fs # -> FS - 7c3f: 8e e0 mov %eax,%fs - movw %ax, %gs # -> GS - 7c41: 8e e8 mov %eax,%gs - - # Set up the stack pointer and call into C. - movl $start, %esp - 7c43: bc 00 7c 00 00 mov $0x7c00,%esp - call bootmain - 7c48: e8 df 00 00 00 call 7d2c - - # If bootmain returns (it shouldn't), trigger a Bochs - # breakpoint if running under Bochs, then loop. - movw $0x8a00, %ax # 0x8a00 -> port 0x8a00 - 7c4d: 66 b8 00 8a mov $0x8a00,%ax - movw %ax, %dx - 7c51: 66 89 c2 mov %ax,%dx - outw %ax, %dx - 7c54: 66 ef out %ax,(%dx) - movw $0x8ae0, %ax # 0x8ae0 -> port 0x8a00 - 7c56: 66 b8 e0 8a mov $0x8ae0,%ax - outw %ax, %dx - 7c5a: 66 ef out %ax,(%dx) - -00007c5c : -spin: - jmp spin - 7c5c: eb fe jmp 7c5c - 7c5e: 66 90 xchg %ax,%ax - -00007c60 : - ... - 7c68: ff (bad) - 7c69: ff 00 incl (%eax) - 7c6b: 00 00 add %al,(%eax) - 7c6d: 9a cf 00 ff ff 00 00 lcall $0x0,$0xffff00cf - 7c74: 00 92 cf 00 17 00 add %dl,0x1700cf(%edx) - -00007c78 : - 7c78: 17 pop %ss - 7c79: 00 60 7c add %ah,0x7c(%eax) - ... - -00007c7e : - entry(); -} - -void -waitdisk(void) -{ - 7c7e: 55 push %ebp - 7c7f: 89 e5 mov %esp,%ebp -static inline uchar -inb(ushort port) -{ - uchar data; - - asm volatile("in %1,%0" : "=a" (data) : "d" (port)); - 7c81: ba f7 01 00 00 mov $0x1f7,%edx - 7c86: ec in (%dx),%al - // Wait for disk ready. - while((inb(0x1F7) & 0xC0) != 0x40) - 7c87: 83 e0 c0 and $0xffffffc0,%eax - 7c8a: 3c 40 cmp $0x40,%al - 7c8c: 75 f8 jne 7c86 - ; -} - 7c8e: 5d pop %ebp - 7c8f: c3 ret - -00007c90 : - -// Read a single sector at offset into dst. -void -readsect(void *dst, uint offset) -{ - 7c90: 55 push %ebp - 7c91: 89 e5 mov %esp,%ebp - 7c93: 57 push %edi - 7c94: 53 push %ebx - 7c95: 8b 5d 0c mov 0xc(%ebp),%ebx - // Issue command. - waitdisk(); - 7c98: e8 e1 ff ff ff call 7c7e -} - -static inline void -outb(ushort port, uchar data) -{ - asm volatile("out %0,%1" : : "a" (data), "d" (port)); - 7c9d: ba f2 01 00 00 mov $0x1f2,%edx - 7ca2: b8 01 00 00 00 mov $0x1,%eax - 7ca7: ee out %al,(%dx) - 7ca8: b2 f3 mov $0xf3,%dl - 7caa: 89 d8 mov %ebx,%eax - 7cac: ee out %al,(%dx) - outb(0x1F2, 1); // count = 1 - outb(0x1F3, offset); - outb(0x1F4, offset >> 8); - 7cad: 89 d8 mov %ebx,%eax - 7caf: c1 e8 08 shr $0x8,%eax - 7cb2: b2 f4 mov $0xf4,%dl - 7cb4: ee out %al,(%dx) - outb(0x1F5, offset >> 16); - 7cb5: 89 d8 mov %ebx,%eax - 7cb7: c1 e8 10 shr $0x10,%eax - 7cba: b2 f5 mov $0xf5,%dl - 7cbc: ee out %al,(%dx) - outb(0x1F6, (offset >> 24) | 0xE0); - 7cbd: 89 d8 mov %ebx,%eax - 7cbf: c1 e8 18 shr $0x18,%eax - 7cc2: 83 c8 e0 or $0xffffffe0,%eax - 7cc5: b2 f6 mov $0xf6,%dl - 7cc7: ee out %al,(%dx) - 7cc8: b2 f7 mov $0xf7,%dl - 7cca: b8 20 00 00 00 mov $0x20,%eax - 7ccf: ee out %al,(%dx) - outb(0x1F7, 0x20); // cmd 0x20 - read sectors - - // Read data. - waitdisk(); - 7cd0: e8 a9 ff ff ff call 7c7e -} - -static inline void -insl(int port, void *addr, int cnt) -{ - asm volatile("cld; rep insl" : - 7cd5: 8b 7d 08 mov 0x8(%ebp),%edi - 7cd8: b9 80 00 00 00 mov $0x80,%ecx - 7cdd: ba f0 01 00 00 mov $0x1f0,%edx - 7ce2: fc cld - 7ce3: f3 6d rep insl (%dx),%es:(%edi) - insl(0x1F0, dst, SECTSIZE/4); -} - 7ce5: 5b pop %ebx - 7ce6: 5f pop %edi - 7ce7: 5d pop %ebp - 7ce8: c3 ret - -00007ce9 : - -// Read 'count' bytes at 'offset' from kernel into physical address 'pa'. -// Might copy more than asked. -void -readseg(uchar* pa, uint count, uint offset) -{ - 7ce9: 55 push %ebp - 7cea: 89 e5 mov %esp,%ebp - 7cec: 57 push %edi - 7ced: 56 push %esi - 7cee: 53 push %ebx - 7cef: 8b 5d 08 mov 0x8(%ebp),%ebx - 7cf2: 8b 75 10 mov 0x10(%ebp),%esi - uchar* epa; - - epa = pa + count; - 7cf5: 89 df mov %ebx,%edi - 7cf7: 03 7d 0c add 0xc(%ebp),%edi - - // Round down to sector boundary. - pa -= offset % SECTSIZE; - 7cfa: 89 f0 mov %esi,%eax - 7cfc: 25 ff 01 00 00 and $0x1ff,%eax - 7d01: 29 c3 sub %eax,%ebx - - // Translate from bytes to sectors; kernel starts at sector 1. - offset = (offset / SECTSIZE) + 1; - 7d03: c1 ee 09 shr $0x9,%esi - 7d06: 83 c6 01 add $0x1,%esi - - // If this is too slow, we could read lots of sectors at a time. - // We'd write more to memory than asked, but it doesn't matter -- - // we load in increasing order. - for(; pa < epa; pa += SECTSIZE, offset++) - 7d09: 39 df cmp %ebx,%edi - 7d0b: 76 17 jbe 7d24 - readsect(pa, offset); - 7d0d: 56 push %esi - 7d0e: 53 push %ebx - 7d0f: e8 7c ff ff ff call 7c90 - offset = (offset / SECTSIZE) + 1; - - // If this is too slow, we could read lots of sectors at a time. - // We'd write more to memory than asked, but it doesn't matter -- - // we load in increasing order. - for(; pa < epa; pa += SECTSIZE, offset++) - 7d14: 81 c3 00 02 00 00 add $0x200,%ebx - 7d1a: 83 c6 01 add $0x1,%esi - 7d1d: 83 c4 08 add $0x8,%esp - 7d20: 39 df cmp %ebx,%edi - 7d22: 77 e9 ja 7d0d - readsect(pa, offset); -} - 7d24: 8d 65 f4 lea -0xc(%ebp),%esp - 7d27: 5b pop %ebx - 7d28: 5e pop %esi - 7d29: 5f pop %edi - 7d2a: 5d pop %ebp - 7d2b: c3 ret - -00007d2c : - -void readseg(uchar*, uint, uint); - -void -bootmain(void) -{ - 7d2c: 55 push %ebp - 7d2d: 89 e5 mov %esp,%ebp - 7d2f: 57 push %edi - 7d30: 56 push %esi - 7d31: 53 push %ebx - 7d32: 83 ec 0c sub $0xc,%esp - uchar* pa; - - elf = (struct elfhdr*)0x10000; // scratch space - - // Read 1st page off disk - readseg((uchar*)elf, 4096, 0); - 7d35: 6a 00 push $0x0 - 7d37: 68 00 10 00 00 push $0x1000 - 7d3c: 68 00 00 01 00 push $0x10000 - 7d41: e8 a3 ff ff ff call 7ce9 - - // Is this an ELF executable? - if(elf->magic != ELF_MAGIC) - 7d46: 83 c4 0c add $0xc,%esp - 7d49: 81 3d 00 00 01 00 7f cmpl $0x464c457f,0x10000 - 7d50: 45 4c 46 - 7d53: 75 50 jne 7da5 - return; // let bootasm.S handle error - - // Load each program segment (ignores ph flags). - ph = (struct proghdr*)((uchar*)elf + elf->phoff); - 7d55: a1 1c 00 01 00 mov 0x1001c,%eax - 7d5a: 8d 98 00 00 01 00 lea 0x10000(%eax),%ebx - eph = ph + elf->phnum; - 7d60: 0f b7 35 2c 00 01 00 movzwl 0x1002c,%esi - 7d67: c1 e6 05 shl $0x5,%esi - 7d6a: 01 de add %ebx,%esi - for(; ph < eph; ph++){ - 7d6c: 39 f3 cmp %esi,%ebx - 7d6e: 73 2f jae 7d9f - pa = (uchar*)ph->paddr; - 7d70: 8b 7b 0c mov 0xc(%ebx),%edi - readseg(pa, ph->filesz, ph->off); - 7d73: ff 73 04 pushl 0x4(%ebx) - 7d76: ff 73 10 pushl 0x10(%ebx) - 7d79: 57 push %edi - 7d7a: e8 6a ff ff ff call 7ce9 - if(ph->memsz > ph->filesz) - 7d7f: 8b 4b 14 mov 0x14(%ebx),%ecx - 7d82: 8b 43 10 mov 0x10(%ebx),%eax - 7d85: 83 c4 0c add $0xc,%esp - 7d88: 39 c1 cmp %eax,%ecx - 7d8a: 76 0c jbe 7d98 - stosb(pa + ph->filesz, 0, ph->memsz - ph->filesz); - 7d8c: 01 c7 add %eax,%edi - 7d8e: 29 c1 sub %eax,%ecx -} - -static inline void -stosb(void *addr, int data, int cnt) -{ - asm volatile("cld; rep stosb" : - 7d90: b8 00 00 00 00 mov $0x0,%eax - 7d95: fc cld - 7d96: f3 aa rep stos %al,%es:(%edi) - return; // let bootasm.S handle error - - // Load each program segment (ignores ph flags). - ph = (struct proghdr*)((uchar*)elf + elf->phoff); - eph = ph + elf->phnum; - for(; ph < eph; ph++){ - 7d98: 83 c3 20 add $0x20,%ebx - 7d9b: 39 de cmp %ebx,%esi - 7d9d: 77 d1 ja 7d70 - } - - // Call the entry point from the ELF header. - // Does not return! - entry = (void(*)(void))(elf->entry); - entry(); - 7d9f: ff 15 18 00 01 00 call *0x10018 -} - 7da5: 8d 65 f4 lea -0xc(%ebp),%esp - 7da8: 5b pop %ebx - 7da9: 5e pop %esi - 7daa: 5f pop %edi - 7dab: 5d pop %ebp - 7dac: c3 ret diff --git a/xv6-public/bootblock.o b/xv6-public/bootblock.o deleted file mode 100755 index 59e8b86490091977a45b13666cdc62ea754973ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5302 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 SuUr=Tqv}S|A5BKITlqJinPzkV diff --git a/xv6-public/bootblockother.o b/xv6-public/bootblockother.o deleted file mode 100755 index fbefc89bf9818993358861f9a5a04b0d2227f3f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1221 zcma)5&ubG=5T2JbH3i!w{-|O_wkbs~X452i5YynH3Py!e6$6E^Np_P!nuOg=X-@`P z1fvA;=*|Bk$LOiIdh9Vr(L)hDh>G!>eY>zJJvcCL=9~H6o7vg-UaUR5CxjqR0u&?% zwTUtaUJl4ih7`na&ySxcO?*A;5zc&h;C*FA;p0JoB zi~ABKaIn8J=lvBJd()O%f)tvVxlAuVTmH2hV|pyz;Ar{920%mfB#!lt=JXaDwAbvrkzfa)vh-=NX25wvWiZaih4z} KHJD~a66qhVJ*r9o diff --git a/xv6-public/bootmain.d b/xv6-public/bootmain.d deleted file mode 100755 index b32eaf5..0000000 --- a/xv6-public/bootmain.d +++ /dev/null @@ -1 +0,0 @@ -bootmain.o: bootmain.c types.h elf.h x86.h memlayout.h diff --git a/xv6-public/bootmain.o b/xv6-public/bootmain.o deleted file mode 100755 index 80214fb78886b56d9f2fc815986e5c09961f0ae6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6004 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: - -char buf[512]; - -void -cat(int fd) -{ - 0: 55 push %ebp - 1: 89 e5 mov %esp,%ebp - 3: 83 ec 18 sub $0x18,%esp - int n; - - while((n = read(fd, buf, sizeof(buf))) > 0) - 6: eb 15 jmp 1d - write(1, buf, n); - 8: 83 ec 04 sub $0x4,%esp - b: ff 75 f4 pushl -0xc(%ebp) - e: 68 80 0b 00 00 push $0xb80 - 13: 6a 01 push $0x1 - 15: e8 69 03 00 00 call 383 - 1a: 83 c4 10 add $0x10,%esp -void -cat(int fd) -{ - int n; - - while((n = read(fd, buf, sizeof(buf))) > 0) - 1d: 83 ec 04 sub $0x4,%esp - 20: 68 00 02 00 00 push $0x200 - 25: 68 80 0b 00 00 push $0xb80 - 2a: ff 75 08 pushl 0x8(%ebp) - 2d: e8 49 03 00 00 call 37b - 32: 83 c4 10 add $0x10,%esp - 35: 89 45 f4 mov %eax,-0xc(%ebp) - 38: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 3c: 7f ca jg 8 - write(1, buf, n); - if(n < 0){ - 3e: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 42: 79 17 jns 5b - printf(1, "cat: read error\n"); - 44: 83 ec 08 sub $0x8,%esp - 47: 68 8c 08 00 00 push $0x88c - 4c: 6a 01 push $0x1 - 4e: e8 85 04 00 00 call 4d8 - 53: 83 c4 10 add $0x10,%esp - exit(); - 56: e8 08 03 00 00 call 363 - } -} - 5b: c9 leave - 5c: c3 ret - -0000005d
: - -int -main(int argc, char *argv[]) -{ - 5d: 8d 4c 24 04 lea 0x4(%esp),%ecx - 61: 83 e4 f0 and $0xfffffff0,%esp - 64: ff 71 fc pushl -0x4(%ecx) - 67: 55 push %ebp - 68: 89 e5 mov %esp,%ebp - 6a: 53 push %ebx - 6b: 51 push %ecx - 6c: 83 ec 10 sub $0x10,%esp - 6f: 89 cb mov %ecx,%ebx - int fd, i; - - if(argc <= 1){ - 71: 83 3b 01 cmpl $0x1,(%ebx) - 74: 7f 12 jg 88 - cat(0); - 76: 83 ec 0c sub $0xc,%esp - 79: 6a 00 push $0x0 - 7b: e8 80 ff ff ff call 0 - 80: 83 c4 10 add $0x10,%esp - exit(); - 83: e8 db 02 00 00 call 363 - } - - for(i = 1; i < argc; i++){ - 88: c7 45 f4 01 00 00 00 movl $0x1,-0xc(%ebp) - 8f: eb 71 jmp 102 - if((fd = open(argv[i], 0)) < 0){ - 91: 8b 45 f4 mov -0xc(%ebp),%eax - 94: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx - 9b: 8b 43 04 mov 0x4(%ebx),%eax - 9e: 01 d0 add %edx,%eax - a0: 8b 00 mov (%eax),%eax - a2: 83 ec 08 sub $0x8,%esp - a5: 6a 00 push $0x0 - a7: 50 push %eax - a8: e8 f6 02 00 00 call 3a3 - ad: 83 c4 10 add $0x10,%esp - b0: 89 45 f0 mov %eax,-0x10(%ebp) - b3: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - b7: 79 29 jns e2 - printf(1, "cat: cannot open %s\n", argv[i]); - b9: 8b 45 f4 mov -0xc(%ebp),%eax - bc: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx - c3: 8b 43 04 mov 0x4(%ebx),%eax - c6: 01 d0 add %edx,%eax - c8: 8b 00 mov (%eax),%eax - ca: 83 ec 04 sub $0x4,%esp - cd: 50 push %eax - ce: 68 9d 08 00 00 push $0x89d - d3: 6a 01 push $0x1 - d5: e8 fe 03 00 00 call 4d8 - da: 83 c4 10 add $0x10,%esp - exit(); - dd: e8 81 02 00 00 call 363 - } - cat(fd); - e2: 83 ec 0c sub $0xc,%esp - e5: ff 75 f0 pushl -0x10(%ebp) - e8: e8 13 ff ff ff call 0 - ed: 83 c4 10 add $0x10,%esp - close(fd); - f0: 83 ec 0c sub $0xc,%esp - f3: ff 75 f0 pushl -0x10(%ebp) - f6: e8 90 02 00 00 call 38b - fb: 83 c4 10 add $0x10,%esp - if(argc <= 1){ - cat(0); - exit(); - } - - for(i = 1; i < argc; i++){ - fe: 83 45 f4 01 addl $0x1,-0xc(%ebp) - 102: 8b 45 f4 mov -0xc(%ebp),%eax - 105: 3b 03 cmp (%ebx),%eax - 107: 7c 88 jl 91 - exit(); - } - cat(fd); - close(fd); - } - exit(); - 109: e8 55 02 00 00 call 363 - -0000010e : - "cc"); -} - -static inline void -stosb(void *addr, int data, int cnt) -{ - 10e: 55 push %ebp - 10f: 89 e5 mov %esp,%ebp - 111: 57 push %edi - 112: 53 push %ebx - asm volatile("cld; rep stosb" : - 113: 8b 4d 08 mov 0x8(%ebp),%ecx - 116: 8b 55 10 mov 0x10(%ebp),%edx - 119: 8b 45 0c mov 0xc(%ebp),%eax - 11c: 89 cb mov %ecx,%ebx - 11e: 89 df mov %ebx,%edi - 120: 89 d1 mov %edx,%ecx - 122: fc cld - 123: f3 aa rep stos %al,%es:(%edi) - 125: 89 ca mov %ecx,%edx - 127: 89 fb mov %edi,%ebx - 129: 89 5d 08 mov %ebx,0x8(%ebp) - 12c: 89 55 10 mov %edx,0x10(%ebp) - "=D" (addr), "=c" (cnt) : - "0" (addr), "1" (cnt), "a" (data) : - "memory", "cc"); -} - 12f: 5b pop %ebx - 130: 5f pop %edi - 131: 5d pop %ebp - 132: c3 ret - -00000133 : -#include "user.h" -#include "x86.h" - -char* -strcpy(char *s, char *t) -{ - 133: 55 push %ebp - 134: 89 e5 mov %esp,%ebp - 136: 83 ec 10 sub $0x10,%esp - char *os; - - os = s; - 139: 8b 45 08 mov 0x8(%ebp),%eax - 13c: 89 45 fc mov %eax,-0x4(%ebp) - while((*s++ = *t++) != 0) - 13f: 90 nop - 140: 8b 45 08 mov 0x8(%ebp),%eax - 143: 8d 50 01 lea 0x1(%eax),%edx - 146: 89 55 08 mov %edx,0x8(%ebp) - 149: 8b 55 0c mov 0xc(%ebp),%edx - 14c: 8d 4a 01 lea 0x1(%edx),%ecx - 14f: 89 4d 0c mov %ecx,0xc(%ebp) - 152: 0f b6 12 movzbl (%edx),%edx - 155: 88 10 mov %dl,(%eax) - 157: 0f b6 00 movzbl (%eax),%eax - 15a: 84 c0 test %al,%al - 15c: 75 e2 jne 140 - ; - return os; - 15e: 8b 45 fc mov -0x4(%ebp),%eax -} - 161: c9 leave - 162: c3 ret - -00000163 : - -int -strcmp(const char *p, const char *q) -{ - 163: 55 push %ebp - 164: 89 e5 mov %esp,%ebp - while(*p && *p == *q) - 166: eb 08 jmp 170 - p++, q++; - 168: 83 45 08 01 addl $0x1,0x8(%ebp) - 16c: 83 45 0c 01 addl $0x1,0xc(%ebp) -} - -int -strcmp(const char *p, const char *q) -{ - while(*p && *p == *q) - 170: 8b 45 08 mov 0x8(%ebp),%eax - 173: 0f b6 00 movzbl (%eax),%eax - 176: 84 c0 test %al,%al - 178: 74 10 je 18a - 17a: 8b 45 08 mov 0x8(%ebp),%eax - 17d: 0f b6 10 movzbl (%eax),%edx - 180: 8b 45 0c mov 0xc(%ebp),%eax - 183: 0f b6 00 movzbl (%eax),%eax - 186: 38 c2 cmp %al,%dl - 188: 74 de je 168 - p++, q++; - return (uchar)*p - (uchar)*q; - 18a: 8b 45 08 mov 0x8(%ebp),%eax - 18d: 0f b6 00 movzbl (%eax),%eax - 190: 0f b6 d0 movzbl %al,%edx - 193: 8b 45 0c mov 0xc(%ebp),%eax - 196: 0f b6 00 movzbl (%eax),%eax - 199: 0f b6 c0 movzbl %al,%eax - 19c: 29 c2 sub %eax,%edx - 19e: 89 d0 mov %edx,%eax -} - 1a0: 5d pop %ebp - 1a1: c3 ret - -000001a2 : - -uint -strlen(char *s) -{ - 1a2: 55 push %ebp - 1a3: 89 e5 mov %esp,%ebp - 1a5: 83 ec 10 sub $0x10,%esp - int n; - - for(n = 0; s[n]; n++) - 1a8: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - 1af: eb 04 jmp 1b5 - 1b1: 83 45 fc 01 addl $0x1,-0x4(%ebp) - 1b5: 8b 55 fc mov -0x4(%ebp),%edx - 1b8: 8b 45 08 mov 0x8(%ebp),%eax - 1bb: 01 d0 add %edx,%eax - 1bd: 0f b6 00 movzbl (%eax),%eax - 1c0: 84 c0 test %al,%al - 1c2: 75 ed jne 1b1 - ; - return n; - 1c4: 8b 45 fc mov -0x4(%ebp),%eax -} - 1c7: c9 leave - 1c8: c3 ret - -000001c9 : - -void* -memset(void *dst, int c, uint n) -{ - 1c9: 55 push %ebp - 1ca: 89 e5 mov %esp,%ebp - stosb(dst, c, n); - 1cc: 8b 45 10 mov 0x10(%ebp),%eax - 1cf: 50 push %eax - 1d0: ff 75 0c pushl 0xc(%ebp) - 1d3: ff 75 08 pushl 0x8(%ebp) - 1d6: e8 33 ff ff ff call 10e - 1db: 83 c4 0c add $0xc,%esp - return dst; - 1de: 8b 45 08 mov 0x8(%ebp),%eax -} - 1e1: c9 leave - 1e2: c3 ret - -000001e3 : - -char* -strchr(const char *s, char c) -{ - 1e3: 55 push %ebp - 1e4: 89 e5 mov %esp,%ebp - 1e6: 83 ec 04 sub $0x4,%esp - 1e9: 8b 45 0c mov 0xc(%ebp),%eax - 1ec: 88 45 fc mov %al,-0x4(%ebp) - for(; *s; s++) - 1ef: eb 14 jmp 205 - if(*s == c) - 1f1: 8b 45 08 mov 0x8(%ebp),%eax - 1f4: 0f b6 00 movzbl (%eax),%eax - 1f7: 3a 45 fc cmp -0x4(%ebp),%al - 1fa: 75 05 jne 201 - return (char*)s; - 1fc: 8b 45 08 mov 0x8(%ebp),%eax - 1ff: eb 13 jmp 214 -} - -char* -strchr(const char *s, char c) -{ - for(; *s; s++) - 201: 83 45 08 01 addl $0x1,0x8(%ebp) - 205: 8b 45 08 mov 0x8(%ebp),%eax - 208: 0f b6 00 movzbl (%eax),%eax - 20b: 84 c0 test %al,%al - 20d: 75 e2 jne 1f1 - if(*s == c) - return (char*)s; - return 0; - 20f: b8 00 00 00 00 mov $0x0,%eax -} - 214: c9 leave - 215: c3 ret - -00000216 : - -char* -gets(char *buf, int max) -{ - 216: 55 push %ebp - 217: 89 e5 mov %esp,%ebp - 219: 83 ec 18 sub $0x18,%esp - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - 21c: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 223: eb 44 jmp 269 - cc = read(0, &c, 1); - 225: 83 ec 04 sub $0x4,%esp - 228: 6a 01 push $0x1 - 22a: 8d 45 ef lea -0x11(%ebp),%eax - 22d: 50 push %eax - 22e: 6a 00 push $0x0 - 230: e8 46 01 00 00 call 37b - 235: 83 c4 10 add $0x10,%esp - 238: 89 45 f0 mov %eax,-0x10(%ebp) - if(cc < 1) - 23b: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 23f: 7f 02 jg 243 - break; - 241: eb 31 jmp 274 - buf[i++] = c; - 243: 8b 45 f4 mov -0xc(%ebp),%eax - 246: 8d 50 01 lea 0x1(%eax),%edx - 249: 89 55 f4 mov %edx,-0xc(%ebp) - 24c: 89 c2 mov %eax,%edx - 24e: 8b 45 08 mov 0x8(%ebp),%eax - 251: 01 c2 add %eax,%edx - 253: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 257: 88 02 mov %al,(%edx) - if(c == '\n' || c == '\r') - 259: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 25d: 3c 0a cmp $0xa,%al - 25f: 74 13 je 274 - 261: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 265: 3c 0d cmp $0xd,%al - 267: 74 0b je 274 -gets(char *buf, int max) -{ - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - 269: 8b 45 f4 mov -0xc(%ebp),%eax - 26c: 83 c0 01 add $0x1,%eax - 26f: 3b 45 0c cmp 0xc(%ebp),%eax - 272: 7c b1 jl 225 - break; - buf[i++] = c; - if(c == '\n' || c == '\r') - break; - } - buf[i] = '\0'; - 274: 8b 55 f4 mov -0xc(%ebp),%edx - 277: 8b 45 08 mov 0x8(%ebp),%eax - 27a: 01 d0 add %edx,%eax - 27c: c6 00 00 movb $0x0,(%eax) - return buf; - 27f: 8b 45 08 mov 0x8(%ebp),%eax -} - 282: c9 leave - 283: c3 ret - -00000284 : - -int -stat(char *n, struct stat *st) -{ - 284: 55 push %ebp - 285: 89 e5 mov %esp,%ebp - 287: 83 ec 18 sub $0x18,%esp - int fd; - int r; - - fd = open(n, O_RDONLY); - 28a: 83 ec 08 sub $0x8,%esp - 28d: 6a 00 push $0x0 - 28f: ff 75 08 pushl 0x8(%ebp) - 292: e8 0c 01 00 00 call 3a3 - 297: 83 c4 10 add $0x10,%esp - 29a: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd < 0) - 29d: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 2a1: 79 07 jns 2aa - return -1; - 2a3: b8 ff ff ff ff mov $0xffffffff,%eax - 2a8: eb 25 jmp 2cf - r = fstat(fd, st); - 2aa: 83 ec 08 sub $0x8,%esp - 2ad: ff 75 0c pushl 0xc(%ebp) - 2b0: ff 75 f4 pushl -0xc(%ebp) - 2b3: e8 03 01 00 00 call 3bb - 2b8: 83 c4 10 add $0x10,%esp - 2bb: 89 45 f0 mov %eax,-0x10(%ebp) - close(fd); - 2be: 83 ec 0c sub $0xc,%esp - 2c1: ff 75 f4 pushl -0xc(%ebp) - 2c4: e8 c2 00 00 00 call 38b - 2c9: 83 c4 10 add $0x10,%esp - return r; - 2cc: 8b 45 f0 mov -0x10(%ebp),%eax -} - 2cf: c9 leave - 2d0: c3 ret - -000002d1 : - -int -atoi(const char *s) -{ - 2d1: 55 push %ebp - 2d2: 89 e5 mov %esp,%ebp - 2d4: 83 ec 10 sub $0x10,%esp - int n; - - n = 0; - 2d7: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - while('0' <= *s && *s <= '9') - 2de: eb 25 jmp 305 - n = n*10 + *s++ - '0'; - 2e0: 8b 55 fc mov -0x4(%ebp),%edx - 2e3: 89 d0 mov %edx,%eax - 2e5: c1 e0 02 shl $0x2,%eax - 2e8: 01 d0 add %edx,%eax - 2ea: 01 c0 add %eax,%eax - 2ec: 89 c1 mov %eax,%ecx - 2ee: 8b 45 08 mov 0x8(%ebp),%eax - 2f1: 8d 50 01 lea 0x1(%eax),%edx - 2f4: 89 55 08 mov %edx,0x8(%ebp) - 2f7: 0f b6 00 movzbl (%eax),%eax - 2fa: 0f be c0 movsbl %al,%eax - 2fd: 01 c8 add %ecx,%eax - 2ff: 83 e8 30 sub $0x30,%eax - 302: 89 45 fc mov %eax,-0x4(%ebp) -atoi(const char *s) -{ - int n; - - n = 0; - while('0' <= *s && *s <= '9') - 305: 8b 45 08 mov 0x8(%ebp),%eax - 308: 0f b6 00 movzbl (%eax),%eax - 30b: 3c 2f cmp $0x2f,%al - 30d: 7e 0a jle 319 - 30f: 8b 45 08 mov 0x8(%ebp),%eax - 312: 0f b6 00 movzbl (%eax),%eax - 315: 3c 39 cmp $0x39,%al - 317: 7e c7 jle 2e0 - n = n*10 + *s++ - '0'; - return n; - 319: 8b 45 fc mov -0x4(%ebp),%eax -} - 31c: c9 leave - 31d: c3 ret - -0000031e : - -void* -memmove(void *vdst, void *vsrc, int n) -{ - 31e: 55 push %ebp - 31f: 89 e5 mov %esp,%ebp - 321: 83 ec 10 sub $0x10,%esp - char *dst, *src; - - dst = vdst; - 324: 8b 45 08 mov 0x8(%ebp),%eax - 327: 89 45 fc mov %eax,-0x4(%ebp) - src = vsrc; - 32a: 8b 45 0c mov 0xc(%ebp),%eax - 32d: 89 45 f8 mov %eax,-0x8(%ebp) - while(n-- > 0) - 330: eb 17 jmp 349 - *dst++ = *src++; - 332: 8b 45 fc mov -0x4(%ebp),%eax - 335: 8d 50 01 lea 0x1(%eax),%edx - 338: 89 55 fc mov %edx,-0x4(%ebp) - 33b: 8b 55 f8 mov -0x8(%ebp),%edx - 33e: 8d 4a 01 lea 0x1(%edx),%ecx - 341: 89 4d f8 mov %ecx,-0x8(%ebp) - 344: 0f b6 12 movzbl (%edx),%edx - 347: 88 10 mov %dl,(%eax) -{ - char *dst, *src; - - dst = vdst; - src = vsrc; - while(n-- > 0) - 349: 8b 45 10 mov 0x10(%ebp),%eax - 34c: 8d 50 ff lea -0x1(%eax),%edx - 34f: 89 55 10 mov %edx,0x10(%ebp) - 352: 85 c0 test %eax,%eax - 354: 7f dc jg 332 - *dst++ = *src++; - return vdst; - 356: 8b 45 08 mov 0x8(%ebp),%eax -} - 359: c9 leave - 35a: c3 ret - -0000035b : - name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 35b: b8 01 00 00 00 mov $0x1,%eax - 360: cd 40 int $0x40 - 362: c3 ret - -00000363 : -SYSCALL(exit) - 363: b8 02 00 00 00 mov $0x2,%eax - 368: cd 40 int $0x40 - 36a: c3 ret - -0000036b : -SYSCALL(wait) - 36b: b8 03 00 00 00 mov $0x3,%eax - 370: cd 40 int $0x40 - 372: c3 ret - -00000373 : -SYSCALL(pipe) - 373: b8 04 00 00 00 mov $0x4,%eax - 378: cd 40 int $0x40 - 37a: c3 ret - -0000037b : -SYSCALL(read) - 37b: b8 05 00 00 00 mov $0x5,%eax - 380: cd 40 int $0x40 - 382: c3 ret - -00000383 : -SYSCALL(write) - 383: b8 10 00 00 00 mov $0x10,%eax - 388: cd 40 int $0x40 - 38a: c3 ret - -0000038b : -SYSCALL(close) - 38b: b8 15 00 00 00 mov $0x15,%eax - 390: cd 40 int $0x40 - 392: c3 ret - -00000393 : -SYSCALL(kill) - 393: b8 06 00 00 00 mov $0x6,%eax - 398: cd 40 int $0x40 - 39a: c3 ret - -0000039b : -SYSCALL(exec) - 39b: b8 07 00 00 00 mov $0x7,%eax - 3a0: cd 40 int $0x40 - 3a2: c3 ret - -000003a3 : -SYSCALL(open) - 3a3: b8 0f 00 00 00 mov $0xf,%eax - 3a8: cd 40 int $0x40 - 3aa: c3 ret - -000003ab : -SYSCALL(mknod) - 3ab: b8 11 00 00 00 mov $0x11,%eax - 3b0: cd 40 int $0x40 - 3b2: c3 ret - -000003b3 : -SYSCALL(unlink) - 3b3: b8 12 00 00 00 mov $0x12,%eax - 3b8: cd 40 int $0x40 - 3ba: c3 ret - -000003bb : -SYSCALL(fstat) - 3bb: b8 08 00 00 00 mov $0x8,%eax - 3c0: cd 40 int $0x40 - 3c2: c3 ret - -000003c3 : -SYSCALL(link) - 3c3: b8 13 00 00 00 mov $0x13,%eax - 3c8: cd 40 int $0x40 - 3ca: c3 ret - -000003cb : -SYSCALL(mkdir) - 3cb: b8 14 00 00 00 mov $0x14,%eax - 3d0: cd 40 int $0x40 - 3d2: c3 ret - -000003d3 : -SYSCALL(chdir) - 3d3: b8 09 00 00 00 mov $0x9,%eax - 3d8: cd 40 int $0x40 - 3da: c3 ret - -000003db : -SYSCALL(dup) - 3db: b8 0a 00 00 00 mov $0xa,%eax - 3e0: cd 40 int $0x40 - 3e2: c3 ret - -000003e3 : -SYSCALL(getpid) - 3e3: b8 0b 00 00 00 mov $0xb,%eax - 3e8: cd 40 int $0x40 - 3ea: c3 ret - -000003eb : -SYSCALL(sbrk) - 3eb: b8 0c 00 00 00 mov $0xc,%eax - 3f0: cd 40 int $0x40 - 3f2: c3 ret - -000003f3 : -SYSCALL(sleep) - 3f3: b8 0d 00 00 00 mov $0xd,%eax - 3f8: cd 40 int $0x40 - 3fa: c3 ret - -000003fb : -SYSCALL(uptime) - 3fb: b8 0e 00 00 00 mov $0xe,%eax - 400: cd 40 int $0x40 - 402: c3 ret - -00000403 : -#include "stat.h" -#include "user.h" - -static void -putc(int fd, char c) -{ - 403: 55 push %ebp - 404: 89 e5 mov %esp,%ebp - 406: 83 ec 18 sub $0x18,%esp - 409: 8b 45 0c mov 0xc(%ebp),%eax - 40c: 88 45 f4 mov %al,-0xc(%ebp) - write(fd, &c, 1); - 40f: 83 ec 04 sub $0x4,%esp - 412: 6a 01 push $0x1 - 414: 8d 45 f4 lea -0xc(%ebp),%eax - 417: 50 push %eax - 418: ff 75 08 pushl 0x8(%ebp) - 41b: e8 63 ff ff ff call 383 - 420: 83 c4 10 add $0x10,%esp -} - 423: c9 leave - 424: c3 ret - -00000425 : - -static void -printint(int fd, int xx, int base, int sgn) -{ - 425: 55 push %ebp - 426: 89 e5 mov %esp,%ebp - 428: 53 push %ebx - 429: 83 ec 24 sub $0x24,%esp - static char digits[] = "0123456789ABCDEF"; - char buf[16]; - int i, neg; - uint x; - - neg = 0; - 42c: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - if(sgn && xx < 0){ - 433: 83 7d 14 00 cmpl $0x0,0x14(%ebp) - 437: 74 17 je 450 - 439: 83 7d 0c 00 cmpl $0x0,0xc(%ebp) - 43d: 79 11 jns 450 - neg = 1; - 43f: c7 45 f0 01 00 00 00 movl $0x1,-0x10(%ebp) - x = -xx; - 446: 8b 45 0c mov 0xc(%ebp),%eax - 449: f7 d8 neg %eax - 44b: 89 45 ec mov %eax,-0x14(%ebp) - 44e: eb 06 jmp 456 - } else { - x = xx; - 450: 8b 45 0c mov 0xc(%ebp),%eax - 453: 89 45 ec mov %eax,-0x14(%ebp) - } - - i = 0; - 456: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - do{ - buf[i++] = digits[x % base]; - 45d: 8b 4d f4 mov -0xc(%ebp),%ecx - 460: 8d 41 01 lea 0x1(%ecx),%eax - 463: 89 45 f4 mov %eax,-0xc(%ebp) - 466: 8b 5d 10 mov 0x10(%ebp),%ebx - 469: 8b 45 ec mov -0x14(%ebp),%eax - 46c: ba 00 00 00 00 mov $0x0,%edx - 471: f7 f3 div %ebx - 473: 89 d0 mov %edx,%eax - 475: 0f b6 80 28 0b 00 00 movzbl 0xb28(%eax),%eax - 47c: 88 44 0d dc mov %al,-0x24(%ebp,%ecx,1) - }while((x /= base) != 0); - 480: 8b 5d 10 mov 0x10(%ebp),%ebx - 483: 8b 45 ec mov -0x14(%ebp),%eax - 486: ba 00 00 00 00 mov $0x0,%edx - 48b: f7 f3 div %ebx - 48d: 89 45 ec mov %eax,-0x14(%ebp) - 490: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 494: 75 c7 jne 45d - if(neg) - 496: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 49a: 74 0e je 4aa - buf[i++] = '-'; - 49c: 8b 45 f4 mov -0xc(%ebp),%eax - 49f: 8d 50 01 lea 0x1(%eax),%edx - 4a2: 89 55 f4 mov %edx,-0xc(%ebp) - 4a5: c6 44 05 dc 2d movb $0x2d,-0x24(%ebp,%eax,1) - - while(--i >= 0) - 4aa: eb 1d jmp 4c9 - putc(fd, buf[i]); - 4ac: 8d 55 dc lea -0x24(%ebp),%edx - 4af: 8b 45 f4 mov -0xc(%ebp),%eax - 4b2: 01 d0 add %edx,%eax - 4b4: 0f b6 00 movzbl (%eax),%eax - 4b7: 0f be c0 movsbl %al,%eax - 4ba: 83 ec 08 sub $0x8,%esp - 4bd: 50 push %eax - 4be: ff 75 08 pushl 0x8(%ebp) - 4c1: e8 3d ff ff ff call 403 - 4c6: 83 c4 10 add $0x10,%esp - buf[i++] = digits[x % base]; - }while((x /= base) != 0); - if(neg) - buf[i++] = '-'; - - while(--i >= 0) - 4c9: 83 6d f4 01 subl $0x1,-0xc(%ebp) - 4cd: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 4d1: 79 d9 jns 4ac - putc(fd, buf[i]); -} - 4d3: 8b 5d fc mov -0x4(%ebp),%ebx - 4d6: c9 leave - 4d7: c3 ret - -000004d8 : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void -printf(int fd, char *fmt, ...) -{ - 4d8: 55 push %ebp - 4d9: 89 e5 mov %esp,%ebp - 4db: 83 ec 28 sub $0x28,%esp - char *s; - int c, i, state; - uint *ap; - - state = 0; - 4de: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - ap = (uint*)(void*)&fmt + 1; - 4e5: 8d 45 0c lea 0xc(%ebp),%eax - 4e8: 83 c0 04 add $0x4,%eax - 4eb: 89 45 e8 mov %eax,-0x18(%ebp) - for(i = 0; fmt[i]; i++){ - 4ee: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - 4f5: e9 59 01 00 00 jmp 653 - c = fmt[i] & 0xff; - 4fa: 8b 55 0c mov 0xc(%ebp),%edx - 4fd: 8b 45 f0 mov -0x10(%ebp),%eax - 500: 01 d0 add %edx,%eax - 502: 0f b6 00 movzbl (%eax),%eax - 505: 0f be c0 movsbl %al,%eax - 508: 25 ff 00 00 00 and $0xff,%eax - 50d: 89 45 e4 mov %eax,-0x1c(%ebp) - if(state == 0){ - 510: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 514: 75 2c jne 542 - if(c == '%'){ - 516: 83 7d e4 25 cmpl $0x25,-0x1c(%ebp) - 51a: 75 0c jne 528 - state = '%'; - 51c: c7 45 ec 25 00 00 00 movl $0x25,-0x14(%ebp) - 523: e9 27 01 00 00 jmp 64f - } else { - putc(fd, c); - 528: 8b 45 e4 mov -0x1c(%ebp),%eax - 52b: 0f be c0 movsbl %al,%eax - 52e: 83 ec 08 sub $0x8,%esp - 531: 50 push %eax - 532: ff 75 08 pushl 0x8(%ebp) - 535: e8 c9 fe ff ff call 403 - 53a: 83 c4 10 add $0x10,%esp - 53d: e9 0d 01 00 00 jmp 64f - } - } else if(state == '%'){ - 542: 83 7d ec 25 cmpl $0x25,-0x14(%ebp) - 546: 0f 85 03 01 00 00 jne 64f - if(c == 'd'){ - 54c: 83 7d e4 64 cmpl $0x64,-0x1c(%ebp) - 550: 75 1e jne 570 - printint(fd, *ap, 10, 1); - 552: 8b 45 e8 mov -0x18(%ebp),%eax - 555: 8b 00 mov (%eax),%eax - 557: 6a 01 push $0x1 - 559: 6a 0a push $0xa - 55b: 50 push %eax - 55c: ff 75 08 pushl 0x8(%ebp) - 55f: e8 c1 fe ff ff call 425 - 564: 83 c4 10 add $0x10,%esp - ap++; - 567: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 56b: e9 d8 00 00 00 jmp 648 - } else if(c == 'x' || c == 'p'){ - 570: 83 7d e4 78 cmpl $0x78,-0x1c(%ebp) - 574: 74 06 je 57c - 576: 83 7d e4 70 cmpl $0x70,-0x1c(%ebp) - 57a: 75 1e jne 59a - printint(fd, *ap, 16, 0); - 57c: 8b 45 e8 mov -0x18(%ebp),%eax - 57f: 8b 00 mov (%eax),%eax - 581: 6a 00 push $0x0 - 583: 6a 10 push $0x10 - 585: 50 push %eax - 586: ff 75 08 pushl 0x8(%ebp) - 589: e8 97 fe ff ff call 425 - 58e: 83 c4 10 add $0x10,%esp - ap++; - 591: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 595: e9 ae 00 00 00 jmp 648 - } else if(c == 's'){ - 59a: 83 7d e4 73 cmpl $0x73,-0x1c(%ebp) - 59e: 75 43 jne 5e3 - s = (char*)*ap; - 5a0: 8b 45 e8 mov -0x18(%ebp),%eax - 5a3: 8b 00 mov (%eax),%eax - 5a5: 89 45 f4 mov %eax,-0xc(%ebp) - ap++; - 5a8: 83 45 e8 04 addl $0x4,-0x18(%ebp) - if(s == 0) - 5ac: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 5b0: 75 07 jne 5b9 - s = "(null)"; - 5b2: c7 45 f4 b2 08 00 00 movl $0x8b2,-0xc(%ebp) - while(*s != 0){ - 5b9: eb 1c jmp 5d7 - putc(fd, *s); - 5bb: 8b 45 f4 mov -0xc(%ebp),%eax - 5be: 0f b6 00 movzbl (%eax),%eax - 5c1: 0f be c0 movsbl %al,%eax - 5c4: 83 ec 08 sub $0x8,%esp - 5c7: 50 push %eax - 5c8: ff 75 08 pushl 0x8(%ebp) - 5cb: e8 33 fe ff ff call 403 - 5d0: 83 c4 10 add $0x10,%esp - s++; - 5d3: 83 45 f4 01 addl $0x1,-0xc(%ebp) - } else if(c == 's'){ - s = (char*)*ap; - ap++; - if(s == 0) - s = "(null)"; - while(*s != 0){ - 5d7: 8b 45 f4 mov -0xc(%ebp),%eax - 5da: 0f b6 00 movzbl (%eax),%eax - 5dd: 84 c0 test %al,%al - 5df: 75 da jne 5bb - 5e1: eb 65 jmp 648 - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 5e3: 83 7d e4 63 cmpl $0x63,-0x1c(%ebp) - 5e7: 75 1d jne 606 - putc(fd, *ap); - 5e9: 8b 45 e8 mov -0x18(%ebp),%eax - 5ec: 8b 00 mov (%eax),%eax - 5ee: 0f be c0 movsbl %al,%eax - 5f1: 83 ec 08 sub $0x8,%esp - 5f4: 50 push %eax - 5f5: ff 75 08 pushl 0x8(%ebp) - 5f8: e8 06 fe ff ff call 403 - 5fd: 83 c4 10 add $0x10,%esp - ap++; - 600: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 604: eb 42 jmp 648 - } else if(c == '%'){ - 606: 83 7d e4 25 cmpl $0x25,-0x1c(%ebp) - 60a: 75 17 jne 623 - putc(fd, c); - 60c: 8b 45 e4 mov -0x1c(%ebp),%eax - 60f: 0f be c0 movsbl %al,%eax - 612: 83 ec 08 sub $0x8,%esp - 615: 50 push %eax - 616: ff 75 08 pushl 0x8(%ebp) - 619: e8 e5 fd ff ff call 403 - 61e: 83 c4 10 add $0x10,%esp - 621: eb 25 jmp 648 - } else { - // Unknown % sequence. Print it to draw attention. - putc(fd, '%'); - 623: 83 ec 08 sub $0x8,%esp - 626: 6a 25 push $0x25 - 628: ff 75 08 pushl 0x8(%ebp) - 62b: e8 d3 fd ff ff call 403 - 630: 83 c4 10 add $0x10,%esp - putc(fd, c); - 633: 8b 45 e4 mov -0x1c(%ebp),%eax - 636: 0f be c0 movsbl %al,%eax - 639: 83 ec 08 sub $0x8,%esp - 63c: 50 push %eax - 63d: ff 75 08 pushl 0x8(%ebp) - 640: e8 be fd ff ff call 403 - 645: 83 c4 10 add $0x10,%esp - } - state = 0; - 648: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for(i = 0; fmt[i]; i++){ - 64f: 83 45 f0 01 addl $0x1,-0x10(%ebp) - 653: 8b 55 0c mov 0xc(%ebp),%edx - 656: 8b 45 f0 mov -0x10(%ebp),%eax - 659: 01 d0 add %edx,%eax - 65b: 0f b6 00 movzbl (%eax),%eax - 65e: 84 c0 test %al,%al - 660: 0f 85 94 fe ff ff jne 4fa - putc(fd, c); - } - state = 0; - } - } -} - 666: c9 leave - 667: c3 ret - -00000668 : -static Header base; -static Header *freep; - -void -free(void *ap) -{ - 668: 55 push %ebp - 669: 89 e5 mov %esp,%ebp - 66b: 83 ec 10 sub $0x10,%esp - Header *bp, *p; - - bp = (Header*)ap - 1; - 66e: 8b 45 08 mov 0x8(%ebp),%eax - 671: 83 e8 08 sub $0x8,%eax - 674: 89 45 f8 mov %eax,-0x8(%ebp) - for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 677: a1 48 0b 00 00 mov 0xb48,%eax - 67c: 89 45 fc mov %eax,-0x4(%ebp) - 67f: eb 24 jmp 6a5 - if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 681: 8b 45 fc mov -0x4(%ebp),%eax - 684: 8b 00 mov (%eax),%eax - 686: 3b 45 fc cmp -0x4(%ebp),%eax - 689: 77 12 ja 69d - 68b: 8b 45 f8 mov -0x8(%ebp),%eax - 68e: 3b 45 fc cmp -0x4(%ebp),%eax - 691: 77 24 ja 6b7 - 693: 8b 45 fc mov -0x4(%ebp),%eax - 696: 8b 00 mov (%eax),%eax - 698: 3b 45 f8 cmp -0x8(%ebp),%eax - 69b: 77 1a ja 6b7 -free(void *ap) -{ - Header *bp, *p; - - bp = (Header*)ap - 1; - for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 69d: 8b 45 fc mov -0x4(%ebp),%eax - 6a0: 8b 00 mov (%eax),%eax - 6a2: 89 45 fc mov %eax,-0x4(%ebp) - 6a5: 8b 45 f8 mov -0x8(%ebp),%eax - 6a8: 3b 45 fc cmp -0x4(%ebp),%eax - 6ab: 76 d4 jbe 681 - 6ad: 8b 45 fc mov -0x4(%ebp),%eax - 6b0: 8b 00 mov (%eax),%eax - 6b2: 3b 45 f8 cmp -0x8(%ebp),%eax - 6b5: 76 ca jbe 681 - if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - break; - if(bp + bp->s.size == p->s.ptr){ - 6b7: 8b 45 f8 mov -0x8(%ebp),%eax - 6ba: 8b 40 04 mov 0x4(%eax),%eax - 6bd: 8d 14 c5 00 00 00 00 lea 0x0(,%eax,8),%edx - 6c4: 8b 45 f8 mov -0x8(%ebp),%eax - 6c7: 01 c2 add %eax,%edx - 6c9: 8b 45 fc mov -0x4(%ebp),%eax - 6cc: 8b 00 mov (%eax),%eax - 6ce: 39 c2 cmp %eax,%edx - 6d0: 75 24 jne 6f6 - bp->s.size += p->s.ptr->s.size; - 6d2: 8b 45 f8 mov -0x8(%ebp),%eax - 6d5: 8b 50 04 mov 0x4(%eax),%edx - 6d8: 8b 45 fc mov -0x4(%ebp),%eax - 6db: 8b 00 mov (%eax),%eax - 6dd: 8b 40 04 mov 0x4(%eax),%eax - 6e0: 01 c2 add %eax,%edx - 6e2: 8b 45 f8 mov -0x8(%ebp),%eax - 6e5: 89 50 04 mov %edx,0x4(%eax) - bp->s.ptr = p->s.ptr->s.ptr; - 6e8: 8b 45 fc mov -0x4(%ebp),%eax - 6eb: 8b 00 mov (%eax),%eax - 6ed: 8b 10 mov (%eax),%edx - 6ef: 8b 45 f8 mov -0x8(%ebp),%eax - 6f2: 89 10 mov %edx,(%eax) - 6f4: eb 0a jmp 700 - } else - bp->s.ptr = p->s.ptr; - 6f6: 8b 45 fc mov -0x4(%ebp),%eax - 6f9: 8b 10 mov (%eax),%edx - 6fb: 8b 45 f8 mov -0x8(%ebp),%eax - 6fe: 89 10 mov %edx,(%eax) - if(p + p->s.size == bp){ - 700: 8b 45 fc mov -0x4(%ebp),%eax - 703: 8b 40 04 mov 0x4(%eax),%eax - 706: 8d 14 c5 00 00 00 00 lea 0x0(,%eax,8),%edx - 70d: 8b 45 fc mov -0x4(%ebp),%eax - 710: 01 d0 add %edx,%eax - 712: 3b 45 f8 cmp -0x8(%ebp),%eax - 715: 75 20 jne 737 - p->s.size += bp->s.size; - 717: 8b 45 fc mov -0x4(%ebp),%eax - 71a: 8b 50 04 mov 0x4(%eax),%edx - 71d: 8b 45 f8 mov -0x8(%ebp),%eax - 720: 8b 40 04 mov 0x4(%eax),%eax - 723: 01 c2 add %eax,%edx - 725: 8b 45 fc mov -0x4(%ebp),%eax - 728: 89 50 04 mov %edx,0x4(%eax) - p->s.ptr = bp->s.ptr; - 72b: 8b 45 f8 mov -0x8(%ebp),%eax - 72e: 8b 10 mov (%eax),%edx - 730: 8b 45 fc mov -0x4(%ebp),%eax - 733: 89 10 mov %edx,(%eax) - 735: eb 08 jmp 73f - } else - p->s.ptr = bp; - 737: 8b 45 fc mov -0x4(%ebp),%eax - 73a: 8b 55 f8 mov -0x8(%ebp),%edx - 73d: 89 10 mov %edx,(%eax) - freep = p; - 73f: 8b 45 fc mov -0x4(%ebp),%eax - 742: a3 48 0b 00 00 mov %eax,0xb48 -} - 747: c9 leave - 748: c3 ret - -00000749 : - -static Header* -morecore(uint nu) -{ - 749: 55 push %ebp - 74a: 89 e5 mov %esp,%ebp - 74c: 83 ec 18 sub $0x18,%esp - char *p; - Header *hp; - - if(nu < 4096) - 74f: 81 7d 08 ff 0f 00 00 cmpl $0xfff,0x8(%ebp) - 756: 77 07 ja 75f - nu = 4096; - 758: c7 45 08 00 10 00 00 movl $0x1000,0x8(%ebp) - p = sbrk(nu * sizeof(Header)); - 75f: 8b 45 08 mov 0x8(%ebp),%eax - 762: c1 e0 03 shl $0x3,%eax - 765: 83 ec 0c sub $0xc,%esp - 768: 50 push %eax - 769: e8 7d fc ff ff call 3eb - 76e: 83 c4 10 add $0x10,%esp - 771: 89 45 f4 mov %eax,-0xc(%ebp) - if(p == (char*)-1) - 774: 83 7d f4 ff cmpl $0xffffffff,-0xc(%ebp) - 778: 75 07 jne 781 - return 0; - 77a: b8 00 00 00 00 mov $0x0,%eax - 77f: eb 26 jmp 7a7 - hp = (Header*)p; - 781: 8b 45 f4 mov -0xc(%ebp),%eax - 784: 89 45 f0 mov %eax,-0x10(%ebp) - hp->s.size = nu; - 787: 8b 45 f0 mov -0x10(%ebp),%eax - 78a: 8b 55 08 mov 0x8(%ebp),%edx - 78d: 89 50 04 mov %edx,0x4(%eax) - free((void*)(hp + 1)); - 790: 8b 45 f0 mov -0x10(%ebp),%eax - 793: 83 c0 08 add $0x8,%eax - 796: 83 ec 0c sub $0xc,%esp - 799: 50 push %eax - 79a: e8 c9 fe ff ff call 668 - 79f: 83 c4 10 add $0x10,%esp - return freep; - 7a2: a1 48 0b 00 00 mov 0xb48,%eax -} - 7a7: c9 leave - 7a8: c3 ret - -000007a9 : - -void* -malloc(uint nbytes) -{ - 7a9: 55 push %ebp - 7aa: 89 e5 mov %esp,%ebp - 7ac: 83 ec 18 sub $0x18,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 7af: 8b 45 08 mov 0x8(%ebp),%eax - 7b2: 83 c0 07 add $0x7,%eax - 7b5: c1 e8 03 shr $0x3,%eax - 7b8: 83 c0 01 add $0x1,%eax - 7bb: 89 45 ec mov %eax,-0x14(%ebp) - if((prevp = freep) == 0){ - 7be: a1 48 0b 00 00 mov 0xb48,%eax - 7c3: 89 45 f0 mov %eax,-0x10(%ebp) - 7c6: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 7ca: 75 23 jne 7ef - base.s.ptr = freep = prevp = &base; - 7cc: c7 45 f0 40 0b 00 00 movl $0xb40,-0x10(%ebp) - 7d3: 8b 45 f0 mov -0x10(%ebp),%eax - 7d6: a3 48 0b 00 00 mov %eax,0xb48 - 7db: a1 48 0b 00 00 mov 0xb48,%eax - 7e0: a3 40 0b 00 00 mov %eax,0xb40 - base.s.size = 0; - 7e5: c7 05 44 0b 00 00 00 movl $0x0,0xb44 - 7ec: 00 00 00 - } - for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 7ef: 8b 45 f0 mov -0x10(%ebp),%eax - 7f2: 8b 00 mov (%eax),%eax - 7f4: 89 45 f4 mov %eax,-0xc(%ebp) - if(p->s.size >= nunits){ - 7f7: 8b 45 f4 mov -0xc(%ebp),%eax - 7fa: 8b 40 04 mov 0x4(%eax),%eax - 7fd: 3b 45 ec cmp -0x14(%ebp),%eax - 800: 72 4d jb 84f - if(p->s.size == nunits) - 802: 8b 45 f4 mov -0xc(%ebp),%eax - 805: 8b 40 04 mov 0x4(%eax),%eax - 808: 3b 45 ec cmp -0x14(%ebp),%eax - 80b: 75 0c jne 819 - prevp->s.ptr = p->s.ptr; - 80d: 8b 45 f4 mov -0xc(%ebp),%eax - 810: 8b 10 mov (%eax),%edx - 812: 8b 45 f0 mov -0x10(%ebp),%eax - 815: 89 10 mov %edx,(%eax) - 817: eb 26 jmp 83f - else { - p->s.size -= nunits; - 819: 8b 45 f4 mov -0xc(%ebp),%eax - 81c: 8b 40 04 mov 0x4(%eax),%eax - 81f: 2b 45 ec sub -0x14(%ebp),%eax - 822: 89 c2 mov %eax,%edx - 824: 8b 45 f4 mov -0xc(%ebp),%eax - 827: 89 50 04 mov %edx,0x4(%eax) - p += p->s.size; - 82a: 8b 45 f4 mov -0xc(%ebp),%eax - 82d: 8b 40 04 mov 0x4(%eax),%eax - 830: c1 e0 03 shl $0x3,%eax - 833: 01 45 f4 add %eax,-0xc(%ebp) - p->s.size = nunits; - 836: 8b 45 f4 mov -0xc(%ebp),%eax - 839: 8b 55 ec mov -0x14(%ebp),%edx - 83c: 89 50 04 mov %edx,0x4(%eax) - } - freep = prevp; - 83f: 8b 45 f0 mov -0x10(%ebp),%eax - 842: a3 48 0b 00 00 mov %eax,0xb48 - return (void*)(p + 1); - 847: 8b 45 f4 mov -0xc(%ebp),%eax - 84a: 83 c0 08 add $0x8,%eax - 84d: eb 3b jmp 88a - } - if(p == freep) - 84f: a1 48 0b 00 00 mov 0xb48,%eax - 854: 39 45 f4 cmp %eax,-0xc(%ebp) - 857: 75 1e jne 877 - if((p = morecore(nunits)) == 0) - 859: 83 ec 0c sub $0xc,%esp - 85c: ff 75 ec pushl -0x14(%ebp) - 85f: e8 e5 fe ff ff call 749 - 864: 83 c4 10 add $0x10,%esp - 867: 89 45 f4 mov %eax,-0xc(%ebp) - 86a: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 86e: 75 07 jne 877 - return 0; - 870: b8 00 00 00 00 mov $0x0,%eax - 875: eb 13 jmp 88a - nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - if((prevp = freep) == 0){ - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 877: 8b 45 f4 mov -0xc(%ebp),%eax - 87a: 89 45 f0 mov %eax,-0x10(%ebp) - 87d: 8b 45 f4 mov -0xc(%ebp),%eax - 880: 8b 00 mov (%eax),%eax - 882: 89 45 f4 mov %eax,-0xc(%ebp) - return (void*)(p + 1); - } - if(p == freep) - if((p = morecore(nunits)) == 0) - return 0; - } - 885: e9 6d ff ff ff jmp 7f7 -} - 88a: c9 leave - 88b: c3 ret diff --git a/xv6-public/cat.d b/xv6-public/cat.d deleted file mode 100755 index 8f55acc..0000000 --- a/xv6-public/cat.d +++ /dev/null @@ -1 +0,0 @@ -cat.o: cat.c /usr/include/stdc-predef.h types.h stat.h user.h diff --git a/xv6-public/cat.o b/xv6-public/cat.o deleted file mode 100755 index 5e3ac33e22e133f884fa11980bf07d8fc82b67f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4084 zcma)9TWnlM8UE*-UGLgnuP>W4p=rfNa!Mk!>kwO3$%Wi%5<}G{sX~>us6Aev^=?@2 zZqA-f?Z_b!+oD)eRars;UQi1XP*D&!^@#@rL8yRAo{EI3KA=_tYNWKX;Gvb4@0&B@ zJq}3l%QN49pP7GV&aAJ^Jp5Uulvq;YN>38Gm5wY^8urRPl9ThR?{?OAzPG)zp6IqW zDzscwfBmT2?RIXBKv@w-M60{)wAHW9Y;>+}$hF_GU*6GKPu~@&9bfy0qqX!`a1p4NcuL`m=mN~lkwSKBf5NmJ>pK_`()!sa-s4+$#0Q%lKxu)B$5 zwH_iG=|!b=#1~;Esh80u%k$752j{FwUtQDy`3KQb_o7=tMCt&Tm&iN@=2v8%1oIXc zNvj9YV_L@nOw36wQ*{(f|NGiV8?yJWYl#MDEz!q;chK}*w7#klZbL|2M|Yac4RjnQ z^+Pa!C-Y}8dJ2EBrhkCZ&Rl&8)k<*=dUgYe8L$J1&!cx#-{XKm@+GtkyRH&cZx^_s zxprAp@*G%|bdd=w8AI>%>!qo0!7zLris4O8MiN=|Px=f*KAhLxKBJ1Wads=k8AVo3 zYD{u!oR+>QHrh-l8%bQoFx_;3Y*T0HIv5!vov2Z@Cz~5|v%9jRYD|sv!DCzo2R{Q9 zHr}vl9G#*%nsL(y2M-N?B16|>eP2J3Q8{dWQX>6q&KbZaO!Y)$ORauI$*B4i9Md{Q zHcBy@+mfUoNwg(OGBAue%pzt`so5My$?TTd+ysv3P%r<{3Db2UjL>^uG05qX&@-Z|e zX9)MBIkHycy*L-C3A_eW6PW?t=rvLF(3q51)BGik+-q0bOQ>-~KLh*%4e^9G&>U$u zdBpXd>7{)Us1-?LRUp|rbvZdvnfs4wuS#g596k zxmVrd3rXehJH^~s(67cdeyp|dgOfmWPYmn>EeNW zVR4dO*sl9W7W}#&R7()Opj0`s^x$-1dMaO7z~B6{UQjN;^U?kJLb={3H0eiXu3fE# z)p{hfLd1s!uU7S1)j9&pm%X46243k)|0x!{7H7NY*TYs6-dL=Lg>v96`h{i#OYj4m z76}T?pb`3|un~wCEL>(+5`OEYRcQoae#_dM0m93s%B|`ZKU{A5;xAQ0V(Id9q1m3RRZCK;HCn#ts>!L7ClBWLqHg=5vf)}pJ0|MNIZ-QV zwJVcI+`!KAOt6u7TIF~){k(HxDCu1I4P0a#s>8;yUdW z=!>o8#n77rhCzfC%LRU|82U@06z9Frlj2;fCB>i-2{g|8bM1wvtMzgNE}Hk|<^un+ zm9S<6Y&v>@S6}d%V^dYD)_v=ZVWn7VEOMiyh?mqaq7sExh)s!N{L0gM*SMbllRgeV zluPVwodO?yt)m3Ak#?c=YcA^6heWP}W&P>Ho5#<}9wX~V2K)(|06fWxeDCT1zx?)_ znCN~-`FN8p*?inf%hOhYaGwo|+4zl%ucL<7qOr)(0)WZC$Mj{AKx#n-+^*6$m}&su%}zc|s4^eP&8 zyH&5k?-|IJI6u<&(c zjv3GQbDaBW=q%ZMR<;<|C*=LE)e~L4;-1FcG6L;()sc@Y*xVSoo43{4xuZRDw^WMx zcyfB=>Yb0vxCAkB^@-~#TwzsvthWqv5u^(CCdEy zZHe-3D*!3;jx!g(&CJK|g(ceeTLDPfJTd&8%YO!g|53{L;r2KYmxoV-gMoQ(D8E8Pl0O3J|0ZSlzisS)Bf|e* z#2vWHI3SGUH%FnEyo-vz2o17cl=aUv)cAhNK-NiNJNFv{M@IisgRc=0|4Sn5Zy0>n=sz&Xb#iM!F7ZE$jNwJUvxYp9B0yC9_TlK1V_>2hp^DVhteP~?wrb3k( zjW~PzOA8*`(-SQ;k{n3Bc&jJ+@xc%%;LFhgw%)sBVEcUC6CLQiJg+zU@spH&ak%I8 zg2%Q5L2g?(^u6OX(T}?~eXP3$jldo0Or4L9%|+cu$_uW)4btu-jj7@TcN!{5<&~-O1K%~~A8)S<_ALLnS9Ko> zuGMRE>iWCCGT9#Z_Sf}lZDC!1gVi5wLw$W`jB)p-LnGaA{wFWCAbv-*c+m%*9Y zfA8Oq9edg35b=ud;wN)_3aL1JFq9@}XL#Wz+tnehlyK&-l75H-v$ZK}_mRTX z7<_Eb=|1A6;s^R*(|u%ks=E8g=F}wzuJc_E$%hj-?sa`&Dis}BhSf6KXc%D5WUA)p6Xj3AN5bN`o9MUPKbi*Zy0oa1SF>tlH8Dl zc4*4Q6glWVkpl&$s0qm#V_HHADEzjYn1rd$K>xKiI$U#7CHM@cPBK2d!x_5!!!5I3 zPmeN^d)OgXj|#tfH(?7s_Bt9ene{xvXeSgntMFNa(;F?M*9o=<9!Bhgi{iWZXy~0c z4zpq6i8kP~;yi(xA3N}XNzF3@dt83D8~#}QWEXQcLy zNER4djxkLSjz2gKk4Cfh@_LtlybX_=LhK$N=cJv3Ieb(V+_;d#e?o_jPZpt3e~#Bb zE(*OPXw9##zlDv37h3n9dS+E&FMQE#HHGpFIxAXu_5Kqhe64+dv0=Hkl%uKR+M}?7 zLfnH%xOrr8z3h6H0Ch1a%y~|Twc5{@dw?2b_dTz+^18 zP``pt{UNsG37jXmQj(bCKp44g@X^l zDxgD8Ah<`%r(Kt(p+uu{L$wkRJFs%Y=Z9>-R8qO#pP3EfH8-Y|J7kGbb-L`1n{zq1 zK-q5X4n?Qk+yHw~cE5I$@Nx4j`wMLna|_s7pzIOtJ^;ckEJIs?vL`fB<0>A)KCOZ# zhaW>&s~rsIxQz&Av>SbGp2`h|oSVVs-3%|4_iK0d?64GqlJq@CeLr0V= z)P<1_1*kx|+&@7YGG#&c+&ADAa#2ynexX8RnHNfQs!;er!xV-(nh?aZBT%e{ z2Hiw^O6Ai*hl4pV3WgD?E;N)5p~m=n70UO=>ufesV7Z`8r_iS3xlxobG|X~&Hu0hc zlX#)Kg1TbMo#Z~u#D`n1*d57cMp$ly`#E(d+ZIaP-&0qz)`Ec0naLJ`=o~DCvlp)61Q|8~%J6iy8!RkDtYK4O z5uRZM3_ffl%))0Hfmee14?B%6GmRiv48ciB6`o~ST|~CAvsHy>8-X*7f=(4a%j(fW zaM-yFILG?uQ6F0mhq=}wmlmh8g|n?7hZc?XDtwORhmdbp;dz$zX#Zo{&o=^(Q$(45 zwuEmz~5s$5zAc?YJ%!f%UtSqQ}vkTR)(6PdfYOr-0x8Jgyp^&YQ;tt z{*~p{xJOynCoNYWg61hpH@cr-*@U0ATodLzdsq|<{udmI-7~mHny$MQw(He>Hv+Lk%0yz`1sRY%$Lycj2Fn z4(l;kk1h@GWnbJHrkhs_XJww>I&U#ZC$Ar!4CHM^gTXw8ap86uJ#GfGSl_|~O|7-R z{7kKNX8Cb?>L1v8dM=(RO8?Mus5PdwzQb~bX3Fb3Emv%ogTBjhC1$DU9hMu-8Km#F zqaQIVTHj;2(>U++y_OkgmazVj<;HXR>mOTYqFJ;0Czd;%6It)J%o%27=$~4y(%p@I z>Yv$`u@JkulzzZ+Scq8M`sbFL$u*>94b3rYNXr^J+pK&2kTt}r#QN2bSZ*QLmzI@s zfmvT#R>~rjdJRTp$RAK+-e&d{K+4DK5bk-O3`$4LbcT<>tGl}n)4>_Rxx~3RfRS@f zwv(eqjo9NnRG%?=Sd2pT=_cj;k_xA+Ce)=IlN=8Op$*D;l$r845Q^h`WSOV6O`r=t zCaulth3z4rk%!rmX** zaT*~`CB|t4!#jOJbxK2PLg_Y5kNLPe={4%t?CvR=g1_S4P2tsexfy-sm5`e<^r@2Z z#>#TRQ%A92M)w}fNB)7zQ|aUepiyH?b;g)g(|2iULOG@M%tePv5j4VrECCaF2gGGu zJZ5OVg8-&7g=(z+5)RG`&6K#|b;Dd=oQt%0sC8zT&7n`7HU`0G+O%3r8-#ue#${$0 zjf(5LtcfYl;+}st*wUnO%m#Bem`EY)D+)kN0KrBgi$E~3$TJ{5M`0uH`ou}_Fsdm& z!GK1x*e7lPaXtc~AAD1F)@t@)0?M=(s9!@9pV%sd8dV3%*`=9^ z#t__qaQbmcXP2ZCc@SFD)fYfK%hZ8ato!zIm?nsd0@-%;NVs{#V0b zbUPSZ2Cr-mgZ#g8sD1(!)BbO&UIG*8MbuB2?Jf`|{}&~b$nQb8c!i663SuOQE;P?1 zBU?aFr6%emKAjwGQe=7_wnLUux8NJBNlY?*(OQJfHag@{xEzA;3{|le zW}$I^2BUQ)Um)Evk3qz@I<2Rece>K&AmGtL>#AGWF=@)p|KTz3a5*lC+v?U5=)`&02Hq6!I8S$gN0C)hD6&-Zo8Ozg+gOkt+yjd?;fo=o$aeljlPVsE3~fGyO{3=tvOD{7n%N=Syf== zpswb%2(mlqF6%2$`;$_bNoGp<<2J95I{Abp0D< zFjs5CTcOg!ba{SJZXo}Z{9*beU5L5sj8K96*|}%s))ry4jZ?X~XG4$kQ;`nj=jKwQ zp>c<1%w}TC3xV~l7uj$D{20K4mpAA&MC;ljy622lwMA2~f#e4DpgM0Nf{w;&9V+c& zPUROtHV2zk!Eikx&w3ZS@WzYcU=F#tLv!OIGE}XvB7_GYw(<=9podnk}j=vchTO(QHkn8mu0hot|wV|v`3t6=(I=VSuop={2Y-H&$hHjoM-5?N1Siy!S={6 z5E*fyr9I+DhE99Lzgl@FPx`GivObU4fLp6Nf;H{K3bfY-z!uz&>T4x_3pY#&&*G+- z_<|8HBS?f+kmhQ^=UUwG>ID1@H@sSizp`S2c+uEgZ}uQ2Tx^2%ty&BG7H)_MwvE13XxdzV$7g}{ zB8Ym8RbpO4#x&qfcn~)`Of+9Is%3=VikSEgZmpIP4vCluH;M_;My5RcV&N;?XoJ89 z9olI0Q=s{FBTEH|H(J^w@^s4TW!wI@(f29hAwzc>Jkgf?MB|?d5>L0ZNBlw1#wGH| znLR4YpuZe9(k1*GZlv2v!urMQtL;WOOKlK7<+6D~1ceXZXFrf|cWV1o@NPyU~AvjO5J zOMArc;(Ws-h&&HwCqchOM%EW3F2RlZ5UeTQDdqYXnC`@l3<#pml?XM7VshfjlpymH38hD|5*(EPrS;$PhvL)xEs0qsSI(SK*+L`v z`K7XfOzNu6c+$#~or(6=j)rxX>+I@iuvAl`HEyZ4wzMViYmYc#8k&Sg{OgVj14Apl zDSd%ARps2VK__tk=E{xA3F=T&$Q!$}h2(mEIAulN%I3GGcsK6+=DP0Yf%L1*Pc`pf z>Gd_QaHbS{J1+BfRC#mLFmgrNXi;cq)xPR|`zZ=EL_`)C>%HH6cJu{9xa}N)za=kT=&x#HVv9K7!^W zL}}1txFGXJllXL4j~$-{8Y6*HFM{0nHy>UxW#8fbI|CcNMTfk7&0Akxy#K=Hz`Dx7 z$#)%oYsb{Y{=@K-e*MY>S`@ne@LO}IHhUL(i+AkUx$gtV!DvU9ELgVUB9&}ti8rQO z<6Zt(C)yJ!)s%?c{IM42EnL0yqNPyHdQ02}LSXqk&CT`{93QqhcmjT>TJO%<@bs47y?)ZS6iNjnnt=|pQP(QcV!3jV2z zSZgAdOtizXX??7#BGnaZSod|dB9=@hn%mpZ+oW~xXiKCjnz~|b@ruq4{ALyJ^1~uP z1^S$dH>5hcRA*y+bxL)1;Ds>V&KU8=2!G<*5L*{dcdF)is=-u9wI$kN-oY;#QJ=cn zx~PgZT#-(6;pfqg82S)zkJaP1(sne7k%%=KZrSpsOXn|G9ED9=y-FrFVsu*2Sme0I zlCAN0Cx^94wVOhBa4DO{W38AS{Km(Og_#SO3P?+JHa8}^)bgdvzY$%CF==c>S*n#C zUSVr|`E;L{;S*>2#7v)B+f_qz%veYZh{d?FL4)ivg*QXqm}pMmr)20-@hdYn*u)tYW8`)x~*e9rU&MrO2(TT4=6l!ms>)U;_+r(C&yMnz}3 zz7t?ur*-VRdsv$9IQ}e&wKk6~ug3z{7q}zrgAv z5M50%?w{k%_%G}ZI6r>zc{alKcjD&Z`cCAOu?gI+8HI0;dvNpk_(Nbu50bur#LXjM z>Nwv{<4gTf+&r{30W-c%y-ASz(eUHp?5gAZ(;5Fckn{XA{5buvjGjk#o=>hiE`B-_ z|7z%YxG+Z`zrIe3El_3hs>!|GNund)r@%nW0 z>O^}}hY~tgU*Cn_<%Pp+fl7qH|HfF?WT#2Kpn3+xP6-ZVc4Y$N!iQS z@z*QV~DdEZrqpH0`!w!rqFx>R*10I0QaTUFm6v zM?x-N7XyD>esl4i9AwNd2e+T!m7skekm?-7%M>X~mjay~?{SaRUGM6Zmk}lwkY*c?)ML{xEKinmjt0 z7ZP(+!zl=-bvd2cgIHzt%;~d?r#-;opr1L+$x+ll$J-Yh|1F9~|IF#zKb^^m?SvC! z_Bk+f{FFBc(V0`4e{i-ZOnd4V{ordE{@~KQ1!m5@@|rey`ptgb_#Volv6Me2Vxh2R z#5|xg3Tu}IrfF{M+IGe zw}t%j1xp001!oB+1lxgZ=W5~ve5pwskDr=>9GCmaBd-I(e?%VkM~M^gT*d>D^WkJ7 z>_-C~9K0ro{0t)UsTTQc@@L?81mYy677Bj>v0SO8M8sJIbSjiuN368xCjL&$^Mu9& z)I3vw_-A-NPc`N!pI<~YsWcv7=!((vJV!tCtO7=bUnKZXf~y3Z1(Sl;3O*wEhTz`> z`F|7`f281a?aP5T=KZxOs(@EO6^1m70SMc?RmvS78~62Z#^6M`EA zw+en=aF-zeSex;l6MS9pm|!l~G4!JaD+KwszLZ}hxKr?TLH@NJ^&bfy6)eHnQa)aA zfgt}Ngz{FwTLi~)-9bJ_@Sg;`1h)(B7JNbQUBS-;8@N6Y=W4-k3!3!@`6I$}z0vL+ z!GnVTBRCxMp8C@TX9&&_Tp)OX;8MYh1!ID@3VtZ)a^53uMDQ%ZTEQ)X-xYjZ@Jm4t zhe-OD3SL9R7+xp%Eg}xlH;Mi(!TSY&Nre65f=>})|Dx!BFL*%oe-ZqI2)i#t|CPx3 z+b83Nh|r%(M1GS6r;B{H@aGXRM`9vx7fccn=etDs-z@y?f_D-T|5d@?5@GkB!oMqg zzwn<4en~{!01m;#Ji+0DV+1D%Rte4$Tp)O%;3Y(~d%5s2!8j55Z4kUgSncylS+HDZNS#TW@ z?OrSVw*|j1c!%JR1b;60DjuI>r zJVWqYBHCLj{4&8yh#U{WZA938Pxu{z_Y%?01A>nUJ}dZ&;O_+A7W{ySc%KOWnc)8r z(e8|Vi)RrLf1%(K!Ak^J3$7(1UYGFe1ve5A?|R|43*I8QL-40W_&-X-p8BNlFA2Y& zh;{cDk@F>x_PK(?1V;-_B92vRitx39mkX{J+#$GE@J+!#2_6;<P7$mTTp}0~ u#P+K+X#6vETQ3*^;ujV*PjHRk7QuT3Ul4pxP~mw>zlh*G!8L+g1pgP!4Y>LM diff --git a/xv6-public/echo.asm b/xv6-public/echo.asm deleted file mode 100755 index b69220e..0000000 --- a/xv6-public/echo.asm +++ /dev/null @@ -1,1185 +0,0 @@ - -_echo: file format elf32-i386 - - -Disassembly of section .text: - -00000000
: -#include "stat.h" -#include "user.h" - -int -main(int argc, char *argv[]) -{ - 0: 8d 4c 24 04 lea 0x4(%esp),%ecx - 4: 83 e4 f0 and $0xfffffff0,%esp - 7: ff 71 fc pushl -0x4(%ecx) - a: 55 push %ebp - b: 89 e5 mov %esp,%ebp - d: 53 push %ebx - e: 51 push %ecx - f: 83 ec 10 sub $0x10,%esp - 12: 89 cb mov %ecx,%ebx - int i; - - for(i = 1; i < argc; i++) - 14: c7 45 f4 01 00 00 00 movl $0x1,-0xc(%ebp) - 1b: eb 3c jmp 59 - printf(1, "%s%s", argv[i], i+1 < argc ? " " : "\n"); - 1d: 8b 45 f4 mov -0xc(%ebp),%eax - 20: 83 c0 01 add $0x1,%eax - 23: 3b 03 cmp (%ebx),%eax - 25: 7d 07 jge 2e - 27: ba e3 07 00 00 mov $0x7e3,%edx - 2c: eb 05 jmp 33 - 2e: ba e5 07 00 00 mov $0x7e5,%edx - 33: 8b 45 f4 mov -0xc(%ebp),%eax - 36: 8d 0c 85 00 00 00 00 lea 0x0(,%eax,4),%ecx - 3d: 8b 43 04 mov 0x4(%ebx),%eax - 40: 01 c8 add %ecx,%eax - 42: 8b 00 mov (%eax),%eax - 44: 52 push %edx - 45: 50 push %eax - 46: 68 e7 07 00 00 push $0x7e7 - 4b: 6a 01 push $0x1 - 4d: e8 dd 03 00 00 call 42f - 52: 83 c4 10 add $0x10,%esp -int -main(int argc, char *argv[]) -{ - int i; - - for(i = 1; i < argc; i++) - 55: 83 45 f4 01 addl $0x1,-0xc(%ebp) - 59: 8b 45 f4 mov -0xc(%ebp),%eax - 5c: 3b 03 cmp (%ebx),%eax - 5e: 7c bd jl 1d - printf(1, "%s%s", argv[i], i+1 < argc ? " " : "\n"); - exit(); - 60: e8 55 02 00 00 call 2ba - -00000065 : - "cc"); -} - -static inline void -stosb(void *addr, int data, int cnt) -{ - 65: 55 push %ebp - 66: 89 e5 mov %esp,%ebp - 68: 57 push %edi - 69: 53 push %ebx - asm volatile("cld; rep stosb" : - 6a: 8b 4d 08 mov 0x8(%ebp),%ecx - 6d: 8b 55 10 mov 0x10(%ebp),%edx - 70: 8b 45 0c mov 0xc(%ebp),%eax - 73: 89 cb mov %ecx,%ebx - 75: 89 df mov %ebx,%edi - 77: 89 d1 mov %edx,%ecx - 79: fc cld - 7a: f3 aa rep stos %al,%es:(%edi) - 7c: 89 ca mov %ecx,%edx - 7e: 89 fb mov %edi,%ebx - 80: 89 5d 08 mov %ebx,0x8(%ebp) - 83: 89 55 10 mov %edx,0x10(%ebp) - "=D" (addr), "=c" (cnt) : - "0" (addr), "1" (cnt), "a" (data) : - "memory", "cc"); -} - 86: 5b pop %ebx - 87: 5f pop %edi - 88: 5d pop %ebp - 89: c3 ret - -0000008a : -#include "user.h" -#include "x86.h" - -char* -strcpy(char *s, char *t) -{ - 8a: 55 push %ebp - 8b: 89 e5 mov %esp,%ebp - 8d: 83 ec 10 sub $0x10,%esp - char *os; - - os = s; - 90: 8b 45 08 mov 0x8(%ebp),%eax - 93: 89 45 fc mov %eax,-0x4(%ebp) - while((*s++ = *t++) != 0) - 96: 90 nop - 97: 8b 45 08 mov 0x8(%ebp),%eax - 9a: 8d 50 01 lea 0x1(%eax),%edx - 9d: 89 55 08 mov %edx,0x8(%ebp) - a0: 8b 55 0c mov 0xc(%ebp),%edx - a3: 8d 4a 01 lea 0x1(%edx),%ecx - a6: 89 4d 0c mov %ecx,0xc(%ebp) - a9: 0f b6 12 movzbl (%edx),%edx - ac: 88 10 mov %dl,(%eax) - ae: 0f b6 00 movzbl (%eax),%eax - b1: 84 c0 test %al,%al - b3: 75 e2 jne 97 - ; - return os; - b5: 8b 45 fc mov -0x4(%ebp),%eax -} - b8: c9 leave - b9: c3 ret - -000000ba : - -int -strcmp(const char *p, const char *q) -{ - ba: 55 push %ebp - bb: 89 e5 mov %esp,%ebp - while(*p && *p == *q) - bd: eb 08 jmp c7 - p++, q++; - bf: 83 45 08 01 addl $0x1,0x8(%ebp) - c3: 83 45 0c 01 addl $0x1,0xc(%ebp) -} - -int -strcmp(const char *p, const char *q) -{ - while(*p && *p == *q) - c7: 8b 45 08 mov 0x8(%ebp),%eax - ca: 0f b6 00 movzbl (%eax),%eax - cd: 84 c0 test %al,%al - cf: 74 10 je e1 - d1: 8b 45 08 mov 0x8(%ebp),%eax - d4: 0f b6 10 movzbl (%eax),%edx - d7: 8b 45 0c mov 0xc(%ebp),%eax - da: 0f b6 00 movzbl (%eax),%eax - dd: 38 c2 cmp %al,%dl - df: 74 de je bf - p++, q++; - return (uchar)*p - (uchar)*q; - e1: 8b 45 08 mov 0x8(%ebp),%eax - e4: 0f b6 00 movzbl (%eax),%eax - e7: 0f b6 d0 movzbl %al,%edx - ea: 8b 45 0c mov 0xc(%ebp),%eax - ed: 0f b6 00 movzbl (%eax),%eax - f0: 0f b6 c0 movzbl %al,%eax - f3: 29 c2 sub %eax,%edx - f5: 89 d0 mov %edx,%eax -} - f7: 5d pop %ebp - f8: c3 ret - -000000f9 : - -uint -strlen(char *s) -{ - f9: 55 push %ebp - fa: 89 e5 mov %esp,%ebp - fc: 83 ec 10 sub $0x10,%esp - int n; - - for(n = 0; s[n]; n++) - ff: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - 106: eb 04 jmp 10c - 108: 83 45 fc 01 addl $0x1,-0x4(%ebp) - 10c: 8b 55 fc mov -0x4(%ebp),%edx - 10f: 8b 45 08 mov 0x8(%ebp),%eax - 112: 01 d0 add %edx,%eax - 114: 0f b6 00 movzbl (%eax),%eax - 117: 84 c0 test %al,%al - 119: 75 ed jne 108 - ; - return n; - 11b: 8b 45 fc mov -0x4(%ebp),%eax -} - 11e: c9 leave - 11f: c3 ret - -00000120 : - -void* -memset(void *dst, int c, uint n) -{ - 120: 55 push %ebp - 121: 89 e5 mov %esp,%ebp - stosb(dst, c, n); - 123: 8b 45 10 mov 0x10(%ebp),%eax - 126: 50 push %eax - 127: ff 75 0c pushl 0xc(%ebp) - 12a: ff 75 08 pushl 0x8(%ebp) - 12d: e8 33 ff ff ff call 65 - 132: 83 c4 0c add $0xc,%esp - return dst; - 135: 8b 45 08 mov 0x8(%ebp),%eax -} - 138: c9 leave - 139: c3 ret - -0000013a : - -char* -strchr(const char *s, char c) -{ - 13a: 55 push %ebp - 13b: 89 e5 mov %esp,%ebp - 13d: 83 ec 04 sub $0x4,%esp - 140: 8b 45 0c mov 0xc(%ebp),%eax - 143: 88 45 fc mov %al,-0x4(%ebp) - for(; *s; s++) - 146: eb 14 jmp 15c - if(*s == c) - 148: 8b 45 08 mov 0x8(%ebp),%eax - 14b: 0f b6 00 movzbl (%eax),%eax - 14e: 3a 45 fc cmp -0x4(%ebp),%al - 151: 75 05 jne 158 - return (char*)s; - 153: 8b 45 08 mov 0x8(%ebp),%eax - 156: eb 13 jmp 16b -} - -char* -strchr(const char *s, char c) -{ - for(; *s; s++) - 158: 83 45 08 01 addl $0x1,0x8(%ebp) - 15c: 8b 45 08 mov 0x8(%ebp),%eax - 15f: 0f b6 00 movzbl (%eax),%eax - 162: 84 c0 test %al,%al - 164: 75 e2 jne 148 - if(*s == c) - return (char*)s; - return 0; - 166: b8 00 00 00 00 mov $0x0,%eax -} - 16b: c9 leave - 16c: c3 ret - -0000016d : - -char* -gets(char *buf, int max) -{ - 16d: 55 push %ebp - 16e: 89 e5 mov %esp,%ebp - 170: 83 ec 18 sub $0x18,%esp - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - 173: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 17a: eb 44 jmp 1c0 - cc = read(0, &c, 1); - 17c: 83 ec 04 sub $0x4,%esp - 17f: 6a 01 push $0x1 - 181: 8d 45 ef lea -0x11(%ebp),%eax - 184: 50 push %eax - 185: 6a 00 push $0x0 - 187: e8 46 01 00 00 call 2d2 - 18c: 83 c4 10 add $0x10,%esp - 18f: 89 45 f0 mov %eax,-0x10(%ebp) - if(cc < 1) - 192: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 196: 7f 02 jg 19a - break; - 198: eb 31 jmp 1cb - buf[i++] = c; - 19a: 8b 45 f4 mov -0xc(%ebp),%eax - 19d: 8d 50 01 lea 0x1(%eax),%edx - 1a0: 89 55 f4 mov %edx,-0xc(%ebp) - 1a3: 89 c2 mov %eax,%edx - 1a5: 8b 45 08 mov 0x8(%ebp),%eax - 1a8: 01 c2 add %eax,%edx - 1aa: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 1ae: 88 02 mov %al,(%edx) - if(c == '\n' || c == '\r') - 1b0: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 1b4: 3c 0a cmp $0xa,%al - 1b6: 74 13 je 1cb - 1b8: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 1bc: 3c 0d cmp $0xd,%al - 1be: 74 0b je 1cb -gets(char *buf, int max) -{ - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - 1c0: 8b 45 f4 mov -0xc(%ebp),%eax - 1c3: 83 c0 01 add $0x1,%eax - 1c6: 3b 45 0c cmp 0xc(%ebp),%eax - 1c9: 7c b1 jl 17c - break; - buf[i++] = c; - if(c == '\n' || c == '\r') - break; - } - buf[i] = '\0'; - 1cb: 8b 55 f4 mov -0xc(%ebp),%edx - 1ce: 8b 45 08 mov 0x8(%ebp),%eax - 1d1: 01 d0 add %edx,%eax - 1d3: c6 00 00 movb $0x0,(%eax) - return buf; - 1d6: 8b 45 08 mov 0x8(%ebp),%eax -} - 1d9: c9 leave - 1da: c3 ret - -000001db : - -int -stat(char *n, struct stat *st) -{ - 1db: 55 push %ebp - 1dc: 89 e5 mov %esp,%ebp - 1de: 83 ec 18 sub $0x18,%esp - int fd; - int r; - - fd = open(n, O_RDONLY); - 1e1: 83 ec 08 sub $0x8,%esp - 1e4: 6a 00 push $0x0 - 1e6: ff 75 08 pushl 0x8(%ebp) - 1e9: e8 0c 01 00 00 call 2fa - 1ee: 83 c4 10 add $0x10,%esp - 1f1: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd < 0) - 1f4: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 1f8: 79 07 jns 201 - return -1; - 1fa: b8 ff ff ff ff mov $0xffffffff,%eax - 1ff: eb 25 jmp 226 - r = fstat(fd, st); - 201: 83 ec 08 sub $0x8,%esp - 204: ff 75 0c pushl 0xc(%ebp) - 207: ff 75 f4 pushl -0xc(%ebp) - 20a: e8 03 01 00 00 call 312 - 20f: 83 c4 10 add $0x10,%esp - 212: 89 45 f0 mov %eax,-0x10(%ebp) - close(fd); - 215: 83 ec 0c sub $0xc,%esp - 218: ff 75 f4 pushl -0xc(%ebp) - 21b: e8 c2 00 00 00 call 2e2 - 220: 83 c4 10 add $0x10,%esp - return r; - 223: 8b 45 f0 mov -0x10(%ebp),%eax -} - 226: c9 leave - 227: c3 ret - -00000228 : - -int -atoi(const char *s) -{ - 228: 55 push %ebp - 229: 89 e5 mov %esp,%ebp - 22b: 83 ec 10 sub $0x10,%esp - int n; - - n = 0; - 22e: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - while('0' <= *s && *s <= '9') - 235: eb 25 jmp 25c - n = n*10 + *s++ - '0'; - 237: 8b 55 fc mov -0x4(%ebp),%edx - 23a: 89 d0 mov %edx,%eax - 23c: c1 e0 02 shl $0x2,%eax - 23f: 01 d0 add %edx,%eax - 241: 01 c0 add %eax,%eax - 243: 89 c1 mov %eax,%ecx - 245: 8b 45 08 mov 0x8(%ebp),%eax - 248: 8d 50 01 lea 0x1(%eax),%edx - 24b: 89 55 08 mov %edx,0x8(%ebp) - 24e: 0f b6 00 movzbl (%eax),%eax - 251: 0f be c0 movsbl %al,%eax - 254: 01 c8 add %ecx,%eax - 256: 83 e8 30 sub $0x30,%eax - 259: 89 45 fc mov %eax,-0x4(%ebp) -atoi(const char *s) -{ - int n; - - n = 0; - while('0' <= *s && *s <= '9') - 25c: 8b 45 08 mov 0x8(%ebp),%eax - 25f: 0f b6 00 movzbl (%eax),%eax - 262: 3c 2f cmp $0x2f,%al - 264: 7e 0a jle 270 - 266: 8b 45 08 mov 0x8(%ebp),%eax - 269: 0f b6 00 movzbl (%eax),%eax - 26c: 3c 39 cmp $0x39,%al - 26e: 7e c7 jle 237 - n = n*10 + *s++ - '0'; - return n; - 270: 8b 45 fc mov -0x4(%ebp),%eax -} - 273: c9 leave - 274: c3 ret - -00000275 : - -void* -memmove(void *vdst, void *vsrc, int n) -{ - 275: 55 push %ebp - 276: 89 e5 mov %esp,%ebp - 278: 83 ec 10 sub $0x10,%esp - char *dst, *src; - - dst = vdst; - 27b: 8b 45 08 mov 0x8(%ebp),%eax - 27e: 89 45 fc mov %eax,-0x4(%ebp) - src = vsrc; - 281: 8b 45 0c mov 0xc(%ebp),%eax - 284: 89 45 f8 mov %eax,-0x8(%ebp) - while(n-- > 0) - 287: eb 17 jmp 2a0 - *dst++ = *src++; - 289: 8b 45 fc mov -0x4(%ebp),%eax - 28c: 8d 50 01 lea 0x1(%eax),%edx - 28f: 89 55 fc mov %edx,-0x4(%ebp) - 292: 8b 55 f8 mov -0x8(%ebp),%edx - 295: 8d 4a 01 lea 0x1(%edx),%ecx - 298: 89 4d f8 mov %ecx,-0x8(%ebp) - 29b: 0f b6 12 movzbl (%edx),%edx - 29e: 88 10 mov %dl,(%eax) -{ - char *dst, *src; - - dst = vdst; - src = vsrc; - while(n-- > 0) - 2a0: 8b 45 10 mov 0x10(%ebp),%eax - 2a3: 8d 50 ff lea -0x1(%eax),%edx - 2a6: 89 55 10 mov %edx,0x10(%ebp) - 2a9: 85 c0 test %eax,%eax - 2ab: 7f dc jg 289 - *dst++ = *src++; - return vdst; - 2ad: 8b 45 08 mov 0x8(%ebp),%eax -} - 2b0: c9 leave - 2b1: c3 ret - -000002b2 : - name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 2b2: b8 01 00 00 00 mov $0x1,%eax - 2b7: cd 40 int $0x40 - 2b9: c3 ret - -000002ba : -SYSCALL(exit) - 2ba: b8 02 00 00 00 mov $0x2,%eax - 2bf: cd 40 int $0x40 - 2c1: c3 ret - -000002c2 : -SYSCALL(wait) - 2c2: b8 03 00 00 00 mov $0x3,%eax - 2c7: cd 40 int $0x40 - 2c9: c3 ret - -000002ca : -SYSCALL(pipe) - 2ca: b8 04 00 00 00 mov $0x4,%eax - 2cf: cd 40 int $0x40 - 2d1: c3 ret - -000002d2 : -SYSCALL(read) - 2d2: b8 05 00 00 00 mov $0x5,%eax - 2d7: cd 40 int $0x40 - 2d9: c3 ret - -000002da : -SYSCALL(write) - 2da: b8 10 00 00 00 mov $0x10,%eax - 2df: cd 40 int $0x40 - 2e1: c3 ret - -000002e2 : -SYSCALL(close) - 2e2: b8 15 00 00 00 mov $0x15,%eax - 2e7: cd 40 int $0x40 - 2e9: c3 ret - -000002ea : -SYSCALL(kill) - 2ea: b8 06 00 00 00 mov $0x6,%eax - 2ef: cd 40 int $0x40 - 2f1: c3 ret - -000002f2 : -SYSCALL(exec) - 2f2: b8 07 00 00 00 mov $0x7,%eax - 2f7: cd 40 int $0x40 - 2f9: c3 ret - -000002fa : -SYSCALL(open) - 2fa: b8 0f 00 00 00 mov $0xf,%eax - 2ff: cd 40 int $0x40 - 301: c3 ret - -00000302 : -SYSCALL(mknod) - 302: b8 11 00 00 00 mov $0x11,%eax - 307: cd 40 int $0x40 - 309: c3 ret - -0000030a : -SYSCALL(unlink) - 30a: b8 12 00 00 00 mov $0x12,%eax - 30f: cd 40 int $0x40 - 311: c3 ret - -00000312 : -SYSCALL(fstat) - 312: b8 08 00 00 00 mov $0x8,%eax - 317: cd 40 int $0x40 - 319: c3 ret - -0000031a : -SYSCALL(link) - 31a: b8 13 00 00 00 mov $0x13,%eax - 31f: cd 40 int $0x40 - 321: c3 ret - -00000322 : -SYSCALL(mkdir) - 322: b8 14 00 00 00 mov $0x14,%eax - 327: cd 40 int $0x40 - 329: c3 ret - -0000032a : -SYSCALL(chdir) - 32a: b8 09 00 00 00 mov $0x9,%eax - 32f: cd 40 int $0x40 - 331: c3 ret - -00000332 : -SYSCALL(dup) - 332: b8 0a 00 00 00 mov $0xa,%eax - 337: cd 40 int $0x40 - 339: c3 ret - -0000033a : -SYSCALL(getpid) - 33a: b8 0b 00 00 00 mov $0xb,%eax - 33f: cd 40 int $0x40 - 341: c3 ret - -00000342 : -SYSCALL(sbrk) - 342: b8 0c 00 00 00 mov $0xc,%eax - 347: cd 40 int $0x40 - 349: c3 ret - -0000034a : -SYSCALL(sleep) - 34a: b8 0d 00 00 00 mov $0xd,%eax - 34f: cd 40 int $0x40 - 351: c3 ret - -00000352 : -SYSCALL(uptime) - 352: b8 0e 00 00 00 mov $0xe,%eax - 357: cd 40 int $0x40 - 359: c3 ret - -0000035a : -#include "stat.h" -#include "user.h" - -static void -putc(int fd, char c) -{ - 35a: 55 push %ebp - 35b: 89 e5 mov %esp,%ebp - 35d: 83 ec 18 sub $0x18,%esp - 360: 8b 45 0c mov 0xc(%ebp),%eax - 363: 88 45 f4 mov %al,-0xc(%ebp) - write(fd, &c, 1); - 366: 83 ec 04 sub $0x4,%esp - 369: 6a 01 push $0x1 - 36b: 8d 45 f4 lea -0xc(%ebp),%eax - 36e: 50 push %eax - 36f: ff 75 08 pushl 0x8(%ebp) - 372: e8 63 ff ff ff call 2da - 377: 83 c4 10 add $0x10,%esp -} - 37a: c9 leave - 37b: c3 ret - -0000037c : - -static void -printint(int fd, int xx, int base, int sgn) -{ - 37c: 55 push %ebp - 37d: 89 e5 mov %esp,%ebp - 37f: 53 push %ebx - 380: 83 ec 24 sub $0x24,%esp - static char digits[] = "0123456789ABCDEF"; - char buf[16]; - int i, neg; - uint x; - - neg = 0; - 383: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - if(sgn && xx < 0){ - 38a: 83 7d 14 00 cmpl $0x0,0x14(%ebp) - 38e: 74 17 je 3a7 - 390: 83 7d 0c 00 cmpl $0x0,0xc(%ebp) - 394: 79 11 jns 3a7 - neg = 1; - 396: c7 45 f0 01 00 00 00 movl $0x1,-0x10(%ebp) - x = -xx; - 39d: 8b 45 0c mov 0xc(%ebp),%eax - 3a0: f7 d8 neg %eax - 3a2: 89 45 ec mov %eax,-0x14(%ebp) - 3a5: eb 06 jmp 3ad - } else { - x = xx; - 3a7: 8b 45 0c mov 0xc(%ebp),%eax - 3aa: 89 45 ec mov %eax,-0x14(%ebp) - } - - i = 0; - 3ad: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - do{ - buf[i++] = digits[x % base]; - 3b4: 8b 4d f4 mov -0xc(%ebp),%ecx - 3b7: 8d 41 01 lea 0x1(%ecx),%eax - 3ba: 89 45 f4 mov %eax,-0xc(%ebp) - 3bd: 8b 5d 10 mov 0x10(%ebp),%ebx - 3c0: 8b 45 ec mov -0x14(%ebp),%eax - 3c3: ba 00 00 00 00 mov $0x0,%edx - 3c8: f7 f3 div %ebx - 3ca: 89 d0 mov %edx,%eax - 3cc: 0f b6 80 40 0a 00 00 movzbl 0xa40(%eax),%eax - 3d3: 88 44 0d dc mov %al,-0x24(%ebp,%ecx,1) - }while((x /= base) != 0); - 3d7: 8b 5d 10 mov 0x10(%ebp),%ebx - 3da: 8b 45 ec mov -0x14(%ebp),%eax - 3dd: ba 00 00 00 00 mov $0x0,%edx - 3e2: f7 f3 div %ebx - 3e4: 89 45 ec mov %eax,-0x14(%ebp) - 3e7: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 3eb: 75 c7 jne 3b4 - if(neg) - 3ed: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 3f1: 74 0e je 401 - buf[i++] = '-'; - 3f3: 8b 45 f4 mov -0xc(%ebp),%eax - 3f6: 8d 50 01 lea 0x1(%eax),%edx - 3f9: 89 55 f4 mov %edx,-0xc(%ebp) - 3fc: c6 44 05 dc 2d movb $0x2d,-0x24(%ebp,%eax,1) - - while(--i >= 0) - 401: eb 1d jmp 420 - putc(fd, buf[i]); - 403: 8d 55 dc lea -0x24(%ebp),%edx - 406: 8b 45 f4 mov -0xc(%ebp),%eax - 409: 01 d0 add %edx,%eax - 40b: 0f b6 00 movzbl (%eax),%eax - 40e: 0f be c0 movsbl %al,%eax - 411: 83 ec 08 sub $0x8,%esp - 414: 50 push %eax - 415: ff 75 08 pushl 0x8(%ebp) - 418: e8 3d ff ff ff call 35a - 41d: 83 c4 10 add $0x10,%esp - buf[i++] = digits[x % base]; - }while((x /= base) != 0); - if(neg) - buf[i++] = '-'; - - while(--i >= 0) - 420: 83 6d f4 01 subl $0x1,-0xc(%ebp) - 424: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 428: 79 d9 jns 403 - putc(fd, buf[i]); -} - 42a: 8b 5d fc mov -0x4(%ebp),%ebx - 42d: c9 leave - 42e: c3 ret - -0000042f : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void -printf(int fd, char *fmt, ...) -{ - 42f: 55 push %ebp - 430: 89 e5 mov %esp,%ebp - 432: 83 ec 28 sub $0x28,%esp - char *s; - int c, i, state; - uint *ap; - - state = 0; - 435: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - ap = (uint*)(void*)&fmt + 1; - 43c: 8d 45 0c lea 0xc(%ebp),%eax - 43f: 83 c0 04 add $0x4,%eax - 442: 89 45 e8 mov %eax,-0x18(%ebp) - for(i = 0; fmt[i]; i++){ - 445: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - 44c: e9 59 01 00 00 jmp 5aa - c = fmt[i] & 0xff; - 451: 8b 55 0c mov 0xc(%ebp),%edx - 454: 8b 45 f0 mov -0x10(%ebp),%eax - 457: 01 d0 add %edx,%eax - 459: 0f b6 00 movzbl (%eax),%eax - 45c: 0f be c0 movsbl %al,%eax - 45f: 25 ff 00 00 00 and $0xff,%eax - 464: 89 45 e4 mov %eax,-0x1c(%ebp) - if(state == 0){ - 467: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 46b: 75 2c jne 499 - if(c == '%'){ - 46d: 83 7d e4 25 cmpl $0x25,-0x1c(%ebp) - 471: 75 0c jne 47f - state = '%'; - 473: c7 45 ec 25 00 00 00 movl $0x25,-0x14(%ebp) - 47a: e9 27 01 00 00 jmp 5a6 - } else { - putc(fd, c); - 47f: 8b 45 e4 mov -0x1c(%ebp),%eax - 482: 0f be c0 movsbl %al,%eax - 485: 83 ec 08 sub $0x8,%esp - 488: 50 push %eax - 489: ff 75 08 pushl 0x8(%ebp) - 48c: e8 c9 fe ff ff call 35a - 491: 83 c4 10 add $0x10,%esp - 494: e9 0d 01 00 00 jmp 5a6 - } - } else if(state == '%'){ - 499: 83 7d ec 25 cmpl $0x25,-0x14(%ebp) - 49d: 0f 85 03 01 00 00 jne 5a6 - if(c == 'd'){ - 4a3: 83 7d e4 64 cmpl $0x64,-0x1c(%ebp) - 4a7: 75 1e jne 4c7 - printint(fd, *ap, 10, 1); - 4a9: 8b 45 e8 mov -0x18(%ebp),%eax - 4ac: 8b 00 mov (%eax),%eax - 4ae: 6a 01 push $0x1 - 4b0: 6a 0a push $0xa - 4b2: 50 push %eax - 4b3: ff 75 08 pushl 0x8(%ebp) - 4b6: e8 c1 fe ff ff call 37c - 4bb: 83 c4 10 add $0x10,%esp - ap++; - 4be: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 4c2: e9 d8 00 00 00 jmp 59f - } else if(c == 'x' || c == 'p'){ - 4c7: 83 7d e4 78 cmpl $0x78,-0x1c(%ebp) - 4cb: 74 06 je 4d3 - 4cd: 83 7d e4 70 cmpl $0x70,-0x1c(%ebp) - 4d1: 75 1e jne 4f1 - printint(fd, *ap, 16, 0); - 4d3: 8b 45 e8 mov -0x18(%ebp),%eax - 4d6: 8b 00 mov (%eax),%eax - 4d8: 6a 00 push $0x0 - 4da: 6a 10 push $0x10 - 4dc: 50 push %eax - 4dd: ff 75 08 pushl 0x8(%ebp) - 4e0: e8 97 fe ff ff call 37c - 4e5: 83 c4 10 add $0x10,%esp - ap++; - 4e8: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 4ec: e9 ae 00 00 00 jmp 59f - } else if(c == 's'){ - 4f1: 83 7d e4 73 cmpl $0x73,-0x1c(%ebp) - 4f5: 75 43 jne 53a - s = (char*)*ap; - 4f7: 8b 45 e8 mov -0x18(%ebp),%eax - 4fa: 8b 00 mov (%eax),%eax - 4fc: 89 45 f4 mov %eax,-0xc(%ebp) - ap++; - 4ff: 83 45 e8 04 addl $0x4,-0x18(%ebp) - if(s == 0) - 503: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 507: 75 07 jne 510 - s = "(null)"; - 509: c7 45 f4 ec 07 00 00 movl $0x7ec,-0xc(%ebp) - while(*s != 0){ - 510: eb 1c jmp 52e - putc(fd, *s); - 512: 8b 45 f4 mov -0xc(%ebp),%eax - 515: 0f b6 00 movzbl (%eax),%eax - 518: 0f be c0 movsbl %al,%eax - 51b: 83 ec 08 sub $0x8,%esp - 51e: 50 push %eax - 51f: ff 75 08 pushl 0x8(%ebp) - 522: e8 33 fe ff ff call 35a - 527: 83 c4 10 add $0x10,%esp - s++; - 52a: 83 45 f4 01 addl $0x1,-0xc(%ebp) - } else if(c == 's'){ - s = (char*)*ap; - ap++; - if(s == 0) - s = "(null)"; - while(*s != 0){ - 52e: 8b 45 f4 mov -0xc(%ebp),%eax - 531: 0f b6 00 movzbl (%eax),%eax - 534: 84 c0 test %al,%al - 536: 75 da jne 512 - 538: eb 65 jmp 59f - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 53a: 83 7d e4 63 cmpl $0x63,-0x1c(%ebp) - 53e: 75 1d jne 55d - putc(fd, *ap); - 540: 8b 45 e8 mov -0x18(%ebp),%eax - 543: 8b 00 mov (%eax),%eax - 545: 0f be c0 movsbl %al,%eax - 548: 83 ec 08 sub $0x8,%esp - 54b: 50 push %eax - 54c: ff 75 08 pushl 0x8(%ebp) - 54f: e8 06 fe ff ff call 35a - 554: 83 c4 10 add $0x10,%esp - ap++; - 557: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 55b: eb 42 jmp 59f - } else if(c == '%'){ - 55d: 83 7d e4 25 cmpl $0x25,-0x1c(%ebp) - 561: 75 17 jne 57a - putc(fd, c); - 563: 8b 45 e4 mov -0x1c(%ebp),%eax - 566: 0f be c0 movsbl %al,%eax - 569: 83 ec 08 sub $0x8,%esp - 56c: 50 push %eax - 56d: ff 75 08 pushl 0x8(%ebp) - 570: e8 e5 fd ff ff call 35a - 575: 83 c4 10 add $0x10,%esp - 578: eb 25 jmp 59f - } else { - // Unknown % sequence. Print it to draw attention. - putc(fd, '%'); - 57a: 83 ec 08 sub $0x8,%esp - 57d: 6a 25 push $0x25 - 57f: ff 75 08 pushl 0x8(%ebp) - 582: e8 d3 fd ff ff call 35a - 587: 83 c4 10 add $0x10,%esp - putc(fd, c); - 58a: 8b 45 e4 mov -0x1c(%ebp),%eax - 58d: 0f be c0 movsbl %al,%eax - 590: 83 ec 08 sub $0x8,%esp - 593: 50 push %eax - 594: ff 75 08 pushl 0x8(%ebp) - 597: e8 be fd ff ff call 35a - 59c: 83 c4 10 add $0x10,%esp - } - state = 0; - 59f: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for(i = 0; fmt[i]; i++){ - 5a6: 83 45 f0 01 addl $0x1,-0x10(%ebp) - 5aa: 8b 55 0c mov 0xc(%ebp),%edx - 5ad: 8b 45 f0 mov -0x10(%ebp),%eax - 5b0: 01 d0 add %edx,%eax - 5b2: 0f b6 00 movzbl (%eax),%eax - 5b5: 84 c0 test %al,%al - 5b7: 0f 85 94 fe ff ff jne 451 - putc(fd, c); - } - state = 0; - } - } -} - 5bd: c9 leave - 5be: c3 ret - -000005bf : -static Header base; -static Header *freep; - -void -free(void *ap) -{ - 5bf: 55 push %ebp - 5c0: 89 e5 mov %esp,%ebp - 5c2: 83 ec 10 sub $0x10,%esp - Header *bp, *p; - - bp = (Header*)ap - 1; - 5c5: 8b 45 08 mov 0x8(%ebp),%eax - 5c8: 83 e8 08 sub $0x8,%eax - 5cb: 89 45 f8 mov %eax,-0x8(%ebp) - for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 5ce: a1 5c 0a 00 00 mov 0xa5c,%eax - 5d3: 89 45 fc mov %eax,-0x4(%ebp) - 5d6: eb 24 jmp 5fc - if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 5d8: 8b 45 fc mov -0x4(%ebp),%eax - 5db: 8b 00 mov (%eax),%eax - 5dd: 3b 45 fc cmp -0x4(%ebp),%eax - 5e0: 77 12 ja 5f4 - 5e2: 8b 45 f8 mov -0x8(%ebp),%eax - 5e5: 3b 45 fc cmp -0x4(%ebp),%eax - 5e8: 77 24 ja 60e - 5ea: 8b 45 fc mov -0x4(%ebp),%eax - 5ed: 8b 00 mov (%eax),%eax - 5ef: 3b 45 f8 cmp -0x8(%ebp),%eax - 5f2: 77 1a ja 60e -free(void *ap) -{ - Header *bp, *p; - - bp = (Header*)ap - 1; - for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 5f4: 8b 45 fc mov -0x4(%ebp),%eax - 5f7: 8b 00 mov (%eax),%eax - 5f9: 89 45 fc mov %eax,-0x4(%ebp) - 5fc: 8b 45 f8 mov -0x8(%ebp),%eax - 5ff: 3b 45 fc cmp -0x4(%ebp),%eax - 602: 76 d4 jbe 5d8 - 604: 8b 45 fc mov -0x4(%ebp),%eax - 607: 8b 00 mov (%eax),%eax - 609: 3b 45 f8 cmp -0x8(%ebp),%eax - 60c: 76 ca jbe 5d8 - if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - break; - if(bp + bp->s.size == p->s.ptr){ - 60e: 8b 45 f8 mov -0x8(%ebp),%eax - 611: 8b 40 04 mov 0x4(%eax),%eax - 614: 8d 14 c5 00 00 00 00 lea 0x0(,%eax,8),%edx - 61b: 8b 45 f8 mov -0x8(%ebp),%eax - 61e: 01 c2 add %eax,%edx - 620: 8b 45 fc mov -0x4(%ebp),%eax - 623: 8b 00 mov (%eax),%eax - 625: 39 c2 cmp %eax,%edx - 627: 75 24 jne 64d - bp->s.size += p->s.ptr->s.size; - 629: 8b 45 f8 mov -0x8(%ebp),%eax - 62c: 8b 50 04 mov 0x4(%eax),%edx - 62f: 8b 45 fc mov -0x4(%ebp),%eax - 632: 8b 00 mov (%eax),%eax - 634: 8b 40 04 mov 0x4(%eax),%eax - 637: 01 c2 add %eax,%edx - 639: 8b 45 f8 mov -0x8(%ebp),%eax - 63c: 89 50 04 mov %edx,0x4(%eax) - bp->s.ptr = p->s.ptr->s.ptr; - 63f: 8b 45 fc mov -0x4(%ebp),%eax - 642: 8b 00 mov (%eax),%eax - 644: 8b 10 mov (%eax),%edx - 646: 8b 45 f8 mov -0x8(%ebp),%eax - 649: 89 10 mov %edx,(%eax) - 64b: eb 0a jmp 657 - } else - bp->s.ptr = p->s.ptr; - 64d: 8b 45 fc mov -0x4(%ebp),%eax - 650: 8b 10 mov (%eax),%edx - 652: 8b 45 f8 mov -0x8(%ebp),%eax - 655: 89 10 mov %edx,(%eax) - if(p + p->s.size == bp){ - 657: 8b 45 fc mov -0x4(%ebp),%eax - 65a: 8b 40 04 mov 0x4(%eax),%eax - 65d: 8d 14 c5 00 00 00 00 lea 0x0(,%eax,8),%edx - 664: 8b 45 fc mov -0x4(%ebp),%eax - 667: 01 d0 add %edx,%eax - 669: 3b 45 f8 cmp -0x8(%ebp),%eax - 66c: 75 20 jne 68e - p->s.size += bp->s.size; - 66e: 8b 45 fc mov -0x4(%ebp),%eax - 671: 8b 50 04 mov 0x4(%eax),%edx - 674: 8b 45 f8 mov -0x8(%ebp),%eax - 677: 8b 40 04 mov 0x4(%eax),%eax - 67a: 01 c2 add %eax,%edx - 67c: 8b 45 fc mov -0x4(%ebp),%eax - 67f: 89 50 04 mov %edx,0x4(%eax) - p->s.ptr = bp->s.ptr; - 682: 8b 45 f8 mov -0x8(%ebp),%eax - 685: 8b 10 mov (%eax),%edx - 687: 8b 45 fc mov -0x4(%ebp),%eax - 68a: 89 10 mov %edx,(%eax) - 68c: eb 08 jmp 696 - } else - p->s.ptr = bp; - 68e: 8b 45 fc mov -0x4(%ebp),%eax - 691: 8b 55 f8 mov -0x8(%ebp),%edx - 694: 89 10 mov %edx,(%eax) - freep = p; - 696: 8b 45 fc mov -0x4(%ebp),%eax - 699: a3 5c 0a 00 00 mov %eax,0xa5c -} - 69e: c9 leave - 69f: c3 ret - -000006a0 : - -static Header* -morecore(uint nu) -{ - 6a0: 55 push %ebp - 6a1: 89 e5 mov %esp,%ebp - 6a3: 83 ec 18 sub $0x18,%esp - char *p; - Header *hp; - - if(nu < 4096) - 6a6: 81 7d 08 ff 0f 00 00 cmpl $0xfff,0x8(%ebp) - 6ad: 77 07 ja 6b6 - nu = 4096; - 6af: c7 45 08 00 10 00 00 movl $0x1000,0x8(%ebp) - p = sbrk(nu * sizeof(Header)); - 6b6: 8b 45 08 mov 0x8(%ebp),%eax - 6b9: c1 e0 03 shl $0x3,%eax - 6bc: 83 ec 0c sub $0xc,%esp - 6bf: 50 push %eax - 6c0: e8 7d fc ff ff call 342 - 6c5: 83 c4 10 add $0x10,%esp - 6c8: 89 45 f4 mov %eax,-0xc(%ebp) - if(p == (char*)-1) - 6cb: 83 7d f4 ff cmpl $0xffffffff,-0xc(%ebp) - 6cf: 75 07 jne 6d8 - return 0; - 6d1: b8 00 00 00 00 mov $0x0,%eax - 6d6: eb 26 jmp 6fe - hp = (Header*)p; - 6d8: 8b 45 f4 mov -0xc(%ebp),%eax - 6db: 89 45 f0 mov %eax,-0x10(%ebp) - hp->s.size = nu; - 6de: 8b 45 f0 mov -0x10(%ebp),%eax - 6e1: 8b 55 08 mov 0x8(%ebp),%edx - 6e4: 89 50 04 mov %edx,0x4(%eax) - free((void*)(hp + 1)); - 6e7: 8b 45 f0 mov -0x10(%ebp),%eax - 6ea: 83 c0 08 add $0x8,%eax - 6ed: 83 ec 0c sub $0xc,%esp - 6f0: 50 push %eax - 6f1: e8 c9 fe ff ff call 5bf - 6f6: 83 c4 10 add $0x10,%esp - return freep; - 6f9: a1 5c 0a 00 00 mov 0xa5c,%eax -} - 6fe: c9 leave - 6ff: c3 ret - -00000700 : - -void* -malloc(uint nbytes) -{ - 700: 55 push %ebp - 701: 89 e5 mov %esp,%ebp - 703: 83 ec 18 sub $0x18,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 706: 8b 45 08 mov 0x8(%ebp),%eax - 709: 83 c0 07 add $0x7,%eax - 70c: c1 e8 03 shr $0x3,%eax - 70f: 83 c0 01 add $0x1,%eax - 712: 89 45 ec mov %eax,-0x14(%ebp) - if((prevp = freep) == 0){ - 715: a1 5c 0a 00 00 mov 0xa5c,%eax - 71a: 89 45 f0 mov %eax,-0x10(%ebp) - 71d: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 721: 75 23 jne 746 - base.s.ptr = freep = prevp = &base; - 723: c7 45 f0 54 0a 00 00 movl $0xa54,-0x10(%ebp) - 72a: 8b 45 f0 mov -0x10(%ebp),%eax - 72d: a3 5c 0a 00 00 mov %eax,0xa5c - 732: a1 5c 0a 00 00 mov 0xa5c,%eax - 737: a3 54 0a 00 00 mov %eax,0xa54 - base.s.size = 0; - 73c: c7 05 58 0a 00 00 00 movl $0x0,0xa58 - 743: 00 00 00 - } - for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 746: 8b 45 f0 mov -0x10(%ebp),%eax - 749: 8b 00 mov (%eax),%eax - 74b: 89 45 f4 mov %eax,-0xc(%ebp) - if(p->s.size >= nunits){ - 74e: 8b 45 f4 mov -0xc(%ebp),%eax - 751: 8b 40 04 mov 0x4(%eax),%eax - 754: 3b 45 ec cmp -0x14(%ebp),%eax - 757: 72 4d jb 7a6 - if(p->s.size == nunits) - 759: 8b 45 f4 mov -0xc(%ebp),%eax - 75c: 8b 40 04 mov 0x4(%eax),%eax - 75f: 3b 45 ec cmp -0x14(%ebp),%eax - 762: 75 0c jne 770 - prevp->s.ptr = p->s.ptr; - 764: 8b 45 f4 mov -0xc(%ebp),%eax - 767: 8b 10 mov (%eax),%edx - 769: 8b 45 f0 mov -0x10(%ebp),%eax - 76c: 89 10 mov %edx,(%eax) - 76e: eb 26 jmp 796 - else { - p->s.size -= nunits; - 770: 8b 45 f4 mov -0xc(%ebp),%eax - 773: 8b 40 04 mov 0x4(%eax),%eax - 776: 2b 45 ec sub -0x14(%ebp),%eax - 779: 89 c2 mov %eax,%edx - 77b: 8b 45 f4 mov -0xc(%ebp),%eax - 77e: 89 50 04 mov %edx,0x4(%eax) - p += p->s.size; - 781: 8b 45 f4 mov -0xc(%ebp),%eax - 784: 8b 40 04 mov 0x4(%eax),%eax - 787: c1 e0 03 shl $0x3,%eax - 78a: 01 45 f4 add %eax,-0xc(%ebp) - p->s.size = nunits; - 78d: 8b 45 f4 mov -0xc(%ebp),%eax - 790: 8b 55 ec mov -0x14(%ebp),%edx - 793: 89 50 04 mov %edx,0x4(%eax) - } - freep = prevp; - 796: 8b 45 f0 mov -0x10(%ebp),%eax - 799: a3 5c 0a 00 00 mov %eax,0xa5c - return (void*)(p + 1); - 79e: 8b 45 f4 mov -0xc(%ebp),%eax - 7a1: 83 c0 08 add $0x8,%eax - 7a4: eb 3b jmp 7e1 - } - if(p == freep) - 7a6: a1 5c 0a 00 00 mov 0xa5c,%eax - 7ab: 39 45 f4 cmp %eax,-0xc(%ebp) - 7ae: 75 1e jne 7ce - if((p = morecore(nunits)) == 0) - 7b0: 83 ec 0c sub $0xc,%esp - 7b3: ff 75 ec pushl -0x14(%ebp) - 7b6: e8 e5 fe ff ff call 6a0 - 7bb: 83 c4 10 add $0x10,%esp - 7be: 89 45 f4 mov %eax,-0xc(%ebp) - 7c1: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 7c5: 75 07 jne 7ce - return 0; - 7c7: b8 00 00 00 00 mov $0x0,%eax - 7cc: eb 13 jmp 7e1 - nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - if((prevp = freep) == 0){ - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 7ce: 8b 45 f4 mov -0xc(%ebp),%eax - 7d1: 89 45 f0 mov %eax,-0x10(%ebp) - 7d4: 8b 45 f4 mov -0xc(%ebp),%eax - 7d7: 8b 00 mov (%eax),%eax - 7d9: 89 45 f4 mov %eax,-0xc(%ebp) - return (void*)(p + 1); - } - if(p == freep) - if((p = morecore(nunits)) == 0) - return 0; - } - 7dc: e9 6d ff ff ff jmp 74e -} - 7e1: c9 leave - 7e2: c3 ret diff --git a/xv6-public/echo.d b/xv6-public/echo.d deleted file mode 100755 index 16a6098..0000000 --- a/xv6-public/echo.d +++ /dev/null @@ -1 +0,0 @@ -echo.o: echo.c /usr/include/stdc-predef.h types.h stat.h user.h diff --git a/xv6-public/echo.o b/xv6-public/echo.o deleted file mode 100755 index e7756188d48539b38be65a0dc6c606961bac311f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2820 zcma)8TWB0r7(QoacC*cHb7@p6QQS&G<7Fnb4WXCxqG^mRrPfNMg4)h*CcC4%v+2xi zj8ajIf+bY#llmg!QxPfn;Dv(VgJ8i2@zn>PDio@q&^HV5`_7z`Oz}Z~cFy`r7$FgEjA<}P8BlCgn}_~mlzTkj*U1g*Zy2Pdu#6eZ%;q9^83K~AAgv+ z$*>z!t1~xOzLWdx*LtonPCRTn5p>Q38EYfCO6onqd$s!HbMW+}FS)#?o({mETmt+|K6CP1=E~)V{ zMoSj=Aa;}7Oktap^yp=9FP+MwA}g?4*)mYepd9TRD%*X-eS>m~94NvzBFg0hP+{qs zEunZ%9<11Xd&~RE+bc(g=zOU7!DAIUgvA#`W;rrs^$Jm(5O#@<5RtFv{F_n?%17W> z>PPA$U^eBmO{pZk1wl)BE0$UDM1HcV3UnlHnI%$(*su7r3fT%z=b70cGK9ezw~d>^%E|)9Ykr8g?HLv z>Mq27J8%~}SbY$iv`FAC#+@{%r=3{%aicDhW+zUo>*cXz-9wm{M6evD+J~m`ZW52T zI(5G_UT-g^yLRmyUtXGY7rV7qSQn}{Vs?6ZZ*>gac_3>J`pho)p#vAi`?XpeEEx&qAYk3mkNv0-Fvq&86-I&a#l$O@wAb6p*ATl8ywv8F|h0}eRw1B zmJp*_wt=LNGFTr?zK5Wp|9|=IfDdD`Tbbp{ufyb<(tZF%e0Bb+d4loV4L%?LFzWaQ zI@ZA+m^z*SZ(_iTHz0gQMw78U1KIF2J&1+QYafEKv8RTo{$2Q0$!Ib*A98+u*RZ|; z=(s+x>+4$vZ(_iT%gA?zj3#4CA?NemL=yI$`S?~f^}Yq3G3+;~4;yp9B!Ntp&wCn; z-!UZE0-Yh__aPLyaPa~s%8{{s4jp+cU(p%(9nw6(gk1ukuj5v(jzR6my2zU|1y+25 z1YeQSWaiD!Nz+vXSE0NUJijcQmwo4)`Fz)*xEne{CZCZF=Jk&FYt871xBtVToS%WR zsXB|YMIj#!ySc5#&dN8)zO7Tt$CI-`w%Yl;j8A=zY*qP&!d6|)%l+yMQNwe+1v|*U z8-~nz&CBN1uD)OT%ckD&a2mrSQR2A9S&hem7LxfyY%Hsm_@BjdE6dql6S-$Z?u*1h z;s>9&jfm1!e%Muh;H387ukonHIU?ft&w%(m5v^@#dspMC*1u1LAK!7rFSPw@jX!Ht Q>&C#o&~HLx6=*^J2b23lC;$Ke diff --git a/xv6-public/echo.sym b/xv6-public/echo.sym deleted file mode 100755 index b25926b..0000000 --- a/xv6-public/echo.sym +++ /dev/null @@ -1,61 +0,0 @@ -00000000 .text -000007e3 .rodata -000007f4 .eh_frame -00000a40 .data -00000a54 .bss -00000000 .comment -00000000 .debug_aranges -00000000 .debug_info -00000000 .debug_abbrev -00000000 .debug_line -00000000 .debug_str -00000000 .debug_loc -00000000 echo.c -00000000 ulib.c -00000065 stosb -00000000 printf.c -0000035a putc -0000037c printint -00000a40 digits.1372 -00000000 umalloc.c -00000a54 base -00000a5c freep -000006a0 morecore -00000000 -0000008a strcpy -0000042f printf -00000275 memmove -00000302 mknod -0000016d gets -0000033a getpid -00000700 malloc -0000034a sleep -000002ca pipe -000002da write -00000312 fstat -000002ea kill -0000032a chdir -000002f2 exec -000002c2 wait -000002d2 read -0000030a unlink -000002b2 fork -00000342 sbrk -00000352 uptime -00000a51 __bss_start -00000120 memset -00000000 main -000000ba strcmp -00000332 dup -000001db stat -00000a51 _edata -00000a60 _end -0000031a link -000002ba exit -00000228 atoi -000000f9 strlen -000002fa open -0000013a strchr -00000322 mkdir -000002e2 close -000005bf free diff --git a/xv6-public/entry.o b/xv6-public/entry.o deleted file mode 100755 index 6c0b7e4bd89355a0a74462576d5897db4d98b019..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1380 zcma)6J#Q015S_J?U_uhxAwr-aup&i*0B6fFbPhz~tB3#*DBQ%lvk&{k`GdQ2lvG6G zuh38+QBqK(=2(YTH|BbP8M z^>bk!b6gbJmAL&V*tfPBC^DUy!<=1H_4-C*qu#i^)5v5H{t(s-17vE_ADc3Z%cC$T z`-7J4ms`DIw7y;~@9o~YF&sI**OCX1o|iVaOI52{LvN}mg_)vSRN35eZZ&syI?fwU z7cuKH6JxS>O|5Xh7uk+jVH6~~Yf#|&R^;wQVzuqa7Rw1kv1n|&&ZyJ$y}p~~UjM}a zp|Q_)oWR{pd+osPcieE&#D9Rxh~e4H=velh?tMzzd3mQbrdq=O&qL$h;`NNnVXSJN zg{E{9HJQylT!V%2|B7QTW(|`t-zI?;sQD;zgrGh*@?{x^N{FTi~1jO46# zEZO)Z(>%R%#`ETmB`dQh&k$@8ZhZU)j4FU%NH}TC`M!;CpKBP@oQm@Os6wnIw)aMU zV!Z diff --git a/xv6-public/entryother.asm b/xv6-public/entryother.asm deleted file mode 100755 index e70278c..0000000 --- a/xv6-public/entryother.asm +++ /dev/null @@ -1,114 +0,0 @@ - -bootblockother.o: file format elf32-i386 - - -Disassembly of section .text: - -00007000 : -# - it uses the address at start-4, start-8, and start-12 - -.code16 -.globl start -start: - cli - 7000: fa cli - - xorw %ax,%ax - 7001: 31 c0 xor %eax,%eax - movw %ax,%ds - 7003: 8e d8 mov %eax,%ds - movw %ax,%es - 7005: 8e c0 mov %eax,%es - movw %ax,%ss - 7007: 8e d0 mov %eax,%ss - - lgdt gdtdesc - 7009: 0f 01 16 lgdtl (%esi) - 700c: 84 70 0f test %dh,0xf(%eax) - movl %cr0, %eax - 700f: 20 c0 and %al,%al - orl $CR0_PE, %eax - 7011: 66 83 c8 01 or $0x1,%ax - movl %eax, %cr0 - 7015: 0f 22 c0 mov %eax,%cr0 - -//PAGEBREAK! - ljmpl $(SEG_KCODE<<3), $(start32) - 7018: 66 ea 20 70 00 00 ljmpw $0x0,$0x7020 - 701e: 08 00 or %al,(%eax) - -00007020 : - -.code32 -start32: - movw $(SEG_KDATA<<3), %ax - 7020: 66 b8 10 00 mov $0x10,%ax - movw %ax, %ds - 7024: 8e d8 mov %eax,%ds - movw %ax, %es - 7026: 8e c0 mov %eax,%es - movw %ax, %ss - 7028: 8e d0 mov %eax,%ss - movw $0, %ax - 702a: 66 b8 00 00 mov $0x0,%ax - movw %ax, %fs - 702e: 8e e0 mov %eax,%fs - movw %ax, %gs - 7030: 8e e8 mov %eax,%gs - - # Turn on page size extension for 4Mbyte pages - movl %cr4, %eax - 7032: 0f 20 e0 mov %cr4,%eax - orl $(CR4_PSE), %eax - 7035: 83 c8 10 or $0x10,%eax - movl %eax, %cr4 - 7038: 0f 22 e0 mov %eax,%cr4 - # Use enterpgdir as our initial page table - movl (start-12), %eax - 703b: a1 f4 6f 00 00 mov 0x6ff4,%eax - movl %eax, %cr3 - 7040: 0f 22 d8 mov %eax,%cr3 - # Turn on paging. - movl %cr0, %eax - 7043: 0f 20 c0 mov %cr0,%eax - orl $(CR0_PE|CR0_PG|CR0_WP), %eax - 7046: 0d 01 00 01 80 or $0x80010001,%eax - movl %eax, %cr0 - 704b: 0f 22 c0 mov %eax,%cr0 - - # Switch to the stack allocated by startothers() - movl (start-4), %esp - 704e: 8b 25 fc 6f 00 00 mov 0x6ffc,%esp - # Call mpenter() - call *(start-8) - 7054: ff 15 f8 6f 00 00 call *0x6ff8 - - movw $0x8a00, %ax - 705a: 66 b8 00 8a mov $0x8a00,%ax - movw %ax, %dx - 705e: 66 89 c2 mov %ax,%dx - outw %ax, %dx - 7061: 66 ef out %ax,(%dx) - movw $0x8ae0, %ax - 7063: 66 b8 e0 8a mov $0x8ae0,%ax - outw %ax, %dx - 7067: 66 ef out %ax,(%dx) - -00007069 : -spin: - jmp spin - 7069: eb fe jmp 7069 - 706b: 90 nop - -0000706c : - ... - 7074: ff (bad) - 7075: ff 00 incl (%eax) - 7077: 00 00 add %al,(%eax) - 7079: 9a cf 00 ff ff 00 00 lcall $0x0,$0xffff00cf - 7080: 00 92 cf 00 17 00 add %dl,0x1700cf(%edx) - -00007084 : - 7084: 17 pop %ss - 7085: 00 6c 70 00 add %ch,0x0(%eax,%esi,2) - ... diff --git a/xv6-public/entryother.d b/xv6-public/entryother.d deleted file mode 100755 index a140303..0000000 --- a/xv6-public/entryother.d +++ /dev/null @@ -1 +0,0 @@ -entryother.o: entryother.S asm.h memlayout.h mmu.h diff --git a/xv6-public/entryother.o b/xv6-public/entryother.o deleted file mode 100755 index c4babc057e5c8c576bae31882c746bb3b5db79f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1476 zcma)6%}W$v7=K<@Z3}hRG6M~oHiRIWSy$=gYC#`|ttg~OkYZ+c#$6g$n;At<35t-# z649ws{SO^H#nQ=}9zE_c>fohARJ8t{nfKitA*cu5d4A9L$2&96Z`{5qgdjzN64aK6 z209|kc*rhNihAhhXuY;ytJn5YVsL{}THRUS5vfew`KrMyNzQhfA_r%isMe@`NokGs zopdVG`0%~iY^E~%2`cBewOIfv z7^C_8hKZEcu?{E)-4ID9$eiV`DjEW%h=Sx-2u{jN@s2s3-wo!W9ha{3ho)ntsQ>@~ diff --git a/xv6-public/exec.d b/xv6-public/exec.d deleted file mode 100755 index 0400275..0000000 --- a/xv6-public/exec.d +++ /dev/null @@ -1,2 +0,0 @@ -exec.o: exec.c /usr/include/stdc-predef.h types.h param.h memlayout.h \ - mmu.h proc.h defs.h x86.h elf.h diff --git a/xv6-public/exec.o b/xv6-public/exec.o deleted file mode 100755 index 97ed934995644eb5e4a7a810c09c7e8bbc09aa1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8232 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 X?lOq!ghb7F&a+=3{%`h8 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 diff --git a/xv6-public/forktest.asm b/xv6-public/forktest.asm deleted file mode 100755 index 34e4c9e..0000000 --- a/xv6-public/forktest.asm +++ /dev/null @@ -1,694 +0,0 @@ - -_forktest: file format elf32-i386 - - -Disassembly of section .text: - -00000000 : - -#define N 1000 - -void -printf(int fd, char *s, ...) -{ - 0: 55 push %ebp - 1: 89 e5 mov %esp,%ebp - 3: 83 ec 08 sub $0x8,%esp - write(fd, s, strlen(s)); - 6: 83 ec 0c sub $0xc,%esp - 9: ff 75 0c pushl 0xc(%ebp) - c: e8 95 01 00 00 call 1a6 - 11: 83 c4 10 add $0x10,%esp - 14: 83 ec 04 sub $0x4,%esp - 17: 50 push %eax - 18: ff 75 0c pushl 0xc(%ebp) - 1b: ff 75 08 pushl 0x8(%ebp) - 1e: e8 64 03 00 00 call 387 - 23: 83 c4 10 add $0x10,%esp -} - 26: c9 leave - 27: c3 ret - -00000028 : - -void -forktest(void) -{ - 28: 55 push %ebp - 29: 89 e5 mov %esp,%ebp - 2b: 83 ec 18 sub $0x18,%esp - int n, pid; - - printf(1, "fork test\n"); - 2e: 83 ec 08 sub $0x8,%esp - 31: 68 08 04 00 00 push $0x408 - 36: 6a 01 push $0x1 - 38: e8 c3 ff ff ff call 0 - 3d: 83 c4 10 add $0x10,%esp - - for(n=0; n - pid = fork(); - 49: e8 11 03 00 00 call 35f - 4e: 89 45 f0 mov %eax,-0x10(%ebp) - if(pid < 0) - 51: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 55: 79 02 jns 59 - break; - 57: eb 18 jmp 71 - if(pid == 0) - 59: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 5d: 75 05 jne 64 - exit(); - 5f: e8 03 03 00 00 call 367 -{ - int n, pid; - - printf(1, "fork test\n"); - - for(n=0; n - break; - if(pid == 0) - exit(); - } - - if(n == N){ - 71: 81 7d f4 e8 03 00 00 cmpl $0x3e8,-0xc(%ebp) - 78: 75 1c jne 96 - printf(1, "fork claimed to work N times!\n", N); - 7a: 83 ec 04 sub $0x4,%esp - 7d: 68 e8 03 00 00 push $0x3e8 - 82: 68 14 04 00 00 push $0x414 - 87: 6a 01 push $0x1 - 89: e8 72 ff ff ff call 0 - 8e: 83 c4 10 add $0x10,%esp - exit(); - 91: e8 d1 02 00 00 call 367 - } - - for(; n > 0; n--){ - 96: eb 24 jmp bc - if(wait() < 0){ - 98: e8 d2 02 00 00 call 36f - 9d: 85 c0 test %eax,%eax - 9f: 79 17 jns b8 - printf(1, "wait stopped early\n"); - a1: 83 ec 08 sub $0x8,%esp - a4: 68 33 04 00 00 push $0x433 - a9: 6a 01 push $0x1 - ab: e8 50 ff ff ff call 0 - b0: 83 c4 10 add $0x10,%esp - exit(); - b3: e8 af 02 00 00 call 367 - if(n == N){ - printf(1, "fork claimed to work N times!\n", N); - exit(); - } - - for(; n > 0; n--){ - b8: 83 6d f4 01 subl $0x1,-0xc(%ebp) - bc: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - c0: 7f d6 jg 98 - printf(1, "wait stopped early\n"); - exit(); - } - } - - if(wait() != -1){ - c2: e8 a8 02 00 00 call 36f - c7: 83 f8 ff cmp $0xffffffff,%eax - ca: 74 17 je e3 - printf(1, "wait got too many\n"); - cc: 83 ec 08 sub $0x8,%esp - cf: 68 47 04 00 00 push $0x447 - d4: 6a 01 push $0x1 - d6: e8 25 ff ff ff call 0 - db: 83 c4 10 add $0x10,%esp - exit(); - de: e8 84 02 00 00 call 367 - } - - printf(1, "fork test OK\n"); - e3: 83 ec 08 sub $0x8,%esp - e6: 68 5a 04 00 00 push $0x45a - eb: 6a 01 push $0x1 - ed: e8 0e ff ff ff call 0 - f2: 83 c4 10 add $0x10,%esp -} - f5: c9 leave - f6: c3 ret - -000000f7
: - -int -main(void) -{ - f7: 8d 4c 24 04 lea 0x4(%esp),%ecx - fb: 83 e4 f0 and $0xfffffff0,%esp - fe: ff 71 fc pushl -0x4(%ecx) - 101: 55 push %ebp - 102: 89 e5 mov %esp,%ebp - 104: 51 push %ecx - 105: 83 ec 04 sub $0x4,%esp - forktest(); - 108: e8 1b ff ff ff call 28 - exit(); - 10d: e8 55 02 00 00 call 367 - -00000112 : - "cc"); -} - -static inline void -stosb(void *addr, int data, int cnt) -{ - 112: 55 push %ebp - 113: 89 e5 mov %esp,%ebp - 115: 57 push %edi - 116: 53 push %ebx - asm volatile("cld; rep stosb" : - 117: 8b 4d 08 mov 0x8(%ebp),%ecx - 11a: 8b 55 10 mov 0x10(%ebp),%edx - 11d: 8b 45 0c mov 0xc(%ebp),%eax - 120: 89 cb mov %ecx,%ebx - 122: 89 df mov %ebx,%edi - 124: 89 d1 mov %edx,%ecx - 126: fc cld - 127: f3 aa rep stos %al,%es:(%edi) - 129: 89 ca mov %ecx,%edx - 12b: 89 fb mov %edi,%ebx - 12d: 89 5d 08 mov %ebx,0x8(%ebp) - 130: 89 55 10 mov %edx,0x10(%ebp) - "=D" (addr), "=c" (cnt) : - "0" (addr), "1" (cnt), "a" (data) : - "memory", "cc"); -} - 133: 5b pop %ebx - 134: 5f pop %edi - 135: 5d pop %ebp - 136: c3 ret - -00000137 : -#include "user.h" -#include "x86.h" - -char* -strcpy(char *s, char *t) -{ - 137: 55 push %ebp - 138: 89 e5 mov %esp,%ebp - 13a: 83 ec 10 sub $0x10,%esp - char *os; - - os = s; - 13d: 8b 45 08 mov 0x8(%ebp),%eax - 140: 89 45 fc mov %eax,-0x4(%ebp) - while((*s++ = *t++) != 0) - 143: 90 nop - 144: 8b 45 08 mov 0x8(%ebp),%eax - 147: 8d 50 01 lea 0x1(%eax),%edx - 14a: 89 55 08 mov %edx,0x8(%ebp) - 14d: 8b 55 0c mov 0xc(%ebp),%edx - 150: 8d 4a 01 lea 0x1(%edx),%ecx - 153: 89 4d 0c mov %ecx,0xc(%ebp) - 156: 0f b6 12 movzbl (%edx),%edx - 159: 88 10 mov %dl,(%eax) - 15b: 0f b6 00 movzbl (%eax),%eax - 15e: 84 c0 test %al,%al - 160: 75 e2 jne 144 - ; - return os; - 162: 8b 45 fc mov -0x4(%ebp),%eax -} - 165: c9 leave - 166: c3 ret - -00000167 : - -int -strcmp(const char *p, const char *q) -{ - 167: 55 push %ebp - 168: 89 e5 mov %esp,%ebp - while(*p && *p == *q) - 16a: eb 08 jmp 174 - p++, q++; - 16c: 83 45 08 01 addl $0x1,0x8(%ebp) - 170: 83 45 0c 01 addl $0x1,0xc(%ebp) -} - -int -strcmp(const char *p, const char *q) -{ - while(*p && *p == *q) - 174: 8b 45 08 mov 0x8(%ebp),%eax - 177: 0f b6 00 movzbl (%eax),%eax - 17a: 84 c0 test %al,%al - 17c: 74 10 je 18e - 17e: 8b 45 08 mov 0x8(%ebp),%eax - 181: 0f b6 10 movzbl (%eax),%edx - 184: 8b 45 0c mov 0xc(%ebp),%eax - 187: 0f b6 00 movzbl (%eax),%eax - 18a: 38 c2 cmp %al,%dl - 18c: 74 de je 16c - p++, q++; - return (uchar)*p - (uchar)*q; - 18e: 8b 45 08 mov 0x8(%ebp),%eax - 191: 0f b6 00 movzbl (%eax),%eax - 194: 0f b6 d0 movzbl %al,%edx - 197: 8b 45 0c mov 0xc(%ebp),%eax - 19a: 0f b6 00 movzbl (%eax),%eax - 19d: 0f b6 c0 movzbl %al,%eax - 1a0: 29 c2 sub %eax,%edx - 1a2: 89 d0 mov %edx,%eax -} - 1a4: 5d pop %ebp - 1a5: c3 ret - -000001a6 : - -uint -strlen(char *s) -{ - 1a6: 55 push %ebp - 1a7: 89 e5 mov %esp,%ebp - 1a9: 83 ec 10 sub $0x10,%esp - int n; - - for(n = 0; s[n]; n++) - 1ac: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - 1b3: eb 04 jmp 1b9 - 1b5: 83 45 fc 01 addl $0x1,-0x4(%ebp) - 1b9: 8b 55 fc mov -0x4(%ebp),%edx - 1bc: 8b 45 08 mov 0x8(%ebp),%eax - 1bf: 01 d0 add %edx,%eax - 1c1: 0f b6 00 movzbl (%eax),%eax - 1c4: 84 c0 test %al,%al - 1c6: 75 ed jne 1b5 - ; - return n; - 1c8: 8b 45 fc mov -0x4(%ebp),%eax -} - 1cb: c9 leave - 1cc: c3 ret - -000001cd : - -void* -memset(void *dst, int c, uint n) -{ - 1cd: 55 push %ebp - 1ce: 89 e5 mov %esp,%ebp - stosb(dst, c, n); - 1d0: 8b 45 10 mov 0x10(%ebp),%eax - 1d3: 50 push %eax - 1d4: ff 75 0c pushl 0xc(%ebp) - 1d7: ff 75 08 pushl 0x8(%ebp) - 1da: e8 33 ff ff ff call 112 - 1df: 83 c4 0c add $0xc,%esp - return dst; - 1e2: 8b 45 08 mov 0x8(%ebp),%eax -} - 1e5: c9 leave - 1e6: c3 ret - -000001e7 : - -char* -strchr(const char *s, char c) -{ - 1e7: 55 push %ebp - 1e8: 89 e5 mov %esp,%ebp - 1ea: 83 ec 04 sub $0x4,%esp - 1ed: 8b 45 0c mov 0xc(%ebp),%eax - 1f0: 88 45 fc mov %al,-0x4(%ebp) - for(; *s; s++) - 1f3: eb 14 jmp 209 - if(*s == c) - 1f5: 8b 45 08 mov 0x8(%ebp),%eax - 1f8: 0f b6 00 movzbl (%eax),%eax - 1fb: 3a 45 fc cmp -0x4(%ebp),%al - 1fe: 75 05 jne 205 - return (char*)s; - 200: 8b 45 08 mov 0x8(%ebp),%eax - 203: eb 13 jmp 218 -} - -char* -strchr(const char *s, char c) -{ - for(; *s; s++) - 205: 83 45 08 01 addl $0x1,0x8(%ebp) - 209: 8b 45 08 mov 0x8(%ebp),%eax - 20c: 0f b6 00 movzbl (%eax),%eax - 20f: 84 c0 test %al,%al - 211: 75 e2 jne 1f5 - if(*s == c) - return (char*)s; - return 0; - 213: b8 00 00 00 00 mov $0x0,%eax -} - 218: c9 leave - 219: c3 ret - -0000021a : - -char* -gets(char *buf, int max) -{ - 21a: 55 push %ebp - 21b: 89 e5 mov %esp,%ebp - 21d: 83 ec 18 sub $0x18,%esp - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - 220: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 227: eb 44 jmp 26d - cc = read(0, &c, 1); - 229: 83 ec 04 sub $0x4,%esp - 22c: 6a 01 push $0x1 - 22e: 8d 45 ef lea -0x11(%ebp),%eax - 231: 50 push %eax - 232: 6a 00 push $0x0 - 234: e8 46 01 00 00 call 37f - 239: 83 c4 10 add $0x10,%esp - 23c: 89 45 f0 mov %eax,-0x10(%ebp) - if(cc < 1) - 23f: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 243: 7f 02 jg 247 - break; - 245: eb 31 jmp 278 - buf[i++] = c; - 247: 8b 45 f4 mov -0xc(%ebp),%eax - 24a: 8d 50 01 lea 0x1(%eax),%edx - 24d: 89 55 f4 mov %edx,-0xc(%ebp) - 250: 89 c2 mov %eax,%edx - 252: 8b 45 08 mov 0x8(%ebp),%eax - 255: 01 c2 add %eax,%edx - 257: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 25b: 88 02 mov %al,(%edx) - if(c == '\n' || c == '\r') - 25d: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 261: 3c 0a cmp $0xa,%al - 263: 74 13 je 278 - 265: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 269: 3c 0d cmp $0xd,%al - 26b: 74 0b je 278 -gets(char *buf, int max) -{ - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - 26d: 8b 45 f4 mov -0xc(%ebp),%eax - 270: 83 c0 01 add $0x1,%eax - 273: 3b 45 0c cmp 0xc(%ebp),%eax - 276: 7c b1 jl 229 - break; - buf[i++] = c; - if(c == '\n' || c == '\r') - break; - } - buf[i] = '\0'; - 278: 8b 55 f4 mov -0xc(%ebp),%edx - 27b: 8b 45 08 mov 0x8(%ebp),%eax - 27e: 01 d0 add %edx,%eax - 280: c6 00 00 movb $0x0,(%eax) - return buf; - 283: 8b 45 08 mov 0x8(%ebp),%eax -} - 286: c9 leave - 287: c3 ret - -00000288 : - -int -stat(char *n, struct stat *st) -{ - 288: 55 push %ebp - 289: 89 e5 mov %esp,%ebp - 28b: 83 ec 18 sub $0x18,%esp - int fd; - int r; - - fd = open(n, O_RDONLY); - 28e: 83 ec 08 sub $0x8,%esp - 291: 6a 00 push $0x0 - 293: ff 75 08 pushl 0x8(%ebp) - 296: e8 0c 01 00 00 call 3a7 - 29b: 83 c4 10 add $0x10,%esp - 29e: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd < 0) - 2a1: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 2a5: 79 07 jns 2ae - return -1; - 2a7: b8 ff ff ff ff mov $0xffffffff,%eax - 2ac: eb 25 jmp 2d3 - r = fstat(fd, st); - 2ae: 83 ec 08 sub $0x8,%esp - 2b1: ff 75 0c pushl 0xc(%ebp) - 2b4: ff 75 f4 pushl -0xc(%ebp) - 2b7: e8 03 01 00 00 call 3bf - 2bc: 83 c4 10 add $0x10,%esp - 2bf: 89 45 f0 mov %eax,-0x10(%ebp) - close(fd); - 2c2: 83 ec 0c sub $0xc,%esp - 2c5: ff 75 f4 pushl -0xc(%ebp) - 2c8: e8 c2 00 00 00 call 38f - 2cd: 83 c4 10 add $0x10,%esp - return r; - 2d0: 8b 45 f0 mov -0x10(%ebp),%eax -} - 2d3: c9 leave - 2d4: c3 ret - -000002d5 : - -int -atoi(const char *s) -{ - 2d5: 55 push %ebp - 2d6: 89 e5 mov %esp,%ebp - 2d8: 83 ec 10 sub $0x10,%esp - int n; - - n = 0; - 2db: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - while('0' <= *s && *s <= '9') - 2e2: eb 25 jmp 309 - n = n*10 + *s++ - '0'; - 2e4: 8b 55 fc mov -0x4(%ebp),%edx - 2e7: 89 d0 mov %edx,%eax - 2e9: c1 e0 02 shl $0x2,%eax - 2ec: 01 d0 add %edx,%eax - 2ee: 01 c0 add %eax,%eax - 2f0: 89 c1 mov %eax,%ecx - 2f2: 8b 45 08 mov 0x8(%ebp),%eax - 2f5: 8d 50 01 lea 0x1(%eax),%edx - 2f8: 89 55 08 mov %edx,0x8(%ebp) - 2fb: 0f b6 00 movzbl (%eax),%eax - 2fe: 0f be c0 movsbl %al,%eax - 301: 01 c8 add %ecx,%eax - 303: 83 e8 30 sub $0x30,%eax - 306: 89 45 fc mov %eax,-0x4(%ebp) -atoi(const char *s) -{ - int n; - - n = 0; - while('0' <= *s && *s <= '9') - 309: 8b 45 08 mov 0x8(%ebp),%eax - 30c: 0f b6 00 movzbl (%eax),%eax - 30f: 3c 2f cmp $0x2f,%al - 311: 7e 0a jle 31d - 313: 8b 45 08 mov 0x8(%ebp),%eax - 316: 0f b6 00 movzbl (%eax),%eax - 319: 3c 39 cmp $0x39,%al - 31b: 7e c7 jle 2e4 - n = n*10 + *s++ - '0'; - return n; - 31d: 8b 45 fc mov -0x4(%ebp),%eax -} - 320: c9 leave - 321: c3 ret - -00000322 : - -void* -memmove(void *vdst, void *vsrc, int n) -{ - 322: 55 push %ebp - 323: 89 e5 mov %esp,%ebp - 325: 83 ec 10 sub $0x10,%esp - char *dst, *src; - - dst = vdst; - 328: 8b 45 08 mov 0x8(%ebp),%eax - 32b: 89 45 fc mov %eax,-0x4(%ebp) - src = vsrc; - 32e: 8b 45 0c mov 0xc(%ebp),%eax - 331: 89 45 f8 mov %eax,-0x8(%ebp) - while(n-- > 0) - 334: eb 17 jmp 34d - *dst++ = *src++; - 336: 8b 45 fc mov -0x4(%ebp),%eax - 339: 8d 50 01 lea 0x1(%eax),%edx - 33c: 89 55 fc mov %edx,-0x4(%ebp) - 33f: 8b 55 f8 mov -0x8(%ebp),%edx - 342: 8d 4a 01 lea 0x1(%edx),%ecx - 345: 89 4d f8 mov %ecx,-0x8(%ebp) - 348: 0f b6 12 movzbl (%edx),%edx - 34b: 88 10 mov %dl,(%eax) -{ - char *dst, *src; - - dst = vdst; - src = vsrc; - while(n-- > 0) - 34d: 8b 45 10 mov 0x10(%ebp),%eax - 350: 8d 50 ff lea -0x1(%eax),%edx - 353: 89 55 10 mov %edx,0x10(%ebp) - 356: 85 c0 test %eax,%eax - 358: 7f dc jg 336 - *dst++ = *src++; - return vdst; - 35a: 8b 45 08 mov 0x8(%ebp),%eax -} - 35d: c9 leave - 35e: c3 ret - -0000035f : - name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 35f: b8 01 00 00 00 mov $0x1,%eax - 364: cd 40 int $0x40 - 366: c3 ret - -00000367 : -SYSCALL(exit) - 367: b8 02 00 00 00 mov $0x2,%eax - 36c: cd 40 int $0x40 - 36e: c3 ret - -0000036f : -SYSCALL(wait) - 36f: b8 03 00 00 00 mov $0x3,%eax - 374: cd 40 int $0x40 - 376: c3 ret - -00000377 : -SYSCALL(pipe) - 377: b8 04 00 00 00 mov $0x4,%eax - 37c: cd 40 int $0x40 - 37e: c3 ret - -0000037f : -SYSCALL(read) - 37f: b8 05 00 00 00 mov $0x5,%eax - 384: cd 40 int $0x40 - 386: c3 ret - -00000387 : -SYSCALL(write) - 387: b8 10 00 00 00 mov $0x10,%eax - 38c: cd 40 int $0x40 - 38e: c3 ret - -0000038f : -SYSCALL(close) - 38f: b8 15 00 00 00 mov $0x15,%eax - 394: cd 40 int $0x40 - 396: c3 ret - -00000397 : -SYSCALL(kill) - 397: b8 06 00 00 00 mov $0x6,%eax - 39c: cd 40 int $0x40 - 39e: c3 ret - -0000039f : -SYSCALL(exec) - 39f: b8 07 00 00 00 mov $0x7,%eax - 3a4: cd 40 int $0x40 - 3a6: c3 ret - -000003a7 : -SYSCALL(open) - 3a7: b8 0f 00 00 00 mov $0xf,%eax - 3ac: cd 40 int $0x40 - 3ae: c3 ret - -000003af : -SYSCALL(mknod) - 3af: b8 11 00 00 00 mov $0x11,%eax - 3b4: cd 40 int $0x40 - 3b6: c3 ret - -000003b7 : -SYSCALL(unlink) - 3b7: b8 12 00 00 00 mov $0x12,%eax - 3bc: cd 40 int $0x40 - 3be: c3 ret - -000003bf : -SYSCALL(fstat) - 3bf: b8 08 00 00 00 mov $0x8,%eax - 3c4: cd 40 int $0x40 - 3c6: c3 ret - -000003c7 : -SYSCALL(link) - 3c7: b8 13 00 00 00 mov $0x13,%eax - 3cc: cd 40 int $0x40 - 3ce: c3 ret - -000003cf : -SYSCALL(mkdir) - 3cf: b8 14 00 00 00 mov $0x14,%eax - 3d4: cd 40 int $0x40 - 3d6: c3 ret - -000003d7 : -SYSCALL(chdir) - 3d7: b8 09 00 00 00 mov $0x9,%eax - 3dc: cd 40 int $0x40 - 3de: c3 ret - -000003df : -SYSCALL(dup) - 3df: b8 0a 00 00 00 mov $0xa,%eax - 3e4: cd 40 int $0x40 - 3e6: c3 ret - -000003e7 : -SYSCALL(getpid) - 3e7: b8 0b 00 00 00 mov $0xb,%eax - 3ec: cd 40 int $0x40 - 3ee: c3 ret - -000003ef : -SYSCALL(sbrk) - 3ef: b8 0c 00 00 00 mov $0xc,%eax - 3f4: cd 40 int $0x40 - 3f6: c3 ret - -000003f7 : -SYSCALL(sleep) - 3f7: b8 0d 00 00 00 mov $0xd,%eax - 3fc: cd 40 int $0x40 - 3fe: c3 ret - -000003ff : -SYSCALL(uptime) - 3ff: b8 0e 00 00 00 mov $0xe,%eax - 404: cd 40 int $0x40 - 406: c3 ret diff --git a/xv6-public/forktest.d b/xv6-public/forktest.d deleted file mode 100755 index d31a0c2..0000000 --- a/xv6-public/forktest.d +++ /dev/null @@ -1 +0,0 @@ -forktest.o: forktest.c /usr/include/stdc-predef.h types.h stat.h user.h diff --git a/xv6-public/forktest.o b/xv6-public/forktest.o deleted file mode 100755 index 75cc2205737ca7c5038362aff23ea9814b791a7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4108 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 GcZ1 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 z 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 z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z n1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00I#Bb0YA+YF^gR diff --git a/xv6-public/fs.o b/xv6-public/fs.o deleted file mode 100755 index 725aacaf709a72874fee78454142fd1f4803091e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24804 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: -char buf[1024]; -int match(char*, char*); - -void -grep(char *pattern, int fd) -{ - 0: 55 push %ebp - 1: 89 e5 mov %esp,%ebp - 3: 83 ec 18 sub $0x18,%esp - int n, m; - char *p, *q; - - m = 0; - 6: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - while((n = read(fd, buf+m, sizeof(buf)-m-1)) > 0){ - d: e9 b8 00 00 00 jmp ca - m += n; - 12: 8b 45 ec mov -0x14(%ebp),%eax - 15: 01 45 f4 add %eax,-0xc(%ebp) - buf[m] = '\0'; - 18: 8b 45 f4 mov -0xc(%ebp),%eax - 1b: 05 40 0e 00 00 add $0xe40,%eax - 20: c6 00 00 movb $0x0,(%eax) - p = buf; - 23: c7 45 f0 40 0e 00 00 movl $0xe40,-0x10(%ebp) - while((q = strchr(p, '\n')) != 0){ - 2a: eb 4a jmp 76 - *q = 0; - 2c: 8b 45 e8 mov -0x18(%ebp),%eax - 2f: c6 00 00 movb $0x0,(%eax) - if(match(pattern, p)){ - 32: 83 ec 08 sub $0x8,%esp - 35: ff 75 f0 pushl -0x10(%ebp) - 38: ff 75 08 pushl 0x8(%ebp) - 3b: e8 9b 01 00 00 call 1db - 40: 83 c4 10 add $0x10,%esp - 43: 85 c0 test %eax,%eax - 45: 74 26 je 6d - *q = '\n'; - 47: 8b 45 e8 mov -0x18(%ebp),%eax - 4a: c6 00 0a movb $0xa,(%eax) - write(1, p, q+1 - p); - 4d: 8b 45 e8 mov -0x18(%ebp),%eax - 50: 83 c0 01 add $0x1,%eax - 53: 89 c2 mov %eax,%edx - 55: 8b 45 f0 mov -0x10(%ebp),%eax - 58: 29 c2 sub %eax,%edx - 5a: 89 d0 mov %edx,%eax - 5c: 83 ec 04 sub $0x4,%esp - 5f: 50 push %eax - 60: ff 75 f0 pushl -0x10(%ebp) - 63: 6a 01 push $0x1 - 65: e8 42 05 00 00 call 5ac - 6a: 83 c4 10 add $0x10,%esp - } - p = q+1; - 6d: 8b 45 e8 mov -0x18(%ebp),%eax - 70: 83 c0 01 add $0x1,%eax - 73: 89 45 f0 mov %eax,-0x10(%ebp) - m = 0; - while((n = read(fd, buf+m, sizeof(buf)-m-1)) > 0){ - m += n; - buf[m] = '\0'; - p = buf; - while((q = strchr(p, '\n')) != 0){ - 76: 83 ec 08 sub $0x8,%esp - 79: 6a 0a push $0xa - 7b: ff 75 f0 pushl -0x10(%ebp) - 7e: e8 89 03 00 00 call 40c - 83: 83 c4 10 add $0x10,%esp - 86: 89 45 e8 mov %eax,-0x18(%ebp) - 89: 83 7d e8 00 cmpl $0x0,-0x18(%ebp) - 8d: 75 9d jne 2c - *q = '\n'; - write(1, p, q+1 - p); - } - p = q+1; - } - if(p == buf) - 8f: 81 7d f0 40 0e 00 00 cmpl $0xe40,-0x10(%ebp) - 96: 75 07 jne 9f - m = 0; - 98: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - if(m > 0){ - 9f: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - a3: 7e 25 jle ca - m -= p - buf; - a5: ba 40 0e 00 00 mov $0xe40,%edx - aa: 8b 45 f0 mov -0x10(%ebp),%eax - ad: 29 c2 sub %eax,%edx - af: 89 d0 mov %edx,%eax - b1: 01 45 f4 add %eax,-0xc(%ebp) - memmove(buf, p, m); - b4: 83 ec 04 sub $0x4,%esp - b7: ff 75 f4 pushl -0xc(%ebp) - ba: ff 75 f0 pushl -0x10(%ebp) - bd: 68 40 0e 00 00 push $0xe40 - c2: e8 80 04 00 00 call 547 - c7: 83 c4 10 add $0x10,%esp -{ - int n, m; - char *p, *q; - - m = 0; - while((n = read(fd, buf+m, sizeof(buf)-m-1)) > 0){ - ca: 8b 45 f4 mov -0xc(%ebp),%eax - cd: ba ff 03 00 00 mov $0x3ff,%edx - d2: 29 c2 sub %eax,%edx - d4: 89 d0 mov %edx,%eax - d6: 89 c2 mov %eax,%edx - d8: 8b 45 f4 mov -0xc(%ebp),%eax - db: 05 40 0e 00 00 add $0xe40,%eax - e0: 83 ec 04 sub $0x4,%esp - e3: 52 push %edx - e4: 50 push %eax - e5: ff 75 0c pushl 0xc(%ebp) - e8: e8 b7 04 00 00 call 5a4 - ed: 83 c4 10 add $0x10,%esp - f0: 89 45 ec mov %eax,-0x14(%ebp) - f3: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - f7: 0f 8f 15 ff ff ff jg 12 - if(m > 0){ - m -= p - buf; - memmove(buf, p, m); - } - } -} - fd: c9 leave - fe: c3 ret - -000000ff

: - -int -main(int argc, char *argv[]) -{ - ff: 8d 4c 24 04 lea 0x4(%esp),%ecx - 103: 83 e4 f0 and $0xfffffff0,%esp - 106: ff 71 fc pushl -0x4(%ecx) - 109: 55 push %ebp - 10a: 89 e5 mov %esp,%ebp - 10c: 53 push %ebx - 10d: 51 push %ecx - 10e: 83 ec 10 sub $0x10,%esp - 111: 89 cb mov %ecx,%ebx - int fd, i; - char *pattern; - - if(argc <= 1){ - 113: 83 3b 01 cmpl $0x1,(%ebx) - 116: 7f 17 jg 12f - printf(2, "usage: grep pattern [file ...]\n"); - 118: 83 ec 08 sub $0x8,%esp - 11b: 68 b8 0a 00 00 push $0xab8 - 120: 6a 02 push $0x2 - 122: e8 da 05 00 00 call 701 - 127: 83 c4 10 add $0x10,%esp - exit(); - 12a: e8 5d 04 00 00 call 58c - } - pattern = argv[1]; - 12f: 8b 43 04 mov 0x4(%ebx),%eax - 132: 8b 40 04 mov 0x4(%eax),%eax - 135: 89 45 f0 mov %eax,-0x10(%ebp) - - if(argc <= 2){ - 138: 83 3b 02 cmpl $0x2,(%ebx) - 13b: 7f 15 jg 152 - grep(pattern, 0); - 13d: 83 ec 08 sub $0x8,%esp - 140: 6a 00 push $0x0 - 142: ff 75 f0 pushl -0x10(%ebp) - 145: e8 b6 fe ff ff call 0 - 14a: 83 c4 10 add $0x10,%esp - exit(); - 14d: e8 3a 04 00 00 call 58c - } - - for(i = 2; i < argc; i++){ - 152: c7 45 f4 02 00 00 00 movl $0x2,-0xc(%ebp) - 159: eb 74 jmp 1cf - if((fd = open(argv[i], 0)) < 0){ - 15b: 8b 45 f4 mov -0xc(%ebp),%eax - 15e: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx - 165: 8b 43 04 mov 0x4(%ebx),%eax - 168: 01 d0 add %edx,%eax - 16a: 8b 00 mov (%eax),%eax - 16c: 83 ec 08 sub $0x8,%esp - 16f: 6a 00 push $0x0 - 171: 50 push %eax - 172: e8 55 04 00 00 call 5cc - 177: 83 c4 10 add $0x10,%esp - 17a: 89 45 ec mov %eax,-0x14(%ebp) - 17d: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 181: 79 29 jns 1ac - printf(1, "grep: cannot open %s\n", argv[i]); - 183: 8b 45 f4 mov -0xc(%ebp),%eax - 186: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx - 18d: 8b 43 04 mov 0x4(%ebx),%eax - 190: 01 d0 add %edx,%eax - 192: 8b 00 mov (%eax),%eax - 194: 83 ec 04 sub $0x4,%esp - 197: 50 push %eax - 198: 68 d8 0a 00 00 push $0xad8 - 19d: 6a 01 push $0x1 - 19f: e8 5d 05 00 00 call 701 - 1a4: 83 c4 10 add $0x10,%esp - exit(); - 1a7: e8 e0 03 00 00 call 58c - } - grep(pattern, fd); - 1ac: 83 ec 08 sub $0x8,%esp - 1af: ff 75 ec pushl -0x14(%ebp) - 1b2: ff 75 f0 pushl -0x10(%ebp) - 1b5: e8 46 fe ff ff call 0 - 1ba: 83 c4 10 add $0x10,%esp - close(fd); - 1bd: 83 ec 0c sub $0xc,%esp - 1c0: ff 75 ec pushl -0x14(%ebp) - 1c3: e8 ec 03 00 00 call 5b4 - 1c8: 83 c4 10 add $0x10,%esp - if(argc <= 2){ - grep(pattern, 0); - exit(); - } - - for(i = 2; i < argc; i++){ - 1cb: 83 45 f4 01 addl $0x1,-0xc(%ebp) - 1cf: 8b 45 f4 mov -0xc(%ebp),%eax - 1d2: 3b 03 cmp (%ebx),%eax - 1d4: 7c 85 jl 15b - exit(); - } - grep(pattern, fd); - close(fd); - } - exit(); - 1d6: e8 b1 03 00 00 call 58c - -000001db : -int matchhere(char*, char*); -int matchstar(int, char*, char*); - -int -match(char *re, char *text) -{ - 1db: 55 push %ebp - 1dc: 89 e5 mov %esp,%ebp - 1de: 83 ec 08 sub $0x8,%esp - if(re[0] == '^') - 1e1: 8b 45 08 mov 0x8(%ebp),%eax - 1e4: 0f b6 00 movzbl (%eax),%eax - 1e7: 3c 5e cmp $0x5e,%al - 1e9: 75 17 jne 202 - return matchhere(re+1, text); - 1eb: 8b 45 08 mov 0x8(%ebp),%eax - 1ee: 83 c0 01 add $0x1,%eax - 1f1: 83 ec 08 sub $0x8,%esp - 1f4: ff 75 0c pushl 0xc(%ebp) - 1f7: 50 push %eax - 1f8: e8 38 00 00 00 call 235 - 1fd: 83 c4 10 add $0x10,%esp - 200: eb 31 jmp 233 - do{ // must look at empty string - if(matchhere(re, text)) - 202: 83 ec 08 sub $0x8,%esp - 205: ff 75 0c pushl 0xc(%ebp) - 208: ff 75 08 pushl 0x8(%ebp) - 20b: e8 25 00 00 00 call 235 - 210: 83 c4 10 add $0x10,%esp - 213: 85 c0 test %eax,%eax - 215: 74 07 je 21e - return 1; - 217: b8 01 00 00 00 mov $0x1,%eax - 21c: eb 15 jmp 233 - }while(*text++ != '\0'); - 21e: 8b 45 0c mov 0xc(%ebp),%eax - 221: 8d 50 01 lea 0x1(%eax),%edx - 224: 89 55 0c mov %edx,0xc(%ebp) - 227: 0f b6 00 movzbl (%eax),%eax - 22a: 84 c0 test %al,%al - 22c: 75 d4 jne 202 - return 0; - 22e: b8 00 00 00 00 mov $0x0,%eax -} - 233: c9 leave - 234: c3 ret - -00000235 : - -// matchhere: search for re at beginning of text -int matchhere(char *re, char *text) -{ - 235: 55 push %ebp - 236: 89 e5 mov %esp,%ebp - 238: 83 ec 08 sub $0x8,%esp - if(re[0] == '\0') - 23b: 8b 45 08 mov 0x8(%ebp),%eax - 23e: 0f b6 00 movzbl (%eax),%eax - 241: 84 c0 test %al,%al - 243: 75 0a jne 24f - return 1; - 245: b8 01 00 00 00 mov $0x1,%eax - 24a: e9 99 00 00 00 jmp 2e8 - if(re[1] == '*') - 24f: 8b 45 08 mov 0x8(%ebp),%eax - 252: 83 c0 01 add $0x1,%eax - 255: 0f b6 00 movzbl (%eax),%eax - 258: 3c 2a cmp $0x2a,%al - 25a: 75 21 jne 27d - return matchstar(re[0], re+2, text); - 25c: 8b 45 08 mov 0x8(%ebp),%eax - 25f: 8d 50 02 lea 0x2(%eax),%edx - 262: 8b 45 08 mov 0x8(%ebp),%eax - 265: 0f b6 00 movzbl (%eax),%eax - 268: 0f be c0 movsbl %al,%eax - 26b: 83 ec 04 sub $0x4,%esp - 26e: ff 75 0c pushl 0xc(%ebp) - 271: 52 push %edx - 272: 50 push %eax - 273: e8 72 00 00 00 call 2ea - 278: 83 c4 10 add $0x10,%esp - 27b: eb 6b jmp 2e8 - if(re[0] == '$' && re[1] == '\0') - 27d: 8b 45 08 mov 0x8(%ebp),%eax - 280: 0f b6 00 movzbl (%eax),%eax - 283: 3c 24 cmp $0x24,%al - 285: 75 1d jne 2a4 - 287: 8b 45 08 mov 0x8(%ebp),%eax - 28a: 83 c0 01 add $0x1,%eax - 28d: 0f b6 00 movzbl (%eax),%eax - 290: 84 c0 test %al,%al - 292: 75 10 jne 2a4 - return *text == '\0'; - 294: 8b 45 0c mov 0xc(%ebp),%eax - 297: 0f b6 00 movzbl (%eax),%eax - 29a: 84 c0 test %al,%al - 29c: 0f 94 c0 sete %al - 29f: 0f b6 c0 movzbl %al,%eax - 2a2: eb 44 jmp 2e8 - if(*text!='\0' && (re[0]=='.' || re[0]==*text)) - 2a4: 8b 45 0c mov 0xc(%ebp),%eax - 2a7: 0f b6 00 movzbl (%eax),%eax - 2aa: 84 c0 test %al,%al - 2ac: 74 35 je 2e3 - 2ae: 8b 45 08 mov 0x8(%ebp),%eax - 2b1: 0f b6 00 movzbl (%eax),%eax - 2b4: 3c 2e cmp $0x2e,%al - 2b6: 74 10 je 2c8 - 2b8: 8b 45 08 mov 0x8(%ebp),%eax - 2bb: 0f b6 10 movzbl (%eax),%edx - 2be: 8b 45 0c mov 0xc(%ebp),%eax - 2c1: 0f b6 00 movzbl (%eax),%eax - 2c4: 38 c2 cmp %al,%dl - 2c6: 75 1b jne 2e3 - return matchhere(re+1, text+1); - 2c8: 8b 45 0c mov 0xc(%ebp),%eax - 2cb: 8d 50 01 lea 0x1(%eax),%edx - 2ce: 8b 45 08 mov 0x8(%ebp),%eax - 2d1: 83 c0 01 add $0x1,%eax - 2d4: 83 ec 08 sub $0x8,%esp - 2d7: 52 push %edx - 2d8: 50 push %eax - 2d9: e8 57 ff ff ff call 235 - 2de: 83 c4 10 add $0x10,%esp - 2e1: eb 05 jmp 2e8 - return 0; - 2e3: b8 00 00 00 00 mov $0x0,%eax -} - 2e8: c9 leave - 2e9: c3 ret - -000002ea : - -// matchstar: search for c*re at beginning of text -int matchstar(int c, char *re, char *text) -{ - 2ea: 55 push %ebp - 2eb: 89 e5 mov %esp,%ebp - 2ed: 83 ec 08 sub $0x8,%esp - do{ // a * matches zero or more instances - if(matchhere(re, text)) - 2f0: 83 ec 08 sub $0x8,%esp - 2f3: ff 75 10 pushl 0x10(%ebp) - 2f6: ff 75 0c pushl 0xc(%ebp) - 2f9: e8 37 ff ff ff call 235 - 2fe: 83 c4 10 add $0x10,%esp - 301: 85 c0 test %eax,%eax - 303: 74 07 je 30c - return 1; - 305: b8 01 00 00 00 mov $0x1,%eax - 30a: eb 29 jmp 335 - }while(*text!='\0' && (*text++==c || c=='.')); - 30c: 8b 45 10 mov 0x10(%ebp),%eax - 30f: 0f b6 00 movzbl (%eax),%eax - 312: 84 c0 test %al,%al - 314: 74 1a je 330 - 316: 8b 45 10 mov 0x10(%ebp),%eax - 319: 8d 50 01 lea 0x1(%eax),%edx - 31c: 89 55 10 mov %edx,0x10(%ebp) - 31f: 0f b6 00 movzbl (%eax),%eax - 322: 0f be c0 movsbl %al,%eax - 325: 3b 45 08 cmp 0x8(%ebp),%eax - 328: 74 c6 je 2f0 - 32a: 83 7d 08 2e cmpl $0x2e,0x8(%ebp) - 32e: 74 c0 je 2f0 - return 0; - 330: b8 00 00 00 00 mov $0x0,%eax -} - 335: c9 leave - 336: c3 ret - -00000337 : - "cc"); -} - -static inline void -stosb(void *addr, int data, int cnt) -{ - 337: 55 push %ebp - 338: 89 e5 mov %esp,%ebp - 33a: 57 push %edi - 33b: 53 push %ebx - asm volatile("cld; rep stosb" : - 33c: 8b 4d 08 mov 0x8(%ebp),%ecx - 33f: 8b 55 10 mov 0x10(%ebp),%edx - 342: 8b 45 0c mov 0xc(%ebp),%eax - 345: 89 cb mov %ecx,%ebx - 347: 89 df mov %ebx,%edi - 349: 89 d1 mov %edx,%ecx - 34b: fc cld - 34c: f3 aa rep stos %al,%es:(%edi) - 34e: 89 ca mov %ecx,%edx - 350: 89 fb mov %edi,%ebx - 352: 89 5d 08 mov %ebx,0x8(%ebp) - 355: 89 55 10 mov %edx,0x10(%ebp) - "=D" (addr), "=c" (cnt) : - "0" (addr), "1" (cnt), "a" (data) : - "memory", "cc"); -} - 358: 5b pop %ebx - 359: 5f pop %edi - 35a: 5d pop %ebp - 35b: c3 ret - -0000035c : -#include "user.h" -#include "x86.h" - -char* -strcpy(char *s, char *t) -{ - 35c: 55 push %ebp - 35d: 89 e5 mov %esp,%ebp - 35f: 83 ec 10 sub $0x10,%esp - char *os; - - os = s; - 362: 8b 45 08 mov 0x8(%ebp),%eax - 365: 89 45 fc mov %eax,-0x4(%ebp) - while((*s++ = *t++) != 0) - 368: 90 nop - 369: 8b 45 08 mov 0x8(%ebp),%eax - 36c: 8d 50 01 lea 0x1(%eax),%edx - 36f: 89 55 08 mov %edx,0x8(%ebp) - 372: 8b 55 0c mov 0xc(%ebp),%edx - 375: 8d 4a 01 lea 0x1(%edx),%ecx - 378: 89 4d 0c mov %ecx,0xc(%ebp) - 37b: 0f b6 12 movzbl (%edx),%edx - 37e: 88 10 mov %dl,(%eax) - 380: 0f b6 00 movzbl (%eax),%eax - 383: 84 c0 test %al,%al - 385: 75 e2 jne 369 - ; - return os; - 387: 8b 45 fc mov -0x4(%ebp),%eax -} - 38a: c9 leave - 38b: c3 ret - -0000038c : - -int -strcmp(const char *p, const char *q) -{ - 38c: 55 push %ebp - 38d: 89 e5 mov %esp,%ebp - while(*p && *p == *q) - 38f: eb 08 jmp 399 - p++, q++; - 391: 83 45 08 01 addl $0x1,0x8(%ebp) - 395: 83 45 0c 01 addl $0x1,0xc(%ebp) -} - -int -strcmp(const char *p, const char *q) -{ - while(*p && *p == *q) - 399: 8b 45 08 mov 0x8(%ebp),%eax - 39c: 0f b6 00 movzbl (%eax),%eax - 39f: 84 c0 test %al,%al - 3a1: 74 10 je 3b3 - 3a3: 8b 45 08 mov 0x8(%ebp),%eax - 3a6: 0f b6 10 movzbl (%eax),%edx - 3a9: 8b 45 0c mov 0xc(%ebp),%eax - 3ac: 0f b6 00 movzbl (%eax),%eax - 3af: 38 c2 cmp %al,%dl - 3b1: 74 de je 391 - p++, q++; - return (uchar)*p - (uchar)*q; - 3b3: 8b 45 08 mov 0x8(%ebp),%eax - 3b6: 0f b6 00 movzbl (%eax),%eax - 3b9: 0f b6 d0 movzbl %al,%edx - 3bc: 8b 45 0c mov 0xc(%ebp),%eax - 3bf: 0f b6 00 movzbl (%eax),%eax - 3c2: 0f b6 c0 movzbl %al,%eax - 3c5: 29 c2 sub %eax,%edx - 3c7: 89 d0 mov %edx,%eax -} - 3c9: 5d pop %ebp - 3ca: c3 ret - -000003cb : - -uint -strlen(char *s) -{ - 3cb: 55 push %ebp - 3cc: 89 e5 mov %esp,%ebp - 3ce: 83 ec 10 sub $0x10,%esp - int n; - - for(n = 0; s[n]; n++) - 3d1: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - 3d8: eb 04 jmp 3de - 3da: 83 45 fc 01 addl $0x1,-0x4(%ebp) - 3de: 8b 55 fc mov -0x4(%ebp),%edx - 3e1: 8b 45 08 mov 0x8(%ebp),%eax - 3e4: 01 d0 add %edx,%eax - 3e6: 0f b6 00 movzbl (%eax),%eax - 3e9: 84 c0 test %al,%al - 3eb: 75 ed jne 3da - ; - return n; - 3ed: 8b 45 fc mov -0x4(%ebp),%eax -} - 3f0: c9 leave - 3f1: c3 ret - -000003f2 : - -void* -memset(void *dst, int c, uint n) -{ - 3f2: 55 push %ebp - 3f3: 89 e5 mov %esp,%ebp - stosb(dst, c, n); - 3f5: 8b 45 10 mov 0x10(%ebp),%eax - 3f8: 50 push %eax - 3f9: ff 75 0c pushl 0xc(%ebp) - 3fc: ff 75 08 pushl 0x8(%ebp) - 3ff: e8 33 ff ff ff call 337 - 404: 83 c4 0c add $0xc,%esp - return dst; - 407: 8b 45 08 mov 0x8(%ebp),%eax -} - 40a: c9 leave - 40b: c3 ret - -0000040c : - -char* -strchr(const char *s, char c) -{ - 40c: 55 push %ebp - 40d: 89 e5 mov %esp,%ebp - 40f: 83 ec 04 sub $0x4,%esp - 412: 8b 45 0c mov 0xc(%ebp),%eax - 415: 88 45 fc mov %al,-0x4(%ebp) - for(; *s; s++) - 418: eb 14 jmp 42e - if(*s == c) - 41a: 8b 45 08 mov 0x8(%ebp),%eax - 41d: 0f b6 00 movzbl (%eax),%eax - 420: 3a 45 fc cmp -0x4(%ebp),%al - 423: 75 05 jne 42a - return (char*)s; - 425: 8b 45 08 mov 0x8(%ebp),%eax - 428: eb 13 jmp 43d -} - -char* -strchr(const char *s, char c) -{ - for(; *s; s++) - 42a: 83 45 08 01 addl $0x1,0x8(%ebp) - 42e: 8b 45 08 mov 0x8(%ebp),%eax - 431: 0f b6 00 movzbl (%eax),%eax - 434: 84 c0 test %al,%al - 436: 75 e2 jne 41a - if(*s == c) - return (char*)s; - return 0; - 438: b8 00 00 00 00 mov $0x0,%eax -} - 43d: c9 leave - 43e: c3 ret - -0000043f : - -char* -gets(char *buf, int max) -{ - 43f: 55 push %ebp - 440: 89 e5 mov %esp,%ebp - 442: 83 ec 18 sub $0x18,%esp - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - 445: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 44c: eb 44 jmp 492 - cc = read(0, &c, 1); - 44e: 83 ec 04 sub $0x4,%esp - 451: 6a 01 push $0x1 - 453: 8d 45 ef lea -0x11(%ebp),%eax - 456: 50 push %eax - 457: 6a 00 push $0x0 - 459: e8 46 01 00 00 call 5a4 - 45e: 83 c4 10 add $0x10,%esp - 461: 89 45 f0 mov %eax,-0x10(%ebp) - if(cc < 1) - 464: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 468: 7f 02 jg 46c - break; - 46a: eb 31 jmp 49d - buf[i++] = c; - 46c: 8b 45 f4 mov -0xc(%ebp),%eax - 46f: 8d 50 01 lea 0x1(%eax),%edx - 472: 89 55 f4 mov %edx,-0xc(%ebp) - 475: 89 c2 mov %eax,%edx - 477: 8b 45 08 mov 0x8(%ebp),%eax - 47a: 01 c2 add %eax,%edx - 47c: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 480: 88 02 mov %al,(%edx) - if(c == '\n' || c == '\r') - 482: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 486: 3c 0a cmp $0xa,%al - 488: 74 13 je 49d - 48a: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 48e: 3c 0d cmp $0xd,%al - 490: 74 0b je 49d -gets(char *buf, int max) -{ - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - 492: 8b 45 f4 mov -0xc(%ebp),%eax - 495: 83 c0 01 add $0x1,%eax - 498: 3b 45 0c cmp 0xc(%ebp),%eax - 49b: 7c b1 jl 44e - break; - buf[i++] = c; - if(c == '\n' || c == '\r') - break; - } - buf[i] = '\0'; - 49d: 8b 55 f4 mov -0xc(%ebp),%edx - 4a0: 8b 45 08 mov 0x8(%ebp),%eax - 4a3: 01 d0 add %edx,%eax - 4a5: c6 00 00 movb $0x0,(%eax) - return buf; - 4a8: 8b 45 08 mov 0x8(%ebp),%eax -} - 4ab: c9 leave - 4ac: c3 ret - -000004ad : - -int -stat(char *n, struct stat *st) -{ - 4ad: 55 push %ebp - 4ae: 89 e5 mov %esp,%ebp - 4b0: 83 ec 18 sub $0x18,%esp - int fd; - int r; - - fd = open(n, O_RDONLY); - 4b3: 83 ec 08 sub $0x8,%esp - 4b6: 6a 00 push $0x0 - 4b8: ff 75 08 pushl 0x8(%ebp) - 4bb: e8 0c 01 00 00 call 5cc - 4c0: 83 c4 10 add $0x10,%esp - 4c3: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd < 0) - 4c6: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 4ca: 79 07 jns 4d3 - return -1; - 4cc: b8 ff ff ff ff mov $0xffffffff,%eax - 4d1: eb 25 jmp 4f8 - r = fstat(fd, st); - 4d3: 83 ec 08 sub $0x8,%esp - 4d6: ff 75 0c pushl 0xc(%ebp) - 4d9: ff 75 f4 pushl -0xc(%ebp) - 4dc: e8 03 01 00 00 call 5e4 - 4e1: 83 c4 10 add $0x10,%esp - 4e4: 89 45 f0 mov %eax,-0x10(%ebp) - close(fd); - 4e7: 83 ec 0c sub $0xc,%esp - 4ea: ff 75 f4 pushl -0xc(%ebp) - 4ed: e8 c2 00 00 00 call 5b4 - 4f2: 83 c4 10 add $0x10,%esp - return r; - 4f5: 8b 45 f0 mov -0x10(%ebp),%eax -} - 4f8: c9 leave - 4f9: c3 ret - -000004fa : - -int -atoi(const char *s) -{ - 4fa: 55 push %ebp - 4fb: 89 e5 mov %esp,%ebp - 4fd: 83 ec 10 sub $0x10,%esp - int n; - - n = 0; - 500: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - while('0' <= *s && *s <= '9') - 507: eb 25 jmp 52e - n = n*10 + *s++ - '0'; - 509: 8b 55 fc mov -0x4(%ebp),%edx - 50c: 89 d0 mov %edx,%eax - 50e: c1 e0 02 shl $0x2,%eax - 511: 01 d0 add %edx,%eax - 513: 01 c0 add %eax,%eax - 515: 89 c1 mov %eax,%ecx - 517: 8b 45 08 mov 0x8(%ebp),%eax - 51a: 8d 50 01 lea 0x1(%eax),%edx - 51d: 89 55 08 mov %edx,0x8(%ebp) - 520: 0f b6 00 movzbl (%eax),%eax - 523: 0f be c0 movsbl %al,%eax - 526: 01 c8 add %ecx,%eax - 528: 83 e8 30 sub $0x30,%eax - 52b: 89 45 fc mov %eax,-0x4(%ebp) -atoi(const char *s) -{ - int n; - - n = 0; - while('0' <= *s && *s <= '9') - 52e: 8b 45 08 mov 0x8(%ebp),%eax - 531: 0f b6 00 movzbl (%eax),%eax - 534: 3c 2f cmp $0x2f,%al - 536: 7e 0a jle 542 - 538: 8b 45 08 mov 0x8(%ebp),%eax - 53b: 0f b6 00 movzbl (%eax),%eax - 53e: 3c 39 cmp $0x39,%al - 540: 7e c7 jle 509 - n = n*10 + *s++ - '0'; - return n; - 542: 8b 45 fc mov -0x4(%ebp),%eax -} - 545: c9 leave - 546: c3 ret - -00000547 : - -void* -memmove(void *vdst, void *vsrc, int n) -{ - 547: 55 push %ebp - 548: 89 e5 mov %esp,%ebp - 54a: 83 ec 10 sub $0x10,%esp - char *dst, *src; - - dst = vdst; - 54d: 8b 45 08 mov 0x8(%ebp),%eax - 550: 89 45 fc mov %eax,-0x4(%ebp) - src = vsrc; - 553: 8b 45 0c mov 0xc(%ebp),%eax - 556: 89 45 f8 mov %eax,-0x8(%ebp) - while(n-- > 0) - 559: eb 17 jmp 572 - *dst++ = *src++; - 55b: 8b 45 fc mov -0x4(%ebp),%eax - 55e: 8d 50 01 lea 0x1(%eax),%edx - 561: 89 55 fc mov %edx,-0x4(%ebp) - 564: 8b 55 f8 mov -0x8(%ebp),%edx - 567: 8d 4a 01 lea 0x1(%edx),%ecx - 56a: 89 4d f8 mov %ecx,-0x8(%ebp) - 56d: 0f b6 12 movzbl (%edx),%edx - 570: 88 10 mov %dl,(%eax) -{ - char *dst, *src; - - dst = vdst; - src = vsrc; - while(n-- > 0) - 572: 8b 45 10 mov 0x10(%ebp),%eax - 575: 8d 50 ff lea -0x1(%eax),%edx - 578: 89 55 10 mov %edx,0x10(%ebp) - 57b: 85 c0 test %eax,%eax - 57d: 7f dc jg 55b - *dst++ = *src++; - return vdst; - 57f: 8b 45 08 mov 0x8(%ebp),%eax -} - 582: c9 leave - 583: c3 ret - -00000584 : - name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 584: b8 01 00 00 00 mov $0x1,%eax - 589: cd 40 int $0x40 - 58b: c3 ret - -0000058c : -SYSCALL(exit) - 58c: b8 02 00 00 00 mov $0x2,%eax - 591: cd 40 int $0x40 - 593: c3 ret - -00000594 : -SYSCALL(wait) - 594: b8 03 00 00 00 mov $0x3,%eax - 599: cd 40 int $0x40 - 59b: c3 ret - -0000059c : -SYSCALL(pipe) - 59c: b8 04 00 00 00 mov $0x4,%eax - 5a1: cd 40 int $0x40 - 5a3: c3 ret - -000005a4 : -SYSCALL(read) - 5a4: b8 05 00 00 00 mov $0x5,%eax - 5a9: cd 40 int $0x40 - 5ab: c3 ret - -000005ac : -SYSCALL(write) - 5ac: b8 10 00 00 00 mov $0x10,%eax - 5b1: cd 40 int $0x40 - 5b3: c3 ret - -000005b4 : -SYSCALL(close) - 5b4: b8 15 00 00 00 mov $0x15,%eax - 5b9: cd 40 int $0x40 - 5bb: c3 ret - -000005bc : -SYSCALL(kill) - 5bc: b8 06 00 00 00 mov $0x6,%eax - 5c1: cd 40 int $0x40 - 5c3: c3 ret - -000005c4 : -SYSCALL(exec) - 5c4: b8 07 00 00 00 mov $0x7,%eax - 5c9: cd 40 int $0x40 - 5cb: c3 ret - -000005cc : -SYSCALL(open) - 5cc: b8 0f 00 00 00 mov $0xf,%eax - 5d1: cd 40 int $0x40 - 5d3: c3 ret - -000005d4 : -SYSCALL(mknod) - 5d4: b8 11 00 00 00 mov $0x11,%eax - 5d9: cd 40 int $0x40 - 5db: c3 ret - -000005dc : -SYSCALL(unlink) - 5dc: b8 12 00 00 00 mov $0x12,%eax - 5e1: cd 40 int $0x40 - 5e3: c3 ret - -000005e4 : -SYSCALL(fstat) - 5e4: b8 08 00 00 00 mov $0x8,%eax - 5e9: cd 40 int $0x40 - 5eb: c3 ret - -000005ec : -SYSCALL(link) - 5ec: b8 13 00 00 00 mov $0x13,%eax - 5f1: cd 40 int $0x40 - 5f3: c3 ret - -000005f4 : -SYSCALL(mkdir) - 5f4: b8 14 00 00 00 mov $0x14,%eax - 5f9: cd 40 int $0x40 - 5fb: c3 ret - -000005fc : -SYSCALL(chdir) - 5fc: b8 09 00 00 00 mov $0x9,%eax - 601: cd 40 int $0x40 - 603: c3 ret - -00000604 : -SYSCALL(dup) - 604: b8 0a 00 00 00 mov $0xa,%eax - 609: cd 40 int $0x40 - 60b: c3 ret - -0000060c : -SYSCALL(getpid) - 60c: b8 0b 00 00 00 mov $0xb,%eax - 611: cd 40 int $0x40 - 613: c3 ret - -00000614 : -SYSCALL(sbrk) - 614: b8 0c 00 00 00 mov $0xc,%eax - 619: cd 40 int $0x40 - 61b: c3 ret - -0000061c : -SYSCALL(sleep) - 61c: b8 0d 00 00 00 mov $0xd,%eax - 621: cd 40 int $0x40 - 623: c3 ret - -00000624 : -SYSCALL(uptime) - 624: b8 0e 00 00 00 mov $0xe,%eax - 629: cd 40 int $0x40 - 62b: c3 ret - -0000062c : -#include "stat.h" -#include "user.h" - -static void -putc(int fd, char c) -{ - 62c: 55 push %ebp - 62d: 89 e5 mov %esp,%ebp - 62f: 83 ec 18 sub $0x18,%esp - 632: 8b 45 0c mov 0xc(%ebp),%eax - 635: 88 45 f4 mov %al,-0xc(%ebp) - write(fd, &c, 1); - 638: 83 ec 04 sub $0x4,%esp - 63b: 6a 01 push $0x1 - 63d: 8d 45 f4 lea -0xc(%ebp),%eax - 640: 50 push %eax - 641: ff 75 08 pushl 0x8(%ebp) - 644: e8 63 ff ff ff call 5ac - 649: 83 c4 10 add $0x10,%esp -} - 64c: c9 leave - 64d: c3 ret - -0000064e : - -static void -printint(int fd, int xx, int base, int sgn) -{ - 64e: 55 push %ebp - 64f: 89 e5 mov %esp,%ebp - 651: 53 push %ebx - 652: 83 ec 24 sub $0x24,%esp - static char digits[] = "0123456789ABCDEF"; - char buf[16]; - int i, neg; - uint x; - - neg = 0; - 655: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - if(sgn && xx < 0){ - 65c: 83 7d 14 00 cmpl $0x0,0x14(%ebp) - 660: 74 17 je 679 - 662: 83 7d 0c 00 cmpl $0x0,0xc(%ebp) - 666: 79 11 jns 679 - neg = 1; - 668: c7 45 f0 01 00 00 00 movl $0x1,-0x10(%ebp) - x = -xx; - 66f: 8b 45 0c mov 0xc(%ebp),%eax - 672: f7 d8 neg %eax - 674: 89 45 ec mov %eax,-0x14(%ebp) - 677: eb 06 jmp 67f - } else { - x = xx; - 679: 8b 45 0c mov 0xc(%ebp),%eax - 67c: 89 45 ec mov %eax,-0x14(%ebp) - } - - i = 0; - 67f: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - do{ - buf[i++] = digits[x % base]; - 686: 8b 4d f4 mov -0xc(%ebp),%ecx - 689: 8d 41 01 lea 0x1(%ecx),%eax - 68c: 89 45 f4 mov %eax,-0xc(%ebp) - 68f: 8b 5d 10 mov 0x10(%ebp),%ebx - 692: 8b 45 ec mov -0x14(%ebp),%eax - 695: ba 00 00 00 00 mov $0x0,%edx - 69a: f7 f3 div %ebx - 69c: 89 d0 mov %edx,%eax - 69e: 0f b6 80 c4 0d 00 00 movzbl 0xdc4(%eax),%eax - 6a5: 88 44 0d dc mov %al,-0x24(%ebp,%ecx,1) - }while((x /= base) != 0); - 6a9: 8b 5d 10 mov 0x10(%ebp),%ebx - 6ac: 8b 45 ec mov -0x14(%ebp),%eax - 6af: ba 00 00 00 00 mov $0x0,%edx - 6b4: f7 f3 div %ebx - 6b6: 89 45 ec mov %eax,-0x14(%ebp) - 6b9: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 6bd: 75 c7 jne 686 - if(neg) - 6bf: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 6c3: 74 0e je 6d3 - buf[i++] = '-'; - 6c5: 8b 45 f4 mov -0xc(%ebp),%eax - 6c8: 8d 50 01 lea 0x1(%eax),%edx - 6cb: 89 55 f4 mov %edx,-0xc(%ebp) - 6ce: c6 44 05 dc 2d movb $0x2d,-0x24(%ebp,%eax,1) - - while(--i >= 0) - 6d3: eb 1d jmp 6f2 - putc(fd, buf[i]); - 6d5: 8d 55 dc lea -0x24(%ebp),%edx - 6d8: 8b 45 f4 mov -0xc(%ebp),%eax - 6db: 01 d0 add %edx,%eax - 6dd: 0f b6 00 movzbl (%eax),%eax - 6e0: 0f be c0 movsbl %al,%eax - 6e3: 83 ec 08 sub $0x8,%esp - 6e6: 50 push %eax - 6e7: ff 75 08 pushl 0x8(%ebp) - 6ea: e8 3d ff ff ff call 62c - 6ef: 83 c4 10 add $0x10,%esp - buf[i++] = digits[x % base]; - }while((x /= base) != 0); - if(neg) - buf[i++] = '-'; - - while(--i >= 0) - 6f2: 83 6d f4 01 subl $0x1,-0xc(%ebp) - 6f6: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 6fa: 79 d9 jns 6d5 - putc(fd, buf[i]); -} - 6fc: 8b 5d fc mov -0x4(%ebp),%ebx - 6ff: c9 leave - 700: c3 ret - -00000701 : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void -printf(int fd, char *fmt, ...) -{ - 701: 55 push %ebp - 702: 89 e5 mov %esp,%ebp - 704: 83 ec 28 sub $0x28,%esp - char *s; - int c, i, state; - uint *ap; - - state = 0; - 707: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - ap = (uint*)(void*)&fmt + 1; - 70e: 8d 45 0c lea 0xc(%ebp),%eax - 711: 83 c0 04 add $0x4,%eax - 714: 89 45 e8 mov %eax,-0x18(%ebp) - for(i = 0; fmt[i]; i++){ - 717: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - 71e: e9 59 01 00 00 jmp 87c - c = fmt[i] & 0xff; - 723: 8b 55 0c mov 0xc(%ebp),%edx - 726: 8b 45 f0 mov -0x10(%ebp),%eax - 729: 01 d0 add %edx,%eax - 72b: 0f b6 00 movzbl (%eax),%eax - 72e: 0f be c0 movsbl %al,%eax - 731: 25 ff 00 00 00 and $0xff,%eax - 736: 89 45 e4 mov %eax,-0x1c(%ebp) - if(state == 0){ - 739: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 73d: 75 2c jne 76b - if(c == '%'){ - 73f: 83 7d e4 25 cmpl $0x25,-0x1c(%ebp) - 743: 75 0c jne 751 - state = '%'; - 745: c7 45 ec 25 00 00 00 movl $0x25,-0x14(%ebp) - 74c: e9 27 01 00 00 jmp 878 - } else { - putc(fd, c); - 751: 8b 45 e4 mov -0x1c(%ebp),%eax - 754: 0f be c0 movsbl %al,%eax - 757: 83 ec 08 sub $0x8,%esp - 75a: 50 push %eax - 75b: ff 75 08 pushl 0x8(%ebp) - 75e: e8 c9 fe ff ff call 62c - 763: 83 c4 10 add $0x10,%esp - 766: e9 0d 01 00 00 jmp 878 - } - } else if(state == '%'){ - 76b: 83 7d ec 25 cmpl $0x25,-0x14(%ebp) - 76f: 0f 85 03 01 00 00 jne 878 - if(c == 'd'){ - 775: 83 7d e4 64 cmpl $0x64,-0x1c(%ebp) - 779: 75 1e jne 799 - printint(fd, *ap, 10, 1); - 77b: 8b 45 e8 mov -0x18(%ebp),%eax - 77e: 8b 00 mov (%eax),%eax - 780: 6a 01 push $0x1 - 782: 6a 0a push $0xa - 784: 50 push %eax - 785: ff 75 08 pushl 0x8(%ebp) - 788: e8 c1 fe ff ff call 64e - 78d: 83 c4 10 add $0x10,%esp - ap++; - 790: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 794: e9 d8 00 00 00 jmp 871 - } else if(c == 'x' || c == 'p'){ - 799: 83 7d e4 78 cmpl $0x78,-0x1c(%ebp) - 79d: 74 06 je 7a5 - 79f: 83 7d e4 70 cmpl $0x70,-0x1c(%ebp) - 7a3: 75 1e jne 7c3 - printint(fd, *ap, 16, 0); - 7a5: 8b 45 e8 mov -0x18(%ebp),%eax - 7a8: 8b 00 mov (%eax),%eax - 7aa: 6a 00 push $0x0 - 7ac: 6a 10 push $0x10 - 7ae: 50 push %eax - 7af: ff 75 08 pushl 0x8(%ebp) - 7b2: e8 97 fe ff ff call 64e - 7b7: 83 c4 10 add $0x10,%esp - ap++; - 7ba: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 7be: e9 ae 00 00 00 jmp 871 - } else if(c == 's'){ - 7c3: 83 7d e4 73 cmpl $0x73,-0x1c(%ebp) - 7c7: 75 43 jne 80c - s = (char*)*ap; - 7c9: 8b 45 e8 mov -0x18(%ebp),%eax - 7cc: 8b 00 mov (%eax),%eax - 7ce: 89 45 f4 mov %eax,-0xc(%ebp) - ap++; - 7d1: 83 45 e8 04 addl $0x4,-0x18(%ebp) - if(s == 0) - 7d5: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 7d9: 75 07 jne 7e2 - s = "(null)"; - 7db: c7 45 f4 ee 0a 00 00 movl $0xaee,-0xc(%ebp) - while(*s != 0){ - 7e2: eb 1c jmp 800 - putc(fd, *s); - 7e4: 8b 45 f4 mov -0xc(%ebp),%eax - 7e7: 0f b6 00 movzbl (%eax),%eax - 7ea: 0f be c0 movsbl %al,%eax - 7ed: 83 ec 08 sub $0x8,%esp - 7f0: 50 push %eax - 7f1: ff 75 08 pushl 0x8(%ebp) - 7f4: e8 33 fe ff ff call 62c - 7f9: 83 c4 10 add $0x10,%esp - s++; - 7fc: 83 45 f4 01 addl $0x1,-0xc(%ebp) - } else if(c == 's'){ - s = (char*)*ap; - ap++; - if(s == 0) - s = "(null)"; - while(*s != 0){ - 800: 8b 45 f4 mov -0xc(%ebp),%eax - 803: 0f b6 00 movzbl (%eax),%eax - 806: 84 c0 test %al,%al - 808: 75 da jne 7e4 - 80a: eb 65 jmp 871 - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 80c: 83 7d e4 63 cmpl $0x63,-0x1c(%ebp) - 810: 75 1d jne 82f - putc(fd, *ap); - 812: 8b 45 e8 mov -0x18(%ebp),%eax - 815: 8b 00 mov (%eax),%eax - 817: 0f be c0 movsbl %al,%eax - 81a: 83 ec 08 sub $0x8,%esp - 81d: 50 push %eax - 81e: ff 75 08 pushl 0x8(%ebp) - 821: e8 06 fe ff ff call 62c - 826: 83 c4 10 add $0x10,%esp - ap++; - 829: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 82d: eb 42 jmp 871 - } else if(c == '%'){ - 82f: 83 7d e4 25 cmpl $0x25,-0x1c(%ebp) - 833: 75 17 jne 84c - putc(fd, c); - 835: 8b 45 e4 mov -0x1c(%ebp),%eax - 838: 0f be c0 movsbl %al,%eax - 83b: 83 ec 08 sub $0x8,%esp - 83e: 50 push %eax - 83f: ff 75 08 pushl 0x8(%ebp) - 842: e8 e5 fd ff ff call 62c - 847: 83 c4 10 add $0x10,%esp - 84a: eb 25 jmp 871 - } else { - // Unknown % sequence. Print it to draw attention. - putc(fd, '%'); - 84c: 83 ec 08 sub $0x8,%esp - 84f: 6a 25 push $0x25 - 851: ff 75 08 pushl 0x8(%ebp) - 854: e8 d3 fd ff ff call 62c - 859: 83 c4 10 add $0x10,%esp - putc(fd, c); - 85c: 8b 45 e4 mov -0x1c(%ebp),%eax - 85f: 0f be c0 movsbl %al,%eax - 862: 83 ec 08 sub $0x8,%esp - 865: 50 push %eax - 866: ff 75 08 pushl 0x8(%ebp) - 869: e8 be fd ff ff call 62c - 86e: 83 c4 10 add $0x10,%esp - } - state = 0; - 871: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for(i = 0; fmt[i]; i++){ - 878: 83 45 f0 01 addl $0x1,-0x10(%ebp) - 87c: 8b 55 0c mov 0xc(%ebp),%edx - 87f: 8b 45 f0 mov -0x10(%ebp),%eax - 882: 01 d0 add %edx,%eax - 884: 0f b6 00 movzbl (%eax),%eax - 887: 84 c0 test %al,%al - 889: 0f 85 94 fe ff ff jne 723 - putc(fd, c); - } - state = 0; - } - } -} - 88f: c9 leave - 890: c3 ret - -00000891 : -static Header base; -static Header *freep; - -void -free(void *ap) -{ - 891: 55 push %ebp - 892: 89 e5 mov %esp,%ebp - 894: 83 ec 10 sub $0x10,%esp - Header *bp, *p; - - bp = (Header*)ap - 1; - 897: 8b 45 08 mov 0x8(%ebp),%eax - 89a: 83 e8 08 sub $0x8,%eax - 89d: 89 45 f8 mov %eax,-0x8(%ebp) - for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 8a0: a1 08 0e 00 00 mov 0xe08,%eax - 8a5: 89 45 fc mov %eax,-0x4(%ebp) - 8a8: eb 24 jmp 8ce - if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 8aa: 8b 45 fc mov -0x4(%ebp),%eax - 8ad: 8b 00 mov (%eax),%eax - 8af: 3b 45 fc cmp -0x4(%ebp),%eax - 8b2: 77 12 ja 8c6 - 8b4: 8b 45 f8 mov -0x8(%ebp),%eax - 8b7: 3b 45 fc cmp -0x4(%ebp),%eax - 8ba: 77 24 ja 8e0 - 8bc: 8b 45 fc mov -0x4(%ebp),%eax - 8bf: 8b 00 mov (%eax),%eax - 8c1: 3b 45 f8 cmp -0x8(%ebp),%eax - 8c4: 77 1a ja 8e0 -free(void *ap) -{ - Header *bp, *p; - - bp = (Header*)ap - 1; - for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 8c6: 8b 45 fc mov -0x4(%ebp),%eax - 8c9: 8b 00 mov (%eax),%eax - 8cb: 89 45 fc mov %eax,-0x4(%ebp) - 8ce: 8b 45 f8 mov -0x8(%ebp),%eax - 8d1: 3b 45 fc cmp -0x4(%ebp),%eax - 8d4: 76 d4 jbe 8aa - 8d6: 8b 45 fc mov -0x4(%ebp),%eax - 8d9: 8b 00 mov (%eax),%eax - 8db: 3b 45 f8 cmp -0x8(%ebp),%eax - 8de: 76 ca jbe 8aa - if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - break; - if(bp + bp->s.size == p->s.ptr){ - 8e0: 8b 45 f8 mov -0x8(%ebp),%eax - 8e3: 8b 40 04 mov 0x4(%eax),%eax - 8e6: 8d 14 c5 00 00 00 00 lea 0x0(,%eax,8),%edx - 8ed: 8b 45 f8 mov -0x8(%ebp),%eax - 8f0: 01 c2 add %eax,%edx - 8f2: 8b 45 fc mov -0x4(%ebp),%eax - 8f5: 8b 00 mov (%eax),%eax - 8f7: 39 c2 cmp %eax,%edx - 8f9: 75 24 jne 91f - bp->s.size += p->s.ptr->s.size; - 8fb: 8b 45 f8 mov -0x8(%ebp),%eax - 8fe: 8b 50 04 mov 0x4(%eax),%edx - 901: 8b 45 fc mov -0x4(%ebp),%eax - 904: 8b 00 mov (%eax),%eax - 906: 8b 40 04 mov 0x4(%eax),%eax - 909: 01 c2 add %eax,%edx - 90b: 8b 45 f8 mov -0x8(%ebp),%eax - 90e: 89 50 04 mov %edx,0x4(%eax) - bp->s.ptr = p->s.ptr->s.ptr; - 911: 8b 45 fc mov -0x4(%ebp),%eax - 914: 8b 00 mov (%eax),%eax - 916: 8b 10 mov (%eax),%edx - 918: 8b 45 f8 mov -0x8(%ebp),%eax - 91b: 89 10 mov %edx,(%eax) - 91d: eb 0a jmp 929 - } else - bp->s.ptr = p->s.ptr; - 91f: 8b 45 fc mov -0x4(%ebp),%eax - 922: 8b 10 mov (%eax),%edx - 924: 8b 45 f8 mov -0x8(%ebp),%eax - 927: 89 10 mov %edx,(%eax) - if(p + p->s.size == bp){ - 929: 8b 45 fc mov -0x4(%ebp),%eax - 92c: 8b 40 04 mov 0x4(%eax),%eax - 92f: 8d 14 c5 00 00 00 00 lea 0x0(,%eax,8),%edx - 936: 8b 45 fc mov -0x4(%ebp),%eax - 939: 01 d0 add %edx,%eax - 93b: 3b 45 f8 cmp -0x8(%ebp),%eax - 93e: 75 20 jne 960 - p->s.size += bp->s.size; - 940: 8b 45 fc mov -0x4(%ebp),%eax - 943: 8b 50 04 mov 0x4(%eax),%edx - 946: 8b 45 f8 mov -0x8(%ebp),%eax - 949: 8b 40 04 mov 0x4(%eax),%eax - 94c: 01 c2 add %eax,%edx - 94e: 8b 45 fc mov -0x4(%ebp),%eax - 951: 89 50 04 mov %edx,0x4(%eax) - p->s.ptr = bp->s.ptr; - 954: 8b 45 f8 mov -0x8(%ebp),%eax - 957: 8b 10 mov (%eax),%edx - 959: 8b 45 fc mov -0x4(%ebp),%eax - 95c: 89 10 mov %edx,(%eax) - 95e: eb 08 jmp 968 - } else - p->s.ptr = bp; - 960: 8b 45 fc mov -0x4(%ebp),%eax - 963: 8b 55 f8 mov -0x8(%ebp),%edx - 966: 89 10 mov %edx,(%eax) - freep = p; - 968: 8b 45 fc mov -0x4(%ebp),%eax - 96b: a3 08 0e 00 00 mov %eax,0xe08 -} - 970: c9 leave - 971: c3 ret - -00000972 : - -static Header* -morecore(uint nu) -{ - 972: 55 push %ebp - 973: 89 e5 mov %esp,%ebp - 975: 83 ec 18 sub $0x18,%esp - char *p; - Header *hp; - - if(nu < 4096) - 978: 81 7d 08 ff 0f 00 00 cmpl $0xfff,0x8(%ebp) - 97f: 77 07 ja 988 - nu = 4096; - 981: c7 45 08 00 10 00 00 movl $0x1000,0x8(%ebp) - p = sbrk(nu * sizeof(Header)); - 988: 8b 45 08 mov 0x8(%ebp),%eax - 98b: c1 e0 03 shl $0x3,%eax - 98e: 83 ec 0c sub $0xc,%esp - 991: 50 push %eax - 992: e8 7d fc ff ff call 614 - 997: 83 c4 10 add $0x10,%esp - 99a: 89 45 f4 mov %eax,-0xc(%ebp) - if(p == (char*)-1) - 99d: 83 7d f4 ff cmpl $0xffffffff,-0xc(%ebp) - 9a1: 75 07 jne 9aa - return 0; - 9a3: b8 00 00 00 00 mov $0x0,%eax - 9a8: eb 26 jmp 9d0 - hp = (Header*)p; - 9aa: 8b 45 f4 mov -0xc(%ebp),%eax - 9ad: 89 45 f0 mov %eax,-0x10(%ebp) - hp->s.size = nu; - 9b0: 8b 45 f0 mov -0x10(%ebp),%eax - 9b3: 8b 55 08 mov 0x8(%ebp),%edx - 9b6: 89 50 04 mov %edx,0x4(%eax) - free((void*)(hp + 1)); - 9b9: 8b 45 f0 mov -0x10(%ebp),%eax - 9bc: 83 c0 08 add $0x8,%eax - 9bf: 83 ec 0c sub $0xc,%esp - 9c2: 50 push %eax - 9c3: e8 c9 fe ff ff call 891 - 9c8: 83 c4 10 add $0x10,%esp - return freep; - 9cb: a1 08 0e 00 00 mov 0xe08,%eax -} - 9d0: c9 leave - 9d1: c3 ret - -000009d2 : - -void* -malloc(uint nbytes) -{ - 9d2: 55 push %ebp - 9d3: 89 e5 mov %esp,%ebp - 9d5: 83 ec 18 sub $0x18,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 9d8: 8b 45 08 mov 0x8(%ebp),%eax - 9db: 83 c0 07 add $0x7,%eax - 9de: c1 e8 03 shr $0x3,%eax - 9e1: 83 c0 01 add $0x1,%eax - 9e4: 89 45 ec mov %eax,-0x14(%ebp) - if((prevp = freep) == 0){ - 9e7: a1 08 0e 00 00 mov 0xe08,%eax - 9ec: 89 45 f0 mov %eax,-0x10(%ebp) - 9ef: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 9f3: 75 23 jne a18 - base.s.ptr = freep = prevp = &base; - 9f5: c7 45 f0 00 0e 00 00 movl $0xe00,-0x10(%ebp) - 9fc: 8b 45 f0 mov -0x10(%ebp),%eax - 9ff: a3 08 0e 00 00 mov %eax,0xe08 - a04: a1 08 0e 00 00 mov 0xe08,%eax - a09: a3 00 0e 00 00 mov %eax,0xe00 - base.s.size = 0; - a0e: c7 05 04 0e 00 00 00 movl $0x0,0xe04 - a15: 00 00 00 - } - for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - a18: 8b 45 f0 mov -0x10(%ebp),%eax - a1b: 8b 00 mov (%eax),%eax - a1d: 89 45 f4 mov %eax,-0xc(%ebp) - if(p->s.size >= nunits){ - a20: 8b 45 f4 mov -0xc(%ebp),%eax - a23: 8b 40 04 mov 0x4(%eax),%eax - a26: 3b 45 ec cmp -0x14(%ebp),%eax - a29: 72 4d jb a78 - if(p->s.size == nunits) - a2b: 8b 45 f4 mov -0xc(%ebp),%eax - a2e: 8b 40 04 mov 0x4(%eax),%eax - a31: 3b 45 ec cmp -0x14(%ebp),%eax - a34: 75 0c jne a42 - prevp->s.ptr = p->s.ptr; - a36: 8b 45 f4 mov -0xc(%ebp),%eax - a39: 8b 10 mov (%eax),%edx - a3b: 8b 45 f0 mov -0x10(%ebp),%eax - a3e: 89 10 mov %edx,(%eax) - a40: eb 26 jmp a68 - else { - p->s.size -= nunits; - a42: 8b 45 f4 mov -0xc(%ebp),%eax - a45: 8b 40 04 mov 0x4(%eax),%eax - a48: 2b 45 ec sub -0x14(%ebp),%eax - a4b: 89 c2 mov %eax,%edx - a4d: 8b 45 f4 mov -0xc(%ebp),%eax - a50: 89 50 04 mov %edx,0x4(%eax) - p += p->s.size; - a53: 8b 45 f4 mov -0xc(%ebp),%eax - a56: 8b 40 04 mov 0x4(%eax),%eax - a59: c1 e0 03 shl $0x3,%eax - a5c: 01 45 f4 add %eax,-0xc(%ebp) - p->s.size = nunits; - a5f: 8b 45 f4 mov -0xc(%ebp),%eax - a62: 8b 55 ec mov -0x14(%ebp),%edx - a65: 89 50 04 mov %edx,0x4(%eax) - } - freep = prevp; - a68: 8b 45 f0 mov -0x10(%ebp),%eax - a6b: a3 08 0e 00 00 mov %eax,0xe08 - return (void*)(p + 1); - a70: 8b 45 f4 mov -0xc(%ebp),%eax - a73: 83 c0 08 add $0x8,%eax - a76: eb 3b jmp ab3 - } - if(p == freep) - a78: a1 08 0e 00 00 mov 0xe08,%eax - a7d: 39 45 f4 cmp %eax,-0xc(%ebp) - a80: 75 1e jne aa0 - if((p = morecore(nunits)) == 0) - a82: 83 ec 0c sub $0xc,%esp - a85: ff 75 ec pushl -0x14(%ebp) - a88: e8 e5 fe ff ff call 972 - a8d: 83 c4 10 add $0x10,%esp - a90: 89 45 f4 mov %eax,-0xc(%ebp) - a93: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - a97: 75 07 jne aa0 - return 0; - a99: b8 00 00 00 00 mov $0x0,%eax - a9e: eb 13 jmp ab3 - nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - if((prevp = freep) == 0){ - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - aa0: 8b 45 f4 mov -0xc(%ebp),%eax - aa3: 89 45 f0 mov %eax,-0x10(%ebp) - aa6: 8b 45 f4 mov -0xc(%ebp),%eax - aa9: 8b 00 mov (%eax),%eax - aab: 89 45 f4 mov %eax,-0xc(%ebp) - return (void*)(p + 1); - } - if(p == freep) - if((p = morecore(nunits)) == 0) - return 0; - } - aae: e9 6d ff ff ff jmp a20 -} - ab3: c9 leave - ab4: c3 ret diff --git a/xv6-public/grep.d b/xv6-public/grep.d deleted file mode 100755 index 15fc65b..0000000 --- a/xv6-public/grep.d +++ /dev/null @@ -1 +0,0 @@ -grep.o: grep.c /usr/include/stdc-predef.h types.h stat.h user.h diff --git a/xv6-public/grep.o b/xv6-public/grep.o deleted file mode 100755 index e935d0c6b5da2e32c618a72d5e098f932d47891a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6224 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 diff --git a/xv6-public/grep.sym b/xv6-public/grep.sym deleted file mode 100755 index c824ce0..0000000 --- a/xv6-public/grep.sym +++ /dev/null @@ -1,66 +0,0 @@ -00000000 .text -00000ab8 .rodata -00000af8 .eh_frame -00000dc4 .data -00000e00 .bss -00000000 .comment -00000000 .debug_aranges -00000000 .debug_info -00000000 .debug_abbrev -00000000 .debug_line -00000000 .debug_str -00000000 .debug_loc -00000000 grep.c -00000000 ulib.c -00000337 stosb -00000000 printf.c -0000062c putc -0000064e printint -00000dc4 digits.1372 -00000000 umalloc.c -00000e00 base -00000e08 freep -00000972 morecore -00000000 -0000035c strcpy -00000701 printf -00000547 memmove -00000235 matchhere -000005d4 mknod -0000043f gets -0000060c getpid -00000000 grep -000009d2 malloc -0000061c sleep -0000059c pipe -000005ac write -000005e4 fstat -000005bc kill -000005fc chdir -000005c4 exec -00000594 wait -000005a4 read -000005dc unlink -00000584 fork -00000614 sbrk -00000624 uptime -00000dd5 __bss_start -000003f2 memset -000000ff main -000002ea matchstar -0000038c strcmp -00000604 dup -00000e40 buf -000004ad stat -00000dd5 _edata -00001240 _end -000001db match -000005ec link -0000058c exit -000004fa atoi -000003cb strlen -000005cc open -0000040c strchr -000005f4 mkdir -000005b4 close -00000891 free diff --git a/xv6-public/ide.d b/xv6-public/ide.d deleted file mode 100755 index 7560ff0..0000000 --- a/xv6-public/ide.d +++ /dev/null @@ -1,2 +0,0 @@ -ide.o: ide.c /usr/include/stdc-predef.h types.h defs.h param.h \ - memlayout.h mmu.h proc.h x86.h traps.h spinlock.h fs.h buf.h diff --git a/xv6-public/ide.o b/xv6-public/ide.o deleted file mode 100755 index 37c8330207a9bbbd4aadfe7c62c5f70c212306d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11312 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 D;c-zQ diff --git a/xv6-public/init.asm b/xv6-public/init.asm deleted file mode 100755 index e34ccde..0000000 --- a/xv6-public/init.asm +++ /dev/null @@ -1,1245 +0,0 @@ - -_init: file format elf32-i386 - - -Disassembly of section .text: - -00000000
: - -char *argv[] = { "sh", 0 }; - -int -main(void) -{ - 0: 8d 4c 24 04 lea 0x4(%esp),%ecx - 4: 83 e4 f0 and $0xfffffff0,%esp - 7: ff 71 fc pushl -0x4(%ecx) - a: 55 push %ebp - b: 89 e5 mov %esp,%ebp - d: 51 push %ecx - e: 83 ec 14 sub $0x14,%esp - int pid, wpid; - - if(open("console", O_RDWR) < 0){ - 11: 83 ec 08 sub $0x8,%esp - 14: 6a 02 push $0x2 - 16: 68 80 08 00 00 push $0x880 - 1b: e8 74 03 00 00 call 394 - 20: 83 c4 10 add $0x10,%esp - 23: 85 c0 test %eax,%eax - 25: 79 26 jns 4d - mknod("console", 1, 1); - 27: 83 ec 04 sub $0x4,%esp - 2a: 6a 01 push $0x1 - 2c: 6a 01 push $0x1 - 2e: 68 80 08 00 00 push $0x880 - 33: e8 64 03 00 00 call 39c - 38: 83 c4 10 add $0x10,%esp - open("console", O_RDWR); - 3b: 83 ec 08 sub $0x8,%esp - 3e: 6a 02 push $0x2 - 40: 68 80 08 00 00 push $0x880 - 45: e8 4a 03 00 00 call 394 - 4a: 83 c4 10 add $0x10,%esp - } - dup(0); // stdout - 4d: 83 ec 0c sub $0xc,%esp - 50: 6a 00 push $0x0 - 52: e8 75 03 00 00 call 3cc - 57: 83 c4 10 add $0x10,%esp - dup(0); // stderr - 5a: 83 ec 0c sub $0xc,%esp - 5d: 6a 00 push $0x0 - 5f: e8 68 03 00 00 call 3cc - 64: 83 c4 10 add $0x10,%esp - - for(;;){ - printf(1, "init: starting sh\n"); - 67: 83 ec 08 sub $0x8,%esp - 6a: 68 88 08 00 00 push $0x888 - 6f: 6a 01 push $0x1 - 71: e8 53 04 00 00 call 4c9 - 76: 83 c4 10 add $0x10,%esp - pid = fork(); - 79: e8 ce 02 00 00 call 34c - 7e: 89 45 f4 mov %eax,-0xc(%ebp) - if(pid < 0){ - 81: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 85: 79 17 jns 9e - printf(1, "init: fork failed\n"); - 87: 83 ec 08 sub $0x8,%esp - 8a: 68 9b 08 00 00 push $0x89b - 8f: 6a 01 push $0x1 - 91: e8 33 04 00 00 call 4c9 - 96: 83 c4 10 add $0x10,%esp - exit(); - 99: e8 b6 02 00 00 call 354 - } - if(pid == 0){ - 9e: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - a2: 75 2c jne d0 - exec("sh", argv); - a4: 83 ec 08 sub $0x8,%esp - a7: 68 1c 0b 00 00 push $0xb1c - ac: 68 7d 08 00 00 push $0x87d - b1: e8 d6 02 00 00 call 38c - b6: 83 c4 10 add $0x10,%esp - printf(1, "init: exec sh failed\n"); - b9: 83 ec 08 sub $0x8,%esp - bc: 68 ae 08 00 00 push $0x8ae - c1: 6a 01 push $0x1 - c3: e8 01 04 00 00 call 4c9 - c8: 83 c4 10 add $0x10,%esp - exit(); - cb: e8 84 02 00 00 call 354 - } - while((wpid=wait()) >= 0 && wpid != pid) - d0: eb 12 jmp e4 - printf(1, "zombie!\n"); - d2: 83 ec 08 sub $0x8,%esp - d5: 68 c4 08 00 00 push $0x8c4 - da: 6a 01 push $0x1 - dc: e8 e8 03 00 00 call 4c9 - e1: 83 c4 10 add $0x10,%esp - if(pid == 0){ - exec("sh", argv); - printf(1, "init: exec sh failed\n"); - exit(); - } - while((wpid=wait()) >= 0 && wpid != pid) - e4: e8 73 02 00 00 call 35c - e9: 89 45 f0 mov %eax,-0x10(%ebp) - ec: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - f0: 78 08 js fa - f2: 8b 45 f0 mov -0x10(%ebp),%eax - f5: 3b 45 f4 cmp -0xc(%ebp),%eax - f8: 75 d8 jne d2 - printf(1, "zombie!\n"); - } - fa: e9 68 ff ff ff jmp 67 - -000000ff : - "cc"); -} - -static inline void -stosb(void *addr, int data, int cnt) -{ - ff: 55 push %ebp - 100: 89 e5 mov %esp,%ebp - 102: 57 push %edi - 103: 53 push %ebx - asm volatile("cld; rep stosb" : - 104: 8b 4d 08 mov 0x8(%ebp),%ecx - 107: 8b 55 10 mov 0x10(%ebp),%edx - 10a: 8b 45 0c mov 0xc(%ebp),%eax - 10d: 89 cb mov %ecx,%ebx - 10f: 89 df mov %ebx,%edi - 111: 89 d1 mov %edx,%ecx - 113: fc cld - 114: f3 aa rep stos %al,%es:(%edi) - 116: 89 ca mov %ecx,%edx - 118: 89 fb mov %edi,%ebx - 11a: 89 5d 08 mov %ebx,0x8(%ebp) - 11d: 89 55 10 mov %edx,0x10(%ebp) - "=D" (addr), "=c" (cnt) : - "0" (addr), "1" (cnt), "a" (data) : - "memory", "cc"); -} - 120: 5b pop %ebx - 121: 5f pop %edi - 122: 5d pop %ebp - 123: c3 ret - -00000124 : -#include "user.h" -#include "x86.h" - -char* -strcpy(char *s, char *t) -{ - 124: 55 push %ebp - 125: 89 e5 mov %esp,%ebp - 127: 83 ec 10 sub $0x10,%esp - char *os; - - os = s; - 12a: 8b 45 08 mov 0x8(%ebp),%eax - 12d: 89 45 fc mov %eax,-0x4(%ebp) - while((*s++ = *t++) != 0) - 130: 90 nop - 131: 8b 45 08 mov 0x8(%ebp),%eax - 134: 8d 50 01 lea 0x1(%eax),%edx - 137: 89 55 08 mov %edx,0x8(%ebp) - 13a: 8b 55 0c mov 0xc(%ebp),%edx - 13d: 8d 4a 01 lea 0x1(%edx),%ecx - 140: 89 4d 0c mov %ecx,0xc(%ebp) - 143: 0f b6 12 movzbl (%edx),%edx - 146: 88 10 mov %dl,(%eax) - 148: 0f b6 00 movzbl (%eax),%eax - 14b: 84 c0 test %al,%al - 14d: 75 e2 jne 131 - ; - return os; - 14f: 8b 45 fc mov -0x4(%ebp),%eax -} - 152: c9 leave - 153: c3 ret - -00000154 : - -int -strcmp(const char *p, const char *q) -{ - 154: 55 push %ebp - 155: 89 e5 mov %esp,%ebp - while(*p && *p == *q) - 157: eb 08 jmp 161 - p++, q++; - 159: 83 45 08 01 addl $0x1,0x8(%ebp) - 15d: 83 45 0c 01 addl $0x1,0xc(%ebp) -} - -int -strcmp(const char *p, const char *q) -{ - while(*p && *p == *q) - 161: 8b 45 08 mov 0x8(%ebp),%eax - 164: 0f b6 00 movzbl (%eax),%eax - 167: 84 c0 test %al,%al - 169: 74 10 je 17b - 16b: 8b 45 08 mov 0x8(%ebp),%eax - 16e: 0f b6 10 movzbl (%eax),%edx - 171: 8b 45 0c mov 0xc(%ebp),%eax - 174: 0f b6 00 movzbl (%eax),%eax - 177: 38 c2 cmp %al,%dl - 179: 74 de je 159 - p++, q++; - return (uchar)*p - (uchar)*q; - 17b: 8b 45 08 mov 0x8(%ebp),%eax - 17e: 0f b6 00 movzbl (%eax),%eax - 181: 0f b6 d0 movzbl %al,%edx - 184: 8b 45 0c mov 0xc(%ebp),%eax - 187: 0f b6 00 movzbl (%eax),%eax - 18a: 0f b6 c0 movzbl %al,%eax - 18d: 29 c2 sub %eax,%edx - 18f: 89 d0 mov %edx,%eax -} - 191: 5d pop %ebp - 192: c3 ret - -00000193 : - -uint -strlen(char *s) -{ - 193: 55 push %ebp - 194: 89 e5 mov %esp,%ebp - 196: 83 ec 10 sub $0x10,%esp - int n; - - for(n = 0; s[n]; n++) - 199: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - 1a0: eb 04 jmp 1a6 - 1a2: 83 45 fc 01 addl $0x1,-0x4(%ebp) - 1a6: 8b 55 fc mov -0x4(%ebp),%edx - 1a9: 8b 45 08 mov 0x8(%ebp),%eax - 1ac: 01 d0 add %edx,%eax - 1ae: 0f b6 00 movzbl (%eax),%eax - 1b1: 84 c0 test %al,%al - 1b3: 75 ed jne 1a2 - ; - return n; - 1b5: 8b 45 fc mov -0x4(%ebp),%eax -} - 1b8: c9 leave - 1b9: c3 ret - -000001ba : - -void* -memset(void *dst, int c, uint n) -{ - 1ba: 55 push %ebp - 1bb: 89 e5 mov %esp,%ebp - stosb(dst, c, n); - 1bd: 8b 45 10 mov 0x10(%ebp),%eax - 1c0: 50 push %eax - 1c1: ff 75 0c pushl 0xc(%ebp) - 1c4: ff 75 08 pushl 0x8(%ebp) - 1c7: e8 33 ff ff ff call ff - 1cc: 83 c4 0c add $0xc,%esp - return dst; - 1cf: 8b 45 08 mov 0x8(%ebp),%eax -} - 1d2: c9 leave - 1d3: c3 ret - -000001d4 : - -char* -strchr(const char *s, char c) -{ - 1d4: 55 push %ebp - 1d5: 89 e5 mov %esp,%ebp - 1d7: 83 ec 04 sub $0x4,%esp - 1da: 8b 45 0c mov 0xc(%ebp),%eax - 1dd: 88 45 fc mov %al,-0x4(%ebp) - for(; *s; s++) - 1e0: eb 14 jmp 1f6 - if(*s == c) - 1e2: 8b 45 08 mov 0x8(%ebp),%eax - 1e5: 0f b6 00 movzbl (%eax),%eax - 1e8: 3a 45 fc cmp -0x4(%ebp),%al - 1eb: 75 05 jne 1f2 - return (char*)s; - 1ed: 8b 45 08 mov 0x8(%ebp),%eax - 1f0: eb 13 jmp 205 -} - -char* -strchr(const char *s, char c) -{ - for(; *s; s++) - 1f2: 83 45 08 01 addl $0x1,0x8(%ebp) - 1f6: 8b 45 08 mov 0x8(%ebp),%eax - 1f9: 0f b6 00 movzbl (%eax),%eax - 1fc: 84 c0 test %al,%al - 1fe: 75 e2 jne 1e2 - if(*s == c) - return (char*)s; - return 0; - 200: b8 00 00 00 00 mov $0x0,%eax -} - 205: c9 leave - 206: c3 ret - -00000207 : - -char* -gets(char *buf, int max) -{ - 207: 55 push %ebp - 208: 89 e5 mov %esp,%ebp - 20a: 83 ec 18 sub $0x18,%esp - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - 20d: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 214: eb 44 jmp 25a - cc = read(0, &c, 1); - 216: 83 ec 04 sub $0x4,%esp - 219: 6a 01 push $0x1 - 21b: 8d 45 ef lea -0x11(%ebp),%eax - 21e: 50 push %eax - 21f: 6a 00 push $0x0 - 221: e8 46 01 00 00 call 36c - 226: 83 c4 10 add $0x10,%esp - 229: 89 45 f0 mov %eax,-0x10(%ebp) - if(cc < 1) - 22c: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 230: 7f 02 jg 234 - break; - 232: eb 31 jmp 265 - buf[i++] = c; - 234: 8b 45 f4 mov -0xc(%ebp),%eax - 237: 8d 50 01 lea 0x1(%eax),%edx - 23a: 89 55 f4 mov %edx,-0xc(%ebp) - 23d: 89 c2 mov %eax,%edx - 23f: 8b 45 08 mov 0x8(%ebp),%eax - 242: 01 c2 add %eax,%edx - 244: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 248: 88 02 mov %al,(%edx) - if(c == '\n' || c == '\r') - 24a: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 24e: 3c 0a cmp $0xa,%al - 250: 74 13 je 265 - 252: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 256: 3c 0d cmp $0xd,%al - 258: 74 0b je 265 -gets(char *buf, int max) -{ - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - 25a: 8b 45 f4 mov -0xc(%ebp),%eax - 25d: 83 c0 01 add $0x1,%eax - 260: 3b 45 0c cmp 0xc(%ebp),%eax - 263: 7c b1 jl 216 - break; - buf[i++] = c; - if(c == '\n' || c == '\r') - break; - } - buf[i] = '\0'; - 265: 8b 55 f4 mov -0xc(%ebp),%edx - 268: 8b 45 08 mov 0x8(%ebp),%eax - 26b: 01 d0 add %edx,%eax - 26d: c6 00 00 movb $0x0,(%eax) - return buf; - 270: 8b 45 08 mov 0x8(%ebp),%eax -} - 273: c9 leave - 274: c3 ret - -00000275 : - -int -stat(char *n, struct stat *st) -{ - 275: 55 push %ebp - 276: 89 e5 mov %esp,%ebp - 278: 83 ec 18 sub $0x18,%esp - int fd; - int r; - - fd = open(n, O_RDONLY); - 27b: 83 ec 08 sub $0x8,%esp - 27e: 6a 00 push $0x0 - 280: ff 75 08 pushl 0x8(%ebp) - 283: e8 0c 01 00 00 call 394 - 288: 83 c4 10 add $0x10,%esp - 28b: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd < 0) - 28e: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 292: 79 07 jns 29b - return -1; - 294: b8 ff ff ff ff mov $0xffffffff,%eax - 299: eb 25 jmp 2c0 - r = fstat(fd, st); - 29b: 83 ec 08 sub $0x8,%esp - 29e: ff 75 0c pushl 0xc(%ebp) - 2a1: ff 75 f4 pushl -0xc(%ebp) - 2a4: e8 03 01 00 00 call 3ac - 2a9: 83 c4 10 add $0x10,%esp - 2ac: 89 45 f0 mov %eax,-0x10(%ebp) - close(fd); - 2af: 83 ec 0c sub $0xc,%esp - 2b2: ff 75 f4 pushl -0xc(%ebp) - 2b5: e8 c2 00 00 00 call 37c - 2ba: 83 c4 10 add $0x10,%esp - return r; - 2bd: 8b 45 f0 mov -0x10(%ebp),%eax -} - 2c0: c9 leave - 2c1: c3 ret - -000002c2 : - -int -atoi(const char *s) -{ - 2c2: 55 push %ebp - 2c3: 89 e5 mov %esp,%ebp - 2c5: 83 ec 10 sub $0x10,%esp - int n; - - n = 0; - 2c8: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - while('0' <= *s && *s <= '9') - 2cf: eb 25 jmp 2f6 - n = n*10 + *s++ - '0'; - 2d1: 8b 55 fc mov -0x4(%ebp),%edx - 2d4: 89 d0 mov %edx,%eax - 2d6: c1 e0 02 shl $0x2,%eax - 2d9: 01 d0 add %edx,%eax - 2db: 01 c0 add %eax,%eax - 2dd: 89 c1 mov %eax,%ecx - 2df: 8b 45 08 mov 0x8(%ebp),%eax - 2e2: 8d 50 01 lea 0x1(%eax),%edx - 2e5: 89 55 08 mov %edx,0x8(%ebp) - 2e8: 0f b6 00 movzbl (%eax),%eax - 2eb: 0f be c0 movsbl %al,%eax - 2ee: 01 c8 add %ecx,%eax - 2f0: 83 e8 30 sub $0x30,%eax - 2f3: 89 45 fc mov %eax,-0x4(%ebp) -atoi(const char *s) -{ - int n; - - n = 0; - while('0' <= *s && *s <= '9') - 2f6: 8b 45 08 mov 0x8(%ebp),%eax - 2f9: 0f b6 00 movzbl (%eax),%eax - 2fc: 3c 2f cmp $0x2f,%al - 2fe: 7e 0a jle 30a - 300: 8b 45 08 mov 0x8(%ebp),%eax - 303: 0f b6 00 movzbl (%eax),%eax - 306: 3c 39 cmp $0x39,%al - 308: 7e c7 jle 2d1 - n = n*10 + *s++ - '0'; - return n; - 30a: 8b 45 fc mov -0x4(%ebp),%eax -} - 30d: c9 leave - 30e: c3 ret - -0000030f : - -void* -memmove(void *vdst, void *vsrc, int n) -{ - 30f: 55 push %ebp - 310: 89 e5 mov %esp,%ebp - 312: 83 ec 10 sub $0x10,%esp - char *dst, *src; - - dst = vdst; - 315: 8b 45 08 mov 0x8(%ebp),%eax - 318: 89 45 fc mov %eax,-0x4(%ebp) - src = vsrc; - 31b: 8b 45 0c mov 0xc(%ebp),%eax - 31e: 89 45 f8 mov %eax,-0x8(%ebp) - while(n-- > 0) - 321: eb 17 jmp 33a - *dst++ = *src++; - 323: 8b 45 fc mov -0x4(%ebp),%eax - 326: 8d 50 01 lea 0x1(%eax),%edx - 329: 89 55 fc mov %edx,-0x4(%ebp) - 32c: 8b 55 f8 mov -0x8(%ebp),%edx - 32f: 8d 4a 01 lea 0x1(%edx),%ecx - 332: 89 4d f8 mov %ecx,-0x8(%ebp) - 335: 0f b6 12 movzbl (%edx),%edx - 338: 88 10 mov %dl,(%eax) -{ - char *dst, *src; - - dst = vdst; - src = vsrc; - while(n-- > 0) - 33a: 8b 45 10 mov 0x10(%ebp),%eax - 33d: 8d 50 ff lea -0x1(%eax),%edx - 340: 89 55 10 mov %edx,0x10(%ebp) - 343: 85 c0 test %eax,%eax - 345: 7f dc jg 323 - *dst++ = *src++; - return vdst; - 347: 8b 45 08 mov 0x8(%ebp),%eax -} - 34a: c9 leave - 34b: c3 ret - -0000034c : - name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 34c: b8 01 00 00 00 mov $0x1,%eax - 351: cd 40 int $0x40 - 353: c3 ret - -00000354 : -SYSCALL(exit) - 354: b8 02 00 00 00 mov $0x2,%eax - 359: cd 40 int $0x40 - 35b: c3 ret - -0000035c : -SYSCALL(wait) - 35c: b8 03 00 00 00 mov $0x3,%eax - 361: cd 40 int $0x40 - 363: c3 ret - -00000364 : -SYSCALL(pipe) - 364: b8 04 00 00 00 mov $0x4,%eax - 369: cd 40 int $0x40 - 36b: c3 ret - -0000036c : -SYSCALL(read) - 36c: b8 05 00 00 00 mov $0x5,%eax - 371: cd 40 int $0x40 - 373: c3 ret - -00000374 : -SYSCALL(write) - 374: b8 10 00 00 00 mov $0x10,%eax - 379: cd 40 int $0x40 - 37b: c3 ret - -0000037c : -SYSCALL(close) - 37c: b8 15 00 00 00 mov $0x15,%eax - 381: cd 40 int $0x40 - 383: c3 ret - -00000384 : -SYSCALL(kill) - 384: b8 06 00 00 00 mov $0x6,%eax - 389: cd 40 int $0x40 - 38b: c3 ret - -0000038c : -SYSCALL(exec) - 38c: b8 07 00 00 00 mov $0x7,%eax - 391: cd 40 int $0x40 - 393: c3 ret - -00000394 : -SYSCALL(open) - 394: b8 0f 00 00 00 mov $0xf,%eax - 399: cd 40 int $0x40 - 39b: c3 ret - -0000039c : -SYSCALL(mknod) - 39c: b8 11 00 00 00 mov $0x11,%eax - 3a1: cd 40 int $0x40 - 3a3: c3 ret - -000003a4 : -SYSCALL(unlink) - 3a4: b8 12 00 00 00 mov $0x12,%eax - 3a9: cd 40 int $0x40 - 3ab: c3 ret - -000003ac : -SYSCALL(fstat) - 3ac: b8 08 00 00 00 mov $0x8,%eax - 3b1: cd 40 int $0x40 - 3b3: c3 ret - -000003b4 : -SYSCALL(link) - 3b4: b8 13 00 00 00 mov $0x13,%eax - 3b9: cd 40 int $0x40 - 3bb: c3 ret - -000003bc : -SYSCALL(mkdir) - 3bc: b8 14 00 00 00 mov $0x14,%eax - 3c1: cd 40 int $0x40 - 3c3: c3 ret - -000003c4 : -SYSCALL(chdir) - 3c4: b8 09 00 00 00 mov $0x9,%eax - 3c9: cd 40 int $0x40 - 3cb: c3 ret - -000003cc : -SYSCALL(dup) - 3cc: b8 0a 00 00 00 mov $0xa,%eax - 3d1: cd 40 int $0x40 - 3d3: c3 ret - -000003d4 : -SYSCALL(getpid) - 3d4: b8 0b 00 00 00 mov $0xb,%eax - 3d9: cd 40 int $0x40 - 3db: c3 ret - -000003dc : -SYSCALL(sbrk) - 3dc: b8 0c 00 00 00 mov $0xc,%eax - 3e1: cd 40 int $0x40 - 3e3: c3 ret - -000003e4 : -SYSCALL(sleep) - 3e4: b8 0d 00 00 00 mov $0xd,%eax - 3e9: cd 40 int $0x40 - 3eb: c3 ret - -000003ec : -SYSCALL(uptime) - 3ec: b8 0e 00 00 00 mov $0xe,%eax - 3f1: cd 40 int $0x40 - 3f3: c3 ret - -000003f4 : -#include "stat.h" -#include "user.h" - -static void -putc(int fd, char c) -{ - 3f4: 55 push %ebp - 3f5: 89 e5 mov %esp,%ebp - 3f7: 83 ec 18 sub $0x18,%esp - 3fa: 8b 45 0c mov 0xc(%ebp),%eax - 3fd: 88 45 f4 mov %al,-0xc(%ebp) - write(fd, &c, 1); - 400: 83 ec 04 sub $0x4,%esp - 403: 6a 01 push $0x1 - 405: 8d 45 f4 lea -0xc(%ebp),%eax - 408: 50 push %eax - 409: ff 75 08 pushl 0x8(%ebp) - 40c: e8 63 ff ff ff call 374 - 411: 83 c4 10 add $0x10,%esp -} - 414: c9 leave - 415: c3 ret - -00000416 : - -static void -printint(int fd, int xx, int base, int sgn) -{ - 416: 55 push %ebp - 417: 89 e5 mov %esp,%ebp - 419: 53 push %ebx - 41a: 83 ec 24 sub $0x24,%esp - static char digits[] = "0123456789ABCDEF"; - char buf[16]; - int i, neg; - uint x; - - neg = 0; - 41d: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - if(sgn && xx < 0){ - 424: 83 7d 14 00 cmpl $0x0,0x14(%ebp) - 428: 74 17 je 441 - 42a: 83 7d 0c 00 cmpl $0x0,0xc(%ebp) - 42e: 79 11 jns 441 - neg = 1; - 430: c7 45 f0 01 00 00 00 movl $0x1,-0x10(%ebp) - x = -xx; - 437: 8b 45 0c mov 0xc(%ebp),%eax - 43a: f7 d8 neg %eax - 43c: 89 45 ec mov %eax,-0x14(%ebp) - 43f: eb 06 jmp 447 - } else { - x = xx; - 441: 8b 45 0c mov 0xc(%ebp),%eax - 444: 89 45 ec mov %eax,-0x14(%ebp) - } - - i = 0; - 447: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - do{ - buf[i++] = digits[x % base]; - 44e: 8b 4d f4 mov -0xc(%ebp),%ecx - 451: 8d 41 01 lea 0x1(%ecx),%eax - 454: 89 45 f4 mov %eax,-0xc(%ebp) - 457: 8b 5d 10 mov 0x10(%ebp),%ebx - 45a: 8b 45 ec mov -0x14(%ebp),%eax - 45d: ba 00 00 00 00 mov $0x0,%edx - 462: f7 f3 div %ebx - 464: 89 d0 mov %edx,%eax - 466: 0f b6 80 24 0b 00 00 movzbl 0xb24(%eax),%eax - 46d: 88 44 0d dc mov %al,-0x24(%ebp,%ecx,1) - }while((x /= base) != 0); - 471: 8b 5d 10 mov 0x10(%ebp),%ebx - 474: 8b 45 ec mov -0x14(%ebp),%eax - 477: ba 00 00 00 00 mov $0x0,%edx - 47c: f7 f3 div %ebx - 47e: 89 45 ec mov %eax,-0x14(%ebp) - 481: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 485: 75 c7 jne 44e - if(neg) - 487: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 48b: 74 0e je 49b - buf[i++] = '-'; - 48d: 8b 45 f4 mov -0xc(%ebp),%eax - 490: 8d 50 01 lea 0x1(%eax),%edx - 493: 89 55 f4 mov %edx,-0xc(%ebp) - 496: c6 44 05 dc 2d movb $0x2d,-0x24(%ebp,%eax,1) - - while(--i >= 0) - 49b: eb 1d jmp 4ba - putc(fd, buf[i]); - 49d: 8d 55 dc lea -0x24(%ebp),%edx - 4a0: 8b 45 f4 mov -0xc(%ebp),%eax - 4a3: 01 d0 add %edx,%eax - 4a5: 0f b6 00 movzbl (%eax),%eax - 4a8: 0f be c0 movsbl %al,%eax - 4ab: 83 ec 08 sub $0x8,%esp - 4ae: 50 push %eax - 4af: ff 75 08 pushl 0x8(%ebp) - 4b2: e8 3d ff ff ff call 3f4 - 4b7: 83 c4 10 add $0x10,%esp - buf[i++] = digits[x % base]; - }while((x /= base) != 0); - if(neg) - buf[i++] = '-'; - - while(--i >= 0) - 4ba: 83 6d f4 01 subl $0x1,-0xc(%ebp) - 4be: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 4c2: 79 d9 jns 49d - putc(fd, buf[i]); -} - 4c4: 8b 5d fc mov -0x4(%ebp),%ebx - 4c7: c9 leave - 4c8: c3 ret - -000004c9 : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void -printf(int fd, char *fmt, ...) -{ - 4c9: 55 push %ebp - 4ca: 89 e5 mov %esp,%ebp - 4cc: 83 ec 28 sub $0x28,%esp - char *s; - int c, i, state; - uint *ap; - - state = 0; - 4cf: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - ap = (uint*)(void*)&fmt + 1; - 4d6: 8d 45 0c lea 0xc(%ebp),%eax - 4d9: 83 c0 04 add $0x4,%eax - 4dc: 89 45 e8 mov %eax,-0x18(%ebp) - for(i = 0; fmt[i]; i++){ - 4df: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - 4e6: e9 59 01 00 00 jmp 644 - c = fmt[i] & 0xff; - 4eb: 8b 55 0c mov 0xc(%ebp),%edx - 4ee: 8b 45 f0 mov -0x10(%ebp),%eax - 4f1: 01 d0 add %edx,%eax - 4f3: 0f b6 00 movzbl (%eax),%eax - 4f6: 0f be c0 movsbl %al,%eax - 4f9: 25 ff 00 00 00 and $0xff,%eax - 4fe: 89 45 e4 mov %eax,-0x1c(%ebp) - if(state == 0){ - 501: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 505: 75 2c jne 533 - if(c == '%'){ - 507: 83 7d e4 25 cmpl $0x25,-0x1c(%ebp) - 50b: 75 0c jne 519 - state = '%'; - 50d: c7 45 ec 25 00 00 00 movl $0x25,-0x14(%ebp) - 514: e9 27 01 00 00 jmp 640 - } else { - putc(fd, c); - 519: 8b 45 e4 mov -0x1c(%ebp),%eax - 51c: 0f be c0 movsbl %al,%eax - 51f: 83 ec 08 sub $0x8,%esp - 522: 50 push %eax - 523: ff 75 08 pushl 0x8(%ebp) - 526: e8 c9 fe ff ff call 3f4 - 52b: 83 c4 10 add $0x10,%esp - 52e: e9 0d 01 00 00 jmp 640 - } - } else if(state == '%'){ - 533: 83 7d ec 25 cmpl $0x25,-0x14(%ebp) - 537: 0f 85 03 01 00 00 jne 640 - if(c == 'd'){ - 53d: 83 7d e4 64 cmpl $0x64,-0x1c(%ebp) - 541: 75 1e jne 561 - printint(fd, *ap, 10, 1); - 543: 8b 45 e8 mov -0x18(%ebp),%eax - 546: 8b 00 mov (%eax),%eax - 548: 6a 01 push $0x1 - 54a: 6a 0a push $0xa - 54c: 50 push %eax - 54d: ff 75 08 pushl 0x8(%ebp) - 550: e8 c1 fe ff ff call 416 - 555: 83 c4 10 add $0x10,%esp - ap++; - 558: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 55c: e9 d8 00 00 00 jmp 639 - } else if(c == 'x' || c == 'p'){ - 561: 83 7d e4 78 cmpl $0x78,-0x1c(%ebp) - 565: 74 06 je 56d - 567: 83 7d e4 70 cmpl $0x70,-0x1c(%ebp) - 56b: 75 1e jne 58b - printint(fd, *ap, 16, 0); - 56d: 8b 45 e8 mov -0x18(%ebp),%eax - 570: 8b 00 mov (%eax),%eax - 572: 6a 00 push $0x0 - 574: 6a 10 push $0x10 - 576: 50 push %eax - 577: ff 75 08 pushl 0x8(%ebp) - 57a: e8 97 fe ff ff call 416 - 57f: 83 c4 10 add $0x10,%esp - ap++; - 582: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 586: e9 ae 00 00 00 jmp 639 - } else if(c == 's'){ - 58b: 83 7d e4 73 cmpl $0x73,-0x1c(%ebp) - 58f: 75 43 jne 5d4 - s = (char*)*ap; - 591: 8b 45 e8 mov -0x18(%ebp),%eax - 594: 8b 00 mov (%eax),%eax - 596: 89 45 f4 mov %eax,-0xc(%ebp) - ap++; - 599: 83 45 e8 04 addl $0x4,-0x18(%ebp) - if(s == 0) - 59d: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 5a1: 75 07 jne 5aa - s = "(null)"; - 5a3: c7 45 f4 cd 08 00 00 movl $0x8cd,-0xc(%ebp) - while(*s != 0){ - 5aa: eb 1c jmp 5c8 - putc(fd, *s); - 5ac: 8b 45 f4 mov -0xc(%ebp),%eax - 5af: 0f b6 00 movzbl (%eax),%eax - 5b2: 0f be c0 movsbl %al,%eax - 5b5: 83 ec 08 sub $0x8,%esp - 5b8: 50 push %eax - 5b9: ff 75 08 pushl 0x8(%ebp) - 5bc: e8 33 fe ff ff call 3f4 - 5c1: 83 c4 10 add $0x10,%esp - s++; - 5c4: 83 45 f4 01 addl $0x1,-0xc(%ebp) - } else if(c == 's'){ - s = (char*)*ap; - ap++; - if(s == 0) - s = "(null)"; - while(*s != 0){ - 5c8: 8b 45 f4 mov -0xc(%ebp),%eax - 5cb: 0f b6 00 movzbl (%eax),%eax - 5ce: 84 c0 test %al,%al - 5d0: 75 da jne 5ac - 5d2: eb 65 jmp 639 - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 5d4: 83 7d e4 63 cmpl $0x63,-0x1c(%ebp) - 5d8: 75 1d jne 5f7 - putc(fd, *ap); - 5da: 8b 45 e8 mov -0x18(%ebp),%eax - 5dd: 8b 00 mov (%eax),%eax - 5df: 0f be c0 movsbl %al,%eax - 5e2: 83 ec 08 sub $0x8,%esp - 5e5: 50 push %eax - 5e6: ff 75 08 pushl 0x8(%ebp) - 5e9: e8 06 fe ff ff call 3f4 - 5ee: 83 c4 10 add $0x10,%esp - ap++; - 5f1: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 5f5: eb 42 jmp 639 - } else if(c == '%'){ - 5f7: 83 7d e4 25 cmpl $0x25,-0x1c(%ebp) - 5fb: 75 17 jne 614 - putc(fd, c); - 5fd: 8b 45 e4 mov -0x1c(%ebp),%eax - 600: 0f be c0 movsbl %al,%eax - 603: 83 ec 08 sub $0x8,%esp - 606: 50 push %eax - 607: ff 75 08 pushl 0x8(%ebp) - 60a: e8 e5 fd ff ff call 3f4 - 60f: 83 c4 10 add $0x10,%esp - 612: eb 25 jmp 639 - } else { - // Unknown % sequence. Print it to draw attention. - putc(fd, '%'); - 614: 83 ec 08 sub $0x8,%esp - 617: 6a 25 push $0x25 - 619: ff 75 08 pushl 0x8(%ebp) - 61c: e8 d3 fd ff ff call 3f4 - 621: 83 c4 10 add $0x10,%esp - putc(fd, c); - 624: 8b 45 e4 mov -0x1c(%ebp),%eax - 627: 0f be c0 movsbl %al,%eax - 62a: 83 ec 08 sub $0x8,%esp - 62d: 50 push %eax - 62e: ff 75 08 pushl 0x8(%ebp) - 631: e8 be fd ff ff call 3f4 - 636: 83 c4 10 add $0x10,%esp - } - state = 0; - 639: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for(i = 0; fmt[i]; i++){ - 640: 83 45 f0 01 addl $0x1,-0x10(%ebp) - 644: 8b 55 0c mov 0xc(%ebp),%edx - 647: 8b 45 f0 mov -0x10(%ebp),%eax - 64a: 01 d0 add %edx,%eax - 64c: 0f b6 00 movzbl (%eax),%eax - 64f: 84 c0 test %al,%al - 651: 0f 85 94 fe ff ff jne 4eb - putc(fd, c); - } - state = 0; - } - } -} - 657: c9 leave - 658: c3 ret - -00000659 : -static Header base; -static Header *freep; - -void -free(void *ap) -{ - 659: 55 push %ebp - 65a: 89 e5 mov %esp,%ebp - 65c: 83 ec 10 sub $0x10,%esp - Header *bp, *p; - - bp = (Header*)ap - 1; - 65f: 8b 45 08 mov 0x8(%ebp),%eax - 662: 83 e8 08 sub $0x8,%eax - 665: 89 45 f8 mov %eax,-0x8(%ebp) - for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 668: a1 40 0b 00 00 mov 0xb40,%eax - 66d: 89 45 fc mov %eax,-0x4(%ebp) - 670: eb 24 jmp 696 - if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 672: 8b 45 fc mov -0x4(%ebp),%eax - 675: 8b 00 mov (%eax),%eax - 677: 3b 45 fc cmp -0x4(%ebp),%eax - 67a: 77 12 ja 68e - 67c: 8b 45 f8 mov -0x8(%ebp),%eax - 67f: 3b 45 fc cmp -0x4(%ebp),%eax - 682: 77 24 ja 6a8 - 684: 8b 45 fc mov -0x4(%ebp),%eax - 687: 8b 00 mov (%eax),%eax - 689: 3b 45 f8 cmp -0x8(%ebp),%eax - 68c: 77 1a ja 6a8 -free(void *ap) -{ - Header *bp, *p; - - bp = (Header*)ap - 1; - for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 68e: 8b 45 fc mov -0x4(%ebp),%eax - 691: 8b 00 mov (%eax),%eax - 693: 89 45 fc mov %eax,-0x4(%ebp) - 696: 8b 45 f8 mov -0x8(%ebp),%eax - 699: 3b 45 fc cmp -0x4(%ebp),%eax - 69c: 76 d4 jbe 672 - 69e: 8b 45 fc mov -0x4(%ebp),%eax - 6a1: 8b 00 mov (%eax),%eax - 6a3: 3b 45 f8 cmp -0x8(%ebp),%eax - 6a6: 76 ca jbe 672 - if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - break; - if(bp + bp->s.size == p->s.ptr){ - 6a8: 8b 45 f8 mov -0x8(%ebp),%eax - 6ab: 8b 40 04 mov 0x4(%eax),%eax - 6ae: 8d 14 c5 00 00 00 00 lea 0x0(,%eax,8),%edx - 6b5: 8b 45 f8 mov -0x8(%ebp),%eax - 6b8: 01 c2 add %eax,%edx - 6ba: 8b 45 fc mov -0x4(%ebp),%eax - 6bd: 8b 00 mov (%eax),%eax - 6bf: 39 c2 cmp %eax,%edx - 6c1: 75 24 jne 6e7 - bp->s.size += p->s.ptr->s.size; - 6c3: 8b 45 f8 mov -0x8(%ebp),%eax - 6c6: 8b 50 04 mov 0x4(%eax),%edx - 6c9: 8b 45 fc mov -0x4(%ebp),%eax - 6cc: 8b 00 mov (%eax),%eax - 6ce: 8b 40 04 mov 0x4(%eax),%eax - 6d1: 01 c2 add %eax,%edx - 6d3: 8b 45 f8 mov -0x8(%ebp),%eax - 6d6: 89 50 04 mov %edx,0x4(%eax) - bp->s.ptr = p->s.ptr->s.ptr; - 6d9: 8b 45 fc mov -0x4(%ebp),%eax - 6dc: 8b 00 mov (%eax),%eax - 6de: 8b 10 mov (%eax),%edx - 6e0: 8b 45 f8 mov -0x8(%ebp),%eax - 6e3: 89 10 mov %edx,(%eax) - 6e5: eb 0a jmp 6f1 - } else - bp->s.ptr = p->s.ptr; - 6e7: 8b 45 fc mov -0x4(%ebp),%eax - 6ea: 8b 10 mov (%eax),%edx - 6ec: 8b 45 f8 mov -0x8(%ebp),%eax - 6ef: 89 10 mov %edx,(%eax) - if(p + p->s.size == bp){ - 6f1: 8b 45 fc mov -0x4(%ebp),%eax - 6f4: 8b 40 04 mov 0x4(%eax),%eax - 6f7: 8d 14 c5 00 00 00 00 lea 0x0(,%eax,8),%edx - 6fe: 8b 45 fc mov -0x4(%ebp),%eax - 701: 01 d0 add %edx,%eax - 703: 3b 45 f8 cmp -0x8(%ebp),%eax - 706: 75 20 jne 728 - p->s.size += bp->s.size; - 708: 8b 45 fc mov -0x4(%ebp),%eax - 70b: 8b 50 04 mov 0x4(%eax),%edx - 70e: 8b 45 f8 mov -0x8(%ebp),%eax - 711: 8b 40 04 mov 0x4(%eax),%eax - 714: 01 c2 add %eax,%edx - 716: 8b 45 fc mov -0x4(%ebp),%eax - 719: 89 50 04 mov %edx,0x4(%eax) - p->s.ptr = bp->s.ptr; - 71c: 8b 45 f8 mov -0x8(%ebp),%eax - 71f: 8b 10 mov (%eax),%edx - 721: 8b 45 fc mov -0x4(%ebp),%eax - 724: 89 10 mov %edx,(%eax) - 726: eb 08 jmp 730 - } else - p->s.ptr = bp; - 728: 8b 45 fc mov -0x4(%ebp),%eax - 72b: 8b 55 f8 mov -0x8(%ebp),%edx - 72e: 89 10 mov %edx,(%eax) - freep = p; - 730: 8b 45 fc mov -0x4(%ebp),%eax - 733: a3 40 0b 00 00 mov %eax,0xb40 -} - 738: c9 leave - 739: c3 ret - -0000073a : - -static Header* -morecore(uint nu) -{ - 73a: 55 push %ebp - 73b: 89 e5 mov %esp,%ebp - 73d: 83 ec 18 sub $0x18,%esp - char *p; - Header *hp; - - if(nu < 4096) - 740: 81 7d 08 ff 0f 00 00 cmpl $0xfff,0x8(%ebp) - 747: 77 07 ja 750 - nu = 4096; - 749: c7 45 08 00 10 00 00 movl $0x1000,0x8(%ebp) - p = sbrk(nu * sizeof(Header)); - 750: 8b 45 08 mov 0x8(%ebp),%eax - 753: c1 e0 03 shl $0x3,%eax - 756: 83 ec 0c sub $0xc,%esp - 759: 50 push %eax - 75a: e8 7d fc ff ff call 3dc - 75f: 83 c4 10 add $0x10,%esp - 762: 89 45 f4 mov %eax,-0xc(%ebp) - if(p == (char*)-1) - 765: 83 7d f4 ff cmpl $0xffffffff,-0xc(%ebp) - 769: 75 07 jne 772 - return 0; - 76b: b8 00 00 00 00 mov $0x0,%eax - 770: eb 26 jmp 798 - hp = (Header*)p; - 772: 8b 45 f4 mov -0xc(%ebp),%eax - 775: 89 45 f0 mov %eax,-0x10(%ebp) - hp->s.size = nu; - 778: 8b 45 f0 mov -0x10(%ebp),%eax - 77b: 8b 55 08 mov 0x8(%ebp),%edx - 77e: 89 50 04 mov %edx,0x4(%eax) - free((void*)(hp + 1)); - 781: 8b 45 f0 mov -0x10(%ebp),%eax - 784: 83 c0 08 add $0x8,%eax - 787: 83 ec 0c sub $0xc,%esp - 78a: 50 push %eax - 78b: e8 c9 fe ff ff call 659 - 790: 83 c4 10 add $0x10,%esp - return freep; - 793: a1 40 0b 00 00 mov 0xb40,%eax -} - 798: c9 leave - 799: c3 ret - -0000079a : - -void* -malloc(uint nbytes) -{ - 79a: 55 push %ebp - 79b: 89 e5 mov %esp,%ebp - 79d: 83 ec 18 sub $0x18,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 7a0: 8b 45 08 mov 0x8(%ebp),%eax - 7a3: 83 c0 07 add $0x7,%eax - 7a6: c1 e8 03 shr $0x3,%eax - 7a9: 83 c0 01 add $0x1,%eax - 7ac: 89 45 ec mov %eax,-0x14(%ebp) - if((prevp = freep) == 0){ - 7af: a1 40 0b 00 00 mov 0xb40,%eax - 7b4: 89 45 f0 mov %eax,-0x10(%ebp) - 7b7: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 7bb: 75 23 jne 7e0 - base.s.ptr = freep = prevp = &base; - 7bd: c7 45 f0 38 0b 00 00 movl $0xb38,-0x10(%ebp) - 7c4: 8b 45 f0 mov -0x10(%ebp),%eax - 7c7: a3 40 0b 00 00 mov %eax,0xb40 - 7cc: a1 40 0b 00 00 mov 0xb40,%eax - 7d1: a3 38 0b 00 00 mov %eax,0xb38 - base.s.size = 0; - 7d6: c7 05 3c 0b 00 00 00 movl $0x0,0xb3c - 7dd: 00 00 00 - } - for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 7e0: 8b 45 f0 mov -0x10(%ebp),%eax - 7e3: 8b 00 mov (%eax),%eax - 7e5: 89 45 f4 mov %eax,-0xc(%ebp) - if(p->s.size >= nunits){ - 7e8: 8b 45 f4 mov -0xc(%ebp),%eax - 7eb: 8b 40 04 mov 0x4(%eax),%eax - 7ee: 3b 45 ec cmp -0x14(%ebp),%eax - 7f1: 72 4d jb 840 - if(p->s.size == nunits) - 7f3: 8b 45 f4 mov -0xc(%ebp),%eax - 7f6: 8b 40 04 mov 0x4(%eax),%eax - 7f9: 3b 45 ec cmp -0x14(%ebp),%eax - 7fc: 75 0c jne 80a - prevp->s.ptr = p->s.ptr; - 7fe: 8b 45 f4 mov -0xc(%ebp),%eax - 801: 8b 10 mov (%eax),%edx - 803: 8b 45 f0 mov -0x10(%ebp),%eax - 806: 89 10 mov %edx,(%eax) - 808: eb 26 jmp 830 - else { - p->s.size -= nunits; - 80a: 8b 45 f4 mov -0xc(%ebp),%eax - 80d: 8b 40 04 mov 0x4(%eax),%eax - 810: 2b 45 ec sub -0x14(%ebp),%eax - 813: 89 c2 mov %eax,%edx - 815: 8b 45 f4 mov -0xc(%ebp),%eax - 818: 89 50 04 mov %edx,0x4(%eax) - p += p->s.size; - 81b: 8b 45 f4 mov -0xc(%ebp),%eax - 81e: 8b 40 04 mov 0x4(%eax),%eax - 821: c1 e0 03 shl $0x3,%eax - 824: 01 45 f4 add %eax,-0xc(%ebp) - p->s.size = nunits; - 827: 8b 45 f4 mov -0xc(%ebp),%eax - 82a: 8b 55 ec mov -0x14(%ebp),%edx - 82d: 89 50 04 mov %edx,0x4(%eax) - } - freep = prevp; - 830: 8b 45 f0 mov -0x10(%ebp),%eax - 833: a3 40 0b 00 00 mov %eax,0xb40 - return (void*)(p + 1); - 838: 8b 45 f4 mov -0xc(%ebp),%eax - 83b: 83 c0 08 add $0x8,%eax - 83e: eb 3b jmp 87b - } - if(p == freep) - 840: a1 40 0b 00 00 mov 0xb40,%eax - 845: 39 45 f4 cmp %eax,-0xc(%ebp) - 848: 75 1e jne 868 - if((p = morecore(nunits)) == 0) - 84a: 83 ec 0c sub $0xc,%esp - 84d: ff 75 ec pushl -0x14(%ebp) - 850: e8 e5 fe ff ff call 73a - 855: 83 c4 10 add $0x10,%esp - 858: 89 45 f4 mov %eax,-0xc(%ebp) - 85b: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 85f: 75 07 jne 868 - return 0; - 861: b8 00 00 00 00 mov $0x0,%eax - 866: eb 13 jmp 87b - nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - if((prevp = freep) == 0){ - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 868: 8b 45 f4 mov -0xc(%ebp),%eax - 86b: 89 45 f0 mov %eax,-0x10(%ebp) - 86e: 8b 45 f4 mov -0xc(%ebp),%eax - 871: 8b 00 mov (%eax),%eax - 873: 89 45 f4 mov %eax,-0xc(%ebp) - return (void*)(p + 1); - } - if(p == freep) - if((p = morecore(nunits)) == 0) - return 0; - } - 876: e9 6d ff ff ff jmp 7e8 -} - 87b: c9 leave - 87c: c3 ret diff --git a/xv6-public/init.d b/xv6-public/init.d deleted file mode 100755 index ee304c8..0000000 --- a/xv6-public/init.d +++ /dev/null @@ -1 +0,0 @@ -init.o: init.c /usr/include/stdc-predef.h types.h stat.h user.h fcntl.h diff --git a/xv6-public/init.o b/xv6-public/init.o deleted file mode 100755 index 5512d6d0f86915d3230ec2e8be384fe623f6510f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3972 zcma)9YiL|m9zW;andCMzc{SFm^)c~T!8@^SthH@?)fnOyU0u4Xf{!~hH#0Yxxih_U zCrxXs)lsmh%c7_tB7W3GK?IjYS=bMp6z}(^wd8OU)f#E%*t80O26K-yO^I{4qGEQwH$KJN|ROLiOJL5 zW2eR8&B#@|c)gv*&NVc0$f_~%RBl@z@!dumrq&xyOfGegEr|u^naQO+lcziXJypZ> zm{w7{Cd$pQ-K_f}2!nWcp&ffs9E8wGtFqOFyjSvzhYGWf?tNmvi3-`Q40Lg zK5-g_w^ZhgWWD9xP@GBn5~f=#)0>6LvU)G3yL3jCl%0ZPXR<*Ui;Ns&bWYx~CRW;T z%C>@vko~l|_?^618TyOgYIV@HAfhKpm8uUa{P&LH?;k1#DJ`HTEg0tcyK;R zIwXeW1TEPlVp!fvsV9;0ax?quPo%FIsRlz16Cpn=H`1jyaS?J@UNJC|vj?^ez#@lw zV7px8ayLSSMb)e$M5ZWj%G(3Gb9-`E<)=sJd~?ssx8~&tmUUd%4lUCo783M8RE~+* zd*TU+ZnweFk#c&35gSIu^vD=aSl=Kzn}#O05_D7E>O)~yceq#e)SpEhs-|qJOAaQn z4Wu^z|N4_@?9Vvs)5^;uzxq?5akh|R$ouimZLXQJp#3#k?xwGC&Snj0% zBrJhZmgvL)Mbv$X4?&9nn!%z~#J!}Co7N;QMtD%!uR<&3nSp+^>Yl{IG6tWV`sEmbw=;6I=@3Z=3IguEqgxidD6-vU$ffxHydV@)cOEG0D~uO!C~hyfjU8;_PUufm{m_qsGDI&b z*CrNr?R0mJ7u+iTDu=vi#)aoy*B0EFu<5qwN2b&X>bS5Hp&cVWcD;JwwRwrTGxJ{L z#*tT^TQ9m^o5ODSVcbr_n~flLXCklRyR9bX;zuSe61c6X8T;k98HvVR*sO@LPCFW_ zH_KjqtlVhDJ9cazTbSSJwmPMHP!@-HN40CsC@!ojPb)&=8R13MdBK|%r9!;JdGtSK+O$7QdjM5xKyTw zvQ|gz8?^OCEVd6fVy`5MC{=Bs0GKsTi>0NeuKyGMY^4`ym^irbm$AI2ldG7C<&UO=sX&Afw6H zu-8|OuQDja5Of?Le?*z_9R+V^zp-6>`C9@H=qp`iC{mlB(k85Oz^Ci87FFlW=sd=z} zQ0|?*I-fKC!@*qOEi7bbR5OyFNSl$BelxMy0g!8z9AGXJwB5UZmTG*&xr5S zM-TbZR_0IlKpDkPk-dD16Q!+o>WYKCsxpknlb<46?VJ^bEx7V4WUCpcWma*8>{Tnw z{6ouUpL=N-8k3O|-H7?6_XO+6-%^GsUt|Oz<w4lUhMxejaxNdM?{_X jXqopu{hrtOmd5urex&g`jjFC_xL-Lg^)>+ukS*Y^-76Ww diff --git a/xv6-public/init.sym b/xv6-public/init.sym deleted file mode 100755 index 604baa6..0000000 --- a/xv6-public/init.sym +++ /dev/null @@ -1,62 +0,0 @@ -00000000 .text -0000087d .rodata -000008d4 .eh_frame -00000b1c .data -00000b38 .bss -00000000 .comment -00000000 .debug_aranges -00000000 .debug_info -00000000 .debug_abbrev -00000000 .debug_line -00000000 .debug_str -00000000 .debug_loc -00000000 init.c -00000000 ulib.c -000000ff stosb -00000000 printf.c -000003f4 putc -00000416 printint -00000b24 digits.1372 -00000000 umalloc.c -00000b38 base -00000b40 freep -0000073a morecore -00000000 -00000124 strcpy -000004c9 printf -00000b1c argv -0000030f memmove -0000039c mknod -00000207 gets -000003d4 getpid -0000079a malloc -000003e4 sleep -00000364 pipe -00000374 write -000003ac fstat -00000384 kill -000003c4 chdir -0000038c exec -0000035c wait -0000036c read -000003a4 unlink -0000034c fork -000003dc sbrk -000003ec uptime -00000b35 __bss_start -000001ba memset -00000000 main -00000154 strcmp -000003cc dup -00000275 stat -00000b35 _edata -00000b44 _end -000003b4 link -00000354 exit -000002c2 atoi -00000193 strlen -00000394 open -000001d4 strchr -000003bc mkdir -0000037c close -00000659 free diff --git a/xv6-public/initcode.asm b/xv6-public/initcode.asm deleted file mode 100755 index 3d5dae2..0000000 --- a/xv6-public/initcode.asm +++ /dev/null @@ -1,43 +0,0 @@ - -initcode.o: file format elf32-i386 - - -Disassembly of section .text: - -00000000 : - - -# exec(init, argv) -.globl start -start: - pushl $argv - 0: 68 24 00 00 00 push $0x24 - pushl $init - 5: 68 1c 00 00 00 push $0x1c - pushl $0 // where caller pc would be - a: 6a 00 push $0x0 - movl $SYS_exec, %eax - c: b8 07 00 00 00 mov $0x7,%eax - int $T_SYSCALL - 11: cd 40 int $0x40 - -00000013 : - -# for(;;) exit(); -exit: - movl $SYS_exit, %eax - 13: b8 02 00 00 00 mov $0x2,%eax - int $T_SYSCALL - 18: cd 40 int $0x40 - jmp exit - 1a: eb f7 jmp 13 - -0000001c : - 1c: 2f das - 1d: 69 6e 69 74 00 00 90 imul $0x90000074,0x69(%esi),%ebp - -00000024 : - 24: 1c 00 sbb $0x0,%al - 26: 00 00 add %al,(%eax) - 28: 00 00 add %al,(%eax) - ... diff --git a/xv6-public/initcode.d b/xv6-public/initcode.d deleted file mode 100755 index ab1af4d..0000000 --- a/xv6-public/initcode.d +++ /dev/null @@ -1 +0,0 @@ -initcode.o: initcode.S syscall.h traps.h diff --git a/xv6-public/initcode.o b/xv6-public/initcode.o deleted file mode 100755 index 850fcb53b3d76bfac9cf6bd849678364d88cb8ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1308 zcma)6&1w@-6h1eTwyCByX+?wzMrfg+&PZC^2`%`uP*f-`veC{YV-iV|c4iXdN*}=o zaN|3;=+Xz!w{WKm7lI2ne&5YKlPL&#;N0__|1foq38i-h%PToug7~s`TC(EXub@BdXCm+DCEWp++e~S{{UAJ z!@XH_u{^8d>}6-)fLwN%;xinVAy>f6XIurm<#Z2{bZFQ4qUUfOCdU6Oj`L^^s~m#& z2^^{K7WCqLUojBtb3UGv&UY7Ba{%Q7_z8g{_3c3~*87eE4cJ(Z*H-I21=buu`2oI2 z;7ENDbj5U4pfm^^aaPiEaItR{!`EPA-*aH?TL;#?1C(vlJ0WnSy(njQbLRMoq)&jW z;PYVCV}154*82#@CD@d-p6Y*-XJ0?-6)RFN+dbIKla0N1`rf%ioN2w_&mn+kcYbd1 z&g>NZ`XXmB9(Ii1rc`71FzHV04?yB6{x)eACiv&rx%hYCJD}u@l)jVJjzg+a$7ZoE N{XFYD4;Mr2e*oO1tKcBpiNXm! zfe+x&&)_HeB|ShTBn}+fH@lw3MLl$+oq2EG?5ua!d;WfZM=3>O1#(DO3(2dDw5X2! z8dYe<=$~Z*;(9ioAQmx>U$R?<`%2fG{JwQvFyY6&7e--9bjd0kN7n32157`Qi1q+7 zT|Ud`+@?G11?~ZPqa^kQ!>%59-ILR_*=%@|@taqtBYzNfY4_t{efyx^a2qXB7pg|p znVOncPI;-kQeG&b{ia#s1-w!ZbF=W~Jg}Ui+%nLKO6FUfifXsLcBAbT=21>=a(0qx zA2E$>JQkD&la$}U zz7saHMGK9;fUg^5T{*+A5xJk(H-Jw<5Jh{N!z|xmJZF%Z)O`RK%#s7Loz-v@Yj!PX!`%hT0h)K7A{QXZcc)wMQ3P!%)9moc9V$x6ezvA>YSk?J!W$vF}fw`Qv z)R+G3k26L3`Rf@XKM`w+c;E6K_%s&57czBvIyS-c`M%|TtEgXn#N9`{X{Q>`_0zw4 fNILG14X0p&huP`)NzzGD9RmkFooa-rM>g{t>&Rv( diff --git a/xv6-public/ioapic.d b/xv6-public/ioapic.d deleted file mode 100755 index 997e68a..0000000 --- a/xv6-public/ioapic.d +++ /dev/null @@ -1 +0,0 @@ -ioapic.o: ioapic.c /usr/include/stdc-predef.h types.h defs.h traps.h diff --git a/xv6-public/ioapic.o b/xv6-public/ioapic.o deleted file mode 100755 index 7f730db2829857fc351d1bbf95752f74d0751da3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcma)9ZEPGz8J^j_vp2r8eP=s~OHz8pn1r-v*_n5CX7AhMC%z!16o#a*MN1Om?JbdIpMu?Do9GqO%h!KK@$$5@oQb$& znQvVCFY4*^@>FD5TJKk$kF7S6@B9?OZzNSlvHJ08x%T|V#>Ud?iC5P$gBwsUkKZ^g z)}A)X{^jxY?yJhb`|9eU@%1pXw4PpI{Mtv#Df7noO^WXxy*z$%X*Jg=Fp1^Yl;FtK zrFG|lskKv)Yg4%@p+7CA*2W^k()djYzv|ZfqF?dDgE@aT=hrK{!kl-e;g)h?HK(n!hjNu_ zm~(Sqnd%VzmJs-X64FO6PoN&B&`5V`wC;dl$-B_oiS}NC)s9|RBk-{7Nou6?ARs}f zKDqOIfMnp!3wi4xSZhEeYwoO&pQOPWNVLrY=({L>)!3UCPN`x;eLt z$=;z9>RdoL{dc7&dpXvzwrB25)1@QX%w!=nrH6EcNVj4(MRX!U55|bDf;^fw$u~K6 z?`x&T)G`oF9K`JMcO+`E7thesvK&nxP7Bc+S8$NNZma~CWb5ZJBP?!w(8FpX+mp)D z-_MmLp%B>UVS>owfOm-76yI=&+{E+&D5A^+)Db@s@eYy2wnW1rau>(rC=Y8Lk>@MN zBfhQphC}3DjK}>L@=qdrNW6k3#T4PMS`APXqJI<(W`Z`Clnvc1+G#YH3EEr(tB3>t z4UK~n*CO5_-hmb3#E5)R;t#k}`JofdHENz()Lulh)O4l%u&Wa~=qVP}1+m*8ANFWbJ< z_W1DV%80Y#ykc1xt-eqV!d#&Xhdi*UL3gTyO(X ztOanIYo$=ySvPdW#C_AbvE07GJ%!<1zC6M%Y*f6_d9UIHei5P@6cE)3qb!CR^F5S-W!__srmEyuJmZaFMWI+Nv#g?k zj|Z=SCCt}DlrW0%79LVH<~;sSx($9lOruMNY~&q)d~8B-V*yMB}3{TM9A08Pfvg&cpr zk21Iuq2u%6ifcaKB6t%6R-8e;OJp<|TL?LxFP)9no%wKwHuHTKJY%@tr1y~T36lge zS+*xM8ox^@Vh?nNjNh|R#KOf>EOv~H?HACIH>LU!{1|J<)b}|k;`8XkJaW)+9$=gE zAaC{*SaBzUu9DGY#*L3j)7SC$p$6qv@FpMEonyxHy^hZ;*4&WEXJmtMeL}p)e>hFr z{BMi-<0DW`s9G~1`u33OxyVP~8u9G($EJ&s-F%xPrLEqymV>=%B^l41)goK%jJS+R z$H-PYvZb)qipAw_aXUoTjx8(R-`EY@i}n&)4=O$aG{kl0dufRBaU%dJPoiB%;~CBP z);$zmNU^&qx@|Vy;ruTa-QbZL7o54pBZa=?qvw^_0Gu(A=N@rTBcGFB#C#6w&k?Z+ z`G-oj3-Lpsg-!GhW%%(-k=R6h*Ch5BLKJeJQND$U&3~&#uA7AOXSAK`M8AU?k7_)j z@qUfxHS$}L{`@#3K2Jpc7c~Bgh;sj4+yA8XZ)yCCwtt}QTd>s3lOZBcpT>S7^6+mD z@qorrBK#+`e1eEL_5TU@O)bxBwl~9 nEscLCVzEEe@^<86epL^gG2Bzke_Ue@h;K!4Oyk2EFKPTY1TtB& diff --git a/xv6-public/kalloc.d b/xv6-public/kalloc.d deleted file mode 100755 index 512c5db..0000000 --- a/xv6-public/kalloc.d +++ /dev/null @@ -1,2 +0,0 @@ -kalloc.o: kalloc.c /usr/include/stdc-predef.h types.h defs.h param.h \ - memlayout.h mmu.h spinlock.h diff --git a/xv6-public/kalloc.o b/xv6-public/kalloc.o deleted file mode 100755 index 3bc8bb1cffc94ac3cfb3e43575b791f7fed2bf3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5600 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 diff --git a/xv6-public/kbd.d b/xv6-public/kbd.d deleted file mode 100755 index 92532ba..0000000 --- a/xv6-public/kbd.d +++ /dev/null @@ -1 +0,0 @@ -kbd.o: kbd.c /usr/include/stdc-predef.h types.h x86.h defs.h kbd.h diff --git a/xv6-public/kbd.o b/xv6-public/kbd.o deleted file mode 100755 index 3c3c386b1c2ecd07bca4bf0d70ae07eb531182cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5752 zcmds5TWnOv8J;;e9J~DrErTBK2hO>I8*OvS{2L}(?yfmHTdzs*wmr8 z*)td)3;#GiHu%oi>G(wWLVV)#yGq%xzx&EBCMG5Z-t&hq3=hVy55=z!jLK8PrJ6S( zp167sV(i~{Ci%wYDwu^apPLuij23=U*(L_TQ%-QHh= zcF#foK>S8zD1Jky(;OHJ^<%OSK?0& zc@t+=_=ZS@{$HbJE?w5rdSBb}6)TrS*O=8`J7^W`!=-e-@9`&VM55T;lj_}nAann` zed38Dhm!qWx$NRtvsfr5PZ`~#@UjTbmc+h*6pYeG&EIp>e5>MjzZV~gkHv34{KJ*2 zw`%`^Wag~)d*;mj>b(o+FW9@ttp4(&@f|yN@9NyP{i$O$V*MizY~1wVLz}m(ntfax z-SgOnuXJpEc=g(K|3~w`DK(9^1*S~BeOh(6L5MmboBY8lv!*sgt2^(Q;hS#M*9q~b zn>u~*>?mC#(&v}YiT`h}KhGE+Di0LYU*VW@jvc?`)gkwz38Jz*tIt5A4~$PPVe79t z12A4AZFH!%YCR=8N&8eQ%>`im>0FnPe%T3{%yLFnmk@a*)PZ5u5{*L0Zb~ zqDp?9qpFgP0QSlNS5QZR8k|u*7kq#d5y27~qhJl*I<%@y;^|PYmmq3 zZ<>@p2R5?75Pu1nqH@KI&8=^$_0`X;Z|G7!4j(-UmX;4@M* z%B2WVtH*&$CM0EN6T{Zc5}i%WwU|*DgXCz#-cXZ<*x=QyR-kI93=0!v z2-{EO<^gRI?^JZjByz{m2A~T0FQHOKj5xGOJOD?AD49fV25-L>=vSgjv7Mkz?TYEy z48*EDiq=AfDd8Y0ydEVUal`~}K#Ga4I%2|pXADO{s&G$*rtc1z2$=0p8$ z(Y{hwCY==B2|FQ5xneq%v$`Y6-b6v<@`Y?7lTGxAVsE}+N6K2B6(wb&Jkug+D??|h zB^pql%y(PpjOdDj7MemO4DE{PBNh`QN-B!5^QlzEQudp+?uu-Pw8mD(mPMl37B+S% zXRS$DIjfLPf<=hlHAr-{tu+!&;kWx>qR=n|B-T|dYS!v1rS_(CJ$Vu9R&=7Pt6=rJ9Cn)5Fi}Y4Qr4ut znRL!_tr1ehlKCu?EMhq%Foxtri#8JKxUqWos*H0E|6;itc1(%7J%O#L?)45*>4-B? zt4X*8i}5mOt_l0|+s7d-7HFP_C(AID4FQK{+pfvEK(D`-;V1$b{jsm>k563sb^VQC zpp|o`LaS#0?A$`T-*8~MxMVAMZ`@%7~n0BE-lNby4qBIFUcSSPlET3@4@NFA7mUKx|GLfgLeCX6nEf0e2s)Iu1>vlTp{o= z_+vilkFQyGz9&Jm&k|IYVfg!|>jXSW)*+3q-3~lXr$FWw*Y0@;Jl#e2O^;Yt_dRW= zj&;zqD_=?A-L?KMXm4KjVIKTeIgdtd$9a)<_XCPuADgeKSSib5y%HbmF~dv4EK}3aySK!`M)KO zQzcmQ5%Qdn=J|kCZZ*$Ghnke;SCL0yekJ0?$>2NXoax_NeC5-@k^0mQs#y3Ytqj9* zr&fwj?KCg1{~4x5J{8rg=PFi;PlUxIV3`Y^-%~I`KF;0qntZZi?s#*qS^lX}xm-Q> zruX8;-RrrZm3eGw+sgaO_cOURzERZ0iRd(BOxHwPk<5MpI)*BhNmG zW#O41@hxx#h}>ty+lkm;Tm#}PB8=|UdhRdUsdE?@*Ze~o`I4nRMMVDt8u=~Bun>o} z{yB}`(s-T-`&Tu-PK3S6C;Yul9(j0=2!4c!dH!14eW>Ms)cj`}`9adJ$vgoU5z&9S zM)gpJyhH0Z5)pU1=J|T2y~;DUuUabSpEcG2C S{&qdi2oMid(XMfy#=il)r=ULo diff --git a/xv6-public/kernel.asm b/xv6-public/kernel.asm deleted file mode 100755 index 688f677..0000000 --- a/xv6-public/kernel.asm +++ /dev/null @@ -1,17918 +0,0 @@ - -kernel: file format elf32-i386 - - -Disassembly of section .text: - -80100000 : -80100000: 02 b0 ad 1b 00 00 add 0x1bad(%eax),%dh -80100006: 00 00 add %al,(%eax) -80100008: fe 4f 52 decb 0x52(%edi) -8010000b: e4 0f in $0xf,%al - -8010000c : - -# Entering xv6 on boot processor, with paging off. -.globl entry -entry: - # Turn on page size extension for 4Mbyte pages - movl %cr4, %eax -8010000c: 0f 20 e0 mov %cr4,%eax - orl $(CR4_PSE), %eax -8010000f: 83 c8 10 or $0x10,%eax - movl %eax, %cr4 -80100012: 0f 22 e0 mov %eax,%cr4 - # Set page directory - movl $(V2P_WO(entrypgdir)), %eax -80100015: b8 00 a0 10 00 mov $0x10a000,%eax - movl %eax, %cr3 -8010001a: 0f 22 d8 mov %eax,%cr3 - # Turn on paging. - movl %cr0, %eax -8010001d: 0f 20 c0 mov %cr0,%eax - orl $(CR0_PG|CR0_WP), %eax -80100020: 0d 00 00 01 80 or $0x80010000,%eax - movl %eax, %cr0 -80100025: 0f 22 c0 mov %eax,%cr0 - - # Set up the stack pointer. - movl $(stack + KSTACKSIZE), %esp -80100028: bc 70 c6 10 80 mov $0x8010c670,%esp - - # Jump to main(), and switch to executing at - # high addresses. The indirect call is needed because - # the assembler produces a PC-relative instruction - # for a direct jump. - mov $main, %eax -8010002d: b8 21 38 10 80 mov $0x80103821,%eax - jmp *%eax -80100032: ff e0 jmp *%eax - -80100034 : - struct buf head; -} bcache; - -void -binit(void) -{ -80100034: 55 push %ebp -80100035: 89 e5 mov %esp,%ebp -80100037: 83 ec 18 sub $0x18,%esp - struct buf *b; - - initlock(&bcache.lock, "bcache"); -8010003a: 83 ec 08 sub $0x8,%esp -8010003d: 68 88 84 10 80 push $0x80108488 -80100042: 68 80 c6 10 80 push $0x8010c680 -80100047: e8 0e 4f 00 00 call 80104f5a -8010004c: 83 c4 10 add $0x10,%esp - -//PAGEBREAK! - // Create linked list of buffers - bcache.head.prev = &bcache.head; -8010004f: c7 05 90 05 11 80 84 movl $0x80110584,0x80110590 -80100056: 05 11 80 - bcache.head.next = &bcache.head; -80100059: c7 05 94 05 11 80 84 movl $0x80110584,0x80110594 -80100060: 05 11 80 - for(b = bcache.buf; b < bcache.buf+NBUF; b++){ -80100063: c7 45 f4 b4 c6 10 80 movl $0x8010c6b4,-0xc(%ebp) -8010006a: eb 3a jmp 801000a6 - b->next = bcache.head.next; -8010006c: 8b 15 94 05 11 80 mov 0x80110594,%edx -80100072: 8b 45 f4 mov -0xc(%ebp),%eax -80100075: 89 50 10 mov %edx,0x10(%eax) - b->prev = &bcache.head; -80100078: 8b 45 f4 mov -0xc(%ebp),%eax -8010007b: c7 40 0c 84 05 11 80 movl $0x80110584,0xc(%eax) - b->dev = -1; -80100082: 8b 45 f4 mov -0xc(%ebp),%eax -80100085: c7 40 04 ff ff ff ff movl $0xffffffff,0x4(%eax) - bcache.head.next->prev = b; -8010008c: a1 94 05 11 80 mov 0x80110594,%eax -80100091: 8b 55 f4 mov -0xc(%ebp),%edx -80100094: 89 50 0c mov %edx,0xc(%eax) - bcache.head.next = b; -80100097: 8b 45 f4 mov -0xc(%ebp),%eax -8010009a: a3 94 05 11 80 mov %eax,0x80110594 - -//PAGEBREAK! - // Create linked list of buffers - bcache.head.prev = &bcache.head; - bcache.head.next = &bcache.head; - for(b = bcache.buf; b < bcache.buf+NBUF; b++){ -8010009f: 81 45 f4 18 02 00 00 addl $0x218,-0xc(%ebp) -801000a6: 81 7d f4 84 05 11 80 cmpl $0x80110584,-0xc(%ebp) -801000ad: 72 bd jb 8010006c - b->prev = &bcache.head; - b->dev = -1; - bcache.head.next->prev = b; - bcache.head.next = b; - } -} -801000af: c9 leave -801000b0: c3 ret - -801000b1 : -// Look through buffer cache for block on device dev. -// If not found, allocate a buffer. -// In either case, return B_BUSY buffer. -static struct buf* -bget(uint dev, uint blockno) -{ -801000b1: 55 push %ebp -801000b2: 89 e5 mov %esp,%ebp -801000b4: 83 ec 18 sub $0x18,%esp - struct buf *b; - - acquire(&bcache.lock); -801000b7: 83 ec 0c sub $0xc,%esp -801000ba: 68 80 c6 10 80 push $0x8010c680 -801000bf: e8 b7 4e 00 00 call 80104f7b -801000c4: 83 c4 10 add $0x10,%esp - - loop: - // Is the block already cached? - for(b = bcache.head.next; b != &bcache.head; b = b->next){ -801000c7: a1 94 05 11 80 mov 0x80110594,%eax -801000cc: 89 45 f4 mov %eax,-0xc(%ebp) -801000cf: eb 67 jmp 80100138 - if(b->dev == dev && b->blockno == blockno){ -801000d1: 8b 45 f4 mov -0xc(%ebp),%eax -801000d4: 8b 40 04 mov 0x4(%eax),%eax -801000d7: 3b 45 08 cmp 0x8(%ebp),%eax -801000da: 75 53 jne 8010012f -801000dc: 8b 45 f4 mov -0xc(%ebp),%eax -801000df: 8b 40 08 mov 0x8(%eax),%eax -801000e2: 3b 45 0c cmp 0xc(%ebp),%eax -801000e5: 75 48 jne 8010012f - if(!(b->flags & B_BUSY)){ -801000e7: 8b 45 f4 mov -0xc(%ebp),%eax -801000ea: 8b 00 mov (%eax),%eax -801000ec: 83 e0 01 and $0x1,%eax -801000ef: 85 c0 test %eax,%eax -801000f1: 75 27 jne 8010011a - b->flags |= B_BUSY; -801000f3: 8b 45 f4 mov -0xc(%ebp),%eax -801000f6: 8b 00 mov (%eax),%eax -801000f8: 83 c8 01 or $0x1,%eax -801000fb: 89 c2 mov %eax,%edx -801000fd: 8b 45 f4 mov -0xc(%ebp),%eax -80100100: 89 10 mov %edx,(%eax) - release(&bcache.lock); -80100102: 83 ec 0c sub $0xc,%esp -80100105: 68 80 c6 10 80 push $0x8010c680 -8010010a: e8 d2 4e 00 00 call 80104fe1 -8010010f: 83 c4 10 add $0x10,%esp - return b; -80100112: 8b 45 f4 mov -0xc(%ebp),%eax -80100115: e9 98 00 00 00 jmp 801001b2 - } - sleep(b, &bcache.lock); -8010011a: 83 ec 08 sub $0x8,%esp -8010011d: 68 80 c6 10 80 push $0x8010c680 -80100122: ff 75 f4 pushl -0xc(%ebp) -80100125: e8 61 4b 00 00 call 80104c8b -8010012a: 83 c4 10 add $0x10,%esp - goto loop; -8010012d: eb 98 jmp 801000c7 - - acquire(&bcache.lock); - - loop: - // Is the block already cached? - for(b = bcache.head.next; b != &bcache.head; b = b->next){ -8010012f: 8b 45 f4 mov -0xc(%ebp),%eax -80100132: 8b 40 10 mov 0x10(%eax),%eax -80100135: 89 45 f4 mov %eax,-0xc(%ebp) -80100138: 81 7d f4 84 05 11 80 cmpl $0x80110584,-0xc(%ebp) -8010013f: 75 90 jne 801000d1 - } - - // Not cached; recycle some non-busy and clean buffer. - // "clean" because B_DIRTY and !B_BUSY means log.c - // hasn't yet committed the changes to the buffer. - for(b = bcache.head.prev; b != &bcache.head; b = b->prev){ -80100141: a1 90 05 11 80 mov 0x80110590,%eax -80100146: 89 45 f4 mov %eax,-0xc(%ebp) -80100149: eb 51 jmp 8010019c - if((b->flags & B_BUSY) == 0 && (b->flags & B_DIRTY) == 0){ -8010014b: 8b 45 f4 mov -0xc(%ebp),%eax -8010014e: 8b 00 mov (%eax),%eax -80100150: 83 e0 01 and $0x1,%eax -80100153: 85 c0 test %eax,%eax -80100155: 75 3c jne 80100193 -80100157: 8b 45 f4 mov -0xc(%ebp),%eax -8010015a: 8b 00 mov (%eax),%eax -8010015c: 83 e0 04 and $0x4,%eax -8010015f: 85 c0 test %eax,%eax -80100161: 75 30 jne 80100193 - b->dev = dev; -80100163: 8b 45 f4 mov -0xc(%ebp),%eax -80100166: 8b 55 08 mov 0x8(%ebp),%edx -80100169: 89 50 04 mov %edx,0x4(%eax) - b->blockno = blockno; -8010016c: 8b 45 f4 mov -0xc(%ebp),%eax -8010016f: 8b 55 0c mov 0xc(%ebp),%edx -80100172: 89 50 08 mov %edx,0x8(%eax) - b->flags = B_BUSY; -80100175: 8b 45 f4 mov -0xc(%ebp),%eax -80100178: c7 00 01 00 00 00 movl $0x1,(%eax) - release(&bcache.lock); -8010017e: 83 ec 0c sub $0xc,%esp -80100181: 68 80 c6 10 80 push $0x8010c680 -80100186: e8 56 4e 00 00 call 80104fe1 -8010018b: 83 c4 10 add $0x10,%esp - return b; -8010018e: 8b 45 f4 mov -0xc(%ebp),%eax -80100191: eb 1f jmp 801001b2 - } - - // Not cached; recycle some non-busy and clean buffer. - // "clean" because B_DIRTY and !B_BUSY means log.c - // hasn't yet committed the changes to the buffer. - for(b = bcache.head.prev; b != &bcache.head; b = b->prev){ -80100193: 8b 45 f4 mov -0xc(%ebp),%eax -80100196: 8b 40 0c mov 0xc(%eax),%eax -80100199: 89 45 f4 mov %eax,-0xc(%ebp) -8010019c: 81 7d f4 84 05 11 80 cmpl $0x80110584,-0xc(%ebp) -801001a3: 75 a6 jne 8010014b - b->flags = B_BUSY; - release(&bcache.lock); - return b; - } - } - panic("bget: no buffers"); -801001a5: 83 ec 0c sub $0xc,%esp -801001a8: 68 8f 84 10 80 push $0x8010848f -801001ad: e8 aa 03 00 00 call 8010055c -} -801001b2: c9 leave -801001b3: c3 ret - -801001b4 : - -// Return a B_BUSY buf with the contents of the indicated block. -struct buf* -bread(uint dev, uint blockno) -{ -801001b4: 55 push %ebp -801001b5: 89 e5 mov %esp,%ebp -801001b7: 83 ec 18 sub $0x18,%esp - struct buf *b; - - b = bget(dev, blockno); -801001ba: 83 ec 08 sub $0x8,%esp -801001bd: ff 75 0c pushl 0xc(%ebp) -801001c0: ff 75 08 pushl 0x8(%ebp) -801001c3: e8 e9 fe ff ff call 801000b1 -801001c8: 83 c4 10 add $0x10,%esp -801001cb: 89 45 f4 mov %eax,-0xc(%ebp) - if(!(b->flags & B_VALID)) { -801001ce: 8b 45 f4 mov -0xc(%ebp),%eax -801001d1: 8b 00 mov (%eax),%eax -801001d3: 83 e0 02 and $0x2,%eax -801001d6: 85 c0 test %eax,%eax -801001d8: 75 0e jne 801001e8 - iderw(b); -801001da: 83 ec 0c sub $0xc,%esp -801001dd: ff 75 f4 pushl -0xc(%ebp) -801001e0: e8 d4 26 00 00 call 801028b9 -801001e5: 83 c4 10 add $0x10,%esp - } - return b; -801001e8: 8b 45 f4 mov -0xc(%ebp),%eax -} -801001eb: c9 leave -801001ec: c3 ret - -801001ed : - -// Write b's contents to disk. Must be B_BUSY. -void -bwrite(struct buf *b) -{ -801001ed: 55 push %ebp -801001ee: 89 e5 mov %esp,%ebp -801001f0: 83 ec 08 sub $0x8,%esp - if((b->flags & B_BUSY) == 0) -801001f3: 8b 45 08 mov 0x8(%ebp),%eax -801001f6: 8b 00 mov (%eax),%eax -801001f8: 83 e0 01 and $0x1,%eax -801001fb: 85 c0 test %eax,%eax -801001fd: 75 0d jne 8010020c - panic("bwrite"); -801001ff: 83 ec 0c sub $0xc,%esp -80100202: 68 a0 84 10 80 push $0x801084a0 -80100207: e8 50 03 00 00 call 8010055c - b->flags |= B_DIRTY; -8010020c: 8b 45 08 mov 0x8(%ebp),%eax -8010020f: 8b 00 mov (%eax),%eax -80100211: 83 c8 04 or $0x4,%eax -80100214: 89 c2 mov %eax,%edx -80100216: 8b 45 08 mov 0x8(%ebp),%eax -80100219: 89 10 mov %edx,(%eax) - iderw(b); -8010021b: 83 ec 0c sub $0xc,%esp -8010021e: ff 75 08 pushl 0x8(%ebp) -80100221: e8 93 26 00 00 call 801028b9 -80100226: 83 c4 10 add $0x10,%esp -} -80100229: c9 leave -8010022a: c3 ret - -8010022b : - -// Release a B_BUSY buffer. -// Move to the head of the MRU list. -void -brelse(struct buf *b) -{ -8010022b: 55 push %ebp -8010022c: 89 e5 mov %esp,%ebp -8010022e: 83 ec 08 sub $0x8,%esp - if((b->flags & B_BUSY) == 0) -80100231: 8b 45 08 mov 0x8(%ebp),%eax -80100234: 8b 00 mov (%eax),%eax -80100236: 83 e0 01 and $0x1,%eax -80100239: 85 c0 test %eax,%eax -8010023b: 75 0d jne 8010024a - panic("brelse"); -8010023d: 83 ec 0c sub $0xc,%esp -80100240: 68 a7 84 10 80 push $0x801084a7 -80100245: e8 12 03 00 00 call 8010055c - - acquire(&bcache.lock); -8010024a: 83 ec 0c sub $0xc,%esp -8010024d: 68 80 c6 10 80 push $0x8010c680 -80100252: e8 24 4d 00 00 call 80104f7b -80100257: 83 c4 10 add $0x10,%esp - - b->next->prev = b->prev; -8010025a: 8b 45 08 mov 0x8(%ebp),%eax -8010025d: 8b 40 10 mov 0x10(%eax),%eax -80100260: 8b 55 08 mov 0x8(%ebp),%edx -80100263: 8b 52 0c mov 0xc(%edx),%edx -80100266: 89 50 0c mov %edx,0xc(%eax) - b->prev->next = b->next; -80100269: 8b 45 08 mov 0x8(%ebp),%eax -8010026c: 8b 40 0c mov 0xc(%eax),%eax -8010026f: 8b 55 08 mov 0x8(%ebp),%edx -80100272: 8b 52 10 mov 0x10(%edx),%edx -80100275: 89 50 10 mov %edx,0x10(%eax) - b->next = bcache.head.next; -80100278: 8b 15 94 05 11 80 mov 0x80110594,%edx -8010027e: 8b 45 08 mov 0x8(%ebp),%eax -80100281: 89 50 10 mov %edx,0x10(%eax) - b->prev = &bcache.head; -80100284: 8b 45 08 mov 0x8(%ebp),%eax -80100287: c7 40 0c 84 05 11 80 movl $0x80110584,0xc(%eax) - bcache.head.next->prev = b; -8010028e: a1 94 05 11 80 mov 0x80110594,%eax -80100293: 8b 55 08 mov 0x8(%ebp),%edx -80100296: 89 50 0c mov %edx,0xc(%eax) - bcache.head.next = b; -80100299: 8b 45 08 mov 0x8(%ebp),%eax -8010029c: a3 94 05 11 80 mov %eax,0x80110594 - - b->flags &= ~B_BUSY; -801002a1: 8b 45 08 mov 0x8(%ebp),%eax -801002a4: 8b 00 mov (%eax),%eax -801002a6: 83 e0 fe and $0xfffffffe,%eax -801002a9: 89 c2 mov %eax,%edx -801002ab: 8b 45 08 mov 0x8(%ebp),%eax -801002ae: 89 10 mov %edx,(%eax) - wakeup(b); -801002b0: 83 ec 0c sub $0xc,%esp -801002b3: ff 75 08 pushl 0x8(%ebp) -801002b6: e8 b9 4a 00 00 call 80104d74 -801002bb: 83 c4 10 add $0x10,%esp - - release(&bcache.lock); -801002be: 83 ec 0c sub $0xc,%esp -801002c1: 68 80 c6 10 80 push $0x8010c680 -801002c6: e8 16 4d 00 00 call 80104fe1 -801002cb: 83 c4 10 add $0x10,%esp -} -801002ce: c9 leave -801002cf: c3 ret - -801002d0 : -// Routines to let C code use special x86 instructions. - -static inline uchar -inb(ushort port) -{ -801002d0: 55 push %ebp -801002d1: 89 e5 mov %esp,%ebp -801002d3: 83 ec 14 sub $0x14,%esp -801002d6: 8b 45 08 mov 0x8(%ebp),%eax -801002d9: 66 89 45 ec mov %ax,-0x14(%ebp) - uchar data; - - asm volatile("in %1,%0" : "=a" (data) : "d" (port)); -801002dd: 0f b7 45 ec movzwl -0x14(%ebp),%eax -801002e1: 89 c2 mov %eax,%edx -801002e3: ec in (%dx),%al -801002e4: 88 45 ff mov %al,-0x1(%ebp) - return data; -801002e7: 0f b6 45 ff movzbl -0x1(%ebp),%eax -} -801002eb: c9 leave -801002ec: c3 ret - -801002ed : - "memory", "cc"); -} - -static inline void -outb(ushort port, uchar data) -{ -801002ed: 55 push %ebp -801002ee: 89 e5 mov %esp,%ebp -801002f0: 83 ec 08 sub $0x8,%esp -801002f3: 8b 55 08 mov 0x8(%ebp),%edx -801002f6: 8b 45 0c mov 0xc(%ebp),%eax -801002f9: 66 89 55 fc mov %dx,-0x4(%ebp) -801002fd: 88 45 f8 mov %al,-0x8(%ebp) - asm volatile("out %0,%1" : : "a" (data), "d" (port)); -80100300: 0f b6 45 f8 movzbl -0x8(%ebp),%eax -80100304: 0f b7 55 fc movzwl -0x4(%ebp),%edx -80100308: ee out %al,(%dx) -} -80100309: c9 leave -8010030a: c3 ret - -8010030b : - asm volatile("movw %0, %%gs" : : "r" (v)); -} - -static inline void -cli(void) -{ -8010030b: 55 push %ebp -8010030c: 89 e5 mov %esp,%ebp - asm volatile("cli"); -8010030e: fa cli -} -8010030f: 5d pop %ebp -80100310: c3 ret - -80100311 : - int locking; -} cons; - -static void -printint(int xx, int base, int sign) -{ -80100311: 55 push %ebp -80100312: 89 e5 mov %esp,%ebp -80100314: 53 push %ebx -80100315: 83 ec 24 sub $0x24,%esp - static char digits[] = "0123456789abcdef"; - char buf[16]; - int i; - uint x; - - if(sign && (sign = xx < 0)) -80100318: 83 7d 10 00 cmpl $0x0,0x10(%ebp) -8010031c: 74 1c je 8010033a -8010031e: 8b 45 08 mov 0x8(%ebp),%eax -80100321: c1 e8 1f shr $0x1f,%eax -80100324: 0f b6 c0 movzbl %al,%eax -80100327: 89 45 10 mov %eax,0x10(%ebp) -8010032a: 83 7d 10 00 cmpl $0x0,0x10(%ebp) -8010032e: 74 0a je 8010033a - x = -xx; -80100330: 8b 45 08 mov 0x8(%ebp),%eax -80100333: f7 d8 neg %eax -80100335: 89 45 f0 mov %eax,-0x10(%ebp) -80100338: eb 06 jmp 80100340 - else - x = xx; -8010033a: 8b 45 08 mov 0x8(%ebp),%eax -8010033d: 89 45 f0 mov %eax,-0x10(%ebp) - - i = 0; -80100340: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - do{ - buf[i++] = digits[x % base]; -80100347: 8b 4d f4 mov -0xc(%ebp),%ecx -8010034a: 8d 41 01 lea 0x1(%ecx),%eax -8010034d: 89 45 f4 mov %eax,-0xc(%ebp) -80100350: 8b 5d 0c mov 0xc(%ebp),%ebx -80100353: 8b 45 f0 mov -0x10(%ebp),%eax -80100356: ba 00 00 00 00 mov $0x0,%edx -8010035b: f7 f3 div %ebx -8010035d: 89 d0 mov %edx,%eax -8010035f: 0f b6 80 04 90 10 80 movzbl -0x7fef6ffc(%eax),%eax -80100366: 88 44 0d e0 mov %al,-0x20(%ebp,%ecx,1) - }while((x /= base) != 0); -8010036a: 8b 5d 0c mov 0xc(%ebp),%ebx -8010036d: 8b 45 f0 mov -0x10(%ebp),%eax -80100370: ba 00 00 00 00 mov $0x0,%edx -80100375: f7 f3 div %ebx -80100377: 89 45 f0 mov %eax,-0x10(%ebp) -8010037a: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) -8010037e: 75 c7 jne 80100347 - - if(sign) -80100380: 83 7d 10 00 cmpl $0x0,0x10(%ebp) -80100384: 74 0e je 80100394 - buf[i++] = '-'; -80100386: 8b 45 f4 mov -0xc(%ebp),%eax -80100389: 8d 50 01 lea 0x1(%eax),%edx -8010038c: 89 55 f4 mov %edx,-0xc(%ebp) -8010038f: c6 44 05 e0 2d movb $0x2d,-0x20(%ebp,%eax,1) - - while(--i >= 0) -80100394: eb 1a jmp 801003b0 - consputc(buf[i]); -80100396: 8d 55 e0 lea -0x20(%ebp),%edx -80100399: 8b 45 f4 mov -0xc(%ebp),%eax -8010039c: 01 d0 add %edx,%eax -8010039e: 0f b6 00 movzbl (%eax),%eax -801003a1: 0f be c0 movsbl %al,%eax -801003a4: 83 ec 0c sub $0xc,%esp -801003a7: 50 push %eax -801003a8: e8 be 03 00 00 call 8010076b -801003ad: 83 c4 10 add $0x10,%esp - }while((x /= base) != 0); - - if(sign) - buf[i++] = '-'; - - while(--i >= 0) -801003b0: 83 6d f4 01 subl $0x1,-0xc(%ebp) -801003b4: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -801003b8: 79 dc jns 80100396 - consputc(buf[i]); -} -801003ba: 8b 5d fc mov -0x4(%ebp),%ebx -801003bd: c9 leave -801003be: c3 ret - -801003bf : -//PAGEBREAK: 50 - -// Print to the console. only understands %d, %x, %p, %s. -void -cprintf(char *fmt, ...) -{ -801003bf: 55 push %ebp -801003c0: 89 e5 mov %esp,%ebp -801003c2: 83 ec 28 sub $0x28,%esp - int i, c, locking; - uint *argp; - char *s; - - locking = cons.locking; -801003c5: a1 14 b6 10 80 mov 0x8010b614,%eax -801003ca: 89 45 e8 mov %eax,-0x18(%ebp) - if(locking) -801003cd: 83 7d e8 00 cmpl $0x0,-0x18(%ebp) -801003d1: 74 10 je 801003e3 - acquire(&cons.lock); -801003d3: 83 ec 0c sub $0xc,%esp -801003d6: 68 e0 b5 10 80 push $0x8010b5e0 -801003db: e8 9b 4b 00 00 call 80104f7b -801003e0: 83 c4 10 add $0x10,%esp - - if (fmt == 0) -801003e3: 8b 45 08 mov 0x8(%ebp),%eax -801003e6: 85 c0 test %eax,%eax -801003e8: 75 0d jne 801003f7 - panic("null fmt"); -801003ea: 83 ec 0c sub $0xc,%esp -801003ed: 68 ae 84 10 80 push $0x801084ae -801003f2: e8 65 01 00 00 call 8010055c - - argp = (uint*)(void*)(&fmt + 1); -801003f7: 8d 45 0c lea 0xc(%ebp),%eax -801003fa: 89 45 f0 mov %eax,-0x10(%ebp) - for(i = 0; (c = fmt[i] & 0xff) != 0; i++){ -801003fd: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) -80100404: e9 1b 01 00 00 jmp 80100524 - if(c != '%'){ -80100409: 83 7d e4 25 cmpl $0x25,-0x1c(%ebp) -8010040d: 74 13 je 80100422 - consputc(c); -8010040f: 83 ec 0c sub $0xc,%esp -80100412: ff 75 e4 pushl -0x1c(%ebp) -80100415: e8 51 03 00 00 call 8010076b -8010041a: 83 c4 10 add $0x10,%esp - continue; -8010041d: e9 fe 00 00 00 jmp 80100520 - } - c = fmt[++i] & 0xff; -80100422: 8b 55 08 mov 0x8(%ebp),%edx -80100425: 83 45 f4 01 addl $0x1,-0xc(%ebp) -80100429: 8b 45 f4 mov -0xc(%ebp),%eax -8010042c: 01 d0 add %edx,%eax -8010042e: 0f b6 00 movzbl (%eax),%eax -80100431: 0f be c0 movsbl %al,%eax -80100434: 25 ff 00 00 00 and $0xff,%eax -80100439: 89 45 e4 mov %eax,-0x1c(%ebp) - if(c == 0) -8010043c: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp) -80100440: 75 05 jne 80100447 - break; -80100442: e9 fd 00 00 00 jmp 80100544 - switch(c){ -80100447: 8b 45 e4 mov -0x1c(%ebp),%eax -8010044a: 83 f8 70 cmp $0x70,%eax -8010044d: 74 47 je 80100496 -8010044f: 83 f8 70 cmp $0x70,%eax -80100452: 7f 13 jg 80100467 -80100454: 83 f8 25 cmp $0x25,%eax -80100457: 0f 84 98 00 00 00 je 801004f5 -8010045d: 83 f8 64 cmp $0x64,%eax -80100460: 74 14 je 80100476 -80100462: e9 9d 00 00 00 jmp 80100504 -80100467: 83 f8 73 cmp $0x73,%eax -8010046a: 74 47 je 801004b3 -8010046c: 83 f8 78 cmp $0x78,%eax -8010046f: 74 25 je 80100496 -80100471: e9 8e 00 00 00 jmp 80100504 - case 'd': - printint(*argp++, 10, 1); -80100476: 8b 45 f0 mov -0x10(%ebp),%eax -80100479: 8d 50 04 lea 0x4(%eax),%edx -8010047c: 89 55 f0 mov %edx,-0x10(%ebp) -8010047f: 8b 00 mov (%eax),%eax -80100481: 83 ec 04 sub $0x4,%esp -80100484: 6a 01 push $0x1 -80100486: 6a 0a push $0xa -80100488: 50 push %eax -80100489: e8 83 fe ff ff call 80100311 -8010048e: 83 c4 10 add $0x10,%esp - break; -80100491: e9 8a 00 00 00 jmp 80100520 - case 'x': - case 'p': - printint(*argp++, 16, 0); -80100496: 8b 45 f0 mov -0x10(%ebp),%eax -80100499: 8d 50 04 lea 0x4(%eax),%edx -8010049c: 89 55 f0 mov %edx,-0x10(%ebp) -8010049f: 8b 00 mov (%eax),%eax -801004a1: 83 ec 04 sub $0x4,%esp -801004a4: 6a 00 push $0x0 -801004a6: 6a 10 push $0x10 -801004a8: 50 push %eax -801004a9: e8 63 fe ff ff call 80100311 -801004ae: 83 c4 10 add $0x10,%esp - break; -801004b1: eb 6d jmp 80100520 - case 's': - if((s = (char*)*argp++) == 0) -801004b3: 8b 45 f0 mov -0x10(%ebp),%eax -801004b6: 8d 50 04 lea 0x4(%eax),%edx -801004b9: 89 55 f0 mov %edx,-0x10(%ebp) -801004bc: 8b 00 mov (%eax),%eax -801004be: 89 45 ec mov %eax,-0x14(%ebp) -801004c1: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) -801004c5: 75 07 jne 801004ce - s = "(null)"; -801004c7: c7 45 ec b7 84 10 80 movl $0x801084b7,-0x14(%ebp) - for(; *s; s++) -801004ce: eb 19 jmp 801004e9 - consputc(*s); -801004d0: 8b 45 ec mov -0x14(%ebp),%eax -801004d3: 0f b6 00 movzbl (%eax),%eax -801004d6: 0f be c0 movsbl %al,%eax -801004d9: 83 ec 0c sub $0xc,%esp -801004dc: 50 push %eax -801004dd: e8 89 02 00 00 call 8010076b -801004e2: 83 c4 10 add $0x10,%esp - printint(*argp++, 16, 0); - break; - case 's': - if((s = (char*)*argp++) == 0) - s = "(null)"; - for(; *s; s++) -801004e5: 83 45 ec 01 addl $0x1,-0x14(%ebp) -801004e9: 8b 45 ec mov -0x14(%ebp),%eax -801004ec: 0f b6 00 movzbl (%eax),%eax -801004ef: 84 c0 test %al,%al -801004f1: 75 dd jne 801004d0 - consputc(*s); - break; -801004f3: eb 2b jmp 80100520 - case '%': - consputc('%'); -801004f5: 83 ec 0c sub $0xc,%esp -801004f8: 6a 25 push $0x25 -801004fa: e8 6c 02 00 00 call 8010076b -801004ff: 83 c4 10 add $0x10,%esp - break; -80100502: eb 1c jmp 80100520 - default: - // Print unknown % sequence to draw attention. - consputc('%'); -80100504: 83 ec 0c sub $0xc,%esp -80100507: 6a 25 push $0x25 -80100509: e8 5d 02 00 00 call 8010076b -8010050e: 83 c4 10 add $0x10,%esp - consputc(c); -80100511: 83 ec 0c sub $0xc,%esp -80100514: ff 75 e4 pushl -0x1c(%ebp) -80100517: e8 4f 02 00 00 call 8010076b -8010051c: 83 c4 10 add $0x10,%esp - break; -8010051f: 90 nop - - if (fmt == 0) - panic("null fmt"); - - argp = (uint*)(void*)(&fmt + 1); - for(i = 0; (c = fmt[i] & 0xff) != 0; i++){ -80100520: 83 45 f4 01 addl $0x1,-0xc(%ebp) -80100524: 8b 55 08 mov 0x8(%ebp),%edx -80100527: 8b 45 f4 mov -0xc(%ebp),%eax -8010052a: 01 d0 add %edx,%eax -8010052c: 0f b6 00 movzbl (%eax),%eax -8010052f: 0f be c0 movsbl %al,%eax -80100532: 25 ff 00 00 00 and $0xff,%eax -80100537: 89 45 e4 mov %eax,-0x1c(%ebp) -8010053a: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp) -8010053e: 0f 85 c5 fe ff ff jne 80100409 - consputc(c); - break; - } - } - - if(locking) -80100544: 83 7d e8 00 cmpl $0x0,-0x18(%ebp) -80100548: 74 10 je 8010055a - release(&cons.lock); -8010054a: 83 ec 0c sub $0xc,%esp -8010054d: 68 e0 b5 10 80 push $0x8010b5e0 -80100552: e8 8a 4a 00 00 call 80104fe1 -80100557: 83 c4 10 add $0x10,%esp -} -8010055a: c9 leave -8010055b: c3 ret - -8010055c : - -void -panic(char *s) -{ -8010055c: 55 push %ebp -8010055d: 89 e5 mov %esp,%ebp -8010055f: 83 ec 38 sub $0x38,%esp - int i; - uint pcs[10]; - - cli(); -80100562: e8 a4 fd ff ff call 8010030b - cons.locking = 0; -80100567: c7 05 14 b6 10 80 00 movl $0x0,0x8010b614 -8010056e: 00 00 00 - cprintf("cpu%d: panic: ", cpu->id); -80100571: 65 a1 00 00 00 00 mov %gs:0x0,%eax -80100577: 0f b6 00 movzbl (%eax),%eax -8010057a: 0f b6 c0 movzbl %al,%eax -8010057d: 83 ec 08 sub $0x8,%esp -80100580: 50 push %eax -80100581: 68 be 84 10 80 push $0x801084be -80100586: e8 34 fe ff ff call 801003bf -8010058b: 83 c4 10 add $0x10,%esp - cprintf(s); -8010058e: 8b 45 08 mov 0x8(%ebp),%eax -80100591: 83 ec 0c sub $0xc,%esp -80100594: 50 push %eax -80100595: e8 25 fe ff ff call 801003bf -8010059a: 83 c4 10 add $0x10,%esp - cprintf("\n"); -8010059d: 83 ec 0c sub $0xc,%esp -801005a0: 68 cd 84 10 80 push $0x801084cd -801005a5: e8 15 fe ff ff call 801003bf -801005aa: 83 c4 10 add $0x10,%esp - getcallerpcs(&s, pcs); -801005ad: 83 ec 08 sub $0x8,%esp -801005b0: 8d 45 cc lea -0x34(%ebp),%eax -801005b3: 50 push %eax -801005b4: 8d 45 08 lea 0x8(%ebp),%eax -801005b7: 50 push %eax -801005b8: e8 75 4a 00 00 call 80105032 -801005bd: 83 c4 10 add $0x10,%esp - for(i=0; i<10; i++) -801005c0: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) -801005c7: eb 1c jmp 801005e5 - cprintf(" %p", pcs[i]); -801005c9: 8b 45 f4 mov -0xc(%ebp),%eax -801005cc: 8b 44 85 cc mov -0x34(%ebp,%eax,4),%eax -801005d0: 83 ec 08 sub $0x8,%esp -801005d3: 50 push %eax -801005d4: 68 cf 84 10 80 push $0x801084cf -801005d9: e8 e1 fd ff ff call 801003bf -801005de: 83 c4 10 add $0x10,%esp - cons.locking = 0; - cprintf("cpu%d: panic: ", cpu->id); - cprintf(s); - cprintf("\n"); - getcallerpcs(&s, pcs); - for(i=0; i<10; i++) -801005e1: 83 45 f4 01 addl $0x1,-0xc(%ebp) -801005e5: 83 7d f4 09 cmpl $0x9,-0xc(%ebp) -801005e9: 7e de jle 801005c9 - cprintf(" %p", pcs[i]); - panicked = 1; // freeze other CPU -801005eb: c7 05 c0 b5 10 80 01 movl $0x1,0x8010b5c0 -801005f2: 00 00 00 - for(;;) - ; -801005f5: eb fe jmp 801005f5 - -801005f7 : -#define CRTPORT 0x3d4 -static ushort *crt = (ushort*)P2V(0xb8000); // CGA memory - -static void -cgaputc(int c) -{ -801005f7: 55 push %ebp -801005f8: 89 e5 mov %esp,%ebp -801005fa: 83 ec 18 sub $0x18,%esp - int pos; - - // Cursor position: col + 80*row. - outb(CRTPORT, 14); -801005fd: 6a 0e push $0xe -801005ff: 68 d4 03 00 00 push $0x3d4 -80100604: e8 e4 fc ff ff call 801002ed -80100609: 83 c4 08 add $0x8,%esp - pos = inb(CRTPORT+1) << 8; -8010060c: 68 d5 03 00 00 push $0x3d5 -80100611: e8 ba fc ff ff call 801002d0 -80100616: 83 c4 04 add $0x4,%esp -80100619: 0f b6 c0 movzbl %al,%eax -8010061c: c1 e0 08 shl $0x8,%eax -8010061f: 89 45 f4 mov %eax,-0xc(%ebp) - outb(CRTPORT, 15); -80100622: 6a 0f push $0xf -80100624: 68 d4 03 00 00 push $0x3d4 -80100629: e8 bf fc ff ff call 801002ed -8010062e: 83 c4 08 add $0x8,%esp - pos |= inb(CRTPORT+1); -80100631: 68 d5 03 00 00 push $0x3d5 -80100636: e8 95 fc ff ff call 801002d0 -8010063b: 83 c4 04 add $0x4,%esp -8010063e: 0f b6 c0 movzbl %al,%eax -80100641: 09 45 f4 or %eax,-0xc(%ebp) - - if(c == '\n') -80100644: 83 7d 08 0a cmpl $0xa,0x8(%ebp) -80100648: 75 30 jne 8010067a - pos += 80 - pos%80; -8010064a: 8b 4d f4 mov -0xc(%ebp),%ecx -8010064d: ba 67 66 66 66 mov $0x66666667,%edx -80100652: 89 c8 mov %ecx,%eax -80100654: f7 ea imul %edx -80100656: c1 fa 05 sar $0x5,%edx -80100659: 89 c8 mov %ecx,%eax -8010065b: c1 f8 1f sar $0x1f,%eax -8010065e: 29 c2 sub %eax,%edx -80100660: 89 d0 mov %edx,%eax -80100662: c1 e0 02 shl $0x2,%eax -80100665: 01 d0 add %edx,%eax -80100667: c1 e0 04 shl $0x4,%eax -8010066a: 29 c1 sub %eax,%ecx -8010066c: 89 ca mov %ecx,%edx -8010066e: b8 50 00 00 00 mov $0x50,%eax -80100673: 29 d0 sub %edx,%eax -80100675: 01 45 f4 add %eax,-0xc(%ebp) -80100678: eb 34 jmp 801006ae - else if(c == BACKSPACE){ -8010067a: 81 7d 08 00 01 00 00 cmpl $0x100,0x8(%ebp) -80100681: 75 0c jne 8010068f - if(pos > 0) --pos; -80100683: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -80100687: 7e 25 jle 801006ae -80100689: 83 6d f4 01 subl $0x1,-0xc(%ebp) -8010068d: eb 1f jmp 801006ae - } else - crt[pos++] = (c&0xff) | 0x0700; // black on white -8010068f: 8b 0d 00 90 10 80 mov 0x80109000,%ecx -80100695: 8b 45 f4 mov -0xc(%ebp),%eax -80100698: 8d 50 01 lea 0x1(%eax),%edx -8010069b: 89 55 f4 mov %edx,-0xc(%ebp) -8010069e: 01 c0 add %eax,%eax -801006a0: 01 c8 add %ecx,%eax -801006a2: 8b 55 08 mov 0x8(%ebp),%edx -801006a5: 0f b6 d2 movzbl %dl,%edx -801006a8: 80 ce 07 or $0x7,%dh -801006ab: 66 89 10 mov %dx,(%eax) - - if((pos/80) >= 24){ // Scroll up. -801006ae: 81 7d f4 7f 07 00 00 cmpl $0x77f,-0xc(%ebp) -801006b5: 7e 4c jle 80100703 - memmove(crt, crt+80, sizeof(crt[0])*23*80); -801006b7: a1 00 90 10 80 mov 0x80109000,%eax -801006bc: 8d 90 a0 00 00 00 lea 0xa0(%eax),%edx -801006c2: a1 00 90 10 80 mov 0x80109000,%eax -801006c7: 83 ec 04 sub $0x4,%esp -801006ca: 68 60 0e 00 00 push $0xe60 -801006cf: 52 push %edx -801006d0: 50 push %eax -801006d1: e8 c0 4b 00 00 call 80105296 -801006d6: 83 c4 10 add $0x10,%esp - pos -= 80; -801006d9: 83 6d f4 50 subl $0x50,-0xc(%ebp) - memset(crt+pos, 0, sizeof(crt[0])*(24*80 - pos)); -801006dd: b8 80 07 00 00 mov $0x780,%eax -801006e2: 2b 45 f4 sub -0xc(%ebp),%eax -801006e5: 8d 14 00 lea (%eax,%eax,1),%edx -801006e8: a1 00 90 10 80 mov 0x80109000,%eax -801006ed: 8b 4d f4 mov -0xc(%ebp),%ecx -801006f0: 01 c9 add %ecx,%ecx -801006f2: 01 c8 add %ecx,%eax -801006f4: 83 ec 04 sub $0x4,%esp -801006f7: 52 push %edx -801006f8: 6a 00 push $0x0 -801006fa: 50 push %eax -801006fb: e8 d7 4a 00 00 call 801051d7 -80100700: 83 c4 10 add $0x10,%esp - } - - outb(CRTPORT, 14); -80100703: 83 ec 08 sub $0x8,%esp -80100706: 6a 0e push $0xe -80100708: 68 d4 03 00 00 push $0x3d4 -8010070d: e8 db fb ff ff call 801002ed -80100712: 83 c4 10 add $0x10,%esp - outb(CRTPORT+1, pos>>8); -80100715: 8b 45 f4 mov -0xc(%ebp),%eax -80100718: c1 f8 08 sar $0x8,%eax -8010071b: 0f b6 c0 movzbl %al,%eax -8010071e: 83 ec 08 sub $0x8,%esp -80100721: 50 push %eax -80100722: 68 d5 03 00 00 push $0x3d5 -80100727: e8 c1 fb ff ff call 801002ed -8010072c: 83 c4 10 add $0x10,%esp - outb(CRTPORT, 15); -8010072f: 83 ec 08 sub $0x8,%esp -80100732: 6a 0f push $0xf -80100734: 68 d4 03 00 00 push $0x3d4 -80100739: e8 af fb ff ff call 801002ed -8010073e: 83 c4 10 add $0x10,%esp - outb(CRTPORT+1, pos); -80100741: 8b 45 f4 mov -0xc(%ebp),%eax -80100744: 0f b6 c0 movzbl %al,%eax -80100747: 83 ec 08 sub $0x8,%esp -8010074a: 50 push %eax -8010074b: 68 d5 03 00 00 push $0x3d5 -80100750: e8 98 fb ff ff call 801002ed -80100755: 83 c4 10 add $0x10,%esp - crt[pos] = ' ' | 0x0700; -80100758: a1 00 90 10 80 mov 0x80109000,%eax -8010075d: 8b 55 f4 mov -0xc(%ebp),%edx -80100760: 01 d2 add %edx,%edx -80100762: 01 d0 add %edx,%eax -80100764: 66 c7 00 20 07 movw $0x720,(%eax) -} -80100769: c9 leave -8010076a: c3 ret - -8010076b : - -void -consputc(int c) -{ -8010076b: 55 push %ebp -8010076c: 89 e5 mov %esp,%ebp -8010076e: 83 ec 08 sub $0x8,%esp - if(panicked){ -80100771: a1 c0 b5 10 80 mov 0x8010b5c0,%eax -80100776: 85 c0 test %eax,%eax -80100778: 74 07 je 80100781 - cli(); -8010077a: e8 8c fb ff ff call 8010030b - for(;;) - ; -8010077f: eb fe jmp 8010077f - } - - if(c == BACKSPACE){ -80100781: 81 7d 08 00 01 00 00 cmpl $0x100,0x8(%ebp) -80100788: 75 29 jne 801007b3 - uartputc('\b'); uartputc(' '); uartputc('\b'); -8010078a: 83 ec 0c sub $0xc,%esp -8010078d: 6a 08 push $0x8 -8010078f: e8 88 63 00 00 call 80106b1c -80100794: 83 c4 10 add $0x10,%esp -80100797: 83 ec 0c sub $0xc,%esp -8010079a: 6a 20 push $0x20 -8010079c: e8 7b 63 00 00 call 80106b1c -801007a1: 83 c4 10 add $0x10,%esp -801007a4: 83 ec 0c sub $0xc,%esp -801007a7: 6a 08 push $0x8 -801007a9: e8 6e 63 00 00 call 80106b1c -801007ae: 83 c4 10 add $0x10,%esp -801007b1: eb 0e jmp 801007c1 - } else - uartputc(c); -801007b3: 83 ec 0c sub $0xc,%esp -801007b6: ff 75 08 pushl 0x8(%ebp) -801007b9: e8 5e 63 00 00 call 80106b1c -801007be: 83 c4 10 add $0x10,%esp - cgaputc(c); -801007c1: 83 ec 0c sub $0xc,%esp -801007c4: ff 75 08 pushl 0x8(%ebp) -801007c7: e8 2b fe ff ff call 801005f7 -801007cc: 83 c4 10 add $0x10,%esp -} -801007cf: c9 leave -801007d0: c3 ret - -801007d1 : - -#define C(x) ((x)-'@') // Control-x - -void -consoleintr(int (*getc)(void)) -{ -801007d1: 55 push %ebp -801007d2: 89 e5 mov %esp,%ebp -801007d4: 83 ec 18 sub $0x18,%esp - int c; - - acquire(&input.lock); -801007d7: 83 ec 0c sub $0xc,%esp -801007da: 68 c0 07 11 80 push $0x801107c0 -801007df: e8 97 47 00 00 call 80104f7b -801007e4: 83 c4 10 add $0x10,%esp - while((c = getc()) >= 0){ -801007e7: e9 3a 01 00 00 jmp 80100926 - switch(c){ -801007ec: 8b 45 f4 mov -0xc(%ebp),%eax -801007ef: 83 f8 10 cmp $0x10,%eax -801007f2: 74 1e je 80100812 -801007f4: 83 f8 10 cmp $0x10,%eax -801007f7: 7f 0a jg 80100803 -801007f9: 83 f8 08 cmp $0x8,%eax -801007fc: 74 65 je 80100863 -801007fe: e9 91 00 00 00 jmp 80100894 -80100803: 83 f8 15 cmp $0x15,%eax -80100806: 74 31 je 80100839 -80100808: 83 f8 7f cmp $0x7f,%eax -8010080b: 74 56 je 80100863 -8010080d: e9 82 00 00 00 jmp 80100894 - case C('P'): // Process listing. - procdump(); -80100812: e8 17 46 00 00 call 80104e2e - break; -80100817: e9 0a 01 00 00 jmp 80100926 - case C('U'): // Kill line. - while(input.e != input.w && - input.buf[(input.e-1) % INPUT_BUF] != '\n'){ - input.e--; -8010081c: a1 7c 08 11 80 mov 0x8011087c,%eax -80100821: 83 e8 01 sub $0x1,%eax -80100824: a3 7c 08 11 80 mov %eax,0x8011087c - consputc(BACKSPACE); -80100829: 83 ec 0c sub $0xc,%esp -8010082c: 68 00 01 00 00 push $0x100 -80100831: e8 35 ff ff ff call 8010076b -80100836: 83 c4 10 add $0x10,%esp - switch(c){ - case C('P'): // Process listing. - procdump(); - break; - case C('U'): // Kill line. - while(input.e != input.w && -80100839: 8b 15 7c 08 11 80 mov 0x8011087c,%edx -8010083f: a1 78 08 11 80 mov 0x80110878,%eax -80100844: 39 c2 cmp %eax,%edx -80100846: 74 16 je 8010085e - input.buf[(input.e-1) % INPUT_BUF] != '\n'){ -80100848: a1 7c 08 11 80 mov 0x8011087c,%eax -8010084d: 83 e8 01 sub $0x1,%eax -80100850: 83 e0 7f and $0x7f,%eax -80100853: 0f b6 80 f4 07 11 80 movzbl -0x7feef80c(%eax),%eax - switch(c){ - case C('P'): // Process listing. - procdump(); - break; - case C('U'): // Kill line. - while(input.e != input.w && -8010085a: 3c 0a cmp $0xa,%al -8010085c: 75 be jne 8010081c - input.buf[(input.e-1) % INPUT_BUF] != '\n'){ - input.e--; - consputc(BACKSPACE); - } - break; -8010085e: e9 c3 00 00 00 jmp 80100926 - case C('H'): case '\x7f': // Backspace - if(input.e != input.w){ -80100863: 8b 15 7c 08 11 80 mov 0x8011087c,%edx -80100869: a1 78 08 11 80 mov 0x80110878,%eax -8010086e: 39 c2 cmp %eax,%edx -80100870: 74 1d je 8010088f - input.e--; -80100872: a1 7c 08 11 80 mov 0x8011087c,%eax -80100877: 83 e8 01 sub $0x1,%eax -8010087a: a3 7c 08 11 80 mov %eax,0x8011087c - consputc(BACKSPACE); -8010087f: 83 ec 0c sub $0xc,%esp -80100882: 68 00 01 00 00 push $0x100 -80100887: e8 df fe ff ff call 8010076b -8010088c: 83 c4 10 add $0x10,%esp - } - break; -8010088f: e9 92 00 00 00 jmp 80100926 - default: - if(c != 0 && input.e-input.r < INPUT_BUF){ -80100894: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -80100898: 0f 84 87 00 00 00 je 80100925 -8010089e: 8b 15 7c 08 11 80 mov 0x8011087c,%edx -801008a4: a1 74 08 11 80 mov 0x80110874,%eax -801008a9: 29 c2 sub %eax,%edx -801008ab: 89 d0 mov %edx,%eax -801008ad: 83 f8 7f cmp $0x7f,%eax -801008b0: 77 73 ja 80100925 - c = (c == '\r') ? '\n' : c; -801008b2: 83 7d f4 0d cmpl $0xd,-0xc(%ebp) -801008b6: 74 05 je 801008bd -801008b8: 8b 45 f4 mov -0xc(%ebp),%eax -801008bb: eb 05 jmp 801008c2 -801008bd: b8 0a 00 00 00 mov $0xa,%eax -801008c2: 89 45 f4 mov %eax,-0xc(%ebp) - input.buf[input.e++ % INPUT_BUF] = c; -801008c5: a1 7c 08 11 80 mov 0x8011087c,%eax -801008ca: 8d 50 01 lea 0x1(%eax),%edx -801008cd: 89 15 7c 08 11 80 mov %edx,0x8011087c -801008d3: 83 e0 7f and $0x7f,%eax -801008d6: 8b 55 f4 mov -0xc(%ebp),%edx -801008d9: 88 90 f4 07 11 80 mov %dl,-0x7feef80c(%eax) - consputc(c); -801008df: 83 ec 0c sub $0xc,%esp -801008e2: ff 75 f4 pushl -0xc(%ebp) -801008e5: e8 81 fe ff ff call 8010076b -801008ea: 83 c4 10 add $0x10,%esp - if(c == '\n' || c == C('D') || input.e == input.r+INPUT_BUF){ -801008ed: 83 7d f4 0a cmpl $0xa,-0xc(%ebp) -801008f1: 74 18 je 8010090b -801008f3: 83 7d f4 04 cmpl $0x4,-0xc(%ebp) -801008f7: 74 12 je 8010090b -801008f9: a1 7c 08 11 80 mov 0x8011087c,%eax -801008fe: 8b 15 74 08 11 80 mov 0x80110874,%edx -80100904: 83 ea 80 sub $0xffffff80,%edx -80100907: 39 d0 cmp %edx,%eax -80100909: 75 1a jne 80100925 - input.w = input.e; -8010090b: a1 7c 08 11 80 mov 0x8011087c,%eax -80100910: a3 78 08 11 80 mov %eax,0x80110878 - wakeup(&input.r); -80100915: 83 ec 0c sub $0xc,%esp -80100918: 68 74 08 11 80 push $0x80110874 -8010091d: e8 52 44 00 00 call 80104d74 -80100922: 83 c4 10 add $0x10,%esp - } - } - break; -80100925: 90 nop -consoleintr(int (*getc)(void)) -{ - int c; - - acquire(&input.lock); - while((c = getc()) >= 0){ -80100926: 8b 45 08 mov 0x8(%ebp),%eax -80100929: ff d0 call *%eax -8010092b: 89 45 f4 mov %eax,-0xc(%ebp) -8010092e: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -80100932: 0f 89 b4 fe ff ff jns 801007ec - } - } - break; - } - } - release(&input.lock); -80100938: 83 ec 0c sub $0xc,%esp -8010093b: 68 c0 07 11 80 push $0x801107c0 -80100940: e8 9c 46 00 00 call 80104fe1 -80100945: 83 c4 10 add $0x10,%esp -} -80100948: c9 leave -80100949: c3 ret - -8010094a : - -int -consoleread(struct inode *ip, char *dst, int n) -{ -8010094a: 55 push %ebp -8010094b: 89 e5 mov %esp,%ebp -8010094d: 83 ec 18 sub $0x18,%esp - uint target; - int c; - - iunlock(ip); -80100950: 83 ec 0c sub $0xc,%esp -80100953: ff 75 08 pushl 0x8(%ebp) -80100956: e8 20 11 00 00 call 80101a7b -8010095b: 83 c4 10 add $0x10,%esp - target = n; -8010095e: 8b 45 10 mov 0x10(%ebp),%eax -80100961: 89 45 f4 mov %eax,-0xc(%ebp) - acquire(&input.lock); -80100964: 83 ec 0c sub $0xc,%esp -80100967: 68 c0 07 11 80 push $0x801107c0 -8010096c: e8 0a 46 00 00 call 80104f7b -80100971: 83 c4 10 add $0x10,%esp - while(n > 0){ -80100974: e9 b2 00 00 00 jmp 80100a2b - while(input.r == input.w){ -80100979: eb 4a jmp 801009c5 - if(proc->killed){ -8010097b: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80100981: 8b 40 24 mov 0x24(%eax),%eax -80100984: 85 c0 test %eax,%eax -80100986: 74 28 je 801009b0 - release(&input.lock); -80100988: 83 ec 0c sub $0xc,%esp -8010098b: 68 c0 07 11 80 push $0x801107c0 -80100990: e8 4c 46 00 00 call 80104fe1 -80100995: 83 c4 10 add $0x10,%esp - ilock(ip); -80100998: 83 ec 0c sub $0xc,%esp -8010099b: ff 75 08 pushl 0x8(%ebp) -8010099e: e8 7b 0f 00 00 call 8010191e -801009a3: 83 c4 10 add $0x10,%esp - return -1; -801009a6: b8 ff ff ff ff mov $0xffffffff,%eax -801009ab: e9 ad 00 00 00 jmp 80100a5d - } - sleep(&input.r, &input.lock); -801009b0: 83 ec 08 sub $0x8,%esp -801009b3: 68 c0 07 11 80 push $0x801107c0 -801009b8: 68 74 08 11 80 push $0x80110874 -801009bd: e8 c9 42 00 00 call 80104c8b -801009c2: 83 c4 10 add $0x10,%esp - - iunlock(ip); - target = n; - acquire(&input.lock); - while(n > 0){ - while(input.r == input.w){ -801009c5: 8b 15 74 08 11 80 mov 0x80110874,%edx -801009cb: a1 78 08 11 80 mov 0x80110878,%eax -801009d0: 39 c2 cmp %eax,%edx -801009d2: 74 a7 je 8010097b - ilock(ip); - return -1; - } - sleep(&input.r, &input.lock); - } - c = input.buf[input.r++ % INPUT_BUF]; -801009d4: a1 74 08 11 80 mov 0x80110874,%eax -801009d9: 8d 50 01 lea 0x1(%eax),%edx -801009dc: 89 15 74 08 11 80 mov %edx,0x80110874 -801009e2: 83 e0 7f and $0x7f,%eax -801009e5: 0f b6 80 f4 07 11 80 movzbl -0x7feef80c(%eax),%eax -801009ec: 0f be c0 movsbl %al,%eax -801009ef: 89 45 f0 mov %eax,-0x10(%ebp) - if(c == C('D')){ // EOF -801009f2: 83 7d f0 04 cmpl $0x4,-0x10(%ebp) -801009f6: 75 19 jne 80100a11 - if(n < target){ -801009f8: 8b 45 10 mov 0x10(%ebp),%eax -801009fb: 3b 45 f4 cmp -0xc(%ebp),%eax -801009fe: 73 0f jae 80100a0f - // Save ^D for next time, to make sure - // caller gets a 0-byte result. - input.r--; -80100a00: a1 74 08 11 80 mov 0x80110874,%eax -80100a05: 83 e8 01 sub $0x1,%eax -80100a08: a3 74 08 11 80 mov %eax,0x80110874 - } - break; -80100a0d: eb 26 jmp 80100a35 -80100a0f: eb 24 jmp 80100a35 - } - *dst++ = c; -80100a11: 8b 45 0c mov 0xc(%ebp),%eax -80100a14: 8d 50 01 lea 0x1(%eax),%edx -80100a17: 89 55 0c mov %edx,0xc(%ebp) -80100a1a: 8b 55 f0 mov -0x10(%ebp),%edx -80100a1d: 88 10 mov %dl,(%eax) - --n; -80100a1f: 83 6d 10 01 subl $0x1,0x10(%ebp) - if(c == '\n') -80100a23: 83 7d f0 0a cmpl $0xa,-0x10(%ebp) -80100a27: 75 02 jne 80100a2b - break; -80100a29: eb 0a jmp 80100a35 - int c; - - iunlock(ip); - target = n; - acquire(&input.lock); - while(n > 0){ -80100a2b: 83 7d 10 00 cmpl $0x0,0x10(%ebp) -80100a2f: 0f 8f 44 ff ff ff jg 80100979 - *dst++ = c; - --n; - if(c == '\n') - break; - } - release(&input.lock); -80100a35: 83 ec 0c sub $0xc,%esp -80100a38: 68 c0 07 11 80 push $0x801107c0 -80100a3d: e8 9f 45 00 00 call 80104fe1 -80100a42: 83 c4 10 add $0x10,%esp - ilock(ip); -80100a45: 83 ec 0c sub $0xc,%esp -80100a48: ff 75 08 pushl 0x8(%ebp) -80100a4b: e8 ce 0e 00 00 call 8010191e -80100a50: 83 c4 10 add $0x10,%esp - - return target - n; -80100a53: 8b 45 10 mov 0x10(%ebp),%eax -80100a56: 8b 55 f4 mov -0xc(%ebp),%edx -80100a59: 29 c2 sub %eax,%edx -80100a5b: 89 d0 mov %edx,%eax -} -80100a5d: c9 leave -80100a5e: c3 ret - -80100a5f : - -int -consolewrite(struct inode *ip, char *buf, int n) -{ -80100a5f: 55 push %ebp -80100a60: 89 e5 mov %esp,%ebp -80100a62: 83 ec 18 sub $0x18,%esp - int i; - - iunlock(ip); -80100a65: 83 ec 0c sub $0xc,%esp -80100a68: ff 75 08 pushl 0x8(%ebp) -80100a6b: e8 0b 10 00 00 call 80101a7b -80100a70: 83 c4 10 add $0x10,%esp - acquire(&cons.lock); -80100a73: 83 ec 0c sub $0xc,%esp -80100a76: 68 e0 b5 10 80 push $0x8010b5e0 -80100a7b: e8 fb 44 00 00 call 80104f7b -80100a80: 83 c4 10 add $0x10,%esp - for(i = 0; i < n; i++) -80100a83: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) -80100a8a: eb 21 jmp 80100aad - consputc(buf[i] & 0xff); -80100a8c: 8b 55 f4 mov -0xc(%ebp),%edx -80100a8f: 8b 45 0c mov 0xc(%ebp),%eax -80100a92: 01 d0 add %edx,%eax -80100a94: 0f b6 00 movzbl (%eax),%eax -80100a97: 0f be c0 movsbl %al,%eax -80100a9a: 0f b6 c0 movzbl %al,%eax -80100a9d: 83 ec 0c sub $0xc,%esp -80100aa0: 50 push %eax -80100aa1: e8 c5 fc ff ff call 8010076b -80100aa6: 83 c4 10 add $0x10,%esp -{ - int i; - - iunlock(ip); - acquire(&cons.lock); - for(i = 0; i < n; i++) -80100aa9: 83 45 f4 01 addl $0x1,-0xc(%ebp) -80100aad: 8b 45 f4 mov -0xc(%ebp),%eax -80100ab0: 3b 45 10 cmp 0x10(%ebp),%eax -80100ab3: 7c d7 jl 80100a8c - consputc(buf[i] & 0xff); - release(&cons.lock); -80100ab5: 83 ec 0c sub $0xc,%esp -80100ab8: 68 e0 b5 10 80 push $0x8010b5e0 -80100abd: e8 1f 45 00 00 call 80104fe1 -80100ac2: 83 c4 10 add $0x10,%esp - ilock(ip); -80100ac5: 83 ec 0c sub $0xc,%esp -80100ac8: ff 75 08 pushl 0x8(%ebp) -80100acb: e8 4e 0e 00 00 call 8010191e -80100ad0: 83 c4 10 add $0x10,%esp - - return n; -80100ad3: 8b 45 10 mov 0x10(%ebp),%eax -} -80100ad6: c9 leave -80100ad7: c3 ret - -80100ad8 : - -void -consoleinit(void) -{ -80100ad8: 55 push %ebp -80100ad9: 89 e5 mov %esp,%ebp -80100adb: 83 ec 08 sub $0x8,%esp - initlock(&cons.lock, "console"); -80100ade: 83 ec 08 sub $0x8,%esp -80100ae1: 68 d3 84 10 80 push $0x801084d3 -80100ae6: 68 e0 b5 10 80 push $0x8010b5e0 -80100aeb: e8 6a 44 00 00 call 80104f5a -80100af0: 83 c4 10 add $0x10,%esp - initlock(&input.lock, "input"); -80100af3: 83 ec 08 sub $0x8,%esp -80100af6: 68 db 84 10 80 push $0x801084db -80100afb: 68 c0 07 11 80 push $0x801107c0 -80100b00: e8 55 44 00 00 call 80104f5a -80100b05: 83 c4 10 add $0x10,%esp - - devsw[CONSOLE].write = consolewrite; -80100b08: c7 05 4c 12 11 80 5f movl $0x80100a5f,0x8011124c -80100b0f: 0a 10 80 - devsw[CONSOLE].read = consoleread; -80100b12: c7 05 48 12 11 80 4a movl $0x8010094a,0x80111248 -80100b19: 09 10 80 - cons.locking = 1; -80100b1c: c7 05 14 b6 10 80 01 movl $0x1,0x8010b614 -80100b23: 00 00 00 - - picenable(IRQ_KBD); -80100b26: 83 ec 0c sub $0xc,%esp -80100b29: 6a 01 push $0x1 -80100b2b: e8 86 33 00 00 call 80103eb6 -80100b30: 83 c4 10 add $0x10,%esp - ioapicenable(IRQ_KBD, 0); -80100b33: 83 ec 08 sub $0x8,%esp -80100b36: 6a 00 push $0x0 -80100b38: 6a 01 push $0x1 -80100b3a: e8 43 1f 00 00 call 80102a82 -80100b3f: 83 c4 10 add $0x10,%esp -} -80100b42: c9 leave -80100b43: c3 ret - -80100b44 : -#include "x86.h" -#include "elf.h" - -int -exec(char *path, char **argv) -{ -80100b44: 55 push %ebp -80100b45: 89 e5 mov %esp,%ebp -80100b47: 81 ec 18 01 00 00 sub $0x118,%esp - struct elfhdr elf; - struct inode *ip; - struct proghdr ph; - pde_t *pgdir, *oldpgdir; - - begin_op(); -80100b4d: e8 90 29 00 00 call 801034e2 - if((ip = namei(path)) == 0){ -80100b52: 83 ec 0c sub $0xc,%esp -80100b55: ff 75 08 pushl 0x8(%ebp) -80100b58: e8 7c 19 00 00 call 801024d9 -80100b5d: 83 c4 10 add $0x10,%esp -80100b60: 89 45 d8 mov %eax,-0x28(%ebp) -80100b63: 83 7d d8 00 cmpl $0x0,-0x28(%ebp) -80100b67: 75 0f jne 80100b78 - end_op(); -80100b69: e8 02 2a 00 00 call 80103570 - return -1; -80100b6e: b8 ff ff ff ff mov $0xffffffff,%eax -80100b73: e9 b9 03 00 00 jmp 80100f31 - } - ilock(ip); -80100b78: 83 ec 0c sub $0xc,%esp -80100b7b: ff 75 d8 pushl -0x28(%ebp) -80100b7e: e8 9b 0d 00 00 call 8010191e -80100b83: 83 c4 10 add $0x10,%esp - pgdir = 0; -80100b86: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp) - - // Check ELF header - if(readi(ip, (char*)&elf, 0, sizeof(elf)) < sizeof(elf)) -80100b8d: 6a 34 push $0x34 -80100b8f: 6a 00 push $0x0 -80100b91: 8d 85 0c ff ff ff lea -0xf4(%ebp),%eax -80100b97: 50 push %eax -80100b98: ff 75 d8 pushl -0x28(%ebp) -80100b9b: e8 e6 12 00 00 call 80101e86 -80100ba0: 83 c4 10 add $0x10,%esp -80100ba3: 83 f8 33 cmp $0x33,%eax -80100ba6: 77 05 ja 80100bad - goto bad; -80100ba8: e9 52 03 00 00 jmp 80100eff - if(elf.magic != ELF_MAGIC) -80100bad: 8b 85 0c ff ff ff mov -0xf4(%ebp),%eax -80100bb3: 3d 7f 45 4c 46 cmp $0x464c457f,%eax -80100bb8: 74 05 je 80100bbf - goto bad; -80100bba: e9 40 03 00 00 jmp 80100eff - - if((pgdir = setupkvm()) == 0) -80100bbf: e8 a8 70 00 00 call 80107c6c -80100bc4: 89 45 d4 mov %eax,-0x2c(%ebp) -80100bc7: 83 7d d4 00 cmpl $0x0,-0x2c(%ebp) -80100bcb: 75 05 jne 80100bd2 - goto bad; -80100bcd: e9 2d 03 00 00 jmp 80100eff - - // Load program into memory. - sz = 0; -80100bd2: c7 45 e0 00 00 00 00 movl $0x0,-0x20(%ebp) - for(i=0, off=elf.phoff; i - if(readi(ip, (char*)&ph, off, sizeof(ph)) != sizeof(ph)) -80100bee: 8b 45 e8 mov -0x18(%ebp),%eax -80100bf1: 6a 20 push $0x20 -80100bf3: 50 push %eax -80100bf4: 8d 85 ec fe ff ff lea -0x114(%ebp),%eax -80100bfa: 50 push %eax -80100bfb: ff 75 d8 pushl -0x28(%ebp) -80100bfe: e8 83 12 00 00 call 80101e86 -80100c03: 83 c4 10 add $0x10,%esp -80100c06: 83 f8 20 cmp $0x20,%eax -80100c09: 74 05 je 80100c10 - goto bad; -80100c0b: e9 ef 02 00 00 jmp 80100eff - if(ph.type != ELF_PROG_LOAD) -80100c10: 8b 85 ec fe ff ff mov -0x114(%ebp),%eax -80100c16: 83 f8 01 cmp $0x1,%eax -80100c19: 74 02 je 80100c1d - continue; -80100c1b: eb 72 jmp 80100c8f - if(ph.memsz < ph.filesz) -80100c1d: 8b 95 00 ff ff ff mov -0x100(%ebp),%edx -80100c23: 8b 85 fc fe ff ff mov -0x104(%ebp),%eax -80100c29: 39 c2 cmp %eax,%edx -80100c2b: 73 05 jae 80100c32 - goto bad; -80100c2d: e9 cd 02 00 00 jmp 80100eff - if((sz = allocuvm(pgdir, sz, ph.vaddr + ph.memsz)) == 0) -80100c32: 8b 95 f4 fe ff ff mov -0x10c(%ebp),%edx -80100c38: 8b 85 00 ff ff ff mov -0x100(%ebp),%eax -80100c3e: 01 d0 add %edx,%eax -80100c40: 83 ec 04 sub $0x4,%esp -80100c43: 50 push %eax -80100c44: ff 75 e0 pushl -0x20(%ebp) -80100c47: ff 75 d4 pushl -0x2c(%ebp) -80100c4a: e8 c0 73 00 00 call 8010800f -80100c4f: 83 c4 10 add $0x10,%esp -80100c52: 89 45 e0 mov %eax,-0x20(%ebp) -80100c55: 83 7d e0 00 cmpl $0x0,-0x20(%ebp) -80100c59: 75 05 jne 80100c60 - goto bad; -80100c5b: e9 9f 02 00 00 jmp 80100eff - if(loaduvm(pgdir, (char*)ph.vaddr, ip, ph.off, ph.filesz) < 0) -80100c60: 8b 95 fc fe ff ff mov -0x104(%ebp),%edx -80100c66: 8b 85 f0 fe ff ff mov -0x110(%ebp),%eax -80100c6c: 8b 8d f4 fe ff ff mov -0x10c(%ebp),%ecx -80100c72: 83 ec 0c sub $0xc,%esp -80100c75: 52 push %edx -80100c76: 50 push %eax -80100c77: ff 75 d8 pushl -0x28(%ebp) -80100c7a: 51 push %ecx -80100c7b: ff 75 d4 pushl -0x2c(%ebp) -80100c7e: e8 b5 72 00 00 call 80107f38 -80100c83: 83 c4 20 add $0x20,%esp -80100c86: 85 c0 test %eax,%eax -80100c88: 79 05 jns 80100c8f - goto bad; -80100c8a: e9 70 02 00 00 jmp 80100eff - if((pgdir = setupkvm()) == 0) - goto bad; - - // Load program into memory. - sz = 0; - for(i=0, off=elf.phoff; i - if((sz = allocuvm(pgdir, sz, ph.vaddr + ph.memsz)) == 0) - goto bad; - if(loaduvm(pgdir, (char*)ph.vaddr, ip, ph.off, ph.filesz) < 0) - goto bad; - } - iunlockput(ip); -80100caf: 83 ec 0c sub $0xc,%esp -80100cb2: ff 75 d8 pushl -0x28(%ebp) -80100cb5: e8 21 0f 00 00 call 80101bdb -80100cba: 83 c4 10 add $0x10,%esp - end_op(); -80100cbd: e8 ae 28 00 00 call 80103570 - ip = 0; -80100cc2: c7 45 d8 00 00 00 00 movl $0x0,-0x28(%ebp) - - // Allocate two pages at the next page boundary. - // Make the first inaccessible. Use the second as the user stack. - sz = PGROUNDUP(sz); -80100cc9: 8b 45 e0 mov -0x20(%ebp),%eax -80100ccc: 05 ff 0f 00 00 add $0xfff,%eax -80100cd1: 25 00 f0 ff ff and $0xfffff000,%eax -80100cd6: 89 45 e0 mov %eax,-0x20(%ebp) - if((sz = allocuvm(pgdir, sz, sz + 2*PGSIZE)) == 0) -80100cd9: 8b 45 e0 mov -0x20(%ebp),%eax -80100cdc: 05 00 20 00 00 add $0x2000,%eax -80100ce1: 83 ec 04 sub $0x4,%esp -80100ce4: 50 push %eax -80100ce5: ff 75 e0 pushl -0x20(%ebp) -80100ce8: ff 75 d4 pushl -0x2c(%ebp) -80100ceb: e8 1f 73 00 00 call 8010800f -80100cf0: 83 c4 10 add $0x10,%esp -80100cf3: 89 45 e0 mov %eax,-0x20(%ebp) -80100cf6: 83 7d e0 00 cmpl $0x0,-0x20(%ebp) -80100cfa: 75 05 jne 80100d01 - goto bad; -80100cfc: e9 fe 01 00 00 jmp 80100eff - clearpteu(pgdir, (char*)(sz - 2*PGSIZE)); -80100d01: 8b 45 e0 mov -0x20(%ebp),%eax -80100d04: 2d 00 20 00 00 sub $0x2000,%eax -80100d09: 83 ec 08 sub $0x8,%esp -80100d0c: 50 push %eax -80100d0d: ff 75 d4 pushl -0x2c(%ebp) -80100d10: e8 1f 75 00 00 call 80108234 -80100d15: 83 c4 10 add $0x10,%esp - sp = sz; -80100d18: 8b 45 e0 mov -0x20(%ebp),%eax -80100d1b: 89 45 dc mov %eax,-0x24(%ebp) - - // Push argument strings, prepare rest of stack in ustack. - for(argc = 0; argv[argc]; argc++) { -80100d1e: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) -80100d25: e9 98 00 00 00 jmp 80100dc2 - if(argc >= MAXARG) -80100d2a: 83 7d e4 1f cmpl $0x1f,-0x1c(%ebp) -80100d2e: 76 05 jbe 80100d35 - goto bad; -80100d30: e9 ca 01 00 00 jmp 80100eff - sp = (sp - (strlen(argv[argc]) + 1)) & ~3; -80100d35: 8b 45 e4 mov -0x1c(%ebp),%eax -80100d38: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx -80100d3f: 8b 45 0c mov 0xc(%ebp),%eax -80100d42: 01 d0 add %edx,%eax -80100d44: 8b 00 mov (%eax),%eax -80100d46: 83 ec 0c sub $0xc,%esp -80100d49: 50 push %eax -80100d4a: e8 d7 46 00 00 call 80105426 -80100d4f: 83 c4 10 add $0x10,%esp -80100d52: 89 c2 mov %eax,%edx -80100d54: 8b 45 dc mov -0x24(%ebp),%eax -80100d57: 29 d0 sub %edx,%eax -80100d59: 83 e8 01 sub $0x1,%eax -80100d5c: 83 e0 fc and $0xfffffffc,%eax -80100d5f: 89 45 dc mov %eax,-0x24(%ebp) - if(copyout(pgdir, sp, argv[argc], strlen(argv[argc]) + 1) < 0) -80100d62: 8b 45 e4 mov -0x1c(%ebp),%eax -80100d65: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx -80100d6c: 8b 45 0c mov 0xc(%ebp),%eax -80100d6f: 01 d0 add %edx,%eax -80100d71: 8b 00 mov (%eax),%eax -80100d73: 83 ec 0c sub $0xc,%esp -80100d76: 50 push %eax -80100d77: e8 aa 46 00 00 call 80105426 -80100d7c: 83 c4 10 add $0x10,%esp -80100d7f: 83 c0 01 add $0x1,%eax -80100d82: 89 c1 mov %eax,%ecx -80100d84: 8b 45 e4 mov -0x1c(%ebp),%eax -80100d87: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx -80100d8e: 8b 45 0c mov 0xc(%ebp),%eax -80100d91: 01 d0 add %edx,%eax -80100d93: 8b 00 mov (%eax),%eax -80100d95: 51 push %ecx -80100d96: 50 push %eax -80100d97: ff 75 dc pushl -0x24(%ebp) -80100d9a: ff 75 d4 pushl -0x2c(%ebp) -80100d9d: e8 48 76 00 00 call 801083ea -80100da2: 83 c4 10 add $0x10,%esp -80100da5: 85 c0 test %eax,%eax -80100da7: 79 05 jns 80100dae - goto bad; -80100da9: e9 51 01 00 00 jmp 80100eff - ustack[3+argc] = sp; -80100dae: 8b 45 e4 mov -0x1c(%ebp),%eax -80100db1: 8d 50 03 lea 0x3(%eax),%edx -80100db4: 8b 45 dc mov -0x24(%ebp),%eax -80100db7: 89 84 95 40 ff ff ff mov %eax,-0xc0(%ebp,%edx,4) - goto bad; - clearpteu(pgdir, (char*)(sz - 2*PGSIZE)); - sp = sz; - - // Push argument strings, prepare rest of stack in ustack. - for(argc = 0; argv[argc]; argc++) { -80100dbe: 83 45 e4 01 addl $0x1,-0x1c(%ebp) -80100dc2: 8b 45 e4 mov -0x1c(%ebp),%eax -80100dc5: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx -80100dcc: 8b 45 0c mov 0xc(%ebp),%eax -80100dcf: 01 d0 add %edx,%eax -80100dd1: 8b 00 mov (%eax),%eax -80100dd3: 85 c0 test %eax,%eax -80100dd5: 0f 85 4f ff ff ff jne 80100d2a - sp = (sp - (strlen(argv[argc]) + 1)) & ~3; - if(copyout(pgdir, sp, argv[argc], strlen(argv[argc]) + 1) < 0) - goto bad; - ustack[3+argc] = sp; - } - ustack[3+argc] = 0; -80100ddb: 8b 45 e4 mov -0x1c(%ebp),%eax -80100dde: 83 c0 03 add $0x3,%eax -80100de1: c7 84 85 40 ff ff ff movl $0x0,-0xc0(%ebp,%eax,4) -80100de8: 00 00 00 00 - - ustack[0] = 0xffffffff; // fake return PC -80100dec: c7 85 40 ff ff ff ff movl $0xffffffff,-0xc0(%ebp) -80100df3: ff ff ff - ustack[1] = argc; -80100df6: 8b 45 e4 mov -0x1c(%ebp),%eax -80100df9: 89 85 44 ff ff ff mov %eax,-0xbc(%ebp) - ustack[2] = sp - (argc+1)*4; // argv pointer -80100dff: 8b 45 e4 mov -0x1c(%ebp),%eax -80100e02: 83 c0 01 add $0x1,%eax -80100e05: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx -80100e0c: 8b 45 dc mov -0x24(%ebp),%eax -80100e0f: 29 d0 sub %edx,%eax -80100e11: 89 85 48 ff ff ff mov %eax,-0xb8(%ebp) - - sp -= (3+argc+1) * 4; -80100e17: 8b 45 e4 mov -0x1c(%ebp),%eax -80100e1a: 83 c0 04 add $0x4,%eax -80100e1d: c1 e0 02 shl $0x2,%eax -80100e20: 29 45 dc sub %eax,-0x24(%ebp) - if(copyout(pgdir, sp, ustack, (3+argc+1)*4) < 0) -80100e23: 8b 45 e4 mov -0x1c(%ebp),%eax -80100e26: 83 c0 04 add $0x4,%eax -80100e29: c1 e0 02 shl $0x2,%eax -80100e2c: 50 push %eax -80100e2d: 8d 85 40 ff ff ff lea -0xc0(%ebp),%eax -80100e33: 50 push %eax -80100e34: ff 75 dc pushl -0x24(%ebp) -80100e37: ff 75 d4 pushl -0x2c(%ebp) -80100e3a: e8 ab 75 00 00 call 801083ea -80100e3f: 83 c4 10 add $0x10,%esp -80100e42: 85 c0 test %eax,%eax -80100e44: 79 05 jns 80100e4b - goto bad; -80100e46: e9 b4 00 00 00 jmp 80100eff - - // Save program name for debugging. - for(last=s=path; *s; s++) -80100e4b: 8b 45 08 mov 0x8(%ebp),%eax -80100e4e: 89 45 f4 mov %eax,-0xc(%ebp) -80100e51: 8b 45 f4 mov -0xc(%ebp),%eax -80100e54: 89 45 f0 mov %eax,-0x10(%ebp) -80100e57: eb 17 jmp 80100e70 - if(*s == '/') -80100e59: 8b 45 f4 mov -0xc(%ebp),%eax -80100e5c: 0f b6 00 movzbl (%eax),%eax -80100e5f: 3c 2f cmp $0x2f,%al -80100e61: 75 09 jne 80100e6c - last = s+1; -80100e63: 8b 45 f4 mov -0xc(%ebp),%eax -80100e66: 83 c0 01 add $0x1,%eax -80100e69: 89 45 f0 mov %eax,-0x10(%ebp) - sp -= (3+argc+1) * 4; - if(copyout(pgdir, sp, ustack, (3+argc+1)*4) < 0) - goto bad; - - // Save program name for debugging. - for(last=s=path; *s; s++) -80100e6c: 83 45 f4 01 addl $0x1,-0xc(%ebp) -80100e70: 8b 45 f4 mov -0xc(%ebp),%eax -80100e73: 0f b6 00 movzbl (%eax),%eax -80100e76: 84 c0 test %al,%al -80100e78: 75 df jne 80100e59 - if(*s == '/') - last = s+1; - safestrcpy(proc->name, last, sizeof(proc->name)); -80100e7a: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80100e80: 83 c0 6c add $0x6c,%eax -80100e83: 83 ec 04 sub $0x4,%esp -80100e86: 6a 10 push $0x10 -80100e88: ff 75 f0 pushl -0x10(%ebp) -80100e8b: 50 push %eax -80100e8c: e8 4b 45 00 00 call 801053dc -80100e91: 83 c4 10 add $0x10,%esp - - // Commit to the user image. - oldpgdir = proc->pgdir; -80100e94: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80100e9a: 8b 40 04 mov 0x4(%eax),%eax -80100e9d: 89 45 d0 mov %eax,-0x30(%ebp) - proc->pgdir = pgdir; -80100ea0: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80100ea6: 8b 55 d4 mov -0x2c(%ebp),%edx -80100ea9: 89 50 04 mov %edx,0x4(%eax) - proc->sz = sz; -80100eac: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80100eb2: 8b 55 e0 mov -0x20(%ebp),%edx -80100eb5: 89 10 mov %edx,(%eax) - proc->tf->eip = elf.entry; // main -80100eb7: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80100ebd: 8b 40 18 mov 0x18(%eax),%eax -80100ec0: 8b 95 24 ff ff ff mov -0xdc(%ebp),%edx -80100ec6: 89 50 38 mov %edx,0x38(%eax) - proc->tf->esp = sp; -80100ec9: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80100ecf: 8b 40 18 mov 0x18(%eax),%eax -80100ed2: 8b 55 dc mov -0x24(%ebp),%edx -80100ed5: 89 50 44 mov %edx,0x44(%eax) - switchuvm(proc); -80100ed8: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80100ede: 83 ec 0c sub $0xc,%esp -80100ee1: 50 push %eax -80100ee2: e8 6a 6e 00 00 call 80107d51 -80100ee7: 83 c4 10 add $0x10,%esp - freevm(oldpgdir); -80100eea: 83 ec 0c sub $0xc,%esp -80100eed: ff 75 d0 pushl -0x30(%ebp) -80100ef0: e8 a0 72 00 00 call 80108195 -80100ef5: 83 c4 10 add $0x10,%esp - return 0; -80100ef8: b8 00 00 00 00 mov $0x0,%eax -80100efd: eb 32 jmp 80100f31 - - bad: - if(pgdir) -80100eff: 83 7d d4 00 cmpl $0x0,-0x2c(%ebp) -80100f03: 74 0e je 80100f13 - freevm(pgdir); -80100f05: 83 ec 0c sub $0xc,%esp -80100f08: ff 75 d4 pushl -0x2c(%ebp) -80100f0b: e8 85 72 00 00 call 80108195 -80100f10: 83 c4 10 add $0x10,%esp - if(ip){ -80100f13: 83 7d d8 00 cmpl $0x0,-0x28(%ebp) -80100f17: 74 13 je 80100f2c - iunlockput(ip); -80100f19: 83 ec 0c sub $0xc,%esp -80100f1c: ff 75 d8 pushl -0x28(%ebp) -80100f1f: e8 b7 0c 00 00 call 80101bdb -80100f24: 83 c4 10 add $0x10,%esp - end_op(); -80100f27: e8 44 26 00 00 call 80103570 - } - return -1; -80100f2c: b8 ff ff ff ff mov $0xffffffff,%eax -} -80100f31: c9 leave -80100f32: c3 ret - -80100f33 : - struct file file[NFILE]; -} ftable; - -void -fileinit(void) -{ -80100f33: 55 push %ebp -80100f34: 89 e5 mov %esp,%ebp -80100f36: 83 ec 08 sub $0x8,%esp - initlock(&ftable.lock, "ftable"); -80100f39: 83 ec 08 sub $0x8,%esp -80100f3c: 68 e1 84 10 80 push $0x801084e1 -80100f41: 68 80 08 11 80 push $0x80110880 -80100f46: e8 0f 40 00 00 call 80104f5a -80100f4b: 83 c4 10 add $0x10,%esp -} -80100f4e: c9 leave -80100f4f: c3 ret - -80100f50 : - -// Allocate a file structure. -struct file* -filealloc(void) -{ -80100f50: 55 push %ebp -80100f51: 89 e5 mov %esp,%ebp -80100f53: 83 ec 18 sub $0x18,%esp - struct file *f; - - acquire(&ftable.lock); -80100f56: 83 ec 0c sub $0xc,%esp -80100f59: 68 80 08 11 80 push $0x80110880 -80100f5e: e8 18 40 00 00 call 80104f7b -80100f63: 83 c4 10 add $0x10,%esp - for(f = ftable.file; f < ftable.file + NFILE; f++){ -80100f66: c7 45 f4 b4 08 11 80 movl $0x801108b4,-0xc(%ebp) -80100f6d: eb 2d jmp 80100f9c - if(f->ref == 0){ -80100f6f: 8b 45 f4 mov -0xc(%ebp),%eax -80100f72: 8b 40 04 mov 0x4(%eax),%eax -80100f75: 85 c0 test %eax,%eax -80100f77: 75 1f jne 80100f98 - f->ref = 1; -80100f79: 8b 45 f4 mov -0xc(%ebp),%eax -80100f7c: c7 40 04 01 00 00 00 movl $0x1,0x4(%eax) - release(&ftable.lock); -80100f83: 83 ec 0c sub $0xc,%esp -80100f86: 68 80 08 11 80 push $0x80110880 -80100f8b: e8 51 40 00 00 call 80104fe1 -80100f90: 83 c4 10 add $0x10,%esp - return f; -80100f93: 8b 45 f4 mov -0xc(%ebp),%eax -80100f96: eb 22 jmp 80100fba -filealloc(void) -{ - struct file *f; - - acquire(&ftable.lock); - for(f = ftable.file; f < ftable.file + NFILE; f++){ -80100f98: 83 45 f4 18 addl $0x18,-0xc(%ebp) -80100f9c: 81 7d f4 14 12 11 80 cmpl $0x80111214,-0xc(%ebp) -80100fa3: 72 ca jb 80100f6f - f->ref = 1; - release(&ftable.lock); - return f; - } - } - release(&ftable.lock); -80100fa5: 83 ec 0c sub $0xc,%esp -80100fa8: 68 80 08 11 80 push $0x80110880 -80100fad: e8 2f 40 00 00 call 80104fe1 -80100fb2: 83 c4 10 add $0x10,%esp - return 0; -80100fb5: b8 00 00 00 00 mov $0x0,%eax -} -80100fba: c9 leave -80100fbb: c3 ret - -80100fbc : - -// Increment ref count for file f. -struct file* -filedup(struct file *f) -{ -80100fbc: 55 push %ebp -80100fbd: 89 e5 mov %esp,%ebp -80100fbf: 83 ec 08 sub $0x8,%esp - acquire(&ftable.lock); -80100fc2: 83 ec 0c sub $0xc,%esp -80100fc5: 68 80 08 11 80 push $0x80110880 -80100fca: e8 ac 3f 00 00 call 80104f7b -80100fcf: 83 c4 10 add $0x10,%esp - if(f->ref < 1) -80100fd2: 8b 45 08 mov 0x8(%ebp),%eax -80100fd5: 8b 40 04 mov 0x4(%eax),%eax -80100fd8: 85 c0 test %eax,%eax -80100fda: 7f 0d jg 80100fe9 - panic("filedup"); -80100fdc: 83 ec 0c sub $0xc,%esp -80100fdf: 68 e8 84 10 80 push $0x801084e8 -80100fe4: e8 73 f5 ff ff call 8010055c - f->ref++; -80100fe9: 8b 45 08 mov 0x8(%ebp),%eax -80100fec: 8b 40 04 mov 0x4(%eax),%eax -80100fef: 8d 50 01 lea 0x1(%eax),%edx -80100ff2: 8b 45 08 mov 0x8(%ebp),%eax -80100ff5: 89 50 04 mov %edx,0x4(%eax) - release(&ftable.lock); -80100ff8: 83 ec 0c sub $0xc,%esp -80100ffb: 68 80 08 11 80 push $0x80110880 -80101000: e8 dc 3f 00 00 call 80104fe1 -80101005: 83 c4 10 add $0x10,%esp - return f; -80101008: 8b 45 08 mov 0x8(%ebp),%eax -} -8010100b: c9 leave -8010100c: c3 ret - -8010100d : - -// Close file f. (Decrement ref count, close when reaches 0.) -void -fileclose(struct file *f) -{ -8010100d: 55 push %ebp -8010100e: 89 e5 mov %esp,%ebp -80101010: 83 ec 28 sub $0x28,%esp - struct file ff; - - acquire(&ftable.lock); -80101013: 83 ec 0c sub $0xc,%esp -80101016: 68 80 08 11 80 push $0x80110880 -8010101b: e8 5b 3f 00 00 call 80104f7b -80101020: 83 c4 10 add $0x10,%esp - if(f->ref < 1) -80101023: 8b 45 08 mov 0x8(%ebp),%eax -80101026: 8b 40 04 mov 0x4(%eax),%eax -80101029: 85 c0 test %eax,%eax -8010102b: 7f 0d jg 8010103a - panic("fileclose"); -8010102d: 83 ec 0c sub $0xc,%esp -80101030: 68 f0 84 10 80 push $0x801084f0 -80101035: e8 22 f5 ff ff call 8010055c - if(--f->ref > 0){ -8010103a: 8b 45 08 mov 0x8(%ebp),%eax -8010103d: 8b 40 04 mov 0x4(%eax),%eax -80101040: 8d 50 ff lea -0x1(%eax),%edx -80101043: 8b 45 08 mov 0x8(%ebp),%eax -80101046: 89 50 04 mov %edx,0x4(%eax) -80101049: 8b 45 08 mov 0x8(%ebp),%eax -8010104c: 8b 40 04 mov 0x4(%eax),%eax -8010104f: 85 c0 test %eax,%eax -80101051: 7e 15 jle 80101068 - release(&ftable.lock); -80101053: 83 ec 0c sub $0xc,%esp -80101056: 68 80 08 11 80 push $0x80110880 -8010105b: e8 81 3f 00 00 call 80104fe1 -80101060: 83 c4 10 add $0x10,%esp -80101063: e9 8b 00 00 00 jmp 801010f3 - return; - } - ff = *f; -80101068: 8b 45 08 mov 0x8(%ebp),%eax -8010106b: 8b 10 mov (%eax),%edx -8010106d: 89 55 e0 mov %edx,-0x20(%ebp) -80101070: 8b 50 04 mov 0x4(%eax),%edx -80101073: 89 55 e4 mov %edx,-0x1c(%ebp) -80101076: 8b 50 08 mov 0x8(%eax),%edx -80101079: 89 55 e8 mov %edx,-0x18(%ebp) -8010107c: 8b 50 0c mov 0xc(%eax),%edx -8010107f: 89 55 ec mov %edx,-0x14(%ebp) -80101082: 8b 50 10 mov 0x10(%eax),%edx -80101085: 89 55 f0 mov %edx,-0x10(%ebp) -80101088: 8b 40 14 mov 0x14(%eax),%eax -8010108b: 89 45 f4 mov %eax,-0xc(%ebp) - f->ref = 0; -8010108e: 8b 45 08 mov 0x8(%ebp),%eax -80101091: c7 40 04 00 00 00 00 movl $0x0,0x4(%eax) - f->type = FD_NONE; -80101098: 8b 45 08 mov 0x8(%ebp),%eax -8010109b: c7 00 00 00 00 00 movl $0x0,(%eax) - release(&ftable.lock); -801010a1: 83 ec 0c sub $0xc,%esp -801010a4: 68 80 08 11 80 push $0x80110880 -801010a9: e8 33 3f 00 00 call 80104fe1 -801010ae: 83 c4 10 add $0x10,%esp - - if(ff.type == FD_PIPE) -801010b1: 8b 45 e0 mov -0x20(%ebp),%eax -801010b4: 83 f8 01 cmp $0x1,%eax -801010b7: 75 19 jne 801010d2 - pipeclose(ff.pipe, ff.writable); -801010b9: 0f b6 45 e9 movzbl -0x17(%ebp),%eax -801010bd: 0f be d0 movsbl %al,%edx -801010c0: 8b 45 ec mov -0x14(%ebp),%eax -801010c3: 83 ec 08 sub $0x8,%esp -801010c6: 52 push %edx -801010c7: 50 push %eax -801010c8: e8 50 30 00 00 call 8010411d -801010cd: 83 c4 10 add $0x10,%esp -801010d0: eb 21 jmp 801010f3 - else if(ff.type == FD_INODE){ -801010d2: 8b 45 e0 mov -0x20(%ebp),%eax -801010d5: 83 f8 02 cmp $0x2,%eax -801010d8: 75 19 jne 801010f3 - begin_op(); -801010da: e8 03 24 00 00 call 801034e2 - iput(ff.ip); -801010df: 8b 45 f0 mov -0x10(%ebp),%eax -801010e2: 83 ec 0c sub $0xc,%esp -801010e5: 50 push %eax -801010e6: e8 01 0a 00 00 call 80101aec -801010eb: 83 c4 10 add $0x10,%esp - end_op(); -801010ee: e8 7d 24 00 00 call 80103570 - } -} -801010f3: c9 leave -801010f4: c3 ret - -801010f5 : - -// Get metadata about file f. -int -filestat(struct file *f, struct stat *st) -{ -801010f5: 55 push %ebp -801010f6: 89 e5 mov %esp,%ebp -801010f8: 83 ec 08 sub $0x8,%esp - if(f->type == FD_INODE){ -801010fb: 8b 45 08 mov 0x8(%ebp),%eax -801010fe: 8b 00 mov (%eax),%eax -80101100: 83 f8 02 cmp $0x2,%eax -80101103: 75 40 jne 80101145 - ilock(f->ip); -80101105: 8b 45 08 mov 0x8(%ebp),%eax -80101108: 8b 40 10 mov 0x10(%eax),%eax -8010110b: 83 ec 0c sub $0xc,%esp -8010110e: 50 push %eax -8010110f: e8 0a 08 00 00 call 8010191e -80101114: 83 c4 10 add $0x10,%esp - stati(f->ip, st); -80101117: 8b 45 08 mov 0x8(%ebp),%eax -8010111a: 8b 40 10 mov 0x10(%eax),%eax -8010111d: 83 ec 08 sub $0x8,%esp -80101120: ff 75 0c pushl 0xc(%ebp) -80101123: 50 push %eax -80101124: e8 18 0d 00 00 call 80101e41 -80101129: 83 c4 10 add $0x10,%esp - iunlock(f->ip); -8010112c: 8b 45 08 mov 0x8(%ebp),%eax -8010112f: 8b 40 10 mov 0x10(%eax),%eax -80101132: 83 ec 0c sub $0xc,%esp -80101135: 50 push %eax -80101136: e8 40 09 00 00 call 80101a7b -8010113b: 83 c4 10 add $0x10,%esp - return 0; -8010113e: b8 00 00 00 00 mov $0x0,%eax -80101143: eb 05 jmp 8010114a - } - return -1; -80101145: b8 ff ff ff ff mov $0xffffffff,%eax -} -8010114a: c9 leave -8010114b: c3 ret - -8010114c : - -// Read from file f. -int -fileread(struct file *f, char *addr, int n) -{ -8010114c: 55 push %ebp -8010114d: 89 e5 mov %esp,%ebp -8010114f: 83 ec 18 sub $0x18,%esp - int r; - - if(f->readable == 0) -80101152: 8b 45 08 mov 0x8(%ebp),%eax -80101155: 0f b6 40 08 movzbl 0x8(%eax),%eax -80101159: 84 c0 test %al,%al -8010115b: 75 0a jne 80101167 - return -1; -8010115d: b8 ff ff ff ff mov $0xffffffff,%eax -80101162: e9 9b 00 00 00 jmp 80101202 - if(f->type == FD_PIPE) -80101167: 8b 45 08 mov 0x8(%ebp),%eax -8010116a: 8b 00 mov (%eax),%eax -8010116c: 83 f8 01 cmp $0x1,%eax -8010116f: 75 1a jne 8010118b - return piperead(f->pipe, addr, n); -80101171: 8b 45 08 mov 0x8(%ebp),%eax -80101174: 8b 40 0c mov 0xc(%eax),%eax -80101177: 83 ec 04 sub $0x4,%esp -8010117a: ff 75 10 pushl 0x10(%ebp) -8010117d: ff 75 0c pushl 0xc(%ebp) -80101180: 50 push %eax -80101181: e8 44 31 00 00 call 801042ca -80101186: 83 c4 10 add $0x10,%esp -80101189: eb 77 jmp 80101202 - if(f->type == FD_INODE){ -8010118b: 8b 45 08 mov 0x8(%ebp),%eax -8010118e: 8b 00 mov (%eax),%eax -80101190: 83 f8 02 cmp $0x2,%eax -80101193: 75 60 jne 801011f5 - ilock(f->ip); -80101195: 8b 45 08 mov 0x8(%ebp),%eax -80101198: 8b 40 10 mov 0x10(%eax),%eax -8010119b: 83 ec 0c sub $0xc,%esp -8010119e: 50 push %eax -8010119f: e8 7a 07 00 00 call 8010191e -801011a4: 83 c4 10 add $0x10,%esp - if((r = readi(f->ip, addr, f->off, n)) > 0) -801011a7: 8b 4d 10 mov 0x10(%ebp),%ecx -801011aa: 8b 45 08 mov 0x8(%ebp),%eax -801011ad: 8b 50 14 mov 0x14(%eax),%edx -801011b0: 8b 45 08 mov 0x8(%ebp),%eax -801011b3: 8b 40 10 mov 0x10(%eax),%eax -801011b6: 51 push %ecx -801011b7: 52 push %edx -801011b8: ff 75 0c pushl 0xc(%ebp) -801011bb: 50 push %eax -801011bc: e8 c5 0c 00 00 call 80101e86 -801011c1: 83 c4 10 add $0x10,%esp -801011c4: 89 45 f4 mov %eax,-0xc(%ebp) -801011c7: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -801011cb: 7e 11 jle 801011de - f->off += r; -801011cd: 8b 45 08 mov 0x8(%ebp),%eax -801011d0: 8b 50 14 mov 0x14(%eax),%edx -801011d3: 8b 45 f4 mov -0xc(%ebp),%eax -801011d6: 01 c2 add %eax,%edx -801011d8: 8b 45 08 mov 0x8(%ebp),%eax -801011db: 89 50 14 mov %edx,0x14(%eax) - iunlock(f->ip); -801011de: 8b 45 08 mov 0x8(%ebp),%eax -801011e1: 8b 40 10 mov 0x10(%eax),%eax -801011e4: 83 ec 0c sub $0xc,%esp -801011e7: 50 push %eax -801011e8: e8 8e 08 00 00 call 80101a7b -801011ed: 83 c4 10 add $0x10,%esp - return r; -801011f0: 8b 45 f4 mov -0xc(%ebp),%eax -801011f3: eb 0d jmp 80101202 - } - panic("fileread"); -801011f5: 83 ec 0c sub $0xc,%esp -801011f8: 68 fa 84 10 80 push $0x801084fa -801011fd: e8 5a f3 ff ff call 8010055c -} -80101202: c9 leave -80101203: c3 ret - -80101204 : - -//PAGEBREAK! -// Write to file f. -int -filewrite(struct file *f, char *addr, int n) -{ -80101204: 55 push %ebp -80101205: 89 e5 mov %esp,%ebp -80101207: 53 push %ebx -80101208: 83 ec 14 sub $0x14,%esp - int r; - - if(f->writable == 0) -8010120b: 8b 45 08 mov 0x8(%ebp),%eax -8010120e: 0f b6 40 09 movzbl 0x9(%eax),%eax -80101212: 84 c0 test %al,%al -80101214: 75 0a jne 80101220 - return -1; -80101216: b8 ff ff ff ff mov $0xffffffff,%eax -8010121b: e9 1a 01 00 00 jmp 8010133a - if(f->type == FD_PIPE) -80101220: 8b 45 08 mov 0x8(%ebp),%eax -80101223: 8b 00 mov (%eax),%eax -80101225: 83 f8 01 cmp $0x1,%eax -80101228: 75 1d jne 80101247 - return pipewrite(f->pipe, addr, n); -8010122a: 8b 45 08 mov 0x8(%ebp),%eax -8010122d: 8b 40 0c mov 0xc(%eax),%eax -80101230: 83 ec 04 sub $0x4,%esp -80101233: ff 75 10 pushl 0x10(%ebp) -80101236: ff 75 0c pushl 0xc(%ebp) -80101239: 50 push %eax -8010123a: e8 87 2f 00 00 call 801041c6 -8010123f: 83 c4 10 add $0x10,%esp -80101242: e9 f3 00 00 00 jmp 8010133a - if(f->type == FD_INODE){ -80101247: 8b 45 08 mov 0x8(%ebp),%eax -8010124a: 8b 00 mov (%eax),%eax -8010124c: 83 f8 02 cmp $0x2,%eax -8010124f: 0f 85 d8 00 00 00 jne 8010132d - // the maximum log transaction size, including - // i-node, indirect block, allocation blocks, - // and 2 blocks of slop for non-aligned writes. - // this really belongs lower down, since writei() - // might be writing a device like the console. - int max = ((LOGSIZE-1-1-2) / 2) * 512; -80101255: c7 45 ec 00 1a 00 00 movl $0x1a00,-0x14(%ebp) - int i = 0; -8010125c: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - while(i < n){ -80101263: e9 a5 00 00 00 jmp 8010130d - int n1 = n - i; -80101268: 8b 45 10 mov 0x10(%ebp),%eax -8010126b: 2b 45 f4 sub -0xc(%ebp),%eax -8010126e: 89 45 f0 mov %eax,-0x10(%ebp) - if(n1 > max) -80101271: 8b 45 f0 mov -0x10(%ebp),%eax -80101274: 3b 45 ec cmp -0x14(%ebp),%eax -80101277: 7e 06 jle 8010127f - n1 = max; -80101279: 8b 45 ec mov -0x14(%ebp),%eax -8010127c: 89 45 f0 mov %eax,-0x10(%ebp) - - begin_op(); -8010127f: e8 5e 22 00 00 call 801034e2 - ilock(f->ip); -80101284: 8b 45 08 mov 0x8(%ebp),%eax -80101287: 8b 40 10 mov 0x10(%eax),%eax -8010128a: 83 ec 0c sub $0xc,%esp -8010128d: 50 push %eax -8010128e: e8 8b 06 00 00 call 8010191e -80101293: 83 c4 10 add $0x10,%esp - if ((r = writei(f->ip, addr + i, f->off, n1)) > 0) -80101296: 8b 4d f0 mov -0x10(%ebp),%ecx -80101299: 8b 45 08 mov 0x8(%ebp),%eax -8010129c: 8b 50 14 mov 0x14(%eax),%edx -8010129f: 8b 5d f4 mov -0xc(%ebp),%ebx -801012a2: 8b 45 0c mov 0xc(%ebp),%eax -801012a5: 01 c3 add %eax,%ebx -801012a7: 8b 45 08 mov 0x8(%ebp),%eax -801012aa: 8b 40 10 mov 0x10(%eax),%eax -801012ad: 51 push %ecx -801012ae: 52 push %edx -801012af: 53 push %ebx -801012b0: 50 push %eax -801012b1: e8 2a 0d 00 00 call 80101fe0 -801012b6: 83 c4 10 add $0x10,%esp -801012b9: 89 45 e8 mov %eax,-0x18(%ebp) -801012bc: 83 7d e8 00 cmpl $0x0,-0x18(%ebp) -801012c0: 7e 11 jle 801012d3 - f->off += r; -801012c2: 8b 45 08 mov 0x8(%ebp),%eax -801012c5: 8b 50 14 mov 0x14(%eax),%edx -801012c8: 8b 45 e8 mov -0x18(%ebp),%eax -801012cb: 01 c2 add %eax,%edx -801012cd: 8b 45 08 mov 0x8(%ebp),%eax -801012d0: 89 50 14 mov %edx,0x14(%eax) - iunlock(f->ip); -801012d3: 8b 45 08 mov 0x8(%ebp),%eax -801012d6: 8b 40 10 mov 0x10(%eax),%eax -801012d9: 83 ec 0c sub $0xc,%esp -801012dc: 50 push %eax -801012dd: e8 99 07 00 00 call 80101a7b -801012e2: 83 c4 10 add $0x10,%esp - end_op(); -801012e5: e8 86 22 00 00 call 80103570 - - if(r < 0) -801012ea: 83 7d e8 00 cmpl $0x0,-0x18(%ebp) -801012ee: 79 02 jns 801012f2 - break; -801012f0: eb 27 jmp 80101319 - if(r != n1) -801012f2: 8b 45 e8 mov -0x18(%ebp),%eax -801012f5: 3b 45 f0 cmp -0x10(%ebp),%eax -801012f8: 74 0d je 80101307 - panic("short filewrite"); -801012fa: 83 ec 0c sub $0xc,%esp -801012fd: 68 03 85 10 80 push $0x80108503 -80101302: e8 55 f2 ff ff call 8010055c - i += r; -80101307: 8b 45 e8 mov -0x18(%ebp),%eax -8010130a: 01 45 f4 add %eax,-0xc(%ebp) - // and 2 blocks of slop for non-aligned writes. - // this really belongs lower down, since writei() - // might be writing a device like the console. - int max = ((LOGSIZE-1-1-2) / 2) * 512; - int i = 0; - while(i < n){ -8010130d: 8b 45 f4 mov -0xc(%ebp),%eax -80101310: 3b 45 10 cmp 0x10(%ebp),%eax -80101313: 0f 8c 4f ff ff ff jl 80101268 - break; - if(r != n1) - panic("short filewrite"); - i += r; - } - return i == n ? n : -1; -80101319: 8b 45 f4 mov -0xc(%ebp),%eax -8010131c: 3b 45 10 cmp 0x10(%ebp),%eax -8010131f: 75 05 jne 80101326 -80101321: 8b 45 10 mov 0x10(%ebp),%eax -80101324: eb 14 jmp 8010133a -80101326: b8 ff ff ff ff mov $0xffffffff,%eax -8010132b: eb 0d jmp 8010133a - } - panic("filewrite"); -8010132d: 83 ec 0c sub $0xc,%esp -80101330: 68 13 85 10 80 push $0x80108513 -80101335: e8 22 f2 ff ff call 8010055c -} -8010133a: 8b 5d fc mov -0x4(%ebp),%ebx -8010133d: c9 leave -8010133e: c3 ret - -8010133f : -struct superblock sb; // there should be one per dev, but we run with one dev - -// Read the super block. -void -readsb(int dev, struct superblock *sb) -{ -8010133f: 55 push %ebp -80101340: 89 e5 mov %esp,%ebp -80101342: 83 ec 18 sub $0x18,%esp - struct buf *bp; - - bp = bread(dev, 1); -80101345: 8b 45 08 mov 0x8(%ebp),%eax -80101348: 83 ec 08 sub $0x8,%esp -8010134b: 6a 01 push $0x1 -8010134d: 50 push %eax -8010134e: e8 61 ee ff ff call 801001b4 -80101353: 83 c4 10 add $0x10,%esp -80101356: 89 45 f4 mov %eax,-0xc(%ebp) - memmove(sb, bp->data, sizeof(*sb)); -80101359: 8b 45 f4 mov -0xc(%ebp),%eax -8010135c: 83 c0 18 add $0x18,%eax -8010135f: 83 ec 04 sub $0x4,%esp -80101362: 6a 1c push $0x1c -80101364: 50 push %eax -80101365: ff 75 0c pushl 0xc(%ebp) -80101368: e8 29 3f 00 00 call 80105296 -8010136d: 83 c4 10 add $0x10,%esp - brelse(bp); -80101370: 83 ec 0c sub $0xc,%esp -80101373: ff 75 f4 pushl -0xc(%ebp) -80101376: e8 b0 ee ff ff call 8010022b -8010137b: 83 c4 10 add $0x10,%esp -} -8010137e: c9 leave -8010137f: c3 ret - -80101380 : - -// Zero a block. -static void -bzero(int dev, int bno) -{ -80101380: 55 push %ebp -80101381: 89 e5 mov %esp,%ebp -80101383: 83 ec 18 sub $0x18,%esp - struct buf *bp; - - bp = bread(dev, bno); -80101386: 8b 55 0c mov 0xc(%ebp),%edx -80101389: 8b 45 08 mov 0x8(%ebp),%eax -8010138c: 83 ec 08 sub $0x8,%esp -8010138f: 52 push %edx -80101390: 50 push %eax -80101391: e8 1e ee ff ff call 801001b4 -80101396: 83 c4 10 add $0x10,%esp -80101399: 89 45 f4 mov %eax,-0xc(%ebp) - memset(bp->data, 0, BSIZE); -8010139c: 8b 45 f4 mov -0xc(%ebp),%eax -8010139f: 83 c0 18 add $0x18,%eax -801013a2: 83 ec 04 sub $0x4,%esp -801013a5: 68 00 02 00 00 push $0x200 -801013aa: 6a 00 push $0x0 -801013ac: 50 push %eax -801013ad: e8 25 3e 00 00 call 801051d7 -801013b2: 83 c4 10 add $0x10,%esp - log_write(bp); -801013b5: 83 ec 0c sub $0xc,%esp -801013b8: ff 75 f4 pushl -0xc(%ebp) -801013bb: e8 59 23 00 00 call 80103719 -801013c0: 83 c4 10 add $0x10,%esp - brelse(bp); -801013c3: 83 ec 0c sub $0xc,%esp -801013c6: ff 75 f4 pushl -0xc(%ebp) -801013c9: e8 5d ee ff ff call 8010022b -801013ce: 83 c4 10 add $0x10,%esp -} -801013d1: c9 leave -801013d2: c3 ret - -801013d3 : -// Blocks. - -// Allocate a zeroed disk block. -static uint -balloc(uint dev) -{ -801013d3: 55 push %ebp -801013d4: 89 e5 mov %esp,%ebp -801013d6: 83 ec 18 sub $0x18,%esp - int b, bi, m; - struct buf *bp; - - bp = 0; -801013d9: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - for(b = 0; b < sb.size; b += BPB){ -801013e0: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) -801013e7: e9 13 01 00 00 jmp 801014ff - bp = bread(dev, BBLOCK(b, sb)); -801013ec: 8b 45 f4 mov -0xc(%ebp),%eax -801013ef: 8d 90 ff 0f 00 00 lea 0xfff(%eax),%edx -801013f5: 85 c0 test %eax,%eax -801013f7: 0f 48 c2 cmovs %edx,%eax -801013fa: c1 f8 0c sar $0xc,%eax -801013fd: 89 c2 mov %eax,%edx -801013ff: a1 d8 12 11 80 mov 0x801112d8,%eax -80101404: 01 d0 add %edx,%eax -80101406: 83 ec 08 sub $0x8,%esp -80101409: 50 push %eax -8010140a: ff 75 08 pushl 0x8(%ebp) -8010140d: e8 a2 ed ff ff call 801001b4 -80101412: 83 c4 10 add $0x10,%esp -80101415: 89 45 ec mov %eax,-0x14(%ebp) - for(bi = 0; bi < BPB && b + bi < sb.size; bi++){ -80101418: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) -8010141f: e9 a6 00 00 00 jmp 801014ca - m = 1 << (bi % 8); -80101424: 8b 45 f0 mov -0x10(%ebp),%eax -80101427: 99 cltd -80101428: c1 ea 1d shr $0x1d,%edx -8010142b: 01 d0 add %edx,%eax -8010142d: 83 e0 07 and $0x7,%eax -80101430: 29 d0 sub %edx,%eax -80101432: ba 01 00 00 00 mov $0x1,%edx -80101437: 89 c1 mov %eax,%ecx -80101439: d3 e2 shl %cl,%edx -8010143b: 89 d0 mov %edx,%eax -8010143d: 89 45 e8 mov %eax,-0x18(%ebp) - if((bp->data[bi/8] & m) == 0){ // Is block free? -80101440: 8b 45 f0 mov -0x10(%ebp),%eax -80101443: 8d 50 07 lea 0x7(%eax),%edx -80101446: 85 c0 test %eax,%eax -80101448: 0f 48 c2 cmovs %edx,%eax -8010144b: c1 f8 03 sar $0x3,%eax -8010144e: 89 c2 mov %eax,%edx -80101450: 8b 45 ec mov -0x14(%ebp),%eax -80101453: 0f b6 44 10 18 movzbl 0x18(%eax,%edx,1),%eax -80101458: 0f b6 c0 movzbl %al,%eax -8010145b: 23 45 e8 and -0x18(%ebp),%eax -8010145e: 85 c0 test %eax,%eax -80101460: 75 64 jne 801014c6 - bp->data[bi/8] |= m; // Mark block in use. -80101462: 8b 45 f0 mov -0x10(%ebp),%eax -80101465: 8d 50 07 lea 0x7(%eax),%edx -80101468: 85 c0 test %eax,%eax -8010146a: 0f 48 c2 cmovs %edx,%eax -8010146d: c1 f8 03 sar $0x3,%eax -80101470: 8b 55 ec mov -0x14(%ebp),%edx -80101473: 0f b6 54 02 18 movzbl 0x18(%edx,%eax,1),%edx -80101478: 89 d1 mov %edx,%ecx -8010147a: 8b 55 e8 mov -0x18(%ebp),%edx -8010147d: 09 ca or %ecx,%edx -8010147f: 89 d1 mov %edx,%ecx -80101481: 8b 55 ec mov -0x14(%ebp),%edx -80101484: 88 4c 02 18 mov %cl,0x18(%edx,%eax,1) - log_write(bp); -80101488: 83 ec 0c sub $0xc,%esp -8010148b: ff 75 ec pushl -0x14(%ebp) -8010148e: e8 86 22 00 00 call 80103719 -80101493: 83 c4 10 add $0x10,%esp - brelse(bp); -80101496: 83 ec 0c sub $0xc,%esp -80101499: ff 75 ec pushl -0x14(%ebp) -8010149c: e8 8a ed ff ff call 8010022b -801014a1: 83 c4 10 add $0x10,%esp - bzero(dev, b + bi); -801014a4: 8b 55 f4 mov -0xc(%ebp),%edx -801014a7: 8b 45 f0 mov -0x10(%ebp),%eax -801014aa: 01 c2 add %eax,%edx -801014ac: 8b 45 08 mov 0x8(%ebp),%eax -801014af: 83 ec 08 sub $0x8,%esp -801014b2: 52 push %edx -801014b3: 50 push %eax -801014b4: e8 c7 fe ff ff call 80101380 -801014b9: 83 c4 10 add $0x10,%esp - return b + bi; -801014bc: 8b 55 f4 mov -0xc(%ebp),%edx -801014bf: 8b 45 f0 mov -0x10(%ebp),%eax -801014c2: 01 d0 add %edx,%eax -801014c4: eb 56 jmp 8010151c - struct buf *bp; - - bp = 0; - for(b = 0; b < sb.size; b += BPB){ - bp = bread(dev, BBLOCK(b, sb)); - for(bi = 0; bi < BPB && b + bi < sb.size; bi++){ -801014c6: 83 45 f0 01 addl $0x1,-0x10(%ebp) -801014ca: 81 7d f0 ff 0f 00 00 cmpl $0xfff,-0x10(%ebp) -801014d1: 7f 17 jg 801014ea -801014d3: 8b 55 f4 mov -0xc(%ebp),%edx -801014d6: 8b 45 f0 mov -0x10(%ebp),%eax -801014d9: 01 d0 add %edx,%eax -801014db: 89 c2 mov %eax,%edx -801014dd: a1 c0 12 11 80 mov 0x801112c0,%eax -801014e2: 39 c2 cmp %eax,%edx -801014e4: 0f 82 3a ff ff ff jb 80101424 - brelse(bp); - bzero(dev, b + bi); - return b + bi; - } - } - brelse(bp); -801014ea: 83 ec 0c sub $0xc,%esp -801014ed: ff 75 ec pushl -0x14(%ebp) -801014f0: e8 36 ed ff ff call 8010022b -801014f5: 83 c4 10 add $0x10,%esp -{ - int b, bi, m; - struct buf *bp; - - bp = 0; - for(b = 0; b < sb.size; b += BPB){ -801014f8: 81 45 f4 00 10 00 00 addl $0x1000,-0xc(%ebp) -801014ff: 8b 55 f4 mov -0xc(%ebp),%edx -80101502: a1 c0 12 11 80 mov 0x801112c0,%eax -80101507: 39 c2 cmp %eax,%edx -80101509: 0f 82 dd fe ff ff jb 801013ec - return b + bi; - } - } - brelse(bp); - } - panic("balloc: out of blocks"); -8010150f: 83 ec 0c sub $0xc,%esp -80101512: 68 20 85 10 80 push $0x80108520 -80101517: e8 40 f0 ff ff call 8010055c -} -8010151c: c9 leave -8010151d: c3 ret - -8010151e : - -// Free a disk block. -static void -bfree(int dev, uint b) -{ -8010151e: 55 push %ebp -8010151f: 89 e5 mov %esp,%ebp -80101521: 83 ec 18 sub $0x18,%esp - struct buf *bp; - int bi, m; - - readsb(dev, &sb); -80101524: 83 ec 08 sub $0x8,%esp -80101527: 68 c0 12 11 80 push $0x801112c0 -8010152c: ff 75 08 pushl 0x8(%ebp) -8010152f: e8 0b fe ff ff call 8010133f -80101534: 83 c4 10 add $0x10,%esp - bp = bread(dev, BBLOCK(b, sb)); -80101537: 8b 45 0c mov 0xc(%ebp),%eax -8010153a: c1 e8 0c shr $0xc,%eax -8010153d: 89 c2 mov %eax,%edx -8010153f: a1 d8 12 11 80 mov 0x801112d8,%eax -80101544: 01 c2 add %eax,%edx -80101546: 8b 45 08 mov 0x8(%ebp),%eax -80101549: 83 ec 08 sub $0x8,%esp -8010154c: 52 push %edx -8010154d: 50 push %eax -8010154e: e8 61 ec ff ff call 801001b4 -80101553: 83 c4 10 add $0x10,%esp -80101556: 89 45 f4 mov %eax,-0xc(%ebp) - bi = b % BPB; -80101559: 8b 45 0c mov 0xc(%ebp),%eax -8010155c: 25 ff 0f 00 00 and $0xfff,%eax -80101561: 89 45 f0 mov %eax,-0x10(%ebp) - m = 1 << (bi % 8); -80101564: 8b 45 f0 mov -0x10(%ebp),%eax -80101567: 99 cltd -80101568: c1 ea 1d shr $0x1d,%edx -8010156b: 01 d0 add %edx,%eax -8010156d: 83 e0 07 and $0x7,%eax -80101570: 29 d0 sub %edx,%eax -80101572: ba 01 00 00 00 mov $0x1,%edx -80101577: 89 c1 mov %eax,%ecx -80101579: d3 e2 shl %cl,%edx -8010157b: 89 d0 mov %edx,%eax -8010157d: 89 45 ec mov %eax,-0x14(%ebp) - if((bp->data[bi/8] & m) == 0) -80101580: 8b 45 f0 mov -0x10(%ebp),%eax -80101583: 8d 50 07 lea 0x7(%eax),%edx -80101586: 85 c0 test %eax,%eax -80101588: 0f 48 c2 cmovs %edx,%eax -8010158b: c1 f8 03 sar $0x3,%eax -8010158e: 89 c2 mov %eax,%edx -80101590: 8b 45 f4 mov -0xc(%ebp),%eax -80101593: 0f b6 44 10 18 movzbl 0x18(%eax,%edx,1),%eax -80101598: 0f b6 c0 movzbl %al,%eax -8010159b: 23 45 ec and -0x14(%ebp),%eax -8010159e: 85 c0 test %eax,%eax -801015a0: 75 0d jne 801015af - panic("freeing free block"); -801015a2: 83 ec 0c sub $0xc,%esp -801015a5: 68 36 85 10 80 push $0x80108536 -801015aa: e8 ad ef ff ff call 8010055c - bp->data[bi/8] &= ~m; -801015af: 8b 45 f0 mov -0x10(%ebp),%eax -801015b2: 8d 50 07 lea 0x7(%eax),%edx -801015b5: 85 c0 test %eax,%eax -801015b7: 0f 48 c2 cmovs %edx,%eax -801015ba: c1 f8 03 sar $0x3,%eax -801015bd: 8b 55 f4 mov -0xc(%ebp),%edx -801015c0: 0f b6 54 02 18 movzbl 0x18(%edx,%eax,1),%edx -801015c5: 89 d1 mov %edx,%ecx -801015c7: 8b 55 ec mov -0x14(%ebp),%edx -801015ca: f7 d2 not %edx -801015cc: 21 ca and %ecx,%edx -801015ce: 89 d1 mov %edx,%ecx -801015d0: 8b 55 f4 mov -0xc(%ebp),%edx -801015d3: 88 4c 02 18 mov %cl,0x18(%edx,%eax,1) - log_write(bp); -801015d7: 83 ec 0c sub $0xc,%esp -801015da: ff 75 f4 pushl -0xc(%ebp) -801015dd: e8 37 21 00 00 call 80103719 -801015e2: 83 c4 10 add $0x10,%esp - brelse(bp); -801015e5: 83 ec 0c sub $0xc,%esp -801015e8: ff 75 f4 pushl -0xc(%ebp) -801015eb: e8 3b ec ff ff call 8010022b -801015f0: 83 c4 10 add $0x10,%esp -} -801015f3: c9 leave -801015f4: c3 ret - -801015f5 : - struct inode inode[NINODE]; -} icache; - -void -iinit(int dev) -{ -801015f5: 55 push %ebp -801015f6: 89 e5 mov %esp,%ebp -801015f8: 57 push %edi -801015f9: 56 push %esi -801015fa: 53 push %ebx -801015fb: 83 ec 1c sub $0x1c,%esp - initlock(&icache.lock, "icache"); -801015fe: 83 ec 08 sub $0x8,%esp -80101601: 68 49 85 10 80 push $0x80108549 -80101606: 68 00 13 11 80 push $0x80111300 -8010160b: e8 4a 39 00 00 call 80104f5a -80101610: 83 c4 10 add $0x10,%esp - readsb(dev, &sb); -80101613: 83 ec 08 sub $0x8,%esp -80101616: 68 c0 12 11 80 push $0x801112c0 -8010161b: ff 75 08 pushl 0x8(%ebp) -8010161e: e8 1c fd ff ff call 8010133f -80101623: 83 c4 10 add $0x10,%esp - cprintf("sb: size %d nblocks %d ninodes %d nlog %d logstart %d inodestart %d bmap start %d\n", sb.size, -80101626: a1 d8 12 11 80 mov 0x801112d8,%eax -8010162b: 89 45 e4 mov %eax,-0x1c(%ebp) -8010162e: 8b 3d d4 12 11 80 mov 0x801112d4,%edi -80101634: 8b 35 d0 12 11 80 mov 0x801112d0,%esi -8010163a: 8b 1d cc 12 11 80 mov 0x801112cc,%ebx -80101640: 8b 0d c8 12 11 80 mov 0x801112c8,%ecx -80101646: 8b 15 c4 12 11 80 mov 0x801112c4,%edx -8010164c: a1 c0 12 11 80 mov 0x801112c0,%eax -80101651: ff 75 e4 pushl -0x1c(%ebp) -80101654: 57 push %edi -80101655: 56 push %esi -80101656: 53 push %ebx -80101657: 51 push %ecx -80101658: 52 push %edx -80101659: 50 push %eax -8010165a: 68 50 85 10 80 push $0x80108550 -8010165f: e8 5b ed ff ff call 801003bf -80101664: 83 c4 20 add $0x20,%esp - sb.nblocks, sb.ninodes, sb.nlog, sb.logstart, sb.inodestart, sb.bmapstart); -} -80101667: 8d 65 f4 lea -0xc(%ebp),%esp -8010166a: 5b pop %ebx -8010166b: 5e pop %esi -8010166c: 5f pop %edi -8010166d: 5d pop %ebp -8010166e: c3 ret - -8010166f : -//PAGEBREAK! -// Allocate a new inode with the given type on device dev. -// A free inode has a type of zero. -struct inode* -ialloc(uint dev, short type) -{ -8010166f: 55 push %ebp -80101670: 89 e5 mov %esp,%ebp -80101672: 83 ec 28 sub $0x28,%esp -80101675: 8b 45 0c mov 0xc(%ebp),%eax -80101678: 66 89 45 e4 mov %ax,-0x1c(%ebp) - int inum; - struct buf *bp; - struct dinode *dip; - - for(inum = 1; inum < sb.ninodes; inum++){ -8010167c: c7 45 f4 01 00 00 00 movl $0x1,-0xc(%ebp) -80101683: e9 9e 00 00 00 jmp 80101726 - bp = bread(dev, IBLOCK(inum, sb)); -80101688: 8b 45 f4 mov -0xc(%ebp),%eax -8010168b: c1 e8 03 shr $0x3,%eax -8010168e: 89 c2 mov %eax,%edx -80101690: a1 d4 12 11 80 mov 0x801112d4,%eax -80101695: 01 d0 add %edx,%eax -80101697: 83 ec 08 sub $0x8,%esp -8010169a: 50 push %eax -8010169b: ff 75 08 pushl 0x8(%ebp) -8010169e: e8 11 eb ff ff call 801001b4 -801016a3: 83 c4 10 add $0x10,%esp -801016a6: 89 45 f0 mov %eax,-0x10(%ebp) - dip = (struct dinode*)bp->data + inum%IPB; -801016a9: 8b 45 f0 mov -0x10(%ebp),%eax -801016ac: 8d 50 18 lea 0x18(%eax),%edx -801016af: 8b 45 f4 mov -0xc(%ebp),%eax -801016b2: 83 e0 07 and $0x7,%eax -801016b5: c1 e0 06 shl $0x6,%eax -801016b8: 01 d0 add %edx,%eax -801016ba: 89 45 ec mov %eax,-0x14(%ebp) - if(dip->type == 0){ // a free inode -801016bd: 8b 45 ec mov -0x14(%ebp),%eax -801016c0: 0f b7 00 movzwl (%eax),%eax -801016c3: 66 85 c0 test %ax,%ax -801016c6: 75 4c jne 80101714 - memset(dip, 0, sizeof(*dip)); -801016c8: 83 ec 04 sub $0x4,%esp -801016cb: 6a 40 push $0x40 -801016cd: 6a 00 push $0x0 -801016cf: ff 75 ec pushl -0x14(%ebp) -801016d2: e8 00 3b 00 00 call 801051d7 -801016d7: 83 c4 10 add $0x10,%esp - dip->type = type; -801016da: 8b 45 ec mov -0x14(%ebp),%eax -801016dd: 0f b7 55 e4 movzwl -0x1c(%ebp),%edx -801016e1: 66 89 10 mov %dx,(%eax) - log_write(bp); // mark it allocated on the disk -801016e4: 83 ec 0c sub $0xc,%esp -801016e7: ff 75 f0 pushl -0x10(%ebp) -801016ea: e8 2a 20 00 00 call 80103719 -801016ef: 83 c4 10 add $0x10,%esp - brelse(bp); -801016f2: 83 ec 0c sub $0xc,%esp -801016f5: ff 75 f0 pushl -0x10(%ebp) -801016f8: e8 2e eb ff ff call 8010022b -801016fd: 83 c4 10 add $0x10,%esp - return iget(dev, inum); -80101700: 8b 45 f4 mov -0xc(%ebp),%eax -80101703: 83 ec 08 sub $0x8,%esp -80101706: 50 push %eax -80101707: ff 75 08 pushl 0x8(%ebp) -8010170a: e8 f6 00 00 00 call 80101805 -8010170f: 83 c4 10 add $0x10,%esp -80101712: eb 2f jmp 80101743 - } - brelse(bp); -80101714: 83 ec 0c sub $0xc,%esp -80101717: ff 75 f0 pushl -0x10(%ebp) -8010171a: e8 0c eb ff ff call 8010022b -8010171f: 83 c4 10 add $0x10,%esp -{ - int inum; - struct buf *bp; - struct dinode *dip; - - for(inum = 1; inum < sb.ninodes; inum++){ -80101722: 83 45 f4 01 addl $0x1,-0xc(%ebp) -80101726: 8b 55 f4 mov -0xc(%ebp),%edx -80101729: a1 c8 12 11 80 mov 0x801112c8,%eax -8010172e: 39 c2 cmp %eax,%edx -80101730: 0f 82 52 ff ff ff jb 80101688 - brelse(bp); - return iget(dev, inum); - } - brelse(bp); - } - panic("ialloc: no inodes"); -80101736: 83 ec 0c sub $0xc,%esp -80101739: 68 a3 85 10 80 push $0x801085a3 -8010173e: e8 19 ee ff ff call 8010055c -} -80101743: c9 leave -80101744: c3 ret - -80101745 : - -// Copy a modified in-memory inode to disk. -void -iupdate(struct inode *ip) -{ -80101745: 55 push %ebp -80101746: 89 e5 mov %esp,%ebp -80101748: 83 ec 18 sub $0x18,%esp - struct buf *bp; - struct dinode *dip; - - bp = bread(ip->dev, IBLOCK(ip->inum, sb)); -8010174b: 8b 45 08 mov 0x8(%ebp),%eax -8010174e: 8b 40 04 mov 0x4(%eax),%eax -80101751: c1 e8 03 shr $0x3,%eax -80101754: 89 c2 mov %eax,%edx -80101756: a1 d4 12 11 80 mov 0x801112d4,%eax -8010175b: 01 c2 add %eax,%edx -8010175d: 8b 45 08 mov 0x8(%ebp),%eax -80101760: 8b 00 mov (%eax),%eax -80101762: 83 ec 08 sub $0x8,%esp -80101765: 52 push %edx -80101766: 50 push %eax -80101767: e8 48 ea ff ff call 801001b4 -8010176c: 83 c4 10 add $0x10,%esp -8010176f: 89 45 f4 mov %eax,-0xc(%ebp) - dip = (struct dinode*)bp->data + ip->inum%IPB; -80101772: 8b 45 f4 mov -0xc(%ebp),%eax -80101775: 8d 50 18 lea 0x18(%eax),%edx -80101778: 8b 45 08 mov 0x8(%ebp),%eax -8010177b: 8b 40 04 mov 0x4(%eax),%eax -8010177e: 83 e0 07 and $0x7,%eax -80101781: c1 e0 06 shl $0x6,%eax -80101784: 01 d0 add %edx,%eax -80101786: 89 45 f0 mov %eax,-0x10(%ebp) - dip->type = ip->type; -80101789: 8b 45 08 mov 0x8(%ebp),%eax -8010178c: 0f b7 50 10 movzwl 0x10(%eax),%edx -80101790: 8b 45 f0 mov -0x10(%ebp),%eax -80101793: 66 89 10 mov %dx,(%eax) - dip->major = ip->major; -80101796: 8b 45 08 mov 0x8(%ebp),%eax -80101799: 0f b7 50 12 movzwl 0x12(%eax),%edx -8010179d: 8b 45 f0 mov -0x10(%ebp),%eax -801017a0: 66 89 50 02 mov %dx,0x2(%eax) - dip->minor = ip->minor; -801017a4: 8b 45 08 mov 0x8(%ebp),%eax -801017a7: 0f b7 50 14 movzwl 0x14(%eax),%edx -801017ab: 8b 45 f0 mov -0x10(%ebp),%eax -801017ae: 66 89 50 04 mov %dx,0x4(%eax) - dip->nlink = ip->nlink; -801017b2: 8b 45 08 mov 0x8(%ebp),%eax -801017b5: 0f b7 50 16 movzwl 0x16(%eax),%edx -801017b9: 8b 45 f0 mov -0x10(%ebp),%eax -801017bc: 66 89 50 06 mov %dx,0x6(%eax) - dip->size = ip->size; -801017c0: 8b 45 08 mov 0x8(%ebp),%eax -801017c3: 8b 50 18 mov 0x18(%eax),%edx -801017c6: 8b 45 f0 mov -0x10(%ebp),%eax -801017c9: 89 50 08 mov %edx,0x8(%eax) - memmove(dip->addrs, ip->addrs, sizeof(ip->addrs)); -801017cc: 8b 45 08 mov 0x8(%ebp),%eax -801017cf: 8d 50 1c lea 0x1c(%eax),%edx -801017d2: 8b 45 f0 mov -0x10(%ebp),%eax -801017d5: 83 c0 0c add $0xc,%eax -801017d8: 83 ec 04 sub $0x4,%esp -801017db: 6a 34 push $0x34 -801017dd: 52 push %edx -801017de: 50 push %eax -801017df: e8 b2 3a 00 00 call 80105296 -801017e4: 83 c4 10 add $0x10,%esp - log_write(bp); -801017e7: 83 ec 0c sub $0xc,%esp -801017ea: ff 75 f4 pushl -0xc(%ebp) -801017ed: e8 27 1f 00 00 call 80103719 -801017f2: 83 c4 10 add $0x10,%esp - brelse(bp); -801017f5: 83 ec 0c sub $0xc,%esp -801017f8: ff 75 f4 pushl -0xc(%ebp) -801017fb: e8 2b ea ff ff call 8010022b -80101800: 83 c4 10 add $0x10,%esp -} -80101803: c9 leave -80101804: c3 ret - -80101805 : -// Find the inode with number inum on device dev -// and return the in-memory copy. Does not lock -// the inode and does not read it from disk. -static struct inode* -iget(uint dev, uint inum) -{ -80101805: 55 push %ebp -80101806: 89 e5 mov %esp,%ebp -80101808: 83 ec 18 sub $0x18,%esp - struct inode *ip, *empty; - - acquire(&icache.lock); -8010180b: 83 ec 0c sub $0xc,%esp -8010180e: 68 00 13 11 80 push $0x80111300 -80101813: e8 63 37 00 00 call 80104f7b -80101818: 83 c4 10 add $0x10,%esp - - // Is the inode already cached? - empty = 0; -8010181b: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - for(ip = &icache.inode[0]; ip < &icache.inode[NINODE]; ip++){ -80101822: c7 45 f4 34 13 11 80 movl $0x80111334,-0xc(%ebp) -80101829: eb 5d jmp 80101888 - if(ip->ref > 0 && ip->dev == dev && ip->inum == inum){ -8010182b: 8b 45 f4 mov -0xc(%ebp),%eax -8010182e: 8b 40 08 mov 0x8(%eax),%eax -80101831: 85 c0 test %eax,%eax -80101833: 7e 39 jle 8010186e -80101835: 8b 45 f4 mov -0xc(%ebp),%eax -80101838: 8b 00 mov (%eax),%eax -8010183a: 3b 45 08 cmp 0x8(%ebp),%eax -8010183d: 75 2f jne 8010186e -8010183f: 8b 45 f4 mov -0xc(%ebp),%eax -80101842: 8b 40 04 mov 0x4(%eax),%eax -80101845: 3b 45 0c cmp 0xc(%ebp),%eax -80101848: 75 24 jne 8010186e - ip->ref++; -8010184a: 8b 45 f4 mov -0xc(%ebp),%eax -8010184d: 8b 40 08 mov 0x8(%eax),%eax -80101850: 8d 50 01 lea 0x1(%eax),%edx -80101853: 8b 45 f4 mov -0xc(%ebp),%eax -80101856: 89 50 08 mov %edx,0x8(%eax) - release(&icache.lock); -80101859: 83 ec 0c sub $0xc,%esp -8010185c: 68 00 13 11 80 push $0x80111300 -80101861: e8 7b 37 00 00 call 80104fe1 -80101866: 83 c4 10 add $0x10,%esp - return ip; -80101869: 8b 45 f4 mov -0xc(%ebp),%eax -8010186c: eb 74 jmp 801018e2 - } - if(empty == 0 && ip->ref == 0) // Remember empty slot. -8010186e: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) -80101872: 75 10 jne 80101884 -80101874: 8b 45 f4 mov -0xc(%ebp),%eax -80101877: 8b 40 08 mov 0x8(%eax),%eax -8010187a: 85 c0 test %eax,%eax -8010187c: 75 06 jne 80101884 - empty = ip; -8010187e: 8b 45 f4 mov -0xc(%ebp),%eax -80101881: 89 45 f0 mov %eax,-0x10(%ebp) - - acquire(&icache.lock); - - // Is the inode already cached? - empty = 0; - for(ip = &icache.inode[0]; ip < &icache.inode[NINODE]; ip++){ -80101884: 83 45 f4 50 addl $0x50,-0xc(%ebp) -80101888: 81 7d f4 d4 22 11 80 cmpl $0x801122d4,-0xc(%ebp) -8010188f: 72 9a jb 8010182b - if(empty == 0 && ip->ref == 0) // Remember empty slot. - empty = ip; - } - - // Recycle an inode cache entry. - if(empty == 0) -80101891: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) -80101895: 75 0d jne 801018a4 - panic("iget: no inodes"); -80101897: 83 ec 0c sub $0xc,%esp -8010189a: 68 b5 85 10 80 push $0x801085b5 -8010189f: e8 b8 ec ff ff call 8010055c - - ip = empty; -801018a4: 8b 45 f0 mov -0x10(%ebp),%eax -801018a7: 89 45 f4 mov %eax,-0xc(%ebp) - ip->dev = dev; -801018aa: 8b 45 f4 mov -0xc(%ebp),%eax -801018ad: 8b 55 08 mov 0x8(%ebp),%edx -801018b0: 89 10 mov %edx,(%eax) - ip->inum = inum; -801018b2: 8b 45 f4 mov -0xc(%ebp),%eax -801018b5: 8b 55 0c mov 0xc(%ebp),%edx -801018b8: 89 50 04 mov %edx,0x4(%eax) - ip->ref = 1; -801018bb: 8b 45 f4 mov -0xc(%ebp),%eax -801018be: c7 40 08 01 00 00 00 movl $0x1,0x8(%eax) - ip->flags = 0; -801018c5: 8b 45 f4 mov -0xc(%ebp),%eax -801018c8: c7 40 0c 00 00 00 00 movl $0x0,0xc(%eax) - release(&icache.lock); -801018cf: 83 ec 0c sub $0xc,%esp -801018d2: 68 00 13 11 80 push $0x80111300 -801018d7: e8 05 37 00 00 call 80104fe1 -801018dc: 83 c4 10 add $0x10,%esp - - return ip; -801018df: 8b 45 f4 mov -0xc(%ebp),%eax -} -801018e2: c9 leave -801018e3: c3 ret - -801018e4 : - -// Increment reference count for ip. -// Returns ip to enable ip = idup(ip1) idiom. -struct inode* -idup(struct inode *ip) -{ -801018e4: 55 push %ebp -801018e5: 89 e5 mov %esp,%ebp -801018e7: 83 ec 08 sub $0x8,%esp - acquire(&icache.lock); -801018ea: 83 ec 0c sub $0xc,%esp -801018ed: 68 00 13 11 80 push $0x80111300 -801018f2: e8 84 36 00 00 call 80104f7b -801018f7: 83 c4 10 add $0x10,%esp - ip->ref++; -801018fa: 8b 45 08 mov 0x8(%ebp),%eax -801018fd: 8b 40 08 mov 0x8(%eax),%eax -80101900: 8d 50 01 lea 0x1(%eax),%edx -80101903: 8b 45 08 mov 0x8(%ebp),%eax -80101906: 89 50 08 mov %edx,0x8(%eax) - release(&icache.lock); -80101909: 83 ec 0c sub $0xc,%esp -8010190c: 68 00 13 11 80 push $0x80111300 -80101911: e8 cb 36 00 00 call 80104fe1 -80101916: 83 c4 10 add $0x10,%esp - return ip; -80101919: 8b 45 08 mov 0x8(%ebp),%eax -} -8010191c: c9 leave -8010191d: c3 ret - -8010191e : - -// Lock the given inode. -// Reads the inode from disk if necessary. -void -ilock(struct inode *ip) -{ -8010191e: 55 push %ebp -8010191f: 89 e5 mov %esp,%ebp -80101921: 83 ec 18 sub $0x18,%esp - struct buf *bp; - struct dinode *dip; - - if(ip == 0 || ip->ref < 1) -80101924: 83 7d 08 00 cmpl $0x0,0x8(%ebp) -80101928: 74 0a je 80101934 -8010192a: 8b 45 08 mov 0x8(%ebp),%eax -8010192d: 8b 40 08 mov 0x8(%eax),%eax -80101930: 85 c0 test %eax,%eax -80101932: 7f 0d jg 80101941 - panic("ilock"); -80101934: 83 ec 0c sub $0xc,%esp -80101937: 68 c5 85 10 80 push $0x801085c5 -8010193c: e8 1b ec ff ff call 8010055c - - acquire(&icache.lock); -80101941: 83 ec 0c sub $0xc,%esp -80101944: 68 00 13 11 80 push $0x80111300 -80101949: e8 2d 36 00 00 call 80104f7b -8010194e: 83 c4 10 add $0x10,%esp - while(ip->flags & I_BUSY) -80101951: eb 13 jmp 80101966 - sleep(ip, &icache.lock); -80101953: 83 ec 08 sub $0x8,%esp -80101956: 68 00 13 11 80 push $0x80111300 -8010195b: ff 75 08 pushl 0x8(%ebp) -8010195e: e8 28 33 00 00 call 80104c8b -80101963: 83 c4 10 add $0x10,%esp - - if(ip == 0 || ip->ref < 1) - panic("ilock"); - - acquire(&icache.lock); - while(ip->flags & I_BUSY) -80101966: 8b 45 08 mov 0x8(%ebp),%eax -80101969: 8b 40 0c mov 0xc(%eax),%eax -8010196c: 83 e0 01 and $0x1,%eax -8010196f: 85 c0 test %eax,%eax -80101971: 75 e0 jne 80101953 - sleep(ip, &icache.lock); - ip->flags |= I_BUSY; -80101973: 8b 45 08 mov 0x8(%ebp),%eax -80101976: 8b 40 0c mov 0xc(%eax),%eax -80101979: 83 c8 01 or $0x1,%eax -8010197c: 89 c2 mov %eax,%edx -8010197e: 8b 45 08 mov 0x8(%ebp),%eax -80101981: 89 50 0c mov %edx,0xc(%eax) - release(&icache.lock); -80101984: 83 ec 0c sub $0xc,%esp -80101987: 68 00 13 11 80 push $0x80111300 -8010198c: e8 50 36 00 00 call 80104fe1 -80101991: 83 c4 10 add $0x10,%esp - - if(!(ip->flags & I_VALID)){ -80101994: 8b 45 08 mov 0x8(%ebp),%eax -80101997: 8b 40 0c mov 0xc(%eax),%eax -8010199a: 83 e0 02 and $0x2,%eax -8010199d: 85 c0 test %eax,%eax -8010199f: 0f 85 d4 00 00 00 jne 80101a79 - bp = bread(ip->dev, IBLOCK(ip->inum, sb)); -801019a5: 8b 45 08 mov 0x8(%ebp),%eax -801019a8: 8b 40 04 mov 0x4(%eax),%eax -801019ab: c1 e8 03 shr $0x3,%eax -801019ae: 89 c2 mov %eax,%edx -801019b0: a1 d4 12 11 80 mov 0x801112d4,%eax -801019b5: 01 c2 add %eax,%edx -801019b7: 8b 45 08 mov 0x8(%ebp),%eax -801019ba: 8b 00 mov (%eax),%eax -801019bc: 83 ec 08 sub $0x8,%esp -801019bf: 52 push %edx -801019c0: 50 push %eax -801019c1: e8 ee e7 ff ff call 801001b4 -801019c6: 83 c4 10 add $0x10,%esp -801019c9: 89 45 f4 mov %eax,-0xc(%ebp) - dip = (struct dinode*)bp->data + ip->inum%IPB; -801019cc: 8b 45 f4 mov -0xc(%ebp),%eax -801019cf: 8d 50 18 lea 0x18(%eax),%edx -801019d2: 8b 45 08 mov 0x8(%ebp),%eax -801019d5: 8b 40 04 mov 0x4(%eax),%eax -801019d8: 83 e0 07 and $0x7,%eax -801019db: c1 e0 06 shl $0x6,%eax -801019de: 01 d0 add %edx,%eax -801019e0: 89 45 f0 mov %eax,-0x10(%ebp) - ip->type = dip->type; -801019e3: 8b 45 f0 mov -0x10(%ebp),%eax -801019e6: 0f b7 10 movzwl (%eax),%edx -801019e9: 8b 45 08 mov 0x8(%ebp),%eax -801019ec: 66 89 50 10 mov %dx,0x10(%eax) - ip->major = dip->major; -801019f0: 8b 45 f0 mov -0x10(%ebp),%eax -801019f3: 0f b7 50 02 movzwl 0x2(%eax),%edx -801019f7: 8b 45 08 mov 0x8(%ebp),%eax -801019fa: 66 89 50 12 mov %dx,0x12(%eax) - ip->minor = dip->minor; -801019fe: 8b 45 f0 mov -0x10(%ebp),%eax -80101a01: 0f b7 50 04 movzwl 0x4(%eax),%edx -80101a05: 8b 45 08 mov 0x8(%ebp),%eax -80101a08: 66 89 50 14 mov %dx,0x14(%eax) - ip->nlink = dip->nlink; -80101a0c: 8b 45 f0 mov -0x10(%ebp),%eax -80101a0f: 0f b7 50 06 movzwl 0x6(%eax),%edx -80101a13: 8b 45 08 mov 0x8(%ebp),%eax -80101a16: 66 89 50 16 mov %dx,0x16(%eax) - ip->size = dip->size; -80101a1a: 8b 45 f0 mov -0x10(%ebp),%eax -80101a1d: 8b 50 08 mov 0x8(%eax),%edx -80101a20: 8b 45 08 mov 0x8(%ebp),%eax -80101a23: 89 50 18 mov %edx,0x18(%eax) - memmove(ip->addrs, dip->addrs, sizeof(ip->addrs)); -80101a26: 8b 45 f0 mov -0x10(%ebp),%eax -80101a29: 8d 50 0c lea 0xc(%eax),%edx -80101a2c: 8b 45 08 mov 0x8(%ebp),%eax -80101a2f: 83 c0 1c add $0x1c,%eax -80101a32: 83 ec 04 sub $0x4,%esp -80101a35: 6a 34 push $0x34 -80101a37: 52 push %edx -80101a38: 50 push %eax -80101a39: e8 58 38 00 00 call 80105296 -80101a3e: 83 c4 10 add $0x10,%esp - brelse(bp); -80101a41: 83 ec 0c sub $0xc,%esp -80101a44: ff 75 f4 pushl -0xc(%ebp) -80101a47: e8 df e7 ff ff call 8010022b -80101a4c: 83 c4 10 add $0x10,%esp - ip->flags |= I_VALID; -80101a4f: 8b 45 08 mov 0x8(%ebp),%eax -80101a52: 8b 40 0c mov 0xc(%eax),%eax -80101a55: 83 c8 02 or $0x2,%eax -80101a58: 89 c2 mov %eax,%edx -80101a5a: 8b 45 08 mov 0x8(%ebp),%eax -80101a5d: 89 50 0c mov %edx,0xc(%eax) - if(ip->type == 0) -80101a60: 8b 45 08 mov 0x8(%ebp),%eax -80101a63: 0f b7 40 10 movzwl 0x10(%eax),%eax -80101a67: 66 85 c0 test %ax,%ax -80101a6a: 75 0d jne 80101a79 - panic("ilock: no type"); -80101a6c: 83 ec 0c sub $0xc,%esp -80101a6f: 68 cb 85 10 80 push $0x801085cb -80101a74: e8 e3 ea ff ff call 8010055c - } -} -80101a79: c9 leave -80101a7a: c3 ret - -80101a7b : - -// Unlock the given inode. -void -iunlock(struct inode *ip) -{ -80101a7b: 55 push %ebp -80101a7c: 89 e5 mov %esp,%ebp -80101a7e: 83 ec 08 sub $0x8,%esp - if(ip == 0 || !(ip->flags & I_BUSY) || ip->ref < 1) -80101a81: 83 7d 08 00 cmpl $0x0,0x8(%ebp) -80101a85: 74 17 je 80101a9e -80101a87: 8b 45 08 mov 0x8(%ebp),%eax -80101a8a: 8b 40 0c mov 0xc(%eax),%eax -80101a8d: 83 e0 01 and $0x1,%eax -80101a90: 85 c0 test %eax,%eax -80101a92: 74 0a je 80101a9e -80101a94: 8b 45 08 mov 0x8(%ebp),%eax -80101a97: 8b 40 08 mov 0x8(%eax),%eax -80101a9a: 85 c0 test %eax,%eax -80101a9c: 7f 0d jg 80101aab - panic("iunlock"); -80101a9e: 83 ec 0c sub $0xc,%esp -80101aa1: 68 da 85 10 80 push $0x801085da -80101aa6: e8 b1 ea ff ff call 8010055c - - acquire(&icache.lock); -80101aab: 83 ec 0c sub $0xc,%esp -80101aae: 68 00 13 11 80 push $0x80111300 -80101ab3: e8 c3 34 00 00 call 80104f7b -80101ab8: 83 c4 10 add $0x10,%esp - ip->flags &= ~I_BUSY; -80101abb: 8b 45 08 mov 0x8(%ebp),%eax -80101abe: 8b 40 0c mov 0xc(%eax),%eax -80101ac1: 83 e0 fe and $0xfffffffe,%eax -80101ac4: 89 c2 mov %eax,%edx -80101ac6: 8b 45 08 mov 0x8(%ebp),%eax -80101ac9: 89 50 0c mov %edx,0xc(%eax) - wakeup(ip); -80101acc: 83 ec 0c sub $0xc,%esp -80101acf: ff 75 08 pushl 0x8(%ebp) -80101ad2: e8 9d 32 00 00 call 80104d74 -80101ad7: 83 c4 10 add $0x10,%esp - release(&icache.lock); -80101ada: 83 ec 0c sub $0xc,%esp -80101add: 68 00 13 11 80 push $0x80111300 -80101ae2: e8 fa 34 00 00 call 80104fe1 -80101ae7: 83 c4 10 add $0x10,%esp -} -80101aea: c9 leave -80101aeb: c3 ret - -80101aec : -// to it, free the inode (and its content) on disk. -// All calls to iput() must be inside a transaction in -// case it has to free the inode. -void -iput(struct inode *ip) -{ -80101aec: 55 push %ebp -80101aed: 89 e5 mov %esp,%ebp -80101aef: 83 ec 08 sub $0x8,%esp - acquire(&icache.lock); -80101af2: 83 ec 0c sub $0xc,%esp -80101af5: 68 00 13 11 80 push $0x80111300 -80101afa: e8 7c 34 00 00 call 80104f7b -80101aff: 83 c4 10 add $0x10,%esp - if(ip->ref == 1 && (ip->flags & I_VALID) && ip->nlink == 0){ -80101b02: 8b 45 08 mov 0x8(%ebp),%eax -80101b05: 8b 40 08 mov 0x8(%eax),%eax -80101b08: 83 f8 01 cmp $0x1,%eax -80101b0b: 0f 85 a9 00 00 00 jne 80101bba -80101b11: 8b 45 08 mov 0x8(%ebp),%eax -80101b14: 8b 40 0c mov 0xc(%eax),%eax -80101b17: 83 e0 02 and $0x2,%eax -80101b1a: 85 c0 test %eax,%eax -80101b1c: 0f 84 98 00 00 00 je 80101bba -80101b22: 8b 45 08 mov 0x8(%ebp),%eax -80101b25: 0f b7 40 16 movzwl 0x16(%eax),%eax -80101b29: 66 85 c0 test %ax,%ax -80101b2c: 0f 85 88 00 00 00 jne 80101bba - // inode has no links and no other references: truncate and free. - if(ip->flags & I_BUSY) -80101b32: 8b 45 08 mov 0x8(%ebp),%eax -80101b35: 8b 40 0c mov 0xc(%eax),%eax -80101b38: 83 e0 01 and $0x1,%eax -80101b3b: 85 c0 test %eax,%eax -80101b3d: 74 0d je 80101b4c - panic("iput busy"); -80101b3f: 83 ec 0c sub $0xc,%esp -80101b42: 68 e2 85 10 80 push $0x801085e2 -80101b47: e8 10 ea ff ff call 8010055c - ip->flags |= I_BUSY; -80101b4c: 8b 45 08 mov 0x8(%ebp),%eax -80101b4f: 8b 40 0c mov 0xc(%eax),%eax -80101b52: 83 c8 01 or $0x1,%eax -80101b55: 89 c2 mov %eax,%edx -80101b57: 8b 45 08 mov 0x8(%ebp),%eax -80101b5a: 89 50 0c mov %edx,0xc(%eax) - release(&icache.lock); -80101b5d: 83 ec 0c sub $0xc,%esp -80101b60: 68 00 13 11 80 push $0x80111300 -80101b65: e8 77 34 00 00 call 80104fe1 -80101b6a: 83 c4 10 add $0x10,%esp - itrunc(ip); -80101b6d: 83 ec 0c sub $0xc,%esp -80101b70: ff 75 08 pushl 0x8(%ebp) -80101b73: e8 a6 01 00 00 call 80101d1e -80101b78: 83 c4 10 add $0x10,%esp - ip->type = 0; -80101b7b: 8b 45 08 mov 0x8(%ebp),%eax -80101b7e: 66 c7 40 10 00 00 movw $0x0,0x10(%eax) - iupdate(ip); -80101b84: 83 ec 0c sub $0xc,%esp -80101b87: ff 75 08 pushl 0x8(%ebp) -80101b8a: e8 b6 fb ff ff call 80101745 -80101b8f: 83 c4 10 add $0x10,%esp - acquire(&icache.lock); -80101b92: 83 ec 0c sub $0xc,%esp -80101b95: 68 00 13 11 80 push $0x80111300 -80101b9a: e8 dc 33 00 00 call 80104f7b -80101b9f: 83 c4 10 add $0x10,%esp - ip->flags = 0; -80101ba2: 8b 45 08 mov 0x8(%ebp),%eax -80101ba5: c7 40 0c 00 00 00 00 movl $0x0,0xc(%eax) - wakeup(ip); -80101bac: 83 ec 0c sub $0xc,%esp -80101baf: ff 75 08 pushl 0x8(%ebp) -80101bb2: e8 bd 31 00 00 call 80104d74 -80101bb7: 83 c4 10 add $0x10,%esp - } - ip->ref--; -80101bba: 8b 45 08 mov 0x8(%ebp),%eax -80101bbd: 8b 40 08 mov 0x8(%eax),%eax -80101bc0: 8d 50 ff lea -0x1(%eax),%edx -80101bc3: 8b 45 08 mov 0x8(%ebp),%eax -80101bc6: 89 50 08 mov %edx,0x8(%eax) - release(&icache.lock); -80101bc9: 83 ec 0c sub $0xc,%esp -80101bcc: 68 00 13 11 80 push $0x80111300 -80101bd1: e8 0b 34 00 00 call 80104fe1 -80101bd6: 83 c4 10 add $0x10,%esp -} -80101bd9: c9 leave -80101bda: c3 ret - -80101bdb : - -// Common idiom: unlock, then put. -void -iunlockput(struct inode *ip) -{ -80101bdb: 55 push %ebp -80101bdc: 89 e5 mov %esp,%ebp -80101bde: 83 ec 08 sub $0x8,%esp - iunlock(ip); -80101be1: 83 ec 0c sub $0xc,%esp -80101be4: ff 75 08 pushl 0x8(%ebp) -80101be7: e8 8f fe ff ff call 80101a7b -80101bec: 83 c4 10 add $0x10,%esp - iput(ip); -80101bef: 83 ec 0c sub $0xc,%esp -80101bf2: ff 75 08 pushl 0x8(%ebp) -80101bf5: e8 f2 fe ff ff call 80101aec -80101bfa: 83 c4 10 add $0x10,%esp -} -80101bfd: c9 leave -80101bfe: c3 ret - -80101bff : - -// Return the disk block address of the nth block in inode ip. -// If there is no such block, bmap allocates one. -static uint -bmap(struct inode *ip, uint bn) -{ -80101bff: 55 push %ebp -80101c00: 89 e5 mov %esp,%ebp -80101c02: 53 push %ebx -80101c03: 83 ec 14 sub $0x14,%esp - uint addr, *a; - struct buf *bp; - - if(bn < NDIRECT){ -80101c06: 83 7d 0c 0b cmpl $0xb,0xc(%ebp) -80101c0a: 77 42 ja 80101c4e - if((addr = ip->addrs[bn]) == 0) -80101c0c: 8b 45 08 mov 0x8(%ebp),%eax -80101c0f: 8b 55 0c mov 0xc(%ebp),%edx -80101c12: 83 c2 04 add $0x4,%edx -80101c15: 8b 44 90 0c mov 0xc(%eax,%edx,4),%eax -80101c19: 89 45 f4 mov %eax,-0xc(%ebp) -80101c1c: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -80101c20: 75 24 jne 80101c46 - ip->addrs[bn] = addr = balloc(ip->dev); -80101c22: 8b 45 08 mov 0x8(%ebp),%eax -80101c25: 8b 00 mov (%eax),%eax -80101c27: 83 ec 0c sub $0xc,%esp -80101c2a: 50 push %eax -80101c2b: e8 a3 f7 ff ff call 801013d3 -80101c30: 83 c4 10 add $0x10,%esp -80101c33: 89 45 f4 mov %eax,-0xc(%ebp) -80101c36: 8b 45 08 mov 0x8(%ebp),%eax -80101c39: 8b 55 0c mov 0xc(%ebp),%edx -80101c3c: 8d 4a 04 lea 0x4(%edx),%ecx -80101c3f: 8b 55 f4 mov -0xc(%ebp),%edx -80101c42: 89 54 88 0c mov %edx,0xc(%eax,%ecx,4) - return addr; -80101c46: 8b 45 f4 mov -0xc(%ebp),%eax -80101c49: e9 cb 00 00 00 jmp 80101d19 - } - bn -= NDIRECT; -80101c4e: 83 6d 0c 0c subl $0xc,0xc(%ebp) - - if(bn < NINDIRECT){ -80101c52: 83 7d 0c 7f cmpl $0x7f,0xc(%ebp) -80101c56: 0f 87 b0 00 00 00 ja 80101d0c - // Load indirect block, allocating if necessary. - if((addr = ip->addrs[NDIRECT]) == 0) -80101c5c: 8b 45 08 mov 0x8(%ebp),%eax -80101c5f: 8b 40 4c mov 0x4c(%eax),%eax -80101c62: 89 45 f4 mov %eax,-0xc(%ebp) -80101c65: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -80101c69: 75 1d jne 80101c88 - ip->addrs[NDIRECT] = addr = balloc(ip->dev); -80101c6b: 8b 45 08 mov 0x8(%ebp),%eax -80101c6e: 8b 00 mov (%eax),%eax -80101c70: 83 ec 0c sub $0xc,%esp -80101c73: 50 push %eax -80101c74: e8 5a f7 ff ff call 801013d3 -80101c79: 83 c4 10 add $0x10,%esp -80101c7c: 89 45 f4 mov %eax,-0xc(%ebp) -80101c7f: 8b 45 08 mov 0x8(%ebp),%eax -80101c82: 8b 55 f4 mov -0xc(%ebp),%edx -80101c85: 89 50 4c mov %edx,0x4c(%eax) - bp = bread(ip->dev, addr); -80101c88: 8b 45 08 mov 0x8(%ebp),%eax -80101c8b: 8b 00 mov (%eax),%eax -80101c8d: 83 ec 08 sub $0x8,%esp -80101c90: ff 75 f4 pushl -0xc(%ebp) -80101c93: 50 push %eax -80101c94: e8 1b e5 ff ff call 801001b4 -80101c99: 83 c4 10 add $0x10,%esp -80101c9c: 89 45 f0 mov %eax,-0x10(%ebp) - a = (uint*)bp->data; -80101c9f: 8b 45 f0 mov -0x10(%ebp),%eax -80101ca2: 83 c0 18 add $0x18,%eax -80101ca5: 89 45 ec mov %eax,-0x14(%ebp) - if((addr = a[bn]) == 0){ -80101ca8: 8b 45 0c mov 0xc(%ebp),%eax -80101cab: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx -80101cb2: 8b 45 ec mov -0x14(%ebp),%eax -80101cb5: 01 d0 add %edx,%eax -80101cb7: 8b 00 mov (%eax),%eax -80101cb9: 89 45 f4 mov %eax,-0xc(%ebp) -80101cbc: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -80101cc0: 75 37 jne 80101cf9 - a[bn] = addr = balloc(ip->dev); -80101cc2: 8b 45 0c mov 0xc(%ebp),%eax -80101cc5: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx -80101ccc: 8b 45 ec mov -0x14(%ebp),%eax -80101ccf: 8d 1c 02 lea (%edx,%eax,1),%ebx -80101cd2: 8b 45 08 mov 0x8(%ebp),%eax -80101cd5: 8b 00 mov (%eax),%eax -80101cd7: 83 ec 0c sub $0xc,%esp -80101cda: 50 push %eax -80101cdb: e8 f3 f6 ff ff call 801013d3 -80101ce0: 83 c4 10 add $0x10,%esp -80101ce3: 89 45 f4 mov %eax,-0xc(%ebp) -80101ce6: 8b 45 f4 mov -0xc(%ebp),%eax -80101ce9: 89 03 mov %eax,(%ebx) - log_write(bp); -80101ceb: 83 ec 0c sub $0xc,%esp -80101cee: ff 75 f0 pushl -0x10(%ebp) -80101cf1: e8 23 1a 00 00 call 80103719 -80101cf6: 83 c4 10 add $0x10,%esp - } - brelse(bp); -80101cf9: 83 ec 0c sub $0xc,%esp -80101cfc: ff 75 f0 pushl -0x10(%ebp) -80101cff: e8 27 e5 ff ff call 8010022b -80101d04: 83 c4 10 add $0x10,%esp - return addr; -80101d07: 8b 45 f4 mov -0xc(%ebp),%eax -80101d0a: eb 0d jmp 80101d19 - } - - panic("bmap: out of range"); -80101d0c: 83 ec 0c sub $0xc,%esp -80101d0f: 68 ec 85 10 80 push $0x801085ec -80101d14: e8 43 e8 ff ff call 8010055c -} -80101d19: 8b 5d fc mov -0x4(%ebp),%ebx -80101d1c: c9 leave -80101d1d: c3 ret - -80101d1e : -// to it (no directory entries referring to it) -// and has no in-memory reference to it (is -// not an open file or current directory). -static void -itrunc(struct inode *ip) -{ -80101d1e: 55 push %ebp -80101d1f: 89 e5 mov %esp,%ebp -80101d21: 83 ec 18 sub $0x18,%esp - int i, j; - struct buf *bp; - uint *a; - - for(i = 0; i < NDIRECT; i++){ -80101d24: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) -80101d2b: eb 45 jmp 80101d72 - if(ip->addrs[i]){ -80101d2d: 8b 45 08 mov 0x8(%ebp),%eax -80101d30: 8b 55 f4 mov -0xc(%ebp),%edx -80101d33: 83 c2 04 add $0x4,%edx -80101d36: 8b 44 90 0c mov 0xc(%eax,%edx,4),%eax -80101d3a: 85 c0 test %eax,%eax -80101d3c: 74 30 je 80101d6e - bfree(ip->dev, ip->addrs[i]); -80101d3e: 8b 45 08 mov 0x8(%ebp),%eax -80101d41: 8b 55 f4 mov -0xc(%ebp),%edx -80101d44: 83 c2 04 add $0x4,%edx -80101d47: 8b 44 90 0c mov 0xc(%eax,%edx,4),%eax -80101d4b: 8b 55 08 mov 0x8(%ebp),%edx -80101d4e: 8b 12 mov (%edx),%edx -80101d50: 83 ec 08 sub $0x8,%esp -80101d53: 50 push %eax -80101d54: 52 push %edx -80101d55: e8 c4 f7 ff ff call 8010151e -80101d5a: 83 c4 10 add $0x10,%esp - ip->addrs[i] = 0; -80101d5d: 8b 45 08 mov 0x8(%ebp),%eax -80101d60: 8b 55 f4 mov -0xc(%ebp),%edx -80101d63: 83 c2 04 add $0x4,%edx -80101d66: c7 44 90 0c 00 00 00 movl $0x0,0xc(%eax,%edx,4) -80101d6d: 00 -{ - int i, j; - struct buf *bp; - uint *a; - - for(i = 0; i < NDIRECT; i++){ -80101d6e: 83 45 f4 01 addl $0x1,-0xc(%ebp) -80101d72: 83 7d f4 0b cmpl $0xb,-0xc(%ebp) -80101d76: 7e b5 jle 80101d2d - bfree(ip->dev, ip->addrs[i]); - ip->addrs[i] = 0; - } - } - - if(ip->addrs[NDIRECT]){ -80101d78: 8b 45 08 mov 0x8(%ebp),%eax -80101d7b: 8b 40 4c mov 0x4c(%eax),%eax -80101d7e: 85 c0 test %eax,%eax -80101d80: 0f 84 a1 00 00 00 je 80101e27 - bp = bread(ip->dev, ip->addrs[NDIRECT]); -80101d86: 8b 45 08 mov 0x8(%ebp),%eax -80101d89: 8b 50 4c mov 0x4c(%eax),%edx -80101d8c: 8b 45 08 mov 0x8(%ebp),%eax -80101d8f: 8b 00 mov (%eax),%eax -80101d91: 83 ec 08 sub $0x8,%esp -80101d94: 52 push %edx -80101d95: 50 push %eax -80101d96: e8 19 e4 ff ff call 801001b4 -80101d9b: 83 c4 10 add $0x10,%esp -80101d9e: 89 45 ec mov %eax,-0x14(%ebp) - a = (uint*)bp->data; -80101da1: 8b 45 ec mov -0x14(%ebp),%eax -80101da4: 83 c0 18 add $0x18,%eax -80101da7: 89 45 e8 mov %eax,-0x18(%ebp) - for(j = 0; j < NINDIRECT; j++){ -80101daa: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) -80101db1: eb 3c jmp 80101def - if(a[j]) -80101db3: 8b 45 f0 mov -0x10(%ebp),%eax -80101db6: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx -80101dbd: 8b 45 e8 mov -0x18(%ebp),%eax -80101dc0: 01 d0 add %edx,%eax -80101dc2: 8b 00 mov (%eax),%eax -80101dc4: 85 c0 test %eax,%eax -80101dc6: 74 23 je 80101deb - bfree(ip->dev, a[j]); -80101dc8: 8b 45 f0 mov -0x10(%ebp),%eax -80101dcb: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx -80101dd2: 8b 45 e8 mov -0x18(%ebp),%eax -80101dd5: 01 d0 add %edx,%eax -80101dd7: 8b 00 mov (%eax),%eax -80101dd9: 8b 55 08 mov 0x8(%ebp),%edx -80101ddc: 8b 12 mov (%edx),%edx -80101dde: 83 ec 08 sub $0x8,%esp -80101de1: 50 push %eax -80101de2: 52 push %edx -80101de3: e8 36 f7 ff ff call 8010151e -80101de8: 83 c4 10 add $0x10,%esp - } - - if(ip->addrs[NDIRECT]){ - bp = bread(ip->dev, ip->addrs[NDIRECT]); - a = (uint*)bp->data; - for(j = 0; j < NINDIRECT; j++){ -80101deb: 83 45 f0 01 addl $0x1,-0x10(%ebp) -80101def: 8b 45 f0 mov -0x10(%ebp),%eax -80101df2: 83 f8 7f cmp $0x7f,%eax -80101df5: 76 bc jbe 80101db3 - if(a[j]) - bfree(ip->dev, a[j]); - } - brelse(bp); -80101df7: 83 ec 0c sub $0xc,%esp -80101dfa: ff 75 ec pushl -0x14(%ebp) -80101dfd: e8 29 e4 ff ff call 8010022b -80101e02: 83 c4 10 add $0x10,%esp - bfree(ip->dev, ip->addrs[NDIRECT]); -80101e05: 8b 45 08 mov 0x8(%ebp),%eax -80101e08: 8b 40 4c mov 0x4c(%eax),%eax -80101e0b: 8b 55 08 mov 0x8(%ebp),%edx -80101e0e: 8b 12 mov (%edx),%edx -80101e10: 83 ec 08 sub $0x8,%esp -80101e13: 50 push %eax -80101e14: 52 push %edx -80101e15: e8 04 f7 ff ff call 8010151e -80101e1a: 83 c4 10 add $0x10,%esp - ip->addrs[NDIRECT] = 0; -80101e1d: 8b 45 08 mov 0x8(%ebp),%eax -80101e20: c7 40 4c 00 00 00 00 movl $0x0,0x4c(%eax) - } - - ip->size = 0; -80101e27: 8b 45 08 mov 0x8(%ebp),%eax -80101e2a: c7 40 18 00 00 00 00 movl $0x0,0x18(%eax) - iupdate(ip); -80101e31: 83 ec 0c sub $0xc,%esp -80101e34: ff 75 08 pushl 0x8(%ebp) -80101e37: e8 09 f9 ff ff call 80101745 -80101e3c: 83 c4 10 add $0x10,%esp -} -80101e3f: c9 leave -80101e40: c3 ret - -80101e41 : - -// Copy stat information from inode. -void -stati(struct inode *ip, struct stat *st) -{ -80101e41: 55 push %ebp -80101e42: 89 e5 mov %esp,%ebp - st->dev = ip->dev; -80101e44: 8b 45 08 mov 0x8(%ebp),%eax -80101e47: 8b 00 mov (%eax),%eax -80101e49: 89 c2 mov %eax,%edx -80101e4b: 8b 45 0c mov 0xc(%ebp),%eax -80101e4e: 89 50 04 mov %edx,0x4(%eax) - st->ino = ip->inum; -80101e51: 8b 45 08 mov 0x8(%ebp),%eax -80101e54: 8b 50 04 mov 0x4(%eax),%edx -80101e57: 8b 45 0c mov 0xc(%ebp),%eax -80101e5a: 89 50 08 mov %edx,0x8(%eax) - st->type = ip->type; -80101e5d: 8b 45 08 mov 0x8(%ebp),%eax -80101e60: 0f b7 50 10 movzwl 0x10(%eax),%edx -80101e64: 8b 45 0c mov 0xc(%ebp),%eax -80101e67: 66 89 10 mov %dx,(%eax) - st->nlink = ip->nlink; -80101e6a: 8b 45 08 mov 0x8(%ebp),%eax -80101e6d: 0f b7 50 16 movzwl 0x16(%eax),%edx -80101e71: 8b 45 0c mov 0xc(%ebp),%eax -80101e74: 66 89 50 0c mov %dx,0xc(%eax) - st->size = ip->size; -80101e78: 8b 45 08 mov 0x8(%ebp),%eax -80101e7b: 8b 50 18 mov 0x18(%eax),%edx -80101e7e: 8b 45 0c mov 0xc(%ebp),%eax -80101e81: 89 50 10 mov %edx,0x10(%eax) -} -80101e84: 5d pop %ebp -80101e85: c3 ret - -80101e86 : - -//PAGEBREAK! -// Read data from inode. -int -readi(struct inode *ip, char *dst, uint off, uint n) -{ -80101e86: 55 push %ebp -80101e87: 89 e5 mov %esp,%ebp -80101e89: 83 ec 18 sub $0x18,%esp - uint tot, m; - struct buf *bp; - - if(ip->type == T_DEV){ -80101e8c: 8b 45 08 mov 0x8(%ebp),%eax -80101e8f: 0f b7 40 10 movzwl 0x10(%eax),%eax -80101e93: 66 83 f8 03 cmp $0x3,%ax -80101e97: 75 5c jne 80101ef5 - if(ip->major < 0 || ip->major >= NDEV || !devsw[ip->major].read) -80101e99: 8b 45 08 mov 0x8(%ebp),%eax -80101e9c: 0f b7 40 12 movzwl 0x12(%eax),%eax -80101ea0: 66 85 c0 test %ax,%ax -80101ea3: 78 20 js 80101ec5 -80101ea5: 8b 45 08 mov 0x8(%ebp),%eax -80101ea8: 0f b7 40 12 movzwl 0x12(%eax),%eax -80101eac: 66 83 f8 09 cmp $0x9,%ax -80101eb0: 7f 13 jg 80101ec5 -80101eb2: 8b 45 08 mov 0x8(%ebp),%eax -80101eb5: 0f b7 40 12 movzwl 0x12(%eax),%eax -80101eb9: 98 cwtl -80101eba: 8b 04 c5 40 12 11 80 mov -0x7feeedc0(,%eax,8),%eax -80101ec1: 85 c0 test %eax,%eax -80101ec3: 75 0a jne 80101ecf - return -1; -80101ec5: b8 ff ff ff ff mov $0xffffffff,%eax -80101eca: e9 0f 01 00 00 jmp 80101fde - return devsw[ip->major].read(ip, dst, n); -80101ecf: 8b 45 08 mov 0x8(%ebp),%eax -80101ed2: 0f b7 40 12 movzwl 0x12(%eax),%eax -80101ed6: 98 cwtl -80101ed7: 8b 04 c5 40 12 11 80 mov -0x7feeedc0(,%eax,8),%eax -80101ede: 8b 55 14 mov 0x14(%ebp),%edx -80101ee1: 83 ec 04 sub $0x4,%esp -80101ee4: 52 push %edx -80101ee5: ff 75 0c pushl 0xc(%ebp) -80101ee8: ff 75 08 pushl 0x8(%ebp) -80101eeb: ff d0 call *%eax -80101eed: 83 c4 10 add $0x10,%esp -80101ef0: e9 e9 00 00 00 jmp 80101fde - } - - if(off > ip->size || off + n < off) -80101ef5: 8b 45 08 mov 0x8(%ebp),%eax -80101ef8: 8b 40 18 mov 0x18(%eax),%eax -80101efb: 3b 45 10 cmp 0x10(%ebp),%eax -80101efe: 72 0d jb 80101f0d -80101f00: 8b 55 10 mov 0x10(%ebp),%edx -80101f03: 8b 45 14 mov 0x14(%ebp),%eax -80101f06: 01 d0 add %edx,%eax -80101f08: 3b 45 10 cmp 0x10(%ebp),%eax -80101f0b: 73 0a jae 80101f17 - return -1; -80101f0d: b8 ff ff ff ff mov $0xffffffff,%eax -80101f12: e9 c7 00 00 00 jmp 80101fde - if(off + n > ip->size) -80101f17: 8b 55 10 mov 0x10(%ebp),%edx -80101f1a: 8b 45 14 mov 0x14(%ebp),%eax -80101f1d: 01 c2 add %eax,%edx -80101f1f: 8b 45 08 mov 0x8(%ebp),%eax -80101f22: 8b 40 18 mov 0x18(%eax),%eax -80101f25: 39 c2 cmp %eax,%edx -80101f27: 76 0c jbe 80101f35 - n = ip->size - off; -80101f29: 8b 45 08 mov 0x8(%ebp),%eax -80101f2c: 8b 40 18 mov 0x18(%eax),%eax -80101f2f: 2b 45 10 sub 0x10(%ebp),%eax -80101f32: 89 45 14 mov %eax,0x14(%ebp) - - for(tot=0; tot - bp = bread(ip->dev, bmap(ip, off/BSIZE)); -80101f41: 8b 45 10 mov 0x10(%ebp),%eax -80101f44: c1 e8 09 shr $0x9,%eax -80101f47: 83 ec 08 sub $0x8,%esp -80101f4a: 50 push %eax -80101f4b: ff 75 08 pushl 0x8(%ebp) -80101f4e: e8 ac fc ff ff call 80101bff -80101f53: 83 c4 10 add $0x10,%esp -80101f56: 89 c2 mov %eax,%edx -80101f58: 8b 45 08 mov 0x8(%ebp),%eax -80101f5b: 8b 00 mov (%eax),%eax -80101f5d: 83 ec 08 sub $0x8,%esp -80101f60: 52 push %edx -80101f61: 50 push %eax -80101f62: e8 4d e2 ff ff call 801001b4 -80101f67: 83 c4 10 add $0x10,%esp -80101f6a: 89 45 f0 mov %eax,-0x10(%ebp) - m = min(n - tot, BSIZE - off%BSIZE); -80101f6d: 8b 45 10 mov 0x10(%ebp),%eax -80101f70: 25 ff 01 00 00 and $0x1ff,%eax -80101f75: ba 00 02 00 00 mov $0x200,%edx -80101f7a: 29 c2 sub %eax,%edx -80101f7c: 8b 45 14 mov 0x14(%ebp),%eax -80101f7f: 2b 45 f4 sub -0xc(%ebp),%eax -80101f82: 39 c2 cmp %eax,%edx -80101f84: 0f 46 c2 cmovbe %edx,%eax -80101f87: 89 45 ec mov %eax,-0x14(%ebp) - memmove(dst, bp->data + off%BSIZE, m); -80101f8a: 8b 45 10 mov 0x10(%ebp),%eax -80101f8d: 25 ff 01 00 00 and $0x1ff,%eax -80101f92: 8d 50 10 lea 0x10(%eax),%edx -80101f95: 8b 45 f0 mov -0x10(%ebp),%eax -80101f98: 01 d0 add %edx,%eax -80101f9a: 83 c0 08 add $0x8,%eax -80101f9d: 83 ec 04 sub $0x4,%esp -80101fa0: ff 75 ec pushl -0x14(%ebp) -80101fa3: 50 push %eax -80101fa4: ff 75 0c pushl 0xc(%ebp) -80101fa7: e8 ea 32 00 00 call 80105296 -80101fac: 83 c4 10 add $0x10,%esp - brelse(bp); -80101faf: 83 ec 0c sub $0xc,%esp -80101fb2: ff 75 f0 pushl -0x10(%ebp) -80101fb5: e8 71 e2 ff ff call 8010022b -80101fba: 83 c4 10 add $0x10,%esp - if(off > ip->size || off + n < off) - return -1; - if(off + n > ip->size) - n = ip->size - off; - - for(tot=0; tot - bp = bread(ip->dev, bmap(ip, off/BSIZE)); - m = min(n - tot, BSIZE - off%BSIZE); - memmove(dst, bp->data + off%BSIZE, m); - brelse(bp); - } - return n; -80101fdb: 8b 45 14 mov 0x14(%ebp),%eax -} -80101fde: c9 leave -80101fdf: c3 ret - -80101fe0 : - -// PAGEBREAK! -// Write data to inode. -int -writei(struct inode *ip, char *src, uint off, uint n) -{ -80101fe0: 55 push %ebp -80101fe1: 89 e5 mov %esp,%ebp -80101fe3: 83 ec 18 sub $0x18,%esp - uint tot, m; - struct buf *bp; - - if(ip->type == T_DEV){ -80101fe6: 8b 45 08 mov 0x8(%ebp),%eax -80101fe9: 0f b7 40 10 movzwl 0x10(%eax),%eax -80101fed: 66 83 f8 03 cmp $0x3,%ax -80101ff1: 75 5c jne 8010204f - if(ip->major < 0 || ip->major >= NDEV || !devsw[ip->major].write) -80101ff3: 8b 45 08 mov 0x8(%ebp),%eax -80101ff6: 0f b7 40 12 movzwl 0x12(%eax),%eax -80101ffa: 66 85 c0 test %ax,%ax -80101ffd: 78 20 js 8010201f -80101fff: 8b 45 08 mov 0x8(%ebp),%eax -80102002: 0f b7 40 12 movzwl 0x12(%eax),%eax -80102006: 66 83 f8 09 cmp $0x9,%ax -8010200a: 7f 13 jg 8010201f -8010200c: 8b 45 08 mov 0x8(%ebp),%eax -8010200f: 0f b7 40 12 movzwl 0x12(%eax),%eax -80102013: 98 cwtl -80102014: 8b 04 c5 44 12 11 80 mov -0x7feeedbc(,%eax,8),%eax -8010201b: 85 c0 test %eax,%eax -8010201d: 75 0a jne 80102029 - return -1; -8010201f: b8 ff ff ff ff mov $0xffffffff,%eax -80102024: e9 40 01 00 00 jmp 80102169 - return devsw[ip->major].write(ip, src, n); -80102029: 8b 45 08 mov 0x8(%ebp),%eax -8010202c: 0f b7 40 12 movzwl 0x12(%eax),%eax -80102030: 98 cwtl -80102031: 8b 04 c5 44 12 11 80 mov -0x7feeedbc(,%eax,8),%eax -80102038: 8b 55 14 mov 0x14(%ebp),%edx -8010203b: 83 ec 04 sub $0x4,%esp -8010203e: 52 push %edx -8010203f: ff 75 0c pushl 0xc(%ebp) -80102042: ff 75 08 pushl 0x8(%ebp) -80102045: ff d0 call *%eax -80102047: 83 c4 10 add $0x10,%esp -8010204a: e9 1a 01 00 00 jmp 80102169 - } - - if(off > ip->size || off + n < off) -8010204f: 8b 45 08 mov 0x8(%ebp),%eax -80102052: 8b 40 18 mov 0x18(%eax),%eax -80102055: 3b 45 10 cmp 0x10(%ebp),%eax -80102058: 72 0d jb 80102067 -8010205a: 8b 55 10 mov 0x10(%ebp),%edx -8010205d: 8b 45 14 mov 0x14(%ebp),%eax -80102060: 01 d0 add %edx,%eax -80102062: 3b 45 10 cmp 0x10(%ebp),%eax -80102065: 73 0a jae 80102071 - return -1; -80102067: b8 ff ff ff ff mov $0xffffffff,%eax -8010206c: e9 f8 00 00 00 jmp 80102169 - if(off + n > MAXFILE*BSIZE) -80102071: 8b 55 10 mov 0x10(%ebp),%edx -80102074: 8b 45 14 mov 0x14(%ebp),%eax -80102077: 01 d0 add %edx,%eax -80102079: 3d 00 18 01 00 cmp $0x11800,%eax -8010207e: 76 0a jbe 8010208a - return -1; -80102080: b8 ff ff ff ff mov $0xffffffff,%eax -80102085: e9 df 00 00 00 jmp 80102169 - - for(tot=0; tot - bp = bread(ip->dev, bmap(ip, off/BSIZE)); -80102096: 8b 45 10 mov 0x10(%ebp),%eax -80102099: c1 e8 09 shr $0x9,%eax -8010209c: 83 ec 08 sub $0x8,%esp -8010209f: 50 push %eax -801020a0: ff 75 08 pushl 0x8(%ebp) -801020a3: e8 57 fb ff ff call 80101bff -801020a8: 83 c4 10 add $0x10,%esp -801020ab: 89 c2 mov %eax,%edx -801020ad: 8b 45 08 mov 0x8(%ebp),%eax -801020b0: 8b 00 mov (%eax),%eax -801020b2: 83 ec 08 sub $0x8,%esp -801020b5: 52 push %edx -801020b6: 50 push %eax -801020b7: e8 f8 e0 ff ff call 801001b4 -801020bc: 83 c4 10 add $0x10,%esp -801020bf: 89 45 f0 mov %eax,-0x10(%ebp) - m = min(n - tot, BSIZE - off%BSIZE); -801020c2: 8b 45 10 mov 0x10(%ebp),%eax -801020c5: 25 ff 01 00 00 and $0x1ff,%eax -801020ca: ba 00 02 00 00 mov $0x200,%edx -801020cf: 29 c2 sub %eax,%edx -801020d1: 8b 45 14 mov 0x14(%ebp),%eax -801020d4: 2b 45 f4 sub -0xc(%ebp),%eax -801020d7: 39 c2 cmp %eax,%edx -801020d9: 0f 46 c2 cmovbe %edx,%eax -801020dc: 89 45 ec mov %eax,-0x14(%ebp) - memmove(bp->data + off%BSIZE, src, m); -801020df: 8b 45 10 mov 0x10(%ebp),%eax -801020e2: 25 ff 01 00 00 and $0x1ff,%eax -801020e7: 8d 50 10 lea 0x10(%eax),%edx -801020ea: 8b 45 f0 mov -0x10(%ebp),%eax -801020ed: 01 d0 add %edx,%eax -801020ef: 83 c0 08 add $0x8,%eax -801020f2: 83 ec 04 sub $0x4,%esp -801020f5: ff 75 ec pushl -0x14(%ebp) -801020f8: ff 75 0c pushl 0xc(%ebp) -801020fb: 50 push %eax -801020fc: e8 95 31 00 00 call 80105296 -80102101: 83 c4 10 add $0x10,%esp - log_write(bp); -80102104: 83 ec 0c sub $0xc,%esp -80102107: ff 75 f0 pushl -0x10(%ebp) -8010210a: e8 0a 16 00 00 call 80103719 -8010210f: 83 c4 10 add $0x10,%esp - brelse(bp); -80102112: 83 ec 0c sub $0xc,%esp -80102115: ff 75 f0 pushl -0x10(%ebp) -80102118: e8 0e e1 ff ff call 8010022b -8010211d: 83 c4 10 add $0x10,%esp - if(off > ip->size || off + n < off) - return -1; - if(off + n > MAXFILE*BSIZE) - return -1; - - for(tot=0; tot - memmove(bp->data + off%BSIZE, src, m); - log_write(bp); - brelse(bp); - } - - if(n > 0 && off > ip->size){ -8010213e: 83 7d 14 00 cmpl $0x0,0x14(%ebp) -80102142: 74 22 je 80102166 -80102144: 8b 45 08 mov 0x8(%ebp),%eax -80102147: 8b 40 18 mov 0x18(%eax),%eax -8010214a: 3b 45 10 cmp 0x10(%ebp),%eax -8010214d: 73 17 jae 80102166 - ip->size = off; -8010214f: 8b 45 08 mov 0x8(%ebp),%eax -80102152: 8b 55 10 mov 0x10(%ebp),%edx -80102155: 89 50 18 mov %edx,0x18(%eax) - iupdate(ip); -80102158: 83 ec 0c sub $0xc,%esp -8010215b: ff 75 08 pushl 0x8(%ebp) -8010215e: e8 e2 f5 ff ff call 80101745 -80102163: 83 c4 10 add $0x10,%esp - } - return n; -80102166: 8b 45 14 mov 0x14(%ebp),%eax -} -80102169: c9 leave -8010216a: c3 ret - -8010216b : -//PAGEBREAK! -// Directories - -int -namecmp(const char *s, const char *t) -{ -8010216b: 55 push %ebp -8010216c: 89 e5 mov %esp,%ebp -8010216e: 83 ec 08 sub $0x8,%esp - return strncmp(s, t, DIRSIZ); -80102171: 83 ec 04 sub $0x4,%esp -80102174: 6a 0e push $0xe -80102176: ff 75 0c pushl 0xc(%ebp) -80102179: ff 75 08 pushl 0x8(%ebp) -8010217c: e8 ad 31 00 00 call 8010532e -80102181: 83 c4 10 add $0x10,%esp -} -80102184: c9 leave -80102185: c3 ret - -80102186 : - -// Look for a directory entry in a directory. -// If found, set *poff to byte offset of entry. -struct inode* -dirlookup(struct inode *dp, char *name, uint *poff) -{ -80102186: 55 push %ebp -80102187: 89 e5 mov %esp,%ebp -80102189: 83 ec 28 sub $0x28,%esp - uint off, inum; - struct dirent de; - - if(dp->type != T_DIR) -8010218c: 8b 45 08 mov 0x8(%ebp),%eax -8010218f: 0f b7 40 10 movzwl 0x10(%eax),%eax -80102193: 66 83 f8 01 cmp $0x1,%ax -80102197: 74 0d je 801021a6 - panic("dirlookup not DIR"); -80102199: 83 ec 0c sub $0xc,%esp -8010219c: 68 ff 85 10 80 push $0x801085ff -801021a1: e8 b6 e3 ff ff call 8010055c - - for(off = 0; off < dp->size; off += sizeof(de)){ -801021a6: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) -801021ad: eb 7c jmp 8010222b - if(readi(dp, (char*)&de, off, sizeof(de)) != sizeof(de)) -801021af: 6a 10 push $0x10 -801021b1: ff 75 f4 pushl -0xc(%ebp) -801021b4: 8d 45 e0 lea -0x20(%ebp),%eax -801021b7: 50 push %eax -801021b8: ff 75 08 pushl 0x8(%ebp) -801021bb: e8 c6 fc ff ff call 80101e86 -801021c0: 83 c4 10 add $0x10,%esp -801021c3: 83 f8 10 cmp $0x10,%eax -801021c6: 74 0d je 801021d5 - panic("dirlink read"); -801021c8: 83 ec 0c sub $0xc,%esp -801021cb: 68 11 86 10 80 push $0x80108611 -801021d0: e8 87 e3 ff ff call 8010055c - if(de.inum == 0) -801021d5: 0f b7 45 e0 movzwl -0x20(%ebp),%eax -801021d9: 66 85 c0 test %ax,%ax -801021dc: 75 02 jne 801021e0 - continue; -801021de: eb 47 jmp 80102227 - if(namecmp(name, de.name) == 0){ -801021e0: 83 ec 08 sub $0x8,%esp -801021e3: 8d 45 e0 lea -0x20(%ebp),%eax -801021e6: 83 c0 02 add $0x2,%eax -801021e9: 50 push %eax -801021ea: ff 75 0c pushl 0xc(%ebp) -801021ed: e8 79 ff ff ff call 8010216b -801021f2: 83 c4 10 add $0x10,%esp -801021f5: 85 c0 test %eax,%eax -801021f7: 75 2e jne 80102227 - // entry matches path element - if(poff) -801021f9: 83 7d 10 00 cmpl $0x0,0x10(%ebp) -801021fd: 74 08 je 80102207 - *poff = off; -801021ff: 8b 45 10 mov 0x10(%ebp),%eax -80102202: 8b 55 f4 mov -0xc(%ebp),%edx -80102205: 89 10 mov %edx,(%eax) - inum = de.inum; -80102207: 0f b7 45 e0 movzwl -0x20(%ebp),%eax -8010220b: 0f b7 c0 movzwl %ax,%eax -8010220e: 89 45 f0 mov %eax,-0x10(%ebp) - return iget(dp->dev, inum); -80102211: 8b 45 08 mov 0x8(%ebp),%eax -80102214: 8b 00 mov (%eax),%eax -80102216: 83 ec 08 sub $0x8,%esp -80102219: ff 75 f0 pushl -0x10(%ebp) -8010221c: 50 push %eax -8010221d: e8 e3 f5 ff ff call 80101805 -80102222: 83 c4 10 add $0x10,%esp -80102225: eb 18 jmp 8010223f - struct dirent de; - - if(dp->type != T_DIR) - panic("dirlookup not DIR"); - - for(off = 0; off < dp->size; off += sizeof(de)){ -80102227: 83 45 f4 10 addl $0x10,-0xc(%ebp) -8010222b: 8b 45 08 mov 0x8(%ebp),%eax -8010222e: 8b 40 18 mov 0x18(%eax),%eax -80102231: 3b 45 f4 cmp -0xc(%ebp),%eax -80102234: 0f 87 75 ff ff ff ja 801021af - inum = de.inum; - return iget(dp->dev, inum); - } - } - - return 0; -8010223a: b8 00 00 00 00 mov $0x0,%eax -} -8010223f: c9 leave -80102240: c3 ret - -80102241 : - -// Write a new directory entry (name, inum) into the directory dp. -int -dirlink(struct inode *dp, char *name, uint inum) -{ -80102241: 55 push %ebp -80102242: 89 e5 mov %esp,%ebp -80102244: 83 ec 28 sub $0x28,%esp - int off; - struct dirent de; - struct inode *ip; - - // Check that name is not present. - if((ip = dirlookup(dp, name, 0)) != 0){ -80102247: 83 ec 04 sub $0x4,%esp -8010224a: 6a 00 push $0x0 -8010224c: ff 75 0c pushl 0xc(%ebp) -8010224f: ff 75 08 pushl 0x8(%ebp) -80102252: e8 2f ff ff ff call 80102186 -80102257: 83 c4 10 add $0x10,%esp -8010225a: 89 45 f0 mov %eax,-0x10(%ebp) -8010225d: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) -80102261: 74 18 je 8010227b - iput(ip); -80102263: 83 ec 0c sub $0xc,%esp -80102266: ff 75 f0 pushl -0x10(%ebp) -80102269: e8 7e f8 ff ff call 80101aec -8010226e: 83 c4 10 add $0x10,%esp - return -1; -80102271: b8 ff ff ff ff mov $0xffffffff,%eax -80102276: e9 9b 00 00 00 jmp 80102316 - } - - // Look for an empty dirent. - for(off = 0; off < dp->size; off += sizeof(de)){ -8010227b: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) -80102282: eb 3b jmp 801022bf - if(readi(dp, (char*)&de, off, sizeof(de)) != sizeof(de)) -80102284: 8b 45 f4 mov -0xc(%ebp),%eax -80102287: 6a 10 push $0x10 -80102289: 50 push %eax -8010228a: 8d 45 e0 lea -0x20(%ebp),%eax -8010228d: 50 push %eax -8010228e: ff 75 08 pushl 0x8(%ebp) -80102291: e8 f0 fb ff ff call 80101e86 -80102296: 83 c4 10 add $0x10,%esp -80102299: 83 f8 10 cmp $0x10,%eax -8010229c: 74 0d je 801022ab - panic("dirlink read"); -8010229e: 83 ec 0c sub $0xc,%esp -801022a1: 68 11 86 10 80 push $0x80108611 -801022a6: e8 b1 e2 ff ff call 8010055c - if(de.inum == 0) -801022ab: 0f b7 45 e0 movzwl -0x20(%ebp),%eax -801022af: 66 85 c0 test %ax,%ax -801022b2: 75 02 jne 801022b6 - break; -801022b4: eb 16 jmp 801022cc - iput(ip); - return -1; - } - - // Look for an empty dirent. - for(off = 0; off < dp->size; off += sizeof(de)){ -801022b6: 8b 45 f4 mov -0xc(%ebp),%eax -801022b9: 83 c0 10 add $0x10,%eax -801022bc: 89 45 f4 mov %eax,-0xc(%ebp) -801022bf: 8b 55 f4 mov -0xc(%ebp),%edx -801022c2: 8b 45 08 mov 0x8(%ebp),%eax -801022c5: 8b 40 18 mov 0x18(%eax),%eax -801022c8: 39 c2 cmp %eax,%edx -801022ca: 72 b8 jb 80102284 - panic("dirlink read"); - if(de.inum == 0) - break; - } - - strncpy(de.name, name, DIRSIZ); -801022cc: 83 ec 04 sub $0x4,%esp -801022cf: 6a 0e push $0xe -801022d1: ff 75 0c pushl 0xc(%ebp) -801022d4: 8d 45 e0 lea -0x20(%ebp),%eax -801022d7: 83 c0 02 add $0x2,%eax -801022da: 50 push %eax -801022db: e8 a4 30 00 00 call 80105384 -801022e0: 83 c4 10 add $0x10,%esp - de.inum = inum; -801022e3: 8b 45 10 mov 0x10(%ebp),%eax -801022e6: 66 89 45 e0 mov %ax,-0x20(%ebp) - if(writei(dp, (char*)&de, off, sizeof(de)) != sizeof(de)) -801022ea: 8b 45 f4 mov -0xc(%ebp),%eax -801022ed: 6a 10 push $0x10 -801022ef: 50 push %eax -801022f0: 8d 45 e0 lea -0x20(%ebp),%eax -801022f3: 50 push %eax -801022f4: ff 75 08 pushl 0x8(%ebp) -801022f7: e8 e4 fc ff ff call 80101fe0 -801022fc: 83 c4 10 add $0x10,%esp -801022ff: 83 f8 10 cmp $0x10,%eax -80102302: 74 0d je 80102311 - panic("dirlink"); -80102304: 83 ec 0c sub $0xc,%esp -80102307: 68 1e 86 10 80 push $0x8010861e -8010230c: e8 4b e2 ff ff call 8010055c - - return 0; -80102311: b8 00 00 00 00 mov $0x0,%eax -} -80102316: c9 leave -80102317: c3 ret - -80102318 : -// skipelem("a", name) = "", setting name = "a" -// skipelem("", name) = skipelem("////", name) = 0 -// -static char* -skipelem(char *path, char *name) -{ -80102318: 55 push %ebp -80102319: 89 e5 mov %esp,%ebp -8010231b: 83 ec 18 sub $0x18,%esp - char *s; - int len; - - while(*path == '/') -8010231e: eb 04 jmp 80102324 - path++; -80102320: 83 45 08 01 addl $0x1,0x8(%ebp) -skipelem(char *path, char *name) -{ - char *s; - int len; - - while(*path == '/') -80102324: 8b 45 08 mov 0x8(%ebp),%eax -80102327: 0f b6 00 movzbl (%eax),%eax -8010232a: 3c 2f cmp $0x2f,%al -8010232c: 74 f2 je 80102320 - path++; - if(*path == 0) -8010232e: 8b 45 08 mov 0x8(%ebp),%eax -80102331: 0f b6 00 movzbl (%eax),%eax -80102334: 84 c0 test %al,%al -80102336: 75 07 jne 8010233f - return 0; -80102338: b8 00 00 00 00 mov $0x0,%eax -8010233d: eb 7b jmp 801023ba - s = path; -8010233f: 8b 45 08 mov 0x8(%ebp),%eax -80102342: 89 45 f4 mov %eax,-0xc(%ebp) - while(*path != '/' && *path != 0) -80102345: eb 04 jmp 8010234b - path++; -80102347: 83 45 08 01 addl $0x1,0x8(%ebp) - while(*path == '/') - path++; - if(*path == 0) - return 0; - s = path; - while(*path != '/' && *path != 0) -8010234b: 8b 45 08 mov 0x8(%ebp),%eax -8010234e: 0f b6 00 movzbl (%eax),%eax -80102351: 3c 2f cmp $0x2f,%al -80102353: 74 0a je 8010235f -80102355: 8b 45 08 mov 0x8(%ebp),%eax -80102358: 0f b6 00 movzbl (%eax),%eax -8010235b: 84 c0 test %al,%al -8010235d: 75 e8 jne 80102347 - path++; - len = path - s; -8010235f: 8b 55 08 mov 0x8(%ebp),%edx -80102362: 8b 45 f4 mov -0xc(%ebp),%eax -80102365: 29 c2 sub %eax,%edx -80102367: 89 d0 mov %edx,%eax -80102369: 89 45 f0 mov %eax,-0x10(%ebp) - if(len >= DIRSIZ) -8010236c: 83 7d f0 0d cmpl $0xd,-0x10(%ebp) -80102370: 7e 15 jle 80102387 - memmove(name, s, DIRSIZ); -80102372: 83 ec 04 sub $0x4,%esp -80102375: 6a 0e push $0xe -80102377: ff 75 f4 pushl -0xc(%ebp) -8010237a: ff 75 0c pushl 0xc(%ebp) -8010237d: e8 14 2f 00 00 call 80105296 -80102382: 83 c4 10 add $0x10,%esp -80102385: eb 20 jmp 801023a7 - else { - memmove(name, s, len); -80102387: 8b 45 f0 mov -0x10(%ebp),%eax -8010238a: 83 ec 04 sub $0x4,%esp -8010238d: 50 push %eax -8010238e: ff 75 f4 pushl -0xc(%ebp) -80102391: ff 75 0c pushl 0xc(%ebp) -80102394: e8 fd 2e 00 00 call 80105296 -80102399: 83 c4 10 add $0x10,%esp - name[len] = 0; -8010239c: 8b 55 f0 mov -0x10(%ebp),%edx -8010239f: 8b 45 0c mov 0xc(%ebp),%eax -801023a2: 01 d0 add %edx,%eax -801023a4: c6 00 00 movb $0x0,(%eax) - } - while(*path == '/') -801023a7: eb 04 jmp 801023ad - path++; -801023a9: 83 45 08 01 addl $0x1,0x8(%ebp) - memmove(name, s, DIRSIZ); - else { - memmove(name, s, len); - name[len] = 0; - } - while(*path == '/') -801023ad: 8b 45 08 mov 0x8(%ebp),%eax -801023b0: 0f b6 00 movzbl (%eax),%eax -801023b3: 3c 2f cmp $0x2f,%al -801023b5: 74 f2 je 801023a9 - path++; - return path; -801023b7: 8b 45 08 mov 0x8(%ebp),%eax -} -801023ba: c9 leave -801023bb: c3 ret - -801023bc : -// If parent != 0, return the inode for the parent and copy the final -// path element into name, which must have room for DIRSIZ bytes. -// Must be called inside a transaction since it calls iput(). -static struct inode* -namex(char *path, int nameiparent, char *name) -{ -801023bc: 55 push %ebp -801023bd: 89 e5 mov %esp,%ebp -801023bf: 83 ec 18 sub $0x18,%esp - struct inode *ip, *next; - - if(*path == '/') -801023c2: 8b 45 08 mov 0x8(%ebp),%eax -801023c5: 0f b6 00 movzbl (%eax),%eax -801023c8: 3c 2f cmp $0x2f,%al -801023ca: 75 14 jne 801023e0 - ip = iget(ROOTDEV, ROOTINO); -801023cc: 83 ec 08 sub $0x8,%esp -801023cf: 6a 01 push $0x1 -801023d1: 6a 01 push $0x1 -801023d3: e8 2d f4 ff ff call 80101805 -801023d8: 83 c4 10 add $0x10,%esp -801023db: 89 45 f4 mov %eax,-0xc(%ebp) -801023de: eb 18 jmp 801023f8 - else - ip = idup(proc->cwd); -801023e0: 65 a1 04 00 00 00 mov %gs:0x4,%eax -801023e6: 8b 40 68 mov 0x68(%eax),%eax -801023e9: 83 ec 0c sub $0xc,%esp -801023ec: 50 push %eax -801023ed: e8 f2 f4 ff ff call 801018e4 -801023f2: 83 c4 10 add $0x10,%esp -801023f5: 89 45 f4 mov %eax,-0xc(%ebp) - - while((path = skipelem(path, name)) != 0){ -801023f8: e9 9e 00 00 00 jmp 8010249b - ilock(ip); -801023fd: 83 ec 0c sub $0xc,%esp -80102400: ff 75 f4 pushl -0xc(%ebp) -80102403: e8 16 f5 ff ff call 8010191e -80102408: 83 c4 10 add $0x10,%esp - if(ip->type != T_DIR){ -8010240b: 8b 45 f4 mov -0xc(%ebp),%eax -8010240e: 0f b7 40 10 movzwl 0x10(%eax),%eax -80102412: 66 83 f8 01 cmp $0x1,%ax -80102416: 74 18 je 80102430 - iunlockput(ip); -80102418: 83 ec 0c sub $0xc,%esp -8010241b: ff 75 f4 pushl -0xc(%ebp) -8010241e: e8 b8 f7 ff ff call 80101bdb -80102423: 83 c4 10 add $0x10,%esp - return 0; -80102426: b8 00 00 00 00 mov $0x0,%eax -8010242b: e9 a7 00 00 00 jmp 801024d7 - } - if(nameiparent && *path == '\0'){ -80102430: 83 7d 0c 00 cmpl $0x0,0xc(%ebp) -80102434: 74 20 je 80102456 -80102436: 8b 45 08 mov 0x8(%ebp),%eax -80102439: 0f b6 00 movzbl (%eax),%eax -8010243c: 84 c0 test %al,%al -8010243e: 75 16 jne 80102456 - // Stop one level early. - iunlock(ip); -80102440: 83 ec 0c sub $0xc,%esp -80102443: ff 75 f4 pushl -0xc(%ebp) -80102446: e8 30 f6 ff ff call 80101a7b -8010244b: 83 c4 10 add $0x10,%esp - return ip; -8010244e: 8b 45 f4 mov -0xc(%ebp),%eax -80102451: e9 81 00 00 00 jmp 801024d7 - } - if((next = dirlookup(ip, name, 0)) == 0){ -80102456: 83 ec 04 sub $0x4,%esp -80102459: 6a 00 push $0x0 -8010245b: ff 75 10 pushl 0x10(%ebp) -8010245e: ff 75 f4 pushl -0xc(%ebp) -80102461: e8 20 fd ff ff call 80102186 -80102466: 83 c4 10 add $0x10,%esp -80102469: 89 45 f0 mov %eax,-0x10(%ebp) -8010246c: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) -80102470: 75 15 jne 80102487 - iunlockput(ip); -80102472: 83 ec 0c sub $0xc,%esp -80102475: ff 75 f4 pushl -0xc(%ebp) -80102478: e8 5e f7 ff ff call 80101bdb -8010247d: 83 c4 10 add $0x10,%esp - return 0; -80102480: b8 00 00 00 00 mov $0x0,%eax -80102485: eb 50 jmp 801024d7 - } - iunlockput(ip); -80102487: 83 ec 0c sub $0xc,%esp -8010248a: ff 75 f4 pushl -0xc(%ebp) -8010248d: e8 49 f7 ff ff call 80101bdb -80102492: 83 c4 10 add $0x10,%esp - ip = next; -80102495: 8b 45 f0 mov -0x10(%ebp),%eax -80102498: 89 45 f4 mov %eax,-0xc(%ebp) - if(*path == '/') - ip = iget(ROOTDEV, ROOTINO); - else - ip = idup(proc->cwd); - - while((path = skipelem(path, name)) != 0){ -8010249b: 83 ec 08 sub $0x8,%esp -8010249e: ff 75 10 pushl 0x10(%ebp) -801024a1: ff 75 08 pushl 0x8(%ebp) -801024a4: e8 6f fe ff ff call 80102318 -801024a9: 83 c4 10 add $0x10,%esp -801024ac: 89 45 08 mov %eax,0x8(%ebp) -801024af: 83 7d 08 00 cmpl $0x0,0x8(%ebp) -801024b3: 0f 85 44 ff ff ff jne 801023fd - return 0; - } - iunlockput(ip); - ip = next; - } - if(nameiparent){ -801024b9: 83 7d 0c 00 cmpl $0x0,0xc(%ebp) -801024bd: 74 15 je 801024d4 - iput(ip); -801024bf: 83 ec 0c sub $0xc,%esp -801024c2: ff 75 f4 pushl -0xc(%ebp) -801024c5: e8 22 f6 ff ff call 80101aec -801024ca: 83 c4 10 add $0x10,%esp - return 0; -801024cd: b8 00 00 00 00 mov $0x0,%eax -801024d2: eb 03 jmp 801024d7 - } - return ip; -801024d4: 8b 45 f4 mov -0xc(%ebp),%eax -} -801024d7: c9 leave -801024d8: c3 ret - -801024d9 : - -struct inode* -namei(char *path) -{ -801024d9: 55 push %ebp -801024da: 89 e5 mov %esp,%ebp -801024dc: 83 ec 18 sub $0x18,%esp - char name[DIRSIZ]; - return namex(path, 0, name); -801024df: 83 ec 04 sub $0x4,%esp -801024e2: 8d 45 ea lea -0x16(%ebp),%eax -801024e5: 50 push %eax -801024e6: 6a 00 push $0x0 -801024e8: ff 75 08 pushl 0x8(%ebp) -801024eb: e8 cc fe ff ff call 801023bc -801024f0: 83 c4 10 add $0x10,%esp -} -801024f3: c9 leave -801024f4: c3 ret - -801024f5 : - -struct inode* -nameiparent(char *path, char *name) -{ -801024f5: 55 push %ebp -801024f6: 89 e5 mov %esp,%ebp -801024f8: 83 ec 08 sub $0x8,%esp - return namex(path, 1, name); -801024fb: 83 ec 04 sub $0x4,%esp -801024fe: ff 75 0c pushl 0xc(%ebp) -80102501: 6a 01 push $0x1 -80102503: ff 75 08 pushl 0x8(%ebp) -80102506: e8 b1 fe ff ff call 801023bc -8010250b: 83 c4 10 add $0x10,%esp -} -8010250e: c9 leave -8010250f: c3 ret - -80102510 : -// Routines to let C code use special x86 instructions. - -static inline uchar -inb(ushort port) -{ -80102510: 55 push %ebp -80102511: 89 e5 mov %esp,%ebp -80102513: 83 ec 14 sub $0x14,%esp -80102516: 8b 45 08 mov 0x8(%ebp),%eax -80102519: 66 89 45 ec mov %ax,-0x14(%ebp) - uchar data; - - asm volatile("in %1,%0" : "=a" (data) : "d" (port)); -8010251d: 0f b7 45 ec movzwl -0x14(%ebp),%eax -80102521: 89 c2 mov %eax,%edx -80102523: ec in (%dx),%al -80102524: 88 45 ff mov %al,-0x1(%ebp) - return data; -80102527: 0f b6 45 ff movzbl -0x1(%ebp),%eax -} -8010252b: c9 leave -8010252c: c3 ret - -8010252d : - -static inline void -insl(int port, void *addr, int cnt) -{ -8010252d: 55 push %ebp -8010252e: 89 e5 mov %esp,%ebp -80102530: 57 push %edi -80102531: 53 push %ebx - asm volatile("cld; rep insl" : -80102532: 8b 55 08 mov 0x8(%ebp),%edx -80102535: 8b 4d 0c mov 0xc(%ebp),%ecx -80102538: 8b 45 10 mov 0x10(%ebp),%eax -8010253b: 89 cb mov %ecx,%ebx -8010253d: 89 df mov %ebx,%edi -8010253f: 89 c1 mov %eax,%ecx -80102541: fc cld -80102542: f3 6d rep insl (%dx),%es:(%edi) -80102544: 89 c8 mov %ecx,%eax -80102546: 89 fb mov %edi,%ebx -80102548: 89 5d 0c mov %ebx,0xc(%ebp) -8010254b: 89 45 10 mov %eax,0x10(%ebp) - "=D" (addr), "=c" (cnt) : - "d" (port), "0" (addr), "1" (cnt) : - "memory", "cc"); -} -8010254e: 5b pop %ebx -8010254f: 5f pop %edi -80102550: 5d pop %ebp -80102551: c3 ret - -80102552 : - -static inline void -outb(ushort port, uchar data) -{ -80102552: 55 push %ebp -80102553: 89 e5 mov %esp,%ebp -80102555: 83 ec 08 sub $0x8,%esp -80102558: 8b 55 08 mov 0x8(%ebp),%edx -8010255b: 8b 45 0c mov 0xc(%ebp),%eax -8010255e: 66 89 55 fc mov %dx,-0x4(%ebp) -80102562: 88 45 f8 mov %al,-0x8(%ebp) - asm volatile("out %0,%1" : : "a" (data), "d" (port)); -80102565: 0f b6 45 f8 movzbl -0x8(%ebp),%eax -80102569: 0f b7 55 fc movzwl -0x4(%ebp),%edx -8010256d: ee out %al,(%dx) -} -8010256e: c9 leave -8010256f: c3 ret - -80102570 : - asm volatile("out %0,%1" : : "a" (data), "d" (port)); -} - -static inline void -outsl(int port, const void *addr, int cnt) -{ -80102570: 55 push %ebp -80102571: 89 e5 mov %esp,%ebp -80102573: 56 push %esi -80102574: 53 push %ebx - asm volatile("cld; rep outsl" : -80102575: 8b 55 08 mov 0x8(%ebp),%edx -80102578: 8b 4d 0c mov 0xc(%ebp),%ecx -8010257b: 8b 45 10 mov 0x10(%ebp),%eax -8010257e: 89 cb mov %ecx,%ebx -80102580: 89 de mov %ebx,%esi -80102582: 89 c1 mov %eax,%ecx -80102584: fc cld -80102585: f3 6f rep outsl %ds:(%esi),(%dx) -80102587: 89 c8 mov %ecx,%eax -80102589: 89 f3 mov %esi,%ebx -8010258b: 89 5d 0c mov %ebx,0xc(%ebp) -8010258e: 89 45 10 mov %eax,0x10(%ebp) - "=S" (addr), "=c" (cnt) : - "d" (port), "0" (addr), "1" (cnt) : - "cc"); -} -80102591: 5b pop %ebx -80102592: 5e pop %esi -80102593: 5d pop %ebp -80102594: c3 ret - -80102595 : -static void idestart(struct buf*); - -// Wait for IDE disk to become ready. -static int -idewait(int checkerr) -{ -80102595: 55 push %ebp -80102596: 89 e5 mov %esp,%ebp -80102598: 83 ec 10 sub $0x10,%esp - int r; - - while(((r = inb(0x1f7)) & (IDE_BSY|IDE_DRDY)) != IDE_DRDY) -8010259b: 90 nop -8010259c: 68 f7 01 00 00 push $0x1f7 -801025a1: e8 6a ff ff ff call 80102510 -801025a6: 83 c4 04 add $0x4,%esp -801025a9: 0f b6 c0 movzbl %al,%eax -801025ac: 89 45 fc mov %eax,-0x4(%ebp) -801025af: 8b 45 fc mov -0x4(%ebp),%eax -801025b2: 25 c0 00 00 00 and $0xc0,%eax -801025b7: 83 f8 40 cmp $0x40,%eax -801025ba: 75 e0 jne 8010259c - ; - if(checkerr && (r & (IDE_DF|IDE_ERR)) != 0) -801025bc: 83 7d 08 00 cmpl $0x0,0x8(%ebp) -801025c0: 74 11 je 801025d3 -801025c2: 8b 45 fc mov -0x4(%ebp),%eax -801025c5: 83 e0 21 and $0x21,%eax -801025c8: 85 c0 test %eax,%eax -801025ca: 74 07 je 801025d3 - return -1; -801025cc: b8 ff ff ff ff mov $0xffffffff,%eax -801025d1: eb 05 jmp 801025d8 - return 0; -801025d3: b8 00 00 00 00 mov $0x0,%eax -} -801025d8: c9 leave -801025d9: c3 ret - -801025da : - -void -ideinit(void) -{ -801025da: 55 push %ebp -801025db: 89 e5 mov %esp,%ebp -801025dd: 83 ec 18 sub $0x18,%esp - int i; - - initlock(&idelock, "ide"); -801025e0: 83 ec 08 sub $0x8,%esp -801025e3: 68 26 86 10 80 push $0x80108626 -801025e8: 68 20 b6 10 80 push $0x8010b620 -801025ed: e8 68 29 00 00 call 80104f5a -801025f2: 83 c4 10 add $0x10,%esp - picenable(IRQ_IDE); -801025f5: 83 ec 0c sub $0xc,%esp -801025f8: 6a 0e push $0xe -801025fa: e8 b7 18 00 00 call 80103eb6 -801025ff: 83 c4 10 add $0x10,%esp - ioapicenable(IRQ_IDE, ncpu - 1); -80102602: a1 60 2a 11 80 mov 0x80112a60,%eax -80102607: 83 e8 01 sub $0x1,%eax -8010260a: 83 ec 08 sub $0x8,%esp -8010260d: 50 push %eax -8010260e: 6a 0e push $0xe -80102610: e8 6d 04 00 00 call 80102a82 -80102615: 83 c4 10 add $0x10,%esp - idewait(0); -80102618: 83 ec 0c sub $0xc,%esp -8010261b: 6a 00 push $0x0 -8010261d: e8 73 ff ff ff call 80102595 -80102622: 83 c4 10 add $0x10,%esp - - // Check if disk 1 is present - outb(0x1f6, 0xe0 | (1<<4)); -80102625: 83 ec 08 sub $0x8,%esp -80102628: 68 f0 00 00 00 push $0xf0 -8010262d: 68 f6 01 00 00 push $0x1f6 -80102632: e8 1b ff ff ff call 80102552 -80102637: 83 c4 10 add $0x10,%esp - for(i=0; i<1000; i++){ -8010263a: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) -80102641: eb 24 jmp 80102667 - if(inb(0x1f7) != 0){ -80102643: 83 ec 0c sub $0xc,%esp -80102646: 68 f7 01 00 00 push $0x1f7 -8010264b: e8 c0 fe ff ff call 80102510 -80102650: 83 c4 10 add $0x10,%esp -80102653: 84 c0 test %al,%al -80102655: 74 0c je 80102663 - havedisk1 = 1; -80102657: c7 05 58 b6 10 80 01 movl $0x1,0x8010b658 -8010265e: 00 00 00 - break; -80102661: eb 0d jmp 80102670 - ioapicenable(IRQ_IDE, ncpu - 1); - idewait(0); - - // Check if disk 1 is present - outb(0x1f6, 0xe0 | (1<<4)); - for(i=0; i<1000; i++){ -80102663: 83 45 f4 01 addl $0x1,-0xc(%ebp) -80102667: 81 7d f4 e7 03 00 00 cmpl $0x3e7,-0xc(%ebp) -8010266e: 7e d3 jle 80102643 - break; - } - } - - // Switch back to disk 0. - outb(0x1f6, 0xe0 | (0<<4)); -80102670: 83 ec 08 sub $0x8,%esp -80102673: 68 e0 00 00 00 push $0xe0 -80102678: 68 f6 01 00 00 push $0x1f6 -8010267d: e8 d0 fe ff ff call 80102552 -80102682: 83 c4 10 add $0x10,%esp -} -80102685: c9 leave -80102686: c3 ret - -80102687 : - -// Start the request for b. Caller must hold idelock. -static void -idestart(struct buf *b) -{ -80102687: 55 push %ebp -80102688: 89 e5 mov %esp,%ebp -8010268a: 83 ec 18 sub $0x18,%esp - if(b == 0) -8010268d: 83 7d 08 00 cmpl $0x0,0x8(%ebp) -80102691: 75 0d jne 801026a0 - panic("idestart"); -80102693: 83 ec 0c sub $0xc,%esp -80102696: 68 2a 86 10 80 push $0x8010862a -8010269b: e8 bc de ff ff call 8010055c - if(b->blockno >= FSSIZE) -801026a0: 8b 45 08 mov 0x8(%ebp),%eax -801026a3: 8b 40 08 mov 0x8(%eax),%eax -801026a6: 3d e7 03 00 00 cmp $0x3e7,%eax -801026ab: 76 0d jbe 801026ba - panic("incorrect blockno"); -801026ad: 83 ec 0c sub $0xc,%esp -801026b0: 68 33 86 10 80 push $0x80108633 -801026b5: e8 a2 de ff ff call 8010055c - int sector_per_block = BSIZE/SECTOR_SIZE; -801026ba: c7 45 f4 01 00 00 00 movl $0x1,-0xc(%ebp) - int sector = b->blockno * sector_per_block; -801026c1: 8b 45 08 mov 0x8(%ebp),%eax -801026c4: 8b 50 08 mov 0x8(%eax),%edx -801026c7: 8b 45 f4 mov -0xc(%ebp),%eax -801026ca: 0f af c2 imul %edx,%eax -801026cd: 89 45 f0 mov %eax,-0x10(%ebp) - - if (sector_per_block > 7) panic("idestart"); -801026d0: 83 7d f4 07 cmpl $0x7,-0xc(%ebp) -801026d4: 7e 0d jle 801026e3 -801026d6: 83 ec 0c sub $0xc,%esp -801026d9: 68 2a 86 10 80 push $0x8010862a -801026de: e8 79 de ff ff call 8010055c - - idewait(0); -801026e3: 83 ec 0c sub $0xc,%esp -801026e6: 6a 00 push $0x0 -801026e8: e8 a8 fe ff ff call 80102595 -801026ed: 83 c4 10 add $0x10,%esp - outb(0x3f6, 0); // generate interrupt -801026f0: 83 ec 08 sub $0x8,%esp -801026f3: 6a 00 push $0x0 -801026f5: 68 f6 03 00 00 push $0x3f6 -801026fa: e8 53 fe ff ff call 80102552 -801026ff: 83 c4 10 add $0x10,%esp - outb(0x1f2, sector_per_block); // number of sectors -80102702: 8b 45 f4 mov -0xc(%ebp),%eax -80102705: 0f b6 c0 movzbl %al,%eax -80102708: 83 ec 08 sub $0x8,%esp -8010270b: 50 push %eax -8010270c: 68 f2 01 00 00 push $0x1f2 -80102711: e8 3c fe ff ff call 80102552 -80102716: 83 c4 10 add $0x10,%esp - outb(0x1f3, sector & 0xff); -80102719: 8b 45 f0 mov -0x10(%ebp),%eax -8010271c: 0f b6 c0 movzbl %al,%eax -8010271f: 83 ec 08 sub $0x8,%esp -80102722: 50 push %eax -80102723: 68 f3 01 00 00 push $0x1f3 -80102728: e8 25 fe ff ff call 80102552 -8010272d: 83 c4 10 add $0x10,%esp - outb(0x1f4, (sector >> 8) & 0xff); -80102730: 8b 45 f0 mov -0x10(%ebp),%eax -80102733: c1 f8 08 sar $0x8,%eax -80102736: 0f b6 c0 movzbl %al,%eax -80102739: 83 ec 08 sub $0x8,%esp -8010273c: 50 push %eax -8010273d: 68 f4 01 00 00 push $0x1f4 -80102742: e8 0b fe ff ff call 80102552 -80102747: 83 c4 10 add $0x10,%esp - outb(0x1f5, (sector >> 16) & 0xff); -8010274a: 8b 45 f0 mov -0x10(%ebp),%eax -8010274d: c1 f8 10 sar $0x10,%eax -80102750: 0f b6 c0 movzbl %al,%eax -80102753: 83 ec 08 sub $0x8,%esp -80102756: 50 push %eax -80102757: 68 f5 01 00 00 push $0x1f5 -8010275c: e8 f1 fd ff ff call 80102552 -80102761: 83 c4 10 add $0x10,%esp - outb(0x1f6, 0xe0 | ((b->dev&1)<<4) | ((sector>>24)&0x0f)); -80102764: 8b 45 08 mov 0x8(%ebp),%eax -80102767: 8b 40 04 mov 0x4(%eax),%eax -8010276a: 83 e0 01 and $0x1,%eax -8010276d: c1 e0 04 shl $0x4,%eax -80102770: 89 c2 mov %eax,%edx -80102772: 8b 45 f0 mov -0x10(%ebp),%eax -80102775: c1 f8 18 sar $0x18,%eax -80102778: 83 e0 0f and $0xf,%eax -8010277b: 09 d0 or %edx,%eax -8010277d: 83 c8 e0 or $0xffffffe0,%eax -80102780: 0f b6 c0 movzbl %al,%eax -80102783: 83 ec 08 sub $0x8,%esp -80102786: 50 push %eax -80102787: 68 f6 01 00 00 push $0x1f6 -8010278c: e8 c1 fd ff ff call 80102552 -80102791: 83 c4 10 add $0x10,%esp - if(b->flags & B_DIRTY){ -80102794: 8b 45 08 mov 0x8(%ebp),%eax -80102797: 8b 00 mov (%eax),%eax -80102799: 83 e0 04 and $0x4,%eax -8010279c: 85 c0 test %eax,%eax -8010279e: 74 30 je 801027d0 - outb(0x1f7, IDE_CMD_WRITE); -801027a0: 83 ec 08 sub $0x8,%esp -801027a3: 6a 30 push $0x30 -801027a5: 68 f7 01 00 00 push $0x1f7 -801027aa: e8 a3 fd ff ff call 80102552 -801027af: 83 c4 10 add $0x10,%esp - outsl(0x1f0, b->data, BSIZE/4); -801027b2: 8b 45 08 mov 0x8(%ebp),%eax -801027b5: 83 c0 18 add $0x18,%eax -801027b8: 83 ec 04 sub $0x4,%esp -801027bb: 68 80 00 00 00 push $0x80 -801027c0: 50 push %eax -801027c1: 68 f0 01 00 00 push $0x1f0 -801027c6: e8 a5 fd ff ff call 80102570 -801027cb: 83 c4 10 add $0x10,%esp -801027ce: eb 12 jmp 801027e2 - } else { - outb(0x1f7, IDE_CMD_READ); -801027d0: 83 ec 08 sub $0x8,%esp -801027d3: 6a 20 push $0x20 -801027d5: 68 f7 01 00 00 push $0x1f7 -801027da: e8 73 fd ff ff call 80102552 -801027df: 83 c4 10 add $0x10,%esp - } -} -801027e2: c9 leave -801027e3: c3 ret - -801027e4 : - -// Interrupt handler. -void -ideintr(void) -{ -801027e4: 55 push %ebp -801027e5: 89 e5 mov %esp,%ebp -801027e7: 83 ec 18 sub $0x18,%esp - struct buf *b; - - // First queued buffer is the active request. - acquire(&idelock); -801027ea: 83 ec 0c sub $0xc,%esp -801027ed: 68 20 b6 10 80 push $0x8010b620 -801027f2: e8 84 27 00 00 call 80104f7b -801027f7: 83 c4 10 add $0x10,%esp - if((b = idequeue) == 0){ -801027fa: a1 54 b6 10 80 mov 0x8010b654,%eax -801027ff: 89 45 f4 mov %eax,-0xc(%ebp) -80102802: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -80102806: 75 15 jne 8010281d - release(&idelock); -80102808: 83 ec 0c sub $0xc,%esp -8010280b: 68 20 b6 10 80 push $0x8010b620 -80102810: e8 cc 27 00 00 call 80104fe1 -80102815: 83 c4 10 add $0x10,%esp - // cprintf("spurious IDE interrupt\n"); - return; -80102818: e9 9a 00 00 00 jmp 801028b7 - } - idequeue = b->qnext; -8010281d: 8b 45 f4 mov -0xc(%ebp),%eax -80102820: 8b 40 14 mov 0x14(%eax),%eax -80102823: a3 54 b6 10 80 mov %eax,0x8010b654 - - // Read data if needed. - if(!(b->flags & B_DIRTY) && idewait(1) >= 0) -80102828: 8b 45 f4 mov -0xc(%ebp),%eax -8010282b: 8b 00 mov (%eax),%eax -8010282d: 83 e0 04 and $0x4,%eax -80102830: 85 c0 test %eax,%eax -80102832: 75 2d jne 80102861 -80102834: 83 ec 0c sub $0xc,%esp -80102837: 6a 01 push $0x1 -80102839: e8 57 fd ff ff call 80102595 -8010283e: 83 c4 10 add $0x10,%esp -80102841: 85 c0 test %eax,%eax -80102843: 78 1c js 80102861 - insl(0x1f0, b->data, BSIZE/4); -80102845: 8b 45 f4 mov -0xc(%ebp),%eax -80102848: 83 c0 18 add $0x18,%eax -8010284b: 83 ec 04 sub $0x4,%esp -8010284e: 68 80 00 00 00 push $0x80 -80102853: 50 push %eax -80102854: 68 f0 01 00 00 push $0x1f0 -80102859: e8 cf fc ff ff call 8010252d -8010285e: 83 c4 10 add $0x10,%esp - - // Wake process waiting for this buf. - b->flags |= B_VALID; -80102861: 8b 45 f4 mov -0xc(%ebp),%eax -80102864: 8b 00 mov (%eax),%eax -80102866: 83 c8 02 or $0x2,%eax -80102869: 89 c2 mov %eax,%edx -8010286b: 8b 45 f4 mov -0xc(%ebp),%eax -8010286e: 89 10 mov %edx,(%eax) - b->flags &= ~B_DIRTY; -80102870: 8b 45 f4 mov -0xc(%ebp),%eax -80102873: 8b 00 mov (%eax),%eax -80102875: 83 e0 fb and $0xfffffffb,%eax -80102878: 89 c2 mov %eax,%edx -8010287a: 8b 45 f4 mov -0xc(%ebp),%eax -8010287d: 89 10 mov %edx,(%eax) - wakeup(b); -8010287f: 83 ec 0c sub $0xc,%esp -80102882: ff 75 f4 pushl -0xc(%ebp) -80102885: e8 ea 24 00 00 call 80104d74 -8010288a: 83 c4 10 add $0x10,%esp - - // Start disk on next buf in queue. - if(idequeue != 0) -8010288d: a1 54 b6 10 80 mov 0x8010b654,%eax -80102892: 85 c0 test %eax,%eax -80102894: 74 11 je 801028a7 - idestart(idequeue); -80102896: a1 54 b6 10 80 mov 0x8010b654,%eax -8010289b: 83 ec 0c sub $0xc,%esp -8010289e: 50 push %eax -8010289f: e8 e3 fd ff ff call 80102687 -801028a4: 83 c4 10 add $0x10,%esp - - release(&idelock); -801028a7: 83 ec 0c sub $0xc,%esp -801028aa: 68 20 b6 10 80 push $0x8010b620 -801028af: e8 2d 27 00 00 call 80104fe1 -801028b4: 83 c4 10 add $0x10,%esp -} -801028b7: c9 leave -801028b8: c3 ret - -801028b9 : -// Sync buf with disk. -// If B_DIRTY is set, write buf to disk, clear B_DIRTY, set B_VALID. -// Else if B_VALID is not set, read buf from disk, set B_VALID. -void -iderw(struct buf *b) -{ -801028b9: 55 push %ebp -801028ba: 89 e5 mov %esp,%ebp -801028bc: 83 ec 18 sub $0x18,%esp - struct buf **pp; - - if(!(b->flags & B_BUSY)) -801028bf: 8b 45 08 mov 0x8(%ebp),%eax -801028c2: 8b 00 mov (%eax),%eax -801028c4: 83 e0 01 and $0x1,%eax -801028c7: 85 c0 test %eax,%eax -801028c9: 75 0d jne 801028d8 - panic("iderw: buf not busy"); -801028cb: 83 ec 0c sub $0xc,%esp -801028ce: 68 45 86 10 80 push $0x80108645 -801028d3: e8 84 dc ff ff call 8010055c - if((b->flags & (B_VALID|B_DIRTY)) == B_VALID) -801028d8: 8b 45 08 mov 0x8(%ebp),%eax -801028db: 8b 00 mov (%eax),%eax -801028dd: 83 e0 06 and $0x6,%eax -801028e0: 83 f8 02 cmp $0x2,%eax -801028e3: 75 0d jne 801028f2 - panic("iderw: nothing to do"); -801028e5: 83 ec 0c sub $0xc,%esp -801028e8: 68 59 86 10 80 push $0x80108659 -801028ed: e8 6a dc ff ff call 8010055c - if(b->dev != 0 && !havedisk1) -801028f2: 8b 45 08 mov 0x8(%ebp),%eax -801028f5: 8b 40 04 mov 0x4(%eax),%eax -801028f8: 85 c0 test %eax,%eax -801028fa: 74 16 je 80102912 -801028fc: a1 58 b6 10 80 mov 0x8010b658,%eax -80102901: 85 c0 test %eax,%eax -80102903: 75 0d jne 80102912 - panic("iderw: ide disk 1 not present"); -80102905: 83 ec 0c sub $0xc,%esp -80102908: 68 6e 86 10 80 push $0x8010866e -8010290d: e8 4a dc ff ff call 8010055c - - acquire(&idelock); //DOC:acquire-lock -80102912: 83 ec 0c sub $0xc,%esp -80102915: 68 20 b6 10 80 push $0x8010b620 -8010291a: e8 5c 26 00 00 call 80104f7b -8010291f: 83 c4 10 add $0x10,%esp - - // Append b to idequeue. - b->qnext = 0; -80102922: 8b 45 08 mov 0x8(%ebp),%eax -80102925: c7 40 14 00 00 00 00 movl $0x0,0x14(%eax) - for(pp=&idequeue; *pp; pp=&(*pp)->qnext) //DOC:insert-queue -8010292c: c7 45 f4 54 b6 10 80 movl $0x8010b654,-0xc(%ebp) -80102933: eb 0b jmp 80102940 -80102935: 8b 45 f4 mov -0xc(%ebp),%eax -80102938: 8b 00 mov (%eax),%eax -8010293a: 83 c0 14 add $0x14,%eax -8010293d: 89 45 f4 mov %eax,-0xc(%ebp) -80102940: 8b 45 f4 mov -0xc(%ebp),%eax -80102943: 8b 00 mov (%eax),%eax -80102945: 85 c0 test %eax,%eax -80102947: 75 ec jne 80102935 - ; - *pp = b; -80102949: 8b 45 f4 mov -0xc(%ebp),%eax -8010294c: 8b 55 08 mov 0x8(%ebp),%edx -8010294f: 89 10 mov %edx,(%eax) - - // Start disk if necessary. - if(idequeue == b) -80102951: a1 54 b6 10 80 mov 0x8010b654,%eax -80102956: 3b 45 08 cmp 0x8(%ebp),%eax -80102959: 75 0e jne 80102969 - idestart(b); -8010295b: 83 ec 0c sub $0xc,%esp -8010295e: ff 75 08 pushl 0x8(%ebp) -80102961: e8 21 fd ff ff call 80102687 -80102966: 83 c4 10 add $0x10,%esp - - // Wait for request to finish. - while((b->flags & (B_VALID|B_DIRTY)) != B_VALID){ -80102969: eb 13 jmp 8010297e - sleep(b, &idelock); -8010296b: 83 ec 08 sub $0x8,%esp -8010296e: 68 20 b6 10 80 push $0x8010b620 -80102973: ff 75 08 pushl 0x8(%ebp) -80102976: e8 10 23 00 00 call 80104c8b -8010297b: 83 c4 10 add $0x10,%esp - // Start disk if necessary. - if(idequeue == b) - idestart(b); - - // Wait for request to finish. - while((b->flags & (B_VALID|B_DIRTY)) != B_VALID){ -8010297e: 8b 45 08 mov 0x8(%ebp),%eax -80102981: 8b 00 mov (%eax),%eax -80102983: 83 e0 06 and $0x6,%eax -80102986: 83 f8 02 cmp $0x2,%eax -80102989: 75 e0 jne 8010296b - sleep(b, &idelock); - } - - release(&idelock); -8010298b: 83 ec 0c sub $0xc,%esp -8010298e: 68 20 b6 10 80 push $0x8010b620 -80102993: e8 49 26 00 00 call 80104fe1 -80102998: 83 c4 10 add $0x10,%esp -} -8010299b: c9 leave -8010299c: c3 ret - -8010299d : - uint data; -}; - -static uint -ioapicread(int reg) -{ -8010299d: 55 push %ebp -8010299e: 89 e5 mov %esp,%ebp - ioapic->reg = reg; -801029a0: a1 d4 22 11 80 mov 0x801122d4,%eax -801029a5: 8b 55 08 mov 0x8(%ebp),%edx -801029a8: 89 10 mov %edx,(%eax) - return ioapic->data; -801029aa: a1 d4 22 11 80 mov 0x801122d4,%eax -801029af: 8b 40 10 mov 0x10(%eax),%eax -} -801029b2: 5d pop %ebp -801029b3: c3 ret - -801029b4 : - -static void -ioapicwrite(int reg, uint data) -{ -801029b4: 55 push %ebp -801029b5: 89 e5 mov %esp,%ebp - ioapic->reg = reg; -801029b7: a1 d4 22 11 80 mov 0x801122d4,%eax -801029bc: 8b 55 08 mov 0x8(%ebp),%edx -801029bf: 89 10 mov %edx,(%eax) - ioapic->data = data; -801029c1: a1 d4 22 11 80 mov 0x801122d4,%eax -801029c6: 8b 55 0c mov 0xc(%ebp),%edx -801029c9: 89 50 10 mov %edx,0x10(%eax) -} -801029cc: 5d pop %ebp -801029cd: c3 ret - -801029ce : - -void -ioapicinit(void) -{ -801029ce: 55 push %ebp -801029cf: 89 e5 mov %esp,%ebp -801029d1: 83 ec 18 sub $0x18,%esp - int i, id, maxintr; - - if(!ismp) -801029d4: a1 44 24 11 80 mov 0x80112444,%eax -801029d9: 85 c0 test %eax,%eax -801029db: 75 05 jne 801029e2 - return; -801029dd: e9 9e 00 00 00 jmp 80102a80 - - ioapic = (volatile struct ioapic*)IOAPIC; -801029e2: c7 05 d4 22 11 80 00 movl $0xfec00000,0x801122d4 -801029e9: 00 c0 fe - maxintr = (ioapicread(REG_VER) >> 16) & 0xFF; -801029ec: 6a 01 push $0x1 -801029ee: e8 aa ff ff ff call 8010299d -801029f3: 83 c4 04 add $0x4,%esp -801029f6: c1 e8 10 shr $0x10,%eax -801029f9: 25 ff 00 00 00 and $0xff,%eax -801029fe: 89 45 f0 mov %eax,-0x10(%ebp) - id = ioapicread(REG_ID) >> 24; -80102a01: 6a 00 push $0x0 -80102a03: e8 95 ff ff ff call 8010299d -80102a08: 83 c4 04 add $0x4,%esp -80102a0b: c1 e8 18 shr $0x18,%eax -80102a0e: 89 45 ec mov %eax,-0x14(%ebp) - if(id != ioapicid) -80102a11: 0f b6 05 40 24 11 80 movzbl 0x80112440,%eax -80102a18: 0f b6 c0 movzbl %al,%eax -80102a1b: 3b 45 ec cmp -0x14(%ebp),%eax -80102a1e: 74 10 je 80102a30 - cprintf("ioapicinit: id isn't equal to ioapicid; not a MP\n"); -80102a20: 83 ec 0c sub $0xc,%esp -80102a23: 68 8c 86 10 80 push $0x8010868c -80102a28: e8 92 d9 ff ff call 801003bf -80102a2d: 83 c4 10 add $0x10,%esp - - // Mark all interrupts edge-triggered, active high, disabled, - // and not routed to any CPUs. - for(i = 0; i <= maxintr; i++){ -80102a30: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) -80102a37: eb 3f jmp 80102a78 - ioapicwrite(REG_TABLE+2*i, INT_DISABLED | (T_IRQ0 + i)); -80102a39: 8b 45 f4 mov -0xc(%ebp),%eax -80102a3c: 83 c0 20 add $0x20,%eax -80102a3f: 0d 00 00 01 00 or $0x10000,%eax -80102a44: 89 c2 mov %eax,%edx -80102a46: 8b 45 f4 mov -0xc(%ebp),%eax -80102a49: 83 c0 08 add $0x8,%eax -80102a4c: 01 c0 add %eax,%eax -80102a4e: 83 ec 08 sub $0x8,%esp -80102a51: 52 push %edx -80102a52: 50 push %eax -80102a53: e8 5c ff ff ff call 801029b4 -80102a58: 83 c4 10 add $0x10,%esp - ioapicwrite(REG_TABLE+2*i+1, 0); -80102a5b: 8b 45 f4 mov -0xc(%ebp),%eax -80102a5e: 83 c0 08 add $0x8,%eax -80102a61: 01 c0 add %eax,%eax -80102a63: 83 c0 01 add $0x1,%eax -80102a66: 83 ec 08 sub $0x8,%esp -80102a69: 6a 00 push $0x0 -80102a6b: 50 push %eax -80102a6c: e8 43 ff ff ff call 801029b4 -80102a71: 83 c4 10 add $0x10,%esp - 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++){ -80102a74: 83 45 f4 01 addl $0x1,-0xc(%ebp) -80102a78: 8b 45 f4 mov -0xc(%ebp),%eax -80102a7b: 3b 45 f0 cmp -0x10(%ebp),%eax -80102a7e: 7e b9 jle 80102a39 - ioapicwrite(REG_TABLE+2*i, INT_DISABLED | (T_IRQ0 + i)); - ioapicwrite(REG_TABLE+2*i+1, 0); - } -} -80102a80: c9 leave -80102a81: c3 ret - -80102a82 : - -void -ioapicenable(int irq, int cpunum) -{ -80102a82: 55 push %ebp -80102a83: 89 e5 mov %esp,%ebp - if(!ismp) -80102a85: a1 44 24 11 80 mov 0x80112444,%eax -80102a8a: 85 c0 test %eax,%eax -80102a8c: 75 02 jne 80102a90 - return; -80102a8e: eb 37 jmp 80102ac7 - - // 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); -80102a90: 8b 45 08 mov 0x8(%ebp),%eax -80102a93: 83 c0 20 add $0x20,%eax -80102a96: 89 c2 mov %eax,%edx -80102a98: 8b 45 08 mov 0x8(%ebp),%eax -80102a9b: 83 c0 08 add $0x8,%eax -80102a9e: 01 c0 add %eax,%eax -80102aa0: 52 push %edx -80102aa1: 50 push %eax -80102aa2: e8 0d ff ff ff call 801029b4 -80102aa7: 83 c4 08 add $0x8,%esp - ioapicwrite(REG_TABLE+2*irq+1, cpunum << 24); -80102aaa: 8b 45 0c mov 0xc(%ebp),%eax -80102aad: c1 e0 18 shl $0x18,%eax -80102ab0: 89 c2 mov %eax,%edx -80102ab2: 8b 45 08 mov 0x8(%ebp),%eax -80102ab5: 83 c0 08 add $0x8,%eax -80102ab8: 01 c0 add %eax,%eax -80102aba: 83 c0 01 add $0x1,%eax -80102abd: 52 push %edx -80102abe: 50 push %eax -80102abf: e8 f0 fe ff ff call 801029b4 -80102ac4: 83 c4 08 add $0x8,%esp -} -80102ac7: c9 leave -80102ac8: c3 ret - -80102ac9 : -#define KERNBASE 0x80000000 // First kernel virtual address -#define KERNLINK (KERNBASE+EXTMEM) // Address where kernel is linked - -#ifndef __ASSEMBLER__ - -static inline uint v2p(void *a) { return ((uint) (a)) - KERNBASE; } -80102ac9: 55 push %ebp -80102aca: 89 e5 mov %esp,%ebp -80102acc: 8b 45 08 mov 0x8(%ebp),%eax -80102acf: 05 00 00 00 80 add $0x80000000,%eax -80102ad4: 5d pop %ebp -80102ad5: c3 ret - -80102ad6 : -// the pages mapped by entrypgdir on free list. -// 2. main() calls kinit2() with the rest of the physical pages -// after installing a full page table that maps them on all cores. -void -kinit1(void *vstart, void *vend) -{ -80102ad6: 55 push %ebp -80102ad7: 89 e5 mov %esp,%ebp -80102ad9: 83 ec 08 sub $0x8,%esp - initlock(&kmem.lock, "kmem"); -80102adc: 83 ec 08 sub $0x8,%esp -80102adf: 68 be 86 10 80 push $0x801086be -80102ae4: 68 e0 22 11 80 push $0x801122e0 -80102ae9: e8 6c 24 00 00 call 80104f5a -80102aee: 83 c4 10 add $0x10,%esp - kmem.use_lock = 0; -80102af1: c7 05 14 23 11 80 00 movl $0x0,0x80112314 -80102af8: 00 00 00 - freerange(vstart, vend); -80102afb: 83 ec 08 sub $0x8,%esp -80102afe: ff 75 0c pushl 0xc(%ebp) -80102b01: ff 75 08 pushl 0x8(%ebp) -80102b04: e8 28 00 00 00 call 80102b31 -80102b09: 83 c4 10 add $0x10,%esp -} -80102b0c: c9 leave -80102b0d: c3 ret - -80102b0e : - -void -kinit2(void *vstart, void *vend) -{ -80102b0e: 55 push %ebp -80102b0f: 89 e5 mov %esp,%ebp -80102b11: 83 ec 08 sub $0x8,%esp - freerange(vstart, vend); -80102b14: 83 ec 08 sub $0x8,%esp -80102b17: ff 75 0c pushl 0xc(%ebp) -80102b1a: ff 75 08 pushl 0x8(%ebp) -80102b1d: e8 0f 00 00 00 call 80102b31 -80102b22: 83 c4 10 add $0x10,%esp - kmem.use_lock = 1; -80102b25: c7 05 14 23 11 80 01 movl $0x1,0x80112314 -80102b2c: 00 00 00 -} -80102b2f: c9 leave -80102b30: c3 ret - -80102b31 : - -void -freerange(void *vstart, void *vend) -{ -80102b31: 55 push %ebp -80102b32: 89 e5 mov %esp,%ebp -80102b34: 83 ec 18 sub $0x18,%esp - char *p; - p = (char*)PGROUNDUP((uint)vstart); -80102b37: 8b 45 08 mov 0x8(%ebp),%eax -80102b3a: 05 ff 0f 00 00 add $0xfff,%eax -80102b3f: 25 00 f0 ff ff and $0xfffff000,%eax -80102b44: 89 45 f4 mov %eax,-0xc(%ebp) - for(; p + PGSIZE <= (char*)vend; p += PGSIZE) -80102b47: eb 15 jmp 80102b5e - kfree(p); -80102b49: 83 ec 0c sub $0xc,%esp -80102b4c: ff 75 f4 pushl -0xc(%ebp) -80102b4f: e8 19 00 00 00 call 80102b6d -80102b54: 83 c4 10 add $0x10,%esp -void -freerange(void *vstart, void *vend) -{ - char *p; - p = (char*)PGROUNDUP((uint)vstart); - for(; p + PGSIZE <= (char*)vend; p += PGSIZE) -80102b57: 81 45 f4 00 10 00 00 addl $0x1000,-0xc(%ebp) -80102b5e: 8b 45 f4 mov -0xc(%ebp),%eax -80102b61: 05 00 10 00 00 add $0x1000,%eax -80102b66: 3b 45 0c cmp 0xc(%ebp),%eax -80102b69: 76 de jbe 80102b49 - kfree(p); -} -80102b6b: c9 leave -80102b6c: c3 ret - -80102b6d : -// which normally should have been returned by a -// call to kalloc(). (The exception is when -// initializing the allocator; see kinit above.) -void -kfree(char *v) -{ -80102b6d: 55 push %ebp -80102b6e: 89 e5 mov %esp,%ebp -80102b70: 83 ec 18 sub $0x18,%esp - struct run *r; - - if((uint)v % PGSIZE || v < end || v2p(v) >= PHYSTOP) -80102b73: 8b 45 08 mov 0x8(%ebp),%eax -80102b76: 25 ff 0f 00 00 and $0xfff,%eax -80102b7b: 85 c0 test %eax,%eax -80102b7d: 75 1b jne 80102b9a -80102b7f: 81 7d 08 5c 52 11 80 cmpl $0x8011525c,0x8(%ebp) -80102b86: 72 12 jb 80102b9a -80102b88: ff 75 08 pushl 0x8(%ebp) -80102b8b: e8 39 ff ff ff call 80102ac9 -80102b90: 83 c4 04 add $0x4,%esp -80102b93: 3d ff ff ff 0d cmp $0xdffffff,%eax -80102b98: 76 0d jbe 80102ba7 - panic("kfree"); -80102b9a: 83 ec 0c sub $0xc,%esp -80102b9d: 68 c3 86 10 80 push $0x801086c3 -80102ba2: e8 b5 d9 ff ff call 8010055c - - // Fill with junk to catch dangling refs. - memset(v, 1, PGSIZE); -80102ba7: 83 ec 04 sub $0x4,%esp -80102baa: 68 00 10 00 00 push $0x1000 -80102baf: 6a 01 push $0x1 -80102bb1: ff 75 08 pushl 0x8(%ebp) -80102bb4: e8 1e 26 00 00 call 801051d7 -80102bb9: 83 c4 10 add $0x10,%esp - - if(kmem.use_lock) -80102bbc: a1 14 23 11 80 mov 0x80112314,%eax -80102bc1: 85 c0 test %eax,%eax -80102bc3: 74 10 je 80102bd5 - acquire(&kmem.lock); -80102bc5: 83 ec 0c sub $0xc,%esp -80102bc8: 68 e0 22 11 80 push $0x801122e0 -80102bcd: e8 a9 23 00 00 call 80104f7b -80102bd2: 83 c4 10 add $0x10,%esp - r = (struct run*)v; -80102bd5: 8b 45 08 mov 0x8(%ebp),%eax -80102bd8: 89 45 f4 mov %eax,-0xc(%ebp) - r->next = kmem.freelist; -80102bdb: 8b 15 18 23 11 80 mov 0x80112318,%edx -80102be1: 8b 45 f4 mov -0xc(%ebp),%eax -80102be4: 89 10 mov %edx,(%eax) - kmem.freelist = r; -80102be6: 8b 45 f4 mov -0xc(%ebp),%eax -80102be9: a3 18 23 11 80 mov %eax,0x80112318 - if(kmem.use_lock) -80102bee: a1 14 23 11 80 mov 0x80112314,%eax -80102bf3: 85 c0 test %eax,%eax -80102bf5: 74 10 je 80102c07 - release(&kmem.lock); -80102bf7: 83 ec 0c sub $0xc,%esp -80102bfa: 68 e0 22 11 80 push $0x801122e0 -80102bff: e8 dd 23 00 00 call 80104fe1 -80102c04: 83 c4 10 add $0x10,%esp -} -80102c07: c9 leave -80102c08: c3 ret - -80102c09 : -// Allocate one 4096-byte page of physical memory. -// Returns a pointer that the kernel can use. -// Returns 0 if the memory cannot be allocated. -char* -kalloc(void) -{ -80102c09: 55 push %ebp -80102c0a: 89 e5 mov %esp,%ebp -80102c0c: 83 ec 18 sub $0x18,%esp - struct run *r; - - if(kmem.use_lock) -80102c0f: a1 14 23 11 80 mov 0x80112314,%eax -80102c14: 85 c0 test %eax,%eax -80102c16: 74 10 je 80102c28 - acquire(&kmem.lock); -80102c18: 83 ec 0c sub $0xc,%esp -80102c1b: 68 e0 22 11 80 push $0x801122e0 -80102c20: e8 56 23 00 00 call 80104f7b -80102c25: 83 c4 10 add $0x10,%esp - r = kmem.freelist; -80102c28: a1 18 23 11 80 mov 0x80112318,%eax -80102c2d: 89 45 f4 mov %eax,-0xc(%ebp) - if(r) -80102c30: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -80102c34: 74 0a je 80102c40 - kmem.freelist = r->next; -80102c36: 8b 45 f4 mov -0xc(%ebp),%eax -80102c39: 8b 00 mov (%eax),%eax -80102c3b: a3 18 23 11 80 mov %eax,0x80112318 - if(kmem.use_lock) -80102c40: a1 14 23 11 80 mov 0x80112314,%eax -80102c45: 85 c0 test %eax,%eax -80102c47: 74 10 je 80102c59 - release(&kmem.lock); -80102c49: 83 ec 0c sub $0xc,%esp -80102c4c: 68 e0 22 11 80 push $0x801122e0 -80102c51: e8 8b 23 00 00 call 80104fe1 -80102c56: 83 c4 10 add $0x10,%esp - return (char*)r; -80102c59: 8b 45 f4 mov -0xc(%ebp),%eax -} -80102c5c: c9 leave -80102c5d: c3 ret - -80102c5e : -// Routines to let C code use special x86 instructions. - -static inline uchar -inb(ushort port) -{ -80102c5e: 55 push %ebp -80102c5f: 89 e5 mov %esp,%ebp -80102c61: 83 ec 14 sub $0x14,%esp -80102c64: 8b 45 08 mov 0x8(%ebp),%eax -80102c67: 66 89 45 ec mov %ax,-0x14(%ebp) - uchar data; - - asm volatile("in %1,%0" : "=a" (data) : "d" (port)); -80102c6b: 0f b7 45 ec movzwl -0x14(%ebp),%eax -80102c6f: 89 c2 mov %eax,%edx -80102c71: ec in (%dx),%al -80102c72: 88 45 ff mov %al,-0x1(%ebp) - return data; -80102c75: 0f b6 45 ff movzbl -0x1(%ebp),%eax -} -80102c79: c9 leave -80102c7a: c3 ret - -80102c7b : -#include "defs.h" -#include "kbd.h" - -int -kbdgetc(void) -{ -80102c7b: 55 push %ebp -80102c7c: 89 e5 mov %esp,%ebp -80102c7e: 83 ec 10 sub $0x10,%esp - static uchar *charcode[4] = { - normalmap, shiftmap, ctlmap, ctlmap - }; - uint st, data, c; - - st = inb(KBSTATP); -80102c81: 6a 64 push $0x64 -80102c83: e8 d6 ff ff ff call 80102c5e -80102c88: 83 c4 04 add $0x4,%esp -80102c8b: 0f b6 c0 movzbl %al,%eax -80102c8e: 89 45 f4 mov %eax,-0xc(%ebp) - if((st & KBS_DIB) == 0) -80102c91: 8b 45 f4 mov -0xc(%ebp),%eax -80102c94: 83 e0 01 and $0x1,%eax -80102c97: 85 c0 test %eax,%eax -80102c99: 75 0a jne 80102ca5 - return -1; -80102c9b: b8 ff ff ff ff mov $0xffffffff,%eax -80102ca0: e9 23 01 00 00 jmp 80102dc8 - data = inb(KBDATAP); -80102ca5: 6a 60 push $0x60 -80102ca7: e8 b2 ff ff ff call 80102c5e -80102cac: 83 c4 04 add $0x4,%esp -80102caf: 0f b6 c0 movzbl %al,%eax -80102cb2: 89 45 fc mov %eax,-0x4(%ebp) - - if(data == 0xE0){ -80102cb5: 81 7d fc e0 00 00 00 cmpl $0xe0,-0x4(%ebp) -80102cbc: 75 17 jne 80102cd5 - shift |= E0ESC; -80102cbe: a1 5c b6 10 80 mov 0x8010b65c,%eax -80102cc3: 83 c8 40 or $0x40,%eax -80102cc6: a3 5c b6 10 80 mov %eax,0x8010b65c - return 0; -80102ccb: b8 00 00 00 00 mov $0x0,%eax -80102cd0: e9 f3 00 00 00 jmp 80102dc8 - } else if(data & 0x80){ -80102cd5: 8b 45 fc mov -0x4(%ebp),%eax -80102cd8: 25 80 00 00 00 and $0x80,%eax -80102cdd: 85 c0 test %eax,%eax -80102cdf: 74 45 je 80102d26 - // Key released - data = (shift & E0ESC ? data : data & 0x7F); -80102ce1: a1 5c b6 10 80 mov 0x8010b65c,%eax -80102ce6: 83 e0 40 and $0x40,%eax -80102ce9: 85 c0 test %eax,%eax -80102ceb: 75 08 jne 80102cf5 -80102ced: 8b 45 fc mov -0x4(%ebp),%eax -80102cf0: 83 e0 7f and $0x7f,%eax -80102cf3: eb 03 jmp 80102cf8 -80102cf5: 8b 45 fc mov -0x4(%ebp),%eax -80102cf8: 89 45 fc mov %eax,-0x4(%ebp) - shift &= ~(shiftcode[data] | E0ESC); -80102cfb: 8b 45 fc mov -0x4(%ebp),%eax -80102cfe: 05 40 90 10 80 add $0x80109040,%eax -80102d03: 0f b6 00 movzbl (%eax),%eax -80102d06: 83 c8 40 or $0x40,%eax -80102d09: 0f b6 c0 movzbl %al,%eax -80102d0c: f7 d0 not %eax -80102d0e: 89 c2 mov %eax,%edx -80102d10: a1 5c b6 10 80 mov 0x8010b65c,%eax -80102d15: 21 d0 and %edx,%eax -80102d17: a3 5c b6 10 80 mov %eax,0x8010b65c - return 0; -80102d1c: b8 00 00 00 00 mov $0x0,%eax -80102d21: e9 a2 00 00 00 jmp 80102dc8 - } else if(shift & E0ESC){ -80102d26: a1 5c b6 10 80 mov 0x8010b65c,%eax -80102d2b: 83 e0 40 and $0x40,%eax -80102d2e: 85 c0 test %eax,%eax -80102d30: 74 14 je 80102d46 - // Last character was an E0 escape; or with 0x80 - data |= 0x80; -80102d32: 81 4d fc 80 00 00 00 orl $0x80,-0x4(%ebp) - shift &= ~E0ESC; -80102d39: a1 5c b6 10 80 mov 0x8010b65c,%eax -80102d3e: 83 e0 bf and $0xffffffbf,%eax -80102d41: a3 5c b6 10 80 mov %eax,0x8010b65c - } - - shift |= shiftcode[data]; -80102d46: 8b 45 fc mov -0x4(%ebp),%eax -80102d49: 05 40 90 10 80 add $0x80109040,%eax -80102d4e: 0f b6 00 movzbl (%eax),%eax -80102d51: 0f b6 d0 movzbl %al,%edx -80102d54: a1 5c b6 10 80 mov 0x8010b65c,%eax -80102d59: 09 d0 or %edx,%eax -80102d5b: a3 5c b6 10 80 mov %eax,0x8010b65c - shift ^= togglecode[data]; -80102d60: 8b 45 fc mov -0x4(%ebp),%eax -80102d63: 05 40 91 10 80 add $0x80109140,%eax -80102d68: 0f b6 00 movzbl (%eax),%eax -80102d6b: 0f b6 d0 movzbl %al,%edx -80102d6e: a1 5c b6 10 80 mov 0x8010b65c,%eax -80102d73: 31 d0 xor %edx,%eax -80102d75: a3 5c b6 10 80 mov %eax,0x8010b65c - c = charcode[shift & (CTL | SHIFT)][data]; -80102d7a: a1 5c b6 10 80 mov 0x8010b65c,%eax -80102d7f: 83 e0 03 and $0x3,%eax -80102d82: 8b 14 85 40 95 10 80 mov -0x7fef6ac0(,%eax,4),%edx -80102d89: 8b 45 fc mov -0x4(%ebp),%eax -80102d8c: 01 d0 add %edx,%eax -80102d8e: 0f b6 00 movzbl (%eax),%eax -80102d91: 0f b6 c0 movzbl %al,%eax -80102d94: 89 45 f8 mov %eax,-0x8(%ebp) - if(shift & CAPSLOCK){ -80102d97: a1 5c b6 10 80 mov 0x8010b65c,%eax -80102d9c: 83 e0 08 and $0x8,%eax -80102d9f: 85 c0 test %eax,%eax -80102da1: 74 22 je 80102dc5 - if('a' <= c && c <= 'z') -80102da3: 83 7d f8 60 cmpl $0x60,-0x8(%ebp) -80102da7: 76 0c jbe 80102db5 -80102da9: 83 7d f8 7a cmpl $0x7a,-0x8(%ebp) -80102dad: 77 06 ja 80102db5 - c += 'A' - 'a'; -80102daf: 83 6d f8 20 subl $0x20,-0x8(%ebp) -80102db3: eb 10 jmp 80102dc5 - else if('A' <= c && c <= 'Z') -80102db5: 83 7d f8 40 cmpl $0x40,-0x8(%ebp) -80102db9: 76 0a jbe 80102dc5 -80102dbb: 83 7d f8 5a cmpl $0x5a,-0x8(%ebp) -80102dbf: 77 04 ja 80102dc5 - c += 'a' - 'A'; -80102dc1: 83 45 f8 20 addl $0x20,-0x8(%ebp) - } - return c; -80102dc5: 8b 45 f8 mov -0x8(%ebp),%eax -} -80102dc8: c9 leave -80102dc9: c3 ret - -80102dca : - -void -kbdintr(void) -{ -80102dca: 55 push %ebp -80102dcb: 89 e5 mov %esp,%ebp -80102dcd: 83 ec 08 sub $0x8,%esp - consoleintr(kbdgetc); -80102dd0: 83 ec 0c sub $0xc,%esp -80102dd3: 68 7b 2c 10 80 push $0x80102c7b -80102dd8: e8 f4 d9 ff ff call 801007d1 -80102ddd: 83 c4 10 add $0x10,%esp -} -80102de0: c9 leave -80102de1: c3 ret - -80102de2 : -// Routines to let C code use special x86 instructions. - -static inline uchar -inb(ushort port) -{ -80102de2: 55 push %ebp -80102de3: 89 e5 mov %esp,%ebp -80102de5: 83 ec 14 sub $0x14,%esp -80102de8: 8b 45 08 mov 0x8(%ebp),%eax -80102deb: 66 89 45 ec mov %ax,-0x14(%ebp) - uchar data; - - asm volatile("in %1,%0" : "=a" (data) : "d" (port)); -80102def: 0f b7 45 ec movzwl -0x14(%ebp),%eax -80102df3: 89 c2 mov %eax,%edx -80102df5: ec in (%dx),%al -80102df6: 88 45 ff mov %al,-0x1(%ebp) - return data; -80102df9: 0f b6 45 ff movzbl -0x1(%ebp),%eax -} -80102dfd: c9 leave -80102dfe: c3 ret - -80102dff : - "memory", "cc"); -} - -static inline void -outb(ushort port, uchar data) -{ -80102dff: 55 push %ebp -80102e00: 89 e5 mov %esp,%ebp -80102e02: 83 ec 08 sub $0x8,%esp -80102e05: 8b 55 08 mov 0x8(%ebp),%edx -80102e08: 8b 45 0c mov 0xc(%ebp),%eax -80102e0b: 66 89 55 fc mov %dx,-0x4(%ebp) -80102e0f: 88 45 f8 mov %al,-0x8(%ebp) - asm volatile("out %0,%1" : : "a" (data), "d" (port)); -80102e12: 0f b6 45 f8 movzbl -0x8(%ebp),%eax -80102e16: 0f b7 55 fc movzwl -0x4(%ebp),%edx -80102e1a: ee out %al,(%dx) -} -80102e1b: c9 leave -80102e1c: c3 ret - -80102e1d : - asm volatile("ltr %0" : : "r" (sel)); -} - -static inline uint -readeflags(void) -{ -80102e1d: 55 push %ebp -80102e1e: 89 e5 mov %esp,%ebp -80102e20: 83 ec 10 sub $0x10,%esp - uint eflags; - asm volatile("pushfl; popl %0" : "=r" (eflags)); -80102e23: 9c pushf -80102e24: 58 pop %eax -80102e25: 89 45 fc mov %eax,-0x4(%ebp) - return eflags; -80102e28: 8b 45 fc mov -0x4(%ebp),%eax -} -80102e2b: c9 leave -80102e2c: c3 ret - -80102e2d : - -volatile uint *lapic; // Initialized in mp.c - -static void -lapicw(int index, int value) -{ -80102e2d: 55 push %ebp -80102e2e: 89 e5 mov %esp,%ebp - lapic[index] = value; -80102e30: a1 1c 23 11 80 mov 0x8011231c,%eax -80102e35: 8b 55 08 mov 0x8(%ebp),%edx -80102e38: c1 e2 02 shl $0x2,%edx -80102e3b: 01 c2 add %eax,%edx -80102e3d: 8b 45 0c mov 0xc(%ebp),%eax -80102e40: 89 02 mov %eax,(%edx) - lapic[ID]; // wait for write to finish, by reading -80102e42: a1 1c 23 11 80 mov 0x8011231c,%eax -80102e47: 83 c0 20 add $0x20,%eax -80102e4a: 8b 00 mov (%eax),%eax -} -80102e4c: 5d pop %ebp -80102e4d: c3 ret - -80102e4e : -//PAGEBREAK! - -void -lapicinit(void) -{ -80102e4e: 55 push %ebp -80102e4f: 89 e5 mov %esp,%ebp - if(!lapic) -80102e51: a1 1c 23 11 80 mov 0x8011231c,%eax -80102e56: 85 c0 test %eax,%eax -80102e58: 75 05 jne 80102e5f - return; -80102e5a: e9 09 01 00 00 jmp 80102f68 - - // Enable local APIC; set spurious interrupt vector. - lapicw(SVR, ENABLE | (T_IRQ0 + IRQ_SPURIOUS)); -80102e5f: 68 3f 01 00 00 push $0x13f -80102e64: 6a 3c push $0x3c -80102e66: e8 c2 ff ff ff call 80102e2d -80102e6b: 83 c4 08 add $0x8,%esp - - // The timer repeatedly counts down at bus frequency - // from lapic[TICR] and then issues an interrupt. - // If xv6 cared more about precise timekeeping, - // TICR would be calibrated using an external time source. - lapicw(TDCR, X1); -80102e6e: 6a 0b push $0xb -80102e70: 68 f8 00 00 00 push $0xf8 -80102e75: e8 b3 ff ff ff call 80102e2d -80102e7a: 83 c4 08 add $0x8,%esp - lapicw(TIMER, PERIODIC | (T_IRQ0 + IRQ_TIMER)); -80102e7d: 68 20 00 02 00 push $0x20020 -80102e82: 68 c8 00 00 00 push $0xc8 -80102e87: e8 a1 ff ff ff call 80102e2d -80102e8c: 83 c4 08 add $0x8,%esp - lapicw(TICR, 10000000); -80102e8f: 68 80 96 98 00 push $0x989680 -80102e94: 68 e0 00 00 00 push $0xe0 -80102e99: e8 8f ff ff ff call 80102e2d -80102e9e: 83 c4 08 add $0x8,%esp - - // Disable logical interrupt lines. - lapicw(LINT0, MASKED); -80102ea1: 68 00 00 01 00 push $0x10000 -80102ea6: 68 d4 00 00 00 push $0xd4 -80102eab: e8 7d ff ff ff call 80102e2d -80102eb0: 83 c4 08 add $0x8,%esp - lapicw(LINT1, MASKED); -80102eb3: 68 00 00 01 00 push $0x10000 -80102eb8: 68 d8 00 00 00 push $0xd8 -80102ebd: e8 6b ff ff ff call 80102e2d -80102ec2: 83 c4 08 add $0x8,%esp - - // Disable performance counter overflow interrupts - // on machines that provide that interrupt entry. - if(((lapic[VER]>>16) & 0xFF) >= 4) -80102ec5: a1 1c 23 11 80 mov 0x8011231c,%eax -80102eca: 83 c0 30 add $0x30,%eax -80102ecd: 8b 00 mov (%eax),%eax -80102ecf: c1 e8 10 shr $0x10,%eax -80102ed2: 0f b6 c0 movzbl %al,%eax -80102ed5: 83 f8 03 cmp $0x3,%eax -80102ed8: 76 12 jbe 80102eec - lapicw(PCINT, MASKED); -80102eda: 68 00 00 01 00 push $0x10000 -80102edf: 68 d0 00 00 00 push $0xd0 -80102ee4: e8 44 ff ff ff call 80102e2d -80102ee9: 83 c4 08 add $0x8,%esp - - // Map error interrupt to IRQ_ERROR. - lapicw(ERROR, T_IRQ0 + IRQ_ERROR); -80102eec: 6a 33 push $0x33 -80102eee: 68 dc 00 00 00 push $0xdc -80102ef3: e8 35 ff ff ff call 80102e2d -80102ef8: 83 c4 08 add $0x8,%esp - - // Clear error status register (requires back-to-back writes). - lapicw(ESR, 0); -80102efb: 6a 00 push $0x0 -80102efd: 68 a0 00 00 00 push $0xa0 -80102f02: e8 26 ff ff ff call 80102e2d -80102f07: 83 c4 08 add $0x8,%esp - lapicw(ESR, 0); -80102f0a: 6a 00 push $0x0 -80102f0c: 68 a0 00 00 00 push $0xa0 -80102f11: e8 17 ff ff ff call 80102e2d -80102f16: 83 c4 08 add $0x8,%esp - - // Ack any outstanding interrupts. - lapicw(EOI, 0); -80102f19: 6a 00 push $0x0 -80102f1b: 6a 2c push $0x2c -80102f1d: e8 0b ff ff ff call 80102e2d -80102f22: 83 c4 08 add $0x8,%esp - - // Send an Init Level De-Assert to synchronise arbitration ID's. - lapicw(ICRHI, 0); -80102f25: 6a 00 push $0x0 -80102f27: 68 c4 00 00 00 push $0xc4 -80102f2c: e8 fc fe ff ff call 80102e2d -80102f31: 83 c4 08 add $0x8,%esp - lapicw(ICRLO, BCAST | INIT | LEVEL); -80102f34: 68 00 85 08 00 push $0x88500 -80102f39: 68 c0 00 00 00 push $0xc0 -80102f3e: e8 ea fe ff ff call 80102e2d -80102f43: 83 c4 08 add $0x8,%esp - while(lapic[ICRLO] & DELIVS) -80102f46: 90 nop -80102f47: a1 1c 23 11 80 mov 0x8011231c,%eax -80102f4c: 05 00 03 00 00 add $0x300,%eax -80102f51: 8b 00 mov (%eax),%eax -80102f53: 25 00 10 00 00 and $0x1000,%eax -80102f58: 85 c0 test %eax,%eax -80102f5a: 75 eb jne 80102f47 - ; - - // Enable interrupts on the APIC (but not on the processor). - lapicw(TPR, 0); -80102f5c: 6a 00 push $0x0 -80102f5e: 6a 20 push $0x20 -80102f60: e8 c8 fe ff ff call 80102e2d -80102f65: 83 c4 08 add $0x8,%esp -} -80102f68: c9 leave -80102f69: c3 ret - -80102f6a : - -int -cpunum(void) -{ -80102f6a: 55 push %ebp -80102f6b: 89 e5 mov %esp,%ebp -80102f6d: 83 ec 08 sub $0x8,%esp - // Cannot call cpu when interrupts are enabled: - // result not guaranteed to last long enough to be used! - // Would prefer to panic but even printing is chancy here: - // almost everything, including cprintf and panic, calls cpu, - // often indirectly through acquire and release. - if(readeflags()&FL_IF){ -80102f70: e8 a8 fe ff ff call 80102e1d -80102f75: 25 00 02 00 00 and $0x200,%eax -80102f7a: 85 c0 test %eax,%eax -80102f7c: 74 26 je 80102fa4 - static int n; - if(n++ == 0) -80102f7e: a1 60 b6 10 80 mov 0x8010b660,%eax -80102f83: 8d 50 01 lea 0x1(%eax),%edx -80102f86: 89 15 60 b6 10 80 mov %edx,0x8010b660 -80102f8c: 85 c0 test %eax,%eax -80102f8e: 75 14 jne 80102fa4 - cprintf("cpu called from %x with interrupts enabled\n", -80102f90: 8b 45 04 mov 0x4(%ebp),%eax -80102f93: 83 ec 08 sub $0x8,%esp -80102f96: 50 push %eax -80102f97: 68 cc 86 10 80 push $0x801086cc -80102f9c: e8 1e d4 ff ff call 801003bf -80102fa1: 83 c4 10 add $0x10,%esp - __builtin_return_address(0)); - } - - if(lapic) -80102fa4: a1 1c 23 11 80 mov 0x8011231c,%eax -80102fa9: 85 c0 test %eax,%eax -80102fab: 74 0f je 80102fbc - return lapic[ID]>>24; -80102fad: a1 1c 23 11 80 mov 0x8011231c,%eax -80102fb2: 83 c0 20 add $0x20,%eax -80102fb5: 8b 00 mov (%eax),%eax -80102fb7: c1 e8 18 shr $0x18,%eax -80102fba: eb 05 jmp 80102fc1 - return 0; -80102fbc: b8 00 00 00 00 mov $0x0,%eax -} -80102fc1: c9 leave -80102fc2: c3 ret - -80102fc3 : - -// Acknowledge interrupt. -void -lapiceoi(void) -{ -80102fc3: 55 push %ebp -80102fc4: 89 e5 mov %esp,%ebp - if(lapic) -80102fc6: a1 1c 23 11 80 mov 0x8011231c,%eax -80102fcb: 85 c0 test %eax,%eax -80102fcd: 74 0c je 80102fdb - lapicw(EOI, 0); -80102fcf: 6a 00 push $0x0 -80102fd1: 6a 2c push $0x2c -80102fd3: e8 55 fe ff ff call 80102e2d -80102fd8: 83 c4 08 add $0x8,%esp -} -80102fdb: c9 leave -80102fdc: c3 ret - -80102fdd : - -// Spin for a given number of microseconds. -// On real hardware would want to tune this dynamically. -void -microdelay(int us) -{ -80102fdd: 55 push %ebp -80102fde: 89 e5 mov %esp,%ebp -} -80102fe0: 5d pop %ebp -80102fe1: c3 ret - -80102fe2 : - -// Start additional processor running entry code at addr. -// See Appendix B of MultiProcessor Specification. -void -lapicstartap(uchar apicid, uint addr) -{ -80102fe2: 55 push %ebp -80102fe3: 89 e5 mov %esp,%ebp -80102fe5: 83 ec 14 sub $0x14,%esp -80102fe8: 8b 45 08 mov 0x8(%ebp),%eax -80102feb: 88 45 ec mov %al,-0x14(%ebp) - ushort *wrv; - - // "The BSP must initialize CMOS shutdown code to 0AH - // and the warm reset vector (DWORD based at 40:67) to point at - // the AP startup code prior to the [universal startup algorithm]." - outb(CMOS_PORT, 0xF); // offset 0xF is shutdown code -80102fee: 6a 0f push $0xf -80102ff0: 6a 70 push $0x70 -80102ff2: e8 08 fe ff ff call 80102dff -80102ff7: 83 c4 08 add $0x8,%esp - outb(CMOS_PORT+1, 0x0A); -80102ffa: 6a 0a push $0xa -80102ffc: 6a 71 push $0x71 -80102ffe: e8 fc fd ff ff call 80102dff -80103003: 83 c4 08 add $0x8,%esp - wrv = (ushort*)P2V((0x40<<4 | 0x67)); // Warm reset vector -80103006: c7 45 f8 67 04 00 80 movl $0x80000467,-0x8(%ebp) - wrv[0] = 0; -8010300d: 8b 45 f8 mov -0x8(%ebp),%eax -80103010: 66 c7 00 00 00 movw $0x0,(%eax) - wrv[1] = addr >> 4; -80103015: 8b 45 f8 mov -0x8(%ebp),%eax -80103018: 83 c0 02 add $0x2,%eax -8010301b: 8b 55 0c mov 0xc(%ebp),%edx -8010301e: c1 ea 04 shr $0x4,%edx -80103021: 66 89 10 mov %dx,(%eax) - - // "Universal startup algorithm." - // Send INIT (level-triggered) interrupt to reset other CPU. - lapicw(ICRHI, apicid<<24); -80103024: 0f b6 45 ec movzbl -0x14(%ebp),%eax -80103028: c1 e0 18 shl $0x18,%eax -8010302b: 50 push %eax -8010302c: 68 c4 00 00 00 push $0xc4 -80103031: e8 f7 fd ff ff call 80102e2d -80103036: 83 c4 08 add $0x8,%esp - lapicw(ICRLO, INIT | LEVEL | ASSERT); -80103039: 68 00 c5 00 00 push $0xc500 -8010303e: 68 c0 00 00 00 push $0xc0 -80103043: e8 e5 fd ff ff call 80102e2d -80103048: 83 c4 08 add $0x8,%esp - microdelay(200); -8010304b: 68 c8 00 00 00 push $0xc8 -80103050: e8 88 ff ff ff call 80102fdd -80103055: 83 c4 04 add $0x4,%esp - lapicw(ICRLO, INIT | LEVEL); -80103058: 68 00 85 00 00 push $0x8500 -8010305d: 68 c0 00 00 00 push $0xc0 -80103062: e8 c6 fd ff ff call 80102e2d -80103067: 83 c4 08 add $0x8,%esp - microdelay(100); // should be 10ms, but too slow in Bochs! -8010306a: 6a 64 push $0x64 -8010306c: e8 6c ff ff ff call 80102fdd -80103071: 83 c4 04 add $0x4,%esp - // Send startup IPI (twice!) to enter code. - // Regular hardware is supposed to only accept a STARTUP - // when it is in the halted state due to an INIT. So the second - // should be ignored, but it is part of the official Intel algorithm. - // Bochs complains about the second one. Too bad for Bochs. - for(i = 0; i < 2; i++){ -80103074: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) -8010307b: eb 3d jmp 801030ba - lapicw(ICRHI, apicid<<24); -8010307d: 0f b6 45 ec movzbl -0x14(%ebp),%eax -80103081: c1 e0 18 shl $0x18,%eax -80103084: 50 push %eax -80103085: 68 c4 00 00 00 push $0xc4 -8010308a: e8 9e fd ff ff call 80102e2d -8010308f: 83 c4 08 add $0x8,%esp - lapicw(ICRLO, STARTUP | (addr>>12)); -80103092: 8b 45 0c mov 0xc(%ebp),%eax -80103095: c1 e8 0c shr $0xc,%eax -80103098: 80 cc 06 or $0x6,%ah -8010309b: 50 push %eax -8010309c: 68 c0 00 00 00 push $0xc0 -801030a1: e8 87 fd ff ff call 80102e2d -801030a6: 83 c4 08 add $0x8,%esp - microdelay(200); -801030a9: 68 c8 00 00 00 push $0xc8 -801030ae: e8 2a ff ff ff call 80102fdd -801030b3: 83 c4 04 add $0x4,%esp - // Send startup IPI (twice!) to enter code. - // Regular hardware is supposed to only accept a STARTUP - // when it is in the halted state due to an INIT. So the second - // should be ignored, but it is part of the official Intel algorithm. - // Bochs complains about the second one. Too bad for Bochs. - for(i = 0; i < 2; i++){ -801030b6: 83 45 fc 01 addl $0x1,-0x4(%ebp) -801030ba: 83 7d fc 01 cmpl $0x1,-0x4(%ebp) -801030be: 7e bd jle 8010307d - lapicw(ICRHI, apicid<<24); - lapicw(ICRLO, STARTUP | (addr>>12)); - microdelay(200); - } -} -801030c0: c9 leave -801030c1: c3 ret - -801030c2 : -#define DAY 0x07 -#define MONTH 0x08 -#define YEAR 0x09 - -static uint cmos_read(uint reg) -{ -801030c2: 55 push %ebp -801030c3: 89 e5 mov %esp,%ebp - outb(CMOS_PORT, reg); -801030c5: 8b 45 08 mov 0x8(%ebp),%eax -801030c8: 0f b6 c0 movzbl %al,%eax -801030cb: 50 push %eax -801030cc: 6a 70 push $0x70 -801030ce: e8 2c fd ff ff call 80102dff -801030d3: 83 c4 08 add $0x8,%esp - microdelay(200); -801030d6: 68 c8 00 00 00 push $0xc8 -801030db: e8 fd fe ff ff call 80102fdd -801030e0: 83 c4 04 add $0x4,%esp - - return inb(CMOS_RETURN); -801030e3: 6a 71 push $0x71 -801030e5: e8 f8 fc ff ff call 80102de2 -801030ea: 83 c4 04 add $0x4,%esp -801030ed: 0f b6 c0 movzbl %al,%eax -} -801030f0: c9 leave -801030f1: c3 ret - -801030f2 : - -static void fill_rtcdate(struct rtcdate *r) -{ -801030f2: 55 push %ebp -801030f3: 89 e5 mov %esp,%ebp - r->second = cmos_read(SECS); -801030f5: 6a 00 push $0x0 -801030f7: e8 c6 ff ff ff call 801030c2 -801030fc: 83 c4 04 add $0x4,%esp -801030ff: 89 c2 mov %eax,%edx -80103101: 8b 45 08 mov 0x8(%ebp),%eax -80103104: 89 10 mov %edx,(%eax) - r->minute = cmos_read(MINS); -80103106: 6a 02 push $0x2 -80103108: e8 b5 ff ff ff call 801030c2 -8010310d: 83 c4 04 add $0x4,%esp -80103110: 89 c2 mov %eax,%edx -80103112: 8b 45 08 mov 0x8(%ebp),%eax -80103115: 89 50 04 mov %edx,0x4(%eax) - r->hour = cmos_read(HOURS); -80103118: 6a 04 push $0x4 -8010311a: e8 a3 ff ff ff call 801030c2 -8010311f: 83 c4 04 add $0x4,%esp -80103122: 89 c2 mov %eax,%edx -80103124: 8b 45 08 mov 0x8(%ebp),%eax -80103127: 89 50 08 mov %edx,0x8(%eax) - r->day = cmos_read(DAY); -8010312a: 6a 07 push $0x7 -8010312c: e8 91 ff ff ff call 801030c2 -80103131: 83 c4 04 add $0x4,%esp -80103134: 89 c2 mov %eax,%edx -80103136: 8b 45 08 mov 0x8(%ebp),%eax -80103139: 89 50 0c mov %edx,0xc(%eax) - r->month = cmos_read(MONTH); -8010313c: 6a 08 push $0x8 -8010313e: e8 7f ff ff ff call 801030c2 -80103143: 83 c4 04 add $0x4,%esp -80103146: 89 c2 mov %eax,%edx -80103148: 8b 45 08 mov 0x8(%ebp),%eax -8010314b: 89 50 10 mov %edx,0x10(%eax) - r->year = cmos_read(YEAR); -8010314e: 6a 09 push $0x9 -80103150: e8 6d ff ff ff call 801030c2 -80103155: 83 c4 04 add $0x4,%esp -80103158: 89 c2 mov %eax,%edx -8010315a: 8b 45 08 mov 0x8(%ebp),%eax -8010315d: 89 50 14 mov %edx,0x14(%eax) -} -80103160: c9 leave -80103161: c3 ret - -80103162 : - -// qemu seems to use 24-hour GWT and the values are BCD encoded -void cmostime(struct rtcdate *r) -{ -80103162: 55 push %ebp -80103163: 89 e5 mov %esp,%ebp -80103165: 83 ec 48 sub $0x48,%esp - struct rtcdate t1, t2; - int sb, bcd; - - sb = cmos_read(CMOS_STATB); -80103168: 6a 0b push $0xb -8010316a: e8 53 ff ff ff call 801030c2 -8010316f: 83 c4 04 add $0x4,%esp -80103172: 89 45 f4 mov %eax,-0xc(%ebp) - - bcd = (sb & (1 << 2)) == 0; -80103175: 8b 45 f4 mov -0xc(%ebp),%eax -80103178: 83 e0 04 and $0x4,%eax -8010317b: 85 c0 test %eax,%eax -8010317d: 0f 94 c0 sete %al -80103180: 0f b6 c0 movzbl %al,%eax -80103183: 89 45 f0 mov %eax,-0x10(%ebp) - - // make sure CMOS doesn't modify time while we read it - for (;;) { - fill_rtcdate(&t1); -80103186: 8d 45 d8 lea -0x28(%ebp),%eax -80103189: 50 push %eax -8010318a: e8 63 ff ff ff call 801030f2 -8010318f: 83 c4 04 add $0x4,%esp - if (cmos_read(CMOS_STATA) & CMOS_UIP) -80103192: 6a 0a push $0xa -80103194: e8 29 ff ff ff call 801030c2 -80103199: 83 c4 04 add $0x4,%esp -8010319c: 25 80 00 00 00 and $0x80,%eax -801031a1: 85 c0 test %eax,%eax -801031a3: 74 02 je 801031a7 - continue; -801031a5: eb 32 jmp 801031d9 - fill_rtcdate(&t2); -801031a7: 8d 45 c0 lea -0x40(%ebp),%eax -801031aa: 50 push %eax -801031ab: e8 42 ff ff ff call 801030f2 -801031b0: 83 c4 04 add $0x4,%esp - if (memcmp(&t1, &t2, sizeof(t1)) == 0) -801031b3: 83 ec 04 sub $0x4,%esp -801031b6: 6a 18 push $0x18 -801031b8: 8d 45 c0 lea -0x40(%ebp),%eax -801031bb: 50 push %eax -801031bc: 8d 45 d8 lea -0x28(%ebp),%eax -801031bf: 50 push %eax -801031c0: e8 79 20 00 00 call 8010523e -801031c5: 83 c4 10 add $0x10,%esp -801031c8: 85 c0 test %eax,%eax -801031ca: 75 0d jne 801031d9 - break; -801031cc: 90 nop - } - - // convert - if (bcd) { -801031cd: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) -801031d1: 0f 84 b8 00 00 00 je 8010328f -801031d7: eb 02 jmp 801031db - if (cmos_read(CMOS_STATA) & CMOS_UIP) - continue; - fill_rtcdate(&t2); - if (memcmp(&t1, &t2, sizeof(t1)) == 0) - break; - } -801031d9: eb ab jmp 80103186 - - // convert - if (bcd) { -#define CONV(x) (t1.x = ((t1.x >> 4) * 10) + (t1.x & 0xf)) - CONV(second); -801031db: 8b 45 d8 mov -0x28(%ebp),%eax -801031de: c1 e8 04 shr $0x4,%eax -801031e1: 89 c2 mov %eax,%edx -801031e3: 89 d0 mov %edx,%eax -801031e5: c1 e0 02 shl $0x2,%eax -801031e8: 01 d0 add %edx,%eax -801031ea: 01 c0 add %eax,%eax -801031ec: 89 c2 mov %eax,%edx -801031ee: 8b 45 d8 mov -0x28(%ebp),%eax -801031f1: 83 e0 0f and $0xf,%eax -801031f4: 01 d0 add %edx,%eax -801031f6: 89 45 d8 mov %eax,-0x28(%ebp) - CONV(minute); -801031f9: 8b 45 dc mov -0x24(%ebp),%eax -801031fc: c1 e8 04 shr $0x4,%eax -801031ff: 89 c2 mov %eax,%edx -80103201: 89 d0 mov %edx,%eax -80103203: c1 e0 02 shl $0x2,%eax -80103206: 01 d0 add %edx,%eax -80103208: 01 c0 add %eax,%eax -8010320a: 89 c2 mov %eax,%edx -8010320c: 8b 45 dc mov -0x24(%ebp),%eax -8010320f: 83 e0 0f and $0xf,%eax -80103212: 01 d0 add %edx,%eax -80103214: 89 45 dc mov %eax,-0x24(%ebp) - CONV(hour ); -80103217: 8b 45 e0 mov -0x20(%ebp),%eax -8010321a: c1 e8 04 shr $0x4,%eax -8010321d: 89 c2 mov %eax,%edx -8010321f: 89 d0 mov %edx,%eax -80103221: c1 e0 02 shl $0x2,%eax -80103224: 01 d0 add %edx,%eax -80103226: 01 c0 add %eax,%eax -80103228: 89 c2 mov %eax,%edx -8010322a: 8b 45 e0 mov -0x20(%ebp),%eax -8010322d: 83 e0 0f and $0xf,%eax -80103230: 01 d0 add %edx,%eax -80103232: 89 45 e0 mov %eax,-0x20(%ebp) - CONV(day ); -80103235: 8b 45 e4 mov -0x1c(%ebp),%eax -80103238: c1 e8 04 shr $0x4,%eax -8010323b: 89 c2 mov %eax,%edx -8010323d: 89 d0 mov %edx,%eax -8010323f: c1 e0 02 shl $0x2,%eax -80103242: 01 d0 add %edx,%eax -80103244: 01 c0 add %eax,%eax -80103246: 89 c2 mov %eax,%edx -80103248: 8b 45 e4 mov -0x1c(%ebp),%eax -8010324b: 83 e0 0f and $0xf,%eax -8010324e: 01 d0 add %edx,%eax -80103250: 89 45 e4 mov %eax,-0x1c(%ebp) - CONV(month ); -80103253: 8b 45 e8 mov -0x18(%ebp),%eax -80103256: c1 e8 04 shr $0x4,%eax -80103259: 89 c2 mov %eax,%edx -8010325b: 89 d0 mov %edx,%eax -8010325d: c1 e0 02 shl $0x2,%eax -80103260: 01 d0 add %edx,%eax -80103262: 01 c0 add %eax,%eax -80103264: 89 c2 mov %eax,%edx -80103266: 8b 45 e8 mov -0x18(%ebp),%eax -80103269: 83 e0 0f and $0xf,%eax -8010326c: 01 d0 add %edx,%eax -8010326e: 89 45 e8 mov %eax,-0x18(%ebp) - CONV(year ); -80103271: 8b 45 ec mov -0x14(%ebp),%eax -80103274: c1 e8 04 shr $0x4,%eax -80103277: 89 c2 mov %eax,%edx -80103279: 89 d0 mov %edx,%eax -8010327b: c1 e0 02 shl $0x2,%eax -8010327e: 01 d0 add %edx,%eax -80103280: 01 c0 add %eax,%eax -80103282: 89 c2 mov %eax,%edx -80103284: 8b 45 ec mov -0x14(%ebp),%eax -80103287: 83 e0 0f and $0xf,%eax -8010328a: 01 d0 add %edx,%eax -8010328c: 89 45 ec mov %eax,-0x14(%ebp) -#undef CONV - } - - *r = t1; -8010328f: 8b 45 08 mov 0x8(%ebp),%eax -80103292: 8b 55 d8 mov -0x28(%ebp),%edx -80103295: 89 10 mov %edx,(%eax) -80103297: 8b 55 dc mov -0x24(%ebp),%edx -8010329a: 89 50 04 mov %edx,0x4(%eax) -8010329d: 8b 55 e0 mov -0x20(%ebp),%edx -801032a0: 89 50 08 mov %edx,0x8(%eax) -801032a3: 8b 55 e4 mov -0x1c(%ebp),%edx -801032a6: 89 50 0c mov %edx,0xc(%eax) -801032a9: 8b 55 e8 mov -0x18(%ebp),%edx -801032ac: 89 50 10 mov %edx,0x10(%eax) -801032af: 8b 55 ec mov -0x14(%ebp),%edx -801032b2: 89 50 14 mov %edx,0x14(%eax) - r->year += 2000; -801032b5: 8b 45 08 mov 0x8(%ebp),%eax -801032b8: 8b 40 14 mov 0x14(%eax),%eax -801032bb: 8d 90 d0 07 00 00 lea 0x7d0(%eax),%edx -801032c1: 8b 45 08 mov 0x8(%ebp),%eax -801032c4: 89 50 14 mov %edx,0x14(%eax) -} -801032c7: c9 leave -801032c8: c3 ret - -801032c9 : -static void recover_from_log(void); -static void commit(); - -void -initlog(int dev) -{ -801032c9: 55 push %ebp -801032ca: 89 e5 mov %esp,%ebp -801032cc: 83 ec 28 sub $0x28,%esp - if (sizeof(struct logheader) >= BSIZE) - panic("initlog: too big logheader"); - - struct superblock sb; - initlock(&log.lock, "log"); -801032cf: 83 ec 08 sub $0x8,%esp -801032d2: 68 f8 86 10 80 push $0x801086f8 -801032d7: 68 40 23 11 80 push $0x80112340 -801032dc: e8 79 1c 00 00 call 80104f5a -801032e1: 83 c4 10 add $0x10,%esp - readsb(dev, &sb); -801032e4: 83 ec 08 sub $0x8,%esp -801032e7: 8d 45 dc lea -0x24(%ebp),%eax -801032ea: 50 push %eax -801032eb: ff 75 08 pushl 0x8(%ebp) -801032ee: e8 4c e0 ff ff call 8010133f -801032f3: 83 c4 10 add $0x10,%esp - log.start = sb.logstart; -801032f6: 8b 45 ec mov -0x14(%ebp),%eax -801032f9: a3 74 23 11 80 mov %eax,0x80112374 - log.size = sb.nlog; -801032fe: 8b 45 e8 mov -0x18(%ebp),%eax -80103301: a3 78 23 11 80 mov %eax,0x80112378 - log.dev = dev; -80103306: 8b 45 08 mov 0x8(%ebp),%eax -80103309: a3 84 23 11 80 mov %eax,0x80112384 - recover_from_log(); -8010330e: e8 ae 01 00 00 call 801034c1 -} -80103313: c9 leave -80103314: c3 ret - -80103315 : - -// Copy committed blocks from log to their home location -static void -install_trans(void) -{ -80103315: 55 push %ebp -80103316: 89 e5 mov %esp,%ebp -80103318: 83 ec 18 sub $0x18,%esp - int tail; - - for (tail = 0; tail < log.lh.n; tail++) { -8010331b: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) -80103322: e9 95 00 00 00 jmp 801033bc - struct buf *lbuf = bread(log.dev, log.start+tail+1); // read log block -80103327: 8b 15 74 23 11 80 mov 0x80112374,%edx -8010332d: 8b 45 f4 mov -0xc(%ebp),%eax -80103330: 01 d0 add %edx,%eax -80103332: 83 c0 01 add $0x1,%eax -80103335: 89 c2 mov %eax,%edx -80103337: a1 84 23 11 80 mov 0x80112384,%eax -8010333c: 83 ec 08 sub $0x8,%esp -8010333f: 52 push %edx -80103340: 50 push %eax -80103341: e8 6e ce ff ff call 801001b4 -80103346: 83 c4 10 add $0x10,%esp -80103349: 89 45 f0 mov %eax,-0x10(%ebp) - struct buf *dbuf = bread(log.dev, log.lh.block[tail]); // read dst -8010334c: 8b 45 f4 mov -0xc(%ebp),%eax -8010334f: 83 c0 10 add $0x10,%eax -80103352: 8b 04 85 4c 23 11 80 mov -0x7feedcb4(,%eax,4),%eax -80103359: 89 c2 mov %eax,%edx -8010335b: a1 84 23 11 80 mov 0x80112384,%eax -80103360: 83 ec 08 sub $0x8,%esp -80103363: 52 push %edx -80103364: 50 push %eax -80103365: e8 4a ce ff ff call 801001b4 -8010336a: 83 c4 10 add $0x10,%esp -8010336d: 89 45 ec mov %eax,-0x14(%ebp) - memmove(dbuf->data, lbuf->data, BSIZE); // copy block to dst -80103370: 8b 45 f0 mov -0x10(%ebp),%eax -80103373: 8d 50 18 lea 0x18(%eax),%edx -80103376: 8b 45 ec mov -0x14(%ebp),%eax -80103379: 83 c0 18 add $0x18,%eax -8010337c: 83 ec 04 sub $0x4,%esp -8010337f: 68 00 02 00 00 push $0x200 -80103384: 52 push %edx -80103385: 50 push %eax -80103386: e8 0b 1f 00 00 call 80105296 -8010338b: 83 c4 10 add $0x10,%esp - bwrite(dbuf); // write dst to disk -8010338e: 83 ec 0c sub $0xc,%esp -80103391: ff 75 ec pushl -0x14(%ebp) -80103394: e8 54 ce ff ff call 801001ed -80103399: 83 c4 10 add $0x10,%esp - brelse(lbuf); -8010339c: 83 ec 0c sub $0xc,%esp -8010339f: ff 75 f0 pushl -0x10(%ebp) -801033a2: e8 84 ce ff ff call 8010022b -801033a7: 83 c4 10 add $0x10,%esp - brelse(dbuf); -801033aa: 83 ec 0c sub $0xc,%esp -801033ad: ff 75 ec pushl -0x14(%ebp) -801033b0: e8 76 ce ff ff call 8010022b -801033b5: 83 c4 10 add $0x10,%esp -static void -install_trans(void) -{ - int tail; - - for (tail = 0; tail < log.lh.n; tail++) { -801033b8: 83 45 f4 01 addl $0x1,-0xc(%ebp) -801033bc: a1 88 23 11 80 mov 0x80112388,%eax -801033c1: 3b 45 f4 cmp -0xc(%ebp),%eax -801033c4: 0f 8f 5d ff ff ff jg 80103327 - memmove(dbuf->data, lbuf->data, BSIZE); // copy block to dst - bwrite(dbuf); // write dst to disk - brelse(lbuf); - brelse(dbuf); - } -} -801033ca: c9 leave -801033cb: c3 ret - -801033cc : - -// Read the log header from disk into the in-memory log header -static void -read_head(void) -{ -801033cc: 55 push %ebp -801033cd: 89 e5 mov %esp,%ebp -801033cf: 83 ec 18 sub $0x18,%esp - struct buf *buf = bread(log.dev, log.start); -801033d2: a1 74 23 11 80 mov 0x80112374,%eax -801033d7: 89 c2 mov %eax,%edx -801033d9: a1 84 23 11 80 mov 0x80112384,%eax -801033de: 83 ec 08 sub $0x8,%esp -801033e1: 52 push %edx -801033e2: 50 push %eax -801033e3: e8 cc cd ff ff call 801001b4 -801033e8: 83 c4 10 add $0x10,%esp -801033eb: 89 45 f0 mov %eax,-0x10(%ebp) - struct logheader *lh = (struct logheader *) (buf->data); -801033ee: 8b 45 f0 mov -0x10(%ebp),%eax -801033f1: 83 c0 18 add $0x18,%eax -801033f4: 89 45 ec mov %eax,-0x14(%ebp) - int i; - log.lh.n = lh->n; -801033f7: 8b 45 ec mov -0x14(%ebp),%eax -801033fa: 8b 00 mov (%eax),%eax -801033fc: a3 88 23 11 80 mov %eax,0x80112388 - for (i = 0; i < log.lh.n; i++) { -80103401: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) -80103408: eb 1b jmp 80103425 - log.lh.block[i] = lh->block[i]; -8010340a: 8b 45 ec mov -0x14(%ebp),%eax -8010340d: 8b 55 f4 mov -0xc(%ebp),%edx -80103410: 8b 44 90 04 mov 0x4(%eax,%edx,4),%eax -80103414: 8b 55 f4 mov -0xc(%ebp),%edx -80103417: 83 c2 10 add $0x10,%edx -8010341a: 89 04 95 4c 23 11 80 mov %eax,-0x7feedcb4(,%edx,4) -{ - struct buf *buf = bread(log.dev, log.start); - struct logheader *lh = (struct logheader *) (buf->data); - int i; - log.lh.n = lh->n; - for (i = 0; i < log.lh.n; i++) { -80103421: 83 45 f4 01 addl $0x1,-0xc(%ebp) -80103425: a1 88 23 11 80 mov 0x80112388,%eax -8010342a: 3b 45 f4 cmp -0xc(%ebp),%eax -8010342d: 7f db jg 8010340a - log.lh.block[i] = lh->block[i]; - } - brelse(buf); -8010342f: 83 ec 0c sub $0xc,%esp -80103432: ff 75 f0 pushl -0x10(%ebp) -80103435: e8 f1 cd ff ff call 8010022b -8010343a: 83 c4 10 add $0x10,%esp -} -8010343d: c9 leave -8010343e: c3 ret - -8010343f : -// Write in-memory log header to disk. -// This is the true point at which the -// current transaction commits. -static void -write_head(void) -{ -8010343f: 55 push %ebp -80103440: 89 e5 mov %esp,%ebp -80103442: 83 ec 18 sub $0x18,%esp - struct buf *buf = bread(log.dev, log.start); -80103445: a1 74 23 11 80 mov 0x80112374,%eax -8010344a: 89 c2 mov %eax,%edx -8010344c: a1 84 23 11 80 mov 0x80112384,%eax -80103451: 83 ec 08 sub $0x8,%esp -80103454: 52 push %edx -80103455: 50 push %eax -80103456: e8 59 cd ff ff call 801001b4 -8010345b: 83 c4 10 add $0x10,%esp -8010345e: 89 45 f0 mov %eax,-0x10(%ebp) - struct logheader *hb = (struct logheader *) (buf->data); -80103461: 8b 45 f0 mov -0x10(%ebp),%eax -80103464: 83 c0 18 add $0x18,%eax -80103467: 89 45 ec mov %eax,-0x14(%ebp) - int i; - hb->n = log.lh.n; -8010346a: 8b 15 88 23 11 80 mov 0x80112388,%edx -80103470: 8b 45 ec mov -0x14(%ebp),%eax -80103473: 89 10 mov %edx,(%eax) - for (i = 0; i < log.lh.n; i++) { -80103475: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) -8010347c: eb 1b jmp 80103499 - hb->block[i] = log.lh.block[i]; -8010347e: 8b 45 f4 mov -0xc(%ebp),%eax -80103481: 83 c0 10 add $0x10,%eax -80103484: 8b 0c 85 4c 23 11 80 mov -0x7feedcb4(,%eax,4),%ecx -8010348b: 8b 45 ec mov -0x14(%ebp),%eax -8010348e: 8b 55 f4 mov -0xc(%ebp),%edx -80103491: 89 4c 90 04 mov %ecx,0x4(%eax,%edx,4) -{ - struct buf *buf = bread(log.dev, log.start); - struct logheader *hb = (struct logheader *) (buf->data); - int i; - hb->n = log.lh.n; - for (i = 0; i < log.lh.n; i++) { -80103495: 83 45 f4 01 addl $0x1,-0xc(%ebp) -80103499: a1 88 23 11 80 mov 0x80112388,%eax -8010349e: 3b 45 f4 cmp -0xc(%ebp),%eax -801034a1: 7f db jg 8010347e - hb->block[i] = log.lh.block[i]; - } - bwrite(buf); -801034a3: 83 ec 0c sub $0xc,%esp -801034a6: ff 75 f0 pushl -0x10(%ebp) -801034a9: e8 3f cd ff ff call 801001ed -801034ae: 83 c4 10 add $0x10,%esp - brelse(buf); -801034b1: 83 ec 0c sub $0xc,%esp -801034b4: ff 75 f0 pushl -0x10(%ebp) -801034b7: e8 6f cd ff ff call 8010022b -801034bc: 83 c4 10 add $0x10,%esp -} -801034bf: c9 leave -801034c0: c3 ret - -801034c1 : - -static void -recover_from_log(void) -{ -801034c1: 55 push %ebp -801034c2: 89 e5 mov %esp,%ebp -801034c4: 83 ec 08 sub $0x8,%esp - read_head(); -801034c7: e8 00 ff ff ff call 801033cc - install_trans(); // if committed, copy from log to disk -801034cc: e8 44 fe ff ff call 80103315 - log.lh.n = 0; -801034d1: c7 05 88 23 11 80 00 movl $0x0,0x80112388 -801034d8: 00 00 00 - write_head(); // clear the log -801034db: e8 5f ff ff ff call 8010343f -} -801034e0: c9 leave -801034e1: c3 ret - -801034e2 : - -// called at the start of each FS system call. -void -begin_op(void) -{ -801034e2: 55 push %ebp -801034e3: 89 e5 mov %esp,%ebp -801034e5: 83 ec 08 sub $0x8,%esp - acquire(&log.lock); -801034e8: 83 ec 0c sub $0xc,%esp -801034eb: 68 40 23 11 80 push $0x80112340 -801034f0: e8 86 1a 00 00 call 80104f7b -801034f5: 83 c4 10 add $0x10,%esp - while(1){ - if(log.committing){ -801034f8: a1 80 23 11 80 mov 0x80112380,%eax -801034fd: 85 c0 test %eax,%eax -801034ff: 74 17 je 80103518 - sleep(&log, &log.lock); -80103501: 83 ec 08 sub $0x8,%esp -80103504: 68 40 23 11 80 push $0x80112340 -80103509: 68 40 23 11 80 push $0x80112340 -8010350e: e8 78 17 00 00 call 80104c8b -80103513: 83 c4 10 add $0x10,%esp -80103516: eb 54 jmp 8010356c - } else if(log.lh.n + (log.outstanding+1)*MAXOPBLOCKS > LOGSIZE){ -80103518: 8b 0d 88 23 11 80 mov 0x80112388,%ecx -8010351e: a1 7c 23 11 80 mov 0x8011237c,%eax -80103523: 8d 50 01 lea 0x1(%eax),%edx -80103526: 89 d0 mov %edx,%eax -80103528: c1 e0 02 shl $0x2,%eax -8010352b: 01 d0 add %edx,%eax -8010352d: 01 c0 add %eax,%eax -8010352f: 01 c8 add %ecx,%eax -80103531: 83 f8 1e cmp $0x1e,%eax -80103534: 7e 17 jle 8010354d - // this op might exhaust log space; wait for commit. - sleep(&log, &log.lock); -80103536: 83 ec 08 sub $0x8,%esp -80103539: 68 40 23 11 80 push $0x80112340 -8010353e: 68 40 23 11 80 push $0x80112340 -80103543: e8 43 17 00 00 call 80104c8b -80103548: 83 c4 10 add $0x10,%esp -8010354b: eb 1f jmp 8010356c - } else { - log.outstanding += 1; -8010354d: a1 7c 23 11 80 mov 0x8011237c,%eax -80103552: 83 c0 01 add $0x1,%eax -80103555: a3 7c 23 11 80 mov %eax,0x8011237c - release(&log.lock); -8010355a: 83 ec 0c sub $0xc,%esp -8010355d: 68 40 23 11 80 push $0x80112340 -80103562: e8 7a 1a 00 00 call 80104fe1 -80103567: 83 c4 10 add $0x10,%esp - break; -8010356a: eb 02 jmp 8010356e - } - } -8010356c: eb 8a jmp 801034f8 -} -8010356e: c9 leave -8010356f: c3 ret - -80103570 : - -// called at the end of each FS system call. -// commits if this was the last outstanding operation. -void -end_op(void) -{ -80103570: 55 push %ebp -80103571: 89 e5 mov %esp,%ebp -80103573: 83 ec 18 sub $0x18,%esp - int do_commit = 0; -80103576: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - - acquire(&log.lock); -8010357d: 83 ec 0c sub $0xc,%esp -80103580: 68 40 23 11 80 push $0x80112340 -80103585: e8 f1 19 00 00 call 80104f7b -8010358a: 83 c4 10 add $0x10,%esp - log.outstanding -= 1; -8010358d: a1 7c 23 11 80 mov 0x8011237c,%eax -80103592: 83 e8 01 sub $0x1,%eax -80103595: a3 7c 23 11 80 mov %eax,0x8011237c - if(log.committing) -8010359a: a1 80 23 11 80 mov 0x80112380,%eax -8010359f: 85 c0 test %eax,%eax -801035a1: 74 0d je 801035b0 - panic("log.committing"); -801035a3: 83 ec 0c sub $0xc,%esp -801035a6: 68 fc 86 10 80 push $0x801086fc -801035ab: e8 ac cf ff ff call 8010055c - if(log.outstanding == 0){ -801035b0: a1 7c 23 11 80 mov 0x8011237c,%eax -801035b5: 85 c0 test %eax,%eax -801035b7: 75 13 jne 801035cc - do_commit = 1; -801035b9: c7 45 f4 01 00 00 00 movl $0x1,-0xc(%ebp) - log.committing = 1; -801035c0: c7 05 80 23 11 80 01 movl $0x1,0x80112380 -801035c7: 00 00 00 -801035ca: eb 10 jmp 801035dc - } else { - // begin_op() may be waiting for log space. - wakeup(&log); -801035cc: 83 ec 0c sub $0xc,%esp -801035cf: 68 40 23 11 80 push $0x80112340 -801035d4: e8 9b 17 00 00 call 80104d74 -801035d9: 83 c4 10 add $0x10,%esp - } - release(&log.lock); -801035dc: 83 ec 0c sub $0xc,%esp -801035df: 68 40 23 11 80 push $0x80112340 -801035e4: e8 f8 19 00 00 call 80104fe1 -801035e9: 83 c4 10 add $0x10,%esp - - if(do_commit){ -801035ec: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -801035f0: 74 3f je 80103631 - // call commit w/o holding locks, since not allowed - // to sleep with locks. - commit(); -801035f2: e8 f3 00 00 00 call 801036ea - acquire(&log.lock); -801035f7: 83 ec 0c sub $0xc,%esp -801035fa: 68 40 23 11 80 push $0x80112340 -801035ff: e8 77 19 00 00 call 80104f7b -80103604: 83 c4 10 add $0x10,%esp - log.committing = 0; -80103607: c7 05 80 23 11 80 00 movl $0x0,0x80112380 -8010360e: 00 00 00 - wakeup(&log); -80103611: 83 ec 0c sub $0xc,%esp -80103614: 68 40 23 11 80 push $0x80112340 -80103619: e8 56 17 00 00 call 80104d74 -8010361e: 83 c4 10 add $0x10,%esp - release(&log.lock); -80103621: 83 ec 0c sub $0xc,%esp -80103624: 68 40 23 11 80 push $0x80112340 -80103629: e8 b3 19 00 00 call 80104fe1 -8010362e: 83 c4 10 add $0x10,%esp - } -} -80103631: c9 leave -80103632: c3 ret - -80103633 : - -// Copy modified blocks from cache to log. -static void -write_log(void) -{ -80103633: 55 push %ebp -80103634: 89 e5 mov %esp,%ebp -80103636: 83 ec 18 sub $0x18,%esp - int tail; - - for (tail = 0; tail < log.lh.n; tail++) { -80103639: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) -80103640: e9 95 00 00 00 jmp 801036da - struct buf *to = bread(log.dev, log.start+tail+1); // log block -80103645: 8b 15 74 23 11 80 mov 0x80112374,%edx -8010364b: 8b 45 f4 mov -0xc(%ebp),%eax -8010364e: 01 d0 add %edx,%eax -80103650: 83 c0 01 add $0x1,%eax -80103653: 89 c2 mov %eax,%edx -80103655: a1 84 23 11 80 mov 0x80112384,%eax -8010365a: 83 ec 08 sub $0x8,%esp -8010365d: 52 push %edx -8010365e: 50 push %eax -8010365f: e8 50 cb ff ff call 801001b4 -80103664: 83 c4 10 add $0x10,%esp -80103667: 89 45 f0 mov %eax,-0x10(%ebp) - struct buf *from = bread(log.dev, log.lh.block[tail]); // cache block -8010366a: 8b 45 f4 mov -0xc(%ebp),%eax -8010366d: 83 c0 10 add $0x10,%eax -80103670: 8b 04 85 4c 23 11 80 mov -0x7feedcb4(,%eax,4),%eax -80103677: 89 c2 mov %eax,%edx -80103679: a1 84 23 11 80 mov 0x80112384,%eax -8010367e: 83 ec 08 sub $0x8,%esp -80103681: 52 push %edx -80103682: 50 push %eax -80103683: e8 2c cb ff ff call 801001b4 -80103688: 83 c4 10 add $0x10,%esp -8010368b: 89 45 ec mov %eax,-0x14(%ebp) - memmove(to->data, from->data, BSIZE); -8010368e: 8b 45 ec mov -0x14(%ebp),%eax -80103691: 8d 50 18 lea 0x18(%eax),%edx -80103694: 8b 45 f0 mov -0x10(%ebp),%eax -80103697: 83 c0 18 add $0x18,%eax -8010369a: 83 ec 04 sub $0x4,%esp -8010369d: 68 00 02 00 00 push $0x200 -801036a2: 52 push %edx -801036a3: 50 push %eax -801036a4: e8 ed 1b 00 00 call 80105296 -801036a9: 83 c4 10 add $0x10,%esp - bwrite(to); // write the log -801036ac: 83 ec 0c sub $0xc,%esp -801036af: ff 75 f0 pushl -0x10(%ebp) -801036b2: e8 36 cb ff ff call 801001ed -801036b7: 83 c4 10 add $0x10,%esp - brelse(from); -801036ba: 83 ec 0c sub $0xc,%esp -801036bd: ff 75 ec pushl -0x14(%ebp) -801036c0: e8 66 cb ff ff call 8010022b -801036c5: 83 c4 10 add $0x10,%esp - brelse(to); -801036c8: 83 ec 0c sub $0xc,%esp -801036cb: ff 75 f0 pushl -0x10(%ebp) -801036ce: e8 58 cb ff ff call 8010022b -801036d3: 83 c4 10 add $0x10,%esp -static void -write_log(void) -{ - int tail; - - for (tail = 0; tail < log.lh.n; tail++) { -801036d6: 83 45 f4 01 addl $0x1,-0xc(%ebp) -801036da: a1 88 23 11 80 mov 0x80112388,%eax -801036df: 3b 45 f4 cmp -0xc(%ebp),%eax -801036e2: 0f 8f 5d ff ff ff jg 80103645 - memmove(to->data, from->data, BSIZE); - bwrite(to); // write the log - brelse(from); - brelse(to); - } -} -801036e8: c9 leave -801036e9: c3 ret - -801036ea : - -static void -commit() -{ -801036ea: 55 push %ebp -801036eb: 89 e5 mov %esp,%ebp -801036ed: 83 ec 08 sub $0x8,%esp - if (log.lh.n > 0) { -801036f0: a1 88 23 11 80 mov 0x80112388,%eax -801036f5: 85 c0 test %eax,%eax -801036f7: 7e 1e jle 80103717 - write_log(); // Write modified blocks from cache to log -801036f9: e8 35 ff ff ff call 80103633 - write_head(); // Write header to disk -- the real commit -801036fe: e8 3c fd ff ff call 8010343f - install_trans(); // Now install writes to home locations -80103703: e8 0d fc ff ff call 80103315 - log.lh.n = 0; -80103708: c7 05 88 23 11 80 00 movl $0x0,0x80112388 -8010370f: 00 00 00 - write_head(); // Erase the transaction from the log -80103712: e8 28 fd ff ff call 8010343f - } -} -80103717: c9 leave -80103718: c3 ret - -80103719 : -// modify bp->data[] -// log_write(bp) -// brelse(bp) -void -log_write(struct buf *b) -{ -80103719: 55 push %ebp -8010371a: 89 e5 mov %esp,%ebp -8010371c: 83 ec 18 sub $0x18,%esp - int i; - - if (log.lh.n >= LOGSIZE || log.lh.n >= log.size - 1) -8010371f: a1 88 23 11 80 mov 0x80112388,%eax -80103724: 83 f8 1d cmp $0x1d,%eax -80103727: 7f 12 jg 8010373b -80103729: a1 88 23 11 80 mov 0x80112388,%eax -8010372e: 8b 15 78 23 11 80 mov 0x80112378,%edx -80103734: 83 ea 01 sub $0x1,%edx -80103737: 39 d0 cmp %edx,%eax -80103739: 7c 0d jl 80103748 - panic("too big a transaction"); -8010373b: 83 ec 0c sub $0xc,%esp -8010373e: 68 0b 87 10 80 push $0x8010870b -80103743: e8 14 ce ff ff call 8010055c - if (log.outstanding < 1) -80103748: a1 7c 23 11 80 mov 0x8011237c,%eax -8010374d: 85 c0 test %eax,%eax -8010374f: 7f 0d jg 8010375e - panic("log_write outside of trans"); -80103751: 83 ec 0c sub $0xc,%esp -80103754: 68 21 87 10 80 push $0x80108721 -80103759: e8 fe cd ff ff call 8010055c - - acquire(&log.lock); -8010375e: 83 ec 0c sub $0xc,%esp -80103761: 68 40 23 11 80 push $0x80112340 -80103766: e8 10 18 00 00 call 80104f7b -8010376b: 83 c4 10 add $0x10,%esp - for (i = 0; i < log.lh.n; i++) { -8010376e: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) -80103775: eb 1f jmp 80103796 - if (log.lh.block[i] == b->blockno) // log absorbtion -80103777: 8b 45 f4 mov -0xc(%ebp),%eax -8010377a: 83 c0 10 add $0x10,%eax -8010377d: 8b 04 85 4c 23 11 80 mov -0x7feedcb4(,%eax,4),%eax -80103784: 89 c2 mov %eax,%edx -80103786: 8b 45 08 mov 0x8(%ebp),%eax -80103789: 8b 40 08 mov 0x8(%eax),%eax -8010378c: 39 c2 cmp %eax,%edx -8010378e: 75 02 jne 80103792 - break; -80103790: eb 0e jmp 801037a0 - panic("too big a transaction"); - if (log.outstanding < 1) - panic("log_write outside of trans"); - - acquire(&log.lock); - for (i = 0; i < log.lh.n; i++) { -80103792: 83 45 f4 01 addl $0x1,-0xc(%ebp) -80103796: a1 88 23 11 80 mov 0x80112388,%eax -8010379b: 3b 45 f4 cmp -0xc(%ebp),%eax -8010379e: 7f d7 jg 80103777 - if (log.lh.block[i] == b->blockno) // log absorbtion - break; - } - log.lh.block[i] = b->blockno; -801037a0: 8b 45 08 mov 0x8(%ebp),%eax -801037a3: 8b 40 08 mov 0x8(%eax),%eax -801037a6: 89 c2 mov %eax,%edx -801037a8: 8b 45 f4 mov -0xc(%ebp),%eax -801037ab: 83 c0 10 add $0x10,%eax -801037ae: 89 14 85 4c 23 11 80 mov %edx,-0x7feedcb4(,%eax,4) - if (i == log.lh.n) -801037b5: a1 88 23 11 80 mov 0x80112388,%eax -801037ba: 3b 45 f4 cmp -0xc(%ebp),%eax -801037bd: 75 0d jne 801037cc - log.lh.n++; -801037bf: a1 88 23 11 80 mov 0x80112388,%eax -801037c4: 83 c0 01 add $0x1,%eax -801037c7: a3 88 23 11 80 mov %eax,0x80112388 - b->flags |= B_DIRTY; // prevent eviction -801037cc: 8b 45 08 mov 0x8(%ebp),%eax -801037cf: 8b 00 mov (%eax),%eax -801037d1: 83 c8 04 or $0x4,%eax -801037d4: 89 c2 mov %eax,%edx -801037d6: 8b 45 08 mov 0x8(%ebp),%eax -801037d9: 89 10 mov %edx,(%eax) - release(&log.lock); -801037db: 83 ec 0c sub $0xc,%esp -801037de: 68 40 23 11 80 push $0x80112340 -801037e3: e8 f9 17 00 00 call 80104fe1 -801037e8: 83 c4 10 add $0x10,%esp -} -801037eb: c9 leave -801037ec: c3 ret - -801037ed : -801037ed: 55 push %ebp -801037ee: 89 e5 mov %esp,%ebp -801037f0: 8b 45 08 mov 0x8(%ebp),%eax -801037f3: 05 00 00 00 80 add $0x80000000,%eax -801037f8: 5d pop %ebp -801037f9: c3 ret - -801037fa : -static inline void *p2v(uint a) { return (void *) ((a) + KERNBASE); } -801037fa: 55 push %ebp -801037fb: 89 e5 mov %esp,%ebp -801037fd: 8b 45 08 mov 0x8(%ebp),%eax -80103800: 05 00 00 00 80 add $0x80000000,%eax -80103805: 5d pop %ebp -80103806: c3 ret - -80103807 : - asm volatile("sti"); -} - -static inline uint -xchg(volatile uint *addr, uint newval) -{ -80103807: 55 push %ebp -80103808: 89 e5 mov %esp,%ebp -8010380a: 83 ec 10 sub $0x10,%esp - uint result; - - // The + in "+m" denotes a read-modify-write operand. - asm volatile("lock; xchgl %0, %1" : -8010380d: 8b 55 08 mov 0x8(%ebp),%edx -80103810: 8b 45 0c mov 0xc(%ebp),%eax -80103813: 8b 4d 08 mov 0x8(%ebp),%ecx -80103816: f0 87 02 lock xchg %eax,(%edx) -80103819: 89 45 fc mov %eax,-0x4(%ebp) - "+m" (*addr), "=a" (result) : - "1" (newval) : - "cc"); - return result; -8010381c: 8b 45 fc mov -0x4(%ebp),%eax -} -8010381f: c9 leave -80103820: c3 ret - -80103821
: -// Bootstrap processor starts running C code here. -// Allocate a real stack and switch to it, first -// doing some setup required for memory allocator to work. -int -main(void) -{ -80103821: 8d 4c 24 04 lea 0x4(%esp),%ecx -80103825: 83 e4 f0 and $0xfffffff0,%esp -80103828: ff 71 fc pushl -0x4(%ecx) -8010382b: 55 push %ebp -8010382c: 89 e5 mov %esp,%ebp -8010382e: 51 push %ecx -8010382f: 83 ec 04 sub $0x4,%esp - kinit1(end, P2V(4*1024*1024)); // phys page allocator -80103832: 83 ec 08 sub $0x8,%esp -80103835: 68 00 00 40 80 push $0x80400000 -8010383a: 68 5c 52 11 80 push $0x8011525c -8010383f: e8 92 f2 ff ff call 80102ad6 -80103844: 83 c4 10 add $0x10,%esp - kvmalloc(); // kernel page table -80103847: e8 d2 44 00 00 call 80107d1e - mpinit(); // collect info about this machine -8010384c: e8 40 04 00 00 call 80103c91 - lapicinit(); -80103851: e8 f8 f5 ff ff call 80102e4e - seginit(); // set up segments -80103856: e8 6b 3e 00 00 call 801076c6 - cprintf("\ncpu%d: starting xv6\n\n", cpu->id); -8010385b: 65 a1 00 00 00 00 mov %gs:0x0,%eax -80103861: 0f b6 00 movzbl (%eax),%eax -80103864: 0f b6 c0 movzbl %al,%eax -80103867: 83 ec 08 sub $0x8,%esp -8010386a: 50 push %eax -8010386b: 68 3c 87 10 80 push $0x8010873c -80103870: e8 4a cb ff ff call 801003bf -80103875: 83 c4 10 add $0x10,%esp - picinit(); // interrupt controller -80103878: e8 65 06 00 00 call 80103ee2 - ioapicinit(); // another interrupt controller -8010387d: e8 4c f1 ff ff call 801029ce - consoleinit(); // I/O devices & their interrupts -80103882: e8 51 d2 ff ff call 80100ad8 - uartinit(); // serial port -80103887: e8 9d 31 00 00 call 80106a29 - pinit(); // process table -8010388c: e8 50 0b 00 00 call 801043e1 - tvinit(); // trap vectors -80103891: e8 62 2d 00 00 call 801065f8 - binit(); // buffer cache -80103896: e8 99 c7 ff ff call 80100034 - fileinit(); // file table -8010389b: e8 93 d6 ff ff call 80100f33 - ideinit(); // disk -801038a0: e8 35 ed ff ff call 801025da - if(!ismp) -801038a5: a1 44 24 11 80 mov 0x80112444,%eax -801038aa: 85 c0 test %eax,%eax -801038ac: 75 05 jne 801038b3 - timerinit(); // uniprocessor timer -801038ae: e8 a4 2c 00 00 call 80106557 - startothers(); // start other processors -801038b3: e8 7f 00 00 00 call 80103937 - kinit2(P2V(4*1024*1024), P2V(PHYSTOP)); // must come after startothers() -801038b8: 83 ec 08 sub $0x8,%esp -801038bb: 68 00 00 00 8e push $0x8e000000 -801038c0: 68 00 00 40 80 push $0x80400000 -801038c5: e8 44 f2 ff ff call 80102b0e -801038ca: 83 c4 10 add $0x10,%esp - userinit(); // first user process -801038cd: e8 31 0c 00 00 call 80104503 - // Finish setting up this processor in mpmain. - mpmain(); -801038d2: e8 1a 00 00 00 call 801038f1 - -801038d7 : -} - -// Other CPUs jump here from entryother.S. -static void -mpenter(void) -{ -801038d7: 55 push %ebp -801038d8: 89 e5 mov %esp,%ebp -801038da: 83 ec 08 sub $0x8,%esp - switchkvm(); -801038dd: e8 53 44 00 00 call 80107d35 - seginit(); -801038e2: e8 df 3d 00 00 call 801076c6 - lapicinit(); -801038e7: e8 62 f5 ff ff call 80102e4e - mpmain(); -801038ec: e8 00 00 00 00 call 801038f1 - -801038f1 : -} - -// Common CPU setup code. -static void -mpmain(void) -{ -801038f1: 55 push %ebp -801038f2: 89 e5 mov %esp,%ebp -801038f4: 83 ec 08 sub $0x8,%esp - cprintf("cpu%d: starting\n", cpu->id); -801038f7: 65 a1 00 00 00 00 mov %gs:0x0,%eax -801038fd: 0f b6 00 movzbl (%eax),%eax -80103900: 0f b6 c0 movzbl %al,%eax -80103903: 83 ec 08 sub $0x8,%esp -80103906: 50 push %eax -80103907: 68 53 87 10 80 push $0x80108753 -8010390c: e8 ae ca ff ff call 801003bf -80103911: 83 c4 10 add $0x10,%esp - idtinit(); // load idt register -80103914: e8 54 2e 00 00 call 8010676d - xchg(&cpu->started, 1); // tell startothers() we're up -80103919: 65 a1 00 00 00 00 mov %gs:0x0,%eax -8010391f: 05 a8 00 00 00 add $0xa8,%eax -80103924: 83 ec 08 sub $0x8,%esp -80103927: 6a 01 push $0x1 -80103929: 50 push %eax -8010392a: e8 d8 fe ff ff call 80103807 -8010392f: 83 c4 10 add $0x10,%esp - scheduler(); // start running processes -80103932: e8 76 11 00 00 call 80104aad - -80103937 : -pde_t entrypgdir[]; // For entry.S - -// Start the non-boot (AP) processors. -static void -startothers(void) -{ -80103937: 55 push %ebp -80103938: 89 e5 mov %esp,%ebp -8010393a: 53 push %ebx -8010393b: 83 ec 14 sub $0x14,%esp - char *stack; - - // Write entry code to unused memory at 0x7000. - // The linker has placed the image of entryother.S in - // _binary_entryother_start. - code = p2v(0x7000); -8010393e: 68 00 70 00 00 push $0x7000 -80103943: e8 b2 fe ff ff call 801037fa -80103948: 83 c4 04 add $0x4,%esp -8010394b: 89 45 f0 mov %eax,-0x10(%ebp) - memmove(code, _binary_entryother_start, (uint)_binary_entryother_size); -8010394e: b8 8a 00 00 00 mov $0x8a,%eax -80103953: 83 ec 04 sub $0x4,%esp -80103956: 50 push %eax -80103957: 68 2c b5 10 80 push $0x8010b52c -8010395c: ff 75 f0 pushl -0x10(%ebp) -8010395f: e8 32 19 00 00 call 80105296 -80103964: 83 c4 10 add $0x10,%esp - - for(c = cpus; c < cpus+ncpu; c++){ -80103967: c7 45 f4 80 24 11 80 movl $0x80112480,-0xc(%ebp) -8010396e: e9 8f 00 00 00 jmp 80103a02 - if(c == cpus+cpunum()) // We've started already. -80103973: e8 f2 f5 ff ff call 80102f6a -80103978: 69 c0 bc 00 00 00 imul $0xbc,%eax,%eax -8010397e: 05 80 24 11 80 add $0x80112480,%eax -80103983: 3b 45 f4 cmp -0xc(%ebp),%eax -80103986: 75 02 jne 8010398a - continue; -80103988: eb 71 jmp 801039fb - - // Tell entryother.S what stack to use, where to enter, and what - // pgdir to use. We cannot use kpgdir yet, because the AP processor - // is running in low memory, so we use entrypgdir for the APs too. - stack = kalloc(); -8010398a: e8 7a f2 ff ff call 80102c09 -8010398f: 89 45 ec mov %eax,-0x14(%ebp) - *(void**)(code-4) = stack + KSTACKSIZE; -80103992: 8b 45 f0 mov -0x10(%ebp),%eax -80103995: 83 e8 04 sub $0x4,%eax -80103998: 8b 55 ec mov -0x14(%ebp),%edx -8010399b: 81 c2 00 10 00 00 add $0x1000,%edx -801039a1: 89 10 mov %edx,(%eax) - *(void**)(code-8) = mpenter; -801039a3: 8b 45 f0 mov -0x10(%ebp),%eax -801039a6: 83 e8 08 sub $0x8,%eax -801039a9: c7 00 d7 38 10 80 movl $0x801038d7,(%eax) - *(int**)(code-12) = (void *) v2p(entrypgdir); -801039af: 8b 45 f0 mov -0x10(%ebp),%eax -801039b2: 8d 58 f4 lea -0xc(%eax),%ebx -801039b5: 83 ec 0c sub $0xc,%esp -801039b8: 68 00 a0 10 80 push $0x8010a000 -801039bd: e8 2b fe ff ff call 801037ed -801039c2: 83 c4 10 add $0x10,%esp -801039c5: 89 03 mov %eax,(%ebx) - - lapicstartap(c->id, v2p(code)); -801039c7: 83 ec 0c sub $0xc,%esp -801039ca: ff 75 f0 pushl -0x10(%ebp) -801039cd: e8 1b fe ff ff call 801037ed -801039d2: 83 c4 10 add $0x10,%esp -801039d5: 89 c2 mov %eax,%edx -801039d7: 8b 45 f4 mov -0xc(%ebp),%eax -801039da: 0f b6 00 movzbl (%eax),%eax -801039dd: 0f b6 c0 movzbl %al,%eax -801039e0: 83 ec 08 sub $0x8,%esp -801039e3: 52 push %edx -801039e4: 50 push %eax -801039e5: e8 f8 f5 ff ff call 80102fe2 -801039ea: 83 c4 10 add $0x10,%esp - - // wait for cpu to finish mpmain() - while(c->started == 0) -801039ed: 90 nop -801039ee: 8b 45 f4 mov -0xc(%ebp),%eax -801039f1: 8b 80 a8 00 00 00 mov 0xa8(%eax),%eax -801039f7: 85 c0 test %eax,%eax -801039f9: 74 f3 je 801039ee - // The linker has placed the image of entryother.S in - // _binary_entryother_start. - code = p2v(0x7000); - memmove(code, _binary_entryother_start, (uint)_binary_entryother_size); - - for(c = cpus; c < cpus+ncpu; c++){ -801039fb: 81 45 f4 bc 00 00 00 addl $0xbc,-0xc(%ebp) -80103a02: a1 60 2a 11 80 mov 0x80112a60,%eax -80103a07: 69 c0 bc 00 00 00 imul $0xbc,%eax,%eax -80103a0d: 05 80 24 11 80 add $0x80112480,%eax -80103a12: 3b 45 f4 cmp -0xc(%ebp),%eax -80103a15: 0f 87 58 ff ff ff ja 80103973 - - // wait for cpu to finish mpmain() - while(c->started == 0) - ; - } -} -80103a1b: 8b 5d fc mov -0x4(%ebp),%ebx -80103a1e: c9 leave -80103a1f: c3 ret - -80103a20 : -80103a20: 55 push %ebp -80103a21: 89 e5 mov %esp,%ebp -80103a23: 8b 45 08 mov 0x8(%ebp),%eax -80103a26: 05 00 00 00 80 add $0x80000000,%eax -80103a2b: 5d pop %ebp -80103a2c: c3 ret - -80103a2d : -// Routines to let C code use special x86 instructions. - -static inline uchar -inb(ushort port) -{ -80103a2d: 55 push %ebp -80103a2e: 89 e5 mov %esp,%ebp -80103a30: 83 ec 14 sub $0x14,%esp -80103a33: 8b 45 08 mov 0x8(%ebp),%eax -80103a36: 66 89 45 ec mov %ax,-0x14(%ebp) - uchar data; - - asm volatile("in %1,%0" : "=a" (data) : "d" (port)); -80103a3a: 0f b7 45 ec movzwl -0x14(%ebp),%eax -80103a3e: 89 c2 mov %eax,%edx -80103a40: ec in (%dx),%al -80103a41: 88 45 ff mov %al,-0x1(%ebp) - return data; -80103a44: 0f b6 45 ff movzbl -0x1(%ebp),%eax -} -80103a48: c9 leave -80103a49: c3 ret - -80103a4a : - "memory", "cc"); -} - -static inline void -outb(ushort port, uchar data) -{ -80103a4a: 55 push %ebp -80103a4b: 89 e5 mov %esp,%ebp -80103a4d: 83 ec 08 sub $0x8,%esp -80103a50: 8b 55 08 mov 0x8(%ebp),%edx -80103a53: 8b 45 0c mov 0xc(%ebp),%eax -80103a56: 66 89 55 fc mov %dx,-0x4(%ebp) -80103a5a: 88 45 f8 mov %al,-0x8(%ebp) - asm volatile("out %0,%1" : : "a" (data), "d" (port)); -80103a5d: 0f b6 45 f8 movzbl -0x8(%ebp),%eax -80103a61: 0f b7 55 fc movzwl -0x4(%ebp),%edx -80103a65: ee out %al,(%dx) -} -80103a66: c9 leave -80103a67: c3 ret - -80103a68 : -int ncpu; -uchar ioapicid; - -int -mpbcpu(void) -{ -80103a68: 55 push %ebp -80103a69: 89 e5 mov %esp,%ebp - return bcpu-cpus; -80103a6b: a1 64 b6 10 80 mov 0x8010b664,%eax -80103a70: 89 c2 mov %eax,%edx -80103a72: b8 80 24 11 80 mov $0x80112480,%eax -80103a77: 29 c2 sub %eax,%edx -80103a79: 89 d0 mov %edx,%eax -80103a7b: c1 f8 02 sar $0x2,%eax -80103a7e: 69 c0 cf 46 7d 67 imul $0x677d46cf,%eax,%eax -} -80103a84: 5d pop %ebp -80103a85: c3 ret - -80103a86 : - -static uchar -sum(uchar *addr, int len) -{ -80103a86: 55 push %ebp -80103a87: 89 e5 mov %esp,%ebp -80103a89: 83 ec 10 sub $0x10,%esp - int i, sum; - - sum = 0; -80103a8c: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp) - for(i=0; i - sum += addr[i]; -80103a9c: 8b 55 fc mov -0x4(%ebp),%edx -80103a9f: 8b 45 08 mov 0x8(%ebp),%eax -80103aa2: 01 d0 add %edx,%eax -80103aa4: 0f b6 00 movzbl (%eax),%eax -80103aa7: 0f b6 c0 movzbl %al,%eax -80103aaa: 01 45 f8 add %eax,-0x8(%ebp) -sum(uchar *addr, int len) -{ - int i, sum; - - sum = 0; - for(i=0; i - sum += addr[i]; - return sum; -80103ab9: 8b 45 f8 mov -0x8(%ebp),%eax -} -80103abc: c9 leave -80103abd: c3 ret - -80103abe : - -// Look for an MP structure in the len bytes at addr. -static struct mp* -mpsearch1(uint a, int len) -{ -80103abe: 55 push %ebp -80103abf: 89 e5 mov %esp,%ebp -80103ac1: 83 ec 18 sub $0x18,%esp - uchar *e, *p, *addr; - - addr = p2v(a); -80103ac4: ff 75 08 pushl 0x8(%ebp) -80103ac7: e8 54 ff ff ff call 80103a20 -80103acc: 83 c4 04 add $0x4,%esp -80103acf: 89 45 f0 mov %eax,-0x10(%ebp) - e = addr+len; -80103ad2: 8b 55 0c mov 0xc(%ebp),%edx -80103ad5: 8b 45 f0 mov -0x10(%ebp),%eax -80103ad8: 01 d0 add %edx,%eax -80103ada: 89 45 ec mov %eax,-0x14(%ebp) - for(p = addr; p < e; p += sizeof(struct mp)) -80103add: 8b 45 f0 mov -0x10(%ebp),%eax -80103ae0: 89 45 f4 mov %eax,-0xc(%ebp) -80103ae3: eb 36 jmp 80103b1b - if(memcmp(p, "_MP_", 4) == 0 && sum(p, sizeof(struct mp)) == 0) -80103ae5: 83 ec 04 sub $0x4,%esp -80103ae8: 6a 04 push $0x4 -80103aea: 68 64 87 10 80 push $0x80108764 -80103aef: ff 75 f4 pushl -0xc(%ebp) -80103af2: e8 47 17 00 00 call 8010523e -80103af7: 83 c4 10 add $0x10,%esp -80103afa: 85 c0 test %eax,%eax -80103afc: 75 19 jne 80103b17 -80103afe: 83 ec 08 sub $0x8,%esp -80103b01: 6a 10 push $0x10 -80103b03: ff 75 f4 pushl -0xc(%ebp) -80103b06: e8 7b ff ff ff call 80103a86 -80103b0b: 83 c4 10 add $0x10,%esp -80103b0e: 84 c0 test %al,%al -80103b10: 75 05 jne 80103b17 - return (struct mp*)p; -80103b12: 8b 45 f4 mov -0xc(%ebp),%eax -80103b15: eb 11 jmp 80103b28 -{ - uchar *e, *p, *addr; - - addr = p2v(a); - e = addr+len; - for(p = addr; p < e; p += sizeof(struct mp)) -80103b17: 83 45 f4 10 addl $0x10,-0xc(%ebp) -80103b1b: 8b 45 f4 mov -0xc(%ebp),%eax -80103b1e: 3b 45 ec cmp -0x14(%ebp),%eax -80103b21: 72 c2 jb 80103ae5 - if(memcmp(p, "_MP_", 4) == 0 && sum(p, sizeof(struct mp)) == 0) - return (struct mp*)p; - return 0; -80103b23: b8 00 00 00 00 mov $0x0,%eax -} -80103b28: c9 leave -80103b29: c3 ret - -80103b2a : -// 1) in the first KB of the EBDA; -// 2) in the last KB of system base memory; -// 3) in the BIOS ROM between 0xE0000 and 0xFFFFF. -static struct mp* -mpsearch(void) -{ -80103b2a: 55 push %ebp -80103b2b: 89 e5 mov %esp,%ebp -80103b2d: 83 ec 18 sub $0x18,%esp - uchar *bda; - uint p; - struct mp *mp; - - bda = (uchar *) P2V(0x400); -80103b30: c7 45 f4 00 04 00 80 movl $0x80000400,-0xc(%ebp) - if((p = ((bda[0x0F]<<8)| bda[0x0E]) << 4)){ -80103b37: 8b 45 f4 mov -0xc(%ebp),%eax -80103b3a: 83 c0 0f add $0xf,%eax -80103b3d: 0f b6 00 movzbl (%eax),%eax -80103b40: 0f b6 c0 movzbl %al,%eax -80103b43: c1 e0 08 shl $0x8,%eax -80103b46: 89 c2 mov %eax,%edx -80103b48: 8b 45 f4 mov -0xc(%ebp),%eax -80103b4b: 83 c0 0e add $0xe,%eax -80103b4e: 0f b6 00 movzbl (%eax),%eax -80103b51: 0f b6 c0 movzbl %al,%eax -80103b54: 09 d0 or %edx,%eax -80103b56: c1 e0 04 shl $0x4,%eax -80103b59: 89 45 f0 mov %eax,-0x10(%ebp) -80103b5c: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) -80103b60: 74 21 je 80103b83 - if((mp = mpsearch1(p, 1024))) -80103b62: 83 ec 08 sub $0x8,%esp -80103b65: 68 00 04 00 00 push $0x400 -80103b6a: ff 75 f0 pushl -0x10(%ebp) -80103b6d: e8 4c ff ff ff call 80103abe -80103b72: 83 c4 10 add $0x10,%esp -80103b75: 89 45 ec mov %eax,-0x14(%ebp) -80103b78: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) -80103b7c: 74 51 je 80103bcf - return mp; -80103b7e: 8b 45 ec mov -0x14(%ebp),%eax -80103b81: eb 61 jmp 80103be4 - } else { - p = ((bda[0x14]<<8)|bda[0x13])*1024; -80103b83: 8b 45 f4 mov -0xc(%ebp),%eax -80103b86: 83 c0 14 add $0x14,%eax -80103b89: 0f b6 00 movzbl (%eax),%eax -80103b8c: 0f b6 c0 movzbl %al,%eax -80103b8f: c1 e0 08 shl $0x8,%eax -80103b92: 89 c2 mov %eax,%edx -80103b94: 8b 45 f4 mov -0xc(%ebp),%eax -80103b97: 83 c0 13 add $0x13,%eax -80103b9a: 0f b6 00 movzbl (%eax),%eax -80103b9d: 0f b6 c0 movzbl %al,%eax -80103ba0: 09 d0 or %edx,%eax -80103ba2: c1 e0 0a shl $0xa,%eax -80103ba5: 89 45 f0 mov %eax,-0x10(%ebp) - if((mp = mpsearch1(p-1024, 1024))) -80103ba8: 8b 45 f0 mov -0x10(%ebp),%eax -80103bab: 2d 00 04 00 00 sub $0x400,%eax -80103bb0: 83 ec 08 sub $0x8,%esp -80103bb3: 68 00 04 00 00 push $0x400 -80103bb8: 50 push %eax -80103bb9: e8 00 ff ff ff call 80103abe -80103bbe: 83 c4 10 add $0x10,%esp -80103bc1: 89 45 ec mov %eax,-0x14(%ebp) -80103bc4: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) -80103bc8: 74 05 je 80103bcf - return mp; -80103bca: 8b 45 ec mov -0x14(%ebp),%eax -80103bcd: eb 15 jmp 80103be4 - } - return mpsearch1(0xF0000, 0x10000); -80103bcf: 83 ec 08 sub $0x8,%esp -80103bd2: 68 00 00 01 00 push $0x10000 -80103bd7: 68 00 00 0f 00 push $0xf0000 -80103bdc: e8 dd fe ff ff call 80103abe -80103be1: 83 c4 10 add $0x10,%esp -} -80103be4: c9 leave -80103be5: c3 ret - -80103be6 : -// Check for correct signature, calculate the checksum and, -// if correct, check the version. -// To do: check extended table checksum. -static struct mpconf* -mpconfig(struct mp **pmp) -{ -80103be6: 55 push %ebp -80103be7: 89 e5 mov %esp,%ebp -80103be9: 83 ec 18 sub $0x18,%esp - struct mpconf *conf; - struct mp *mp; - - if((mp = mpsearch()) == 0 || mp->physaddr == 0) -80103bec: e8 39 ff ff ff call 80103b2a -80103bf1: 89 45 f4 mov %eax,-0xc(%ebp) -80103bf4: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -80103bf8: 74 0a je 80103c04 -80103bfa: 8b 45 f4 mov -0xc(%ebp),%eax -80103bfd: 8b 40 04 mov 0x4(%eax),%eax -80103c00: 85 c0 test %eax,%eax -80103c02: 75 0a jne 80103c0e - return 0; -80103c04: b8 00 00 00 00 mov $0x0,%eax -80103c09: e9 81 00 00 00 jmp 80103c8f - conf = (struct mpconf*) p2v((uint) mp->physaddr); -80103c0e: 8b 45 f4 mov -0xc(%ebp),%eax -80103c11: 8b 40 04 mov 0x4(%eax),%eax -80103c14: 83 ec 0c sub $0xc,%esp -80103c17: 50 push %eax -80103c18: e8 03 fe ff ff call 80103a20 -80103c1d: 83 c4 10 add $0x10,%esp -80103c20: 89 45 f0 mov %eax,-0x10(%ebp) - if(memcmp(conf, "PCMP", 4) != 0) -80103c23: 83 ec 04 sub $0x4,%esp -80103c26: 6a 04 push $0x4 -80103c28: 68 69 87 10 80 push $0x80108769 -80103c2d: ff 75 f0 pushl -0x10(%ebp) -80103c30: e8 09 16 00 00 call 8010523e -80103c35: 83 c4 10 add $0x10,%esp -80103c38: 85 c0 test %eax,%eax -80103c3a: 74 07 je 80103c43 - return 0; -80103c3c: b8 00 00 00 00 mov $0x0,%eax -80103c41: eb 4c jmp 80103c8f - if(conf->version != 1 && conf->version != 4) -80103c43: 8b 45 f0 mov -0x10(%ebp),%eax -80103c46: 0f b6 40 06 movzbl 0x6(%eax),%eax -80103c4a: 3c 01 cmp $0x1,%al -80103c4c: 74 12 je 80103c60 -80103c4e: 8b 45 f0 mov -0x10(%ebp),%eax -80103c51: 0f b6 40 06 movzbl 0x6(%eax),%eax -80103c55: 3c 04 cmp $0x4,%al -80103c57: 74 07 je 80103c60 - return 0; -80103c59: b8 00 00 00 00 mov $0x0,%eax -80103c5e: eb 2f jmp 80103c8f - if(sum((uchar*)conf, conf->length) != 0) -80103c60: 8b 45 f0 mov -0x10(%ebp),%eax -80103c63: 0f b7 40 04 movzwl 0x4(%eax),%eax -80103c67: 0f b7 c0 movzwl %ax,%eax -80103c6a: 83 ec 08 sub $0x8,%esp -80103c6d: 50 push %eax -80103c6e: ff 75 f0 pushl -0x10(%ebp) -80103c71: e8 10 fe ff ff call 80103a86 -80103c76: 83 c4 10 add $0x10,%esp -80103c79: 84 c0 test %al,%al -80103c7b: 74 07 je 80103c84 - return 0; -80103c7d: b8 00 00 00 00 mov $0x0,%eax -80103c82: eb 0b jmp 80103c8f - *pmp = mp; -80103c84: 8b 45 08 mov 0x8(%ebp),%eax -80103c87: 8b 55 f4 mov -0xc(%ebp),%edx -80103c8a: 89 10 mov %edx,(%eax) - return conf; -80103c8c: 8b 45 f0 mov -0x10(%ebp),%eax -} -80103c8f: c9 leave -80103c90: c3 ret - -80103c91 : - -void -mpinit(void) -{ -80103c91: 55 push %ebp -80103c92: 89 e5 mov %esp,%ebp -80103c94: 83 ec 28 sub $0x28,%esp - struct mp *mp; - struct mpconf *conf; - struct mpproc *proc; - struct mpioapic *ioapic; - - bcpu = &cpus[0]; -80103c97: c7 05 64 b6 10 80 80 movl $0x80112480,0x8010b664 -80103c9e: 24 11 80 - if((conf = mpconfig(&mp)) == 0) -80103ca1: 83 ec 0c sub $0xc,%esp -80103ca4: 8d 45 e0 lea -0x20(%ebp),%eax -80103ca7: 50 push %eax -80103ca8: e8 39 ff ff ff call 80103be6 -80103cad: 83 c4 10 add $0x10,%esp -80103cb0: 89 45 f0 mov %eax,-0x10(%ebp) -80103cb3: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) -80103cb7: 75 05 jne 80103cbe - return; -80103cb9: e9 94 01 00 00 jmp 80103e52 - ismp = 1; -80103cbe: c7 05 44 24 11 80 01 movl $0x1,0x80112444 -80103cc5: 00 00 00 - lapic = (uint*)conf->lapicaddr; -80103cc8: 8b 45 f0 mov -0x10(%ebp),%eax -80103ccb: 8b 40 24 mov 0x24(%eax),%eax -80103cce: a3 1c 23 11 80 mov %eax,0x8011231c - for(p=(uchar*)(conf+1), e=(uchar*)conf+conf->length; p - switch(*p){ -80103cf3: 8b 45 f4 mov -0xc(%ebp),%eax -80103cf6: 0f b6 00 movzbl (%eax),%eax -80103cf9: 0f b6 c0 movzbl %al,%eax -80103cfc: 83 f8 04 cmp $0x4,%eax -80103cff: 0f 87 bc 00 00 00 ja 80103dc1 -80103d05: 8b 04 85 ac 87 10 80 mov -0x7fef7854(,%eax,4),%eax -80103d0c: ff e0 jmp *%eax - case MPPROC: - proc = (struct mpproc*)p; -80103d0e: 8b 45 f4 mov -0xc(%ebp),%eax -80103d11: 89 45 e8 mov %eax,-0x18(%ebp) - if(ncpu != proc->apicid){ -80103d14: 8b 45 e8 mov -0x18(%ebp),%eax -80103d17: 0f b6 40 01 movzbl 0x1(%eax),%eax -80103d1b: 0f b6 d0 movzbl %al,%edx -80103d1e: a1 60 2a 11 80 mov 0x80112a60,%eax -80103d23: 39 c2 cmp %eax,%edx -80103d25: 74 2b je 80103d52 - cprintf("mpinit: ncpu=%d apicid=%d\n", ncpu, proc->apicid); -80103d27: 8b 45 e8 mov -0x18(%ebp),%eax -80103d2a: 0f b6 40 01 movzbl 0x1(%eax),%eax -80103d2e: 0f b6 d0 movzbl %al,%edx -80103d31: a1 60 2a 11 80 mov 0x80112a60,%eax -80103d36: 83 ec 04 sub $0x4,%esp -80103d39: 52 push %edx -80103d3a: 50 push %eax -80103d3b: 68 6e 87 10 80 push $0x8010876e -80103d40: e8 7a c6 ff ff call 801003bf -80103d45: 83 c4 10 add $0x10,%esp - ismp = 0; -80103d48: c7 05 44 24 11 80 00 movl $0x0,0x80112444 -80103d4f: 00 00 00 - } - if(proc->flags & MPBOOT) -80103d52: 8b 45 e8 mov -0x18(%ebp),%eax -80103d55: 0f b6 40 03 movzbl 0x3(%eax),%eax -80103d59: 0f b6 c0 movzbl %al,%eax -80103d5c: 83 e0 02 and $0x2,%eax -80103d5f: 85 c0 test %eax,%eax -80103d61: 74 15 je 80103d78 - bcpu = &cpus[ncpu]; -80103d63: a1 60 2a 11 80 mov 0x80112a60,%eax -80103d68: 69 c0 bc 00 00 00 imul $0xbc,%eax,%eax -80103d6e: 05 80 24 11 80 add $0x80112480,%eax -80103d73: a3 64 b6 10 80 mov %eax,0x8010b664 - cpus[ncpu].id = ncpu; -80103d78: a1 60 2a 11 80 mov 0x80112a60,%eax -80103d7d: 8b 15 60 2a 11 80 mov 0x80112a60,%edx -80103d83: 69 c0 bc 00 00 00 imul $0xbc,%eax,%eax -80103d89: 05 80 24 11 80 add $0x80112480,%eax -80103d8e: 88 10 mov %dl,(%eax) - ncpu++; -80103d90: a1 60 2a 11 80 mov 0x80112a60,%eax -80103d95: 83 c0 01 add $0x1,%eax -80103d98: a3 60 2a 11 80 mov %eax,0x80112a60 - p += sizeof(struct mpproc); -80103d9d: 83 45 f4 14 addl $0x14,-0xc(%ebp) - continue; -80103da1: eb 42 jmp 80103de5 - case MPIOAPIC: - ioapic = (struct mpioapic*)p; -80103da3: 8b 45 f4 mov -0xc(%ebp),%eax -80103da6: 89 45 e4 mov %eax,-0x1c(%ebp) - ioapicid = ioapic->apicno; -80103da9: 8b 45 e4 mov -0x1c(%ebp),%eax -80103dac: 0f b6 40 01 movzbl 0x1(%eax),%eax -80103db0: a2 40 24 11 80 mov %al,0x80112440 - p += sizeof(struct mpioapic); -80103db5: 83 45 f4 08 addl $0x8,-0xc(%ebp) - continue; -80103db9: eb 2a jmp 80103de5 - case MPBUS: - case MPIOINTR: - case MPLINTR: - p += 8; -80103dbb: 83 45 f4 08 addl $0x8,-0xc(%ebp) - continue; -80103dbf: eb 24 jmp 80103de5 - default: - cprintf("mpinit: unknown config type %x\n", *p); -80103dc1: 8b 45 f4 mov -0xc(%ebp),%eax -80103dc4: 0f b6 00 movzbl (%eax),%eax -80103dc7: 0f b6 c0 movzbl %al,%eax -80103dca: 83 ec 08 sub $0x8,%esp -80103dcd: 50 push %eax -80103dce: 68 8c 87 10 80 push $0x8010878c -80103dd3: e8 e7 c5 ff ff call 801003bf -80103dd8: 83 c4 10 add $0x10,%esp - ismp = 0; -80103ddb: c7 05 44 24 11 80 00 movl $0x0,0x80112444 -80103de2: 00 00 00 - bcpu = &cpus[0]; - if((conf = mpconfig(&mp)) == 0) - return; - ismp = 1; - lapic = (uint*)conf->lapicaddr; - for(p=(uchar*)(conf+1), e=(uchar*)conf+conf->length; p - default: - cprintf("mpinit: unknown config type %x\n", *p); - ismp = 0; - } - } - if(!ismp){ -80103df1: a1 44 24 11 80 mov 0x80112444,%eax -80103df6: 85 c0 test %eax,%eax -80103df8: 75 1d jne 80103e17 - // Didn't like what we found; fall back to no MP. - ncpu = 1; -80103dfa: c7 05 60 2a 11 80 01 movl $0x1,0x80112a60 -80103e01: 00 00 00 - lapic = 0; -80103e04: c7 05 1c 23 11 80 00 movl $0x0,0x8011231c -80103e0b: 00 00 00 - ioapicid = 0; -80103e0e: c6 05 40 24 11 80 00 movb $0x0,0x80112440 - return; -80103e15: eb 3b jmp 80103e52 - } - - if(mp->imcrp){ -80103e17: 8b 45 e0 mov -0x20(%ebp),%eax -80103e1a: 0f b6 40 0c movzbl 0xc(%eax),%eax -80103e1e: 84 c0 test %al,%al -80103e20: 74 30 je 80103e52 - // Bochs doesn't support IMCR, so this doesn't run on Bochs. - // But it would on real hardware. - outb(0x22, 0x70); // Select IMCR -80103e22: 83 ec 08 sub $0x8,%esp -80103e25: 6a 70 push $0x70 -80103e27: 6a 22 push $0x22 -80103e29: e8 1c fc ff ff call 80103a4a -80103e2e: 83 c4 10 add $0x10,%esp - outb(0x23, inb(0x23) | 1); // Mask external interrupts. -80103e31: 83 ec 0c sub $0xc,%esp -80103e34: 6a 23 push $0x23 -80103e36: e8 f2 fb ff ff call 80103a2d -80103e3b: 83 c4 10 add $0x10,%esp -80103e3e: 83 c8 01 or $0x1,%eax -80103e41: 0f b6 c0 movzbl %al,%eax -80103e44: 83 ec 08 sub $0x8,%esp -80103e47: 50 push %eax -80103e48: 6a 23 push $0x23 -80103e4a: e8 fb fb ff ff call 80103a4a -80103e4f: 83 c4 10 add $0x10,%esp - } -} -80103e52: c9 leave -80103e53: c3 ret - -80103e54 : - "memory", "cc"); -} - -static inline void -outb(ushort port, uchar data) -{ -80103e54: 55 push %ebp -80103e55: 89 e5 mov %esp,%ebp -80103e57: 83 ec 08 sub $0x8,%esp -80103e5a: 8b 55 08 mov 0x8(%ebp),%edx -80103e5d: 8b 45 0c mov 0xc(%ebp),%eax -80103e60: 66 89 55 fc mov %dx,-0x4(%ebp) -80103e64: 88 45 f8 mov %al,-0x8(%ebp) - asm volatile("out %0,%1" : : "a" (data), "d" (port)); -80103e67: 0f b6 45 f8 movzbl -0x8(%ebp),%eax -80103e6b: 0f b7 55 fc movzwl -0x4(%ebp),%edx -80103e6f: ee out %al,(%dx) -} -80103e70: c9 leave -80103e71: c3 ret - -80103e72 : -// Initial IRQ mask has interrupt 2 enabled (for slave 8259A). -static ushort irqmask = 0xFFFF & ~(1< -80103e98: 83 c4 08 add $0x8,%esp - outb(IO_PIC2+1, mask >> 8); -80103e9b: 0f b7 45 fc movzwl -0x4(%ebp),%eax -80103e9f: 66 c1 e8 08 shr $0x8,%ax -80103ea3: 0f b6 c0 movzbl %al,%eax -80103ea6: 50 push %eax -80103ea7: 68 a1 00 00 00 push $0xa1 -80103eac: e8 a3 ff ff ff call 80103e54 -80103eb1: 83 c4 08 add $0x8,%esp -} -80103eb4: c9 leave -80103eb5: c3 ret - -80103eb6 : - -void -picenable(int irq) -{ -80103eb6: 55 push %ebp -80103eb7: 89 e5 mov %esp,%ebp - picsetmask(irqmask & ~(1< -80103edd: 83 c4 04 add $0x4,%esp -} -80103ee0: c9 leave -80103ee1: c3 ret - -80103ee2 : - -// Initialize the 8259A interrupt controllers. -void -picinit(void) -{ -80103ee2: 55 push %ebp -80103ee3: 89 e5 mov %esp,%ebp - // mask all interrupts - outb(IO_PIC1+1, 0xFF); -80103ee5: 68 ff 00 00 00 push $0xff -80103eea: 6a 21 push $0x21 -80103eec: e8 63 ff ff ff call 80103e54 -80103ef1: 83 c4 08 add $0x8,%esp - outb(IO_PIC2+1, 0xFF); -80103ef4: 68 ff 00 00 00 push $0xff -80103ef9: 68 a1 00 00 00 push $0xa1 -80103efe: e8 51 ff ff ff call 80103e54 -80103f03: 83 c4 08 add $0x8,%esp - - // ICW1: 0001g0hi - // g: 0 = edge triggering, 1 = level triggering - // h: 0 = cascaded PICs, 1 = master only - // i: 0 = no ICW4, 1 = ICW4 required - outb(IO_PIC1, 0x11); -80103f06: 6a 11 push $0x11 -80103f08: 6a 20 push $0x20 -80103f0a: e8 45 ff ff ff call 80103e54 -80103f0f: 83 c4 08 add $0x8,%esp - - // ICW2: Vector offset - outb(IO_PIC1+1, T_IRQ0); -80103f12: 6a 20 push $0x20 -80103f14: 6a 21 push $0x21 -80103f16: e8 39 ff ff ff call 80103e54 -80103f1b: 83 c4 08 add $0x8,%esp - - // ICW3: (master PIC) bit mask of IR lines connected to slaves - // (slave PIC) 3-bit # of slave's connection to master - outb(IO_PIC1+1, 1< -80103f27: 83 c4 08 add $0x8,%esp - // m: 0 = slave PIC, 1 = master PIC - // (ignored when b is 0, as the master/slave role - // can be hardwired). - // a: 1 = Automatic EOI mode - // p: 0 = MCS-80/85 mode, 1 = intel x86 mode - outb(IO_PIC1+1, 0x3); -80103f2a: 6a 03 push $0x3 -80103f2c: 6a 21 push $0x21 -80103f2e: e8 21 ff ff ff call 80103e54 -80103f33: 83 c4 08 add $0x8,%esp - - // Set up slave (8259A-2) - outb(IO_PIC2, 0x11); // ICW1 -80103f36: 6a 11 push $0x11 -80103f38: 68 a0 00 00 00 push $0xa0 -80103f3d: e8 12 ff ff ff call 80103e54 -80103f42: 83 c4 08 add $0x8,%esp - outb(IO_PIC2+1, T_IRQ0 + 8); // ICW2 -80103f45: 6a 28 push $0x28 -80103f47: 68 a1 00 00 00 push $0xa1 -80103f4c: e8 03 ff ff ff call 80103e54 -80103f51: 83 c4 08 add $0x8,%esp - outb(IO_PIC2+1, IRQ_SLAVE); // ICW3 -80103f54: 6a 02 push $0x2 -80103f56: 68 a1 00 00 00 push $0xa1 -80103f5b: e8 f4 fe ff ff call 80103e54 -80103f60: 83 c4 08 add $0x8,%esp - // NB Automatic EOI mode doesn't tend to work on the slave. - // Linux source code says it's "to be investigated". - outb(IO_PIC2+1, 0x3); // ICW4 -80103f63: 6a 03 push $0x3 -80103f65: 68 a1 00 00 00 push $0xa1 -80103f6a: e8 e5 fe ff ff call 80103e54 -80103f6f: 83 c4 08 add $0x8,%esp - - // OCW3: 0ef01prs - // ef: 0x = NOP, 10 = clear specific mask, 11 = set specific mask - // p: 0 = no polling, 1 = polling mode - // rs: 0x = NOP, 10 = read IRR, 11 = read ISR - outb(IO_PIC1, 0x68); // clear specific mask -80103f72: 6a 68 push $0x68 -80103f74: 6a 20 push $0x20 -80103f76: e8 d9 fe ff ff call 80103e54 -80103f7b: 83 c4 08 add $0x8,%esp - outb(IO_PIC1, 0x0a); // read IRR by default -80103f7e: 6a 0a push $0xa -80103f80: 6a 20 push $0x20 -80103f82: e8 cd fe ff ff call 80103e54 -80103f87: 83 c4 08 add $0x8,%esp - - outb(IO_PIC2, 0x68); // OCW3 -80103f8a: 6a 68 push $0x68 -80103f8c: 68 a0 00 00 00 push $0xa0 -80103f91: e8 be fe ff ff call 80103e54 -80103f96: 83 c4 08 add $0x8,%esp - outb(IO_PIC2, 0x0a); // OCW3 -80103f99: 6a 0a push $0xa -80103f9b: 68 a0 00 00 00 push $0xa0 -80103fa0: e8 af fe ff ff call 80103e54 -80103fa5: 83 c4 08 add $0x8,%esp - - if(irqmask != 0xFFFF) -80103fa8: 0f b7 05 00 b0 10 80 movzwl 0x8010b000,%eax -80103faf: 66 83 f8 ff cmp $0xffff,%ax -80103fb3: 74 13 je 80103fc8 - picsetmask(irqmask); -80103fb5: 0f b7 05 00 b0 10 80 movzwl 0x8010b000,%eax -80103fbc: 0f b7 c0 movzwl %ax,%eax -80103fbf: 50 push %eax -80103fc0: e8 ad fe ff ff call 80103e72 -80103fc5: 83 c4 04 add $0x4,%esp -} -80103fc8: c9 leave -80103fc9: c3 ret - -80103fca : - int writeopen; // write fd is still open -}; - -int -pipealloc(struct file **f0, struct file **f1) -{ -80103fca: 55 push %ebp -80103fcb: 89 e5 mov %esp,%ebp -80103fcd: 83 ec 18 sub $0x18,%esp - struct pipe *p; - - p = 0; -80103fd0: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - *f0 = *f1 = 0; -80103fd7: 8b 45 0c mov 0xc(%ebp),%eax -80103fda: c7 00 00 00 00 00 movl $0x0,(%eax) -80103fe0: 8b 45 0c mov 0xc(%ebp),%eax -80103fe3: 8b 10 mov (%eax),%edx -80103fe5: 8b 45 08 mov 0x8(%ebp),%eax -80103fe8: 89 10 mov %edx,(%eax) - if((*f0 = filealloc()) == 0 || (*f1 = filealloc()) == 0) -80103fea: e8 61 cf ff ff call 80100f50 -80103fef: 89 c2 mov %eax,%edx -80103ff1: 8b 45 08 mov 0x8(%ebp),%eax -80103ff4: 89 10 mov %edx,(%eax) -80103ff6: 8b 45 08 mov 0x8(%ebp),%eax -80103ff9: 8b 00 mov (%eax),%eax -80103ffb: 85 c0 test %eax,%eax -80103ffd: 0f 84 cb 00 00 00 je 801040ce -80104003: e8 48 cf ff ff call 80100f50 -80104008: 89 c2 mov %eax,%edx -8010400a: 8b 45 0c mov 0xc(%ebp),%eax -8010400d: 89 10 mov %edx,(%eax) -8010400f: 8b 45 0c mov 0xc(%ebp),%eax -80104012: 8b 00 mov (%eax),%eax -80104014: 85 c0 test %eax,%eax -80104016: 0f 84 b2 00 00 00 je 801040ce - goto bad; - if((p = (struct pipe*)kalloc()) == 0) -8010401c: e8 e8 eb ff ff call 80102c09 -80104021: 89 45 f4 mov %eax,-0xc(%ebp) -80104024: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -80104028: 75 05 jne 8010402f - goto bad; -8010402a: e9 9f 00 00 00 jmp 801040ce - p->readopen = 1; -8010402f: 8b 45 f4 mov -0xc(%ebp),%eax -80104032: c7 80 3c 02 00 00 01 movl $0x1,0x23c(%eax) -80104039: 00 00 00 - p->writeopen = 1; -8010403c: 8b 45 f4 mov -0xc(%ebp),%eax -8010403f: c7 80 40 02 00 00 01 movl $0x1,0x240(%eax) -80104046: 00 00 00 - p->nwrite = 0; -80104049: 8b 45 f4 mov -0xc(%ebp),%eax -8010404c: c7 80 38 02 00 00 00 movl $0x0,0x238(%eax) -80104053: 00 00 00 - p->nread = 0; -80104056: 8b 45 f4 mov -0xc(%ebp),%eax -80104059: c7 80 34 02 00 00 00 movl $0x0,0x234(%eax) -80104060: 00 00 00 - initlock(&p->lock, "pipe"); -80104063: 8b 45 f4 mov -0xc(%ebp),%eax -80104066: 83 ec 08 sub $0x8,%esp -80104069: 68 c0 87 10 80 push $0x801087c0 -8010406e: 50 push %eax -8010406f: e8 e6 0e 00 00 call 80104f5a -80104074: 83 c4 10 add $0x10,%esp - (*f0)->type = FD_PIPE; -80104077: 8b 45 08 mov 0x8(%ebp),%eax -8010407a: 8b 00 mov (%eax),%eax -8010407c: c7 00 01 00 00 00 movl $0x1,(%eax) - (*f0)->readable = 1; -80104082: 8b 45 08 mov 0x8(%ebp),%eax -80104085: 8b 00 mov (%eax),%eax -80104087: c6 40 08 01 movb $0x1,0x8(%eax) - (*f0)->writable = 0; -8010408b: 8b 45 08 mov 0x8(%ebp),%eax -8010408e: 8b 00 mov (%eax),%eax -80104090: c6 40 09 00 movb $0x0,0x9(%eax) - (*f0)->pipe = p; -80104094: 8b 45 08 mov 0x8(%ebp),%eax -80104097: 8b 00 mov (%eax),%eax -80104099: 8b 55 f4 mov -0xc(%ebp),%edx -8010409c: 89 50 0c mov %edx,0xc(%eax) - (*f1)->type = FD_PIPE; -8010409f: 8b 45 0c mov 0xc(%ebp),%eax -801040a2: 8b 00 mov (%eax),%eax -801040a4: c7 00 01 00 00 00 movl $0x1,(%eax) - (*f1)->readable = 0; -801040aa: 8b 45 0c mov 0xc(%ebp),%eax -801040ad: 8b 00 mov (%eax),%eax -801040af: c6 40 08 00 movb $0x0,0x8(%eax) - (*f1)->writable = 1; -801040b3: 8b 45 0c mov 0xc(%ebp),%eax -801040b6: 8b 00 mov (%eax),%eax -801040b8: c6 40 09 01 movb $0x1,0x9(%eax) - (*f1)->pipe = p; -801040bc: 8b 45 0c mov 0xc(%ebp),%eax -801040bf: 8b 00 mov (%eax),%eax -801040c1: 8b 55 f4 mov -0xc(%ebp),%edx -801040c4: 89 50 0c mov %edx,0xc(%eax) - return 0; -801040c7: b8 00 00 00 00 mov $0x0,%eax -801040cc: eb 4d jmp 8010411b - -//PAGEBREAK: 20 - bad: - if(p) -801040ce: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -801040d2: 74 0e je 801040e2 - kfree((char*)p); -801040d4: 83 ec 0c sub $0xc,%esp -801040d7: ff 75 f4 pushl -0xc(%ebp) -801040da: e8 8e ea ff ff call 80102b6d -801040df: 83 c4 10 add $0x10,%esp - if(*f0) -801040e2: 8b 45 08 mov 0x8(%ebp),%eax -801040e5: 8b 00 mov (%eax),%eax -801040e7: 85 c0 test %eax,%eax -801040e9: 74 11 je 801040fc - fileclose(*f0); -801040eb: 8b 45 08 mov 0x8(%ebp),%eax -801040ee: 8b 00 mov (%eax),%eax -801040f0: 83 ec 0c sub $0xc,%esp -801040f3: 50 push %eax -801040f4: e8 14 cf ff ff call 8010100d -801040f9: 83 c4 10 add $0x10,%esp - if(*f1) -801040fc: 8b 45 0c mov 0xc(%ebp),%eax -801040ff: 8b 00 mov (%eax),%eax -80104101: 85 c0 test %eax,%eax -80104103: 74 11 je 80104116 - fileclose(*f1); -80104105: 8b 45 0c mov 0xc(%ebp),%eax -80104108: 8b 00 mov (%eax),%eax -8010410a: 83 ec 0c sub $0xc,%esp -8010410d: 50 push %eax -8010410e: e8 fa ce ff ff call 8010100d -80104113: 83 c4 10 add $0x10,%esp - return -1; -80104116: b8 ff ff ff ff mov $0xffffffff,%eax -} -8010411b: c9 leave -8010411c: c3 ret - -8010411d : - -void -pipeclose(struct pipe *p, int writable) -{ -8010411d: 55 push %ebp -8010411e: 89 e5 mov %esp,%ebp -80104120: 83 ec 08 sub $0x8,%esp - acquire(&p->lock); -80104123: 8b 45 08 mov 0x8(%ebp),%eax -80104126: 83 ec 0c sub $0xc,%esp -80104129: 50 push %eax -8010412a: e8 4c 0e 00 00 call 80104f7b -8010412f: 83 c4 10 add $0x10,%esp - if(writable){ -80104132: 83 7d 0c 00 cmpl $0x0,0xc(%ebp) -80104136: 74 23 je 8010415b - p->writeopen = 0; -80104138: 8b 45 08 mov 0x8(%ebp),%eax -8010413b: c7 80 40 02 00 00 00 movl $0x0,0x240(%eax) -80104142: 00 00 00 - wakeup(&p->nread); -80104145: 8b 45 08 mov 0x8(%ebp),%eax -80104148: 05 34 02 00 00 add $0x234,%eax -8010414d: 83 ec 0c sub $0xc,%esp -80104150: 50 push %eax -80104151: e8 1e 0c 00 00 call 80104d74 -80104156: 83 c4 10 add $0x10,%esp -80104159: eb 21 jmp 8010417c - } else { - p->readopen = 0; -8010415b: 8b 45 08 mov 0x8(%ebp),%eax -8010415e: c7 80 3c 02 00 00 00 movl $0x0,0x23c(%eax) -80104165: 00 00 00 - wakeup(&p->nwrite); -80104168: 8b 45 08 mov 0x8(%ebp),%eax -8010416b: 05 38 02 00 00 add $0x238,%eax -80104170: 83 ec 0c sub $0xc,%esp -80104173: 50 push %eax -80104174: e8 fb 0b 00 00 call 80104d74 -80104179: 83 c4 10 add $0x10,%esp - } - if(p->readopen == 0 && p->writeopen == 0){ -8010417c: 8b 45 08 mov 0x8(%ebp),%eax -8010417f: 8b 80 3c 02 00 00 mov 0x23c(%eax),%eax -80104185: 85 c0 test %eax,%eax -80104187: 75 2c jne 801041b5 -80104189: 8b 45 08 mov 0x8(%ebp),%eax -8010418c: 8b 80 40 02 00 00 mov 0x240(%eax),%eax -80104192: 85 c0 test %eax,%eax -80104194: 75 1f jne 801041b5 - release(&p->lock); -80104196: 8b 45 08 mov 0x8(%ebp),%eax -80104199: 83 ec 0c sub $0xc,%esp -8010419c: 50 push %eax -8010419d: e8 3f 0e 00 00 call 80104fe1 -801041a2: 83 c4 10 add $0x10,%esp - kfree((char*)p); -801041a5: 83 ec 0c sub $0xc,%esp -801041a8: ff 75 08 pushl 0x8(%ebp) -801041ab: e8 bd e9 ff ff call 80102b6d -801041b0: 83 c4 10 add $0x10,%esp -801041b3: eb 0f jmp 801041c4 - } else - release(&p->lock); -801041b5: 8b 45 08 mov 0x8(%ebp),%eax -801041b8: 83 ec 0c sub $0xc,%esp -801041bb: 50 push %eax -801041bc: e8 20 0e 00 00 call 80104fe1 -801041c1: 83 c4 10 add $0x10,%esp -} -801041c4: c9 leave -801041c5: c3 ret - -801041c6 : - -//PAGEBREAK: 40 -int -pipewrite(struct pipe *p, char *addr, int n) -{ -801041c6: 55 push %ebp -801041c7: 89 e5 mov %esp,%ebp -801041c9: 83 ec 18 sub $0x18,%esp - int i; - - acquire(&p->lock); -801041cc: 8b 45 08 mov 0x8(%ebp),%eax -801041cf: 83 ec 0c sub $0xc,%esp -801041d2: 50 push %eax -801041d3: e8 a3 0d 00 00 call 80104f7b -801041d8: 83 c4 10 add $0x10,%esp - for(i = 0; i < n; i++){ -801041db: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) -801041e2: e9 af 00 00 00 jmp 80104296 - while(p->nwrite == p->nread + PIPESIZE){ //DOC: pipewrite-full -801041e7: eb 60 jmp 80104249 - if(p->readopen == 0 || proc->killed){ -801041e9: 8b 45 08 mov 0x8(%ebp),%eax -801041ec: 8b 80 3c 02 00 00 mov 0x23c(%eax),%eax -801041f2: 85 c0 test %eax,%eax -801041f4: 74 0d je 80104203 -801041f6: 65 a1 04 00 00 00 mov %gs:0x4,%eax -801041fc: 8b 40 24 mov 0x24(%eax),%eax -801041ff: 85 c0 test %eax,%eax -80104201: 74 19 je 8010421c - release(&p->lock); -80104203: 8b 45 08 mov 0x8(%ebp),%eax -80104206: 83 ec 0c sub $0xc,%esp -80104209: 50 push %eax -8010420a: e8 d2 0d 00 00 call 80104fe1 -8010420f: 83 c4 10 add $0x10,%esp - return -1; -80104212: b8 ff ff ff ff mov $0xffffffff,%eax -80104217: e9 ac 00 00 00 jmp 801042c8 - } - wakeup(&p->nread); -8010421c: 8b 45 08 mov 0x8(%ebp),%eax -8010421f: 05 34 02 00 00 add $0x234,%eax -80104224: 83 ec 0c sub $0xc,%esp -80104227: 50 push %eax -80104228: e8 47 0b 00 00 call 80104d74 -8010422d: 83 c4 10 add $0x10,%esp - sleep(&p->nwrite, &p->lock); //DOC: pipewrite-sleep -80104230: 8b 45 08 mov 0x8(%ebp),%eax -80104233: 8b 55 08 mov 0x8(%ebp),%edx -80104236: 81 c2 38 02 00 00 add $0x238,%edx -8010423c: 83 ec 08 sub $0x8,%esp -8010423f: 50 push %eax -80104240: 52 push %edx -80104241: e8 45 0a 00 00 call 80104c8b -80104246: 83 c4 10 add $0x10,%esp -{ - int i; - - acquire(&p->lock); - for(i = 0; i < n; i++){ - while(p->nwrite == p->nread + PIPESIZE){ //DOC: pipewrite-full -80104249: 8b 45 08 mov 0x8(%ebp),%eax -8010424c: 8b 90 38 02 00 00 mov 0x238(%eax),%edx -80104252: 8b 45 08 mov 0x8(%ebp),%eax -80104255: 8b 80 34 02 00 00 mov 0x234(%eax),%eax -8010425b: 05 00 02 00 00 add $0x200,%eax -80104260: 39 c2 cmp %eax,%edx -80104262: 74 85 je 801041e9 - return -1; - } - wakeup(&p->nread); - sleep(&p->nwrite, &p->lock); //DOC: pipewrite-sleep - } - p->data[p->nwrite++ % PIPESIZE] = addr[i]; -80104264: 8b 45 08 mov 0x8(%ebp),%eax -80104267: 8b 80 38 02 00 00 mov 0x238(%eax),%eax -8010426d: 8d 48 01 lea 0x1(%eax),%ecx -80104270: 8b 55 08 mov 0x8(%ebp),%edx -80104273: 89 8a 38 02 00 00 mov %ecx,0x238(%edx) -80104279: 25 ff 01 00 00 and $0x1ff,%eax -8010427e: 89 c1 mov %eax,%ecx -80104280: 8b 55 f4 mov -0xc(%ebp),%edx -80104283: 8b 45 0c mov 0xc(%ebp),%eax -80104286: 01 d0 add %edx,%eax -80104288: 0f b6 10 movzbl (%eax),%edx -8010428b: 8b 45 08 mov 0x8(%ebp),%eax -8010428e: 88 54 08 34 mov %dl,0x34(%eax,%ecx,1) -pipewrite(struct pipe *p, char *addr, int n) -{ - int i; - - acquire(&p->lock); - for(i = 0; i < n; i++){ -80104292: 83 45 f4 01 addl $0x1,-0xc(%ebp) -80104296: 8b 45 f4 mov -0xc(%ebp),%eax -80104299: 3b 45 10 cmp 0x10(%ebp),%eax -8010429c: 0f 8c 45 ff ff ff jl 801041e7 - wakeup(&p->nread); - sleep(&p->nwrite, &p->lock); //DOC: pipewrite-sleep - } - p->data[p->nwrite++ % PIPESIZE] = addr[i]; - } - wakeup(&p->nread); //DOC: pipewrite-wakeup1 -801042a2: 8b 45 08 mov 0x8(%ebp),%eax -801042a5: 05 34 02 00 00 add $0x234,%eax -801042aa: 83 ec 0c sub $0xc,%esp -801042ad: 50 push %eax -801042ae: e8 c1 0a 00 00 call 80104d74 -801042b3: 83 c4 10 add $0x10,%esp - release(&p->lock); -801042b6: 8b 45 08 mov 0x8(%ebp),%eax -801042b9: 83 ec 0c sub $0xc,%esp -801042bc: 50 push %eax -801042bd: e8 1f 0d 00 00 call 80104fe1 -801042c2: 83 c4 10 add $0x10,%esp - return n; -801042c5: 8b 45 10 mov 0x10(%ebp),%eax -} -801042c8: c9 leave -801042c9: c3 ret - -801042ca : - -int -piperead(struct pipe *p, char *addr, int n) -{ -801042ca: 55 push %ebp -801042cb: 89 e5 mov %esp,%ebp -801042cd: 53 push %ebx -801042ce: 83 ec 14 sub $0x14,%esp - int i; - - acquire(&p->lock); -801042d1: 8b 45 08 mov 0x8(%ebp),%eax -801042d4: 83 ec 0c sub $0xc,%esp -801042d7: 50 push %eax -801042d8: e8 9e 0c 00 00 call 80104f7b -801042dd: 83 c4 10 add $0x10,%esp - while(p->nread == p->nwrite && p->writeopen){ //DOC: pipe-empty -801042e0: eb 3f jmp 80104321 - if(proc->killed){ -801042e2: 65 a1 04 00 00 00 mov %gs:0x4,%eax -801042e8: 8b 40 24 mov 0x24(%eax),%eax -801042eb: 85 c0 test %eax,%eax -801042ed: 74 19 je 80104308 - release(&p->lock); -801042ef: 8b 45 08 mov 0x8(%ebp),%eax -801042f2: 83 ec 0c sub $0xc,%esp -801042f5: 50 push %eax -801042f6: e8 e6 0c 00 00 call 80104fe1 -801042fb: 83 c4 10 add $0x10,%esp - return -1; -801042fe: b8 ff ff ff ff mov $0xffffffff,%eax -80104303: e9 be 00 00 00 jmp 801043c6 - } - sleep(&p->nread, &p->lock); //DOC: piperead-sleep -80104308: 8b 45 08 mov 0x8(%ebp),%eax -8010430b: 8b 55 08 mov 0x8(%ebp),%edx -8010430e: 81 c2 34 02 00 00 add $0x234,%edx -80104314: 83 ec 08 sub $0x8,%esp -80104317: 50 push %eax -80104318: 52 push %edx -80104319: e8 6d 09 00 00 call 80104c8b -8010431e: 83 c4 10 add $0x10,%esp -piperead(struct pipe *p, char *addr, int n) -{ - int i; - - acquire(&p->lock); - while(p->nread == p->nwrite && p->writeopen){ //DOC: pipe-empty -80104321: 8b 45 08 mov 0x8(%ebp),%eax -80104324: 8b 90 34 02 00 00 mov 0x234(%eax),%edx -8010432a: 8b 45 08 mov 0x8(%ebp),%eax -8010432d: 8b 80 38 02 00 00 mov 0x238(%eax),%eax -80104333: 39 c2 cmp %eax,%edx -80104335: 75 0d jne 80104344 -80104337: 8b 45 08 mov 0x8(%ebp),%eax -8010433a: 8b 80 40 02 00 00 mov 0x240(%eax),%eax -80104340: 85 c0 test %eax,%eax -80104342: 75 9e jne 801042e2 - release(&p->lock); - return -1; - } - sleep(&p->nread, &p->lock); //DOC: piperead-sleep - } - for(i = 0; i < n; i++){ //DOC: piperead-copy -80104344: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) -8010434b: eb 4b jmp 80104398 - if(p->nread == p->nwrite) -8010434d: 8b 45 08 mov 0x8(%ebp),%eax -80104350: 8b 90 34 02 00 00 mov 0x234(%eax),%edx -80104356: 8b 45 08 mov 0x8(%ebp),%eax -80104359: 8b 80 38 02 00 00 mov 0x238(%eax),%eax -8010435f: 39 c2 cmp %eax,%edx -80104361: 75 02 jne 80104365 - break; -80104363: eb 3b jmp 801043a0 - addr[i] = p->data[p->nread++ % PIPESIZE]; -80104365: 8b 55 f4 mov -0xc(%ebp),%edx -80104368: 8b 45 0c mov 0xc(%ebp),%eax -8010436b: 8d 1c 02 lea (%edx,%eax,1),%ebx -8010436e: 8b 45 08 mov 0x8(%ebp),%eax -80104371: 8b 80 34 02 00 00 mov 0x234(%eax),%eax -80104377: 8d 48 01 lea 0x1(%eax),%ecx -8010437a: 8b 55 08 mov 0x8(%ebp),%edx -8010437d: 89 8a 34 02 00 00 mov %ecx,0x234(%edx) -80104383: 25 ff 01 00 00 and $0x1ff,%eax -80104388: 89 c2 mov %eax,%edx -8010438a: 8b 45 08 mov 0x8(%ebp),%eax -8010438d: 0f b6 44 10 34 movzbl 0x34(%eax,%edx,1),%eax -80104392: 88 03 mov %al,(%ebx) - release(&p->lock); - return -1; - } - sleep(&p->nread, &p->lock); //DOC: piperead-sleep - } - for(i = 0; i < n; i++){ //DOC: piperead-copy -80104394: 83 45 f4 01 addl $0x1,-0xc(%ebp) -80104398: 8b 45 f4 mov -0xc(%ebp),%eax -8010439b: 3b 45 10 cmp 0x10(%ebp),%eax -8010439e: 7c ad jl 8010434d - if(p->nread == p->nwrite) - break; - addr[i] = p->data[p->nread++ % PIPESIZE]; - } - wakeup(&p->nwrite); //DOC: piperead-wakeup -801043a0: 8b 45 08 mov 0x8(%ebp),%eax -801043a3: 05 38 02 00 00 add $0x238,%eax -801043a8: 83 ec 0c sub $0xc,%esp -801043ab: 50 push %eax -801043ac: e8 c3 09 00 00 call 80104d74 -801043b1: 83 c4 10 add $0x10,%esp - release(&p->lock); -801043b4: 8b 45 08 mov 0x8(%ebp),%eax -801043b7: 83 ec 0c sub $0xc,%esp -801043ba: 50 push %eax -801043bb: e8 21 0c 00 00 call 80104fe1 -801043c0: 83 c4 10 add $0x10,%esp - return i; -801043c3: 8b 45 f4 mov -0xc(%ebp),%eax -} -801043c6: 8b 5d fc mov -0x4(%ebp),%ebx -801043c9: c9 leave -801043ca: c3 ret - -801043cb : - asm volatile("ltr %0" : : "r" (sel)); -} - -static inline uint -readeflags(void) -{ -801043cb: 55 push %ebp -801043cc: 89 e5 mov %esp,%ebp -801043ce: 83 ec 10 sub $0x10,%esp - uint eflags; - asm volatile("pushfl; popl %0" : "=r" (eflags)); -801043d1: 9c pushf -801043d2: 58 pop %eax -801043d3: 89 45 fc mov %eax,-0x4(%ebp) - return eflags; -801043d6: 8b 45 fc mov -0x4(%ebp),%eax -} -801043d9: c9 leave -801043da: c3 ret - -801043db : - asm volatile("cli"); -} - -static inline void -sti(void) -{ -801043db: 55 push %ebp -801043dc: 89 e5 mov %esp,%ebp - asm volatile("sti"); -801043de: fb sti -} -801043df: 5d pop %ebp -801043e0: c3 ret - -801043e1 : - -static void wakeup1(void *chan); - -void -pinit(void) -{ -801043e1: 55 push %ebp -801043e2: 89 e5 mov %esp,%ebp -801043e4: 83 ec 08 sub $0x8,%esp - initlock(&ptable.lock, "ptable"); -801043e7: 83 ec 08 sub $0x8,%esp -801043ea: 68 c5 87 10 80 push $0x801087c5 -801043ef: 68 80 2a 11 80 push $0x80112a80 -801043f4: e8 61 0b 00 00 call 80104f5a -801043f9: 83 c4 10 add $0x10,%esp -} -801043fc: c9 leave -801043fd: c3 ret - -801043fe : -// If found, change state to EMBRYO and initialize -// state required to run in the kernel. -// Otherwise return 0. -static struct proc* -allocproc(void) -{ -801043fe: 55 push %ebp -801043ff: 89 e5 mov %esp,%ebp -80104401: 83 ec 18 sub $0x18,%esp - struct proc *p; - char *sp; - - acquire(&ptable.lock); -80104404: 83 ec 0c sub $0xc,%esp -80104407: 68 80 2a 11 80 push $0x80112a80 -8010440c: e8 6a 0b 00 00 call 80104f7b -80104411: 83 c4 10 add $0x10,%esp - for(p = ptable.proc; p < &ptable.proc[NPROC]; p++) -80104414: c7 45 f4 b4 2a 11 80 movl $0x80112ab4,-0xc(%ebp) -8010441b: eb 56 jmp 80104473 - if(p->state == UNUSED) -8010441d: 8b 45 f4 mov -0xc(%ebp),%eax -80104420: 8b 40 0c mov 0xc(%eax),%eax -80104423: 85 c0 test %eax,%eax -80104425: 75 48 jne 8010446f - goto found; -80104427: 90 nop - release(&ptable.lock); - return 0; - -found: - p->state = EMBRYO; -80104428: 8b 45 f4 mov -0xc(%ebp),%eax -8010442b: c7 40 0c 01 00 00 00 movl $0x1,0xc(%eax) - p->pid = nextpid++; -80104432: a1 04 b0 10 80 mov 0x8010b004,%eax -80104437: 8d 50 01 lea 0x1(%eax),%edx -8010443a: 89 15 04 b0 10 80 mov %edx,0x8010b004 -80104440: 8b 55 f4 mov -0xc(%ebp),%edx -80104443: 89 42 10 mov %eax,0x10(%edx) - release(&ptable.lock); -80104446: 83 ec 0c sub $0xc,%esp -80104449: 68 80 2a 11 80 push $0x80112a80 -8010444e: e8 8e 0b 00 00 call 80104fe1 -80104453: 83 c4 10 add $0x10,%esp - - // Allocate kernel stack. - if((p->kstack = kalloc()) == 0){ -80104456: e8 ae e7 ff ff call 80102c09 -8010445b: 89 c2 mov %eax,%edx -8010445d: 8b 45 f4 mov -0xc(%ebp),%eax -80104460: 89 50 08 mov %edx,0x8(%eax) -80104463: 8b 45 f4 mov -0xc(%ebp),%eax -80104466: 8b 40 08 mov 0x8(%eax),%eax -80104469: 85 c0 test %eax,%eax -8010446b: 75 37 jne 801044a4 -8010446d: eb 24 jmp 80104493 -{ - struct proc *p; - char *sp; - - acquire(&ptable.lock); - for(p = ptable.proc; p < &ptable.proc[NPROC]; p++) -8010446f: 83 45 f4 7c addl $0x7c,-0xc(%ebp) -80104473: 81 7d f4 b4 49 11 80 cmpl $0x801149b4,-0xc(%ebp) -8010447a: 72 a1 jb 8010441d - if(p->state == UNUSED) - goto found; - release(&ptable.lock); -8010447c: 83 ec 0c sub $0xc,%esp -8010447f: 68 80 2a 11 80 push $0x80112a80 -80104484: e8 58 0b 00 00 call 80104fe1 -80104489: 83 c4 10 add $0x10,%esp - return 0; -8010448c: b8 00 00 00 00 mov $0x0,%eax -80104491: eb 6e jmp 80104501 - p->pid = nextpid++; - release(&ptable.lock); - - // Allocate kernel stack. - if((p->kstack = kalloc()) == 0){ - p->state = UNUSED; -80104493: 8b 45 f4 mov -0xc(%ebp),%eax -80104496: c7 40 0c 00 00 00 00 movl $0x0,0xc(%eax) - return 0; -8010449d: b8 00 00 00 00 mov $0x0,%eax -801044a2: eb 5d jmp 80104501 - } - sp = p->kstack + KSTACKSIZE; -801044a4: 8b 45 f4 mov -0xc(%ebp),%eax -801044a7: 8b 40 08 mov 0x8(%eax),%eax -801044aa: 05 00 10 00 00 add $0x1000,%eax -801044af: 89 45 f0 mov %eax,-0x10(%ebp) - - // Leave room for trap frame. - sp -= sizeof *p->tf; -801044b2: 83 6d f0 4c subl $0x4c,-0x10(%ebp) - p->tf = (struct trapframe*)sp; -801044b6: 8b 45 f4 mov -0xc(%ebp),%eax -801044b9: 8b 55 f0 mov -0x10(%ebp),%edx -801044bc: 89 50 18 mov %edx,0x18(%eax) - - // Set up new context to start executing at forkret, - // which returns to trapret. - sp -= 4; -801044bf: 83 6d f0 04 subl $0x4,-0x10(%ebp) - *(uint*)sp = (uint)trapret; -801044c3: ba b3 65 10 80 mov $0x801065b3,%edx -801044c8: 8b 45 f0 mov -0x10(%ebp),%eax -801044cb: 89 10 mov %edx,(%eax) - - sp -= sizeof *p->context; -801044cd: 83 6d f0 14 subl $0x14,-0x10(%ebp) - p->context = (struct context*)sp; -801044d1: 8b 45 f4 mov -0xc(%ebp),%eax -801044d4: 8b 55 f0 mov -0x10(%ebp),%edx -801044d7: 89 50 1c mov %edx,0x1c(%eax) - memset(p->context, 0, sizeof *p->context); -801044da: 8b 45 f4 mov -0xc(%ebp),%eax -801044dd: 8b 40 1c mov 0x1c(%eax),%eax -801044e0: 83 ec 04 sub $0x4,%esp -801044e3: 6a 14 push $0x14 -801044e5: 6a 00 push $0x0 -801044e7: 50 push %eax -801044e8: e8 ea 0c 00 00 call 801051d7 -801044ed: 83 c4 10 add $0x10,%esp - p->context->eip = (uint)forkret; -801044f0: 8b 45 f4 mov -0xc(%ebp),%eax -801044f3: 8b 40 1c mov 0x1c(%eax),%eax -801044f6: ba 46 4c 10 80 mov $0x80104c46,%edx -801044fb: 89 50 10 mov %edx,0x10(%eax) - - return p; -801044fe: 8b 45 f4 mov -0xc(%ebp),%eax -} -80104501: c9 leave -80104502: c3 ret - -80104503 : - -//PAGEBREAK: 32 -// Set up first user process. -void -userinit(void) -{ -80104503: 55 push %ebp -80104504: 89 e5 mov %esp,%ebp -80104506: 83 ec 18 sub $0x18,%esp - struct proc *p; - extern char _binary_initcode_start[], _binary_initcode_size[]; - - p = allocproc(); -80104509: e8 f0 fe ff ff call 801043fe -8010450e: 89 45 f4 mov %eax,-0xc(%ebp) - initproc = p; -80104511: 8b 45 f4 mov -0xc(%ebp),%eax -80104514: a3 68 b6 10 80 mov %eax,0x8010b668 - if((p->pgdir = setupkvm()) == 0) -80104519: e8 4e 37 00 00 call 80107c6c -8010451e: 89 c2 mov %eax,%edx -80104520: 8b 45 f4 mov -0xc(%ebp),%eax -80104523: 89 50 04 mov %edx,0x4(%eax) -80104526: 8b 45 f4 mov -0xc(%ebp),%eax -80104529: 8b 40 04 mov 0x4(%eax),%eax -8010452c: 85 c0 test %eax,%eax -8010452e: 75 0d jne 8010453d - panic("userinit: out of memory?"); -80104530: 83 ec 0c sub $0xc,%esp -80104533: 68 cc 87 10 80 push $0x801087cc -80104538: e8 1f c0 ff ff call 8010055c - inituvm(p->pgdir, _binary_initcode_start, (int)_binary_initcode_size); -8010453d: ba 2c 00 00 00 mov $0x2c,%edx -80104542: 8b 45 f4 mov -0xc(%ebp),%eax -80104545: 8b 40 04 mov 0x4(%eax),%eax -80104548: 83 ec 04 sub $0x4,%esp -8010454b: 52 push %edx -8010454c: 68 00 b5 10 80 push $0x8010b500 -80104551: 50 push %eax -80104552: e8 6c 39 00 00 call 80107ec3 -80104557: 83 c4 10 add $0x10,%esp - p->sz = PGSIZE; -8010455a: 8b 45 f4 mov -0xc(%ebp),%eax -8010455d: c7 00 00 10 00 00 movl $0x1000,(%eax) - memset(p->tf, 0, sizeof(*p->tf)); -80104563: 8b 45 f4 mov -0xc(%ebp),%eax -80104566: 8b 40 18 mov 0x18(%eax),%eax -80104569: 83 ec 04 sub $0x4,%esp -8010456c: 6a 4c push $0x4c -8010456e: 6a 00 push $0x0 -80104570: 50 push %eax -80104571: e8 61 0c 00 00 call 801051d7 -80104576: 83 c4 10 add $0x10,%esp - p->tf->cs = (SEG_UCODE << 3) | DPL_USER; -80104579: 8b 45 f4 mov -0xc(%ebp),%eax -8010457c: 8b 40 18 mov 0x18(%eax),%eax -8010457f: 66 c7 40 3c 23 00 movw $0x23,0x3c(%eax) - p->tf->ds = (SEG_UDATA << 3) | DPL_USER; -80104585: 8b 45 f4 mov -0xc(%ebp),%eax -80104588: 8b 40 18 mov 0x18(%eax),%eax -8010458b: 66 c7 40 2c 2b 00 movw $0x2b,0x2c(%eax) - p->tf->es = p->tf->ds; -80104591: 8b 45 f4 mov -0xc(%ebp),%eax -80104594: 8b 40 18 mov 0x18(%eax),%eax -80104597: 8b 55 f4 mov -0xc(%ebp),%edx -8010459a: 8b 52 18 mov 0x18(%edx),%edx -8010459d: 0f b7 52 2c movzwl 0x2c(%edx),%edx -801045a1: 66 89 50 28 mov %dx,0x28(%eax) - p->tf->ss = p->tf->ds; -801045a5: 8b 45 f4 mov -0xc(%ebp),%eax -801045a8: 8b 40 18 mov 0x18(%eax),%eax -801045ab: 8b 55 f4 mov -0xc(%ebp),%edx -801045ae: 8b 52 18 mov 0x18(%edx),%edx -801045b1: 0f b7 52 2c movzwl 0x2c(%edx),%edx -801045b5: 66 89 50 48 mov %dx,0x48(%eax) - p->tf->eflags = FL_IF; -801045b9: 8b 45 f4 mov -0xc(%ebp),%eax -801045bc: 8b 40 18 mov 0x18(%eax),%eax -801045bf: c7 40 40 00 02 00 00 movl $0x200,0x40(%eax) - p->tf->esp = PGSIZE; -801045c6: 8b 45 f4 mov -0xc(%ebp),%eax -801045c9: 8b 40 18 mov 0x18(%eax),%eax -801045cc: c7 40 44 00 10 00 00 movl $0x1000,0x44(%eax) - p->tf->eip = 0; // beginning of initcode.S -801045d3: 8b 45 f4 mov -0xc(%ebp),%eax -801045d6: 8b 40 18 mov 0x18(%eax),%eax -801045d9: c7 40 38 00 00 00 00 movl $0x0,0x38(%eax) - - safestrcpy(p->name, "initcode", sizeof(p->name)); -801045e0: 8b 45 f4 mov -0xc(%ebp),%eax -801045e3: 83 c0 6c add $0x6c,%eax -801045e6: 83 ec 04 sub $0x4,%esp -801045e9: 6a 10 push $0x10 -801045eb: 68 e5 87 10 80 push $0x801087e5 -801045f0: 50 push %eax -801045f1: e8 e6 0d 00 00 call 801053dc -801045f6: 83 c4 10 add $0x10,%esp - p->cwd = namei("/"); -801045f9: 83 ec 0c sub $0xc,%esp -801045fc: 68 ee 87 10 80 push $0x801087ee -80104601: e8 d3 de ff ff call 801024d9 -80104606: 83 c4 10 add $0x10,%esp -80104609: 89 c2 mov %eax,%edx -8010460b: 8b 45 f4 mov -0xc(%ebp),%eax -8010460e: 89 50 68 mov %edx,0x68(%eax) - - p->state = RUNNABLE; -80104611: 8b 45 f4 mov -0xc(%ebp),%eax -80104614: c7 40 0c 03 00 00 00 movl $0x3,0xc(%eax) -} -8010461b: c9 leave -8010461c: c3 ret - -8010461d : - -// Grow current process's memory by n bytes. -// Return 0 on success, -1 on failure. -int -growproc(int n) -{ -8010461d: 55 push %ebp -8010461e: 89 e5 mov %esp,%ebp -80104620: 83 ec 18 sub $0x18,%esp - uint sz; - - sz = proc->sz; -80104623: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80104629: 8b 00 mov (%eax),%eax -8010462b: 89 45 f4 mov %eax,-0xc(%ebp) - if(n > 0){ -8010462e: 83 7d 08 00 cmpl $0x0,0x8(%ebp) -80104632: 7e 31 jle 80104665 - if((sz = allocuvm(proc->pgdir, sz, sz + n)) == 0) -80104634: 8b 55 08 mov 0x8(%ebp),%edx -80104637: 8b 45 f4 mov -0xc(%ebp),%eax -8010463a: 01 c2 add %eax,%edx -8010463c: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80104642: 8b 40 04 mov 0x4(%eax),%eax -80104645: 83 ec 04 sub $0x4,%esp -80104648: 52 push %edx -80104649: ff 75 f4 pushl -0xc(%ebp) -8010464c: 50 push %eax -8010464d: e8 bd 39 00 00 call 8010800f -80104652: 83 c4 10 add $0x10,%esp -80104655: 89 45 f4 mov %eax,-0xc(%ebp) -80104658: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -8010465c: 75 3e jne 8010469c - return -1; -8010465e: b8 ff ff ff ff mov $0xffffffff,%eax -80104663: eb 59 jmp 801046be - } else if(n < 0){ -80104665: 83 7d 08 00 cmpl $0x0,0x8(%ebp) -80104669: 79 31 jns 8010469c - if((sz = deallocuvm(proc->pgdir, sz, sz + n)) == 0) -8010466b: 8b 55 08 mov 0x8(%ebp),%edx -8010466e: 8b 45 f4 mov -0xc(%ebp),%eax -80104671: 01 c2 add %eax,%edx -80104673: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80104679: 8b 40 04 mov 0x4(%eax),%eax -8010467c: 83 ec 04 sub $0x4,%esp -8010467f: 52 push %edx -80104680: ff 75 f4 pushl -0xc(%ebp) -80104683: 50 push %eax -80104684: e8 4f 3a 00 00 call 801080d8 -80104689: 83 c4 10 add $0x10,%esp -8010468c: 89 45 f4 mov %eax,-0xc(%ebp) -8010468f: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -80104693: 75 07 jne 8010469c - return -1; -80104695: b8 ff ff ff ff mov $0xffffffff,%eax -8010469a: eb 22 jmp 801046be - } - proc->sz = sz; -8010469c: 65 a1 04 00 00 00 mov %gs:0x4,%eax -801046a2: 8b 55 f4 mov -0xc(%ebp),%edx -801046a5: 89 10 mov %edx,(%eax) - switchuvm(proc); -801046a7: 65 a1 04 00 00 00 mov %gs:0x4,%eax -801046ad: 83 ec 0c sub $0xc,%esp -801046b0: 50 push %eax -801046b1: e8 9b 36 00 00 call 80107d51 -801046b6: 83 c4 10 add $0x10,%esp - return 0; -801046b9: b8 00 00 00 00 mov $0x0,%eax -} -801046be: c9 leave -801046bf: c3 ret - -801046c0 : -// Create a new process copying p as the parent. -// Sets up stack to return as if from system call. -// Caller must set state of returned proc to RUNNABLE. -int -fork(void) -{ -801046c0: 55 push %ebp -801046c1: 89 e5 mov %esp,%ebp -801046c3: 57 push %edi -801046c4: 56 push %esi -801046c5: 53 push %ebx -801046c6: 83 ec 1c sub $0x1c,%esp - int i, pid; - struct proc *np; - - // Allocate process. - if((np = allocproc()) == 0) -801046c9: e8 30 fd ff ff call 801043fe -801046ce: 89 45 e0 mov %eax,-0x20(%ebp) -801046d1: 83 7d e0 00 cmpl $0x0,-0x20(%ebp) -801046d5: 75 0a jne 801046e1 - return -1; -801046d7: b8 ff ff ff ff mov $0xffffffff,%eax -801046dc: e9 68 01 00 00 jmp 80104849 - - // Copy process state from p. - if((np->pgdir = copyuvm(proc->pgdir, proc->sz)) == 0){ -801046e1: 65 a1 04 00 00 00 mov %gs:0x4,%eax -801046e7: 8b 10 mov (%eax),%edx -801046e9: 65 a1 04 00 00 00 mov %gs:0x4,%eax -801046ef: 8b 40 04 mov 0x4(%eax),%eax -801046f2: 83 ec 08 sub $0x8,%esp -801046f5: 52 push %edx -801046f6: 50 push %eax -801046f7: e8 78 3b 00 00 call 80108274 -801046fc: 83 c4 10 add $0x10,%esp -801046ff: 89 c2 mov %eax,%edx -80104701: 8b 45 e0 mov -0x20(%ebp),%eax -80104704: 89 50 04 mov %edx,0x4(%eax) -80104707: 8b 45 e0 mov -0x20(%ebp),%eax -8010470a: 8b 40 04 mov 0x4(%eax),%eax -8010470d: 85 c0 test %eax,%eax -8010470f: 75 30 jne 80104741 - kfree(np->kstack); -80104711: 8b 45 e0 mov -0x20(%ebp),%eax -80104714: 8b 40 08 mov 0x8(%eax),%eax -80104717: 83 ec 0c sub $0xc,%esp -8010471a: 50 push %eax -8010471b: e8 4d e4 ff ff call 80102b6d -80104720: 83 c4 10 add $0x10,%esp - np->kstack = 0; -80104723: 8b 45 e0 mov -0x20(%ebp),%eax -80104726: c7 40 08 00 00 00 00 movl $0x0,0x8(%eax) - np->state = UNUSED; -8010472d: 8b 45 e0 mov -0x20(%ebp),%eax -80104730: c7 40 0c 00 00 00 00 movl $0x0,0xc(%eax) - return -1; -80104737: b8 ff ff ff ff mov $0xffffffff,%eax -8010473c: e9 08 01 00 00 jmp 80104849 - } - np->sz = proc->sz; -80104741: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80104747: 8b 10 mov (%eax),%edx -80104749: 8b 45 e0 mov -0x20(%ebp),%eax -8010474c: 89 10 mov %edx,(%eax) - np->parent = proc; -8010474e: 65 8b 15 04 00 00 00 mov %gs:0x4,%edx -80104755: 8b 45 e0 mov -0x20(%ebp),%eax -80104758: 89 50 14 mov %edx,0x14(%eax) - *np->tf = *proc->tf; -8010475b: 8b 45 e0 mov -0x20(%ebp),%eax -8010475e: 8b 50 18 mov 0x18(%eax),%edx -80104761: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80104767: 8b 40 18 mov 0x18(%eax),%eax -8010476a: 89 c3 mov %eax,%ebx -8010476c: b8 13 00 00 00 mov $0x13,%eax -80104771: 89 d7 mov %edx,%edi -80104773: 89 de mov %ebx,%esi -80104775: 89 c1 mov %eax,%ecx -80104777: f3 a5 rep movsl %ds:(%esi),%es:(%edi) - - // Clear %eax so that fork returns 0 in the child. - np->tf->eax = 0; -80104779: 8b 45 e0 mov -0x20(%ebp),%eax -8010477c: 8b 40 18 mov 0x18(%eax),%eax -8010477f: c7 40 1c 00 00 00 00 movl $0x0,0x1c(%eax) - - for(i = 0; i < NOFILE; i++) -80104786: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) -8010478d: eb 43 jmp 801047d2 - if(proc->ofile[i]) -8010478f: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80104795: 8b 55 e4 mov -0x1c(%ebp),%edx -80104798: 83 c2 08 add $0x8,%edx -8010479b: 8b 44 90 08 mov 0x8(%eax,%edx,4),%eax -8010479f: 85 c0 test %eax,%eax -801047a1: 74 2b je 801047ce - np->ofile[i] = filedup(proc->ofile[i]); -801047a3: 65 a1 04 00 00 00 mov %gs:0x4,%eax -801047a9: 8b 55 e4 mov -0x1c(%ebp),%edx -801047ac: 83 c2 08 add $0x8,%edx -801047af: 8b 44 90 08 mov 0x8(%eax,%edx,4),%eax -801047b3: 83 ec 0c sub $0xc,%esp -801047b6: 50 push %eax -801047b7: e8 00 c8 ff ff call 80100fbc -801047bc: 83 c4 10 add $0x10,%esp -801047bf: 89 c1 mov %eax,%ecx -801047c1: 8b 45 e0 mov -0x20(%ebp),%eax -801047c4: 8b 55 e4 mov -0x1c(%ebp),%edx -801047c7: 83 c2 08 add $0x8,%edx -801047ca: 89 4c 90 08 mov %ecx,0x8(%eax,%edx,4) - *np->tf = *proc->tf; - - // Clear %eax so that fork returns 0 in the child. - np->tf->eax = 0; - - for(i = 0; i < NOFILE; i++) -801047ce: 83 45 e4 01 addl $0x1,-0x1c(%ebp) -801047d2: 83 7d e4 0f cmpl $0xf,-0x1c(%ebp) -801047d6: 7e b7 jle 8010478f - if(proc->ofile[i]) - np->ofile[i] = filedup(proc->ofile[i]); - np->cwd = idup(proc->cwd); -801047d8: 65 a1 04 00 00 00 mov %gs:0x4,%eax -801047de: 8b 40 68 mov 0x68(%eax),%eax -801047e1: 83 ec 0c sub $0xc,%esp -801047e4: 50 push %eax -801047e5: e8 fa d0 ff ff call 801018e4 -801047ea: 83 c4 10 add $0x10,%esp -801047ed: 89 c2 mov %eax,%edx -801047ef: 8b 45 e0 mov -0x20(%ebp),%eax -801047f2: 89 50 68 mov %edx,0x68(%eax) - - safestrcpy(np->name, proc->name, sizeof(proc->name)); -801047f5: 65 a1 04 00 00 00 mov %gs:0x4,%eax -801047fb: 8d 50 6c lea 0x6c(%eax),%edx -801047fe: 8b 45 e0 mov -0x20(%ebp),%eax -80104801: 83 c0 6c add $0x6c,%eax -80104804: 83 ec 04 sub $0x4,%esp -80104807: 6a 10 push $0x10 -80104809: 52 push %edx -8010480a: 50 push %eax -8010480b: e8 cc 0b 00 00 call 801053dc -80104810: 83 c4 10 add $0x10,%esp - - pid = np->pid; -80104813: 8b 45 e0 mov -0x20(%ebp),%eax -80104816: 8b 40 10 mov 0x10(%eax),%eax -80104819: 89 45 dc mov %eax,-0x24(%ebp) - - // lock to force the compiler to emit the np->state write last. - acquire(&ptable.lock); -8010481c: 83 ec 0c sub $0xc,%esp -8010481f: 68 80 2a 11 80 push $0x80112a80 -80104824: e8 52 07 00 00 call 80104f7b -80104829: 83 c4 10 add $0x10,%esp - np->state = RUNNABLE; -8010482c: 8b 45 e0 mov -0x20(%ebp),%eax -8010482f: c7 40 0c 03 00 00 00 movl $0x3,0xc(%eax) - release(&ptable.lock); -80104836: 83 ec 0c sub $0xc,%esp -80104839: 68 80 2a 11 80 push $0x80112a80 -8010483e: e8 9e 07 00 00 call 80104fe1 -80104843: 83 c4 10 add $0x10,%esp - - return pid; -80104846: 8b 45 dc mov -0x24(%ebp),%eax -} -80104849: 8d 65 f4 lea -0xc(%ebp),%esp -8010484c: 5b pop %ebx -8010484d: 5e pop %esi -8010484e: 5f pop %edi -8010484f: 5d pop %ebp -80104850: c3 ret - -80104851 : -// Exit the current process. Does not return. -// An exited process remains in the zombie state -// until its parent calls wait() to find out it exited. -void -exit(void) -{ -80104851: 55 push %ebp -80104852: 89 e5 mov %esp,%ebp -80104854: 83 ec 18 sub $0x18,%esp - struct proc *p; - int fd; - - if(proc == initproc) -80104857: 65 8b 15 04 00 00 00 mov %gs:0x4,%edx -8010485e: a1 68 b6 10 80 mov 0x8010b668,%eax -80104863: 39 c2 cmp %eax,%edx -80104865: 75 0d jne 80104874 - panic("init exiting"); -80104867: 83 ec 0c sub $0xc,%esp -8010486a: 68 f0 87 10 80 push $0x801087f0 -8010486f: e8 e8 bc ff ff call 8010055c - - // Close all open files. - for(fd = 0; fd < NOFILE; fd++){ -80104874: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) -8010487b: eb 48 jmp 801048c5 - if(proc->ofile[fd]){ -8010487d: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80104883: 8b 55 f0 mov -0x10(%ebp),%edx -80104886: 83 c2 08 add $0x8,%edx -80104889: 8b 44 90 08 mov 0x8(%eax,%edx,4),%eax -8010488d: 85 c0 test %eax,%eax -8010488f: 74 30 je 801048c1 - fileclose(proc->ofile[fd]); -80104891: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80104897: 8b 55 f0 mov -0x10(%ebp),%edx -8010489a: 83 c2 08 add $0x8,%edx -8010489d: 8b 44 90 08 mov 0x8(%eax,%edx,4),%eax -801048a1: 83 ec 0c sub $0xc,%esp -801048a4: 50 push %eax -801048a5: e8 63 c7 ff ff call 8010100d -801048aa: 83 c4 10 add $0x10,%esp - proc->ofile[fd] = 0; -801048ad: 65 a1 04 00 00 00 mov %gs:0x4,%eax -801048b3: 8b 55 f0 mov -0x10(%ebp),%edx -801048b6: 83 c2 08 add $0x8,%edx -801048b9: c7 44 90 08 00 00 00 movl $0x0,0x8(%eax,%edx,4) -801048c0: 00 - - if(proc == initproc) - panic("init exiting"); - - // Close all open files. - for(fd = 0; fd < NOFILE; fd++){ -801048c1: 83 45 f0 01 addl $0x1,-0x10(%ebp) -801048c5: 83 7d f0 0f cmpl $0xf,-0x10(%ebp) -801048c9: 7e b2 jle 8010487d - fileclose(proc->ofile[fd]); - proc->ofile[fd] = 0; - } - } - - begin_op(); -801048cb: e8 12 ec ff ff call 801034e2 - iput(proc->cwd); -801048d0: 65 a1 04 00 00 00 mov %gs:0x4,%eax -801048d6: 8b 40 68 mov 0x68(%eax),%eax -801048d9: 83 ec 0c sub $0xc,%esp -801048dc: 50 push %eax -801048dd: e8 0a d2 ff ff call 80101aec -801048e2: 83 c4 10 add $0x10,%esp - end_op(); -801048e5: e8 86 ec ff ff call 80103570 - proc->cwd = 0; -801048ea: 65 a1 04 00 00 00 mov %gs:0x4,%eax -801048f0: c7 40 68 00 00 00 00 movl $0x0,0x68(%eax) - - acquire(&ptable.lock); -801048f7: 83 ec 0c sub $0xc,%esp -801048fa: 68 80 2a 11 80 push $0x80112a80 -801048ff: e8 77 06 00 00 call 80104f7b -80104904: 83 c4 10 add $0x10,%esp - - // Parent might be sleeping in wait(). - wakeup1(proc->parent); -80104907: 65 a1 04 00 00 00 mov %gs:0x4,%eax -8010490d: 8b 40 14 mov 0x14(%eax),%eax -80104910: 83 ec 0c sub $0xc,%esp -80104913: 50 push %eax -80104914: e8 1d 04 00 00 call 80104d36 -80104919: 83 c4 10 add $0x10,%esp - - // Pass abandoned children to init. - for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){ -8010491c: c7 45 f4 b4 2a 11 80 movl $0x80112ab4,-0xc(%ebp) -80104923: eb 3c jmp 80104961 - if(p->parent == proc){ -80104925: 8b 45 f4 mov -0xc(%ebp),%eax -80104928: 8b 50 14 mov 0x14(%eax),%edx -8010492b: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80104931: 39 c2 cmp %eax,%edx -80104933: 75 28 jne 8010495d - p->parent = initproc; -80104935: 8b 15 68 b6 10 80 mov 0x8010b668,%edx -8010493b: 8b 45 f4 mov -0xc(%ebp),%eax -8010493e: 89 50 14 mov %edx,0x14(%eax) - if(p->state == ZOMBIE) -80104941: 8b 45 f4 mov -0xc(%ebp),%eax -80104944: 8b 40 0c mov 0xc(%eax),%eax -80104947: 83 f8 05 cmp $0x5,%eax -8010494a: 75 11 jne 8010495d - wakeup1(initproc); -8010494c: a1 68 b6 10 80 mov 0x8010b668,%eax -80104951: 83 ec 0c sub $0xc,%esp -80104954: 50 push %eax -80104955: e8 dc 03 00 00 call 80104d36 -8010495a: 83 c4 10 add $0x10,%esp - - // Parent might be sleeping in wait(). - wakeup1(proc->parent); - - // Pass abandoned children to init. - for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){ -8010495d: 83 45 f4 7c addl $0x7c,-0xc(%ebp) -80104961: 81 7d f4 b4 49 11 80 cmpl $0x801149b4,-0xc(%ebp) -80104968: 72 bb jb 80104925 - wakeup1(initproc); - } - } - - // Jump into the scheduler, never to return. - proc->state = ZOMBIE; -8010496a: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80104970: c7 40 0c 05 00 00 00 movl $0x5,0xc(%eax) - sched(); -80104977: e8 d5 01 00 00 call 80104b51 - panic("zombie exit"); -8010497c: 83 ec 0c sub $0xc,%esp -8010497f: 68 fd 87 10 80 push $0x801087fd -80104984: e8 d3 bb ff ff call 8010055c - -80104989 : - -// Wait for a child process to exit and return its pid. -// Return -1 if this process has no children. -int -wait(void) -{ -80104989: 55 push %ebp -8010498a: 89 e5 mov %esp,%ebp -8010498c: 83 ec 18 sub $0x18,%esp - struct proc *p; - int havekids, pid; - - acquire(&ptable.lock); -8010498f: 83 ec 0c sub $0xc,%esp -80104992: 68 80 2a 11 80 push $0x80112a80 -80104997: e8 df 05 00 00 call 80104f7b -8010499c: 83 c4 10 add $0x10,%esp - for(;;){ - // Scan through table looking for zombie children. - havekids = 0; -8010499f: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){ -801049a6: c7 45 f4 b4 2a 11 80 movl $0x80112ab4,-0xc(%ebp) -801049ad: e9 a6 00 00 00 jmp 80104a58 - if(p->parent != proc) -801049b2: 8b 45 f4 mov -0xc(%ebp),%eax -801049b5: 8b 50 14 mov 0x14(%eax),%edx -801049b8: 65 a1 04 00 00 00 mov %gs:0x4,%eax -801049be: 39 c2 cmp %eax,%edx -801049c0: 74 05 je 801049c7 - continue; -801049c2: e9 8d 00 00 00 jmp 80104a54 - havekids = 1; -801049c7: c7 45 f0 01 00 00 00 movl $0x1,-0x10(%ebp) - if(p->state == ZOMBIE){ -801049ce: 8b 45 f4 mov -0xc(%ebp),%eax -801049d1: 8b 40 0c mov 0xc(%eax),%eax -801049d4: 83 f8 05 cmp $0x5,%eax -801049d7: 75 7b jne 80104a54 - // Found one. - pid = p->pid; -801049d9: 8b 45 f4 mov -0xc(%ebp),%eax -801049dc: 8b 40 10 mov 0x10(%eax),%eax -801049df: 89 45 ec mov %eax,-0x14(%ebp) - kfree(p->kstack); -801049e2: 8b 45 f4 mov -0xc(%ebp),%eax -801049e5: 8b 40 08 mov 0x8(%eax),%eax -801049e8: 83 ec 0c sub $0xc,%esp -801049eb: 50 push %eax -801049ec: e8 7c e1 ff ff call 80102b6d -801049f1: 83 c4 10 add $0x10,%esp - p->kstack = 0; -801049f4: 8b 45 f4 mov -0xc(%ebp),%eax -801049f7: c7 40 08 00 00 00 00 movl $0x0,0x8(%eax) - freevm(p->pgdir); -801049fe: 8b 45 f4 mov -0xc(%ebp),%eax -80104a01: 8b 40 04 mov 0x4(%eax),%eax -80104a04: 83 ec 0c sub $0xc,%esp -80104a07: 50 push %eax -80104a08: e8 88 37 00 00 call 80108195 -80104a0d: 83 c4 10 add $0x10,%esp - p->state = UNUSED; -80104a10: 8b 45 f4 mov -0xc(%ebp),%eax -80104a13: c7 40 0c 00 00 00 00 movl $0x0,0xc(%eax) - p->pid = 0; -80104a1a: 8b 45 f4 mov -0xc(%ebp),%eax -80104a1d: c7 40 10 00 00 00 00 movl $0x0,0x10(%eax) - p->parent = 0; -80104a24: 8b 45 f4 mov -0xc(%ebp),%eax -80104a27: c7 40 14 00 00 00 00 movl $0x0,0x14(%eax) - p->name[0] = 0; -80104a2e: 8b 45 f4 mov -0xc(%ebp),%eax -80104a31: c6 40 6c 00 movb $0x0,0x6c(%eax) - p->killed = 0; -80104a35: 8b 45 f4 mov -0xc(%ebp),%eax -80104a38: c7 40 24 00 00 00 00 movl $0x0,0x24(%eax) - release(&ptable.lock); -80104a3f: 83 ec 0c sub $0xc,%esp -80104a42: 68 80 2a 11 80 push $0x80112a80 -80104a47: e8 95 05 00 00 call 80104fe1 -80104a4c: 83 c4 10 add $0x10,%esp - return pid; -80104a4f: 8b 45 ec mov -0x14(%ebp),%eax -80104a52: eb 57 jmp 80104aab - - acquire(&ptable.lock); - for(;;){ - // Scan through table looking for zombie children. - havekids = 0; - for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){ -80104a54: 83 45 f4 7c addl $0x7c,-0xc(%ebp) -80104a58: 81 7d f4 b4 49 11 80 cmpl $0x801149b4,-0xc(%ebp) -80104a5f: 0f 82 4d ff ff ff jb 801049b2 - return pid; - } - } - - // No point waiting if we don't have any children. - if(!havekids || proc->killed){ -80104a65: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) -80104a69: 74 0d je 80104a78 -80104a6b: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80104a71: 8b 40 24 mov 0x24(%eax),%eax -80104a74: 85 c0 test %eax,%eax -80104a76: 74 17 je 80104a8f - release(&ptable.lock); -80104a78: 83 ec 0c sub $0xc,%esp -80104a7b: 68 80 2a 11 80 push $0x80112a80 -80104a80: e8 5c 05 00 00 call 80104fe1 -80104a85: 83 c4 10 add $0x10,%esp - return -1; -80104a88: b8 ff ff ff ff mov $0xffffffff,%eax -80104a8d: eb 1c jmp 80104aab - } - - // Wait for children to exit. (See wakeup1 call in proc_exit.) - sleep(proc, &ptable.lock); //DOC: wait-sleep -80104a8f: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80104a95: 83 ec 08 sub $0x8,%esp -80104a98: 68 80 2a 11 80 push $0x80112a80 -80104a9d: 50 push %eax -80104a9e: e8 e8 01 00 00 call 80104c8b -80104aa3: 83 c4 10 add $0x10,%esp - } -80104aa6: e9 f4 fe ff ff jmp 8010499f -} -80104aab: c9 leave -80104aac: c3 ret - -80104aad : -// - swtch to start running that process -// - eventually that process transfers control -// via swtch back to the scheduler. -void -scheduler(void) -{ -80104aad: 55 push %ebp -80104aae: 89 e5 mov %esp,%ebp -80104ab0: 83 ec 18 sub $0x18,%esp - struct proc *p; - - for(;;){ - // Enable interrupts on this processor. - sti(); -80104ab3: e8 23 f9 ff ff call 801043db - - // Loop over process table looking for process to run. - acquire(&ptable.lock); -80104ab8: 83 ec 0c sub $0xc,%esp -80104abb: 68 80 2a 11 80 push $0x80112a80 -80104ac0: e8 b6 04 00 00 call 80104f7b -80104ac5: 83 c4 10 add $0x10,%esp - for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){ -80104ac8: c7 45 f4 b4 2a 11 80 movl $0x80112ab4,-0xc(%ebp) -80104acf: eb 62 jmp 80104b33 - if(p->state != RUNNABLE) -80104ad1: 8b 45 f4 mov -0xc(%ebp),%eax -80104ad4: 8b 40 0c mov 0xc(%eax),%eax -80104ad7: 83 f8 03 cmp $0x3,%eax -80104ada: 74 02 je 80104ade - continue; -80104adc: eb 51 jmp 80104b2f - - // Switch to chosen process. It is the process's job - // to release ptable.lock and then reacquire it - // before jumping back to us. - proc = p; -80104ade: 8b 45 f4 mov -0xc(%ebp),%eax -80104ae1: 65 a3 04 00 00 00 mov %eax,%gs:0x4 - switchuvm(p); -80104ae7: 83 ec 0c sub $0xc,%esp -80104aea: ff 75 f4 pushl -0xc(%ebp) -80104aed: e8 5f 32 00 00 call 80107d51 -80104af2: 83 c4 10 add $0x10,%esp - p->state = RUNNING; -80104af5: 8b 45 f4 mov -0xc(%ebp),%eax -80104af8: c7 40 0c 04 00 00 00 movl $0x4,0xc(%eax) - swtch(&cpu->scheduler, proc->context); -80104aff: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80104b05: 8b 40 1c mov 0x1c(%eax),%eax -80104b08: 65 8b 15 00 00 00 00 mov %gs:0x0,%edx -80104b0f: 83 c2 04 add $0x4,%edx -80104b12: 83 ec 08 sub $0x8,%esp -80104b15: 50 push %eax -80104b16: 52 push %edx -80104b17: e8 31 09 00 00 call 8010544d -80104b1c: 83 c4 10 add $0x10,%esp - switchkvm(); -80104b1f: e8 11 32 00 00 call 80107d35 - - // Process is done running for now. - // It should have changed its p->state before coming back. - proc = 0; -80104b24: 65 c7 05 04 00 00 00 movl $0x0,%gs:0x4 -80104b2b: 00 00 00 00 - // Enable interrupts on this processor. - sti(); - - // Loop over process table looking for process to run. - acquire(&ptable.lock); - for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){ -80104b2f: 83 45 f4 7c addl $0x7c,-0xc(%ebp) -80104b33: 81 7d f4 b4 49 11 80 cmpl $0x801149b4,-0xc(%ebp) -80104b3a: 72 95 jb 80104ad1 - - // Process is done running for now. - // It should have changed its p->state before coming back. - proc = 0; - } - release(&ptable.lock); -80104b3c: 83 ec 0c sub $0xc,%esp -80104b3f: 68 80 2a 11 80 push $0x80112a80 -80104b44: e8 98 04 00 00 call 80104fe1 -80104b49: 83 c4 10 add $0x10,%esp - - } -80104b4c: e9 62 ff ff ff jmp 80104ab3 - -80104b51 : - -// Enter scheduler. Must hold only ptable.lock -// and have changed proc->state. -void -sched(void) -{ -80104b51: 55 push %ebp -80104b52: 89 e5 mov %esp,%ebp -80104b54: 83 ec 18 sub $0x18,%esp - int intena; - - if(!holding(&ptable.lock)) -80104b57: 83 ec 0c sub $0xc,%esp -80104b5a: 68 80 2a 11 80 push $0x80112a80 -80104b5f: e8 47 05 00 00 call 801050ab -80104b64: 83 c4 10 add $0x10,%esp -80104b67: 85 c0 test %eax,%eax -80104b69: 75 0d jne 80104b78 - panic("sched ptable.lock"); -80104b6b: 83 ec 0c sub $0xc,%esp -80104b6e: 68 09 88 10 80 push $0x80108809 -80104b73: e8 e4 b9 ff ff call 8010055c - if(cpu->ncli != 1) -80104b78: 65 a1 00 00 00 00 mov %gs:0x0,%eax -80104b7e: 8b 80 ac 00 00 00 mov 0xac(%eax),%eax -80104b84: 83 f8 01 cmp $0x1,%eax -80104b87: 74 0d je 80104b96 - panic("sched locks"); -80104b89: 83 ec 0c sub $0xc,%esp -80104b8c: 68 1b 88 10 80 push $0x8010881b -80104b91: e8 c6 b9 ff ff call 8010055c - if(proc->state == RUNNING) -80104b96: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80104b9c: 8b 40 0c mov 0xc(%eax),%eax -80104b9f: 83 f8 04 cmp $0x4,%eax -80104ba2: 75 0d jne 80104bb1 - panic("sched running"); -80104ba4: 83 ec 0c sub $0xc,%esp -80104ba7: 68 27 88 10 80 push $0x80108827 -80104bac: e8 ab b9 ff ff call 8010055c - if(readeflags()&FL_IF) -80104bb1: e8 15 f8 ff ff call 801043cb -80104bb6: 25 00 02 00 00 and $0x200,%eax -80104bbb: 85 c0 test %eax,%eax -80104bbd: 74 0d je 80104bcc - panic("sched interruptible"); -80104bbf: 83 ec 0c sub $0xc,%esp -80104bc2: 68 35 88 10 80 push $0x80108835 -80104bc7: e8 90 b9 ff ff call 8010055c - intena = cpu->intena; -80104bcc: 65 a1 00 00 00 00 mov %gs:0x0,%eax -80104bd2: 8b 80 b0 00 00 00 mov 0xb0(%eax),%eax -80104bd8: 89 45 f4 mov %eax,-0xc(%ebp) - swtch(&proc->context, cpu->scheduler); -80104bdb: 65 a1 00 00 00 00 mov %gs:0x0,%eax -80104be1: 8b 40 04 mov 0x4(%eax),%eax -80104be4: 65 8b 15 04 00 00 00 mov %gs:0x4,%edx -80104beb: 83 c2 1c add $0x1c,%edx -80104bee: 83 ec 08 sub $0x8,%esp -80104bf1: 50 push %eax -80104bf2: 52 push %edx -80104bf3: e8 55 08 00 00 call 8010544d -80104bf8: 83 c4 10 add $0x10,%esp - cpu->intena = intena; -80104bfb: 65 a1 00 00 00 00 mov %gs:0x0,%eax -80104c01: 8b 55 f4 mov -0xc(%ebp),%edx -80104c04: 89 90 b0 00 00 00 mov %edx,0xb0(%eax) -} -80104c0a: c9 leave -80104c0b: c3 ret - -80104c0c : - -// Give up the CPU for one scheduling round. -void -yield(void) -{ -80104c0c: 55 push %ebp -80104c0d: 89 e5 mov %esp,%ebp -80104c0f: 83 ec 08 sub $0x8,%esp - acquire(&ptable.lock); //DOC: yieldlock -80104c12: 83 ec 0c sub $0xc,%esp -80104c15: 68 80 2a 11 80 push $0x80112a80 -80104c1a: e8 5c 03 00 00 call 80104f7b -80104c1f: 83 c4 10 add $0x10,%esp - proc->state = RUNNABLE; -80104c22: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80104c28: c7 40 0c 03 00 00 00 movl $0x3,0xc(%eax) - sched(); -80104c2f: e8 1d ff ff ff call 80104b51 - release(&ptable.lock); -80104c34: 83 ec 0c sub $0xc,%esp -80104c37: 68 80 2a 11 80 push $0x80112a80 -80104c3c: e8 a0 03 00 00 call 80104fe1 -80104c41: 83 c4 10 add $0x10,%esp -} -80104c44: c9 leave -80104c45: c3 ret - -80104c46 : - -// A fork child's very first scheduling by scheduler() -// will swtch here. "Return" to user space. -void -forkret(void) -{ -80104c46: 55 push %ebp -80104c47: 89 e5 mov %esp,%ebp -80104c49: 83 ec 08 sub $0x8,%esp - static int first = 1; - // Still holding ptable.lock from scheduler. - release(&ptable.lock); -80104c4c: 83 ec 0c sub $0xc,%esp -80104c4f: 68 80 2a 11 80 push $0x80112a80 -80104c54: e8 88 03 00 00 call 80104fe1 -80104c59: 83 c4 10 add $0x10,%esp - - if (first) { -80104c5c: a1 08 b0 10 80 mov 0x8010b008,%eax -80104c61: 85 c0 test %eax,%eax -80104c63: 74 24 je 80104c89 - // Some initialization functions must be run in the context - // of a regular process (e.g., they call sleep), and thus cannot - // be run from main(). - first = 0; -80104c65: c7 05 08 b0 10 80 00 movl $0x0,0x8010b008 -80104c6c: 00 00 00 - iinit(ROOTDEV); -80104c6f: 83 ec 0c sub $0xc,%esp -80104c72: 6a 01 push $0x1 -80104c74: e8 7c c9 ff ff call 801015f5 -80104c79: 83 c4 10 add $0x10,%esp - initlog(ROOTDEV); -80104c7c: 83 ec 0c sub $0xc,%esp -80104c7f: 6a 01 push $0x1 -80104c81: e8 43 e6 ff ff call 801032c9 -80104c86: 83 c4 10 add $0x10,%esp - } - - // Return to "caller", actually trapret (see allocproc). -} -80104c89: c9 leave -80104c8a: c3 ret - -80104c8b : - -// Atomically release lock and sleep on chan. -// Reacquires lock when awakened. -void -sleep(void *chan, struct spinlock *lk) -{ -80104c8b: 55 push %ebp -80104c8c: 89 e5 mov %esp,%ebp -80104c8e: 83 ec 08 sub $0x8,%esp - if(proc == 0) -80104c91: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80104c97: 85 c0 test %eax,%eax -80104c99: 75 0d jne 80104ca8 - panic("sleep"); -80104c9b: 83 ec 0c sub $0xc,%esp -80104c9e: 68 49 88 10 80 push $0x80108849 -80104ca3: e8 b4 b8 ff ff call 8010055c - - if(lk == 0) -80104ca8: 83 7d 0c 00 cmpl $0x0,0xc(%ebp) -80104cac: 75 0d jne 80104cbb - panic("sleep without lk"); -80104cae: 83 ec 0c sub $0xc,%esp -80104cb1: 68 4f 88 10 80 push $0x8010884f -80104cb6: e8 a1 b8 ff ff call 8010055c - // change p->state and then call sched. - // Once we hold ptable.lock, we can be - // guaranteed that we won't miss any wakeup - // (wakeup runs with ptable.lock locked), - // so it's okay to release lk. - if(lk != &ptable.lock){ //DOC: sleeplock0 -80104cbb: 81 7d 0c 80 2a 11 80 cmpl $0x80112a80,0xc(%ebp) -80104cc2: 74 1e je 80104ce2 - acquire(&ptable.lock); //DOC: sleeplock1 -80104cc4: 83 ec 0c sub $0xc,%esp -80104cc7: 68 80 2a 11 80 push $0x80112a80 -80104ccc: e8 aa 02 00 00 call 80104f7b -80104cd1: 83 c4 10 add $0x10,%esp - release(lk); -80104cd4: 83 ec 0c sub $0xc,%esp -80104cd7: ff 75 0c pushl 0xc(%ebp) -80104cda: e8 02 03 00 00 call 80104fe1 -80104cdf: 83 c4 10 add $0x10,%esp - } - - // Go to sleep. - proc->chan = chan; -80104ce2: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80104ce8: 8b 55 08 mov 0x8(%ebp),%edx -80104ceb: 89 50 20 mov %edx,0x20(%eax) - proc->state = SLEEPING; -80104cee: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80104cf4: c7 40 0c 02 00 00 00 movl $0x2,0xc(%eax) - sched(); -80104cfb: e8 51 fe ff ff call 80104b51 - - // Tidy up. - proc->chan = 0; -80104d00: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80104d06: c7 40 20 00 00 00 00 movl $0x0,0x20(%eax) - - // Reacquire original lock. - if(lk != &ptable.lock){ //DOC: sleeplock2 -80104d0d: 81 7d 0c 80 2a 11 80 cmpl $0x80112a80,0xc(%ebp) -80104d14: 74 1e je 80104d34 - release(&ptable.lock); -80104d16: 83 ec 0c sub $0xc,%esp -80104d19: 68 80 2a 11 80 push $0x80112a80 -80104d1e: e8 be 02 00 00 call 80104fe1 -80104d23: 83 c4 10 add $0x10,%esp - acquire(lk); -80104d26: 83 ec 0c sub $0xc,%esp -80104d29: ff 75 0c pushl 0xc(%ebp) -80104d2c: e8 4a 02 00 00 call 80104f7b -80104d31: 83 c4 10 add $0x10,%esp - } -} -80104d34: c9 leave -80104d35: c3 ret - -80104d36 : -//PAGEBREAK! -// Wake up all processes sleeping on chan. -// The ptable lock must be held. -static void -wakeup1(void *chan) -{ -80104d36: 55 push %ebp -80104d37: 89 e5 mov %esp,%ebp -80104d39: 83 ec 10 sub $0x10,%esp - struct proc *p; - - for(p = ptable.proc; p < &ptable.proc[NPROC]; p++) -80104d3c: c7 45 fc b4 2a 11 80 movl $0x80112ab4,-0x4(%ebp) -80104d43: eb 24 jmp 80104d69 - if(p->state == SLEEPING && p->chan == chan) -80104d45: 8b 45 fc mov -0x4(%ebp),%eax -80104d48: 8b 40 0c mov 0xc(%eax),%eax -80104d4b: 83 f8 02 cmp $0x2,%eax -80104d4e: 75 15 jne 80104d65 -80104d50: 8b 45 fc mov -0x4(%ebp),%eax -80104d53: 8b 40 20 mov 0x20(%eax),%eax -80104d56: 3b 45 08 cmp 0x8(%ebp),%eax -80104d59: 75 0a jne 80104d65 - p->state = RUNNABLE; -80104d5b: 8b 45 fc mov -0x4(%ebp),%eax -80104d5e: c7 40 0c 03 00 00 00 movl $0x3,0xc(%eax) -static void -wakeup1(void *chan) -{ - struct proc *p; - - for(p = ptable.proc; p < &ptable.proc[NPROC]; p++) -80104d65: 83 45 fc 7c addl $0x7c,-0x4(%ebp) -80104d69: 81 7d fc b4 49 11 80 cmpl $0x801149b4,-0x4(%ebp) -80104d70: 72 d3 jb 80104d45 - if(p->state == SLEEPING && p->chan == chan) - p->state = RUNNABLE; -} -80104d72: c9 leave -80104d73: c3 ret - -80104d74 : - -// Wake up all processes sleeping on chan. -void -wakeup(void *chan) -{ -80104d74: 55 push %ebp -80104d75: 89 e5 mov %esp,%ebp -80104d77: 83 ec 08 sub $0x8,%esp - acquire(&ptable.lock); -80104d7a: 83 ec 0c sub $0xc,%esp -80104d7d: 68 80 2a 11 80 push $0x80112a80 -80104d82: e8 f4 01 00 00 call 80104f7b -80104d87: 83 c4 10 add $0x10,%esp - wakeup1(chan); -80104d8a: 83 ec 0c sub $0xc,%esp -80104d8d: ff 75 08 pushl 0x8(%ebp) -80104d90: e8 a1 ff ff ff call 80104d36 -80104d95: 83 c4 10 add $0x10,%esp - release(&ptable.lock); -80104d98: 83 ec 0c sub $0xc,%esp -80104d9b: 68 80 2a 11 80 push $0x80112a80 -80104da0: e8 3c 02 00 00 call 80104fe1 -80104da5: 83 c4 10 add $0x10,%esp -} -80104da8: c9 leave -80104da9: c3 ret - -80104daa : -// Kill the process with the given pid. -// Process won't exit until it returns -// to user space (see trap in trap.c). -int -kill(int pid) -{ -80104daa: 55 push %ebp -80104dab: 89 e5 mov %esp,%ebp -80104dad: 83 ec 18 sub $0x18,%esp - struct proc *p; - - acquire(&ptable.lock); -80104db0: 83 ec 0c sub $0xc,%esp -80104db3: 68 80 2a 11 80 push $0x80112a80 -80104db8: e8 be 01 00 00 call 80104f7b -80104dbd: 83 c4 10 add $0x10,%esp - for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){ -80104dc0: c7 45 f4 b4 2a 11 80 movl $0x80112ab4,-0xc(%ebp) -80104dc7: eb 45 jmp 80104e0e - if(p->pid == pid){ -80104dc9: 8b 45 f4 mov -0xc(%ebp),%eax -80104dcc: 8b 40 10 mov 0x10(%eax),%eax -80104dcf: 3b 45 08 cmp 0x8(%ebp),%eax -80104dd2: 75 36 jne 80104e0a - p->killed = 1; -80104dd4: 8b 45 f4 mov -0xc(%ebp),%eax -80104dd7: c7 40 24 01 00 00 00 movl $0x1,0x24(%eax) - // Wake process from sleep if necessary. - if(p->state == SLEEPING) -80104dde: 8b 45 f4 mov -0xc(%ebp),%eax -80104de1: 8b 40 0c mov 0xc(%eax),%eax -80104de4: 83 f8 02 cmp $0x2,%eax -80104de7: 75 0a jne 80104df3 - p->state = RUNNABLE; -80104de9: 8b 45 f4 mov -0xc(%ebp),%eax -80104dec: c7 40 0c 03 00 00 00 movl $0x3,0xc(%eax) - release(&ptable.lock); -80104df3: 83 ec 0c sub $0xc,%esp -80104df6: 68 80 2a 11 80 push $0x80112a80 -80104dfb: e8 e1 01 00 00 call 80104fe1 -80104e00: 83 c4 10 add $0x10,%esp - return 0; -80104e03: b8 00 00 00 00 mov $0x0,%eax -80104e08: eb 22 jmp 80104e2c -kill(int pid) -{ - struct proc *p; - - acquire(&ptable.lock); - for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){ -80104e0a: 83 45 f4 7c addl $0x7c,-0xc(%ebp) -80104e0e: 81 7d f4 b4 49 11 80 cmpl $0x801149b4,-0xc(%ebp) -80104e15: 72 b2 jb 80104dc9 - p->state = RUNNABLE; - release(&ptable.lock); - return 0; - } - } - release(&ptable.lock); -80104e17: 83 ec 0c sub $0xc,%esp -80104e1a: 68 80 2a 11 80 push $0x80112a80 -80104e1f: e8 bd 01 00 00 call 80104fe1 -80104e24: 83 c4 10 add $0x10,%esp - return -1; -80104e27: b8 ff ff ff ff mov $0xffffffff,%eax -} -80104e2c: c9 leave -80104e2d: c3 ret - -80104e2e : -// Print a process listing to console. For debugging. -// Runs when user types ^P on console. -// No lock to avoid wedging a stuck machine further. -void -procdump(void) -{ -80104e2e: 55 push %ebp -80104e2f: 89 e5 mov %esp,%ebp -80104e31: 83 ec 48 sub $0x48,%esp - int i; - struct proc *p; - char *state; - uint pc[10]; - - for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){ -80104e34: c7 45 f0 b4 2a 11 80 movl $0x80112ab4,-0x10(%ebp) -80104e3b: e9 d5 00 00 00 jmp 80104f15 - if(p->state == UNUSED) -80104e40: 8b 45 f0 mov -0x10(%ebp),%eax -80104e43: 8b 40 0c mov 0xc(%eax),%eax -80104e46: 85 c0 test %eax,%eax -80104e48: 75 05 jne 80104e4f - continue; -80104e4a: e9 c2 00 00 00 jmp 80104f11 - if(p->state >= 0 && p->state < NELEM(states) && states[p->state]) -80104e4f: 8b 45 f0 mov -0x10(%ebp),%eax -80104e52: 8b 40 0c mov 0xc(%eax),%eax -80104e55: 83 f8 05 cmp $0x5,%eax -80104e58: 77 23 ja 80104e7d -80104e5a: 8b 45 f0 mov -0x10(%ebp),%eax -80104e5d: 8b 40 0c mov 0xc(%eax),%eax -80104e60: 8b 04 85 0c b0 10 80 mov -0x7fef4ff4(,%eax,4),%eax -80104e67: 85 c0 test %eax,%eax -80104e69: 74 12 je 80104e7d - state = states[p->state]; -80104e6b: 8b 45 f0 mov -0x10(%ebp),%eax -80104e6e: 8b 40 0c mov 0xc(%eax),%eax -80104e71: 8b 04 85 0c b0 10 80 mov -0x7fef4ff4(,%eax,4),%eax -80104e78: 89 45 ec mov %eax,-0x14(%ebp) -80104e7b: eb 07 jmp 80104e84 - else - state = "???"; -80104e7d: c7 45 ec 60 88 10 80 movl $0x80108860,-0x14(%ebp) - cprintf("%d %s %s", p->pid, state, p->name); -80104e84: 8b 45 f0 mov -0x10(%ebp),%eax -80104e87: 8d 50 6c lea 0x6c(%eax),%edx -80104e8a: 8b 45 f0 mov -0x10(%ebp),%eax -80104e8d: 8b 40 10 mov 0x10(%eax),%eax -80104e90: 52 push %edx -80104e91: ff 75 ec pushl -0x14(%ebp) -80104e94: 50 push %eax -80104e95: 68 64 88 10 80 push $0x80108864 -80104e9a: e8 20 b5 ff ff call 801003bf -80104e9f: 83 c4 10 add $0x10,%esp - if(p->state == SLEEPING){ -80104ea2: 8b 45 f0 mov -0x10(%ebp),%eax -80104ea5: 8b 40 0c mov 0xc(%eax),%eax -80104ea8: 83 f8 02 cmp $0x2,%eax -80104eab: 75 54 jne 80104f01 - getcallerpcs((uint*)p->context->ebp+2, pc); -80104ead: 8b 45 f0 mov -0x10(%ebp),%eax -80104eb0: 8b 40 1c mov 0x1c(%eax),%eax -80104eb3: 8b 40 0c mov 0xc(%eax),%eax -80104eb6: 83 c0 08 add $0x8,%eax -80104eb9: 89 c2 mov %eax,%edx -80104ebb: 83 ec 08 sub $0x8,%esp -80104ebe: 8d 45 c4 lea -0x3c(%ebp),%eax -80104ec1: 50 push %eax -80104ec2: 52 push %edx -80104ec3: e8 6a 01 00 00 call 80105032 -80104ec8: 83 c4 10 add $0x10,%esp - for(i=0; i<10 && pc[i] != 0; i++) -80104ecb: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) -80104ed2: eb 1c jmp 80104ef0 - cprintf(" %p", pc[i]); -80104ed4: 8b 45 f4 mov -0xc(%ebp),%eax -80104ed7: 8b 44 85 c4 mov -0x3c(%ebp,%eax,4),%eax -80104edb: 83 ec 08 sub $0x8,%esp -80104ede: 50 push %eax -80104edf: 68 6d 88 10 80 push $0x8010886d -80104ee4: e8 d6 b4 ff ff call 801003bf -80104ee9: 83 c4 10 add $0x10,%esp - else - state = "???"; - cprintf("%d %s %s", p->pid, state, p->name); - if(p->state == SLEEPING){ - getcallerpcs((uint*)p->context->ebp+2, pc); - for(i=0; i<10 && pc[i] != 0; i++) -80104eec: 83 45 f4 01 addl $0x1,-0xc(%ebp) -80104ef0: 83 7d f4 09 cmpl $0x9,-0xc(%ebp) -80104ef4: 7f 0b jg 80104f01 -80104ef6: 8b 45 f4 mov -0xc(%ebp),%eax -80104ef9: 8b 44 85 c4 mov -0x3c(%ebp,%eax,4),%eax -80104efd: 85 c0 test %eax,%eax -80104eff: 75 d3 jne 80104ed4 - cprintf(" %p", pc[i]); - } - cprintf("\n"); -80104f01: 83 ec 0c sub $0xc,%esp -80104f04: 68 71 88 10 80 push $0x80108871 -80104f09: e8 b1 b4 ff ff call 801003bf -80104f0e: 83 c4 10 add $0x10,%esp - int i; - struct proc *p; - char *state; - uint pc[10]; - - for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){ -80104f11: 83 45 f0 7c addl $0x7c,-0x10(%ebp) -80104f15: 81 7d f0 b4 49 11 80 cmpl $0x801149b4,-0x10(%ebp) -80104f1c: 0f 82 1e ff ff ff jb 80104e40 - for(i=0; i<10 && pc[i] != 0; i++) - cprintf(" %p", pc[i]); - } - cprintf("\n"); - } -} -80104f22: c9 leave -80104f23: c3 ret - -80104f24 : - asm volatile("ltr %0" : : "r" (sel)); -} - -static inline uint -readeflags(void) -{ -80104f24: 55 push %ebp -80104f25: 89 e5 mov %esp,%ebp -80104f27: 83 ec 10 sub $0x10,%esp - uint eflags; - asm volatile("pushfl; popl %0" : "=r" (eflags)); -80104f2a: 9c pushf -80104f2b: 58 pop %eax -80104f2c: 89 45 fc mov %eax,-0x4(%ebp) - return eflags; -80104f2f: 8b 45 fc mov -0x4(%ebp),%eax -} -80104f32: c9 leave -80104f33: c3 ret - -80104f34 : - asm volatile("movw %0, %%gs" : : "r" (v)); -} - -static inline void -cli(void) -{ -80104f34: 55 push %ebp -80104f35: 89 e5 mov %esp,%ebp - asm volatile("cli"); -80104f37: fa cli -} -80104f38: 5d pop %ebp -80104f39: c3 ret - -80104f3a : - -static inline void -sti(void) -{ -80104f3a: 55 push %ebp -80104f3b: 89 e5 mov %esp,%ebp - asm volatile("sti"); -80104f3d: fb sti -} -80104f3e: 5d pop %ebp -80104f3f: c3 ret - -80104f40 : - -static inline uint -xchg(volatile uint *addr, uint newval) -{ -80104f40: 55 push %ebp -80104f41: 89 e5 mov %esp,%ebp -80104f43: 83 ec 10 sub $0x10,%esp - uint result; - - // The + in "+m" denotes a read-modify-write operand. - asm volatile("lock; xchgl %0, %1" : -80104f46: 8b 55 08 mov 0x8(%ebp),%edx -80104f49: 8b 45 0c mov 0xc(%ebp),%eax -80104f4c: 8b 4d 08 mov 0x8(%ebp),%ecx -80104f4f: f0 87 02 lock xchg %eax,(%edx) -80104f52: 89 45 fc mov %eax,-0x4(%ebp) - "+m" (*addr), "=a" (result) : - "1" (newval) : - "cc"); - return result; -80104f55: 8b 45 fc mov -0x4(%ebp),%eax -} -80104f58: c9 leave -80104f59: c3 ret - -80104f5a : -#include "proc.h" -#include "spinlock.h" - -void -initlock(struct spinlock *lk, char *name) -{ -80104f5a: 55 push %ebp -80104f5b: 89 e5 mov %esp,%ebp - lk->name = name; -80104f5d: 8b 45 08 mov 0x8(%ebp),%eax -80104f60: 8b 55 0c mov 0xc(%ebp),%edx -80104f63: 89 50 04 mov %edx,0x4(%eax) - lk->locked = 0; -80104f66: 8b 45 08 mov 0x8(%ebp),%eax -80104f69: c7 00 00 00 00 00 movl $0x0,(%eax) - lk->cpu = 0; -80104f6f: 8b 45 08 mov 0x8(%ebp),%eax -80104f72: c7 40 08 00 00 00 00 movl $0x0,0x8(%eax) -} -80104f79: 5d pop %ebp -80104f7a: c3 ret - -80104f7b : -// Loops (spins) until the lock is acquired. -// Holding a lock for a long time may cause -// other CPUs to waste time spinning to acquire it. -void -acquire(struct spinlock *lk) -{ -80104f7b: 55 push %ebp -80104f7c: 89 e5 mov %esp,%ebp -80104f7e: 83 ec 08 sub $0x8,%esp - pushcli(); // disable interrupts to avoid deadlock. -80104f81: e8 4f 01 00 00 call 801050d5 - if(holding(lk)) -80104f86: 8b 45 08 mov 0x8(%ebp),%eax -80104f89: 83 ec 0c sub $0xc,%esp -80104f8c: 50 push %eax -80104f8d: e8 19 01 00 00 call 801050ab -80104f92: 83 c4 10 add $0x10,%esp -80104f95: 85 c0 test %eax,%eax -80104f97: 74 0d je 80104fa6 - panic("acquire"); -80104f99: 83 ec 0c sub $0xc,%esp -80104f9c: 68 9d 88 10 80 push $0x8010889d -80104fa1: e8 b6 b5 ff ff call 8010055c - - // The xchg is atomic. - // It also serializes, so that reads after acquire are not - // reordered before it. - while(xchg(&lk->locked, 1) != 0) -80104fa6: 90 nop -80104fa7: 8b 45 08 mov 0x8(%ebp),%eax -80104faa: 83 ec 08 sub $0x8,%esp -80104fad: 6a 01 push $0x1 -80104faf: 50 push %eax -80104fb0: e8 8b ff ff ff call 80104f40 -80104fb5: 83 c4 10 add $0x10,%esp -80104fb8: 85 c0 test %eax,%eax -80104fba: 75 eb jne 80104fa7 - ; - - // Record info about lock acquisition for debugging. - lk->cpu = cpu; -80104fbc: 8b 45 08 mov 0x8(%ebp),%eax -80104fbf: 65 8b 15 00 00 00 00 mov %gs:0x0,%edx -80104fc6: 89 50 08 mov %edx,0x8(%eax) - getcallerpcs(&lk, lk->pcs); -80104fc9: 8b 45 08 mov 0x8(%ebp),%eax -80104fcc: 83 c0 0c add $0xc,%eax -80104fcf: 83 ec 08 sub $0x8,%esp -80104fd2: 50 push %eax -80104fd3: 8d 45 08 lea 0x8(%ebp),%eax -80104fd6: 50 push %eax -80104fd7: e8 56 00 00 00 call 80105032 -80104fdc: 83 c4 10 add $0x10,%esp -} -80104fdf: c9 leave -80104fe0: c3 ret - -80104fe1 : - -// Release the lock. -void -release(struct spinlock *lk) -{ -80104fe1: 55 push %ebp -80104fe2: 89 e5 mov %esp,%ebp -80104fe4: 83 ec 08 sub $0x8,%esp - if(!holding(lk)) -80104fe7: 83 ec 0c sub $0xc,%esp -80104fea: ff 75 08 pushl 0x8(%ebp) -80104fed: e8 b9 00 00 00 call 801050ab -80104ff2: 83 c4 10 add $0x10,%esp -80104ff5: 85 c0 test %eax,%eax -80104ff7: 75 0d jne 80105006 - panic("release"); -80104ff9: 83 ec 0c sub $0xc,%esp -80104ffc: 68 a5 88 10 80 push $0x801088a5 -80105001: e8 56 b5 ff ff call 8010055c - - lk->pcs[0] = 0; -80105006: 8b 45 08 mov 0x8(%ebp),%eax -80105009: c7 40 0c 00 00 00 00 movl $0x0,0xc(%eax) - lk->cpu = 0; -80105010: 8b 45 08 mov 0x8(%ebp),%eax -80105013: c7 40 08 00 00 00 00 movl $0x0,0x8(%eax) - // But the 2007 Intel 64 Architecture Memory Ordering White - // Paper says that Intel 64 and IA-32 will not move a load - // after a store. So lock->locked = 0 would work here. - // The xchg being asm volatile ensures gcc emits it after - // the above assignments (and after the critical section). - xchg(&lk->locked, 0); -8010501a: 8b 45 08 mov 0x8(%ebp),%eax -8010501d: 83 ec 08 sub $0x8,%esp -80105020: 6a 00 push $0x0 -80105022: 50 push %eax -80105023: e8 18 ff ff ff call 80104f40 -80105028: 83 c4 10 add $0x10,%esp - - popcli(); -8010502b: e8 e9 00 00 00 call 80105119 -} -80105030: c9 leave -80105031: c3 ret - -80105032 : - -// Record the current call stack in pcs[] by following the %ebp chain. -void -getcallerpcs(void *v, uint pcs[]) -{ -80105032: 55 push %ebp -80105033: 89 e5 mov %esp,%ebp -80105035: 83 ec 10 sub $0x10,%esp - uint *ebp; - int i; - - ebp = (uint*)v - 2; -80105038: 8b 45 08 mov 0x8(%ebp),%eax -8010503b: 83 e8 08 sub $0x8,%eax -8010503e: 89 45 fc mov %eax,-0x4(%ebp) - for(i = 0; i < 10; i++){ -80105041: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp) -80105048: eb 38 jmp 80105082 - if(ebp == 0 || ebp < (uint*)KERNBASE || ebp == (uint*)0xffffffff) -8010504a: 83 7d fc 00 cmpl $0x0,-0x4(%ebp) -8010504e: 74 38 je 80105088 -80105050: 81 7d fc ff ff ff 7f cmpl $0x7fffffff,-0x4(%ebp) -80105057: 76 2f jbe 80105088 -80105059: 83 7d fc ff cmpl $0xffffffff,-0x4(%ebp) -8010505d: 74 29 je 80105088 - break; - pcs[i] = ebp[1]; // saved %eip -8010505f: 8b 45 f8 mov -0x8(%ebp),%eax -80105062: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx -80105069: 8b 45 0c mov 0xc(%ebp),%eax -8010506c: 01 c2 add %eax,%edx -8010506e: 8b 45 fc mov -0x4(%ebp),%eax -80105071: 8b 40 04 mov 0x4(%eax),%eax -80105074: 89 02 mov %eax,(%edx) - ebp = (uint*)ebp[0]; // saved %ebp -80105076: 8b 45 fc mov -0x4(%ebp),%eax -80105079: 8b 00 mov (%eax),%eax -8010507b: 89 45 fc mov %eax,-0x4(%ebp) -{ - uint *ebp; - int i; - - ebp = (uint*)v - 2; - for(i = 0; i < 10; i++){ -8010507e: 83 45 f8 01 addl $0x1,-0x8(%ebp) -80105082: 83 7d f8 09 cmpl $0x9,-0x8(%ebp) -80105086: 7e c2 jle 8010504a - if(ebp == 0 || ebp < (uint*)KERNBASE || ebp == (uint*)0xffffffff) - break; - pcs[i] = ebp[1]; // saved %eip - ebp = (uint*)ebp[0]; // saved %ebp - } - for(; i < 10; i++) -80105088: eb 19 jmp 801050a3 - pcs[i] = 0; -8010508a: 8b 45 f8 mov -0x8(%ebp),%eax -8010508d: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx -80105094: 8b 45 0c mov 0xc(%ebp),%eax -80105097: 01 d0 add %edx,%eax -80105099: c7 00 00 00 00 00 movl $0x0,(%eax) - if(ebp == 0 || ebp < (uint*)KERNBASE || ebp == (uint*)0xffffffff) - break; - pcs[i] = ebp[1]; // saved %eip - ebp = (uint*)ebp[0]; // saved %ebp - } - for(; i < 10; i++) -8010509f: 83 45 f8 01 addl $0x1,-0x8(%ebp) -801050a3: 83 7d f8 09 cmpl $0x9,-0x8(%ebp) -801050a7: 7e e1 jle 8010508a - pcs[i] = 0; -} -801050a9: c9 leave -801050aa: c3 ret - -801050ab : - -// Check whether this cpu is holding the lock. -int -holding(struct spinlock *lock) -{ -801050ab: 55 push %ebp -801050ac: 89 e5 mov %esp,%ebp - return lock->locked && lock->cpu == cpu; -801050ae: 8b 45 08 mov 0x8(%ebp),%eax -801050b1: 8b 00 mov (%eax),%eax -801050b3: 85 c0 test %eax,%eax -801050b5: 74 17 je 801050ce -801050b7: 8b 45 08 mov 0x8(%ebp),%eax -801050ba: 8b 50 08 mov 0x8(%eax),%edx -801050bd: 65 a1 00 00 00 00 mov %gs:0x0,%eax -801050c3: 39 c2 cmp %eax,%edx -801050c5: 75 07 jne 801050ce -801050c7: b8 01 00 00 00 mov $0x1,%eax -801050cc: eb 05 jmp 801050d3 -801050ce: b8 00 00 00 00 mov $0x0,%eax -} -801050d3: 5d pop %ebp -801050d4: c3 ret - -801050d5 : -// it takes two popcli to undo two pushcli. Also, if interrupts -// are off, then pushcli, popcli leaves them off. - -void -pushcli(void) -{ -801050d5: 55 push %ebp -801050d6: 89 e5 mov %esp,%ebp -801050d8: 83 ec 10 sub $0x10,%esp - int eflags; - - eflags = readeflags(); -801050db: e8 44 fe ff ff call 80104f24 -801050e0: 89 45 fc mov %eax,-0x4(%ebp) - cli(); -801050e3: e8 4c fe ff ff call 80104f34 - if(cpu->ncli++ == 0) -801050e8: 65 8b 15 00 00 00 00 mov %gs:0x0,%edx -801050ef: 8b 82 ac 00 00 00 mov 0xac(%edx),%eax -801050f5: 8d 48 01 lea 0x1(%eax),%ecx -801050f8: 89 8a ac 00 00 00 mov %ecx,0xac(%edx) -801050fe: 85 c0 test %eax,%eax -80105100: 75 15 jne 80105117 - cpu->intena = eflags & FL_IF; -80105102: 65 a1 00 00 00 00 mov %gs:0x0,%eax -80105108: 8b 55 fc mov -0x4(%ebp),%edx -8010510b: 81 e2 00 02 00 00 and $0x200,%edx -80105111: 89 90 b0 00 00 00 mov %edx,0xb0(%eax) -} -80105117: c9 leave -80105118: c3 ret - -80105119 : - -void -popcli(void) -{ -80105119: 55 push %ebp -8010511a: 89 e5 mov %esp,%ebp -8010511c: 83 ec 08 sub $0x8,%esp - if(readeflags()&FL_IF) -8010511f: e8 00 fe ff ff call 80104f24 -80105124: 25 00 02 00 00 and $0x200,%eax -80105129: 85 c0 test %eax,%eax -8010512b: 74 0d je 8010513a - panic("popcli - interruptible"); -8010512d: 83 ec 0c sub $0xc,%esp -80105130: 68 ad 88 10 80 push $0x801088ad -80105135: e8 22 b4 ff ff call 8010055c - if(--cpu->ncli < 0) -8010513a: 65 a1 00 00 00 00 mov %gs:0x0,%eax -80105140: 8b 90 ac 00 00 00 mov 0xac(%eax),%edx -80105146: 83 ea 01 sub $0x1,%edx -80105149: 89 90 ac 00 00 00 mov %edx,0xac(%eax) -8010514f: 8b 80 ac 00 00 00 mov 0xac(%eax),%eax -80105155: 85 c0 test %eax,%eax -80105157: 79 0d jns 80105166 - panic("popcli"); -80105159: 83 ec 0c sub $0xc,%esp -8010515c: 68 c4 88 10 80 push $0x801088c4 -80105161: e8 f6 b3 ff ff call 8010055c - if(cpu->ncli == 0 && cpu->intena) -80105166: 65 a1 00 00 00 00 mov %gs:0x0,%eax -8010516c: 8b 80 ac 00 00 00 mov 0xac(%eax),%eax -80105172: 85 c0 test %eax,%eax -80105174: 75 15 jne 8010518b -80105176: 65 a1 00 00 00 00 mov %gs:0x0,%eax -8010517c: 8b 80 b0 00 00 00 mov 0xb0(%eax),%eax -80105182: 85 c0 test %eax,%eax -80105184: 74 05 je 8010518b - sti(); -80105186: e8 af fd ff ff call 80104f3a -} -8010518b: c9 leave -8010518c: c3 ret - -8010518d : - "cc"); -} - -static inline void -stosb(void *addr, int data, int cnt) -{ -8010518d: 55 push %ebp -8010518e: 89 e5 mov %esp,%ebp -80105190: 57 push %edi -80105191: 53 push %ebx - asm volatile("cld; rep stosb" : -80105192: 8b 4d 08 mov 0x8(%ebp),%ecx -80105195: 8b 55 10 mov 0x10(%ebp),%edx -80105198: 8b 45 0c mov 0xc(%ebp),%eax -8010519b: 89 cb mov %ecx,%ebx -8010519d: 89 df mov %ebx,%edi -8010519f: 89 d1 mov %edx,%ecx -801051a1: fc cld -801051a2: f3 aa rep stos %al,%es:(%edi) -801051a4: 89 ca mov %ecx,%edx -801051a6: 89 fb mov %edi,%ebx -801051a8: 89 5d 08 mov %ebx,0x8(%ebp) -801051ab: 89 55 10 mov %edx,0x10(%ebp) - "=D" (addr), "=c" (cnt) : - "0" (addr), "1" (cnt), "a" (data) : - "memory", "cc"); -} -801051ae: 5b pop %ebx -801051af: 5f pop %edi -801051b0: 5d pop %ebp -801051b1: c3 ret - -801051b2 : - -static inline void -stosl(void *addr, int data, int cnt) -{ -801051b2: 55 push %ebp -801051b3: 89 e5 mov %esp,%ebp -801051b5: 57 push %edi -801051b6: 53 push %ebx - asm volatile("cld; rep stosl" : -801051b7: 8b 4d 08 mov 0x8(%ebp),%ecx -801051ba: 8b 55 10 mov 0x10(%ebp),%edx -801051bd: 8b 45 0c mov 0xc(%ebp),%eax -801051c0: 89 cb mov %ecx,%ebx -801051c2: 89 df mov %ebx,%edi -801051c4: 89 d1 mov %edx,%ecx -801051c6: fc cld -801051c7: f3 ab rep stos %eax,%es:(%edi) -801051c9: 89 ca mov %ecx,%edx -801051cb: 89 fb mov %edi,%ebx -801051cd: 89 5d 08 mov %ebx,0x8(%ebp) -801051d0: 89 55 10 mov %edx,0x10(%ebp) - "=D" (addr), "=c" (cnt) : - "0" (addr), "1" (cnt), "a" (data) : - "memory", "cc"); -} -801051d3: 5b pop %ebx -801051d4: 5f pop %edi -801051d5: 5d pop %ebp -801051d6: c3 ret - -801051d7 : -#include "types.h" -#include "x86.h" - -void* -memset(void *dst, int c, uint n) -{ -801051d7: 55 push %ebp -801051d8: 89 e5 mov %esp,%ebp - if ((int)dst%4 == 0 && n%4 == 0){ -801051da: 8b 45 08 mov 0x8(%ebp),%eax -801051dd: 83 e0 03 and $0x3,%eax -801051e0: 85 c0 test %eax,%eax -801051e2: 75 43 jne 80105227 -801051e4: 8b 45 10 mov 0x10(%ebp),%eax -801051e7: 83 e0 03 and $0x3,%eax -801051ea: 85 c0 test %eax,%eax -801051ec: 75 39 jne 80105227 - c &= 0xFF; -801051ee: 81 65 0c ff 00 00 00 andl $0xff,0xc(%ebp) - stosl(dst, (c<<24)|(c<<16)|(c<<8)|c, n/4); -801051f5: 8b 45 10 mov 0x10(%ebp),%eax -801051f8: c1 e8 02 shr $0x2,%eax -801051fb: 89 c1 mov %eax,%ecx -801051fd: 8b 45 0c mov 0xc(%ebp),%eax -80105200: c1 e0 18 shl $0x18,%eax -80105203: 89 c2 mov %eax,%edx -80105205: 8b 45 0c mov 0xc(%ebp),%eax -80105208: c1 e0 10 shl $0x10,%eax -8010520b: 09 c2 or %eax,%edx -8010520d: 8b 45 0c mov 0xc(%ebp),%eax -80105210: c1 e0 08 shl $0x8,%eax -80105213: 09 d0 or %edx,%eax -80105215: 0b 45 0c or 0xc(%ebp),%eax -80105218: 51 push %ecx -80105219: 50 push %eax -8010521a: ff 75 08 pushl 0x8(%ebp) -8010521d: e8 90 ff ff ff call 801051b2 -80105222: 83 c4 0c add $0xc,%esp -80105225: eb 12 jmp 80105239 - } else - stosb(dst, c, n); -80105227: 8b 45 10 mov 0x10(%ebp),%eax -8010522a: 50 push %eax -8010522b: ff 75 0c pushl 0xc(%ebp) -8010522e: ff 75 08 pushl 0x8(%ebp) -80105231: e8 57 ff ff ff call 8010518d -80105236: 83 c4 0c add $0xc,%esp - return dst; -80105239: 8b 45 08 mov 0x8(%ebp),%eax -} -8010523c: c9 leave -8010523d: c3 ret - -8010523e : - -int -memcmp(const void *v1, const void *v2, uint n) -{ -8010523e: 55 push %ebp -8010523f: 89 e5 mov %esp,%ebp -80105241: 83 ec 10 sub $0x10,%esp - const uchar *s1, *s2; - - s1 = v1; -80105244: 8b 45 08 mov 0x8(%ebp),%eax -80105247: 89 45 fc mov %eax,-0x4(%ebp) - s2 = v2; -8010524a: 8b 45 0c mov 0xc(%ebp),%eax -8010524d: 89 45 f8 mov %eax,-0x8(%ebp) - while(n-- > 0){ -80105250: eb 30 jmp 80105282 - if(*s1 != *s2) -80105252: 8b 45 fc mov -0x4(%ebp),%eax -80105255: 0f b6 10 movzbl (%eax),%edx -80105258: 8b 45 f8 mov -0x8(%ebp),%eax -8010525b: 0f b6 00 movzbl (%eax),%eax -8010525e: 38 c2 cmp %al,%dl -80105260: 74 18 je 8010527a - return *s1 - *s2; -80105262: 8b 45 fc mov -0x4(%ebp),%eax -80105265: 0f b6 00 movzbl (%eax),%eax -80105268: 0f b6 d0 movzbl %al,%edx -8010526b: 8b 45 f8 mov -0x8(%ebp),%eax -8010526e: 0f b6 00 movzbl (%eax),%eax -80105271: 0f b6 c0 movzbl %al,%eax -80105274: 29 c2 sub %eax,%edx -80105276: 89 d0 mov %edx,%eax -80105278: eb 1a jmp 80105294 - s1++, s2++; -8010527a: 83 45 fc 01 addl $0x1,-0x4(%ebp) -8010527e: 83 45 f8 01 addl $0x1,-0x8(%ebp) -{ - const uchar *s1, *s2; - - s1 = v1; - s2 = v2; - while(n-- > 0){ -80105282: 8b 45 10 mov 0x10(%ebp),%eax -80105285: 8d 50 ff lea -0x1(%eax),%edx -80105288: 89 55 10 mov %edx,0x10(%ebp) -8010528b: 85 c0 test %eax,%eax -8010528d: 75 c3 jne 80105252 - if(*s1 != *s2) - return *s1 - *s2; - s1++, s2++; - } - - return 0; -8010528f: b8 00 00 00 00 mov $0x0,%eax -} -80105294: c9 leave -80105295: c3 ret - -80105296 : - -void* -memmove(void *dst, const void *src, uint n) -{ -80105296: 55 push %ebp -80105297: 89 e5 mov %esp,%ebp -80105299: 83 ec 10 sub $0x10,%esp - const char *s; - char *d; - - s = src; -8010529c: 8b 45 0c mov 0xc(%ebp),%eax -8010529f: 89 45 fc mov %eax,-0x4(%ebp) - d = dst; -801052a2: 8b 45 08 mov 0x8(%ebp),%eax -801052a5: 89 45 f8 mov %eax,-0x8(%ebp) - if(s < d && s + n > d){ -801052a8: 8b 45 fc mov -0x4(%ebp),%eax -801052ab: 3b 45 f8 cmp -0x8(%ebp),%eax -801052ae: 73 3d jae 801052ed -801052b0: 8b 55 fc mov -0x4(%ebp),%edx -801052b3: 8b 45 10 mov 0x10(%ebp),%eax -801052b6: 01 d0 add %edx,%eax -801052b8: 3b 45 f8 cmp -0x8(%ebp),%eax -801052bb: 76 30 jbe 801052ed - s += n; -801052bd: 8b 45 10 mov 0x10(%ebp),%eax -801052c0: 01 45 fc add %eax,-0x4(%ebp) - d += n; -801052c3: 8b 45 10 mov 0x10(%ebp),%eax -801052c6: 01 45 f8 add %eax,-0x8(%ebp) - while(n-- > 0) -801052c9: eb 13 jmp 801052de - *--d = *--s; -801052cb: 83 6d f8 01 subl $0x1,-0x8(%ebp) -801052cf: 83 6d fc 01 subl $0x1,-0x4(%ebp) -801052d3: 8b 45 fc mov -0x4(%ebp),%eax -801052d6: 0f b6 10 movzbl (%eax),%edx -801052d9: 8b 45 f8 mov -0x8(%ebp),%eax -801052dc: 88 10 mov %dl,(%eax) - s = src; - d = dst; - if(s < d && s + n > d){ - s += n; - d += n; - while(n-- > 0) -801052de: 8b 45 10 mov 0x10(%ebp),%eax -801052e1: 8d 50 ff lea -0x1(%eax),%edx -801052e4: 89 55 10 mov %edx,0x10(%ebp) -801052e7: 85 c0 test %eax,%eax -801052e9: 75 e0 jne 801052cb - const char *s; - char *d; - - s = src; - d = dst; - if(s < d && s + n > d){ -801052eb: eb 26 jmp 80105313 - s += n; - d += n; - while(n-- > 0) - *--d = *--s; - } else - while(n-- > 0) -801052ed: eb 17 jmp 80105306 - *d++ = *s++; -801052ef: 8b 45 f8 mov -0x8(%ebp),%eax -801052f2: 8d 50 01 lea 0x1(%eax),%edx -801052f5: 89 55 f8 mov %edx,-0x8(%ebp) -801052f8: 8b 55 fc mov -0x4(%ebp),%edx -801052fb: 8d 4a 01 lea 0x1(%edx),%ecx -801052fe: 89 4d fc mov %ecx,-0x4(%ebp) -80105301: 0f b6 12 movzbl (%edx),%edx -80105304: 88 10 mov %dl,(%eax) - s += n; - d += n; - while(n-- > 0) - *--d = *--s; - } else - while(n-- > 0) -80105306: 8b 45 10 mov 0x10(%ebp),%eax -80105309: 8d 50 ff lea -0x1(%eax),%edx -8010530c: 89 55 10 mov %edx,0x10(%ebp) -8010530f: 85 c0 test %eax,%eax -80105311: 75 dc jne 801052ef - *d++ = *s++; - - return dst; -80105313: 8b 45 08 mov 0x8(%ebp),%eax -} -80105316: c9 leave -80105317: c3 ret - -80105318 : - -// memcpy exists to placate GCC. Use memmove. -void* -memcpy(void *dst, const void *src, uint n) -{ -80105318: 55 push %ebp -80105319: 89 e5 mov %esp,%ebp - return memmove(dst, src, n); -8010531b: ff 75 10 pushl 0x10(%ebp) -8010531e: ff 75 0c pushl 0xc(%ebp) -80105321: ff 75 08 pushl 0x8(%ebp) -80105324: e8 6d ff ff ff call 80105296 -80105329: 83 c4 0c add $0xc,%esp -} -8010532c: c9 leave -8010532d: c3 ret - -8010532e : - -int -strncmp(const char *p, const char *q, uint n) -{ -8010532e: 55 push %ebp -8010532f: 89 e5 mov %esp,%ebp - while(n > 0 && *p && *p == *q) -80105331: eb 0c jmp 8010533f - n--, p++, q++; -80105333: 83 6d 10 01 subl $0x1,0x10(%ebp) -80105337: 83 45 08 01 addl $0x1,0x8(%ebp) -8010533b: 83 45 0c 01 addl $0x1,0xc(%ebp) -} - -int -strncmp(const char *p, const char *q, uint n) -{ - while(n > 0 && *p && *p == *q) -8010533f: 83 7d 10 00 cmpl $0x0,0x10(%ebp) -80105343: 74 1a je 8010535f -80105345: 8b 45 08 mov 0x8(%ebp),%eax -80105348: 0f b6 00 movzbl (%eax),%eax -8010534b: 84 c0 test %al,%al -8010534d: 74 10 je 8010535f -8010534f: 8b 45 08 mov 0x8(%ebp),%eax -80105352: 0f b6 10 movzbl (%eax),%edx -80105355: 8b 45 0c mov 0xc(%ebp),%eax -80105358: 0f b6 00 movzbl (%eax),%eax -8010535b: 38 c2 cmp %al,%dl -8010535d: 74 d4 je 80105333 - n--, p++, q++; - if(n == 0) -8010535f: 83 7d 10 00 cmpl $0x0,0x10(%ebp) -80105363: 75 07 jne 8010536c - return 0; -80105365: b8 00 00 00 00 mov $0x0,%eax -8010536a: eb 16 jmp 80105382 - return (uchar)*p - (uchar)*q; -8010536c: 8b 45 08 mov 0x8(%ebp),%eax -8010536f: 0f b6 00 movzbl (%eax),%eax -80105372: 0f b6 d0 movzbl %al,%edx -80105375: 8b 45 0c mov 0xc(%ebp),%eax -80105378: 0f b6 00 movzbl (%eax),%eax -8010537b: 0f b6 c0 movzbl %al,%eax -8010537e: 29 c2 sub %eax,%edx -80105380: 89 d0 mov %edx,%eax -} -80105382: 5d pop %ebp -80105383: c3 ret - -80105384 : - -char* -strncpy(char *s, const char *t, int n) -{ -80105384: 55 push %ebp -80105385: 89 e5 mov %esp,%ebp -80105387: 83 ec 10 sub $0x10,%esp - char *os; - - os = s; -8010538a: 8b 45 08 mov 0x8(%ebp),%eax -8010538d: 89 45 fc mov %eax,-0x4(%ebp) - while(n-- > 0 && (*s++ = *t++) != 0) -80105390: 90 nop -80105391: 8b 45 10 mov 0x10(%ebp),%eax -80105394: 8d 50 ff lea -0x1(%eax),%edx -80105397: 89 55 10 mov %edx,0x10(%ebp) -8010539a: 85 c0 test %eax,%eax -8010539c: 7e 1e jle 801053bc -8010539e: 8b 45 08 mov 0x8(%ebp),%eax -801053a1: 8d 50 01 lea 0x1(%eax),%edx -801053a4: 89 55 08 mov %edx,0x8(%ebp) -801053a7: 8b 55 0c mov 0xc(%ebp),%edx -801053aa: 8d 4a 01 lea 0x1(%edx),%ecx -801053ad: 89 4d 0c mov %ecx,0xc(%ebp) -801053b0: 0f b6 12 movzbl (%edx),%edx -801053b3: 88 10 mov %dl,(%eax) -801053b5: 0f b6 00 movzbl (%eax),%eax -801053b8: 84 c0 test %al,%al -801053ba: 75 d5 jne 80105391 - ; - while(n-- > 0) -801053bc: eb 0c jmp 801053ca - *s++ = 0; -801053be: 8b 45 08 mov 0x8(%ebp),%eax -801053c1: 8d 50 01 lea 0x1(%eax),%edx -801053c4: 89 55 08 mov %edx,0x8(%ebp) -801053c7: c6 00 00 movb $0x0,(%eax) - char *os; - - os = s; - while(n-- > 0 && (*s++ = *t++) != 0) - ; - while(n-- > 0) -801053ca: 8b 45 10 mov 0x10(%ebp),%eax -801053cd: 8d 50 ff lea -0x1(%eax),%edx -801053d0: 89 55 10 mov %edx,0x10(%ebp) -801053d3: 85 c0 test %eax,%eax -801053d5: 7f e7 jg 801053be - *s++ = 0; - return os; -801053d7: 8b 45 fc mov -0x4(%ebp),%eax -} -801053da: c9 leave -801053db: c3 ret - -801053dc : - -// Like strncpy but guaranteed to NUL-terminate. -char* -safestrcpy(char *s, const char *t, int n) -{ -801053dc: 55 push %ebp -801053dd: 89 e5 mov %esp,%ebp -801053df: 83 ec 10 sub $0x10,%esp - char *os; - - os = s; -801053e2: 8b 45 08 mov 0x8(%ebp),%eax -801053e5: 89 45 fc mov %eax,-0x4(%ebp) - if(n <= 0) -801053e8: 83 7d 10 00 cmpl $0x0,0x10(%ebp) -801053ec: 7f 05 jg 801053f3 - return os; -801053ee: 8b 45 fc mov -0x4(%ebp),%eax -801053f1: eb 31 jmp 80105424 - while(--n > 0 && (*s++ = *t++) != 0) -801053f3: 83 6d 10 01 subl $0x1,0x10(%ebp) -801053f7: 83 7d 10 00 cmpl $0x0,0x10(%ebp) -801053fb: 7e 1e jle 8010541b -801053fd: 8b 45 08 mov 0x8(%ebp),%eax -80105400: 8d 50 01 lea 0x1(%eax),%edx -80105403: 89 55 08 mov %edx,0x8(%ebp) -80105406: 8b 55 0c mov 0xc(%ebp),%edx -80105409: 8d 4a 01 lea 0x1(%edx),%ecx -8010540c: 89 4d 0c mov %ecx,0xc(%ebp) -8010540f: 0f b6 12 movzbl (%edx),%edx -80105412: 88 10 mov %dl,(%eax) -80105414: 0f b6 00 movzbl (%eax),%eax -80105417: 84 c0 test %al,%al -80105419: 75 d8 jne 801053f3 - ; - *s = 0; -8010541b: 8b 45 08 mov 0x8(%ebp),%eax -8010541e: c6 00 00 movb $0x0,(%eax) - return os; -80105421: 8b 45 fc mov -0x4(%ebp),%eax -} -80105424: c9 leave -80105425: c3 ret - -80105426 : - -int -strlen(const char *s) -{ -80105426: 55 push %ebp -80105427: 89 e5 mov %esp,%ebp -80105429: 83 ec 10 sub $0x10,%esp - int n; - - for(n = 0; s[n]; n++) -8010542c: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) -80105433: eb 04 jmp 80105439 -80105435: 83 45 fc 01 addl $0x1,-0x4(%ebp) -80105439: 8b 55 fc mov -0x4(%ebp),%edx -8010543c: 8b 45 08 mov 0x8(%ebp),%eax -8010543f: 01 d0 add %edx,%eax -80105441: 0f b6 00 movzbl (%eax),%eax -80105444: 84 c0 test %al,%al -80105446: 75 ed jne 80105435 - ; - return n; -80105448: 8b 45 fc mov -0x4(%ebp),%eax -} -8010544b: c9 leave -8010544c: c3 ret - -8010544d : -# Save current register context in old -# and then load register context from new. - -.globl swtch -swtch: - movl 4(%esp), %eax -8010544d: 8b 44 24 04 mov 0x4(%esp),%eax - movl 8(%esp), %edx -80105451: 8b 54 24 08 mov 0x8(%esp),%edx - - # Save old callee-save registers - pushl %ebp -80105455: 55 push %ebp - pushl %ebx -80105456: 53 push %ebx - pushl %esi -80105457: 56 push %esi - pushl %edi -80105458: 57 push %edi - - # Switch stacks - movl %esp, (%eax) -80105459: 89 20 mov %esp,(%eax) - movl %edx, %esp -8010545b: 89 d4 mov %edx,%esp - - # Load new callee-save registers - popl %edi -8010545d: 5f pop %edi - popl %esi -8010545e: 5e pop %esi - popl %ebx -8010545f: 5b pop %ebx - popl %ebp -80105460: 5d pop %ebp - ret -80105461: c3 ret - -80105462 : -// to a saved program counter, and then the first argument. - -// Fetch the int at addr from the current process. -int -fetchint(uint addr, int *ip) -{ -80105462: 55 push %ebp -80105463: 89 e5 mov %esp,%ebp - if(addr >= proc->sz || addr+4 > proc->sz) -80105465: 65 a1 04 00 00 00 mov %gs:0x4,%eax -8010546b: 8b 00 mov (%eax),%eax -8010546d: 3b 45 08 cmp 0x8(%ebp),%eax -80105470: 76 12 jbe 80105484 -80105472: 8b 45 08 mov 0x8(%ebp),%eax -80105475: 8d 50 04 lea 0x4(%eax),%edx -80105478: 65 a1 04 00 00 00 mov %gs:0x4,%eax -8010547e: 8b 00 mov (%eax),%eax -80105480: 39 c2 cmp %eax,%edx -80105482: 76 07 jbe 8010548b - return -1; -80105484: b8 ff ff ff ff mov $0xffffffff,%eax -80105489: eb 0f jmp 8010549a - *ip = *(int*)(addr); -8010548b: 8b 45 08 mov 0x8(%ebp),%eax -8010548e: 8b 10 mov (%eax),%edx -80105490: 8b 45 0c mov 0xc(%ebp),%eax -80105493: 89 10 mov %edx,(%eax) - return 0; -80105495: b8 00 00 00 00 mov $0x0,%eax -} -8010549a: 5d pop %ebp -8010549b: c3 ret - -8010549c : -// Fetch the nul-terminated string at addr from the current process. -// Doesn't actually copy the string - just sets *pp to point at it. -// Returns length of string, not including nul. -int -fetchstr(uint addr, char **pp) -{ -8010549c: 55 push %ebp -8010549d: 89 e5 mov %esp,%ebp -8010549f: 83 ec 10 sub $0x10,%esp - char *s, *ep; - - if(addr >= proc->sz) -801054a2: 65 a1 04 00 00 00 mov %gs:0x4,%eax -801054a8: 8b 00 mov (%eax),%eax -801054aa: 3b 45 08 cmp 0x8(%ebp),%eax -801054ad: 77 07 ja 801054b6 - return -1; -801054af: b8 ff ff ff ff mov $0xffffffff,%eax -801054b4: eb 46 jmp 801054fc - *pp = (char*)addr; -801054b6: 8b 55 08 mov 0x8(%ebp),%edx -801054b9: 8b 45 0c mov 0xc(%ebp),%eax -801054bc: 89 10 mov %edx,(%eax) - ep = (char*)proc->sz; -801054be: 65 a1 04 00 00 00 mov %gs:0x4,%eax -801054c4: 8b 00 mov (%eax),%eax -801054c6: 89 45 f8 mov %eax,-0x8(%ebp) - for(s = *pp; s < ep; s++) -801054c9: 8b 45 0c mov 0xc(%ebp),%eax -801054cc: 8b 00 mov (%eax),%eax -801054ce: 89 45 fc mov %eax,-0x4(%ebp) -801054d1: eb 1c jmp 801054ef - if(*s == 0) -801054d3: 8b 45 fc mov -0x4(%ebp),%eax -801054d6: 0f b6 00 movzbl (%eax),%eax -801054d9: 84 c0 test %al,%al -801054db: 75 0e jne 801054eb - return s - *pp; -801054dd: 8b 55 fc mov -0x4(%ebp),%edx -801054e0: 8b 45 0c mov 0xc(%ebp),%eax -801054e3: 8b 00 mov (%eax),%eax -801054e5: 29 c2 sub %eax,%edx -801054e7: 89 d0 mov %edx,%eax -801054e9: eb 11 jmp 801054fc - - if(addr >= proc->sz) - return -1; - *pp = (char*)addr; - ep = (char*)proc->sz; - for(s = *pp; s < ep; s++) -801054eb: 83 45 fc 01 addl $0x1,-0x4(%ebp) -801054ef: 8b 45 fc mov -0x4(%ebp),%eax -801054f2: 3b 45 f8 cmp -0x8(%ebp),%eax -801054f5: 72 dc jb 801054d3 - if(*s == 0) - return s - *pp; - return -1; -801054f7: b8 ff ff ff ff mov $0xffffffff,%eax -} -801054fc: c9 leave -801054fd: c3 ret - -801054fe : - -// Fetch the nth 32-bit system call argument. -int -argint(int n, int *ip) -{ -801054fe: 55 push %ebp -801054ff: 89 e5 mov %esp,%ebp - return fetchint(proc->tf->esp + 4 + 4*n, ip); -80105501: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80105507: 8b 40 18 mov 0x18(%eax),%eax -8010550a: 8b 40 44 mov 0x44(%eax),%eax -8010550d: 8b 55 08 mov 0x8(%ebp),%edx -80105510: c1 e2 02 shl $0x2,%edx -80105513: 01 d0 add %edx,%eax -80105515: 83 c0 04 add $0x4,%eax -80105518: ff 75 0c pushl 0xc(%ebp) -8010551b: 50 push %eax -8010551c: e8 41 ff ff ff call 80105462 -80105521: 83 c4 08 add $0x8,%esp -} -80105524: c9 leave -80105525: c3 ret - -80105526 : -// Fetch the nth word-sized system call argument as a pointer -// to a block of memory of size n bytes. Check that the pointer -// lies within the process address space. -int -argptr(int n, char **pp, int size) -{ -80105526: 55 push %ebp -80105527: 89 e5 mov %esp,%ebp -80105529: 83 ec 10 sub $0x10,%esp - int i; - - if(argint(n, &i) < 0) -8010552c: 8d 45 fc lea -0x4(%ebp),%eax -8010552f: 50 push %eax -80105530: ff 75 08 pushl 0x8(%ebp) -80105533: e8 c6 ff ff ff call 801054fe -80105538: 83 c4 08 add $0x8,%esp -8010553b: 85 c0 test %eax,%eax -8010553d: 79 07 jns 80105546 - return -1; -8010553f: b8 ff ff ff ff mov $0xffffffff,%eax -80105544: eb 3d jmp 80105583 - if((uint)i >= proc->sz || (uint)i+size > proc->sz) -80105546: 8b 45 fc mov -0x4(%ebp),%eax -80105549: 89 c2 mov %eax,%edx -8010554b: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80105551: 8b 00 mov (%eax),%eax -80105553: 39 c2 cmp %eax,%edx -80105555: 73 16 jae 8010556d -80105557: 8b 45 fc mov -0x4(%ebp),%eax -8010555a: 89 c2 mov %eax,%edx -8010555c: 8b 45 10 mov 0x10(%ebp),%eax -8010555f: 01 c2 add %eax,%edx -80105561: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80105567: 8b 00 mov (%eax),%eax -80105569: 39 c2 cmp %eax,%edx -8010556b: 76 07 jbe 80105574 - return -1; -8010556d: b8 ff ff ff ff mov $0xffffffff,%eax -80105572: eb 0f jmp 80105583 - *pp = (char*)i; -80105574: 8b 45 fc mov -0x4(%ebp),%eax -80105577: 89 c2 mov %eax,%edx -80105579: 8b 45 0c mov 0xc(%ebp),%eax -8010557c: 89 10 mov %edx,(%eax) - return 0; -8010557e: b8 00 00 00 00 mov $0x0,%eax -} -80105583: c9 leave -80105584: c3 ret - -80105585 : -// Check that the pointer is valid and the string is nul-terminated. -// (There is no shared writable memory, so the string can't change -// between this check and being used by the kernel.) -int -argstr(int n, char **pp) -{ -80105585: 55 push %ebp -80105586: 89 e5 mov %esp,%ebp -80105588: 83 ec 10 sub $0x10,%esp - int addr; - if(argint(n, &addr) < 0) -8010558b: 8d 45 fc lea -0x4(%ebp),%eax -8010558e: 50 push %eax -8010558f: ff 75 08 pushl 0x8(%ebp) -80105592: e8 67 ff ff ff call 801054fe -80105597: 83 c4 08 add $0x8,%esp -8010559a: 85 c0 test %eax,%eax -8010559c: 79 07 jns 801055a5 - return -1; -8010559e: b8 ff ff ff ff mov $0xffffffff,%eax -801055a3: eb 0f jmp 801055b4 - return fetchstr(addr, pp); -801055a5: 8b 45 fc mov -0x4(%ebp),%eax -801055a8: ff 75 0c pushl 0xc(%ebp) -801055ab: 50 push %eax -801055ac: e8 eb fe ff ff call 8010549c -801055b1: 83 c4 08 add $0x8,%esp -} -801055b4: c9 leave -801055b5: c3 ret - -801055b6 : -[SYS_close] sys_close, -}; - -void -syscall(void) -{ -801055b6: 55 push %ebp -801055b7: 89 e5 mov %esp,%ebp -801055b9: 53 push %ebx -801055ba: 83 ec 14 sub $0x14,%esp - int num; - - num = proc->tf->eax; -801055bd: 65 a1 04 00 00 00 mov %gs:0x4,%eax -801055c3: 8b 40 18 mov 0x18(%eax),%eax -801055c6: 8b 40 1c mov 0x1c(%eax),%eax -801055c9: 89 45 f4 mov %eax,-0xc(%ebp) - if(num > 0 && num < NELEM(syscalls) && syscalls[num]) { -801055cc: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -801055d0: 7e 30 jle 80105602 -801055d2: 8b 45 f4 mov -0xc(%ebp),%eax -801055d5: 83 f8 15 cmp $0x15,%eax -801055d8: 77 28 ja 80105602 -801055da: 8b 45 f4 mov -0xc(%ebp),%eax -801055dd: 8b 04 85 40 b0 10 80 mov -0x7fef4fc0(,%eax,4),%eax -801055e4: 85 c0 test %eax,%eax -801055e6: 74 1a je 80105602 - proc->tf->eax = syscalls[num](); -801055e8: 65 a1 04 00 00 00 mov %gs:0x4,%eax -801055ee: 8b 58 18 mov 0x18(%eax),%ebx -801055f1: 8b 45 f4 mov -0xc(%ebp),%eax -801055f4: 8b 04 85 40 b0 10 80 mov -0x7fef4fc0(,%eax,4),%eax -801055fb: ff d0 call *%eax -801055fd: 89 43 1c mov %eax,0x1c(%ebx) -80105600: eb 34 jmp 80105636 - } else { - cprintf("%d %s: unknown sys call %d\n", - proc->pid, proc->name, num); -80105602: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80105608: 8d 50 6c lea 0x6c(%eax),%edx -8010560b: 65 a1 04 00 00 00 mov %gs:0x4,%eax - - num = proc->tf->eax; - if(num > 0 && num < NELEM(syscalls) && syscalls[num]) { - proc->tf->eax = syscalls[num](); - } else { - cprintf("%d %s: unknown sys call %d\n", -80105611: 8b 40 10 mov 0x10(%eax),%eax -80105614: ff 75 f4 pushl -0xc(%ebp) -80105617: 52 push %edx -80105618: 50 push %eax -80105619: 68 cb 88 10 80 push $0x801088cb -8010561e: e8 9c ad ff ff call 801003bf -80105623: 83 c4 10 add $0x10,%esp - proc->pid, proc->name, num); - proc->tf->eax = -1; -80105626: 65 a1 04 00 00 00 mov %gs:0x4,%eax -8010562c: 8b 40 18 mov 0x18(%eax),%eax -8010562f: c7 40 1c ff ff ff ff movl $0xffffffff,0x1c(%eax) - } -} -80105636: 8b 5d fc mov -0x4(%ebp),%ebx -80105639: c9 leave -8010563a: c3 ret - -8010563b : - -// Fetch the nth word-sized system call argument as a file descriptor -// and return both the descriptor and the corresponding struct file. -static int -argfd(int n, int *pfd, struct file **pf) -{ -8010563b: 55 push %ebp -8010563c: 89 e5 mov %esp,%ebp -8010563e: 83 ec 18 sub $0x18,%esp - int fd; - struct file *f; - - if(argint(n, &fd) < 0) -80105641: 83 ec 08 sub $0x8,%esp -80105644: 8d 45 f0 lea -0x10(%ebp),%eax -80105647: 50 push %eax -80105648: ff 75 08 pushl 0x8(%ebp) -8010564b: e8 ae fe ff ff call 801054fe -80105650: 83 c4 10 add $0x10,%esp -80105653: 85 c0 test %eax,%eax -80105655: 79 07 jns 8010565e - return -1; -80105657: b8 ff ff ff ff mov $0xffffffff,%eax -8010565c: eb 50 jmp 801056ae - if(fd < 0 || fd >= NOFILE || (f=proc->ofile[fd]) == 0) -8010565e: 8b 45 f0 mov -0x10(%ebp),%eax -80105661: 85 c0 test %eax,%eax -80105663: 78 21 js 80105686 -80105665: 8b 45 f0 mov -0x10(%ebp),%eax -80105668: 83 f8 0f cmp $0xf,%eax -8010566b: 7f 19 jg 80105686 -8010566d: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80105673: 8b 55 f0 mov -0x10(%ebp),%edx -80105676: 83 c2 08 add $0x8,%edx -80105679: 8b 44 90 08 mov 0x8(%eax,%edx,4),%eax -8010567d: 89 45 f4 mov %eax,-0xc(%ebp) -80105680: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -80105684: 75 07 jne 8010568d - return -1; -80105686: b8 ff ff ff ff mov $0xffffffff,%eax -8010568b: eb 21 jmp 801056ae - if(pfd) -8010568d: 83 7d 0c 00 cmpl $0x0,0xc(%ebp) -80105691: 74 08 je 8010569b - *pfd = fd; -80105693: 8b 55 f0 mov -0x10(%ebp),%edx -80105696: 8b 45 0c mov 0xc(%ebp),%eax -80105699: 89 10 mov %edx,(%eax) - if(pf) -8010569b: 83 7d 10 00 cmpl $0x0,0x10(%ebp) -8010569f: 74 08 je 801056a9 - *pf = f; -801056a1: 8b 45 10 mov 0x10(%ebp),%eax -801056a4: 8b 55 f4 mov -0xc(%ebp),%edx -801056a7: 89 10 mov %edx,(%eax) - return 0; -801056a9: b8 00 00 00 00 mov $0x0,%eax -} -801056ae: c9 leave -801056af: c3 ret - -801056b0 : - -// Allocate a file descriptor for the given file. -// Takes over file reference from caller on success. -static int -fdalloc(struct file *f) -{ -801056b0: 55 push %ebp -801056b1: 89 e5 mov %esp,%ebp -801056b3: 83 ec 10 sub $0x10,%esp - int fd; - - for(fd = 0; fd < NOFILE; fd++){ -801056b6: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) -801056bd: eb 30 jmp 801056ef - if(proc->ofile[fd] == 0){ -801056bf: 65 a1 04 00 00 00 mov %gs:0x4,%eax -801056c5: 8b 55 fc mov -0x4(%ebp),%edx -801056c8: 83 c2 08 add $0x8,%edx -801056cb: 8b 44 90 08 mov 0x8(%eax,%edx,4),%eax -801056cf: 85 c0 test %eax,%eax -801056d1: 75 18 jne 801056eb - proc->ofile[fd] = f; -801056d3: 65 a1 04 00 00 00 mov %gs:0x4,%eax -801056d9: 8b 55 fc mov -0x4(%ebp),%edx -801056dc: 8d 4a 08 lea 0x8(%edx),%ecx -801056df: 8b 55 08 mov 0x8(%ebp),%edx -801056e2: 89 54 88 08 mov %edx,0x8(%eax,%ecx,4) - return fd; -801056e6: 8b 45 fc mov -0x4(%ebp),%eax -801056e9: eb 0f jmp 801056fa -static int -fdalloc(struct file *f) -{ - int fd; - - for(fd = 0; fd < NOFILE; fd++){ -801056eb: 83 45 fc 01 addl $0x1,-0x4(%ebp) -801056ef: 83 7d fc 0f cmpl $0xf,-0x4(%ebp) -801056f3: 7e ca jle 801056bf - if(proc->ofile[fd] == 0){ - proc->ofile[fd] = f; - return fd; - } - } - return -1; -801056f5: b8 ff ff ff ff mov $0xffffffff,%eax -} -801056fa: c9 leave -801056fb: c3 ret - -801056fc : - -int -sys_dup(void) -{ -801056fc: 55 push %ebp -801056fd: 89 e5 mov %esp,%ebp -801056ff: 83 ec 18 sub $0x18,%esp - struct file *f; - int fd; - - if(argfd(0, 0, &f) < 0) -80105702: 83 ec 04 sub $0x4,%esp -80105705: 8d 45 f0 lea -0x10(%ebp),%eax -80105708: 50 push %eax -80105709: 6a 00 push $0x0 -8010570b: 6a 00 push $0x0 -8010570d: e8 29 ff ff ff call 8010563b -80105712: 83 c4 10 add $0x10,%esp -80105715: 85 c0 test %eax,%eax -80105717: 79 07 jns 80105720 - return -1; -80105719: b8 ff ff ff ff mov $0xffffffff,%eax -8010571e: eb 31 jmp 80105751 - if((fd=fdalloc(f)) < 0) -80105720: 8b 45 f0 mov -0x10(%ebp),%eax -80105723: 83 ec 0c sub $0xc,%esp -80105726: 50 push %eax -80105727: e8 84 ff ff ff call 801056b0 -8010572c: 83 c4 10 add $0x10,%esp -8010572f: 89 45 f4 mov %eax,-0xc(%ebp) -80105732: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -80105736: 79 07 jns 8010573f - return -1; -80105738: b8 ff ff ff ff mov $0xffffffff,%eax -8010573d: eb 12 jmp 80105751 - filedup(f); -8010573f: 8b 45 f0 mov -0x10(%ebp),%eax -80105742: 83 ec 0c sub $0xc,%esp -80105745: 50 push %eax -80105746: e8 71 b8 ff ff call 80100fbc -8010574b: 83 c4 10 add $0x10,%esp - return fd; -8010574e: 8b 45 f4 mov -0xc(%ebp),%eax -} -80105751: c9 leave -80105752: c3 ret - -80105753 : - -int -sys_read(void) -{ -80105753: 55 push %ebp -80105754: 89 e5 mov %esp,%ebp -80105756: 83 ec 18 sub $0x18,%esp - struct file *f; - int n; - char *p; - - if(argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argptr(1, &p, n) < 0) -80105759: 83 ec 04 sub $0x4,%esp -8010575c: 8d 45 f4 lea -0xc(%ebp),%eax -8010575f: 50 push %eax -80105760: 6a 00 push $0x0 -80105762: 6a 00 push $0x0 -80105764: e8 d2 fe ff ff call 8010563b -80105769: 83 c4 10 add $0x10,%esp -8010576c: 85 c0 test %eax,%eax -8010576e: 78 2e js 8010579e -80105770: 83 ec 08 sub $0x8,%esp -80105773: 8d 45 f0 lea -0x10(%ebp),%eax -80105776: 50 push %eax -80105777: 6a 02 push $0x2 -80105779: e8 80 fd ff ff call 801054fe -8010577e: 83 c4 10 add $0x10,%esp -80105781: 85 c0 test %eax,%eax -80105783: 78 19 js 8010579e -80105785: 8b 45 f0 mov -0x10(%ebp),%eax -80105788: 83 ec 04 sub $0x4,%esp -8010578b: 50 push %eax -8010578c: 8d 45 ec lea -0x14(%ebp),%eax -8010578f: 50 push %eax -80105790: 6a 01 push $0x1 -80105792: e8 8f fd ff ff call 80105526 -80105797: 83 c4 10 add $0x10,%esp -8010579a: 85 c0 test %eax,%eax -8010579c: 79 07 jns 801057a5 - return -1; -8010579e: b8 ff ff ff ff mov $0xffffffff,%eax -801057a3: eb 17 jmp 801057bc - return fileread(f, p, n); -801057a5: 8b 4d f0 mov -0x10(%ebp),%ecx -801057a8: 8b 55 ec mov -0x14(%ebp),%edx -801057ab: 8b 45 f4 mov -0xc(%ebp),%eax -801057ae: 83 ec 04 sub $0x4,%esp -801057b1: 51 push %ecx -801057b2: 52 push %edx -801057b3: 50 push %eax -801057b4: e8 93 b9 ff ff call 8010114c -801057b9: 83 c4 10 add $0x10,%esp -} -801057bc: c9 leave -801057bd: c3 ret - -801057be : - -int -sys_write(void) -{ -801057be: 55 push %ebp -801057bf: 89 e5 mov %esp,%ebp -801057c1: 83 ec 18 sub $0x18,%esp - struct file *f; - int n; - char *p; - - if(argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argptr(1, &p, n) < 0) -801057c4: 83 ec 04 sub $0x4,%esp -801057c7: 8d 45 f4 lea -0xc(%ebp),%eax -801057ca: 50 push %eax -801057cb: 6a 00 push $0x0 -801057cd: 6a 00 push $0x0 -801057cf: e8 67 fe ff ff call 8010563b -801057d4: 83 c4 10 add $0x10,%esp -801057d7: 85 c0 test %eax,%eax -801057d9: 78 2e js 80105809 -801057db: 83 ec 08 sub $0x8,%esp -801057de: 8d 45 f0 lea -0x10(%ebp),%eax -801057e1: 50 push %eax -801057e2: 6a 02 push $0x2 -801057e4: e8 15 fd ff ff call 801054fe -801057e9: 83 c4 10 add $0x10,%esp -801057ec: 85 c0 test %eax,%eax -801057ee: 78 19 js 80105809 -801057f0: 8b 45 f0 mov -0x10(%ebp),%eax -801057f3: 83 ec 04 sub $0x4,%esp -801057f6: 50 push %eax -801057f7: 8d 45 ec lea -0x14(%ebp),%eax -801057fa: 50 push %eax -801057fb: 6a 01 push $0x1 -801057fd: e8 24 fd ff ff call 80105526 -80105802: 83 c4 10 add $0x10,%esp -80105805: 85 c0 test %eax,%eax -80105807: 79 07 jns 80105810 - return -1; -80105809: b8 ff ff ff ff mov $0xffffffff,%eax -8010580e: eb 17 jmp 80105827 - return filewrite(f, p, n); -80105810: 8b 4d f0 mov -0x10(%ebp),%ecx -80105813: 8b 55 ec mov -0x14(%ebp),%edx -80105816: 8b 45 f4 mov -0xc(%ebp),%eax -80105819: 83 ec 04 sub $0x4,%esp -8010581c: 51 push %ecx -8010581d: 52 push %edx -8010581e: 50 push %eax -8010581f: e8 e0 b9 ff ff call 80101204 -80105824: 83 c4 10 add $0x10,%esp -} -80105827: c9 leave -80105828: c3 ret - -80105829 : - -int -sys_close(void) -{ -80105829: 55 push %ebp -8010582a: 89 e5 mov %esp,%ebp -8010582c: 83 ec 18 sub $0x18,%esp - int fd; - struct file *f; - - if(argfd(0, &fd, &f) < 0) -8010582f: 83 ec 04 sub $0x4,%esp -80105832: 8d 45 f0 lea -0x10(%ebp),%eax -80105835: 50 push %eax -80105836: 8d 45 f4 lea -0xc(%ebp),%eax -80105839: 50 push %eax -8010583a: 6a 00 push $0x0 -8010583c: e8 fa fd ff ff call 8010563b -80105841: 83 c4 10 add $0x10,%esp -80105844: 85 c0 test %eax,%eax -80105846: 79 07 jns 8010584f - return -1; -80105848: b8 ff ff ff ff mov $0xffffffff,%eax -8010584d: eb 28 jmp 80105877 - proc->ofile[fd] = 0; -8010584f: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80105855: 8b 55 f4 mov -0xc(%ebp),%edx -80105858: 83 c2 08 add $0x8,%edx -8010585b: c7 44 90 08 00 00 00 movl $0x0,0x8(%eax,%edx,4) -80105862: 00 - fileclose(f); -80105863: 8b 45 f0 mov -0x10(%ebp),%eax -80105866: 83 ec 0c sub $0xc,%esp -80105869: 50 push %eax -8010586a: e8 9e b7 ff ff call 8010100d -8010586f: 83 c4 10 add $0x10,%esp - return 0; -80105872: b8 00 00 00 00 mov $0x0,%eax -} -80105877: c9 leave -80105878: c3 ret - -80105879 : - -int -sys_fstat(void) -{ -80105879: 55 push %ebp -8010587a: 89 e5 mov %esp,%ebp -8010587c: 83 ec 18 sub $0x18,%esp - struct file *f; - struct stat *st; - - if(argfd(0, 0, &f) < 0 || argptr(1, (void*)&st, sizeof(*st)) < 0) -8010587f: 83 ec 04 sub $0x4,%esp -80105882: 8d 45 f4 lea -0xc(%ebp),%eax -80105885: 50 push %eax -80105886: 6a 00 push $0x0 -80105888: 6a 00 push $0x0 -8010588a: e8 ac fd ff ff call 8010563b -8010588f: 83 c4 10 add $0x10,%esp -80105892: 85 c0 test %eax,%eax -80105894: 78 17 js 801058ad -80105896: 83 ec 04 sub $0x4,%esp -80105899: 6a 14 push $0x14 -8010589b: 8d 45 f0 lea -0x10(%ebp),%eax -8010589e: 50 push %eax -8010589f: 6a 01 push $0x1 -801058a1: e8 80 fc ff ff call 80105526 -801058a6: 83 c4 10 add $0x10,%esp -801058a9: 85 c0 test %eax,%eax -801058ab: 79 07 jns 801058b4 - return -1; -801058ad: b8 ff ff ff ff mov $0xffffffff,%eax -801058b2: eb 13 jmp 801058c7 - return filestat(f, st); -801058b4: 8b 55 f0 mov -0x10(%ebp),%edx -801058b7: 8b 45 f4 mov -0xc(%ebp),%eax -801058ba: 83 ec 08 sub $0x8,%esp -801058bd: 52 push %edx -801058be: 50 push %eax -801058bf: e8 31 b8 ff ff call 801010f5 -801058c4: 83 c4 10 add $0x10,%esp -} -801058c7: c9 leave -801058c8: c3 ret - -801058c9 : - -// Create the path new as a link to the same inode as old. -int -sys_link(void) -{ -801058c9: 55 push %ebp -801058ca: 89 e5 mov %esp,%ebp -801058cc: 83 ec 28 sub $0x28,%esp - char name[DIRSIZ], *new, *old; - struct inode *dp, *ip; - - if(argstr(0, &old) < 0 || argstr(1, &new) < 0) -801058cf: 83 ec 08 sub $0x8,%esp -801058d2: 8d 45 d8 lea -0x28(%ebp),%eax -801058d5: 50 push %eax -801058d6: 6a 00 push $0x0 -801058d8: e8 a8 fc ff ff call 80105585 -801058dd: 83 c4 10 add $0x10,%esp -801058e0: 85 c0 test %eax,%eax -801058e2: 78 15 js 801058f9 -801058e4: 83 ec 08 sub $0x8,%esp -801058e7: 8d 45 dc lea -0x24(%ebp),%eax -801058ea: 50 push %eax -801058eb: 6a 01 push $0x1 -801058ed: e8 93 fc ff ff call 80105585 -801058f2: 83 c4 10 add $0x10,%esp -801058f5: 85 c0 test %eax,%eax -801058f7: 79 0a jns 80105903 - return -1; -801058f9: b8 ff ff ff ff mov $0xffffffff,%eax -801058fe: e9 69 01 00 00 jmp 80105a6c - - begin_op(); -80105903: e8 da db ff ff call 801034e2 - if((ip = namei(old)) == 0){ -80105908: 8b 45 d8 mov -0x28(%ebp),%eax -8010590b: 83 ec 0c sub $0xc,%esp -8010590e: 50 push %eax -8010590f: e8 c5 cb ff ff call 801024d9 -80105914: 83 c4 10 add $0x10,%esp -80105917: 89 45 f4 mov %eax,-0xc(%ebp) -8010591a: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -8010591e: 75 0f jne 8010592f - end_op(); -80105920: e8 4b dc ff ff call 80103570 - return -1; -80105925: b8 ff ff ff ff mov $0xffffffff,%eax -8010592a: e9 3d 01 00 00 jmp 80105a6c - } - - ilock(ip); -8010592f: 83 ec 0c sub $0xc,%esp -80105932: ff 75 f4 pushl -0xc(%ebp) -80105935: e8 e4 bf ff ff call 8010191e -8010593a: 83 c4 10 add $0x10,%esp - if(ip->type == T_DIR){ -8010593d: 8b 45 f4 mov -0xc(%ebp),%eax -80105940: 0f b7 40 10 movzwl 0x10(%eax),%eax -80105944: 66 83 f8 01 cmp $0x1,%ax -80105948: 75 1d jne 80105967 - iunlockput(ip); -8010594a: 83 ec 0c sub $0xc,%esp -8010594d: ff 75 f4 pushl -0xc(%ebp) -80105950: e8 86 c2 ff ff call 80101bdb -80105955: 83 c4 10 add $0x10,%esp - end_op(); -80105958: e8 13 dc ff ff call 80103570 - return -1; -8010595d: b8 ff ff ff ff mov $0xffffffff,%eax -80105962: e9 05 01 00 00 jmp 80105a6c - } - - ip->nlink++; -80105967: 8b 45 f4 mov -0xc(%ebp),%eax -8010596a: 0f b7 40 16 movzwl 0x16(%eax),%eax -8010596e: 83 c0 01 add $0x1,%eax -80105971: 89 c2 mov %eax,%edx -80105973: 8b 45 f4 mov -0xc(%ebp),%eax -80105976: 66 89 50 16 mov %dx,0x16(%eax) - iupdate(ip); -8010597a: 83 ec 0c sub $0xc,%esp -8010597d: ff 75 f4 pushl -0xc(%ebp) -80105980: e8 c0 bd ff ff call 80101745 -80105985: 83 c4 10 add $0x10,%esp - iunlock(ip); -80105988: 83 ec 0c sub $0xc,%esp -8010598b: ff 75 f4 pushl -0xc(%ebp) -8010598e: e8 e8 c0 ff ff call 80101a7b -80105993: 83 c4 10 add $0x10,%esp - - if((dp = nameiparent(new, name)) == 0) -80105996: 8b 45 dc mov -0x24(%ebp),%eax -80105999: 83 ec 08 sub $0x8,%esp -8010599c: 8d 55 e2 lea -0x1e(%ebp),%edx -8010599f: 52 push %edx -801059a0: 50 push %eax -801059a1: e8 4f cb ff ff call 801024f5 -801059a6: 83 c4 10 add $0x10,%esp -801059a9: 89 45 f0 mov %eax,-0x10(%ebp) -801059ac: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) -801059b0: 75 02 jne 801059b4 - goto bad; -801059b2: eb 71 jmp 80105a25 - ilock(dp); -801059b4: 83 ec 0c sub $0xc,%esp -801059b7: ff 75 f0 pushl -0x10(%ebp) -801059ba: e8 5f bf ff ff call 8010191e -801059bf: 83 c4 10 add $0x10,%esp - if(dp->dev != ip->dev || dirlink(dp, name, ip->inum) < 0){ -801059c2: 8b 45 f0 mov -0x10(%ebp),%eax -801059c5: 8b 10 mov (%eax),%edx -801059c7: 8b 45 f4 mov -0xc(%ebp),%eax -801059ca: 8b 00 mov (%eax),%eax -801059cc: 39 c2 cmp %eax,%edx -801059ce: 75 1d jne 801059ed -801059d0: 8b 45 f4 mov -0xc(%ebp),%eax -801059d3: 8b 40 04 mov 0x4(%eax),%eax -801059d6: 83 ec 04 sub $0x4,%esp -801059d9: 50 push %eax -801059da: 8d 45 e2 lea -0x1e(%ebp),%eax -801059dd: 50 push %eax -801059de: ff 75 f0 pushl -0x10(%ebp) -801059e1: e8 5b c8 ff ff call 80102241 -801059e6: 83 c4 10 add $0x10,%esp -801059e9: 85 c0 test %eax,%eax -801059eb: 79 10 jns 801059fd - iunlockput(dp); -801059ed: 83 ec 0c sub $0xc,%esp -801059f0: ff 75 f0 pushl -0x10(%ebp) -801059f3: e8 e3 c1 ff ff call 80101bdb -801059f8: 83 c4 10 add $0x10,%esp - goto bad; -801059fb: eb 28 jmp 80105a25 - } - iunlockput(dp); -801059fd: 83 ec 0c sub $0xc,%esp -80105a00: ff 75 f0 pushl -0x10(%ebp) -80105a03: e8 d3 c1 ff ff call 80101bdb -80105a08: 83 c4 10 add $0x10,%esp - iput(ip); -80105a0b: 83 ec 0c sub $0xc,%esp -80105a0e: ff 75 f4 pushl -0xc(%ebp) -80105a11: e8 d6 c0 ff ff call 80101aec -80105a16: 83 c4 10 add $0x10,%esp - - end_op(); -80105a19: e8 52 db ff ff call 80103570 - - return 0; -80105a1e: b8 00 00 00 00 mov $0x0,%eax -80105a23: eb 47 jmp 80105a6c - -bad: - ilock(ip); -80105a25: 83 ec 0c sub $0xc,%esp -80105a28: ff 75 f4 pushl -0xc(%ebp) -80105a2b: e8 ee be ff ff call 8010191e -80105a30: 83 c4 10 add $0x10,%esp - ip->nlink--; -80105a33: 8b 45 f4 mov -0xc(%ebp),%eax -80105a36: 0f b7 40 16 movzwl 0x16(%eax),%eax -80105a3a: 83 e8 01 sub $0x1,%eax -80105a3d: 89 c2 mov %eax,%edx -80105a3f: 8b 45 f4 mov -0xc(%ebp),%eax -80105a42: 66 89 50 16 mov %dx,0x16(%eax) - iupdate(ip); -80105a46: 83 ec 0c sub $0xc,%esp -80105a49: ff 75 f4 pushl -0xc(%ebp) -80105a4c: e8 f4 bc ff ff call 80101745 -80105a51: 83 c4 10 add $0x10,%esp - iunlockput(ip); -80105a54: 83 ec 0c sub $0xc,%esp -80105a57: ff 75 f4 pushl -0xc(%ebp) -80105a5a: e8 7c c1 ff ff call 80101bdb -80105a5f: 83 c4 10 add $0x10,%esp - end_op(); -80105a62: e8 09 db ff ff call 80103570 - return -1; -80105a67: b8 ff ff ff ff mov $0xffffffff,%eax -} -80105a6c: c9 leave -80105a6d: c3 ret - -80105a6e : - -// Is the directory dp empty except for "." and ".." ? -static int -isdirempty(struct inode *dp) -{ -80105a6e: 55 push %ebp -80105a6f: 89 e5 mov %esp,%ebp -80105a71: 83 ec 28 sub $0x28,%esp - int off; - struct dirent de; - - for(off=2*sizeof(de); offsize; off+=sizeof(de)){ -80105a74: c7 45 f4 20 00 00 00 movl $0x20,-0xc(%ebp) -80105a7b: eb 40 jmp 80105abd - if(readi(dp, (char*)&de, off, sizeof(de)) != sizeof(de)) -80105a7d: 8b 45 f4 mov -0xc(%ebp),%eax -80105a80: 6a 10 push $0x10 -80105a82: 50 push %eax -80105a83: 8d 45 e4 lea -0x1c(%ebp),%eax -80105a86: 50 push %eax -80105a87: ff 75 08 pushl 0x8(%ebp) -80105a8a: e8 f7 c3 ff ff call 80101e86 -80105a8f: 83 c4 10 add $0x10,%esp -80105a92: 83 f8 10 cmp $0x10,%eax -80105a95: 74 0d je 80105aa4 - panic("isdirempty: readi"); -80105a97: 83 ec 0c sub $0xc,%esp -80105a9a: 68 e7 88 10 80 push $0x801088e7 -80105a9f: e8 b8 aa ff ff call 8010055c - if(de.inum != 0) -80105aa4: 0f b7 45 e4 movzwl -0x1c(%ebp),%eax -80105aa8: 66 85 c0 test %ax,%ax -80105aab: 74 07 je 80105ab4 - return 0; -80105aad: b8 00 00 00 00 mov $0x0,%eax -80105ab2: eb 1b jmp 80105acf -isdirempty(struct inode *dp) -{ - int off; - struct dirent de; - - for(off=2*sizeof(de); offsize; off+=sizeof(de)){ -80105ab4: 8b 45 f4 mov -0xc(%ebp),%eax -80105ab7: 83 c0 10 add $0x10,%eax -80105aba: 89 45 f4 mov %eax,-0xc(%ebp) -80105abd: 8b 55 f4 mov -0xc(%ebp),%edx -80105ac0: 8b 45 08 mov 0x8(%ebp),%eax -80105ac3: 8b 40 18 mov 0x18(%eax),%eax -80105ac6: 39 c2 cmp %eax,%edx -80105ac8: 72 b3 jb 80105a7d - if(readi(dp, (char*)&de, off, sizeof(de)) != sizeof(de)) - panic("isdirempty: readi"); - if(de.inum != 0) - return 0; - } - return 1; -80105aca: b8 01 00 00 00 mov $0x1,%eax -} -80105acf: c9 leave -80105ad0: c3 ret - -80105ad1 : - -//PAGEBREAK! -int -sys_unlink(void) -{ -80105ad1: 55 push %ebp -80105ad2: 89 e5 mov %esp,%ebp -80105ad4: 83 ec 38 sub $0x38,%esp - struct inode *ip, *dp; - struct dirent de; - char name[DIRSIZ], *path; - uint off; - - if(argstr(0, &path) < 0) -80105ad7: 83 ec 08 sub $0x8,%esp -80105ada: 8d 45 cc lea -0x34(%ebp),%eax -80105add: 50 push %eax -80105ade: 6a 00 push $0x0 -80105ae0: e8 a0 fa ff ff call 80105585 -80105ae5: 83 c4 10 add $0x10,%esp -80105ae8: 85 c0 test %eax,%eax -80105aea: 79 0a jns 80105af6 - return -1; -80105aec: b8 ff ff ff ff mov $0xffffffff,%eax -80105af1: e9 bc 01 00 00 jmp 80105cb2 - - begin_op(); -80105af6: e8 e7 d9 ff ff call 801034e2 - if((dp = nameiparent(path, name)) == 0){ -80105afb: 8b 45 cc mov -0x34(%ebp),%eax -80105afe: 83 ec 08 sub $0x8,%esp -80105b01: 8d 55 d2 lea -0x2e(%ebp),%edx -80105b04: 52 push %edx -80105b05: 50 push %eax -80105b06: e8 ea c9 ff ff call 801024f5 -80105b0b: 83 c4 10 add $0x10,%esp -80105b0e: 89 45 f4 mov %eax,-0xc(%ebp) -80105b11: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -80105b15: 75 0f jne 80105b26 - end_op(); -80105b17: e8 54 da ff ff call 80103570 - return -1; -80105b1c: b8 ff ff ff ff mov $0xffffffff,%eax -80105b21: e9 8c 01 00 00 jmp 80105cb2 - } - - ilock(dp); -80105b26: 83 ec 0c sub $0xc,%esp -80105b29: ff 75 f4 pushl -0xc(%ebp) -80105b2c: e8 ed bd ff ff call 8010191e -80105b31: 83 c4 10 add $0x10,%esp - - // Cannot unlink "." or "..". - if(namecmp(name, ".") == 0 || namecmp(name, "..") == 0) -80105b34: 83 ec 08 sub $0x8,%esp -80105b37: 68 f9 88 10 80 push $0x801088f9 -80105b3c: 8d 45 d2 lea -0x2e(%ebp),%eax -80105b3f: 50 push %eax -80105b40: e8 26 c6 ff ff call 8010216b -80105b45: 83 c4 10 add $0x10,%esp -80105b48: 85 c0 test %eax,%eax -80105b4a: 0f 84 4a 01 00 00 je 80105c9a -80105b50: 83 ec 08 sub $0x8,%esp -80105b53: 68 fb 88 10 80 push $0x801088fb -80105b58: 8d 45 d2 lea -0x2e(%ebp),%eax -80105b5b: 50 push %eax -80105b5c: e8 0a c6 ff ff call 8010216b -80105b61: 83 c4 10 add $0x10,%esp -80105b64: 85 c0 test %eax,%eax -80105b66: 0f 84 2e 01 00 00 je 80105c9a - goto bad; - - if((ip = dirlookup(dp, name, &off)) == 0) -80105b6c: 83 ec 04 sub $0x4,%esp -80105b6f: 8d 45 c8 lea -0x38(%ebp),%eax -80105b72: 50 push %eax -80105b73: 8d 45 d2 lea -0x2e(%ebp),%eax -80105b76: 50 push %eax -80105b77: ff 75 f4 pushl -0xc(%ebp) -80105b7a: e8 07 c6 ff ff call 80102186 -80105b7f: 83 c4 10 add $0x10,%esp -80105b82: 89 45 f0 mov %eax,-0x10(%ebp) -80105b85: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) -80105b89: 75 05 jne 80105b90 - goto bad; -80105b8b: e9 0a 01 00 00 jmp 80105c9a - ilock(ip); -80105b90: 83 ec 0c sub $0xc,%esp -80105b93: ff 75 f0 pushl -0x10(%ebp) -80105b96: e8 83 bd ff ff call 8010191e -80105b9b: 83 c4 10 add $0x10,%esp - - if(ip->nlink < 1) -80105b9e: 8b 45 f0 mov -0x10(%ebp),%eax -80105ba1: 0f b7 40 16 movzwl 0x16(%eax),%eax -80105ba5: 66 85 c0 test %ax,%ax -80105ba8: 7f 0d jg 80105bb7 - panic("unlink: nlink < 1"); -80105baa: 83 ec 0c sub $0xc,%esp -80105bad: 68 fe 88 10 80 push $0x801088fe -80105bb2: e8 a5 a9 ff ff call 8010055c - if(ip->type == T_DIR && !isdirempty(ip)){ -80105bb7: 8b 45 f0 mov -0x10(%ebp),%eax -80105bba: 0f b7 40 10 movzwl 0x10(%eax),%eax -80105bbe: 66 83 f8 01 cmp $0x1,%ax -80105bc2: 75 25 jne 80105be9 -80105bc4: 83 ec 0c sub $0xc,%esp -80105bc7: ff 75 f0 pushl -0x10(%ebp) -80105bca: e8 9f fe ff ff call 80105a6e -80105bcf: 83 c4 10 add $0x10,%esp -80105bd2: 85 c0 test %eax,%eax -80105bd4: 75 13 jne 80105be9 - iunlockput(ip); -80105bd6: 83 ec 0c sub $0xc,%esp -80105bd9: ff 75 f0 pushl -0x10(%ebp) -80105bdc: e8 fa bf ff ff call 80101bdb -80105be1: 83 c4 10 add $0x10,%esp - goto bad; -80105be4: e9 b1 00 00 00 jmp 80105c9a - } - - memset(&de, 0, sizeof(de)); -80105be9: 83 ec 04 sub $0x4,%esp -80105bec: 6a 10 push $0x10 -80105bee: 6a 00 push $0x0 -80105bf0: 8d 45 e0 lea -0x20(%ebp),%eax -80105bf3: 50 push %eax -80105bf4: e8 de f5 ff ff call 801051d7 -80105bf9: 83 c4 10 add $0x10,%esp - if(writei(dp, (char*)&de, off, sizeof(de)) != sizeof(de)) -80105bfc: 8b 45 c8 mov -0x38(%ebp),%eax -80105bff: 6a 10 push $0x10 -80105c01: 50 push %eax -80105c02: 8d 45 e0 lea -0x20(%ebp),%eax -80105c05: 50 push %eax -80105c06: ff 75 f4 pushl -0xc(%ebp) -80105c09: e8 d2 c3 ff ff call 80101fe0 -80105c0e: 83 c4 10 add $0x10,%esp -80105c11: 83 f8 10 cmp $0x10,%eax -80105c14: 74 0d je 80105c23 - panic("unlink: writei"); -80105c16: 83 ec 0c sub $0xc,%esp -80105c19: 68 10 89 10 80 push $0x80108910 -80105c1e: e8 39 a9 ff ff call 8010055c - if(ip->type == T_DIR){ -80105c23: 8b 45 f0 mov -0x10(%ebp),%eax -80105c26: 0f b7 40 10 movzwl 0x10(%eax),%eax -80105c2a: 66 83 f8 01 cmp $0x1,%ax -80105c2e: 75 21 jne 80105c51 - dp->nlink--; -80105c30: 8b 45 f4 mov -0xc(%ebp),%eax -80105c33: 0f b7 40 16 movzwl 0x16(%eax),%eax -80105c37: 83 e8 01 sub $0x1,%eax -80105c3a: 89 c2 mov %eax,%edx -80105c3c: 8b 45 f4 mov -0xc(%ebp),%eax -80105c3f: 66 89 50 16 mov %dx,0x16(%eax) - iupdate(dp); -80105c43: 83 ec 0c sub $0xc,%esp -80105c46: ff 75 f4 pushl -0xc(%ebp) -80105c49: e8 f7 ba ff ff call 80101745 -80105c4e: 83 c4 10 add $0x10,%esp - } - iunlockput(dp); -80105c51: 83 ec 0c sub $0xc,%esp -80105c54: ff 75 f4 pushl -0xc(%ebp) -80105c57: e8 7f bf ff ff call 80101bdb -80105c5c: 83 c4 10 add $0x10,%esp - - ip->nlink--; -80105c5f: 8b 45 f0 mov -0x10(%ebp),%eax -80105c62: 0f b7 40 16 movzwl 0x16(%eax),%eax -80105c66: 83 e8 01 sub $0x1,%eax -80105c69: 89 c2 mov %eax,%edx -80105c6b: 8b 45 f0 mov -0x10(%ebp),%eax -80105c6e: 66 89 50 16 mov %dx,0x16(%eax) - iupdate(ip); -80105c72: 83 ec 0c sub $0xc,%esp -80105c75: ff 75 f0 pushl -0x10(%ebp) -80105c78: e8 c8 ba ff ff call 80101745 -80105c7d: 83 c4 10 add $0x10,%esp - iunlockput(ip); -80105c80: 83 ec 0c sub $0xc,%esp -80105c83: ff 75 f0 pushl -0x10(%ebp) -80105c86: e8 50 bf ff ff call 80101bdb -80105c8b: 83 c4 10 add $0x10,%esp - - end_op(); -80105c8e: e8 dd d8 ff ff call 80103570 - - return 0; -80105c93: b8 00 00 00 00 mov $0x0,%eax -80105c98: eb 18 jmp 80105cb2 - -bad: - iunlockput(dp); -80105c9a: 83 ec 0c sub $0xc,%esp -80105c9d: ff 75 f4 pushl -0xc(%ebp) -80105ca0: e8 36 bf ff ff call 80101bdb -80105ca5: 83 c4 10 add $0x10,%esp - end_op(); -80105ca8: e8 c3 d8 ff ff call 80103570 - return -1; -80105cad: b8 ff ff ff ff mov $0xffffffff,%eax -} -80105cb2: c9 leave -80105cb3: c3 ret - -80105cb4 : - -static struct inode* -create(char *path, short type, short major, short minor) -{ -80105cb4: 55 push %ebp -80105cb5: 89 e5 mov %esp,%ebp -80105cb7: 83 ec 38 sub $0x38,%esp -80105cba: 8b 4d 0c mov 0xc(%ebp),%ecx -80105cbd: 8b 55 10 mov 0x10(%ebp),%edx -80105cc0: 8b 45 14 mov 0x14(%ebp),%eax -80105cc3: 66 89 4d d4 mov %cx,-0x2c(%ebp) -80105cc7: 66 89 55 d0 mov %dx,-0x30(%ebp) -80105ccb: 66 89 45 cc mov %ax,-0x34(%ebp) - uint off; - struct inode *ip, *dp; - char name[DIRSIZ]; - - if((dp = nameiparent(path, name)) == 0) -80105ccf: 83 ec 08 sub $0x8,%esp -80105cd2: 8d 45 de lea -0x22(%ebp),%eax -80105cd5: 50 push %eax -80105cd6: ff 75 08 pushl 0x8(%ebp) -80105cd9: e8 17 c8 ff ff call 801024f5 -80105cde: 83 c4 10 add $0x10,%esp -80105ce1: 89 45 f4 mov %eax,-0xc(%ebp) -80105ce4: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -80105ce8: 75 0a jne 80105cf4 - return 0; -80105cea: b8 00 00 00 00 mov $0x0,%eax -80105cef: e9 90 01 00 00 jmp 80105e84 - ilock(dp); -80105cf4: 83 ec 0c sub $0xc,%esp -80105cf7: ff 75 f4 pushl -0xc(%ebp) -80105cfa: e8 1f bc ff ff call 8010191e -80105cff: 83 c4 10 add $0x10,%esp - - if((ip = dirlookup(dp, name, &off)) != 0){ -80105d02: 83 ec 04 sub $0x4,%esp -80105d05: 8d 45 ec lea -0x14(%ebp),%eax -80105d08: 50 push %eax -80105d09: 8d 45 de lea -0x22(%ebp),%eax -80105d0c: 50 push %eax -80105d0d: ff 75 f4 pushl -0xc(%ebp) -80105d10: e8 71 c4 ff ff call 80102186 -80105d15: 83 c4 10 add $0x10,%esp -80105d18: 89 45 f0 mov %eax,-0x10(%ebp) -80105d1b: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) -80105d1f: 74 50 je 80105d71 - iunlockput(dp); -80105d21: 83 ec 0c sub $0xc,%esp -80105d24: ff 75 f4 pushl -0xc(%ebp) -80105d27: e8 af be ff ff call 80101bdb -80105d2c: 83 c4 10 add $0x10,%esp - ilock(ip); -80105d2f: 83 ec 0c sub $0xc,%esp -80105d32: ff 75 f0 pushl -0x10(%ebp) -80105d35: e8 e4 bb ff ff call 8010191e -80105d3a: 83 c4 10 add $0x10,%esp - if(type == T_FILE && ip->type == T_FILE) -80105d3d: 66 83 7d d4 02 cmpw $0x2,-0x2c(%ebp) -80105d42: 75 15 jne 80105d59 -80105d44: 8b 45 f0 mov -0x10(%ebp),%eax -80105d47: 0f b7 40 10 movzwl 0x10(%eax),%eax -80105d4b: 66 83 f8 02 cmp $0x2,%ax -80105d4f: 75 08 jne 80105d59 - return ip; -80105d51: 8b 45 f0 mov -0x10(%ebp),%eax -80105d54: e9 2b 01 00 00 jmp 80105e84 - iunlockput(ip); -80105d59: 83 ec 0c sub $0xc,%esp -80105d5c: ff 75 f0 pushl -0x10(%ebp) -80105d5f: e8 77 be ff ff call 80101bdb -80105d64: 83 c4 10 add $0x10,%esp - return 0; -80105d67: b8 00 00 00 00 mov $0x0,%eax -80105d6c: e9 13 01 00 00 jmp 80105e84 - } - - if((ip = ialloc(dp->dev, type)) == 0) -80105d71: 0f bf 55 d4 movswl -0x2c(%ebp),%edx -80105d75: 8b 45 f4 mov -0xc(%ebp),%eax -80105d78: 8b 00 mov (%eax),%eax -80105d7a: 83 ec 08 sub $0x8,%esp -80105d7d: 52 push %edx -80105d7e: 50 push %eax -80105d7f: e8 eb b8 ff ff call 8010166f -80105d84: 83 c4 10 add $0x10,%esp -80105d87: 89 45 f0 mov %eax,-0x10(%ebp) -80105d8a: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) -80105d8e: 75 0d jne 80105d9d - panic("create: ialloc"); -80105d90: 83 ec 0c sub $0xc,%esp -80105d93: 68 1f 89 10 80 push $0x8010891f -80105d98: e8 bf a7 ff ff call 8010055c - - ilock(ip); -80105d9d: 83 ec 0c sub $0xc,%esp -80105da0: ff 75 f0 pushl -0x10(%ebp) -80105da3: e8 76 bb ff ff call 8010191e -80105da8: 83 c4 10 add $0x10,%esp - ip->major = major; -80105dab: 8b 45 f0 mov -0x10(%ebp),%eax -80105dae: 0f b7 55 d0 movzwl -0x30(%ebp),%edx -80105db2: 66 89 50 12 mov %dx,0x12(%eax) - ip->minor = minor; -80105db6: 8b 45 f0 mov -0x10(%ebp),%eax -80105db9: 0f b7 55 cc movzwl -0x34(%ebp),%edx -80105dbd: 66 89 50 14 mov %dx,0x14(%eax) - ip->nlink = 1; -80105dc1: 8b 45 f0 mov -0x10(%ebp),%eax -80105dc4: 66 c7 40 16 01 00 movw $0x1,0x16(%eax) - iupdate(ip); -80105dca: 83 ec 0c sub $0xc,%esp -80105dcd: ff 75 f0 pushl -0x10(%ebp) -80105dd0: e8 70 b9 ff ff call 80101745 -80105dd5: 83 c4 10 add $0x10,%esp - - if(type == T_DIR){ // Create . and .. entries. -80105dd8: 66 83 7d d4 01 cmpw $0x1,-0x2c(%ebp) -80105ddd: 75 6a jne 80105e49 - dp->nlink++; // for ".." -80105ddf: 8b 45 f4 mov -0xc(%ebp),%eax -80105de2: 0f b7 40 16 movzwl 0x16(%eax),%eax -80105de6: 83 c0 01 add $0x1,%eax -80105de9: 89 c2 mov %eax,%edx -80105deb: 8b 45 f4 mov -0xc(%ebp),%eax -80105dee: 66 89 50 16 mov %dx,0x16(%eax) - iupdate(dp); -80105df2: 83 ec 0c sub $0xc,%esp -80105df5: ff 75 f4 pushl -0xc(%ebp) -80105df8: e8 48 b9 ff ff call 80101745 -80105dfd: 83 c4 10 add $0x10,%esp - // No ip->nlink++ for ".": avoid cyclic ref count. - if(dirlink(ip, ".", ip->inum) < 0 || dirlink(ip, "..", dp->inum) < 0) -80105e00: 8b 45 f0 mov -0x10(%ebp),%eax -80105e03: 8b 40 04 mov 0x4(%eax),%eax -80105e06: 83 ec 04 sub $0x4,%esp -80105e09: 50 push %eax -80105e0a: 68 f9 88 10 80 push $0x801088f9 -80105e0f: ff 75 f0 pushl -0x10(%ebp) -80105e12: e8 2a c4 ff ff call 80102241 -80105e17: 83 c4 10 add $0x10,%esp -80105e1a: 85 c0 test %eax,%eax -80105e1c: 78 1e js 80105e3c -80105e1e: 8b 45 f4 mov -0xc(%ebp),%eax -80105e21: 8b 40 04 mov 0x4(%eax),%eax -80105e24: 83 ec 04 sub $0x4,%esp -80105e27: 50 push %eax -80105e28: 68 fb 88 10 80 push $0x801088fb -80105e2d: ff 75 f0 pushl -0x10(%ebp) -80105e30: e8 0c c4 ff ff call 80102241 -80105e35: 83 c4 10 add $0x10,%esp -80105e38: 85 c0 test %eax,%eax -80105e3a: 79 0d jns 80105e49 - panic("create dots"); -80105e3c: 83 ec 0c sub $0xc,%esp -80105e3f: 68 2e 89 10 80 push $0x8010892e -80105e44: e8 13 a7 ff ff call 8010055c - } - - if(dirlink(dp, name, ip->inum) < 0) -80105e49: 8b 45 f0 mov -0x10(%ebp),%eax -80105e4c: 8b 40 04 mov 0x4(%eax),%eax -80105e4f: 83 ec 04 sub $0x4,%esp -80105e52: 50 push %eax -80105e53: 8d 45 de lea -0x22(%ebp),%eax -80105e56: 50 push %eax -80105e57: ff 75 f4 pushl -0xc(%ebp) -80105e5a: e8 e2 c3 ff ff call 80102241 -80105e5f: 83 c4 10 add $0x10,%esp -80105e62: 85 c0 test %eax,%eax -80105e64: 79 0d jns 80105e73 - panic("create: dirlink"); -80105e66: 83 ec 0c sub $0xc,%esp -80105e69: 68 3a 89 10 80 push $0x8010893a -80105e6e: e8 e9 a6 ff ff call 8010055c - - iunlockput(dp); -80105e73: 83 ec 0c sub $0xc,%esp -80105e76: ff 75 f4 pushl -0xc(%ebp) -80105e79: e8 5d bd ff ff call 80101bdb -80105e7e: 83 c4 10 add $0x10,%esp - - return ip; -80105e81: 8b 45 f0 mov -0x10(%ebp),%eax -} -80105e84: c9 leave -80105e85: c3 ret - -80105e86 : - -int -sys_open(void) -{ -80105e86: 55 push %ebp -80105e87: 89 e5 mov %esp,%ebp -80105e89: 83 ec 28 sub $0x28,%esp - char *path; - int fd, omode; - struct file *f; - struct inode *ip; - - if(argstr(0, &path) < 0 || argint(1, &omode) < 0) -80105e8c: 83 ec 08 sub $0x8,%esp -80105e8f: 8d 45 e8 lea -0x18(%ebp),%eax -80105e92: 50 push %eax -80105e93: 6a 00 push $0x0 -80105e95: e8 eb f6 ff ff call 80105585 -80105e9a: 83 c4 10 add $0x10,%esp -80105e9d: 85 c0 test %eax,%eax -80105e9f: 78 15 js 80105eb6 -80105ea1: 83 ec 08 sub $0x8,%esp -80105ea4: 8d 45 e4 lea -0x1c(%ebp),%eax -80105ea7: 50 push %eax -80105ea8: 6a 01 push $0x1 -80105eaa: e8 4f f6 ff ff call 801054fe -80105eaf: 83 c4 10 add $0x10,%esp -80105eb2: 85 c0 test %eax,%eax -80105eb4: 79 0a jns 80105ec0 - return -1; -80105eb6: b8 ff ff ff ff mov $0xffffffff,%eax -80105ebb: e9 61 01 00 00 jmp 80106021 - - begin_op(); -80105ec0: e8 1d d6 ff ff call 801034e2 - - if(omode & O_CREATE){ -80105ec5: 8b 45 e4 mov -0x1c(%ebp),%eax -80105ec8: 25 00 02 00 00 and $0x200,%eax -80105ecd: 85 c0 test %eax,%eax -80105ecf: 74 2a je 80105efb - ip = create(path, T_FILE, 0, 0); -80105ed1: 8b 45 e8 mov -0x18(%ebp),%eax -80105ed4: 6a 00 push $0x0 -80105ed6: 6a 00 push $0x0 -80105ed8: 6a 02 push $0x2 -80105eda: 50 push %eax -80105edb: e8 d4 fd ff ff call 80105cb4 -80105ee0: 83 c4 10 add $0x10,%esp -80105ee3: 89 45 f4 mov %eax,-0xc(%ebp) - if(ip == 0){ -80105ee6: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -80105eea: 75 75 jne 80105f61 - end_op(); -80105eec: e8 7f d6 ff ff call 80103570 - return -1; -80105ef1: b8 ff ff ff ff mov $0xffffffff,%eax -80105ef6: e9 26 01 00 00 jmp 80106021 - } - } else { - if((ip = namei(path)) == 0){ -80105efb: 8b 45 e8 mov -0x18(%ebp),%eax -80105efe: 83 ec 0c sub $0xc,%esp -80105f01: 50 push %eax -80105f02: e8 d2 c5 ff ff call 801024d9 -80105f07: 83 c4 10 add $0x10,%esp -80105f0a: 89 45 f4 mov %eax,-0xc(%ebp) -80105f0d: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -80105f11: 75 0f jne 80105f22 - end_op(); -80105f13: e8 58 d6 ff ff call 80103570 - return -1; -80105f18: b8 ff ff ff ff mov $0xffffffff,%eax -80105f1d: e9 ff 00 00 00 jmp 80106021 - } - ilock(ip); -80105f22: 83 ec 0c sub $0xc,%esp -80105f25: ff 75 f4 pushl -0xc(%ebp) -80105f28: e8 f1 b9 ff ff call 8010191e -80105f2d: 83 c4 10 add $0x10,%esp - if(ip->type == T_DIR && omode != O_RDONLY){ -80105f30: 8b 45 f4 mov -0xc(%ebp),%eax -80105f33: 0f b7 40 10 movzwl 0x10(%eax),%eax -80105f37: 66 83 f8 01 cmp $0x1,%ax -80105f3b: 75 24 jne 80105f61 -80105f3d: 8b 45 e4 mov -0x1c(%ebp),%eax -80105f40: 85 c0 test %eax,%eax -80105f42: 74 1d je 80105f61 - iunlockput(ip); -80105f44: 83 ec 0c sub $0xc,%esp -80105f47: ff 75 f4 pushl -0xc(%ebp) -80105f4a: e8 8c bc ff ff call 80101bdb -80105f4f: 83 c4 10 add $0x10,%esp - end_op(); -80105f52: e8 19 d6 ff ff call 80103570 - return -1; -80105f57: b8 ff ff ff ff mov $0xffffffff,%eax -80105f5c: e9 c0 00 00 00 jmp 80106021 - } - } - - if((f = filealloc()) == 0 || (fd = fdalloc(f)) < 0){ -80105f61: e8 ea af ff ff call 80100f50 -80105f66: 89 45 f0 mov %eax,-0x10(%ebp) -80105f69: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) -80105f6d: 74 17 je 80105f86 -80105f6f: 83 ec 0c sub $0xc,%esp -80105f72: ff 75 f0 pushl -0x10(%ebp) -80105f75: e8 36 f7 ff ff call 801056b0 -80105f7a: 83 c4 10 add $0x10,%esp -80105f7d: 89 45 ec mov %eax,-0x14(%ebp) -80105f80: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) -80105f84: 79 2e jns 80105fb4 - if(f) -80105f86: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) -80105f8a: 74 0e je 80105f9a - fileclose(f); -80105f8c: 83 ec 0c sub $0xc,%esp -80105f8f: ff 75 f0 pushl -0x10(%ebp) -80105f92: e8 76 b0 ff ff call 8010100d -80105f97: 83 c4 10 add $0x10,%esp - iunlockput(ip); -80105f9a: 83 ec 0c sub $0xc,%esp -80105f9d: ff 75 f4 pushl -0xc(%ebp) -80105fa0: e8 36 bc ff ff call 80101bdb -80105fa5: 83 c4 10 add $0x10,%esp - end_op(); -80105fa8: e8 c3 d5 ff ff call 80103570 - return -1; -80105fad: b8 ff ff ff ff mov $0xffffffff,%eax -80105fb2: eb 6d jmp 80106021 - } - iunlock(ip); -80105fb4: 83 ec 0c sub $0xc,%esp -80105fb7: ff 75 f4 pushl -0xc(%ebp) -80105fba: e8 bc ba ff ff call 80101a7b -80105fbf: 83 c4 10 add $0x10,%esp - end_op(); -80105fc2: e8 a9 d5 ff ff call 80103570 - - f->type = FD_INODE; -80105fc7: 8b 45 f0 mov -0x10(%ebp),%eax -80105fca: c7 00 02 00 00 00 movl $0x2,(%eax) - f->ip = ip; -80105fd0: 8b 45 f0 mov -0x10(%ebp),%eax -80105fd3: 8b 55 f4 mov -0xc(%ebp),%edx -80105fd6: 89 50 10 mov %edx,0x10(%eax) - f->off = 0; -80105fd9: 8b 45 f0 mov -0x10(%ebp),%eax -80105fdc: c7 40 14 00 00 00 00 movl $0x0,0x14(%eax) - f->readable = !(omode & O_WRONLY); -80105fe3: 8b 45 e4 mov -0x1c(%ebp),%eax -80105fe6: 83 e0 01 and $0x1,%eax -80105fe9: 85 c0 test %eax,%eax -80105feb: 0f 94 c0 sete %al -80105fee: 89 c2 mov %eax,%edx -80105ff0: 8b 45 f0 mov -0x10(%ebp),%eax -80105ff3: 88 50 08 mov %dl,0x8(%eax) - f->writable = (omode & O_WRONLY) || (omode & O_RDWR); -80105ff6: 8b 45 e4 mov -0x1c(%ebp),%eax -80105ff9: 83 e0 01 and $0x1,%eax -80105ffc: 85 c0 test %eax,%eax -80105ffe: 75 0a jne 8010600a -80106000: 8b 45 e4 mov -0x1c(%ebp),%eax -80106003: 83 e0 02 and $0x2,%eax -80106006: 85 c0 test %eax,%eax -80106008: 74 07 je 80106011 -8010600a: b8 01 00 00 00 mov $0x1,%eax -8010600f: eb 05 jmp 80106016 -80106011: b8 00 00 00 00 mov $0x0,%eax -80106016: 89 c2 mov %eax,%edx -80106018: 8b 45 f0 mov -0x10(%ebp),%eax -8010601b: 88 50 09 mov %dl,0x9(%eax) - return fd; -8010601e: 8b 45 ec mov -0x14(%ebp),%eax -} -80106021: c9 leave -80106022: c3 ret - -80106023 : - -int -sys_mkdir(void) -{ -80106023: 55 push %ebp -80106024: 89 e5 mov %esp,%ebp -80106026: 83 ec 18 sub $0x18,%esp - char *path; - struct inode *ip; - - begin_op(); -80106029: e8 b4 d4 ff ff call 801034e2 - if(argstr(0, &path) < 0 || (ip = create(path, T_DIR, 0, 0)) == 0){ -8010602e: 83 ec 08 sub $0x8,%esp -80106031: 8d 45 f0 lea -0x10(%ebp),%eax -80106034: 50 push %eax -80106035: 6a 00 push $0x0 -80106037: e8 49 f5 ff ff call 80105585 -8010603c: 83 c4 10 add $0x10,%esp -8010603f: 85 c0 test %eax,%eax -80106041: 78 1b js 8010605e -80106043: 8b 45 f0 mov -0x10(%ebp),%eax -80106046: 6a 00 push $0x0 -80106048: 6a 00 push $0x0 -8010604a: 6a 01 push $0x1 -8010604c: 50 push %eax -8010604d: e8 62 fc ff ff call 80105cb4 -80106052: 83 c4 10 add $0x10,%esp -80106055: 89 45 f4 mov %eax,-0xc(%ebp) -80106058: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -8010605c: 75 0c jne 8010606a - end_op(); -8010605e: e8 0d d5 ff ff call 80103570 - return -1; -80106063: b8 ff ff ff ff mov $0xffffffff,%eax -80106068: eb 18 jmp 80106082 - } - iunlockput(ip); -8010606a: 83 ec 0c sub $0xc,%esp -8010606d: ff 75 f4 pushl -0xc(%ebp) -80106070: e8 66 bb ff ff call 80101bdb -80106075: 83 c4 10 add $0x10,%esp - end_op(); -80106078: e8 f3 d4 ff ff call 80103570 - return 0; -8010607d: b8 00 00 00 00 mov $0x0,%eax -} -80106082: c9 leave -80106083: c3 ret - -80106084 : - -int -sys_mknod(void) -{ -80106084: 55 push %ebp -80106085: 89 e5 mov %esp,%ebp -80106087: 83 ec 28 sub $0x28,%esp - struct inode *ip; - char *path; - int len; - int major, minor; - - begin_op(); -8010608a: e8 53 d4 ff ff call 801034e2 - if((len=argstr(0, &path)) < 0 || -8010608f: 83 ec 08 sub $0x8,%esp -80106092: 8d 45 ec lea -0x14(%ebp),%eax -80106095: 50 push %eax -80106096: 6a 00 push $0x0 -80106098: e8 e8 f4 ff ff call 80105585 -8010609d: 83 c4 10 add $0x10,%esp -801060a0: 89 45 f4 mov %eax,-0xc(%ebp) -801060a3: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -801060a7: 78 4f js 801060f8 - argint(1, &major) < 0 || -801060a9: 83 ec 08 sub $0x8,%esp -801060ac: 8d 45 e8 lea -0x18(%ebp),%eax -801060af: 50 push %eax -801060b0: 6a 01 push $0x1 -801060b2: e8 47 f4 ff ff call 801054fe -801060b7: 83 c4 10 add $0x10,%esp - char *path; - int len; - int major, minor; - - begin_op(); - if((len=argstr(0, &path)) < 0 || -801060ba: 85 c0 test %eax,%eax -801060bc: 78 3a js 801060f8 - argint(1, &major) < 0 || - argint(2, &minor) < 0 || -801060be: 83 ec 08 sub $0x8,%esp -801060c1: 8d 45 e4 lea -0x1c(%ebp),%eax -801060c4: 50 push %eax -801060c5: 6a 02 push $0x2 -801060c7: e8 32 f4 ff ff call 801054fe -801060cc: 83 c4 10 add $0x10,%esp - int len; - int major, minor; - - begin_op(); - if((len=argstr(0, &path)) < 0 || - argint(1, &major) < 0 || -801060cf: 85 c0 test %eax,%eax -801060d1: 78 25 js 801060f8 - argint(2, &minor) < 0 || - (ip = create(path, T_DEV, major, minor)) == 0){ -801060d3: 8b 45 e4 mov -0x1c(%ebp),%eax -801060d6: 0f bf c8 movswl %ax,%ecx -801060d9: 8b 45 e8 mov -0x18(%ebp),%eax -801060dc: 0f bf d0 movswl %ax,%edx -801060df: 8b 45 ec mov -0x14(%ebp),%eax - int major, minor; - - begin_op(); - if((len=argstr(0, &path)) < 0 || - argint(1, &major) < 0 || - argint(2, &minor) < 0 || -801060e2: 51 push %ecx -801060e3: 52 push %edx -801060e4: 6a 03 push $0x3 -801060e6: 50 push %eax -801060e7: e8 c8 fb ff ff call 80105cb4 -801060ec: 83 c4 10 add $0x10,%esp -801060ef: 89 45 f0 mov %eax,-0x10(%ebp) -801060f2: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) -801060f6: 75 0c jne 80106104 - (ip = create(path, T_DEV, major, minor)) == 0){ - end_op(); -801060f8: e8 73 d4 ff ff call 80103570 - return -1; -801060fd: b8 ff ff ff ff mov $0xffffffff,%eax -80106102: eb 18 jmp 8010611c - } - iunlockput(ip); -80106104: 83 ec 0c sub $0xc,%esp -80106107: ff 75 f0 pushl -0x10(%ebp) -8010610a: e8 cc ba ff ff call 80101bdb -8010610f: 83 c4 10 add $0x10,%esp - end_op(); -80106112: e8 59 d4 ff ff call 80103570 - return 0; -80106117: b8 00 00 00 00 mov $0x0,%eax -} -8010611c: c9 leave -8010611d: c3 ret - -8010611e : - -int -sys_chdir(void) -{ -8010611e: 55 push %ebp -8010611f: 89 e5 mov %esp,%ebp -80106121: 83 ec 18 sub $0x18,%esp - char *path; - struct inode *ip; - - begin_op(); -80106124: e8 b9 d3 ff ff call 801034e2 - if(argstr(0, &path) < 0 || (ip = namei(path)) == 0){ -80106129: 83 ec 08 sub $0x8,%esp -8010612c: 8d 45 f0 lea -0x10(%ebp),%eax -8010612f: 50 push %eax -80106130: 6a 00 push $0x0 -80106132: e8 4e f4 ff ff call 80105585 -80106137: 83 c4 10 add $0x10,%esp -8010613a: 85 c0 test %eax,%eax -8010613c: 78 18 js 80106156 -8010613e: 8b 45 f0 mov -0x10(%ebp),%eax -80106141: 83 ec 0c sub $0xc,%esp -80106144: 50 push %eax -80106145: e8 8f c3 ff ff call 801024d9 -8010614a: 83 c4 10 add $0x10,%esp -8010614d: 89 45 f4 mov %eax,-0xc(%ebp) -80106150: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -80106154: 75 0c jne 80106162 - end_op(); -80106156: e8 15 d4 ff ff call 80103570 - return -1; -8010615b: b8 ff ff ff ff mov $0xffffffff,%eax -80106160: eb 6e jmp 801061d0 - } - ilock(ip); -80106162: 83 ec 0c sub $0xc,%esp -80106165: ff 75 f4 pushl -0xc(%ebp) -80106168: e8 b1 b7 ff ff call 8010191e -8010616d: 83 c4 10 add $0x10,%esp - if(ip->type != T_DIR){ -80106170: 8b 45 f4 mov -0xc(%ebp),%eax -80106173: 0f b7 40 10 movzwl 0x10(%eax),%eax -80106177: 66 83 f8 01 cmp $0x1,%ax -8010617b: 74 1a je 80106197 - iunlockput(ip); -8010617d: 83 ec 0c sub $0xc,%esp -80106180: ff 75 f4 pushl -0xc(%ebp) -80106183: e8 53 ba ff ff call 80101bdb -80106188: 83 c4 10 add $0x10,%esp - end_op(); -8010618b: e8 e0 d3 ff ff call 80103570 - return -1; -80106190: b8 ff ff ff ff mov $0xffffffff,%eax -80106195: eb 39 jmp 801061d0 - } - iunlock(ip); -80106197: 83 ec 0c sub $0xc,%esp -8010619a: ff 75 f4 pushl -0xc(%ebp) -8010619d: e8 d9 b8 ff ff call 80101a7b -801061a2: 83 c4 10 add $0x10,%esp - iput(proc->cwd); -801061a5: 65 a1 04 00 00 00 mov %gs:0x4,%eax -801061ab: 8b 40 68 mov 0x68(%eax),%eax -801061ae: 83 ec 0c sub $0xc,%esp -801061b1: 50 push %eax -801061b2: e8 35 b9 ff ff call 80101aec -801061b7: 83 c4 10 add $0x10,%esp - end_op(); -801061ba: e8 b1 d3 ff ff call 80103570 - proc->cwd = ip; -801061bf: 65 a1 04 00 00 00 mov %gs:0x4,%eax -801061c5: 8b 55 f4 mov -0xc(%ebp),%edx -801061c8: 89 50 68 mov %edx,0x68(%eax) - return 0; -801061cb: b8 00 00 00 00 mov $0x0,%eax -} -801061d0: c9 leave -801061d1: c3 ret - -801061d2 : - -int -sys_exec(void) -{ -801061d2: 55 push %ebp -801061d3: 89 e5 mov %esp,%ebp -801061d5: 81 ec 98 00 00 00 sub $0x98,%esp - char *path, *argv[MAXARG]; - int i; - uint uargv, uarg; - - if(argstr(0, &path) < 0 || argint(1, (int*)&uargv) < 0){ -801061db: 83 ec 08 sub $0x8,%esp -801061de: 8d 45 f0 lea -0x10(%ebp),%eax -801061e1: 50 push %eax -801061e2: 6a 00 push $0x0 -801061e4: e8 9c f3 ff ff call 80105585 -801061e9: 83 c4 10 add $0x10,%esp -801061ec: 85 c0 test %eax,%eax -801061ee: 78 18 js 80106208 -801061f0: 83 ec 08 sub $0x8,%esp -801061f3: 8d 85 6c ff ff ff lea -0x94(%ebp),%eax -801061f9: 50 push %eax -801061fa: 6a 01 push $0x1 -801061fc: e8 fd f2 ff ff call 801054fe -80106201: 83 c4 10 add $0x10,%esp -80106204: 85 c0 test %eax,%eax -80106206: 79 0a jns 80106212 - return -1; -80106208: b8 ff ff ff ff mov $0xffffffff,%eax -8010620d: e9 c6 00 00 00 jmp 801062d8 - } - memset(argv, 0, sizeof(argv)); -80106212: 83 ec 04 sub $0x4,%esp -80106215: 68 80 00 00 00 push $0x80 -8010621a: 6a 00 push $0x0 -8010621c: 8d 85 70 ff ff ff lea -0x90(%ebp),%eax -80106222: 50 push %eax -80106223: e8 af ef ff ff call 801051d7 -80106228: 83 c4 10 add $0x10,%esp - for(i=0;; i++){ -8010622b: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - if(i >= NELEM(argv)) -80106232: 8b 45 f4 mov -0xc(%ebp),%eax -80106235: 83 f8 1f cmp $0x1f,%eax -80106238: 76 0a jbe 80106244 - return -1; -8010623a: b8 ff ff ff ff mov $0xffffffff,%eax -8010623f: e9 94 00 00 00 jmp 801062d8 - if(fetchint(uargv+4*i, (int*)&uarg) < 0) -80106244: 8b 45 f4 mov -0xc(%ebp),%eax -80106247: c1 e0 02 shl $0x2,%eax -8010624a: 89 c2 mov %eax,%edx -8010624c: 8b 85 6c ff ff ff mov -0x94(%ebp),%eax -80106252: 01 c2 add %eax,%edx -80106254: 83 ec 08 sub $0x8,%esp -80106257: 8d 85 68 ff ff ff lea -0x98(%ebp),%eax -8010625d: 50 push %eax -8010625e: 52 push %edx -8010625f: e8 fe f1 ff ff call 80105462 -80106264: 83 c4 10 add $0x10,%esp -80106267: 85 c0 test %eax,%eax -80106269: 79 07 jns 80106272 - return -1; -8010626b: b8 ff ff ff ff mov $0xffffffff,%eax -80106270: eb 66 jmp 801062d8 - if(uarg == 0){ -80106272: 8b 85 68 ff ff ff mov -0x98(%ebp),%eax -80106278: 85 c0 test %eax,%eax -8010627a: 75 27 jne 801062a3 - argv[i] = 0; -8010627c: 8b 45 f4 mov -0xc(%ebp),%eax -8010627f: c7 84 85 70 ff ff ff movl $0x0,-0x90(%ebp,%eax,4) -80106286: 00 00 00 00 - break; -8010628a: 90 nop - } - if(fetchstr(uarg, &argv[i]) < 0) - return -1; - } - return exec(path, argv); -8010628b: 8b 45 f0 mov -0x10(%ebp),%eax -8010628e: 83 ec 08 sub $0x8,%esp -80106291: 8d 95 70 ff ff ff lea -0x90(%ebp),%edx -80106297: 52 push %edx -80106298: 50 push %eax -80106299: e8 a6 a8 ff ff call 80100b44 -8010629e: 83 c4 10 add $0x10,%esp -801062a1: eb 35 jmp 801062d8 - return -1; - if(uarg == 0){ - argv[i] = 0; - break; - } - if(fetchstr(uarg, &argv[i]) < 0) -801062a3: 8d 85 70 ff ff ff lea -0x90(%ebp),%eax -801062a9: 8b 55 f4 mov -0xc(%ebp),%edx -801062ac: c1 e2 02 shl $0x2,%edx -801062af: 01 c2 add %eax,%edx -801062b1: 8b 85 68 ff ff ff mov -0x98(%ebp),%eax -801062b7: 83 ec 08 sub $0x8,%esp -801062ba: 52 push %edx -801062bb: 50 push %eax -801062bc: e8 db f1 ff ff call 8010549c -801062c1: 83 c4 10 add $0x10,%esp -801062c4: 85 c0 test %eax,%eax -801062c6: 79 07 jns 801062cf - return -1; -801062c8: b8 ff ff ff ff mov $0xffffffff,%eax -801062cd: eb 09 jmp 801062d8 - - if(argstr(0, &path) < 0 || argint(1, (int*)&uargv) < 0){ - return -1; - } - memset(argv, 0, sizeof(argv)); - for(i=0;; i++){ -801062cf: 83 45 f4 01 addl $0x1,-0xc(%ebp) - argv[i] = 0; - break; - } - if(fetchstr(uarg, &argv[i]) < 0) - return -1; - } -801062d3: e9 5a ff ff ff jmp 80106232 - return exec(path, argv); -} -801062d8: c9 leave -801062d9: c3 ret - -801062da : - -int -sys_pipe(void) -{ -801062da: 55 push %ebp -801062db: 89 e5 mov %esp,%ebp -801062dd: 83 ec 28 sub $0x28,%esp - int *fd; - struct file *rf, *wf; - int fd0, fd1; - - if(argptr(0, (void*)&fd, 2*sizeof(fd[0])) < 0) -801062e0: 83 ec 04 sub $0x4,%esp -801062e3: 6a 08 push $0x8 -801062e5: 8d 45 ec lea -0x14(%ebp),%eax -801062e8: 50 push %eax -801062e9: 6a 00 push $0x0 -801062eb: e8 36 f2 ff ff call 80105526 -801062f0: 83 c4 10 add $0x10,%esp -801062f3: 85 c0 test %eax,%eax -801062f5: 79 0a jns 80106301 - return -1; -801062f7: b8 ff ff ff ff mov $0xffffffff,%eax -801062fc: e9 af 00 00 00 jmp 801063b0 - if(pipealloc(&rf, &wf) < 0) -80106301: 83 ec 08 sub $0x8,%esp -80106304: 8d 45 e4 lea -0x1c(%ebp),%eax -80106307: 50 push %eax -80106308: 8d 45 e8 lea -0x18(%ebp),%eax -8010630b: 50 push %eax -8010630c: e8 b9 dc ff ff call 80103fca -80106311: 83 c4 10 add $0x10,%esp -80106314: 85 c0 test %eax,%eax -80106316: 79 0a jns 80106322 - return -1; -80106318: b8 ff ff ff ff mov $0xffffffff,%eax -8010631d: e9 8e 00 00 00 jmp 801063b0 - fd0 = -1; -80106322: c7 45 f4 ff ff ff ff movl $0xffffffff,-0xc(%ebp) - if((fd0 = fdalloc(rf)) < 0 || (fd1 = fdalloc(wf)) < 0){ -80106329: 8b 45 e8 mov -0x18(%ebp),%eax -8010632c: 83 ec 0c sub $0xc,%esp -8010632f: 50 push %eax -80106330: e8 7b f3 ff ff call 801056b0 -80106335: 83 c4 10 add $0x10,%esp -80106338: 89 45 f4 mov %eax,-0xc(%ebp) -8010633b: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -8010633f: 78 18 js 80106359 -80106341: 8b 45 e4 mov -0x1c(%ebp),%eax -80106344: 83 ec 0c sub $0xc,%esp -80106347: 50 push %eax -80106348: e8 63 f3 ff ff call 801056b0 -8010634d: 83 c4 10 add $0x10,%esp -80106350: 89 45 f0 mov %eax,-0x10(%ebp) -80106353: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) -80106357: 79 3f jns 80106398 - if(fd0 >= 0) -80106359: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -8010635d: 78 14 js 80106373 - proc->ofile[fd0] = 0; -8010635f: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80106365: 8b 55 f4 mov -0xc(%ebp),%edx -80106368: 83 c2 08 add $0x8,%edx -8010636b: c7 44 90 08 00 00 00 movl $0x0,0x8(%eax,%edx,4) -80106372: 00 - fileclose(rf); -80106373: 8b 45 e8 mov -0x18(%ebp),%eax -80106376: 83 ec 0c sub $0xc,%esp -80106379: 50 push %eax -8010637a: e8 8e ac ff ff call 8010100d -8010637f: 83 c4 10 add $0x10,%esp - fileclose(wf); -80106382: 8b 45 e4 mov -0x1c(%ebp),%eax -80106385: 83 ec 0c sub $0xc,%esp -80106388: 50 push %eax -80106389: e8 7f ac ff ff call 8010100d -8010638e: 83 c4 10 add $0x10,%esp - return -1; -80106391: b8 ff ff ff ff mov $0xffffffff,%eax -80106396: eb 18 jmp 801063b0 - } - fd[0] = fd0; -80106398: 8b 45 ec mov -0x14(%ebp),%eax -8010639b: 8b 55 f4 mov -0xc(%ebp),%edx -8010639e: 89 10 mov %edx,(%eax) - fd[1] = fd1; -801063a0: 8b 45 ec mov -0x14(%ebp),%eax -801063a3: 8d 50 04 lea 0x4(%eax),%edx -801063a6: 8b 45 f0 mov -0x10(%ebp),%eax -801063a9: 89 02 mov %eax,(%edx) - return 0; -801063ab: b8 00 00 00 00 mov $0x0,%eax -} -801063b0: c9 leave -801063b1: c3 ret - -801063b2 : -#include "mmu.h" -#include "proc.h" - -int -sys_fork(void) -{ -801063b2: 55 push %ebp -801063b3: 89 e5 mov %esp,%ebp -801063b5: 83 ec 08 sub $0x8,%esp - return fork(); -801063b8: e8 03 e3 ff ff call 801046c0 -} -801063bd: c9 leave -801063be: c3 ret - -801063bf : - -int -sys_exit(void) -{ -801063bf: 55 push %ebp -801063c0: 89 e5 mov %esp,%ebp -801063c2: 83 ec 08 sub $0x8,%esp - exit(); -801063c5: e8 87 e4 ff ff call 80104851 - return 0; // not reached -801063ca: b8 00 00 00 00 mov $0x0,%eax -} -801063cf: c9 leave -801063d0: c3 ret - -801063d1 : - -int -sys_wait(void) -{ -801063d1: 55 push %ebp -801063d2: 89 e5 mov %esp,%ebp -801063d4: 83 ec 08 sub $0x8,%esp - return wait(); -801063d7: e8 ad e5 ff ff call 80104989 -} -801063dc: c9 leave -801063dd: c3 ret - -801063de : - -int -sys_kill(void) -{ -801063de: 55 push %ebp -801063df: 89 e5 mov %esp,%ebp -801063e1: 83 ec 18 sub $0x18,%esp - int pid; - - if(argint(0, &pid) < 0) -801063e4: 83 ec 08 sub $0x8,%esp -801063e7: 8d 45 f4 lea -0xc(%ebp),%eax -801063ea: 50 push %eax -801063eb: 6a 00 push $0x0 -801063ed: e8 0c f1 ff ff call 801054fe -801063f2: 83 c4 10 add $0x10,%esp -801063f5: 85 c0 test %eax,%eax -801063f7: 79 07 jns 80106400 - return -1; -801063f9: b8 ff ff ff ff mov $0xffffffff,%eax -801063fe: eb 0f jmp 8010640f - return kill(pid); -80106400: 8b 45 f4 mov -0xc(%ebp),%eax -80106403: 83 ec 0c sub $0xc,%esp -80106406: 50 push %eax -80106407: e8 9e e9 ff ff call 80104daa -8010640c: 83 c4 10 add $0x10,%esp -} -8010640f: c9 leave -80106410: c3 ret - -80106411 : - -int -sys_getpid(void) -{ -80106411: 55 push %ebp -80106412: 89 e5 mov %esp,%ebp - return proc->pid; -80106414: 65 a1 04 00 00 00 mov %gs:0x4,%eax -8010641a: 8b 40 10 mov 0x10(%eax),%eax -} -8010641d: 5d pop %ebp -8010641e: c3 ret - -8010641f : - -int -sys_sbrk(void) -{ -8010641f: 55 push %ebp -80106420: 89 e5 mov %esp,%ebp -80106422: 83 ec 18 sub $0x18,%esp - int addr; - int n; - - if(argint(0, &n) < 0) -80106425: 83 ec 08 sub $0x8,%esp -80106428: 8d 45 f0 lea -0x10(%ebp),%eax -8010642b: 50 push %eax -8010642c: 6a 00 push $0x0 -8010642e: e8 cb f0 ff ff call 801054fe -80106433: 83 c4 10 add $0x10,%esp -80106436: 85 c0 test %eax,%eax -80106438: 79 07 jns 80106441 - return -1; -8010643a: b8 ff ff ff ff mov $0xffffffff,%eax -8010643f: eb 28 jmp 80106469 - addr = proc->sz; -80106441: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80106447: 8b 00 mov (%eax),%eax -80106449: 89 45 f4 mov %eax,-0xc(%ebp) - if(growproc(n) < 0) -8010644c: 8b 45 f0 mov -0x10(%ebp),%eax -8010644f: 83 ec 0c sub $0xc,%esp -80106452: 50 push %eax -80106453: e8 c5 e1 ff ff call 8010461d -80106458: 83 c4 10 add $0x10,%esp -8010645b: 85 c0 test %eax,%eax -8010645d: 79 07 jns 80106466 - return -1; -8010645f: b8 ff ff ff ff mov $0xffffffff,%eax -80106464: eb 03 jmp 80106469 - return addr; -80106466: 8b 45 f4 mov -0xc(%ebp),%eax -} -80106469: c9 leave -8010646a: c3 ret - -8010646b : - -int -sys_sleep(void) -{ -8010646b: 55 push %ebp -8010646c: 89 e5 mov %esp,%ebp -8010646e: 83 ec 18 sub $0x18,%esp - int n; - uint ticks0; - - if(argint(0, &n) < 0) -80106471: 83 ec 08 sub $0x8,%esp -80106474: 8d 45 f0 lea -0x10(%ebp),%eax -80106477: 50 push %eax -80106478: 6a 00 push $0x0 -8010647a: e8 7f f0 ff ff call 801054fe -8010647f: 83 c4 10 add $0x10,%esp -80106482: 85 c0 test %eax,%eax -80106484: 79 07 jns 8010648d - return -1; -80106486: b8 ff ff ff ff mov $0xffffffff,%eax -8010648b: eb 77 jmp 80106504 - acquire(&tickslock); -8010648d: 83 ec 0c sub $0xc,%esp -80106490: 68 c0 49 11 80 push $0x801149c0 -80106495: e8 e1 ea ff ff call 80104f7b -8010649a: 83 c4 10 add $0x10,%esp - ticks0 = ticks; -8010649d: a1 00 52 11 80 mov 0x80115200,%eax -801064a2: 89 45 f4 mov %eax,-0xc(%ebp) - while(ticks - ticks0 < n){ -801064a5: eb 39 jmp 801064e0 - if(proc->killed){ -801064a7: 65 a1 04 00 00 00 mov %gs:0x4,%eax -801064ad: 8b 40 24 mov 0x24(%eax),%eax -801064b0: 85 c0 test %eax,%eax -801064b2: 74 17 je 801064cb - release(&tickslock); -801064b4: 83 ec 0c sub $0xc,%esp -801064b7: 68 c0 49 11 80 push $0x801149c0 -801064bc: e8 20 eb ff ff call 80104fe1 -801064c1: 83 c4 10 add $0x10,%esp - return -1; -801064c4: b8 ff ff ff ff mov $0xffffffff,%eax -801064c9: eb 39 jmp 80106504 - } - sleep(&ticks, &tickslock); -801064cb: 83 ec 08 sub $0x8,%esp -801064ce: 68 c0 49 11 80 push $0x801149c0 -801064d3: 68 00 52 11 80 push $0x80115200 -801064d8: e8 ae e7 ff ff call 80104c8b -801064dd: 83 c4 10 add $0x10,%esp - - if(argint(0, &n) < 0) - return -1; - acquire(&tickslock); - ticks0 = ticks; - while(ticks - ticks0 < n){ -801064e0: a1 00 52 11 80 mov 0x80115200,%eax -801064e5: 2b 45 f4 sub -0xc(%ebp),%eax -801064e8: 8b 55 f0 mov -0x10(%ebp),%edx -801064eb: 39 d0 cmp %edx,%eax -801064ed: 72 b8 jb 801064a7 - release(&tickslock); - return -1; - } - sleep(&ticks, &tickslock); - } - release(&tickslock); -801064ef: 83 ec 0c sub $0xc,%esp -801064f2: 68 c0 49 11 80 push $0x801149c0 -801064f7: e8 e5 ea ff ff call 80104fe1 -801064fc: 83 c4 10 add $0x10,%esp - return 0; -801064ff: b8 00 00 00 00 mov $0x0,%eax -} -80106504: c9 leave -80106505: c3 ret - -80106506 : - -// return how many clock tick interrupts have occurred -// since start. -int -sys_uptime(void) -{ -80106506: 55 push %ebp -80106507: 89 e5 mov %esp,%ebp -80106509: 83 ec 18 sub $0x18,%esp - uint xticks; - - acquire(&tickslock); -8010650c: 83 ec 0c sub $0xc,%esp -8010650f: 68 c0 49 11 80 push $0x801149c0 -80106514: e8 62 ea ff ff call 80104f7b -80106519: 83 c4 10 add $0x10,%esp - xticks = ticks; -8010651c: a1 00 52 11 80 mov 0x80115200,%eax -80106521: 89 45 f4 mov %eax,-0xc(%ebp) - release(&tickslock); -80106524: 83 ec 0c sub $0xc,%esp -80106527: 68 c0 49 11 80 push $0x801149c0 -8010652c: e8 b0 ea ff ff call 80104fe1 -80106531: 83 c4 10 add $0x10,%esp - return xticks; -80106534: 8b 45 f4 mov -0xc(%ebp),%eax -} -80106537: c9 leave -80106538: c3 ret - -80106539 : - "memory", "cc"); -} - -static inline void -outb(ushort port, uchar data) -{ -80106539: 55 push %ebp -8010653a: 89 e5 mov %esp,%ebp -8010653c: 83 ec 08 sub $0x8,%esp -8010653f: 8b 55 08 mov 0x8(%ebp),%edx -80106542: 8b 45 0c mov 0xc(%ebp),%eax -80106545: 66 89 55 fc mov %dx,-0x4(%ebp) -80106549: 88 45 f8 mov %al,-0x8(%ebp) - asm volatile("out %0,%1" : : "a" (data), "d" (port)); -8010654c: 0f b6 45 f8 movzbl -0x8(%ebp),%eax -80106550: 0f b7 55 fc movzwl -0x4(%ebp),%edx -80106554: ee out %al,(%dx) -} -80106555: c9 leave -80106556: c3 ret - -80106557 : -#define TIMER_RATEGEN 0x04 // mode 2, rate generator -#define TIMER_16BIT 0x30 // r/w counter 16 bits, LSB first - -void -timerinit(void) -{ -80106557: 55 push %ebp -80106558: 89 e5 mov %esp,%ebp -8010655a: 83 ec 08 sub $0x8,%esp - // Interrupt 100 times/sec. - outb(TIMER_MODE, TIMER_SEL0 | TIMER_RATEGEN | TIMER_16BIT); -8010655d: 6a 34 push $0x34 -8010655f: 6a 43 push $0x43 -80106561: e8 d3 ff ff ff call 80106539 -80106566: 83 c4 08 add $0x8,%esp - outb(IO_TIMER1, TIMER_DIV(100) % 256); -80106569: 68 9c 00 00 00 push $0x9c -8010656e: 6a 40 push $0x40 -80106570: e8 c4 ff ff ff call 80106539 -80106575: 83 c4 08 add $0x8,%esp - outb(IO_TIMER1, TIMER_DIV(100) / 256); -80106578: 6a 2e push $0x2e -8010657a: 6a 40 push $0x40 -8010657c: e8 b8 ff ff ff call 80106539 -80106581: 83 c4 08 add $0x8,%esp - picenable(IRQ_TIMER); -80106584: 83 ec 0c sub $0xc,%esp -80106587: 6a 00 push $0x0 -80106589: e8 28 d9 ff ff call 80103eb6 -8010658e: 83 c4 10 add $0x10,%esp -} -80106591: c9 leave -80106592: c3 ret - -80106593 : - - # vectors.S sends all traps here. -.globl alltraps -alltraps: - # Build trap frame. - pushl %ds -80106593: 1e push %ds - pushl %es -80106594: 06 push %es - pushl %fs -80106595: 0f a0 push %fs - pushl %gs -80106597: 0f a8 push %gs - pushal -80106599: 60 pusha - - # Set up data and per-cpu segments. - movw $(SEG_KDATA<<3), %ax -8010659a: 66 b8 10 00 mov $0x10,%ax - movw %ax, %ds -8010659e: 8e d8 mov %eax,%ds - movw %ax, %es -801065a0: 8e c0 mov %eax,%es - movw $(SEG_KCPU<<3), %ax -801065a2: 66 b8 18 00 mov $0x18,%ax - movw %ax, %fs -801065a6: 8e e0 mov %eax,%fs - movw %ax, %gs -801065a8: 8e e8 mov %eax,%gs - - # Call trap(tf), where tf=%esp - pushl %esp -801065aa: 54 push %esp - call trap -801065ab: e8 d4 01 00 00 call 80106784 - addl $4, %esp -801065b0: 83 c4 04 add $0x4,%esp - -801065b3 : - - # Return falls through to trapret... -.globl trapret -trapret: - popal -801065b3: 61 popa - popl %gs -801065b4: 0f a9 pop %gs - popl %fs -801065b6: 0f a1 pop %fs - popl %es -801065b8: 07 pop %es - popl %ds -801065b9: 1f pop %ds - addl $0x8, %esp # trapno and errcode -801065ba: 83 c4 08 add $0x8,%esp - iret -801065bd: cf iret - -801065be : - -struct gatedesc; - -static inline void -lidt(struct gatedesc *p, int size) -{ -801065be: 55 push %ebp -801065bf: 89 e5 mov %esp,%ebp -801065c1: 83 ec 10 sub $0x10,%esp - volatile ushort pd[3]; - - pd[0] = size-1; -801065c4: 8b 45 0c mov 0xc(%ebp),%eax -801065c7: 83 e8 01 sub $0x1,%eax -801065ca: 66 89 45 fa mov %ax,-0x6(%ebp) - pd[1] = (uint)p; -801065ce: 8b 45 08 mov 0x8(%ebp),%eax -801065d1: 66 89 45 fc mov %ax,-0x4(%ebp) - pd[2] = (uint)p >> 16; -801065d5: 8b 45 08 mov 0x8(%ebp),%eax -801065d8: c1 e8 10 shr $0x10,%eax -801065db: 66 89 45 fe mov %ax,-0x2(%ebp) - - asm volatile("lidt (%0)" : : "r" (pd)); -801065df: 8d 45 fa lea -0x6(%ebp),%eax -801065e2: 0f 01 18 lidtl (%eax) -} -801065e5: c9 leave -801065e6: c3 ret - -801065e7 : - return result; -} - -static inline uint -rcr2(void) -{ -801065e7: 55 push %ebp -801065e8: 89 e5 mov %esp,%ebp -801065ea: 83 ec 10 sub $0x10,%esp - uint val; - asm volatile("movl %%cr2,%0" : "=r" (val)); -801065ed: 0f 20 d0 mov %cr2,%eax -801065f0: 89 45 fc mov %eax,-0x4(%ebp) - return val; -801065f3: 8b 45 fc mov -0x4(%ebp),%eax -} -801065f6: c9 leave -801065f7: c3 ret - -801065f8 : -struct spinlock tickslock; -uint ticks; - -void -tvinit(void) -{ -801065f8: 55 push %ebp -801065f9: 89 e5 mov %esp,%ebp -801065fb: 83 ec 18 sub $0x18,%esp - int i; - - for(i = 0; i < 256; i++) -801065fe: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) -80106605: e9 c3 00 00 00 jmp 801066cd - SETGATE(idt[i], 0, SEG_KCODE<<3, vectors[i], 0); -8010660a: 8b 45 f4 mov -0xc(%ebp),%eax -8010660d: 8b 04 85 98 b0 10 80 mov -0x7fef4f68(,%eax,4),%eax -80106614: 89 c2 mov %eax,%edx -80106616: 8b 45 f4 mov -0xc(%ebp),%eax -80106619: 66 89 14 c5 00 4a 11 mov %dx,-0x7feeb600(,%eax,8) -80106620: 80 -80106621: 8b 45 f4 mov -0xc(%ebp),%eax -80106624: 66 c7 04 c5 02 4a 11 movw $0x8,-0x7feeb5fe(,%eax,8) -8010662b: 80 08 00 -8010662e: 8b 45 f4 mov -0xc(%ebp),%eax -80106631: 0f b6 14 c5 04 4a 11 movzbl -0x7feeb5fc(,%eax,8),%edx -80106638: 80 -80106639: 83 e2 e0 and $0xffffffe0,%edx -8010663c: 88 14 c5 04 4a 11 80 mov %dl,-0x7feeb5fc(,%eax,8) -80106643: 8b 45 f4 mov -0xc(%ebp),%eax -80106646: 0f b6 14 c5 04 4a 11 movzbl -0x7feeb5fc(,%eax,8),%edx -8010664d: 80 -8010664e: 83 e2 1f and $0x1f,%edx -80106651: 88 14 c5 04 4a 11 80 mov %dl,-0x7feeb5fc(,%eax,8) -80106658: 8b 45 f4 mov -0xc(%ebp),%eax -8010665b: 0f b6 14 c5 05 4a 11 movzbl -0x7feeb5fb(,%eax,8),%edx -80106662: 80 -80106663: 83 e2 f0 and $0xfffffff0,%edx -80106666: 83 ca 0e or $0xe,%edx -80106669: 88 14 c5 05 4a 11 80 mov %dl,-0x7feeb5fb(,%eax,8) -80106670: 8b 45 f4 mov -0xc(%ebp),%eax -80106673: 0f b6 14 c5 05 4a 11 movzbl -0x7feeb5fb(,%eax,8),%edx -8010667a: 80 -8010667b: 83 e2 ef and $0xffffffef,%edx -8010667e: 88 14 c5 05 4a 11 80 mov %dl,-0x7feeb5fb(,%eax,8) -80106685: 8b 45 f4 mov -0xc(%ebp),%eax -80106688: 0f b6 14 c5 05 4a 11 movzbl -0x7feeb5fb(,%eax,8),%edx -8010668f: 80 -80106690: 83 e2 9f and $0xffffff9f,%edx -80106693: 88 14 c5 05 4a 11 80 mov %dl,-0x7feeb5fb(,%eax,8) -8010669a: 8b 45 f4 mov -0xc(%ebp),%eax -8010669d: 0f b6 14 c5 05 4a 11 movzbl -0x7feeb5fb(,%eax,8),%edx -801066a4: 80 -801066a5: 83 ca 80 or $0xffffff80,%edx -801066a8: 88 14 c5 05 4a 11 80 mov %dl,-0x7feeb5fb(,%eax,8) -801066af: 8b 45 f4 mov -0xc(%ebp),%eax -801066b2: 8b 04 85 98 b0 10 80 mov -0x7fef4f68(,%eax,4),%eax -801066b9: c1 e8 10 shr $0x10,%eax -801066bc: 89 c2 mov %eax,%edx -801066be: 8b 45 f4 mov -0xc(%ebp),%eax -801066c1: 66 89 14 c5 06 4a 11 mov %dx,-0x7feeb5fa(,%eax,8) -801066c8: 80 -void -tvinit(void) -{ - int i; - - for(i = 0; i < 256; i++) -801066c9: 83 45 f4 01 addl $0x1,-0xc(%ebp) -801066cd: 81 7d f4 ff 00 00 00 cmpl $0xff,-0xc(%ebp) -801066d4: 0f 8e 30 ff ff ff jle 8010660a - SETGATE(idt[i], 0, SEG_KCODE<<3, vectors[i], 0); - SETGATE(idt[T_SYSCALL], 1, SEG_KCODE<<3, vectors[T_SYSCALL], DPL_USER); -801066da: a1 98 b1 10 80 mov 0x8010b198,%eax -801066df: 66 a3 00 4c 11 80 mov %ax,0x80114c00 -801066e5: 66 c7 05 02 4c 11 80 movw $0x8,0x80114c02 -801066ec: 08 00 -801066ee: 0f b6 05 04 4c 11 80 movzbl 0x80114c04,%eax -801066f5: 83 e0 e0 and $0xffffffe0,%eax -801066f8: a2 04 4c 11 80 mov %al,0x80114c04 -801066fd: 0f b6 05 04 4c 11 80 movzbl 0x80114c04,%eax -80106704: 83 e0 1f and $0x1f,%eax -80106707: a2 04 4c 11 80 mov %al,0x80114c04 -8010670c: 0f b6 05 05 4c 11 80 movzbl 0x80114c05,%eax -80106713: 83 c8 0f or $0xf,%eax -80106716: a2 05 4c 11 80 mov %al,0x80114c05 -8010671b: 0f b6 05 05 4c 11 80 movzbl 0x80114c05,%eax -80106722: 83 e0 ef and $0xffffffef,%eax -80106725: a2 05 4c 11 80 mov %al,0x80114c05 -8010672a: 0f b6 05 05 4c 11 80 movzbl 0x80114c05,%eax -80106731: 83 c8 60 or $0x60,%eax -80106734: a2 05 4c 11 80 mov %al,0x80114c05 -80106739: 0f b6 05 05 4c 11 80 movzbl 0x80114c05,%eax -80106740: 83 c8 80 or $0xffffff80,%eax -80106743: a2 05 4c 11 80 mov %al,0x80114c05 -80106748: a1 98 b1 10 80 mov 0x8010b198,%eax -8010674d: c1 e8 10 shr $0x10,%eax -80106750: 66 a3 06 4c 11 80 mov %ax,0x80114c06 - - initlock(&tickslock, "time"); -80106756: 83 ec 08 sub $0x8,%esp -80106759: 68 4c 89 10 80 push $0x8010894c -8010675e: 68 c0 49 11 80 push $0x801149c0 -80106763: e8 f2 e7 ff ff call 80104f5a -80106768: 83 c4 10 add $0x10,%esp -} -8010676b: c9 leave -8010676c: c3 ret - -8010676d : - -void -idtinit(void) -{ -8010676d: 55 push %ebp -8010676e: 89 e5 mov %esp,%ebp - lidt(idt, sizeof(idt)); -80106770: 68 00 08 00 00 push $0x800 -80106775: 68 00 4a 11 80 push $0x80114a00 -8010677a: e8 3f fe ff ff call 801065be -8010677f: 83 c4 08 add $0x8,%esp -} -80106782: c9 leave -80106783: c3 ret - -80106784 : - -//PAGEBREAK: 41 -void -trap(struct trapframe *tf) -{ -80106784: 55 push %ebp -80106785: 89 e5 mov %esp,%ebp -80106787: 57 push %edi -80106788: 56 push %esi -80106789: 53 push %ebx -8010678a: 83 ec 1c sub $0x1c,%esp - if(tf->trapno == T_SYSCALL){ -8010678d: 8b 45 08 mov 0x8(%ebp),%eax -80106790: 8b 40 30 mov 0x30(%eax),%eax -80106793: 83 f8 40 cmp $0x40,%eax -80106796: 75 3f jne 801067d7 - if(proc->killed) -80106798: 65 a1 04 00 00 00 mov %gs:0x4,%eax -8010679e: 8b 40 24 mov 0x24(%eax),%eax -801067a1: 85 c0 test %eax,%eax -801067a3: 74 05 je 801067aa - exit(); -801067a5: e8 a7 e0 ff ff call 80104851 - proc->tf = tf; -801067aa: 65 a1 04 00 00 00 mov %gs:0x4,%eax -801067b0: 8b 55 08 mov 0x8(%ebp),%edx -801067b3: 89 50 18 mov %edx,0x18(%eax) - syscall(); -801067b6: e8 fb ed ff ff call 801055b6 - if(proc->killed) -801067bb: 65 a1 04 00 00 00 mov %gs:0x4,%eax -801067c1: 8b 40 24 mov 0x24(%eax),%eax -801067c4: 85 c0 test %eax,%eax -801067c6: 74 0a je 801067d2 - exit(); -801067c8: e8 84 e0 ff ff call 80104851 - return; -801067cd: e9 14 02 00 00 jmp 801069e6 -801067d2: e9 0f 02 00 00 jmp 801069e6 - } - - switch(tf->trapno){ -801067d7: 8b 45 08 mov 0x8(%ebp),%eax -801067da: 8b 40 30 mov 0x30(%eax),%eax -801067dd: 83 e8 20 sub $0x20,%eax -801067e0: 83 f8 1f cmp $0x1f,%eax -801067e3: 0f 87 c0 00 00 00 ja 801068a9 -801067e9: 8b 04 85 f4 89 10 80 mov -0x7fef760c(,%eax,4),%eax -801067f0: ff e0 jmp *%eax - case T_IRQ0 + IRQ_TIMER: - if(cpu->id == 0){ -801067f2: 65 a1 00 00 00 00 mov %gs:0x0,%eax -801067f8: 0f b6 00 movzbl (%eax),%eax -801067fb: 84 c0 test %al,%al -801067fd: 75 3d jne 8010683c - acquire(&tickslock); -801067ff: 83 ec 0c sub $0xc,%esp -80106802: 68 c0 49 11 80 push $0x801149c0 -80106807: e8 6f e7 ff ff call 80104f7b -8010680c: 83 c4 10 add $0x10,%esp - ticks++; -8010680f: a1 00 52 11 80 mov 0x80115200,%eax -80106814: 83 c0 01 add $0x1,%eax -80106817: a3 00 52 11 80 mov %eax,0x80115200 - wakeup(&ticks); -8010681c: 83 ec 0c sub $0xc,%esp -8010681f: 68 00 52 11 80 push $0x80115200 -80106824: e8 4b e5 ff ff call 80104d74 -80106829: 83 c4 10 add $0x10,%esp - release(&tickslock); -8010682c: 83 ec 0c sub $0xc,%esp -8010682f: 68 c0 49 11 80 push $0x801149c0 -80106834: e8 a8 e7 ff ff call 80104fe1 -80106839: 83 c4 10 add $0x10,%esp - } - lapiceoi(); -8010683c: e8 82 c7 ff ff call 80102fc3 - break; -80106841: e9 1c 01 00 00 jmp 80106962 - case T_IRQ0 + IRQ_IDE: - ideintr(); -80106846: e8 99 bf ff ff call 801027e4 - lapiceoi(); -8010684b: e8 73 c7 ff ff call 80102fc3 - break; -80106850: e9 0d 01 00 00 jmp 80106962 - case T_IRQ0 + IRQ_IDE+1: - // Bochs generates spurious IDE1 interrupts. - break; - case T_IRQ0 + IRQ_KBD: - kbdintr(); -80106855: e8 70 c5 ff ff call 80102dca - lapiceoi(); -8010685a: e8 64 c7 ff ff call 80102fc3 - break; -8010685f: e9 fe 00 00 00 jmp 80106962 - case T_IRQ0 + IRQ_COM1: - uartintr(); -80106864: e8 5a 03 00 00 call 80106bc3 - lapiceoi(); -80106869: e8 55 c7 ff ff call 80102fc3 - break; -8010686e: e9 ef 00 00 00 jmp 80106962 - case T_IRQ0 + 7: - case T_IRQ0 + IRQ_SPURIOUS: - cprintf("cpu%d: spurious interrupt at %x:%x\n", -80106873: 8b 45 08 mov 0x8(%ebp),%eax -80106876: 8b 48 38 mov 0x38(%eax),%ecx - cpu->id, tf->cs, tf->eip); -80106879: 8b 45 08 mov 0x8(%ebp),%eax -8010687c: 0f b7 40 3c movzwl 0x3c(%eax),%eax - uartintr(); - lapiceoi(); - break; - case T_IRQ0 + 7: - case T_IRQ0 + IRQ_SPURIOUS: - cprintf("cpu%d: spurious interrupt at %x:%x\n", -80106880: 0f b7 d0 movzwl %ax,%edx - cpu->id, tf->cs, tf->eip); -80106883: 65 a1 00 00 00 00 mov %gs:0x0,%eax -80106889: 0f b6 00 movzbl (%eax),%eax - uartintr(); - lapiceoi(); - break; - case T_IRQ0 + 7: - case T_IRQ0 + IRQ_SPURIOUS: - cprintf("cpu%d: spurious interrupt at %x:%x\n", -8010688c: 0f b6 c0 movzbl %al,%eax -8010688f: 51 push %ecx -80106890: 52 push %edx -80106891: 50 push %eax -80106892: 68 54 89 10 80 push $0x80108954 -80106897: e8 23 9b ff ff call 801003bf -8010689c: 83 c4 10 add $0x10,%esp - cpu->id, tf->cs, tf->eip); - lapiceoi(); -8010689f: e8 1f c7 ff ff call 80102fc3 - break; -801068a4: e9 b9 00 00 00 jmp 80106962 - - //PAGEBREAK: 13 - default: - if(proc == 0 || (tf->cs&3) == 0){ -801068a9: 65 a1 04 00 00 00 mov %gs:0x4,%eax -801068af: 85 c0 test %eax,%eax -801068b1: 74 11 je 801068c4 -801068b3: 8b 45 08 mov 0x8(%ebp),%eax -801068b6: 0f b7 40 3c movzwl 0x3c(%eax),%eax -801068ba: 0f b7 c0 movzwl %ax,%eax -801068bd: 83 e0 03 and $0x3,%eax -801068c0: 85 c0 test %eax,%eax -801068c2: 75 40 jne 80106904 - // In kernel, it must be our mistake. - cprintf("unexpected trap %d from cpu %d eip %x (cr2=0x%x)\n", -801068c4: e8 1e fd ff ff call 801065e7 -801068c9: 89 c3 mov %eax,%ebx -801068cb: 8b 45 08 mov 0x8(%ebp),%eax -801068ce: 8b 48 38 mov 0x38(%eax),%ecx - tf->trapno, cpu->id, tf->eip, rcr2()); -801068d1: 65 a1 00 00 00 00 mov %gs:0x0,%eax -801068d7: 0f b6 00 movzbl (%eax),%eax - - //PAGEBREAK: 13 - default: - if(proc == 0 || (tf->cs&3) == 0){ - // In kernel, it must be our mistake. - cprintf("unexpected trap %d from cpu %d eip %x (cr2=0x%x)\n", -801068da: 0f b6 d0 movzbl %al,%edx -801068dd: 8b 45 08 mov 0x8(%ebp),%eax -801068e0: 8b 40 30 mov 0x30(%eax),%eax -801068e3: 83 ec 0c sub $0xc,%esp -801068e6: 53 push %ebx -801068e7: 51 push %ecx -801068e8: 52 push %edx -801068e9: 50 push %eax -801068ea: 68 78 89 10 80 push $0x80108978 -801068ef: e8 cb 9a ff ff call 801003bf -801068f4: 83 c4 20 add $0x20,%esp - tf->trapno, cpu->id, tf->eip, rcr2()); - panic("trap"); -801068f7: 83 ec 0c sub $0xc,%esp -801068fa: 68 aa 89 10 80 push $0x801089aa -801068ff: e8 58 9c ff ff call 8010055c - } - // In user space, assume process misbehaved. - cprintf("pid %d %s: trap %d err %d on cpu %d " -80106904: e8 de fc ff ff call 801065e7 -80106909: 89 45 e4 mov %eax,-0x1c(%ebp) -8010690c: 8b 45 08 mov 0x8(%ebp),%eax -8010690f: 8b 70 38 mov 0x38(%eax),%esi - "eip 0x%x addr 0x%x--kill proc\n", - proc->pid, proc->name, tf->trapno, tf->err, cpu->id, tf->eip, -80106912: 65 a1 00 00 00 00 mov %gs:0x0,%eax -80106918: 0f b6 00 movzbl (%eax),%eax - cprintf("unexpected trap %d from cpu %d eip %x (cr2=0x%x)\n", - tf->trapno, cpu->id, tf->eip, rcr2()); - panic("trap"); - } - // In user space, assume process misbehaved. - cprintf("pid %d %s: trap %d err %d on cpu %d " -8010691b: 0f b6 d8 movzbl %al,%ebx -8010691e: 8b 45 08 mov 0x8(%ebp),%eax -80106921: 8b 48 34 mov 0x34(%eax),%ecx -80106924: 8b 45 08 mov 0x8(%ebp),%eax -80106927: 8b 50 30 mov 0x30(%eax),%edx - "eip 0x%x addr 0x%x--kill proc\n", - proc->pid, proc->name, tf->trapno, tf->err, cpu->id, tf->eip, -8010692a: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80106930: 8d 78 6c lea 0x6c(%eax),%edi -80106933: 65 a1 04 00 00 00 mov %gs:0x4,%eax - cprintf("unexpected trap %d from cpu %d eip %x (cr2=0x%x)\n", - tf->trapno, cpu->id, tf->eip, rcr2()); - panic("trap"); - } - // In user space, assume process misbehaved. - cprintf("pid %d %s: trap %d err %d on cpu %d " -80106939: 8b 40 10 mov 0x10(%eax),%eax -8010693c: ff 75 e4 pushl -0x1c(%ebp) -8010693f: 56 push %esi -80106940: 53 push %ebx -80106941: 51 push %ecx -80106942: 52 push %edx -80106943: 57 push %edi -80106944: 50 push %eax -80106945: 68 b0 89 10 80 push $0x801089b0 -8010694a: e8 70 9a ff ff call 801003bf -8010694f: 83 c4 20 add $0x20,%esp - "eip 0x%x addr 0x%x--kill proc\n", - proc->pid, proc->name, tf->trapno, tf->err, cpu->id, tf->eip, - rcr2()); - proc->killed = 1; -80106952: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80106958: c7 40 24 01 00 00 00 movl $0x1,0x24(%eax) -8010695f: eb 01 jmp 80106962 - ideintr(); - lapiceoi(); - break; - case T_IRQ0 + IRQ_IDE+1: - // Bochs generates spurious IDE1 interrupts. - break; -80106961: 90 nop - } - - // Force process exit if it has been killed and is in user space. - // (If it is still executing in the kernel, let it keep running - // until it gets to the regular system call return.) - if(proc && proc->killed && (tf->cs&3) == DPL_USER) -80106962: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80106968: 85 c0 test %eax,%eax -8010696a: 74 24 je 80106990 -8010696c: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80106972: 8b 40 24 mov 0x24(%eax),%eax -80106975: 85 c0 test %eax,%eax -80106977: 74 17 je 80106990 -80106979: 8b 45 08 mov 0x8(%ebp),%eax -8010697c: 0f b7 40 3c movzwl 0x3c(%eax),%eax -80106980: 0f b7 c0 movzwl %ax,%eax -80106983: 83 e0 03 and $0x3,%eax -80106986: 83 f8 03 cmp $0x3,%eax -80106989: 75 05 jne 80106990 - exit(); -8010698b: e8 c1 de ff ff call 80104851 - - // Force process to give up CPU on clock tick. - // If interrupts were on while locks held, would need to check nlock. - if(proc && proc->state == RUNNING && tf->trapno == T_IRQ0+IRQ_TIMER) -80106990: 65 a1 04 00 00 00 mov %gs:0x4,%eax -80106996: 85 c0 test %eax,%eax -80106998: 74 1e je 801069b8 -8010699a: 65 a1 04 00 00 00 mov %gs:0x4,%eax -801069a0: 8b 40 0c mov 0xc(%eax),%eax -801069a3: 83 f8 04 cmp $0x4,%eax -801069a6: 75 10 jne 801069b8 -801069a8: 8b 45 08 mov 0x8(%ebp),%eax -801069ab: 8b 40 30 mov 0x30(%eax),%eax -801069ae: 83 f8 20 cmp $0x20,%eax -801069b1: 75 05 jne 801069b8 - yield(); -801069b3: e8 54 e2 ff ff call 80104c0c - - // Check if the process has been killed since we yielded - if(proc && proc->killed && (tf->cs&3) == DPL_USER) -801069b8: 65 a1 04 00 00 00 mov %gs:0x4,%eax -801069be: 85 c0 test %eax,%eax -801069c0: 74 24 je 801069e6 -801069c2: 65 a1 04 00 00 00 mov %gs:0x4,%eax -801069c8: 8b 40 24 mov 0x24(%eax),%eax -801069cb: 85 c0 test %eax,%eax -801069cd: 74 17 je 801069e6 -801069cf: 8b 45 08 mov 0x8(%ebp),%eax -801069d2: 0f b7 40 3c movzwl 0x3c(%eax),%eax -801069d6: 0f b7 c0 movzwl %ax,%eax -801069d9: 83 e0 03 and $0x3,%eax -801069dc: 83 f8 03 cmp $0x3,%eax -801069df: 75 05 jne 801069e6 - exit(); -801069e1: e8 6b de ff ff call 80104851 -} -801069e6: 8d 65 f4 lea -0xc(%ebp),%esp -801069e9: 5b pop %ebx -801069ea: 5e pop %esi -801069eb: 5f pop %edi -801069ec: 5d pop %ebp -801069ed: c3 ret - -801069ee : -// Routines to let C code use special x86 instructions. - -static inline uchar -inb(ushort port) -{ -801069ee: 55 push %ebp -801069ef: 89 e5 mov %esp,%ebp -801069f1: 83 ec 14 sub $0x14,%esp -801069f4: 8b 45 08 mov 0x8(%ebp),%eax -801069f7: 66 89 45 ec mov %ax,-0x14(%ebp) - uchar data; - - asm volatile("in %1,%0" : "=a" (data) : "d" (port)); -801069fb: 0f b7 45 ec movzwl -0x14(%ebp),%eax -801069ff: 89 c2 mov %eax,%edx -80106a01: ec in (%dx),%al -80106a02: 88 45 ff mov %al,-0x1(%ebp) - return data; -80106a05: 0f b6 45 ff movzbl -0x1(%ebp),%eax -} -80106a09: c9 leave -80106a0a: c3 ret - -80106a0b : - "memory", "cc"); -} - -static inline void -outb(ushort port, uchar data) -{ -80106a0b: 55 push %ebp -80106a0c: 89 e5 mov %esp,%ebp -80106a0e: 83 ec 08 sub $0x8,%esp -80106a11: 8b 55 08 mov 0x8(%ebp),%edx -80106a14: 8b 45 0c mov 0xc(%ebp),%eax -80106a17: 66 89 55 fc mov %dx,-0x4(%ebp) -80106a1b: 88 45 f8 mov %al,-0x8(%ebp) - asm volatile("out %0,%1" : : "a" (data), "d" (port)); -80106a1e: 0f b6 45 f8 movzbl -0x8(%ebp),%eax -80106a22: 0f b7 55 fc movzwl -0x4(%ebp),%edx -80106a26: ee out %al,(%dx) -} -80106a27: c9 leave -80106a28: c3 ret - -80106a29 : - -static int uart; // is there a uart? - -void -uartinit(void) -{ -80106a29: 55 push %ebp -80106a2a: 89 e5 mov %esp,%ebp -80106a2c: 83 ec 18 sub $0x18,%esp - char *p; - - // Turn off the FIFO - outb(COM1+2, 0); -80106a2f: 6a 00 push $0x0 -80106a31: 68 fa 03 00 00 push $0x3fa -80106a36: e8 d0 ff ff ff call 80106a0b -80106a3b: 83 c4 08 add $0x8,%esp - - // 9600 baud, 8 data bits, 1 stop bit, parity off. - outb(COM1+3, 0x80); // Unlock divisor -80106a3e: 68 80 00 00 00 push $0x80 -80106a43: 68 fb 03 00 00 push $0x3fb -80106a48: e8 be ff ff ff call 80106a0b -80106a4d: 83 c4 08 add $0x8,%esp - outb(COM1+0, 115200/9600); -80106a50: 6a 0c push $0xc -80106a52: 68 f8 03 00 00 push $0x3f8 -80106a57: e8 af ff ff ff call 80106a0b -80106a5c: 83 c4 08 add $0x8,%esp - outb(COM1+1, 0); -80106a5f: 6a 00 push $0x0 -80106a61: 68 f9 03 00 00 push $0x3f9 -80106a66: e8 a0 ff ff ff call 80106a0b -80106a6b: 83 c4 08 add $0x8,%esp - outb(COM1+3, 0x03); // Lock divisor, 8 data bits. -80106a6e: 6a 03 push $0x3 -80106a70: 68 fb 03 00 00 push $0x3fb -80106a75: e8 91 ff ff ff call 80106a0b -80106a7a: 83 c4 08 add $0x8,%esp - outb(COM1+4, 0); -80106a7d: 6a 00 push $0x0 -80106a7f: 68 fc 03 00 00 push $0x3fc -80106a84: e8 82 ff ff ff call 80106a0b -80106a89: 83 c4 08 add $0x8,%esp - outb(COM1+1, 0x01); // Enable receive interrupts. -80106a8c: 6a 01 push $0x1 -80106a8e: 68 f9 03 00 00 push $0x3f9 -80106a93: e8 73 ff ff ff call 80106a0b -80106a98: 83 c4 08 add $0x8,%esp - - // If status is 0xFF, no serial port. - if(inb(COM1+5) == 0xFF) -80106a9b: 68 fd 03 00 00 push $0x3fd -80106aa0: e8 49 ff ff ff call 801069ee -80106aa5: 83 c4 04 add $0x4,%esp -80106aa8: 3c ff cmp $0xff,%al -80106aaa: 75 02 jne 80106aae - return; -80106aac: eb 6c jmp 80106b1a - uart = 1; -80106aae: c7 05 6c b6 10 80 01 movl $0x1,0x8010b66c -80106ab5: 00 00 00 - - // Acknowledge pre-existing interrupt conditions; - // enable interrupts. - inb(COM1+2); -80106ab8: 68 fa 03 00 00 push $0x3fa -80106abd: e8 2c ff ff ff call 801069ee -80106ac2: 83 c4 04 add $0x4,%esp - inb(COM1+0); -80106ac5: 68 f8 03 00 00 push $0x3f8 -80106aca: e8 1f ff ff ff call 801069ee -80106acf: 83 c4 04 add $0x4,%esp - picenable(IRQ_COM1); -80106ad2: 83 ec 0c sub $0xc,%esp -80106ad5: 6a 04 push $0x4 -80106ad7: e8 da d3 ff ff call 80103eb6 -80106adc: 83 c4 10 add $0x10,%esp - ioapicenable(IRQ_COM1, 0); -80106adf: 83 ec 08 sub $0x8,%esp -80106ae2: 6a 00 push $0x0 -80106ae4: 6a 04 push $0x4 -80106ae6: e8 97 bf ff ff call 80102a82 -80106aeb: 83 c4 10 add $0x10,%esp - - // Announce that we're here. - for(p="xv6...\n"; *p; p++) -80106aee: c7 45 f4 74 8a 10 80 movl $0x80108a74,-0xc(%ebp) -80106af5: eb 19 jmp 80106b10 - uartputc(*p); -80106af7: 8b 45 f4 mov -0xc(%ebp),%eax -80106afa: 0f b6 00 movzbl (%eax),%eax -80106afd: 0f be c0 movsbl %al,%eax -80106b00: 83 ec 0c sub $0xc,%esp -80106b03: 50 push %eax -80106b04: e8 13 00 00 00 call 80106b1c -80106b09: 83 c4 10 add $0x10,%esp - inb(COM1+0); - picenable(IRQ_COM1); - ioapicenable(IRQ_COM1, 0); - - // Announce that we're here. - for(p="xv6...\n"; *p; p++) -80106b0c: 83 45 f4 01 addl $0x1,-0xc(%ebp) -80106b10: 8b 45 f4 mov -0xc(%ebp),%eax -80106b13: 0f b6 00 movzbl (%eax),%eax -80106b16: 84 c0 test %al,%al -80106b18: 75 dd jne 80106af7 - uartputc(*p); -} -80106b1a: c9 leave -80106b1b: c3 ret - -80106b1c : - -void -uartputc(int c) -{ -80106b1c: 55 push %ebp -80106b1d: 89 e5 mov %esp,%ebp -80106b1f: 83 ec 18 sub $0x18,%esp - int i; - - if(!uart) -80106b22: a1 6c b6 10 80 mov 0x8010b66c,%eax -80106b27: 85 c0 test %eax,%eax -80106b29: 75 02 jne 80106b2d - return; -80106b2b: eb 51 jmp 80106b7e - for(i = 0; i < 128 && !(inb(COM1+5) & 0x20); i++) -80106b2d: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) -80106b34: eb 11 jmp 80106b47 - microdelay(10); -80106b36: 83 ec 0c sub $0xc,%esp -80106b39: 6a 0a push $0xa -80106b3b: e8 9d c4 ff ff call 80102fdd -80106b40: 83 c4 10 add $0x10,%esp -{ - int i; - - if(!uart) - return; - for(i = 0; i < 128 && !(inb(COM1+5) & 0x20); i++) -80106b43: 83 45 f4 01 addl $0x1,-0xc(%ebp) -80106b47: 83 7d f4 7f cmpl $0x7f,-0xc(%ebp) -80106b4b: 7f 1a jg 80106b67 -80106b4d: 83 ec 0c sub $0xc,%esp -80106b50: 68 fd 03 00 00 push $0x3fd -80106b55: e8 94 fe ff ff call 801069ee -80106b5a: 83 c4 10 add $0x10,%esp -80106b5d: 0f b6 c0 movzbl %al,%eax -80106b60: 83 e0 20 and $0x20,%eax -80106b63: 85 c0 test %eax,%eax -80106b65: 74 cf je 80106b36 - microdelay(10); - outb(COM1+0, c); -80106b67: 8b 45 08 mov 0x8(%ebp),%eax -80106b6a: 0f b6 c0 movzbl %al,%eax -80106b6d: 83 ec 08 sub $0x8,%esp -80106b70: 50 push %eax -80106b71: 68 f8 03 00 00 push $0x3f8 -80106b76: e8 90 fe ff ff call 80106a0b -80106b7b: 83 c4 10 add $0x10,%esp -} -80106b7e: c9 leave -80106b7f: c3 ret - -80106b80 : - -static int -uartgetc(void) -{ -80106b80: 55 push %ebp -80106b81: 89 e5 mov %esp,%ebp - if(!uart) -80106b83: a1 6c b6 10 80 mov 0x8010b66c,%eax -80106b88: 85 c0 test %eax,%eax -80106b8a: 75 07 jne 80106b93 - return -1; -80106b8c: b8 ff ff ff ff mov $0xffffffff,%eax -80106b91: eb 2e jmp 80106bc1 - if(!(inb(COM1+5) & 0x01)) -80106b93: 68 fd 03 00 00 push $0x3fd -80106b98: e8 51 fe ff ff call 801069ee -80106b9d: 83 c4 04 add $0x4,%esp -80106ba0: 0f b6 c0 movzbl %al,%eax -80106ba3: 83 e0 01 and $0x1,%eax -80106ba6: 85 c0 test %eax,%eax -80106ba8: 75 07 jne 80106bb1 - return -1; -80106baa: b8 ff ff ff ff mov $0xffffffff,%eax -80106baf: eb 10 jmp 80106bc1 - return inb(COM1+0); -80106bb1: 68 f8 03 00 00 push $0x3f8 -80106bb6: e8 33 fe ff ff call 801069ee -80106bbb: 83 c4 04 add $0x4,%esp -80106bbe: 0f b6 c0 movzbl %al,%eax -} -80106bc1: c9 leave -80106bc2: c3 ret - -80106bc3 : - -void -uartintr(void) -{ -80106bc3: 55 push %ebp -80106bc4: 89 e5 mov %esp,%ebp -80106bc6: 83 ec 08 sub $0x8,%esp - consoleintr(uartgetc); -80106bc9: 83 ec 0c sub $0xc,%esp -80106bcc: 68 80 6b 10 80 push $0x80106b80 -80106bd1: e8 fb 9b ff ff call 801007d1 -80106bd6: 83 c4 10 add $0x10,%esp -} -80106bd9: c9 leave -80106bda: c3 ret - -80106bdb : -# generated by vectors.pl - do not edit -# handlers -.globl alltraps -.globl vector0 -vector0: - pushl $0 -80106bdb: 6a 00 push $0x0 - pushl $0 -80106bdd: 6a 00 push $0x0 - jmp alltraps -80106bdf: e9 af f9 ff ff jmp 80106593 - -80106be4 : -.globl vector1 -vector1: - pushl $0 -80106be4: 6a 00 push $0x0 - pushl $1 -80106be6: 6a 01 push $0x1 - jmp alltraps -80106be8: e9 a6 f9 ff ff jmp 80106593 - -80106bed : -.globl vector2 -vector2: - pushl $0 -80106bed: 6a 00 push $0x0 - pushl $2 -80106bef: 6a 02 push $0x2 - jmp alltraps -80106bf1: e9 9d f9 ff ff jmp 80106593 - -80106bf6 : -.globl vector3 -vector3: - pushl $0 -80106bf6: 6a 00 push $0x0 - pushl $3 -80106bf8: 6a 03 push $0x3 - jmp alltraps -80106bfa: e9 94 f9 ff ff jmp 80106593 - -80106bff : -.globl vector4 -vector4: - pushl $0 -80106bff: 6a 00 push $0x0 - pushl $4 -80106c01: 6a 04 push $0x4 - jmp alltraps -80106c03: e9 8b f9 ff ff jmp 80106593 - -80106c08 : -.globl vector5 -vector5: - pushl $0 -80106c08: 6a 00 push $0x0 - pushl $5 -80106c0a: 6a 05 push $0x5 - jmp alltraps -80106c0c: e9 82 f9 ff ff jmp 80106593 - -80106c11 : -.globl vector6 -vector6: - pushl $0 -80106c11: 6a 00 push $0x0 - pushl $6 -80106c13: 6a 06 push $0x6 - jmp alltraps -80106c15: e9 79 f9 ff ff jmp 80106593 - -80106c1a : -.globl vector7 -vector7: - pushl $0 -80106c1a: 6a 00 push $0x0 - pushl $7 -80106c1c: 6a 07 push $0x7 - jmp alltraps -80106c1e: e9 70 f9 ff ff jmp 80106593 - -80106c23 : -.globl vector8 -vector8: - pushl $8 -80106c23: 6a 08 push $0x8 - jmp alltraps -80106c25: e9 69 f9 ff ff jmp 80106593 - -80106c2a : -.globl vector9 -vector9: - pushl $0 -80106c2a: 6a 00 push $0x0 - pushl $9 -80106c2c: 6a 09 push $0x9 - jmp alltraps -80106c2e: e9 60 f9 ff ff jmp 80106593 - -80106c33 : -.globl vector10 -vector10: - pushl $10 -80106c33: 6a 0a push $0xa - jmp alltraps -80106c35: e9 59 f9 ff ff jmp 80106593 - -80106c3a : -.globl vector11 -vector11: - pushl $11 -80106c3a: 6a 0b push $0xb - jmp alltraps -80106c3c: e9 52 f9 ff ff jmp 80106593 - -80106c41 : -.globl vector12 -vector12: - pushl $12 -80106c41: 6a 0c push $0xc - jmp alltraps -80106c43: e9 4b f9 ff ff jmp 80106593 - -80106c48 : -.globl vector13 -vector13: - pushl $13 -80106c48: 6a 0d push $0xd - jmp alltraps -80106c4a: e9 44 f9 ff ff jmp 80106593 - -80106c4f : -.globl vector14 -vector14: - pushl $14 -80106c4f: 6a 0e push $0xe - jmp alltraps -80106c51: e9 3d f9 ff ff jmp 80106593 - -80106c56 : -.globl vector15 -vector15: - pushl $0 -80106c56: 6a 00 push $0x0 - pushl $15 -80106c58: 6a 0f push $0xf - jmp alltraps -80106c5a: e9 34 f9 ff ff jmp 80106593 - -80106c5f : -.globl vector16 -vector16: - pushl $0 -80106c5f: 6a 00 push $0x0 - pushl $16 -80106c61: 6a 10 push $0x10 - jmp alltraps -80106c63: e9 2b f9 ff ff jmp 80106593 - -80106c68 : -.globl vector17 -vector17: - pushl $17 -80106c68: 6a 11 push $0x11 - jmp alltraps -80106c6a: e9 24 f9 ff ff jmp 80106593 - -80106c6f : -.globl vector18 -vector18: - pushl $0 -80106c6f: 6a 00 push $0x0 - pushl $18 -80106c71: 6a 12 push $0x12 - jmp alltraps -80106c73: e9 1b f9 ff ff jmp 80106593 - -80106c78 : -.globl vector19 -vector19: - pushl $0 -80106c78: 6a 00 push $0x0 - pushl $19 -80106c7a: 6a 13 push $0x13 - jmp alltraps -80106c7c: e9 12 f9 ff ff jmp 80106593 - -80106c81 : -.globl vector20 -vector20: - pushl $0 -80106c81: 6a 00 push $0x0 - pushl $20 -80106c83: 6a 14 push $0x14 - jmp alltraps -80106c85: e9 09 f9 ff ff jmp 80106593 - -80106c8a : -.globl vector21 -vector21: - pushl $0 -80106c8a: 6a 00 push $0x0 - pushl $21 -80106c8c: 6a 15 push $0x15 - jmp alltraps -80106c8e: e9 00 f9 ff ff jmp 80106593 - -80106c93 : -.globl vector22 -vector22: - pushl $0 -80106c93: 6a 00 push $0x0 - pushl $22 -80106c95: 6a 16 push $0x16 - jmp alltraps -80106c97: e9 f7 f8 ff ff jmp 80106593 - -80106c9c : -.globl vector23 -vector23: - pushl $0 -80106c9c: 6a 00 push $0x0 - pushl $23 -80106c9e: 6a 17 push $0x17 - jmp alltraps -80106ca0: e9 ee f8 ff ff jmp 80106593 - -80106ca5 : -.globl vector24 -vector24: - pushl $0 -80106ca5: 6a 00 push $0x0 - pushl $24 -80106ca7: 6a 18 push $0x18 - jmp alltraps -80106ca9: e9 e5 f8 ff ff jmp 80106593 - -80106cae : -.globl vector25 -vector25: - pushl $0 -80106cae: 6a 00 push $0x0 - pushl $25 -80106cb0: 6a 19 push $0x19 - jmp alltraps -80106cb2: e9 dc f8 ff ff jmp 80106593 - -80106cb7 : -.globl vector26 -vector26: - pushl $0 -80106cb7: 6a 00 push $0x0 - pushl $26 -80106cb9: 6a 1a push $0x1a - jmp alltraps -80106cbb: e9 d3 f8 ff ff jmp 80106593 - -80106cc0 : -.globl vector27 -vector27: - pushl $0 -80106cc0: 6a 00 push $0x0 - pushl $27 -80106cc2: 6a 1b push $0x1b - jmp alltraps -80106cc4: e9 ca f8 ff ff jmp 80106593 - -80106cc9 : -.globl vector28 -vector28: - pushl $0 -80106cc9: 6a 00 push $0x0 - pushl $28 -80106ccb: 6a 1c push $0x1c - jmp alltraps -80106ccd: e9 c1 f8 ff ff jmp 80106593 - -80106cd2 : -.globl vector29 -vector29: - pushl $0 -80106cd2: 6a 00 push $0x0 - pushl $29 -80106cd4: 6a 1d push $0x1d - jmp alltraps -80106cd6: e9 b8 f8 ff ff jmp 80106593 - -80106cdb : -.globl vector30 -vector30: - pushl $0 -80106cdb: 6a 00 push $0x0 - pushl $30 -80106cdd: 6a 1e push $0x1e - jmp alltraps -80106cdf: e9 af f8 ff ff jmp 80106593 - -80106ce4 : -.globl vector31 -vector31: - pushl $0 -80106ce4: 6a 00 push $0x0 - pushl $31 -80106ce6: 6a 1f push $0x1f - jmp alltraps -80106ce8: e9 a6 f8 ff ff jmp 80106593 - -80106ced : -.globl vector32 -vector32: - pushl $0 -80106ced: 6a 00 push $0x0 - pushl $32 -80106cef: 6a 20 push $0x20 - jmp alltraps -80106cf1: e9 9d f8 ff ff jmp 80106593 - -80106cf6 : -.globl vector33 -vector33: - pushl $0 -80106cf6: 6a 00 push $0x0 - pushl $33 -80106cf8: 6a 21 push $0x21 - jmp alltraps -80106cfa: e9 94 f8 ff ff jmp 80106593 - -80106cff : -.globl vector34 -vector34: - pushl $0 -80106cff: 6a 00 push $0x0 - pushl $34 -80106d01: 6a 22 push $0x22 - jmp alltraps -80106d03: e9 8b f8 ff ff jmp 80106593 - -80106d08 : -.globl vector35 -vector35: - pushl $0 -80106d08: 6a 00 push $0x0 - pushl $35 -80106d0a: 6a 23 push $0x23 - jmp alltraps -80106d0c: e9 82 f8 ff ff jmp 80106593 - -80106d11 : -.globl vector36 -vector36: - pushl $0 -80106d11: 6a 00 push $0x0 - pushl $36 -80106d13: 6a 24 push $0x24 - jmp alltraps -80106d15: e9 79 f8 ff ff jmp 80106593 - -80106d1a : -.globl vector37 -vector37: - pushl $0 -80106d1a: 6a 00 push $0x0 - pushl $37 -80106d1c: 6a 25 push $0x25 - jmp alltraps -80106d1e: e9 70 f8 ff ff jmp 80106593 - -80106d23 : -.globl vector38 -vector38: - pushl $0 -80106d23: 6a 00 push $0x0 - pushl $38 -80106d25: 6a 26 push $0x26 - jmp alltraps -80106d27: e9 67 f8 ff ff jmp 80106593 - -80106d2c : -.globl vector39 -vector39: - pushl $0 -80106d2c: 6a 00 push $0x0 - pushl $39 -80106d2e: 6a 27 push $0x27 - jmp alltraps -80106d30: e9 5e f8 ff ff jmp 80106593 - -80106d35 : -.globl vector40 -vector40: - pushl $0 -80106d35: 6a 00 push $0x0 - pushl $40 -80106d37: 6a 28 push $0x28 - jmp alltraps -80106d39: e9 55 f8 ff ff jmp 80106593 - -80106d3e : -.globl vector41 -vector41: - pushl $0 -80106d3e: 6a 00 push $0x0 - pushl $41 -80106d40: 6a 29 push $0x29 - jmp alltraps -80106d42: e9 4c f8 ff ff jmp 80106593 - -80106d47 : -.globl vector42 -vector42: - pushl $0 -80106d47: 6a 00 push $0x0 - pushl $42 -80106d49: 6a 2a push $0x2a - jmp alltraps -80106d4b: e9 43 f8 ff ff jmp 80106593 - -80106d50 : -.globl vector43 -vector43: - pushl $0 -80106d50: 6a 00 push $0x0 - pushl $43 -80106d52: 6a 2b push $0x2b - jmp alltraps -80106d54: e9 3a f8 ff ff jmp 80106593 - -80106d59 : -.globl vector44 -vector44: - pushl $0 -80106d59: 6a 00 push $0x0 - pushl $44 -80106d5b: 6a 2c push $0x2c - jmp alltraps -80106d5d: e9 31 f8 ff ff jmp 80106593 - -80106d62 : -.globl vector45 -vector45: - pushl $0 -80106d62: 6a 00 push $0x0 - pushl $45 -80106d64: 6a 2d push $0x2d - jmp alltraps -80106d66: e9 28 f8 ff ff jmp 80106593 - -80106d6b : -.globl vector46 -vector46: - pushl $0 -80106d6b: 6a 00 push $0x0 - pushl $46 -80106d6d: 6a 2e push $0x2e - jmp alltraps -80106d6f: e9 1f f8 ff ff jmp 80106593 - -80106d74 : -.globl vector47 -vector47: - pushl $0 -80106d74: 6a 00 push $0x0 - pushl $47 -80106d76: 6a 2f push $0x2f - jmp alltraps -80106d78: e9 16 f8 ff ff jmp 80106593 - -80106d7d : -.globl vector48 -vector48: - pushl $0 -80106d7d: 6a 00 push $0x0 - pushl $48 -80106d7f: 6a 30 push $0x30 - jmp alltraps -80106d81: e9 0d f8 ff ff jmp 80106593 - -80106d86 : -.globl vector49 -vector49: - pushl $0 -80106d86: 6a 00 push $0x0 - pushl $49 -80106d88: 6a 31 push $0x31 - jmp alltraps -80106d8a: e9 04 f8 ff ff jmp 80106593 - -80106d8f : -.globl vector50 -vector50: - pushl $0 -80106d8f: 6a 00 push $0x0 - pushl $50 -80106d91: 6a 32 push $0x32 - jmp alltraps -80106d93: e9 fb f7 ff ff jmp 80106593 - -80106d98 : -.globl vector51 -vector51: - pushl $0 -80106d98: 6a 00 push $0x0 - pushl $51 -80106d9a: 6a 33 push $0x33 - jmp alltraps -80106d9c: e9 f2 f7 ff ff jmp 80106593 - -80106da1 : -.globl vector52 -vector52: - pushl $0 -80106da1: 6a 00 push $0x0 - pushl $52 -80106da3: 6a 34 push $0x34 - jmp alltraps -80106da5: e9 e9 f7 ff ff jmp 80106593 - -80106daa : -.globl vector53 -vector53: - pushl $0 -80106daa: 6a 00 push $0x0 - pushl $53 -80106dac: 6a 35 push $0x35 - jmp alltraps -80106dae: e9 e0 f7 ff ff jmp 80106593 - -80106db3 : -.globl vector54 -vector54: - pushl $0 -80106db3: 6a 00 push $0x0 - pushl $54 -80106db5: 6a 36 push $0x36 - jmp alltraps -80106db7: e9 d7 f7 ff ff jmp 80106593 - -80106dbc : -.globl vector55 -vector55: - pushl $0 -80106dbc: 6a 00 push $0x0 - pushl $55 -80106dbe: 6a 37 push $0x37 - jmp alltraps -80106dc0: e9 ce f7 ff ff jmp 80106593 - -80106dc5 : -.globl vector56 -vector56: - pushl $0 -80106dc5: 6a 00 push $0x0 - pushl $56 -80106dc7: 6a 38 push $0x38 - jmp alltraps -80106dc9: e9 c5 f7 ff ff jmp 80106593 - -80106dce : -.globl vector57 -vector57: - pushl $0 -80106dce: 6a 00 push $0x0 - pushl $57 -80106dd0: 6a 39 push $0x39 - jmp alltraps -80106dd2: e9 bc f7 ff ff jmp 80106593 - -80106dd7 : -.globl vector58 -vector58: - pushl $0 -80106dd7: 6a 00 push $0x0 - pushl $58 -80106dd9: 6a 3a push $0x3a - jmp alltraps -80106ddb: e9 b3 f7 ff ff jmp 80106593 - -80106de0 : -.globl vector59 -vector59: - pushl $0 -80106de0: 6a 00 push $0x0 - pushl $59 -80106de2: 6a 3b push $0x3b - jmp alltraps -80106de4: e9 aa f7 ff ff jmp 80106593 - -80106de9 : -.globl vector60 -vector60: - pushl $0 -80106de9: 6a 00 push $0x0 - pushl $60 -80106deb: 6a 3c push $0x3c - jmp alltraps -80106ded: e9 a1 f7 ff ff jmp 80106593 - -80106df2 : -.globl vector61 -vector61: - pushl $0 -80106df2: 6a 00 push $0x0 - pushl $61 -80106df4: 6a 3d push $0x3d - jmp alltraps -80106df6: e9 98 f7 ff ff jmp 80106593 - -80106dfb : -.globl vector62 -vector62: - pushl $0 -80106dfb: 6a 00 push $0x0 - pushl $62 -80106dfd: 6a 3e push $0x3e - jmp alltraps -80106dff: e9 8f f7 ff ff jmp 80106593 - -80106e04 : -.globl vector63 -vector63: - pushl $0 -80106e04: 6a 00 push $0x0 - pushl $63 -80106e06: 6a 3f push $0x3f - jmp alltraps -80106e08: e9 86 f7 ff ff jmp 80106593 - -80106e0d : -.globl vector64 -vector64: - pushl $0 -80106e0d: 6a 00 push $0x0 - pushl $64 -80106e0f: 6a 40 push $0x40 - jmp alltraps -80106e11: e9 7d f7 ff ff jmp 80106593 - -80106e16 : -.globl vector65 -vector65: - pushl $0 -80106e16: 6a 00 push $0x0 - pushl $65 -80106e18: 6a 41 push $0x41 - jmp alltraps -80106e1a: e9 74 f7 ff ff jmp 80106593 - -80106e1f : -.globl vector66 -vector66: - pushl $0 -80106e1f: 6a 00 push $0x0 - pushl $66 -80106e21: 6a 42 push $0x42 - jmp alltraps -80106e23: e9 6b f7 ff ff jmp 80106593 - -80106e28 : -.globl vector67 -vector67: - pushl $0 -80106e28: 6a 00 push $0x0 - pushl $67 -80106e2a: 6a 43 push $0x43 - jmp alltraps -80106e2c: e9 62 f7 ff ff jmp 80106593 - -80106e31 : -.globl vector68 -vector68: - pushl $0 -80106e31: 6a 00 push $0x0 - pushl $68 -80106e33: 6a 44 push $0x44 - jmp alltraps -80106e35: e9 59 f7 ff ff jmp 80106593 - -80106e3a : -.globl vector69 -vector69: - pushl $0 -80106e3a: 6a 00 push $0x0 - pushl $69 -80106e3c: 6a 45 push $0x45 - jmp alltraps -80106e3e: e9 50 f7 ff ff jmp 80106593 - -80106e43 : -.globl vector70 -vector70: - pushl $0 -80106e43: 6a 00 push $0x0 - pushl $70 -80106e45: 6a 46 push $0x46 - jmp alltraps -80106e47: e9 47 f7 ff ff jmp 80106593 - -80106e4c : -.globl vector71 -vector71: - pushl $0 -80106e4c: 6a 00 push $0x0 - pushl $71 -80106e4e: 6a 47 push $0x47 - jmp alltraps -80106e50: e9 3e f7 ff ff jmp 80106593 - -80106e55 : -.globl vector72 -vector72: - pushl $0 -80106e55: 6a 00 push $0x0 - pushl $72 -80106e57: 6a 48 push $0x48 - jmp alltraps -80106e59: e9 35 f7 ff ff jmp 80106593 - -80106e5e : -.globl vector73 -vector73: - pushl $0 -80106e5e: 6a 00 push $0x0 - pushl $73 -80106e60: 6a 49 push $0x49 - jmp alltraps -80106e62: e9 2c f7 ff ff jmp 80106593 - -80106e67 : -.globl vector74 -vector74: - pushl $0 -80106e67: 6a 00 push $0x0 - pushl $74 -80106e69: 6a 4a push $0x4a - jmp alltraps -80106e6b: e9 23 f7 ff ff jmp 80106593 - -80106e70 : -.globl vector75 -vector75: - pushl $0 -80106e70: 6a 00 push $0x0 - pushl $75 -80106e72: 6a 4b push $0x4b - jmp alltraps -80106e74: e9 1a f7 ff ff jmp 80106593 - -80106e79 : -.globl vector76 -vector76: - pushl $0 -80106e79: 6a 00 push $0x0 - pushl $76 -80106e7b: 6a 4c push $0x4c - jmp alltraps -80106e7d: e9 11 f7 ff ff jmp 80106593 - -80106e82 : -.globl vector77 -vector77: - pushl $0 -80106e82: 6a 00 push $0x0 - pushl $77 -80106e84: 6a 4d push $0x4d - jmp alltraps -80106e86: e9 08 f7 ff ff jmp 80106593 - -80106e8b : -.globl vector78 -vector78: - pushl $0 -80106e8b: 6a 00 push $0x0 - pushl $78 -80106e8d: 6a 4e push $0x4e - jmp alltraps -80106e8f: e9 ff f6 ff ff jmp 80106593 - -80106e94 : -.globl vector79 -vector79: - pushl $0 -80106e94: 6a 00 push $0x0 - pushl $79 -80106e96: 6a 4f push $0x4f - jmp alltraps -80106e98: e9 f6 f6 ff ff jmp 80106593 - -80106e9d : -.globl vector80 -vector80: - pushl $0 -80106e9d: 6a 00 push $0x0 - pushl $80 -80106e9f: 6a 50 push $0x50 - jmp alltraps -80106ea1: e9 ed f6 ff ff jmp 80106593 - -80106ea6 : -.globl vector81 -vector81: - pushl $0 -80106ea6: 6a 00 push $0x0 - pushl $81 -80106ea8: 6a 51 push $0x51 - jmp alltraps -80106eaa: e9 e4 f6 ff ff jmp 80106593 - -80106eaf : -.globl vector82 -vector82: - pushl $0 -80106eaf: 6a 00 push $0x0 - pushl $82 -80106eb1: 6a 52 push $0x52 - jmp alltraps -80106eb3: e9 db f6 ff ff jmp 80106593 - -80106eb8 : -.globl vector83 -vector83: - pushl $0 -80106eb8: 6a 00 push $0x0 - pushl $83 -80106eba: 6a 53 push $0x53 - jmp alltraps -80106ebc: e9 d2 f6 ff ff jmp 80106593 - -80106ec1 : -.globl vector84 -vector84: - pushl $0 -80106ec1: 6a 00 push $0x0 - pushl $84 -80106ec3: 6a 54 push $0x54 - jmp alltraps -80106ec5: e9 c9 f6 ff ff jmp 80106593 - -80106eca : -.globl vector85 -vector85: - pushl $0 -80106eca: 6a 00 push $0x0 - pushl $85 -80106ecc: 6a 55 push $0x55 - jmp alltraps -80106ece: e9 c0 f6 ff ff jmp 80106593 - -80106ed3 : -.globl vector86 -vector86: - pushl $0 -80106ed3: 6a 00 push $0x0 - pushl $86 -80106ed5: 6a 56 push $0x56 - jmp alltraps -80106ed7: e9 b7 f6 ff ff jmp 80106593 - -80106edc : -.globl vector87 -vector87: - pushl $0 -80106edc: 6a 00 push $0x0 - pushl $87 -80106ede: 6a 57 push $0x57 - jmp alltraps -80106ee0: e9 ae f6 ff ff jmp 80106593 - -80106ee5 : -.globl vector88 -vector88: - pushl $0 -80106ee5: 6a 00 push $0x0 - pushl $88 -80106ee7: 6a 58 push $0x58 - jmp alltraps -80106ee9: e9 a5 f6 ff ff jmp 80106593 - -80106eee : -.globl vector89 -vector89: - pushl $0 -80106eee: 6a 00 push $0x0 - pushl $89 -80106ef0: 6a 59 push $0x59 - jmp alltraps -80106ef2: e9 9c f6 ff ff jmp 80106593 - -80106ef7 : -.globl vector90 -vector90: - pushl $0 -80106ef7: 6a 00 push $0x0 - pushl $90 -80106ef9: 6a 5a push $0x5a - jmp alltraps -80106efb: e9 93 f6 ff ff jmp 80106593 - -80106f00 : -.globl vector91 -vector91: - pushl $0 -80106f00: 6a 00 push $0x0 - pushl $91 -80106f02: 6a 5b push $0x5b - jmp alltraps -80106f04: e9 8a f6 ff ff jmp 80106593 - -80106f09 : -.globl vector92 -vector92: - pushl $0 -80106f09: 6a 00 push $0x0 - pushl $92 -80106f0b: 6a 5c push $0x5c - jmp alltraps -80106f0d: e9 81 f6 ff ff jmp 80106593 - -80106f12 : -.globl vector93 -vector93: - pushl $0 -80106f12: 6a 00 push $0x0 - pushl $93 -80106f14: 6a 5d push $0x5d - jmp alltraps -80106f16: e9 78 f6 ff ff jmp 80106593 - -80106f1b : -.globl vector94 -vector94: - pushl $0 -80106f1b: 6a 00 push $0x0 - pushl $94 -80106f1d: 6a 5e push $0x5e - jmp alltraps -80106f1f: e9 6f f6 ff ff jmp 80106593 - -80106f24 : -.globl vector95 -vector95: - pushl $0 -80106f24: 6a 00 push $0x0 - pushl $95 -80106f26: 6a 5f push $0x5f - jmp alltraps -80106f28: e9 66 f6 ff ff jmp 80106593 - -80106f2d : -.globl vector96 -vector96: - pushl $0 -80106f2d: 6a 00 push $0x0 - pushl $96 -80106f2f: 6a 60 push $0x60 - jmp alltraps -80106f31: e9 5d f6 ff ff jmp 80106593 - -80106f36 : -.globl vector97 -vector97: - pushl $0 -80106f36: 6a 00 push $0x0 - pushl $97 -80106f38: 6a 61 push $0x61 - jmp alltraps -80106f3a: e9 54 f6 ff ff jmp 80106593 - -80106f3f : -.globl vector98 -vector98: - pushl $0 -80106f3f: 6a 00 push $0x0 - pushl $98 -80106f41: 6a 62 push $0x62 - jmp alltraps -80106f43: e9 4b f6 ff ff jmp 80106593 - -80106f48 : -.globl vector99 -vector99: - pushl $0 -80106f48: 6a 00 push $0x0 - pushl $99 -80106f4a: 6a 63 push $0x63 - jmp alltraps -80106f4c: e9 42 f6 ff ff jmp 80106593 - -80106f51 : -.globl vector100 -vector100: - pushl $0 -80106f51: 6a 00 push $0x0 - pushl $100 -80106f53: 6a 64 push $0x64 - jmp alltraps -80106f55: e9 39 f6 ff ff jmp 80106593 - -80106f5a : -.globl vector101 -vector101: - pushl $0 -80106f5a: 6a 00 push $0x0 - pushl $101 -80106f5c: 6a 65 push $0x65 - jmp alltraps -80106f5e: e9 30 f6 ff ff jmp 80106593 - -80106f63 : -.globl vector102 -vector102: - pushl $0 -80106f63: 6a 00 push $0x0 - pushl $102 -80106f65: 6a 66 push $0x66 - jmp alltraps -80106f67: e9 27 f6 ff ff jmp 80106593 - -80106f6c : -.globl vector103 -vector103: - pushl $0 -80106f6c: 6a 00 push $0x0 - pushl $103 -80106f6e: 6a 67 push $0x67 - jmp alltraps -80106f70: e9 1e f6 ff ff jmp 80106593 - -80106f75 : -.globl vector104 -vector104: - pushl $0 -80106f75: 6a 00 push $0x0 - pushl $104 -80106f77: 6a 68 push $0x68 - jmp alltraps -80106f79: e9 15 f6 ff ff jmp 80106593 - -80106f7e : -.globl vector105 -vector105: - pushl $0 -80106f7e: 6a 00 push $0x0 - pushl $105 -80106f80: 6a 69 push $0x69 - jmp alltraps -80106f82: e9 0c f6 ff ff jmp 80106593 - -80106f87 : -.globl vector106 -vector106: - pushl $0 -80106f87: 6a 00 push $0x0 - pushl $106 -80106f89: 6a 6a push $0x6a - jmp alltraps -80106f8b: e9 03 f6 ff ff jmp 80106593 - -80106f90 : -.globl vector107 -vector107: - pushl $0 -80106f90: 6a 00 push $0x0 - pushl $107 -80106f92: 6a 6b push $0x6b - jmp alltraps -80106f94: e9 fa f5 ff ff jmp 80106593 - -80106f99 : -.globl vector108 -vector108: - pushl $0 -80106f99: 6a 00 push $0x0 - pushl $108 -80106f9b: 6a 6c push $0x6c - jmp alltraps -80106f9d: e9 f1 f5 ff ff jmp 80106593 - -80106fa2 : -.globl vector109 -vector109: - pushl $0 -80106fa2: 6a 00 push $0x0 - pushl $109 -80106fa4: 6a 6d push $0x6d - jmp alltraps -80106fa6: e9 e8 f5 ff ff jmp 80106593 - -80106fab : -.globl vector110 -vector110: - pushl $0 -80106fab: 6a 00 push $0x0 - pushl $110 -80106fad: 6a 6e push $0x6e - jmp alltraps -80106faf: e9 df f5 ff ff jmp 80106593 - -80106fb4 : -.globl vector111 -vector111: - pushl $0 -80106fb4: 6a 00 push $0x0 - pushl $111 -80106fb6: 6a 6f push $0x6f - jmp alltraps -80106fb8: e9 d6 f5 ff ff jmp 80106593 - -80106fbd : -.globl vector112 -vector112: - pushl $0 -80106fbd: 6a 00 push $0x0 - pushl $112 -80106fbf: 6a 70 push $0x70 - jmp alltraps -80106fc1: e9 cd f5 ff ff jmp 80106593 - -80106fc6 : -.globl vector113 -vector113: - pushl $0 -80106fc6: 6a 00 push $0x0 - pushl $113 -80106fc8: 6a 71 push $0x71 - jmp alltraps -80106fca: e9 c4 f5 ff ff jmp 80106593 - -80106fcf : -.globl vector114 -vector114: - pushl $0 -80106fcf: 6a 00 push $0x0 - pushl $114 -80106fd1: 6a 72 push $0x72 - jmp alltraps -80106fd3: e9 bb f5 ff ff jmp 80106593 - -80106fd8 : -.globl vector115 -vector115: - pushl $0 -80106fd8: 6a 00 push $0x0 - pushl $115 -80106fda: 6a 73 push $0x73 - jmp alltraps -80106fdc: e9 b2 f5 ff ff jmp 80106593 - -80106fe1 : -.globl vector116 -vector116: - pushl $0 -80106fe1: 6a 00 push $0x0 - pushl $116 -80106fe3: 6a 74 push $0x74 - jmp alltraps -80106fe5: e9 a9 f5 ff ff jmp 80106593 - -80106fea : -.globl vector117 -vector117: - pushl $0 -80106fea: 6a 00 push $0x0 - pushl $117 -80106fec: 6a 75 push $0x75 - jmp alltraps -80106fee: e9 a0 f5 ff ff jmp 80106593 - -80106ff3 : -.globl vector118 -vector118: - pushl $0 -80106ff3: 6a 00 push $0x0 - pushl $118 -80106ff5: 6a 76 push $0x76 - jmp alltraps -80106ff7: e9 97 f5 ff ff jmp 80106593 - -80106ffc : -.globl vector119 -vector119: - pushl $0 -80106ffc: 6a 00 push $0x0 - pushl $119 -80106ffe: 6a 77 push $0x77 - jmp alltraps -80107000: e9 8e f5 ff ff jmp 80106593 - -80107005 : -.globl vector120 -vector120: - pushl $0 -80107005: 6a 00 push $0x0 - pushl $120 -80107007: 6a 78 push $0x78 - jmp alltraps -80107009: e9 85 f5 ff ff jmp 80106593 - -8010700e : -.globl vector121 -vector121: - pushl $0 -8010700e: 6a 00 push $0x0 - pushl $121 -80107010: 6a 79 push $0x79 - jmp alltraps -80107012: e9 7c f5 ff ff jmp 80106593 - -80107017 : -.globl vector122 -vector122: - pushl $0 -80107017: 6a 00 push $0x0 - pushl $122 -80107019: 6a 7a push $0x7a - jmp alltraps -8010701b: e9 73 f5 ff ff jmp 80106593 - -80107020 : -.globl vector123 -vector123: - pushl $0 -80107020: 6a 00 push $0x0 - pushl $123 -80107022: 6a 7b push $0x7b - jmp alltraps -80107024: e9 6a f5 ff ff jmp 80106593 - -80107029 : -.globl vector124 -vector124: - pushl $0 -80107029: 6a 00 push $0x0 - pushl $124 -8010702b: 6a 7c push $0x7c - jmp alltraps -8010702d: e9 61 f5 ff ff jmp 80106593 - -80107032 : -.globl vector125 -vector125: - pushl $0 -80107032: 6a 00 push $0x0 - pushl $125 -80107034: 6a 7d push $0x7d - jmp alltraps -80107036: e9 58 f5 ff ff jmp 80106593 - -8010703b : -.globl vector126 -vector126: - pushl $0 -8010703b: 6a 00 push $0x0 - pushl $126 -8010703d: 6a 7e push $0x7e - jmp alltraps -8010703f: e9 4f f5 ff ff jmp 80106593 - -80107044 : -.globl vector127 -vector127: - pushl $0 -80107044: 6a 00 push $0x0 - pushl $127 -80107046: 6a 7f push $0x7f - jmp alltraps -80107048: e9 46 f5 ff ff jmp 80106593 - -8010704d : -.globl vector128 -vector128: - pushl $0 -8010704d: 6a 00 push $0x0 - pushl $128 -8010704f: 68 80 00 00 00 push $0x80 - jmp alltraps -80107054: e9 3a f5 ff ff jmp 80106593 - -80107059 : -.globl vector129 -vector129: - pushl $0 -80107059: 6a 00 push $0x0 - pushl $129 -8010705b: 68 81 00 00 00 push $0x81 - jmp alltraps -80107060: e9 2e f5 ff ff jmp 80106593 - -80107065 : -.globl vector130 -vector130: - pushl $0 -80107065: 6a 00 push $0x0 - pushl $130 -80107067: 68 82 00 00 00 push $0x82 - jmp alltraps -8010706c: e9 22 f5 ff ff jmp 80106593 - -80107071 : -.globl vector131 -vector131: - pushl $0 -80107071: 6a 00 push $0x0 - pushl $131 -80107073: 68 83 00 00 00 push $0x83 - jmp alltraps -80107078: e9 16 f5 ff ff jmp 80106593 - -8010707d : -.globl vector132 -vector132: - pushl $0 -8010707d: 6a 00 push $0x0 - pushl $132 -8010707f: 68 84 00 00 00 push $0x84 - jmp alltraps -80107084: e9 0a f5 ff ff jmp 80106593 - -80107089 : -.globl vector133 -vector133: - pushl $0 -80107089: 6a 00 push $0x0 - pushl $133 -8010708b: 68 85 00 00 00 push $0x85 - jmp alltraps -80107090: e9 fe f4 ff ff jmp 80106593 - -80107095 : -.globl vector134 -vector134: - pushl $0 -80107095: 6a 00 push $0x0 - pushl $134 -80107097: 68 86 00 00 00 push $0x86 - jmp alltraps -8010709c: e9 f2 f4 ff ff jmp 80106593 - -801070a1 : -.globl vector135 -vector135: - pushl $0 -801070a1: 6a 00 push $0x0 - pushl $135 -801070a3: 68 87 00 00 00 push $0x87 - jmp alltraps -801070a8: e9 e6 f4 ff ff jmp 80106593 - -801070ad : -.globl vector136 -vector136: - pushl $0 -801070ad: 6a 00 push $0x0 - pushl $136 -801070af: 68 88 00 00 00 push $0x88 - jmp alltraps -801070b4: e9 da f4 ff ff jmp 80106593 - -801070b9 : -.globl vector137 -vector137: - pushl $0 -801070b9: 6a 00 push $0x0 - pushl $137 -801070bb: 68 89 00 00 00 push $0x89 - jmp alltraps -801070c0: e9 ce f4 ff ff jmp 80106593 - -801070c5 : -.globl vector138 -vector138: - pushl $0 -801070c5: 6a 00 push $0x0 - pushl $138 -801070c7: 68 8a 00 00 00 push $0x8a - jmp alltraps -801070cc: e9 c2 f4 ff ff jmp 80106593 - -801070d1 : -.globl vector139 -vector139: - pushl $0 -801070d1: 6a 00 push $0x0 - pushl $139 -801070d3: 68 8b 00 00 00 push $0x8b - jmp alltraps -801070d8: e9 b6 f4 ff ff jmp 80106593 - -801070dd : -.globl vector140 -vector140: - pushl $0 -801070dd: 6a 00 push $0x0 - pushl $140 -801070df: 68 8c 00 00 00 push $0x8c - jmp alltraps -801070e4: e9 aa f4 ff ff jmp 80106593 - -801070e9 : -.globl vector141 -vector141: - pushl $0 -801070e9: 6a 00 push $0x0 - pushl $141 -801070eb: 68 8d 00 00 00 push $0x8d - jmp alltraps -801070f0: e9 9e f4 ff ff jmp 80106593 - -801070f5 : -.globl vector142 -vector142: - pushl $0 -801070f5: 6a 00 push $0x0 - pushl $142 -801070f7: 68 8e 00 00 00 push $0x8e - jmp alltraps -801070fc: e9 92 f4 ff ff jmp 80106593 - -80107101 : -.globl vector143 -vector143: - pushl $0 -80107101: 6a 00 push $0x0 - pushl $143 -80107103: 68 8f 00 00 00 push $0x8f - jmp alltraps -80107108: e9 86 f4 ff ff jmp 80106593 - -8010710d : -.globl vector144 -vector144: - pushl $0 -8010710d: 6a 00 push $0x0 - pushl $144 -8010710f: 68 90 00 00 00 push $0x90 - jmp alltraps -80107114: e9 7a f4 ff ff jmp 80106593 - -80107119 : -.globl vector145 -vector145: - pushl $0 -80107119: 6a 00 push $0x0 - pushl $145 -8010711b: 68 91 00 00 00 push $0x91 - jmp alltraps -80107120: e9 6e f4 ff ff jmp 80106593 - -80107125 : -.globl vector146 -vector146: - pushl $0 -80107125: 6a 00 push $0x0 - pushl $146 -80107127: 68 92 00 00 00 push $0x92 - jmp alltraps -8010712c: e9 62 f4 ff ff jmp 80106593 - -80107131 : -.globl vector147 -vector147: - pushl $0 -80107131: 6a 00 push $0x0 - pushl $147 -80107133: 68 93 00 00 00 push $0x93 - jmp alltraps -80107138: e9 56 f4 ff ff jmp 80106593 - -8010713d : -.globl vector148 -vector148: - pushl $0 -8010713d: 6a 00 push $0x0 - pushl $148 -8010713f: 68 94 00 00 00 push $0x94 - jmp alltraps -80107144: e9 4a f4 ff ff jmp 80106593 - -80107149 : -.globl vector149 -vector149: - pushl $0 -80107149: 6a 00 push $0x0 - pushl $149 -8010714b: 68 95 00 00 00 push $0x95 - jmp alltraps -80107150: e9 3e f4 ff ff jmp 80106593 - -80107155 : -.globl vector150 -vector150: - pushl $0 -80107155: 6a 00 push $0x0 - pushl $150 -80107157: 68 96 00 00 00 push $0x96 - jmp alltraps -8010715c: e9 32 f4 ff ff jmp 80106593 - -80107161 : -.globl vector151 -vector151: - pushl $0 -80107161: 6a 00 push $0x0 - pushl $151 -80107163: 68 97 00 00 00 push $0x97 - jmp alltraps -80107168: e9 26 f4 ff ff jmp 80106593 - -8010716d : -.globl vector152 -vector152: - pushl $0 -8010716d: 6a 00 push $0x0 - pushl $152 -8010716f: 68 98 00 00 00 push $0x98 - jmp alltraps -80107174: e9 1a f4 ff ff jmp 80106593 - -80107179 : -.globl vector153 -vector153: - pushl $0 -80107179: 6a 00 push $0x0 - pushl $153 -8010717b: 68 99 00 00 00 push $0x99 - jmp alltraps -80107180: e9 0e f4 ff ff jmp 80106593 - -80107185 : -.globl vector154 -vector154: - pushl $0 -80107185: 6a 00 push $0x0 - pushl $154 -80107187: 68 9a 00 00 00 push $0x9a - jmp alltraps -8010718c: e9 02 f4 ff ff jmp 80106593 - -80107191 : -.globl vector155 -vector155: - pushl $0 -80107191: 6a 00 push $0x0 - pushl $155 -80107193: 68 9b 00 00 00 push $0x9b - jmp alltraps -80107198: e9 f6 f3 ff ff jmp 80106593 - -8010719d : -.globl vector156 -vector156: - pushl $0 -8010719d: 6a 00 push $0x0 - pushl $156 -8010719f: 68 9c 00 00 00 push $0x9c - jmp alltraps -801071a4: e9 ea f3 ff ff jmp 80106593 - -801071a9 : -.globl vector157 -vector157: - pushl $0 -801071a9: 6a 00 push $0x0 - pushl $157 -801071ab: 68 9d 00 00 00 push $0x9d - jmp alltraps -801071b0: e9 de f3 ff ff jmp 80106593 - -801071b5 : -.globl vector158 -vector158: - pushl $0 -801071b5: 6a 00 push $0x0 - pushl $158 -801071b7: 68 9e 00 00 00 push $0x9e - jmp alltraps -801071bc: e9 d2 f3 ff ff jmp 80106593 - -801071c1 : -.globl vector159 -vector159: - pushl $0 -801071c1: 6a 00 push $0x0 - pushl $159 -801071c3: 68 9f 00 00 00 push $0x9f - jmp alltraps -801071c8: e9 c6 f3 ff ff jmp 80106593 - -801071cd : -.globl vector160 -vector160: - pushl $0 -801071cd: 6a 00 push $0x0 - pushl $160 -801071cf: 68 a0 00 00 00 push $0xa0 - jmp alltraps -801071d4: e9 ba f3 ff ff jmp 80106593 - -801071d9 : -.globl vector161 -vector161: - pushl $0 -801071d9: 6a 00 push $0x0 - pushl $161 -801071db: 68 a1 00 00 00 push $0xa1 - jmp alltraps -801071e0: e9 ae f3 ff ff jmp 80106593 - -801071e5 : -.globl vector162 -vector162: - pushl $0 -801071e5: 6a 00 push $0x0 - pushl $162 -801071e7: 68 a2 00 00 00 push $0xa2 - jmp alltraps -801071ec: e9 a2 f3 ff ff jmp 80106593 - -801071f1 : -.globl vector163 -vector163: - pushl $0 -801071f1: 6a 00 push $0x0 - pushl $163 -801071f3: 68 a3 00 00 00 push $0xa3 - jmp alltraps -801071f8: e9 96 f3 ff ff jmp 80106593 - -801071fd : -.globl vector164 -vector164: - pushl $0 -801071fd: 6a 00 push $0x0 - pushl $164 -801071ff: 68 a4 00 00 00 push $0xa4 - jmp alltraps -80107204: e9 8a f3 ff ff jmp 80106593 - -80107209 : -.globl vector165 -vector165: - pushl $0 -80107209: 6a 00 push $0x0 - pushl $165 -8010720b: 68 a5 00 00 00 push $0xa5 - jmp alltraps -80107210: e9 7e f3 ff ff jmp 80106593 - -80107215 : -.globl vector166 -vector166: - pushl $0 -80107215: 6a 00 push $0x0 - pushl $166 -80107217: 68 a6 00 00 00 push $0xa6 - jmp alltraps -8010721c: e9 72 f3 ff ff jmp 80106593 - -80107221 : -.globl vector167 -vector167: - pushl $0 -80107221: 6a 00 push $0x0 - pushl $167 -80107223: 68 a7 00 00 00 push $0xa7 - jmp alltraps -80107228: e9 66 f3 ff ff jmp 80106593 - -8010722d : -.globl vector168 -vector168: - pushl $0 -8010722d: 6a 00 push $0x0 - pushl $168 -8010722f: 68 a8 00 00 00 push $0xa8 - jmp alltraps -80107234: e9 5a f3 ff ff jmp 80106593 - -80107239 : -.globl vector169 -vector169: - pushl $0 -80107239: 6a 00 push $0x0 - pushl $169 -8010723b: 68 a9 00 00 00 push $0xa9 - jmp alltraps -80107240: e9 4e f3 ff ff jmp 80106593 - -80107245 : -.globl vector170 -vector170: - pushl $0 -80107245: 6a 00 push $0x0 - pushl $170 -80107247: 68 aa 00 00 00 push $0xaa - jmp alltraps -8010724c: e9 42 f3 ff ff jmp 80106593 - -80107251 : -.globl vector171 -vector171: - pushl $0 -80107251: 6a 00 push $0x0 - pushl $171 -80107253: 68 ab 00 00 00 push $0xab - jmp alltraps -80107258: e9 36 f3 ff ff jmp 80106593 - -8010725d : -.globl vector172 -vector172: - pushl $0 -8010725d: 6a 00 push $0x0 - pushl $172 -8010725f: 68 ac 00 00 00 push $0xac - jmp alltraps -80107264: e9 2a f3 ff ff jmp 80106593 - -80107269 : -.globl vector173 -vector173: - pushl $0 -80107269: 6a 00 push $0x0 - pushl $173 -8010726b: 68 ad 00 00 00 push $0xad - jmp alltraps -80107270: e9 1e f3 ff ff jmp 80106593 - -80107275 : -.globl vector174 -vector174: - pushl $0 -80107275: 6a 00 push $0x0 - pushl $174 -80107277: 68 ae 00 00 00 push $0xae - jmp alltraps -8010727c: e9 12 f3 ff ff jmp 80106593 - -80107281 : -.globl vector175 -vector175: - pushl $0 -80107281: 6a 00 push $0x0 - pushl $175 -80107283: 68 af 00 00 00 push $0xaf - jmp alltraps -80107288: e9 06 f3 ff ff jmp 80106593 - -8010728d : -.globl vector176 -vector176: - pushl $0 -8010728d: 6a 00 push $0x0 - pushl $176 -8010728f: 68 b0 00 00 00 push $0xb0 - jmp alltraps -80107294: e9 fa f2 ff ff jmp 80106593 - -80107299 : -.globl vector177 -vector177: - pushl $0 -80107299: 6a 00 push $0x0 - pushl $177 -8010729b: 68 b1 00 00 00 push $0xb1 - jmp alltraps -801072a0: e9 ee f2 ff ff jmp 80106593 - -801072a5 : -.globl vector178 -vector178: - pushl $0 -801072a5: 6a 00 push $0x0 - pushl $178 -801072a7: 68 b2 00 00 00 push $0xb2 - jmp alltraps -801072ac: e9 e2 f2 ff ff jmp 80106593 - -801072b1 : -.globl vector179 -vector179: - pushl $0 -801072b1: 6a 00 push $0x0 - pushl $179 -801072b3: 68 b3 00 00 00 push $0xb3 - jmp alltraps -801072b8: e9 d6 f2 ff ff jmp 80106593 - -801072bd : -.globl vector180 -vector180: - pushl $0 -801072bd: 6a 00 push $0x0 - pushl $180 -801072bf: 68 b4 00 00 00 push $0xb4 - jmp alltraps -801072c4: e9 ca f2 ff ff jmp 80106593 - -801072c9 : -.globl vector181 -vector181: - pushl $0 -801072c9: 6a 00 push $0x0 - pushl $181 -801072cb: 68 b5 00 00 00 push $0xb5 - jmp alltraps -801072d0: e9 be f2 ff ff jmp 80106593 - -801072d5 : -.globl vector182 -vector182: - pushl $0 -801072d5: 6a 00 push $0x0 - pushl $182 -801072d7: 68 b6 00 00 00 push $0xb6 - jmp alltraps -801072dc: e9 b2 f2 ff ff jmp 80106593 - -801072e1 : -.globl vector183 -vector183: - pushl $0 -801072e1: 6a 00 push $0x0 - pushl $183 -801072e3: 68 b7 00 00 00 push $0xb7 - jmp alltraps -801072e8: e9 a6 f2 ff ff jmp 80106593 - -801072ed : -.globl vector184 -vector184: - pushl $0 -801072ed: 6a 00 push $0x0 - pushl $184 -801072ef: 68 b8 00 00 00 push $0xb8 - jmp alltraps -801072f4: e9 9a f2 ff ff jmp 80106593 - -801072f9 : -.globl vector185 -vector185: - pushl $0 -801072f9: 6a 00 push $0x0 - pushl $185 -801072fb: 68 b9 00 00 00 push $0xb9 - jmp alltraps -80107300: e9 8e f2 ff ff jmp 80106593 - -80107305 : -.globl vector186 -vector186: - pushl $0 -80107305: 6a 00 push $0x0 - pushl $186 -80107307: 68 ba 00 00 00 push $0xba - jmp alltraps -8010730c: e9 82 f2 ff ff jmp 80106593 - -80107311 : -.globl vector187 -vector187: - pushl $0 -80107311: 6a 00 push $0x0 - pushl $187 -80107313: 68 bb 00 00 00 push $0xbb - jmp alltraps -80107318: e9 76 f2 ff ff jmp 80106593 - -8010731d : -.globl vector188 -vector188: - pushl $0 -8010731d: 6a 00 push $0x0 - pushl $188 -8010731f: 68 bc 00 00 00 push $0xbc - jmp alltraps -80107324: e9 6a f2 ff ff jmp 80106593 - -80107329 : -.globl vector189 -vector189: - pushl $0 -80107329: 6a 00 push $0x0 - pushl $189 -8010732b: 68 bd 00 00 00 push $0xbd - jmp alltraps -80107330: e9 5e f2 ff ff jmp 80106593 - -80107335 : -.globl vector190 -vector190: - pushl $0 -80107335: 6a 00 push $0x0 - pushl $190 -80107337: 68 be 00 00 00 push $0xbe - jmp alltraps -8010733c: e9 52 f2 ff ff jmp 80106593 - -80107341 : -.globl vector191 -vector191: - pushl $0 -80107341: 6a 00 push $0x0 - pushl $191 -80107343: 68 bf 00 00 00 push $0xbf - jmp alltraps -80107348: e9 46 f2 ff ff jmp 80106593 - -8010734d : -.globl vector192 -vector192: - pushl $0 -8010734d: 6a 00 push $0x0 - pushl $192 -8010734f: 68 c0 00 00 00 push $0xc0 - jmp alltraps -80107354: e9 3a f2 ff ff jmp 80106593 - -80107359 : -.globl vector193 -vector193: - pushl $0 -80107359: 6a 00 push $0x0 - pushl $193 -8010735b: 68 c1 00 00 00 push $0xc1 - jmp alltraps -80107360: e9 2e f2 ff ff jmp 80106593 - -80107365 : -.globl vector194 -vector194: - pushl $0 -80107365: 6a 00 push $0x0 - pushl $194 -80107367: 68 c2 00 00 00 push $0xc2 - jmp alltraps -8010736c: e9 22 f2 ff ff jmp 80106593 - -80107371 : -.globl vector195 -vector195: - pushl $0 -80107371: 6a 00 push $0x0 - pushl $195 -80107373: 68 c3 00 00 00 push $0xc3 - jmp alltraps -80107378: e9 16 f2 ff ff jmp 80106593 - -8010737d : -.globl vector196 -vector196: - pushl $0 -8010737d: 6a 00 push $0x0 - pushl $196 -8010737f: 68 c4 00 00 00 push $0xc4 - jmp alltraps -80107384: e9 0a f2 ff ff jmp 80106593 - -80107389 : -.globl vector197 -vector197: - pushl $0 -80107389: 6a 00 push $0x0 - pushl $197 -8010738b: 68 c5 00 00 00 push $0xc5 - jmp alltraps -80107390: e9 fe f1 ff ff jmp 80106593 - -80107395 : -.globl vector198 -vector198: - pushl $0 -80107395: 6a 00 push $0x0 - pushl $198 -80107397: 68 c6 00 00 00 push $0xc6 - jmp alltraps -8010739c: e9 f2 f1 ff ff jmp 80106593 - -801073a1 : -.globl vector199 -vector199: - pushl $0 -801073a1: 6a 00 push $0x0 - pushl $199 -801073a3: 68 c7 00 00 00 push $0xc7 - jmp alltraps -801073a8: e9 e6 f1 ff ff jmp 80106593 - -801073ad : -.globl vector200 -vector200: - pushl $0 -801073ad: 6a 00 push $0x0 - pushl $200 -801073af: 68 c8 00 00 00 push $0xc8 - jmp alltraps -801073b4: e9 da f1 ff ff jmp 80106593 - -801073b9 : -.globl vector201 -vector201: - pushl $0 -801073b9: 6a 00 push $0x0 - pushl $201 -801073bb: 68 c9 00 00 00 push $0xc9 - jmp alltraps -801073c0: e9 ce f1 ff ff jmp 80106593 - -801073c5 : -.globl vector202 -vector202: - pushl $0 -801073c5: 6a 00 push $0x0 - pushl $202 -801073c7: 68 ca 00 00 00 push $0xca - jmp alltraps -801073cc: e9 c2 f1 ff ff jmp 80106593 - -801073d1 : -.globl vector203 -vector203: - pushl $0 -801073d1: 6a 00 push $0x0 - pushl $203 -801073d3: 68 cb 00 00 00 push $0xcb - jmp alltraps -801073d8: e9 b6 f1 ff ff jmp 80106593 - -801073dd : -.globl vector204 -vector204: - pushl $0 -801073dd: 6a 00 push $0x0 - pushl $204 -801073df: 68 cc 00 00 00 push $0xcc - jmp alltraps -801073e4: e9 aa f1 ff ff jmp 80106593 - -801073e9 : -.globl vector205 -vector205: - pushl $0 -801073e9: 6a 00 push $0x0 - pushl $205 -801073eb: 68 cd 00 00 00 push $0xcd - jmp alltraps -801073f0: e9 9e f1 ff ff jmp 80106593 - -801073f5 : -.globl vector206 -vector206: - pushl $0 -801073f5: 6a 00 push $0x0 - pushl $206 -801073f7: 68 ce 00 00 00 push $0xce - jmp alltraps -801073fc: e9 92 f1 ff ff jmp 80106593 - -80107401 : -.globl vector207 -vector207: - pushl $0 -80107401: 6a 00 push $0x0 - pushl $207 -80107403: 68 cf 00 00 00 push $0xcf - jmp alltraps -80107408: e9 86 f1 ff ff jmp 80106593 - -8010740d : -.globl vector208 -vector208: - pushl $0 -8010740d: 6a 00 push $0x0 - pushl $208 -8010740f: 68 d0 00 00 00 push $0xd0 - jmp alltraps -80107414: e9 7a f1 ff ff jmp 80106593 - -80107419 : -.globl vector209 -vector209: - pushl $0 -80107419: 6a 00 push $0x0 - pushl $209 -8010741b: 68 d1 00 00 00 push $0xd1 - jmp alltraps -80107420: e9 6e f1 ff ff jmp 80106593 - -80107425 : -.globl vector210 -vector210: - pushl $0 -80107425: 6a 00 push $0x0 - pushl $210 -80107427: 68 d2 00 00 00 push $0xd2 - jmp alltraps -8010742c: e9 62 f1 ff ff jmp 80106593 - -80107431 : -.globl vector211 -vector211: - pushl $0 -80107431: 6a 00 push $0x0 - pushl $211 -80107433: 68 d3 00 00 00 push $0xd3 - jmp alltraps -80107438: e9 56 f1 ff ff jmp 80106593 - -8010743d : -.globl vector212 -vector212: - pushl $0 -8010743d: 6a 00 push $0x0 - pushl $212 -8010743f: 68 d4 00 00 00 push $0xd4 - jmp alltraps -80107444: e9 4a f1 ff ff jmp 80106593 - -80107449 : -.globl vector213 -vector213: - pushl $0 -80107449: 6a 00 push $0x0 - pushl $213 -8010744b: 68 d5 00 00 00 push $0xd5 - jmp alltraps -80107450: e9 3e f1 ff ff jmp 80106593 - -80107455 : -.globl vector214 -vector214: - pushl $0 -80107455: 6a 00 push $0x0 - pushl $214 -80107457: 68 d6 00 00 00 push $0xd6 - jmp alltraps -8010745c: e9 32 f1 ff ff jmp 80106593 - -80107461 : -.globl vector215 -vector215: - pushl $0 -80107461: 6a 00 push $0x0 - pushl $215 -80107463: 68 d7 00 00 00 push $0xd7 - jmp alltraps -80107468: e9 26 f1 ff ff jmp 80106593 - -8010746d : -.globl vector216 -vector216: - pushl $0 -8010746d: 6a 00 push $0x0 - pushl $216 -8010746f: 68 d8 00 00 00 push $0xd8 - jmp alltraps -80107474: e9 1a f1 ff ff jmp 80106593 - -80107479 : -.globl vector217 -vector217: - pushl $0 -80107479: 6a 00 push $0x0 - pushl $217 -8010747b: 68 d9 00 00 00 push $0xd9 - jmp alltraps -80107480: e9 0e f1 ff ff jmp 80106593 - -80107485 : -.globl vector218 -vector218: - pushl $0 -80107485: 6a 00 push $0x0 - pushl $218 -80107487: 68 da 00 00 00 push $0xda - jmp alltraps -8010748c: e9 02 f1 ff ff jmp 80106593 - -80107491 : -.globl vector219 -vector219: - pushl $0 -80107491: 6a 00 push $0x0 - pushl $219 -80107493: 68 db 00 00 00 push $0xdb - jmp alltraps -80107498: e9 f6 f0 ff ff jmp 80106593 - -8010749d : -.globl vector220 -vector220: - pushl $0 -8010749d: 6a 00 push $0x0 - pushl $220 -8010749f: 68 dc 00 00 00 push $0xdc - jmp alltraps -801074a4: e9 ea f0 ff ff jmp 80106593 - -801074a9 : -.globl vector221 -vector221: - pushl $0 -801074a9: 6a 00 push $0x0 - pushl $221 -801074ab: 68 dd 00 00 00 push $0xdd - jmp alltraps -801074b0: e9 de f0 ff ff jmp 80106593 - -801074b5 : -.globl vector222 -vector222: - pushl $0 -801074b5: 6a 00 push $0x0 - pushl $222 -801074b7: 68 de 00 00 00 push $0xde - jmp alltraps -801074bc: e9 d2 f0 ff ff jmp 80106593 - -801074c1 : -.globl vector223 -vector223: - pushl $0 -801074c1: 6a 00 push $0x0 - pushl $223 -801074c3: 68 df 00 00 00 push $0xdf - jmp alltraps -801074c8: e9 c6 f0 ff ff jmp 80106593 - -801074cd : -.globl vector224 -vector224: - pushl $0 -801074cd: 6a 00 push $0x0 - pushl $224 -801074cf: 68 e0 00 00 00 push $0xe0 - jmp alltraps -801074d4: e9 ba f0 ff ff jmp 80106593 - -801074d9 : -.globl vector225 -vector225: - pushl $0 -801074d9: 6a 00 push $0x0 - pushl $225 -801074db: 68 e1 00 00 00 push $0xe1 - jmp alltraps -801074e0: e9 ae f0 ff ff jmp 80106593 - -801074e5 : -.globl vector226 -vector226: - pushl $0 -801074e5: 6a 00 push $0x0 - pushl $226 -801074e7: 68 e2 00 00 00 push $0xe2 - jmp alltraps -801074ec: e9 a2 f0 ff ff jmp 80106593 - -801074f1 : -.globl vector227 -vector227: - pushl $0 -801074f1: 6a 00 push $0x0 - pushl $227 -801074f3: 68 e3 00 00 00 push $0xe3 - jmp alltraps -801074f8: e9 96 f0 ff ff jmp 80106593 - -801074fd : -.globl vector228 -vector228: - pushl $0 -801074fd: 6a 00 push $0x0 - pushl $228 -801074ff: 68 e4 00 00 00 push $0xe4 - jmp alltraps -80107504: e9 8a f0 ff ff jmp 80106593 - -80107509 : -.globl vector229 -vector229: - pushl $0 -80107509: 6a 00 push $0x0 - pushl $229 -8010750b: 68 e5 00 00 00 push $0xe5 - jmp alltraps -80107510: e9 7e f0 ff ff jmp 80106593 - -80107515 : -.globl vector230 -vector230: - pushl $0 -80107515: 6a 00 push $0x0 - pushl $230 -80107517: 68 e6 00 00 00 push $0xe6 - jmp alltraps -8010751c: e9 72 f0 ff ff jmp 80106593 - -80107521 : -.globl vector231 -vector231: - pushl $0 -80107521: 6a 00 push $0x0 - pushl $231 -80107523: 68 e7 00 00 00 push $0xe7 - jmp alltraps -80107528: e9 66 f0 ff ff jmp 80106593 - -8010752d : -.globl vector232 -vector232: - pushl $0 -8010752d: 6a 00 push $0x0 - pushl $232 -8010752f: 68 e8 00 00 00 push $0xe8 - jmp alltraps -80107534: e9 5a f0 ff ff jmp 80106593 - -80107539 : -.globl vector233 -vector233: - pushl $0 -80107539: 6a 00 push $0x0 - pushl $233 -8010753b: 68 e9 00 00 00 push $0xe9 - jmp alltraps -80107540: e9 4e f0 ff ff jmp 80106593 - -80107545 : -.globl vector234 -vector234: - pushl $0 -80107545: 6a 00 push $0x0 - pushl $234 -80107547: 68 ea 00 00 00 push $0xea - jmp alltraps -8010754c: e9 42 f0 ff ff jmp 80106593 - -80107551 : -.globl vector235 -vector235: - pushl $0 -80107551: 6a 00 push $0x0 - pushl $235 -80107553: 68 eb 00 00 00 push $0xeb - jmp alltraps -80107558: e9 36 f0 ff ff jmp 80106593 - -8010755d : -.globl vector236 -vector236: - pushl $0 -8010755d: 6a 00 push $0x0 - pushl $236 -8010755f: 68 ec 00 00 00 push $0xec - jmp alltraps -80107564: e9 2a f0 ff ff jmp 80106593 - -80107569 : -.globl vector237 -vector237: - pushl $0 -80107569: 6a 00 push $0x0 - pushl $237 -8010756b: 68 ed 00 00 00 push $0xed - jmp alltraps -80107570: e9 1e f0 ff ff jmp 80106593 - -80107575 : -.globl vector238 -vector238: - pushl $0 -80107575: 6a 00 push $0x0 - pushl $238 -80107577: 68 ee 00 00 00 push $0xee - jmp alltraps -8010757c: e9 12 f0 ff ff jmp 80106593 - -80107581 : -.globl vector239 -vector239: - pushl $0 -80107581: 6a 00 push $0x0 - pushl $239 -80107583: 68 ef 00 00 00 push $0xef - jmp alltraps -80107588: e9 06 f0 ff ff jmp 80106593 - -8010758d : -.globl vector240 -vector240: - pushl $0 -8010758d: 6a 00 push $0x0 - pushl $240 -8010758f: 68 f0 00 00 00 push $0xf0 - jmp alltraps -80107594: e9 fa ef ff ff jmp 80106593 - -80107599 : -.globl vector241 -vector241: - pushl $0 -80107599: 6a 00 push $0x0 - pushl $241 -8010759b: 68 f1 00 00 00 push $0xf1 - jmp alltraps -801075a0: e9 ee ef ff ff jmp 80106593 - -801075a5 : -.globl vector242 -vector242: - pushl $0 -801075a5: 6a 00 push $0x0 - pushl $242 -801075a7: 68 f2 00 00 00 push $0xf2 - jmp alltraps -801075ac: e9 e2 ef ff ff jmp 80106593 - -801075b1 : -.globl vector243 -vector243: - pushl $0 -801075b1: 6a 00 push $0x0 - pushl $243 -801075b3: 68 f3 00 00 00 push $0xf3 - jmp alltraps -801075b8: e9 d6 ef ff ff jmp 80106593 - -801075bd : -.globl vector244 -vector244: - pushl $0 -801075bd: 6a 00 push $0x0 - pushl $244 -801075bf: 68 f4 00 00 00 push $0xf4 - jmp alltraps -801075c4: e9 ca ef ff ff jmp 80106593 - -801075c9 : -.globl vector245 -vector245: - pushl $0 -801075c9: 6a 00 push $0x0 - pushl $245 -801075cb: 68 f5 00 00 00 push $0xf5 - jmp alltraps -801075d0: e9 be ef ff ff jmp 80106593 - -801075d5 : -.globl vector246 -vector246: - pushl $0 -801075d5: 6a 00 push $0x0 - pushl $246 -801075d7: 68 f6 00 00 00 push $0xf6 - jmp alltraps -801075dc: e9 b2 ef ff ff jmp 80106593 - -801075e1 : -.globl vector247 -vector247: - pushl $0 -801075e1: 6a 00 push $0x0 - pushl $247 -801075e3: 68 f7 00 00 00 push $0xf7 - jmp alltraps -801075e8: e9 a6 ef ff ff jmp 80106593 - -801075ed : -.globl vector248 -vector248: - pushl $0 -801075ed: 6a 00 push $0x0 - pushl $248 -801075ef: 68 f8 00 00 00 push $0xf8 - jmp alltraps -801075f4: e9 9a ef ff ff jmp 80106593 - -801075f9 : -.globl vector249 -vector249: - pushl $0 -801075f9: 6a 00 push $0x0 - pushl $249 -801075fb: 68 f9 00 00 00 push $0xf9 - jmp alltraps -80107600: e9 8e ef ff ff jmp 80106593 - -80107605 : -.globl vector250 -vector250: - pushl $0 -80107605: 6a 00 push $0x0 - pushl $250 -80107607: 68 fa 00 00 00 push $0xfa - jmp alltraps -8010760c: e9 82 ef ff ff jmp 80106593 - -80107611 : -.globl vector251 -vector251: - pushl $0 -80107611: 6a 00 push $0x0 - pushl $251 -80107613: 68 fb 00 00 00 push $0xfb - jmp alltraps -80107618: e9 76 ef ff ff jmp 80106593 - -8010761d : -.globl vector252 -vector252: - pushl $0 -8010761d: 6a 00 push $0x0 - pushl $252 -8010761f: 68 fc 00 00 00 push $0xfc - jmp alltraps -80107624: e9 6a ef ff ff jmp 80106593 - -80107629 : -.globl vector253 -vector253: - pushl $0 -80107629: 6a 00 push $0x0 - pushl $253 -8010762b: 68 fd 00 00 00 push $0xfd - jmp alltraps -80107630: e9 5e ef ff ff jmp 80106593 - -80107635 : -.globl vector254 -vector254: - pushl $0 -80107635: 6a 00 push $0x0 - pushl $254 -80107637: 68 fe 00 00 00 push $0xfe - jmp alltraps -8010763c: e9 52 ef ff ff jmp 80106593 - -80107641 : -.globl vector255 -vector255: - pushl $0 -80107641: 6a 00 push $0x0 - pushl $255 -80107643: 68 ff 00 00 00 push $0xff - jmp alltraps -80107648: e9 46 ef ff ff jmp 80106593 - -8010764d : - -struct segdesc; - -static inline void -lgdt(struct segdesc *p, int size) -{ -8010764d: 55 push %ebp -8010764e: 89 e5 mov %esp,%ebp -80107650: 83 ec 10 sub $0x10,%esp - volatile ushort pd[3]; - - pd[0] = size-1; -80107653: 8b 45 0c mov 0xc(%ebp),%eax -80107656: 83 e8 01 sub $0x1,%eax -80107659: 66 89 45 fa mov %ax,-0x6(%ebp) - pd[1] = (uint)p; -8010765d: 8b 45 08 mov 0x8(%ebp),%eax -80107660: 66 89 45 fc mov %ax,-0x4(%ebp) - pd[2] = (uint)p >> 16; -80107664: 8b 45 08 mov 0x8(%ebp),%eax -80107667: c1 e8 10 shr $0x10,%eax -8010766a: 66 89 45 fe mov %ax,-0x2(%ebp) - - asm volatile("lgdt (%0)" : : "r" (pd)); -8010766e: 8d 45 fa lea -0x6(%ebp),%eax -80107671: 0f 01 10 lgdtl (%eax) -} -80107674: c9 leave -80107675: c3 ret - -80107676 : - asm volatile("lidt (%0)" : : "r" (pd)); -} - -static inline void -ltr(ushort sel) -{ -80107676: 55 push %ebp -80107677: 89 e5 mov %esp,%ebp -80107679: 83 ec 04 sub $0x4,%esp -8010767c: 8b 45 08 mov 0x8(%ebp),%eax -8010767f: 66 89 45 fc mov %ax,-0x4(%ebp) - asm volatile("ltr %0" : : "r" (sel)); -80107683: 0f b7 45 fc movzwl -0x4(%ebp),%eax -80107687: 0f 00 d8 ltr %ax -} -8010768a: c9 leave -8010768b: c3 ret - -8010768c : - return eflags; -} - -static inline void -loadgs(ushort v) -{ -8010768c: 55 push %ebp -8010768d: 89 e5 mov %esp,%ebp -8010768f: 83 ec 04 sub $0x4,%esp -80107692: 8b 45 08 mov 0x8(%ebp),%eax -80107695: 66 89 45 fc mov %ax,-0x4(%ebp) - asm volatile("movw %0, %%gs" : : "r" (v)); -80107699: 0f b7 45 fc movzwl -0x4(%ebp),%eax -8010769d: 8e e8 mov %eax,%gs -} -8010769f: c9 leave -801076a0: c3 ret - -801076a1 : - return val; -} - -static inline void -lcr3(uint val) -{ -801076a1: 55 push %ebp -801076a2: 89 e5 mov %esp,%ebp - asm volatile("movl %0,%%cr3" : : "r" (val)); -801076a4: 8b 45 08 mov 0x8(%ebp),%eax -801076a7: 0f 22 d8 mov %eax,%cr3 -} -801076aa: 5d pop %ebp -801076ab: c3 ret - -801076ac : -#define KERNBASE 0x80000000 // First kernel virtual address -#define KERNLINK (KERNBASE+EXTMEM) // Address where kernel is linked - -#ifndef __ASSEMBLER__ - -static inline uint v2p(void *a) { return ((uint) (a)) - KERNBASE; } -801076ac: 55 push %ebp -801076ad: 89 e5 mov %esp,%ebp -801076af: 8b 45 08 mov 0x8(%ebp),%eax -801076b2: 05 00 00 00 80 add $0x80000000,%eax -801076b7: 5d pop %ebp -801076b8: c3 ret - -801076b9 : -static inline void *p2v(uint a) { return (void *) ((a) + KERNBASE); } -801076b9: 55 push %ebp -801076ba: 89 e5 mov %esp,%ebp -801076bc: 8b 45 08 mov 0x8(%ebp),%eax -801076bf: 05 00 00 00 80 add $0x80000000,%eax -801076c4: 5d pop %ebp -801076c5: c3 ret - -801076c6 : - -// Set up CPU's kernel segment descriptors. -// Run once on entry on each CPU. -void -seginit(void) -{ -801076c6: 55 push %ebp -801076c7: 89 e5 mov %esp,%ebp -801076c9: 53 push %ebx -801076ca: 83 ec 14 sub $0x14,%esp - - // Map "logical" addresses to virtual addresses using identity map. - // Cannot share a CODE descriptor for both kernel and user - // because it would have to have DPL_USR, but the CPU forbids - // an interrupt from CPL=0 to DPL=3. - c = &cpus[cpunum()]; -801076cd: e8 98 b8 ff ff call 80102f6a -801076d2: 69 c0 bc 00 00 00 imul $0xbc,%eax,%eax -801076d8: 05 80 24 11 80 add $0x80112480,%eax -801076dd: 89 45 f4 mov %eax,-0xc(%ebp) - c->gdt[SEG_KCODE] = SEG(STA_X|STA_R, 0, 0xffffffff, 0); -801076e0: 8b 45 f4 mov -0xc(%ebp),%eax -801076e3: 66 c7 40 78 ff ff movw $0xffff,0x78(%eax) -801076e9: 8b 45 f4 mov -0xc(%ebp),%eax -801076ec: 66 c7 40 7a 00 00 movw $0x0,0x7a(%eax) -801076f2: 8b 45 f4 mov -0xc(%ebp),%eax -801076f5: c6 40 7c 00 movb $0x0,0x7c(%eax) -801076f9: 8b 45 f4 mov -0xc(%ebp),%eax -801076fc: 0f b6 50 7d movzbl 0x7d(%eax),%edx -80107700: 83 e2 f0 and $0xfffffff0,%edx -80107703: 83 ca 0a or $0xa,%edx -80107706: 88 50 7d mov %dl,0x7d(%eax) -80107709: 8b 45 f4 mov -0xc(%ebp),%eax -8010770c: 0f b6 50 7d movzbl 0x7d(%eax),%edx -80107710: 83 ca 10 or $0x10,%edx -80107713: 88 50 7d mov %dl,0x7d(%eax) -80107716: 8b 45 f4 mov -0xc(%ebp),%eax -80107719: 0f b6 50 7d movzbl 0x7d(%eax),%edx -8010771d: 83 e2 9f and $0xffffff9f,%edx -80107720: 88 50 7d mov %dl,0x7d(%eax) -80107723: 8b 45 f4 mov -0xc(%ebp),%eax -80107726: 0f b6 50 7d movzbl 0x7d(%eax),%edx -8010772a: 83 ca 80 or $0xffffff80,%edx -8010772d: 88 50 7d mov %dl,0x7d(%eax) -80107730: 8b 45 f4 mov -0xc(%ebp),%eax -80107733: 0f b6 50 7e movzbl 0x7e(%eax),%edx -80107737: 83 ca 0f or $0xf,%edx -8010773a: 88 50 7e mov %dl,0x7e(%eax) -8010773d: 8b 45 f4 mov -0xc(%ebp),%eax -80107740: 0f b6 50 7e movzbl 0x7e(%eax),%edx -80107744: 83 e2 ef and $0xffffffef,%edx -80107747: 88 50 7e mov %dl,0x7e(%eax) -8010774a: 8b 45 f4 mov -0xc(%ebp),%eax -8010774d: 0f b6 50 7e movzbl 0x7e(%eax),%edx -80107751: 83 e2 df and $0xffffffdf,%edx -80107754: 88 50 7e mov %dl,0x7e(%eax) -80107757: 8b 45 f4 mov -0xc(%ebp),%eax -8010775a: 0f b6 50 7e movzbl 0x7e(%eax),%edx -8010775e: 83 ca 40 or $0x40,%edx -80107761: 88 50 7e mov %dl,0x7e(%eax) -80107764: 8b 45 f4 mov -0xc(%ebp),%eax -80107767: 0f b6 50 7e movzbl 0x7e(%eax),%edx -8010776b: 83 ca 80 or $0xffffff80,%edx -8010776e: 88 50 7e mov %dl,0x7e(%eax) -80107771: 8b 45 f4 mov -0xc(%ebp),%eax -80107774: c6 40 7f 00 movb $0x0,0x7f(%eax) - c->gdt[SEG_KDATA] = SEG(STA_W, 0, 0xffffffff, 0); -80107778: 8b 45 f4 mov -0xc(%ebp),%eax -8010777b: 66 c7 80 80 00 00 00 movw $0xffff,0x80(%eax) -80107782: ff ff -80107784: 8b 45 f4 mov -0xc(%ebp),%eax -80107787: 66 c7 80 82 00 00 00 movw $0x0,0x82(%eax) -8010778e: 00 00 -80107790: 8b 45 f4 mov -0xc(%ebp),%eax -80107793: c6 80 84 00 00 00 00 movb $0x0,0x84(%eax) -8010779a: 8b 45 f4 mov -0xc(%ebp),%eax -8010779d: 0f b6 90 85 00 00 00 movzbl 0x85(%eax),%edx -801077a4: 83 e2 f0 and $0xfffffff0,%edx -801077a7: 83 ca 02 or $0x2,%edx -801077aa: 88 90 85 00 00 00 mov %dl,0x85(%eax) -801077b0: 8b 45 f4 mov -0xc(%ebp),%eax -801077b3: 0f b6 90 85 00 00 00 movzbl 0x85(%eax),%edx -801077ba: 83 ca 10 or $0x10,%edx -801077bd: 88 90 85 00 00 00 mov %dl,0x85(%eax) -801077c3: 8b 45 f4 mov -0xc(%ebp),%eax -801077c6: 0f b6 90 85 00 00 00 movzbl 0x85(%eax),%edx -801077cd: 83 e2 9f and $0xffffff9f,%edx -801077d0: 88 90 85 00 00 00 mov %dl,0x85(%eax) -801077d6: 8b 45 f4 mov -0xc(%ebp),%eax -801077d9: 0f b6 90 85 00 00 00 movzbl 0x85(%eax),%edx -801077e0: 83 ca 80 or $0xffffff80,%edx -801077e3: 88 90 85 00 00 00 mov %dl,0x85(%eax) -801077e9: 8b 45 f4 mov -0xc(%ebp),%eax -801077ec: 0f b6 90 86 00 00 00 movzbl 0x86(%eax),%edx -801077f3: 83 ca 0f or $0xf,%edx -801077f6: 88 90 86 00 00 00 mov %dl,0x86(%eax) -801077fc: 8b 45 f4 mov -0xc(%ebp),%eax -801077ff: 0f b6 90 86 00 00 00 movzbl 0x86(%eax),%edx -80107806: 83 e2 ef and $0xffffffef,%edx -80107809: 88 90 86 00 00 00 mov %dl,0x86(%eax) -8010780f: 8b 45 f4 mov -0xc(%ebp),%eax -80107812: 0f b6 90 86 00 00 00 movzbl 0x86(%eax),%edx -80107819: 83 e2 df and $0xffffffdf,%edx -8010781c: 88 90 86 00 00 00 mov %dl,0x86(%eax) -80107822: 8b 45 f4 mov -0xc(%ebp),%eax -80107825: 0f b6 90 86 00 00 00 movzbl 0x86(%eax),%edx -8010782c: 83 ca 40 or $0x40,%edx -8010782f: 88 90 86 00 00 00 mov %dl,0x86(%eax) -80107835: 8b 45 f4 mov -0xc(%ebp),%eax -80107838: 0f b6 90 86 00 00 00 movzbl 0x86(%eax),%edx -8010783f: 83 ca 80 or $0xffffff80,%edx -80107842: 88 90 86 00 00 00 mov %dl,0x86(%eax) -80107848: 8b 45 f4 mov -0xc(%ebp),%eax -8010784b: c6 80 87 00 00 00 00 movb $0x0,0x87(%eax) - c->gdt[SEG_UCODE] = SEG(STA_X|STA_R, 0, 0xffffffff, DPL_USER); -80107852: 8b 45 f4 mov -0xc(%ebp),%eax -80107855: 66 c7 80 90 00 00 00 movw $0xffff,0x90(%eax) -8010785c: ff ff -8010785e: 8b 45 f4 mov -0xc(%ebp),%eax -80107861: 66 c7 80 92 00 00 00 movw $0x0,0x92(%eax) -80107868: 00 00 -8010786a: 8b 45 f4 mov -0xc(%ebp),%eax -8010786d: c6 80 94 00 00 00 00 movb $0x0,0x94(%eax) -80107874: 8b 45 f4 mov -0xc(%ebp),%eax -80107877: 0f b6 90 95 00 00 00 movzbl 0x95(%eax),%edx -8010787e: 83 e2 f0 and $0xfffffff0,%edx -80107881: 83 ca 0a or $0xa,%edx -80107884: 88 90 95 00 00 00 mov %dl,0x95(%eax) -8010788a: 8b 45 f4 mov -0xc(%ebp),%eax -8010788d: 0f b6 90 95 00 00 00 movzbl 0x95(%eax),%edx -80107894: 83 ca 10 or $0x10,%edx -80107897: 88 90 95 00 00 00 mov %dl,0x95(%eax) -8010789d: 8b 45 f4 mov -0xc(%ebp),%eax -801078a0: 0f b6 90 95 00 00 00 movzbl 0x95(%eax),%edx -801078a7: 83 ca 60 or $0x60,%edx -801078aa: 88 90 95 00 00 00 mov %dl,0x95(%eax) -801078b0: 8b 45 f4 mov -0xc(%ebp),%eax -801078b3: 0f b6 90 95 00 00 00 movzbl 0x95(%eax),%edx -801078ba: 83 ca 80 or $0xffffff80,%edx -801078bd: 88 90 95 00 00 00 mov %dl,0x95(%eax) -801078c3: 8b 45 f4 mov -0xc(%ebp),%eax -801078c6: 0f b6 90 96 00 00 00 movzbl 0x96(%eax),%edx -801078cd: 83 ca 0f or $0xf,%edx -801078d0: 88 90 96 00 00 00 mov %dl,0x96(%eax) -801078d6: 8b 45 f4 mov -0xc(%ebp),%eax -801078d9: 0f b6 90 96 00 00 00 movzbl 0x96(%eax),%edx -801078e0: 83 e2 ef and $0xffffffef,%edx -801078e3: 88 90 96 00 00 00 mov %dl,0x96(%eax) -801078e9: 8b 45 f4 mov -0xc(%ebp),%eax -801078ec: 0f b6 90 96 00 00 00 movzbl 0x96(%eax),%edx -801078f3: 83 e2 df and $0xffffffdf,%edx -801078f6: 88 90 96 00 00 00 mov %dl,0x96(%eax) -801078fc: 8b 45 f4 mov -0xc(%ebp),%eax -801078ff: 0f b6 90 96 00 00 00 movzbl 0x96(%eax),%edx -80107906: 83 ca 40 or $0x40,%edx -80107909: 88 90 96 00 00 00 mov %dl,0x96(%eax) -8010790f: 8b 45 f4 mov -0xc(%ebp),%eax -80107912: 0f b6 90 96 00 00 00 movzbl 0x96(%eax),%edx -80107919: 83 ca 80 or $0xffffff80,%edx -8010791c: 88 90 96 00 00 00 mov %dl,0x96(%eax) -80107922: 8b 45 f4 mov -0xc(%ebp),%eax -80107925: c6 80 97 00 00 00 00 movb $0x0,0x97(%eax) - c->gdt[SEG_UDATA] = SEG(STA_W, 0, 0xffffffff, DPL_USER); -8010792c: 8b 45 f4 mov -0xc(%ebp),%eax -8010792f: 66 c7 80 98 00 00 00 movw $0xffff,0x98(%eax) -80107936: ff ff -80107938: 8b 45 f4 mov -0xc(%ebp),%eax -8010793b: 66 c7 80 9a 00 00 00 movw $0x0,0x9a(%eax) -80107942: 00 00 -80107944: 8b 45 f4 mov -0xc(%ebp),%eax -80107947: c6 80 9c 00 00 00 00 movb $0x0,0x9c(%eax) -8010794e: 8b 45 f4 mov -0xc(%ebp),%eax -80107951: 0f b6 90 9d 00 00 00 movzbl 0x9d(%eax),%edx -80107958: 83 e2 f0 and $0xfffffff0,%edx -8010795b: 83 ca 02 or $0x2,%edx -8010795e: 88 90 9d 00 00 00 mov %dl,0x9d(%eax) -80107964: 8b 45 f4 mov -0xc(%ebp),%eax -80107967: 0f b6 90 9d 00 00 00 movzbl 0x9d(%eax),%edx -8010796e: 83 ca 10 or $0x10,%edx -80107971: 88 90 9d 00 00 00 mov %dl,0x9d(%eax) -80107977: 8b 45 f4 mov -0xc(%ebp),%eax -8010797a: 0f b6 90 9d 00 00 00 movzbl 0x9d(%eax),%edx -80107981: 83 ca 60 or $0x60,%edx -80107984: 88 90 9d 00 00 00 mov %dl,0x9d(%eax) -8010798a: 8b 45 f4 mov -0xc(%ebp),%eax -8010798d: 0f b6 90 9d 00 00 00 movzbl 0x9d(%eax),%edx -80107994: 83 ca 80 or $0xffffff80,%edx -80107997: 88 90 9d 00 00 00 mov %dl,0x9d(%eax) -8010799d: 8b 45 f4 mov -0xc(%ebp),%eax -801079a0: 0f b6 90 9e 00 00 00 movzbl 0x9e(%eax),%edx -801079a7: 83 ca 0f or $0xf,%edx -801079aa: 88 90 9e 00 00 00 mov %dl,0x9e(%eax) -801079b0: 8b 45 f4 mov -0xc(%ebp),%eax -801079b3: 0f b6 90 9e 00 00 00 movzbl 0x9e(%eax),%edx -801079ba: 83 e2 ef and $0xffffffef,%edx -801079bd: 88 90 9e 00 00 00 mov %dl,0x9e(%eax) -801079c3: 8b 45 f4 mov -0xc(%ebp),%eax -801079c6: 0f b6 90 9e 00 00 00 movzbl 0x9e(%eax),%edx -801079cd: 83 e2 df and $0xffffffdf,%edx -801079d0: 88 90 9e 00 00 00 mov %dl,0x9e(%eax) -801079d6: 8b 45 f4 mov -0xc(%ebp),%eax -801079d9: 0f b6 90 9e 00 00 00 movzbl 0x9e(%eax),%edx -801079e0: 83 ca 40 or $0x40,%edx -801079e3: 88 90 9e 00 00 00 mov %dl,0x9e(%eax) -801079e9: 8b 45 f4 mov -0xc(%ebp),%eax -801079ec: 0f b6 90 9e 00 00 00 movzbl 0x9e(%eax),%edx -801079f3: 83 ca 80 or $0xffffff80,%edx -801079f6: 88 90 9e 00 00 00 mov %dl,0x9e(%eax) -801079fc: 8b 45 f4 mov -0xc(%ebp),%eax -801079ff: c6 80 9f 00 00 00 00 movb $0x0,0x9f(%eax) - - // Map cpu, and curproc - c->gdt[SEG_KCPU] = SEG(STA_W, &c->cpu, 8, 0); -80107a06: 8b 45 f4 mov -0xc(%ebp),%eax -80107a09: 05 b4 00 00 00 add $0xb4,%eax -80107a0e: 89 c3 mov %eax,%ebx -80107a10: 8b 45 f4 mov -0xc(%ebp),%eax -80107a13: 05 b4 00 00 00 add $0xb4,%eax -80107a18: c1 e8 10 shr $0x10,%eax -80107a1b: 89 c2 mov %eax,%edx -80107a1d: 8b 45 f4 mov -0xc(%ebp),%eax -80107a20: 05 b4 00 00 00 add $0xb4,%eax -80107a25: c1 e8 18 shr $0x18,%eax -80107a28: 89 c1 mov %eax,%ecx -80107a2a: 8b 45 f4 mov -0xc(%ebp),%eax -80107a2d: 66 c7 80 88 00 00 00 movw $0x0,0x88(%eax) -80107a34: 00 00 -80107a36: 8b 45 f4 mov -0xc(%ebp),%eax -80107a39: 66 89 98 8a 00 00 00 mov %bx,0x8a(%eax) -80107a40: 8b 45 f4 mov -0xc(%ebp),%eax -80107a43: 88 90 8c 00 00 00 mov %dl,0x8c(%eax) -80107a49: 8b 45 f4 mov -0xc(%ebp),%eax -80107a4c: 0f b6 90 8d 00 00 00 movzbl 0x8d(%eax),%edx -80107a53: 83 e2 f0 and $0xfffffff0,%edx -80107a56: 83 ca 02 or $0x2,%edx -80107a59: 88 90 8d 00 00 00 mov %dl,0x8d(%eax) -80107a5f: 8b 45 f4 mov -0xc(%ebp),%eax -80107a62: 0f b6 90 8d 00 00 00 movzbl 0x8d(%eax),%edx -80107a69: 83 ca 10 or $0x10,%edx -80107a6c: 88 90 8d 00 00 00 mov %dl,0x8d(%eax) -80107a72: 8b 45 f4 mov -0xc(%ebp),%eax -80107a75: 0f b6 90 8d 00 00 00 movzbl 0x8d(%eax),%edx -80107a7c: 83 e2 9f and $0xffffff9f,%edx -80107a7f: 88 90 8d 00 00 00 mov %dl,0x8d(%eax) -80107a85: 8b 45 f4 mov -0xc(%ebp),%eax -80107a88: 0f b6 90 8d 00 00 00 movzbl 0x8d(%eax),%edx -80107a8f: 83 ca 80 or $0xffffff80,%edx -80107a92: 88 90 8d 00 00 00 mov %dl,0x8d(%eax) -80107a98: 8b 45 f4 mov -0xc(%ebp),%eax -80107a9b: 0f b6 90 8e 00 00 00 movzbl 0x8e(%eax),%edx -80107aa2: 83 e2 f0 and $0xfffffff0,%edx -80107aa5: 88 90 8e 00 00 00 mov %dl,0x8e(%eax) -80107aab: 8b 45 f4 mov -0xc(%ebp),%eax -80107aae: 0f b6 90 8e 00 00 00 movzbl 0x8e(%eax),%edx -80107ab5: 83 e2 ef and $0xffffffef,%edx -80107ab8: 88 90 8e 00 00 00 mov %dl,0x8e(%eax) -80107abe: 8b 45 f4 mov -0xc(%ebp),%eax -80107ac1: 0f b6 90 8e 00 00 00 movzbl 0x8e(%eax),%edx -80107ac8: 83 e2 df and $0xffffffdf,%edx -80107acb: 88 90 8e 00 00 00 mov %dl,0x8e(%eax) -80107ad1: 8b 45 f4 mov -0xc(%ebp),%eax -80107ad4: 0f b6 90 8e 00 00 00 movzbl 0x8e(%eax),%edx -80107adb: 83 ca 40 or $0x40,%edx -80107ade: 88 90 8e 00 00 00 mov %dl,0x8e(%eax) -80107ae4: 8b 45 f4 mov -0xc(%ebp),%eax -80107ae7: 0f b6 90 8e 00 00 00 movzbl 0x8e(%eax),%edx -80107aee: 83 ca 80 or $0xffffff80,%edx -80107af1: 88 90 8e 00 00 00 mov %dl,0x8e(%eax) -80107af7: 8b 45 f4 mov -0xc(%ebp),%eax -80107afa: 88 88 8f 00 00 00 mov %cl,0x8f(%eax) - - lgdt(c->gdt, sizeof(c->gdt)); -80107b00: 8b 45 f4 mov -0xc(%ebp),%eax -80107b03: 83 c0 70 add $0x70,%eax -80107b06: 83 ec 08 sub $0x8,%esp -80107b09: 6a 38 push $0x38 -80107b0b: 50 push %eax -80107b0c: e8 3c fb ff ff call 8010764d -80107b11: 83 c4 10 add $0x10,%esp - loadgs(SEG_KCPU << 3); -80107b14: 83 ec 0c sub $0xc,%esp -80107b17: 6a 18 push $0x18 -80107b19: e8 6e fb ff ff call 8010768c -80107b1e: 83 c4 10 add $0x10,%esp - - // Initialize cpu-local storage. - cpu = c; -80107b21: 8b 45 f4 mov -0xc(%ebp),%eax -80107b24: 65 a3 00 00 00 00 mov %eax,%gs:0x0 - proc = 0; -80107b2a: 65 c7 05 04 00 00 00 movl $0x0,%gs:0x4 -80107b31: 00 00 00 00 -} -80107b35: 8b 5d fc mov -0x4(%ebp),%ebx -80107b38: c9 leave -80107b39: c3 ret - -80107b3a : -// Return the address of the PTE in page table pgdir -// that corresponds to virtual address va. If alloc!=0, -// create any required page table pages. -static pte_t * -walkpgdir(pde_t *pgdir, const void *va, int alloc) -{ -80107b3a: 55 push %ebp -80107b3b: 89 e5 mov %esp,%ebp -80107b3d: 83 ec 18 sub $0x18,%esp - pde_t *pde; - pte_t *pgtab; - - pde = &pgdir[PDX(va)]; -80107b40: 8b 45 0c mov 0xc(%ebp),%eax -80107b43: c1 e8 16 shr $0x16,%eax -80107b46: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx -80107b4d: 8b 45 08 mov 0x8(%ebp),%eax -80107b50: 01 d0 add %edx,%eax -80107b52: 89 45 f0 mov %eax,-0x10(%ebp) - if(*pde & PTE_P){ -80107b55: 8b 45 f0 mov -0x10(%ebp),%eax -80107b58: 8b 00 mov (%eax),%eax -80107b5a: 83 e0 01 and $0x1,%eax -80107b5d: 85 c0 test %eax,%eax -80107b5f: 74 18 je 80107b79 - pgtab = (pte_t*)p2v(PTE_ADDR(*pde)); -80107b61: 8b 45 f0 mov -0x10(%ebp),%eax -80107b64: 8b 00 mov (%eax),%eax -80107b66: 25 00 f0 ff ff and $0xfffff000,%eax -80107b6b: 50 push %eax -80107b6c: e8 48 fb ff ff call 801076b9 -80107b71: 83 c4 04 add $0x4,%esp -80107b74: 89 45 f4 mov %eax,-0xc(%ebp) -80107b77: eb 48 jmp 80107bc1 - } else { - if(!alloc || (pgtab = (pte_t*)kalloc()) == 0) -80107b79: 83 7d 10 00 cmpl $0x0,0x10(%ebp) -80107b7d: 74 0e je 80107b8d -80107b7f: e8 85 b0 ff ff call 80102c09 -80107b84: 89 45 f4 mov %eax,-0xc(%ebp) -80107b87: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -80107b8b: 75 07 jne 80107b94 - return 0; -80107b8d: b8 00 00 00 00 mov $0x0,%eax -80107b92: eb 44 jmp 80107bd8 - // Make sure all those PTE_P bits are zero. - memset(pgtab, 0, PGSIZE); -80107b94: 83 ec 04 sub $0x4,%esp -80107b97: 68 00 10 00 00 push $0x1000 -80107b9c: 6a 00 push $0x0 -80107b9e: ff 75 f4 pushl -0xc(%ebp) -80107ba1: e8 31 d6 ff ff call 801051d7 -80107ba6: 83 c4 10 add $0x10,%esp - // The permissions here are overly generous, but they can - // be further restricted by the permissions in the page table - // entries, if necessary. - *pde = v2p(pgtab) | PTE_P | PTE_W | PTE_U; -80107ba9: 83 ec 0c sub $0xc,%esp -80107bac: ff 75 f4 pushl -0xc(%ebp) -80107baf: e8 f8 fa ff ff call 801076ac -80107bb4: 83 c4 10 add $0x10,%esp -80107bb7: 83 c8 07 or $0x7,%eax -80107bba: 89 c2 mov %eax,%edx -80107bbc: 8b 45 f0 mov -0x10(%ebp),%eax -80107bbf: 89 10 mov %edx,(%eax) - } - return &pgtab[PTX(va)]; -80107bc1: 8b 45 0c mov 0xc(%ebp),%eax -80107bc4: c1 e8 0c shr $0xc,%eax -80107bc7: 25 ff 03 00 00 and $0x3ff,%eax -80107bcc: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx -80107bd3: 8b 45 f4 mov -0xc(%ebp),%eax -80107bd6: 01 d0 add %edx,%eax -} -80107bd8: c9 leave -80107bd9: c3 ret - -80107bda : -// Create PTEs for virtual addresses starting at va that refer to -// physical addresses starting at pa. va and size might not -// be page-aligned. -static int -mappages(pde_t *pgdir, void *va, uint size, uint pa, int perm) -{ -80107bda: 55 push %ebp -80107bdb: 89 e5 mov %esp,%ebp -80107bdd: 83 ec 18 sub $0x18,%esp - char *a, *last; - pte_t *pte; - - a = (char*)PGROUNDDOWN((uint)va); -80107be0: 8b 45 0c mov 0xc(%ebp),%eax -80107be3: 25 00 f0 ff ff and $0xfffff000,%eax -80107be8: 89 45 f4 mov %eax,-0xc(%ebp) - last = (char*)PGROUNDDOWN(((uint)va) + size - 1); -80107beb: 8b 55 0c mov 0xc(%ebp),%edx -80107bee: 8b 45 10 mov 0x10(%ebp),%eax -80107bf1: 01 d0 add %edx,%eax -80107bf3: 83 e8 01 sub $0x1,%eax -80107bf6: 25 00 f0 ff ff and $0xfffff000,%eax -80107bfb: 89 45 f0 mov %eax,-0x10(%ebp) - for(;;){ - if((pte = walkpgdir(pgdir, a, 1)) == 0) -80107bfe: 83 ec 04 sub $0x4,%esp -80107c01: 6a 01 push $0x1 -80107c03: ff 75 f4 pushl -0xc(%ebp) -80107c06: ff 75 08 pushl 0x8(%ebp) -80107c09: e8 2c ff ff ff call 80107b3a -80107c0e: 83 c4 10 add $0x10,%esp -80107c11: 89 45 ec mov %eax,-0x14(%ebp) -80107c14: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) -80107c18: 75 07 jne 80107c21 - return -1; -80107c1a: b8 ff ff ff ff mov $0xffffffff,%eax -80107c1f: eb 49 jmp 80107c6a - if(*pte & PTE_P) -80107c21: 8b 45 ec mov -0x14(%ebp),%eax -80107c24: 8b 00 mov (%eax),%eax -80107c26: 83 e0 01 and $0x1,%eax -80107c29: 85 c0 test %eax,%eax -80107c2b: 74 0d je 80107c3a - panic("remap"); -80107c2d: 83 ec 0c sub $0xc,%esp -80107c30: 68 7c 8a 10 80 push $0x80108a7c -80107c35: e8 22 89 ff ff call 8010055c - *pte = pa | perm | PTE_P; -80107c3a: 8b 45 18 mov 0x18(%ebp),%eax -80107c3d: 0b 45 14 or 0x14(%ebp),%eax -80107c40: 83 c8 01 or $0x1,%eax -80107c43: 89 c2 mov %eax,%edx -80107c45: 8b 45 ec mov -0x14(%ebp),%eax -80107c48: 89 10 mov %edx,(%eax) - if(a == last) -80107c4a: 8b 45 f4 mov -0xc(%ebp),%eax -80107c4d: 3b 45 f0 cmp -0x10(%ebp),%eax -80107c50: 75 08 jne 80107c5a - break; -80107c52: 90 nop - a += PGSIZE; - pa += PGSIZE; - } - return 0; -80107c53: b8 00 00 00 00 mov $0x0,%eax -80107c58: eb 10 jmp 80107c6a - if(*pte & PTE_P) - panic("remap"); - *pte = pa | perm | PTE_P; - if(a == last) - break; - a += PGSIZE; -80107c5a: 81 45 f4 00 10 00 00 addl $0x1000,-0xc(%ebp) - pa += PGSIZE; -80107c61: 81 45 14 00 10 00 00 addl $0x1000,0x14(%ebp) - } -80107c68: eb 94 jmp 80107bfe - return 0; -} -80107c6a: c9 leave -80107c6b: c3 ret - -80107c6c : -}; - -// Set up kernel part of a page table. -pde_t* -setupkvm(void) -{ -80107c6c: 55 push %ebp -80107c6d: 89 e5 mov %esp,%ebp -80107c6f: 53 push %ebx -80107c70: 83 ec 14 sub $0x14,%esp - pde_t *pgdir; - struct kmap *k; - - if((pgdir = (pde_t*)kalloc()) == 0) -80107c73: e8 91 af ff ff call 80102c09 -80107c78: 89 45 f0 mov %eax,-0x10(%ebp) -80107c7b: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) -80107c7f: 75 0a jne 80107c8b - return 0; -80107c81: b8 00 00 00 00 mov $0x0,%eax -80107c86: e9 8e 00 00 00 jmp 80107d19 - memset(pgdir, 0, PGSIZE); -80107c8b: 83 ec 04 sub $0x4,%esp -80107c8e: 68 00 10 00 00 push $0x1000 -80107c93: 6a 00 push $0x0 -80107c95: ff 75 f0 pushl -0x10(%ebp) -80107c98: e8 3a d5 ff ff call 801051d7 -80107c9d: 83 c4 10 add $0x10,%esp - if (p2v(PHYSTOP) > (void*)DEVSPACE) -80107ca0: 83 ec 0c sub $0xc,%esp -80107ca3: 68 00 00 00 0e push $0xe000000 -80107ca8: e8 0c fa ff ff call 801076b9 -80107cad: 83 c4 10 add $0x10,%esp -80107cb0: 3d 00 00 00 fe cmp $0xfe000000,%eax -80107cb5: 76 0d jbe 80107cc4 - panic("PHYSTOP too high"); -80107cb7: 83 ec 0c sub $0xc,%esp -80107cba: 68 82 8a 10 80 push $0x80108a82 -80107cbf: e8 98 88 ff ff call 8010055c - for(k = kmap; k < &kmap[NELEM(kmap)]; k++) -80107cc4: c7 45 f4 c0 b4 10 80 movl $0x8010b4c0,-0xc(%ebp) -80107ccb: eb 40 jmp 80107d0d - if(mappages(pgdir, k->virt, k->phys_end - k->phys_start, -80107ccd: 8b 45 f4 mov -0xc(%ebp),%eax -80107cd0: 8b 48 0c mov 0xc(%eax),%ecx -80107cd3: 8b 45 f4 mov -0xc(%ebp),%eax -80107cd6: 8b 50 04 mov 0x4(%eax),%edx -80107cd9: 8b 45 f4 mov -0xc(%ebp),%eax -80107cdc: 8b 58 08 mov 0x8(%eax),%ebx -80107cdf: 8b 45 f4 mov -0xc(%ebp),%eax -80107ce2: 8b 40 04 mov 0x4(%eax),%eax -80107ce5: 29 c3 sub %eax,%ebx -80107ce7: 8b 45 f4 mov -0xc(%ebp),%eax -80107cea: 8b 00 mov (%eax),%eax -80107cec: 83 ec 0c sub $0xc,%esp -80107cef: 51 push %ecx -80107cf0: 52 push %edx -80107cf1: 53 push %ebx -80107cf2: 50 push %eax -80107cf3: ff 75 f0 pushl -0x10(%ebp) -80107cf6: e8 df fe ff ff call 80107bda -80107cfb: 83 c4 20 add $0x20,%esp -80107cfe: 85 c0 test %eax,%eax -80107d00: 79 07 jns 80107d09 - (uint)k->phys_start, k->perm) < 0) - return 0; -80107d02: b8 00 00 00 00 mov $0x0,%eax -80107d07: eb 10 jmp 80107d19 - if((pgdir = (pde_t*)kalloc()) == 0) - return 0; - memset(pgdir, 0, PGSIZE); - if (p2v(PHYSTOP) > (void*)DEVSPACE) - panic("PHYSTOP too high"); - for(k = kmap; k < &kmap[NELEM(kmap)]; k++) -80107d09: 83 45 f4 10 addl $0x10,-0xc(%ebp) -80107d0d: 81 7d f4 00 b5 10 80 cmpl $0x8010b500,-0xc(%ebp) -80107d14: 72 b7 jb 80107ccd - if(mappages(pgdir, k->virt, k->phys_end - k->phys_start, - (uint)k->phys_start, k->perm) < 0) - return 0; - return pgdir; -80107d16: 8b 45 f0 mov -0x10(%ebp),%eax -} -80107d19: 8b 5d fc mov -0x4(%ebp),%ebx -80107d1c: c9 leave -80107d1d: c3 ret - -80107d1e : - -// Allocate one page table for the machine for the kernel address -// space for scheduler processes. -void -kvmalloc(void) -{ -80107d1e: 55 push %ebp -80107d1f: 89 e5 mov %esp,%ebp -80107d21: 83 ec 08 sub $0x8,%esp - kpgdir = setupkvm(); -80107d24: e8 43 ff ff ff call 80107c6c -80107d29: a3 58 52 11 80 mov %eax,0x80115258 - switchkvm(); -80107d2e: e8 02 00 00 00 call 80107d35 -} -80107d33: c9 leave -80107d34: c3 ret - -80107d35 : - -// Switch h/w page table register to the kernel-only page table, -// for when no process is running. -void -switchkvm(void) -{ -80107d35: 55 push %ebp -80107d36: 89 e5 mov %esp,%ebp - lcr3(v2p(kpgdir)); // switch to the kernel page table -80107d38: a1 58 52 11 80 mov 0x80115258,%eax -80107d3d: 50 push %eax -80107d3e: e8 69 f9 ff ff call 801076ac -80107d43: 83 c4 04 add $0x4,%esp -80107d46: 50 push %eax -80107d47: e8 55 f9 ff ff call 801076a1 -80107d4c: 83 c4 04 add $0x4,%esp -} -80107d4f: c9 leave -80107d50: c3 ret - -80107d51 : - -// Switch TSS and h/w page table to correspond to process p. -void -switchuvm(struct proc *p) -{ -80107d51: 55 push %ebp -80107d52: 89 e5 mov %esp,%ebp -80107d54: 56 push %esi -80107d55: 53 push %ebx - pushcli(); -80107d56: e8 7a d3 ff ff call 801050d5 - cpu->gdt[SEG_TSS] = SEG16(STS_T32A, &cpu->ts, sizeof(cpu->ts)-1, 0); -80107d5b: 65 a1 00 00 00 00 mov %gs:0x0,%eax -80107d61: 65 8b 15 00 00 00 00 mov %gs:0x0,%edx -80107d68: 83 c2 08 add $0x8,%edx -80107d6b: 89 d6 mov %edx,%esi -80107d6d: 65 8b 15 00 00 00 00 mov %gs:0x0,%edx -80107d74: 83 c2 08 add $0x8,%edx -80107d77: c1 ea 10 shr $0x10,%edx -80107d7a: 89 d3 mov %edx,%ebx -80107d7c: 65 8b 15 00 00 00 00 mov %gs:0x0,%edx -80107d83: 83 c2 08 add $0x8,%edx -80107d86: c1 ea 18 shr $0x18,%edx -80107d89: 89 d1 mov %edx,%ecx -80107d8b: 66 c7 80 a0 00 00 00 movw $0x67,0xa0(%eax) -80107d92: 67 00 -80107d94: 66 89 b0 a2 00 00 00 mov %si,0xa2(%eax) -80107d9b: 88 98 a4 00 00 00 mov %bl,0xa4(%eax) -80107da1: 0f b6 90 a5 00 00 00 movzbl 0xa5(%eax),%edx -80107da8: 83 e2 f0 and $0xfffffff0,%edx -80107dab: 83 ca 09 or $0x9,%edx -80107dae: 88 90 a5 00 00 00 mov %dl,0xa5(%eax) -80107db4: 0f b6 90 a5 00 00 00 movzbl 0xa5(%eax),%edx -80107dbb: 83 ca 10 or $0x10,%edx -80107dbe: 88 90 a5 00 00 00 mov %dl,0xa5(%eax) -80107dc4: 0f b6 90 a5 00 00 00 movzbl 0xa5(%eax),%edx -80107dcb: 83 e2 9f and $0xffffff9f,%edx -80107dce: 88 90 a5 00 00 00 mov %dl,0xa5(%eax) -80107dd4: 0f b6 90 a5 00 00 00 movzbl 0xa5(%eax),%edx -80107ddb: 83 ca 80 or $0xffffff80,%edx -80107dde: 88 90 a5 00 00 00 mov %dl,0xa5(%eax) -80107de4: 0f b6 90 a6 00 00 00 movzbl 0xa6(%eax),%edx -80107deb: 83 e2 f0 and $0xfffffff0,%edx -80107dee: 88 90 a6 00 00 00 mov %dl,0xa6(%eax) -80107df4: 0f b6 90 a6 00 00 00 movzbl 0xa6(%eax),%edx -80107dfb: 83 e2 ef and $0xffffffef,%edx -80107dfe: 88 90 a6 00 00 00 mov %dl,0xa6(%eax) -80107e04: 0f b6 90 a6 00 00 00 movzbl 0xa6(%eax),%edx -80107e0b: 83 e2 df and $0xffffffdf,%edx -80107e0e: 88 90 a6 00 00 00 mov %dl,0xa6(%eax) -80107e14: 0f b6 90 a6 00 00 00 movzbl 0xa6(%eax),%edx -80107e1b: 83 ca 40 or $0x40,%edx -80107e1e: 88 90 a6 00 00 00 mov %dl,0xa6(%eax) -80107e24: 0f b6 90 a6 00 00 00 movzbl 0xa6(%eax),%edx -80107e2b: 83 e2 7f and $0x7f,%edx -80107e2e: 88 90 a6 00 00 00 mov %dl,0xa6(%eax) -80107e34: 88 88 a7 00 00 00 mov %cl,0xa7(%eax) - cpu->gdt[SEG_TSS].s = 0; -80107e3a: 65 a1 00 00 00 00 mov %gs:0x0,%eax -80107e40: 0f b6 90 a5 00 00 00 movzbl 0xa5(%eax),%edx -80107e47: 83 e2 ef and $0xffffffef,%edx -80107e4a: 88 90 a5 00 00 00 mov %dl,0xa5(%eax) - cpu->ts.ss0 = SEG_KDATA << 3; -80107e50: 65 a1 00 00 00 00 mov %gs:0x0,%eax -80107e56: 66 c7 40 10 10 00 movw $0x10,0x10(%eax) - cpu->ts.esp0 = (uint)proc->kstack + KSTACKSIZE; -80107e5c: 65 a1 00 00 00 00 mov %gs:0x0,%eax -80107e62: 65 8b 15 04 00 00 00 mov %gs:0x4,%edx -80107e69: 8b 52 08 mov 0x8(%edx),%edx -80107e6c: 81 c2 00 10 00 00 add $0x1000,%edx -80107e72: 89 50 0c mov %edx,0xc(%eax) - ltr(SEG_TSS << 3); -80107e75: 83 ec 0c sub $0xc,%esp -80107e78: 6a 30 push $0x30 -80107e7a: e8 f7 f7 ff ff call 80107676 -80107e7f: 83 c4 10 add $0x10,%esp - if(p->pgdir == 0) -80107e82: 8b 45 08 mov 0x8(%ebp),%eax -80107e85: 8b 40 04 mov 0x4(%eax),%eax -80107e88: 85 c0 test %eax,%eax -80107e8a: 75 0d jne 80107e99 - panic("switchuvm: no pgdir"); -80107e8c: 83 ec 0c sub $0xc,%esp -80107e8f: 68 93 8a 10 80 push $0x80108a93 -80107e94: e8 c3 86 ff ff call 8010055c - lcr3(v2p(p->pgdir)); // switch to new address space -80107e99: 8b 45 08 mov 0x8(%ebp),%eax -80107e9c: 8b 40 04 mov 0x4(%eax),%eax -80107e9f: 83 ec 0c sub $0xc,%esp -80107ea2: 50 push %eax -80107ea3: e8 04 f8 ff ff call 801076ac -80107ea8: 83 c4 10 add $0x10,%esp -80107eab: 83 ec 0c sub $0xc,%esp -80107eae: 50 push %eax -80107eaf: e8 ed f7 ff ff call 801076a1 -80107eb4: 83 c4 10 add $0x10,%esp - popcli(); -80107eb7: e8 5d d2 ff ff call 80105119 -} -80107ebc: 8d 65 f8 lea -0x8(%ebp),%esp -80107ebf: 5b pop %ebx -80107ec0: 5e pop %esi -80107ec1: 5d pop %ebp -80107ec2: c3 ret - -80107ec3 : - -// Load the initcode into address 0 of pgdir. -// sz must be less than a page. -void -inituvm(pde_t *pgdir, char *init, uint sz) -{ -80107ec3: 55 push %ebp -80107ec4: 89 e5 mov %esp,%ebp -80107ec6: 83 ec 18 sub $0x18,%esp - char *mem; - - if(sz >= PGSIZE) -80107ec9: 81 7d 10 ff 0f 00 00 cmpl $0xfff,0x10(%ebp) -80107ed0: 76 0d jbe 80107edf - panic("inituvm: more than a page"); -80107ed2: 83 ec 0c sub $0xc,%esp -80107ed5: 68 a7 8a 10 80 push $0x80108aa7 -80107eda: e8 7d 86 ff ff call 8010055c - mem = kalloc(); -80107edf: e8 25 ad ff ff call 80102c09 -80107ee4: 89 45 f4 mov %eax,-0xc(%ebp) - memset(mem, 0, PGSIZE); -80107ee7: 83 ec 04 sub $0x4,%esp -80107eea: 68 00 10 00 00 push $0x1000 -80107eef: 6a 00 push $0x0 -80107ef1: ff 75 f4 pushl -0xc(%ebp) -80107ef4: e8 de d2 ff ff call 801051d7 -80107ef9: 83 c4 10 add $0x10,%esp - mappages(pgdir, 0, PGSIZE, v2p(mem), PTE_W|PTE_U); -80107efc: 83 ec 0c sub $0xc,%esp -80107eff: ff 75 f4 pushl -0xc(%ebp) -80107f02: e8 a5 f7 ff ff call 801076ac -80107f07: 83 c4 10 add $0x10,%esp -80107f0a: 83 ec 0c sub $0xc,%esp -80107f0d: 6a 06 push $0x6 -80107f0f: 50 push %eax -80107f10: 68 00 10 00 00 push $0x1000 -80107f15: 6a 00 push $0x0 -80107f17: ff 75 08 pushl 0x8(%ebp) -80107f1a: e8 bb fc ff ff call 80107bda -80107f1f: 83 c4 20 add $0x20,%esp - memmove(mem, init, sz); -80107f22: 83 ec 04 sub $0x4,%esp -80107f25: ff 75 10 pushl 0x10(%ebp) -80107f28: ff 75 0c pushl 0xc(%ebp) -80107f2b: ff 75 f4 pushl -0xc(%ebp) -80107f2e: e8 63 d3 ff ff call 80105296 -80107f33: 83 c4 10 add $0x10,%esp -} -80107f36: c9 leave -80107f37: c3 ret - -80107f38 : - -// Load a program segment into pgdir. addr must be page-aligned -// and the pages from addr to addr+sz must already be mapped. -int -loaduvm(pde_t *pgdir, char *addr, struct inode *ip, uint offset, uint sz) -{ -80107f38: 55 push %ebp -80107f39: 89 e5 mov %esp,%ebp -80107f3b: 53 push %ebx -80107f3c: 83 ec 14 sub $0x14,%esp - uint i, pa, n; - pte_t *pte; - - if((uint) addr % PGSIZE != 0) -80107f3f: 8b 45 0c mov 0xc(%ebp),%eax -80107f42: 25 ff 0f 00 00 and $0xfff,%eax -80107f47: 85 c0 test %eax,%eax -80107f49: 74 0d je 80107f58 - panic("loaduvm: addr must be page aligned"); -80107f4b: 83 ec 0c sub $0xc,%esp -80107f4e: 68 c4 8a 10 80 push $0x80108ac4 -80107f53: e8 04 86 ff ff call 8010055c - for(i = 0; i < sz; i += PGSIZE){ -80107f58: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) -80107f5f: e9 95 00 00 00 jmp 80107ff9 - if((pte = walkpgdir(pgdir, addr+i, 0)) == 0) -80107f64: 8b 55 0c mov 0xc(%ebp),%edx -80107f67: 8b 45 f4 mov -0xc(%ebp),%eax -80107f6a: 01 d0 add %edx,%eax -80107f6c: 83 ec 04 sub $0x4,%esp -80107f6f: 6a 00 push $0x0 -80107f71: 50 push %eax -80107f72: ff 75 08 pushl 0x8(%ebp) -80107f75: e8 c0 fb ff ff call 80107b3a -80107f7a: 83 c4 10 add $0x10,%esp -80107f7d: 89 45 ec mov %eax,-0x14(%ebp) -80107f80: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) -80107f84: 75 0d jne 80107f93 - panic("loaduvm: address should exist"); -80107f86: 83 ec 0c sub $0xc,%esp -80107f89: 68 e7 8a 10 80 push $0x80108ae7 -80107f8e: e8 c9 85 ff ff call 8010055c - pa = PTE_ADDR(*pte); -80107f93: 8b 45 ec mov -0x14(%ebp),%eax -80107f96: 8b 00 mov (%eax),%eax -80107f98: 25 00 f0 ff ff and $0xfffff000,%eax -80107f9d: 89 45 e8 mov %eax,-0x18(%ebp) - if(sz - i < PGSIZE) -80107fa0: 8b 45 18 mov 0x18(%ebp),%eax -80107fa3: 2b 45 f4 sub -0xc(%ebp),%eax -80107fa6: 3d ff 0f 00 00 cmp $0xfff,%eax -80107fab: 77 0b ja 80107fb8 - n = sz - i; -80107fad: 8b 45 18 mov 0x18(%ebp),%eax -80107fb0: 2b 45 f4 sub -0xc(%ebp),%eax -80107fb3: 89 45 f0 mov %eax,-0x10(%ebp) -80107fb6: eb 07 jmp 80107fbf - else - n = PGSIZE; -80107fb8: c7 45 f0 00 10 00 00 movl $0x1000,-0x10(%ebp) - if(readi(ip, p2v(pa), offset+i, n) != n) -80107fbf: 8b 55 14 mov 0x14(%ebp),%edx -80107fc2: 8b 45 f4 mov -0xc(%ebp),%eax -80107fc5: 8d 1c 02 lea (%edx,%eax,1),%ebx -80107fc8: 83 ec 0c sub $0xc,%esp -80107fcb: ff 75 e8 pushl -0x18(%ebp) -80107fce: e8 e6 f6 ff ff call 801076b9 -80107fd3: 83 c4 10 add $0x10,%esp -80107fd6: ff 75 f0 pushl -0x10(%ebp) -80107fd9: 53 push %ebx -80107fda: 50 push %eax -80107fdb: ff 75 10 pushl 0x10(%ebp) -80107fde: e8 a3 9e ff ff call 80101e86 -80107fe3: 83 c4 10 add $0x10,%esp -80107fe6: 3b 45 f0 cmp -0x10(%ebp),%eax -80107fe9: 74 07 je 80107ff2 - return -1; -80107feb: b8 ff ff ff ff mov $0xffffffff,%eax -80107ff0: eb 18 jmp 8010800a - uint i, pa, n; - pte_t *pte; - - if((uint) addr % PGSIZE != 0) - panic("loaduvm: addr must be page aligned"); - for(i = 0; i < sz; i += PGSIZE){ -80107ff2: 81 45 f4 00 10 00 00 addl $0x1000,-0xc(%ebp) -80107ff9: 8b 45 f4 mov -0xc(%ebp),%eax -80107ffc: 3b 45 18 cmp 0x18(%ebp),%eax -80107fff: 0f 82 5f ff ff ff jb 80107f64 - else - n = PGSIZE; - if(readi(ip, p2v(pa), offset+i, n) != n) - return -1; - } - return 0; -80108005: b8 00 00 00 00 mov $0x0,%eax -} -8010800a: 8b 5d fc mov -0x4(%ebp),%ebx -8010800d: c9 leave -8010800e: c3 ret - -8010800f : - -// Allocate page tables and physical memory to grow process from oldsz to -// newsz, which need not be page aligned. Returns new size or 0 on error. -int -allocuvm(pde_t *pgdir, uint oldsz, uint newsz) -{ -8010800f: 55 push %ebp -80108010: 89 e5 mov %esp,%ebp -80108012: 83 ec 18 sub $0x18,%esp - char *mem; - uint a; - - if(newsz >= KERNBASE) -80108015: 8b 45 10 mov 0x10(%ebp),%eax -80108018: 85 c0 test %eax,%eax -8010801a: 79 0a jns 80108026 - return 0; -8010801c: b8 00 00 00 00 mov $0x0,%eax -80108021: e9 b0 00 00 00 jmp 801080d6 - if(newsz < oldsz) -80108026: 8b 45 10 mov 0x10(%ebp),%eax -80108029: 3b 45 0c cmp 0xc(%ebp),%eax -8010802c: 73 08 jae 80108036 - return oldsz; -8010802e: 8b 45 0c mov 0xc(%ebp),%eax -80108031: e9 a0 00 00 00 jmp 801080d6 - - a = PGROUNDUP(oldsz); -80108036: 8b 45 0c mov 0xc(%ebp),%eax -80108039: 05 ff 0f 00 00 add $0xfff,%eax -8010803e: 25 00 f0 ff ff and $0xfffff000,%eax -80108043: 89 45 f4 mov %eax,-0xc(%ebp) - for(; a < newsz; a += PGSIZE){ -80108046: eb 7f jmp 801080c7 - mem = kalloc(); -80108048: e8 bc ab ff ff call 80102c09 -8010804d: 89 45 f0 mov %eax,-0x10(%ebp) - if(mem == 0){ -80108050: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) -80108054: 75 2b jne 80108081 - cprintf("allocuvm out of memory\n"); -80108056: 83 ec 0c sub $0xc,%esp -80108059: 68 05 8b 10 80 push $0x80108b05 -8010805e: e8 5c 83 ff ff call 801003bf -80108063: 83 c4 10 add $0x10,%esp - deallocuvm(pgdir, newsz, oldsz); -80108066: 83 ec 04 sub $0x4,%esp -80108069: ff 75 0c pushl 0xc(%ebp) -8010806c: ff 75 10 pushl 0x10(%ebp) -8010806f: ff 75 08 pushl 0x8(%ebp) -80108072: e8 61 00 00 00 call 801080d8 -80108077: 83 c4 10 add $0x10,%esp - return 0; -8010807a: b8 00 00 00 00 mov $0x0,%eax -8010807f: eb 55 jmp 801080d6 - } - memset(mem, 0, PGSIZE); -80108081: 83 ec 04 sub $0x4,%esp -80108084: 68 00 10 00 00 push $0x1000 -80108089: 6a 00 push $0x0 -8010808b: ff 75 f0 pushl -0x10(%ebp) -8010808e: e8 44 d1 ff ff call 801051d7 -80108093: 83 c4 10 add $0x10,%esp - mappages(pgdir, (char*)a, PGSIZE, v2p(mem), PTE_W|PTE_U); -80108096: 83 ec 0c sub $0xc,%esp -80108099: ff 75 f0 pushl -0x10(%ebp) -8010809c: e8 0b f6 ff ff call 801076ac -801080a1: 83 c4 10 add $0x10,%esp -801080a4: 89 c2 mov %eax,%edx -801080a6: 8b 45 f4 mov -0xc(%ebp),%eax -801080a9: 83 ec 0c sub $0xc,%esp -801080ac: 6a 06 push $0x6 -801080ae: 52 push %edx -801080af: 68 00 10 00 00 push $0x1000 -801080b4: 50 push %eax -801080b5: ff 75 08 pushl 0x8(%ebp) -801080b8: e8 1d fb ff ff call 80107bda -801080bd: 83 c4 20 add $0x20,%esp - return 0; - if(newsz < oldsz) - return oldsz; - - a = PGROUNDUP(oldsz); - for(; a < newsz; a += PGSIZE){ -801080c0: 81 45 f4 00 10 00 00 addl $0x1000,-0xc(%ebp) -801080c7: 8b 45 f4 mov -0xc(%ebp),%eax -801080ca: 3b 45 10 cmp 0x10(%ebp),%eax -801080cd: 0f 82 75 ff ff ff jb 80108048 - return 0; - } - memset(mem, 0, PGSIZE); - mappages(pgdir, (char*)a, PGSIZE, v2p(mem), PTE_W|PTE_U); - } - return newsz; -801080d3: 8b 45 10 mov 0x10(%ebp),%eax -} -801080d6: c9 leave -801080d7: c3 ret - -801080d8 : -// newsz. oldsz and newsz need not be page-aligned, nor does newsz -// need to be less than oldsz. oldsz can be larger than the actual -// process size. Returns the new process size. -int -deallocuvm(pde_t *pgdir, uint oldsz, uint newsz) -{ -801080d8: 55 push %ebp -801080d9: 89 e5 mov %esp,%ebp -801080db: 83 ec 18 sub $0x18,%esp - pte_t *pte; - uint a, pa; - - if(newsz >= oldsz) -801080de: 8b 45 10 mov 0x10(%ebp),%eax -801080e1: 3b 45 0c cmp 0xc(%ebp),%eax -801080e4: 72 08 jb 801080ee - return oldsz; -801080e6: 8b 45 0c mov 0xc(%ebp),%eax -801080e9: e9 a5 00 00 00 jmp 80108193 - - a = PGROUNDUP(newsz); -801080ee: 8b 45 10 mov 0x10(%ebp),%eax -801080f1: 05 ff 0f 00 00 add $0xfff,%eax -801080f6: 25 00 f0 ff ff and $0xfffff000,%eax -801080fb: 89 45 f4 mov %eax,-0xc(%ebp) - for(; a < oldsz; a += PGSIZE){ -801080fe: e9 81 00 00 00 jmp 80108184 - pte = walkpgdir(pgdir, (char*)a, 0); -80108103: 8b 45 f4 mov -0xc(%ebp),%eax -80108106: 83 ec 04 sub $0x4,%esp -80108109: 6a 00 push $0x0 -8010810b: 50 push %eax -8010810c: ff 75 08 pushl 0x8(%ebp) -8010810f: e8 26 fa ff ff call 80107b3a -80108114: 83 c4 10 add $0x10,%esp -80108117: 89 45 f0 mov %eax,-0x10(%ebp) - if(!pte) -8010811a: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) -8010811e: 75 09 jne 80108129 - a += (NPTENTRIES - 1) * PGSIZE; -80108120: 81 45 f4 00 f0 3f 00 addl $0x3ff000,-0xc(%ebp) -80108127: eb 54 jmp 8010817d - else if((*pte & PTE_P) != 0){ -80108129: 8b 45 f0 mov -0x10(%ebp),%eax -8010812c: 8b 00 mov (%eax),%eax -8010812e: 83 e0 01 and $0x1,%eax -80108131: 85 c0 test %eax,%eax -80108133: 74 48 je 8010817d - pa = PTE_ADDR(*pte); -80108135: 8b 45 f0 mov -0x10(%ebp),%eax -80108138: 8b 00 mov (%eax),%eax -8010813a: 25 00 f0 ff ff and $0xfffff000,%eax -8010813f: 89 45 ec mov %eax,-0x14(%ebp) - if(pa == 0) -80108142: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) -80108146: 75 0d jne 80108155 - panic("kfree"); -80108148: 83 ec 0c sub $0xc,%esp -8010814b: 68 1d 8b 10 80 push $0x80108b1d -80108150: e8 07 84 ff ff call 8010055c - char *v = p2v(pa); -80108155: 83 ec 0c sub $0xc,%esp -80108158: ff 75 ec pushl -0x14(%ebp) -8010815b: e8 59 f5 ff ff call 801076b9 -80108160: 83 c4 10 add $0x10,%esp -80108163: 89 45 e8 mov %eax,-0x18(%ebp) - kfree(v); -80108166: 83 ec 0c sub $0xc,%esp -80108169: ff 75 e8 pushl -0x18(%ebp) -8010816c: e8 fc a9 ff ff call 80102b6d -80108171: 83 c4 10 add $0x10,%esp - *pte = 0; -80108174: 8b 45 f0 mov -0x10(%ebp),%eax -80108177: c7 00 00 00 00 00 movl $0x0,(%eax) - - if(newsz >= oldsz) - return oldsz; - - a = PGROUNDUP(newsz); - for(; a < oldsz; a += PGSIZE){ -8010817d: 81 45 f4 00 10 00 00 addl $0x1000,-0xc(%ebp) -80108184: 8b 45 f4 mov -0xc(%ebp),%eax -80108187: 3b 45 0c cmp 0xc(%ebp),%eax -8010818a: 0f 82 73 ff ff ff jb 80108103 - char *v = p2v(pa); - kfree(v); - *pte = 0; - } - } - return newsz; -80108190: 8b 45 10 mov 0x10(%ebp),%eax -} -80108193: c9 leave -80108194: c3 ret - -80108195 : - -// Free a page table and all the physical memory pages -// in the user part. -void -freevm(pde_t *pgdir) -{ -80108195: 55 push %ebp -80108196: 89 e5 mov %esp,%ebp -80108198: 83 ec 18 sub $0x18,%esp - uint i; - - if(pgdir == 0) -8010819b: 83 7d 08 00 cmpl $0x0,0x8(%ebp) -8010819f: 75 0d jne 801081ae - panic("freevm: no pgdir"); -801081a1: 83 ec 0c sub $0xc,%esp -801081a4: 68 23 8b 10 80 push $0x80108b23 -801081a9: e8 ae 83 ff ff call 8010055c - deallocuvm(pgdir, KERNBASE, 0); -801081ae: 83 ec 04 sub $0x4,%esp -801081b1: 6a 00 push $0x0 -801081b3: 68 00 00 00 80 push $0x80000000 -801081b8: ff 75 08 pushl 0x8(%ebp) -801081bb: e8 18 ff ff ff call 801080d8 -801081c0: 83 c4 10 add $0x10,%esp - for(i = 0; i < NPDENTRIES; i++){ -801081c3: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) -801081ca: eb 4f jmp 8010821b - if(pgdir[i] & PTE_P){ -801081cc: 8b 45 f4 mov -0xc(%ebp),%eax -801081cf: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx -801081d6: 8b 45 08 mov 0x8(%ebp),%eax -801081d9: 01 d0 add %edx,%eax -801081db: 8b 00 mov (%eax),%eax -801081dd: 83 e0 01 and $0x1,%eax -801081e0: 85 c0 test %eax,%eax -801081e2: 74 33 je 80108217 - char * v = p2v(PTE_ADDR(pgdir[i])); -801081e4: 8b 45 f4 mov -0xc(%ebp),%eax -801081e7: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx -801081ee: 8b 45 08 mov 0x8(%ebp),%eax -801081f1: 01 d0 add %edx,%eax -801081f3: 8b 00 mov (%eax),%eax -801081f5: 25 00 f0 ff ff and $0xfffff000,%eax -801081fa: 83 ec 0c sub $0xc,%esp -801081fd: 50 push %eax -801081fe: e8 b6 f4 ff ff call 801076b9 -80108203: 83 c4 10 add $0x10,%esp -80108206: 89 45 f0 mov %eax,-0x10(%ebp) - kfree(v); -80108209: 83 ec 0c sub $0xc,%esp -8010820c: ff 75 f0 pushl -0x10(%ebp) -8010820f: e8 59 a9 ff ff call 80102b6d -80108214: 83 c4 10 add $0x10,%esp - uint i; - - if(pgdir == 0) - panic("freevm: no pgdir"); - deallocuvm(pgdir, KERNBASE, 0); - for(i = 0; i < NPDENTRIES; i++){ -80108217: 83 45 f4 01 addl $0x1,-0xc(%ebp) -8010821b: 81 7d f4 ff 03 00 00 cmpl $0x3ff,-0xc(%ebp) -80108222: 76 a8 jbe 801081cc - if(pgdir[i] & PTE_P){ - char * v = p2v(PTE_ADDR(pgdir[i])); - kfree(v); - } - } - kfree((char*)pgdir); -80108224: 83 ec 0c sub $0xc,%esp -80108227: ff 75 08 pushl 0x8(%ebp) -8010822a: e8 3e a9 ff ff call 80102b6d -8010822f: 83 c4 10 add $0x10,%esp -} -80108232: c9 leave -80108233: c3 ret - -80108234 : - -// Clear PTE_U on a page. Used to create an inaccessible -// page beneath the user stack. -void -clearpteu(pde_t *pgdir, char *uva) -{ -80108234: 55 push %ebp -80108235: 89 e5 mov %esp,%ebp -80108237: 83 ec 18 sub $0x18,%esp - pte_t *pte; - - pte = walkpgdir(pgdir, uva, 0); -8010823a: 83 ec 04 sub $0x4,%esp -8010823d: 6a 00 push $0x0 -8010823f: ff 75 0c pushl 0xc(%ebp) -80108242: ff 75 08 pushl 0x8(%ebp) -80108245: e8 f0 f8 ff ff call 80107b3a -8010824a: 83 c4 10 add $0x10,%esp -8010824d: 89 45 f4 mov %eax,-0xc(%ebp) - if(pte == 0) -80108250: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -80108254: 75 0d jne 80108263 - panic("clearpteu"); -80108256: 83 ec 0c sub $0xc,%esp -80108259: 68 34 8b 10 80 push $0x80108b34 -8010825e: e8 f9 82 ff ff call 8010055c - *pte &= ~PTE_U; -80108263: 8b 45 f4 mov -0xc(%ebp),%eax -80108266: 8b 00 mov (%eax),%eax -80108268: 83 e0 fb and $0xfffffffb,%eax -8010826b: 89 c2 mov %eax,%edx -8010826d: 8b 45 f4 mov -0xc(%ebp),%eax -80108270: 89 10 mov %edx,(%eax) -} -80108272: c9 leave -80108273: c3 ret - -80108274 : - -// Given a parent process's page table, create a copy -// of it for a child. -pde_t* -copyuvm(pde_t *pgdir, uint sz) -{ -80108274: 55 push %ebp -80108275: 89 e5 mov %esp,%ebp -80108277: 53 push %ebx -80108278: 83 ec 24 sub $0x24,%esp - pde_t *d; - pte_t *pte; - uint pa, i, flags; - char *mem; - - if((d = setupkvm()) == 0) -8010827b: e8 ec f9 ff ff call 80107c6c -80108280: 89 45 f0 mov %eax,-0x10(%ebp) -80108283: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) -80108287: 75 0a jne 80108293 - return 0; -80108289: b8 00 00 00 00 mov $0x0,%eax -8010828e: e9 f8 00 00 00 jmp 8010838b - for(i = 0; i < sz; i += PGSIZE){ -80108293: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) -8010829a: e9 c8 00 00 00 jmp 80108367 - if((pte = walkpgdir(pgdir, (void *) i, 0)) == 0) -8010829f: 8b 45 f4 mov -0xc(%ebp),%eax -801082a2: 83 ec 04 sub $0x4,%esp -801082a5: 6a 00 push $0x0 -801082a7: 50 push %eax -801082a8: ff 75 08 pushl 0x8(%ebp) -801082ab: e8 8a f8 ff ff call 80107b3a -801082b0: 83 c4 10 add $0x10,%esp -801082b3: 89 45 ec mov %eax,-0x14(%ebp) -801082b6: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) -801082ba: 75 0d jne 801082c9 - panic("copyuvm: pte should exist"); -801082bc: 83 ec 0c sub $0xc,%esp -801082bf: 68 3e 8b 10 80 push $0x80108b3e -801082c4: e8 93 82 ff ff call 8010055c - if(!(*pte & PTE_P)) -801082c9: 8b 45 ec mov -0x14(%ebp),%eax -801082cc: 8b 00 mov (%eax),%eax -801082ce: 83 e0 01 and $0x1,%eax -801082d1: 85 c0 test %eax,%eax -801082d3: 75 0d jne 801082e2 - panic("copyuvm: page not present"); -801082d5: 83 ec 0c sub $0xc,%esp -801082d8: 68 58 8b 10 80 push $0x80108b58 -801082dd: e8 7a 82 ff ff call 8010055c - pa = PTE_ADDR(*pte); -801082e2: 8b 45 ec mov -0x14(%ebp),%eax -801082e5: 8b 00 mov (%eax),%eax -801082e7: 25 00 f0 ff ff and $0xfffff000,%eax -801082ec: 89 45 e8 mov %eax,-0x18(%ebp) - flags = PTE_FLAGS(*pte); -801082ef: 8b 45 ec mov -0x14(%ebp),%eax -801082f2: 8b 00 mov (%eax),%eax -801082f4: 25 ff 0f 00 00 and $0xfff,%eax -801082f9: 89 45 e4 mov %eax,-0x1c(%ebp) - if((mem = kalloc()) == 0) -801082fc: e8 08 a9 ff ff call 80102c09 -80108301: 89 45 e0 mov %eax,-0x20(%ebp) -80108304: 83 7d e0 00 cmpl $0x0,-0x20(%ebp) -80108308: 75 02 jne 8010830c - goto bad; -8010830a: eb 6c jmp 80108378 - memmove(mem, (char*)p2v(pa), PGSIZE); -8010830c: 83 ec 0c sub $0xc,%esp -8010830f: ff 75 e8 pushl -0x18(%ebp) -80108312: e8 a2 f3 ff ff call 801076b9 -80108317: 83 c4 10 add $0x10,%esp -8010831a: 83 ec 04 sub $0x4,%esp -8010831d: 68 00 10 00 00 push $0x1000 -80108322: 50 push %eax -80108323: ff 75 e0 pushl -0x20(%ebp) -80108326: e8 6b cf ff ff call 80105296 -8010832b: 83 c4 10 add $0x10,%esp - if(mappages(d, (void*)i, PGSIZE, v2p(mem), flags) < 0) -8010832e: 8b 5d e4 mov -0x1c(%ebp),%ebx -80108331: 83 ec 0c sub $0xc,%esp -80108334: ff 75 e0 pushl -0x20(%ebp) -80108337: e8 70 f3 ff ff call 801076ac -8010833c: 83 c4 10 add $0x10,%esp -8010833f: 89 c2 mov %eax,%edx -80108341: 8b 45 f4 mov -0xc(%ebp),%eax -80108344: 83 ec 0c sub $0xc,%esp -80108347: 53 push %ebx -80108348: 52 push %edx -80108349: 68 00 10 00 00 push $0x1000 -8010834e: 50 push %eax -8010834f: ff 75 f0 pushl -0x10(%ebp) -80108352: e8 83 f8 ff ff call 80107bda -80108357: 83 c4 20 add $0x20,%esp -8010835a: 85 c0 test %eax,%eax -8010835c: 79 02 jns 80108360 - goto bad; -8010835e: eb 18 jmp 80108378 - uint pa, i, flags; - char *mem; - - if((d = setupkvm()) == 0) - return 0; - for(i = 0; i < sz; i += PGSIZE){ -80108360: 81 45 f4 00 10 00 00 addl $0x1000,-0xc(%ebp) -80108367: 8b 45 f4 mov -0xc(%ebp),%eax -8010836a: 3b 45 0c cmp 0xc(%ebp),%eax -8010836d: 0f 82 2c ff ff ff jb 8010829f - goto bad; - memmove(mem, (char*)p2v(pa), PGSIZE); - if(mappages(d, (void*)i, PGSIZE, v2p(mem), flags) < 0) - goto bad; - } - return d; -80108373: 8b 45 f0 mov -0x10(%ebp),%eax -80108376: eb 13 jmp 8010838b - -bad: - freevm(d); -80108378: 83 ec 0c sub $0xc,%esp -8010837b: ff 75 f0 pushl -0x10(%ebp) -8010837e: e8 12 fe ff ff call 80108195 -80108383: 83 c4 10 add $0x10,%esp - return 0; -80108386: b8 00 00 00 00 mov $0x0,%eax -} -8010838b: 8b 5d fc mov -0x4(%ebp),%ebx -8010838e: c9 leave -8010838f: c3 ret - -80108390 : - -//PAGEBREAK! -// Map user virtual address to kernel address. -char* -uva2ka(pde_t *pgdir, char *uva) -{ -80108390: 55 push %ebp -80108391: 89 e5 mov %esp,%ebp -80108393: 83 ec 18 sub $0x18,%esp - pte_t *pte; - - pte = walkpgdir(pgdir, uva, 0); -80108396: 83 ec 04 sub $0x4,%esp -80108399: 6a 00 push $0x0 -8010839b: ff 75 0c pushl 0xc(%ebp) -8010839e: ff 75 08 pushl 0x8(%ebp) -801083a1: e8 94 f7 ff ff call 80107b3a -801083a6: 83 c4 10 add $0x10,%esp -801083a9: 89 45 f4 mov %eax,-0xc(%ebp) - if((*pte & PTE_P) == 0) -801083ac: 8b 45 f4 mov -0xc(%ebp),%eax -801083af: 8b 00 mov (%eax),%eax -801083b1: 83 e0 01 and $0x1,%eax -801083b4: 85 c0 test %eax,%eax -801083b6: 75 07 jne 801083bf - return 0; -801083b8: b8 00 00 00 00 mov $0x0,%eax -801083bd: eb 29 jmp 801083e8 - if((*pte & PTE_U) == 0) -801083bf: 8b 45 f4 mov -0xc(%ebp),%eax -801083c2: 8b 00 mov (%eax),%eax -801083c4: 83 e0 04 and $0x4,%eax -801083c7: 85 c0 test %eax,%eax -801083c9: 75 07 jne 801083d2 - return 0; -801083cb: b8 00 00 00 00 mov $0x0,%eax -801083d0: eb 16 jmp 801083e8 - return (char*)p2v(PTE_ADDR(*pte)); -801083d2: 8b 45 f4 mov -0xc(%ebp),%eax -801083d5: 8b 00 mov (%eax),%eax -801083d7: 25 00 f0 ff ff and $0xfffff000,%eax -801083dc: 83 ec 0c sub $0xc,%esp -801083df: 50 push %eax -801083e0: e8 d4 f2 ff ff call 801076b9 -801083e5: 83 c4 10 add $0x10,%esp -} -801083e8: c9 leave -801083e9: c3 ret - -801083ea : -// Copy len bytes from p to user address va in page table pgdir. -// Most useful when pgdir is not the current page table. -// uva2ka ensures this only works for PTE_U pages. -int -copyout(pde_t *pgdir, uint va, void *p, uint len) -{ -801083ea: 55 push %ebp -801083eb: 89 e5 mov %esp,%ebp -801083ed: 83 ec 18 sub $0x18,%esp - char *buf, *pa0; - uint n, va0; - - buf = (char*)p; -801083f0: 8b 45 10 mov 0x10(%ebp),%eax -801083f3: 89 45 f4 mov %eax,-0xc(%ebp) - while(len > 0){ -801083f6: eb 7f jmp 80108477 - va0 = (uint)PGROUNDDOWN(va); -801083f8: 8b 45 0c mov 0xc(%ebp),%eax -801083fb: 25 00 f0 ff ff and $0xfffff000,%eax -80108400: 89 45 ec mov %eax,-0x14(%ebp) - pa0 = uva2ka(pgdir, (char*)va0); -80108403: 8b 45 ec mov -0x14(%ebp),%eax -80108406: 83 ec 08 sub $0x8,%esp -80108409: 50 push %eax -8010840a: ff 75 08 pushl 0x8(%ebp) -8010840d: e8 7e ff ff ff call 80108390 -80108412: 83 c4 10 add $0x10,%esp -80108415: 89 45 e8 mov %eax,-0x18(%ebp) - if(pa0 == 0) -80108418: 83 7d e8 00 cmpl $0x0,-0x18(%ebp) -8010841c: 75 07 jne 80108425 - return -1; -8010841e: b8 ff ff ff ff mov $0xffffffff,%eax -80108423: eb 61 jmp 80108486 - n = PGSIZE - (va - va0); -80108425: 8b 45 ec mov -0x14(%ebp),%eax -80108428: 2b 45 0c sub 0xc(%ebp),%eax -8010842b: 05 00 10 00 00 add $0x1000,%eax -80108430: 89 45 f0 mov %eax,-0x10(%ebp) - if(n > len) -80108433: 8b 45 f0 mov -0x10(%ebp),%eax -80108436: 3b 45 14 cmp 0x14(%ebp),%eax -80108439: 76 06 jbe 80108441 - n = len; -8010843b: 8b 45 14 mov 0x14(%ebp),%eax -8010843e: 89 45 f0 mov %eax,-0x10(%ebp) - memmove(pa0 + (va - va0), buf, n); -80108441: 8b 45 0c mov 0xc(%ebp),%eax -80108444: 2b 45 ec sub -0x14(%ebp),%eax -80108447: 89 c2 mov %eax,%edx -80108449: 8b 45 e8 mov -0x18(%ebp),%eax -8010844c: 01 d0 add %edx,%eax -8010844e: 83 ec 04 sub $0x4,%esp -80108451: ff 75 f0 pushl -0x10(%ebp) -80108454: ff 75 f4 pushl -0xc(%ebp) -80108457: 50 push %eax -80108458: e8 39 ce ff ff call 80105296 -8010845d: 83 c4 10 add $0x10,%esp - len -= n; -80108460: 8b 45 f0 mov -0x10(%ebp),%eax -80108463: 29 45 14 sub %eax,0x14(%ebp) - buf += n; -80108466: 8b 45 f0 mov -0x10(%ebp),%eax -80108469: 01 45 f4 add %eax,-0xc(%ebp) - va = va0 + PGSIZE; -8010846c: 8b 45 ec mov -0x14(%ebp),%eax -8010846f: 05 00 10 00 00 add $0x1000,%eax -80108474: 89 45 0c mov %eax,0xc(%ebp) -{ - char *buf, *pa0; - uint n, va0; - - buf = (char*)p; - while(len > 0){ -80108477: 83 7d 14 00 cmpl $0x0,0x14(%ebp) -8010847b: 0f 85 77 ff ff ff jne 801083f8 - memmove(pa0 + (va - va0), buf, n); - len -= n; - buf += n; - va = va0 + PGSIZE; - } - return 0; -80108481: b8 00 00 00 00 mov $0x0,%eax -} -80108486: c9 leave -80108487: c3 ret diff --git a/xv6-public/kernel.sym b/xv6-public/kernel.sym deleted file mode 100755 index e9751d6..0000000 --- a/xv6-public/kernel.sym +++ /dev/null @@ -1,579 +0,0 @@ -80100000 .text -80108488 .rodata -80108b72 .stab -80108b73 .stabstr -80109000 .data -8010b5c0 .bss -00000000 .debug_line -00000000 .debug_info -00000000 .debug_abbrev -00000000 .debug_aranges -00000000 .debug_loc -00000000 .debug_str -00000000 .comment -00000000 bio.c -801000b1 bget -00000000 console.c -801002d0 inb -801002ed outb -8010030b cli -8010b5c0 panicked -8010b5e0 cons -80100311 printint -80109004 digits.1859 -8010076b consputc -80109000 crt -801005f7 cgaputc -00000000 exec.c -00000000 file.c -00000000 fs.c -80101380 bzero -801013d3 balloc -8010151e bfree -80101805 iget -80101d1e itrunc -80101bff bmap -80102318 skipelem -801023bc namex -00000000 ide.c -80102510 inb -8010252d insl -80102552 outb -80102570 outsl -8010b620 idelock -8010b654 idequeue -8010b658 havedisk1 -80102595 idewait -80102687 idestart -00000000 ioapic.c -8010299d ioapicread -801029b4 ioapicwrite -00000000 kalloc.c -80102ac9 v2p -00000000 kbd.c -80102c5e inb -80109040 shiftcode -80109140 togglecode -80109240 normalmap -80109340 shiftmap -80109440 ctlmap -8010b65c shift.1695 -80109540 charcode.1696 -00000000 lapic.c -80102de2 inb -80102dff outb -80102e1d readeflags -80102e2d lapicw -8010b660 n.1776 -801030c2 cmos_read -801030f2 fill_rtcdate -00000000 log.c -801034c1 recover_from_log -80103315 install_trans -801033cc read_head -8010343f write_head -801036ea commit -80103633 write_log -00000000 main.c -801037ed v2p -801037fa p2v -80103807 xchg -80103937 startothers -801038f1 mpmain -801038d7 mpenter -00000000 mp.c -80103a20 p2v -80103a2d inb -80103a4a outb -8010b664 bcpu -80103a86 sum -80103abe mpsearch1 -80103b2a mpsearch -80103be6 mpconfig -00000000 picirq.c -80103e54 outb -8010b000 irqmask -80103e72 picsetmask -00000000 pipe.c -00000000 proc.c -801043cb readeflags -801043db sti -8010b668 initproc -801043fe allocproc -80104d36 wakeup1 -8010b008 first.1885 -8010b00c states.1910 -00000000 spinlock.c -80104f24 readeflags -80104f34 cli -80104f3a sti -80104f40 xchg -00000000 string.c -8010518d stosb -801051b2 stosl -00000000 syscall.c -8010b040 syscalls -00000000 sysfile.c -8010563b argfd -801056b0 fdalloc -80105a6e isdirempty -80105cb4 create -00000000 sysproc.c -00000000 timer.c -80106539 outb -00000000 trap.c -801065be lidt -801065e7 rcr2 -00000000 uart.c -801069ee inb -80106a0b outb -8010b66c uart -80106b80 uartgetc -00000000 vm.c -8010764d lgdt -80107676 ltr -8010768c loadgs -801076a1 lcr3 -801076ac v2p -801076b9 p2v -80107b3a walkpgdir -80107bda mappages -8010b4c0 kmap -00000000 -8010094a consoleread -801075a5 vector242 -80106ffc vector119 -8010000c entry -80106edc vector87 -80106ed3 vector86 -801053dc safestrcpy -80105829 sys_close -80107611 vector251 -80106f00 vector91 -80106cf6 vector33 -801071e5 vector162 -80104c0c yield -80112340 log -801122e0 kmem -80107449 vector213 -80106f99 vector108 -80106a29 uartinit -80106d50 vector43 -80102fc3 lapiceoi -80106557 timerinit -80107209 vector165 -801072f9 vector185 -801029ce ioapicinit -80106fd8 vector115 -8010114c fileread -80107017 vector122 -8010641f sys_sbrk -80112440 ioapicid -8010719d vector156 -801075c9 vector245 -801122d4 ioapic -80107329 vector189 -80106c1a vector7 -80106df2 vector61 -80106ca5 vector24 -80106fb4 vector111 -801073ad vector200 -80106e28 vector67 -801070c5 vector138 -80106e67 vector74 -80104b51 sched -80105296 memmove -80106dce vector57 -801055b6 syscall -80107455 vector214 -80106f48 vector99 -80101fe0 writei -801070e9 vector141 -801063b2 sys_fork -8010c680 bcache -8010725d vector172 -80107599 vector241 -80112444 ismp -80105032 getcallerpcs -80106023 sys_mkdir -80107629 vector253 -80106bf6 vector3 -80106bed vector2 -8010216b namecmp -801074f1 vector227 -80107425 vector210 -80105585 argstr -801074cd vector224 -80106d3e vector41 -801003bf cprintf -80100fbc filedup -801024d9 namei -80106c8a vector21 -80100034 binit -80107299 vector177 -80106ff3 vector118 -80106e43 vector70 -80106e3a vector69 -80107569 vector237 -80106e0d vector64 -80106cc0 vector27 -8010707d vector132 -80107305 vector186 -80105753 sys_read -80107479 vector217 -80105462 fetchint -80107c6c setupkvm -80105318 memcpy -80108195 freevm -80106be4 vector1 -801072a5 vector178 -80106d23 vector38 -80102b6d kfree -80107575 vector238 -80101aec iput -80107089 vector133 -80106e5e vector73 -8010710d vector144 -80107635 vector254 -8010133f readsb -8010b004 nextpid -80106f5a vector101 -80107431 vector211 -80103c91 mpinit -80107275 vector174 -801075b1 vector243 -80102f6a cpunum -80100f33 fileinit -80115220 gdt -80104f5a initlock -8010704d vector128 -801083ea copyout -80106ea6 vector81 -80104c8b sleep -80102fdd microdelay -80106c48 vector13 -80106d98 vector51 -80106c5f vector16 -801107c0 input -8010758d vector240 -80106db3 vector54 -80106c78 vector19 -80106f09 vector92 -801075bd vector244 -80101e41 stati -801070dd vector140 -801063de sys_kill -80106d62 vector45 -80106e94 vector79 -8010411d pipeclose -80107509 vector229 -801071b5 vector158 -80105879 sys_fstat -80100a5f consolewrite -80106d2c vector39 -8010722d vector168 -80103570 end_op -80106d08 vector35 -80106fc6 vector113 -80102b31 freerange -80107032 vector125 -8010800f allocuvm -801065b3 trapret -8010746d vector216 -80106e04 vector63 -80106cb7 vector26 -80107359 vector193 -80102e4e lapicinit -8010737d vector196 -80107419 vector209 -80106bff vector4 -80107245 vector170 -8010b670 stack -801070ad vector136 -80106c33 vector10 -801073f5 vector206 -80101a7b iunlock -8010646b sys_sleep -80107641 vector255 -801072c9 vector181 -80106de0 vector59 -80106eca vector85 -80106ec1 vector84 -801072e1 vector183 -801071c1 vector159 -8010743d vector212 -801058c9 sys_link -80106d74 vector47 -801074fd vector228 -80106d47 vector42 -80106fcf vector114 -80108390 uva2ka -80107281 vector175 -80107101 vector143 -80100f50 filealloc -80104d74 wakeup -80107065 vector130 -801075d5 vector246 -80106c2a vector9 -801070f5 vector142 -80106f51 vector100 -801073b9 vector201 -80108234 clearpteu -801065f8 tvinit -80106de9 vector60 -80106c9c vector23 -801018e4 idup -8010755d vector236 -80102dca kbdintr -80105e86 sys_open -80107521 vector231 -80106e1f vector66 -80106cd2 vector29 -80101e86 readi -801070a1 vector135 -801007d1 consoleintr -80104daa kill -80106e82 vector77 -8010166f ialloc -801072bd vector180 -80115258 kpgdir -8010740d vector208 -80103162 cmostime -80106bc3 uartintr -80106f3f vector98 -80106f36 vector97 -8010728d vector176 -80107365 vector194 -80106ced vector32 -8011525c end -801073a1 vector199 -80107071 vector131 -8010761d vector252 -80101204 filewrite -80106bdb vector0 -801054fe argint -80100b44 exec -80107119 vector145 -801057be sys_write -80104fe1 release -8010549c fetchstr -80106f90 vector107 -80106d35 vector40 -80104989 wait -80106f63 vector102 -8010a000 entrypgdir -0010000c _start -80106dc5 vector56 -80106e31 vector68 -80106c11 vector6 -8010b52c _binary_initcode_end -80100000 multiboot_header -80107059 vector129 -80104aad scheduler -80102186 dirlookup -80107389 vector197 -8010100d fileclose -801034e2 begin_op -8010716d vector152 -80107d1e kvmalloc -80107515 vector230 -8010532e strncmp -80106d1a vector37 -801073e9 vector205 -801071d9 vector161 -801149c0 tickslock -801041c6 pipewrite -80105384 strncpy -80106e4c vector71 -80108274 copyuvm -80110880 ftable -801071cd vector160 -80105526 argptr -80107461 vector215 -801071a9 vector157 -801056fc sys_dup -80106fbd vector112 -8010055c panic -80104c46 forkret -801072d5 vector182 -80106c41 vector12 -8010523e memcmp -80102c7b kbdgetc -80106fa2 vector109 -80106c81 vector20 -801046c0 fork -80106daa vector53 -80106c6f vector18 -0000008a _binary_entryother_size -80112480 cpus -80106f24 vector95 -801050ab holding -801112c0 sb -80104f7b acquire -801074e5 vector226 -801024f5 nameiparent -80106d86 vector49 -80106d59 vector44 -8011231c lapic -80106e8b vector78 -80106593 alltraps -80107269 vector173 -80106fea vector117 -80106eaf vector82 -80103eb6 picenable -801074b5 vector222 -80106c23 vector8 -80107149 vector149 -80101745 iupdate -80109000 data -801051d7 memset -8010752d vector232 -80103821 main -80107d35 switchkvm -80106f87 vector106 -8010749d vector220 -80106ef7 vector90 -801071f1 vector163 -80107545 vector234 -80103719 log_write -80105ad1 sys_unlink -80106dfb vector62 -80106cae vector25 -80107395 vector198 -80107005 vector120 -8010b52c _binary_entryother_start -80102ad6 kinit1 -80106d8f vector50 -80106c56 vector15 -80107161 vector151 -80106eb8 vector83 -80106eee vector89 -80106ee5 vector88 -80106784 trap -80106506 sys_uptime -801072b1 vector179 -80106cff vector34 -80106d6b vector46 -80107095 vector134 -801074c1 vector223 -80114a00 idt -80107485 vector218 -801043e1 pinit -801080d8 deallocuvm -801074d9 vector225 -80107311 vector187 -8010461d growproc -80112a60 ncpu -80106cdb vector30 -80104503 userinit -801001b4 bread -80107044 vector127 -801042ca piperead -80115200 ticks -8010734d vector192 -80107215 vector166 -80100ad8 consoleinit -80106e79 vector76 -80106e70 vector75 -801027e4 ideintr -80107371 vector195 -80107155 vector150 -80106dd7 vector58 -801075ed vector248 -80107020 vector123 -80106f2d vector96 -80106ce4 vector31 -801073d1 vector203 -801070d1 vector139 -80107179 vector153 -801071fd vector164 -80104e2e procdump -8010700e vector121 -80106b1c uartputc -80106c08 vector5 -80107221 vector167 -80107191 vector155 -801075f9 vector249 -8010022b brelse -80107605 vector250 -80107029 vector124 -80106fab vector110 -801073dd vector204 -8010191e ilock -801061d2 sys_exec -801070b9 vector137 -8010b500 _binary_initcode_start -8010544d swtch -801075e1 vector247 -80106c93 vector22 -801073c5 vector202 -801076c6 seginit -80101bdb iunlockput -80106e55 vector72 -80106dbc vector55 -8010703b vector126 -80106e16 vector65 -80106cc9 vector28 -8010b5b6 _binary_entryother_end -80107239 vector169 -801001ed bwrite -80107539 vector233 -8010676d idtinit -80104851 exit -801063d1 sys_wait -801063bf sys_exit -80102241 dirlink -0000002c _binary_initcode_size -80107131 vector147 -801025da ideinit -80107f38 loaduvm -80106f75 vector104 -80106fe1 vector116 -80112a80 ptable -80102a82 ioapicenable -80105119 popcli -8010b098 vectors -80106da1 vector52 -80106c68 vector17 -801072ed vector184 -80105426 strlen -80103a68 mpbcpu -801062da sys_pipe -801015f5 iinit -80103ee2 picinit -80107401 vector207 -80107ec3 inituvm -80107335 vector190 -80107581 vector239 -80106f1b vector94 -80106f12 vector93 -801032c9 initlog -8010731d vector188 -80106d7d vector48 -801028b9 iderw -80107491 vector219 -8010713d vector148 -801074a9 vector221 -80102c09 kalloc -80111240 devsw -80106411 sys_getpid -80106e9d vector80 -80107251 vector171 -80107185 vector154 -80106d11 vector36 -80103fca pipealloc -80107551 vector235 -80106f7e vector105 -8010611e sys_chdir -80111300 icache -80107125 vector146 -80107341 vector191 -80106f6c vector103 -80106084 sys_mknod -80102fe2 lapicstartap -80107d51 switchuvm -801050d5 pushcli -80102b0e kinit2 -80106c3a vector11 -80106c4f vector14 -801010f5 filestat diff --git a/xv6-public/kill.asm b/xv6-public/kill.asm deleted file mode 100755 index 88f7c92..0000000 --- a/xv6-public/kill.asm +++ /dev/null @@ -1,1192 +0,0 @@ - -_kill: file format elf32-i386 - - -Disassembly of section .text: - -00000000
: -#include "stat.h" -#include "user.h" - -int -main(int argc, char **argv) -{ - 0: 8d 4c 24 04 lea 0x4(%esp),%ecx - 4: 83 e4 f0 and $0xfffffff0,%esp - 7: ff 71 fc pushl -0x4(%ecx) - a: 55 push %ebp - b: 89 e5 mov %esp,%ebp - d: 53 push %ebx - e: 51 push %ecx - f: 83 ec 10 sub $0x10,%esp - 12: 89 cb mov %ecx,%ebx - int i; - - if(argc < 2){ - 14: 83 3b 01 cmpl $0x1,(%ebx) - 17: 7f 17 jg 30 - printf(2, "usage: kill pid...\n"); - 19: 83 ec 08 sub $0x8,%esp - 1c: 68 f0 07 00 00 push $0x7f0 - 21: 6a 02 push $0x2 - 23: e8 14 04 00 00 call 43c - 28: 83 c4 10 add $0x10,%esp - exit(); - 2b: e8 97 02 00 00 call 2c7 - } - for(i=1; i - kill(atoi(argv[i])); - 39: 8b 45 f4 mov -0xc(%ebp),%eax - 3c: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx - 43: 8b 43 04 mov 0x4(%ebx),%eax - 46: 01 d0 add %edx,%eax - 48: 8b 00 mov (%eax),%eax - 4a: 83 ec 0c sub $0xc,%esp - 4d: 50 push %eax - 4e: e8 e2 01 00 00 call 235 - 53: 83 c4 10 add $0x10,%esp - 56: 83 ec 0c sub $0xc,%esp - 59: 50 push %eax - 5a: e8 98 02 00 00 call 2f7 - 5f: 83 c4 10 add $0x10,%esp - - if(argc < 2){ - printf(2, "usage: kill pid...\n"); - exit(); - } - for(i=1; i - kill(atoi(argv[i])); - exit(); - 6d: e8 55 02 00 00 call 2c7 - -00000072 : - "cc"); -} - -static inline void -stosb(void *addr, int data, int cnt) -{ - 72: 55 push %ebp - 73: 89 e5 mov %esp,%ebp - 75: 57 push %edi - 76: 53 push %ebx - asm volatile("cld; rep stosb" : - 77: 8b 4d 08 mov 0x8(%ebp),%ecx - 7a: 8b 55 10 mov 0x10(%ebp),%edx - 7d: 8b 45 0c mov 0xc(%ebp),%eax - 80: 89 cb mov %ecx,%ebx - 82: 89 df mov %ebx,%edi - 84: 89 d1 mov %edx,%ecx - 86: fc cld - 87: f3 aa rep stos %al,%es:(%edi) - 89: 89 ca mov %ecx,%edx - 8b: 89 fb mov %edi,%ebx - 8d: 89 5d 08 mov %ebx,0x8(%ebp) - 90: 89 55 10 mov %edx,0x10(%ebp) - "=D" (addr), "=c" (cnt) : - "0" (addr), "1" (cnt), "a" (data) : - "memory", "cc"); -} - 93: 5b pop %ebx - 94: 5f pop %edi - 95: 5d pop %ebp - 96: c3 ret - -00000097 : -#include "user.h" -#include "x86.h" - -char* -strcpy(char *s, char *t) -{ - 97: 55 push %ebp - 98: 89 e5 mov %esp,%ebp - 9a: 83 ec 10 sub $0x10,%esp - char *os; - - os = s; - 9d: 8b 45 08 mov 0x8(%ebp),%eax - a0: 89 45 fc mov %eax,-0x4(%ebp) - while((*s++ = *t++) != 0) - a3: 90 nop - a4: 8b 45 08 mov 0x8(%ebp),%eax - a7: 8d 50 01 lea 0x1(%eax),%edx - aa: 89 55 08 mov %edx,0x8(%ebp) - ad: 8b 55 0c mov 0xc(%ebp),%edx - b0: 8d 4a 01 lea 0x1(%edx),%ecx - b3: 89 4d 0c mov %ecx,0xc(%ebp) - b6: 0f b6 12 movzbl (%edx),%edx - b9: 88 10 mov %dl,(%eax) - bb: 0f b6 00 movzbl (%eax),%eax - be: 84 c0 test %al,%al - c0: 75 e2 jne a4 - ; - return os; - c2: 8b 45 fc mov -0x4(%ebp),%eax -} - c5: c9 leave - c6: c3 ret - -000000c7 : - -int -strcmp(const char *p, const char *q) -{ - c7: 55 push %ebp - c8: 89 e5 mov %esp,%ebp - while(*p && *p == *q) - ca: eb 08 jmp d4 - p++, q++; - cc: 83 45 08 01 addl $0x1,0x8(%ebp) - d0: 83 45 0c 01 addl $0x1,0xc(%ebp) -} - -int -strcmp(const char *p, const char *q) -{ - while(*p && *p == *q) - d4: 8b 45 08 mov 0x8(%ebp),%eax - d7: 0f b6 00 movzbl (%eax),%eax - da: 84 c0 test %al,%al - dc: 74 10 je ee - de: 8b 45 08 mov 0x8(%ebp),%eax - e1: 0f b6 10 movzbl (%eax),%edx - e4: 8b 45 0c mov 0xc(%ebp),%eax - e7: 0f b6 00 movzbl (%eax),%eax - ea: 38 c2 cmp %al,%dl - ec: 74 de je cc - p++, q++; - return (uchar)*p - (uchar)*q; - ee: 8b 45 08 mov 0x8(%ebp),%eax - f1: 0f b6 00 movzbl (%eax),%eax - f4: 0f b6 d0 movzbl %al,%edx - f7: 8b 45 0c mov 0xc(%ebp),%eax - fa: 0f b6 00 movzbl (%eax),%eax - fd: 0f b6 c0 movzbl %al,%eax - 100: 29 c2 sub %eax,%edx - 102: 89 d0 mov %edx,%eax -} - 104: 5d pop %ebp - 105: c3 ret - -00000106 : - -uint -strlen(char *s) -{ - 106: 55 push %ebp - 107: 89 e5 mov %esp,%ebp - 109: 83 ec 10 sub $0x10,%esp - int n; - - for(n = 0; s[n]; n++) - 10c: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - 113: eb 04 jmp 119 - 115: 83 45 fc 01 addl $0x1,-0x4(%ebp) - 119: 8b 55 fc mov -0x4(%ebp),%edx - 11c: 8b 45 08 mov 0x8(%ebp),%eax - 11f: 01 d0 add %edx,%eax - 121: 0f b6 00 movzbl (%eax),%eax - 124: 84 c0 test %al,%al - 126: 75 ed jne 115 - ; - return n; - 128: 8b 45 fc mov -0x4(%ebp),%eax -} - 12b: c9 leave - 12c: c3 ret - -0000012d : - -void* -memset(void *dst, int c, uint n) -{ - 12d: 55 push %ebp - 12e: 89 e5 mov %esp,%ebp - stosb(dst, c, n); - 130: 8b 45 10 mov 0x10(%ebp),%eax - 133: 50 push %eax - 134: ff 75 0c pushl 0xc(%ebp) - 137: ff 75 08 pushl 0x8(%ebp) - 13a: e8 33 ff ff ff call 72 - 13f: 83 c4 0c add $0xc,%esp - return dst; - 142: 8b 45 08 mov 0x8(%ebp),%eax -} - 145: c9 leave - 146: c3 ret - -00000147 : - -char* -strchr(const char *s, char c) -{ - 147: 55 push %ebp - 148: 89 e5 mov %esp,%ebp - 14a: 83 ec 04 sub $0x4,%esp - 14d: 8b 45 0c mov 0xc(%ebp),%eax - 150: 88 45 fc mov %al,-0x4(%ebp) - for(; *s; s++) - 153: eb 14 jmp 169 - if(*s == c) - 155: 8b 45 08 mov 0x8(%ebp),%eax - 158: 0f b6 00 movzbl (%eax),%eax - 15b: 3a 45 fc cmp -0x4(%ebp),%al - 15e: 75 05 jne 165 - return (char*)s; - 160: 8b 45 08 mov 0x8(%ebp),%eax - 163: eb 13 jmp 178 -} - -char* -strchr(const char *s, char c) -{ - for(; *s; s++) - 165: 83 45 08 01 addl $0x1,0x8(%ebp) - 169: 8b 45 08 mov 0x8(%ebp),%eax - 16c: 0f b6 00 movzbl (%eax),%eax - 16f: 84 c0 test %al,%al - 171: 75 e2 jne 155 - if(*s == c) - return (char*)s; - return 0; - 173: b8 00 00 00 00 mov $0x0,%eax -} - 178: c9 leave - 179: c3 ret - -0000017a : - -char* -gets(char *buf, int max) -{ - 17a: 55 push %ebp - 17b: 89 e5 mov %esp,%ebp - 17d: 83 ec 18 sub $0x18,%esp - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - 180: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 187: eb 44 jmp 1cd - cc = read(0, &c, 1); - 189: 83 ec 04 sub $0x4,%esp - 18c: 6a 01 push $0x1 - 18e: 8d 45 ef lea -0x11(%ebp),%eax - 191: 50 push %eax - 192: 6a 00 push $0x0 - 194: e8 46 01 00 00 call 2df - 199: 83 c4 10 add $0x10,%esp - 19c: 89 45 f0 mov %eax,-0x10(%ebp) - if(cc < 1) - 19f: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 1a3: 7f 02 jg 1a7 - break; - 1a5: eb 31 jmp 1d8 - buf[i++] = c; - 1a7: 8b 45 f4 mov -0xc(%ebp),%eax - 1aa: 8d 50 01 lea 0x1(%eax),%edx - 1ad: 89 55 f4 mov %edx,-0xc(%ebp) - 1b0: 89 c2 mov %eax,%edx - 1b2: 8b 45 08 mov 0x8(%ebp),%eax - 1b5: 01 c2 add %eax,%edx - 1b7: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 1bb: 88 02 mov %al,(%edx) - if(c == '\n' || c == '\r') - 1bd: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 1c1: 3c 0a cmp $0xa,%al - 1c3: 74 13 je 1d8 - 1c5: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 1c9: 3c 0d cmp $0xd,%al - 1cb: 74 0b je 1d8 -gets(char *buf, int max) -{ - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - 1cd: 8b 45 f4 mov -0xc(%ebp),%eax - 1d0: 83 c0 01 add $0x1,%eax - 1d3: 3b 45 0c cmp 0xc(%ebp),%eax - 1d6: 7c b1 jl 189 - break; - buf[i++] = c; - if(c == '\n' || c == '\r') - break; - } - buf[i] = '\0'; - 1d8: 8b 55 f4 mov -0xc(%ebp),%edx - 1db: 8b 45 08 mov 0x8(%ebp),%eax - 1de: 01 d0 add %edx,%eax - 1e0: c6 00 00 movb $0x0,(%eax) - return buf; - 1e3: 8b 45 08 mov 0x8(%ebp),%eax -} - 1e6: c9 leave - 1e7: c3 ret - -000001e8 : - -int -stat(char *n, struct stat *st) -{ - 1e8: 55 push %ebp - 1e9: 89 e5 mov %esp,%ebp - 1eb: 83 ec 18 sub $0x18,%esp - int fd; - int r; - - fd = open(n, O_RDONLY); - 1ee: 83 ec 08 sub $0x8,%esp - 1f1: 6a 00 push $0x0 - 1f3: ff 75 08 pushl 0x8(%ebp) - 1f6: e8 0c 01 00 00 call 307 - 1fb: 83 c4 10 add $0x10,%esp - 1fe: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd < 0) - 201: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 205: 79 07 jns 20e - return -1; - 207: b8 ff ff ff ff mov $0xffffffff,%eax - 20c: eb 25 jmp 233 - r = fstat(fd, st); - 20e: 83 ec 08 sub $0x8,%esp - 211: ff 75 0c pushl 0xc(%ebp) - 214: ff 75 f4 pushl -0xc(%ebp) - 217: e8 03 01 00 00 call 31f - 21c: 83 c4 10 add $0x10,%esp - 21f: 89 45 f0 mov %eax,-0x10(%ebp) - close(fd); - 222: 83 ec 0c sub $0xc,%esp - 225: ff 75 f4 pushl -0xc(%ebp) - 228: e8 c2 00 00 00 call 2ef - 22d: 83 c4 10 add $0x10,%esp - return r; - 230: 8b 45 f0 mov -0x10(%ebp),%eax -} - 233: c9 leave - 234: c3 ret - -00000235 : - -int -atoi(const char *s) -{ - 235: 55 push %ebp - 236: 89 e5 mov %esp,%ebp - 238: 83 ec 10 sub $0x10,%esp - int n; - - n = 0; - 23b: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - while('0' <= *s && *s <= '9') - 242: eb 25 jmp 269 - n = n*10 + *s++ - '0'; - 244: 8b 55 fc mov -0x4(%ebp),%edx - 247: 89 d0 mov %edx,%eax - 249: c1 e0 02 shl $0x2,%eax - 24c: 01 d0 add %edx,%eax - 24e: 01 c0 add %eax,%eax - 250: 89 c1 mov %eax,%ecx - 252: 8b 45 08 mov 0x8(%ebp),%eax - 255: 8d 50 01 lea 0x1(%eax),%edx - 258: 89 55 08 mov %edx,0x8(%ebp) - 25b: 0f b6 00 movzbl (%eax),%eax - 25e: 0f be c0 movsbl %al,%eax - 261: 01 c8 add %ecx,%eax - 263: 83 e8 30 sub $0x30,%eax - 266: 89 45 fc mov %eax,-0x4(%ebp) -atoi(const char *s) -{ - int n; - - n = 0; - while('0' <= *s && *s <= '9') - 269: 8b 45 08 mov 0x8(%ebp),%eax - 26c: 0f b6 00 movzbl (%eax),%eax - 26f: 3c 2f cmp $0x2f,%al - 271: 7e 0a jle 27d - 273: 8b 45 08 mov 0x8(%ebp),%eax - 276: 0f b6 00 movzbl (%eax),%eax - 279: 3c 39 cmp $0x39,%al - 27b: 7e c7 jle 244 - n = n*10 + *s++ - '0'; - return n; - 27d: 8b 45 fc mov -0x4(%ebp),%eax -} - 280: c9 leave - 281: c3 ret - -00000282 : - -void* -memmove(void *vdst, void *vsrc, int n) -{ - 282: 55 push %ebp - 283: 89 e5 mov %esp,%ebp - 285: 83 ec 10 sub $0x10,%esp - char *dst, *src; - - dst = vdst; - 288: 8b 45 08 mov 0x8(%ebp),%eax - 28b: 89 45 fc mov %eax,-0x4(%ebp) - src = vsrc; - 28e: 8b 45 0c mov 0xc(%ebp),%eax - 291: 89 45 f8 mov %eax,-0x8(%ebp) - while(n-- > 0) - 294: eb 17 jmp 2ad - *dst++ = *src++; - 296: 8b 45 fc mov -0x4(%ebp),%eax - 299: 8d 50 01 lea 0x1(%eax),%edx - 29c: 89 55 fc mov %edx,-0x4(%ebp) - 29f: 8b 55 f8 mov -0x8(%ebp),%edx - 2a2: 8d 4a 01 lea 0x1(%edx),%ecx - 2a5: 89 4d f8 mov %ecx,-0x8(%ebp) - 2a8: 0f b6 12 movzbl (%edx),%edx - 2ab: 88 10 mov %dl,(%eax) -{ - char *dst, *src; - - dst = vdst; - src = vsrc; - while(n-- > 0) - 2ad: 8b 45 10 mov 0x10(%ebp),%eax - 2b0: 8d 50 ff lea -0x1(%eax),%edx - 2b3: 89 55 10 mov %edx,0x10(%ebp) - 2b6: 85 c0 test %eax,%eax - 2b8: 7f dc jg 296 - *dst++ = *src++; - return vdst; - 2ba: 8b 45 08 mov 0x8(%ebp),%eax -} - 2bd: c9 leave - 2be: c3 ret - -000002bf : - name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 2bf: b8 01 00 00 00 mov $0x1,%eax - 2c4: cd 40 int $0x40 - 2c6: c3 ret - -000002c7 : -SYSCALL(exit) - 2c7: b8 02 00 00 00 mov $0x2,%eax - 2cc: cd 40 int $0x40 - 2ce: c3 ret - -000002cf : -SYSCALL(wait) - 2cf: b8 03 00 00 00 mov $0x3,%eax - 2d4: cd 40 int $0x40 - 2d6: c3 ret - -000002d7 : -SYSCALL(pipe) - 2d7: b8 04 00 00 00 mov $0x4,%eax - 2dc: cd 40 int $0x40 - 2de: c3 ret - -000002df : -SYSCALL(read) - 2df: b8 05 00 00 00 mov $0x5,%eax - 2e4: cd 40 int $0x40 - 2e6: c3 ret - -000002e7 : -SYSCALL(write) - 2e7: b8 10 00 00 00 mov $0x10,%eax - 2ec: cd 40 int $0x40 - 2ee: c3 ret - -000002ef : -SYSCALL(close) - 2ef: b8 15 00 00 00 mov $0x15,%eax - 2f4: cd 40 int $0x40 - 2f6: c3 ret - -000002f7 : -SYSCALL(kill) - 2f7: b8 06 00 00 00 mov $0x6,%eax - 2fc: cd 40 int $0x40 - 2fe: c3 ret - -000002ff : -SYSCALL(exec) - 2ff: b8 07 00 00 00 mov $0x7,%eax - 304: cd 40 int $0x40 - 306: c3 ret - -00000307 : -SYSCALL(open) - 307: b8 0f 00 00 00 mov $0xf,%eax - 30c: cd 40 int $0x40 - 30e: c3 ret - -0000030f : -SYSCALL(mknod) - 30f: b8 11 00 00 00 mov $0x11,%eax - 314: cd 40 int $0x40 - 316: c3 ret - -00000317 : -SYSCALL(unlink) - 317: b8 12 00 00 00 mov $0x12,%eax - 31c: cd 40 int $0x40 - 31e: c3 ret - -0000031f : -SYSCALL(fstat) - 31f: b8 08 00 00 00 mov $0x8,%eax - 324: cd 40 int $0x40 - 326: c3 ret - -00000327 : -SYSCALL(link) - 327: b8 13 00 00 00 mov $0x13,%eax - 32c: cd 40 int $0x40 - 32e: c3 ret - -0000032f : -SYSCALL(mkdir) - 32f: b8 14 00 00 00 mov $0x14,%eax - 334: cd 40 int $0x40 - 336: c3 ret - -00000337 : -SYSCALL(chdir) - 337: b8 09 00 00 00 mov $0x9,%eax - 33c: cd 40 int $0x40 - 33e: c3 ret - -0000033f : -SYSCALL(dup) - 33f: b8 0a 00 00 00 mov $0xa,%eax - 344: cd 40 int $0x40 - 346: c3 ret - -00000347 : -SYSCALL(getpid) - 347: b8 0b 00 00 00 mov $0xb,%eax - 34c: cd 40 int $0x40 - 34e: c3 ret - -0000034f : -SYSCALL(sbrk) - 34f: b8 0c 00 00 00 mov $0xc,%eax - 354: cd 40 int $0x40 - 356: c3 ret - -00000357 : -SYSCALL(sleep) - 357: b8 0d 00 00 00 mov $0xd,%eax - 35c: cd 40 int $0x40 - 35e: c3 ret - -0000035f : -SYSCALL(uptime) - 35f: b8 0e 00 00 00 mov $0xe,%eax - 364: cd 40 int $0x40 - 366: c3 ret - -00000367 : -#include "stat.h" -#include "user.h" - -static void -putc(int fd, char c) -{ - 367: 55 push %ebp - 368: 89 e5 mov %esp,%ebp - 36a: 83 ec 18 sub $0x18,%esp - 36d: 8b 45 0c mov 0xc(%ebp),%eax - 370: 88 45 f4 mov %al,-0xc(%ebp) - write(fd, &c, 1); - 373: 83 ec 04 sub $0x4,%esp - 376: 6a 01 push $0x1 - 378: 8d 45 f4 lea -0xc(%ebp),%eax - 37b: 50 push %eax - 37c: ff 75 08 pushl 0x8(%ebp) - 37f: e8 63 ff ff ff call 2e7 - 384: 83 c4 10 add $0x10,%esp -} - 387: c9 leave - 388: c3 ret - -00000389 : - -static void -printint(int fd, int xx, int base, int sgn) -{ - 389: 55 push %ebp - 38a: 89 e5 mov %esp,%ebp - 38c: 53 push %ebx - 38d: 83 ec 24 sub $0x24,%esp - static char digits[] = "0123456789ABCDEF"; - char buf[16]; - int i, neg; - uint x; - - neg = 0; - 390: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - if(sgn && xx < 0){ - 397: 83 7d 14 00 cmpl $0x0,0x14(%ebp) - 39b: 74 17 je 3b4 - 39d: 83 7d 0c 00 cmpl $0x0,0xc(%ebp) - 3a1: 79 11 jns 3b4 - neg = 1; - 3a3: c7 45 f0 01 00 00 00 movl $0x1,-0x10(%ebp) - x = -xx; - 3aa: 8b 45 0c mov 0xc(%ebp),%eax - 3ad: f7 d8 neg %eax - 3af: 89 45 ec mov %eax,-0x14(%ebp) - 3b2: eb 06 jmp 3ba - } else { - x = xx; - 3b4: 8b 45 0c mov 0xc(%ebp),%eax - 3b7: 89 45 ec mov %eax,-0x14(%ebp) - } - - i = 0; - 3ba: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - do{ - buf[i++] = digits[x % base]; - 3c1: 8b 4d f4 mov -0xc(%ebp),%ecx - 3c4: 8d 41 01 lea 0x1(%ecx),%eax - 3c7: 89 45 f4 mov %eax,-0xc(%ebp) - 3ca: 8b 5d 10 mov 0x10(%ebp),%ebx - 3cd: 8b 45 ec mov -0x14(%ebp),%eax - 3d0: ba 00 00 00 00 mov $0x0,%edx - 3d5: f7 f3 div %ebx - 3d7: 89 d0 mov %edx,%eax - 3d9: 0f b6 80 58 0a 00 00 movzbl 0xa58(%eax),%eax - 3e0: 88 44 0d dc mov %al,-0x24(%ebp,%ecx,1) - }while((x /= base) != 0); - 3e4: 8b 5d 10 mov 0x10(%ebp),%ebx - 3e7: 8b 45 ec mov -0x14(%ebp),%eax - 3ea: ba 00 00 00 00 mov $0x0,%edx - 3ef: f7 f3 div %ebx - 3f1: 89 45 ec mov %eax,-0x14(%ebp) - 3f4: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 3f8: 75 c7 jne 3c1 - if(neg) - 3fa: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 3fe: 74 0e je 40e - buf[i++] = '-'; - 400: 8b 45 f4 mov -0xc(%ebp),%eax - 403: 8d 50 01 lea 0x1(%eax),%edx - 406: 89 55 f4 mov %edx,-0xc(%ebp) - 409: c6 44 05 dc 2d movb $0x2d,-0x24(%ebp,%eax,1) - - while(--i >= 0) - 40e: eb 1d jmp 42d - putc(fd, buf[i]); - 410: 8d 55 dc lea -0x24(%ebp),%edx - 413: 8b 45 f4 mov -0xc(%ebp),%eax - 416: 01 d0 add %edx,%eax - 418: 0f b6 00 movzbl (%eax),%eax - 41b: 0f be c0 movsbl %al,%eax - 41e: 83 ec 08 sub $0x8,%esp - 421: 50 push %eax - 422: ff 75 08 pushl 0x8(%ebp) - 425: e8 3d ff ff ff call 367 - 42a: 83 c4 10 add $0x10,%esp - buf[i++] = digits[x % base]; - }while((x /= base) != 0); - if(neg) - buf[i++] = '-'; - - while(--i >= 0) - 42d: 83 6d f4 01 subl $0x1,-0xc(%ebp) - 431: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 435: 79 d9 jns 410 - putc(fd, buf[i]); -} - 437: 8b 5d fc mov -0x4(%ebp),%ebx - 43a: c9 leave - 43b: c3 ret - -0000043c : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void -printf(int fd, char *fmt, ...) -{ - 43c: 55 push %ebp - 43d: 89 e5 mov %esp,%ebp - 43f: 83 ec 28 sub $0x28,%esp - char *s; - int c, i, state; - uint *ap; - - state = 0; - 442: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - ap = (uint*)(void*)&fmt + 1; - 449: 8d 45 0c lea 0xc(%ebp),%eax - 44c: 83 c0 04 add $0x4,%eax - 44f: 89 45 e8 mov %eax,-0x18(%ebp) - for(i = 0; fmt[i]; i++){ - 452: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - 459: e9 59 01 00 00 jmp 5b7 - c = fmt[i] & 0xff; - 45e: 8b 55 0c mov 0xc(%ebp),%edx - 461: 8b 45 f0 mov -0x10(%ebp),%eax - 464: 01 d0 add %edx,%eax - 466: 0f b6 00 movzbl (%eax),%eax - 469: 0f be c0 movsbl %al,%eax - 46c: 25 ff 00 00 00 and $0xff,%eax - 471: 89 45 e4 mov %eax,-0x1c(%ebp) - if(state == 0){ - 474: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 478: 75 2c jne 4a6 - if(c == '%'){ - 47a: 83 7d e4 25 cmpl $0x25,-0x1c(%ebp) - 47e: 75 0c jne 48c - state = '%'; - 480: c7 45 ec 25 00 00 00 movl $0x25,-0x14(%ebp) - 487: e9 27 01 00 00 jmp 5b3 - } else { - putc(fd, c); - 48c: 8b 45 e4 mov -0x1c(%ebp),%eax - 48f: 0f be c0 movsbl %al,%eax - 492: 83 ec 08 sub $0x8,%esp - 495: 50 push %eax - 496: ff 75 08 pushl 0x8(%ebp) - 499: e8 c9 fe ff ff call 367 - 49e: 83 c4 10 add $0x10,%esp - 4a1: e9 0d 01 00 00 jmp 5b3 - } - } else if(state == '%'){ - 4a6: 83 7d ec 25 cmpl $0x25,-0x14(%ebp) - 4aa: 0f 85 03 01 00 00 jne 5b3 - if(c == 'd'){ - 4b0: 83 7d e4 64 cmpl $0x64,-0x1c(%ebp) - 4b4: 75 1e jne 4d4 - printint(fd, *ap, 10, 1); - 4b6: 8b 45 e8 mov -0x18(%ebp),%eax - 4b9: 8b 00 mov (%eax),%eax - 4bb: 6a 01 push $0x1 - 4bd: 6a 0a push $0xa - 4bf: 50 push %eax - 4c0: ff 75 08 pushl 0x8(%ebp) - 4c3: e8 c1 fe ff ff call 389 - 4c8: 83 c4 10 add $0x10,%esp - ap++; - 4cb: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 4cf: e9 d8 00 00 00 jmp 5ac - } else if(c == 'x' || c == 'p'){ - 4d4: 83 7d e4 78 cmpl $0x78,-0x1c(%ebp) - 4d8: 74 06 je 4e0 - 4da: 83 7d e4 70 cmpl $0x70,-0x1c(%ebp) - 4de: 75 1e jne 4fe - printint(fd, *ap, 16, 0); - 4e0: 8b 45 e8 mov -0x18(%ebp),%eax - 4e3: 8b 00 mov (%eax),%eax - 4e5: 6a 00 push $0x0 - 4e7: 6a 10 push $0x10 - 4e9: 50 push %eax - 4ea: ff 75 08 pushl 0x8(%ebp) - 4ed: e8 97 fe ff ff call 389 - 4f2: 83 c4 10 add $0x10,%esp - ap++; - 4f5: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 4f9: e9 ae 00 00 00 jmp 5ac - } else if(c == 's'){ - 4fe: 83 7d e4 73 cmpl $0x73,-0x1c(%ebp) - 502: 75 43 jne 547 - s = (char*)*ap; - 504: 8b 45 e8 mov -0x18(%ebp),%eax - 507: 8b 00 mov (%eax),%eax - 509: 89 45 f4 mov %eax,-0xc(%ebp) - ap++; - 50c: 83 45 e8 04 addl $0x4,-0x18(%ebp) - if(s == 0) - 510: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 514: 75 07 jne 51d - s = "(null)"; - 516: c7 45 f4 04 08 00 00 movl $0x804,-0xc(%ebp) - while(*s != 0){ - 51d: eb 1c jmp 53b - putc(fd, *s); - 51f: 8b 45 f4 mov -0xc(%ebp),%eax - 522: 0f b6 00 movzbl (%eax),%eax - 525: 0f be c0 movsbl %al,%eax - 528: 83 ec 08 sub $0x8,%esp - 52b: 50 push %eax - 52c: ff 75 08 pushl 0x8(%ebp) - 52f: e8 33 fe ff ff call 367 - 534: 83 c4 10 add $0x10,%esp - s++; - 537: 83 45 f4 01 addl $0x1,-0xc(%ebp) - } else if(c == 's'){ - s = (char*)*ap; - ap++; - if(s == 0) - s = "(null)"; - while(*s != 0){ - 53b: 8b 45 f4 mov -0xc(%ebp),%eax - 53e: 0f b6 00 movzbl (%eax),%eax - 541: 84 c0 test %al,%al - 543: 75 da jne 51f - 545: eb 65 jmp 5ac - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 547: 83 7d e4 63 cmpl $0x63,-0x1c(%ebp) - 54b: 75 1d jne 56a - putc(fd, *ap); - 54d: 8b 45 e8 mov -0x18(%ebp),%eax - 550: 8b 00 mov (%eax),%eax - 552: 0f be c0 movsbl %al,%eax - 555: 83 ec 08 sub $0x8,%esp - 558: 50 push %eax - 559: ff 75 08 pushl 0x8(%ebp) - 55c: e8 06 fe ff ff call 367 - 561: 83 c4 10 add $0x10,%esp - ap++; - 564: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 568: eb 42 jmp 5ac - } else if(c == '%'){ - 56a: 83 7d e4 25 cmpl $0x25,-0x1c(%ebp) - 56e: 75 17 jne 587 - putc(fd, c); - 570: 8b 45 e4 mov -0x1c(%ebp),%eax - 573: 0f be c0 movsbl %al,%eax - 576: 83 ec 08 sub $0x8,%esp - 579: 50 push %eax - 57a: ff 75 08 pushl 0x8(%ebp) - 57d: e8 e5 fd ff ff call 367 - 582: 83 c4 10 add $0x10,%esp - 585: eb 25 jmp 5ac - } else { - // Unknown % sequence. Print it to draw attention. - putc(fd, '%'); - 587: 83 ec 08 sub $0x8,%esp - 58a: 6a 25 push $0x25 - 58c: ff 75 08 pushl 0x8(%ebp) - 58f: e8 d3 fd ff ff call 367 - 594: 83 c4 10 add $0x10,%esp - putc(fd, c); - 597: 8b 45 e4 mov -0x1c(%ebp),%eax - 59a: 0f be c0 movsbl %al,%eax - 59d: 83 ec 08 sub $0x8,%esp - 5a0: 50 push %eax - 5a1: ff 75 08 pushl 0x8(%ebp) - 5a4: e8 be fd ff ff call 367 - 5a9: 83 c4 10 add $0x10,%esp - } - state = 0; - 5ac: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for(i = 0; fmt[i]; i++){ - 5b3: 83 45 f0 01 addl $0x1,-0x10(%ebp) - 5b7: 8b 55 0c mov 0xc(%ebp),%edx - 5ba: 8b 45 f0 mov -0x10(%ebp),%eax - 5bd: 01 d0 add %edx,%eax - 5bf: 0f b6 00 movzbl (%eax),%eax - 5c2: 84 c0 test %al,%al - 5c4: 0f 85 94 fe ff ff jne 45e - putc(fd, c); - } - state = 0; - } - } -} - 5ca: c9 leave - 5cb: c3 ret - -000005cc : -static Header base; -static Header *freep; - -void -free(void *ap) -{ - 5cc: 55 push %ebp - 5cd: 89 e5 mov %esp,%ebp - 5cf: 83 ec 10 sub $0x10,%esp - Header *bp, *p; - - bp = (Header*)ap - 1; - 5d2: 8b 45 08 mov 0x8(%ebp),%eax - 5d5: 83 e8 08 sub $0x8,%eax - 5d8: 89 45 f8 mov %eax,-0x8(%ebp) - for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 5db: a1 74 0a 00 00 mov 0xa74,%eax - 5e0: 89 45 fc mov %eax,-0x4(%ebp) - 5e3: eb 24 jmp 609 - if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 5e5: 8b 45 fc mov -0x4(%ebp),%eax - 5e8: 8b 00 mov (%eax),%eax - 5ea: 3b 45 fc cmp -0x4(%ebp),%eax - 5ed: 77 12 ja 601 - 5ef: 8b 45 f8 mov -0x8(%ebp),%eax - 5f2: 3b 45 fc cmp -0x4(%ebp),%eax - 5f5: 77 24 ja 61b - 5f7: 8b 45 fc mov -0x4(%ebp),%eax - 5fa: 8b 00 mov (%eax),%eax - 5fc: 3b 45 f8 cmp -0x8(%ebp),%eax - 5ff: 77 1a ja 61b -free(void *ap) -{ - Header *bp, *p; - - bp = (Header*)ap - 1; - for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 601: 8b 45 fc mov -0x4(%ebp),%eax - 604: 8b 00 mov (%eax),%eax - 606: 89 45 fc mov %eax,-0x4(%ebp) - 609: 8b 45 f8 mov -0x8(%ebp),%eax - 60c: 3b 45 fc cmp -0x4(%ebp),%eax - 60f: 76 d4 jbe 5e5 - 611: 8b 45 fc mov -0x4(%ebp),%eax - 614: 8b 00 mov (%eax),%eax - 616: 3b 45 f8 cmp -0x8(%ebp),%eax - 619: 76 ca jbe 5e5 - if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - break; - if(bp + bp->s.size == p->s.ptr){ - 61b: 8b 45 f8 mov -0x8(%ebp),%eax - 61e: 8b 40 04 mov 0x4(%eax),%eax - 621: 8d 14 c5 00 00 00 00 lea 0x0(,%eax,8),%edx - 628: 8b 45 f8 mov -0x8(%ebp),%eax - 62b: 01 c2 add %eax,%edx - 62d: 8b 45 fc mov -0x4(%ebp),%eax - 630: 8b 00 mov (%eax),%eax - 632: 39 c2 cmp %eax,%edx - 634: 75 24 jne 65a - bp->s.size += p->s.ptr->s.size; - 636: 8b 45 f8 mov -0x8(%ebp),%eax - 639: 8b 50 04 mov 0x4(%eax),%edx - 63c: 8b 45 fc mov -0x4(%ebp),%eax - 63f: 8b 00 mov (%eax),%eax - 641: 8b 40 04 mov 0x4(%eax),%eax - 644: 01 c2 add %eax,%edx - 646: 8b 45 f8 mov -0x8(%ebp),%eax - 649: 89 50 04 mov %edx,0x4(%eax) - bp->s.ptr = p->s.ptr->s.ptr; - 64c: 8b 45 fc mov -0x4(%ebp),%eax - 64f: 8b 00 mov (%eax),%eax - 651: 8b 10 mov (%eax),%edx - 653: 8b 45 f8 mov -0x8(%ebp),%eax - 656: 89 10 mov %edx,(%eax) - 658: eb 0a jmp 664 - } else - bp->s.ptr = p->s.ptr; - 65a: 8b 45 fc mov -0x4(%ebp),%eax - 65d: 8b 10 mov (%eax),%edx - 65f: 8b 45 f8 mov -0x8(%ebp),%eax - 662: 89 10 mov %edx,(%eax) - if(p + p->s.size == bp){ - 664: 8b 45 fc mov -0x4(%ebp),%eax - 667: 8b 40 04 mov 0x4(%eax),%eax - 66a: 8d 14 c5 00 00 00 00 lea 0x0(,%eax,8),%edx - 671: 8b 45 fc mov -0x4(%ebp),%eax - 674: 01 d0 add %edx,%eax - 676: 3b 45 f8 cmp -0x8(%ebp),%eax - 679: 75 20 jne 69b - p->s.size += bp->s.size; - 67b: 8b 45 fc mov -0x4(%ebp),%eax - 67e: 8b 50 04 mov 0x4(%eax),%edx - 681: 8b 45 f8 mov -0x8(%ebp),%eax - 684: 8b 40 04 mov 0x4(%eax),%eax - 687: 01 c2 add %eax,%edx - 689: 8b 45 fc mov -0x4(%ebp),%eax - 68c: 89 50 04 mov %edx,0x4(%eax) - p->s.ptr = bp->s.ptr; - 68f: 8b 45 f8 mov -0x8(%ebp),%eax - 692: 8b 10 mov (%eax),%edx - 694: 8b 45 fc mov -0x4(%ebp),%eax - 697: 89 10 mov %edx,(%eax) - 699: eb 08 jmp 6a3 - } else - p->s.ptr = bp; - 69b: 8b 45 fc mov -0x4(%ebp),%eax - 69e: 8b 55 f8 mov -0x8(%ebp),%edx - 6a1: 89 10 mov %edx,(%eax) - freep = p; - 6a3: 8b 45 fc mov -0x4(%ebp),%eax - 6a6: a3 74 0a 00 00 mov %eax,0xa74 -} - 6ab: c9 leave - 6ac: c3 ret - -000006ad : - -static Header* -morecore(uint nu) -{ - 6ad: 55 push %ebp - 6ae: 89 e5 mov %esp,%ebp - 6b0: 83 ec 18 sub $0x18,%esp - char *p; - Header *hp; - - if(nu < 4096) - 6b3: 81 7d 08 ff 0f 00 00 cmpl $0xfff,0x8(%ebp) - 6ba: 77 07 ja 6c3 - nu = 4096; - 6bc: c7 45 08 00 10 00 00 movl $0x1000,0x8(%ebp) - p = sbrk(nu * sizeof(Header)); - 6c3: 8b 45 08 mov 0x8(%ebp),%eax - 6c6: c1 e0 03 shl $0x3,%eax - 6c9: 83 ec 0c sub $0xc,%esp - 6cc: 50 push %eax - 6cd: e8 7d fc ff ff call 34f - 6d2: 83 c4 10 add $0x10,%esp - 6d5: 89 45 f4 mov %eax,-0xc(%ebp) - if(p == (char*)-1) - 6d8: 83 7d f4 ff cmpl $0xffffffff,-0xc(%ebp) - 6dc: 75 07 jne 6e5 - return 0; - 6de: b8 00 00 00 00 mov $0x0,%eax - 6e3: eb 26 jmp 70b - hp = (Header*)p; - 6e5: 8b 45 f4 mov -0xc(%ebp),%eax - 6e8: 89 45 f0 mov %eax,-0x10(%ebp) - hp->s.size = nu; - 6eb: 8b 45 f0 mov -0x10(%ebp),%eax - 6ee: 8b 55 08 mov 0x8(%ebp),%edx - 6f1: 89 50 04 mov %edx,0x4(%eax) - free((void*)(hp + 1)); - 6f4: 8b 45 f0 mov -0x10(%ebp),%eax - 6f7: 83 c0 08 add $0x8,%eax - 6fa: 83 ec 0c sub $0xc,%esp - 6fd: 50 push %eax - 6fe: e8 c9 fe ff ff call 5cc - 703: 83 c4 10 add $0x10,%esp - return freep; - 706: a1 74 0a 00 00 mov 0xa74,%eax -} - 70b: c9 leave - 70c: c3 ret - -0000070d : - -void* -malloc(uint nbytes) -{ - 70d: 55 push %ebp - 70e: 89 e5 mov %esp,%ebp - 710: 83 ec 18 sub $0x18,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 713: 8b 45 08 mov 0x8(%ebp),%eax - 716: 83 c0 07 add $0x7,%eax - 719: c1 e8 03 shr $0x3,%eax - 71c: 83 c0 01 add $0x1,%eax - 71f: 89 45 ec mov %eax,-0x14(%ebp) - if((prevp = freep) == 0){ - 722: a1 74 0a 00 00 mov 0xa74,%eax - 727: 89 45 f0 mov %eax,-0x10(%ebp) - 72a: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 72e: 75 23 jne 753 - base.s.ptr = freep = prevp = &base; - 730: c7 45 f0 6c 0a 00 00 movl $0xa6c,-0x10(%ebp) - 737: 8b 45 f0 mov -0x10(%ebp),%eax - 73a: a3 74 0a 00 00 mov %eax,0xa74 - 73f: a1 74 0a 00 00 mov 0xa74,%eax - 744: a3 6c 0a 00 00 mov %eax,0xa6c - base.s.size = 0; - 749: c7 05 70 0a 00 00 00 movl $0x0,0xa70 - 750: 00 00 00 - } - for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 753: 8b 45 f0 mov -0x10(%ebp),%eax - 756: 8b 00 mov (%eax),%eax - 758: 89 45 f4 mov %eax,-0xc(%ebp) - if(p->s.size >= nunits){ - 75b: 8b 45 f4 mov -0xc(%ebp),%eax - 75e: 8b 40 04 mov 0x4(%eax),%eax - 761: 3b 45 ec cmp -0x14(%ebp),%eax - 764: 72 4d jb 7b3 - if(p->s.size == nunits) - 766: 8b 45 f4 mov -0xc(%ebp),%eax - 769: 8b 40 04 mov 0x4(%eax),%eax - 76c: 3b 45 ec cmp -0x14(%ebp),%eax - 76f: 75 0c jne 77d - prevp->s.ptr = p->s.ptr; - 771: 8b 45 f4 mov -0xc(%ebp),%eax - 774: 8b 10 mov (%eax),%edx - 776: 8b 45 f0 mov -0x10(%ebp),%eax - 779: 89 10 mov %edx,(%eax) - 77b: eb 26 jmp 7a3 - else { - p->s.size -= nunits; - 77d: 8b 45 f4 mov -0xc(%ebp),%eax - 780: 8b 40 04 mov 0x4(%eax),%eax - 783: 2b 45 ec sub -0x14(%ebp),%eax - 786: 89 c2 mov %eax,%edx - 788: 8b 45 f4 mov -0xc(%ebp),%eax - 78b: 89 50 04 mov %edx,0x4(%eax) - p += p->s.size; - 78e: 8b 45 f4 mov -0xc(%ebp),%eax - 791: 8b 40 04 mov 0x4(%eax),%eax - 794: c1 e0 03 shl $0x3,%eax - 797: 01 45 f4 add %eax,-0xc(%ebp) - p->s.size = nunits; - 79a: 8b 45 f4 mov -0xc(%ebp),%eax - 79d: 8b 55 ec mov -0x14(%ebp),%edx - 7a0: 89 50 04 mov %edx,0x4(%eax) - } - freep = prevp; - 7a3: 8b 45 f0 mov -0x10(%ebp),%eax - 7a6: a3 74 0a 00 00 mov %eax,0xa74 - return (void*)(p + 1); - 7ab: 8b 45 f4 mov -0xc(%ebp),%eax - 7ae: 83 c0 08 add $0x8,%eax - 7b1: eb 3b jmp 7ee - } - if(p == freep) - 7b3: a1 74 0a 00 00 mov 0xa74,%eax - 7b8: 39 45 f4 cmp %eax,-0xc(%ebp) - 7bb: 75 1e jne 7db - if((p = morecore(nunits)) == 0) - 7bd: 83 ec 0c sub $0xc,%esp - 7c0: ff 75 ec pushl -0x14(%ebp) - 7c3: e8 e5 fe ff ff call 6ad - 7c8: 83 c4 10 add $0x10,%esp - 7cb: 89 45 f4 mov %eax,-0xc(%ebp) - 7ce: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 7d2: 75 07 jne 7db - return 0; - 7d4: b8 00 00 00 00 mov $0x0,%eax - 7d9: eb 13 jmp 7ee - nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - if((prevp = freep) == 0){ - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 7db: 8b 45 f4 mov -0xc(%ebp),%eax - 7de: 89 45 f0 mov %eax,-0x10(%ebp) - 7e1: 8b 45 f4 mov -0xc(%ebp),%eax - 7e4: 8b 00 mov (%eax),%eax - 7e6: 89 45 f4 mov %eax,-0xc(%ebp) - return (void*)(p + 1); - } - if(p == freep) - if((p = morecore(nunits)) == 0) - return 0; - } - 7e9: e9 6d ff ff ff jmp 75b -} - 7ee: c9 leave - 7ef: c3 ret diff --git a/xv6-public/kill.d b/xv6-public/kill.d deleted file mode 100755 index 078f4f8..0000000 --- a/xv6-public/kill.d +++ /dev/null @@ -1 +0,0 @@ -kill.o: kill.c /usr/include/stdc-predef.h types.h stat.h user.h diff --git a/xv6-public/kill.o b/xv6-public/kill.o deleted file mode 100755 index d39f1db0ee63de0f483dd05677d80da05ac22ce0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3064 zcma)8U2GIp6ux(6ce`}A{|K0hF0t66%oL%i{1ib8mJ$LeVnk!ebUWRS?9P_i*;)+= ziPc0xjPj&DnHXbC^wIcW;u9un&6-|g6*~BxVU`VVHed5hS1DVC2uP>jzb^P2f$DUkV>OS|~;x2i1 z?c!2?mT@myS8gpYFE4)8t?=vpH(2tTbAJDgH&?&Ti1XtadHK9pTq+(lp|{D%K=3a6 z%q8V+HoS_zvvew`R!eiiwClRW1Ozs zQ?xsG7IqZ|i<5l}-kW>p@uKX*II<$~O!isrLgYq-oo66a)N4EUsuVr)VFc#8Pc*xRif)c7UsA3L7E? zPpw;KRI}knu6jZ+NmXuLe$R>ghUaij?F(eqrXGOI9n8&JSyX9;ji3_x(&_hGC`>hjY8-@#(uk2CJ6<*L8bOG}nRzdA;>atX`nT$M4X(K6 zhjAlGuh)XunTfob@66TFh98--DB#RR_1G`R^~j9Liz;Q&n5{=~snsQ$pNqg}1l;q& zUkG9yL)UP#5e--CWv@D1uFb{Uwrw3=m>+fKnp4%FEYyg^#Q6Bm(h!EUDVY(sV>KB_ zzVeiiXY#VYn900>EgOK18&2Xu5c`T!Omt_hrr6hI<1lsGR`U$(ZsX-z>`ejVD8X4H zMSj(d{e@V#(_ZWecdF44Zd6YcI;Z`qX60lM&eRd2WN&IJ^5>0)evr@#^dc{;_^i<~ zRfEts(YUQ}%k>)PF5D0^bR;g6k}?=^JM8H`ZlaH$U}H_r!1QqdvdMucu0r{df+pj82D*{yx`>5N>llLZ`6-$9 zK{Q^XpvlB}(9`Stp&&#zY+N6f+FIWNWRn9?OrYMg6f_xM3_V@%3hHt0tcUk-tKMsn znZtRL-bcLyrU-P3yx!7i;(o=zdSNqU;@*WJl`j6|U{hp#pTb7j?C&ka?M=m*w2xs+ z_i;VdM-P0AV_%fbnSvt>$=PP92HYwKQ$yp&=?R;9tpMwvtOkNdLWe=;qU)zH|CJpgsZWTd2N@Vm)#s zMlk@iP-HU^8-9d{L-;%qe>y^K=kqM_-;n2A;=J%|5V^-hu1VtHsk*=o)G?|d?H|@S zs&Ti*gBp($k#|Dl3q)*1Mf;l?&ujbJM8vhvB z{f=~n`J>02`}^MK`_4J{+_U20*j=B~S}WVM3aMF6sXJPI%_ak%R&A<9b(b#{x!ClXSB%oDbbFOpeP6kI>PT!7ipho(-BbT5+Quh-uN<4I z#HI}YBqPIq>}QUC8BS%#NQOrv74*p3ndQ*CFd#G<4Yukbrm&MZESdMba*nf zw>f1T&(Z9&zFB5t>H^v8g;lBJWLM2)7h5*7rdns|)G1m{eQ2sksY9MhjZ$*immD)0 z)L=DKMXgkgN?``BWKa!>l2Wf?c}HPgy(AK|kbcfC z=E$mF^VOMNsmFaiHU&3zrE_lJ@A`JwRAbfpgJ)~I{OE^2Ci-w}N)JCcr5}3Hl#k7g zRqsM=Yd*#pWlkci;ZrV*jD1E`Uo%tdma&Jua%0A+J{uHtxf!?m{W%gZGp{-_M^c~h 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 G6#PFfyM&$q diff --git a/xv6-public/ln.asm b/xv6-public/ln.asm deleted file mode 100755 index 6ac2306..0000000 --- a/xv6-public/ln.asm +++ /dev/null @@ -1,1188 +0,0 @@ - -_ln: file format elf32-i386 - - -Disassembly of section .text: - -00000000
: -#include "stat.h" -#include "user.h" - -int -main(int argc, char *argv[]) -{ - 0: 8d 4c 24 04 lea 0x4(%esp),%ecx - 4: 83 e4 f0 and $0xfffffff0,%esp - 7: ff 71 fc pushl -0x4(%ecx) - a: 55 push %ebp - b: 89 e5 mov %esp,%ebp - d: 53 push %ebx - e: 51 push %ecx - f: 89 cb mov %ecx,%ebx - if(argc != 3){ - 11: 83 3b 03 cmpl $0x3,(%ebx) - 14: 74 17 je 2d - printf(2, "Usage: ln old new\n"); - 16: 83 ec 08 sub $0x8,%esp - 19: 68 f2 07 00 00 push $0x7f2 - 1e: 6a 02 push $0x2 - 20: e8 19 04 00 00 call 43e - 25: 83 c4 10 add $0x10,%esp - exit(); - 28: e8 9c 02 00 00 call 2c9 - } - if(link(argv[1], argv[2]) < 0) - 2d: 8b 43 04 mov 0x4(%ebx),%eax - 30: 83 c0 08 add $0x8,%eax - 33: 8b 10 mov (%eax),%edx - 35: 8b 43 04 mov 0x4(%ebx),%eax - 38: 83 c0 04 add $0x4,%eax - 3b: 8b 00 mov (%eax),%eax - 3d: 83 ec 08 sub $0x8,%esp - 40: 52 push %edx - 41: 50 push %eax - 42: e8 e2 02 00 00 call 329 - 47: 83 c4 10 add $0x10,%esp - 4a: 85 c0 test %eax,%eax - 4c: 79 21 jns 6f - printf(2, "link %s %s: failed\n", argv[1], argv[2]); - 4e: 8b 43 04 mov 0x4(%ebx),%eax - 51: 83 c0 08 add $0x8,%eax - 54: 8b 10 mov (%eax),%edx - 56: 8b 43 04 mov 0x4(%ebx),%eax - 59: 83 c0 04 add $0x4,%eax - 5c: 8b 00 mov (%eax),%eax - 5e: 52 push %edx - 5f: 50 push %eax - 60: 68 05 08 00 00 push $0x805 - 65: 6a 02 push $0x2 - 67: e8 d2 03 00 00 call 43e - 6c: 83 c4 10 add $0x10,%esp - exit(); - 6f: e8 55 02 00 00 call 2c9 - -00000074 : - "cc"); -} - -static inline void -stosb(void *addr, int data, int cnt) -{ - 74: 55 push %ebp - 75: 89 e5 mov %esp,%ebp - 77: 57 push %edi - 78: 53 push %ebx - asm volatile("cld; rep stosb" : - 79: 8b 4d 08 mov 0x8(%ebp),%ecx - 7c: 8b 55 10 mov 0x10(%ebp),%edx - 7f: 8b 45 0c mov 0xc(%ebp),%eax - 82: 89 cb mov %ecx,%ebx - 84: 89 df mov %ebx,%edi - 86: 89 d1 mov %edx,%ecx - 88: fc cld - 89: f3 aa rep stos %al,%es:(%edi) - 8b: 89 ca mov %ecx,%edx - 8d: 89 fb mov %edi,%ebx - 8f: 89 5d 08 mov %ebx,0x8(%ebp) - 92: 89 55 10 mov %edx,0x10(%ebp) - "=D" (addr), "=c" (cnt) : - "0" (addr), "1" (cnt), "a" (data) : - "memory", "cc"); -} - 95: 5b pop %ebx - 96: 5f pop %edi - 97: 5d pop %ebp - 98: c3 ret - -00000099 : -#include "user.h" -#include "x86.h" - -char* -strcpy(char *s, char *t) -{ - 99: 55 push %ebp - 9a: 89 e5 mov %esp,%ebp - 9c: 83 ec 10 sub $0x10,%esp - char *os; - - os = s; - 9f: 8b 45 08 mov 0x8(%ebp),%eax - a2: 89 45 fc mov %eax,-0x4(%ebp) - while((*s++ = *t++) != 0) - a5: 90 nop - a6: 8b 45 08 mov 0x8(%ebp),%eax - a9: 8d 50 01 lea 0x1(%eax),%edx - ac: 89 55 08 mov %edx,0x8(%ebp) - af: 8b 55 0c mov 0xc(%ebp),%edx - b2: 8d 4a 01 lea 0x1(%edx),%ecx - b5: 89 4d 0c mov %ecx,0xc(%ebp) - b8: 0f b6 12 movzbl (%edx),%edx - bb: 88 10 mov %dl,(%eax) - bd: 0f b6 00 movzbl (%eax),%eax - c0: 84 c0 test %al,%al - c2: 75 e2 jne a6 - ; - return os; - c4: 8b 45 fc mov -0x4(%ebp),%eax -} - c7: c9 leave - c8: c3 ret - -000000c9 : - -int -strcmp(const char *p, const char *q) -{ - c9: 55 push %ebp - ca: 89 e5 mov %esp,%ebp - while(*p && *p == *q) - cc: eb 08 jmp d6 - p++, q++; - ce: 83 45 08 01 addl $0x1,0x8(%ebp) - d2: 83 45 0c 01 addl $0x1,0xc(%ebp) -} - -int -strcmp(const char *p, const char *q) -{ - while(*p && *p == *q) - d6: 8b 45 08 mov 0x8(%ebp),%eax - d9: 0f b6 00 movzbl (%eax),%eax - dc: 84 c0 test %al,%al - de: 74 10 je f0 - e0: 8b 45 08 mov 0x8(%ebp),%eax - e3: 0f b6 10 movzbl (%eax),%edx - e6: 8b 45 0c mov 0xc(%ebp),%eax - e9: 0f b6 00 movzbl (%eax),%eax - ec: 38 c2 cmp %al,%dl - ee: 74 de je ce - p++, q++; - return (uchar)*p - (uchar)*q; - f0: 8b 45 08 mov 0x8(%ebp),%eax - f3: 0f b6 00 movzbl (%eax),%eax - f6: 0f b6 d0 movzbl %al,%edx - f9: 8b 45 0c mov 0xc(%ebp),%eax - fc: 0f b6 00 movzbl (%eax),%eax - ff: 0f b6 c0 movzbl %al,%eax - 102: 29 c2 sub %eax,%edx - 104: 89 d0 mov %edx,%eax -} - 106: 5d pop %ebp - 107: c3 ret - -00000108 : - -uint -strlen(char *s) -{ - 108: 55 push %ebp - 109: 89 e5 mov %esp,%ebp - 10b: 83 ec 10 sub $0x10,%esp - int n; - - for(n = 0; s[n]; n++) - 10e: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - 115: eb 04 jmp 11b - 117: 83 45 fc 01 addl $0x1,-0x4(%ebp) - 11b: 8b 55 fc mov -0x4(%ebp),%edx - 11e: 8b 45 08 mov 0x8(%ebp),%eax - 121: 01 d0 add %edx,%eax - 123: 0f b6 00 movzbl (%eax),%eax - 126: 84 c0 test %al,%al - 128: 75 ed jne 117 - ; - return n; - 12a: 8b 45 fc mov -0x4(%ebp),%eax -} - 12d: c9 leave - 12e: c3 ret - -0000012f : - -void* -memset(void *dst, int c, uint n) -{ - 12f: 55 push %ebp - 130: 89 e5 mov %esp,%ebp - stosb(dst, c, n); - 132: 8b 45 10 mov 0x10(%ebp),%eax - 135: 50 push %eax - 136: ff 75 0c pushl 0xc(%ebp) - 139: ff 75 08 pushl 0x8(%ebp) - 13c: e8 33 ff ff ff call 74 - 141: 83 c4 0c add $0xc,%esp - return dst; - 144: 8b 45 08 mov 0x8(%ebp),%eax -} - 147: c9 leave - 148: c3 ret - -00000149 : - -char* -strchr(const char *s, char c) -{ - 149: 55 push %ebp - 14a: 89 e5 mov %esp,%ebp - 14c: 83 ec 04 sub $0x4,%esp - 14f: 8b 45 0c mov 0xc(%ebp),%eax - 152: 88 45 fc mov %al,-0x4(%ebp) - for(; *s; s++) - 155: eb 14 jmp 16b - if(*s == c) - 157: 8b 45 08 mov 0x8(%ebp),%eax - 15a: 0f b6 00 movzbl (%eax),%eax - 15d: 3a 45 fc cmp -0x4(%ebp),%al - 160: 75 05 jne 167 - return (char*)s; - 162: 8b 45 08 mov 0x8(%ebp),%eax - 165: eb 13 jmp 17a -} - -char* -strchr(const char *s, char c) -{ - for(; *s; s++) - 167: 83 45 08 01 addl $0x1,0x8(%ebp) - 16b: 8b 45 08 mov 0x8(%ebp),%eax - 16e: 0f b6 00 movzbl (%eax),%eax - 171: 84 c0 test %al,%al - 173: 75 e2 jne 157 - if(*s == c) - return (char*)s; - return 0; - 175: b8 00 00 00 00 mov $0x0,%eax -} - 17a: c9 leave - 17b: c3 ret - -0000017c : - -char* -gets(char *buf, int max) -{ - 17c: 55 push %ebp - 17d: 89 e5 mov %esp,%ebp - 17f: 83 ec 18 sub $0x18,%esp - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - 182: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 189: eb 44 jmp 1cf - cc = read(0, &c, 1); - 18b: 83 ec 04 sub $0x4,%esp - 18e: 6a 01 push $0x1 - 190: 8d 45 ef lea -0x11(%ebp),%eax - 193: 50 push %eax - 194: 6a 00 push $0x0 - 196: e8 46 01 00 00 call 2e1 - 19b: 83 c4 10 add $0x10,%esp - 19e: 89 45 f0 mov %eax,-0x10(%ebp) - if(cc < 1) - 1a1: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 1a5: 7f 02 jg 1a9 - break; - 1a7: eb 31 jmp 1da - buf[i++] = c; - 1a9: 8b 45 f4 mov -0xc(%ebp),%eax - 1ac: 8d 50 01 lea 0x1(%eax),%edx - 1af: 89 55 f4 mov %edx,-0xc(%ebp) - 1b2: 89 c2 mov %eax,%edx - 1b4: 8b 45 08 mov 0x8(%ebp),%eax - 1b7: 01 c2 add %eax,%edx - 1b9: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 1bd: 88 02 mov %al,(%edx) - if(c == '\n' || c == '\r') - 1bf: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 1c3: 3c 0a cmp $0xa,%al - 1c5: 74 13 je 1da - 1c7: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 1cb: 3c 0d cmp $0xd,%al - 1cd: 74 0b je 1da -gets(char *buf, int max) -{ - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - 1cf: 8b 45 f4 mov -0xc(%ebp),%eax - 1d2: 83 c0 01 add $0x1,%eax - 1d5: 3b 45 0c cmp 0xc(%ebp),%eax - 1d8: 7c b1 jl 18b - break; - buf[i++] = c; - if(c == '\n' || c == '\r') - break; - } - buf[i] = '\0'; - 1da: 8b 55 f4 mov -0xc(%ebp),%edx - 1dd: 8b 45 08 mov 0x8(%ebp),%eax - 1e0: 01 d0 add %edx,%eax - 1e2: c6 00 00 movb $0x0,(%eax) - return buf; - 1e5: 8b 45 08 mov 0x8(%ebp),%eax -} - 1e8: c9 leave - 1e9: c3 ret - -000001ea : - -int -stat(char *n, struct stat *st) -{ - 1ea: 55 push %ebp - 1eb: 89 e5 mov %esp,%ebp - 1ed: 83 ec 18 sub $0x18,%esp - int fd; - int r; - - fd = open(n, O_RDONLY); - 1f0: 83 ec 08 sub $0x8,%esp - 1f3: 6a 00 push $0x0 - 1f5: ff 75 08 pushl 0x8(%ebp) - 1f8: e8 0c 01 00 00 call 309 - 1fd: 83 c4 10 add $0x10,%esp - 200: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd < 0) - 203: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 207: 79 07 jns 210 - return -1; - 209: b8 ff ff ff ff mov $0xffffffff,%eax - 20e: eb 25 jmp 235 - r = fstat(fd, st); - 210: 83 ec 08 sub $0x8,%esp - 213: ff 75 0c pushl 0xc(%ebp) - 216: ff 75 f4 pushl -0xc(%ebp) - 219: e8 03 01 00 00 call 321 - 21e: 83 c4 10 add $0x10,%esp - 221: 89 45 f0 mov %eax,-0x10(%ebp) - close(fd); - 224: 83 ec 0c sub $0xc,%esp - 227: ff 75 f4 pushl -0xc(%ebp) - 22a: e8 c2 00 00 00 call 2f1 - 22f: 83 c4 10 add $0x10,%esp - return r; - 232: 8b 45 f0 mov -0x10(%ebp),%eax -} - 235: c9 leave - 236: c3 ret - -00000237 : - -int -atoi(const char *s) -{ - 237: 55 push %ebp - 238: 89 e5 mov %esp,%ebp - 23a: 83 ec 10 sub $0x10,%esp - int n; - - n = 0; - 23d: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - while('0' <= *s && *s <= '9') - 244: eb 25 jmp 26b - n = n*10 + *s++ - '0'; - 246: 8b 55 fc mov -0x4(%ebp),%edx - 249: 89 d0 mov %edx,%eax - 24b: c1 e0 02 shl $0x2,%eax - 24e: 01 d0 add %edx,%eax - 250: 01 c0 add %eax,%eax - 252: 89 c1 mov %eax,%ecx - 254: 8b 45 08 mov 0x8(%ebp),%eax - 257: 8d 50 01 lea 0x1(%eax),%edx - 25a: 89 55 08 mov %edx,0x8(%ebp) - 25d: 0f b6 00 movzbl (%eax),%eax - 260: 0f be c0 movsbl %al,%eax - 263: 01 c8 add %ecx,%eax - 265: 83 e8 30 sub $0x30,%eax - 268: 89 45 fc mov %eax,-0x4(%ebp) -atoi(const char *s) -{ - int n; - - n = 0; - while('0' <= *s && *s <= '9') - 26b: 8b 45 08 mov 0x8(%ebp),%eax - 26e: 0f b6 00 movzbl (%eax),%eax - 271: 3c 2f cmp $0x2f,%al - 273: 7e 0a jle 27f - 275: 8b 45 08 mov 0x8(%ebp),%eax - 278: 0f b6 00 movzbl (%eax),%eax - 27b: 3c 39 cmp $0x39,%al - 27d: 7e c7 jle 246 - n = n*10 + *s++ - '0'; - return n; - 27f: 8b 45 fc mov -0x4(%ebp),%eax -} - 282: c9 leave - 283: c3 ret - -00000284 : - -void* -memmove(void *vdst, void *vsrc, int n) -{ - 284: 55 push %ebp - 285: 89 e5 mov %esp,%ebp - 287: 83 ec 10 sub $0x10,%esp - char *dst, *src; - - dst = vdst; - 28a: 8b 45 08 mov 0x8(%ebp),%eax - 28d: 89 45 fc mov %eax,-0x4(%ebp) - src = vsrc; - 290: 8b 45 0c mov 0xc(%ebp),%eax - 293: 89 45 f8 mov %eax,-0x8(%ebp) - while(n-- > 0) - 296: eb 17 jmp 2af - *dst++ = *src++; - 298: 8b 45 fc mov -0x4(%ebp),%eax - 29b: 8d 50 01 lea 0x1(%eax),%edx - 29e: 89 55 fc mov %edx,-0x4(%ebp) - 2a1: 8b 55 f8 mov -0x8(%ebp),%edx - 2a4: 8d 4a 01 lea 0x1(%edx),%ecx - 2a7: 89 4d f8 mov %ecx,-0x8(%ebp) - 2aa: 0f b6 12 movzbl (%edx),%edx - 2ad: 88 10 mov %dl,(%eax) -{ - char *dst, *src; - - dst = vdst; - src = vsrc; - while(n-- > 0) - 2af: 8b 45 10 mov 0x10(%ebp),%eax - 2b2: 8d 50 ff lea -0x1(%eax),%edx - 2b5: 89 55 10 mov %edx,0x10(%ebp) - 2b8: 85 c0 test %eax,%eax - 2ba: 7f dc jg 298 - *dst++ = *src++; - return vdst; - 2bc: 8b 45 08 mov 0x8(%ebp),%eax -} - 2bf: c9 leave - 2c0: c3 ret - -000002c1 : - name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 2c1: b8 01 00 00 00 mov $0x1,%eax - 2c6: cd 40 int $0x40 - 2c8: c3 ret - -000002c9 : -SYSCALL(exit) - 2c9: b8 02 00 00 00 mov $0x2,%eax - 2ce: cd 40 int $0x40 - 2d0: c3 ret - -000002d1 : -SYSCALL(wait) - 2d1: b8 03 00 00 00 mov $0x3,%eax - 2d6: cd 40 int $0x40 - 2d8: c3 ret - -000002d9 : -SYSCALL(pipe) - 2d9: b8 04 00 00 00 mov $0x4,%eax - 2de: cd 40 int $0x40 - 2e0: c3 ret - -000002e1 : -SYSCALL(read) - 2e1: b8 05 00 00 00 mov $0x5,%eax - 2e6: cd 40 int $0x40 - 2e8: c3 ret - -000002e9 : -SYSCALL(write) - 2e9: b8 10 00 00 00 mov $0x10,%eax - 2ee: cd 40 int $0x40 - 2f0: c3 ret - -000002f1 : -SYSCALL(close) - 2f1: b8 15 00 00 00 mov $0x15,%eax - 2f6: cd 40 int $0x40 - 2f8: c3 ret - -000002f9 : -SYSCALL(kill) - 2f9: b8 06 00 00 00 mov $0x6,%eax - 2fe: cd 40 int $0x40 - 300: c3 ret - -00000301 : -SYSCALL(exec) - 301: b8 07 00 00 00 mov $0x7,%eax - 306: cd 40 int $0x40 - 308: c3 ret - -00000309 : -SYSCALL(open) - 309: b8 0f 00 00 00 mov $0xf,%eax - 30e: cd 40 int $0x40 - 310: c3 ret - -00000311 : -SYSCALL(mknod) - 311: b8 11 00 00 00 mov $0x11,%eax - 316: cd 40 int $0x40 - 318: c3 ret - -00000319 : -SYSCALL(unlink) - 319: b8 12 00 00 00 mov $0x12,%eax - 31e: cd 40 int $0x40 - 320: c3 ret - -00000321 : -SYSCALL(fstat) - 321: b8 08 00 00 00 mov $0x8,%eax - 326: cd 40 int $0x40 - 328: c3 ret - -00000329 : -SYSCALL(link) - 329: b8 13 00 00 00 mov $0x13,%eax - 32e: cd 40 int $0x40 - 330: c3 ret - -00000331 : -SYSCALL(mkdir) - 331: b8 14 00 00 00 mov $0x14,%eax - 336: cd 40 int $0x40 - 338: c3 ret - -00000339 : -SYSCALL(chdir) - 339: b8 09 00 00 00 mov $0x9,%eax - 33e: cd 40 int $0x40 - 340: c3 ret - -00000341 : -SYSCALL(dup) - 341: b8 0a 00 00 00 mov $0xa,%eax - 346: cd 40 int $0x40 - 348: c3 ret - -00000349 : -SYSCALL(getpid) - 349: b8 0b 00 00 00 mov $0xb,%eax - 34e: cd 40 int $0x40 - 350: c3 ret - -00000351 : -SYSCALL(sbrk) - 351: b8 0c 00 00 00 mov $0xc,%eax - 356: cd 40 int $0x40 - 358: c3 ret - -00000359 : -SYSCALL(sleep) - 359: b8 0d 00 00 00 mov $0xd,%eax - 35e: cd 40 int $0x40 - 360: c3 ret - -00000361 : -SYSCALL(uptime) - 361: b8 0e 00 00 00 mov $0xe,%eax - 366: cd 40 int $0x40 - 368: c3 ret - -00000369 : -#include "stat.h" -#include "user.h" - -static void -putc(int fd, char c) -{ - 369: 55 push %ebp - 36a: 89 e5 mov %esp,%ebp - 36c: 83 ec 18 sub $0x18,%esp - 36f: 8b 45 0c mov 0xc(%ebp),%eax - 372: 88 45 f4 mov %al,-0xc(%ebp) - write(fd, &c, 1); - 375: 83 ec 04 sub $0x4,%esp - 378: 6a 01 push $0x1 - 37a: 8d 45 f4 lea -0xc(%ebp),%eax - 37d: 50 push %eax - 37e: ff 75 08 pushl 0x8(%ebp) - 381: e8 63 ff ff ff call 2e9 - 386: 83 c4 10 add $0x10,%esp -} - 389: c9 leave - 38a: c3 ret - -0000038b : - -static void -printint(int fd, int xx, int base, int sgn) -{ - 38b: 55 push %ebp - 38c: 89 e5 mov %esp,%ebp - 38e: 53 push %ebx - 38f: 83 ec 24 sub $0x24,%esp - static char digits[] = "0123456789ABCDEF"; - char buf[16]; - int i, neg; - uint x; - - neg = 0; - 392: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - if(sgn && xx < 0){ - 399: 83 7d 14 00 cmpl $0x0,0x14(%ebp) - 39d: 74 17 je 3b6 - 39f: 83 7d 0c 00 cmpl $0x0,0xc(%ebp) - 3a3: 79 11 jns 3b6 - neg = 1; - 3a5: c7 45 f0 01 00 00 00 movl $0x1,-0x10(%ebp) - x = -xx; - 3ac: 8b 45 0c mov 0xc(%ebp),%eax - 3af: f7 d8 neg %eax - 3b1: 89 45 ec mov %eax,-0x14(%ebp) - 3b4: eb 06 jmp 3bc - } else { - x = xx; - 3b6: 8b 45 0c mov 0xc(%ebp),%eax - 3b9: 89 45 ec mov %eax,-0x14(%ebp) - } - - i = 0; - 3bc: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - do{ - buf[i++] = digits[x % base]; - 3c3: 8b 4d f4 mov -0xc(%ebp),%ecx - 3c6: 8d 41 01 lea 0x1(%ecx),%eax - 3c9: 89 45 f4 mov %eax,-0xc(%ebp) - 3cc: 8b 5d 10 mov 0x10(%ebp),%ebx - 3cf: 8b 45 ec mov -0x14(%ebp),%eax - 3d2: ba 00 00 00 00 mov $0x0,%edx - 3d7: f7 f3 div %ebx - 3d9: 89 d0 mov %edx,%eax - 3db: 0f b6 80 6c 0a 00 00 movzbl 0xa6c(%eax),%eax - 3e2: 88 44 0d dc mov %al,-0x24(%ebp,%ecx,1) - }while((x /= base) != 0); - 3e6: 8b 5d 10 mov 0x10(%ebp),%ebx - 3e9: 8b 45 ec mov -0x14(%ebp),%eax - 3ec: ba 00 00 00 00 mov $0x0,%edx - 3f1: f7 f3 div %ebx - 3f3: 89 45 ec mov %eax,-0x14(%ebp) - 3f6: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 3fa: 75 c7 jne 3c3 - if(neg) - 3fc: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 400: 74 0e je 410 - buf[i++] = '-'; - 402: 8b 45 f4 mov -0xc(%ebp),%eax - 405: 8d 50 01 lea 0x1(%eax),%edx - 408: 89 55 f4 mov %edx,-0xc(%ebp) - 40b: c6 44 05 dc 2d movb $0x2d,-0x24(%ebp,%eax,1) - - while(--i >= 0) - 410: eb 1d jmp 42f - putc(fd, buf[i]); - 412: 8d 55 dc lea -0x24(%ebp),%edx - 415: 8b 45 f4 mov -0xc(%ebp),%eax - 418: 01 d0 add %edx,%eax - 41a: 0f b6 00 movzbl (%eax),%eax - 41d: 0f be c0 movsbl %al,%eax - 420: 83 ec 08 sub $0x8,%esp - 423: 50 push %eax - 424: ff 75 08 pushl 0x8(%ebp) - 427: e8 3d ff ff ff call 369 - 42c: 83 c4 10 add $0x10,%esp - buf[i++] = digits[x % base]; - }while((x /= base) != 0); - if(neg) - buf[i++] = '-'; - - while(--i >= 0) - 42f: 83 6d f4 01 subl $0x1,-0xc(%ebp) - 433: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 437: 79 d9 jns 412 - putc(fd, buf[i]); -} - 439: 8b 5d fc mov -0x4(%ebp),%ebx - 43c: c9 leave - 43d: c3 ret - -0000043e : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void -printf(int fd, char *fmt, ...) -{ - 43e: 55 push %ebp - 43f: 89 e5 mov %esp,%ebp - 441: 83 ec 28 sub $0x28,%esp - char *s; - int c, i, state; - uint *ap; - - state = 0; - 444: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - ap = (uint*)(void*)&fmt + 1; - 44b: 8d 45 0c lea 0xc(%ebp),%eax - 44e: 83 c0 04 add $0x4,%eax - 451: 89 45 e8 mov %eax,-0x18(%ebp) - for(i = 0; fmt[i]; i++){ - 454: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - 45b: e9 59 01 00 00 jmp 5b9 - c = fmt[i] & 0xff; - 460: 8b 55 0c mov 0xc(%ebp),%edx - 463: 8b 45 f0 mov -0x10(%ebp),%eax - 466: 01 d0 add %edx,%eax - 468: 0f b6 00 movzbl (%eax),%eax - 46b: 0f be c0 movsbl %al,%eax - 46e: 25 ff 00 00 00 and $0xff,%eax - 473: 89 45 e4 mov %eax,-0x1c(%ebp) - if(state == 0){ - 476: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 47a: 75 2c jne 4a8 - if(c == '%'){ - 47c: 83 7d e4 25 cmpl $0x25,-0x1c(%ebp) - 480: 75 0c jne 48e - state = '%'; - 482: c7 45 ec 25 00 00 00 movl $0x25,-0x14(%ebp) - 489: e9 27 01 00 00 jmp 5b5 - } else { - putc(fd, c); - 48e: 8b 45 e4 mov -0x1c(%ebp),%eax - 491: 0f be c0 movsbl %al,%eax - 494: 83 ec 08 sub $0x8,%esp - 497: 50 push %eax - 498: ff 75 08 pushl 0x8(%ebp) - 49b: e8 c9 fe ff ff call 369 - 4a0: 83 c4 10 add $0x10,%esp - 4a3: e9 0d 01 00 00 jmp 5b5 - } - } else if(state == '%'){ - 4a8: 83 7d ec 25 cmpl $0x25,-0x14(%ebp) - 4ac: 0f 85 03 01 00 00 jne 5b5 - if(c == 'd'){ - 4b2: 83 7d e4 64 cmpl $0x64,-0x1c(%ebp) - 4b6: 75 1e jne 4d6 - printint(fd, *ap, 10, 1); - 4b8: 8b 45 e8 mov -0x18(%ebp),%eax - 4bb: 8b 00 mov (%eax),%eax - 4bd: 6a 01 push $0x1 - 4bf: 6a 0a push $0xa - 4c1: 50 push %eax - 4c2: ff 75 08 pushl 0x8(%ebp) - 4c5: e8 c1 fe ff ff call 38b - 4ca: 83 c4 10 add $0x10,%esp - ap++; - 4cd: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 4d1: e9 d8 00 00 00 jmp 5ae - } else if(c == 'x' || c == 'p'){ - 4d6: 83 7d e4 78 cmpl $0x78,-0x1c(%ebp) - 4da: 74 06 je 4e2 - 4dc: 83 7d e4 70 cmpl $0x70,-0x1c(%ebp) - 4e0: 75 1e jne 500 - printint(fd, *ap, 16, 0); - 4e2: 8b 45 e8 mov -0x18(%ebp),%eax - 4e5: 8b 00 mov (%eax),%eax - 4e7: 6a 00 push $0x0 - 4e9: 6a 10 push $0x10 - 4eb: 50 push %eax - 4ec: ff 75 08 pushl 0x8(%ebp) - 4ef: e8 97 fe ff ff call 38b - 4f4: 83 c4 10 add $0x10,%esp - ap++; - 4f7: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 4fb: e9 ae 00 00 00 jmp 5ae - } else if(c == 's'){ - 500: 83 7d e4 73 cmpl $0x73,-0x1c(%ebp) - 504: 75 43 jne 549 - s = (char*)*ap; - 506: 8b 45 e8 mov -0x18(%ebp),%eax - 509: 8b 00 mov (%eax),%eax - 50b: 89 45 f4 mov %eax,-0xc(%ebp) - ap++; - 50e: 83 45 e8 04 addl $0x4,-0x18(%ebp) - if(s == 0) - 512: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 516: 75 07 jne 51f - s = "(null)"; - 518: c7 45 f4 19 08 00 00 movl $0x819,-0xc(%ebp) - while(*s != 0){ - 51f: eb 1c jmp 53d - putc(fd, *s); - 521: 8b 45 f4 mov -0xc(%ebp),%eax - 524: 0f b6 00 movzbl (%eax),%eax - 527: 0f be c0 movsbl %al,%eax - 52a: 83 ec 08 sub $0x8,%esp - 52d: 50 push %eax - 52e: ff 75 08 pushl 0x8(%ebp) - 531: e8 33 fe ff ff call 369 - 536: 83 c4 10 add $0x10,%esp - s++; - 539: 83 45 f4 01 addl $0x1,-0xc(%ebp) - } else if(c == 's'){ - s = (char*)*ap; - ap++; - if(s == 0) - s = "(null)"; - while(*s != 0){ - 53d: 8b 45 f4 mov -0xc(%ebp),%eax - 540: 0f b6 00 movzbl (%eax),%eax - 543: 84 c0 test %al,%al - 545: 75 da jne 521 - 547: eb 65 jmp 5ae - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 549: 83 7d e4 63 cmpl $0x63,-0x1c(%ebp) - 54d: 75 1d jne 56c - putc(fd, *ap); - 54f: 8b 45 e8 mov -0x18(%ebp),%eax - 552: 8b 00 mov (%eax),%eax - 554: 0f be c0 movsbl %al,%eax - 557: 83 ec 08 sub $0x8,%esp - 55a: 50 push %eax - 55b: ff 75 08 pushl 0x8(%ebp) - 55e: e8 06 fe ff ff call 369 - 563: 83 c4 10 add $0x10,%esp - ap++; - 566: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 56a: eb 42 jmp 5ae - } else if(c == '%'){ - 56c: 83 7d e4 25 cmpl $0x25,-0x1c(%ebp) - 570: 75 17 jne 589 - putc(fd, c); - 572: 8b 45 e4 mov -0x1c(%ebp),%eax - 575: 0f be c0 movsbl %al,%eax - 578: 83 ec 08 sub $0x8,%esp - 57b: 50 push %eax - 57c: ff 75 08 pushl 0x8(%ebp) - 57f: e8 e5 fd ff ff call 369 - 584: 83 c4 10 add $0x10,%esp - 587: eb 25 jmp 5ae - } else { - // Unknown % sequence. Print it to draw attention. - putc(fd, '%'); - 589: 83 ec 08 sub $0x8,%esp - 58c: 6a 25 push $0x25 - 58e: ff 75 08 pushl 0x8(%ebp) - 591: e8 d3 fd ff ff call 369 - 596: 83 c4 10 add $0x10,%esp - putc(fd, c); - 599: 8b 45 e4 mov -0x1c(%ebp),%eax - 59c: 0f be c0 movsbl %al,%eax - 59f: 83 ec 08 sub $0x8,%esp - 5a2: 50 push %eax - 5a3: ff 75 08 pushl 0x8(%ebp) - 5a6: e8 be fd ff ff call 369 - 5ab: 83 c4 10 add $0x10,%esp - } - state = 0; - 5ae: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for(i = 0; fmt[i]; i++){ - 5b5: 83 45 f0 01 addl $0x1,-0x10(%ebp) - 5b9: 8b 55 0c mov 0xc(%ebp),%edx - 5bc: 8b 45 f0 mov -0x10(%ebp),%eax - 5bf: 01 d0 add %edx,%eax - 5c1: 0f b6 00 movzbl (%eax),%eax - 5c4: 84 c0 test %al,%al - 5c6: 0f 85 94 fe ff ff jne 460 - putc(fd, c); - } - state = 0; - } - } -} - 5cc: c9 leave - 5cd: c3 ret - -000005ce : -static Header base; -static Header *freep; - -void -free(void *ap) -{ - 5ce: 55 push %ebp - 5cf: 89 e5 mov %esp,%ebp - 5d1: 83 ec 10 sub $0x10,%esp - Header *bp, *p; - - bp = (Header*)ap - 1; - 5d4: 8b 45 08 mov 0x8(%ebp),%eax - 5d7: 83 e8 08 sub $0x8,%eax - 5da: 89 45 f8 mov %eax,-0x8(%ebp) - for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 5dd: a1 88 0a 00 00 mov 0xa88,%eax - 5e2: 89 45 fc mov %eax,-0x4(%ebp) - 5e5: eb 24 jmp 60b - if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 5e7: 8b 45 fc mov -0x4(%ebp),%eax - 5ea: 8b 00 mov (%eax),%eax - 5ec: 3b 45 fc cmp -0x4(%ebp),%eax - 5ef: 77 12 ja 603 - 5f1: 8b 45 f8 mov -0x8(%ebp),%eax - 5f4: 3b 45 fc cmp -0x4(%ebp),%eax - 5f7: 77 24 ja 61d - 5f9: 8b 45 fc mov -0x4(%ebp),%eax - 5fc: 8b 00 mov (%eax),%eax - 5fe: 3b 45 f8 cmp -0x8(%ebp),%eax - 601: 77 1a ja 61d -free(void *ap) -{ - Header *bp, *p; - - bp = (Header*)ap - 1; - for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 603: 8b 45 fc mov -0x4(%ebp),%eax - 606: 8b 00 mov (%eax),%eax - 608: 89 45 fc mov %eax,-0x4(%ebp) - 60b: 8b 45 f8 mov -0x8(%ebp),%eax - 60e: 3b 45 fc cmp -0x4(%ebp),%eax - 611: 76 d4 jbe 5e7 - 613: 8b 45 fc mov -0x4(%ebp),%eax - 616: 8b 00 mov (%eax),%eax - 618: 3b 45 f8 cmp -0x8(%ebp),%eax - 61b: 76 ca jbe 5e7 - if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - break; - if(bp + bp->s.size == p->s.ptr){ - 61d: 8b 45 f8 mov -0x8(%ebp),%eax - 620: 8b 40 04 mov 0x4(%eax),%eax - 623: 8d 14 c5 00 00 00 00 lea 0x0(,%eax,8),%edx - 62a: 8b 45 f8 mov -0x8(%ebp),%eax - 62d: 01 c2 add %eax,%edx - 62f: 8b 45 fc mov -0x4(%ebp),%eax - 632: 8b 00 mov (%eax),%eax - 634: 39 c2 cmp %eax,%edx - 636: 75 24 jne 65c - bp->s.size += p->s.ptr->s.size; - 638: 8b 45 f8 mov -0x8(%ebp),%eax - 63b: 8b 50 04 mov 0x4(%eax),%edx - 63e: 8b 45 fc mov -0x4(%ebp),%eax - 641: 8b 00 mov (%eax),%eax - 643: 8b 40 04 mov 0x4(%eax),%eax - 646: 01 c2 add %eax,%edx - 648: 8b 45 f8 mov -0x8(%ebp),%eax - 64b: 89 50 04 mov %edx,0x4(%eax) - bp->s.ptr = p->s.ptr->s.ptr; - 64e: 8b 45 fc mov -0x4(%ebp),%eax - 651: 8b 00 mov (%eax),%eax - 653: 8b 10 mov (%eax),%edx - 655: 8b 45 f8 mov -0x8(%ebp),%eax - 658: 89 10 mov %edx,(%eax) - 65a: eb 0a jmp 666 - } else - bp->s.ptr = p->s.ptr; - 65c: 8b 45 fc mov -0x4(%ebp),%eax - 65f: 8b 10 mov (%eax),%edx - 661: 8b 45 f8 mov -0x8(%ebp),%eax - 664: 89 10 mov %edx,(%eax) - if(p + p->s.size == bp){ - 666: 8b 45 fc mov -0x4(%ebp),%eax - 669: 8b 40 04 mov 0x4(%eax),%eax - 66c: 8d 14 c5 00 00 00 00 lea 0x0(,%eax,8),%edx - 673: 8b 45 fc mov -0x4(%ebp),%eax - 676: 01 d0 add %edx,%eax - 678: 3b 45 f8 cmp -0x8(%ebp),%eax - 67b: 75 20 jne 69d - p->s.size += bp->s.size; - 67d: 8b 45 fc mov -0x4(%ebp),%eax - 680: 8b 50 04 mov 0x4(%eax),%edx - 683: 8b 45 f8 mov -0x8(%ebp),%eax - 686: 8b 40 04 mov 0x4(%eax),%eax - 689: 01 c2 add %eax,%edx - 68b: 8b 45 fc mov -0x4(%ebp),%eax - 68e: 89 50 04 mov %edx,0x4(%eax) - p->s.ptr = bp->s.ptr; - 691: 8b 45 f8 mov -0x8(%ebp),%eax - 694: 8b 10 mov (%eax),%edx - 696: 8b 45 fc mov -0x4(%ebp),%eax - 699: 89 10 mov %edx,(%eax) - 69b: eb 08 jmp 6a5 - } else - p->s.ptr = bp; - 69d: 8b 45 fc mov -0x4(%ebp),%eax - 6a0: 8b 55 f8 mov -0x8(%ebp),%edx - 6a3: 89 10 mov %edx,(%eax) - freep = p; - 6a5: 8b 45 fc mov -0x4(%ebp),%eax - 6a8: a3 88 0a 00 00 mov %eax,0xa88 -} - 6ad: c9 leave - 6ae: c3 ret - -000006af : - -static Header* -morecore(uint nu) -{ - 6af: 55 push %ebp - 6b0: 89 e5 mov %esp,%ebp - 6b2: 83 ec 18 sub $0x18,%esp - char *p; - Header *hp; - - if(nu < 4096) - 6b5: 81 7d 08 ff 0f 00 00 cmpl $0xfff,0x8(%ebp) - 6bc: 77 07 ja 6c5 - nu = 4096; - 6be: c7 45 08 00 10 00 00 movl $0x1000,0x8(%ebp) - p = sbrk(nu * sizeof(Header)); - 6c5: 8b 45 08 mov 0x8(%ebp),%eax - 6c8: c1 e0 03 shl $0x3,%eax - 6cb: 83 ec 0c sub $0xc,%esp - 6ce: 50 push %eax - 6cf: e8 7d fc ff ff call 351 - 6d4: 83 c4 10 add $0x10,%esp - 6d7: 89 45 f4 mov %eax,-0xc(%ebp) - if(p == (char*)-1) - 6da: 83 7d f4 ff cmpl $0xffffffff,-0xc(%ebp) - 6de: 75 07 jne 6e7 - return 0; - 6e0: b8 00 00 00 00 mov $0x0,%eax - 6e5: eb 26 jmp 70d - hp = (Header*)p; - 6e7: 8b 45 f4 mov -0xc(%ebp),%eax - 6ea: 89 45 f0 mov %eax,-0x10(%ebp) - hp->s.size = nu; - 6ed: 8b 45 f0 mov -0x10(%ebp),%eax - 6f0: 8b 55 08 mov 0x8(%ebp),%edx - 6f3: 89 50 04 mov %edx,0x4(%eax) - free((void*)(hp + 1)); - 6f6: 8b 45 f0 mov -0x10(%ebp),%eax - 6f9: 83 c0 08 add $0x8,%eax - 6fc: 83 ec 0c sub $0xc,%esp - 6ff: 50 push %eax - 700: e8 c9 fe ff ff call 5ce - 705: 83 c4 10 add $0x10,%esp - return freep; - 708: a1 88 0a 00 00 mov 0xa88,%eax -} - 70d: c9 leave - 70e: c3 ret - -0000070f : - -void* -malloc(uint nbytes) -{ - 70f: 55 push %ebp - 710: 89 e5 mov %esp,%ebp - 712: 83 ec 18 sub $0x18,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 715: 8b 45 08 mov 0x8(%ebp),%eax - 718: 83 c0 07 add $0x7,%eax - 71b: c1 e8 03 shr $0x3,%eax - 71e: 83 c0 01 add $0x1,%eax - 721: 89 45 ec mov %eax,-0x14(%ebp) - if((prevp = freep) == 0){ - 724: a1 88 0a 00 00 mov 0xa88,%eax - 729: 89 45 f0 mov %eax,-0x10(%ebp) - 72c: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 730: 75 23 jne 755 - base.s.ptr = freep = prevp = &base; - 732: c7 45 f0 80 0a 00 00 movl $0xa80,-0x10(%ebp) - 739: 8b 45 f0 mov -0x10(%ebp),%eax - 73c: a3 88 0a 00 00 mov %eax,0xa88 - 741: a1 88 0a 00 00 mov 0xa88,%eax - 746: a3 80 0a 00 00 mov %eax,0xa80 - base.s.size = 0; - 74b: c7 05 84 0a 00 00 00 movl $0x0,0xa84 - 752: 00 00 00 - } - for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 755: 8b 45 f0 mov -0x10(%ebp),%eax - 758: 8b 00 mov (%eax),%eax - 75a: 89 45 f4 mov %eax,-0xc(%ebp) - if(p->s.size >= nunits){ - 75d: 8b 45 f4 mov -0xc(%ebp),%eax - 760: 8b 40 04 mov 0x4(%eax),%eax - 763: 3b 45 ec cmp -0x14(%ebp),%eax - 766: 72 4d jb 7b5 - if(p->s.size == nunits) - 768: 8b 45 f4 mov -0xc(%ebp),%eax - 76b: 8b 40 04 mov 0x4(%eax),%eax - 76e: 3b 45 ec cmp -0x14(%ebp),%eax - 771: 75 0c jne 77f - prevp->s.ptr = p->s.ptr; - 773: 8b 45 f4 mov -0xc(%ebp),%eax - 776: 8b 10 mov (%eax),%edx - 778: 8b 45 f0 mov -0x10(%ebp),%eax - 77b: 89 10 mov %edx,(%eax) - 77d: eb 26 jmp 7a5 - else { - p->s.size -= nunits; - 77f: 8b 45 f4 mov -0xc(%ebp),%eax - 782: 8b 40 04 mov 0x4(%eax),%eax - 785: 2b 45 ec sub -0x14(%ebp),%eax - 788: 89 c2 mov %eax,%edx - 78a: 8b 45 f4 mov -0xc(%ebp),%eax - 78d: 89 50 04 mov %edx,0x4(%eax) - p += p->s.size; - 790: 8b 45 f4 mov -0xc(%ebp),%eax - 793: 8b 40 04 mov 0x4(%eax),%eax - 796: c1 e0 03 shl $0x3,%eax - 799: 01 45 f4 add %eax,-0xc(%ebp) - p->s.size = nunits; - 79c: 8b 45 f4 mov -0xc(%ebp),%eax - 79f: 8b 55 ec mov -0x14(%ebp),%edx - 7a2: 89 50 04 mov %edx,0x4(%eax) - } - freep = prevp; - 7a5: 8b 45 f0 mov -0x10(%ebp),%eax - 7a8: a3 88 0a 00 00 mov %eax,0xa88 - return (void*)(p + 1); - 7ad: 8b 45 f4 mov -0xc(%ebp),%eax - 7b0: 83 c0 08 add $0x8,%eax - 7b3: eb 3b jmp 7f0 - } - if(p == freep) - 7b5: a1 88 0a 00 00 mov 0xa88,%eax - 7ba: 39 45 f4 cmp %eax,-0xc(%ebp) - 7bd: 75 1e jne 7dd - if((p = morecore(nunits)) == 0) - 7bf: 83 ec 0c sub $0xc,%esp - 7c2: ff 75 ec pushl -0x14(%ebp) - 7c5: e8 e5 fe ff ff call 6af - 7ca: 83 c4 10 add $0x10,%esp - 7cd: 89 45 f4 mov %eax,-0xc(%ebp) - 7d0: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 7d4: 75 07 jne 7dd - return 0; - 7d6: b8 00 00 00 00 mov $0x0,%eax - 7db: eb 13 jmp 7f0 - nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - if((prevp = freep) == 0){ - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 7dd: 8b 45 f4 mov -0xc(%ebp),%eax - 7e0: 89 45 f0 mov %eax,-0x10(%ebp) - 7e3: 8b 45 f4 mov -0xc(%ebp),%eax - 7e6: 8b 00 mov (%eax),%eax - 7e8: 89 45 f4 mov %eax,-0xc(%ebp) - return (void*)(p + 1); - } - if(p == freep) - if((p = morecore(nunits)) == 0) - return 0; - } - 7eb: e9 6d ff ff ff jmp 75d -} - 7f0: c9 leave - 7f1: c3 ret diff --git a/xv6-public/ln.d b/xv6-public/ln.d deleted file mode 100755 index 6728be9..0000000 --- a/xv6-public/ln.d +++ /dev/null @@ -1 +0,0 @@ -ln.o: ln.c /usr/include/stdc-predef.h types.h stat.h user.h diff --git a/xv6-public/ln.o b/xv6-public/ln.o deleted file mode 100755 index b91ccf7c3f679228f9a352572c8ff2454a1bd5d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2884 zcma)8U2GIp6h3!mcDwB^{aX+e)M-*eiJ2)v(_kqI6sa{t5iJQO24}akyCb`^%gk&k zhQx$wVpEOb!RV8(@<7xlpG+iCpL~D^UyUznOwvPuXt-|`SL~EVkcJ_?+c<0uYv41<9J<}*Zm}W8d>i&$~ z4DEJv$qxO?1Jn${i}v0ae=~N?3!47Y0C6RT+^Qw^0>!Tw9#aJ+l7NHN$C_dE-DMDk zQEBD2!_TyGL70#wY|M$gI1XUZvEmCDx!*B}Jafi%$_*e+!H7|z3OoQlP#F@*}1S|GAq@l44aoGBhD?kg>n+4)%hqZ1{8 z1IXnlWfscD0QSCiP0)yV5=`F^axFk9WW#4=RDX_`8Q6ub6R2yDIEiVXZ{)I(*&Yp6gau3>0 z>ktn~H}sFz{m_qsDoih`Hjb_wo_40EY^RRDrORGabKv>n0o$pCZKuP2tW>%|GYP`f zh!eyoj@JylI0z9~TlOL+iM;B?2TjL|d9y7)OyV@W-3k(?7I`h->9kRSAL+D6;B=yP z;#ZS)l=j1m>Q#yx?I^K(HFDLR2xE;vFO$C#B+7@W$!;7?HrrLNIazIWl0%0MPOdCZ zJDqN&8B|F&i00?!X6y;HXn)!v+RmMah&RuYxLOdqOP2L6j%6Hke5fq)89P}LG(Vg( zx^!~L#K{kvM)xX6H@?zJyb3UhQfz1~@|$kruO#Fyd5K4EC639B+Nr_hl3(f8F9cz& z4Hv0ck1!o5uK!3$p*R zs{c1U4mY%e^i7|FF8iUvnPb_FU%%ASVGo|o!%(@u?88qGo@|nj0MNvb|2|Nt{mvl)f5x#%LnUmJR!aqE9NY;RcsmaaODGAWl02d|%2 z&2#0OVs7aa=jWTVDW*L6tc}leMod}x=7cG`nze^|JK*~@iZ0+ddcu9n-U+sM_Sm$q z=~qC0(9|nmzU}2l?-BS4lspDB5WJre2Rp}z#Gc|Citi|%yCU!}7T;@u4e?!IX4;6l*@Kc3fGh$!g XDf~&{p9*C?7`T7D?m>k%(1869D_&lQ diff --git a/xv6-public/ln.sym b/xv6-public/ln.sym deleted file mode 100755 index 33e94f8..0000000 --- a/xv6-public/ln.sym +++ /dev/null @@ -1,61 +0,0 @@ -00000000 .text -000007f2 .rodata -00000820 .eh_frame -00000a6c .data -00000a80 .bss -00000000 .comment -00000000 .debug_aranges -00000000 .debug_info -00000000 .debug_abbrev -00000000 .debug_line -00000000 .debug_str -00000000 .debug_loc -00000000 ln.c -00000000 ulib.c -00000074 stosb -00000000 printf.c -00000369 putc -0000038b printint -00000a6c digits.1372 -00000000 umalloc.c -00000a80 base -00000a88 freep -000006af morecore -00000000 -00000099 strcpy -0000043e printf -00000284 memmove -00000311 mknod -0000017c gets -00000349 getpid -0000070f malloc -00000359 sleep -000002d9 pipe -000002e9 write -00000321 fstat -000002f9 kill -00000339 chdir -00000301 exec -000002d1 wait -000002e1 read -00000319 unlink -000002c1 fork -00000351 sbrk -00000361 uptime -00000a7d __bss_start -0000012f memset -00000000 main -000000c9 strcmp -00000341 dup -000001ea stat -00000a7d _edata -00000a8c _end -00000329 link -000002c9 exit -00000237 atoi -00000108 strlen -00000309 open -00000149 strchr -00000331 mkdir -000002f1 close -000005ce free diff --git a/xv6-public/log.d b/xv6-public/log.d deleted file mode 100755 index 268a030..0000000 --- a/xv6-public/log.d +++ /dev/null @@ -1,2 +0,0 @@ -log.o: log.c /usr/include/stdc-predef.h types.h defs.h param.h spinlock.h \ - fs.h buf.h diff --git a/xv6-public/log.o b/xv6-public/log.o deleted file mode 100755 index 5e90ad6757b854d5cd0386584e0eff2cb56089f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10160 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: -#include "user.h" -#include "fs.h" - -char* -fmtname(char *path) -{ - 0: 55 push %ebp - 1: 89 e5 mov %esp,%ebp - 3: 53 push %ebx - 4: 83 ec 14 sub $0x14,%esp - static char buf[DIRSIZ+1]; - char *p; - - // Find first character after last slash. - for(p=path+strlen(path); p >= path && *p != '/'; p--) - 7: 83 ec 0c sub $0xc,%esp - a: ff 75 08 pushl 0x8(%ebp) - d: e8 c8 03 00 00 call 3da - 12: 83 c4 10 add $0x10,%esp - 15: 89 c2 mov %eax,%edx - 17: 8b 45 08 mov 0x8(%ebp),%eax - 1a: 01 d0 add %edx,%eax - 1c: 89 45 f4 mov %eax,-0xc(%ebp) - 1f: eb 04 jmp 25 - 21: 83 6d f4 01 subl $0x1,-0xc(%ebp) - 25: 8b 45 f4 mov -0xc(%ebp),%eax - 28: 3b 45 08 cmp 0x8(%ebp),%eax - 2b: 72 0a jb 37 - 2d: 8b 45 f4 mov -0xc(%ebp),%eax - 30: 0f b6 00 movzbl (%eax),%eax - 33: 3c 2f cmp $0x2f,%al - 35: 75 ea jne 21 - ; - p++; - 37: 83 45 f4 01 addl $0x1,-0xc(%ebp) - - // Return blank-padded name. - if(strlen(p) >= DIRSIZ) - 3b: 83 ec 0c sub $0xc,%esp - 3e: ff 75 f4 pushl -0xc(%ebp) - 41: e8 94 03 00 00 call 3da - 46: 83 c4 10 add $0x10,%esp - 49: 83 f8 0d cmp $0xd,%eax - 4c: 76 05 jbe 53 - return p; - 4e: 8b 45 f4 mov -0xc(%ebp),%eax - 51: eb 60 jmp b3 - memmove(buf, p, strlen(p)); - 53: 83 ec 0c sub $0xc,%esp - 56: ff 75 f4 pushl -0xc(%ebp) - 59: e8 7c 03 00 00 call 3da - 5e: 83 c4 10 add $0x10,%esp - 61: 83 ec 04 sub $0x4,%esp - 64: 50 push %eax - 65: ff 75 f4 pushl -0xc(%ebp) - 68: 68 cc 0d 00 00 push $0xdcc - 6d: e8 e4 04 00 00 call 556 - 72: 83 c4 10 add $0x10,%esp - memset(buf+strlen(p), ' ', DIRSIZ-strlen(p)); - 75: 83 ec 0c sub $0xc,%esp - 78: ff 75 f4 pushl -0xc(%ebp) - 7b: e8 5a 03 00 00 call 3da - 80: 83 c4 10 add $0x10,%esp - 83: ba 0e 00 00 00 mov $0xe,%edx - 88: 89 d3 mov %edx,%ebx - 8a: 29 c3 sub %eax,%ebx - 8c: 83 ec 0c sub $0xc,%esp - 8f: ff 75 f4 pushl -0xc(%ebp) - 92: e8 43 03 00 00 call 3da - 97: 83 c4 10 add $0x10,%esp - 9a: 05 cc 0d 00 00 add $0xdcc,%eax - 9f: 83 ec 04 sub $0x4,%esp - a2: 53 push %ebx - a3: 6a 20 push $0x20 - a5: 50 push %eax - a6: e8 56 03 00 00 call 401 - ab: 83 c4 10 add $0x10,%esp - return buf; - ae: b8 cc 0d 00 00 mov $0xdcc,%eax -} - b3: 8b 5d fc mov -0x4(%ebp),%ebx - b6: c9 leave - b7: c3 ret - -000000b8 : - -void -ls(char *path) -{ - b8: 55 push %ebp - b9: 89 e5 mov %esp,%ebp - bb: 57 push %edi - bc: 56 push %esi - bd: 53 push %ebx - be: 81 ec 3c 02 00 00 sub $0x23c,%esp - char buf[512], *p; - int fd; - struct dirent de; - struct stat st; - - if((fd = open(path, 0)) < 0){ - c4: 83 ec 08 sub $0x8,%esp - c7: 6a 00 push $0x0 - c9: ff 75 08 pushl 0x8(%ebp) - cc: e8 0a 05 00 00 call 5db - d1: 83 c4 10 add $0x10,%esp - d4: 89 45 e4 mov %eax,-0x1c(%ebp) - d7: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp) - db: 79 1a jns f7 - printf(2, "ls: cannot open %s\n", path); - dd: 83 ec 04 sub $0x4,%esp - e0: ff 75 08 pushl 0x8(%ebp) - e3: 68 c4 0a 00 00 push $0xac4 - e8: 6a 02 push $0x2 - ea: e8 21 06 00 00 call 710 - ef: 83 c4 10 add $0x10,%esp - return; - f2: e9 e3 01 00 00 jmp 2da - } - - if(fstat(fd, &st) < 0){ - f7: 83 ec 08 sub $0x8,%esp - fa: 8d 85 bc fd ff ff lea -0x244(%ebp),%eax - 100: 50 push %eax - 101: ff 75 e4 pushl -0x1c(%ebp) - 104: e8 ea 04 00 00 call 5f3 - 109: 83 c4 10 add $0x10,%esp - 10c: 85 c0 test %eax,%eax - 10e: 79 28 jns 138 - printf(2, "ls: cannot stat %s\n", path); - 110: 83 ec 04 sub $0x4,%esp - 113: ff 75 08 pushl 0x8(%ebp) - 116: 68 d8 0a 00 00 push $0xad8 - 11b: 6a 02 push $0x2 - 11d: e8 ee 05 00 00 call 710 - 122: 83 c4 10 add $0x10,%esp - close(fd); - 125: 83 ec 0c sub $0xc,%esp - 128: ff 75 e4 pushl -0x1c(%ebp) - 12b: e8 93 04 00 00 call 5c3 - 130: 83 c4 10 add $0x10,%esp - return; - 133: e9 a2 01 00 00 jmp 2da - } - - switch(st.type){ - 138: 0f b7 85 bc fd ff ff movzwl -0x244(%ebp),%eax - 13f: 98 cwtl - 140: 83 f8 01 cmp $0x1,%eax - 143: 74 48 je 18d - 145: 83 f8 02 cmp $0x2,%eax - 148: 0f 85 7e 01 00 00 jne 2cc - case T_FILE: - printf(1, "%s %d %d %d\n", fmtname(path), st.type, st.ino, st.size); - 14e: 8b bd cc fd ff ff mov -0x234(%ebp),%edi - 154: 8b b5 c4 fd ff ff mov -0x23c(%ebp),%esi - 15a: 0f b7 85 bc fd ff ff movzwl -0x244(%ebp),%eax - 161: 0f bf d8 movswl %ax,%ebx - 164: 83 ec 0c sub $0xc,%esp - 167: ff 75 08 pushl 0x8(%ebp) - 16a: e8 91 fe ff ff call 0 - 16f: 83 c4 10 add $0x10,%esp - 172: 83 ec 08 sub $0x8,%esp - 175: 57 push %edi - 176: 56 push %esi - 177: 53 push %ebx - 178: 50 push %eax - 179: 68 ec 0a 00 00 push $0xaec - 17e: 6a 01 push $0x1 - 180: e8 8b 05 00 00 call 710 - 185: 83 c4 20 add $0x20,%esp - break; - 188: e9 3f 01 00 00 jmp 2cc - - case T_DIR: - if(strlen(path) + 1 + DIRSIZ + 1 > sizeof buf){ - 18d: 83 ec 0c sub $0xc,%esp - 190: ff 75 08 pushl 0x8(%ebp) - 193: e8 42 02 00 00 call 3da - 198: 83 c4 10 add $0x10,%esp - 19b: 83 c0 10 add $0x10,%eax - 19e: 3d 00 02 00 00 cmp $0x200,%eax - 1a3: 76 17 jbe 1bc - printf(1, "ls: path too long\n"); - 1a5: 83 ec 08 sub $0x8,%esp - 1a8: 68 f9 0a 00 00 push $0xaf9 - 1ad: 6a 01 push $0x1 - 1af: e8 5c 05 00 00 call 710 - 1b4: 83 c4 10 add $0x10,%esp - break; - 1b7: e9 10 01 00 00 jmp 2cc - } - strcpy(buf, path); - 1bc: 83 ec 08 sub $0x8,%esp - 1bf: ff 75 08 pushl 0x8(%ebp) - 1c2: 8d 85 e0 fd ff ff lea -0x220(%ebp),%eax - 1c8: 50 push %eax - 1c9: e8 9d 01 00 00 call 36b - 1ce: 83 c4 10 add $0x10,%esp - p = buf+strlen(buf); - 1d1: 83 ec 0c sub $0xc,%esp - 1d4: 8d 85 e0 fd ff ff lea -0x220(%ebp),%eax - 1da: 50 push %eax - 1db: e8 fa 01 00 00 call 3da - 1e0: 83 c4 10 add $0x10,%esp - 1e3: 89 c2 mov %eax,%edx - 1e5: 8d 85 e0 fd ff ff lea -0x220(%ebp),%eax - 1eb: 01 d0 add %edx,%eax - 1ed: 89 45 e0 mov %eax,-0x20(%ebp) - *p++ = '/'; - 1f0: 8b 45 e0 mov -0x20(%ebp),%eax - 1f3: 8d 50 01 lea 0x1(%eax),%edx - 1f6: 89 55 e0 mov %edx,-0x20(%ebp) - 1f9: c6 00 2f movb $0x2f,(%eax) - while(read(fd, &de, sizeof(de)) == sizeof(de)){ - 1fc: e9 aa 00 00 00 jmp 2ab - if(de.inum == 0) - 201: 0f b7 85 d0 fd ff ff movzwl -0x230(%ebp),%eax - 208: 66 85 c0 test %ax,%ax - 20b: 75 05 jne 212 - continue; - 20d: e9 99 00 00 00 jmp 2ab - memmove(p, de.name, DIRSIZ); - 212: 83 ec 04 sub $0x4,%esp - 215: 6a 0e push $0xe - 217: 8d 85 d0 fd ff ff lea -0x230(%ebp),%eax - 21d: 83 c0 02 add $0x2,%eax - 220: 50 push %eax - 221: ff 75 e0 pushl -0x20(%ebp) - 224: e8 2d 03 00 00 call 556 - 229: 83 c4 10 add $0x10,%esp - p[DIRSIZ] = 0; - 22c: 8b 45 e0 mov -0x20(%ebp),%eax - 22f: 83 c0 0e add $0xe,%eax - 232: c6 00 00 movb $0x0,(%eax) - if(stat(buf, &st) < 0){ - 235: 83 ec 08 sub $0x8,%esp - 238: 8d 85 bc fd ff ff lea -0x244(%ebp),%eax - 23e: 50 push %eax - 23f: 8d 85 e0 fd ff ff lea -0x220(%ebp),%eax - 245: 50 push %eax - 246: e8 71 02 00 00 call 4bc - 24b: 83 c4 10 add $0x10,%esp - 24e: 85 c0 test %eax,%eax - 250: 79 1b jns 26d - printf(1, "ls: cannot stat %s\n", buf); - 252: 83 ec 04 sub $0x4,%esp - 255: 8d 85 e0 fd ff ff lea -0x220(%ebp),%eax - 25b: 50 push %eax - 25c: 68 d8 0a 00 00 push $0xad8 - 261: 6a 01 push $0x1 - 263: e8 a8 04 00 00 call 710 - 268: 83 c4 10 add $0x10,%esp - continue; - 26b: eb 3e jmp 2ab - } - printf(1, "%s %d %d %d\n", fmtname(buf), st.type, st.ino, st.size); - 26d: 8b bd cc fd ff ff mov -0x234(%ebp),%edi - 273: 8b b5 c4 fd ff ff mov -0x23c(%ebp),%esi - 279: 0f b7 85 bc fd ff ff movzwl -0x244(%ebp),%eax - 280: 0f bf d8 movswl %ax,%ebx - 283: 83 ec 0c sub $0xc,%esp - 286: 8d 85 e0 fd ff ff lea -0x220(%ebp),%eax - 28c: 50 push %eax - 28d: e8 6e fd ff ff call 0 - 292: 83 c4 10 add $0x10,%esp - 295: 83 ec 08 sub $0x8,%esp - 298: 57 push %edi - 299: 56 push %esi - 29a: 53 push %ebx - 29b: 50 push %eax - 29c: 68 ec 0a 00 00 push $0xaec - 2a1: 6a 01 push $0x1 - 2a3: e8 68 04 00 00 call 710 - 2a8: 83 c4 20 add $0x20,%esp - break; - } - strcpy(buf, path); - p = buf+strlen(buf); - *p++ = '/'; - while(read(fd, &de, sizeof(de)) == sizeof(de)){ - 2ab: 83 ec 04 sub $0x4,%esp - 2ae: 6a 10 push $0x10 - 2b0: 8d 85 d0 fd ff ff lea -0x230(%ebp),%eax - 2b6: 50 push %eax - 2b7: ff 75 e4 pushl -0x1c(%ebp) - 2ba: e8 f4 02 00 00 call 5b3 - 2bf: 83 c4 10 add $0x10,%esp - 2c2: 83 f8 10 cmp $0x10,%eax - 2c5: 0f 84 36 ff ff ff je 201 - printf(1, "ls: cannot stat %s\n", buf); - continue; - } - printf(1, "%s %d %d %d\n", fmtname(buf), st.type, st.ino, st.size); - } - break; - 2cb: 90 nop - } - close(fd); - 2cc: 83 ec 0c sub $0xc,%esp - 2cf: ff 75 e4 pushl -0x1c(%ebp) - 2d2: e8 ec 02 00 00 call 5c3 - 2d7: 83 c4 10 add $0x10,%esp -} - 2da: 8d 65 f4 lea -0xc(%ebp),%esp - 2dd: 5b pop %ebx - 2de: 5e pop %esi - 2df: 5f pop %edi - 2e0: 5d pop %ebp - 2e1: c3 ret - -000002e2
: - -int -main(int argc, char *argv[]) -{ - 2e2: 8d 4c 24 04 lea 0x4(%esp),%ecx - 2e6: 83 e4 f0 and $0xfffffff0,%esp - 2e9: ff 71 fc pushl -0x4(%ecx) - 2ec: 55 push %ebp - 2ed: 89 e5 mov %esp,%ebp - 2ef: 53 push %ebx - 2f0: 51 push %ecx - 2f1: 83 ec 10 sub $0x10,%esp - 2f4: 89 cb mov %ecx,%ebx - int i; - - if(argc < 2){ - 2f6: 83 3b 01 cmpl $0x1,(%ebx) - 2f9: 7f 15 jg 310 - ls("."); - 2fb: 83 ec 0c sub $0xc,%esp - 2fe: 68 0c 0b 00 00 push $0xb0c - 303: e8 b0 fd ff ff call b8 - 308: 83 c4 10 add $0x10,%esp - exit(); - 30b: e8 8b 02 00 00 call 59b - } - for(i=1; i - ls(argv[i]); - 319: 8b 45 f4 mov -0xc(%ebp),%eax - 31c: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx - 323: 8b 43 04 mov 0x4(%ebx),%eax - 326: 01 d0 add %edx,%eax - 328: 8b 00 mov (%eax),%eax - 32a: 83 ec 0c sub $0xc,%esp - 32d: 50 push %eax - 32e: e8 85 fd ff ff call b8 - 333: 83 c4 10 add $0x10,%esp - - if(argc < 2){ - ls("."); - exit(); - } - for(i=1; i - ls(argv[i]); - exit(); - 341: e8 55 02 00 00 call 59b - -00000346 : - "cc"); -} - -static inline void -stosb(void *addr, int data, int cnt) -{ - 346: 55 push %ebp - 347: 89 e5 mov %esp,%ebp - 349: 57 push %edi - 34a: 53 push %ebx - asm volatile("cld; rep stosb" : - 34b: 8b 4d 08 mov 0x8(%ebp),%ecx - 34e: 8b 55 10 mov 0x10(%ebp),%edx - 351: 8b 45 0c mov 0xc(%ebp),%eax - 354: 89 cb mov %ecx,%ebx - 356: 89 df mov %ebx,%edi - 358: 89 d1 mov %edx,%ecx - 35a: fc cld - 35b: f3 aa rep stos %al,%es:(%edi) - 35d: 89 ca mov %ecx,%edx - 35f: 89 fb mov %edi,%ebx - 361: 89 5d 08 mov %ebx,0x8(%ebp) - 364: 89 55 10 mov %edx,0x10(%ebp) - "=D" (addr), "=c" (cnt) : - "0" (addr), "1" (cnt), "a" (data) : - "memory", "cc"); -} - 367: 5b pop %ebx - 368: 5f pop %edi - 369: 5d pop %ebp - 36a: c3 ret - -0000036b : -#include "user.h" -#include "x86.h" - -char* -strcpy(char *s, char *t) -{ - 36b: 55 push %ebp - 36c: 89 e5 mov %esp,%ebp - 36e: 83 ec 10 sub $0x10,%esp - char *os; - - os = s; - 371: 8b 45 08 mov 0x8(%ebp),%eax - 374: 89 45 fc mov %eax,-0x4(%ebp) - while((*s++ = *t++) != 0) - 377: 90 nop - 378: 8b 45 08 mov 0x8(%ebp),%eax - 37b: 8d 50 01 lea 0x1(%eax),%edx - 37e: 89 55 08 mov %edx,0x8(%ebp) - 381: 8b 55 0c mov 0xc(%ebp),%edx - 384: 8d 4a 01 lea 0x1(%edx),%ecx - 387: 89 4d 0c mov %ecx,0xc(%ebp) - 38a: 0f b6 12 movzbl (%edx),%edx - 38d: 88 10 mov %dl,(%eax) - 38f: 0f b6 00 movzbl (%eax),%eax - 392: 84 c0 test %al,%al - 394: 75 e2 jne 378 - ; - return os; - 396: 8b 45 fc mov -0x4(%ebp),%eax -} - 399: c9 leave - 39a: c3 ret - -0000039b : - -int -strcmp(const char *p, const char *q) -{ - 39b: 55 push %ebp - 39c: 89 e5 mov %esp,%ebp - while(*p && *p == *q) - 39e: eb 08 jmp 3a8 - p++, q++; - 3a0: 83 45 08 01 addl $0x1,0x8(%ebp) - 3a4: 83 45 0c 01 addl $0x1,0xc(%ebp) -} - -int -strcmp(const char *p, const char *q) -{ - while(*p && *p == *q) - 3a8: 8b 45 08 mov 0x8(%ebp),%eax - 3ab: 0f b6 00 movzbl (%eax),%eax - 3ae: 84 c0 test %al,%al - 3b0: 74 10 je 3c2 - 3b2: 8b 45 08 mov 0x8(%ebp),%eax - 3b5: 0f b6 10 movzbl (%eax),%edx - 3b8: 8b 45 0c mov 0xc(%ebp),%eax - 3bb: 0f b6 00 movzbl (%eax),%eax - 3be: 38 c2 cmp %al,%dl - 3c0: 74 de je 3a0 - p++, q++; - return (uchar)*p - (uchar)*q; - 3c2: 8b 45 08 mov 0x8(%ebp),%eax - 3c5: 0f b6 00 movzbl (%eax),%eax - 3c8: 0f b6 d0 movzbl %al,%edx - 3cb: 8b 45 0c mov 0xc(%ebp),%eax - 3ce: 0f b6 00 movzbl (%eax),%eax - 3d1: 0f b6 c0 movzbl %al,%eax - 3d4: 29 c2 sub %eax,%edx - 3d6: 89 d0 mov %edx,%eax -} - 3d8: 5d pop %ebp - 3d9: c3 ret - -000003da : - -uint -strlen(char *s) -{ - 3da: 55 push %ebp - 3db: 89 e5 mov %esp,%ebp - 3dd: 83 ec 10 sub $0x10,%esp - int n; - - for(n = 0; s[n]; n++) - 3e0: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - 3e7: eb 04 jmp 3ed - 3e9: 83 45 fc 01 addl $0x1,-0x4(%ebp) - 3ed: 8b 55 fc mov -0x4(%ebp),%edx - 3f0: 8b 45 08 mov 0x8(%ebp),%eax - 3f3: 01 d0 add %edx,%eax - 3f5: 0f b6 00 movzbl (%eax),%eax - 3f8: 84 c0 test %al,%al - 3fa: 75 ed jne 3e9 - ; - return n; - 3fc: 8b 45 fc mov -0x4(%ebp),%eax -} - 3ff: c9 leave - 400: c3 ret - -00000401 : - -void* -memset(void *dst, int c, uint n) -{ - 401: 55 push %ebp - 402: 89 e5 mov %esp,%ebp - stosb(dst, c, n); - 404: 8b 45 10 mov 0x10(%ebp),%eax - 407: 50 push %eax - 408: ff 75 0c pushl 0xc(%ebp) - 40b: ff 75 08 pushl 0x8(%ebp) - 40e: e8 33 ff ff ff call 346 - 413: 83 c4 0c add $0xc,%esp - return dst; - 416: 8b 45 08 mov 0x8(%ebp),%eax -} - 419: c9 leave - 41a: c3 ret - -0000041b : - -char* -strchr(const char *s, char c) -{ - 41b: 55 push %ebp - 41c: 89 e5 mov %esp,%ebp - 41e: 83 ec 04 sub $0x4,%esp - 421: 8b 45 0c mov 0xc(%ebp),%eax - 424: 88 45 fc mov %al,-0x4(%ebp) - for(; *s; s++) - 427: eb 14 jmp 43d - if(*s == c) - 429: 8b 45 08 mov 0x8(%ebp),%eax - 42c: 0f b6 00 movzbl (%eax),%eax - 42f: 3a 45 fc cmp -0x4(%ebp),%al - 432: 75 05 jne 439 - return (char*)s; - 434: 8b 45 08 mov 0x8(%ebp),%eax - 437: eb 13 jmp 44c -} - -char* -strchr(const char *s, char c) -{ - for(; *s; s++) - 439: 83 45 08 01 addl $0x1,0x8(%ebp) - 43d: 8b 45 08 mov 0x8(%ebp),%eax - 440: 0f b6 00 movzbl (%eax),%eax - 443: 84 c0 test %al,%al - 445: 75 e2 jne 429 - if(*s == c) - return (char*)s; - return 0; - 447: b8 00 00 00 00 mov $0x0,%eax -} - 44c: c9 leave - 44d: c3 ret - -0000044e : - -char* -gets(char *buf, int max) -{ - 44e: 55 push %ebp - 44f: 89 e5 mov %esp,%ebp - 451: 83 ec 18 sub $0x18,%esp - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - 454: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 45b: eb 44 jmp 4a1 - cc = read(0, &c, 1); - 45d: 83 ec 04 sub $0x4,%esp - 460: 6a 01 push $0x1 - 462: 8d 45 ef lea -0x11(%ebp),%eax - 465: 50 push %eax - 466: 6a 00 push $0x0 - 468: e8 46 01 00 00 call 5b3 - 46d: 83 c4 10 add $0x10,%esp - 470: 89 45 f0 mov %eax,-0x10(%ebp) - if(cc < 1) - 473: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 477: 7f 02 jg 47b - break; - 479: eb 31 jmp 4ac - buf[i++] = c; - 47b: 8b 45 f4 mov -0xc(%ebp),%eax - 47e: 8d 50 01 lea 0x1(%eax),%edx - 481: 89 55 f4 mov %edx,-0xc(%ebp) - 484: 89 c2 mov %eax,%edx - 486: 8b 45 08 mov 0x8(%ebp),%eax - 489: 01 c2 add %eax,%edx - 48b: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 48f: 88 02 mov %al,(%edx) - if(c == '\n' || c == '\r') - 491: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 495: 3c 0a cmp $0xa,%al - 497: 74 13 je 4ac - 499: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 49d: 3c 0d cmp $0xd,%al - 49f: 74 0b je 4ac -gets(char *buf, int max) -{ - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - 4a1: 8b 45 f4 mov -0xc(%ebp),%eax - 4a4: 83 c0 01 add $0x1,%eax - 4a7: 3b 45 0c cmp 0xc(%ebp),%eax - 4aa: 7c b1 jl 45d - break; - buf[i++] = c; - if(c == '\n' || c == '\r') - break; - } - buf[i] = '\0'; - 4ac: 8b 55 f4 mov -0xc(%ebp),%edx - 4af: 8b 45 08 mov 0x8(%ebp),%eax - 4b2: 01 d0 add %edx,%eax - 4b4: c6 00 00 movb $0x0,(%eax) - return buf; - 4b7: 8b 45 08 mov 0x8(%ebp),%eax -} - 4ba: c9 leave - 4bb: c3 ret - -000004bc : - -int -stat(char *n, struct stat *st) -{ - 4bc: 55 push %ebp - 4bd: 89 e5 mov %esp,%ebp - 4bf: 83 ec 18 sub $0x18,%esp - int fd; - int r; - - fd = open(n, O_RDONLY); - 4c2: 83 ec 08 sub $0x8,%esp - 4c5: 6a 00 push $0x0 - 4c7: ff 75 08 pushl 0x8(%ebp) - 4ca: e8 0c 01 00 00 call 5db - 4cf: 83 c4 10 add $0x10,%esp - 4d2: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd < 0) - 4d5: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 4d9: 79 07 jns 4e2 - return -1; - 4db: b8 ff ff ff ff mov $0xffffffff,%eax - 4e0: eb 25 jmp 507 - r = fstat(fd, st); - 4e2: 83 ec 08 sub $0x8,%esp - 4e5: ff 75 0c pushl 0xc(%ebp) - 4e8: ff 75 f4 pushl -0xc(%ebp) - 4eb: e8 03 01 00 00 call 5f3 - 4f0: 83 c4 10 add $0x10,%esp - 4f3: 89 45 f0 mov %eax,-0x10(%ebp) - close(fd); - 4f6: 83 ec 0c sub $0xc,%esp - 4f9: ff 75 f4 pushl -0xc(%ebp) - 4fc: e8 c2 00 00 00 call 5c3 - 501: 83 c4 10 add $0x10,%esp - return r; - 504: 8b 45 f0 mov -0x10(%ebp),%eax -} - 507: c9 leave - 508: c3 ret - -00000509 : - -int -atoi(const char *s) -{ - 509: 55 push %ebp - 50a: 89 e5 mov %esp,%ebp - 50c: 83 ec 10 sub $0x10,%esp - int n; - - n = 0; - 50f: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - while('0' <= *s && *s <= '9') - 516: eb 25 jmp 53d - n = n*10 + *s++ - '0'; - 518: 8b 55 fc mov -0x4(%ebp),%edx - 51b: 89 d0 mov %edx,%eax - 51d: c1 e0 02 shl $0x2,%eax - 520: 01 d0 add %edx,%eax - 522: 01 c0 add %eax,%eax - 524: 89 c1 mov %eax,%ecx - 526: 8b 45 08 mov 0x8(%ebp),%eax - 529: 8d 50 01 lea 0x1(%eax),%edx - 52c: 89 55 08 mov %edx,0x8(%ebp) - 52f: 0f b6 00 movzbl (%eax),%eax - 532: 0f be c0 movsbl %al,%eax - 535: 01 c8 add %ecx,%eax - 537: 83 e8 30 sub $0x30,%eax - 53a: 89 45 fc mov %eax,-0x4(%ebp) -atoi(const char *s) -{ - int n; - - n = 0; - while('0' <= *s && *s <= '9') - 53d: 8b 45 08 mov 0x8(%ebp),%eax - 540: 0f b6 00 movzbl (%eax),%eax - 543: 3c 2f cmp $0x2f,%al - 545: 7e 0a jle 551 - 547: 8b 45 08 mov 0x8(%ebp),%eax - 54a: 0f b6 00 movzbl (%eax),%eax - 54d: 3c 39 cmp $0x39,%al - 54f: 7e c7 jle 518 - n = n*10 + *s++ - '0'; - return n; - 551: 8b 45 fc mov -0x4(%ebp),%eax -} - 554: c9 leave - 555: c3 ret - -00000556 : - -void* -memmove(void *vdst, void *vsrc, int n) -{ - 556: 55 push %ebp - 557: 89 e5 mov %esp,%ebp - 559: 83 ec 10 sub $0x10,%esp - char *dst, *src; - - dst = vdst; - 55c: 8b 45 08 mov 0x8(%ebp),%eax - 55f: 89 45 fc mov %eax,-0x4(%ebp) - src = vsrc; - 562: 8b 45 0c mov 0xc(%ebp),%eax - 565: 89 45 f8 mov %eax,-0x8(%ebp) - while(n-- > 0) - 568: eb 17 jmp 581 - *dst++ = *src++; - 56a: 8b 45 fc mov -0x4(%ebp),%eax - 56d: 8d 50 01 lea 0x1(%eax),%edx - 570: 89 55 fc mov %edx,-0x4(%ebp) - 573: 8b 55 f8 mov -0x8(%ebp),%edx - 576: 8d 4a 01 lea 0x1(%edx),%ecx - 579: 89 4d f8 mov %ecx,-0x8(%ebp) - 57c: 0f b6 12 movzbl (%edx),%edx - 57f: 88 10 mov %dl,(%eax) -{ - char *dst, *src; - - dst = vdst; - src = vsrc; - while(n-- > 0) - 581: 8b 45 10 mov 0x10(%ebp),%eax - 584: 8d 50 ff lea -0x1(%eax),%edx - 587: 89 55 10 mov %edx,0x10(%ebp) - 58a: 85 c0 test %eax,%eax - 58c: 7f dc jg 56a - *dst++ = *src++; - return vdst; - 58e: 8b 45 08 mov 0x8(%ebp),%eax -} - 591: c9 leave - 592: c3 ret - -00000593 : - name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 593: b8 01 00 00 00 mov $0x1,%eax - 598: cd 40 int $0x40 - 59a: c3 ret - -0000059b : -SYSCALL(exit) - 59b: b8 02 00 00 00 mov $0x2,%eax - 5a0: cd 40 int $0x40 - 5a2: c3 ret - -000005a3 : -SYSCALL(wait) - 5a3: b8 03 00 00 00 mov $0x3,%eax - 5a8: cd 40 int $0x40 - 5aa: c3 ret - -000005ab : -SYSCALL(pipe) - 5ab: b8 04 00 00 00 mov $0x4,%eax - 5b0: cd 40 int $0x40 - 5b2: c3 ret - -000005b3 : -SYSCALL(read) - 5b3: b8 05 00 00 00 mov $0x5,%eax - 5b8: cd 40 int $0x40 - 5ba: c3 ret - -000005bb : -SYSCALL(write) - 5bb: b8 10 00 00 00 mov $0x10,%eax - 5c0: cd 40 int $0x40 - 5c2: c3 ret - -000005c3 : -SYSCALL(close) - 5c3: b8 15 00 00 00 mov $0x15,%eax - 5c8: cd 40 int $0x40 - 5ca: c3 ret - -000005cb : -SYSCALL(kill) - 5cb: b8 06 00 00 00 mov $0x6,%eax - 5d0: cd 40 int $0x40 - 5d2: c3 ret - -000005d3 : -SYSCALL(exec) - 5d3: b8 07 00 00 00 mov $0x7,%eax - 5d8: cd 40 int $0x40 - 5da: c3 ret - -000005db : -SYSCALL(open) - 5db: b8 0f 00 00 00 mov $0xf,%eax - 5e0: cd 40 int $0x40 - 5e2: c3 ret - -000005e3 : -SYSCALL(mknod) - 5e3: b8 11 00 00 00 mov $0x11,%eax - 5e8: cd 40 int $0x40 - 5ea: c3 ret - -000005eb : -SYSCALL(unlink) - 5eb: b8 12 00 00 00 mov $0x12,%eax - 5f0: cd 40 int $0x40 - 5f2: c3 ret - -000005f3 : -SYSCALL(fstat) - 5f3: b8 08 00 00 00 mov $0x8,%eax - 5f8: cd 40 int $0x40 - 5fa: c3 ret - -000005fb : -SYSCALL(link) - 5fb: b8 13 00 00 00 mov $0x13,%eax - 600: cd 40 int $0x40 - 602: c3 ret - -00000603 : -SYSCALL(mkdir) - 603: b8 14 00 00 00 mov $0x14,%eax - 608: cd 40 int $0x40 - 60a: c3 ret - -0000060b : -SYSCALL(chdir) - 60b: b8 09 00 00 00 mov $0x9,%eax - 610: cd 40 int $0x40 - 612: c3 ret - -00000613 : -SYSCALL(dup) - 613: b8 0a 00 00 00 mov $0xa,%eax - 618: cd 40 int $0x40 - 61a: c3 ret - -0000061b : -SYSCALL(getpid) - 61b: b8 0b 00 00 00 mov $0xb,%eax - 620: cd 40 int $0x40 - 622: c3 ret - -00000623 : -SYSCALL(sbrk) - 623: b8 0c 00 00 00 mov $0xc,%eax - 628: cd 40 int $0x40 - 62a: c3 ret - -0000062b : -SYSCALL(sleep) - 62b: b8 0d 00 00 00 mov $0xd,%eax - 630: cd 40 int $0x40 - 632: c3 ret - -00000633 : -SYSCALL(uptime) - 633: b8 0e 00 00 00 mov $0xe,%eax - 638: cd 40 int $0x40 - 63a: c3 ret - -0000063b : -#include "stat.h" -#include "user.h" - -static void -putc(int fd, char c) -{ - 63b: 55 push %ebp - 63c: 89 e5 mov %esp,%ebp - 63e: 83 ec 18 sub $0x18,%esp - 641: 8b 45 0c mov 0xc(%ebp),%eax - 644: 88 45 f4 mov %al,-0xc(%ebp) - write(fd, &c, 1); - 647: 83 ec 04 sub $0x4,%esp - 64a: 6a 01 push $0x1 - 64c: 8d 45 f4 lea -0xc(%ebp),%eax - 64f: 50 push %eax - 650: ff 75 08 pushl 0x8(%ebp) - 653: e8 63 ff ff ff call 5bb - 658: 83 c4 10 add $0x10,%esp -} - 65b: c9 leave - 65c: c3 ret - -0000065d : - -static void -printint(int fd, int xx, int base, int sgn) -{ - 65d: 55 push %ebp - 65e: 89 e5 mov %esp,%ebp - 660: 53 push %ebx - 661: 83 ec 24 sub $0x24,%esp - static char digits[] = "0123456789ABCDEF"; - char buf[16]; - int i, neg; - uint x; - - neg = 0; - 664: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - if(sgn && xx < 0){ - 66b: 83 7d 14 00 cmpl $0x0,0x14(%ebp) - 66f: 74 17 je 688 - 671: 83 7d 0c 00 cmpl $0x0,0xc(%ebp) - 675: 79 11 jns 688 - neg = 1; - 677: c7 45 f0 01 00 00 00 movl $0x1,-0x10(%ebp) - x = -xx; - 67e: 8b 45 0c mov 0xc(%ebp),%eax - 681: f7 d8 neg %eax - 683: 89 45 ec mov %eax,-0x14(%ebp) - 686: eb 06 jmp 68e - } else { - x = xx; - 688: 8b 45 0c mov 0xc(%ebp),%eax - 68b: 89 45 ec mov %eax,-0x14(%ebp) - } - - i = 0; - 68e: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - do{ - buf[i++] = digits[x % base]; - 695: 8b 4d f4 mov -0xc(%ebp),%ecx - 698: 8d 41 01 lea 0x1(%ecx),%eax - 69b: 89 45 f4 mov %eax,-0xc(%ebp) - 69e: 8b 5d 10 mov 0x10(%ebp),%ebx - 6a1: 8b 45 ec mov -0x14(%ebp),%eax - 6a4: ba 00 00 00 00 mov $0x0,%edx - 6a9: f7 f3 div %ebx - 6ab: 89 d0 mov %edx,%eax - 6ad: 0f b6 80 b8 0d 00 00 movzbl 0xdb8(%eax),%eax - 6b4: 88 44 0d dc mov %al,-0x24(%ebp,%ecx,1) - }while((x /= base) != 0); - 6b8: 8b 5d 10 mov 0x10(%ebp),%ebx - 6bb: 8b 45 ec mov -0x14(%ebp),%eax - 6be: ba 00 00 00 00 mov $0x0,%edx - 6c3: f7 f3 div %ebx - 6c5: 89 45 ec mov %eax,-0x14(%ebp) - 6c8: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 6cc: 75 c7 jne 695 - if(neg) - 6ce: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 6d2: 74 0e je 6e2 - buf[i++] = '-'; - 6d4: 8b 45 f4 mov -0xc(%ebp),%eax - 6d7: 8d 50 01 lea 0x1(%eax),%edx - 6da: 89 55 f4 mov %edx,-0xc(%ebp) - 6dd: c6 44 05 dc 2d movb $0x2d,-0x24(%ebp,%eax,1) - - while(--i >= 0) - 6e2: eb 1d jmp 701 - putc(fd, buf[i]); - 6e4: 8d 55 dc lea -0x24(%ebp),%edx - 6e7: 8b 45 f4 mov -0xc(%ebp),%eax - 6ea: 01 d0 add %edx,%eax - 6ec: 0f b6 00 movzbl (%eax),%eax - 6ef: 0f be c0 movsbl %al,%eax - 6f2: 83 ec 08 sub $0x8,%esp - 6f5: 50 push %eax - 6f6: ff 75 08 pushl 0x8(%ebp) - 6f9: e8 3d ff ff ff call 63b - 6fe: 83 c4 10 add $0x10,%esp - buf[i++] = digits[x % base]; - }while((x /= base) != 0); - if(neg) - buf[i++] = '-'; - - while(--i >= 0) - 701: 83 6d f4 01 subl $0x1,-0xc(%ebp) - 705: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 709: 79 d9 jns 6e4 - putc(fd, buf[i]); -} - 70b: 8b 5d fc mov -0x4(%ebp),%ebx - 70e: c9 leave - 70f: c3 ret - -00000710 : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void -printf(int fd, char *fmt, ...) -{ - 710: 55 push %ebp - 711: 89 e5 mov %esp,%ebp - 713: 83 ec 28 sub $0x28,%esp - char *s; - int c, i, state; - uint *ap; - - state = 0; - 716: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - ap = (uint*)(void*)&fmt + 1; - 71d: 8d 45 0c lea 0xc(%ebp),%eax - 720: 83 c0 04 add $0x4,%eax - 723: 89 45 e8 mov %eax,-0x18(%ebp) - for(i = 0; fmt[i]; i++){ - 726: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - 72d: e9 59 01 00 00 jmp 88b - c = fmt[i] & 0xff; - 732: 8b 55 0c mov 0xc(%ebp),%edx - 735: 8b 45 f0 mov -0x10(%ebp),%eax - 738: 01 d0 add %edx,%eax - 73a: 0f b6 00 movzbl (%eax),%eax - 73d: 0f be c0 movsbl %al,%eax - 740: 25 ff 00 00 00 and $0xff,%eax - 745: 89 45 e4 mov %eax,-0x1c(%ebp) - if(state == 0){ - 748: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 74c: 75 2c jne 77a - if(c == '%'){ - 74e: 83 7d e4 25 cmpl $0x25,-0x1c(%ebp) - 752: 75 0c jne 760 - state = '%'; - 754: c7 45 ec 25 00 00 00 movl $0x25,-0x14(%ebp) - 75b: e9 27 01 00 00 jmp 887 - } else { - putc(fd, c); - 760: 8b 45 e4 mov -0x1c(%ebp),%eax - 763: 0f be c0 movsbl %al,%eax - 766: 83 ec 08 sub $0x8,%esp - 769: 50 push %eax - 76a: ff 75 08 pushl 0x8(%ebp) - 76d: e8 c9 fe ff ff call 63b - 772: 83 c4 10 add $0x10,%esp - 775: e9 0d 01 00 00 jmp 887 - } - } else if(state == '%'){ - 77a: 83 7d ec 25 cmpl $0x25,-0x14(%ebp) - 77e: 0f 85 03 01 00 00 jne 887 - if(c == 'd'){ - 784: 83 7d e4 64 cmpl $0x64,-0x1c(%ebp) - 788: 75 1e jne 7a8 - printint(fd, *ap, 10, 1); - 78a: 8b 45 e8 mov -0x18(%ebp),%eax - 78d: 8b 00 mov (%eax),%eax - 78f: 6a 01 push $0x1 - 791: 6a 0a push $0xa - 793: 50 push %eax - 794: ff 75 08 pushl 0x8(%ebp) - 797: e8 c1 fe ff ff call 65d - 79c: 83 c4 10 add $0x10,%esp - ap++; - 79f: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 7a3: e9 d8 00 00 00 jmp 880 - } else if(c == 'x' || c == 'p'){ - 7a8: 83 7d e4 78 cmpl $0x78,-0x1c(%ebp) - 7ac: 74 06 je 7b4 - 7ae: 83 7d e4 70 cmpl $0x70,-0x1c(%ebp) - 7b2: 75 1e jne 7d2 - printint(fd, *ap, 16, 0); - 7b4: 8b 45 e8 mov -0x18(%ebp),%eax - 7b7: 8b 00 mov (%eax),%eax - 7b9: 6a 00 push $0x0 - 7bb: 6a 10 push $0x10 - 7bd: 50 push %eax - 7be: ff 75 08 pushl 0x8(%ebp) - 7c1: e8 97 fe ff ff call 65d - 7c6: 83 c4 10 add $0x10,%esp - ap++; - 7c9: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 7cd: e9 ae 00 00 00 jmp 880 - } else if(c == 's'){ - 7d2: 83 7d e4 73 cmpl $0x73,-0x1c(%ebp) - 7d6: 75 43 jne 81b - s = (char*)*ap; - 7d8: 8b 45 e8 mov -0x18(%ebp),%eax - 7db: 8b 00 mov (%eax),%eax - 7dd: 89 45 f4 mov %eax,-0xc(%ebp) - ap++; - 7e0: 83 45 e8 04 addl $0x4,-0x18(%ebp) - if(s == 0) - 7e4: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 7e8: 75 07 jne 7f1 - s = "(null)"; - 7ea: c7 45 f4 0e 0b 00 00 movl $0xb0e,-0xc(%ebp) - while(*s != 0){ - 7f1: eb 1c jmp 80f - putc(fd, *s); - 7f3: 8b 45 f4 mov -0xc(%ebp),%eax - 7f6: 0f b6 00 movzbl (%eax),%eax - 7f9: 0f be c0 movsbl %al,%eax - 7fc: 83 ec 08 sub $0x8,%esp - 7ff: 50 push %eax - 800: ff 75 08 pushl 0x8(%ebp) - 803: e8 33 fe ff ff call 63b - 808: 83 c4 10 add $0x10,%esp - s++; - 80b: 83 45 f4 01 addl $0x1,-0xc(%ebp) - } else if(c == 's'){ - s = (char*)*ap; - ap++; - if(s == 0) - s = "(null)"; - while(*s != 0){ - 80f: 8b 45 f4 mov -0xc(%ebp),%eax - 812: 0f b6 00 movzbl (%eax),%eax - 815: 84 c0 test %al,%al - 817: 75 da jne 7f3 - 819: eb 65 jmp 880 - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 81b: 83 7d e4 63 cmpl $0x63,-0x1c(%ebp) - 81f: 75 1d jne 83e - putc(fd, *ap); - 821: 8b 45 e8 mov -0x18(%ebp),%eax - 824: 8b 00 mov (%eax),%eax - 826: 0f be c0 movsbl %al,%eax - 829: 83 ec 08 sub $0x8,%esp - 82c: 50 push %eax - 82d: ff 75 08 pushl 0x8(%ebp) - 830: e8 06 fe ff ff call 63b - 835: 83 c4 10 add $0x10,%esp - ap++; - 838: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 83c: eb 42 jmp 880 - } else if(c == '%'){ - 83e: 83 7d e4 25 cmpl $0x25,-0x1c(%ebp) - 842: 75 17 jne 85b - putc(fd, c); - 844: 8b 45 e4 mov -0x1c(%ebp),%eax - 847: 0f be c0 movsbl %al,%eax - 84a: 83 ec 08 sub $0x8,%esp - 84d: 50 push %eax - 84e: ff 75 08 pushl 0x8(%ebp) - 851: e8 e5 fd ff ff call 63b - 856: 83 c4 10 add $0x10,%esp - 859: eb 25 jmp 880 - } else { - // Unknown % sequence. Print it to draw attention. - putc(fd, '%'); - 85b: 83 ec 08 sub $0x8,%esp - 85e: 6a 25 push $0x25 - 860: ff 75 08 pushl 0x8(%ebp) - 863: e8 d3 fd ff ff call 63b - 868: 83 c4 10 add $0x10,%esp - putc(fd, c); - 86b: 8b 45 e4 mov -0x1c(%ebp),%eax - 86e: 0f be c0 movsbl %al,%eax - 871: 83 ec 08 sub $0x8,%esp - 874: 50 push %eax - 875: ff 75 08 pushl 0x8(%ebp) - 878: e8 be fd ff ff call 63b - 87d: 83 c4 10 add $0x10,%esp - } - state = 0; - 880: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for(i = 0; fmt[i]; i++){ - 887: 83 45 f0 01 addl $0x1,-0x10(%ebp) - 88b: 8b 55 0c mov 0xc(%ebp),%edx - 88e: 8b 45 f0 mov -0x10(%ebp),%eax - 891: 01 d0 add %edx,%eax - 893: 0f b6 00 movzbl (%eax),%eax - 896: 84 c0 test %al,%al - 898: 0f 85 94 fe ff ff jne 732 - putc(fd, c); - } - state = 0; - } - } -} - 89e: c9 leave - 89f: c3 ret - -000008a0 : -static Header base; -static Header *freep; - -void -free(void *ap) -{ - 8a0: 55 push %ebp - 8a1: 89 e5 mov %esp,%ebp - 8a3: 83 ec 10 sub $0x10,%esp - Header *bp, *p; - - bp = (Header*)ap - 1; - 8a6: 8b 45 08 mov 0x8(%ebp),%eax - 8a9: 83 e8 08 sub $0x8,%eax - 8ac: 89 45 f8 mov %eax,-0x8(%ebp) - for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 8af: a1 e4 0d 00 00 mov 0xde4,%eax - 8b4: 89 45 fc mov %eax,-0x4(%ebp) - 8b7: eb 24 jmp 8dd - if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 8b9: 8b 45 fc mov -0x4(%ebp),%eax - 8bc: 8b 00 mov (%eax),%eax - 8be: 3b 45 fc cmp -0x4(%ebp),%eax - 8c1: 77 12 ja 8d5 - 8c3: 8b 45 f8 mov -0x8(%ebp),%eax - 8c6: 3b 45 fc cmp -0x4(%ebp),%eax - 8c9: 77 24 ja 8ef - 8cb: 8b 45 fc mov -0x4(%ebp),%eax - 8ce: 8b 00 mov (%eax),%eax - 8d0: 3b 45 f8 cmp -0x8(%ebp),%eax - 8d3: 77 1a ja 8ef -free(void *ap) -{ - Header *bp, *p; - - bp = (Header*)ap - 1; - for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 8d5: 8b 45 fc mov -0x4(%ebp),%eax - 8d8: 8b 00 mov (%eax),%eax - 8da: 89 45 fc mov %eax,-0x4(%ebp) - 8dd: 8b 45 f8 mov -0x8(%ebp),%eax - 8e0: 3b 45 fc cmp -0x4(%ebp),%eax - 8e3: 76 d4 jbe 8b9 - 8e5: 8b 45 fc mov -0x4(%ebp),%eax - 8e8: 8b 00 mov (%eax),%eax - 8ea: 3b 45 f8 cmp -0x8(%ebp),%eax - 8ed: 76 ca jbe 8b9 - if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - break; - if(bp + bp->s.size == p->s.ptr){ - 8ef: 8b 45 f8 mov -0x8(%ebp),%eax - 8f2: 8b 40 04 mov 0x4(%eax),%eax - 8f5: 8d 14 c5 00 00 00 00 lea 0x0(,%eax,8),%edx - 8fc: 8b 45 f8 mov -0x8(%ebp),%eax - 8ff: 01 c2 add %eax,%edx - 901: 8b 45 fc mov -0x4(%ebp),%eax - 904: 8b 00 mov (%eax),%eax - 906: 39 c2 cmp %eax,%edx - 908: 75 24 jne 92e - bp->s.size += p->s.ptr->s.size; - 90a: 8b 45 f8 mov -0x8(%ebp),%eax - 90d: 8b 50 04 mov 0x4(%eax),%edx - 910: 8b 45 fc mov -0x4(%ebp),%eax - 913: 8b 00 mov (%eax),%eax - 915: 8b 40 04 mov 0x4(%eax),%eax - 918: 01 c2 add %eax,%edx - 91a: 8b 45 f8 mov -0x8(%ebp),%eax - 91d: 89 50 04 mov %edx,0x4(%eax) - bp->s.ptr = p->s.ptr->s.ptr; - 920: 8b 45 fc mov -0x4(%ebp),%eax - 923: 8b 00 mov (%eax),%eax - 925: 8b 10 mov (%eax),%edx - 927: 8b 45 f8 mov -0x8(%ebp),%eax - 92a: 89 10 mov %edx,(%eax) - 92c: eb 0a jmp 938 - } else - bp->s.ptr = p->s.ptr; - 92e: 8b 45 fc mov -0x4(%ebp),%eax - 931: 8b 10 mov (%eax),%edx - 933: 8b 45 f8 mov -0x8(%ebp),%eax - 936: 89 10 mov %edx,(%eax) - if(p + p->s.size == bp){ - 938: 8b 45 fc mov -0x4(%ebp),%eax - 93b: 8b 40 04 mov 0x4(%eax),%eax - 93e: 8d 14 c5 00 00 00 00 lea 0x0(,%eax,8),%edx - 945: 8b 45 fc mov -0x4(%ebp),%eax - 948: 01 d0 add %edx,%eax - 94a: 3b 45 f8 cmp -0x8(%ebp),%eax - 94d: 75 20 jne 96f - p->s.size += bp->s.size; - 94f: 8b 45 fc mov -0x4(%ebp),%eax - 952: 8b 50 04 mov 0x4(%eax),%edx - 955: 8b 45 f8 mov -0x8(%ebp),%eax - 958: 8b 40 04 mov 0x4(%eax),%eax - 95b: 01 c2 add %eax,%edx - 95d: 8b 45 fc mov -0x4(%ebp),%eax - 960: 89 50 04 mov %edx,0x4(%eax) - p->s.ptr = bp->s.ptr; - 963: 8b 45 f8 mov -0x8(%ebp),%eax - 966: 8b 10 mov (%eax),%edx - 968: 8b 45 fc mov -0x4(%ebp),%eax - 96b: 89 10 mov %edx,(%eax) - 96d: eb 08 jmp 977 - } else - p->s.ptr = bp; - 96f: 8b 45 fc mov -0x4(%ebp),%eax - 972: 8b 55 f8 mov -0x8(%ebp),%edx - 975: 89 10 mov %edx,(%eax) - freep = p; - 977: 8b 45 fc mov -0x4(%ebp),%eax - 97a: a3 e4 0d 00 00 mov %eax,0xde4 -} - 97f: c9 leave - 980: c3 ret - -00000981 : - -static Header* -morecore(uint nu) -{ - 981: 55 push %ebp - 982: 89 e5 mov %esp,%ebp - 984: 83 ec 18 sub $0x18,%esp - char *p; - Header *hp; - - if(nu < 4096) - 987: 81 7d 08 ff 0f 00 00 cmpl $0xfff,0x8(%ebp) - 98e: 77 07 ja 997 - nu = 4096; - 990: c7 45 08 00 10 00 00 movl $0x1000,0x8(%ebp) - p = sbrk(nu * sizeof(Header)); - 997: 8b 45 08 mov 0x8(%ebp),%eax - 99a: c1 e0 03 shl $0x3,%eax - 99d: 83 ec 0c sub $0xc,%esp - 9a0: 50 push %eax - 9a1: e8 7d fc ff ff call 623 - 9a6: 83 c4 10 add $0x10,%esp - 9a9: 89 45 f4 mov %eax,-0xc(%ebp) - if(p == (char*)-1) - 9ac: 83 7d f4 ff cmpl $0xffffffff,-0xc(%ebp) - 9b0: 75 07 jne 9b9 - return 0; - 9b2: b8 00 00 00 00 mov $0x0,%eax - 9b7: eb 26 jmp 9df - hp = (Header*)p; - 9b9: 8b 45 f4 mov -0xc(%ebp),%eax - 9bc: 89 45 f0 mov %eax,-0x10(%ebp) - hp->s.size = nu; - 9bf: 8b 45 f0 mov -0x10(%ebp),%eax - 9c2: 8b 55 08 mov 0x8(%ebp),%edx - 9c5: 89 50 04 mov %edx,0x4(%eax) - free((void*)(hp + 1)); - 9c8: 8b 45 f0 mov -0x10(%ebp),%eax - 9cb: 83 c0 08 add $0x8,%eax - 9ce: 83 ec 0c sub $0xc,%esp - 9d1: 50 push %eax - 9d2: e8 c9 fe ff ff call 8a0 - 9d7: 83 c4 10 add $0x10,%esp - return freep; - 9da: a1 e4 0d 00 00 mov 0xde4,%eax -} - 9df: c9 leave - 9e0: c3 ret - -000009e1 : - -void* -malloc(uint nbytes) -{ - 9e1: 55 push %ebp - 9e2: 89 e5 mov %esp,%ebp - 9e4: 83 ec 18 sub $0x18,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 9e7: 8b 45 08 mov 0x8(%ebp),%eax - 9ea: 83 c0 07 add $0x7,%eax - 9ed: c1 e8 03 shr $0x3,%eax - 9f0: 83 c0 01 add $0x1,%eax - 9f3: 89 45 ec mov %eax,-0x14(%ebp) - if((prevp = freep) == 0){ - 9f6: a1 e4 0d 00 00 mov 0xde4,%eax - 9fb: 89 45 f0 mov %eax,-0x10(%ebp) - 9fe: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - a02: 75 23 jne a27 - base.s.ptr = freep = prevp = &base; - a04: c7 45 f0 dc 0d 00 00 movl $0xddc,-0x10(%ebp) - a0b: 8b 45 f0 mov -0x10(%ebp),%eax - a0e: a3 e4 0d 00 00 mov %eax,0xde4 - a13: a1 e4 0d 00 00 mov 0xde4,%eax - a18: a3 dc 0d 00 00 mov %eax,0xddc - base.s.size = 0; - a1d: c7 05 e0 0d 00 00 00 movl $0x0,0xde0 - a24: 00 00 00 - } - for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - a27: 8b 45 f0 mov -0x10(%ebp),%eax - a2a: 8b 00 mov (%eax),%eax - a2c: 89 45 f4 mov %eax,-0xc(%ebp) - if(p->s.size >= nunits){ - a2f: 8b 45 f4 mov -0xc(%ebp),%eax - a32: 8b 40 04 mov 0x4(%eax),%eax - a35: 3b 45 ec cmp -0x14(%ebp),%eax - a38: 72 4d jb a87 - if(p->s.size == nunits) - a3a: 8b 45 f4 mov -0xc(%ebp),%eax - a3d: 8b 40 04 mov 0x4(%eax),%eax - a40: 3b 45 ec cmp -0x14(%ebp),%eax - a43: 75 0c jne a51 - prevp->s.ptr = p->s.ptr; - a45: 8b 45 f4 mov -0xc(%ebp),%eax - a48: 8b 10 mov (%eax),%edx - a4a: 8b 45 f0 mov -0x10(%ebp),%eax - a4d: 89 10 mov %edx,(%eax) - a4f: eb 26 jmp a77 - else { - p->s.size -= nunits; - a51: 8b 45 f4 mov -0xc(%ebp),%eax - a54: 8b 40 04 mov 0x4(%eax),%eax - a57: 2b 45 ec sub -0x14(%ebp),%eax - a5a: 89 c2 mov %eax,%edx - a5c: 8b 45 f4 mov -0xc(%ebp),%eax - a5f: 89 50 04 mov %edx,0x4(%eax) - p += p->s.size; - a62: 8b 45 f4 mov -0xc(%ebp),%eax - a65: 8b 40 04 mov 0x4(%eax),%eax - a68: c1 e0 03 shl $0x3,%eax - a6b: 01 45 f4 add %eax,-0xc(%ebp) - p->s.size = nunits; - a6e: 8b 45 f4 mov -0xc(%ebp),%eax - a71: 8b 55 ec mov -0x14(%ebp),%edx - a74: 89 50 04 mov %edx,0x4(%eax) - } - freep = prevp; - a77: 8b 45 f0 mov -0x10(%ebp),%eax - a7a: a3 e4 0d 00 00 mov %eax,0xde4 - return (void*)(p + 1); - a7f: 8b 45 f4 mov -0xc(%ebp),%eax - a82: 83 c0 08 add $0x8,%eax - a85: eb 3b jmp ac2 - } - if(p == freep) - a87: a1 e4 0d 00 00 mov 0xde4,%eax - a8c: 39 45 f4 cmp %eax,-0xc(%ebp) - a8f: 75 1e jne aaf - if((p = morecore(nunits)) == 0) - a91: 83 ec 0c sub $0xc,%esp - a94: ff 75 ec pushl -0x14(%ebp) - a97: e8 e5 fe ff ff call 981 - a9c: 83 c4 10 add $0x10,%esp - a9f: 89 45 f4 mov %eax,-0xc(%ebp) - aa2: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - aa6: 75 07 jne aaf - return 0; - aa8: b8 00 00 00 00 mov $0x0,%eax - aad: eb 13 jmp ac2 - nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - if((prevp = freep) == 0){ - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - aaf: 8b 45 f4 mov -0xc(%ebp),%eax - ab2: 89 45 f0 mov %eax,-0x10(%ebp) - ab5: 8b 45 f4 mov -0xc(%ebp),%eax - ab8: 8b 00 mov (%eax),%eax - aba: 89 45 f4 mov %eax,-0xc(%ebp) - return (void*)(p + 1); - } - if(p == freep) - if((p = morecore(nunits)) == 0) - return 0; - } - abd: e9 6d ff ff ff jmp a2f -} - ac2: c9 leave - ac3: c3 ret diff --git a/xv6-public/ls.d b/xv6-public/ls.d deleted file mode 100755 index a55b6d4..0000000 --- a/xv6-public/ls.d +++ /dev/null @@ -1 +0,0 @@ -ls.o: ls.c /usr/include/stdc-predef.h types.h stat.h user.h fs.h diff --git a/xv6-public/ls.o b/xv6-public/ls.o deleted file mode 100755 index ba08c85c0df905aaa882278a4e4541d14876c72a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6252 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 diff --git a/xv6-public/mkdir.asm b/xv6-public/mkdir.asm deleted file mode 100755 index 09173b6..0000000 --- a/xv6-public/mkdir.asm +++ /dev/null @@ -1,1209 +0,0 @@ - -_mkdir: file format elf32-i386 - - -Disassembly of section .text: - -00000000
: -#include "stat.h" -#include "user.h" - -int -main(int argc, char *argv[]) -{ - 0: 8d 4c 24 04 lea 0x4(%esp),%ecx - 4: 83 e4 f0 and $0xfffffff0,%esp - 7: ff 71 fc pushl -0x4(%ecx) - a: 55 push %ebp - b: 89 e5 mov %esp,%ebp - d: 53 push %ebx - e: 51 push %ecx - f: 83 ec 10 sub $0x10,%esp - 12: 89 cb mov %ecx,%ebx - int i; - - if(argc < 2){ - 14: 83 3b 01 cmpl $0x1,(%ebx) - 17: 7f 17 jg 30 - printf(2, "Usage: mkdir files...\n"); - 19: 83 ec 08 sub $0x8,%esp - 1c: 68 0e 08 00 00 push $0x80e - 21: 6a 02 push $0x2 - 23: e8 32 04 00 00 call 45a - 28: 83 c4 10 add $0x10,%esp - exit(); - 2b: e8 b5 02 00 00 call 2e5 - } - - for(i = 1; i < argc; i++){ - 30: c7 45 f4 01 00 00 00 movl $0x1,-0xc(%ebp) - 37: eb 4b jmp 84 - if(mkdir(argv[i]) < 0){ - 39: 8b 45 f4 mov -0xc(%ebp),%eax - 3c: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx - 43: 8b 43 04 mov 0x4(%ebx),%eax - 46: 01 d0 add %edx,%eax - 48: 8b 00 mov (%eax),%eax - 4a: 83 ec 0c sub $0xc,%esp - 4d: 50 push %eax - 4e: e8 fa 02 00 00 call 34d - 53: 83 c4 10 add $0x10,%esp - 56: 85 c0 test %eax,%eax - 58: 79 26 jns 80 - printf(2, "mkdir: %s failed to create\n", argv[i]); - 5a: 8b 45 f4 mov -0xc(%ebp),%eax - 5d: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx - 64: 8b 43 04 mov 0x4(%ebx),%eax - 67: 01 d0 add %edx,%eax - 69: 8b 00 mov (%eax),%eax - 6b: 83 ec 04 sub $0x4,%esp - 6e: 50 push %eax - 6f: 68 25 08 00 00 push $0x825 - 74: 6a 02 push $0x2 - 76: e8 df 03 00 00 call 45a - 7b: 83 c4 10 add $0x10,%esp - break; - 7e: eb 0b jmp 8b - if(argc < 2){ - printf(2, "Usage: mkdir files...\n"); - exit(); - } - - for(i = 1; i < argc; i++){ - 80: 83 45 f4 01 addl $0x1,-0xc(%ebp) - 84: 8b 45 f4 mov -0xc(%ebp),%eax - 87: 3b 03 cmp (%ebx),%eax - 89: 7c ae jl 39 - printf(2, "mkdir: %s failed to create\n", argv[i]); - break; - } - } - - exit(); - 8b: e8 55 02 00 00 call 2e5 - -00000090 : - "cc"); -} - -static inline void -stosb(void *addr, int data, int cnt) -{ - 90: 55 push %ebp - 91: 89 e5 mov %esp,%ebp - 93: 57 push %edi - 94: 53 push %ebx - asm volatile("cld; rep stosb" : - 95: 8b 4d 08 mov 0x8(%ebp),%ecx - 98: 8b 55 10 mov 0x10(%ebp),%edx - 9b: 8b 45 0c mov 0xc(%ebp),%eax - 9e: 89 cb mov %ecx,%ebx - a0: 89 df mov %ebx,%edi - a2: 89 d1 mov %edx,%ecx - a4: fc cld - a5: f3 aa rep stos %al,%es:(%edi) - a7: 89 ca mov %ecx,%edx - a9: 89 fb mov %edi,%ebx - ab: 89 5d 08 mov %ebx,0x8(%ebp) - ae: 89 55 10 mov %edx,0x10(%ebp) - "=D" (addr), "=c" (cnt) : - "0" (addr), "1" (cnt), "a" (data) : - "memory", "cc"); -} - b1: 5b pop %ebx - b2: 5f pop %edi - b3: 5d pop %ebp - b4: c3 ret - -000000b5 : -#include "user.h" -#include "x86.h" - -char* -strcpy(char *s, char *t) -{ - b5: 55 push %ebp - b6: 89 e5 mov %esp,%ebp - b8: 83 ec 10 sub $0x10,%esp - char *os; - - os = s; - bb: 8b 45 08 mov 0x8(%ebp),%eax - be: 89 45 fc mov %eax,-0x4(%ebp) - while((*s++ = *t++) != 0) - c1: 90 nop - c2: 8b 45 08 mov 0x8(%ebp),%eax - c5: 8d 50 01 lea 0x1(%eax),%edx - c8: 89 55 08 mov %edx,0x8(%ebp) - cb: 8b 55 0c mov 0xc(%ebp),%edx - ce: 8d 4a 01 lea 0x1(%edx),%ecx - d1: 89 4d 0c mov %ecx,0xc(%ebp) - d4: 0f b6 12 movzbl (%edx),%edx - d7: 88 10 mov %dl,(%eax) - d9: 0f b6 00 movzbl (%eax),%eax - dc: 84 c0 test %al,%al - de: 75 e2 jne c2 - ; - return os; - e0: 8b 45 fc mov -0x4(%ebp),%eax -} - e3: c9 leave - e4: c3 ret - -000000e5 : - -int -strcmp(const char *p, const char *q) -{ - e5: 55 push %ebp - e6: 89 e5 mov %esp,%ebp - while(*p && *p == *q) - e8: eb 08 jmp f2 - p++, q++; - ea: 83 45 08 01 addl $0x1,0x8(%ebp) - ee: 83 45 0c 01 addl $0x1,0xc(%ebp) -} - -int -strcmp(const char *p, const char *q) -{ - while(*p && *p == *q) - f2: 8b 45 08 mov 0x8(%ebp),%eax - f5: 0f b6 00 movzbl (%eax),%eax - f8: 84 c0 test %al,%al - fa: 74 10 je 10c - fc: 8b 45 08 mov 0x8(%ebp),%eax - ff: 0f b6 10 movzbl (%eax),%edx - 102: 8b 45 0c mov 0xc(%ebp),%eax - 105: 0f b6 00 movzbl (%eax),%eax - 108: 38 c2 cmp %al,%dl - 10a: 74 de je ea - p++, q++; - return (uchar)*p - (uchar)*q; - 10c: 8b 45 08 mov 0x8(%ebp),%eax - 10f: 0f b6 00 movzbl (%eax),%eax - 112: 0f b6 d0 movzbl %al,%edx - 115: 8b 45 0c mov 0xc(%ebp),%eax - 118: 0f b6 00 movzbl (%eax),%eax - 11b: 0f b6 c0 movzbl %al,%eax - 11e: 29 c2 sub %eax,%edx - 120: 89 d0 mov %edx,%eax -} - 122: 5d pop %ebp - 123: c3 ret - -00000124 : - -uint -strlen(char *s) -{ - 124: 55 push %ebp - 125: 89 e5 mov %esp,%ebp - 127: 83 ec 10 sub $0x10,%esp - int n; - - for(n = 0; s[n]; n++) - 12a: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - 131: eb 04 jmp 137 - 133: 83 45 fc 01 addl $0x1,-0x4(%ebp) - 137: 8b 55 fc mov -0x4(%ebp),%edx - 13a: 8b 45 08 mov 0x8(%ebp),%eax - 13d: 01 d0 add %edx,%eax - 13f: 0f b6 00 movzbl (%eax),%eax - 142: 84 c0 test %al,%al - 144: 75 ed jne 133 - ; - return n; - 146: 8b 45 fc mov -0x4(%ebp),%eax -} - 149: c9 leave - 14a: c3 ret - -0000014b : - -void* -memset(void *dst, int c, uint n) -{ - 14b: 55 push %ebp - 14c: 89 e5 mov %esp,%ebp - stosb(dst, c, n); - 14e: 8b 45 10 mov 0x10(%ebp),%eax - 151: 50 push %eax - 152: ff 75 0c pushl 0xc(%ebp) - 155: ff 75 08 pushl 0x8(%ebp) - 158: e8 33 ff ff ff call 90 - 15d: 83 c4 0c add $0xc,%esp - return dst; - 160: 8b 45 08 mov 0x8(%ebp),%eax -} - 163: c9 leave - 164: c3 ret - -00000165 : - -char* -strchr(const char *s, char c) -{ - 165: 55 push %ebp - 166: 89 e5 mov %esp,%ebp - 168: 83 ec 04 sub $0x4,%esp - 16b: 8b 45 0c mov 0xc(%ebp),%eax - 16e: 88 45 fc mov %al,-0x4(%ebp) - for(; *s; s++) - 171: eb 14 jmp 187 - if(*s == c) - 173: 8b 45 08 mov 0x8(%ebp),%eax - 176: 0f b6 00 movzbl (%eax),%eax - 179: 3a 45 fc cmp -0x4(%ebp),%al - 17c: 75 05 jne 183 - return (char*)s; - 17e: 8b 45 08 mov 0x8(%ebp),%eax - 181: eb 13 jmp 196 -} - -char* -strchr(const char *s, char c) -{ - for(; *s; s++) - 183: 83 45 08 01 addl $0x1,0x8(%ebp) - 187: 8b 45 08 mov 0x8(%ebp),%eax - 18a: 0f b6 00 movzbl (%eax),%eax - 18d: 84 c0 test %al,%al - 18f: 75 e2 jne 173 - if(*s == c) - return (char*)s; - return 0; - 191: b8 00 00 00 00 mov $0x0,%eax -} - 196: c9 leave - 197: c3 ret - -00000198 : - -char* -gets(char *buf, int max) -{ - 198: 55 push %ebp - 199: 89 e5 mov %esp,%ebp - 19b: 83 ec 18 sub $0x18,%esp - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - 19e: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 1a5: eb 44 jmp 1eb - cc = read(0, &c, 1); - 1a7: 83 ec 04 sub $0x4,%esp - 1aa: 6a 01 push $0x1 - 1ac: 8d 45 ef lea -0x11(%ebp),%eax - 1af: 50 push %eax - 1b0: 6a 00 push $0x0 - 1b2: e8 46 01 00 00 call 2fd - 1b7: 83 c4 10 add $0x10,%esp - 1ba: 89 45 f0 mov %eax,-0x10(%ebp) - if(cc < 1) - 1bd: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 1c1: 7f 02 jg 1c5 - break; - 1c3: eb 31 jmp 1f6 - buf[i++] = c; - 1c5: 8b 45 f4 mov -0xc(%ebp),%eax - 1c8: 8d 50 01 lea 0x1(%eax),%edx - 1cb: 89 55 f4 mov %edx,-0xc(%ebp) - 1ce: 89 c2 mov %eax,%edx - 1d0: 8b 45 08 mov 0x8(%ebp),%eax - 1d3: 01 c2 add %eax,%edx - 1d5: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 1d9: 88 02 mov %al,(%edx) - if(c == '\n' || c == '\r') - 1db: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 1df: 3c 0a cmp $0xa,%al - 1e1: 74 13 je 1f6 - 1e3: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 1e7: 3c 0d cmp $0xd,%al - 1e9: 74 0b je 1f6 -gets(char *buf, int max) -{ - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - 1eb: 8b 45 f4 mov -0xc(%ebp),%eax - 1ee: 83 c0 01 add $0x1,%eax - 1f1: 3b 45 0c cmp 0xc(%ebp),%eax - 1f4: 7c b1 jl 1a7 - break; - buf[i++] = c; - if(c == '\n' || c == '\r') - break; - } - buf[i] = '\0'; - 1f6: 8b 55 f4 mov -0xc(%ebp),%edx - 1f9: 8b 45 08 mov 0x8(%ebp),%eax - 1fc: 01 d0 add %edx,%eax - 1fe: c6 00 00 movb $0x0,(%eax) - return buf; - 201: 8b 45 08 mov 0x8(%ebp),%eax -} - 204: c9 leave - 205: c3 ret - -00000206 : - -int -stat(char *n, struct stat *st) -{ - 206: 55 push %ebp - 207: 89 e5 mov %esp,%ebp - 209: 83 ec 18 sub $0x18,%esp - int fd; - int r; - - fd = open(n, O_RDONLY); - 20c: 83 ec 08 sub $0x8,%esp - 20f: 6a 00 push $0x0 - 211: ff 75 08 pushl 0x8(%ebp) - 214: e8 0c 01 00 00 call 325 - 219: 83 c4 10 add $0x10,%esp - 21c: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd < 0) - 21f: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 223: 79 07 jns 22c - return -1; - 225: b8 ff ff ff ff mov $0xffffffff,%eax - 22a: eb 25 jmp 251 - r = fstat(fd, st); - 22c: 83 ec 08 sub $0x8,%esp - 22f: ff 75 0c pushl 0xc(%ebp) - 232: ff 75 f4 pushl -0xc(%ebp) - 235: e8 03 01 00 00 call 33d - 23a: 83 c4 10 add $0x10,%esp - 23d: 89 45 f0 mov %eax,-0x10(%ebp) - close(fd); - 240: 83 ec 0c sub $0xc,%esp - 243: ff 75 f4 pushl -0xc(%ebp) - 246: e8 c2 00 00 00 call 30d - 24b: 83 c4 10 add $0x10,%esp - return r; - 24e: 8b 45 f0 mov -0x10(%ebp),%eax -} - 251: c9 leave - 252: c3 ret - -00000253 : - -int -atoi(const char *s) -{ - 253: 55 push %ebp - 254: 89 e5 mov %esp,%ebp - 256: 83 ec 10 sub $0x10,%esp - int n; - - n = 0; - 259: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - while('0' <= *s && *s <= '9') - 260: eb 25 jmp 287 - n = n*10 + *s++ - '0'; - 262: 8b 55 fc mov -0x4(%ebp),%edx - 265: 89 d0 mov %edx,%eax - 267: c1 e0 02 shl $0x2,%eax - 26a: 01 d0 add %edx,%eax - 26c: 01 c0 add %eax,%eax - 26e: 89 c1 mov %eax,%ecx - 270: 8b 45 08 mov 0x8(%ebp),%eax - 273: 8d 50 01 lea 0x1(%eax),%edx - 276: 89 55 08 mov %edx,0x8(%ebp) - 279: 0f b6 00 movzbl (%eax),%eax - 27c: 0f be c0 movsbl %al,%eax - 27f: 01 c8 add %ecx,%eax - 281: 83 e8 30 sub $0x30,%eax - 284: 89 45 fc mov %eax,-0x4(%ebp) -atoi(const char *s) -{ - int n; - - n = 0; - while('0' <= *s && *s <= '9') - 287: 8b 45 08 mov 0x8(%ebp),%eax - 28a: 0f b6 00 movzbl (%eax),%eax - 28d: 3c 2f cmp $0x2f,%al - 28f: 7e 0a jle 29b - 291: 8b 45 08 mov 0x8(%ebp),%eax - 294: 0f b6 00 movzbl (%eax),%eax - 297: 3c 39 cmp $0x39,%al - 299: 7e c7 jle 262 - n = n*10 + *s++ - '0'; - return n; - 29b: 8b 45 fc mov -0x4(%ebp),%eax -} - 29e: c9 leave - 29f: c3 ret - -000002a0 : - -void* -memmove(void *vdst, void *vsrc, int n) -{ - 2a0: 55 push %ebp - 2a1: 89 e5 mov %esp,%ebp - 2a3: 83 ec 10 sub $0x10,%esp - char *dst, *src; - - dst = vdst; - 2a6: 8b 45 08 mov 0x8(%ebp),%eax - 2a9: 89 45 fc mov %eax,-0x4(%ebp) - src = vsrc; - 2ac: 8b 45 0c mov 0xc(%ebp),%eax - 2af: 89 45 f8 mov %eax,-0x8(%ebp) - while(n-- > 0) - 2b2: eb 17 jmp 2cb - *dst++ = *src++; - 2b4: 8b 45 fc mov -0x4(%ebp),%eax - 2b7: 8d 50 01 lea 0x1(%eax),%edx - 2ba: 89 55 fc mov %edx,-0x4(%ebp) - 2bd: 8b 55 f8 mov -0x8(%ebp),%edx - 2c0: 8d 4a 01 lea 0x1(%edx),%ecx - 2c3: 89 4d f8 mov %ecx,-0x8(%ebp) - 2c6: 0f b6 12 movzbl (%edx),%edx - 2c9: 88 10 mov %dl,(%eax) -{ - char *dst, *src; - - dst = vdst; - src = vsrc; - while(n-- > 0) - 2cb: 8b 45 10 mov 0x10(%ebp),%eax - 2ce: 8d 50 ff lea -0x1(%eax),%edx - 2d1: 89 55 10 mov %edx,0x10(%ebp) - 2d4: 85 c0 test %eax,%eax - 2d6: 7f dc jg 2b4 - *dst++ = *src++; - return vdst; - 2d8: 8b 45 08 mov 0x8(%ebp),%eax -} - 2db: c9 leave - 2dc: c3 ret - -000002dd : - name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 2dd: b8 01 00 00 00 mov $0x1,%eax - 2e2: cd 40 int $0x40 - 2e4: c3 ret - -000002e5 : -SYSCALL(exit) - 2e5: b8 02 00 00 00 mov $0x2,%eax - 2ea: cd 40 int $0x40 - 2ec: c3 ret - -000002ed : -SYSCALL(wait) - 2ed: b8 03 00 00 00 mov $0x3,%eax - 2f2: cd 40 int $0x40 - 2f4: c3 ret - -000002f5 : -SYSCALL(pipe) - 2f5: b8 04 00 00 00 mov $0x4,%eax - 2fa: cd 40 int $0x40 - 2fc: c3 ret - -000002fd : -SYSCALL(read) - 2fd: b8 05 00 00 00 mov $0x5,%eax - 302: cd 40 int $0x40 - 304: c3 ret - -00000305 : -SYSCALL(write) - 305: b8 10 00 00 00 mov $0x10,%eax - 30a: cd 40 int $0x40 - 30c: c3 ret - -0000030d : -SYSCALL(close) - 30d: b8 15 00 00 00 mov $0x15,%eax - 312: cd 40 int $0x40 - 314: c3 ret - -00000315 : -SYSCALL(kill) - 315: b8 06 00 00 00 mov $0x6,%eax - 31a: cd 40 int $0x40 - 31c: c3 ret - -0000031d : -SYSCALL(exec) - 31d: b8 07 00 00 00 mov $0x7,%eax - 322: cd 40 int $0x40 - 324: c3 ret - -00000325 : -SYSCALL(open) - 325: b8 0f 00 00 00 mov $0xf,%eax - 32a: cd 40 int $0x40 - 32c: c3 ret - -0000032d : -SYSCALL(mknod) - 32d: b8 11 00 00 00 mov $0x11,%eax - 332: cd 40 int $0x40 - 334: c3 ret - -00000335 : -SYSCALL(unlink) - 335: b8 12 00 00 00 mov $0x12,%eax - 33a: cd 40 int $0x40 - 33c: c3 ret - -0000033d : -SYSCALL(fstat) - 33d: b8 08 00 00 00 mov $0x8,%eax - 342: cd 40 int $0x40 - 344: c3 ret - -00000345 : -SYSCALL(link) - 345: b8 13 00 00 00 mov $0x13,%eax - 34a: cd 40 int $0x40 - 34c: c3 ret - -0000034d : -SYSCALL(mkdir) - 34d: b8 14 00 00 00 mov $0x14,%eax - 352: cd 40 int $0x40 - 354: c3 ret - -00000355 : -SYSCALL(chdir) - 355: b8 09 00 00 00 mov $0x9,%eax - 35a: cd 40 int $0x40 - 35c: c3 ret - -0000035d : -SYSCALL(dup) - 35d: b8 0a 00 00 00 mov $0xa,%eax - 362: cd 40 int $0x40 - 364: c3 ret - -00000365 : -SYSCALL(getpid) - 365: b8 0b 00 00 00 mov $0xb,%eax - 36a: cd 40 int $0x40 - 36c: c3 ret - -0000036d : -SYSCALL(sbrk) - 36d: b8 0c 00 00 00 mov $0xc,%eax - 372: cd 40 int $0x40 - 374: c3 ret - -00000375 : -SYSCALL(sleep) - 375: b8 0d 00 00 00 mov $0xd,%eax - 37a: cd 40 int $0x40 - 37c: c3 ret - -0000037d : -SYSCALL(uptime) - 37d: b8 0e 00 00 00 mov $0xe,%eax - 382: cd 40 int $0x40 - 384: c3 ret - -00000385 : -#include "stat.h" -#include "user.h" - -static void -putc(int fd, char c) -{ - 385: 55 push %ebp - 386: 89 e5 mov %esp,%ebp - 388: 83 ec 18 sub $0x18,%esp - 38b: 8b 45 0c mov 0xc(%ebp),%eax - 38e: 88 45 f4 mov %al,-0xc(%ebp) - write(fd, &c, 1); - 391: 83 ec 04 sub $0x4,%esp - 394: 6a 01 push $0x1 - 396: 8d 45 f4 lea -0xc(%ebp),%eax - 399: 50 push %eax - 39a: ff 75 08 pushl 0x8(%ebp) - 39d: e8 63 ff ff ff call 305 - 3a2: 83 c4 10 add $0x10,%esp -} - 3a5: c9 leave - 3a6: c3 ret - -000003a7 : - -static void -printint(int fd, int xx, int base, int sgn) -{ - 3a7: 55 push %ebp - 3a8: 89 e5 mov %esp,%ebp - 3aa: 53 push %ebx - 3ab: 83 ec 24 sub $0x24,%esp - static char digits[] = "0123456789ABCDEF"; - char buf[16]; - int i, neg; - uint x; - - neg = 0; - 3ae: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - if(sgn && xx < 0){ - 3b5: 83 7d 14 00 cmpl $0x0,0x14(%ebp) - 3b9: 74 17 je 3d2 - 3bb: 83 7d 0c 00 cmpl $0x0,0xc(%ebp) - 3bf: 79 11 jns 3d2 - neg = 1; - 3c1: c7 45 f0 01 00 00 00 movl $0x1,-0x10(%ebp) - x = -xx; - 3c8: 8b 45 0c mov 0xc(%ebp),%eax - 3cb: f7 d8 neg %eax - 3cd: 89 45 ec mov %eax,-0x14(%ebp) - 3d0: eb 06 jmp 3d8 - } else { - x = xx; - 3d2: 8b 45 0c mov 0xc(%ebp),%eax - 3d5: 89 45 ec mov %eax,-0x14(%ebp) - } - - i = 0; - 3d8: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - do{ - buf[i++] = digits[x % base]; - 3df: 8b 4d f4 mov -0xc(%ebp),%ecx - 3e2: 8d 41 01 lea 0x1(%ecx),%eax - 3e5: 89 45 f4 mov %eax,-0xc(%ebp) - 3e8: 8b 5d 10 mov 0x10(%ebp),%ebx - 3eb: 8b 45 ec mov -0x14(%ebp),%eax - 3ee: ba 00 00 00 00 mov $0x0,%edx - 3f3: f7 f3 div %ebx - 3f5: 89 d0 mov %edx,%eax - 3f7: 0f b6 80 94 0a 00 00 movzbl 0xa94(%eax),%eax - 3fe: 88 44 0d dc mov %al,-0x24(%ebp,%ecx,1) - }while((x /= base) != 0); - 402: 8b 5d 10 mov 0x10(%ebp),%ebx - 405: 8b 45 ec mov -0x14(%ebp),%eax - 408: ba 00 00 00 00 mov $0x0,%edx - 40d: f7 f3 div %ebx - 40f: 89 45 ec mov %eax,-0x14(%ebp) - 412: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 416: 75 c7 jne 3df - if(neg) - 418: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 41c: 74 0e je 42c - buf[i++] = '-'; - 41e: 8b 45 f4 mov -0xc(%ebp),%eax - 421: 8d 50 01 lea 0x1(%eax),%edx - 424: 89 55 f4 mov %edx,-0xc(%ebp) - 427: c6 44 05 dc 2d movb $0x2d,-0x24(%ebp,%eax,1) - - while(--i >= 0) - 42c: eb 1d jmp 44b - putc(fd, buf[i]); - 42e: 8d 55 dc lea -0x24(%ebp),%edx - 431: 8b 45 f4 mov -0xc(%ebp),%eax - 434: 01 d0 add %edx,%eax - 436: 0f b6 00 movzbl (%eax),%eax - 439: 0f be c0 movsbl %al,%eax - 43c: 83 ec 08 sub $0x8,%esp - 43f: 50 push %eax - 440: ff 75 08 pushl 0x8(%ebp) - 443: e8 3d ff ff ff call 385 - 448: 83 c4 10 add $0x10,%esp - buf[i++] = digits[x % base]; - }while((x /= base) != 0); - if(neg) - buf[i++] = '-'; - - while(--i >= 0) - 44b: 83 6d f4 01 subl $0x1,-0xc(%ebp) - 44f: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 453: 79 d9 jns 42e - putc(fd, buf[i]); -} - 455: 8b 5d fc mov -0x4(%ebp),%ebx - 458: c9 leave - 459: c3 ret - -0000045a : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void -printf(int fd, char *fmt, ...) -{ - 45a: 55 push %ebp - 45b: 89 e5 mov %esp,%ebp - 45d: 83 ec 28 sub $0x28,%esp - char *s; - int c, i, state; - uint *ap; - - state = 0; - 460: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - ap = (uint*)(void*)&fmt + 1; - 467: 8d 45 0c lea 0xc(%ebp),%eax - 46a: 83 c0 04 add $0x4,%eax - 46d: 89 45 e8 mov %eax,-0x18(%ebp) - for(i = 0; fmt[i]; i++){ - 470: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - 477: e9 59 01 00 00 jmp 5d5 - c = fmt[i] & 0xff; - 47c: 8b 55 0c mov 0xc(%ebp),%edx - 47f: 8b 45 f0 mov -0x10(%ebp),%eax - 482: 01 d0 add %edx,%eax - 484: 0f b6 00 movzbl (%eax),%eax - 487: 0f be c0 movsbl %al,%eax - 48a: 25 ff 00 00 00 and $0xff,%eax - 48f: 89 45 e4 mov %eax,-0x1c(%ebp) - if(state == 0){ - 492: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 496: 75 2c jne 4c4 - if(c == '%'){ - 498: 83 7d e4 25 cmpl $0x25,-0x1c(%ebp) - 49c: 75 0c jne 4aa - state = '%'; - 49e: c7 45 ec 25 00 00 00 movl $0x25,-0x14(%ebp) - 4a5: e9 27 01 00 00 jmp 5d1 - } else { - putc(fd, c); - 4aa: 8b 45 e4 mov -0x1c(%ebp),%eax - 4ad: 0f be c0 movsbl %al,%eax - 4b0: 83 ec 08 sub $0x8,%esp - 4b3: 50 push %eax - 4b4: ff 75 08 pushl 0x8(%ebp) - 4b7: e8 c9 fe ff ff call 385 - 4bc: 83 c4 10 add $0x10,%esp - 4bf: e9 0d 01 00 00 jmp 5d1 - } - } else if(state == '%'){ - 4c4: 83 7d ec 25 cmpl $0x25,-0x14(%ebp) - 4c8: 0f 85 03 01 00 00 jne 5d1 - if(c == 'd'){ - 4ce: 83 7d e4 64 cmpl $0x64,-0x1c(%ebp) - 4d2: 75 1e jne 4f2 - printint(fd, *ap, 10, 1); - 4d4: 8b 45 e8 mov -0x18(%ebp),%eax - 4d7: 8b 00 mov (%eax),%eax - 4d9: 6a 01 push $0x1 - 4db: 6a 0a push $0xa - 4dd: 50 push %eax - 4de: ff 75 08 pushl 0x8(%ebp) - 4e1: e8 c1 fe ff ff call 3a7 - 4e6: 83 c4 10 add $0x10,%esp - ap++; - 4e9: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 4ed: e9 d8 00 00 00 jmp 5ca - } else if(c == 'x' || c == 'p'){ - 4f2: 83 7d e4 78 cmpl $0x78,-0x1c(%ebp) - 4f6: 74 06 je 4fe - 4f8: 83 7d e4 70 cmpl $0x70,-0x1c(%ebp) - 4fc: 75 1e jne 51c - printint(fd, *ap, 16, 0); - 4fe: 8b 45 e8 mov -0x18(%ebp),%eax - 501: 8b 00 mov (%eax),%eax - 503: 6a 00 push $0x0 - 505: 6a 10 push $0x10 - 507: 50 push %eax - 508: ff 75 08 pushl 0x8(%ebp) - 50b: e8 97 fe ff ff call 3a7 - 510: 83 c4 10 add $0x10,%esp - ap++; - 513: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 517: e9 ae 00 00 00 jmp 5ca - } else if(c == 's'){ - 51c: 83 7d e4 73 cmpl $0x73,-0x1c(%ebp) - 520: 75 43 jne 565 - s = (char*)*ap; - 522: 8b 45 e8 mov -0x18(%ebp),%eax - 525: 8b 00 mov (%eax),%eax - 527: 89 45 f4 mov %eax,-0xc(%ebp) - ap++; - 52a: 83 45 e8 04 addl $0x4,-0x18(%ebp) - if(s == 0) - 52e: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 532: 75 07 jne 53b - s = "(null)"; - 534: c7 45 f4 41 08 00 00 movl $0x841,-0xc(%ebp) - while(*s != 0){ - 53b: eb 1c jmp 559 - putc(fd, *s); - 53d: 8b 45 f4 mov -0xc(%ebp),%eax - 540: 0f b6 00 movzbl (%eax),%eax - 543: 0f be c0 movsbl %al,%eax - 546: 83 ec 08 sub $0x8,%esp - 549: 50 push %eax - 54a: ff 75 08 pushl 0x8(%ebp) - 54d: e8 33 fe ff ff call 385 - 552: 83 c4 10 add $0x10,%esp - s++; - 555: 83 45 f4 01 addl $0x1,-0xc(%ebp) - } else if(c == 's'){ - s = (char*)*ap; - ap++; - if(s == 0) - s = "(null)"; - while(*s != 0){ - 559: 8b 45 f4 mov -0xc(%ebp),%eax - 55c: 0f b6 00 movzbl (%eax),%eax - 55f: 84 c0 test %al,%al - 561: 75 da jne 53d - 563: eb 65 jmp 5ca - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 565: 83 7d e4 63 cmpl $0x63,-0x1c(%ebp) - 569: 75 1d jne 588 - putc(fd, *ap); - 56b: 8b 45 e8 mov -0x18(%ebp),%eax - 56e: 8b 00 mov (%eax),%eax - 570: 0f be c0 movsbl %al,%eax - 573: 83 ec 08 sub $0x8,%esp - 576: 50 push %eax - 577: ff 75 08 pushl 0x8(%ebp) - 57a: e8 06 fe ff ff call 385 - 57f: 83 c4 10 add $0x10,%esp - ap++; - 582: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 586: eb 42 jmp 5ca - } else if(c == '%'){ - 588: 83 7d e4 25 cmpl $0x25,-0x1c(%ebp) - 58c: 75 17 jne 5a5 - putc(fd, c); - 58e: 8b 45 e4 mov -0x1c(%ebp),%eax - 591: 0f be c0 movsbl %al,%eax - 594: 83 ec 08 sub $0x8,%esp - 597: 50 push %eax - 598: ff 75 08 pushl 0x8(%ebp) - 59b: e8 e5 fd ff ff call 385 - 5a0: 83 c4 10 add $0x10,%esp - 5a3: eb 25 jmp 5ca - } else { - // Unknown % sequence. Print it to draw attention. - putc(fd, '%'); - 5a5: 83 ec 08 sub $0x8,%esp - 5a8: 6a 25 push $0x25 - 5aa: ff 75 08 pushl 0x8(%ebp) - 5ad: e8 d3 fd ff ff call 385 - 5b2: 83 c4 10 add $0x10,%esp - putc(fd, c); - 5b5: 8b 45 e4 mov -0x1c(%ebp),%eax - 5b8: 0f be c0 movsbl %al,%eax - 5bb: 83 ec 08 sub $0x8,%esp - 5be: 50 push %eax - 5bf: ff 75 08 pushl 0x8(%ebp) - 5c2: e8 be fd ff ff call 385 - 5c7: 83 c4 10 add $0x10,%esp - } - state = 0; - 5ca: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for(i = 0; fmt[i]; i++){ - 5d1: 83 45 f0 01 addl $0x1,-0x10(%ebp) - 5d5: 8b 55 0c mov 0xc(%ebp),%edx - 5d8: 8b 45 f0 mov -0x10(%ebp),%eax - 5db: 01 d0 add %edx,%eax - 5dd: 0f b6 00 movzbl (%eax),%eax - 5e0: 84 c0 test %al,%al - 5e2: 0f 85 94 fe ff ff jne 47c - putc(fd, c); - } - state = 0; - } - } -} - 5e8: c9 leave - 5e9: c3 ret - -000005ea : -static Header base; -static Header *freep; - -void -free(void *ap) -{ - 5ea: 55 push %ebp - 5eb: 89 e5 mov %esp,%ebp - 5ed: 83 ec 10 sub $0x10,%esp - Header *bp, *p; - - bp = (Header*)ap - 1; - 5f0: 8b 45 08 mov 0x8(%ebp),%eax - 5f3: 83 e8 08 sub $0x8,%eax - 5f6: 89 45 f8 mov %eax,-0x8(%ebp) - for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 5f9: a1 b0 0a 00 00 mov 0xab0,%eax - 5fe: 89 45 fc mov %eax,-0x4(%ebp) - 601: eb 24 jmp 627 - if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 603: 8b 45 fc mov -0x4(%ebp),%eax - 606: 8b 00 mov (%eax),%eax - 608: 3b 45 fc cmp -0x4(%ebp),%eax - 60b: 77 12 ja 61f - 60d: 8b 45 f8 mov -0x8(%ebp),%eax - 610: 3b 45 fc cmp -0x4(%ebp),%eax - 613: 77 24 ja 639 - 615: 8b 45 fc mov -0x4(%ebp),%eax - 618: 8b 00 mov (%eax),%eax - 61a: 3b 45 f8 cmp -0x8(%ebp),%eax - 61d: 77 1a ja 639 -free(void *ap) -{ - Header *bp, *p; - - bp = (Header*)ap - 1; - for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 61f: 8b 45 fc mov -0x4(%ebp),%eax - 622: 8b 00 mov (%eax),%eax - 624: 89 45 fc mov %eax,-0x4(%ebp) - 627: 8b 45 f8 mov -0x8(%ebp),%eax - 62a: 3b 45 fc cmp -0x4(%ebp),%eax - 62d: 76 d4 jbe 603 - 62f: 8b 45 fc mov -0x4(%ebp),%eax - 632: 8b 00 mov (%eax),%eax - 634: 3b 45 f8 cmp -0x8(%ebp),%eax - 637: 76 ca jbe 603 - if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - break; - if(bp + bp->s.size == p->s.ptr){ - 639: 8b 45 f8 mov -0x8(%ebp),%eax - 63c: 8b 40 04 mov 0x4(%eax),%eax - 63f: 8d 14 c5 00 00 00 00 lea 0x0(,%eax,8),%edx - 646: 8b 45 f8 mov -0x8(%ebp),%eax - 649: 01 c2 add %eax,%edx - 64b: 8b 45 fc mov -0x4(%ebp),%eax - 64e: 8b 00 mov (%eax),%eax - 650: 39 c2 cmp %eax,%edx - 652: 75 24 jne 678 - bp->s.size += p->s.ptr->s.size; - 654: 8b 45 f8 mov -0x8(%ebp),%eax - 657: 8b 50 04 mov 0x4(%eax),%edx - 65a: 8b 45 fc mov -0x4(%ebp),%eax - 65d: 8b 00 mov (%eax),%eax - 65f: 8b 40 04 mov 0x4(%eax),%eax - 662: 01 c2 add %eax,%edx - 664: 8b 45 f8 mov -0x8(%ebp),%eax - 667: 89 50 04 mov %edx,0x4(%eax) - bp->s.ptr = p->s.ptr->s.ptr; - 66a: 8b 45 fc mov -0x4(%ebp),%eax - 66d: 8b 00 mov (%eax),%eax - 66f: 8b 10 mov (%eax),%edx - 671: 8b 45 f8 mov -0x8(%ebp),%eax - 674: 89 10 mov %edx,(%eax) - 676: eb 0a jmp 682 - } else - bp->s.ptr = p->s.ptr; - 678: 8b 45 fc mov -0x4(%ebp),%eax - 67b: 8b 10 mov (%eax),%edx - 67d: 8b 45 f8 mov -0x8(%ebp),%eax - 680: 89 10 mov %edx,(%eax) - if(p + p->s.size == bp){ - 682: 8b 45 fc mov -0x4(%ebp),%eax - 685: 8b 40 04 mov 0x4(%eax),%eax - 688: 8d 14 c5 00 00 00 00 lea 0x0(,%eax,8),%edx - 68f: 8b 45 fc mov -0x4(%ebp),%eax - 692: 01 d0 add %edx,%eax - 694: 3b 45 f8 cmp -0x8(%ebp),%eax - 697: 75 20 jne 6b9 - p->s.size += bp->s.size; - 699: 8b 45 fc mov -0x4(%ebp),%eax - 69c: 8b 50 04 mov 0x4(%eax),%edx - 69f: 8b 45 f8 mov -0x8(%ebp),%eax - 6a2: 8b 40 04 mov 0x4(%eax),%eax - 6a5: 01 c2 add %eax,%edx - 6a7: 8b 45 fc mov -0x4(%ebp),%eax - 6aa: 89 50 04 mov %edx,0x4(%eax) - p->s.ptr = bp->s.ptr; - 6ad: 8b 45 f8 mov -0x8(%ebp),%eax - 6b0: 8b 10 mov (%eax),%edx - 6b2: 8b 45 fc mov -0x4(%ebp),%eax - 6b5: 89 10 mov %edx,(%eax) - 6b7: eb 08 jmp 6c1 - } else - p->s.ptr = bp; - 6b9: 8b 45 fc mov -0x4(%ebp),%eax - 6bc: 8b 55 f8 mov -0x8(%ebp),%edx - 6bf: 89 10 mov %edx,(%eax) - freep = p; - 6c1: 8b 45 fc mov -0x4(%ebp),%eax - 6c4: a3 b0 0a 00 00 mov %eax,0xab0 -} - 6c9: c9 leave - 6ca: c3 ret - -000006cb : - -static Header* -morecore(uint nu) -{ - 6cb: 55 push %ebp - 6cc: 89 e5 mov %esp,%ebp - 6ce: 83 ec 18 sub $0x18,%esp - char *p; - Header *hp; - - if(nu < 4096) - 6d1: 81 7d 08 ff 0f 00 00 cmpl $0xfff,0x8(%ebp) - 6d8: 77 07 ja 6e1 - nu = 4096; - 6da: c7 45 08 00 10 00 00 movl $0x1000,0x8(%ebp) - p = sbrk(nu * sizeof(Header)); - 6e1: 8b 45 08 mov 0x8(%ebp),%eax - 6e4: c1 e0 03 shl $0x3,%eax - 6e7: 83 ec 0c sub $0xc,%esp - 6ea: 50 push %eax - 6eb: e8 7d fc ff ff call 36d - 6f0: 83 c4 10 add $0x10,%esp - 6f3: 89 45 f4 mov %eax,-0xc(%ebp) - if(p == (char*)-1) - 6f6: 83 7d f4 ff cmpl $0xffffffff,-0xc(%ebp) - 6fa: 75 07 jne 703 - return 0; - 6fc: b8 00 00 00 00 mov $0x0,%eax - 701: eb 26 jmp 729 - hp = (Header*)p; - 703: 8b 45 f4 mov -0xc(%ebp),%eax - 706: 89 45 f0 mov %eax,-0x10(%ebp) - hp->s.size = nu; - 709: 8b 45 f0 mov -0x10(%ebp),%eax - 70c: 8b 55 08 mov 0x8(%ebp),%edx - 70f: 89 50 04 mov %edx,0x4(%eax) - free((void*)(hp + 1)); - 712: 8b 45 f0 mov -0x10(%ebp),%eax - 715: 83 c0 08 add $0x8,%eax - 718: 83 ec 0c sub $0xc,%esp - 71b: 50 push %eax - 71c: e8 c9 fe ff ff call 5ea - 721: 83 c4 10 add $0x10,%esp - return freep; - 724: a1 b0 0a 00 00 mov 0xab0,%eax -} - 729: c9 leave - 72a: c3 ret - -0000072b : - -void* -malloc(uint nbytes) -{ - 72b: 55 push %ebp - 72c: 89 e5 mov %esp,%ebp - 72e: 83 ec 18 sub $0x18,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 731: 8b 45 08 mov 0x8(%ebp),%eax - 734: 83 c0 07 add $0x7,%eax - 737: c1 e8 03 shr $0x3,%eax - 73a: 83 c0 01 add $0x1,%eax - 73d: 89 45 ec mov %eax,-0x14(%ebp) - if((prevp = freep) == 0){ - 740: a1 b0 0a 00 00 mov 0xab0,%eax - 745: 89 45 f0 mov %eax,-0x10(%ebp) - 748: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 74c: 75 23 jne 771 - base.s.ptr = freep = prevp = &base; - 74e: c7 45 f0 a8 0a 00 00 movl $0xaa8,-0x10(%ebp) - 755: 8b 45 f0 mov -0x10(%ebp),%eax - 758: a3 b0 0a 00 00 mov %eax,0xab0 - 75d: a1 b0 0a 00 00 mov 0xab0,%eax - 762: a3 a8 0a 00 00 mov %eax,0xaa8 - base.s.size = 0; - 767: c7 05 ac 0a 00 00 00 movl $0x0,0xaac - 76e: 00 00 00 - } - for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 771: 8b 45 f0 mov -0x10(%ebp),%eax - 774: 8b 00 mov (%eax),%eax - 776: 89 45 f4 mov %eax,-0xc(%ebp) - if(p->s.size >= nunits){ - 779: 8b 45 f4 mov -0xc(%ebp),%eax - 77c: 8b 40 04 mov 0x4(%eax),%eax - 77f: 3b 45 ec cmp -0x14(%ebp),%eax - 782: 72 4d jb 7d1 - if(p->s.size == nunits) - 784: 8b 45 f4 mov -0xc(%ebp),%eax - 787: 8b 40 04 mov 0x4(%eax),%eax - 78a: 3b 45 ec cmp -0x14(%ebp),%eax - 78d: 75 0c jne 79b - prevp->s.ptr = p->s.ptr; - 78f: 8b 45 f4 mov -0xc(%ebp),%eax - 792: 8b 10 mov (%eax),%edx - 794: 8b 45 f0 mov -0x10(%ebp),%eax - 797: 89 10 mov %edx,(%eax) - 799: eb 26 jmp 7c1 - else { - p->s.size -= nunits; - 79b: 8b 45 f4 mov -0xc(%ebp),%eax - 79e: 8b 40 04 mov 0x4(%eax),%eax - 7a1: 2b 45 ec sub -0x14(%ebp),%eax - 7a4: 89 c2 mov %eax,%edx - 7a6: 8b 45 f4 mov -0xc(%ebp),%eax - 7a9: 89 50 04 mov %edx,0x4(%eax) - p += p->s.size; - 7ac: 8b 45 f4 mov -0xc(%ebp),%eax - 7af: 8b 40 04 mov 0x4(%eax),%eax - 7b2: c1 e0 03 shl $0x3,%eax - 7b5: 01 45 f4 add %eax,-0xc(%ebp) - p->s.size = nunits; - 7b8: 8b 45 f4 mov -0xc(%ebp),%eax - 7bb: 8b 55 ec mov -0x14(%ebp),%edx - 7be: 89 50 04 mov %edx,0x4(%eax) - } - freep = prevp; - 7c1: 8b 45 f0 mov -0x10(%ebp),%eax - 7c4: a3 b0 0a 00 00 mov %eax,0xab0 - return (void*)(p + 1); - 7c9: 8b 45 f4 mov -0xc(%ebp),%eax - 7cc: 83 c0 08 add $0x8,%eax - 7cf: eb 3b jmp 80c - } - if(p == freep) - 7d1: a1 b0 0a 00 00 mov 0xab0,%eax - 7d6: 39 45 f4 cmp %eax,-0xc(%ebp) - 7d9: 75 1e jne 7f9 - if((p = morecore(nunits)) == 0) - 7db: 83 ec 0c sub $0xc,%esp - 7de: ff 75 ec pushl -0x14(%ebp) - 7e1: e8 e5 fe ff ff call 6cb - 7e6: 83 c4 10 add $0x10,%esp - 7e9: 89 45 f4 mov %eax,-0xc(%ebp) - 7ec: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 7f0: 75 07 jne 7f9 - return 0; - 7f2: b8 00 00 00 00 mov $0x0,%eax - 7f7: eb 13 jmp 80c - nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - if((prevp = freep) == 0){ - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 7f9: 8b 45 f4 mov -0xc(%ebp),%eax - 7fc: 89 45 f0 mov %eax,-0x10(%ebp) - 7ff: 8b 45 f4 mov -0xc(%ebp),%eax - 802: 8b 00 mov (%eax),%eax - 804: 89 45 f4 mov %eax,-0xc(%ebp) - return (void*)(p + 1); - } - if(p == freep) - if((p = morecore(nunits)) == 0) - return 0; - } - 807: e9 6d ff ff ff jmp 779 -} - 80c: c9 leave - 80d: c3 ret diff --git a/xv6-public/mkdir.d b/xv6-public/mkdir.d deleted file mode 100755 index 0c77808..0000000 --- a/xv6-public/mkdir.d +++ /dev/null @@ -1 +0,0 @@ -mkdir.o: mkdir.c /usr/include/stdc-predef.h types.h stat.h user.h diff --git a/xv6-public/mkdir.o b/xv6-public/mkdir.o deleted file mode 100755 index 5a6f04b75a758d1e6377e53efafe6b597385a388..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3036 zcma)8U2GIp6h3!mcf0Lw|5y|hje}{m1ZP@ltx!PFQn5$?#TtnkGTqK@NA{1I*;0gr z#6lt|1b9*(eDTRd;*;@76OAOs$OADx_-rsS(nO6-G)hvxbLZae5KZ)C=X~dX?m73) z%$}Lp|FjT-Gzl_kRU=wT$DR=h19UeP=;Hpq)WXeQR*v7EI{(Ar=N6WF&VRkIU7T6B zu#}zUxYvvyZ?CMZEL`i6_~pbhm%R1t;>7aBwdXiuaXck%EYiYK{*Vqm_u0vZ{v{xF zXm;HlC2!>xP!EyY&C?&snw&R9|1Dh8e# zc^%Y_1sS{$N(l#C6u=%-jbCOv$VjzGFxr+`6WI+6MtVKs%v9R1MabR+o5+YKITECE z#ivlxKZA)3`;04;?n0i(u*0~L%J?L*?6GmR4S?NXVF>Ie77l~`!NMsp>EhDtqHO95 z$-e?OL}oY2wu?4!W1|op(ZO{)I4DPXQD9HJLeVKYIjJDmD`W`P)GPYC3OTcDLszd@ zBYHB3=%ZZj37F8S60?|87MXV_d9xjPqRwQ-WPweRQs4$fDaLLo zAD74zGpRX`1;q3?U>h!jni1m;T!IcU98l)7z(pkkB;5zDPK&avZZsQSkbd4nA^z&> z1eZ?~<}Tt>=oC4u8G3;u9}tX7)?1(5btJp-lz%%Wz^+gbK%Uf>s@xdX2FI~5-SjJwUyGG6LVjes72gg08WKx$ZeT}&TRiqp z)pkQ(b=9jyVVqvC`jK4<+^T0c>S)CabXgRz8$mtticvivHz*e=oUI3u)oPDBZv@~a zcF&PF??)_*pN@9-o$40!Nyz7#7BqrA;)Q8k#{uE6@$xTG`_o zEmOs>c{&=mC8t=g^0djRVUi9SwZjOLjdQ%&qjL1z&;O(c5QlM)er)*NFXy51*~i4M z!*(gf>?)r7tq^&>9K(+z-Wt@ebQ8#QEru4?^)|!8@&6S!gc#0=AIZ4hFmz429zWJv zX5a6)Iuiyh@|u%<+(aMW!Nz^?40IpQK-M`BDTM{_+gy|Oy$FMr+4ni(W^_=(=Otuz z_oH!(1x31s3q85MPjW;(u<`n^)YkguA?qB7G=X|Av7ku%BIwC_*HMq>&h_|}s{1_) znR9sFOz)!Jgf0S|MZPX6)N$XVz#7;z>A1IHNTky;-zY)acNI34_5O0)?nInUdmpxB zAKxbW=!K8txG$FVnSw|o_)qgO3ySo8llNrTD=0n$<6V&Xv%>Xw?tIT=y$jd`3pP!< zp4K%c?J4?oMcWzg{MW^L@(!%)uH!6|&_sgF*3+u}-1#b*cT9@w@yS^wQ|^3H$EQC* zrtEyxV9Kc`_3qXkF2lSAJD9A%bK^N`V*OsN09kK++~ns>z4he_KmPXJj}U>j`+x=# z9%01h9%RIUYbgH-<-ef({0s~HmE*H5a7Oq%F!FjB?_tDYll6fcS;u$=lz&j+sKT8J z_bHrWMBWjFuQFo%W#w-wTvYbUjEH|n;d=@{Q23F;>x@|6Hwu>&{;5#*1;(@EdXFiz IfClux0c}-*r~m)} diff --git a/xv6-public/mkdir.sym b/xv6-public/mkdir.sym deleted file mode 100755 index ba27d47..0000000 --- a/xv6-public/mkdir.sym +++ /dev/null @@ -1,61 +0,0 @@ -00000000 .text -0000080e .rodata -00000848 .eh_frame -00000a94 .data -00000aa8 .bss -00000000 .comment -00000000 .debug_aranges -00000000 .debug_info -00000000 .debug_abbrev -00000000 .debug_line -00000000 .debug_str -00000000 .debug_loc -00000000 mkdir.c -00000000 ulib.c -00000090 stosb -00000000 printf.c -00000385 putc -000003a7 printint -00000a94 digits.1372 -00000000 umalloc.c -00000aa8 base -00000ab0 freep -000006cb morecore -00000000 -000000b5 strcpy -0000045a printf -000002a0 memmove -0000032d mknod -00000198 gets -00000365 getpid -0000072b malloc -00000375 sleep -000002f5 pipe -00000305 write -0000033d fstat -00000315 kill -00000355 chdir -0000031d exec -000002ed wait -000002fd read -00000335 unlink -000002dd fork -0000036d sbrk -0000037d uptime -00000aa5 __bss_start -0000014b memset -00000000 main -000000e5 strcmp -0000035d dup -00000206 stat -00000aa5 _edata -00000ab4 _end -00000345 link -000002e5 exit -00000253 atoi -00000124 strlen -00000325 open -00000165 strchr -0000034d mkdir -0000030d close -000005ea free diff --git a/xv6-public/mp.d b/xv6-public/mp.d deleted file mode 100755 index 0714441..0000000 --- a/xv6-public/mp.d +++ /dev/null @@ -1,2 +0,0 @@ -mp.o: mp.c /usr/include/stdc-predef.h types.h defs.h param.h memlayout.h \ - mp.h x86.h mmu.h proc.h diff --git a/xv6-public/mp.o b/xv6-public/mp.o deleted file mode 100755 index 98bf10774ed428ff48477ea309ab40502bed7e2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11600 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 Nj|=j!LA!dv{{bm>3O4`% diff --git a/xv6-public/picirq.d b/xv6-public/picirq.d deleted file mode 100755 index 5233e7e..0000000 --- a/xv6-public/picirq.d +++ /dev/null @@ -1 +0,0 @@ -picirq.o: picirq.c /usr/include/stdc-predef.h types.h x86.h traps.h diff --git a/xv6-public/picirq.o b/xv6-public/picirq.o deleted file mode 100755 index 169a46e388c0bd754e80bf75b13bf0ddb65be4c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3780 zcma)8TWl0n7(Qoaw;kHj(tyz$ZmlW1eA+FH5h`RHj2T(>~^-hb#Ls>VkH`h zL}f+Ml6XnP2!RJRB5yVkGZBdk5OmwZRK}2L9-H8-0B6 z!Y`*jRMyDe0ViD>xX>{^a3Ot|v1A=@pWHaoGkIcaYHIgKjnVp=4c zE%*qWMoW)m5EuFyP`(V(^a_}o<(MJI4f({7GlqO)$S;QcWk?&6sXVg{nQKVDA*&79 zWXN_9RcOn4B(gfV_Na{k<#ozy+h?}g?X%lEWtW`M1p76jwRHtlIEQXww=ZkGsde2< zoI^qe!rV5xu4;O5b(@4f8m&87Em&*qF)2Fb0$7?8a%J0p#yE&^g2arOrl-WexMk5r z*@7Z5TEdTD8Tj8T?hxlFUUi5(XZiqCqkI)Qb;O>4J49FUszc-GeMewcF7x(T`Ee^X=0ys>dL* zNHMx(aUw&fQZ|LFnP9!bf2ibD0yWOYqRQ@;PTyF>vUess|d7`gcDfi`yDL2=b%9s59{)K&` zI~K=F)nqQ45<{-yU($?EXdY$08Q zNpUxsEPFeQgxeE#bjxmG*t;k;mo0e48`FtIs+i|~i$no?nZVw~D?au%NaJO;s?BHp z|FiLlfbA7{+^NRz2J>p7f;Kk3w)jvt?Ta=cVi53fQ$GC9;-Mw3)iR$-Y;Pce`s)Q^ zo!JZ3Gm-W)BI_}nCi)!>DGZ$tTe!Y+sP82hSsy<`Ons}sO$?~mi~ipD%xN%|g6IqMMnQXy&A;gw2=_ zC7&zI!F9i%$oTv ze<_f*wdi;OVQe&8-Q=*0O$aqx-GGL|zG!DTKW|2(*P zN%VQ>U8s+^51r3U%8fU$dWD&HUg*`bgyxJl!^M8xwwLEJ{ffsGI`pZfd;s{aa* z>!#m+jp`d8{s*-`?9sZw~ZH2R|~> diff --git a/xv6-public/pipe.d b/xv6-public/pipe.d deleted file mode 100755 index cbb5d72..0000000 --- a/xv6-public/pipe.d +++ /dev/null @@ -1,2 +0,0 @@ -pipe.o: pipe.c /usr/include/stdc-predef.h types.h defs.h param.h mmu.h \ - proc.h fs.h file.h spinlock.h diff --git a/xv6-public/pipe.o b/xv6-public/pipe.o deleted file mode 100755 index f929d37cf6eeda3684ac2c92079ab96c1968c3d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9144 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 GF!+D&AFqi3 diff --git a/xv6-public/printf.d b/xv6-public/printf.d deleted file mode 100755 index ddd3a8d..0000000 --- a/xv6-public/printf.d +++ /dev/null @@ -1 +0,0 @@ -printf.o: printf.c /usr/include/stdc-predef.h types.h stat.h user.h diff --git a/xv6-public/printf.o b/xv6-public/printf.o deleted file mode 100755 index ef5f36eb20734a4206225e038b8b48fea392205f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4760 zcma)9ZERFo89wLU>GZ-(zbGyk79Cj1c3EZ$wDRTRLSa}CSP>R=6&9v5)9IAyw3)dV z3ZaoWU}$Qy4l$z1s$}C=R%7Ct;KyzV23LZK$tJ4?4L>viQ|$a$mnI~N;`5w)&h%FI zhbME+^M0TAeeby+^ZDf7ol;6+h7`7#<%Fn3d`*vnPVty%7l+30R%(kUlFq zjT=oSqm^r+@#K`Q;NFW!dg4%Y0@>?m9gko)p1h;>UtJly)8R$o-2v&nCuyC$6WH_S zzg1`MH9-T9j+XPbqV8n84^1SeCd8l|oUgL`rEghDPKEB>LNG)gb;DRkjHMWCRhE|m zmOt_>%ieYs4IN|vmghC<-cCP`Ud-)8w}~(#ecich-k+wk*evZWRe=H}gpKi3Xu4O` zyJ&8WcmJhoobEuQ2RnEk-ti@K&93@F-RTNC8ffgfYc1!$f{kuoU$b^ych5)GZ`inL zTkrNA$(^FJ=oJc2iG7w3_+f-(FIL%(WfPjok@YpgdK`=;*I>0njnvpy<9ry|(&)nqdbb?24OqCt2G}*jDJCjHn|oW2O1rent45Q*!f@sevtr+grZXJZfE$W zWny=G7oN$@3HfaFeKTkYWB}LJ#i+Qg1vRjk1wpsn?a!#3+Zzy6h=nwQF$WqgEa8TT zJb<7b;xa{h>g+D}yPj`?c64`W^_s&T1x5 z=YY{qYdzcp>SIQ&9?goWcc%W_rkJlXOYnO`%6~RDVO5_eD*KTVp4a^eo)Y1n8p)Ou zYFDqEE%_8~Ok^v>;y0Wv>rQ*Z3dwMPIOko?lRUx2dZOKVF?XxW`T6A|$Gz$sU~+Fd z7r&Kr_Ee2M$XsPl&g*i#T~~8XE|+ui_no~^TlPz?vif+~?r;*8h5Wo?IiD+LGcmqQ zPL}d+R@4*qDCY%yEPr@^L5 z>47by8`sCz_r&5k{4ys~rT#c9Kd~kj?=KF=M`%Z)&&wCwe9>phF8tkis*q2W^F=uJ zpGcMBZYh;M{=aNIRc0ka*`iza-G_(rZoI#g8p_5;hLL=>WWpjqe55q&X4CF)N!KgN z1H&aZRxgm%X7ahbTNY(E#kP2ES{qT<<&{fah2eCn(3KttNZapaO{D0Bg5gr|#>V>y>?&CYqNx2fT! zw_t%Y4$(81)cpjruHR9ytslH~oksLOhRGZK%ZORGvA-l$ltlT|kelig33S)T0YjCt zg@l_ObwwhRa#JGFS1yZ0Y1n6|%w+q#+|hioe;6i;PWAPbvL_6OcEF)-m@1`;xh!MU zMTLAZYpk)YNTi2{c*#Vfh|7^co8stp`nd0t9XP74AIkWD$A@9avhns%gZCmIW@b>w zu>^CTqWtCUR@`_Xd2MLJ``f|f3xK?h$?YV%38ns`rxqrI_vEwCpIjU7MhNEEEf*_dRzyf~4`T5~XqMqLI%YFvC zGgRoo{5Zak8LZ8&Up2l*L_PdUq+Wd~0^{Vd-)8IAt|u3Pe@ diff --git a/xv6-public/proc.d b/xv6-public/proc.d deleted file mode 100755 index 9396fef..0000000 --- a/xv6-public/proc.d +++ /dev/null @@ -1,2 +0,0 @@ -proc.o: proc.c /usr/include/stdc-predef.h types.h defs.h param.h \ - memlayout.h mmu.h x86.h proc.h spinlock.h diff --git a/xv6-public/proc.o b/xv6-public/proc.o deleted file mode 100755 index fe638d01e41afab0fd54a6156af1e239d5881ce1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18844 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: -#include "stat.h" -#include "user.h" - -int -main(int argc, char *argv[]) -{ - 0: 8d 4c 24 04 lea 0x4(%esp),%ecx - 4: 83 e4 f0 and $0xfffffff0,%esp - 7: ff 71 fc pushl -0x4(%ecx) - a: 55 push %ebp - b: 89 e5 mov %esp,%ebp - d: 53 push %ebx - e: 51 push %ecx - f: 83 ec 10 sub $0x10,%esp - 12: 89 cb mov %ecx,%ebx - int i; - - if(argc < 2){ - 14: 83 3b 01 cmpl $0x1,(%ebx) - 17: 7f 17 jg 30 - printf(2, "Usage: rm files...\n"); - 19: 83 ec 08 sub $0x8,%esp - 1c: 68 0e 08 00 00 push $0x80e - 21: 6a 02 push $0x2 - 23: e8 32 04 00 00 call 45a - 28: 83 c4 10 add $0x10,%esp - exit(); - 2b: e8 b5 02 00 00 call 2e5 - } - - for(i = 1; i < argc; i++){ - 30: c7 45 f4 01 00 00 00 movl $0x1,-0xc(%ebp) - 37: eb 4b jmp 84 - if(unlink(argv[i]) < 0){ - 39: 8b 45 f4 mov -0xc(%ebp),%eax - 3c: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx - 43: 8b 43 04 mov 0x4(%ebx),%eax - 46: 01 d0 add %edx,%eax - 48: 8b 00 mov (%eax),%eax - 4a: 83 ec 0c sub $0xc,%esp - 4d: 50 push %eax - 4e: e8 e2 02 00 00 call 335 - 53: 83 c4 10 add $0x10,%esp - 56: 85 c0 test %eax,%eax - 58: 79 26 jns 80 - printf(2, "rm: %s failed to delete\n", argv[i]); - 5a: 8b 45 f4 mov -0xc(%ebp),%eax - 5d: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx - 64: 8b 43 04 mov 0x4(%ebx),%eax - 67: 01 d0 add %edx,%eax - 69: 8b 00 mov (%eax),%eax - 6b: 83 ec 04 sub $0x4,%esp - 6e: 50 push %eax - 6f: 68 22 08 00 00 push $0x822 - 74: 6a 02 push $0x2 - 76: e8 df 03 00 00 call 45a - 7b: 83 c4 10 add $0x10,%esp - break; - 7e: eb 0b jmp 8b - if(argc < 2){ - printf(2, "Usage: rm files...\n"); - exit(); - } - - for(i = 1; i < argc; i++){ - 80: 83 45 f4 01 addl $0x1,-0xc(%ebp) - 84: 8b 45 f4 mov -0xc(%ebp),%eax - 87: 3b 03 cmp (%ebx),%eax - 89: 7c ae jl 39 - printf(2, "rm: %s failed to delete\n", argv[i]); - break; - } - } - - exit(); - 8b: e8 55 02 00 00 call 2e5 - -00000090 : - "cc"); -} - -static inline void -stosb(void *addr, int data, int cnt) -{ - 90: 55 push %ebp - 91: 89 e5 mov %esp,%ebp - 93: 57 push %edi - 94: 53 push %ebx - asm volatile("cld; rep stosb" : - 95: 8b 4d 08 mov 0x8(%ebp),%ecx - 98: 8b 55 10 mov 0x10(%ebp),%edx - 9b: 8b 45 0c mov 0xc(%ebp),%eax - 9e: 89 cb mov %ecx,%ebx - a0: 89 df mov %ebx,%edi - a2: 89 d1 mov %edx,%ecx - a4: fc cld - a5: f3 aa rep stos %al,%es:(%edi) - a7: 89 ca mov %ecx,%edx - a9: 89 fb mov %edi,%ebx - ab: 89 5d 08 mov %ebx,0x8(%ebp) - ae: 89 55 10 mov %edx,0x10(%ebp) - "=D" (addr), "=c" (cnt) : - "0" (addr), "1" (cnt), "a" (data) : - "memory", "cc"); -} - b1: 5b pop %ebx - b2: 5f pop %edi - b3: 5d pop %ebp - b4: c3 ret - -000000b5 : -#include "user.h" -#include "x86.h" - -char* -strcpy(char *s, char *t) -{ - b5: 55 push %ebp - b6: 89 e5 mov %esp,%ebp - b8: 83 ec 10 sub $0x10,%esp - char *os; - - os = s; - bb: 8b 45 08 mov 0x8(%ebp),%eax - be: 89 45 fc mov %eax,-0x4(%ebp) - while((*s++ = *t++) != 0) - c1: 90 nop - c2: 8b 45 08 mov 0x8(%ebp),%eax - c5: 8d 50 01 lea 0x1(%eax),%edx - c8: 89 55 08 mov %edx,0x8(%ebp) - cb: 8b 55 0c mov 0xc(%ebp),%edx - ce: 8d 4a 01 lea 0x1(%edx),%ecx - d1: 89 4d 0c mov %ecx,0xc(%ebp) - d4: 0f b6 12 movzbl (%edx),%edx - d7: 88 10 mov %dl,(%eax) - d9: 0f b6 00 movzbl (%eax),%eax - dc: 84 c0 test %al,%al - de: 75 e2 jne c2 - ; - return os; - e0: 8b 45 fc mov -0x4(%ebp),%eax -} - e3: c9 leave - e4: c3 ret - -000000e5 : - -int -strcmp(const char *p, const char *q) -{ - e5: 55 push %ebp - e6: 89 e5 mov %esp,%ebp - while(*p && *p == *q) - e8: eb 08 jmp f2 - p++, q++; - ea: 83 45 08 01 addl $0x1,0x8(%ebp) - ee: 83 45 0c 01 addl $0x1,0xc(%ebp) -} - -int -strcmp(const char *p, const char *q) -{ - while(*p && *p == *q) - f2: 8b 45 08 mov 0x8(%ebp),%eax - f5: 0f b6 00 movzbl (%eax),%eax - f8: 84 c0 test %al,%al - fa: 74 10 je 10c - fc: 8b 45 08 mov 0x8(%ebp),%eax - ff: 0f b6 10 movzbl (%eax),%edx - 102: 8b 45 0c mov 0xc(%ebp),%eax - 105: 0f b6 00 movzbl (%eax),%eax - 108: 38 c2 cmp %al,%dl - 10a: 74 de je ea - p++, q++; - return (uchar)*p - (uchar)*q; - 10c: 8b 45 08 mov 0x8(%ebp),%eax - 10f: 0f b6 00 movzbl (%eax),%eax - 112: 0f b6 d0 movzbl %al,%edx - 115: 8b 45 0c mov 0xc(%ebp),%eax - 118: 0f b6 00 movzbl (%eax),%eax - 11b: 0f b6 c0 movzbl %al,%eax - 11e: 29 c2 sub %eax,%edx - 120: 89 d0 mov %edx,%eax -} - 122: 5d pop %ebp - 123: c3 ret - -00000124 : - -uint -strlen(char *s) -{ - 124: 55 push %ebp - 125: 89 e5 mov %esp,%ebp - 127: 83 ec 10 sub $0x10,%esp - int n; - - for(n = 0; s[n]; n++) - 12a: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - 131: eb 04 jmp 137 - 133: 83 45 fc 01 addl $0x1,-0x4(%ebp) - 137: 8b 55 fc mov -0x4(%ebp),%edx - 13a: 8b 45 08 mov 0x8(%ebp),%eax - 13d: 01 d0 add %edx,%eax - 13f: 0f b6 00 movzbl (%eax),%eax - 142: 84 c0 test %al,%al - 144: 75 ed jne 133 - ; - return n; - 146: 8b 45 fc mov -0x4(%ebp),%eax -} - 149: c9 leave - 14a: c3 ret - -0000014b : - -void* -memset(void *dst, int c, uint n) -{ - 14b: 55 push %ebp - 14c: 89 e5 mov %esp,%ebp - stosb(dst, c, n); - 14e: 8b 45 10 mov 0x10(%ebp),%eax - 151: 50 push %eax - 152: ff 75 0c pushl 0xc(%ebp) - 155: ff 75 08 pushl 0x8(%ebp) - 158: e8 33 ff ff ff call 90 - 15d: 83 c4 0c add $0xc,%esp - return dst; - 160: 8b 45 08 mov 0x8(%ebp),%eax -} - 163: c9 leave - 164: c3 ret - -00000165 : - -char* -strchr(const char *s, char c) -{ - 165: 55 push %ebp - 166: 89 e5 mov %esp,%ebp - 168: 83 ec 04 sub $0x4,%esp - 16b: 8b 45 0c mov 0xc(%ebp),%eax - 16e: 88 45 fc mov %al,-0x4(%ebp) - for(; *s; s++) - 171: eb 14 jmp 187 - if(*s == c) - 173: 8b 45 08 mov 0x8(%ebp),%eax - 176: 0f b6 00 movzbl (%eax),%eax - 179: 3a 45 fc cmp -0x4(%ebp),%al - 17c: 75 05 jne 183 - return (char*)s; - 17e: 8b 45 08 mov 0x8(%ebp),%eax - 181: eb 13 jmp 196 -} - -char* -strchr(const char *s, char c) -{ - for(; *s; s++) - 183: 83 45 08 01 addl $0x1,0x8(%ebp) - 187: 8b 45 08 mov 0x8(%ebp),%eax - 18a: 0f b6 00 movzbl (%eax),%eax - 18d: 84 c0 test %al,%al - 18f: 75 e2 jne 173 - if(*s == c) - return (char*)s; - return 0; - 191: b8 00 00 00 00 mov $0x0,%eax -} - 196: c9 leave - 197: c3 ret - -00000198 : - -char* -gets(char *buf, int max) -{ - 198: 55 push %ebp - 199: 89 e5 mov %esp,%ebp - 19b: 83 ec 18 sub $0x18,%esp - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - 19e: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 1a5: eb 44 jmp 1eb - cc = read(0, &c, 1); - 1a7: 83 ec 04 sub $0x4,%esp - 1aa: 6a 01 push $0x1 - 1ac: 8d 45 ef lea -0x11(%ebp),%eax - 1af: 50 push %eax - 1b0: 6a 00 push $0x0 - 1b2: e8 46 01 00 00 call 2fd - 1b7: 83 c4 10 add $0x10,%esp - 1ba: 89 45 f0 mov %eax,-0x10(%ebp) - if(cc < 1) - 1bd: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 1c1: 7f 02 jg 1c5 - break; - 1c3: eb 31 jmp 1f6 - buf[i++] = c; - 1c5: 8b 45 f4 mov -0xc(%ebp),%eax - 1c8: 8d 50 01 lea 0x1(%eax),%edx - 1cb: 89 55 f4 mov %edx,-0xc(%ebp) - 1ce: 89 c2 mov %eax,%edx - 1d0: 8b 45 08 mov 0x8(%ebp),%eax - 1d3: 01 c2 add %eax,%edx - 1d5: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 1d9: 88 02 mov %al,(%edx) - if(c == '\n' || c == '\r') - 1db: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 1df: 3c 0a cmp $0xa,%al - 1e1: 74 13 je 1f6 - 1e3: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 1e7: 3c 0d cmp $0xd,%al - 1e9: 74 0b je 1f6 -gets(char *buf, int max) -{ - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - 1eb: 8b 45 f4 mov -0xc(%ebp),%eax - 1ee: 83 c0 01 add $0x1,%eax - 1f1: 3b 45 0c cmp 0xc(%ebp),%eax - 1f4: 7c b1 jl 1a7 - break; - buf[i++] = c; - if(c == '\n' || c == '\r') - break; - } - buf[i] = '\0'; - 1f6: 8b 55 f4 mov -0xc(%ebp),%edx - 1f9: 8b 45 08 mov 0x8(%ebp),%eax - 1fc: 01 d0 add %edx,%eax - 1fe: c6 00 00 movb $0x0,(%eax) - return buf; - 201: 8b 45 08 mov 0x8(%ebp),%eax -} - 204: c9 leave - 205: c3 ret - -00000206 : - -int -stat(char *n, struct stat *st) -{ - 206: 55 push %ebp - 207: 89 e5 mov %esp,%ebp - 209: 83 ec 18 sub $0x18,%esp - int fd; - int r; - - fd = open(n, O_RDONLY); - 20c: 83 ec 08 sub $0x8,%esp - 20f: 6a 00 push $0x0 - 211: ff 75 08 pushl 0x8(%ebp) - 214: e8 0c 01 00 00 call 325 - 219: 83 c4 10 add $0x10,%esp - 21c: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd < 0) - 21f: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 223: 79 07 jns 22c - return -1; - 225: b8 ff ff ff ff mov $0xffffffff,%eax - 22a: eb 25 jmp 251 - r = fstat(fd, st); - 22c: 83 ec 08 sub $0x8,%esp - 22f: ff 75 0c pushl 0xc(%ebp) - 232: ff 75 f4 pushl -0xc(%ebp) - 235: e8 03 01 00 00 call 33d - 23a: 83 c4 10 add $0x10,%esp - 23d: 89 45 f0 mov %eax,-0x10(%ebp) - close(fd); - 240: 83 ec 0c sub $0xc,%esp - 243: ff 75 f4 pushl -0xc(%ebp) - 246: e8 c2 00 00 00 call 30d - 24b: 83 c4 10 add $0x10,%esp - return r; - 24e: 8b 45 f0 mov -0x10(%ebp),%eax -} - 251: c9 leave - 252: c3 ret - -00000253 : - -int -atoi(const char *s) -{ - 253: 55 push %ebp - 254: 89 e5 mov %esp,%ebp - 256: 83 ec 10 sub $0x10,%esp - int n; - - n = 0; - 259: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - while('0' <= *s && *s <= '9') - 260: eb 25 jmp 287 - n = n*10 + *s++ - '0'; - 262: 8b 55 fc mov -0x4(%ebp),%edx - 265: 89 d0 mov %edx,%eax - 267: c1 e0 02 shl $0x2,%eax - 26a: 01 d0 add %edx,%eax - 26c: 01 c0 add %eax,%eax - 26e: 89 c1 mov %eax,%ecx - 270: 8b 45 08 mov 0x8(%ebp),%eax - 273: 8d 50 01 lea 0x1(%eax),%edx - 276: 89 55 08 mov %edx,0x8(%ebp) - 279: 0f b6 00 movzbl (%eax),%eax - 27c: 0f be c0 movsbl %al,%eax - 27f: 01 c8 add %ecx,%eax - 281: 83 e8 30 sub $0x30,%eax - 284: 89 45 fc mov %eax,-0x4(%ebp) -atoi(const char *s) -{ - int n; - - n = 0; - while('0' <= *s && *s <= '9') - 287: 8b 45 08 mov 0x8(%ebp),%eax - 28a: 0f b6 00 movzbl (%eax),%eax - 28d: 3c 2f cmp $0x2f,%al - 28f: 7e 0a jle 29b - 291: 8b 45 08 mov 0x8(%ebp),%eax - 294: 0f b6 00 movzbl (%eax),%eax - 297: 3c 39 cmp $0x39,%al - 299: 7e c7 jle 262 - n = n*10 + *s++ - '0'; - return n; - 29b: 8b 45 fc mov -0x4(%ebp),%eax -} - 29e: c9 leave - 29f: c3 ret - -000002a0 : - -void* -memmove(void *vdst, void *vsrc, int n) -{ - 2a0: 55 push %ebp - 2a1: 89 e5 mov %esp,%ebp - 2a3: 83 ec 10 sub $0x10,%esp - char *dst, *src; - - dst = vdst; - 2a6: 8b 45 08 mov 0x8(%ebp),%eax - 2a9: 89 45 fc mov %eax,-0x4(%ebp) - src = vsrc; - 2ac: 8b 45 0c mov 0xc(%ebp),%eax - 2af: 89 45 f8 mov %eax,-0x8(%ebp) - while(n-- > 0) - 2b2: eb 17 jmp 2cb - *dst++ = *src++; - 2b4: 8b 45 fc mov -0x4(%ebp),%eax - 2b7: 8d 50 01 lea 0x1(%eax),%edx - 2ba: 89 55 fc mov %edx,-0x4(%ebp) - 2bd: 8b 55 f8 mov -0x8(%ebp),%edx - 2c0: 8d 4a 01 lea 0x1(%edx),%ecx - 2c3: 89 4d f8 mov %ecx,-0x8(%ebp) - 2c6: 0f b6 12 movzbl (%edx),%edx - 2c9: 88 10 mov %dl,(%eax) -{ - char *dst, *src; - - dst = vdst; - src = vsrc; - while(n-- > 0) - 2cb: 8b 45 10 mov 0x10(%ebp),%eax - 2ce: 8d 50 ff lea -0x1(%eax),%edx - 2d1: 89 55 10 mov %edx,0x10(%ebp) - 2d4: 85 c0 test %eax,%eax - 2d6: 7f dc jg 2b4 - *dst++ = *src++; - return vdst; - 2d8: 8b 45 08 mov 0x8(%ebp),%eax -} - 2db: c9 leave - 2dc: c3 ret - -000002dd : - name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 2dd: b8 01 00 00 00 mov $0x1,%eax - 2e2: cd 40 int $0x40 - 2e4: c3 ret - -000002e5 : -SYSCALL(exit) - 2e5: b8 02 00 00 00 mov $0x2,%eax - 2ea: cd 40 int $0x40 - 2ec: c3 ret - -000002ed : -SYSCALL(wait) - 2ed: b8 03 00 00 00 mov $0x3,%eax - 2f2: cd 40 int $0x40 - 2f4: c3 ret - -000002f5 : -SYSCALL(pipe) - 2f5: b8 04 00 00 00 mov $0x4,%eax - 2fa: cd 40 int $0x40 - 2fc: c3 ret - -000002fd : -SYSCALL(read) - 2fd: b8 05 00 00 00 mov $0x5,%eax - 302: cd 40 int $0x40 - 304: c3 ret - -00000305 : -SYSCALL(write) - 305: b8 10 00 00 00 mov $0x10,%eax - 30a: cd 40 int $0x40 - 30c: c3 ret - -0000030d : -SYSCALL(close) - 30d: b8 15 00 00 00 mov $0x15,%eax - 312: cd 40 int $0x40 - 314: c3 ret - -00000315 : -SYSCALL(kill) - 315: b8 06 00 00 00 mov $0x6,%eax - 31a: cd 40 int $0x40 - 31c: c3 ret - -0000031d : -SYSCALL(exec) - 31d: b8 07 00 00 00 mov $0x7,%eax - 322: cd 40 int $0x40 - 324: c3 ret - -00000325 : -SYSCALL(open) - 325: b8 0f 00 00 00 mov $0xf,%eax - 32a: cd 40 int $0x40 - 32c: c3 ret - -0000032d : -SYSCALL(mknod) - 32d: b8 11 00 00 00 mov $0x11,%eax - 332: cd 40 int $0x40 - 334: c3 ret - -00000335 : -SYSCALL(unlink) - 335: b8 12 00 00 00 mov $0x12,%eax - 33a: cd 40 int $0x40 - 33c: c3 ret - -0000033d : -SYSCALL(fstat) - 33d: b8 08 00 00 00 mov $0x8,%eax - 342: cd 40 int $0x40 - 344: c3 ret - -00000345 : -SYSCALL(link) - 345: b8 13 00 00 00 mov $0x13,%eax - 34a: cd 40 int $0x40 - 34c: c3 ret - -0000034d : -SYSCALL(mkdir) - 34d: b8 14 00 00 00 mov $0x14,%eax - 352: cd 40 int $0x40 - 354: c3 ret - -00000355 : -SYSCALL(chdir) - 355: b8 09 00 00 00 mov $0x9,%eax - 35a: cd 40 int $0x40 - 35c: c3 ret - -0000035d : -SYSCALL(dup) - 35d: b8 0a 00 00 00 mov $0xa,%eax - 362: cd 40 int $0x40 - 364: c3 ret - -00000365 : -SYSCALL(getpid) - 365: b8 0b 00 00 00 mov $0xb,%eax - 36a: cd 40 int $0x40 - 36c: c3 ret - -0000036d : -SYSCALL(sbrk) - 36d: b8 0c 00 00 00 mov $0xc,%eax - 372: cd 40 int $0x40 - 374: c3 ret - -00000375 : -SYSCALL(sleep) - 375: b8 0d 00 00 00 mov $0xd,%eax - 37a: cd 40 int $0x40 - 37c: c3 ret - -0000037d : -SYSCALL(uptime) - 37d: b8 0e 00 00 00 mov $0xe,%eax - 382: cd 40 int $0x40 - 384: c3 ret - -00000385 : -#include "stat.h" -#include "user.h" - -static void -putc(int fd, char c) -{ - 385: 55 push %ebp - 386: 89 e5 mov %esp,%ebp - 388: 83 ec 18 sub $0x18,%esp - 38b: 8b 45 0c mov 0xc(%ebp),%eax - 38e: 88 45 f4 mov %al,-0xc(%ebp) - write(fd, &c, 1); - 391: 83 ec 04 sub $0x4,%esp - 394: 6a 01 push $0x1 - 396: 8d 45 f4 lea -0xc(%ebp),%eax - 399: 50 push %eax - 39a: ff 75 08 pushl 0x8(%ebp) - 39d: e8 63 ff ff ff call 305 - 3a2: 83 c4 10 add $0x10,%esp -} - 3a5: c9 leave - 3a6: c3 ret - -000003a7 : - -static void -printint(int fd, int xx, int base, int sgn) -{ - 3a7: 55 push %ebp - 3a8: 89 e5 mov %esp,%ebp - 3aa: 53 push %ebx - 3ab: 83 ec 24 sub $0x24,%esp - static char digits[] = "0123456789ABCDEF"; - char buf[16]; - int i, neg; - uint x; - - neg = 0; - 3ae: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - if(sgn && xx < 0){ - 3b5: 83 7d 14 00 cmpl $0x0,0x14(%ebp) - 3b9: 74 17 je 3d2 - 3bb: 83 7d 0c 00 cmpl $0x0,0xc(%ebp) - 3bf: 79 11 jns 3d2 - neg = 1; - 3c1: c7 45 f0 01 00 00 00 movl $0x1,-0x10(%ebp) - x = -xx; - 3c8: 8b 45 0c mov 0xc(%ebp),%eax - 3cb: f7 d8 neg %eax - 3cd: 89 45 ec mov %eax,-0x14(%ebp) - 3d0: eb 06 jmp 3d8 - } else { - x = xx; - 3d2: 8b 45 0c mov 0xc(%ebp),%eax - 3d5: 89 45 ec mov %eax,-0x14(%ebp) - } - - i = 0; - 3d8: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - do{ - buf[i++] = digits[x % base]; - 3df: 8b 4d f4 mov -0xc(%ebp),%ecx - 3e2: 8d 41 01 lea 0x1(%ecx),%eax - 3e5: 89 45 f4 mov %eax,-0xc(%ebp) - 3e8: 8b 5d 10 mov 0x10(%ebp),%ebx - 3eb: 8b 45 ec mov -0x14(%ebp),%eax - 3ee: ba 00 00 00 00 mov $0x0,%edx - 3f3: f7 f3 div %ebx - 3f5: 89 d0 mov %edx,%eax - 3f7: 0f b6 80 90 0a 00 00 movzbl 0xa90(%eax),%eax - 3fe: 88 44 0d dc mov %al,-0x24(%ebp,%ecx,1) - }while((x /= base) != 0); - 402: 8b 5d 10 mov 0x10(%ebp),%ebx - 405: 8b 45 ec mov -0x14(%ebp),%eax - 408: ba 00 00 00 00 mov $0x0,%edx - 40d: f7 f3 div %ebx - 40f: 89 45 ec mov %eax,-0x14(%ebp) - 412: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 416: 75 c7 jne 3df - if(neg) - 418: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 41c: 74 0e je 42c - buf[i++] = '-'; - 41e: 8b 45 f4 mov -0xc(%ebp),%eax - 421: 8d 50 01 lea 0x1(%eax),%edx - 424: 89 55 f4 mov %edx,-0xc(%ebp) - 427: c6 44 05 dc 2d movb $0x2d,-0x24(%ebp,%eax,1) - - while(--i >= 0) - 42c: eb 1d jmp 44b - putc(fd, buf[i]); - 42e: 8d 55 dc lea -0x24(%ebp),%edx - 431: 8b 45 f4 mov -0xc(%ebp),%eax - 434: 01 d0 add %edx,%eax - 436: 0f b6 00 movzbl (%eax),%eax - 439: 0f be c0 movsbl %al,%eax - 43c: 83 ec 08 sub $0x8,%esp - 43f: 50 push %eax - 440: ff 75 08 pushl 0x8(%ebp) - 443: e8 3d ff ff ff call 385 - 448: 83 c4 10 add $0x10,%esp - buf[i++] = digits[x % base]; - }while((x /= base) != 0); - if(neg) - buf[i++] = '-'; - - while(--i >= 0) - 44b: 83 6d f4 01 subl $0x1,-0xc(%ebp) - 44f: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 453: 79 d9 jns 42e - putc(fd, buf[i]); -} - 455: 8b 5d fc mov -0x4(%ebp),%ebx - 458: c9 leave - 459: c3 ret - -0000045a : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void -printf(int fd, char *fmt, ...) -{ - 45a: 55 push %ebp - 45b: 89 e5 mov %esp,%ebp - 45d: 83 ec 28 sub $0x28,%esp - char *s; - int c, i, state; - uint *ap; - - state = 0; - 460: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - ap = (uint*)(void*)&fmt + 1; - 467: 8d 45 0c lea 0xc(%ebp),%eax - 46a: 83 c0 04 add $0x4,%eax - 46d: 89 45 e8 mov %eax,-0x18(%ebp) - for(i = 0; fmt[i]; i++){ - 470: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - 477: e9 59 01 00 00 jmp 5d5 - c = fmt[i] & 0xff; - 47c: 8b 55 0c mov 0xc(%ebp),%edx - 47f: 8b 45 f0 mov -0x10(%ebp),%eax - 482: 01 d0 add %edx,%eax - 484: 0f b6 00 movzbl (%eax),%eax - 487: 0f be c0 movsbl %al,%eax - 48a: 25 ff 00 00 00 and $0xff,%eax - 48f: 89 45 e4 mov %eax,-0x1c(%ebp) - if(state == 0){ - 492: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 496: 75 2c jne 4c4 - if(c == '%'){ - 498: 83 7d e4 25 cmpl $0x25,-0x1c(%ebp) - 49c: 75 0c jne 4aa - state = '%'; - 49e: c7 45 ec 25 00 00 00 movl $0x25,-0x14(%ebp) - 4a5: e9 27 01 00 00 jmp 5d1 - } else { - putc(fd, c); - 4aa: 8b 45 e4 mov -0x1c(%ebp),%eax - 4ad: 0f be c0 movsbl %al,%eax - 4b0: 83 ec 08 sub $0x8,%esp - 4b3: 50 push %eax - 4b4: ff 75 08 pushl 0x8(%ebp) - 4b7: e8 c9 fe ff ff call 385 - 4bc: 83 c4 10 add $0x10,%esp - 4bf: e9 0d 01 00 00 jmp 5d1 - } - } else if(state == '%'){ - 4c4: 83 7d ec 25 cmpl $0x25,-0x14(%ebp) - 4c8: 0f 85 03 01 00 00 jne 5d1 - if(c == 'd'){ - 4ce: 83 7d e4 64 cmpl $0x64,-0x1c(%ebp) - 4d2: 75 1e jne 4f2 - printint(fd, *ap, 10, 1); - 4d4: 8b 45 e8 mov -0x18(%ebp),%eax - 4d7: 8b 00 mov (%eax),%eax - 4d9: 6a 01 push $0x1 - 4db: 6a 0a push $0xa - 4dd: 50 push %eax - 4de: ff 75 08 pushl 0x8(%ebp) - 4e1: e8 c1 fe ff ff call 3a7 - 4e6: 83 c4 10 add $0x10,%esp - ap++; - 4e9: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 4ed: e9 d8 00 00 00 jmp 5ca - } else if(c == 'x' || c == 'p'){ - 4f2: 83 7d e4 78 cmpl $0x78,-0x1c(%ebp) - 4f6: 74 06 je 4fe - 4f8: 83 7d e4 70 cmpl $0x70,-0x1c(%ebp) - 4fc: 75 1e jne 51c - printint(fd, *ap, 16, 0); - 4fe: 8b 45 e8 mov -0x18(%ebp),%eax - 501: 8b 00 mov (%eax),%eax - 503: 6a 00 push $0x0 - 505: 6a 10 push $0x10 - 507: 50 push %eax - 508: ff 75 08 pushl 0x8(%ebp) - 50b: e8 97 fe ff ff call 3a7 - 510: 83 c4 10 add $0x10,%esp - ap++; - 513: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 517: e9 ae 00 00 00 jmp 5ca - } else if(c == 's'){ - 51c: 83 7d e4 73 cmpl $0x73,-0x1c(%ebp) - 520: 75 43 jne 565 - s = (char*)*ap; - 522: 8b 45 e8 mov -0x18(%ebp),%eax - 525: 8b 00 mov (%eax),%eax - 527: 89 45 f4 mov %eax,-0xc(%ebp) - ap++; - 52a: 83 45 e8 04 addl $0x4,-0x18(%ebp) - if(s == 0) - 52e: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 532: 75 07 jne 53b - s = "(null)"; - 534: c7 45 f4 3b 08 00 00 movl $0x83b,-0xc(%ebp) - while(*s != 0){ - 53b: eb 1c jmp 559 - putc(fd, *s); - 53d: 8b 45 f4 mov -0xc(%ebp),%eax - 540: 0f b6 00 movzbl (%eax),%eax - 543: 0f be c0 movsbl %al,%eax - 546: 83 ec 08 sub $0x8,%esp - 549: 50 push %eax - 54a: ff 75 08 pushl 0x8(%ebp) - 54d: e8 33 fe ff ff call 385 - 552: 83 c4 10 add $0x10,%esp - s++; - 555: 83 45 f4 01 addl $0x1,-0xc(%ebp) - } else if(c == 's'){ - s = (char*)*ap; - ap++; - if(s == 0) - s = "(null)"; - while(*s != 0){ - 559: 8b 45 f4 mov -0xc(%ebp),%eax - 55c: 0f b6 00 movzbl (%eax),%eax - 55f: 84 c0 test %al,%al - 561: 75 da jne 53d - 563: eb 65 jmp 5ca - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 565: 83 7d e4 63 cmpl $0x63,-0x1c(%ebp) - 569: 75 1d jne 588 - putc(fd, *ap); - 56b: 8b 45 e8 mov -0x18(%ebp),%eax - 56e: 8b 00 mov (%eax),%eax - 570: 0f be c0 movsbl %al,%eax - 573: 83 ec 08 sub $0x8,%esp - 576: 50 push %eax - 577: ff 75 08 pushl 0x8(%ebp) - 57a: e8 06 fe ff ff call 385 - 57f: 83 c4 10 add $0x10,%esp - ap++; - 582: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 586: eb 42 jmp 5ca - } else if(c == '%'){ - 588: 83 7d e4 25 cmpl $0x25,-0x1c(%ebp) - 58c: 75 17 jne 5a5 - putc(fd, c); - 58e: 8b 45 e4 mov -0x1c(%ebp),%eax - 591: 0f be c0 movsbl %al,%eax - 594: 83 ec 08 sub $0x8,%esp - 597: 50 push %eax - 598: ff 75 08 pushl 0x8(%ebp) - 59b: e8 e5 fd ff ff call 385 - 5a0: 83 c4 10 add $0x10,%esp - 5a3: eb 25 jmp 5ca - } else { - // Unknown % sequence. Print it to draw attention. - putc(fd, '%'); - 5a5: 83 ec 08 sub $0x8,%esp - 5a8: 6a 25 push $0x25 - 5aa: ff 75 08 pushl 0x8(%ebp) - 5ad: e8 d3 fd ff ff call 385 - 5b2: 83 c4 10 add $0x10,%esp - putc(fd, c); - 5b5: 8b 45 e4 mov -0x1c(%ebp),%eax - 5b8: 0f be c0 movsbl %al,%eax - 5bb: 83 ec 08 sub $0x8,%esp - 5be: 50 push %eax - 5bf: ff 75 08 pushl 0x8(%ebp) - 5c2: e8 be fd ff ff call 385 - 5c7: 83 c4 10 add $0x10,%esp - } - state = 0; - 5ca: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for(i = 0; fmt[i]; i++){ - 5d1: 83 45 f0 01 addl $0x1,-0x10(%ebp) - 5d5: 8b 55 0c mov 0xc(%ebp),%edx - 5d8: 8b 45 f0 mov -0x10(%ebp),%eax - 5db: 01 d0 add %edx,%eax - 5dd: 0f b6 00 movzbl (%eax),%eax - 5e0: 84 c0 test %al,%al - 5e2: 0f 85 94 fe ff ff jne 47c - putc(fd, c); - } - state = 0; - } - } -} - 5e8: c9 leave - 5e9: c3 ret - -000005ea : -static Header base; -static Header *freep; - -void -free(void *ap) -{ - 5ea: 55 push %ebp - 5eb: 89 e5 mov %esp,%ebp - 5ed: 83 ec 10 sub $0x10,%esp - Header *bp, *p; - - bp = (Header*)ap - 1; - 5f0: 8b 45 08 mov 0x8(%ebp),%eax - 5f3: 83 e8 08 sub $0x8,%eax - 5f6: 89 45 f8 mov %eax,-0x8(%ebp) - for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 5f9: a1 ac 0a 00 00 mov 0xaac,%eax - 5fe: 89 45 fc mov %eax,-0x4(%ebp) - 601: eb 24 jmp 627 - if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 603: 8b 45 fc mov -0x4(%ebp),%eax - 606: 8b 00 mov (%eax),%eax - 608: 3b 45 fc cmp -0x4(%ebp),%eax - 60b: 77 12 ja 61f - 60d: 8b 45 f8 mov -0x8(%ebp),%eax - 610: 3b 45 fc cmp -0x4(%ebp),%eax - 613: 77 24 ja 639 - 615: 8b 45 fc mov -0x4(%ebp),%eax - 618: 8b 00 mov (%eax),%eax - 61a: 3b 45 f8 cmp -0x8(%ebp),%eax - 61d: 77 1a ja 639 -free(void *ap) -{ - Header *bp, *p; - - bp = (Header*)ap - 1; - for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 61f: 8b 45 fc mov -0x4(%ebp),%eax - 622: 8b 00 mov (%eax),%eax - 624: 89 45 fc mov %eax,-0x4(%ebp) - 627: 8b 45 f8 mov -0x8(%ebp),%eax - 62a: 3b 45 fc cmp -0x4(%ebp),%eax - 62d: 76 d4 jbe 603 - 62f: 8b 45 fc mov -0x4(%ebp),%eax - 632: 8b 00 mov (%eax),%eax - 634: 3b 45 f8 cmp -0x8(%ebp),%eax - 637: 76 ca jbe 603 - if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - break; - if(bp + bp->s.size == p->s.ptr){ - 639: 8b 45 f8 mov -0x8(%ebp),%eax - 63c: 8b 40 04 mov 0x4(%eax),%eax - 63f: 8d 14 c5 00 00 00 00 lea 0x0(,%eax,8),%edx - 646: 8b 45 f8 mov -0x8(%ebp),%eax - 649: 01 c2 add %eax,%edx - 64b: 8b 45 fc mov -0x4(%ebp),%eax - 64e: 8b 00 mov (%eax),%eax - 650: 39 c2 cmp %eax,%edx - 652: 75 24 jne 678 - bp->s.size += p->s.ptr->s.size; - 654: 8b 45 f8 mov -0x8(%ebp),%eax - 657: 8b 50 04 mov 0x4(%eax),%edx - 65a: 8b 45 fc mov -0x4(%ebp),%eax - 65d: 8b 00 mov (%eax),%eax - 65f: 8b 40 04 mov 0x4(%eax),%eax - 662: 01 c2 add %eax,%edx - 664: 8b 45 f8 mov -0x8(%ebp),%eax - 667: 89 50 04 mov %edx,0x4(%eax) - bp->s.ptr = p->s.ptr->s.ptr; - 66a: 8b 45 fc mov -0x4(%ebp),%eax - 66d: 8b 00 mov (%eax),%eax - 66f: 8b 10 mov (%eax),%edx - 671: 8b 45 f8 mov -0x8(%ebp),%eax - 674: 89 10 mov %edx,(%eax) - 676: eb 0a jmp 682 - } else - bp->s.ptr = p->s.ptr; - 678: 8b 45 fc mov -0x4(%ebp),%eax - 67b: 8b 10 mov (%eax),%edx - 67d: 8b 45 f8 mov -0x8(%ebp),%eax - 680: 89 10 mov %edx,(%eax) - if(p + p->s.size == bp){ - 682: 8b 45 fc mov -0x4(%ebp),%eax - 685: 8b 40 04 mov 0x4(%eax),%eax - 688: 8d 14 c5 00 00 00 00 lea 0x0(,%eax,8),%edx - 68f: 8b 45 fc mov -0x4(%ebp),%eax - 692: 01 d0 add %edx,%eax - 694: 3b 45 f8 cmp -0x8(%ebp),%eax - 697: 75 20 jne 6b9 - p->s.size += bp->s.size; - 699: 8b 45 fc mov -0x4(%ebp),%eax - 69c: 8b 50 04 mov 0x4(%eax),%edx - 69f: 8b 45 f8 mov -0x8(%ebp),%eax - 6a2: 8b 40 04 mov 0x4(%eax),%eax - 6a5: 01 c2 add %eax,%edx - 6a7: 8b 45 fc mov -0x4(%ebp),%eax - 6aa: 89 50 04 mov %edx,0x4(%eax) - p->s.ptr = bp->s.ptr; - 6ad: 8b 45 f8 mov -0x8(%ebp),%eax - 6b0: 8b 10 mov (%eax),%edx - 6b2: 8b 45 fc mov -0x4(%ebp),%eax - 6b5: 89 10 mov %edx,(%eax) - 6b7: eb 08 jmp 6c1 - } else - p->s.ptr = bp; - 6b9: 8b 45 fc mov -0x4(%ebp),%eax - 6bc: 8b 55 f8 mov -0x8(%ebp),%edx - 6bf: 89 10 mov %edx,(%eax) - freep = p; - 6c1: 8b 45 fc mov -0x4(%ebp),%eax - 6c4: a3 ac 0a 00 00 mov %eax,0xaac -} - 6c9: c9 leave - 6ca: c3 ret - -000006cb : - -static Header* -morecore(uint nu) -{ - 6cb: 55 push %ebp - 6cc: 89 e5 mov %esp,%ebp - 6ce: 83 ec 18 sub $0x18,%esp - char *p; - Header *hp; - - if(nu < 4096) - 6d1: 81 7d 08 ff 0f 00 00 cmpl $0xfff,0x8(%ebp) - 6d8: 77 07 ja 6e1 - nu = 4096; - 6da: c7 45 08 00 10 00 00 movl $0x1000,0x8(%ebp) - p = sbrk(nu * sizeof(Header)); - 6e1: 8b 45 08 mov 0x8(%ebp),%eax - 6e4: c1 e0 03 shl $0x3,%eax - 6e7: 83 ec 0c sub $0xc,%esp - 6ea: 50 push %eax - 6eb: e8 7d fc ff ff call 36d - 6f0: 83 c4 10 add $0x10,%esp - 6f3: 89 45 f4 mov %eax,-0xc(%ebp) - if(p == (char*)-1) - 6f6: 83 7d f4 ff cmpl $0xffffffff,-0xc(%ebp) - 6fa: 75 07 jne 703 - return 0; - 6fc: b8 00 00 00 00 mov $0x0,%eax - 701: eb 26 jmp 729 - hp = (Header*)p; - 703: 8b 45 f4 mov -0xc(%ebp),%eax - 706: 89 45 f0 mov %eax,-0x10(%ebp) - hp->s.size = nu; - 709: 8b 45 f0 mov -0x10(%ebp),%eax - 70c: 8b 55 08 mov 0x8(%ebp),%edx - 70f: 89 50 04 mov %edx,0x4(%eax) - free((void*)(hp + 1)); - 712: 8b 45 f0 mov -0x10(%ebp),%eax - 715: 83 c0 08 add $0x8,%eax - 718: 83 ec 0c sub $0xc,%esp - 71b: 50 push %eax - 71c: e8 c9 fe ff ff call 5ea - 721: 83 c4 10 add $0x10,%esp - return freep; - 724: a1 ac 0a 00 00 mov 0xaac,%eax -} - 729: c9 leave - 72a: c3 ret - -0000072b : - -void* -malloc(uint nbytes) -{ - 72b: 55 push %ebp - 72c: 89 e5 mov %esp,%ebp - 72e: 83 ec 18 sub $0x18,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 731: 8b 45 08 mov 0x8(%ebp),%eax - 734: 83 c0 07 add $0x7,%eax - 737: c1 e8 03 shr $0x3,%eax - 73a: 83 c0 01 add $0x1,%eax - 73d: 89 45 ec mov %eax,-0x14(%ebp) - if((prevp = freep) == 0){ - 740: a1 ac 0a 00 00 mov 0xaac,%eax - 745: 89 45 f0 mov %eax,-0x10(%ebp) - 748: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 74c: 75 23 jne 771 - base.s.ptr = freep = prevp = &base; - 74e: c7 45 f0 a4 0a 00 00 movl $0xaa4,-0x10(%ebp) - 755: 8b 45 f0 mov -0x10(%ebp),%eax - 758: a3 ac 0a 00 00 mov %eax,0xaac - 75d: a1 ac 0a 00 00 mov 0xaac,%eax - 762: a3 a4 0a 00 00 mov %eax,0xaa4 - base.s.size = 0; - 767: c7 05 a8 0a 00 00 00 movl $0x0,0xaa8 - 76e: 00 00 00 - } - for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 771: 8b 45 f0 mov -0x10(%ebp),%eax - 774: 8b 00 mov (%eax),%eax - 776: 89 45 f4 mov %eax,-0xc(%ebp) - if(p->s.size >= nunits){ - 779: 8b 45 f4 mov -0xc(%ebp),%eax - 77c: 8b 40 04 mov 0x4(%eax),%eax - 77f: 3b 45 ec cmp -0x14(%ebp),%eax - 782: 72 4d jb 7d1 - if(p->s.size == nunits) - 784: 8b 45 f4 mov -0xc(%ebp),%eax - 787: 8b 40 04 mov 0x4(%eax),%eax - 78a: 3b 45 ec cmp -0x14(%ebp),%eax - 78d: 75 0c jne 79b - prevp->s.ptr = p->s.ptr; - 78f: 8b 45 f4 mov -0xc(%ebp),%eax - 792: 8b 10 mov (%eax),%edx - 794: 8b 45 f0 mov -0x10(%ebp),%eax - 797: 89 10 mov %edx,(%eax) - 799: eb 26 jmp 7c1 - else { - p->s.size -= nunits; - 79b: 8b 45 f4 mov -0xc(%ebp),%eax - 79e: 8b 40 04 mov 0x4(%eax),%eax - 7a1: 2b 45 ec sub -0x14(%ebp),%eax - 7a4: 89 c2 mov %eax,%edx - 7a6: 8b 45 f4 mov -0xc(%ebp),%eax - 7a9: 89 50 04 mov %edx,0x4(%eax) - p += p->s.size; - 7ac: 8b 45 f4 mov -0xc(%ebp),%eax - 7af: 8b 40 04 mov 0x4(%eax),%eax - 7b2: c1 e0 03 shl $0x3,%eax - 7b5: 01 45 f4 add %eax,-0xc(%ebp) - p->s.size = nunits; - 7b8: 8b 45 f4 mov -0xc(%ebp),%eax - 7bb: 8b 55 ec mov -0x14(%ebp),%edx - 7be: 89 50 04 mov %edx,0x4(%eax) - } - freep = prevp; - 7c1: 8b 45 f0 mov -0x10(%ebp),%eax - 7c4: a3 ac 0a 00 00 mov %eax,0xaac - return (void*)(p + 1); - 7c9: 8b 45 f4 mov -0xc(%ebp),%eax - 7cc: 83 c0 08 add $0x8,%eax - 7cf: eb 3b jmp 80c - } - if(p == freep) - 7d1: a1 ac 0a 00 00 mov 0xaac,%eax - 7d6: 39 45 f4 cmp %eax,-0xc(%ebp) - 7d9: 75 1e jne 7f9 - if((p = morecore(nunits)) == 0) - 7db: 83 ec 0c sub $0xc,%esp - 7de: ff 75 ec pushl -0x14(%ebp) - 7e1: e8 e5 fe ff ff call 6cb - 7e6: 83 c4 10 add $0x10,%esp - 7e9: 89 45 f4 mov %eax,-0xc(%ebp) - 7ec: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 7f0: 75 07 jne 7f9 - return 0; - 7f2: b8 00 00 00 00 mov $0x0,%eax - 7f7: eb 13 jmp 80c - nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - if((prevp = freep) == 0){ - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 7f9: 8b 45 f4 mov -0xc(%ebp),%eax - 7fc: 89 45 f0 mov %eax,-0x10(%ebp) - 7ff: 8b 45 f4 mov -0xc(%ebp),%eax - 802: 8b 00 mov (%eax),%eax - 804: 89 45 f4 mov %eax,-0xc(%ebp) - return (void*)(p + 1); - } - if(p == freep) - if((p = morecore(nunits)) == 0) - return 0; - } - 807: e9 6d ff ff ff jmp 779 -} - 80c: c9 leave - 80d: c3 ret diff --git a/xv6-public/rm.d b/xv6-public/rm.d deleted file mode 100755 index ba50b6b..0000000 --- a/xv6-public/rm.d +++ /dev/null @@ -1 +0,0 @@ -rm.o: rm.c /usr/include/stdc-predef.h types.h stat.h user.h diff --git a/xv6-public/rm.o b/xv6-public/rm.o deleted file mode 100755 index 9935ae2661161cbe413b80171e98f801b1dcde3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3028 zcma)8U1%It6h3!mceBZEl1)?FO4UvwwUKrvu??|Je>JT!we-gtp@@{pW_B}ncQ&1w zO;cMam=-Lt*n*(GiVuR~Q}IOv!Gef=D8A@}j}_ELu-XUFV*JjXdpA=Q^pH8<`Ja2v zy>~X}_aA&(2tk?znY64C-O47OAqoAoihAkt!M@D=tzVW--J7`d{jsC-i=|6n&F>KB zSI;lzr#bFrf0s+%es*F1-ODR4a>T-DM%-MW`NiT99eVMzGmrjD zK<3Ew%KJ**F3h7IB6pbQK9b23kz4gftgvoX{F)azj?+P5eZ<-jSrr$SDJyPRQ(n!B zy$))}QVd=KWyEH1(Fta$maniKWMtYT7;V3@Ch`w57}-^bGc#E~h>^V!HjxugawJIS zicg_re+Cmd_8C_xTST77vBS8U$@wJm?6L8*^@H7HVG!&m7LI}a&cazR>EhDtqI~9a z$-e|QL~b|Awu>ydv0ey{=-|2?98{p9=wVN?LeVK!a8gOGSI7{osYh(+>MfXEYrA^H z3Q@`-qK^uN-7uk3CFU_JN9-w@T_c4Zg^k7WUJl-yd+Vv9=tZwtN<8DeMh8)Dh|D|( zLPfo{ORoy*5sxD<-;L7a5Zcq#cFH0hSz=FN4Hj8+DE+dXMWW7h#&|EABxS%2iZhJe zQa&Y-CuUM}4hu-=3BYzd1~p^Gop=NtVK}7B7k~>&21t4cT%8tWS>9+i9F_hJ;6nV_ z)d?=|66P*&1f4R+G$Su`ot z0gf%7Gg+k>)coKiwH)PXH>A4j2Q+qQ!Wy-PobApQ%dT%_7B>TLSJex=&@V%E!}9d5 zxoyMt@Q`I!@i%qa4J$Sx4-Z;)C1}_)9LK_B)33#TkSI}%{MdGDz8m=g5-YQAXvd*j zKKW18b|YSM-3#InsSS?dD-3Vi=)gJdf z6M|RRJxku4AFCL44K$;0pw=k6wSjVdCf>Sr%fQ_1usze9todb|W551gC;!*tNA9mN=KlH*OEkkjXW{wJ+N9L7QV((pH5&O_z1 zk7+HQb}1$7J>2?j5P7~F!*m!+dYHNLSkaZ43+Jkx%EGW{x7<#(ib=2dzb3Oi` z>V7Xk<{X|k)0?O_s*6Bpk)Jmd>bP%EfPZ8(>A1IHNTt({{Gt?T--ocVtoL^jaeGs7 zI_-Vf(tX@W_0a<#$8ldQ>oWzBHfM=GW3Uk%n6_u=&XTq>-v8eg>*+VJuDedMOhOYWGF!J*`?>RFGVhxd*W;73Os3rV zw2mMC6q&N~WrHcFn%28pE4Tvl3hW@ZqeVQo^qF9Nb<3N~HTjK`KWFNzFF*L|M~~=X z#0#|D2Q*M%Gb1+lFe8f3DF12Ye_i?c4h#Gv$7fq$QG6a4d0!d%pE`lVChG&&vySof zEB}DPVTHRC9#F`4jPs8xe2Ed`uPT32;exVXVMP2p3g1=ufx>GFZ!ltgUn^Wx_=iH- Q7Z}fy>uphJ0S)MX146`nwg3PC diff --git a/xv6-public/rm.sym b/xv6-public/rm.sym deleted file mode 100755 index ab80df2..0000000 --- a/xv6-public/rm.sym +++ /dev/null @@ -1,61 +0,0 @@ -00000000 .text -0000080e .rodata -00000844 .eh_frame -00000a90 .data -00000aa4 .bss -00000000 .comment -00000000 .debug_aranges -00000000 .debug_info -00000000 .debug_abbrev -00000000 .debug_line -00000000 .debug_str -00000000 .debug_loc -00000000 rm.c -00000000 ulib.c -00000090 stosb -00000000 printf.c -00000385 putc -000003a7 printint -00000a90 digits.1372 -00000000 umalloc.c -00000aa4 base -00000aac freep -000006cb morecore -00000000 -000000b5 strcpy -0000045a printf -000002a0 memmove -0000032d mknod -00000198 gets -00000365 getpid -0000072b malloc -00000375 sleep -000002f5 pipe -00000305 write -0000033d fstat -00000315 kill -00000355 chdir -0000031d exec -000002ed wait -000002fd read -00000335 unlink -000002dd fork -0000036d sbrk -0000037d uptime -00000aa1 __bss_start -0000014b memset -00000000 main -000000e5 strcmp -0000035d dup -00000206 stat -00000aa1 _edata -00000ab0 _end -00000345 link -000002e5 exit -00000253 atoi -00000124 strlen -00000325 open -00000165 strchr -0000034d mkdir -0000030d close -000005ea free diff --git a/xv6-public/sh.asm b/xv6-public/sh.asm deleted file mode 100755 index 175be6f..0000000 --- a/xv6-public/sh.asm +++ /dev/null @@ -1,2737 +0,0 @@ - -_sh: file format elf32-i386 - - -Disassembly of section .text: - -00000000 : -struct cmd *parsecmd(char*); - -// Execute cmd. Never returns. -void -runcmd(struct cmd *cmd) -{ - 0: 55 push %ebp - 1: 89 e5 mov %esp,%ebp - 3: 83 ec 28 sub $0x28,%esp - struct execcmd *ecmd; - struct listcmd *lcmd; - struct pipecmd *pcmd; - struct redircmd *rcmd; - - if(cmd == 0) - 6: 83 7d 08 00 cmpl $0x0,0x8(%ebp) - a: 75 05 jne 11 - exit(); - c: e8 bc 0e 00 00 call ecd - - switch(cmd->type){ - 11: 8b 45 08 mov 0x8(%ebp),%eax - 14: 8b 00 mov (%eax),%eax - 16: 83 f8 05 cmp $0x5,%eax - 19: 77 09 ja 24 - 1b: 8b 04 85 24 14 00 00 mov 0x1424(,%eax,4),%eax - 22: ff e0 jmp *%eax - default: - panic("runcmd"); - 24: 83 ec 0c sub $0xc,%esp - 27: 68 f8 13 00 00 push $0x13f8 - 2c: e8 6b 03 00 00 call 39c - 31: 83 c4 10 add $0x10,%esp - - case EXEC: - ecmd = (struct execcmd*)cmd; - 34: 8b 45 08 mov 0x8(%ebp),%eax - 37: 89 45 f4 mov %eax,-0xc(%ebp) - if(ecmd->argv[0] == 0) - 3a: 8b 45 f4 mov -0xc(%ebp),%eax - 3d: 8b 40 04 mov 0x4(%eax),%eax - 40: 85 c0 test %eax,%eax - 42: 75 05 jne 49 - exit(); - 44: e8 84 0e 00 00 call ecd - exec(ecmd->argv[0], ecmd->argv); - 49: 8b 45 f4 mov -0xc(%ebp),%eax - 4c: 8d 50 04 lea 0x4(%eax),%edx - 4f: 8b 45 f4 mov -0xc(%ebp),%eax - 52: 8b 40 04 mov 0x4(%eax),%eax - 55: 83 ec 08 sub $0x8,%esp - 58: 52 push %edx - 59: 50 push %eax - 5a: e8 a6 0e 00 00 call f05 - 5f: 83 c4 10 add $0x10,%esp - printf(2, "exec %s failed\n", ecmd->argv[0]); - 62: 8b 45 f4 mov -0xc(%ebp),%eax - 65: 8b 40 04 mov 0x4(%eax),%eax - 68: 83 ec 04 sub $0x4,%esp - 6b: 50 push %eax - 6c: 68 ff 13 00 00 push $0x13ff - 71: 6a 02 push $0x2 - 73: e8 ca 0f 00 00 call 1042 - 78: 83 c4 10 add $0x10,%esp - break; - 7b: e9 c8 01 00 00 jmp 248 - - case REDIR: - rcmd = (struct redircmd*)cmd; - 80: 8b 45 08 mov 0x8(%ebp),%eax - 83: 89 45 f0 mov %eax,-0x10(%ebp) - close(rcmd->fd); - 86: 8b 45 f0 mov -0x10(%ebp),%eax - 89: 8b 40 14 mov 0x14(%eax),%eax - 8c: 83 ec 0c sub $0xc,%esp - 8f: 50 push %eax - 90: e8 60 0e 00 00 call ef5 - 95: 83 c4 10 add $0x10,%esp - if(open(rcmd->file, rcmd->mode) < 0){ - 98: 8b 45 f0 mov -0x10(%ebp),%eax - 9b: 8b 50 10 mov 0x10(%eax),%edx - 9e: 8b 45 f0 mov -0x10(%ebp),%eax - a1: 8b 40 08 mov 0x8(%eax),%eax - a4: 83 ec 08 sub $0x8,%esp - a7: 52 push %edx - a8: 50 push %eax - a9: e8 5f 0e 00 00 call f0d - ae: 83 c4 10 add $0x10,%esp - b1: 85 c0 test %eax,%eax - b3: 79 1e jns d3 - printf(2, "open %s failed\n", rcmd->file); - b5: 8b 45 f0 mov -0x10(%ebp),%eax - b8: 8b 40 08 mov 0x8(%eax),%eax - bb: 83 ec 04 sub $0x4,%esp - be: 50 push %eax - bf: 68 0f 14 00 00 push $0x140f - c4: 6a 02 push $0x2 - c6: e8 77 0f 00 00 call 1042 - cb: 83 c4 10 add $0x10,%esp - exit(); - ce: e8 fa 0d 00 00 call ecd - } - runcmd(rcmd->cmd); - d3: 8b 45 f0 mov -0x10(%ebp),%eax - d6: 8b 40 04 mov 0x4(%eax),%eax - d9: 83 ec 0c sub $0xc,%esp - dc: 50 push %eax - dd: e8 1e ff ff ff call 0 - e2: 83 c4 10 add $0x10,%esp - break; - e5: e9 5e 01 00 00 jmp 248 - - case LIST: - lcmd = (struct listcmd*)cmd; - ea: 8b 45 08 mov 0x8(%ebp),%eax - ed: 89 45 ec mov %eax,-0x14(%ebp) - if(fork1() == 0) - f0: e8 c7 02 00 00 call 3bc - f5: 85 c0 test %eax,%eax - f7: 75 12 jne 10b - runcmd(lcmd->left); - f9: 8b 45 ec mov -0x14(%ebp),%eax - fc: 8b 40 04 mov 0x4(%eax),%eax - ff: 83 ec 0c sub $0xc,%esp - 102: 50 push %eax - 103: e8 f8 fe ff ff call 0 - 108: 83 c4 10 add $0x10,%esp - wait(); - 10b: e8 c5 0d 00 00 call ed5 - runcmd(lcmd->right); - 110: 8b 45 ec mov -0x14(%ebp),%eax - 113: 8b 40 08 mov 0x8(%eax),%eax - 116: 83 ec 0c sub $0xc,%esp - 119: 50 push %eax - 11a: e8 e1 fe ff ff call 0 - 11f: 83 c4 10 add $0x10,%esp - break; - 122: e9 21 01 00 00 jmp 248 - - case PIPE: - pcmd = (struct pipecmd*)cmd; - 127: 8b 45 08 mov 0x8(%ebp),%eax - 12a: 89 45 e8 mov %eax,-0x18(%ebp) - if(pipe(p) < 0) - 12d: 83 ec 0c sub $0xc,%esp - 130: 8d 45 dc lea -0x24(%ebp),%eax - 133: 50 push %eax - 134: e8 a4 0d 00 00 call edd - 139: 83 c4 10 add $0x10,%esp - 13c: 85 c0 test %eax,%eax - 13e: 79 10 jns 150 - panic("pipe"); - 140: 83 ec 0c sub $0xc,%esp - 143: 68 1f 14 00 00 push $0x141f - 148: e8 4f 02 00 00 call 39c - 14d: 83 c4 10 add $0x10,%esp - if(fork1() == 0){ - 150: e8 67 02 00 00 call 3bc - 155: 85 c0 test %eax,%eax - 157: 75 4c jne 1a5 - close(1); - 159: 83 ec 0c sub $0xc,%esp - 15c: 6a 01 push $0x1 - 15e: e8 92 0d 00 00 call ef5 - 163: 83 c4 10 add $0x10,%esp - dup(p[1]); - 166: 8b 45 e0 mov -0x20(%ebp),%eax - 169: 83 ec 0c sub $0xc,%esp - 16c: 50 push %eax - 16d: e8 d3 0d 00 00 call f45 - 172: 83 c4 10 add $0x10,%esp - close(p[0]); - 175: 8b 45 dc mov -0x24(%ebp),%eax - 178: 83 ec 0c sub $0xc,%esp - 17b: 50 push %eax - 17c: e8 74 0d 00 00 call ef5 - 181: 83 c4 10 add $0x10,%esp - close(p[1]); - 184: 8b 45 e0 mov -0x20(%ebp),%eax - 187: 83 ec 0c sub $0xc,%esp - 18a: 50 push %eax - 18b: e8 65 0d 00 00 call ef5 - 190: 83 c4 10 add $0x10,%esp - runcmd(pcmd->left); - 193: 8b 45 e8 mov -0x18(%ebp),%eax - 196: 8b 40 04 mov 0x4(%eax),%eax - 199: 83 ec 0c sub $0xc,%esp - 19c: 50 push %eax - 19d: e8 5e fe ff ff call 0 - 1a2: 83 c4 10 add $0x10,%esp - } - if(fork1() == 0){ - 1a5: e8 12 02 00 00 call 3bc - 1aa: 85 c0 test %eax,%eax - 1ac: 75 4c jne 1fa - close(0); - 1ae: 83 ec 0c sub $0xc,%esp - 1b1: 6a 00 push $0x0 - 1b3: e8 3d 0d 00 00 call ef5 - 1b8: 83 c4 10 add $0x10,%esp - dup(p[0]); - 1bb: 8b 45 dc mov -0x24(%ebp),%eax - 1be: 83 ec 0c sub $0xc,%esp - 1c1: 50 push %eax - 1c2: e8 7e 0d 00 00 call f45 - 1c7: 83 c4 10 add $0x10,%esp - close(p[0]); - 1ca: 8b 45 dc mov -0x24(%ebp),%eax - 1cd: 83 ec 0c sub $0xc,%esp - 1d0: 50 push %eax - 1d1: e8 1f 0d 00 00 call ef5 - 1d6: 83 c4 10 add $0x10,%esp - close(p[1]); - 1d9: 8b 45 e0 mov -0x20(%ebp),%eax - 1dc: 83 ec 0c sub $0xc,%esp - 1df: 50 push %eax - 1e0: e8 10 0d 00 00 call ef5 - 1e5: 83 c4 10 add $0x10,%esp - runcmd(pcmd->right); - 1e8: 8b 45 e8 mov -0x18(%ebp),%eax - 1eb: 8b 40 08 mov 0x8(%eax),%eax - 1ee: 83 ec 0c sub $0xc,%esp - 1f1: 50 push %eax - 1f2: e8 09 fe ff ff call 0 - 1f7: 83 c4 10 add $0x10,%esp - } - close(p[0]); - 1fa: 8b 45 dc mov -0x24(%ebp),%eax - 1fd: 83 ec 0c sub $0xc,%esp - 200: 50 push %eax - 201: e8 ef 0c 00 00 call ef5 - 206: 83 c4 10 add $0x10,%esp - close(p[1]); - 209: 8b 45 e0 mov -0x20(%ebp),%eax - 20c: 83 ec 0c sub $0xc,%esp - 20f: 50 push %eax - 210: e8 e0 0c 00 00 call ef5 - 215: 83 c4 10 add $0x10,%esp - wait(); - 218: e8 b8 0c 00 00 call ed5 - wait(); - 21d: e8 b3 0c 00 00 call ed5 - break; - 222: eb 24 jmp 248 - - case BACK: - bcmd = (struct backcmd*)cmd; - 224: 8b 45 08 mov 0x8(%ebp),%eax - 227: 89 45 e4 mov %eax,-0x1c(%ebp) - if(fork1() == 0) - 22a: e8 8d 01 00 00 call 3bc - 22f: 85 c0 test %eax,%eax - 231: 75 14 jne 247 - runcmd(bcmd->cmd); - 233: 8b 45 e4 mov -0x1c(%ebp),%eax - 236: 8b 40 04 mov 0x4(%eax),%eax - 239: 83 ec 0c sub $0xc,%esp - 23c: 50 push %eax - 23d: e8 be fd ff ff call 0 - 242: 83 c4 10 add $0x10,%esp - break; - 245: eb 00 jmp 247 - 247: 90 nop - } - exit(); - 248: e8 80 0c 00 00 call ecd - -0000024d : -} - -int -getcmd(char *buf, int nbuf) -{ - 24d: 55 push %ebp - 24e: 89 e5 mov %esp,%ebp - 250: 83 ec 08 sub $0x8,%esp - printf(2, "$ "); - 253: 83 ec 08 sub $0x8,%esp - 256: 68 3c 14 00 00 push $0x143c - 25b: 6a 02 push $0x2 - 25d: e8 e0 0d 00 00 call 1042 - 262: 83 c4 10 add $0x10,%esp - memset(buf, 0, nbuf); - 265: 8b 45 0c mov 0xc(%ebp),%eax - 268: 83 ec 04 sub $0x4,%esp - 26b: 50 push %eax - 26c: 6a 00 push $0x0 - 26e: ff 75 08 pushl 0x8(%ebp) - 271: e8 bd 0a 00 00 call d33 - 276: 83 c4 10 add $0x10,%esp - gets(buf, nbuf); - 279: 83 ec 08 sub $0x8,%esp - 27c: ff 75 0c pushl 0xc(%ebp) - 27f: ff 75 08 pushl 0x8(%ebp) - 282: e8 f9 0a 00 00 call d80 - 287: 83 c4 10 add $0x10,%esp - if(buf[0] == 0) // EOF - 28a: 8b 45 08 mov 0x8(%ebp),%eax - 28d: 0f b6 00 movzbl (%eax),%eax - 290: 84 c0 test %al,%al - 292: 75 07 jne 29b - return -1; - 294: b8 ff ff ff ff mov $0xffffffff,%eax - 299: eb 05 jmp 2a0 - return 0; - 29b: b8 00 00 00 00 mov $0x0,%eax -} - 2a0: c9 leave - 2a1: c3 ret - -000002a2
: - -int -main(void) -{ - 2a2: 8d 4c 24 04 lea 0x4(%esp),%ecx - 2a6: 83 e4 f0 and $0xfffffff0,%esp - 2a9: ff 71 fc pushl -0x4(%ecx) - 2ac: 55 push %ebp - 2ad: 89 e5 mov %esp,%ebp - 2af: 51 push %ecx - 2b0: 83 ec 14 sub $0x14,%esp - static char buf[100]; - int fd; - - // Assumes three file descriptors open. - while((fd = open("console", O_RDWR)) >= 0){ - 2b3: eb 16 jmp 2cb - if(fd >= 3){ - 2b5: 83 7d f4 02 cmpl $0x2,-0xc(%ebp) - 2b9: 7e 10 jle 2cb - close(fd); - 2bb: 83 ec 0c sub $0xc,%esp - 2be: ff 75 f4 pushl -0xc(%ebp) - 2c1: e8 2f 0c 00 00 call ef5 - 2c6: 83 c4 10 add $0x10,%esp - break; - 2c9: eb 1b jmp 2e6 -{ - static char buf[100]; - int fd; - - // Assumes three file descriptors open. - while((fd = open("console", O_RDWR)) >= 0){ - 2cb: 83 ec 08 sub $0x8,%esp - 2ce: 6a 02 push $0x2 - 2d0: 68 3f 14 00 00 push $0x143f - 2d5: e8 33 0c 00 00 call f0d - 2da: 83 c4 10 add $0x10,%esp - 2dd: 89 45 f4 mov %eax,-0xc(%ebp) - 2e0: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 2e4: 79 cf jns 2b5 - break; - } - } - - // Read and run input commands. - while(getcmd(buf, sizeof(buf)) >= 0){ - 2e6: e9 92 00 00 00 jmp 37d - if(buf[0] == 'c' && buf[1] == 'd' && buf[2] == ' '){ - 2eb: 0f b6 05 c0 19 00 00 movzbl 0x19c0,%eax - 2f2: 3c 63 cmp $0x63,%al - 2f4: 75 5d jne 353 - 2f6: 0f b6 05 c1 19 00 00 movzbl 0x19c1,%eax - 2fd: 3c 64 cmp $0x64,%al - 2ff: 75 52 jne 353 - 301: 0f b6 05 c2 19 00 00 movzbl 0x19c2,%eax - 308: 3c 20 cmp $0x20,%al - 30a: 75 47 jne 353 - // Clumsy but will have to do for now. - // Chdir has no effect on the parent if run in the child. - buf[strlen(buf)-1] = 0; // chop \n - 30c: 83 ec 0c sub $0xc,%esp - 30f: 68 c0 19 00 00 push $0x19c0 - 314: e8 f3 09 00 00 call d0c - 319: 83 c4 10 add $0x10,%esp - 31c: 83 e8 01 sub $0x1,%eax - 31f: c6 80 c0 19 00 00 00 movb $0x0,0x19c0(%eax) - if(chdir(buf+3) < 0) - 326: 83 ec 0c sub $0xc,%esp - 329: 68 c3 19 00 00 push $0x19c3 - 32e: e8 0a 0c 00 00 call f3d - 333: 83 c4 10 add $0x10,%esp - 336: 85 c0 test %eax,%eax - 338: 79 17 jns 351 - printf(2, "cannot cd %s\n", buf+3); - 33a: 83 ec 04 sub $0x4,%esp - 33d: 68 c3 19 00 00 push $0x19c3 - 342: 68 47 14 00 00 push $0x1447 - 347: 6a 02 push $0x2 - 349: e8 f4 0c 00 00 call 1042 - 34e: 83 c4 10 add $0x10,%esp - continue; - 351: eb 2a jmp 37d - } - if(fork1() == 0) - 353: e8 64 00 00 00 call 3bc - 358: 85 c0 test %eax,%eax - 35a: 75 1c jne 378 - runcmd(parsecmd(buf)); - 35c: 83 ec 0c sub $0xc,%esp - 35f: 68 c0 19 00 00 push $0x19c0 - 364: e8 a7 03 00 00 call 710 - 369: 83 c4 10 add $0x10,%esp - 36c: 83 ec 0c sub $0xc,%esp - 36f: 50 push %eax - 370: e8 8b fc ff ff call 0 - 375: 83 c4 10 add $0x10,%esp - wait(); - 378: e8 58 0b 00 00 call ed5 - break; - } - } - - // Read and run input commands. - while(getcmd(buf, sizeof(buf)) >= 0){ - 37d: 83 ec 08 sub $0x8,%esp - 380: 6a 64 push $0x64 - 382: 68 c0 19 00 00 push $0x19c0 - 387: e8 c1 fe ff ff call 24d - 38c: 83 c4 10 add $0x10,%esp - 38f: 85 c0 test %eax,%eax - 391: 0f 89 54 ff ff ff jns 2eb - } - if(fork1() == 0) - runcmd(parsecmd(buf)); - wait(); - } - exit(); - 397: e8 31 0b 00 00 call ecd - -0000039c : -} - -void -panic(char *s) -{ - 39c: 55 push %ebp - 39d: 89 e5 mov %esp,%ebp - 39f: 83 ec 08 sub $0x8,%esp - printf(2, "%s\n", s); - 3a2: 83 ec 04 sub $0x4,%esp - 3a5: ff 75 08 pushl 0x8(%ebp) - 3a8: 68 55 14 00 00 push $0x1455 - 3ad: 6a 02 push $0x2 - 3af: e8 8e 0c 00 00 call 1042 - 3b4: 83 c4 10 add $0x10,%esp - exit(); - 3b7: e8 11 0b 00 00 call ecd - -000003bc : -} - -int -fork1(void) -{ - 3bc: 55 push %ebp - 3bd: 89 e5 mov %esp,%ebp - 3bf: 83 ec 18 sub $0x18,%esp - int pid; - - pid = fork(); - 3c2: e8 fe 0a 00 00 call ec5 - 3c7: 89 45 f4 mov %eax,-0xc(%ebp) - if(pid == -1) - 3ca: 83 7d f4 ff cmpl $0xffffffff,-0xc(%ebp) - 3ce: 75 10 jne 3e0 - panic("fork"); - 3d0: 83 ec 0c sub $0xc,%esp - 3d3: 68 59 14 00 00 push $0x1459 - 3d8: e8 bf ff ff ff call 39c - 3dd: 83 c4 10 add $0x10,%esp - return pid; - 3e0: 8b 45 f4 mov -0xc(%ebp),%eax -} - 3e3: c9 leave - 3e4: c3 ret - -000003e5 : -//PAGEBREAK! -// Constructors - -struct cmd* -execcmd(void) -{ - 3e5: 55 push %ebp - 3e6: 89 e5 mov %esp,%ebp - 3e8: 83 ec 18 sub $0x18,%esp - struct execcmd *cmd; - - cmd = malloc(sizeof(*cmd)); - 3eb: 83 ec 0c sub $0xc,%esp - 3ee: 6a 54 push $0x54 - 3f0: e8 1e 0f 00 00 call 1313 - 3f5: 83 c4 10 add $0x10,%esp - 3f8: 89 45 f4 mov %eax,-0xc(%ebp) - memset(cmd, 0, sizeof(*cmd)); - 3fb: 83 ec 04 sub $0x4,%esp - 3fe: 6a 54 push $0x54 - 400: 6a 00 push $0x0 - 402: ff 75 f4 pushl -0xc(%ebp) - 405: e8 29 09 00 00 call d33 - 40a: 83 c4 10 add $0x10,%esp - cmd->type = EXEC; - 40d: 8b 45 f4 mov -0xc(%ebp),%eax - 410: c7 00 01 00 00 00 movl $0x1,(%eax) - return (struct cmd*)cmd; - 416: 8b 45 f4 mov -0xc(%ebp),%eax -} - 419: c9 leave - 41a: c3 ret - -0000041b : - -struct cmd* -redircmd(struct cmd *subcmd, char *file, char *efile, int mode, int fd) -{ - 41b: 55 push %ebp - 41c: 89 e5 mov %esp,%ebp - 41e: 83 ec 18 sub $0x18,%esp - struct redircmd *cmd; - - cmd = malloc(sizeof(*cmd)); - 421: 83 ec 0c sub $0xc,%esp - 424: 6a 18 push $0x18 - 426: e8 e8 0e 00 00 call 1313 - 42b: 83 c4 10 add $0x10,%esp - 42e: 89 45 f4 mov %eax,-0xc(%ebp) - memset(cmd, 0, sizeof(*cmd)); - 431: 83 ec 04 sub $0x4,%esp - 434: 6a 18 push $0x18 - 436: 6a 00 push $0x0 - 438: ff 75 f4 pushl -0xc(%ebp) - 43b: e8 f3 08 00 00 call d33 - 440: 83 c4 10 add $0x10,%esp - cmd->type = REDIR; - 443: 8b 45 f4 mov -0xc(%ebp),%eax - 446: c7 00 02 00 00 00 movl $0x2,(%eax) - cmd->cmd = subcmd; - 44c: 8b 45 f4 mov -0xc(%ebp),%eax - 44f: 8b 55 08 mov 0x8(%ebp),%edx - 452: 89 50 04 mov %edx,0x4(%eax) - cmd->file = file; - 455: 8b 45 f4 mov -0xc(%ebp),%eax - 458: 8b 55 0c mov 0xc(%ebp),%edx - 45b: 89 50 08 mov %edx,0x8(%eax) - cmd->efile = efile; - 45e: 8b 45 f4 mov -0xc(%ebp),%eax - 461: 8b 55 10 mov 0x10(%ebp),%edx - 464: 89 50 0c mov %edx,0xc(%eax) - cmd->mode = mode; - 467: 8b 45 f4 mov -0xc(%ebp),%eax - 46a: 8b 55 14 mov 0x14(%ebp),%edx - 46d: 89 50 10 mov %edx,0x10(%eax) - cmd->fd = fd; - 470: 8b 45 f4 mov -0xc(%ebp),%eax - 473: 8b 55 18 mov 0x18(%ebp),%edx - 476: 89 50 14 mov %edx,0x14(%eax) - return (struct cmd*)cmd; - 479: 8b 45 f4 mov -0xc(%ebp),%eax -} - 47c: c9 leave - 47d: c3 ret - -0000047e : - -struct cmd* -pipecmd(struct cmd *left, struct cmd *right) -{ - 47e: 55 push %ebp - 47f: 89 e5 mov %esp,%ebp - 481: 83 ec 18 sub $0x18,%esp - struct pipecmd *cmd; - - cmd = malloc(sizeof(*cmd)); - 484: 83 ec 0c sub $0xc,%esp - 487: 6a 0c push $0xc - 489: e8 85 0e 00 00 call 1313 - 48e: 83 c4 10 add $0x10,%esp - 491: 89 45 f4 mov %eax,-0xc(%ebp) - memset(cmd, 0, sizeof(*cmd)); - 494: 83 ec 04 sub $0x4,%esp - 497: 6a 0c push $0xc - 499: 6a 00 push $0x0 - 49b: ff 75 f4 pushl -0xc(%ebp) - 49e: e8 90 08 00 00 call d33 - 4a3: 83 c4 10 add $0x10,%esp - cmd->type = PIPE; - 4a6: 8b 45 f4 mov -0xc(%ebp),%eax - 4a9: c7 00 03 00 00 00 movl $0x3,(%eax) - cmd->left = left; - 4af: 8b 45 f4 mov -0xc(%ebp),%eax - 4b2: 8b 55 08 mov 0x8(%ebp),%edx - 4b5: 89 50 04 mov %edx,0x4(%eax) - cmd->right = right; - 4b8: 8b 45 f4 mov -0xc(%ebp),%eax - 4bb: 8b 55 0c mov 0xc(%ebp),%edx - 4be: 89 50 08 mov %edx,0x8(%eax) - return (struct cmd*)cmd; - 4c1: 8b 45 f4 mov -0xc(%ebp),%eax -} - 4c4: c9 leave - 4c5: c3 ret - -000004c6 : - -struct cmd* -listcmd(struct cmd *left, struct cmd *right) -{ - 4c6: 55 push %ebp - 4c7: 89 e5 mov %esp,%ebp - 4c9: 83 ec 18 sub $0x18,%esp - struct listcmd *cmd; - - cmd = malloc(sizeof(*cmd)); - 4cc: 83 ec 0c sub $0xc,%esp - 4cf: 6a 0c push $0xc - 4d1: e8 3d 0e 00 00 call 1313 - 4d6: 83 c4 10 add $0x10,%esp - 4d9: 89 45 f4 mov %eax,-0xc(%ebp) - memset(cmd, 0, sizeof(*cmd)); - 4dc: 83 ec 04 sub $0x4,%esp - 4df: 6a 0c push $0xc - 4e1: 6a 00 push $0x0 - 4e3: ff 75 f4 pushl -0xc(%ebp) - 4e6: e8 48 08 00 00 call d33 - 4eb: 83 c4 10 add $0x10,%esp - cmd->type = LIST; - 4ee: 8b 45 f4 mov -0xc(%ebp),%eax - 4f1: c7 00 04 00 00 00 movl $0x4,(%eax) - cmd->left = left; - 4f7: 8b 45 f4 mov -0xc(%ebp),%eax - 4fa: 8b 55 08 mov 0x8(%ebp),%edx - 4fd: 89 50 04 mov %edx,0x4(%eax) - cmd->right = right; - 500: 8b 45 f4 mov -0xc(%ebp),%eax - 503: 8b 55 0c mov 0xc(%ebp),%edx - 506: 89 50 08 mov %edx,0x8(%eax) - return (struct cmd*)cmd; - 509: 8b 45 f4 mov -0xc(%ebp),%eax -} - 50c: c9 leave - 50d: c3 ret - -0000050e : - -struct cmd* -backcmd(struct cmd *subcmd) -{ - 50e: 55 push %ebp - 50f: 89 e5 mov %esp,%ebp - 511: 83 ec 18 sub $0x18,%esp - struct backcmd *cmd; - - cmd = malloc(sizeof(*cmd)); - 514: 83 ec 0c sub $0xc,%esp - 517: 6a 08 push $0x8 - 519: e8 f5 0d 00 00 call 1313 - 51e: 83 c4 10 add $0x10,%esp - 521: 89 45 f4 mov %eax,-0xc(%ebp) - memset(cmd, 0, sizeof(*cmd)); - 524: 83 ec 04 sub $0x4,%esp - 527: 6a 08 push $0x8 - 529: 6a 00 push $0x0 - 52b: ff 75 f4 pushl -0xc(%ebp) - 52e: e8 00 08 00 00 call d33 - 533: 83 c4 10 add $0x10,%esp - cmd->type = BACK; - 536: 8b 45 f4 mov -0xc(%ebp),%eax - 539: c7 00 05 00 00 00 movl $0x5,(%eax) - cmd->cmd = subcmd; - 53f: 8b 45 f4 mov -0xc(%ebp),%eax - 542: 8b 55 08 mov 0x8(%ebp),%edx - 545: 89 50 04 mov %edx,0x4(%eax) - return (struct cmd*)cmd; - 548: 8b 45 f4 mov -0xc(%ebp),%eax -} - 54b: c9 leave - 54c: c3 ret - -0000054d : -char whitespace[] = " \t\r\n\v"; -char symbols[] = "<|>&;()"; - -int -gettoken(char **ps, char *es, char **q, char **eq) -{ - 54d: 55 push %ebp - 54e: 89 e5 mov %esp,%ebp - 550: 83 ec 18 sub $0x18,%esp - char *s; - int ret; - - s = *ps; - 553: 8b 45 08 mov 0x8(%ebp),%eax - 556: 8b 00 mov (%eax),%eax - 558: 89 45 f4 mov %eax,-0xc(%ebp) - while(s < es && strchr(whitespace, *s)) - 55b: eb 04 jmp 561 - s++; - 55d: 83 45 f4 01 addl $0x1,-0xc(%ebp) -{ - char *s; - int ret; - - s = *ps; - while(s < es && strchr(whitespace, *s)) - 561: 8b 45 f4 mov -0xc(%ebp),%eax - 564: 3b 45 0c cmp 0xc(%ebp),%eax - 567: 73 1e jae 587 - 569: 8b 45 f4 mov -0xc(%ebp),%eax - 56c: 0f b6 00 movzbl (%eax),%eax - 56f: 0f be c0 movsbl %al,%eax - 572: 83 ec 08 sub $0x8,%esp - 575: 50 push %eax - 576: 68 74 19 00 00 push $0x1974 - 57b: e8 cd 07 00 00 call d4d - 580: 83 c4 10 add $0x10,%esp - 583: 85 c0 test %eax,%eax - 585: 75 d6 jne 55d - s++; - if(q) - 587: 83 7d 10 00 cmpl $0x0,0x10(%ebp) - 58b: 74 08 je 595 - *q = s; - 58d: 8b 45 10 mov 0x10(%ebp),%eax - 590: 8b 55 f4 mov -0xc(%ebp),%edx - 593: 89 10 mov %edx,(%eax) - ret = *s; - 595: 8b 45 f4 mov -0xc(%ebp),%eax - 598: 0f b6 00 movzbl (%eax),%eax - 59b: 0f be c0 movsbl %al,%eax - 59e: 89 45 f0 mov %eax,-0x10(%ebp) - switch(*s){ - 5a1: 8b 45 f4 mov -0xc(%ebp),%eax - 5a4: 0f b6 00 movzbl (%eax),%eax - 5a7: 0f be c0 movsbl %al,%eax - 5aa: 83 f8 29 cmp $0x29,%eax - 5ad: 7f 14 jg 5c3 - 5af: 83 f8 28 cmp $0x28,%eax - 5b2: 7d 28 jge 5dc - 5b4: 85 c0 test %eax,%eax - 5b6: 0f 84 96 00 00 00 je 652 - 5bc: 83 f8 26 cmp $0x26,%eax - 5bf: 74 1b je 5dc - 5c1: eb 3c jmp 5ff - 5c3: 83 f8 3e cmp $0x3e,%eax - 5c6: 74 1a je 5e2 - 5c8: 83 f8 3e cmp $0x3e,%eax - 5cb: 7f 0a jg 5d7 - 5cd: 83 e8 3b sub $0x3b,%eax - 5d0: 83 f8 01 cmp $0x1,%eax - 5d3: 77 2a ja 5ff - 5d5: eb 05 jmp 5dc - 5d7: 83 f8 7c cmp $0x7c,%eax - 5da: 75 23 jne 5ff - case '(': - case ')': - case ';': - case '&': - case '<': - s++; - 5dc: 83 45 f4 01 addl $0x1,-0xc(%ebp) - break; - 5e0: eb 71 jmp 653 - case '>': - s++; - 5e2: 83 45 f4 01 addl $0x1,-0xc(%ebp) - if(*s == '>'){ - 5e6: 8b 45 f4 mov -0xc(%ebp),%eax - 5e9: 0f b6 00 movzbl (%eax),%eax - 5ec: 3c 3e cmp $0x3e,%al - 5ee: 75 0d jne 5fd - ret = '+'; - 5f0: c7 45 f0 2b 00 00 00 movl $0x2b,-0x10(%ebp) - s++; - 5f7: 83 45 f4 01 addl $0x1,-0xc(%ebp) - } - break; - 5fb: eb 56 jmp 653 - 5fd: eb 54 jmp 653 - default: - ret = 'a'; - 5ff: c7 45 f0 61 00 00 00 movl $0x61,-0x10(%ebp) - while(s < es && !strchr(whitespace, *s) && !strchr(symbols, *s)) - 606: eb 04 jmp 60c - s++; - 608: 83 45 f4 01 addl $0x1,-0xc(%ebp) - s++; - } - break; - default: - ret = 'a'; - while(s < es && !strchr(whitespace, *s) && !strchr(symbols, *s)) - 60c: 8b 45 f4 mov -0xc(%ebp),%eax - 60f: 3b 45 0c cmp 0xc(%ebp),%eax - 612: 73 3c jae 650 - 614: 8b 45 f4 mov -0xc(%ebp),%eax - 617: 0f b6 00 movzbl (%eax),%eax - 61a: 0f be c0 movsbl %al,%eax - 61d: 83 ec 08 sub $0x8,%esp - 620: 50 push %eax - 621: 68 74 19 00 00 push $0x1974 - 626: e8 22 07 00 00 call d4d - 62b: 83 c4 10 add $0x10,%esp - 62e: 85 c0 test %eax,%eax - 630: 75 1e jne 650 - 632: 8b 45 f4 mov -0xc(%ebp),%eax - 635: 0f b6 00 movzbl (%eax),%eax - 638: 0f be c0 movsbl %al,%eax - 63b: 83 ec 08 sub $0x8,%esp - 63e: 50 push %eax - 63f: 68 7a 19 00 00 push $0x197a - 644: e8 04 07 00 00 call d4d - 649: 83 c4 10 add $0x10,%esp - 64c: 85 c0 test %eax,%eax - 64e: 74 b8 je 608 - s++; - break; - 650: eb 01 jmp 653 - if(q) - *q = s; - ret = *s; - switch(*s){ - case 0: - break; - 652: 90 nop - ret = 'a'; - while(s < es && !strchr(whitespace, *s) && !strchr(symbols, *s)) - s++; - break; - } - if(eq) - 653: 83 7d 14 00 cmpl $0x0,0x14(%ebp) - 657: 74 08 je 661 - *eq = s; - 659: 8b 45 14 mov 0x14(%ebp),%eax - 65c: 8b 55 f4 mov -0xc(%ebp),%edx - 65f: 89 10 mov %edx,(%eax) - - while(s < es && strchr(whitespace, *s)) - 661: eb 04 jmp 667 - s++; - 663: 83 45 f4 01 addl $0x1,-0xc(%ebp) - break; - } - if(eq) - *eq = s; - - while(s < es && strchr(whitespace, *s)) - 667: 8b 45 f4 mov -0xc(%ebp),%eax - 66a: 3b 45 0c cmp 0xc(%ebp),%eax - 66d: 73 1e jae 68d - 66f: 8b 45 f4 mov -0xc(%ebp),%eax - 672: 0f b6 00 movzbl (%eax),%eax - 675: 0f be c0 movsbl %al,%eax - 678: 83 ec 08 sub $0x8,%esp - 67b: 50 push %eax - 67c: 68 74 19 00 00 push $0x1974 - 681: e8 c7 06 00 00 call d4d - 686: 83 c4 10 add $0x10,%esp - 689: 85 c0 test %eax,%eax - 68b: 75 d6 jne 663 - s++; - *ps = s; - 68d: 8b 45 08 mov 0x8(%ebp),%eax - 690: 8b 55 f4 mov -0xc(%ebp),%edx - 693: 89 10 mov %edx,(%eax) - return ret; - 695: 8b 45 f0 mov -0x10(%ebp),%eax -} - 698: c9 leave - 699: c3 ret - -0000069a : - -int -peek(char **ps, char *es, char *toks) -{ - 69a: 55 push %ebp - 69b: 89 e5 mov %esp,%ebp - 69d: 83 ec 18 sub $0x18,%esp - char *s; - - s = *ps; - 6a0: 8b 45 08 mov 0x8(%ebp),%eax - 6a3: 8b 00 mov (%eax),%eax - 6a5: 89 45 f4 mov %eax,-0xc(%ebp) - while(s < es && strchr(whitespace, *s)) - 6a8: eb 04 jmp 6ae - s++; - 6aa: 83 45 f4 01 addl $0x1,-0xc(%ebp) -peek(char **ps, char *es, char *toks) -{ - char *s; - - s = *ps; - while(s < es && strchr(whitespace, *s)) - 6ae: 8b 45 f4 mov -0xc(%ebp),%eax - 6b1: 3b 45 0c cmp 0xc(%ebp),%eax - 6b4: 73 1e jae 6d4 - 6b6: 8b 45 f4 mov -0xc(%ebp),%eax - 6b9: 0f b6 00 movzbl (%eax),%eax - 6bc: 0f be c0 movsbl %al,%eax - 6bf: 83 ec 08 sub $0x8,%esp - 6c2: 50 push %eax - 6c3: 68 74 19 00 00 push $0x1974 - 6c8: e8 80 06 00 00 call d4d - 6cd: 83 c4 10 add $0x10,%esp - 6d0: 85 c0 test %eax,%eax - 6d2: 75 d6 jne 6aa - s++; - *ps = s; - 6d4: 8b 45 08 mov 0x8(%ebp),%eax - 6d7: 8b 55 f4 mov -0xc(%ebp),%edx - 6da: 89 10 mov %edx,(%eax) - return *s && strchr(toks, *s); - 6dc: 8b 45 f4 mov -0xc(%ebp),%eax - 6df: 0f b6 00 movzbl (%eax),%eax - 6e2: 84 c0 test %al,%al - 6e4: 74 23 je 709 - 6e6: 8b 45 f4 mov -0xc(%ebp),%eax - 6e9: 0f b6 00 movzbl (%eax),%eax - 6ec: 0f be c0 movsbl %al,%eax - 6ef: 83 ec 08 sub $0x8,%esp - 6f2: 50 push %eax - 6f3: ff 75 10 pushl 0x10(%ebp) - 6f6: e8 52 06 00 00 call d4d - 6fb: 83 c4 10 add $0x10,%esp - 6fe: 85 c0 test %eax,%eax - 700: 74 07 je 709 - 702: b8 01 00 00 00 mov $0x1,%eax - 707: eb 05 jmp 70e - 709: b8 00 00 00 00 mov $0x0,%eax -} - 70e: c9 leave - 70f: c3 ret - -00000710 : -struct cmd *parseexec(char**, char*); -struct cmd *nulterminate(struct cmd*); - -struct cmd* -parsecmd(char *s) -{ - 710: 55 push %ebp - 711: 89 e5 mov %esp,%ebp - 713: 53 push %ebx - 714: 83 ec 14 sub $0x14,%esp - char *es; - struct cmd *cmd; - - es = s + strlen(s); - 717: 8b 5d 08 mov 0x8(%ebp),%ebx - 71a: 8b 45 08 mov 0x8(%ebp),%eax - 71d: 83 ec 0c sub $0xc,%esp - 720: 50 push %eax - 721: e8 e6 05 00 00 call d0c - 726: 83 c4 10 add $0x10,%esp - 729: 01 d8 add %ebx,%eax - 72b: 89 45 f4 mov %eax,-0xc(%ebp) - cmd = parseline(&s, es); - 72e: 83 ec 08 sub $0x8,%esp - 731: ff 75 f4 pushl -0xc(%ebp) - 734: 8d 45 08 lea 0x8(%ebp),%eax - 737: 50 push %eax - 738: e8 61 00 00 00 call 79e - 73d: 83 c4 10 add $0x10,%esp - 740: 89 45 f0 mov %eax,-0x10(%ebp) - peek(&s, es, ""); - 743: 83 ec 04 sub $0x4,%esp - 746: 68 5e 14 00 00 push $0x145e - 74b: ff 75 f4 pushl -0xc(%ebp) - 74e: 8d 45 08 lea 0x8(%ebp),%eax - 751: 50 push %eax - 752: e8 43 ff ff ff call 69a - 757: 83 c4 10 add $0x10,%esp - if(s != es){ - 75a: 8b 45 08 mov 0x8(%ebp),%eax - 75d: 3b 45 f4 cmp -0xc(%ebp),%eax - 760: 74 26 je 788 - printf(2, "leftovers: %s\n", s); - 762: 8b 45 08 mov 0x8(%ebp),%eax - 765: 83 ec 04 sub $0x4,%esp - 768: 50 push %eax - 769: 68 5f 14 00 00 push $0x145f - 76e: 6a 02 push $0x2 - 770: e8 cd 08 00 00 call 1042 - 775: 83 c4 10 add $0x10,%esp - panic("syntax"); - 778: 83 ec 0c sub $0xc,%esp - 77b: 68 6e 14 00 00 push $0x146e - 780: e8 17 fc ff ff call 39c - 785: 83 c4 10 add $0x10,%esp - } - nulterminate(cmd); - 788: 83 ec 0c sub $0xc,%esp - 78b: ff 75 f0 pushl -0x10(%ebp) - 78e: e8 e9 03 00 00 call b7c - 793: 83 c4 10 add $0x10,%esp - return cmd; - 796: 8b 45 f0 mov -0x10(%ebp),%eax -} - 799: 8b 5d fc mov -0x4(%ebp),%ebx - 79c: c9 leave - 79d: c3 ret - -0000079e : - -struct cmd* -parseline(char **ps, char *es) -{ - 79e: 55 push %ebp - 79f: 89 e5 mov %esp,%ebp - 7a1: 83 ec 18 sub $0x18,%esp - struct cmd *cmd; - - cmd = parsepipe(ps, es); - 7a4: 83 ec 08 sub $0x8,%esp - 7a7: ff 75 0c pushl 0xc(%ebp) - 7aa: ff 75 08 pushl 0x8(%ebp) - 7ad: e8 99 00 00 00 call 84b - 7b2: 83 c4 10 add $0x10,%esp - 7b5: 89 45 f4 mov %eax,-0xc(%ebp) - while(peek(ps, es, "&")){ - 7b8: eb 23 jmp 7dd - gettoken(ps, es, 0, 0); - 7ba: 6a 00 push $0x0 - 7bc: 6a 00 push $0x0 - 7be: ff 75 0c pushl 0xc(%ebp) - 7c1: ff 75 08 pushl 0x8(%ebp) - 7c4: e8 84 fd ff ff call 54d - 7c9: 83 c4 10 add $0x10,%esp - cmd = backcmd(cmd); - 7cc: 83 ec 0c sub $0xc,%esp - 7cf: ff 75 f4 pushl -0xc(%ebp) - 7d2: e8 37 fd ff ff call 50e - 7d7: 83 c4 10 add $0x10,%esp - 7da: 89 45 f4 mov %eax,-0xc(%ebp) -parseline(char **ps, char *es) -{ - struct cmd *cmd; - - cmd = parsepipe(ps, es); - while(peek(ps, es, "&")){ - 7dd: 83 ec 04 sub $0x4,%esp - 7e0: 68 75 14 00 00 push $0x1475 - 7e5: ff 75 0c pushl 0xc(%ebp) - 7e8: ff 75 08 pushl 0x8(%ebp) - 7eb: e8 aa fe ff ff call 69a - 7f0: 83 c4 10 add $0x10,%esp - 7f3: 85 c0 test %eax,%eax - 7f5: 75 c3 jne 7ba - gettoken(ps, es, 0, 0); - cmd = backcmd(cmd); - } - if(peek(ps, es, ";")){ - 7f7: 83 ec 04 sub $0x4,%esp - 7fa: 68 77 14 00 00 push $0x1477 - 7ff: ff 75 0c pushl 0xc(%ebp) - 802: ff 75 08 pushl 0x8(%ebp) - 805: e8 90 fe ff ff call 69a - 80a: 83 c4 10 add $0x10,%esp - 80d: 85 c0 test %eax,%eax - 80f: 74 35 je 846 - gettoken(ps, es, 0, 0); - 811: 6a 00 push $0x0 - 813: 6a 00 push $0x0 - 815: ff 75 0c pushl 0xc(%ebp) - 818: ff 75 08 pushl 0x8(%ebp) - 81b: e8 2d fd ff ff call 54d - 820: 83 c4 10 add $0x10,%esp - cmd = listcmd(cmd, parseline(ps, es)); - 823: 83 ec 08 sub $0x8,%esp - 826: ff 75 0c pushl 0xc(%ebp) - 829: ff 75 08 pushl 0x8(%ebp) - 82c: e8 6d ff ff ff call 79e - 831: 83 c4 10 add $0x10,%esp - 834: 83 ec 08 sub $0x8,%esp - 837: 50 push %eax - 838: ff 75 f4 pushl -0xc(%ebp) - 83b: e8 86 fc ff ff call 4c6 - 840: 83 c4 10 add $0x10,%esp - 843: 89 45 f4 mov %eax,-0xc(%ebp) - } - return cmd; - 846: 8b 45 f4 mov -0xc(%ebp),%eax -} - 849: c9 leave - 84a: c3 ret - -0000084b : - -struct cmd* -parsepipe(char **ps, char *es) -{ - 84b: 55 push %ebp - 84c: 89 e5 mov %esp,%ebp - 84e: 83 ec 18 sub $0x18,%esp - struct cmd *cmd; - - cmd = parseexec(ps, es); - 851: 83 ec 08 sub $0x8,%esp - 854: ff 75 0c pushl 0xc(%ebp) - 857: ff 75 08 pushl 0x8(%ebp) - 85a: e8 ec 01 00 00 call a4b - 85f: 83 c4 10 add $0x10,%esp - 862: 89 45 f4 mov %eax,-0xc(%ebp) - if(peek(ps, es, "|")){ - 865: 83 ec 04 sub $0x4,%esp - 868: 68 79 14 00 00 push $0x1479 - 86d: ff 75 0c pushl 0xc(%ebp) - 870: ff 75 08 pushl 0x8(%ebp) - 873: e8 22 fe ff ff call 69a - 878: 83 c4 10 add $0x10,%esp - 87b: 85 c0 test %eax,%eax - 87d: 74 35 je 8b4 - gettoken(ps, es, 0, 0); - 87f: 6a 00 push $0x0 - 881: 6a 00 push $0x0 - 883: ff 75 0c pushl 0xc(%ebp) - 886: ff 75 08 pushl 0x8(%ebp) - 889: e8 bf fc ff ff call 54d - 88e: 83 c4 10 add $0x10,%esp - cmd = pipecmd(cmd, parsepipe(ps, es)); - 891: 83 ec 08 sub $0x8,%esp - 894: ff 75 0c pushl 0xc(%ebp) - 897: ff 75 08 pushl 0x8(%ebp) - 89a: e8 ac ff ff ff call 84b - 89f: 83 c4 10 add $0x10,%esp - 8a2: 83 ec 08 sub $0x8,%esp - 8a5: 50 push %eax - 8a6: ff 75 f4 pushl -0xc(%ebp) - 8a9: e8 d0 fb ff ff call 47e - 8ae: 83 c4 10 add $0x10,%esp - 8b1: 89 45 f4 mov %eax,-0xc(%ebp) - } - return cmd; - 8b4: 8b 45 f4 mov -0xc(%ebp),%eax -} - 8b7: c9 leave - 8b8: c3 ret - -000008b9 : - -struct cmd* -parseredirs(struct cmd *cmd, char **ps, char *es) -{ - 8b9: 55 push %ebp - 8ba: 89 e5 mov %esp,%ebp - 8bc: 83 ec 18 sub $0x18,%esp - int tok; - char *q, *eq; - - while(peek(ps, es, "<>")){ - 8bf: e9 b6 00 00 00 jmp 97a - tok = gettoken(ps, es, 0, 0); - 8c4: 6a 00 push $0x0 - 8c6: 6a 00 push $0x0 - 8c8: ff 75 10 pushl 0x10(%ebp) - 8cb: ff 75 0c pushl 0xc(%ebp) - 8ce: e8 7a fc ff ff call 54d - 8d3: 83 c4 10 add $0x10,%esp - 8d6: 89 45 f4 mov %eax,-0xc(%ebp) - if(gettoken(ps, es, &q, &eq) != 'a') - 8d9: 8d 45 ec lea -0x14(%ebp),%eax - 8dc: 50 push %eax - 8dd: 8d 45 f0 lea -0x10(%ebp),%eax - 8e0: 50 push %eax - 8e1: ff 75 10 pushl 0x10(%ebp) - 8e4: ff 75 0c pushl 0xc(%ebp) - 8e7: e8 61 fc ff ff call 54d - 8ec: 83 c4 10 add $0x10,%esp - 8ef: 83 f8 61 cmp $0x61,%eax - 8f2: 74 10 je 904 - panic("missing file for redirection"); - 8f4: 83 ec 0c sub $0xc,%esp - 8f7: 68 7b 14 00 00 push $0x147b - 8fc: e8 9b fa ff ff call 39c - 901: 83 c4 10 add $0x10,%esp - switch(tok){ - 904: 8b 45 f4 mov -0xc(%ebp),%eax - 907: 83 f8 3c cmp $0x3c,%eax - 90a: 74 0c je 918 - 90c: 83 f8 3e cmp $0x3e,%eax - 90f: 74 26 je 937 - 911: 83 f8 2b cmp $0x2b,%eax - 914: 74 43 je 959 - 916: eb 62 jmp 97a - case '<': - cmd = redircmd(cmd, q, eq, O_RDONLY, 0); - 918: 8b 55 ec mov -0x14(%ebp),%edx - 91b: 8b 45 f0 mov -0x10(%ebp),%eax - 91e: 83 ec 0c sub $0xc,%esp - 921: 6a 00 push $0x0 - 923: 6a 00 push $0x0 - 925: 52 push %edx - 926: 50 push %eax - 927: ff 75 08 pushl 0x8(%ebp) - 92a: e8 ec fa ff ff call 41b - 92f: 83 c4 20 add $0x20,%esp - 932: 89 45 08 mov %eax,0x8(%ebp) - break; - 935: eb 43 jmp 97a - case '>': - cmd = redircmd(cmd, q, eq, O_WRONLY|O_CREATE, 1); - 937: 8b 55 ec mov -0x14(%ebp),%edx - 93a: 8b 45 f0 mov -0x10(%ebp),%eax - 93d: 83 ec 0c sub $0xc,%esp - 940: 6a 01 push $0x1 - 942: 68 01 02 00 00 push $0x201 - 947: 52 push %edx - 948: 50 push %eax - 949: ff 75 08 pushl 0x8(%ebp) - 94c: e8 ca fa ff ff call 41b - 951: 83 c4 20 add $0x20,%esp - 954: 89 45 08 mov %eax,0x8(%ebp) - break; - 957: eb 21 jmp 97a - case '+': // >> - cmd = redircmd(cmd, q, eq, O_WRONLY|O_CREATE, 1); - 959: 8b 55 ec mov -0x14(%ebp),%edx - 95c: 8b 45 f0 mov -0x10(%ebp),%eax - 95f: 83 ec 0c sub $0xc,%esp - 962: 6a 01 push $0x1 - 964: 68 01 02 00 00 push $0x201 - 969: 52 push %edx - 96a: 50 push %eax - 96b: ff 75 08 pushl 0x8(%ebp) - 96e: e8 a8 fa ff ff call 41b - 973: 83 c4 20 add $0x20,%esp - 976: 89 45 08 mov %eax,0x8(%ebp) - break; - 979: 90 nop -parseredirs(struct cmd *cmd, char **ps, char *es) -{ - int tok; - char *q, *eq; - - while(peek(ps, es, "<>")){ - 97a: 83 ec 04 sub $0x4,%esp - 97d: 68 98 14 00 00 push $0x1498 - 982: ff 75 10 pushl 0x10(%ebp) - 985: ff 75 0c pushl 0xc(%ebp) - 988: e8 0d fd ff ff call 69a - 98d: 83 c4 10 add $0x10,%esp - 990: 85 c0 test %eax,%eax - 992: 0f 85 2c ff ff ff jne 8c4 - case '+': // >> - cmd = redircmd(cmd, q, eq, O_WRONLY|O_CREATE, 1); - break; - } - } - return cmd; - 998: 8b 45 08 mov 0x8(%ebp),%eax -} - 99b: c9 leave - 99c: c3 ret - -0000099d : - -struct cmd* -parseblock(char **ps, char *es) -{ - 99d: 55 push %ebp - 99e: 89 e5 mov %esp,%ebp - 9a0: 83 ec 18 sub $0x18,%esp - struct cmd *cmd; - - if(!peek(ps, es, "(")) - 9a3: 83 ec 04 sub $0x4,%esp - 9a6: 68 9b 14 00 00 push $0x149b - 9ab: ff 75 0c pushl 0xc(%ebp) - 9ae: ff 75 08 pushl 0x8(%ebp) - 9b1: e8 e4 fc ff ff call 69a - 9b6: 83 c4 10 add $0x10,%esp - 9b9: 85 c0 test %eax,%eax - 9bb: 75 10 jne 9cd - panic("parseblock"); - 9bd: 83 ec 0c sub $0xc,%esp - 9c0: 68 9d 14 00 00 push $0x149d - 9c5: e8 d2 f9 ff ff call 39c - 9ca: 83 c4 10 add $0x10,%esp - gettoken(ps, es, 0, 0); - 9cd: 6a 00 push $0x0 - 9cf: 6a 00 push $0x0 - 9d1: ff 75 0c pushl 0xc(%ebp) - 9d4: ff 75 08 pushl 0x8(%ebp) - 9d7: e8 71 fb ff ff call 54d - 9dc: 83 c4 10 add $0x10,%esp - cmd = parseline(ps, es); - 9df: 83 ec 08 sub $0x8,%esp - 9e2: ff 75 0c pushl 0xc(%ebp) - 9e5: ff 75 08 pushl 0x8(%ebp) - 9e8: e8 b1 fd ff ff call 79e - 9ed: 83 c4 10 add $0x10,%esp - 9f0: 89 45 f4 mov %eax,-0xc(%ebp) - if(!peek(ps, es, ")")) - 9f3: 83 ec 04 sub $0x4,%esp - 9f6: 68 a8 14 00 00 push $0x14a8 - 9fb: ff 75 0c pushl 0xc(%ebp) - 9fe: ff 75 08 pushl 0x8(%ebp) - a01: e8 94 fc ff ff call 69a - a06: 83 c4 10 add $0x10,%esp - a09: 85 c0 test %eax,%eax - a0b: 75 10 jne a1d - panic("syntax - missing )"); - a0d: 83 ec 0c sub $0xc,%esp - a10: 68 aa 14 00 00 push $0x14aa - a15: e8 82 f9 ff ff call 39c - a1a: 83 c4 10 add $0x10,%esp - gettoken(ps, es, 0, 0); - a1d: 6a 00 push $0x0 - a1f: 6a 00 push $0x0 - a21: ff 75 0c pushl 0xc(%ebp) - a24: ff 75 08 pushl 0x8(%ebp) - a27: e8 21 fb ff ff call 54d - a2c: 83 c4 10 add $0x10,%esp - cmd = parseredirs(cmd, ps, es); - a2f: 83 ec 04 sub $0x4,%esp - a32: ff 75 0c pushl 0xc(%ebp) - a35: ff 75 08 pushl 0x8(%ebp) - a38: ff 75 f4 pushl -0xc(%ebp) - a3b: e8 79 fe ff ff call 8b9 - a40: 83 c4 10 add $0x10,%esp - a43: 89 45 f4 mov %eax,-0xc(%ebp) - return cmd; - a46: 8b 45 f4 mov -0xc(%ebp),%eax -} - a49: c9 leave - a4a: c3 ret - -00000a4b : - -struct cmd* -parseexec(char **ps, char *es) -{ - a4b: 55 push %ebp - a4c: 89 e5 mov %esp,%ebp - a4e: 83 ec 28 sub $0x28,%esp - char *q, *eq; - int tok, argc; - struct execcmd *cmd; - struct cmd *ret; - - if(peek(ps, es, "(")) - a51: 83 ec 04 sub $0x4,%esp - a54: 68 9b 14 00 00 push $0x149b - a59: ff 75 0c pushl 0xc(%ebp) - a5c: ff 75 08 pushl 0x8(%ebp) - a5f: e8 36 fc ff ff call 69a - a64: 83 c4 10 add $0x10,%esp - a67: 85 c0 test %eax,%eax - a69: 74 16 je a81 - return parseblock(ps, es); - a6b: 83 ec 08 sub $0x8,%esp - a6e: ff 75 0c pushl 0xc(%ebp) - a71: ff 75 08 pushl 0x8(%ebp) - a74: e8 24 ff ff ff call 99d - a79: 83 c4 10 add $0x10,%esp - a7c: e9 f9 00 00 00 jmp b7a - - ret = execcmd(); - a81: e8 5f f9 ff ff call 3e5 - a86: 89 45 f0 mov %eax,-0x10(%ebp) - cmd = (struct execcmd*)ret; - a89: 8b 45 f0 mov -0x10(%ebp),%eax - a8c: 89 45 ec mov %eax,-0x14(%ebp) - - argc = 0; - a8f: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - ret = parseredirs(ret, ps, es); - a96: 83 ec 04 sub $0x4,%esp - a99: ff 75 0c pushl 0xc(%ebp) - a9c: ff 75 08 pushl 0x8(%ebp) - a9f: ff 75 f0 pushl -0x10(%ebp) - aa2: e8 12 fe ff ff call 8b9 - aa7: 83 c4 10 add $0x10,%esp - aaa: 89 45 f0 mov %eax,-0x10(%ebp) - while(!peek(ps, es, "|)&;")){ - aad: e9 88 00 00 00 jmp b3a - if((tok=gettoken(ps, es, &q, &eq)) == 0) - ab2: 8d 45 e0 lea -0x20(%ebp),%eax - ab5: 50 push %eax - ab6: 8d 45 e4 lea -0x1c(%ebp),%eax - ab9: 50 push %eax - aba: ff 75 0c pushl 0xc(%ebp) - abd: ff 75 08 pushl 0x8(%ebp) - ac0: e8 88 fa ff ff call 54d - ac5: 83 c4 10 add $0x10,%esp - ac8: 89 45 e8 mov %eax,-0x18(%ebp) - acb: 83 7d e8 00 cmpl $0x0,-0x18(%ebp) - acf: 75 05 jne ad6 - break; - ad1: e9 82 00 00 00 jmp b58 - if(tok != 'a') - ad6: 83 7d e8 61 cmpl $0x61,-0x18(%ebp) - ada: 74 10 je aec - panic("syntax"); - adc: 83 ec 0c sub $0xc,%esp - adf: 68 6e 14 00 00 push $0x146e - ae4: e8 b3 f8 ff ff call 39c - ae9: 83 c4 10 add $0x10,%esp - cmd->argv[argc] = q; - aec: 8b 4d e4 mov -0x1c(%ebp),%ecx - aef: 8b 45 ec mov -0x14(%ebp),%eax - af2: 8b 55 f4 mov -0xc(%ebp),%edx - af5: 89 4c 90 04 mov %ecx,0x4(%eax,%edx,4) - cmd->eargv[argc] = eq; - af9: 8b 55 e0 mov -0x20(%ebp),%edx - afc: 8b 45 ec mov -0x14(%ebp),%eax - aff: 8b 4d f4 mov -0xc(%ebp),%ecx - b02: 83 c1 08 add $0x8,%ecx - b05: 89 54 88 0c mov %edx,0xc(%eax,%ecx,4) - argc++; - b09: 83 45 f4 01 addl $0x1,-0xc(%ebp) - if(argc >= MAXARGS) - b0d: 83 7d f4 09 cmpl $0x9,-0xc(%ebp) - b11: 7e 10 jle b23 - panic("too many args"); - b13: 83 ec 0c sub $0xc,%esp - b16: 68 bd 14 00 00 push $0x14bd - b1b: e8 7c f8 ff ff call 39c - b20: 83 c4 10 add $0x10,%esp - ret = parseredirs(ret, ps, es); - b23: 83 ec 04 sub $0x4,%esp - b26: ff 75 0c pushl 0xc(%ebp) - b29: ff 75 08 pushl 0x8(%ebp) - b2c: ff 75 f0 pushl -0x10(%ebp) - b2f: e8 85 fd ff ff call 8b9 - b34: 83 c4 10 add $0x10,%esp - b37: 89 45 f0 mov %eax,-0x10(%ebp) - ret = execcmd(); - cmd = (struct execcmd*)ret; - - argc = 0; - ret = parseredirs(ret, ps, es); - while(!peek(ps, es, "|)&;")){ - b3a: 83 ec 04 sub $0x4,%esp - b3d: 68 cb 14 00 00 push $0x14cb - b42: ff 75 0c pushl 0xc(%ebp) - b45: ff 75 08 pushl 0x8(%ebp) - b48: e8 4d fb ff ff call 69a - b4d: 83 c4 10 add $0x10,%esp - b50: 85 c0 test %eax,%eax - b52: 0f 84 5a ff ff ff je ab2 - argc++; - if(argc >= MAXARGS) - panic("too many args"); - ret = parseredirs(ret, ps, es); - } - cmd->argv[argc] = 0; - b58: 8b 45 ec mov -0x14(%ebp),%eax - b5b: 8b 55 f4 mov -0xc(%ebp),%edx - b5e: c7 44 90 04 00 00 00 movl $0x0,0x4(%eax,%edx,4) - b65: 00 - cmd->eargv[argc] = 0; - b66: 8b 45 ec mov -0x14(%ebp),%eax - b69: 8b 55 f4 mov -0xc(%ebp),%edx - b6c: 83 c2 08 add $0x8,%edx - b6f: c7 44 90 0c 00 00 00 movl $0x0,0xc(%eax,%edx,4) - b76: 00 - return ret; - b77: 8b 45 f0 mov -0x10(%ebp),%eax -} - b7a: c9 leave - b7b: c3 ret - -00000b7c : - -// NUL-terminate all the counted strings. -struct cmd* -nulterminate(struct cmd *cmd) -{ - b7c: 55 push %ebp - b7d: 89 e5 mov %esp,%ebp - b7f: 83 ec 28 sub $0x28,%esp - struct execcmd *ecmd; - struct listcmd *lcmd; - struct pipecmd *pcmd; - struct redircmd *rcmd; - - if(cmd == 0) - b82: 83 7d 08 00 cmpl $0x0,0x8(%ebp) - b86: 75 0a jne b92 - return 0; - b88: b8 00 00 00 00 mov $0x0,%eax - b8d: e9 e4 00 00 00 jmp c76 - - switch(cmd->type){ - b92: 8b 45 08 mov 0x8(%ebp),%eax - b95: 8b 00 mov (%eax),%eax - b97: 83 f8 05 cmp $0x5,%eax - b9a: 0f 87 d3 00 00 00 ja c73 - ba0: 8b 04 85 d0 14 00 00 mov 0x14d0(,%eax,4),%eax - ba7: ff e0 jmp *%eax - case EXEC: - ecmd = (struct execcmd*)cmd; - ba9: 8b 45 08 mov 0x8(%ebp),%eax - bac: 89 45 f0 mov %eax,-0x10(%ebp) - for(i=0; ecmd->argv[i]; i++) - baf: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - bb6: eb 14 jmp bcc - *ecmd->eargv[i] = 0; - bb8: 8b 45 f0 mov -0x10(%ebp),%eax - bbb: 8b 55 f4 mov -0xc(%ebp),%edx - bbe: 83 c2 08 add $0x8,%edx - bc1: 8b 44 90 0c mov 0xc(%eax,%edx,4),%eax - bc5: c6 00 00 movb $0x0,(%eax) - return 0; - - switch(cmd->type){ - case EXEC: - ecmd = (struct execcmd*)cmd; - for(i=0; ecmd->argv[i]; i++) - bc8: 83 45 f4 01 addl $0x1,-0xc(%ebp) - bcc: 8b 45 f0 mov -0x10(%ebp),%eax - bcf: 8b 55 f4 mov -0xc(%ebp),%edx - bd2: 8b 44 90 04 mov 0x4(%eax,%edx,4),%eax - bd6: 85 c0 test %eax,%eax - bd8: 75 de jne bb8 - *ecmd->eargv[i] = 0; - break; - bda: e9 94 00 00 00 jmp c73 - - case REDIR: - rcmd = (struct redircmd*)cmd; - bdf: 8b 45 08 mov 0x8(%ebp),%eax - be2: 89 45 ec mov %eax,-0x14(%ebp) - nulterminate(rcmd->cmd); - be5: 8b 45 ec mov -0x14(%ebp),%eax - be8: 8b 40 04 mov 0x4(%eax),%eax - beb: 83 ec 0c sub $0xc,%esp - bee: 50 push %eax - bef: e8 88 ff ff ff call b7c - bf4: 83 c4 10 add $0x10,%esp - *rcmd->efile = 0; - bf7: 8b 45 ec mov -0x14(%ebp),%eax - bfa: 8b 40 0c mov 0xc(%eax),%eax - bfd: c6 00 00 movb $0x0,(%eax) - break; - c00: eb 71 jmp c73 - - case PIPE: - pcmd = (struct pipecmd*)cmd; - c02: 8b 45 08 mov 0x8(%ebp),%eax - c05: 89 45 e8 mov %eax,-0x18(%ebp) - nulterminate(pcmd->left); - c08: 8b 45 e8 mov -0x18(%ebp),%eax - c0b: 8b 40 04 mov 0x4(%eax),%eax - c0e: 83 ec 0c sub $0xc,%esp - c11: 50 push %eax - c12: e8 65 ff ff ff call b7c - c17: 83 c4 10 add $0x10,%esp - nulterminate(pcmd->right); - c1a: 8b 45 e8 mov -0x18(%ebp),%eax - c1d: 8b 40 08 mov 0x8(%eax),%eax - c20: 83 ec 0c sub $0xc,%esp - c23: 50 push %eax - c24: e8 53 ff ff ff call b7c - c29: 83 c4 10 add $0x10,%esp - break; - c2c: eb 45 jmp c73 - - case LIST: - lcmd = (struct listcmd*)cmd; - c2e: 8b 45 08 mov 0x8(%ebp),%eax - c31: 89 45 e4 mov %eax,-0x1c(%ebp) - nulterminate(lcmd->left); - c34: 8b 45 e4 mov -0x1c(%ebp),%eax - c37: 8b 40 04 mov 0x4(%eax),%eax - c3a: 83 ec 0c sub $0xc,%esp - c3d: 50 push %eax - c3e: e8 39 ff ff ff call b7c - c43: 83 c4 10 add $0x10,%esp - nulterminate(lcmd->right); - c46: 8b 45 e4 mov -0x1c(%ebp),%eax - c49: 8b 40 08 mov 0x8(%eax),%eax - c4c: 83 ec 0c sub $0xc,%esp - c4f: 50 push %eax - c50: e8 27 ff ff ff call b7c - c55: 83 c4 10 add $0x10,%esp - break; - c58: eb 19 jmp c73 - - case BACK: - bcmd = (struct backcmd*)cmd; - c5a: 8b 45 08 mov 0x8(%ebp),%eax - c5d: 89 45 e0 mov %eax,-0x20(%ebp) - nulterminate(bcmd->cmd); - c60: 8b 45 e0 mov -0x20(%ebp),%eax - c63: 8b 40 04 mov 0x4(%eax),%eax - c66: 83 ec 0c sub $0xc,%esp - c69: 50 push %eax - c6a: e8 0d ff ff ff call b7c - c6f: 83 c4 10 add $0x10,%esp - break; - c72: 90 nop - } - return cmd; - c73: 8b 45 08 mov 0x8(%ebp),%eax -} - c76: c9 leave - c77: c3 ret - -00000c78 : - "cc"); -} - -static inline void -stosb(void *addr, int data, int cnt) -{ - c78: 55 push %ebp - c79: 89 e5 mov %esp,%ebp - c7b: 57 push %edi - c7c: 53 push %ebx - asm volatile("cld; rep stosb" : - c7d: 8b 4d 08 mov 0x8(%ebp),%ecx - c80: 8b 55 10 mov 0x10(%ebp),%edx - c83: 8b 45 0c mov 0xc(%ebp),%eax - c86: 89 cb mov %ecx,%ebx - c88: 89 df mov %ebx,%edi - c8a: 89 d1 mov %edx,%ecx - c8c: fc cld - c8d: f3 aa rep stos %al,%es:(%edi) - c8f: 89 ca mov %ecx,%edx - c91: 89 fb mov %edi,%ebx - c93: 89 5d 08 mov %ebx,0x8(%ebp) - c96: 89 55 10 mov %edx,0x10(%ebp) - "=D" (addr), "=c" (cnt) : - "0" (addr), "1" (cnt), "a" (data) : - "memory", "cc"); -} - c99: 5b pop %ebx - c9a: 5f pop %edi - c9b: 5d pop %ebp - c9c: c3 ret - -00000c9d : -#include "user.h" -#include "x86.h" - -char* -strcpy(char *s, char *t) -{ - c9d: 55 push %ebp - c9e: 89 e5 mov %esp,%ebp - ca0: 83 ec 10 sub $0x10,%esp - char *os; - - os = s; - ca3: 8b 45 08 mov 0x8(%ebp),%eax - ca6: 89 45 fc mov %eax,-0x4(%ebp) - while((*s++ = *t++) != 0) - ca9: 90 nop - caa: 8b 45 08 mov 0x8(%ebp),%eax - cad: 8d 50 01 lea 0x1(%eax),%edx - cb0: 89 55 08 mov %edx,0x8(%ebp) - cb3: 8b 55 0c mov 0xc(%ebp),%edx - cb6: 8d 4a 01 lea 0x1(%edx),%ecx - cb9: 89 4d 0c mov %ecx,0xc(%ebp) - cbc: 0f b6 12 movzbl (%edx),%edx - cbf: 88 10 mov %dl,(%eax) - cc1: 0f b6 00 movzbl (%eax),%eax - cc4: 84 c0 test %al,%al - cc6: 75 e2 jne caa - ; - return os; - cc8: 8b 45 fc mov -0x4(%ebp),%eax -} - ccb: c9 leave - ccc: c3 ret - -00000ccd : - -int -strcmp(const char *p, const char *q) -{ - ccd: 55 push %ebp - cce: 89 e5 mov %esp,%ebp - while(*p && *p == *q) - cd0: eb 08 jmp cda - p++, q++; - cd2: 83 45 08 01 addl $0x1,0x8(%ebp) - cd6: 83 45 0c 01 addl $0x1,0xc(%ebp) -} - -int -strcmp(const char *p, const char *q) -{ - while(*p && *p == *q) - cda: 8b 45 08 mov 0x8(%ebp),%eax - cdd: 0f b6 00 movzbl (%eax),%eax - ce0: 84 c0 test %al,%al - ce2: 74 10 je cf4 - ce4: 8b 45 08 mov 0x8(%ebp),%eax - ce7: 0f b6 10 movzbl (%eax),%edx - cea: 8b 45 0c mov 0xc(%ebp),%eax - ced: 0f b6 00 movzbl (%eax),%eax - cf0: 38 c2 cmp %al,%dl - cf2: 74 de je cd2 - p++, q++; - return (uchar)*p - (uchar)*q; - cf4: 8b 45 08 mov 0x8(%ebp),%eax - cf7: 0f b6 00 movzbl (%eax),%eax - cfa: 0f b6 d0 movzbl %al,%edx - cfd: 8b 45 0c mov 0xc(%ebp),%eax - d00: 0f b6 00 movzbl (%eax),%eax - d03: 0f b6 c0 movzbl %al,%eax - d06: 29 c2 sub %eax,%edx - d08: 89 d0 mov %edx,%eax -} - d0a: 5d pop %ebp - d0b: c3 ret - -00000d0c : - -uint -strlen(char *s) -{ - d0c: 55 push %ebp - d0d: 89 e5 mov %esp,%ebp - d0f: 83 ec 10 sub $0x10,%esp - int n; - - for(n = 0; s[n]; n++) - d12: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - d19: eb 04 jmp d1f - d1b: 83 45 fc 01 addl $0x1,-0x4(%ebp) - d1f: 8b 55 fc mov -0x4(%ebp),%edx - d22: 8b 45 08 mov 0x8(%ebp),%eax - d25: 01 d0 add %edx,%eax - d27: 0f b6 00 movzbl (%eax),%eax - d2a: 84 c0 test %al,%al - d2c: 75 ed jne d1b - ; - return n; - d2e: 8b 45 fc mov -0x4(%ebp),%eax -} - d31: c9 leave - d32: c3 ret - -00000d33 : - -void* -memset(void *dst, int c, uint n) -{ - d33: 55 push %ebp - d34: 89 e5 mov %esp,%ebp - stosb(dst, c, n); - d36: 8b 45 10 mov 0x10(%ebp),%eax - d39: 50 push %eax - d3a: ff 75 0c pushl 0xc(%ebp) - d3d: ff 75 08 pushl 0x8(%ebp) - d40: e8 33 ff ff ff call c78 - d45: 83 c4 0c add $0xc,%esp - return dst; - d48: 8b 45 08 mov 0x8(%ebp),%eax -} - d4b: c9 leave - d4c: c3 ret - -00000d4d : - -char* -strchr(const char *s, char c) -{ - d4d: 55 push %ebp - d4e: 89 e5 mov %esp,%ebp - d50: 83 ec 04 sub $0x4,%esp - d53: 8b 45 0c mov 0xc(%ebp),%eax - d56: 88 45 fc mov %al,-0x4(%ebp) - for(; *s; s++) - d59: eb 14 jmp d6f - if(*s == c) - d5b: 8b 45 08 mov 0x8(%ebp),%eax - d5e: 0f b6 00 movzbl (%eax),%eax - d61: 3a 45 fc cmp -0x4(%ebp),%al - d64: 75 05 jne d6b - return (char*)s; - d66: 8b 45 08 mov 0x8(%ebp),%eax - d69: eb 13 jmp d7e -} - -char* -strchr(const char *s, char c) -{ - for(; *s; s++) - d6b: 83 45 08 01 addl $0x1,0x8(%ebp) - d6f: 8b 45 08 mov 0x8(%ebp),%eax - d72: 0f b6 00 movzbl (%eax),%eax - d75: 84 c0 test %al,%al - d77: 75 e2 jne d5b - if(*s == c) - return (char*)s; - return 0; - d79: b8 00 00 00 00 mov $0x0,%eax -} - d7e: c9 leave - d7f: c3 ret - -00000d80 : - -char* -gets(char *buf, int max) -{ - d80: 55 push %ebp - d81: 89 e5 mov %esp,%ebp - d83: 83 ec 18 sub $0x18,%esp - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - d86: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - d8d: eb 44 jmp dd3 - cc = read(0, &c, 1); - d8f: 83 ec 04 sub $0x4,%esp - d92: 6a 01 push $0x1 - d94: 8d 45 ef lea -0x11(%ebp),%eax - d97: 50 push %eax - d98: 6a 00 push $0x0 - d9a: e8 46 01 00 00 call ee5 - d9f: 83 c4 10 add $0x10,%esp - da2: 89 45 f0 mov %eax,-0x10(%ebp) - if(cc < 1) - da5: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - da9: 7f 02 jg dad - break; - dab: eb 31 jmp dde - buf[i++] = c; - dad: 8b 45 f4 mov -0xc(%ebp),%eax - db0: 8d 50 01 lea 0x1(%eax),%edx - db3: 89 55 f4 mov %edx,-0xc(%ebp) - db6: 89 c2 mov %eax,%edx - db8: 8b 45 08 mov 0x8(%ebp),%eax - dbb: 01 c2 add %eax,%edx - dbd: 0f b6 45 ef movzbl -0x11(%ebp),%eax - dc1: 88 02 mov %al,(%edx) - if(c == '\n' || c == '\r') - dc3: 0f b6 45 ef movzbl -0x11(%ebp),%eax - dc7: 3c 0a cmp $0xa,%al - dc9: 74 13 je dde - dcb: 0f b6 45 ef movzbl -0x11(%ebp),%eax - dcf: 3c 0d cmp $0xd,%al - dd1: 74 0b je dde -gets(char *buf, int max) -{ - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - dd3: 8b 45 f4 mov -0xc(%ebp),%eax - dd6: 83 c0 01 add $0x1,%eax - dd9: 3b 45 0c cmp 0xc(%ebp),%eax - ddc: 7c b1 jl d8f - break; - buf[i++] = c; - if(c == '\n' || c == '\r') - break; - } - buf[i] = '\0'; - dde: 8b 55 f4 mov -0xc(%ebp),%edx - de1: 8b 45 08 mov 0x8(%ebp),%eax - de4: 01 d0 add %edx,%eax - de6: c6 00 00 movb $0x0,(%eax) - return buf; - de9: 8b 45 08 mov 0x8(%ebp),%eax -} - dec: c9 leave - ded: c3 ret - -00000dee : - -int -stat(char *n, struct stat *st) -{ - dee: 55 push %ebp - def: 89 e5 mov %esp,%ebp - df1: 83 ec 18 sub $0x18,%esp - int fd; - int r; - - fd = open(n, O_RDONLY); - df4: 83 ec 08 sub $0x8,%esp - df7: 6a 00 push $0x0 - df9: ff 75 08 pushl 0x8(%ebp) - dfc: e8 0c 01 00 00 call f0d - e01: 83 c4 10 add $0x10,%esp - e04: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd < 0) - e07: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - e0b: 79 07 jns e14 - return -1; - e0d: b8 ff ff ff ff mov $0xffffffff,%eax - e12: eb 25 jmp e39 - r = fstat(fd, st); - e14: 83 ec 08 sub $0x8,%esp - e17: ff 75 0c pushl 0xc(%ebp) - e1a: ff 75 f4 pushl -0xc(%ebp) - e1d: e8 03 01 00 00 call f25 - e22: 83 c4 10 add $0x10,%esp - e25: 89 45 f0 mov %eax,-0x10(%ebp) - close(fd); - e28: 83 ec 0c sub $0xc,%esp - e2b: ff 75 f4 pushl -0xc(%ebp) - e2e: e8 c2 00 00 00 call ef5 - e33: 83 c4 10 add $0x10,%esp - return r; - e36: 8b 45 f0 mov -0x10(%ebp),%eax -} - e39: c9 leave - e3a: c3 ret - -00000e3b : - -int -atoi(const char *s) -{ - e3b: 55 push %ebp - e3c: 89 e5 mov %esp,%ebp - e3e: 83 ec 10 sub $0x10,%esp - int n; - - n = 0; - e41: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - while('0' <= *s && *s <= '9') - e48: eb 25 jmp e6f - n = n*10 + *s++ - '0'; - e4a: 8b 55 fc mov -0x4(%ebp),%edx - e4d: 89 d0 mov %edx,%eax - e4f: c1 e0 02 shl $0x2,%eax - e52: 01 d0 add %edx,%eax - e54: 01 c0 add %eax,%eax - e56: 89 c1 mov %eax,%ecx - e58: 8b 45 08 mov 0x8(%ebp),%eax - e5b: 8d 50 01 lea 0x1(%eax),%edx - e5e: 89 55 08 mov %edx,0x8(%ebp) - e61: 0f b6 00 movzbl (%eax),%eax - e64: 0f be c0 movsbl %al,%eax - e67: 01 c8 add %ecx,%eax - e69: 83 e8 30 sub $0x30,%eax - e6c: 89 45 fc mov %eax,-0x4(%ebp) -atoi(const char *s) -{ - int n; - - n = 0; - while('0' <= *s && *s <= '9') - e6f: 8b 45 08 mov 0x8(%ebp),%eax - e72: 0f b6 00 movzbl (%eax),%eax - e75: 3c 2f cmp $0x2f,%al - e77: 7e 0a jle e83 - e79: 8b 45 08 mov 0x8(%ebp),%eax - e7c: 0f b6 00 movzbl (%eax),%eax - e7f: 3c 39 cmp $0x39,%al - e81: 7e c7 jle e4a - n = n*10 + *s++ - '0'; - return n; - e83: 8b 45 fc mov -0x4(%ebp),%eax -} - e86: c9 leave - e87: c3 ret - -00000e88 : - -void* -memmove(void *vdst, void *vsrc, int n) -{ - e88: 55 push %ebp - e89: 89 e5 mov %esp,%ebp - e8b: 83 ec 10 sub $0x10,%esp - char *dst, *src; - - dst = vdst; - e8e: 8b 45 08 mov 0x8(%ebp),%eax - e91: 89 45 fc mov %eax,-0x4(%ebp) - src = vsrc; - e94: 8b 45 0c mov 0xc(%ebp),%eax - e97: 89 45 f8 mov %eax,-0x8(%ebp) - while(n-- > 0) - e9a: eb 17 jmp eb3 - *dst++ = *src++; - e9c: 8b 45 fc mov -0x4(%ebp),%eax - e9f: 8d 50 01 lea 0x1(%eax),%edx - ea2: 89 55 fc mov %edx,-0x4(%ebp) - ea5: 8b 55 f8 mov -0x8(%ebp),%edx - ea8: 8d 4a 01 lea 0x1(%edx),%ecx - eab: 89 4d f8 mov %ecx,-0x8(%ebp) - eae: 0f b6 12 movzbl (%edx),%edx - eb1: 88 10 mov %dl,(%eax) -{ - char *dst, *src; - - dst = vdst; - src = vsrc; - while(n-- > 0) - eb3: 8b 45 10 mov 0x10(%ebp),%eax - eb6: 8d 50 ff lea -0x1(%eax),%edx - eb9: 89 55 10 mov %edx,0x10(%ebp) - ebc: 85 c0 test %eax,%eax - ebe: 7f dc jg e9c - *dst++ = *src++; - return vdst; - ec0: 8b 45 08 mov 0x8(%ebp),%eax -} - ec3: c9 leave - ec4: c3 ret - -00000ec5 : - name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - ec5: b8 01 00 00 00 mov $0x1,%eax - eca: cd 40 int $0x40 - ecc: c3 ret - -00000ecd : -SYSCALL(exit) - ecd: b8 02 00 00 00 mov $0x2,%eax - ed2: cd 40 int $0x40 - ed4: c3 ret - -00000ed5 : -SYSCALL(wait) - ed5: b8 03 00 00 00 mov $0x3,%eax - eda: cd 40 int $0x40 - edc: c3 ret - -00000edd : -SYSCALL(pipe) - edd: b8 04 00 00 00 mov $0x4,%eax - ee2: cd 40 int $0x40 - ee4: c3 ret - -00000ee5 : -SYSCALL(read) - ee5: b8 05 00 00 00 mov $0x5,%eax - eea: cd 40 int $0x40 - eec: c3 ret - -00000eed : -SYSCALL(write) - eed: b8 10 00 00 00 mov $0x10,%eax - ef2: cd 40 int $0x40 - ef4: c3 ret - -00000ef5 : -SYSCALL(close) - ef5: b8 15 00 00 00 mov $0x15,%eax - efa: cd 40 int $0x40 - efc: c3 ret - -00000efd : -SYSCALL(kill) - efd: b8 06 00 00 00 mov $0x6,%eax - f02: cd 40 int $0x40 - f04: c3 ret - -00000f05 : -SYSCALL(exec) - f05: b8 07 00 00 00 mov $0x7,%eax - f0a: cd 40 int $0x40 - f0c: c3 ret - -00000f0d : -SYSCALL(open) - f0d: b8 0f 00 00 00 mov $0xf,%eax - f12: cd 40 int $0x40 - f14: c3 ret - -00000f15 : -SYSCALL(mknod) - f15: b8 11 00 00 00 mov $0x11,%eax - f1a: cd 40 int $0x40 - f1c: c3 ret - -00000f1d : -SYSCALL(unlink) - f1d: b8 12 00 00 00 mov $0x12,%eax - f22: cd 40 int $0x40 - f24: c3 ret - -00000f25 : -SYSCALL(fstat) - f25: b8 08 00 00 00 mov $0x8,%eax - f2a: cd 40 int $0x40 - f2c: c3 ret - -00000f2d : -SYSCALL(link) - f2d: b8 13 00 00 00 mov $0x13,%eax - f32: cd 40 int $0x40 - f34: c3 ret - -00000f35 : -SYSCALL(mkdir) - f35: b8 14 00 00 00 mov $0x14,%eax - f3a: cd 40 int $0x40 - f3c: c3 ret - -00000f3d : -SYSCALL(chdir) - f3d: b8 09 00 00 00 mov $0x9,%eax - f42: cd 40 int $0x40 - f44: c3 ret - -00000f45 : -SYSCALL(dup) - f45: b8 0a 00 00 00 mov $0xa,%eax - f4a: cd 40 int $0x40 - f4c: c3 ret - -00000f4d : -SYSCALL(getpid) - f4d: b8 0b 00 00 00 mov $0xb,%eax - f52: cd 40 int $0x40 - f54: c3 ret - -00000f55 : -SYSCALL(sbrk) - f55: b8 0c 00 00 00 mov $0xc,%eax - f5a: cd 40 int $0x40 - f5c: c3 ret - -00000f5d : -SYSCALL(sleep) - f5d: b8 0d 00 00 00 mov $0xd,%eax - f62: cd 40 int $0x40 - f64: c3 ret - -00000f65 : -SYSCALL(uptime) - f65: b8 0e 00 00 00 mov $0xe,%eax - f6a: cd 40 int $0x40 - f6c: c3 ret - -00000f6d : -#include "stat.h" -#include "user.h" - -static void -putc(int fd, char c) -{ - f6d: 55 push %ebp - f6e: 89 e5 mov %esp,%ebp - f70: 83 ec 18 sub $0x18,%esp - f73: 8b 45 0c mov 0xc(%ebp),%eax - f76: 88 45 f4 mov %al,-0xc(%ebp) - write(fd, &c, 1); - f79: 83 ec 04 sub $0x4,%esp - f7c: 6a 01 push $0x1 - f7e: 8d 45 f4 lea -0xc(%ebp),%eax - f81: 50 push %eax - f82: ff 75 08 pushl 0x8(%ebp) - f85: e8 63 ff ff ff call eed - f8a: 83 c4 10 add $0x10,%esp -} - f8d: c9 leave - f8e: c3 ret - -00000f8f : - -static void -printint(int fd, int xx, int base, int sgn) -{ - f8f: 55 push %ebp - f90: 89 e5 mov %esp,%ebp - f92: 53 push %ebx - f93: 83 ec 24 sub $0x24,%esp - static char digits[] = "0123456789ABCDEF"; - char buf[16]; - int i, neg; - uint x; - - neg = 0; - f96: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - if(sgn && xx < 0){ - f9d: 83 7d 14 00 cmpl $0x0,0x14(%ebp) - fa1: 74 17 je fba - fa3: 83 7d 0c 00 cmpl $0x0,0xc(%ebp) - fa7: 79 11 jns fba - neg = 1; - fa9: c7 45 f0 01 00 00 00 movl $0x1,-0x10(%ebp) - x = -xx; - fb0: 8b 45 0c mov 0xc(%ebp),%eax - fb3: f7 d8 neg %eax - fb5: 89 45 ec mov %eax,-0x14(%ebp) - fb8: eb 06 jmp fc0 - } else { - x = xx; - fba: 8b 45 0c mov 0xc(%ebp),%eax - fbd: 89 45 ec mov %eax,-0x14(%ebp) - } - - i = 0; - fc0: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - do{ - buf[i++] = digits[x % base]; - fc7: 8b 4d f4 mov -0xc(%ebp),%ecx - fca: 8d 41 01 lea 0x1(%ecx),%eax - fcd: 89 45 f4 mov %eax,-0xc(%ebp) - fd0: 8b 5d 10 mov 0x10(%ebp),%ebx - fd3: 8b 45 ec mov -0x14(%ebp),%eax - fd6: ba 00 00 00 00 mov $0x0,%edx - fdb: f7 f3 div %ebx - fdd: 89 d0 mov %edx,%eax - fdf: 0f b6 80 82 19 00 00 movzbl 0x1982(%eax),%eax - fe6: 88 44 0d dc mov %al,-0x24(%ebp,%ecx,1) - }while((x /= base) != 0); - fea: 8b 5d 10 mov 0x10(%ebp),%ebx - fed: 8b 45 ec mov -0x14(%ebp),%eax - ff0: ba 00 00 00 00 mov $0x0,%edx - ff5: f7 f3 div %ebx - ff7: 89 45 ec mov %eax,-0x14(%ebp) - ffa: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - ffe: 75 c7 jne fc7 - if(neg) - 1000: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 1004: 74 0e je 1014 - buf[i++] = '-'; - 1006: 8b 45 f4 mov -0xc(%ebp),%eax - 1009: 8d 50 01 lea 0x1(%eax),%edx - 100c: 89 55 f4 mov %edx,-0xc(%ebp) - 100f: c6 44 05 dc 2d movb $0x2d,-0x24(%ebp,%eax,1) - - while(--i >= 0) - 1014: eb 1d jmp 1033 - putc(fd, buf[i]); - 1016: 8d 55 dc lea -0x24(%ebp),%edx - 1019: 8b 45 f4 mov -0xc(%ebp),%eax - 101c: 01 d0 add %edx,%eax - 101e: 0f b6 00 movzbl (%eax),%eax - 1021: 0f be c0 movsbl %al,%eax - 1024: 83 ec 08 sub $0x8,%esp - 1027: 50 push %eax - 1028: ff 75 08 pushl 0x8(%ebp) - 102b: e8 3d ff ff ff call f6d - 1030: 83 c4 10 add $0x10,%esp - buf[i++] = digits[x % base]; - }while((x /= base) != 0); - if(neg) - buf[i++] = '-'; - - while(--i >= 0) - 1033: 83 6d f4 01 subl $0x1,-0xc(%ebp) - 1037: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 103b: 79 d9 jns 1016 - putc(fd, buf[i]); -} - 103d: 8b 5d fc mov -0x4(%ebp),%ebx - 1040: c9 leave - 1041: c3 ret - -00001042 : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void -printf(int fd, char *fmt, ...) -{ - 1042: 55 push %ebp - 1043: 89 e5 mov %esp,%ebp - 1045: 83 ec 28 sub $0x28,%esp - char *s; - int c, i, state; - uint *ap; - - state = 0; - 1048: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - ap = (uint*)(void*)&fmt + 1; - 104f: 8d 45 0c lea 0xc(%ebp),%eax - 1052: 83 c0 04 add $0x4,%eax - 1055: 89 45 e8 mov %eax,-0x18(%ebp) - for(i = 0; fmt[i]; i++){ - 1058: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - 105f: e9 59 01 00 00 jmp 11bd - c = fmt[i] & 0xff; - 1064: 8b 55 0c mov 0xc(%ebp),%edx - 1067: 8b 45 f0 mov -0x10(%ebp),%eax - 106a: 01 d0 add %edx,%eax - 106c: 0f b6 00 movzbl (%eax),%eax - 106f: 0f be c0 movsbl %al,%eax - 1072: 25 ff 00 00 00 and $0xff,%eax - 1077: 89 45 e4 mov %eax,-0x1c(%ebp) - if(state == 0){ - 107a: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 107e: 75 2c jne 10ac - if(c == '%'){ - 1080: 83 7d e4 25 cmpl $0x25,-0x1c(%ebp) - 1084: 75 0c jne 1092 - state = '%'; - 1086: c7 45 ec 25 00 00 00 movl $0x25,-0x14(%ebp) - 108d: e9 27 01 00 00 jmp 11b9 - } else { - putc(fd, c); - 1092: 8b 45 e4 mov -0x1c(%ebp),%eax - 1095: 0f be c0 movsbl %al,%eax - 1098: 83 ec 08 sub $0x8,%esp - 109b: 50 push %eax - 109c: ff 75 08 pushl 0x8(%ebp) - 109f: e8 c9 fe ff ff call f6d - 10a4: 83 c4 10 add $0x10,%esp - 10a7: e9 0d 01 00 00 jmp 11b9 - } - } else if(state == '%'){ - 10ac: 83 7d ec 25 cmpl $0x25,-0x14(%ebp) - 10b0: 0f 85 03 01 00 00 jne 11b9 - if(c == 'd'){ - 10b6: 83 7d e4 64 cmpl $0x64,-0x1c(%ebp) - 10ba: 75 1e jne 10da - printint(fd, *ap, 10, 1); - 10bc: 8b 45 e8 mov -0x18(%ebp),%eax - 10bf: 8b 00 mov (%eax),%eax - 10c1: 6a 01 push $0x1 - 10c3: 6a 0a push $0xa - 10c5: 50 push %eax - 10c6: ff 75 08 pushl 0x8(%ebp) - 10c9: e8 c1 fe ff ff call f8f - 10ce: 83 c4 10 add $0x10,%esp - ap++; - 10d1: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 10d5: e9 d8 00 00 00 jmp 11b2 - } else if(c == 'x' || c == 'p'){ - 10da: 83 7d e4 78 cmpl $0x78,-0x1c(%ebp) - 10de: 74 06 je 10e6 - 10e0: 83 7d e4 70 cmpl $0x70,-0x1c(%ebp) - 10e4: 75 1e jne 1104 - printint(fd, *ap, 16, 0); - 10e6: 8b 45 e8 mov -0x18(%ebp),%eax - 10e9: 8b 00 mov (%eax),%eax - 10eb: 6a 00 push $0x0 - 10ed: 6a 10 push $0x10 - 10ef: 50 push %eax - 10f0: ff 75 08 pushl 0x8(%ebp) - 10f3: e8 97 fe ff ff call f8f - 10f8: 83 c4 10 add $0x10,%esp - ap++; - 10fb: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 10ff: e9 ae 00 00 00 jmp 11b2 - } else if(c == 's'){ - 1104: 83 7d e4 73 cmpl $0x73,-0x1c(%ebp) - 1108: 75 43 jne 114d - s = (char*)*ap; - 110a: 8b 45 e8 mov -0x18(%ebp),%eax - 110d: 8b 00 mov (%eax),%eax - 110f: 89 45 f4 mov %eax,-0xc(%ebp) - ap++; - 1112: 83 45 e8 04 addl $0x4,-0x18(%ebp) - if(s == 0) - 1116: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 111a: 75 07 jne 1123 - s = "(null)"; - 111c: c7 45 f4 e8 14 00 00 movl $0x14e8,-0xc(%ebp) - while(*s != 0){ - 1123: eb 1c jmp 1141 - putc(fd, *s); - 1125: 8b 45 f4 mov -0xc(%ebp),%eax - 1128: 0f b6 00 movzbl (%eax),%eax - 112b: 0f be c0 movsbl %al,%eax - 112e: 83 ec 08 sub $0x8,%esp - 1131: 50 push %eax - 1132: ff 75 08 pushl 0x8(%ebp) - 1135: e8 33 fe ff ff call f6d - 113a: 83 c4 10 add $0x10,%esp - s++; - 113d: 83 45 f4 01 addl $0x1,-0xc(%ebp) - } else if(c == 's'){ - s = (char*)*ap; - ap++; - if(s == 0) - s = "(null)"; - while(*s != 0){ - 1141: 8b 45 f4 mov -0xc(%ebp),%eax - 1144: 0f b6 00 movzbl (%eax),%eax - 1147: 84 c0 test %al,%al - 1149: 75 da jne 1125 - 114b: eb 65 jmp 11b2 - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 114d: 83 7d e4 63 cmpl $0x63,-0x1c(%ebp) - 1151: 75 1d jne 1170 - putc(fd, *ap); - 1153: 8b 45 e8 mov -0x18(%ebp),%eax - 1156: 8b 00 mov (%eax),%eax - 1158: 0f be c0 movsbl %al,%eax - 115b: 83 ec 08 sub $0x8,%esp - 115e: 50 push %eax - 115f: ff 75 08 pushl 0x8(%ebp) - 1162: e8 06 fe ff ff call f6d - 1167: 83 c4 10 add $0x10,%esp - ap++; - 116a: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 116e: eb 42 jmp 11b2 - } else if(c == '%'){ - 1170: 83 7d e4 25 cmpl $0x25,-0x1c(%ebp) - 1174: 75 17 jne 118d - putc(fd, c); - 1176: 8b 45 e4 mov -0x1c(%ebp),%eax - 1179: 0f be c0 movsbl %al,%eax - 117c: 83 ec 08 sub $0x8,%esp - 117f: 50 push %eax - 1180: ff 75 08 pushl 0x8(%ebp) - 1183: e8 e5 fd ff ff call f6d - 1188: 83 c4 10 add $0x10,%esp - 118b: eb 25 jmp 11b2 - } else { - // Unknown % sequence. Print it to draw attention. - putc(fd, '%'); - 118d: 83 ec 08 sub $0x8,%esp - 1190: 6a 25 push $0x25 - 1192: ff 75 08 pushl 0x8(%ebp) - 1195: e8 d3 fd ff ff call f6d - 119a: 83 c4 10 add $0x10,%esp - putc(fd, c); - 119d: 8b 45 e4 mov -0x1c(%ebp),%eax - 11a0: 0f be c0 movsbl %al,%eax - 11a3: 83 ec 08 sub $0x8,%esp - 11a6: 50 push %eax - 11a7: ff 75 08 pushl 0x8(%ebp) - 11aa: e8 be fd ff ff call f6d - 11af: 83 c4 10 add $0x10,%esp - } - state = 0; - 11b2: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for(i = 0; fmt[i]; i++){ - 11b9: 83 45 f0 01 addl $0x1,-0x10(%ebp) - 11bd: 8b 55 0c mov 0xc(%ebp),%edx - 11c0: 8b 45 f0 mov -0x10(%ebp),%eax - 11c3: 01 d0 add %edx,%eax - 11c5: 0f b6 00 movzbl (%eax),%eax - 11c8: 84 c0 test %al,%al - 11ca: 0f 85 94 fe ff ff jne 1064 - putc(fd, c); - } - state = 0; - } - } -} - 11d0: c9 leave - 11d1: c3 ret - -000011d2 : -static Header base; -static Header *freep; - -void -free(void *ap) -{ - 11d2: 55 push %ebp - 11d3: 89 e5 mov %esp,%ebp - 11d5: 83 ec 10 sub $0x10,%esp - Header *bp, *p; - - bp = (Header*)ap - 1; - 11d8: 8b 45 08 mov 0x8(%ebp),%eax - 11db: 83 e8 08 sub $0x8,%eax - 11de: 89 45 f8 mov %eax,-0x8(%ebp) - for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 11e1: a1 2c 1a 00 00 mov 0x1a2c,%eax - 11e6: 89 45 fc mov %eax,-0x4(%ebp) - 11e9: eb 24 jmp 120f - if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 11eb: 8b 45 fc mov -0x4(%ebp),%eax - 11ee: 8b 00 mov (%eax),%eax - 11f0: 3b 45 fc cmp -0x4(%ebp),%eax - 11f3: 77 12 ja 1207 - 11f5: 8b 45 f8 mov -0x8(%ebp),%eax - 11f8: 3b 45 fc cmp -0x4(%ebp),%eax - 11fb: 77 24 ja 1221 - 11fd: 8b 45 fc mov -0x4(%ebp),%eax - 1200: 8b 00 mov (%eax),%eax - 1202: 3b 45 f8 cmp -0x8(%ebp),%eax - 1205: 77 1a ja 1221 -free(void *ap) -{ - Header *bp, *p; - - bp = (Header*)ap - 1; - for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 1207: 8b 45 fc mov -0x4(%ebp),%eax - 120a: 8b 00 mov (%eax),%eax - 120c: 89 45 fc mov %eax,-0x4(%ebp) - 120f: 8b 45 f8 mov -0x8(%ebp),%eax - 1212: 3b 45 fc cmp -0x4(%ebp),%eax - 1215: 76 d4 jbe 11eb - 1217: 8b 45 fc mov -0x4(%ebp),%eax - 121a: 8b 00 mov (%eax),%eax - 121c: 3b 45 f8 cmp -0x8(%ebp),%eax - 121f: 76 ca jbe 11eb - if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - break; - if(bp + bp->s.size == p->s.ptr){ - 1221: 8b 45 f8 mov -0x8(%ebp),%eax - 1224: 8b 40 04 mov 0x4(%eax),%eax - 1227: 8d 14 c5 00 00 00 00 lea 0x0(,%eax,8),%edx - 122e: 8b 45 f8 mov -0x8(%ebp),%eax - 1231: 01 c2 add %eax,%edx - 1233: 8b 45 fc mov -0x4(%ebp),%eax - 1236: 8b 00 mov (%eax),%eax - 1238: 39 c2 cmp %eax,%edx - 123a: 75 24 jne 1260 - bp->s.size += p->s.ptr->s.size; - 123c: 8b 45 f8 mov -0x8(%ebp),%eax - 123f: 8b 50 04 mov 0x4(%eax),%edx - 1242: 8b 45 fc mov -0x4(%ebp),%eax - 1245: 8b 00 mov (%eax),%eax - 1247: 8b 40 04 mov 0x4(%eax),%eax - 124a: 01 c2 add %eax,%edx - 124c: 8b 45 f8 mov -0x8(%ebp),%eax - 124f: 89 50 04 mov %edx,0x4(%eax) - bp->s.ptr = p->s.ptr->s.ptr; - 1252: 8b 45 fc mov -0x4(%ebp),%eax - 1255: 8b 00 mov (%eax),%eax - 1257: 8b 10 mov (%eax),%edx - 1259: 8b 45 f8 mov -0x8(%ebp),%eax - 125c: 89 10 mov %edx,(%eax) - 125e: eb 0a jmp 126a - } else - bp->s.ptr = p->s.ptr; - 1260: 8b 45 fc mov -0x4(%ebp),%eax - 1263: 8b 10 mov (%eax),%edx - 1265: 8b 45 f8 mov -0x8(%ebp),%eax - 1268: 89 10 mov %edx,(%eax) - if(p + p->s.size == bp){ - 126a: 8b 45 fc mov -0x4(%ebp),%eax - 126d: 8b 40 04 mov 0x4(%eax),%eax - 1270: 8d 14 c5 00 00 00 00 lea 0x0(,%eax,8),%edx - 1277: 8b 45 fc mov -0x4(%ebp),%eax - 127a: 01 d0 add %edx,%eax - 127c: 3b 45 f8 cmp -0x8(%ebp),%eax - 127f: 75 20 jne 12a1 - p->s.size += bp->s.size; - 1281: 8b 45 fc mov -0x4(%ebp),%eax - 1284: 8b 50 04 mov 0x4(%eax),%edx - 1287: 8b 45 f8 mov -0x8(%ebp),%eax - 128a: 8b 40 04 mov 0x4(%eax),%eax - 128d: 01 c2 add %eax,%edx - 128f: 8b 45 fc mov -0x4(%ebp),%eax - 1292: 89 50 04 mov %edx,0x4(%eax) - p->s.ptr = bp->s.ptr; - 1295: 8b 45 f8 mov -0x8(%ebp),%eax - 1298: 8b 10 mov (%eax),%edx - 129a: 8b 45 fc mov -0x4(%ebp),%eax - 129d: 89 10 mov %edx,(%eax) - 129f: eb 08 jmp 12a9 - } else - p->s.ptr = bp; - 12a1: 8b 45 fc mov -0x4(%ebp),%eax - 12a4: 8b 55 f8 mov -0x8(%ebp),%edx - 12a7: 89 10 mov %edx,(%eax) - freep = p; - 12a9: 8b 45 fc mov -0x4(%ebp),%eax - 12ac: a3 2c 1a 00 00 mov %eax,0x1a2c -} - 12b1: c9 leave - 12b2: c3 ret - -000012b3 : - -static Header* -morecore(uint nu) -{ - 12b3: 55 push %ebp - 12b4: 89 e5 mov %esp,%ebp - 12b6: 83 ec 18 sub $0x18,%esp - char *p; - Header *hp; - - if(nu < 4096) - 12b9: 81 7d 08 ff 0f 00 00 cmpl $0xfff,0x8(%ebp) - 12c0: 77 07 ja 12c9 - nu = 4096; - 12c2: c7 45 08 00 10 00 00 movl $0x1000,0x8(%ebp) - p = sbrk(nu * sizeof(Header)); - 12c9: 8b 45 08 mov 0x8(%ebp),%eax - 12cc: c1 e0 03 shl $0x3,%eax - 12cf: 83 ec 0c sub $0xc,%esp - 12d2: 50 push %eax - 12d3: e8 7d fc ff ff call f55 - 12d8: 83 c4 10 add $0x10,%esp - 12db: 89 45 f4 mov %eax,-0xc(%ebp) - if(p == (char*)-1) - 12de: 83 7d f4 ff cmpl $0xffffffff,-0xc(%ebp) - 12e2: 75 07 jne 12eb - return 0; - 12e4: b8 00 00 00 00 mov $0x0,%eax - 12e9: eb 26 jmp 1311 - hp = (Header*)p; - 12eb: 8b 45 f4 mov -0xc(%ebp),%eax - 12ee: 89 45 f0 mov %eax,-0x10(%ebp) - hp->s.size = nu; - 12f1: 8b 45 f0 mov -0x10(%ebp),%eax - 12f4: 8b 55 08 mov 0x8(%ebp),%edx - 12f7: 89 50 04 mov %edx,0x4(%eax) - free((void*)(hp + 1)); - 12fa: 8b 45 f0 mov -0x10(%ebp),%eax - 12fd: 83 c0 08 add $0x8,%eax - 1300: 83 ec 0c sub $0xc,%esp - 1303: 50 push %eax - 1304: e8 c9 fe ff ff call 11d2 - 1309: 83 c4 10 add $0x10,%esp - return freep; - 130c: a1 2c 1a 00 00 mov 0x1a2c,%eax -} - 1311: c9 leave - 1312: c3 ret - -00001313 : - -void* -malloc(uint nbytes) -{ - 1313: 55 push %ebp - 1314: 89 e5 mov %esp,%ebp - 1316: 83 ec 18 sub $0x18,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 1319: 8b 45 08 mov 0x8(%ebp),%eax - 131c: 83 c0 07 add $0x7,%eax - 131f: c1 e8 03 shr $0x3,%eax - 1322: 83 c0 01 add $0x1,%eax - 1325: 89 45 ec mov %eax,-0x14(%ebp) - if((prevp = freep) == 0){ - 1328: a1 2c 1a 00 00 mov 0x1a2c,%eax - 132d: 89 45 f0 mov %eax,-0x10(%ebp) - 1330: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 1334: 75 23 jne 1359 - base.s.ptr = freep = prevp = &base; - 1336: c7 45 f0 24 1a 00 00 movl $0x1a24,-0x10(%ebp) - 133d: 8b 45 f0 mov -0x10(%ebp),%eax - 1340: a3 2c 1a 00 00 mov %eax,0x1a2c - 1345: a1 2c 1a 00 00 mov 0x1a2c,%eax - 134a: a3 24 1a 00 00 mov %eax,0x1a24 - base.s.size = 0; - 134f: c7 05 28 1a 00 00 00 movl $0x0,0x1a28 - 1356: 00 00 00 - } - for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 1359: 8b 45 f0 mov -0x10(%ebp),%eax - 135c: 8b 00 mov (%eax),%eax - 135e: 89 45 f4 mov %eax,-0xc(%ebp) - if(p->s.size >= nunits){ - 1361: 8b 45 f4 mov -0xc(%ebp),%eax - 1364: 8b 40 04 mov 0x4(%eax),%eax - 1367: 3b 45 ec cmp -0x14(%ebp),%eax - 136a: 72 4d jb 13b9 - if(p->s.size == nunits) - 136c: 8b 45 f4 mov -0xc(%ebp),%eax - 136f: 8b 40 04 mov 0x4(%eax),%eax - 1372: 3b 45 ec cmp -0x14(%ebp),%eax - 1375: 75 0c jne 1383 - prevp->s.ptr = p->s.ptr; - 1377: 8b 45 f4 mov -0xc(%ebp),%eax - 137a: 8b 10 mov (%eax),%edx - 137c: 8b 45 f0 mov -0x10(%ebp),%eax - 137f: 89 10 mov %edx,(%eax) - 1381: eb 26 jmp 13a9 - else { - p->s.size -= nunits; - 1383: 8b 45 f4 mov -0xc(%ebp),%eax - 1386: 8b 40 04 mov 0x4(%eax),%eax - 1389: 2b 45 ec sub -0x14(%ebp),%eax - 138c: 89 c2 mov %eax,%edx - 138e: 8b 45 f4 mov -0xc(%ebp),%eax - 1391: 89 50 04 mov %edx,0x4(%eax) - p += p->s.size; - 1394: 8b 45 f4 mov -0xc(%ebp),%eax - 1397: 8b 40 04 mov 0x4(%eax),%eax - 139a: c1 e0 03 shl $0x3,%eax - 139d: 01 45 f4 add %eax,-0xc(%ebp) - p->s.size = nunits; - 13a0: 8b 45 f4 mov -0xc(%ebp),%eax - 13a3: 8b 55 ec mov -0x14(%ebp),%edx - 13a6: 89 50 04 mov %edx,0x4(%eax) - } - freep = prevp; - 13a9: 8b 45 f0 mov -0x10(%ebp),%eax - 13ac: a3 2c 1a 00 00 mov %eax,0x1a2c - return (void*)(p + 1); - 13b1: 8b 45 f4 mov -0xc(%ebp),%eax - 13b4: 83 c0 08 add $0x8,%eax - 13b7: eb 3b jmp 13f4 - } - if(p == freep) - 13b9: a1 2c 1a 00 00 mov 0x1a2c,%eax - 13be: 39 45 f4 cmp %eax,-0xc(%ebp) - 13c1: 75 1e jne 13e1 - if((p = morecore(nunits)) == 0) - 13c3: 83 ec 0c sub $0xc,%esp - 13c6: ff 75 ec pushl -0x14(%ebp) - 13c9: e8 e5 fe ff ff call 12b3 - 13ce: 83 c4 10 add $0x10,%esp - 13d1: 89 45 f4 mov %eax,-0xc(%ebp) - 13d4: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 13d8: 75 07 jne 13e1 - return 0; - 13da: b8 00 00 00 00 mov $0x0,%eax - 13df: eb 13 jmp 13f4 - nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - if((prevp = freep) == 0){ - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 13e1: 8b 45 f4 mov -0xc(%ebp),%eax - 13e4: 89 45 f0 mov %eax,-0x10(%ebp) - 13e7: 8b 45 f4 mov -0xc(%ebp),%eax - 13ea: 8b 00 mov (%eax),%eax - 13ec: 89 45 f4 mov %eax,-0xc(%ebp) - return (void*)(p + 1); - } - if(p == freep) - if((p = morecore(nunits)) == 0) - return 0; - } - 13ef: e9 6d ff ff ff jmp 1361 -} - 13f4: c9 leave - 13f5: c3 ret diff --git a/xv6-public/sh.d b/xv6-public/sh.d deleted file mode 100755 index 51ddf2d..0000000 --- a/xv6-public/sh.d +++ /dev/null @@ -1 +0,0 @@ -sh.o: sh.c /usr/include/stdc-predef.h types.h user.h fcntl.h diff --git a/xv6-public/sh.o b/xv6-public/sh.o deleted file mode 100755 index 5f660e3aa532429041062a65b791836c6217866c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18068 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 diff --git a/xv6-public/sh.sym b/xv6-public/sh.sym deleted file mode 100755 index 2f5858e..0000000 --- a/xv6-public/sh.sym +++ /dev/null @@ -1,82 +0,0 @@ -00000000 .text -000013f8 .rodata -000014f0 .eh_frame -00001974 .data -000019c0 .bss -00000000 .comment -00000000 .debug_aranges -00000000 .debug_info -00000000 .debug_abbrev -00000000 .debug_line -00000000 .debug_str -00000000 .debug_loc -00000000 sh.c -000019c0 buf.1410 -00000000 ulib.c -00000c78 stosb -00000000 printf.c -00000f6d putc -00000f8f printint -00001982 digits.1372 -00000000 umalloc.c -00001a24 base -00001a2c freep -000012b3 morecore -00000000 -00000c9d strcpy -00001042 printf -00000e88 memmove -00000f15 mknod -000003e5 execcmd -00000d80 gets -00000f4d getpid -0000084b parsepipe -00000710 parsecmd -0000050e backcmd -0000069a peek -000008b9 parseredirs -0000054d gettoken -00001313 malloc -00000f5d sleep -00001974 whitespace -000003bc fork1 -00000b7c nulterminate -00000edd pipe -0000024d getcmd -00000eed write -00000f25 fstat -00000efd kill -00000f3d chdir -0000079e parseline -00000000 runcmd -0000099d parseblock -00000f05 exec -00000ed5 wait -0000197a symbols -00000ee5 read -00000a4b parseexec -00000f1d unlink -0000039c panic -00000ec5 fork -00000f55 sbrk -00000f65 uptime -00001993 __bss_start -00000d33 memset -000002a2 main -00000ccd strcmp -00000f45 dup -0000047e pipecmd -0000041b redircmd -00000dee stat -00001993 _edata -00001a30 _end -00000f2d link -00000ecd exit -00000e3b atoi -00000d0c strlen -00000f0d open -00000d4d strchr -00000f35 mkdir -00000ef5 close -000004c6 listcmd -000011d2 free diff --git a/xv6-public/spinlock.d b/xv6-public/spinlock.d deleted file mode 100755 index 9f70952..0000000 --- a/xv6-public/spinlock.d +++ /dev/null @@ -1,2 +0,0 @@ -spinlock.o: spinlock.c /usr/include/stdc-predef.h types.h defs.h param.h \ - x86.h memlayout.h mmu.h proc.h spinlock.h diff --git a/xv6-public/spinlock.o b/xv6-public/spinlock.o deleted file mode 100755 index cb60ed9c71326b7556e36f70c0e2cc431531ea0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9092 zcma)B4Rlo1oxk_ZdoM3!5)u+1gb#xOrIrkk1W1rTh@^lbq$((^5+*Z~WMDFx&If{3 zQKPjq>shjAPpekN@1jx#ORKK9QnAN_y1VYKp1Qkkx8)qW?BaHqhzB@bU2QM_%_m zU0yMhsw|YqHdfGO>0p(g74ge|qa(~rNMkB!iWJ?aYju&z(rID_)_te~_6Nlw%=)RE-d!I!V2p;Y_D~E46TYBqjXQrL+ z`i}0eqQfs#!66T4F8ARr-YH) zblN?te=q)muQ3+Oyp2U6v2*&l-;a%*JQ0n3t&q$nL^hF1L~{v|8Op>`$@<3nWICV7 zW(%2ovNz?cg)>30Vz_KM2tlsJQ(d~~TQuHOAUP(G&Fg-#z#k83i=eUqjq zG`k4(67oq+=DGhs)AuyH#EHXnP?P!Y2Q)pUS;TD)fjzBDUg)5^h5Wu|Elwhdwmqv^ zs}n<#=XBU|cQ*P(9@cDydo5EQ(T*Lc2*QqPw%W-d?1$QMt$T)!Kho@SVP`-+yX9H* zT1h7|+KU-wS5~5*OIA}{q804;k{?j9R4Ke#tHCb0n<1@AVb?(6<%Hd)sH`T9XHvpm zrW95c6&Yb)s_iJjE?I$c?d3W?OnY<}0@}4l89fp#a)nk*phvt{*ef+JCGQt@ho&C= zUDjxoQh2DdE$lC&i~;*QFWEx4SJ3LuBbQUlF3zJ|ZlSR6*FEE@LASrF*#!3;dOpAu zRznyax=7d$YFnk61NK9jO>#$A-vipS2A)mAepuUT)s(Ow(X7siWt)Zl=&LH{3^mgB zV>+&04X6D$TVXZKQFGINLbG{l-r7%UHebzY`+J&U_F%r-2Q|a&!8EX+(m7kzI~c;)+f2drY6{wB3U1&uvyW)MZZ*y9 z=QX>Ev)}%KCfB%w?8~E?ZRT>a&E&k!ZKKId&aGU8_6yqYdiPWI>x-Igb5ilVuwT+_ zyIaXw^p~3TIz(qVDV z#J807sC4gOY~`Q3jK%xIz7M>{na@(yKsb$ab#>GrIT6jc(d`z_0?j-%oX$ecu+d?o za29D+iH5RiVb1RtA(Zpsav$D+#1-_KXgk>3;rL_BKbtkW*;&deIk}sJqgFH)yxY%) zw4H<={ox*A#h3l9VxBt>X`D;%RV?ge*pJKEWUHalZK7v8^H~iwPQFh#D?U)9)@5s* zmAZ>(xPQeY9eNSeyZ4f<(n;pHTj<$&O2y4{VmG3I%j^=S9B{8@#a2&HEQMzL9SW|z z0ZQ9xVRfrYA&aU>c*v@5B(kb5fE=oN1hQSVjRhg>Pk^QNdk6?g_dS?O?LMf&pFqP~ z_1r{g&w@<)2266&G(Jo1&!Gu3vJRCne)eLN+TvP0P`UqvbZ&^9&7Ne1U03&=t!9K< z!WqG-mBFfVJqBTS5n+Z5`AJJfHAEqMB-Oll5a1>6hoRSQmx0sB#wvdC8E>m!~ zQaw4BhcYLrn1P#HzN}uxx6U4wl*%Qz57JPEv)PniqUv%FMQc<{*`*kZutx0~fRJA| z1(w=e0#oH~8p|cKutGn_E!QBtHnkIaN=(E)u*y{*jN0f__S{stAI{b^$+%Z=*Rr(7 z5HXFh(-_O~tLud=RSF>uVI_q-Ae^Nz3gLC+s^c;2zYu_|%ki}4OJ=M<_&1rACRL;P zrbcyt1GCC?3WCaI!%^i5LpX@+$aMfuYqew^zVMFYmW-<11+|*HqoS6BXsuS;>!>}Q zhZ5^6WM|<$BPpykYFdwG#7xOEzO`9W!F*g+5p<1Y^QQa)%-U=!h{7)+k4ifIH|{<< zvR<>;VOESu9)hm!7>t}Xb+1F<)IcoHgjPy2j_0zIjQuyn*75wNoTorg?e6piF8Sve zeu3JyW~rt06283sD_`1M7Nm zcwIHy+2MYtGt8_tEyZeEsNv*@Y1GBxq8kR(InQZoM6L|``HF7LRtrbdC(Jf2K)K88 z!zNuN7r}8liuD~~nGv9fn;9(N3l*Lfs4yZg@FVZ;s90CMGR)T22g9kD?Wi8(cni!U z%$z*e2tHqx>=7p_x!@7G_s|ERF7hhe)Dh7D${vy5kd`QTL~c*PIP$4RN94B4IO23A z7d#?&uV5VcOrs-m+h-hcv62fOk$Y7zj(n-n5!j@3YJGc(ddZ$ zyn@{$enZIxkH{S<7&jCABHU7R6SgYzXr8!Ds|h-4G>=NCi=2BdGZDX~Wsi7R$pw$d zZ7o&Sf z5;<)c94u%dlO2kE!B<7b6Me=N+o!5W=wF2#*wP-F5NV&?gufl9+ifc}vNzH`I(lG9 z{}yk-Ukl5YZoTVmIO%O^?)PTDc_38wkXN&%dB^Cevi0F>RjI?a`|XJA?EhymMs(mL#cQ&-Cz7! zq8GnS^ekH3vry!cHznA4!sObz@ygD1T_T&?wMb;5>10gg68-T+E{62UJUd(zc;4+x zrVx|MGztGFkDbX>DiIg`iF_;yDa+Tm{`o_w;+mR!7A+C6foNJ3asxxzJo3j`t0rG) z_JtOai6?rB4oiG}n=dTVDVrDdG_{C)Hk#?nMh6q3fb3b{XR*kj9G>Gc(QE=$HpR7y zRB})^K9x-G6j!hB>gry%VT~A4Z7QU5$^LXAULVZ0RHPF(?uw>Fa%iwuaAK($CyLJO zlGqS_Ucj2!(8C{bV3ktdH0?=q` zL2NLSZ*Fc{uzS~%#!R6%g@M_$Vbj%JtNmszT8I(KC(==oiwz{=1&n~mM{_J3)4*RX zy6tTo315W;lxF7*@gtW_(-E2ecrq*2Y}izPS$#{SEz(rqIM~cbzK~9|_b1YcY%&HK z&Bg}Wu__yvwA45D<1c<=G~3q*&y5S~8~f5jjT!n;=q)5u`D9v?TpscH#%L-T&0!Ki zxhtA}35{vmCQ<~S;Y7{;6q9~w;N8`Y>cW`@}Cte+MM8qth=B9Y&}~D8^q88{ZV_ zjpp~CmC*?zxjlpVXs?K1I%pj5CH#aMQR^uZkLIHy(u4H4QM|&l@CF6ryrd7`lQ?0ExrXzo$m_vCE^aQ^%4SPR*Y zfhgX^@%TRj3SZV|)Nfzfl2OA|TW6HJp#@DVWR85d{y{uckq-Yu1m=@$0u6 zvL6FcoI<`?0fjH-VGHJ)gM93F=0lT;`R;_w81}ciaAsfmg?7;XXSjoYE3t9#mlyw{ zjrY9vOm7pz;Cy2gr4o?br5&39rMu+9>LiTG`-jk%7JQ&x2Fp6 zBk26gPaQ0iwofs^c}V5w2|rg@F85QG8O--MzB8~z7cW0wQDKCj-WIR(}@A2fp!$shr%6Bn;LsKu};(5|PK>Eiu|FEi$pXZ$? z&;Pd?zMD|4g-Nx8hymj}Okz^qN{+dClvpdoo5uc+#{M&7_fS;}gIbOS!njF5#D`iumwGJK;!esEXM;AD9OJ7E zUTCnxV7I}S4gS5sGX{Tauml6kJPig{7+h~~tHA+-cN)CU;1dR)F?ht_3kF{?c*5ZO z27haC%;0qVOvrj%Y;du`jKQxH(Z_oY4ihmM?=kjAjs8i4PaFFShQDm^Ripn25#_yO z^zRyc-`GzX`^N@9H&~6A8{_JTsLw2e7ZOpQHe=staI>**HMorkzpokGW%PRue$(Kn z!TSw9K}5NS3_on}C=vPIGW=bG|6=f$27gUN{8_`#8RS;X_=v$(MEI>IqJ7;4uQB#* z#-27: -#include "fs.h" -#include "fcntl.h" - -int -main(int argc, char *argv[]) -{ - 0: 8d 4c 24 04 lea 0x4(%esp),%ecx - 4: 83 e4 f0 and $0xfffffff0,%esp - 7: ff 71 fc pushl -0x4(%ecx) - a: 55 push %ebp - b: 89 e5 mov %esp,%ebp - d: 51 push %ecx - e: 81 ec 24 02 00 00 sub $0x224,%esp - int fd, i; - char path[] = "stressfs0"; - 14: c7 45 e6 73 74 72 65 movl $0x65727473,-0x1a(%ebp) - 1b: c7 45 ea 73 73 66 73 movl $0x73667373,-0x16(%ebp) - 22: 66 c7 45 ee 30 00 movw $0x30,-0x12(%ebp) - char data[512]; - - printf(1, "stressfs starting\n"); - 28: 83 ec 08 sub $0x8,%esp - 2b: 68 cf 08 00 00 push $0x8cf - 30: 6a 01 push $0x1 - 32: e8 e4 04 00 00 call 51b - 37: 83 c4 10 add $0x10,%esp - memset(data, 'a', sizeof(data)); - 3a: 83 ec 04 sub $0x4,%esp - 3d: 68 00 02 00 00 push $0x200 - 42: 6a 61 push $0x61 - 44: 8d 85 e6 fd ff ff lea -0x21a(%ebp),%eax - 4a: 50 push %eax - 4b: e8 bc 01 00 00 call 20c - 50: 83 c4 10 add $0x10,%esp - - for(i = 0; i < 4; i++) - 53: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 5a: eb 0f jmp 6b - if(fork() > 0) - 5c: e8 3d 03 00 00 call 39e - 61: 85 c0 test %eax,%eax - 63: 7e 02 jle 67 - break; - 65: eb 0a jmp 71 - char data[512]; - - printf(1, "stressfs starting\n"); - memset(data, 'a', sizeof(data)); - - for(i = 0; i < 4; i++) - 67: 83 45 f4 01 addl $0x1,-0xc(%ebp) - 6b: 83 7d f4 03 cmpl $0x3,-0xc(%ebp) - 6f: 7e eb jle 5c - if(fork() > 0) - break; - - printf(1, "write %d\n", i); - 71: 83 ec 04 sub $0x4,%esp - 74: ff 75 f4 pushl -0xc(%ebp) - 77: 68 e2 08 00 00 push $0x8e2 - 7c: 6a 01 push $0x1 - 7e: e8 98 04 00 00 call 51b - 83: 83 c4 10 add $0x10,%esp - - path[8] += i; - 86: 0f b6 45 ee movzbl -0x12(%ebp),%eax - 8a: 89 c2 mov %eax,%edx - 8c: 8b 45 f4 mov -0xc(%ebp),%eax - 8f: 01 d0 add %edx,%eax - 91: 88 45 ee mov %al,-0x12(%ebp) - fd = open(path, O_CREATE | O_RDWR); - 94: 83 ec 08 sub $0x8,%esp - 97: 68 02 02 00 00 push $0x202 - 9c: 8d 45 e6 lea -0x1a(%ebp),%eax - 9f: 50 push %eax - a0: e8 41 03 00 00 call 3e6 - a5: 83 c4 10 add $0x10,%esp - a8: 89 45 f0 mov %eax,-0x10(%ebp) - for(i = 0; i < 20; i++) - ab: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - b2: eb 1e jmp d2 -// printf(fd, "%d\n", i); - write(fd, data, sizeof(data)); - b4: 83 ec 04 sub $0x4,%esp - b7: 68 00 02 00 00 push $0x200 - bc: 8d 85 e6 fd ff ff lea -0x21a(%ebp),%eax - c2: 50 push %eax - c3: ff 75 f0 pushl -0x10(%ebp) - c6: e8 fb 02 00 00 call 3c6 - cb: 83 c4 10 add $0x10,%esp - - printf(1, "write %d\n", i); - - path[8] += i; - fd = open(path, O_CREATE | O_RDWR); - for(i = 0; i < 20; i++) - ce: 83 45 f4 01 addl $0x1,-0xc(%ebp) - d2: 83 7d f4 13 cmpl $0x13,-0xc(%ebp) - d6: 7e dc jle b4 -// printf(fd, "%d\n", i); - write(fd, data, sizeof(data)); - close(fd); - d8: 83 ec 0c sub $0xc,%esp - db: ff 75 f0 pushl -0x10(%ebp) - de: e8 eb 02 00 00 call 3ce - e3: 83 c4 10 add $0x10,%esp - - printf(1, "read\n"); - e6: 83 ec 08 sub $0x8,%esp - e9: 68 ec 08 00 00 push $0x8ec - ee: 6a 01 push $0x1 - f0: e8 26 04 00 00 call 51b - f5: 83 c4 10 add $0x10,%esp - - fd = open(path, O_RDONLY); - f8: 83 ec 08 sub $0x8,%esp - fb: 6a 00 push $0x0 - fd: 8d 45 e6 lea -0x1a(%ebp),%eax - 100: 50 push %eax - 101: e8 e0 02 00 00 call 3e6 - 106: 83 c4 10 add $0x10,%esp - 109: 89 45 f0 mov %eax,-0x10(%ebp) - for (i = 0; i < 20; i++) - 10c: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 113: eb 1e jmp 133 - read(fd, data, sizeof(data)); - 115: 83 ec 04 sub $0x4,%esp - 118: 68 00 02 00 00 push $0x200 - 11d: 8d 85 e6 fd ff ff lea -0x21a(%ebp),%eax - 123: 50 push %eax - 124: ff 75 f0 pushl -0x10(%ebp) - 127: e8 92 02 00 00 call 3be - 12c: 83 c4 10 add $0x10,%esp - close(fd); - - printf(1, "read\n"); - - fd = open(path, O_RDONLY); - for (i = 0; i < 20; i++) - 12f: 83 45 f4 01 addl $0x1,-0xc(%ebp) - 133: 83 7d f4 13 cmpl $0x13,-0xc(%ebp) - 137: 7e dc jle 115 - read(fd, data, sizeof(data)); - close(fd); - 139: 83 ec 0c sub $0xc,%esp - 13c: ff 75 f0 pushl -0x10(%ebp) - 13f: e8 8a 02 00 00 call 3ce - 144: 83 c4 10 add $0x10,%esp - - wait(); - 147: e8 62 02 00 00 call 3ae - - exit(); - 14c: e8 55 02 00 00 call 3a6 - -00000151 : - "cc"); -} - -static inline void -stosb(void *addr, int data, int cnt) -{ - 151: 55 push %ebp - 152: 89 e5 mov %esp,%ebp - 154: 57 push %edi - 155: 53 push %ebx - asm volatile("cld; rep stosb" : - 156: 8b 4d 08 mov 0x8(%ebp),%ecx - 159: 8b 55 10 mov 0x10(%ebp),%edx - 15c: 8b 45 0c mov 0xc(%ebp),%eax - 15f: 89 cb mov %ecx,%ebx - 161: 89 df mov %ebx,%edi - 163: 89 d1 mov %edx,%ecx - 165: fc cld - 166: f3 aa rep stos %al,%es:(%edi) - 168: 89 ca mov %ecx,%edx - 16a: 89 fb mov %edi,%ebx - 16c: 89 5d 08 mov %ebx,0x8(%ebp) - 16f: 89 55 10 mov %edx,0x10(%ebp) - "=D" (addr), "=c" (cnt) : - "0" (addr), "1" (cnt), "a" (data) : - "memory", "cc"); -} - 172: 5b pop %ebx - 173: 5f pop %edi - 174: 5d pop %ebp - 175: c3 ret - -00000176 : -#include "user.h" -#include "x86.h" - -char* -strcpy(char *s, char *t) -{ - 176: 55 push %ebp - 177: 89 e5 mov %esp,%ebp - 179: 83 ec 10 sub $0x10,%esp - char *os; - - os = s; - 17c: 8b 45 08 mov 0x8(%ebp),%eax - 17f: 89 45 fc mov %eax,-0x4(%ebp) - while((*s++ = *t++) != 0) - 182: 90 nop - 183: 8b 45 08 mov 0x8(%ebp),%eax - 186: 8d 50 01 lea 0x1(%eax),%edx - 189: 89 55 08 mov %edx,0x8(%ebp) - 18c: 8b 55 0c mov 0xc(%ebp),%edx - 18f: 8d 4a 01 lea 0x1(%edx),%ecx - 192: 89 4d 0c mov %ecx,0xc(%ebp) - 195: 0f b6 12 movzbl (%edx),%edx - 198: 88 10 mov %dl,(%eax) - 19a: 0f b6 00 movzbl (%eax),%eax - 19d: 84 c0 test %al,%al - 19f: 75 e2 jne 183 - ; - return os; - 1a1: 8b 45 fc mov -0x4(%ebp),%eax -} - 1a4: c9 leave - 1a5: c3 ret - -000001a6 : - -int -strcmp(const char *p, const char *q) -{ - 1a6: 55 push %ebp - 1a7: 89 e5 mov %esp,%ebp - while(*p && *p == *q) - 1a9: eb 08 jmp 1b3 - p++, q++; - 1ab: 83 45 08 01 addl $0x1,0x8(%ebp) - 1af: 83 45 0c 01 addl $0x1,0xc(%ebp) -} - -int -strcmp(const char *p, const char *q) -{ - while(*p && *p == *q) - 1b3: 8b 45 08 mov 0x8(%ebp),%eax - 1b6: 0f b6 00 movzbl (%eax),%eax - 1b9: 84 c0 test %al,%al - 1bb: 74 10 je 1cd - 1bd: 8b 45 08 mov 0x8(%ebp),%eax - 1c0: 0f b6 10 movzbl (%eax),%edx - 1c3: 8b 45 0c mov 0xc(%ebp),%eax - 1c6: 0f b6 00 movzbl (%eax),%eax - 1c9: 38 c2 cmp %al,%dl - 1cb: 74 de je 1ab - p++, q++; - return (uchar)*p - (uchar)*q; - 1cd: 8b 45 08 mov 0x8(%ebp),%eax - 1d0: 0f b6 00 movzbl (%eax),%eax - 1d3: 0f b6 d0 movzbl %al,%edx - 1d6: 8b 45 0c mov 0xc(%ebp),%eax - 1d9: 0f b6 00 movzbl (%eax),%eax - 1dc: 0f b6 c0 movzbl %al,%eax - 1df: 29 c2 sub %eax,%edx - 1e1: 89 d0 mov %edx,%eax -} - 1e3: 5d pop %ebp - 1e4: c3 ret - -000001e5 : - -uint -strlen(char *s) -{ - 1e5: 55 push %ebp - 1e6: 89 e5 mov %esp,%ebp - 1e8: 83 ec 10 sub $0x10,%esp - int n; - - for(n = 0; s[n]; n++) - 1eb: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - 1f2: eb 04 jmp 1f8 - 1f4: 83 45 fc 01 addl $0x1,-0x4(%ebp) - 1f8: 8b 55 fc mov -0x4(%ebp),%edx - 1fb: 8b 45 08 mov 0x8(%ebp),%eax - 1fe: 01 d0 add %edx,%eax - 200: 0f b6 00 movzbl (%eax),%eax - 203: 84 c0 test %al,%al - 205: 75 ed jne 1f4 - ; - return n; - 207: 8b 45 fc mov -0x4(%ebp),%eax -} - 20a: c9 leave - 20b: c3 ret - -0000020c : - -void* -memset(void *dst, int c, uint n) -{ - 20c: 55 push %ebp - 20d: 89 e5 mov %esp,%ebp - stosb(dst, c, n); - 20f: 8b 45 10 mov 0x10(%ebp),%eax - 212: 50 push %eax - 213: ff 75 0c pushl 0xc(%ebp) - 216: ff 75 08 pushl 0x8(%ebp) - 219: e8 33 ff ff ff call 151 - 21e: 83 c4 0c add $0xc,%esp - return dst; - 221: 8b 45 08 mov 0x8(%ebp),%eax -} - 224: c9 leave - 225: c3 ret - -00000226 : - -char* -strchr(const char *s, char c) -{ - 226: 55 push %ebp - 227: 89 e5 mov %esp,%ebp - 229: 83 ec 04 sub $0x4,%esp - 22c: 8b 45 0c mov 0xc(%ebp),%eax - 22f: 88 45 fc mov %al,-0x4(%ebp) - for(; *s; s++) - 232: eb 14 jmp 248 - if(*s == c) - 234: 8b 45 08 mov 0x8(%ebp),%eax - 237: 0f b6 00 movzbl (%eax),%eax - 23a: 3a 45 fc cmp -0x4(%ebp),%al - 23d: 75 05 jne 244 - return (char*)s; - 23f: 8b 45 08 mov 0x8(%ebp),%eax - 242: eb 13 jmp 257 -} - -char* -strchr(const char *s, char c) -{ - for(; *s; s++) - 244: 83 45 08 01 addl $0x1,0x8(%ebp) - 248: 8b 45 08 mov 0x8(%ebp),%eax - 24b: 0f b6 00 movzbl (%eax),%eax - 24e: 84 c0 test %al,%al - 250: 75 e2 jne 234 - if(*s == c) - return (char*)s; - return 0; - 252: b8 00 00 00 00 mov $0x0,%eax -} - 257: c9 leave - 258: c3 ret - -00000259 : - -char* -gets(char *buf, int max) -{ - 259: 55 push %ebp - 25a: 89 e5 mov %esp,%ebp - 25c: 83 ec 18 sub $0x18,%esp - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - 25f: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 266: eb 44 jmp 2ac - cc = read(0, &c, 1); - 268: 83 ec 04 sub $0x4,%esp - 26b: 6a 01 push $0x1 - 26d: 8d 45 ef lea -0x11(%ebp),%eax - 270: 50 push %eax - 271: 6a 00 push $0x0 - 273: e8 46 01 00 00 call 3be - 278: 83 c4 10 add $0x10,%esp - 27b: 89 45 f0 mov %eax,-0x10(%ebp) - if(cc < 1) - 27e: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 282: 7f 02 jg 286 - break; - 284: eb 31 jmp 2b7 - buf[i++] = c; - 286: 8b 45 f4 mov -0xc(%ebp),%eax - 289: 8d 50 01 lea 0x1(%eax),%edx - 28c: 89 55 f4 mov %edx,-0xc(%ebp) - 28f: 89 c2 mov %eax,%edx - 291: 8b 45 08 mov 0x8(%ebp),%eax - 294: 01 c2 add %eax,%edx - 296: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 29a: 88 02 mov %al,(%edx) - if(c == '\n' || c == '\r') - 29c: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 2a0: 3c 0a cmp $0xa,%al - 2a2: 74 13 je 2b7 - 2a4: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 2a8: 3c 0d cmp $0xd,%al - 2aa: 74 0b je 2b7 -gets(char *buf, int max) -{ - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - 2ac: 8b 45 f4 mov -0xc(%ebp),%eax - 2af: 83 c0 01 add $0x1,%eax - 2b2: 3b 45 0c cmp 0xc(%ebp),%eax - 2b5: 7c b1 jl 268 - break; - buf[i++] = c; - if(c == '\n' || c == '\r') - break; - } - buf[i] = '\0'; - 2b7: 8b 55 f4 mov -0xc(%ebp),%edx - 2ba: 8b 45 08 mov 0x8(%ebp),%eax - 2bd: 01 d0 add %edx,%eax - 2bf: c6 00 00 movb $0x0,(%eax) - return buf; - 2c2: 8b 45 08 mov 0x8(%ebp),%eax -} - 2c5: c9 leave - 2c6: c3 ret - -000002c7 : - -int -stat(char *n, struct stat *st) -{ - 2c7: 55 push %ebp - 2c8: 89 e5 mov %esp,%ebp - 2ca: 83 ec 18 sub $0x18,%esp - int fd; - int r; - - fd = open(n, O_RDONLY); - 2cd: 83 ec 08 sub $0x8,%esp - 2d0: 6a 00 push $0x0 - 2d2: ff 75 08 pushl 0x8(%ebp) - 2d5: e8 0c 01 00 00 call 3e6 - 2da: 83 c4 10 add $0x10,%esp - 2dd: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd < 0) - 2e0: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 2e4: 79 07 jns 2ed - return -1; - 2e6: b8 ff ff ff ff mov $0xffffffff,%eax - 2eb: eb 25 jmp 312 - r = fstat(fd, st); - 2ed: 83 ec 08 sub $0x8,%esp - 2f0: ff 75 0c pushl 0xc(%ebp) - 2f3: ff 75 f4 pushl -0xc(%ebp) - 2f6: e8 03 01 00 00 call 3fe - 2fb: 83 c4 10 add $0x10,%esp - 2fe: 89 45 f0 mov %eax,-0x10(%ebp) - close(fd); - 301: 83 ec 0c sub $0xc,%esp - 304: ff 75 f4 pushl -0xc(%ebp) - 307: e8 c2 00 00 00 call 3ce - 30c: 83 c4 10 add $0x10,%esp - return r; - 30f: 8b 45 f0 mov -0x10(%ebp),%eax -} - 312: c9 leave - 313: c3 ret - -00000314 : - -int -atoi(const char *s) -{ - 314: 55 push %ebp - 315: 89 e5 mov %esp,%ebp - 317: 83 ec 10 sub $0x10,%esp - int n; - - n = 0; - 31a: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - while('0' <= *s && *s <= '9') - 321: eb 25 jmp 348 - n = n*10 + *s++ - '0'; - 323: 8b 55 fc mov -0x4(%ebp),%edx - 326: 89 d0 mov %edx,%eax - 328: c1 e0 02 shl $0x2,%eax - 32b: 01 d0 add %edx,%eax - 32d: 01 c0 add %eax,%eax - 32f: 89 c1 mov %eax,%ecx - 331: 8b 45 08 mov 0x8(%ebp),%eax - 334: 8d 50 01 lea 0x1(%eax),%edx - 337: 89 55 08 mov %edx,0x8(%ebp) - 33a: 0f b6 00 movzbl (%eax),%eax - 33d: 0f be c0 movsbl %al,%eax - 340: 01 c8 add %ecx,%eax - 342: 83 e8 30 sub $0x30,%eax - 345: 89 45 fc mov %eax,-0x4(%ebp) -atoi(const char *s) -{ - int n; - - n = 0; - while('0' <= *s && *s <= '9') - 348: 8b 45 08 mov 0x8(%ebp),%eax - 34b: 0f b6 00 movzbl (%eax),%eax - 34e: 3c 2f cmp $0x2f,%al - 350: 7e 0a jle 35c - 352: 8b 45 08 mov 0x8(%ebp),%eax - 355: 0f b6 00 movzbl (%eax),%eax - 358: 3c 39 cmp $0x39,%al - 35a: 7e c7 jle 323 - n = n*10 + *s++ - '0'; - return n; - 35c: 8b 45 fc mov -0x4(%ebp),%eax -} - 35f: c9 leave - 360: c3 ret - -00000361 : - -void* -memmove(void *vdst, void *vsrc, int n) -{ - 361: 55 push %ebp - 362: 89 e5 mov %esp,%ebp - 364: 83 ec 10 sub $0x10,%esp - char *dst, *src; - - dst = vdst; - 367: 8b 45 08 mov 0x8(%ebp),%eax - 36a: 89 45 fc mov %eax,-0x4(%ebp) - src = vsrc; - 36d: 8b 45 0c mov 0xc(%ebp),%eax - 370: 89 45 f8 mov %eax,-0x8(%ebp) - while(n-- > 0) - 373: eb 17 jmp 38c - *dst++ = *src++; - 375: 8b 45 fc mov -0x4(%ebp),%eax - 378: 8d 50 01 lea 0x1(%eax),%edx - 37b: 89 55 fc mov %edx,-0x4(%ebp) - 37e: 8b 55 f8 mov -0x8(%ebp),%edx - 381: 8d 4a 01 lea 0x1(%edx),%ecx - 384: 89 4d f8 mov %ecx,-0x8(%ebp) - 387: 0f b6 12 movzbl (%edx),%edx - 38a: 88 10 mov %dl,(%eax) -{ - char *dst, *src; - - dst = vdst; - src = vsrc; - while(n-- > 0) - 38c: 8b 45 10 mov 0x10(%ebp),%eax - 38f: 8d 50 ff lea -0x1(%eax),%edx - 392: 89 55 10 mov %edx,0x10(%ebp) - 395: 85 c0 test %eax,%eax - 397: 7f dc jg 375 - *dst++ = *src++; - return vdst; - 399: 8b 45 08 mov 0x8(%ebp),%eax -} - 39c: c9 leave - 39d: c3 ret - -0000039e : - name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 39e: b8 01 00 00 00 mov $0x1,%eax - 3a3: cd 40 int $0x40 - 3a5: c3 ret - -000003a6 : -SYSCALL(exit) - 3a6: b8 02 00 00 00 mov $0x2,%eax - 3ab: cd 40 int $0x40 - 3ad: c3 ret - -000003ae : -SYSCALL(wait) - 3ae: b8 03 00 00 00 mov $0x3,%eax - 3b3: cd 40 int $0x40 - 3b5: c3 ret - -000003b6 : -SYSCALL(pipe) - 3b6: b8 04 00 00 00 mov $0x4,%eax - 3bb: cd 40 int $0x40 - 3bd: c3 ret - -000003be : -SYSCALL(read) - 3be: b8 05 00 00 00 mov $0x5,%eax - 3c3: cd 40 int $0x40 - 3c5: c3 ret - -000003c6 : -SYSCALL(write) - 3c6: b8 10 00 00 00 mov $0x10,%eax - 3cb: cd 40 int $0x40 - 3cd: c3 ret - -000003ce : -SYSCALL(close) - 3ce: b8 15 00 00 00 mov $0x15,%eax - 3d3: cd 40 int $0x40 - 3d5: c3 ret - -000003d6 : -SYSCALL(kill) - 3d6: b8 06 00 00 00 mov $0x6,%eax - 3db: cd 40 int $0x40 - 3dd: c3 ret - -000003de : -SYSCALL(exec) - 3de: b8 07 00 00 00 mov $0x7,%eax - 3e3: cd 40 int $0x40 - 3e5: c3 ret - -000003e6 : -SYSCALL(open) - 3e6: b8 0f 00 00 00 mov $0xf,%eax - 3eb: cd 40 int $0x40 - 3ed: c3 ret - -000003ee : -SYSCALL(mknod) - 3ee: b8 11 00 00 00 mov $0x11,%eax - 3f3: cd 40 int $0x40 - 3f5: c3 ret - -000003f6 : -SYSCALL(unlink) - 3f6: b8 12 00 00 00 mov $0x12,%eax - 3fb: cd 40 int $0x40 - 3fd: c3 ret - -000003fe : -SYSCALL(fstat) - 3fe: b8 08 00 00 00 mov $0x8,%eax - 403: cd 40 int $0x40 - 405: c3 ret - -00000406 : -SYSCALL(link) - 406: b8 13 00 00 00 mov $0x13,%eax - 40b: cd 40 int $0x40 - 40d: c3 ret - -0000040e : -SYSCALL(mkdir) - 40e: b8 14 00 00 00 mov $0x14,%eax - 413: cd 40 int $0x40 - 415: c3 ret - -00000416 : -SYSCALL(chdir) - 416: b8 09 00 00 00 mov $0x9,%eax - 41b: cd 40 int $0x40 - 41d: c3 ret - -0000041e : -SYSCALL(dup) - 41e: b8 0a 00 00 00 mov $0xa,%eax - 423: cd 40 int $0x40 - 425: c3 ret - -00000426 : -SYSCALL(getpid) - 426: b8 0b 00 00 00 mov $0xb,%eax - 42b: cd 40 int $0x40 - 42d: c3 ret - -0000042e : -SYSCALL(sbrk) - 42e: b8 0c 00 00 00 mov $0xc,%eax - 433: cd 40 int $0x40 - 435: c3 ret - -00000436 : -SYSCALL(sleep) - 436: b8 0d 00 00 00 mov $0xd,%eax - 43b: cd 40 int $0x40 - 43d: c3 ret - -0000043e : -SYSCALL(uptime) - 43e: b8 0e 00 00 00 mov $0xe,%eax - 443: cd 40 int $0x40 - 445: c3 ret - -00000446 : -#include "stat.h" -#include "user.h" - -static void -putc(int fd, char c) -{ - 446: 55 push %ebp - 447: 89 e5 mov %esp,%ebp - 449: 83 ec 18 sub $0x18,%esp - 44c: 8b 45 0c mov 0xc(%ebp),%eax - 44f: 88 45 f4 mov %al,-0xc(%ebp) - write(fd, &c, 1); - 452: 83 ec 04 sub $0x4,%esp - 455: 6a 01 push $0x1 - 457: 8d 45 f4 lea -0xc(%ebp),%eax - 45a: 50 push %eax - 45b: ff 75 08 pushl 0x8(%ebp) - 45e: e8 63 ff ff ff call 3c6 - 463: 83 c4 10 add $0x10,%esp -} - 466: c9 leave - 467: c3 ret - -00000468 : - -static void -printint(int fd, int xx, int base, int sgn) -{ - 468: 55 push %ebp - 469: 89 e5 mov %esp,%ebp - 46b: 53 push %ebx - 46c: 83 ec 24 sub $0x24,%esp - static char digits[] = "0123456789ABCDEF"; - char buf[16]; - int i, neg; - uint x; - - neg = 0; - 46f: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - if(sgn && xx < 0){ - 476: 83 7d 14 00 cmpl $0x0,0x14(%ebp) - 47a: 74 17 je 493 - 47c: 83 7d 0c 00 cmpl $0x0,0xc(%ebp) - 480: 79 11 jns 493 - neg = 1; - 482: c7 45 f0 01 00 00 00 movl $0x1,-0x10(%ebp) - x = -xx; - 489: 8b 45 0c mov 0xc(%ebp),%eax - 48c: f7 d8 neg %eax - 48e: 89 45 ec mov %eax,-0x14(%ebp) - 491: eb 06 jmp 499 - } else { - x = xx; - 493: 8b 45 0c mov 0xc(%ebp),%eax - 496: 89 45 ec mov %eax,-0x14(%ebp) - } - - i = 0; - 499: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - do{ - buf[i++] = digits[x % base]; - 4a0: 8b 4d f4 mov -0xc(%ebp),%ecx - 4a3: 8d 41 01 lea 0x1(%ecx),%eax - 4a6: 89 45 f4 mov %eax,-0xc(%ebp) - 4a9: 8b 5d 10 mov 0x10(%ebp),%ebx - 4ac: 8b 45 ec mov -0x14(%ebp),%eax - 4af: ba 00 00 00 00 mov $0x0,%edx - 4b4: f7 f3 div %ebx - 4b6: 89 d0 mov %edx,%eax - 4b8: 0f b6 80 44 0b 00 00 movzbl 0xb44(%eax),%eax - 4bf: 88 44 0d dc mov %al,-0x24(%ebp,%ecx,1) - }while((x /= base) != 0); - 4c3: 8b 5d 10 mov 0x10(%ebp),%ebx - 4c6: 8b 45 ec mov -0x14(%ebp),%eax - 4c9: ba 00 00 00 00 mov $0x0,%edx - 4ce: f7 f3 div %ebx - 4d0: 89 45 ec mov %eax,-0x14(%ebp) - 4d3: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 4d7: 75 c7 jne 4a0 - if(neg) - 4d9: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 4dd: 74 0e je 4ed - buf[i++] = '-'; - 4df: 8b 45 f4 mov -0xc(%ebp),%eax - 4e2: 8d 50 01 lea 0x1(%eax),%edx - 4e5: 89 55 f4 mov %edx,-0xc(%ebp) - 4e8: c6 44 05 dc 2d movb $0x2d,-0x24(%ebp,%eax,1) - - while(--i >= 0) - 4ed: eb 1d jmp 50c - putc(fd, buf[i]); - 4ef: 8d 55 dc lea -0x24(%ebp),%edx - 4f2: 8b 45 f4 mov -0xc(%ebp),%eax - 4f5: 01 d0 add %edx,%eax - 4f7: 0f b6 00 movzbl (%eax),%eax - 4fa: 0f be c0 movsbl %al,%eax - 4fd: 83 ec 08 sub $0x8,%esp - 500: 50 push %eax - 501: ff 75 08 pushl 0x8(%ebp) - 504: e8 3d ff ff ff call 446 - 509: 83 c4 10 add $0x10,%esp - buf[i++] = digits[x % base]; - }while((x /= base) != 0); - if(neg) - buf[i++] = '-'; - - while(--i >= 0) - 50c: 83 6d f4 01 subl $0x1,-0xc(%ebp) - 510: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 514: 79 d9 jns 4ef - putc(fd, buf[i]); -} - 516: 8b 5d fc mov -0x4(%ebp),%ebx - 519: c9 leave - 51a: c3 ret - -0000051b : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void -printf(int fd, char *fmt, ...) -{ - 51b: 55 push %ebp - 51c: 89 e5 mov %esp,%ebp - 51e: 83 ec 28 sub $0x28,%esp - char *s; - int c, i, state; - uint *ap; - - state = 0; - 521: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - ap = (uint*)(void*)&fmt + 1; - 528: 8d 45 0c lea 0xc(%ebp),%eax - 52b: 83 c0 04 add $0x4,%eax - 52e: 89 45 e8 mov %eax,-0x18(%ebp) - for(i = 0; fmt[i]; i++){ - 531: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - 538: e9 59 01 00 00 jmp 696 - c = fmt[i] & 0xff; - 53d: 8b 55 0c mov 0xc(%ebp),%edx - 540: 8b 45 f0 mov -0x10(%ebp),%eax - 543: 01 d0 add %edx,%eax - 545: 0f b6 00 movzbl (%eax),%eax - 548: 0f be c0 movsbl %al,%eax - 54b: 25 ff 00 00 00 and $0xff,%eax - 550: 89 45 e4 mov %eax,-0x1c(%ebp) - if(state == 0){ - 553: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 557: 75 2c jne 585 - if(c == '%'){ - 559: 83 7d e4 25 cmpl $0x25,-0x1c(%ebp) - 55d: 75 0c jne 56b - state = '%'; - 55f: c7 45 ec 25 00 00 00 movl $0x25,-0x14(%ebp) - 566: e9 27 01 00 00 jmp 692 - } else { - putc(fd, c); - 56b: 8b 45 e4 mov -0x1c(%ebp),%eax - 56e: 0f be c0 movsbl %al,%eax - 571: 83 ec 08 sub $0x8,%esp - 574: 50 push %eax - 575: ff 75 08 pushl 0x8(%ebp) - 578: e8 c9 fe ff ff call 446 - 57d: 83 c4 10 add $0x10,%esp - 580: e9 0d 01 00 00 jmp 692 - } - } else if(state == '%'){ - 585: 83 7d ec 25 cmpl $0x25,-0x14(%ebp) - 589: 0f 85 03 01 00 00 jne 692 - if(c == 'd'){ - 58f: 83 7d e4 64 cmpl $0x64,-0x1c(%ebp) - 593: 75 1e jne 5b3 - printint(fd, *ap, 10, 1); - 595: 8b 45 e8 mov -0x18(%ebp),%eax - 598: 8b 00 mov (%eax),%eax - 59a: 6a 01 push $0x1 - 59c: 6a 0a push $0xa - 59e: 50 push %eax - 59f: ff 75 08 pushl 0x8(%ebp) - 5a2: e8 c1 fe ff ff call 468 - 5a7: 83 c4 10 add $0x10,%esp - ap++; - 5aa: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 5ae: e9 d8 00 00 00 jmp 68b - } else if(c == 'x' || c == 'p'){ - 5b3: 83 7d e4 78 cmpl $0x78,-0x1c(%ebp) - 5b7: 74 06 je 5bf - 5b9: 83 7d e4 70 cmpl $0x70,-0x1c(%ebp) - 5bd: 75 1e jne 5dd - printint(fd, *ap, 16, 0); - 5bf: 8b 45 e8 mov -0x18(%ebp),%eax - 5c2: 8b 00 mov (%eax),%eax - 5c4: 6a 00 push $0x0 - 5c6: 6a 10 push $0x10 - 5c8: 50 push %eax - 5c9: ff 75 08 pushl 0x8(%ebp) - 5cc: e8 97 fe ff ff call 468 - 5d1: 83 c4 10 add $0x10,%esp - ap++; - 5d4: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 5d8: e9 ae 00 00 00 jmp 68b - } else if(c == 's'){ - 5dd: 83 7d e4 73 cmpl $0x73,-0x1c(%ebp) - 5e1: 75 43 jne 626 - s = (char*)*ap; - 5e3: 8b 45 e8 mov -0x18(%ebp),%eax - 5e6: 8b 00 mov (%eax),%eax - 5e8: 89 45 f4 mov %eax,-0xc(%ebp) - ap++; - 5eb: 83 45 e8 04 addl $0x4,-0x18(%ebp) - if(s == 0) - 5ef: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 5f3: 75 07 jne 5fc - s = "(null)"; - 5f5: c7 45 f4 f2 08 00 00 movl $0x8f2,-0xc(%ebp) - while(*s != 0){ - 5fc: eb 1c jmp 61a - putc(fd, *s); - 5fe: 8b 45 f4 mov -0xc(%ebp),%eax - 601: 0f b6 00 movzbl (%eax),%eax - 604: 0f be c0 movsbl %al,%eax - 607: 83 ec 08 sub $0x8,%esp - 60a: 50 push %eax - 60b: ff 75 08 pushl 0x8(%ebp) - 60e: e8 33 fe ff ff call 446 - 613: 83 c4 10 add $0x10,%esp - s++; - 616: 83 45 f4 01 addl $0x1,-0xc(%ebp) - } else if(c == 's'){ - s = (char*)*ap; - ap++; - if(s == 0) - s = "(null)"; - while(*s != 0){ - 61a: 8b 45 f4 mov -0xc(%ebp),%eax - 61d: 0f b6 00 movzbl (%eax),%eax - 620: 84 c0 test %al,%al - 622: 75 da jne 5fe - 624: eb 65 jmp 68b - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 626: 83 7d e4 63 cmpl $0x63,-0x1c(%ebp) - 62a: 75 1d jne 649 - putc(fd, *ap); - 62c: 8b 45 e8 mov -0x18(%ebp),%eax - 62f: 8b 00 mov (%eax),%eax - 631: 0f be c0 movsbl %al,%eax - 634: 83 ec 08 sub $0x8,%esp - 637: 50 push %eax - 638: ff 75 08 pushl 0x8(%ebp) - 63b: e8 06 fe ff ff call 446 - 640: 83 c4 10 add $0x10,%esp - ap++; - 643: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 647: eb 42 jmp 68b - } else if(c == '%'){ - 649: 83 7d e4 25 cmpl $0x25,-0x1c(%ebp) - 64d: 75 17 jne 666 - putc(fd, c); - 64f: 8b 45 e4 mov -0x1c(%ebp),%eax - 652: 0f be c0 movsbl %al,%eax - 655: 83 ec 08 sub $0x8,%esp - 658: 50 push %eax - 659: ff 75 08 pushl 0x8(%ebp) - 65c: e8 e5 fd ff ff call 446 - 661: 83 c4 10 add $0x10,%esp - 664: eb 25 jmp 68b - } else { - // Unknown % sequence. Print it to draw attention. - putc(fd, '%'); - 666: 83 ec 08 sub $0x8,%esp - 669: 6a 25 push $0x25 - 66b: ff 75 08 pushl 0x8(%ebp) - 66e: e8 d3 fd ff ff call 446 - 673: 83 c4 10 add $0x10,%esp - putc(fd, c); - 676: 8b 45 e4 mov -0x1c(%ebp),%eax - 679: 0f be c0 movsbl %al,%eax - 67c: 83 ec 08 sub $0x8,%esp - 67f: 50 push %eax - 680: ff 75 08 pushl 0x8(%ebp) - 683: e8 be fd ff ff call 446 - 688: 83 c4 10 add $0x10,%esp - } - state = 0; - 68b: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for(i = 0; fmt[i]; i++){ - 692: 83 45 f0 01 addl $0x1,-0x10(%ebp) - 696: 8b 55 0c mov 0xc(%ebp),%edx - 699: 8b 45 f0 mov -0x10(%ebp),%eax - 69c: 01 d0 add %edx,%eax - 69e: 0f b6 00 movzbl (%eax),%eax - 6a1: 84 c0 test %al,%al - 6a3: 0f 85 94 fe ff ff jne 53d - putc(fd, c); - } - state = 0; - } - } -} - 6a9: c9 leave - 6aa: c3 ret - -000006ab : -static Header base; -static Header *freep; - -void -free(void *ap) -{ - 6ab: 55 push %ebp - 6ac: 89 e5 mov %esp,%ebp - 6ae: 83 ec 10 sub $0x10,%esp - Header *bp, *p; - - bp = (Header*)ap - 1; - 6b1: 8b 45 08 mov 0x8(%ebp),%eax - 6b4: 83 e8 08 sub $0x8,%eax - 6b7: 89 45 f8 mov %eax,-0x8(%ebp) - for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 6ba: a1 60 0b 00 00 mov 0xb60,%eax - 6bf: 89 45 fc mov %eax,-0x4(%ebp) - 6c2: eb 24 jmp 6e8 - if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 6c4: 8b 45 fc mov -0x4(%ebp),%eax - 6c7: 8b 00 mov (%eax),%eax - 6c9: 3b 45 fc cmp -0x4(%ebp),%eax - 6cc: 77 12 ja 6e0 - 6ce: 8b 45 f8 mov -0x8(%ebp),%eax - 6d1: 3b 45 fc cmp -0x4(%ebp),%eax - 6d4: 77 24 ja 6fa - 6d6: 8b 45 fc mov -0x4(%ebp),%eax - 6d9: 8b 00 mov (%eax),%eax - 6db: 3b 45 f8 cmp -0x8(%ebp),%eax - 6de: 77 1a ja 6fa -free(void *ap) -{ - Header *bp, *p; - - bp = (Header*)ap - 1; - for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 6e0: 8b 45 fc mov -0x4(%ebp),%eax - 6e3: 8b 00 mov (%eax),%eax - 6e5: 89 45 fc mov %eax,-0x4(%ebp) - 6e8: 8b 45 f8 mov -0x8(%ebp),%eax - 6eb: 3b 45 fc cmp -0x4(%ebp),%eax - 6ee: 76 d4 jbe 6c4 - 6f0: 8b 45 fc mov -0x4(%ebp),%eax - 6f3: 8b 00 mov (%eax),%eax - 6f5: 3b 45 f8 cmp -0x8(%ebp),%eax - 6f8: 76 ca jbe 6c4 - if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - break; - if(bp + bp->s.size == p->s.ptr){ - 6fa: 8b 45 f8 mov -0x8(%ebp),%eax - 6fd: 8b 40 04 mov 0x4(%eax),%eax - 700: 8d 14 c5 00 00 00 00 lea 0x0(,%eax,8),%edx - 707: 8b 45 f8 mov -0x8(%ebp),%eax - 70a: 01 c2 add %eax,%edx - 70c: 8b 45 fc mov -0x4(%ebp),%eax - 70f: 8b 00 mov (%eax),%eax - 711: 39 c2 cmp %eax,%edx - 713: 75 24 jne 739 - bp->s.size += p->s.ptr->s.size; - 715: 8b 45 f8 mov -0x8(%ebp),%eax - 718: 8b 50 04 mov 0x4(%eax),%edx - 71b: 8b 45 fc mov -0x4(%ebp),%eax - 71e: 8b 00 mov (%eax),%eax - 720: 8b 40 04 mov 0x4(%eax),%eax - 723: 01 c2 add %eax,%edx - 725: 8b 45 f8 mov -0x8(%ebp),%eax - 728: 89 50 04 mov %edx,0x4(%eax) - bp->s.ptr = p->s.ptr->s.ptr; - 72b: 8b 45 fc mov -0x4(%ebp),%eax - 72e: 8b 00 mov (%eax),%eax - 730: 8b 10 mov (%eax),%edx - 732: 8b 45 f8 mov -0x8(%ebp),%eax - 735: 89 10 mov %edx,(%eax) - 737: eb 0a jmp 743 - } else - bp->s.ptr = p->s.ptr; - 739: 8b 45 fc mov -0x4(%ebp),%eax - 73c: 8b 10 mov (%eax),%edx - 73e: 8b 45 f8 mov -0x8(%ebp),%eax - 741: 89 10 mov %edx,(%eax) - if(p + p->s.size == bp){ - 743: 8b 45 fc mov -0x4(%ebp),%eax - 746: 8b 40 04 mov 0x4(%eax),%eax - 749: 8d 14 c5 00 00 00 00 lea 0x0(,%eax,8),%edx - 750: 8b 45 fc mov -0x4(%ebp),%eax - 753: 01 d0 add %edx,%eax - 755: 3b 45 f8 cmp -0x8(%ebp),%eax - 758: 75 20 jne 77a - p->s.size += bp->s.size; - 75a: 8b 45 fc mov -0x4(%ebp),%eax - 75d: 8b 50 04 mov 0x4(%eax),%edx - 760: 8b 45 f8 mov -0x8(%ebp),%eax - 763: 8b 40 04 mov 0x4(%eax),%eax - 766: 01 c2 add %eax,%edx - 768: 8b 45 fc mov -0x4(%ebp),%eax - 76b: 89 50 04 mov %edx,0x4(%eax) - p->s.ptr = bp->s.ptr; - 76e: 8b 45 f8 mov -0x8(%ebp),%eax - 771: 8b 10 mov (%eax),%edx - 773: 8b 45 fc mov -0x4(%ebp),%eax - 776: 89 10 mov %edx,(%eax) - 778: eb 08 jmp 782 - } else - p->s.ptr = bp; - 77a: 8b 45 fc mov -0x4(%ebp),%eax - 77d: 8b 55 f8 mov -0x8(%ebp),%edx - 780: 89 10 mov %edx,(%eax) - freep = p; - 782: 8b 45 fc mov -0x4(%ebp),%eax - 785: a3 60 0b 00 00 mov %eax,0xb60 -} - 78a: c9 leave - 78b: c3 ret - -0000078c : - -static Header* -morecore(uint nu) -{ - 78c: 55 push %ebp - 78d: 89 e5 mov %esp,%ebp - 78f: 83 ec 18 sub $0x18,%esp - char *p; - Header *hp; - - if(nu < 4096) - 792: 81 7d 08 ff 0f 00 00 cmpl $0xfff,0x8(%ebp) - 799: 77 07 ja 7a2 - nu = 4096; - 79b: c7 45 08 00 10 00 00 movl $0x1000,0x8(%ebp) - p = sbrk(nu * sizeof(Header)); - 7a2: 8b 45 08 mov 0x8(%ebp),%eax - 7a5: c1 e0 03 shl $0x3,%eax - 7a8: 83 ec 0c sub $0xc,%esp - 7ab: 50 push %eax - 7ac: e8 7d fc ff ff call 42e - 7b1: 83 c4 10 add $0x10,%esp - 7b4: 89 45 f4 mov %eax,-0xc(%ebp) - if(p == (char*)-1) - 7b7: 83 7d f4 ff cmpl $0xffffffff,-0xc(%ebp) - 7bb: 75 07 jne 7c4 - return 0; - 7bd: b8 00 00 00 00 mov $0x0,%eax - 7c2: eb 26 jmp 7ea - hp = (Header*)p; - 7c4: 8b 45 f4 mov -0xc(%ebp),%eax - 7c7: 89 45 f0 mov %eax,-0x10(%ebp) - hp->s.size = nu; - 7ca: 8b 45 f0 mov -0x10(%ebp),%eax - 7cd: 8b 55 08 mov 0x8(%ebp),%edx - 7d0: 89 50 04 mov %edx,0x4(%eax) - free((void*)(hp + 1)); - 7d3: 8b 45 f0 mov -0x10(%ebp),%eax - 7d6: 83 c0 08 add $0x8,%eax - 7d9: 83 ec 0c sub $0xc,%esp - 7dc: 50 push %eax - 7dd: e8 c9 fe ff ff call 6ab - 7e2: 83 c4 10 add $0x10,%esp - return freep; - 7e5: a1 60 0b 00 00 mov 0xb60,%eax -} - 7ea: c9 leave - 7eb: c3 ret - -000007ec : - -void* -malloc(uint nbytes) -{ - 7ec: 55 push %ebp - 7ed: 89 e5 mov %esp,%ebp - 7ef: 83 ec 18 sub $0x18,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 7f2: 8b 45 08 mov 0x8(%ebp),%eax - 7f5: 83 c0 07 add $0x7,%eax - 7f8: c1 e8 03 shr $0x3,%eax - 7fb: 83 c0 01 add $0x1,%eax - 7fe: 89 45 ec mov %eax,-0x14(%ebp) - if((prevp = freep) == 0){ - 801: a1 60 0b 00 00 mov 0xb60,%eax - 806: 89 45 f0 mov %eax,-0x10(%ebp) - 809: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 80d: 75 23 jne 832 - base.s.ptr = freep = prevp = &base; - 80f: c7 45 f0 58 0b 00 00 movl $0xb58,-0x10(%ebp) - 816: 8b 45 f0 mov -0x10(%ebp),%eax - 819: a3 60 0b 00 00 mov %eax,0xb60 - 81e: a1 60 0b 00 00 mov 0xb60,%eax - 823: a3 58 0b 00 00 mov %eax,0xb58 - base.s.size = 0; - 828: c7 05 5c 0b 00 00 00 movl $0x0,0xb5c - 82f: 00 00 00 - } - for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 832: 8b 45 f0 mov -0x10(%ebp),%eax - 835: 8b 00 mov (%eax),%eax - 837: 89 45 f4 mov %eax,-0xc(%ebp) - if(p->s.size >= nunits){ - 83a: 8b 45 f4 mov -0xc(%ebp),%eax - 83d: 8b 40 04 mov 0x4(%eax),%eax - 840: 3b 45 ec cmp -0x14(%ebp),%eax - 843: 72 4d jb 892 - if(p->s.size == nunits) - 845: 8b 45 f4 mov -0xc(%ebp),%eax - 848: 8b 40 04 mov 0x4(%eax),%eax - 84b: 3b 45 ec cmp -0x14(%ebp),%eax - 84e: 75 0c jne 85c - prevp->s.ptr = p->s.ptr; - 850: 8b 45 f4 mov -0xc(%ebp),%eax - 853: 8b 10 mov (%eax),%edx - 855: 8b 45 f0 mov -0x10(%ebp),%eax - 858: 89 10 mov %edx,(%eax) - 85a: eb 26 jmp 882 - else { - p->s.size -= nunits; - 85c: 8b 45 f4 mov -0xc(%ebp),%eax - 85f: 8b 40 04 mov 0x4(%eax),%eax - 862: 2b 45 ec sub -0x14(%ebp),%eax - 865: 89 c2 mov %eax,%edx - 867: 8b 45 f4 mov -0xc(%ebp),%eax - 86a: 89 50 04 mov %edx,0x4(%eax) - p += p->s.size; - 86d: 8b 45 f4 mov -0xc(%ebp),%eax - 870: 8b 40 04 mov 0x4(%eax),%eax - 873: c1 e0 03 shl $0x3,%eax - 876: 01 45 f4 add %eax,-0xc(%ebp) - p->s.size = nunits; - 879: 8b 45 f4 mov -0xc(%ebp),%eax - 87c: 8b 55 ec mov -0x14(%ebp),%edx - 87f: 89 50 04 mov %edx,0x4(%eax) - } - freep = prevp; - 882: 8b 45 f0 mov -0x10(%ebp),%eax - 885: a3 60 0b 00 00 mov %eax,0xb60 - return (void*)(p + 1); - 88a: 8b 45 f4 mov -0xc(%ebp),%eax - 88d: 83 c0 08 add $0x8,%eax - 890: eb 3b jmp 8cd - } - if(p == freep) - 892: a1 60 0b 00 00 mov 0xb60,%eax - 897: 39 45 f4 cmp %eax,-0xc(%ebp) - 89a: 75 1e jne 8ba - if((p = morecore(nunits)) == 0) - 89c: 83 ec 0c sub $0xc,%esp - 89f: ff 75 ec pushl -0x14(%ebp) - 8a2: e8 e5 fe ff ff call 78c - 8a7: 83 c4 10 add $0x10,%esp - 8aa: 89 45 f4 mov %eax,-0xc(%ebp) - 8ad: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 8b1: 75 07 jne 8ba - return 0; - 8b3: b8 00 00 00 00 mov $0x0,%eax - 8b8: eb 13 jmp 8cd - nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - if((prevp = freep) == 0){ - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 8ba: 8b 45 f4 mov -0xc(%ebp),%eax - 8bd: 89 45 f0 mov %eax,-0x10(%ebp) - 8c0: 8b 45 f4 mov -0xc(%ebp),%eax - 8c3: 8b 00 mov (%eax),%eax - 8c5: 89 45 f4 mov %eax,-0xc(%ebp) - return (void*)(p + 1); - } - if(p == freep) - if((p = morecore(nunits)) == 0) - return 0; - } - 8c8: e9 6d ff ff ff jmp 83a -} - 8cd: c9 leave - 8ce: c3 ret diff --git a/xv6-public/stressfs.d b/xv6-public/stressfs.d deleted file mode 100755 index 7d5de54..0000000 --- a/xv6-public/stressfs.d +++ /dev/null @@ -1,2 +0,0 @@ -stressfs.o: stressfs.c /usr/include/stdc-predef.h types.h stat.h user.h \ - fs.h fcntl.h diff --git a/xv6-public/stressfs.o b/xv6-public/stressfs.o deleted file mode 100755 index 6d8266d2b86f559a2d1a3f1a9b5cd53afa7fa6c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4140 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 Bujv2) diff --git a/xv6-public/sysproc.c b/xv6-public/sysproc.c index 6b8dc75..d712cd3 100644 --- a/xv6-public/sysproc.c +++ b/xv6-public/sysproc.c @@ -17,19 +17,13 @@ int sys_getpcount(void) { struct proc *p; - acquire(&ptable.lock); int count = 0; for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){ // Process states: UNUSED, EMBRYO, SLEEPING, RUNNABLE, RUNNING, ZOMBIE - cprintf("Process: %s\nState: ", p->name); - if(p->state == UNUSED){cprintf("UNUSED\n");} - else if(p->state == EMBRYO){cprintf("EMBRYO\n");} - else if(p->state == SLEEPING){cprintf("SLEEPING\n");count++;} - else if(p->state == RUNNABLE){cprintf("RUNNABLE\n");count++;} - else if(p->state == RUNNING){cprintf("RUNNING\n");count++;} - else if(p->state == ZOMBIE){cprintf("ZOMBIE\n");} - else {cprintf("NONE\n");} + if(p->state == SLEEPING){count++;} + else if(p->state == RUNNABLE){count++;} + else if(p->state == RUNNING){count++;} } release(&ptable.lock); return count; diff --git a/xv6-public/sysproc.d b/xv6-public/sysproc.d deleted file mode 100755 index 2f26f0c..0000000 --- a/xv6-public/sysproc.d +++ /dev/null @@ -1,2 +0,0 @@ -sysproc.o: sysproc.c /usr/include/stdc-predef.h types.h x86.h defs.h \ - date.h param.h memlayout.h mmu.h proc.h diff --git a/xv6-public/sysproc.o b/xv6-public/sysproc.o deleted file mode 100755 index 93feea9a93a7d297935ede15f4e54daf15d3f4cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7044 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 diff --git a/xv6-public/timer.d b/xv6-public/timer.d deleted file mode 100755 index 827bdbc..0000000 --- a/xv6-public/timer.d +++ /dev/null @@ -1 +0,0 @@ -timer.o: timer.c /usr/include/stdc-predef.h types.h defs.h traps.h x86.h diff --git a/xv6-public/timer.o b/xv6-public/timer.o deleted file mode 100755 index 9ba13446b38e63e6fba2d6dc6d579594c0afd0ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2784 zcma)8U1%It7`=CPH<>h>ZIaqxiPdejG@>)9ZK$>OCvAweQ0i|$OQf0I%w{L<&MvdF zF_nT~P+JOW@u4pj6#69Mi=u`4))vj1;7ffF6fE?i2tFwoiRaw8H#pvpUQZr@c zgFyKghMjsnr<4N$+3s%84AqSFI7Z9r{)Ni#95Tmgk@iNUW$y=B$MsvO&*obCnRb$`Wyw$PRsA(F_e!Cn_@}?a_-_YqWap_O)fpLbZ0Q+K6J& z4qL%o=+73pL(QP6G1_iLqqRoatBscH&3MnA-J^>Od!1&xR147eV-pkmiz8^%!%3fn z;PI!(*Pj>itSyK0+3Y#&8uyzQg=a<_DcEmWNBeT8ZXzP_akuFsuK5=ezi?Y;>akY> z#!-S*!y>=t#{Oa~T(xGm)M^Qr##z7Ao;w|cl?Ggjd!WuS!bTJy4_fj-JGt{%mb z;T9A=w|IYa5-rA8gPyMUE$W&5=!MVJI}6Sn_J^{9dXuIIbW&dLXf$z0P+$-? zBPQ;B7*grt1x}O_p0%m04{S@K*gsh@EM5~ zGjDoMx~?F(A4a|xHsa#Etjjsm^}c{%J8VWwJ);{;+q2@gRbwZv|Mx;YJp=XZ+Px;< zv2->1c~U!)5&W;wk&N2mw4Ux9^SSdK$%wv=0+vx7=$JC96KTC53Q)~Ea1c9qZ^xZP zn{S@_M0H-^oo|;A&mqS`lle}OxP?3sOXD6AH*4HN!~x-Vow$vN{U6bO{^4Q#evOAU zp3um7=;yg&{+tSa~j_xBK`x7mxze}SnHo?{9NPL8owc;p1Lm#JV&f^ NTw@W4kGmMx_&3S4R7C&) diff --git a/xv6-public/trap.d b/xv6-public/trap.d deleted file mode 100755 index c48ab89..0000000 --- a/xv6-public/trap.d +++ /dev/null @@ -1,2 +0,0 @@ -trap.o: trap.c /usr/include/stdc-predef.h types.h defs.h param.h \ - memlayout.h mmu.h proc.h x86.h traps.h spinlock.h diff --git a/xv6-public/trap.o b/xv6-public/trap.o deleted file mode 100755 index 08a66927fb329e9efba41bb03d81be8f73210d2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10528 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 diff --git a/xv6-public/uart.d b/xv6-public/uart.d deleted file mode 100755 index 7439797..0000000 --- a/xv6-public/uart.d +++ /dev/null @@ -1,2 +0,0 @@ -uart.o: uart.c /usr/include/stdc-predef.h types.h defs.h param.h traps.h \ - spinlock.h fs.h file.h mmu.h proc.h x86.h diff --git a/xv6-public/uart.o b/xv6-public/uart.o deleted file mode 100755 index e864881f450d9caeff8a9be71093ed5023474682..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5004 zcma)9ZEPIH8J^i)+Z+4hvtwdHL(8QKBB;4FIIf$9e3kS7E;TYWcZ;6@7xzw0*;hJJPCgW!yVCMr+b-^06z24}SvUIO*s9&GK}lPtQ#LDRXQl z{0&M@X3pIi=Xx?WP-B<@T7Hh4=P!D3h+WFUQ6VIT*V>NQe_dT`){SF7i^`a+X5T{E z2M_dnp4Tc)T0-E5=Ew>3@=jPD#KZPCjh55W1=ijS-nKpm(z04;V6Ugd9-u_JUk5nO zR~6IzFu`g04h$@-sSIdxnu_I6G#AT5LOOCY4A?#ygOEQ4(efZV>8wR>O$#?eu9=o{ zr&z*)Ww)fmU3k`${QzC;)UBObGL(1I$(nXVtGty|m!yk_G}J5~2hlbmtmQi)eHl;c z%jlRvYM&v>hIq^nPZ{F7hWL>o&VZ=mNxf?bW~L;UK=h)gXgt$QU6x!7Cr$W;t}0aOiyaKA>A4u)*PsS_eCH==j;OUbz?1!UVP z+ax73Q!=B-A&|36N(M8sJ(Mk%@=40rVcR?n=v0{t*(q;r?`pH#SGIS`WwN6g39J@v zZJQy&cIy^)`-Zl=+6J&EoiyYmnzVr{M6)Mtmj<_`2D%tvYxDDWrzDJ8n(D4rE2h@B zfL#JV75KK)0L_76VipNlB65k`v`N1f@M~jz2vgN))1&Q(e7(TOB~B|ka*5oo$ynRLpH#Bx zl8Hr|Z)rQ?w`1BRzN_fSC2}_>W0C*8mJ#2JX_q*s=*T7V1SI|9+H&-IN$amfN`HvQ zQq`04haI}|(TVkvriq}hGe9qrvT z9l4{?<=)ZDmW9M>g-SKdMCDp>v>Xg)_#R%s4Ev$4QZ1H?P$6fSR7E8Uhr~oNAC&!} zQXq;Izrjo(qOxp6$`|~qP~AQE4`#My`n=D3y_xLzI(A`H4mOPj<)B*3gY~QV!X{KH z+uxVTj^a1`4Zk{)h2>Z7$Ye*#l`MveiJ_=iLOwB53*jGT{Zi4d70YlOIp9~bVb#w+ z{NHTWuW`oXK{>3&?v?Rkm>sG5<3Vb2VdUoL^M7}7kZxY%XsQ~>+i~du^+|5b3431zrU`35ptfzZAty%M*Pq;9Dkmc_GhtJsUsH$!6kx z2142!yVbC3ytNwi9k8K~2}3*jnP%c`guu|$t%col#wnrWB`i6Qn>&SA13S)xH8Ato zk?;X2W}xUu3}8s!9t};qcW|#a*HQ9Dhci>BDc^znXoiGt#?A+y%n$cYR8-I7m^K;EhE z@%WA;)moW%BtDR8&Wy$SNY#^zn=P8~AGz_)qkXd3_0w+bxg#3QUQlV~!=2Y?w#p{S zqj-sCs~y`A*!65?nIQ4rM>CFd{ zf9BLJfgiudXEDA(;40C$FD$q`)IXJrzNzXvn*64|iE$+s<*z^soAVi8uZxs>C!Fp1k z)yR7@dDfA5pT<2J_iG&0_&5>qj%xfS5ig9BTK_$b>ii#$5C|ANwfwMO3O$@gpAqH%}DT^b+KnAgZZq4bM19w8$C zCpCXU<1<9$@l%bjYWZs#&uaWN5&nPB{QDX|Aj1Em=C5d+C&IoNIWUh_jqOC(uh9Ib uiLmpC*cW}8-=Wdh7-{6UOX8UFoyE93AH)n0H)^p}<9>}tG@jBpqwzme?fdWm diff --git a/xv6-public/ulib.d b/xv6-public/ulib.d deleted file mode 100755 index 61f575e..0000000 --- a/xv6-public/ulib.d +++ /dev/null @@ -1,2 +0,0 @@ -ulib.o: ulib.c /usr/include/stdc-predef.h types.h stat.h fcntl.h user.h \ - x86.h diff --git a/xv6-public/ulib.o b/xv6-public/ulib.o deleted file mode 100755 index 9d857b6f5603bdab716f22f6faede0d8acb434c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6764 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 Bwsimi diff --git a/xv6-public/usertests.asm b/xv6-public/usertests.asm deleted file mode 100755 index caef53f..0000000 --- a/xv6-public/usertests.asm +++ /dev/null @@ -1,7891 +0,0 @@ - -_usertests: file format elf32-i386 - - -Disassembly of section .text: - -00000000 : -int stdout = 1; - -// does chdir() call iput(p->cwd) in a transaction? -void -iputtest(void) -{ - 0: 55 push %ebp - 1: 89 e5 mov %esp,%ebp - 3: 83 ec 08 sub $0x8,%esp - printf(stdout, "iput test\n"); - 6: a1 a0 62 00 00 mov 0x62a0,%eax - b: 83 ec 08 sub $0x8,%esp - e: 68 fa 43 00 00 push $0x43fa - 13: 50 push %eax - 14: e8 15 40 00 00 call 402e - 19: 83 c4 10 add $0x10,%esp - - if(mkdir("iputdir") < 0){ - 1c: 83 ec 0c sub $0xc,%esp - 1f: 68 05 44 00 00 push $0x4405 - 24: e8 f8 3e 00 00 call 3f21 - 29: 83 c4 10 add $0x10,%esp - 2c: 85 c0 test %eax,%eax - 2e: 79 1b jns 4b - printf(stdout, "mkdir failed\n"); - 30: a1 a0 62 00 00 mov 0x62a0,%eax - 35: 83 ec 08 sub $0x8,%esp - 38: 68 0d 44 00 00 push $0x440d - 3d: 50 push %eax - 3e: e8 eb 3f 00 00 call 402e - 43: 83 c4 10 add $0x10,%esp - exit(); - 46: e8 6e 3e 00 00 call 3eb9 - } - if(chdir("iputdir") < 0){ - 4b: 83 ec 0c sub $0xc,%esp - 4e: 68 05 44 00 00 push $0x4405 - 53: e8 d1 3e 00 00 call 3f29 - 58: 83 c4 10 add $0x10,%esp - 5b: 85 c0 test %eax,%eax - 5d: 79 1b jns 7a - printf(stdout, "chdir iputdir failed\n"); - 5f: a1 a0 62 00 00 mov 0x62a0,%eax - 64: 83 ec 08 sub $0x8,%esp - 67: 68 1b 44 00 00 push $0x441b - 6c: 50 push %eax - 6d: e8 bc 3f 00 00 call 402e - 72: 83 c4 10 add $0x10,%esp - exit(); - 75: e8 3f 3e 00 00 call 3eb9 - } - if(unlink("../iputdir") < 0){ - 7a: 83 ec 0c sub $0xc,%esp - 7d: 68 31 44 00 00 push $0x4431 - 82: e8 82 3e 00 00 call 3f09 - 87: 83 c4 10 add $0x10,%esp - 8a: 85 c0 test %eax,%eax - 8c: 79 1b jns a9 - printf(stdout, "unlink ../iputdir failed\n"); - 8e: a1 a0 62 00 00 mov 0x62a0,%eax - 93: 83 ec 08 sub $0x8,%esp - 96: 68 3c 44 00 00 push $0x443c - 9b: 50 push %eax - 9c: e8 8d 3f 00 00 call 402e - a1: 83 c4 10 add $0x10,%esp - exit(); - a4: e8 10 3e 00 00 call 3eb9 - } - if(chdir("/") < 0){ - a9: 83 ec 0c sub $0xc,%esp - ac: 68 56 44 00 00 push $0x4456 - b1: e8 73 3e 00 00 call 3f29 - b6: 83 c4 10 add $0x10,%esp - b9: 85 c0 test %eax,%eax - bb: 79 1b jns d8 - printf(stdout, "chdir / failed\n"); - bd: a1 a0 62 00 00 mov 0x62a0,%eax - c2: 83 ec 08 sub $0x8,%esp - c5: 68 58 44 00 00 push $0x4458 - ca: 50 push %eax - cb: e8 5e 3f 00 00 call 402e - d0: 83 c4 10 add $0x10,%esp - exit(); - d3: e8 e1 3d 00 00 call 3eb9 - } - printf(stdout, "iput test ok\n"); - d8: a1 a0 62 00 00 mov 0x62a0,%eax - dd: 83 ec 08 sub $0x8,%esp - e0: 68 68 44 00 00 push $0x4468 - e5: 50 push %eax - e6: e8 43 3f 00 00 call 402e - eb: 83 c4 10 add $0x10,%esp -} - ee: c9 leave - ef: c3 ret - -000000f0 : - -// does exit() call iput(p->cwd) in a transaction? -void -exitiputtest(void) -{ - f0: 55 push %ebp - f1: 89 e5 mov %esp,%ebp - f3: 83 ec 18 sub $0x18,%esp - int pid; - - printf(stdout, "exitiput test\n"); - f6: a1 a0 62 00 00 mov 0x62a0,%eax - fb: 83 ec 08 sub $0x8,%esp - fe: 68 76 44 00 00 push $0x4476 - 103: 50 push %eax - 104: e8 25 3f 00 00 call 402e - 109: 83 c4 10 add $0x10,%esp - - pid = fork(); - 10c: e8 a0 3d 00 00 call 3eb1 - 111: 89 45 f4 mov %eax,-0xc(%ebp) - if(pid < 0){ - 114: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 118: 79 1b jns 135 - printf(stdout, "fork failed\n"); - 11a: a1 a0 62 00 00 mov 0x62a0,%eax - 11f: 83 ec 08 sub $0x8,%esp - 122: 68 85 44 00 00 push $0x4485 - 127: 50 push %eax - 128: e8 01 3f 00 00 call 402e - 12d: 83 c4 10 add $0x10,%esp - exit(); - 130: e8 84 3d 00 00 call 3eb9 - } - if(pid == 0){ - 135: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 139: 0f 85 92 00 00 00 jne 1d1 - if(mkdir("iputdir") < 0){ - 13f: 83 ec 0c sub $0xc,%esp - 142: 68 05 44 00 00 push $0x4405 - 147: e8 d5 3d 00 00 call 3f21 - 14c: 83 c4 10 add $0x10,%esp - 14f: 85 c0 test %eax,%eax - 151: 79 1b jns 16e - printf(stdout, "mkdir failed\n"); - 153: a1 a0 62 00 00 mov 0x62a0,%eax - 158: 83 ec 08 sub $0x8,%esp - 15b: 68 0d 44 00 00 push $0x440d - 160: 50 push %eax - 161: e8 c8 3e 00 00 call 402e - 166: 83 c4 10 add $0x10,%esp - exit(); - 169: e8 4b 3d 00 00 call 3eb9 - } - if(chdir("iputdir") < 0){ - 16e: 83 ec 0c sub $0xc,%esp - 171: 68 05 44 00 00 push $0x4405 - 176: e8 ae 3d 00 00 call 3f29 - 17b: 83 c4 10 add $0x10,%esp - 17e: 85 c0 test %eax,%eax - 180: 79 1b jns 19d - printf(stdout, "child chdir failed\n"); - 182: a1 a0 62 00 00 mov 0x62a0,%eax - 187: 83 ec 08 sub $0x8,%esp - 18a: 68 92 44 00 00 push $0x4492 - 18f: 50 push %eax - 190: e8 99 3e 00 00 call 402e - 195: 83 c4 10 add $0x10,%esp - exit(); - 198: e8 1c 3d 00 00 call 3eb9 - } - if(unlink("../iputdir") < 0){ - 19d: 83 ec 0c sub $0xc,%esp - 1a0: 68 31 44 00 00 push $0x4431 - 1a5: e8 5f 3d 00 00 call 3f09 - 1aa: 83 c4 10 add $0x10,%esp - 1ad: 85 c0 test %eax,%eax - 1af: 79 1b jns 1cc - printf(stdout, "unlink ../iputdir failed\n"); - 1b1: a1 a0 62 00 00 mov 0x62a0,%eax - 1b6: 83 ec 08 sub $0x8,%esp - 1b9: 68 3c 44 00 00 push $0x443c - 1be: 50 push %eax - 1bf: e8 6a 3e 00 00 call 402e - 1c4: 83 c4 10 add $0x10,%esp - exit(); - 1c7: e8 ed 3c 00 00 call 3eb9 - } - exit(); - 1cc: e8 e8 3c 00 00 call 3eb9 - } - wait(); - 1d1: e8 eb 3c 00 00 call 3ec1 - printf(stdout, "exitiput test ok\n"); - 1d6: a1 a0 62 00 00 mov 0x62a0,%eax - 1db: 83 ec 08 sub $0x8,%esp - 1de: 68 a6 44 00 00 push $0x44a6 - 1e3: 50 push %eax - 1e4: e8 45 3e 00 00 call 402e - 1e9: 83 c4 10 add $0x10,%esp -} - 1ec: c9 leave - 1ed: c3 ret - -000001ee : -// for(i = 0; i < 10000; i++) -// yield(); -// } -void -openiputtest(void) -{ - 1ee: 55 push %ebp - 1ef: 89 e5 mov %esp,%ebp - 1f1: 83 ec 18 sub $0x18,%esp - int pid; - - printf(stdout, "openiput test\n"); - 1f4: a1 a0 62 00 00 mov 0x62a0,%eax - 1f9: 83 ec 08 sub $0x8,%esp - 1fc: 68 b8 44 00 00 push $0x44b8 - 201: 50 push %eax - 202: e8 27 3e 00 00 call 402e - 207: 83 c4 10 add $0x10,%esp - if(mkdir("oidir") < 0){ - 20a: 83 ec 0c sub $0xc,%esp - 20d: 68 c7 44 00 00 push $0x44c7 - 212: e8 0a 3d 00 00 call 3f21 - 217: 83 c4 10 add $0x10,%esp - 21a: 85 c0 test %eax,%eax - 21c: 79 1b jns 239 - printf(stdout, "mkdir oidir failed\n"); - 21e: a1 a0 62 00 00 mov 0x62a0,%eax - 223: 83 ec 08 sub $0x8,%esp - 226: 68 cd 44 00 00 push $0x44cd - 22b: 50 push %eax - 22c: e8 fd 3d 00 00 call 402e - 231: 83 c4 10 add $0x10,%esp - exit(); - 234: e8 80 3c 00 00 call 3eb9 - } - pid = fork(); - 239: e8 73 3c 00 00 call 3eb1 - 23e: 89 45 f4 mov %eax,-0xc(%ebp) - if(pid < 0){ - 241: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 245: 79 1b jns 262 - printf(stdout, "fork failed\n"); - 247: a1 a0 62 00 00 mov 0x62a0,%eax - 24c: 83 ec 08 sub $0x8,%esp - 24f: 68 85 44 00 00 push $0x4485 - 254: 50 push %eax - 255: e8 d4 3d 00 00 call 402e - 25a: 83 c4 10 add $0x10,%esp - exit(); - 25d: e8 57 3c 00 00 call 3eb9 - } - if(pid == 0){ - 262: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 266: 75 3b jne 2a3 - int fd = open("oidir", O_RDWR); - 268: 83 ec 08 sub $0x8,%esp - 26b: 6a 02 push $0x2 - 26d: 68 c7 44 00 00 push $0x44c7 - 272: e8 82 3c 00 00 call 3ef9 - 277: 83 c4 10 add $0x10,%esp - 27a: 89 45 f0 mov %eax,-0x10(%ebp) - if(fd >= 0){ - 27d: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 281: 78 1b js 29e - printf(stdout, "open directory for write succeeded\n"); - 283: a1 a0 62 00 00 mov 0x62a0,%eax - 288: 83 ec 08 sub $0x8,%esp - 28b: 68 e4 44 00 00 push $0x44e4 - 290: 50 push %eax - 291: e8 98 3d 00 00 call 402e - 296: 83 c4 10 add $0x10,%esp - exit(); - 299: e8 1b 3c 00 00 call 3eb9 - } - exit(); - 29e: e8 16 3c 00 00 call 3eb9 - } - sleep(1); - 2a3: 83 ec 0c sub $0xc,%esp - 2a6: 6a 01 push $0x1 - 2a8: e8 9c 3c 00 00 call 3f49 - 2ad: 83 c4 10 add $0x10,%esp - if(unlink("oidir") != 0){ - 2b0: 83 ec 0c sub $0xc,%esp - 2b3: 68 c7 44 00 00 push $0x44c7 - 2b8: e8 4c 3c 00 00 call 3f09 - 2bd: 83 c4 10 add $0x10,%esp - 2c0: 85 c0 test %eax,%eax - 2c2: 74 1b je 2df - printf(stdout, "unlink failed\n"); - 2c4: a1 a0 62 00 00 mov 0x62a0,%eax - 2c9: 83 ec 08 sub $0x8,%esp - 2cc: 68 08 45 00 00 push $0x4508 - 2d1: 50 push %eax - 2d2: e8 57 3d 00 00 call 402e - 2d7: 83 c4 10 add $0x10,%esp - exit(); - 2da: e8 da 3b 00 00 call 3eb9 - } - wait(); - 2df: e8 dd 3b 00 00 call 3ec1 - printf(stdout, "openiput test ok\n"); - 2e4: a1 a0 62 00 00 mov 0x62a0,%eax - 2e9: 83 ec 08 sub $0x8,%esp - 2ec: 68 17 45 00 00 push $0x4517 - 2f1: 50 push %eax - 2f2: e8 37 3d 00 00 call 402e - 2f7: 83 c4 10 add $0x10,%esp -} - 2fa: c9 leave - 2fb: c3 ret - -000002fc : - -// simple file system tests - -void -opentest(void) -{ - 2fc: 55 push %ebp - 2fd: 89 e5 mov %esp,%ebp - 2ff: 83 ec 18 sub $0x18,%esp - int fd; - - printf(stdout, "open test\n"); - 302: a1 a0 62 00 00 mov 0x62a0,%eax - 307: 83 ec 08 sub $0x8,%esp - 30a: 68 29 45 00 00 push $0x4529 - 30f: 50 push %eax - 310: e8 19 3d 00 00 call 402e - 315: 83 c4 10 add $0x10,%esp - fd = open("echo", 0); - 318: 83 ec 08 sub $0x8,%esp - 31b: 6a 00 push $0x0 - 31d: 68 e4 43 00 00 push $0x43e4 - 322: e8 d2 3b 00 00 call 3ef9 - 327: 83 c4 10 add $0x10,%esp - 32a: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd < 0){ - 32d: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 331: 79 1b jns 34e - printf(stdout, "open echo failed!\n"); - 333: a1 a0 62 00 00 mov 0x62a0,%eax - 338: 83 ec 08 sub $0x8,%esp - 33b: 68 34 45 00 00 push $0x4534 - 340: 50 push %eax - 341: e8 e8 3c 00 00 call 402e - 346: 83 c4 10 add $0x10,%esp - exit(); - 349: e8 6b 3b 00 00 call 3eb9 - } - close(fd); - 34e: 83 ec 0c sub $0xc,%esp - 351: ff 75 f4 pushl -0xc(%ebp) - 354: e8 88 3b 00 00 call 3ee1 - 359: 83 c4 10 add $0x10,%esp - fd = open("doesnotexist", 0); - 35c: 83 ec 08 sub $0x8,%esp - 35f: 6a 00 push $0x0 - 361: 68 47 45 00 00 push $0x4547 - 366: e8 8e 3b 00 00 call 3ef9 - 36b: 83 c4 10 add $0x10,%esp - 36e: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd >= 0){ - 371: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 375: 78 1b js 392 - printf(stdout, "open doesnotexist succeeded!\n"); - 377: a1 a0 62 00 00 mov 0x62a0,%eax - 37c: 83 ec 08 sub $0x8,%esp - 37f: 68 54 45 00 00 push $0x4554 - 384: 50 push %eax - 385: e8 a4 3c 00 00 call 402e - 38a: 83 c4 10 add $0x10,%esp - exit(); - 38d: e8 27 3b 00 00 call 3eb9 - } - printf(stdout, "open test ok\n"); - 392: a1 a0 62 00 00 mov 0x62a0,%eax - 397: 83 ec 08 sub $0x8,%esp - 39a: 68 72 45 00 00 push $0x4572 - 39f: 50 push %eax - 3a0: e8 89 3c 00 00 call 402e - 3a5: 83 c4 10 add $0x10,%esp -} - 3a8: c9 leave - 3a9: c3 ret - -000003aa : - -void -writetest(void) -{ - 3aa: 55 push %ebp - 3ab: 89 e5 mov %esp,%ebp - 3ad: 83 ec 18 sub $0x18,%esp - int fd; - int i; - - printf(stdout, "small file test\n"); - 3b0: a1 a0 62 00 00 mov 0x62a0,%eax - 3b5: 83 ec 08 sub $0x8,%esp - 3b8: 68 80 45 00 00 push $0x4580 - 3bd: 50 push %eax - 3be: e8 6b 3c 00 00 call 402e - 3c3: 83 c4 10 add $0x10,%esp - fd = open("small", O_CREATE|O_RDWR); - 3c6: 83 ec 08 sub $0x8,%esp - 3c9: 68 02 02 00 00 push $0x202 - 3ce: 68 91 45 00 00 push $0x4591 - 3d3: e8 21 3b 00 00 call 3ef9 - 3d8: 83 c4 10 add $0x10,%esp - 3db: 89 45 f0 mov %eax,-0x10(%ebp) - if(fd >= 0){ - 3de: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 3e2: 78 22 js 406 - printf(stdout, "creat small succeeded; ok\n"); - 3e4: a1 a0 62 00 00 mov 0x62a0,%eax - 3e9: 83 ec 08 sub $0x8,%esp - 3ec: 68 97 45 00 00 push $0x4597 - 3f1: 50 push %eax - 3f2: e8 37 3c 00 00 call 402e - 3f7: 83 c4 10 add $0x10,%esp - } else { - printf(stdout, "error: creat small failed!\n"); - exit(); - } - for(i = 0; i < 100; i++){ - 3fa: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 401: e9 8f 00 00 00 jmp 495 - printf(stdout, "small file test\n"); - fd = open("small", O_CREATE|O_RDWR); - if(fd >= 0){ - printf(stdout, "creat small succeeded; ok\n"); - } else { - printf(stdout, "error: creat small failed!\n"); - 406: a1 a0 62 00 00 mov 0x62a0,%eax - 40b: 83 ec 08 sub $0x8,%esp - 40e: 68 b2 45 00 00 push $0x45b2 - 413: 50 push %eax - 414: e8 15 3c 00 00 call 402e - 419: 83 c4 10 add $0x10,%esp - exit(); - 41c: e8 98 3a 00 00 call 3eb9 - } - for(i = 0; i < 100; i++){ - if(write(fd, "aaaaaaaaaa", 10) != 10){ - 421: 83 ec 04 sub $0x4,%esp - 424: 6a 0a push $0xa - 426: 68 ce 45 00 00 push $0x45ce - 42b: ff 75 f0 pushl -0x10(%ebp) - 42e: e8 a6 3a 00 00 call 3ed9 - 433: 83 c4 10 add $0x10,%esp - 436: 83 f8 0a cmp $0xa,%eax - 439: 74 1e je 459 - printf(stdout, "error: write aa %d new file failed\n", i); - 43b: a1 a0 62 00 00 mov 0x62a0,%eax - 440: 83 ec 04 sub $0x4,%esp - 443: ff 75 f4 pushl -0xc(%ebp) - 446: 68 dc 45 00 00 push $0x45dc - 44b: 50 push %eax - 44c: e8 dd 3b 00 00 call 402e - 451: 83 c4 10 add $0x10,%esp - exit(); - 454: e8 60 3a 00 00 call 3eb9 - } - if(write(fd, "bbbbbbbbbb", 10) != 10){ - 459: 83 ec 04 sub $0x4,%esp - 45c: 6a 0a push $0xa - 45e: 68 00 46 00 00 push $0x4600 - 463: ff 75 f0 pushl -0x10(%ebp) - 466: e8 6e 3a 00 00 call 3ed9 - 46b: 83 c4 10 add $0x10,%esp - 46e: 83 f8 0a cmp $0xa,%eax - 471: 74 1e je 491 - printf(stdout, "error: write bb %d new file failed\n", i); - 473: a1 a0 62 00 00 mov 0x62a0,%eax - 478: 83 ec 04 sub $0x4,%esp - 47b: ff 75 f4 pushl -0xc(%ebp) - 47e: 68 0c 46 00 00 push $0x460c - 483: 50 push %eax - 484: e8 a5 3b 00 00 call 402e - 489: 83 c4 10 add $0x10,%esp - exit(); - 48c: e8 28 3a 00 00 call 3eb9 - printf(stdout, "creat small succeeded; ok\n"); - } else { - printf(stdout, "error: creat small failed!\n"); - exit(); - } - for(i = 0; i < 100; i++){ - 491: 83 45 f4 01 addl $0x1,-0xc(%ebp) - 495: 83 7d f4 63 cmpl $0x63,-0xc(%ebp) - 499: 7e 86 jle 421 - if(write(fd, "bbbbbbbbbb", 10) != 10){ - printf(stdout, "error: write bb %d new file failed\n", i); - exit(); - } - } - printf(stdout, "writes ok\n"); - 49b: a1 a0 62 00 00 mov 0x62a0,%eax - 4a0: 83 ec 08 sub $0x8,%esp - 4a3: 68 30 46 00 00 push $0x4630 - 4a8: 50 push %eax - 4a9: e8 80 3b 00 00 call 402e - 4ae: 83 c4 10 add $0x10,%esp - close(fd); - 4b1: 83 ec 0c sub $0xc,%esp - 4b4: ff 75 f0 pushl -0x10(%ebp) - 4b7: e8 25 3a 00 00 call 3ee1 - 4bc: 83 c4 10 add $0x10,%esp - fd = open("small", O_RDONLY); - 4bf: 83 ec 08 sub $0x8,%esp - 4c2: 6a 00 push $0x0 - 4c4: 68 91 45 00 00 push $0x4591 - 4c9: e8 2b 3a 00 00 call 3ef9 - 4ce: 83 c4 10 add $0x10,%esp - 4d1: 89 45 f0 mov %eax,-0x10(%ebp) - if(fd >= 0){ - 4d4: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 4d8: 78 3c js 516 - printf(stdout, "open small succeeded ok\n"); - 4da: a1 a0 62 00 00 mov 0x62a0,%eax - 4df: 83 ec 08 sub $0x8,%esp - 4e2: 68 3b 46 00 00 push $0x463b - 4e7: 50 push %eax - 4e8: e8 41 3b 00 00 call 402e - 4ed: 83 c4 10 add $0x10,%esp - } else { - printf(stdout, "error: open small failed!\n"); - exit(); - } - i = read(fd, buf, 2000); - 4f0: 83 ec 04 sub $0x4,%esp - 4f3: 68 d0 07 00 00 push $0x7d0 - 4f8: 68 c0 8a 00 00 push $0x8ac0 - 4fd: ff 75 f0 pushl -0x10(%ebp) - 500: e8 cc 39 00 00 call 3ed1 - 505: 83 c4 10 add $0x10,%esp - 508: 89 45 f4 mov %eax,-0xc(%ebp) - if(i == 2000){ - 50b: 81 7d f4 d0 07 00 00 cmpl $0x7d0,-0xc(%ebp) - 512: 75 57 jne 56b - 514: eb 1b jmp 531 - close(fd); - fd = open("small", O_RDONLY); - if(fd >= 0){ - printf(stdout, "open small succeeded ok\n"); - } else { - printf(stdout, "error: open small failed!\n"); - 516: a1 a0 62 00 00 mov 0x62a0,%eax - 51b: 83 ec 08 sub $0x8,%esp - 51e: 68 54 46 00 00 push $0x4654 - 523: 50 push %eax - 524: e8 05 3b 00 00 call 402e - 529: 83 c4 10 add $0x10,%esp - exit(); - 52c: e8 88 39 00 00 call 3eb9 - } - i = read(fd, buf, 2000); - if(i == 2000){ - printf(stdout, "read succeeded ok\n"); - 531: a1 a0 62 00 00 mov 0x62a0,%eax - 536: 83 ec 08 sub $0x8,%esp - 539: 68 6f 46 00 00 push $0x466f - 53e: 50 push %eax - 53f: e8 ea 3a 00 00 call 402e - 544: 83 c4 10 add $0x10,%esp - } else { - printf(stdout, "read failed\n"); - exit(); - } - close(fd); - 547: 83 ec 0c sub $0xc,%esp - 54a: ff 75 f0 pushl -0x10(%ebp) - 54d: e8 8f 39 00 00 call 3ee1 - 552: 83 c4 10 add $0x10,%esp - - if(unlink("small") < 0){ - 555: 83 ec 0c sub $0xc,%esp - 558: 68 91 45 00 00 push $0x4591 - 55d: e8 a7 39 00 00 call 3f09 - 562: 83 c4 10 add $0x10,%esp - 565: 85 c0 test %eax,%eax - 567: 79 38 jns 5a1 - 569: eb 1b jmp 586 - } - i = read(fd, buf, 2000); - if(i == 2000){ - printf(stdout, "read succeeded ok\n"); - } else { - printf(stdout, "read failed\n"); - 56b: a1 a0 62 00 00 mov 0x62a0,%eax - 570: 83 ec 08 sub $0x8,%esp - 573: 68 82 46 00 00 push $0x4682 - 578: 50 push %eax - 579: e8 b0 3a 00 00 call 402e - 57e: 83 c4 10 add $0x10,%esp - exit(); - 581: e8 33 39 00 00 call 3eb9 - } - close(fd); - - if(unlink("small") < 0){ - printf(stdout, "unlink small failed\n"); - 586: a1 a0 62 00 00 mov 0x62a0,%eax - 58b: 83 ec 08 sub $0x8,%esp - 58e: 68 8f 46 00 00 push $0x468f - 593: 50 push %eax - 594: e8 95 3a 00 00 call 402e - 599: 83 c4 10 add $0x10,%esp - exit(); - 59c: e8 18 39 00 00 call 3eb9 - } - printf(stdout, "small file test ok\n"); - 5a1: a1 a0 62 00 00 mov 0x62a0,%eax - 5a6: 83 ec 08 sub $0x8,%esp - 5a9: 68 a4 46 00 00 push $0x46a4 - 5ae: 50 push %eax - 5af: e8 7a 3a 00 00 call 402e - 5b4: 83 c4 10 add $0x10,%esp -} - 5b7: c9 leave - 5b8: c3 ret - -000005b9 : - -void -writetest1(void) -{ - 5b9: 55 push %ebp - 5ba: 89 e5 mov %esp,%ebp - 5bc: 83 ec 18 sub $0x18,%esp - int i, fd, n; - - printf(stdout, "big files test\n"); - 5bf: a1 a0 62 00 00 mov 0x62a0,%eax - 5c4: 83 ec 08 sub $0x8,%esp - 5c7: 68 b8 46 00 00 push $0x46b8 - 5cc: 50 push %eax - 5cd: e8 5c 3a 00 00 call 402e - 5d2: 83 c4 10 add $0x10,%esp - - fd = open("big", O_CREATE|O_RDWR); - 5d5: 83 ec 08 sub $0x8,%esp - 5d8: 68 02 02 00 00 push $0x202 - 5dd: 68 c8 46 00 00 push $0x46c8 - 5e2: e8 12 39 00 00 call 3ef9 - 5e7: 83 c4 10 add $0x10,%esp - 5ea: 89 45 ec mov %eax,-0x14(%ebp) - if(fd < 0){ - 5ed: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 5f1: 79 1b jns 60e - printf(stdout, "error: creat big failed!\n"); - 5f3: a1 a0 62 00 00 mov 0x62a0,%eax - 5f8: 83 ec 08 sub $0x8,%esp - 5fb: 68 cc 46 00 00 push $0x46cc - 600: 50 push %eax - 601: e8 28 3a 00 00 call 402e - 606: 83 c4 10 add $0x10,%esp - exit(); - 609: e8 ab 38 00 00 call 3eb9 - } - - for(i = 0; i < MAXFILE; i++){ - 60e: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 615: eb 4b jmp 662 - ((int*)buf)[0] = i; - 617: ba c0 8a 00 00 mov $0x8ac0,%edx - 61c: 8b 45 f4 mov -0xc(%ebp),%eax - 61f: 89 02 mov %eax,(%edx) - if(write(fd, buf, 512) != 512){ - 621: 83 ec 04 sub $0x4,%esp - 624: 68 00 02 00 00 push $0x200 - 629: 68 c0 8a 00 00 push $0x8ac0 - 62e: ff 75 ec pushl -0x14(%ebp) - 631: e8 a3 38 00 00 call 3ed9 - 636: 83 c4 10 add $0x10,%esp - 639: 3d 00 02 00 00 cmp $0x200,%eax - 63e: 74 1e je 65e - printf(stdout, "error: write big file failed\n", i); - 640: a1 a0 62 00 00 mov 0x62a0,%eax - 645: 83 ec 04 sub $0x4,%esp - 648: ff 75 f4 pushl -0xc(%ebp) - 64b: 68 e6 46 00 00 push $0x46e6 - 650: 50 push %eax - 651: e8 d8 39 00 00 call 402e - 656: 83 c4 10 add $0x10,%esp - exit(); - 659: e8 5b 38 00 00 call 3eb9 - if(fd < 0){ - printf(stdout, "error: creat big failed!\n"); - exit(); - } - - for(i = 0; i < MAXFILE; i++){ - 65e: 83 45 f4 01 addl $0x1,-0xc(%ebp) - 662: 8b 45 f4 mov -0xc(%ebp),%eax - 665: 3d 8b 00 00 00 cmp $0x8b,%eax - 66a: 76 ab jbe 617 - printf(stdout, "error: write big file failed\n", i); - exit(); - } - } - - close(fd); - 66c: 83 ec 0c sub $0xc,%esp - 66f: ff 75 ec pushl -0x14(%ebp) - 672: e8 6a 38 00 00 call 3ee1 - 677: 83 c4 10 add $0x10,%esp - - fd = open("big", O_RDONLY); - 67a: 83 ec 08 sub $0x8,%esp - 67d: 6a 00 push $0x0 - 67f: 68 c8 46 00 00 push $0x46c8 - 684: e8 70 38 00 00 call 3ef9 - 689: 83 c4 10 add $0x10,%esp - 68c: 89 45 ec mov %eax,-0x14(%ebp) - if(fd < 0){ - 68f: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 693: 79 1b jns 6b0 - printf(stdout, "error: open big failed!\n"); - 695: a1 a0 62 00 00 mov 0x62a0,%eax - 69a: 83 ec 08 sub $0x8,%esp - 69d: 68 04 47 00 00 push $0x4704 - 6a2: 50 push %eax - 6a3: e8 86 39 00 00 call 402e - 6a8: 83 c4 10 add $0x10,%esp - exit(); - 6ab: e8 09 38 00 00 call 3eb9 - } - - n = 0; - 6b0: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - for(;;){ - i = read(fd, buf, 512); - 6b7: 83 ec 04 sub $0x4,%esp - 6ba: 68 00 02 00 00 push $0x200 - 6bf: 68 c0 8a 00 00 push $0x8ac0 - 6c4: ff 75 ec pushl -0x14(%ebp) - 6c7: e8 05 38 00 00 call 3ed1 - 6cc: 83 c4 10 add $0x10,%esp - 6cf: 89 45 f4 mov %eax,-0xc(%ebp) - if(i == 0){ - 6d2: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 6d6: 75 4c jne 724 - if(n == MAXFILE - 1){ - 6d8: 81 7d f0 8b 00 00 00 cmpl $0x8b,-0x10(%ebp) - 6df: 75 1e jne 6ff - printf(stdout, "read only %d blocks from big", n); - 6e1: a1 a0 62 00 00 mov 0x62a0,%eax - 6e6: 83 ec 04 sub $0x4,%esp - 6e9: ff 75 f0 pushl -0x10(%ebp) - 6ec: 68 1d 47 00 00 push $0x471d - 6f1: 50 push %eax - 6f2: e8 37 39 00 00 call 402e - 6f7: 83 c4 10 add $0x10,%esp - exit(); - 6fa: e8 ba 37 00 00 call 3eb9 - } - break; - 6ff: 90 nop - n, ((int*)buf)[0]); - exit(); - } - n++; - } - close(fd); - 700: 83 ec 0c sub $0xc,%esp - 703: ff 75 ec pushl -0x14(%ebp) - 706: e8 d6 37 00 00 call 3ee1 - 70b: 83 c4 10 add $0x10,%esp - if(unlink("big") < 0){ - 70e: 83 ec 0c sub $0xc,%esp - 711: 68 c8 46 00 00 push $0x46c8 - 716: e8 ee 37 00 00 call 3f09 - 71b: 83 c4 10 add $0x10,%esp - 71e: 85 c0 test %eax,%eax - 720: 79 7c jns 79e - 722: eb 5f jmp 783 - if(n == MAXFILE - 1){ - printf(stdout, "read only %d blocks from big", n); - exit(); - } - break; - } else if(i != 512){ - 724: 81 7d f4 00 02 00 00 cmpl $0x200,-0xc(%ebp) - 72b: 74 1e je 74b - printf(stdout, "read failed %d\n", i); - 72d: a1 a0 62 00 00 mov 0x62a0,%eax - 732: 83 ec 04 sub $0x4,%esp - 735: ff 75 f4 pushl -0xc(%ebp) - 738: 68 3a 47 00 00 push $0x473a - 73d: 50 push %eax - 73e: e8 eb 38 00 00 call 402e - 743: 83 c4 10 add $0x10,%esp - exit(); - 746: e8 6e 37 00 00 call 3eb9 - } - if(((int*)buf)[0] != n){ - 74b: b8 c0 8a 00 00 mov $0x8ac0,%eax - 750: 8b 00 mov (%eax),%eax - 752: 3b 45 f0 cmp -0x10(%ebp),%eax - 755: 74 23 je 77a - printf(stdout, "read content of block %d is %d\n", - n, ((int*)buf)[0]); - 757: b8 c0 8a 00 00 mov $0x8ac0,%eax - } else if(i != 512){ - printf(stdout, "read failed %d\n", i); - exit(); - } - if(((int*)buf)[0] != n){ - printf(stdout, "read content of block %d is %d\n", - 75c: 8b 10 mov (%eax),%edx - 75e: a1 a0 62 00 00 mov 0x62a0,%eax - 763: 52 push %edx - 764: ff 75 f0 pushl -0x10(%ebp) - 767: 68 4c 47 00 00 push $0x474c - 76c: 50 push %eax - 76d: e8 bc 38 00 00 call 402e - 772: 83 c4 10 add $0x10,%esp - n, ((int*)buf)[0]); - exit(); - 775: e8 3f 37 00 00 call 3eb9 - } - n++; - 77a: 83 45 f0 01 addl $0x1,-0x10(%ebp) - } - 77e: e9 34 ff ff ff jmp 6b7 - close(fd); - if(unlink("big") < 0){ - printf(stdout, "unlink big failed\n"); - 783: a1 a0 62 00 00 mov 0x62a0,%eax - 788: 83 ec 08 sub $0x8,%esp - 78b: 68 6c 47 00 00 push $0x476c - 790: 50 push %eax - 791: e8 98 38 00 00 call 402e - 796: 83 c4 10 add $0x10,%esp - exit(); - 799: e8 1b 37 00 00 call 3eb9 - } - printf(stdout, "big files ok\n"); - 79e: a1 a0 62 00 00 mov 0x62a0,%eax - 7a3: 83 ec 08 sub $0x8,%esp - 7a6: 68 7f 47 00 00 push $0x477f - 7ab: 50 push %eax - 7ac: e8 7d 38 00 00 call 402e - 7b1: 83 c4 10 add $0x10,%esp -} - 7b4: c9 leave - 7b5: c3 ret - -000007b6 : - -void -createtest(void) -{ - 7b6: 55 push %ebp - 7b7: 89 e5 mov %esp,%ebp - 7b9: 83 ec 18 sub $0x18,%esp - int i, fd; - - printf(stdout, "many creates, followed by unlink test\n"); - 7bc: a1 a0 62 00 00 mov 0x62a0,%eax - 7c1: 83 ec 08 sub $0x8,%esp - 7c4: 68 90 47 00 00 push $0x4790 - 7c9: 50 push %eax - 7ca: e8 5f 38 00 00 call 402e - 7cf: 83 c4 10 add $0x10,%esp - - name[0] = 'a'; - 7d2: c6 05 c0 aa 00 00 61 movb $0x61,0xaac0 - name[2] = '\0'; - 7d9: c6 05 c2 aa 00 00 00 movb $0x0,0xaac2 - for(i = 0; i < 52; i++){ - 7e0: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 7e7: eb 35 jmp 81e - name[1] = '0' + i; - 7e9: 8b 45 f4 mov -0xc(%ebp),%eax - 7ec: 83 c0 30 add $0x30,%eax - 7ef: a2 c1 aa 00 00 mov %al,0xaac1 - fd = open(name, O_CREATE|O_RDWR); - 7f4: 83 ec 08 sub $0x8,%esp - 7f7: 68 02 02 00 00 push $0x202 - 7fc: 68 c0 aa 00 00 push $0xaac0 - 801: e8 f3 36 00 00 call 3ef9 - 806: 83 c4 10 add $0x10,%esp - 809: 89 45 f0 mov %eax,-0x10(%ebp) - close(fd); - 80c: 83 ec 0c sub $0xc,%esp - 80f: ff 75 f0 pushl -0x10(%ebp) - 812: e8 ca 36 00 00 call 3ee1 - 817: 83 c4 10 add $0x10,%esp - - printf(stdout, "many creates, followed by unlink test\n"); - - name[0] = 'a'; - name[2] = '\0'; - for(i = 0; i < 52; i++){ - 81a: 83 45 f4 01 addl $0x1,-0xc(%ebp) - 81e: 83 7d f4 33 cmpl $0x33,-0xc(%ebp) - 822: 7e c5 jle 7e9 - name[1] = '0' + i; - fd = open(name, O_CREATE|O_RDWR); - close(fd); - } - name[0] = 'a'; - 824: c6 05 c0 aa 00 00 61 movb $0x61,0xaac0 - name[2] = '\0'; - 82b: c6 05 c2 aa 00 00 00 movb $0x0,0xaac2 - for(i = 0; i < 52; i++){ - 832: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 839: eb 1f jmp 85a - name[1] = '0' + i; - 83b: 8b 45 f4 mov -0xc(%ebp),%eax - 83e: 83 c0 30 add $0x30,%eax - 841: a2 c1 aa 00 00 mov %al,0xaac1 - unlink(name); - 846: 83 ec 0c sub $0xc,%esp - 849: 68 c0 aa 00 00 push $0xaac0 - 84e: e8 b6 36 00 00 call 3f09 - 853: 83 c4 10 add $0x10,%esp - fd = open(name, O_CREATE|O_RDWR); - close(fd); - } - name[0] = 'a'; - name[2] = '\0'; - for(i = 0; i < 52; i++){ - 856: 83 45 f4 01 addl $0x1,-0xc(%ebp) - 85a: 83 7d f4 33 cmpl $0x33,-0xc(%ebp) - 85e: 7e db jle 83b - name[1] = '0' + i; - unlink(name); - } - printf(stdout, "many creates, followed by unlink; ok\n"); - 860: a1 a0 62 00 00 mov 0x62a0,%eax - 865: 83 ec 08 sub $0x8,%esp - 868: 68 b8 47 00 00 push $0x47b8 - 86d: 50 push %eax - 86e: e8 bb 37 00 00 call 402e - 873: 83 c4 10 add $0x10,%esp -} - 876: c9 leave - 877: c3 ret - -00000878 : - -void dirtest(void) -{ - 878: 55 push %ebp - 879: 89 e5 mov %esp,%ebp - 87b: 83 ec 08 sub $0x8,%esp - printf(stdout, "mkdir test\n"); - 87e: a1 a0 62 00 00 mov 0x62a0,%eax - 883: 83 ec 08 sub $0x8,%esp - 886: 68 de 47 00 00 push $0x47de - 88b: 50 push %eax - 88c: e8 9d 37 00 00 call 402e - 891: 83 c4 10 add $0x10,%esp - - if(mkdir("dir0") < 0){ - 894: 83 ec 0c sub $0xc,%esp - 897: 68 ea 47 00 00 push $0x47ea - 89c: e8 80 36 00 00 call 3f21 - 8a1: 83 c4 10 add $0x10,%esp - 8a4: 85 c0 test %eax,%eax - 8a6: 79 1b jns 8c3 - printf(stdout, "mkdir failed\n"); - 8a8: a1 a0 62 00 00 mov 0x62a0,%eax - 8ad: 83 ec 08 sub $0x8,%esp - 8b0: 68 0d 44 00 00 push $0x440d - 8b5: 50 push %eax - 8b6: e8 73 37 00 00 call 402e - 8bb: 83 c4 10 add $0x10,%esp - exit(); - 8be: e8 f6 35 00 00 call 3eb9 - } - - if(chdir("dir0") < 0){ - 8c3: 83 ec 0c sub $0xc,%esp - 8c6: 68 ea 47 00 00 push $0x47ea - 8cb: e8 59 36 00 00 call 3f29 - 8d0: 83 c4 10 add $0x10,%esp - 8d3: 85 c0 test %eax,%eax - 8d5: 79 1b jns 8f2 - printf(stdout, "chdir dir0 failed\n"); - 8d7: a1 a0 62 00 00 mov 0x62a0,%eax - 8dc: 83 ec 08 sub $0x8,%esp - 8df: 68 ef 47 00 00 push $0x47ef - 8e4: 50 push %eax - 8e5: e8 44 37 00 00 call 402e - 8ea: 83 c4 10 add $0x10,%esp - exit(); - 8ed: e8 c7 35 00 00 call 3eb9 - } - - if(chdir("..") < 0){ - 8f2: 83 ec 0c sub $0xc,%esp - 8f5: 68 02 48 00 00 push $0x4802 - 8fa: e8 2a 36 00 00 call 3f29 - 8ff: 83 c4 10 add $0x10,%esp - 902: 85 c0 test %eax,%eax - 904: 79 1b jns 921 - printf(stdout, "chdir .. failed\n"); - 906: a1 a0 62 00 00 mov 0x62a0,%eax - 90b: 83 ec 08 sub $0x8,%esp - 90e: 68 05 48 00 00 push $0x4805 - 913: 50 push %eax - 914: e8 15 37 00 00 call 402e - 919: 83 c4 10 add $0x10,%esp - exit(); - 91c: e8 98 35 00 00 call 3eb9 - } - - if(unlink("dir0") < 0){ - 921: 83 ec 0c sub $0xc,%esp - 924: 68 ea 47 00 00 push $0x47ea - 929: e8 db 35 00 00 call 3f09 - 92e: 83 c4 10 add $0x10,%esp - 931: 85 c0 test %eax,%eax - 933: 79 1b jns 950 - printf(stdout, "unlink dir0 failed\n"); - 935: a1 a0 62 00 00 mov 0x62a0,%eax - 93a: 83 ec 08 sub $0x8,%esp - 93d: 68 16 48 00 00 push $0x4816 - 942: 50 push %eax - 943: e8 e6 36 00 00 call 402e - 948: 83 c4 10 add $0x10,%esp - exit(); - 94b: e8 69 35 00 00 call 3eb9 - } - printf(stdout, "mkdir test ok\n"); - 950: a1 a0 62 00 00 mov 0x62a0,%eax - 955: 83 ec 08 sub $0x8,%esp - 958: 68 2a 48 00 00 push $0x482a - 95d: 50 push %eax - 95e: e8 cb 36 00 00 call 402e - 963: 83 c4 10 add $0x10,%esp -} - 966: c9 leave - 967: c3 ret - -00000968 : - -void -exectest(void) -{ - 968: 55 push %ebp - 969: 89 e5 mov %esp,%ebp - 96b: 83 ec 08 sub $0x8,%esp - printf(stdout, "exec test\n"); - 96e: a1 a0 62 00 00 mov 0x62a0,%eax - 973: 83 ec 08 sub $0x8,%esp - 976: 68 39 48 00 00 push $0x4839 - 97b: 50 push %eax - 97c: e8 ad 36 00 00 call 402e - 981: 83 c4 10 add $0x10,%esp - if(exec("echo", echoargv) < 0){ - 984: 83 ec 08 sub $0x8,%esp - 987: 68 8c 62 00 00 push $0x628c - 98c: 68 e4 43 00 00 push $0x43e4 - 991: e8 5b 35 00 00 call 3ef1 - 996: 83 c4 10 add $0x10,%esp - 999: 85 c0 test %eax,%eax - 99b: 79 1b jns 9b8 - printf(stdout, "exec echo failed\n"); - 99d: a1 a0 62 00 00 mov 0x62a0,%eax - 9a2: 83 ec 08 sub $0x8,%esp - 9a5: 68 44 48 00 00 push $0x4844 - 9aa: 50 push %eax - 9ab: e8 7e 36 00 00 call 402e - 9b0: 83 c4 10 add $0x10,%esp - exit(); - 9b3: e8 01 35 00 00 call 3eb9 - } -} - 9b8: c9 leave - 9b9: c3 ret - -000009ba : - -// simple fork and pipe read/write - -void -pipe1(void) -{ - 9ba: 55 push %ebp - 9bb: 89 e5 mov %esp,%ebp - 9bd: 83 ec 28 sub $0x28,%esp - int fds[2], pid; - int seq, i, n, cc, total; - - if(pipe(fds) != 0){ - 9c0: 83 ec 0c sub $0xc,%esp - 9c3: 8d 45 d8 lea -0x28(%ebp),%eax - 9c6: 50 push %eax - 9c7: e8 fd 34 00 00 call 3ec9 - 9cc: 83 c4 10 add $0x10,%esp - 9cf: 85 c0 test %eax,%eax - 9d1: 74 17 je 9ea - printf(1, "pipe() failed\n"); - 9d3: 83 ec 08 sub $0x8,%esp - 9d6: 68 56 48 00 00 push $0x4856 - 9db: 6a 01 push $0x1 - 9dd: e8 4c 36 00 00 call 402e - 9e2: 83 c4 10 add $0x10,%esp - exit(); - 9e5: e8 cf 34 00 00 call 3eb9 - } - pid = fork(); - 9ea: e8 c2 34 00 00 call 3eb1 - 9ef: 89 45 e0 mov %eax,-0x20(%ebp) - seq = 0; - 9f2: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - if(pid == 0){ - 9f9: 83 7d e0 00 cmpl $0x0,-0x20(%ebp) - 9fd: 0f 85 89 00 00 00 jne a8c - close(fds[0]); - a03: 8b 45 d8 mov -0x28(%ebp),%eax - a06: 83 ec 0c sub $0xc,%esp - a09: 50 push %eax - a0a: e8 d2 34 00 00 call 3ee1 - a0f: 83 c4 10 add $0x10,%esp - for(n = 0; n < 5; n++){ - a12: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - a19: eb 66 jmp a81 - for(i = 0; i < 1033; i++) - a1b: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - a22: eb 19 jmp a3d - buf[i] = seq++; - a24: 8b 45 f4 mov -0xc(%ebp),%eax - a27: 8d 50 01 lea 0x1(%eax),%edx - a2a: 89 55 f4 mov %edx,-0xc(%ebp) - a2d: 89 c2 mov %eax,%edx - a2f: 8b 45 f0 mov -0x10(%ebp),%eax - a32: 05 c0 8a 00 00 add $0x8ac0,%eax - a37: 88 10 mov %dl,(%eax) - pid = fork(); - seq = 0; - if(pid == 0){ - close(fds[0]); - for(n = 0; n < 5; n++){ - for(i = 0; i < 1033; i++) - a39: 83 45 f0 01 addl $0x1,-0x10(%ebp) - a3d: 81 7d f0 08 04 00 00 cmpl $0x408,-0x10(%ebp) - a44: 7e de jle a24 - buf[i] = seq++; - if(write(fds[1], buf, 1033) != 1033){ - a46: 8b 45 dc mov -0x24(%ebp),%eax - a49: 83 ec 04 sub $0x4,%esp - a4c: 68 09 04 00 00 push $0x409 - a51: 68 c0 8a 00 00 push $0x8ac0 - a56: 50 push %eax - a57: e8 7d 34 00 00 call 3ed9 - a5c: 83 c4 10 add $0x10,%esp - a5f: 3d 09 04 00 00 cmp $0x409,%eax - a64: 74 17 je a7d - printf(1, "pipe1 oops 1\n"); - a66: 83 ec 08 sub $0x8,%esp - a69: 68 65 48 00 00 push $0x4865 - a6e: 6a 01 push $0x1 - a70: e8 b9 35 00 00 call 402e - a75: 83 c4 10 add $0x10,%esp - exit(); - a78: e8 3c 34 00 00 call 3eb9 - } - pid = fork(); - seq = 0; - if(pid == 0){ - close(fds[0]); - for(n = 0; n < 5; n++){ - a7d: 83 45 ec 01 addl $0x1,-0x14(%ebp) - a81: 83 7d ec 04 cmpl $0x4,-0x14(%ebp) - a85: 7e 94 jle a1b - if(write(fds[1], buf, 1033) != 1033){ - printf(1, "pipe1 oops 1\n"); - exit(); - } - } - exit(); - a87: e8 2d 34 00 00 call 3eb9 - } else if(pid > 0){ - a8c: 83 7d e0 00 cmpl $0x0,-0x20(%ebp) - a90: 0f 8e f4 00 00 00 jle b8a - close(fds[1]); - a96: 8b 45 dc mov -0x24(%ebp),%eax - a99: 83 ec 0c sub $0xc,%esp - a9c: 50 push %eax - a9d: e8 3f 34 00 00 call 3ee1 - aa2: 83 c4 10 add $0x10,%esp - total = 0; - aa5: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) - cc = 1; - aac: c7 45 e8 01 00 00 00 movl $0x1,-0x18(%ebp) - while((n = read(fds[0], buf, cc)) > 0){ - ab3: eb 66 jmp b1b - for(i = 0; i < n; i++){ - ab5: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - abc: eb 3b jmp af9 - if((buf[i] & 0xff) != (seq++ & 0xff)){ - abe: 8b 45 f0 mov -0x10(%ebp),%eax - ac1: 05 c0 8a 00 00 add $0x8ac0,%eax - ac6: 0f b6 00 movzbl (%eax),%eax - ac9: 0f be c8 movsbl %al,%ecx - acc: 8b 45 f4 mov -0xc(%ebp),%eax - acf: 8d 50 01 lea 0x1(%eax),%edx - ad2: 89 55 f4 mov %edx,-0xc(%ebp) - ad5: 31 c8 xor %ecx,%eax - ad7: 0f b6 c0 movzbl %al,%eax - ada: 85 c0 test %eax,%eax - adc: 74 17 je af5 - printf(1, "pipe1 oops 2\n"); - ade: 83 ec 08 sub $0x8,%esp - ae1: 68 73 48 00 00 push $0x4873 - ae6: 6a 01 push $0x1 - ae8: e8 41 35 00 00 call 402e - aed: 83 c4 10 add $0x10,%esp - af0: e9 ac 00 00 00 jmp ba1 - } else if(pid > 0){ - close(fds[1]); - total = 0; - cc = 1; - while((n = read(fds[0], buf, cc)) > 0){ - for(i = 0; i < n; i++){ - af5: 83 45 f0 01 addl $0x1,-0x10(%ebp) - af9: 8b 45 f0 mov -0x10(%ebp),%eax - afc: 3b 45 ec cmp -0x14(%ebp),%eax - aff: 7c bd jl abe - if((buf[i] & 0xff) != (seq++ & 0xff)){ - printf(1, "pipe1 oops 2\n"); - return; - } - } - total += n; - b01: 8b 45 ec mov -0x14(%ebp),%eax - b04: 01 45 e4 add %eax,-0x1c(%ebp) - cc = cc * 2; - b07: d1 65 e8 shll -0x18(%ebp) - if(cc > sizeof(buf)) - b0a: 8b 45 e8 mov -0x18(%ebp),%eax - b0d: 3d 00 20 00 00 cmp $0x2000,%eax - b12: 76 07 jbe b1b - cc = sizeof(buf); - b14: c7 45 e8 00 20 00 00 movl $0x2000,-0x18(%ebp) - exit(); - } else if(pid > 0){ - close(fds[1]); - total = 0; - cc = 1; - while((n = read(fds[0], buf, cc)) > 0){ - b1b: 8b 45 d8 mov -0x28(%ebp),%eax - b1e: 83 ec 04 sub $0x4,%esp - b21: ff 75 e8 pushl -0x18(%ebp) - b24: 68 c0 8a 00 00 push $0x8ac0 - b29: 50 push %eax - b2a: e8 a2 33 00 00 call 3ed1 - b2f: 83 c4 10 add $0x10,%esp - b32: 89 45 ec mov %eax,-0x14(%ebp) - b35: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - b39: 0f 8f 76 ff ff ff jg ab5 - total += n; - cc = cc * 2; - if(cc > sizeof(buf)) - cc = sizeof(buf); - } - if(total != 5 * 1033){ - b3f: 81 7d e4 2d 14 00 00 cmpl $0x142d,-0x1c(%ebp) - b46: 74 1a je b62 - printf(1, "pipe1 oops 3 total %d\n", total); - b48: 83 ec 04 sub $0x4,%esp - b4b: ff 75 e4 pushl -0x1c(%ebp) - b4e: 68 81 48 00 00 push $0x4881 - b53: 6a 01 push $0x1 - b55: e8 d4 34 00 00 call 402e - b5a: 83 c4 10 add $0x10,%esp - exit(); - b5d: e8 57 33 00 00 call 3eb9 - } - close(fds[0]); - b62: 8b 45 d8 mov -0x28(%ebp),%eax - b65: 83 ec 0c sub $0xc,%esp - b68: 50 push %eax - b69: e8 73 33 00 00 call 3ee1 - b6e: 83 c4 10 add $0x10,%esp - wait(); - b71: e8 4b 33 00 00 call 3ec1 - } else { - printf(1, "fork() failed\n"); - exit(); - } - printf(1, "pipe1 ok\n"); - b76: 83 ec 08 sub $0x8,%esp - b79: 68 a7 48 00 00 push $0x48a7 - b7e: 6a 01 push $0x1 - b80: e8 a9 34 00 00 call 402e - b85: 83 c4 10 add $0x10,%esp - b88: eb 17 jmp ba1 - exit(); - } - close(fds[0]); - wait(); - } else { - printf(1, "fork() failed\n"); - b8a: 83 ec 08 sub $0x8,%esp - b8d: 68 98 48 00 00 push $0x4898 - b92: 6a 01 push $0x1 - b94: e8 95 34 00 00 call 402e - b99: 83 c4 10 add $0x10,%esp - exit(); - b9c: e8 18 33 00 00 call 3eb9 - } - printf(1, "pipe1 ok\n"); -} - ba1: c9 leave - ba2: c3 ret - -00000ba3 : - -// meant to be run w/ at most two CPUs -void -preempt(void) -{ - ba3: 55 push %ebp - ba4: 89 e5 mov %esp,%ebp - ba6: 83 ec 28 sub $0x28,%esp - int pid1, pid2, pid3; - int pfds[2]; - - printf(1, "preempt: "); - ba9: 83 ec 08 sub $0x8,%esp - bac: 68 b1 48 00 00 push $0x48b1 - bb1: 6a 01 push $0x1 - bb3: e8 76 34 00 00 call 402e - bb8: 83 c4 10 add $0x10,%esp - pid1 = fork(); - bbb: e8 f1 32 00 00 call 3eb1 - bc0: 89 45 f4 mov %eax,-0xc(%ebp) - if(pid1 == 0) - bc3: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - bc7: 75 02 jne bcb - for(;;) - ; - bc9: eb fe jmp bc9 - - pid2 = fork(); - bcb: e8 e1 32 00 00 call 3eb1 - bd0: 89 45 f0 mov %eax,-0x10(%ebp) - if(pid2 == 0) - bd3: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - bd7: 75 02 jne bdb - for(;;) - ; - bd9: eb fe jmp bd9 - - pipe(pfds); - bdb: 83 ec 0c sub $0xc,%esp - bde: 8d 45 e4 lea -0x1c(%ebp),%eax - be1: 50 push %eax - be2: e8 e2 32 00 00 call 3ec9 - be7: 83 c4 10 add $0x10,%esp - pid3 = fork(); - bea: e8 c2 32 00 00 call 3eb1 - bef: 89 45 ec mov %eax,-0x14(%ebp) - if(pid3 == 0){ - bf2: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - bf6: 75 4d jne c45 - close(pfds[0]); - bf8: 8b 45 e4 mov -0x1c(%ebp),%eax - bfb: 83 ec 0c sub $0xc,%esp - bfe: 50 push %eax - bff: e8 dd 32 00 00 call 3ee1 - c04: 83 c4 10 add $0x10,%esp - if(write(pfds[1], "x", 1) != 1) - c07: 8b 45 e8 mov -0x18(%ebp),%eax - c0a: 83 ec 04 sub $0x4,%esp - c0d: 6a 01 push $0x1 - c0f: 68 bb 48 00 00 push $0x48bb - c14: 50 push %eax - c15: e8 bf 32 00 00 call 3ed9 - c1a: 83 c4 10 add $0x10,%esp - c1d: 83 f8 01 cmp $0x1,%eax - c20: 74 12 je c34 - printf(1, "preempt write error"); - c22: 83 ec 08 sub $0x8,%esp - c25: 68 bd 48 00 00 push $0x48bd - c2a: 6a 01 push $0x1 - c2c: e8 fd 33 00 00 call 402e - c31: 83 c4 10 add $0x10,%esp - close(pfds[1]); - c34: 8b 45 e8 mov -0x18(%ebp),%eax - c37: 83 ec 0c sub $0xc,%esp - c3a: 50 push %eax - c3b: e8 a1 32 00 00 call 3ee1 - c40: 83 c4 10 add $0x10,%esp - for(;;) - ; - c43: eb fe jmp c43 - } - - close(pfds[1]); - c45: 8b 45 e8 mov -0x18(%ebp),%eax - c48: 83 ec 0c sub $0xc,%esp - c4b: 50 push %eax - c4c: e8 90 32 00 00 call 3ee1 - c51: 83 c4 10 add $0x10,%esp - if(read(pfds[0], buf, sizeof(buf)) != 1){ - c54: 8b 45 e4 mov -0x1c(%ebp),%eax - c57: 83 ec 04 sub $0x4,%esp - c5a: 68 00 20 00 00 push $0x2000 - c5f: 68 c0 8a 00 00 push $0x8ac0 - c64: 50 push %eax - c65: e8 67 32 00 00 call 3ed1 - c6a: 83 c4 10 add $0x10,%esp - c6d: 83 f8 01 cmp $0x1,%eax - c70: 74 14 je c86 - printf(1, "preempt read error"); - c72: 83 ec 08 sub $0x8,%esp - c75: 68 d1 48 00 00 push $0x48d1 - c7a: 6a 01 push $0x1 - c7c: e8 ad 33 00 00 call 402e - c81: 83 c4 10 add $0x10,%esp - c84: eb 7e jmp d04 - return; - } - close(pfds[0]); - c86: 8b 45 e4 mov -0x1c(%ebp),%eax - c89: 83 ec 0c sub $0xc,%esp - c8c: 50 push %eax - c8d: e8 4f 32 00 00 call 3ee1 - c92: 83 c4 10 add $0x10,%esp - printf(1, "kill... "); - c95: 83 ec 08 sub $0x8,%esp - c98: 68 e4 48 00 00 push $0x48e4 - c9d: 6a 01 push $0x1 - c9f: e8 8a 33 00 00 call 402e - ca4: 83 c4 10 add $0x10,%esp - kill(pid1); - ca7: 83 ec 0c sub $0xc,%esp - caa: ff 75 f4 pushl -0xc(%ebp) - cad: e8 37 32 00 00 call 3ee9 - cb2: 83 c4 10 add $0x10,%esp - kill(pid2); - cb5: 83 ec 0c sub $0xc,%esp - cb8: ff 75 f0 pushl -0x10(%ebp) - cbb: e8 29 32 00 00 call 3ee9 - cc0: 83 c4 10 add $0x10,%esp - kill(pid3); - cc3: 83 ec 0c sub $0xc,%esp - cc6: ff 75 ec pushl -0x14(%ebp) - cc9: e8 1b 32 00 00 call 3ee9 - cce: 83 c4 10 add $0x10,%esp - printf(1, "wait... "); - cd1: 83 ec 08 sub $0x8,%esp - cd4: 68 ed 48 00 00 push $0x48ed - cd9: 6a 01 push $0x1 - cdb: e8 4e 33 00 00 call 402e - ce0: 83 c4 10 add $0x10,%esp - wait(); - ce3: e8 d9 31 00 00 call 3ec1 - wait(); - ce8: e8 d4 31 00 00 call 3ec1 - wait(); - ced: e8 cf 31 00 00 call 3ec1 - printf(1, "preempt ok\n"); - cf2: 83 ec 08 sub $0x8,%esp - cf5: 68 f6 48 00 00 push $0x48f6 - cfa: 6a 01 push $0x1 - cfc: e8 2d 33 00 00 call 402e - d01: 83 c4 10 add $0x10,%esp -} - d04: c9 leave - d05: c3 ret - -00000d06 : - -// try to find any races between exit and wait -void -exitwait(void) -{ - d06: 55 push %ebp - d07: 89 e5 mov %esp,%ebp - d09: 83 ec 18 sub $0x18,%esp - int i, pid; - - for(i = 0; i < 100; i++){ - d0c: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - d13: eb 4f jmp d64 - pid = fork(); - d15: e8 97 31 00 00 call 3eb1 - d1a: 89 45 f0 mov %eax,-0x10(%ebp) - if(pid < 0){ - d1d: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - d21: 79 14 jns d37 - printf(1, "fork failed\n"); - d23: 83 ec 08 sub $0x8,%esp - d26: 68 85 44 00 00 push $0x4485 - d2b: 6a 01 push $0x1 - d2d: e8 fc 32 00 00 call 402e - d32: 83 c4 10 add $0x10,%esp - return; - d35: eb 45 jmp d7c - } - if(pid){ - d37: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - d3b: 74 1e je d5b - if(wait() != pid){ - d3d: e8 7f 31 00 00 call 3ec1 - d42: 3b 45 f0 cmp -0x10(%ebp),%eax - d45: 74 19 je d60 - printf(1, "wait wrong pid\n"); - d47: 83 ec 08 sub $0x8,%esp - d4a: 68 02 49 00 00 push $0x4902 - d4f: 6a 01 push $0x1 - d51: e8 d8 32 00 00 call 402e - d56: 83 c4 10 add $0x10,%esp - return; - d59: eb 21 jmp d7c - } - } else { - exit(); - d5b: e8 59 31 00 00 call 3eb9 -void -exitwait(void) -{ - int i, pid; - - for(i = 0; i < 100; i++){ - d60: 83 45 f4 01 addl $0x1,-0xc(%ebp) - d64: 83 7d f4 63 cmpl $0x63,-0xc(%ebp) - d68: 7e ab jle d15 - } - } else { - exit(); - } - } - printf(1, "exitwait ok\n"); - d6a: 83 ec 08 sub $0x8,%esp - d6d: 68 12 49 00 00 push $0x4912 - d72: 6a 01 push $0x1 - d74: e8 b5 32 00 00 call 402e - d79: 83 c4 10 add $0x10,%esp -} - d7c: c9 leave - d7d: c3 ret - -00000d7e : - -void -mem(void) -{ - d7e: 55 push %ebp - d7f: 89 e5 mov %esp,%ebp - d81: 83 ec 18 sub $0x18,%esp - void *m1, *m2; - int pid, ppid; - - printf(1, "mem test\n"); - d84: 83 ec 08 sub $0x8,%esp - d87: 68 1f 49 00 00 push $0x491f - d8c: 6a 01 push $0x1 - d8e: e8 9b 32 00 00 call 402e - d93: 83 c4 10 add $0x10,%esp - ppid = getpid(); - d96: e8 9e 31 00 00 call 3f39 - d9b: 89 45 f0 mov %eax,-0x10(%ebp) - if((pid = fork()) == 0){ - d9e: e8 0e 31 00 00 call 3eb1 - da3: 89 45 ec mov %eax,-0x14(%ebp) - da6: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - daa: 0f 85 b7 00 00 00 jne e67 - m1 = 0; - db0: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - while((m2 = malloc(10001)) != 0){ - db7: eb 0e jmp dc7 - *(char**)m2 = m1; - db9: 8b 45 e8 mov -0x18(%ebp),%eax - dbc: 8b 55 f4 mov -0xc(%ebp),%edx - dbf: 89 10 mov %edx,(%eax) - m1 = m2; - dc1: 8b 45 e8 mov -0x18(%ebp),%eax - dc4: 89 45 f4 mov %eax,-0xc(%ebp) - - printf(1, "mem test\n"); - ppid = getpid(); - if((pid = fork()) == 0){ - m1 = 0; - while((m2 = malloc(10001)) != 0){ - dc7: 83 ec 0c sub $0xc,%esp - dca: 68 11 27 00 00 push $0x2711 - dcf: e8 2b 35 00 00 call 42ff - dd4: 83 c4 10 add $0x10,%esp - dd7: 89 45 e8 mov %eax,-0x18(%ebp) - dda: 83 7d e8 00 cmpl $0x0,-0x18(%ebp) - dde: 75 d9 jne db9 - *(char**)m2 = m1; - m1 = m2; - } - while(m1){ - de0: eb 1c jmp dfe - m2 = *(char**)m1; - de2: 8b 45 f4 mov -0xc(%ebp),%eax - de5: 8b 00 mov (%eax),%eax - de7: 89 45 e8 mov %eax,-0x18(%ebp) - free(m1); - dea: 83 ec 0c sub $0xc,%esp - ded: ff 75 f4 pushl -0xc(%ebp) - df0: e8 c9 33 00 00 call 41be - df5: 83 c4 10 add $0x10,%esp - m1 = m2; - df8: 8b 45 e8 mov -0x18(%ebp),%eax - dfb: 89 45 f4 mov %eax,-0xc(%ebp) - m1 = 0; - while((m2 = malloc(10001)) != 0){ - *(char**)m2 = m1; - m1 = m2; - } - while(m1){ - dfe: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - e02: 75 de jne de2 - m2 = *(char**)m1; - free(m1); - m1 = m2; - } - m1 = malloc(1024*20); - e04: 83 ec 0c sub $0xc,%esp - e07: 68 00 50 00 00 push $0x5000 - e0c: e8 ee 34 00 00 call 42ff - e11: 83 c4 10 add $0x10,%esp - e14: 89 45 f4 mov %eax,-0xc(%ebp) - if(m1 == 0){ - e17: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - e1b: 75 25 jne e42 - printf(1, "couldn't allocate mem?!!\n"); - e1d: 83 ec 08 sub $0x8,%esp - e20: 68 29 49 00 00 push $0x4929 - e25: 6a 01 push $0x1 - e27: e8 02 32 00 00 call 402e - e2c: 83 c4 10 add $0x10,%esp - kill(ppid); - e2f: 83 ec 0c sub $0xc,%esp - e32: ff 75 f0 pushl -0x10(%ebp) - e35: e8 af 30 00 00 call 3ee9 - e3a: 83 c4 10 add $0x10,%esp - exit(); - e3d: e8 77 30 00 00 call 3eb9 - } - free(m1); - e42: 83 ec 0c sub $0xc,%esp - e45: ff 75 f4 pushl -0xc(%ebp) - e48: e8 71 33 00 00 call 41be - e4d: 83 c4 10 add $0x10,%esp - printf(1, "mem ok\n"); - e50: 83 ec 08 sub $0x8,%esp - e53: 68 43 49 00 00 push $0x4943 - e58: 6a 01 push $0x1 - e5a: e8 cf 31 00 00 call 402e - e5f: 83 c4 10 add $0x10,%esp - exit(); - e62: e8 52 30 00 00 call 3eb9 - } else { - wait(); - e67: e8 55 30 00 00 call 3ec1 - } -} - e6c: c9 leave - e6d: c3 ret - -00000e6e : - -// two processes write to the same file descriptor -// is the offset shared? does inode locking work? -void -sharedfd(void) -{ - e6e: 55 push %ebp - e6f: 89 e5 mov %esp,%ebp - e71: 83 ec 38 sub $0x38,%esp - int fd, pid, i, n, nc, np; - char buf[10]; - - printf(1, "sharedfd test\n"); - e74: 83 ec 08 sub $0x8,%esp - e77: 68 4b 49 00 00 push $0x494b - e7c: 6a 01 push $0x1 - e7e: e8 ab 31 00 00 call 402e - e83: 83 c4 10 add $0x10,%esp - - unlink("sharedfd"); - e86: 83 ec 0c sub $0xc,%esp - e89: 68 5a 49 00 00 push $0x495a - e8e: e8 76 30 00 00 call 3f09 - e93: 83 c4 10 add $0x10,%esp - fd = open("sharedfd", O_CREATE|O_RDWR); - e96: 83 ec 08 sub $0x8,%esp - e99: 68 02 02 00 00 push $0x202 - e9e: 68 5a 49 00 00 push $0x495a - ea3: e8 51 30 00 00 call 3ef9 - ea8: 83 c4 10 add $0x10,%esp - eab: 89 45 e8 mov %eax,-0x18(%ebp) - if(fd < 0){ - eae: 83 7d e8 00 cmpl $0x0,-0x18(%ebp) - eb2: 79 17 jns ecb - printf(1, "fstests: cannot open sharedfd for writing"); - eb4: 83 ec 08 sub $0x8,%esp - eb7: 68 64 49 00 00 push $0x4964 - ebc: 6a 01 push $0x1 - ebe: e8 6b 31 00 00 call 402e - ec3: 83 c4 10 add $0x10,%esp - return; - ec6: e9 84 01 00 00 jmp 104f - } - pid = fork(); - ecb: e8 e1 2f 00 00 call 3eb1 - ed0: 89 45 e4 mov %eax,-0x1c(%ebp) - memset(buf, pid==0?'c':'p', sizeof(buf)); - ed3: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp) - ed7: 75 07 jne ee0 - ed9: b8 63 00 00 00 mov $0x63,%eax - ede: eb 05 jmp ee5 - ee0: b8 70 00 00 00 mov $0x70,%eax - ee5: 83 ec 04 sub $0x4,%esp - ee8: 6a 0a push $0xa - eea: 50 push %eax - eeb: 8d 45 d6 lea -0x2a(%ebp),%eax - eee: 50 push %eax - eef: e8 2b 2e 00 00 call 3d1f - ef4: 83 c4 10 add $0x10,%esp - for(i = 0; i < 1000; i++){ - ef7: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - efe: eb 31 jmp f31 - if(write(fd, buf, sizeof(buf)) != sizeof(buf)){ - f00: 83 ec 04 sub $0x4,%esp - f03: 6a 0a push $0xa - f05: 8d 45 d6 lea -0x2a(%ebp),%eax - f08: 50 push %eax - f09: ff 75 e8 pushl -0x18(%ebp) - f0c: e8 c8 2f 00 00 call 3ed9 - f11: 83 c4 10 add $0x10,%esp - f14: 83 f8 0a cmp $0xa,%eax - f17: 74 14 je f2d - printf(1, "fstests: write sharedfd failed\n"); - f19: 83 ec 08 sub $0x8,%esp - f1c: 68 90 49 00 00 push $0x4990 - f21: 6a 01 push $0x1 - f23: e8 06 31 00 00 call 402e - f28: 83 c4 10 add $0x10,%esp - break; - f2b: eb 0d jmp f3a - printf(1, "fstests: cannot open sharedfd for writing"); - return; - } - pid = fork(); - memset(buf, pid==0?'c':'p', sizeof(buf)); - for(i = 0; i < 1000; i++){ - f2d: 83 45 f4 01 addl $0x1,-0xc(%ebp) - f31: 81 7d f4 e7 03 00 00 cmpl $0x3e7,-0xc(%ebp) - f38: 7e c6 jle f00 - if(write(fd, buf, sizeof(buf)) != sizeof(buf)){ - printf(1, "fstests: write sharedfd failed\n"); - break; - } - } - if(pid == 0) - f3a: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp) - f3e: 75 05 jne f45 - exit(); - f40: e8 74 2f 00 00 call 3eb9 - else - wait(); - f45: e8 77 2f 00 00 call 3ec1 - close(fd); - f4a: 83 ec 0c sub $0xc,%esp - f4d: ff 75 e8 pushl -0x18(%ebp) - f50: e8 8c 2f 00 00 call 3ee1 - f55: 83 c4 10 add $0x10,%esp - fd = open("sharedfd", 0); - f58: 83 ec 08 sub $0x8,%esp - f5b: 6a 00 push $0x0 - f5d: 68 5a 49 00 00 push $0x495a - f62: e8 92 2f 00 00 call 3ef9 - f67: 83 c4 10 add $0x10,%esp - f6a: 89 45 e8 mov %eax,-0x18(%ebp) - if(fd < 0){ - f6d: 83 7d e8 00 cmpl $0x0,-0x18(%ebp) - f71: 79 17 jns f8a - printf(1, "fstests: cannot open sharedfd for reading\n"); - f73: 83 ec 08 sub $0x8,%esp - f76: 68 b0 49 00 00 push $0x49b0 - f7b: 6a 01 push $0x1 - f7d: e8 ac 30 00 00 call 402e - f82: 83 c4 10 add $0x10,%esp - return; - f85: e9 c5 00 00 00 jmp 104f - } - nc = np = 0; - f8a: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - f91: 8b 45 ec mov -0x14(%ebp),%eax - f94: 89 45 f0 mov %eax,-0x10(%ebp) - while((n = read(fd, buf, sizeof(buf))) > 0){ - f97: eb 3b jmp fd4 - for(i = 0; i < sizeof(buf); i++){ - f99: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - fa0: eb 2a jmp fcc - if(buf[i] == 'c') - fa2: 8d 55 d6 lea -0x2a(%ebp),%edx - fa5: 8b 45 f4 mov -0xc(%ebp),%eax - fa8: 01 d0 add %edx,%eax - faa: 0f b6 00 movzbl (%eax),%eax - fad: 3c 63 cmp $0x63,%al - faf: 75 04 jne fb5 - nc++; - fb1: 83 45 f0 01 addl $0x1,-0x10(%ebp) - if(buf[i] == 'p') - fb5: 8d 55 d6 lea -0x2a(%ebp),%edx - fb8: 8b 45 f4 mov -0xc(%ebp),%eax - fbb: 01 d0 add %edx,%eax - fbd: 0f b6 00 movzbl (%eax),%eax - fc0: 3c 70 cmp $0x70,%al - fc2: 75 04 jne fc8 - np++; - fc4: 83 45 ec 01 addl $0x1,-0x14(%ebp) - printf(1, "fstests: cannot open sharedfd for reading\n"); - return; - } - nc = np = 0; - while((n = read(fd, buf, sizeof(buf))) > 0){ - for(i = 0; i < sizeof(buf); i++){ - fc8: 83 45 f4 01 addl $0x1,-0xc(%ebp) - fcc: 8b 45 f4 mov -0xc(%ebp),%eax - fcf: 83 f8 09 cmp $0x9,%eax - fd2: 76 ce jbe fa2 - if(fd < 0){ - printf(1, "fstests: cannot open sharedfd for reading\n"); - return; - } - nc = np = 0; - while((n = read(fd, buf, sizeof(buf))) > 0){ - fd4: 83 ec 04 sub $0x4,%esp - fd7: 6a 0a push $0xa - fd9: 8d 45 d6 lea -0x2a(%ebp),%eax - fdc: 50 push %eax - fdd: ff 75 e8 pushl -0x18(%ebp) - fe0: e8 ec 2e 00 00 call 3ed1 - fe5: 83 c4 10 add $0x10,%esp - fe8: 89 45 e0 mov %eax,-0x20(%ebp) - feb: 83 7d e0 00 cmpl $0x0,-0x20(%ebp) - fef: 7f a8 jg f99 - nc++; - if(buf[i] == 'p') - np++; - } - } - close(fd); - ff1: 83 ec 0c sub $0xc,%esp - ff4: ff 75 e8 pushl -0x18(%ebp) - ff7: e8 e5 2e 00 00 call 3ee1 - ffc: 83 c4 10 add $0x10,%esp - unlink("sharedfd"); - fff: 83 ec 0c sub $0xc,%esp - 1002: 68 5a 49 00 00 push $0x495a - 1007: e8 fd 2e 00 00 call 3f09 - 100c: 83 c4 10 add $0x10,%esp - if(nc == 10000 && np == 10000){ - 100f: 81 7d f0 10 27 00 00 cmpl $0x2710,-0x10(%ebp) - 1016: 75 1d jne 1035 - 1018: 81 7d ec 10 27 00 00 cmpl $0x2710,-0x14(%ebp) - 101f: 75 14 jne 1035 - printf(1, "sharedfd ok\n"); - 1021: 83 ec 08 sub $0x8,%esp - 1024: 68 db 49 00 00 push $0x49db - 1029: 6a 01 push $0x1 - 102b: e8 fe 2f 00 00 call 402e - 1030: 83 c4 10 add $0x10,%esp - 1033: eb 1a jmp 104f - } else { - printf(1, "sharedfd oops %d %d\n", nc, np); - 1035: ff 75 ec pushl -0x14(%ebp) - 1038: ff 75 f0 pushl -0x10(%ebp) - 103b: 68 e8 49 00 00 push $0x49e8 - 1040: 6a 01 push $0x1 - 1042: e8 e7 2f 00 00 call 402e - 1047: 83 c4 10 add $0x10,%esp - exit(); - 104a: e8 6a 2e 00 00 call 3eb9 - } -} - 104f: c9 leave - 1050: c3 ret - -00001051 : - -// four processes write different files at the same -// time, to test block allocation. -void -fourfiles(void) -{ - 1051: 55 push %ebp - 1052: 89 e5 mov %esp,%ebp - 1054: 83 ec 38 sub $0x38,%esp - int fd, pid, i, j, n, total, pi; - char *names[] = { "f0", "f1", "f2", "f3" }; - 1057: c7 45 c8 fd 49 00 00 movl $0x49fd,-0x38(%ebp) - 105e: c7 45 cc 00 4a 00 00 movl $0x4a00,-0x34(%ebp) - 1065: c7 45 d0 03 4a 00 00 movl $0x4a03,-0x30(%ebp) - 106c: c7 45 d4 06 4a 00 00 movl $0x4a06,-0x2c(%ebp) - char *fname; - - printf(1, "fourfiles test\n"); - 1073: 83 ec 08 sub $0x8,%esp - 1076: 68 09 4a 00 00 push $0x4a09 - 107b: 6a 01 push $0x1 - 107d: e8 ac 2f 00 00 call 402e - 1082: 83 c4 10 add $0x10,%esp - - for(pi = 0; pi < 4; pi++){ - 1085: c7 45 e8 00 00 00 00 movl $0x0,-0x18(%ebp) - 108c: e9 f0 00 00 00 jmp 1181 - fname = names[pi]; - 1091: 8b 45 e8 mov -0x18(%ebp),%eax - 1094: 8b 44 85 c8 mov -0x38(%ebp,%eax,4),%eax - 1098: 89 45 e4 mov %eax,-0x1c(%ebp) - unlink(fname); - 109b: 83 ec 0c sub $0xc,%esp - 109e: ff 75 e4 pushl -0x1c(%ebp) - 10a1: e8 63 2e 00 00 call 3f09 - 10a6: 83 c4 10 add $0x10,%esp - - pid = fork(); - 10a9: e8 03 2e 00 00 call 3eb1 - 10ae: 89 45 e0 mov %eax,-0x20(%ebp) - if(pid < 0){ - 10b1: 83 7d e0 00 cmpl $0x0,-0x20(%ebp) - 10b5: 79 17 jns 10ce - printf(1, "fork failed\n"); - 10b7: 83 ec 08 sub $0x8,%esp - 10ba: 68 85 44 00 00 push $0x4485 - 10bf: 6a 01 push $0x1 - 10c1: e8 68 2f 00 00 call 402e - 10c6: 83 c4 10 add $0x10,%esp - exit(); - 10c9: e8 eb 2d 00 00 call 3eb9 - } - - if(pid == 0){ - 10ce: 83 7d e0 00 cmpl $0x0,-0x20(%ebp) - 10d2: 0f 85 a5 00 00 00 jne 117d - fd = open(fname, O_CREATE | O_RDWR); - 10d8: 83 ec 08 sub $0x8,%esp - 10db: 68 02 02 00 00 push $0x202 - 10e0: ff 75 e4 pushl -0x1c(%ebp) - 10e3: e8 11 2e 00 00 call 3ef9 - 10e8: 83 c4 10 add $0x10,%esp - 10eb: 89 45 dc mov %eax,-0x24(%ebp) - if(fd < 0){ - 10ee: 83 7d dc 00 cmpl $0x0,-0x24(%ebp) - 10f2: 79 17 jns 110b - printf(1, "create failed\n"); - 10f4: 83 ec 08 sub $0x8,%esp - 10f7: 68 19 4a 00 00 push $0x4a19 - 10fc: 6a 01 push $0x1 - 10fe: e8 2b 2f 00 00 call 402e - 1103: 83 c4 10 add $0x10,%esp - exit(); - 1106: e8 ae 2d 00 00 call 3eb9 - } - - memset(buf, '0'+pi, 512); - 110b: 8b 45 e8 mov -0x18(%ebp),%eax - 110e: 83 c0 30 add $0x30,%eax - 1111: 83 ec 04 sub $0x4,%esp - 1114: 68 00 02 00 00 push $0x200 - 1119: 50 push %eax - 111a: 68 c0 8a 00 00 push $0x8ac0 - 111f: e8 fb 2b 00 00 call 3d1f - 1124: 83 c4 10 add $0x10,%esp - for(i = 0; i < 12; i++){ - 1127: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 112e: eb 42 jmp 1172 - if((n = write(fd, buf, 500)) != 500){ - 1130: 83 ec 04 sub $0x4,%esp - 1133: 68 f4 01 00 00 push $0x1f4 - 1138: 68 c0 8a 00 00 push $0x8ac0 - 113d: ff 75 dc pushl -0x24(%ebp) - 1140: e8 94 2d 00 00 call 3ed9 - 1145: 83 c4 10 add $0x10,%esp - 1148: 89 45 d8 mov %eax,-0x28(%ebp) - 114b: 81 7d d8 f4 01 00 00 cmpl $0x1f4,-0x28(%ebp) - 1152: 74 1a je 116e - printf(1, "write failed %d\n", n); - 1154: 83 ec 04 sub $0x4,%esp - 1157: ff 75 d8 pushl -0x28(%ebp) - 115a: 68 28 4a 00 00 push $0x4a28 - 115f: 6a 01 push $0x1 - 1161: e8 c8 2e 00 00 call 402e - 1166: 83 c4 10 add $0x10,%esp - exit(); - 1169: e8 4b 2d 00 00 call 3eb9 - printf(1, "create failed\n"); - exit(); - } - - memset(buf, '0'+pi, 512); - for(i = 0; i < 12; i++){ - 116e: 83 45 f4 01 addl $0x1,-0xc(%ebp) - 1172: 83 7d f4 0b cmpl $0xb,-0xc(%ebp) - 1176: 7e b8 jle 1130 - if((n = write(fd, buf, 500)) != 500){ - printf(1, "write failed %d\n", n); - exit(); - } - } - exit(); - 1178: e8 3c 2d 00 00 call 3eb9 - char *names[] = { "f0", "f1", "f2", "f3" }; - char *fname; - - printf(1, "fourfiles test\n"); - - for(pi = 0; pi < 4; pi++){ - 117d: 83 45 e8 01 addl $0x1,-0x18(%ebp) - 1181: 83 7d e8 03 cmpl $0x3,-0x18(%ebp) - 1185: 0f 8e 06 ff ff ff jle 1091 - } - exit(); - } - } - - for(pi = 0; pi < 4; pi++){ - 118b: c7 45 e8 00 00 00 00 movl $0x0,-0x18(%ebp) - 1192: eb 09 jmp 119d - wait(); - 1194: e8 28 2d 00 00 call 3ec1 - } - exit(); - } - } - - for(pi = 0; pi < 4; pi++){ - 1199: 83 45 e8 01 addl $0x1,-0x18(%ebp) - 119d: 83 7d e8 03 cmpl $0x3,-0x18(%ebp) - 11a1: 7e f1 jle 1194 - wait(); - } - - for(i = 0; i < 2; i++){ - 11a3: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 11aa: e9 d4 00 00 00 jmp 1283 - fname = names[i]; - 11af: 8b 45 f4 mov -0xc(%ebp),%eax - 11b2: 8b 44 85 c8 mov -0x38(%ebp,%eax,4),%eax - 11b6: 89 45 e4 mov %eax,-0x1c(%ebp) - fd = open(fname, 0); - 11b9: 83 ec 08 sub $0x8,%esp - 11bc: 6a 00 push $0x0 - 11be: ff 75 e4 pushl -0x1c(%ebp) - 11c1: e8 33 2d 00 00 call 3ef9 - 11c6: 83 c4 10 add $0x10,%esp - 11c9: 89 45 dc mov %eax,-0x24(%ebp) - total = 0; - 11cc: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - while((n = read(fd, buf, sizeof(buf))) > 0){ - 11d3: eb 4a jmp 121f - for(j = 0; j < n; j++){ - 11d5: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - 11dc: eb 33 jmp 1211 - if(buf[j] != '0'+i){ - 11de: 8b 45 f0 mov -0x10(%ebp),%eax - 11e1: 05 c0 8a 00 00 add $0x8ac0,%eax - 11e6: 0f b6 00 movzbl (%eax),%eax - 11e9: 0f be c0 movsbl %al,%eax - 11ec: 8b 55 f4 mov -0xc(%ebp),%edx - 11ef: 83 c2 30 add $0x30,%edx - 11f2: 39 d0 cmp %edx,%eax - 11f4: 74 17 je 120d - printf(1, "wrong char\n"); - 11f6: 83 ec 08 sub $0x8,%esp - 11f9: 68 39 4a 00 00 push $0x4a39 - 11fe: 6a 01 push $0x1 - 1200: e8 29 2e 00 00 call 402e - 1205: 83 c4 10 add $0x10,%esp - exit(); - 1208: e8 ac 2c 00 00 call 3eb9 - for(i = 0; i < 2; i++){ - fname = names[i]; - fd = open(fname, 0); - total = 0; - while((n = read(fd, buf, sizeof(buf))) > 0){ - for(j = 0; j < n; j++){ - 120d: 83 45 f0 01 addl $0x1,-0x10(%ebp) - 1211: 8b 45 f0 mov -0x10(%ebp),%eax - 1214: 3b 45 d8 cmp -0x28(%ebp),%eax - 1217: 7c c5 jl 11de - if(buf[j] != '0'+i){ - printf(1, "wrong char\n"); - exit(); - } - } - total += n; - 1219: 8b 45 d8 mov -0x28(%ebp),%eax - 121c: 01 45 ec add %eax,-0x14(%ebp) - - for(i = 0; i < 2; i++){ - fname = names[i]; - fd = open(fname, 0); - total = 0; - while((n = read(fd, buf, sizeof(buf))) > 0){ - 121f: 83 ec 04 sub $0x4,%esp - 1222: 68 00 20 00 00 push $0x2000 - 1227: 68 c0 8a 00 00 push $0x8ac0 - 122c: ff 75 dc pushl -0x24(%ebp) - 122f: e8 9d 2c 00 00 call 3ed1 - 1234: 83 c4 10 add $0x10,%esp - 1237: 89 45 d8 mov %eax,-0x28(%ebp) - 123a: 83 7d d8 00 cmpl $0x0,-0x28(%ebp) - 123e: 7f 95 jg 11d5 - exit(); - } - } - total += n; - } - close(fd); - 1240: 83 ec 0c sub $0xc,%esp - 1243: ff 75 dc pushl -0x24(%ebp) - 1246: e8 96 2c 00 00 call 3ee1 - 124b: 83 c4 10 add $0x10,%esp - if(total != 12*500){ - 124e: 81 7d ec 70 17 00 00 cmpl $0x1770,-0x14(%ebp) - 1255: 74 1a je 1271 - printf(1, "wrong length %d\n", total); - 1257: 83 ec 04 sub $0x4,%esp - 125a: ff 75 ec pushl -0x14(%ebp) - 125d: 68 45 4a 00 00 push $0x4a45 - 1262: 6a 01 push $0x1 - 1264: e8 c5 2d 00 00 call 402e - 1269: 83 c4 10 add $0x10,%esp - exit(); - 126c: e8 48 2c 00 00 call 3eb9 - } - unlink(fname); - 1271: 83 ec 0c sub $0xc,%esp - 1274: ff 75 e4 pushl -0x1c(%ebp) - 1277: e8 8d 2c 00 00 call 3f09 - 127c: 83 c4 10 add $0x10,%esp - - for(pi = 0; pi < 4; pi++){ - wait(); - } - - for(i = 0; i < 2; i++){ - 127f: 83 45 f4 01 addl $0x1,-0xc(%ebp) - 1283: 83 7d f4 01 cmpl $0x1,-0xc(%ebp) - 1287: 0f 8e 22 ff ff ff jle 11af - exit(); - } - unlink(fname); - } - - printf(1, "fourfiles ok\n"); - 128d: 83 ec 08 sub $0x8,%esp - 1290: 68 56 4a 00 00 push $0x4a56 - 1295: 6a 01 push $0x1 - 1297: e8 92 2d 00 00 call 402e - 129c: 83 c4 10 add $0x10,%esp -} - 129f: c9 leave - 12a0: c3 ret - -000012a1 : - -// four processes create and delete different files in same directory -void -createdelete(void) -{ - 12a1: 55 push %ebp - 12a2: 89 e5 mov %esp,%ebp - 12a4: 83 ec 38 sub $0x38,%esp - enum { N = 20 }; - int pid, i, fd, pi; - char name[32]; - - printf(1, "createdelete test\n"); - 12a7: 83 ec 08 sub $0x8,%esp - 12aa: 68 64 4a 00 00 push $0x4a64 - 12af: 6a 01 push $0x1 - 12b1: e8 78 2d 00 00 call 402e - 12b6: 83 c4 10 add $0x10,%esp - - for(pi = 0; pi < 4; pi++){ - 12b9: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - 12c0: e9 f6 00 00 00 jmp 13bb - pid = fork(); - 12c5: e8 e7 2b 00 00 call 3eb1 - 12ca: 89 45 ec mov %eax,-0x14(%ebp) - if(pid < 0){ - 12cd: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 12d1: 79 17 jns 12ea - printf(1, "fork failed\n"); - 12d3: 83 ec 08 sub $0x8,%esp - 12d6: 68 85 44 00 00 push $0x4485 - 12db: 6a 01 push $0x1 - 12dd: e8 4c 2d 00 00 call 402e - 12e2: 83 c4 10 add $0x10,%esp - exit(); - 12e5: e8 cf 2b 00 00 call 3eb9 - } - - if(pid == 0){ - 12ea: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 12ee: 0f 85 c3 00 00 00 jne 13b7 - name[0] = 'p' + pi; - 12f4: 8b 45 f0 mov -0x10(%ebp),%eax - 12f7: 83 c0 70 add $0x70,%eax - 12fa: 88 45 c8 mov %al,-0x38(%ebp) - name[2] = '\0'; - 12fd: c6 45 ca 00 movb $0x0,-0x36(%ebp) - for(i = 0; i < N; i++){ - 1301: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 1308: e9 9b 00 00 00 jmp 13a8 - name[1] = '0' + i; - 130d: 8b 45 f4 mov -0xc(%ebp),%eax - 1310: 83 c0 30 add $0x30,%eax - 1313: 88 45 c9 mov %al,-0x37(%ebp) - fd = open(name, O_CREATE | O_RDWR); - 1316: 83 ec 08 sub $0x8,%esp - 1319: 68 02 02 00 00 push $0x202 - 131e: 8d 45 c8 lea -0x38(%ebp),%eax - 1321: 50 push %eax - 1322: e8 d2 2b 00 00 call 3ef9 - 1327: 83 c4 10 add $0x10,%esp - 132a: 89 45 e8 mov %eax,-0x18(%ebp) - if(fd < 0){ - 132d: 83 7d e8 00 cmpl $0x0,-0x18(%ebp) - 1331: 79 17 jns 134a - printf(1, "create failed\n"); - 1333: 83 ec 08 sub $0x8,%esp - 1336: 68 19 4a 00 00 push $0x4a19 - 133b: 6a 01 push $0x1 - 133d: e8 ec 2c 00 00 call 402e - 1342: 83 c4 10 add $0x10,%esp - exit(); - 1345: e8 6f 2b 00 00 call 3eb9 - } - close(fd); - 134a: 83 ec 0c sub $0xc,%esp - 134d: ff 75 e8 pushl -0x18(%ebp) - 1350: e8 8c 2b 00 00 call 3ee1 - 1355: 83 c4 10 add $0x10,%esp - if(i > 0 && (i % 2 ) == 0){ - 1358: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 135c: 7e 46 jle 13a4 - 135e: 8b 45 f4 mov -0xc(%ebp),%eax - 1361: 83 e0 01 and $0x1,%eax - 1364: 85 c0 test %eax,%eax - 1366: 75 3c jne 13a4 - name[1] = '0' + (i / 2); - 1368: 8b 45 f4 mov -0xc(%ebp),%eax - 136b: 89 c2 mov %eax,%edx - 136d: c1 ea 1f shr $0x1f,%edx - 1370: 01 d0 add %edx,%eax - 1372: d1 f8 sar %eax - 1374: 83 c0 30 add $0x30,%eax - 1377: 88 45 c9 mov %al,-0x37(%ebp) - if(unlink(name) < 0){ - 137a: 83 ec 0c sub $0xc,%esp - 137d: 8d 45 c8 lea -0x38(%ebp),%eax - 1380: 50 push %eax - 1381: e8 83 2b 00 00 call 3f09 - 1386: 83 c4 10 add $0x10,%esp - 1389: 85 c0 test %eax,%eax - 138b: 79 17 jns 13a4 - printf(1, "unlink failed\n"); - 138d: 83 ec 08 sub $0x8,%esp - 1390: 68 08 45 00 00 push $0x4508 - 1395: 6a 01 push $0x1 - 1397: e8 92 2c 00 00 call 402e - 139c: 83 c4 10 add $0x10,%esp - exit(); - 139f: e8 15 2b 00 00 call 3eb9 - } - - if(pid == 0){ - name[0] = 'p' + pi; - name[2] = '\0'; - for(i = 0; i < N; i++){ - 13a4: 83 45 f4 01 addl $0x1,-0xc(%ebp) - 13a8: 83 7d f4 13 cmpl $0x13,-0xc(%ebp) - 13ac: 0f 8e 5b ff ff ff jle 130d - printf(1, "unlink failed\n"); - exit(); - } - } - } - exit(); - 13b2: e8 02 2b 00 00 call 3eb9 - int pid, i, fd, pi; - char name[32]; - - printf(1, "createdelete test\n"); - - for(pi = 0; pi < 4; pi++){ - 13b7: 83 45 f0 01 addl $0x1,-0x10(%ebp) - 13bb: 83 7d f0 03 cmpl $0x3,-0x10(%ebp) - 13bf: 0f 8e 00 ff ff ff jle 12c5 - } - exit(); - } - } - - for(pi = 0; pi < 4; pi++){ - 13c5: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - 13cc: eb 09 jmp 13d7 - wait(); - 13ce: e8 ee 2a 00 00 call 3ec1 - } - exit(); - } - } - - for(pi = 0; pi < 4; pi++){ - 13d3: 83 45 f0 01 addl $0x1,-0x10(%ebp) - 13d7: 83 7d f0 03 cmpl $0x3,-0x10(%ebp) - 13db: 7e f1 jle 13ce - wait(); - } - - name[0] = name[1] = name[2] = 0; - 13dd: c6 45 ca 00 movb $0x0,-0x36(%ebp) - 13e1: 0f b6 45 ca movzbl -0x36(%ebp),%eax - 13e5: 88 45 c9 mov %al,-0x37(%ebp) - 13e8: 0f b6 45 c9 movzbl -0x37(%ebp),%eax - 13ec: 88 45 c8 mov %al,-0x38(%ebp) - for(i = 0; i < N; i++){ - 13ef: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 13f6: e9 b2 00 00 00 jmp 14ad - for(pi = 0; pi < 4; pi++){ - 13fb: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - 1402: e9 98 00 00 00 jmp 149f - name[0] = 'p' + pi; - 1407: 8b 45 f0 mov -0x10(%ebp),%eax - 140a: 83 c0 70 add $0x70,%eax - 140d: 88 45 c8 mov %al,-0x38(%ebp) - name[1] = '0' + i; - 1410: 8b 45 f4 mov -0xc(%ebp),%eax - 1413: 83 c0 30 add $0x30,%eax - 1416: 88 45 c9 mov %al,-0x37(%ebp) - fd = open(name, 0); - 1419: 83 ec 08 sub $0x8,%esp - 141c: 6a 00 push $0x0 - 141e: 8d 45 c8 lea -0x38(%ebp),%eax - 1421: 50 push %eax - 1422: e8 d2 2a 00 00 call 3ef9 - 1427: 83 c4 10 add $0x10,%esp - 142a: 89 45 e8 mov %eax,-0x18(%ebp) - if((i == 0 || i >= N/2) && fd < 0){ - 142d: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 1431: 74 06 je 1439 - 1433: 83 7d f4 09 cmpl $0x9,-0xc(%ebp) - 1437: 7e 21 jle 145a - 1439: 83 7d e8 00 cmpl $0x0,-0x18(%ebp) - 143d: 79 1b jns 145a - printf(1, "oops createdelete %s didn't exist\n", name); - 143f: 83 ec 04 sub $0x4,%esp - 1442: 8d 45 c8 lea -0x38(%ebp),%eax - 1445: 50 push %eax - 1446: 68 78 4a 00 00 push $0x4a78 - 144b: 6a 01 push $0x1 - 144d: e8 dc 2b 00 00 call 402e - 1452: 83 c4 10 add $0x10,%esp - exit(); - 1455: e8 5f 2a 00 00 call 3eb9 - } else if((i >= 1 && i < N/2) && fd >= 0){ - 145a: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 145e: 7e 27 jle 1487 - 1460: 83 7d f4 09 cmpl $0x9,-0xc(%ebp) - 1464: 7f 21 jg 1487 - 1466: 83 7d e8 00 cmpl $0x0,-0x18(%ebp) - 146a: 78 1b js 1487 - printf(1, "oops createdelete %s did exist\n", name); - 146c: 83 ec 04 sub $0x4,%esp - 146f: 8d 45 c8 lea -0x38(%ebp),%eax - 1472: 50 push %eax - 1473: 68 9c 4a 00 00 push $0x4a9c - 1478: 6a 01 push $0x1 - 147a: e8 af 2b 00 00 call 402e - 147f: 83 c4 10 add $0x10,%esp - exit(); - 1482: e8 32 2a 00 00 call 3eb9 - } - if(fd >= 0) - 1487: 83 7d e8 00 cmpl $0x0,-0x18(%ebp) - 148b: 78 0e js 149b - close(fd); - 148d: 83 ec 0c sub $0xc,%esp - 1490: ff 75 e8 pushl -0x18(%ebp) - 1493: e8 49 2a 00 00 call 3ee1 - 1498: 83 c4 10 add $0x10,%esp - wait(); - } - - name[0] = name[1] = name[2] = 0; - for(i = 0; i < N; i++){ - for(pi = 0; pi < 4; pi++){ - 149b: 83 45 f0 01 addl $0x1,-0x10(%ebp) - 149f: 83 7d f0 03 cmpl $0x3,-0x10(%ebp) - 14a3: 0f 8e 5e ff ff ff jle 1407 - for(pi = 0; pi < 4; pi++){ - wait(); - } - - name[0] = name[1] = name[2] = 0; - for(i = 0; i < N; i++){ - 14a9: 83 45 f4 01 addl $0x1,-0xc(%ebp) - 14ad: 83 7d f4 13 cmpl $0x13,-0xc(%ebp) - 14b1: 0f 8e 44 ff ff ff jle 13fb - if(fd >= 0) - close(fd); - } - } - - for(i = 0; i < N; i++){ - 14b7: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 14be: eb 38 jmp 14f8 - for(pi = 0; pi < 4; pi++){ - 14c0: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - 14c7: eb 25 jmp 14ee - name[0] = 'p' + i; - 14c9: 8b 45 f4 mov -0xc(%ebp),%eax - 14cc: 83 c0 70 add $0x70,%eax - 14cf: 88 45 c8 mov %al,-0x38(%ebp) - name[1] = '0' + i; - 14d2: 8b 45 f4 mov -0xc(%ebp),%eax - 14d5: 83 c0 30 add $0x30,%eax - 14d8: 88 45 c9 mov %al,-0x37(%ebp) - unlink(name); - 14db: 83 ec 0c sub $0xc,%esp - 14de: 8d 45 c8 lea -0x38(%ebp),%eax - 14e1: 50 push %eax - 14e2: e8 22 2a 00 00 call 3f09 - 14e7: 83 c4 10 add $0x10,%esp - close(fd); - } - } - - for(i = 0; i < N; i++){ - for(pi = 0; pi < 4; pi++){ - 14ea: 83 45 f0 01 addl $0x1,-0x10(%ebp) - 14ee: 83 7d f0 03 cmpl $0x3,-0x10(%ebp) - 14f2: 7e d5 jle 14c9 - if(fd >= 0) - close(fd); - } - } - - for(i = 0; i < N; i++){ - 14f4: 83 45 f4 01 addl $0x1,-0xc(%ebp) - 14f8: 83 7d f4 13 cmpl $0x13,-0xc(%ebp) - 14fc: 7e c2 jle 14c0 - name[1] = '0' + i; - unlink(name); - } - } - - printf(1, "createdelete ok\n"); - 14fe: 83 ec 08 sub $0x8,%esp - 1501: 68 bc 4a 00 00 push $0x4abc - 1506: 6a 01 push $0x1 - 1508: e8 21 2b 00 00 call 402e - 150d: 83 c4 10 add $0x10,%esp -} - 1510: c9 leave - 1511: c3 ret - -00001512 : - -// can I unlink a file and still read it? -void -unlinkread(void) -{ - 1512: 55 push %ebp - 1513: 89 e5 mov %esp,%ebp - 1515: 83 ec 18 sub $0x18,%esp - int fd, fd1; - - printf(1, "unlinkread test\n"); - 1518: 83 ec 08 sub $0x8,%esp - 151b: 68 cd 4a 00 00 push $0x4acd - 1520: 6a 01 push $0x1 - 1522: e8 07 2b 00 00 call 402e - 1527: 83 c4 10 add $0x10,%esp - fd = open("unlinkread", O_CREATE | O_RDWR); - 152a: 83 ec 08 sub $0x8,%esp - 152d: 68 02 02 00 00 push $0x202 - 1532: 68 de 4a 00 00 push $0x4ade - 1537: e8 bd 29 00 00 call 3ef9 - 153c: 83 c4 10 add $0x10,%esp - 153f: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd < 0){ - 1542: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 1546: 79 17 jns 155f - printf(1, "create unlinkread failed\n"); - 1548: 83 ec 08 sub $0x8,%esp - 154b: 68 e9 4a 00 00 push $0x4ae9 - 1550: 6a 01 push $0x1 - 1552: e8 d7 2a 00 00 call 402e - 1557: 83 c4 10 add $0x10,%esp - exit(); - 155a: e8 5a 29 00 00 call 3eb9 - } - write(fd, "hello", 5); - 155f: 83 ec 04 sub $0x4,%esp - 1562: 6a 05 push $0x5 - 1564: 68 03 4b 00 00 push $0x4b03 - 1569: ff 75 f4 pushl -0xc(%ebp) - 156c: e8 68 29 00 00 call 3ed9 - 1571: 83 c4 10 add $0x10,%esp - close(fd); - 1574: 83 ec 0c sub $0xc,%esp - 1577: ff 75 f4 pushl -0xc(%ebp) - 157a: e8 62 29 00 00 call 3ee1 - 157f: 83 c4 10 add $0x10,%esp - - fd = open("unlinkread", O_RDWR); - 1582: 83 ec 08 sub $0x8,%esp - 1585: 6a 02 push $0x2 - 1587: 68 de 4a 00 00 push $0x4ade - 158c: e8 68 29 00 00 call 3ef9 - 1591: 83 c4 10 add $0x10,%esp - 1594: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd < 0){ - 1597: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 159b: 79 17 jns 15b4 - printf(1, "open unlinkread failed\n"); - 159d: 83 ec 08 sub $0x8,%esp - 15a0: 68 09 4b 00 00 push $0x4b09 - 15a5: 6a 01 push $0x1 - 15a7: e8 82 2a 00 00 call 402e - 15ac: 83 c4 10 add $0x10,%esp - exit(); - 15af: e8 05 29 00 00 call 3eb9 - } - if(unlink("unlinkread") != 0){ - 15b4: 83 ec 0c sub $0xc,%esp - 15b7: 68 de 4a 00 00 push $0x4ade - 15bc: e8 48 29 00 00 call 3f09 - 15c1: 83 c4 10 add $0x10,%esp - 15c4: 85 c0 test %eax,%eax - 15c6: 74 17 je 15df - printf(1, "unlink unlinkread failed\n"); - 15c8: 83 ec 08 sub $0x8,%esp - 15cb: 68 21 4b 00 00 push $0x4b21 - 15d0: 6a 01 push $0x1 - 15d2: e8 57 2a 00 00 call 402e - 15d7: 83 c4 10 add $0x10,%esp - exit(); - 15da: e8 da 28 00 00 call 3eb9 - } - - fd1 = open("unlinkread", O_CREATE | O_RDWR); - 15df: 83 ec 08 sub $0x8,%esp - 15e2: 68 02 02 00 00 push $0x202 - 15e7: 68 de 4a 00 00 push $0x4ade - 15ec: e8 08 29 00 00 call 3ef9 - 15f1: 83 c4 10 add $0x10,%esp - 15f4: 89 45 f0 mov %eax,-0x10(%ebp) - write(fd1, "yyy", 3); - 15f7: 83 ec 04 sub $0x4,%esp - 15fa: 6a 03 push $0x3 - 15fc: 68 3b 4b 00 00 push $0x4b3b - 1601: ff 75 f0 pushl -0x10(%ebp) - 1604: e8 d0 28 00 00 call 3ed9 - 1609: 83 c4 10 add $0x10,%esp - close(fd1); - 160c: 83 ec 0c sub $0xc,%esp - 160f: ff 75 f0 pushl -0x10(%ebp) - 1612: e8 ca 28 00 00 call 3ee1 - 1617: 83 c4 10 add $0x10,%esp - - if(read(fd, buf, sizeof(buf)) != 5){ - 161a: 83 ec 04 sub $0x4,%esp - 161d: 68 00 20 00 00 push $0x2000 - 1622: 68 c0 8a 00 00 push $0x8ac0 - 1627: ff 75 f4 pushl -0xc(%ebp) - 162a: e8 a2 28 00 00 call 3ed1 - 162f: 83 c4 10 add $0x10,%esp - 1632: 83 f8 05 cmp $0x5,%eax - 1635: 74 17 je 164e - printf(1, "unlinkread read failed"); - 1637: 83 ec 08 sub $0x8,%esp - 163a: 68 3f 4b 00 00 push $0x4b3f - 163f: 6a 01 push $0x1 - 1641: e8 e8 29 00 00 call 402e - 1646: 83 c4 10 add $0x10,%esp - exit(); - 1649: e8 6b 28 00 00 call 3eb9 - } - if(buf[0] != 'h'){ - 164e: 0f b6 05 c0 8a 00 00 movzbl 0x8ac0,%eax - 1655: 3c 68 cmp $0x68,%al - 1657: 74 17 je 1670 - printf(1, "unlinkread wrong data\n"); - 1659: 83 ec 08 sub $0x8,%esp - 165c: 68 56 4b 00 00 push $0x4b56 - 1661: 6a 01 push $0x1 - 1663: e8 c6 29 00 00 call 402e - 1668: 83 c4 10 add $0x10,%esp - exit(); - 166b: e8 49 28 00 00 call 3eb9 - } - if(write(fd, buf, 10) != 10){ - 1670: 83 ec 04 sub $0x4,%esp - 1673: 6a 0a push $0xa - 1675: 68 c0 8a 00 00 push $0x8ac0 - 167a: ff 75 f4 pushl -0xc(%ebp) - 167d: e8 57 28 00 00 call 3ed9 - 1682: 83 c4 10 add $0x10,%esp - 1685: 83 f8 0a cmp $0xa,%eax - 1688: 74 17 je 16a1 - printf(1, "unlinkread write failed\n"); - 168a: 83 ec 08 sub $0x8,%esp - 168d: 68 6d 4b 00 00 push $0x4b6d - 1692: 6a 01 push $0x1 - 1694: e8 95 29 00 00 call 402e - 1699: 83 c4 10 add $0x10,%esp - exit(); - 169c: e8 18 28 00 00 call 3eb9 - } - close(fd); - 16a1: 83 ec 0c sub $0xc,%esp - 16a4: ff 75 f4 pushl -0xc(%ebp) - 16a7: e8 35 28 00 00 call 3ee1 - 16ac: 83 c4 10 add $0x10,%esp - unlink("unlinkread"); - 16af: 83 ec 0c sub $0xc,%esp - 16b2: 68 de 4a 00 00 push $0x4ade - 16b7: e8 4d 28 00 00 call 3f09 - 16bc: 83 c4 10 add $0x10,%esp - printf(1, "unlinkread ok\n"); - 16bf: 83 ec 08 sub $0x8,%esp - 16c2: 68 86 4b 00 00 push $0x4b86 - 16c7: 6a 01 push $0x1 - 16c9: e8 60 29 00 00 call 402e - 16ce: 83 c4 10 add $0x10,%esp -} - 16d1: c9 leave - 16d2: c3 ret - -000016d3 : - -void -linktest(void) -{ - 16d3: 55 push %ebp - 16d4: 89 e5 mov %esp,%ebp - 16d6: 83 ec 18 sub $0x18,%esp - int fd; - - printf(1, "linktest\n"); - 16d9: 83 ec 08 sub $0x8,%esp - 16dc: 68 95 4b 00 00 push $0x4b95 - 16e1: 6a 01 push $0x1 - 16e3: e8 46 29 00 00 call 402e - 16e8: 83 c4 10 add $0x10,%esp - - unlink("lf1"); - 16eb: 83 ec 0c sub $0xc,%esp - 16ee: 68 9f 4b 00 00 push $0x4b9f - 16f3: e8 11 28 00 00 call 3f09 - 16f8: 83 c4 10 add $0x10,%esp - unlink("lf2"); - 16fb: 83 ec 0c sub $0xc,%esp - 16fe: 68 a3 4b 00 00 push $0x4ba3 - 1703: e8 01 28 00 00 call 3f09 - 1708: 83 c4 10 add $0x10,%esp - - fd = open("lf1", O_CREATE|O_RDWR); - 170b: 83 ec 08 sub $0x8,%esp - 170e: 68 02 02 00 00 push $0x202 - 1713: 68 9f 4b 00 00 push $0x4b9f - 1718: e8 dc 27 00 00 call 3ef9 - 171d: 83 c4 10 add $0x10,%esp - 1720: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd < 0){ - 1723: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 1727: 79 17 jns 1740 - printf(1, "create lf1 failed\n"); - 1729: 83 ec 08 sub $0x8,%esp - 172c: 68 a7 4b 00 00 push $0x4ba7 - 1731: 6a 01 push $0x1 - 1733: e8 f6 28 00 00 call 402e - 1738: 83 c4 10 add $0x10,%esp - exit(); - 173b: e8 79 27 00 00 call 3eb9 - } - if(write(fd, "hello", 5) != 5){ - 1740: 83 ec 04 sub $0x4,%esp - 1743: 6a 05 push $0x5 - 1745: 68 03 4b 00 00 push $0x4b03 - 174a: ff 75 f4 pushl -0xc(%ebp) - 174d: e8 87 27 00 00 call 3ed9 - 1752: 83 c4 10 add $0x10,%esp - 1755: 83 f8 05 cmp $0x5,%eax - 1758: 74 17 je 1771 - printf(1, "write lf1 failed\n"); - 175a: 83 ec 08 sub $0x8,%esp - 175d: 68 ba 4b 00 00 push $0x4bba - 1762: 6a 01 push $0x1 - 1764: e8 c5 28 00 00 call 402e - 1769: 83 c4 10 add $0x10,%esp - exit(); - 176c: e8 48 27 00 00 call 3eb9 - } - close(fd); - 1771: 83 ec 0c sub $0xc,%esp - 1774: ff 75 f4 pushl -0xc(%ebp) - 1777: e8 65 27 00 00 call 3ee1 - 177c: 83 c4 10 add $0x10,%esp - - if(link("lf1", "lf2") < 0){ - 177f: 83 ec 08 sub $0x8,%esp - 1782: 68 a3 4b 00 00 push $0x4ba3 - 1787: 68 9f 4b 00 00 push $0x4b9f - 178c: e8 88 27 00 00 call 3f19 - 1791: 83 c4 10 add $0x10,%esp - 1794: 85 c0 test %eax,%eax - 1796: 79 17 jns 17af - printf(1, "link lf1 lf2 failed\n"); - 1798: 83 ec 08 sub $0x8,%esp - 179b: 68 cc 4b 00 00 push $0x4bcc - 17a0: 6a 01 push $0x1 - 17a2: e8 87 28 00 00 call 402e - 17a7: 83 c4 10 add $0x10,%esp - exit(); - 17aa: e8 0a 27 00 00 call 3eb9 - } - unlink("lf1"); - 17af: 83 ec 0c sub $0xc,%esp - 17b2: 68 9f 4b 00 00 push $0x4b9f - 17b7: e8 4d 27 00 00 call 3f09 - 17bc: 83 c4 10 add $0x10,%esp - - if(open("lf1", 0) >= 0){ - 17bf: 83 ec 08 sub $0x8,%esp - 17c2: 6a 00 push $0x0 - 17c4: 68 9f 4b 00 00 push $0x4b9f - 17c9: e8 2b 27 00 00 call 3ef9 - 17ce: 83 c4 10 add $0x10,%esp - 17d1: 85 c0 test %eax,%eax - 17d3: 78 17 js 17ec - printf(1, "unlinked lf1 but it is still there!\n"); - 17d5: 83 ec 08 sub $0x8,%esp - 17d8: 68 e4 4b 00 00 push $0x4be4 - 17dd: 6a 01 push $0x1 - 17df: e8 4a 28 00 00 call 402e - 17e4: 83 c4 10 add $0x10,%esp - exit(); - 17e7: e8 cd 26 00 00 call 3eb9 - } - - fd = open("lf2", 0); - 17ec: 83 ec 08 sub $0x8,%esp - 17ef: 6a 00 push $0x0 - 17f1: 68 a3 4b 00 00 push $0x4ba3 - 17f6: e8 fe 26 00 00 call 3ef9 - 17fb: 83 c4 10 add $0x10,%esp - 17fe: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd < 0){ - 1801: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 1805: 79 17 jns 181e - printf(1, "open lf2 failed\n"); - 1807: 83 ec 08 sub $0x8,%esp - 180a: 68 09 4c 00 00 push $0x4c09 - 180f: 6a 01 push $0x1 - 1811: e8 18 28 00 00 call 402e - 1816: 83 c4 10 add $0x10,%esp - exit(); - 1819: e8 9b 26 00 00 call 3eb9 - } - if(read(fd, buf, sizeof(buf)) != 5){ - 181e: 83 ec 04 sub $0x4,%esp - 1821: 68 00 20 00 00 push $0x2000 - 1826: 68 c0 8a 00 00 push $0x8ac0 - 182b: ff 75 f4 pushl -0xc(%ebp) - 182e: e8 9e 26 00 00 call 3ed1 - 1833: 83 c4 10 add $0x10,%esp - 1836: 83 f8 05 cmp $0x5,%eax - 1839: 74 17 je 1852 - printf(1, "read lf2 failed\n"); - 183b: 83 ec 08 sub $0x8,%esp - 183e: 68 1a 4c 00 00 push $0x4c1a - 1843: 6a 01 push $0x1 - 1845: e8 e4 27 00 00 call 402e - 184a: 83 c4 10 add $0x10,%esp - exit(); - 184d: e8 67 26 00 00 call 3eb9 - } - close(fd); - 1852: 83 ec 0c sub $0xc,%esp - 1855: ff 75 f4 pushl -0xc(%ebp) - 1858: e8 84 26 00 00 call 3ee1 - 185d: 83 c4 10 add $0x10,%esp - - if(link("lf2", "lf2") >= 0){ - 1860: 83 ec 08 sub $0x8,%esp - 1863: 68 a3 4b 00 00 push $0x4ba3 - 1868: 68 a3 4b 00 00 push $0x4ba3 - 186d: e8 a7 26 00 00 call 3f19 - 1872: 83 c4 10 add $0x10,%esp - 1875: 85 c0 test %eax,%eax - 1877: 78 17 js 1890 - printf(1, "link lf2 lf2 succeeded! oops\n"); - 1879: 83 ec 08 sub $0x8,%esp - 187c: 68 2b 4c 00 00 push $0x4c2b - 1881: 6a 01 push $0x1 - 1883: e8 a6 27 00 00 call 402e - 1888: 83 c4 10 add $0x10,%esp - exit(); - 188b: e8 29 26 00 00 call 3eb9 - } - - unlink("lf2"); - 1890: 83 ec 0c sub $0xc,%esp - 1893: 68 a3 4b 00 00 push $0x4ba3 - 1898: e8 6c 26 00 00 call 3f09 - 189d: 83 c4 10 add $0x10,%esp - if(link("lf2", "lf1") >= 0){ - 18a0: 83 ec 08 sub $0x8,%esp - 18a3: 68 9f 4b 00 00 push $0x4b9f - 18a8: 68 a3 4b 00 00 push $0x4ba3 - 18ad: e8 67 26 00 00 call 3f19 - 18b2: 83 c4 10 add $0x10,%esp - 18b5: 85 c0 test %eax,%eax - 18b7: 78 17 js 18d0 - printf(1, "link non-existant succeeded! oops\n"); - 18b9: 83 ec 08 sub $0x8,%esp - 18bc: 68 4c 4c 00 00 push $0x4c4c - 18c1: 6a 01 push $0x1 - 18c3: e8 66 27 00 00 call 402e - 18c8: 83 c4 10 add $0x10,%esp - exit(); - 18cb: e8 e9 25 00 00 call 3eb9 - } - - if(link(".", "lf1") >= 0){ - 18d0: 83 ec 08 sub $0x8,%esp - 18d3: 68 9f 4b 00 00 push $0x4b9f - 18d8: 68 6f 4c 00 00 push $0x4c6f - 18dd: e8 37 26 00 00 call 3f19 - 18e2: 83 c4 10 add $0x10,%esp - 18e5: 85 c0 test %eax,%eax - 18e7: 78 17 js 1900 - printf(1, "link . lf1 succeeded! oops\n"); - 18e9: 83 ec 08 sub $0x8,%esp - 18ec: 68 71 4c 00 00 push $0x4c71 - 18f1: 6a 01 push $0x1 - 18f3: e8 36 27 00 00 call 402e - 18f8: 83 c4 10 add $0x10,%esp - exit(); - 18fb: e8 b9 25 00 00 call 3eb9 - } - - printf(1, "linktest ok\n"); - 1900: 83 ec 08 sub $0x8,%esp - 1903: 68 8d 4c 00 00 push $0x4c8d - 1908: 6a 01 push $0x1 - 190a: e8 1f 27 00 00 call 402e - 190f: 83 c4 10 add $0x10,%esp -} - 1912: c9 leave - 1913: c3 ret - -00001914 : - -// test concurrent create/link/unlink of the same file -void -concreate(void) -{ - 1914: 55 push %ebp - 1915: 89 e5 mov %esp,%ebp - 1917: 83 ec 58 sub $0x58,%esp - struct { - ushort inum; - char name[14]; - } de; - - printf(1, "concreate test\n"); - 191a: 83 ec 08 sub $0x8,%esp - 191d: 68 9a 4c 00 00 push $0x4c9a - 1922: 6a 01 push $0x1 - 1924: e8 05 27 00 00 call 402e - 1929: 83 c4 10 add $0x10,%esp - file[0] = 'C'; - 192c: c6 45 e5 43 movb $0x43,-0x1b(%ebp) - file[2] = '\0'; - 1930: c6 45 e7 00 movb $0x0,-0x19(%ebp) - for(i = 0; i < 40; i++){ - 1934: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 193b: e9 fc 00 00 00 jmp 1a3c - file[1] = '0' + i; - 1940: 8b 45 f4 mov -0xc(%ebp),%eax - 1943: 83 c0 30 add $0x30,%eax - 1946: 88 45 e6 mov %al,-0x1a(%ebp) - unlink(file); - 1949: 83 ec 0c sub $0xc,%esp - 194c: 8d 45 e5 lea -0x1b(%ebp),%eax - 194f: 50 push %eax - 1950: e8 b4 25 00 00 call 3f09 - 1955: 83 c4 10 add $0x10,%esp - pid = fork(); - 1958: e8 54 25 00 00 call 3eb1 - 195d: 89 45 ec mov %eax,-0x14(%ebp) - if(pid && (i % 3) == 1){ - 1960: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 1964: 74 3b je 19a1 - 1966: 8b 4d f4 mov -0xc(%ebp),%ecx - 1969: ba 56 55 55 55 mov $0x55555556,%edx - 196e: 89 c8 mov %ecx,%eax - 1970: f7 ea imul %edx - 1972: 89 c8 mov %ecx,%eax - 1974: c1 f8 1f sar $0x1f,%eax - 1977: 29 c2 sub %eax,%edx - 1979: 89 d0 mov %edx,%eax - 197b: 01 c0 add %eax,%eax - 197d: 01 d0 add %edx,%eax - 197f: 29 c1 sub %eax,%ecx - 1981: 89 ca mov %ecx,%edx - 1983: 83 fa 01 cmp $0x1,%edx - 1986: 75 19 jne 19a1 - link("C0", file); - 1988: 83 ec 08 sub $0x8,%esp - 198b: 8d 45 e5 lea -0x1b(%ebp),%eax - 198e: 50 push %eax - 198f: 68 aa 4c 00 00 push $0x4caa - 1994: e8 80 25 00 00 call 3f19 - 1999: 83 c4 10 add $0x10,%esp - 199c: e9 87 00 00 00 jmp 1a28 - } else if(pid == 0 && (i % 5) == 1){ - 19a1: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 19a5: 75 3b jne 19e2 - 19a7: 8b 4d f4 mov -0xc(%ebp),%ecx - 19aa: ba 67 66 66 66 mov $0x66666667,%edx - 19af: 89 c8 mov %ecx,%eax - 19b1: f7 ea imul %edx - 19b3: d1 fa sar %edx - 19b5: 89 c8 mov %ecx,%eax - 19b7: c1 f8 1f sar $0x1f,%eax - 19ba: 29 c2 sub %eax,%edx - 19bc: 89 d0 mov %edx,%eax - 19be: c1 e0 02 shl $0x2,%eax - 19c1: 01 d0 add %edx,%eax - 19c3: 29 c1 sub %eax,%ecx - 19c5: 89 ca mov %ecx,%edx - 19c7: 83 fa 01 cmp $0x1,%edx - 19ca: 75 16 jne 19e2 - link("C0", file); - 19cc: 83 ec 08 sub $0x8,%esp - 19cf: 8d 45 e5 lea -0x1b(%ebp),%eax - 19d2: 50 push %eax - 19d3: 68 aa 4c 00 00 push $0x4caa - 19d8: e8 3c 25 00 00 call 3f19 - 19dd: 83 c4 10 add $0x10,%esp - 19e0: eb 46 jmp 1a28 - } else { - fd = open(file, O_CREATE | O_RDWR); - 19e2: 83 ec 08 sub $0x8,%esp - 19e5: 68 02 02 00 00 push $0x202 - 19ea: 8d 45 e5 lea -0x1b(%ebp),%eax - 19ed: 50 push %eax - 19ee: e8 06 25 00 00 call 3ef9 - 19f3: 83 c4 10 add $0x10,%esp - 19f6: 89 45 e8 mov %eax,-0x18(%ebp) - if(fd < 0){ - 19f9: 83 7d e8 00 cmpl $0x0,-0x18(%ebp) - 19fd: 79 1b jns 1a1a - printf(1, "concreate create %s failed\n", file); - 19ff: 83 ec 04 sub $0x4,%esp - 1a02: 8d 45 e5 lea -0x1b(%ebp),%eax - 1a05: 50 push %eax - 1a06: 68 ad 4c 00 00 push $0x4cad - 1a0b: 6a 01 push $0x1 - 1a0d: e8 1c 26 00 00 call 402e - 1a12: 83 c4 10 add $0x10,%esp - exit(); - 1a15: e8 9f 24 00 00 call 3eb9 - } - close(fd); - 1a1a: 83 ec 0c sub $0xc,%esp - 1a1d: ff 75 e8 pushl -0x18(%ebp) - 1a20: e8 bc 24 00 00 call 3ee1 - 1a25: 83 c4 10 add $0x10,%esp - } - if(pid == 0) - 1a28: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 1a2c: 75 05 jne 1a33 - exit(); - 1a2e: e8 86 24 00 00 call 3eb9 - else - wait(); - 1a33: e8 89 24 00 00 call 3ec1 - } de; - - printf(1, "concreate test\n"); - file[0] = 'C'; - file[2] = '\0'; - for(i = 0; i < 40; i++){ - 1a38: 83 45 f4 01 addl $0x1,-0xc(%ebp) - 1a3c: 83 7d f4 27 cmpl $0x27,-0xc(%ebp) - 1a40: 0f 8e fa fe ff ff jle 1940 - exit(); - else - wait(); - } - - memset(fa, 0, sizeof(fa)); - 1a46: 83 ec 04 sub $0x4,%esp - 1a49: 6a 28 push $0x28 - 1a4b: 6a 00 push $0x0 - 1a4d: 8d 45 bd lea -0x43(%ebp),%eax - 1a50: 50 push %eax - 1a51: e8 c9 22 00 00 call 3d1f - 1a56: 83 c4 10 add $0x10,%esp - fd = open(".", 0); - 1a59: 83 ec 08 sub $0x8,%esp - 1a5c: 6a 00 push $0x0 - 1a5e: 68 6f 4c 00 00 push $0x4c6f - 1a63: e8 91 24 00 00 call 3ef9 - 1a68: 83 c4 10 add $0x10,%esp - 1a6b: 89 45 e8 mov %eax,-0x18(%ebp) - n = 0; - 1a6e: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - while(read(fd, &de, sizeof(de)) > 0){ - 1a75: e9 93 00 00 00 jmp 1b0d - if(de.inum == 0) - 1a7a: 0f b7 45 ac movzwl -0x54(%ebp),%eax - 1a7e: 66 85 c0 test %ax,%ax - 1a81: 75 05 jne 1a88 - continue; - 1a83: e9 85 00 00 00 jmp 1b0d - if(de.name[0] == 'C' && de.name[2] == '\0'){ - 1a88: 0f b6 45 ae movzbl -0x52(%ebp),%eax - 1a8c: 3c 43 cmp $0x43,%al - 1a8e: 75 7d jne 1b0d - 1a90: 0f b6 45 b0 movzbl -0x50(%ebp),%eax - 1a94: 84 c0 test %al,%al - 1a96: 75 75 jne 1b0d - i = de.name[1] - '0'; - 1a98: 0f b6 45 af movzbl -0x51(%ebp),%eax - 1a9c: 0f be c0 movsbl %al,%eax - 1a9f: 83 e8 30 sub $0x30,%eax - 1aa2: 89 45 f4 mov %eax,-0xc(%ebp) - if(i < 0 || i >= sizeof(fa)){ - 1aa5: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 1aa9: 78 08 js 1ab3 - 1aab: 8b 45 f4 mov -0xc(%ebp),%eax - 1aae: 83 f8 27 cmp $0x27,%eax - 1ab1: 76 1e jbe 1ad1 - printf(1, "concreate weird file %s\n", de.name); - 1ab3: 83 ec 04 sub $0x4,%esp - 1ab6: 8d 45 ac lea -0x54(%ebp),%eax - 1ab9: 83 c0 02 add $0x2,%eax - 1abc: 50 push %eax - 1abd: 68 c9 4c 00 00 push $0x4cc9 - 1ac2: 6a 01 push $0x1 - 1ac4: e8 65 25 00 00 call 402e - 1ac9: 83 c4 10 add $0x10,%esp - exit(); - 1acc: e8 e8 23 00 00 call 3eb9 - } - if(fa[i]){ - 1ad1: 8d 55 bd lea -0x43(%ebp),%edx - 1ad4: 8b 45 f4 mov -0xc(%ebp),%eax - 1ad7: 01 d0 add %edx,%eax - 1ad9: 0f b6 00 movzbl (%eax),%eax - 1adc: 84 c0 test %al,%al - 1ade: 74 1e je 1afe - printf(1, "concreate duplicate file %s\n", de.name); - 1ae0: 83 ec 04 sub $0x4,%esp - 1ae3: 8d 45 ac lea -0x54(%ebp),%eax - 1ae6: 83 c0 02 add $0x2,%eax - 1ae9: 50 push %eax - 1aea: 68 e2 4c 00 00 push $0x4ce2 - 1aef: 6a 01 push $0x1 - 1af1: e8 38 25 00 00 call 402e - 1af6: 83 c4 10 add $0x10,%esp - exit(); - 1af9: e8 bb 23 00 00 call 3eb9 - } - fa[i] = 1; - 1afe: 8d 55 bd lea -0x43(%ebp),%edx - 1b01: 8b 45 f4 mov -0xc(%ebp),%eax - 1b04: 01 d0 add %edx,%eax - 1b06: c6 00 01 movb $0x1,(%eax) - n++; - 1b09: 83 45 f0 01 addl $0x1,-0x10(%ebp) - } - - memset(fa, 0, sizeof(fa)); - fd = open(".", 0); - n = 0; - while(read(fd, &de, sizeof(de)) > 0){ - 1b0d: 83 ec 04 sub $0x4,%esp - 1b10: 6a 10 push $0x10 - 1b12: 8d 45 ac lea -0x54(%ebp),%eax - 1b15: 50 push %eax - 1b16: ff 75 e8 pushl -0x18(%ebp) - 1b19: e8 b3 23 00 00 call 3ed1 - 1b1e: 83 c4 10 add $0x10,%esp - 1b21: 85 c0 test %eax,%eax - 1b23: 0f 8f 51 ff ff ff jg 1a7a - } - fa[i] = 1; - n++; - } - } - close(fd); - 1b29: 83 ec 0c sub $0xc,%esp - 1b2c: ff 75 e8 pushl -0x18(%ebp) - 1b2f: e8 ad 23 00 00 call 3ee1 - 1b34: 83 c4 10 add $0x10,%esp - - if(n != 40){ - 1b37: 83 7d f0 28 cmpl $0x28,-0x10(%ebp) - 1b3b: 74 17 je 1b54 - printf(1, "concreate not enough files in directory listing\n"); - 1b3d: 83 ec 08 sub $0x8,%esp - 1b40: 68 00 4d 00 00 push $0x4d00 - 1b45: 6a 01 push $0x1 - 1b47: e8 e2 24 00 00 call 402e - 1b4c: 83 c4 10 add $0x10,%esp - exit(); - 1b4f: e8 65 23 00 00 call 3eb9 - } - - for(i = 0; i < 40; i++){ - 1b54: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 1b5b: e9 45 01 00 00 jmp 1ca5 - file[1] = '0' + i; - 1b60: 8b 45 f4 mov -0xc(%ebp),%eax - 1b63: 83 c0 30 add $0x30,%eax - 1b66: 88 45 e6 mov %al,-0x1a(%ebp) - pid = fork(); - 1b69: e8 43 23 00 00 call 3eb1 - 1b6e: 89 45 ec mov %eax,-0x14(%ebp) - if(pid < 0){ - 1b71: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 1b75: 79 17 jns 1b8e - printf(1, "fork failed\n"); - 1b77: 83 ec 08 sub $0x8,%esp - 1b7a: 68 85 44 00 00 push $0x4485 - 1b7f: 6a 01 push $0x1 - 1b81: e8 a8 24 00 00 call 402e - 1b86: 83 c4 10 add $0x10,%esp - exit(); - 1b89: e8 2b 23 00 00 call 3eb9 - } - if(((i % 3) == 0 && pid == 0) || - 1b8e: 8b 4d f4 mov -0xc(%ebp),%ecx - 1b91: ba 56 55 55 55 mov $0x55555556,%edx - 1b96: 89 c8 mov %ecx,%eax - 1b98: f7 ea imul %edx - 1b9a: 89 c8 mov %ecx,%eax - 1b9c: c1 f8 1f sar $0x1f,%eax - 1b9f: 29 c2 sub %eax,%edx - 1ba1: 89 d0 mov %edx,%eax - 1ba3: 89 c2 mov %eax,%edx - 1ba5: 01 d2 add %edx,%edx - 1ba7: 01 c2 add %eax,%edx - 1ba9: 89 c8 mov %ecx,%eax - 1bab: 29 d0 sub %edx,%eax - 1bad: 85 c0 test %eax,%eax - 1baf: 75 06 jne 1bb7 - 1bb1: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 1bb5: 74 28 je 1bdf - ((i % 3) == 1 && pid != 0)){ - 1bb7: 8b 4d f4 mov -0xc(%ebp),%ecx - 1bba: ba 56 55 55 55 mov $0x55555556,%edx - 1bbf: 89 c8 mov %ecx,%eax - 1bc1: f7 ea imul %edx - 1bc3: 89 c8 mov %ecx,%eax - 1bc5: c1 f8 1f sar $0x1f,%eax - 1bc8: 29 c2 sub %eax,%edx - 1bca: 89 d0 mov %edx,%eax - 1bcc: 01 c0 add %eax,%eax - 1bce: 01 d0 add %edx,%eax - 1bd0: 29 c1 sub %eax,%ecx - 1bd2: 89 ca mov %ecx,%edx - pid = fork(); - if(pid < 0){ - printf(1, "fork failed\n"); - exit(); - } - if(((i % 3) == 0 && pid == 0) || - 1bd4: 83 fa 01 cmp $0x1,%edx - 1bd7: 75 7c jne 1c55 - ((i % 3) == 1 && pid != 0)){ - 1bd9: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 1bdd: 74 76 je 1c55 - close(open(file, 0)); - 1bdf: 83 ec 08 sub $0x8,%esp - 1be2: 6a 00 push $0x0 - 1be4: 8d 45 e5 lea -0x1b(%ebp),%eax - 1be7: 50 push %eax - 1be8: e8 0c 23 00 00 call 3ef9 - 1bed: 83 c4 10 add $0x10,%esp - 1bf0: 83 ec 0c sub $0xc,%esp - 1bf3: 50 push %eax - 1bf4: e8 e8 22 00 00 call 3ee1 - 1bf9: 83 c4 10 add $0x10,%esp - close(open(file, 0)); - 1bfc: 83 ec 08 sub $0x8,%esp - 1bff: 6a 00 push $0x0 - 1c01: 8d 45 e5 lea -0x1b(%ebp),%eax - 1c04: 50 push %eax - 1c05: e8 ef 22 00 00 call 3ef9 - 1c0a: 83 c4 10 add $0x10,%esp - 1c0d: 83 ec 0c sub $0xc,%esp - 1c10: 50 push %eax - 1c11: e8 cb 22 00 00 call 3ee1 - 1c16: 83 c4 10 add $0x10,%esp - close(open(file, 0)); - 1c19: 83 ec 08 sub $0x8,%esp - 1c1c: 6a 00 push $0x0 - 1c1e: 8d 45 e5 lea -0x1b(%ebp),%eax - 1c21: 50 push %eax - 1c22: e8 d2 22 00 00 call 3ef9 - 1c27: 83 c4 10 add $0x10,%esp - 1c2a: 83 ec 0c sub $0xc,%esp - 1c2d: 50 push %eax - 1c2e: e8 ae 22 00 00 call 3ee1 - 1c33: 83 c4 10 add $0x10,%esp - close(open(file, 0)); - 1c36: 83 ec 08 sub $0x8,%esp - 1c39: 6a 00 push $0x0 - 1c3b: 8d 45 e5 lea -0x1b(%ebp),%eax - 1c3e: 50 push %eax - 1c3f: e8 b5 22 00 00 call 3ef9 - 1c44: 83 c4 10 add $0x10,%esp - 1c47: 83 ec 0c sub $0xc,%esp - 1c4a: 50 push %eax - 1c4b: e8 91 22 00 00 call 3ee1 - 1c50: 83 c4 10 add $0x10,%esp - 1c53: eb 3c jmp 1c91 - } else { - unlink(file); - 1c55: 83 ec 0c sub $0xc,%esp - 1c58: 8d 45 e5 lea -0x1b(%ebp),%eax - 1c5b: 50 push %eax - 1c5c: e8 a8 22 00 00 call 3f09 - 1c61: 83 c4 10 add $0x10,%esp - unlink(file); - 1c64: 83 ec 0c sub $0xc,%esp - 1c67: 8d 45 e5 lea -0x1b(%ebp),%eax - 1c6a: 50 push %eax - 1c6b: e8 99 22 00 00 call 3f09 - 1c70: 83 c4 10 add $0x10,%esp - unlink(file); - 1c73: 83 ec 0c sub $0xc,%esp - 1c76: 8d 45 e5 lea -0x1b(%ebp),%eax - 1c79: 50 push %eax - 1c7a: e8 8a 22 00 00 call 3f09 - 1c7f: 83 c4 10 add $0x10,%esp - unlink(file); - 1c82: 83 ec 0c sub $0xc,%esp - 1c85: 8d 45 e5 lea -0x1b(%ebp),%eax - 1c88: 50 push %eax - 1c89: e8 7b 22 00 00 call 3f09 - 1c8e: 83 c4 10 add $0x10,%esp - } - if(pid == 0) - 1c91: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 1c95: 75 05 jne 1c9c - exit(); - 1c97: e8 1d 22 00 00 call 3eb9 - else - wait(); - 1c9c: e8 20 22 00 00 call 3ec1 - if(n != 40){ - printf(1, "concreate not enough files in directory listing\n"); - exit(); - } - - for(i = 0; i < 40; i++){ - 1ca1: 83 45 f4 01 addl $0x1,-0xc(%ebp) - 1ca5: 83 7d f4 27 cmpl $0x27,-0xc(%ebp) - 1ca9: 0f 8e b1 fe ff ff jle 1b60 - exit(); - else - wait(); - } - - printf(1, "concreate ok\n"); - 1caf: 83 ec 08 sub $0x8,%esp - 1cb2: 68 31 4d 00 00 push $0x4d31 - 1cb7: 6a 01 push $0x1 - 1cb9: e8 70 23 00 00 call 402e - 1cbe: 83 c4 10 add $0x10,%esp -} - 1cc1: c9 leave - 1cc2: c3 ret - -00001cc3 : - -// another concurrent link/unlink/create test, -// to look for deadlocks. -void -linkunlink() -{ - 1cc3: 55 push %ebp - 1cc4: 89 e5 mov %esp,%ebp - 1cc6: 83 ec 18 sub $0x18,%esp - int pid, i; - - printf(1, "linkunlink test\n"); - 1cc9: 83 ec 08 sub $0x8,%esp - 1ccc: 68 3f 4d 00 00 push $0x4d3f - 1cd1: 6a 01 push $0x1 - 1cd3: e8 56 23 00 00 call 402e - 1cd8: 83 c4 10 add $0x10,%esp - - unlink("x"); - 1cdb: 83 ec 0c sub $0xc,%esp - 1cde: 68 bb 48 00 00 push $0x48bb - 1ce3: e8 21 22 00 00 call 3f09 - 1ce8: 83 c4 10 add $0x10,%esp - pid = fork(); - 1ceb: e8 c1 21 00 00 call 3eb1 - 1cf0: 89 45 ec mov %eax,-0x14(%ebp) - if(pid < 0){ - 1cf3: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 1cf7: 79 17 jns 1d10 - printf(1, "fork failed\n"); - 1cf9: 83 ec 08 sub $0x8,%esp - 1cfc: 68 85 44 00 00 push $0x4485 - 1d01: 6a 01 push $0x1 - 1d03: e8 26 23 00 00 call 402e - 1d08: 83 c4 10 add $0x10,%esp - exit(); - 1d0b: e8 a9 21 00 00 call 3eb9 - } - - unsigned int x = (pid ? 1 : 97); - 1d10: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 1d14: 74 07 je 1d1d - 1d16: b8 01 00 00 00 mov $0x1,%eax - 1d1b: eb 05 jmp 1d22 - 1d1d: b8 61 00 00 00 mov $0x61,%eax - 1d22: 89 45 f0 mov %eax,-0x10(%ebp) - for(i = 0; i < 100; i++){ - 1d25: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 1d2c: e9 9a 00 00 00 jmp 1dcb - x = x * 1103515245 + 12345; - 1d31: 8b 45 f0 mov -0x10(%ebp),%eax - 1d34: 69 c0 6d 4e c6 41 imul $0x41c64e6d,%eax,%eax - 1d3a: 05 39 30 00 00 add $0x3039,%eax - 1d3f: 89 45 f0 mov %eax,-0x10(%ebp) - if((x % 3) == 0){ - 1d42: 8b 4d f0 mov -0x10(%ebp),%ecx - 1d45: ba ab aa aa aa mov $0xaaaaaaab,%edx - 1d4a: 89 c8 mov %ecx,%eax - 1d4c: f7 e2 mul %edx - 1d4e: 89 d0 mov %edx,%eax - 1d50: d1 e8 shr %eax - 1d52: 89 c2 mov %eax,%edx - 1d54: 01 d2 add %edx,%edx - 1d56: 01 c2 add %eax,%edx - 1d58: 89 c8 mov %ecx,%eax - 1d5a: 29 d0 sub %edx,%eax - 1d5c: 85 c0 test %eax,%eax - 1d5e: 75 23 jne 1d83 - close(open("x", O_RDWR | O_CREATE)); - 1d60: 83 ec 08 sub $0x8,%esp - 1d63: 68 02 02 00 00 push $0x202 - 1d68: 68 bb 48 00 00 push $0x48bb - 1d6d: e8 87 21 00 00 call 3ef9 - 1d72: 83 c4 10 add $0x10,%esp - 1d75: 83 ec 0c sub $0xc,%esp - 1d78: 50 push %eax - 1d79: e8 63 21 00 00 call 3ee1 - 1d7e: 83 c4 10 add $0x10,%esp - 1d81: eb 44 jmp 1dc7 - } else if((x % 3) == 1){ - 1d83: 8b 4d f0 mov -0x10(%ebp),%ecx - 1d86: ba ab aa aa aa mov $0xaaaaaaab,%edx - 1d8b: 89 c8 mov %ecx,%eax - 1d8d: f7 e2 mul %edx - 1d8f: d1 ea shr %edx - 1d91: 89 d0 mov %edx,%eax - 1d93: 01 c0 add %eax,%eax - 1d95: 01 d0 add %edx,%eax - 1d97: 29 c1 sub %eax,%ecx - 1d99: 89 ca mov %ecx,%edx - 1d9b: 83 fa 01 cmp $0x1,%edx - 1d9e: 75 17 jne 1db7 - link("cat", "x"); - 1da0: 83 ec 08 sub $0x8,%esp - 1da3: 68 bb 48 00 00 push $0x48bb - 1da8: 68 50 4d 00 00 push $0x4d50 - 1dad: e8 67 21 00 00 call 3f19 - 1db2: 83 c4 10 add $0x10,%esp - 1db5: eb 10 jmp 1dc7 - } else { - unlink("x"); - 1db7: 83 ec 0c sub $0xc,%esp - 1dba: 68 bb 48 00 00 push $0x48bb - 1dbf: e8 45 21 00 00 call 3f09 - 1dc4: 83 c4 10 add $0x10,%esp - printf(1, "fork failed\n"); - exit(); - } - - unsigned int x = (pid ? 1 : 97); - for(i = 0; i < 100; i++){ - 1dc7: 83 45 f4 01 addl $0x1,-0xc(%ebp) - 1dcb: 83 7d f4 63 cmpl $0x63,-0xc(%ebp) - 1dcf: 0f 8e 5c ff ff ff jle 1d31 - } else { - unlink("x"); - } - } - - if(pid) - 1dd5: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 1dd9: 74 07 je 1de2 - wait(); - 1ddb: e8 e1 20 00 00 call 3ec1 - 1de0: eb 05 jmp 1de7 - else - exit(); - 1de2: e8 d2 20 00 00 call 3eb9 - - printf(1, "linkunlink ok\n"); - 1de7: 83 ec 08 sub $0x8,%esp - 1dea: 68 54 4d 00 00 push $0x4d54 - 1def: 6a 01 push $0x1 - 1df1: e8 38 22 00 00 call 402e - 1df6: 83 c4 10 add $0x10,%esp -} - 1df9: c9 leave - 1dfa: c3 ret - -00001dfb : - -// directory that uses indirect blocks -void -bigdir(void) -{ - 1dfb: 55 push %ebp - 1dfc: 89 e5 mov %esp,%ebp - 1dfe: 83 ec 28 sub $0x28,%esp - int i, fd; - char name[10]; - - printf(1, "bigdir test\n"); - 1e01: 83 ec 08 sub $0x8,%esp - 1e04: 68 63 4d 00 00 push $0x4d63 - 1e09: 6a 01 push $0x1 - 1e0b: e8 1e 22 00 00 call 402e - 1e10: 83 c4 10 add $0x10,%esp - unlink("bd"); - 1e13: 83 ec 0c sub $0xc,%esp - 1e16: 68 70 4d 00 00 push $0x4d70 - 1e1b: e8 e9 20 00 00 call 3f09 - 1e20: 83 c4 10 add $0x10,%esp - - fd = open("bd", O_CREATE); - 1e23: 83 ec 08 sub $0x8,%esp - 1e26: 68 00 02 00 00 push $0x200 - 1e2b: 68 70 4d 00 00 push $0x4d70 - 1e30: e8 c4 20 00 00 call 3ef9 - 1e35: 83 c4 10 add $0x10,%esp - 1e38: 89 45 f0 mov %eax,-0x10(%ebp) - if(fd < 0){ - 1e3b: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 1e3f: 79 17 jns 1e58 - printf(1, "bigdir create failed\n"); - 1e41: 83 ec 08 sub $0x8,%esp - 1e44: 68 73 4d 00 00 push $0x4d73 - 1e49: 6a 01 push $0x1 - 1e4b: e8 de 21 00 00 call 402e - 1e50: 83 c4 10 add $0x10,%esp - exit(); - 1e53: e8 61 20 00 00 call 3eb9 - } - close(fd); - 1e58: 83 ec 0c sub $0xc,%esp - 1e5b: ff 75 f0 pushl -0x10(%ebp) - 1e5e: e8 7e 20 00 00 call 3ee1 - 1e63: 83 c4 10 add $0x10,%esp - - for(i = 0; i < 500; i++){ - 1e66: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 1e6d: eb 63 jmp 1ed2 - name[0] = 'x'; - 1e6f: c6 45 e6 78 movb $0x78,-0x1a(%ebp) - name[1] = '0' + (i / 64); - 1e73: 8b 45 f4 mov -0xc(%ebp),%eax - 1e76: 8d 50 3f lea 0x3f(%eax),%edx - 1e79: 85 c0 test %eax,%eax - 1e7b: 0f 48 c2 cmovs %edx,%eax - 1e7e: c1 f8 06 sar $0x6,%eax - 1e81: 83 c0 30 add $0x30,%eax - 1e84: 88 45 e7 mov %al,-0x19(%ebp) - name[2] = '0' + (i % 64); - 1e87: 8b 45 f4 mov -0xc(%ebp),%eax - 1e8a: 99 cltd - 1e8b: c1 ea 1a shr $0x1a,%edx - 1e8e: 01 d0 add %edx,%eax - 1e90: 83 e0 3f and $0x3f,%eax - 1e93: 29 d0 sub %edx,%eax - 1e95: 83 c0 30 add $0x30,%eax - 1e98: 88 45 e8 mov %al,-0x18(%ebp) - name[3] = '\0'; - 1e9b: c6 45 e9 00 movb $0x0,-0x17(%ebp) - if(link("bd", name) != 0){ - 1e9f: 83 ec 08 sub $0x8,%esp - 1ea2: 8d 45 e6 lea -0x1a(%ebp),%eax - 1ea5: 50 push %eax - 1ea6: 68 70 4d 00 00 push $0x4d70 - 1eab: e8 69 20 00 00 call 3f19 - 1eb0: 83 c4 10 add $0x10,%esp - 1eb3: 85 c0 test %eax,%eax - 1eb5: 74 17 je 1ece - printf(1, "bigdir link failed\n"); - 1eb7: 83 ec 08 sub $0x8,%esp - 1eba: 68 89 4d 00 00 push $0x4d89 - 1ebf: 6a 01 push $0x1 - 1ec1: e8 68 21 00 00 call 402e - 1ec6: 83 c4 10 add $0x10,%esp - exit(); - 1ec9: e8 eb 1f 00 00 call 3eb9 - printf(1, "bigdir create failed\n"); - exit(); - } - close(fd); - - for(i = 0; i < 500; i++){ - 1ece: 83 45 f4 01 addl $0x1,-0xc(%ebp) - 1ed2: 81 7d f4 f3 01 00 00 cmpl $0x1f3,-0xc(%ebp) - 1ed9: 7e 94 jle 1e6f - printf(1, "bigdir link failed\n"); - exit(); - } - } - - unlink("bd"); - 1edb: 83 ec 0c sub $0xc,%esp - 1ede: 68 70 4d 00 00 push $0x4d70 - 1ee3: e8 21 20 00 00 call 3f09 - 1ee8: 83 c4 10 add $0x10,%esp - for(i = 0; i < 500; i++){ - 1eeb: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 1ef2: eb 5e jmp 1f52 - name[0] = 'x'; - 1ef4: c6 45 e6 78 movb $0x78,-0x1a(%ebp) - name[1] = '0' + (i / 64); - 1ef8: 8b 45 f4 mov -0xc(%ebp),%eax - 1efb: 8d 50 3f lea 0x3f(%eax),%edx - 1efe: 85 c0 test %eax,%eax - 1f00: 0f 48 c2 cmovs %edx,%eax - 1f03: c1 f8 06 sar $0x6,%eax - 1f06: 83 c0 30 add $0x30,%eax - 1f09: 88 45 e7 mov %al,-0x19(%ebp) - name[2] = '0' + (i % 64); - 1f0c: 8b 45 f4 mov -0xc(%ebp),%eax - 1f0f: 99 cltd - 1f10: c1 ea 1a shr $0x1a,%edx - 1f13: 01 d0 add %edx,%eax - 1f15: 83 e0 3f and $0x3f,%eax - 1f18: 29 d0 sub %edx,%eax - 1f1a: 83 c0 30 add $0x30,%eax - 1f1d: 88 45 e8 mov %al,-0x18(%ebp) - name[3] = '\0'; - 1f20: c6 45 e9 00 movb $0x0,-0x17(%ebp) - if(unlink(name) != 0){ - 1f24: 83 ec 0c sub $0xc,%esp - 1f27: 8d 45 e6 lea -0x1a(%ebp),%eax - 1f2a: 50 push %eax - 1f2b: e8 d9 1f 00 00 call 3f09 - 1f30: 83 c4 10 add $0x10,%esp - 1f33: 85 c0 test %eax,%eax - 1f35: 74 17 je 1f4e - printf(1, "bigdir unlink failed"); - 1f37: 83 ec 08 sub $0x8,%esp - 1f3a: 68 9d 4d 00 00 push $0x4d9d - 1f3f: 6a 01 push $0x1 - 1f41: e8 e8 20 00 00 call 402e - 1f46: 83 c4 10 add $0x10,%esp - exit(); - 1f49: e8 6b 1f 00 00 call 3eb9 - exit(); - } - } - - unlink("bd"); - for(i = 0; i < 500; i++){ - 1f4e: 83 45 f4 01 addl $0x1,-0xc(%ebp) - 1f52: 81 7d f4 f3 01 00 00 cmpl $0x1f3,-0xc(%ebp) - 1f59: 7e 99 jle 1ef4 - printf(1, "bigdir unlink failed"); - exit(); - } - } - - printf(1, "bigdir ok\n"); - 1f5b: 83 ec 08 sub $0x8,%esp - 1f5e: 68 b2 4d 00 00 push $0x4db2 - 1f63: 6a 01 push $0x1 - 1f65: e8 c4 20 00 00 call 402e - 1f6a: 83 c4 10 add $0x10,%esp -} - 1f6d: c9 leave - 1f6e: c3 ret - -00001f6f : - -void -subdir(void) -{ - 1f6f: 55 push %ebp - 1f70: 89 e5 mov %esp,%ebp - 1f72: 83 ec 18 sub $0x18,%esp - int fd, cc; - - printf(1, "subdir test\n"); - 1f75: 83 ec 08 sub $0x8,%esp - 1f78: 68 bd 4d 00 00 push $0x4dbd - 1f7d: 6a 01 push $0x1 - 1f7f: e8 aa 20 00 00 call 402e - 1f84: 83 c4 10 add $0x10,%esp - - unlink("ff"); - 1f87: 83 ec 0c sub $0xc,%esp - 1f8a: 68 ca 4d 00 00 push $0x4dca - 1f8f: e8 75 1f 00 00 call 3f09 - 1f94: 83 c4 10 add $0x10,%esp - if(mkdir("dd") != 0){ - 1f97: 83 ec 0c sub $0xc,%esp - 1f9a: 68 cd 4d 00 00 push $0x4dcd - 1f9f: e8 7d 1f 00 00 call 3f21 - 1fa4: 83 c4 10 add $0x10,%esp - 1fa7: 85 c0 test %eax,%eax - 1fa9: 74 17 je 1fc2 - printf(1, "subdir mkdir dd failed\n"); - 1fab: 83 ec 08 sub $0x8,%esp - 1fae: 68 d0 4d 00 00 push $0x4dd0 - 1fb3: 6a 01 push $0x1 - 1fb5: e8 74 20 00 00 call 402e - 1fba: 83 c4 10 add $0x10,%esp - exit(); - 1fbd: e8 f7 1e 00 00 call 3eb9 - } - - fd = open("dd/ff", O_CREATE | O_RDWR); - 1fc2: 83 ec 08 sub $0x8,%esp - 1fc5: 68 02 02 00 00 push $0x202 - 1fca: 68 e8 4d 00 00 push $0x4de8 - 1fcf: e8 25 1f 00 00 call 3ef9 - 1fd4: 83 c4 10 add $0x10,%esp - 1fd7: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd < 0){ - 1fda: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 1fde: 79 17 jns 1ff7 - printf(1, "create dd/ff failed\n"); - 1fe0: 83 ec 08 sub $0x8,%esp - 1fe3: 68 ee 4d 00 00 push $0x4dee - 1fe8: 6a 01 push $0x1 - 1fea: e8 3f 20 00 00 call 402e - 1fef: 83 c4 10 add $0x10,%esp - exit(); - 1ff2: e8 c2 1e 00 00 call 3eb9 - } - write(fd, "ff", 2); - 1ff7: 83 ec 04 sub $0x4,%esp - 1ffa: 6a 02 push $0x2 - 1ffc: 68 ca 4d 00 00 push $0x4dca - 2001: ff 75 f4 pushl -0xc(%ebp) - 2004: e8 d0 1e 00 00 call 3ed9 - 2009: 83 c4 10 add $0x10,%esp - close(fd); - 200c: 83 ec 0c sub $0xc,%esp - 200f: ff 75 f4 pushl -0xc(%ebp) - 2012: e8 ca 1e 00 00 call 3ee1 - 2017: 83 c4 10 add $0x10,%esp - - if(unlink("dd") >= 0){ - 201a: 83 ec 0c sub $0xc,%esp - 201d: 68 cd 4d 00 00 push $0x4dcd - 2022: e8 e2 1e 00 00 call 3f09 - 2027: 83 c4 10 add $0x10,%esp - 202a: 85 c0 test %eax,%eax - 202c: 78 17 js 2045 - printf(1, "unlink dd (non-empty dir) succeeded!\n"); - 202e: 83 ec 08 sub $0x8,%esp - 2031: 68 04 4e 00 00 push $0x4e04 - 2036: 6a 01 push $0x1 - 2038: e8 f1 1f 00 00 call 402e - 203d: 83 c4 10 add $0x10,%esp - exit(); - 2040: e8 74 1e 00 00 call 3eb9 - } - - if(mkdir("/dd/dd") != 0){ - 2045: 83 ec 0c sub $0xc,%esp - 2048: 68 2a 4e 00 00 push $0x4e2a - 204d: e8 cf 1e 00 00 call 3f21 - 2052: 83 c4 10 add $0x10,%esp - 2055: 85 c0 test %eax,%eax - 2057: 74 17 je 2070 - printf(1, "subdir mkdir dd/dd failed\n"); - 2059: 83 ec 08 sub $0x8,%esp - 205c: 68 31 4e 00 00 push $0x4e31 - 2061: 6a 01 push $0x1 - 2063: e8 c6 1f 00 00 call 402e - 2068: 83 c4 10 add $0x10,%esp - exit(); - 206b: e8 49 1e 00 00 call 3eb9 - } - - fd = open("dd/dd/ff", O_CREATE | O_RDWR); - 2070: 83 ec 08 sub $0x8,%esp - 2073: 68 02 02 00 00 push $0x202 - 2078: 68 4c 4e 00 00 push $0x4e4c - 207d: e8 77 1e 00 00 call 3ef9 - 2082: 83 c4 10 add $0x10,%esp - 2085: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd < 0){ - 2088: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 208c: 79 17 jns 20a5 - printf(1, "create dd/dd/ff failed\n"); - 208e: 83 ec 08 sub $0x8,%esp - 2091: 68 55 4e 00 00 push $0x4e55 - 2096: 6a 01 push $0x1 - 2098: e8 91 1f 00 00 call 402e - 209d: 83 c4 10 add $0x10,%esp - exit(); - 20a0: e8 14 1e 00 00 call 3eb9 - } - write(fd, "FF", 2); - 20a5: 83 ec 04 sub $0x4,%esp - 20a8: 6a 02 push $0x2 - 20aa: 68 6d 4e 00 00 push $0x4e6d - 20af: ff 75 f4 pushl -0xc(%ebp) - 20b2: e8 22 1e 00 00 call 3ed9 - 20b7: 83 c4 10 add $0x10,%esp - close(fd); - 20ba: 83 ec 0c sub $0xc,%esp - 20bd: ff 75 f4 pushl -0xc(%ebp) - 20c0: e8 1c 1e 00 00 call 3ee1 - 20c5: 83 c4 10 add $0x10,%esp - - fd = open("dd/dd/../ff", 0); - 20c8: 83 ec 08 sub $0x8,%esp - 20cb: 6a 00 push $0x0 - 20cd: 68 70 4e 00 00 push $0x4e70 - 20d2: e8 22 1e 00 00 call 3ef9 - 20d7: 83 c4 10 add $0x10,%esp - 20da: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd < 0){ - 20dd: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 20e1: 79 17 jns 20fa - printf(1, "open dd/dd/../ff failed\n"); - 20e3: 83 ec 08 sub $0x8,%esp - 20e6: 68 7c 4e 00 00 push $0x4e7c - 20eb: 6a 01 push $0x1 - 20ed: e8 3c 1f 00 00 call 402e - 20f2: 83 c4 10 add $0x10,%esp - exit(); - 20f5: e8 bf 1d 00 00 call 3eb9 - } - cc = read(fd, buf, sizeof(buf)); - 20fa: 83 ec 04 sub $0x4,%esp - 20fd: 68 00 20 00 00 push $0x2000 - 2102: 68 c0 8a 00 00 push $0x8ac0 - 2107: ff 75 f4 pushl -0xc(%ebp) - 210a: e8 c2 1d 00 00 call 3ed1 - 210f: 83 c4 10 add $0x10,%esp - 2112: 89 45 f0 mov %eax,-0x10(%ebp) - if(cc != 2 || buf[0] != 'f'){ - 2115: 83 7d f0 02 cmpl $0x2,-0x10(%ebp) - 2119: 75 0b jne 2126 - 211b: 0f b6 05 c0 8a 00 00 movzbl 0x8ac0,%eax - 2122: 3c 66 cmp $0x66,%al - 2124: 74 17 je 213d - printf(1, "dd/dd/../ff wrong content\n"); - 2126: 83 ec 08 sub $0x8,%esp - 2129: 68 95 4e 00 00 push $0x4e95 - 212e: 6a 01 push $0x1 - 2130: e8 f9 1e 00 00 call 402e - 2135: 83 c4 10 add $0x10,%esp - exit(); - 2138: e8 7c 1d 00 00 call 3eb9 - } - close(fd); - 213d: 83 ec 0c sub $0xc,%esp - 2140: ff 75 f4 pushl -0xc(%ebp) - 2143: e8 99 1d 00 00 call 3ee1 - 2148: 83 c4 10 add $0x10,%esp - - if(link("dd/dd/ff", "dd/dd/ffff") != 0){ - 214b: 83 ec 08 sub $0x8,%esp - 214e: 68 b0 4e 00 00 push $0x4eb0 - 2153: 68 4c 4e 00 00 push $0x4e4c - 2158: e8 bc 1d 00 00 call 3f19 - 215d: 83 c4 10 add $0x10,%esp - 2160: 85 c0 test %eax,%eax - 2162: 74 17 je 217b - printf(1, "link dd/dd/ff dd/dd/ffff failed\n"); - 2164: 83 ec 08 sub $0x8,%esp - 2167: 68 bc 4e 00 00 push $0x4ebc - 216c: 6a 01 push $0x1 - 216e: e8 bb 1e 00 00 call 402e - 2173: 83 c4 10 add $0x10,%esp - exit(); - 2176: e8 3e 1d 00 00 call 3eb9 - } - - if(unlink("dd/dd/ff") != 0){ - 217b: 83 ec 0c sub $0xc,%esp - 217e: 68 4c 4e 00 00 push $0x4e4c - 2183: e8 81 1d 00 00 call 3f09 - 2188: 83 c4 10 add $0x10,%esp - 218b: 85 c0 test %eax,%eax - 218d: 74 17 je 21a6 - printf(1, "unlink dd/dd/ff failed\n"); - 218f: 83 ec 08 sub $0x8,%esp - 2192: 68 dd 4e 00 00 push $0x4edd - 2197: 6a 01 push $0x1 - 2199: e8 90 1e 00 00 call 402e - 219e: 83 c4 10 add $0x10,%esp - exit(); - 21a1: e8 13 1d 00 00 call 3eb9 - } - if(open("dd/dd/ff", O_RDONLY) >= 0){ - 21a6: 83 ec 08 sub $0x8,%esp - 21a9: 6a 00 push $0x0 - 21ab: 68 4c 4e 00 00 push $0x4e4c - 21b0: e8 44 1d 00 00 call 3ef9 - 21b5: 83 c4 10 add $0x10,%esp - 21b8: 85 c0 test %eax,%eax - 21ba: 78 17 js 21d3 - printf(1, "open (unlinked) dd/dd/ff succeeded\n"); - 21bc: 83 ec 08 sub $0x8,%esp - 21bf: 68 f8 4e 00 00 push $0x4ef8 - 21c4: 6a 01 push $0x1 - 21c6: e8 63 1e 00 00 call 402e - 21cb: 83 c4 10 add $0x10,%esp - exit(); - 21ce: e8 e6 1c 00 00 call 3eb9 - } - - if(chdir("dd") != 0){ - 21d3: 83 ec 0c sub $0xc,%esp - 21d6: 68 cd 4d 00 00 push $0x4dcd - 21db: e8 49 1d 00 00 call 3f29 - 21e0: 83 c4 10 add $0x10,%esp - 21e3: 85 c0 test %eax,%eax - 21e5: 74 17 je 21fe - printf(1, "chdir dd failed\n"); - 21e7: 83 ec 08 sub $0x8,%esp - 21ea: 68 1c 4f 00 00 push $0x4f1c - 21ef: 6a 01 push $0x1 - 21f1: e8 38 1e 00 00 call 402e - 21f6: 83 c4 10 add $0x10,%esp - exit(); - 21f9: e8 bb 1c 00 00 call 3eb9 - } - if(chdir("dd/../../dd") != 0){ - 21fe: 83 ec 0c sub $0xc,%esp - 2201: 68 2d 4f 00 00 push $0x4f2d - 2206: e8 1e 1d 00 00 call 3f29 - 220b: 83 c4 10 add $0x10,%esp - 220e: 85 c0 test %eax,%eax - 2210: 74 17 je 2229 - printf(1, "chdir dd/../../dd failed\n"); - 2212: 83 ec 08 sub $0x8,%esp - 2215: 68 39 4f 00 00 push $0x4f39 - 221a: 6a 01 push $0x1 - 221c: e8 0d 1e 00 00 call 402e - 2221: 83 c4 10 add $0x10,%esp - exit(); - 2224: e8 90 1c 00 00 call 3eb9 - } - if(chdir("dd/../../../dd") != 0){ - 2229: 83 ec 0c sub $0xc,%esp - 222c: 68 53 4f 00 00 push $0x4f53 - 2231: e8 f3 1c 00 00 call 3f29 - 2236: 83 c4 10 add $0x10,%esp - 2239: 85 c0 test %eax,%eax - 223b: 74 17 je 2254 - printf(1, "chdir dd/../../dd failed\n"); - 223d: 83 ec 08 sub $0x8,%esp - 2240: 68 39 4f 00 00 push $0x4f39 - 2245: 6a 01 push $0x1 - 2247: e8 e2 1d 00 00 call 402e - 224c: 83 c4 10 add $0x10,%esp - exit(); - 224f: e8 65 1c 00 00 call 3eb9 - } - if(chdir("./..") != 0){ - 2254: 83 ec 0c sub $0xc,%esp - 2257: 68 62 4f 00 00 push $0x4f62 - 225c: e8 c8 1c 00 00 call 3f29 - 2261: 83 c4 10 add $0x10,%esp - 2264: 85 c0 test %eax,%eax - 2266: 74 17 je 227f - printf(1, "chdir ./.. failed\n"); - 2268: 83 ec 08 sub $0x8,%esp - 226b: 68 67 4f 00 00 push $0x4f67 - 2270: 6a 01 push $0x1 - 2272: e8 b7 1d 00 00 call 402e - 2277: 83 c4 10 add $0x10,%esp - exit(); - 227a: e8 3a 1c 00 00 call 3eb9 - } - - fd = open("dd/dd/ffff", 0); - 227f: 83 ec 08 sub $0x8,%esp - 2282: 6a 00 push $0x0 - 2284: 68 b0 4e 00 00 push $0x4eb0 - 2289: e8 6b 1c 00 00 call 3ef9 - 228e: 83 c4 10 add $0x10,%esp - 2291: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd < 0){ - 2294: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 2298: 79 17 jns 22b1 - printf(1, "open dd/dd/ffff failed\n"); - 229a: 83 ec 08 sub $0x8,%esp - 229d: 68 7a 4f 00 00 push $0x4f7a - 22a2: 6a 01 push $0x1 - 22a4: e8 85 1d 00 00 call 402e - 22a9: 83 c4 10 add $0x10,%esp - exit(); - 22ac: e8 08 1c 00 00 call 3eb9 - } - if(read(fd, buf, sizeof(buf)) != 2){ - 22b1: 83 ec 04 sub $0x4,%esp - 22b4: 68 00 20 00 00 push $0x2000 - 22b9: 68 c0 8a 00 00 push $0x8ac0 - 22be: ff 75 f4 pushl -0xc(%ebp) - 22c1: e8 0b 1c 00 00 call 3ed1 - 22c6: 83 c4 10 add $0x10,%esp - 22c9: 83 f8 02 cmp $0x2,%eax - 22cc: 74 17 je 22e5 - printf(1, "read dd/dd/ffff wrong len\n"); - 22ce: 83 ec 08 sub $0x8,%esp - 22d1: 68 92 4f 00 00 push $0x4f92 - 22d6: 6a 01 push $0x1 - 22d8: e8 51 1d 00 00 call 402e - 22dd: 83 c4 10 add $0x10,%esp - exit(); - 22e0: e8 d4 1b 00 00 call 3eb9 - } - close(fd); - 22e5: 83 ec 0c sub $0xc,%esp - 22e8: ff 75 f4 pushl -0xc(%ebp) - 22eb: e8 f1 1b 00 00 call 3ee1 - 22f0: 83 c4 10 add $0x10,%esp - - if(open("dd/dd/ff", O_RDONLY) >= 0){ - 22f3: 83 ec 08 sub $0x8,%esp - 22f6: 6a 00 push $0x0 - 22f8: 68 4c 4e 00 00 push $0x4e4c - 22fd: e8 f7 1b 00 00 call 3ef9 - 2302: 83 c4 10 add $0x10,%esp - 2305: 85 c0 test %eax,%eax - 2307: 78 17 js 2320 - printf(1, "open (unlinked) dd/dd/ff succeeded!\n"); - 2309: 83 ec 08 sub $0x8,%esp - 230c: 68 b0 4f 00 00 push $0x4fb0 - 2311: 6a 01 push $0x1 - 2313: e8 16 1d 00 00 call 402e - 2318: 83 c4 10 add $0x10,%esp - exit(); - 231b: e8 99 1b 00 00 call 3eb9 - } - - if(open("dd/ff/ff", O_CREATE|O_RDWR) >= 0){ - 2320: 83 ec 08 sub $0x8,%esp - 2323: 68 02 02 00 00 push $0x202 - 2328: 68 d5 4f 00 00 push $0x4fd5 - 232d: e8 c7 1b 00 00 call 3ef9 - 2332: 83 c4 10 add $0x10,%esp - 2335: 85 c0 test %eax,%eax - 2337: 78 17 js 2350 - printf(1, "create dd/ff/ff succeeded!\n"); - 2339: 83 ec 08 sub $0x8,%esp - 233c: 68 de 4f 00 00 push $0x4fde - 2341: 6a 01 push $0x1 - 2343: e8 e6 1c 00 00 call 402e - 2348: 83 c4 10 add $0x10,%esp - exit(); - 234b: e8 69 1b 00 00 call 3eb9 - } - if(open("dd/xx/ff", O_CREATE|O_RDWR) >= 0){ - 2350: 83 ec 08 sub $0x8,%esp - 2353: 68 02 02 00 00 push $0x202 - 2358: 68 fa 4f 00 00 push $0x4ffa - 235d: e8 97 1b 00 00 call 3ef9 - 2362: 83 c4 10 add $0x10,%esp - 2365: 85 c0 test %eax,%eax - 2367: 78 17 js 2380 - printf(1, "create dd/xx/ff succeeded!\n"); - 2369: 83 ec 08 sub $0x8,%esp - 236c: 68 03 50 00 00 push $0x5003 - 2371: 6a 01 push $0x1 - 2373: e8 b6 1c 00 00 call 402e - 2378: 83 c4 10 add $0x10,%esp - exit(); - 237b: e8 39 1b 00 00 call 3eb9 - } - if(open("dd", O_CREATE) >= 0){ - 2380: 83 ec 08 sub $0x8,%esp - 2383: 68 00 02 00 00 push $0x200 - 2388: 68 cd 4d 00 00 push $0x4dcd - 238d: e8 67 1b 00 00 call 3ef9 - 2392: 83 c4 10 add $0x10,%esp - 2395: 85 c0 test %eax,%eax - 2397: 78 17 js 23b0 - printf(1, "create dd succeeded!\n"); - 2399: 83 ec 08 sub $0x8,%esp - 239c: 68 1f 50 00 00 push $0x501f - 23a1: 6a 01 push $0x1 - 23a3: e8 86 1c 00 00 call 402e - 23a8: 83 c4 10 add $0x10,%esp - exit(); - 23ab: e8 09 1b 00 00 call 3eb9 - } - if(open("dd", O_RDWR) >= 0){ - 23b0: 83 ec 08 sub $0x8,%esp - 23b3: 6a 02 push $0x2 - 23b5: 68 cd 4d 00 00 push $0x4dcd - 23ba: e8 3a 1b 00 00 call 3ef9 - 23bf: 83 c4 10 add $0x10,%esp - 23c2: 85 c0 test %eax,%eax - 23c4: 78 17 js 23dd - printf(1, "open dd rdwr succeeded!\n"); - 23c6: 83 ec 08 sub $0x8,%esp - 23c9: 68 35 50 00 00 push $0x5035 - 23ce: 6a 01 push $0x1 - 23d0: e8 59 1c 00 00 call 402e - 23d5: 83 c4 10 add $0x10,%esp - exit(); - 23d8: e8 dc 1a 00 00 call 3eb9 - } - if(open("dd", O_WRONLY) >= 0){ - 23dd: 83 ec 08 sub $0x8,%esp - 23e0: 6a 01 push $0x1 - 23e2: 68 cd 4d 00 00 push $0x4dcd - 23e7: e8 0d 1b 00 00 call 3ef9 - 23ec: 83 c4 10 add $0x10,%esp - 23ef: 85 c0 test %eax,%eax - 23f1: 78 17 js 240a - printf(1, "open dd wronly succeeded!\n"); - 23f3: 83 ec 08 sub $0x8,%esp - 23f6: 68 4e 50 00 00 push $0x504e - 23fb: 6a 01 push $0x1 - 23fd: e8 2c 1c 00 00 call 402e - 2402: 83 c4 10 add $0x10,%esp - exit(); - 2405: e8 af 1a 00 00 call 3eb9 - } - if(link("dd/ff/ff", "dd/dd/xx") == 0){ - 240a: 83 ec 08 sub $0x8,%esp - 240d: 68 69 50 00 00 push $0x5069 - 2412: 68 d5 4f 00 00 push $0x4fd5 - 2417: e8 fd 1a 00 00 call 3f19 - 241c: 83 c4 10 add $0x10,%esp - 241f: 85 c0 test %eax,%eax - 2421: 75 17 jne 243a - printf(1, "link dd/ff/ff dd/dd/xx succeeded!\n"); - 2423: 83 ec 08 sub $0x8,%esp - 2426: 68 74 50 00 00 push $0x5074 - 242b: 6a 01 push $0x1 - 242d: e8 fc 1b 00 00 call 402e - 2432: 83 c4 10 add $0x10,%esp - exit(); - 2435: e8 7f 1a 00 00 call 3eb9 - } - if(link("dd/xx/ff", "dd/dd/xx") == 0){ - 243a: 83 ec 08 sub $0x8,%esp - 243d: 68 69 50 00 00 push $0x5069 - 2442: 68 fa 4f 00 00 push $0x4ffa - 2447: e8 cd 1a 00 00 call 3f19 - 244c: 83 c4 10 add $0x10,%esp - 244f: 85 c0 test %eax,%eax - 2451: 75 17 jne 246a - printf(1, "link dd/xx/ff dd/dd/xx succeeded!\n"); - 2453: 83 ec 08 sub $0x8,%esp - 2456: 68 98 50 00 00 push $0x5098 - 245b: 6a 01 push $0x1 - 245d: e8 cc 1b 00 00 call 402e - 2462: 83 c4 10 add $0x10,%esp - exit(); - 2465: e8 4f 1a 00 00 call 3eb9 - } - if(link("dd/ff", "dd/dd/ffff") == 0){ - 246a: 83 ec 08 sub $0x8,%esp - 246d: 68 b0 4e 00 00 push $0x4eb0 - 2472: 68 e8 4d 00 00 push $0x4de8 - 2477: e8 9d 1a 00 00 call 3f19 - 247c: 83 c4 10 add $0x10,%esp - 247f: 85 c0 test %eax,%eax - 2481: 75 17 jne 249a - printf(1, "link dd/ff dd/dd/ffff succeeded!\n"); - 2483: 83 ec 08 sub $0x8,%esp - 2486: 68 bc 50 00 00 push $0x50bc - 248b: 6a 01 push $0x1 - 248d: e8 9c 1b 00 00 call 402e - 2492: 83 c4 10 add $0x10,%esp - exit(); - 2495: e8 1f 1a 00 00 call 3eb9 - } - if(mkdir("dd/ff/ff") == 0){ - 249a: 83 ec 0c sub $0xc,%esp - 249d: 68 d5 4f 00 00 push $0x4fd5 - 24a2: e8 7a 1a 00 00 call 3f21 - 24a7: 83 c4 10 add $0x10,%esp - 24aa: 85 c0 test %eax,%eax - 24ac: 75 17 jne 24c5 - printf(1, "mkdir dd/ff/ff succeeded!\n"); - 24ae: 83 ec 08 sub $0x8,%esp - 24b1: 68 de 50 00 00 push $0x50de - 24b6: 6a 01 push $0x1 - 24b8: e8 71 1b 00 00 call 402e - 24bd: 83 c4 10 add $0x10,%esp - exit(); - 24c0: e8 f4 19 00 00 call 3eb9 - } - if(mkdir("dd/xx/ff") == 0){ - 24c5: 83 ec 0c sub $0xc,%esp - 24c8: 68 fa 4f 00 00 push $0x4ffa - 24cd: e8 4f 1a 00 00 call 3f21 - 24d2: 83 c4 10 add $0x10,%esp - 24d5: 85 c0 test %eax,%eax - 24d7: 75 17 jne 24f0 - printf(1, "mkdir dd/xx/ff succeeded!\n"); - 24d9: 83 ec 08 sub $0x8,%esp - 24dc: 68 f9 50 00 00 push $0x50f9 - 24e1: 6a 01 push $0x1 - 24e3: e8 46 1b 00 00 call 402e - 24e8: 83 c4 10 add $0x10,%esp - exit(); - 24eb: e8 c9 19 00 00 call 3eb9 - } - if(mkdir("dd/dd/ffff") == 0){ - 24f0: 83 ec 0c sub $0xc,%esp - 24f3: 68 b0 4e 00 00 push $0x4eb0 - 24f8: e8 24 1a 00 00 call 3f21 - 24fd: 83 c4 10 add $0x10,%esp - 2500: 85 c0 test %eax,%eax - 2502: 75 17 jne 251b - printf(1, "mkdir dd/dd/ffff succeeded!\n"); - 2504: 83 ec 08 sub $0x8,%esp - 2507: 68 14 51 00 00 push $0x5114 - 250c: 6a 01 push $0x1 - 250e: e8 1b 1b 00 00 call 402e - 2513: 83 c4 10 add $0x10,%esp - exit(); - 2516: e8 9e 19 00 00 call 3eb9 - } - if(unlink("dd/xx/ff") == 0){ - 251b: 83 ec 0c sub $0xc,%esp - 251e: 68 fa 4f 00 00 push $0x4ffa - 2523: e8 e1 19 00 00 call 3f09 - 2528: 83 c4 10 add $0x10,%esp - 252b: 85 c0 test %eax,%eax - 252d: 75 17 jne 2546 - printf(1, "unlink dd/xx/ff succeeded!\n"); - 252f: 83 ec 08 sub $0x8,%esp - 2532: 68 31 51 00 00 push $0x5131 - 2537: 6a 01 push $0x1 - 2539: e8 f0 1a 00 00 call 402e - 253e: 83 c4 10 add $0x10,%esp - exit(); - 2541: e8 73 19 00 00 call 3eb9 - } - if(unlink("dd/ff/ff") == 0){ - 2546: 83 ec 0c sub $0xc,%esp - 2549: 68 d5 4f 00 00 push $0x4fd5 - 254e: e8 b6 19 00 00 call 3f09 - 2553: 83 c4 10 add $0x10,%esp - 2556: 85 c0 test %eax,%eax - 2558: 75 17 jne 2571 - printf(1, "unlink dd/ff/ff succeeded!\n"); - 255a: 83 ec 08 sub $0x8,%esp - 255d: 68 4d 51 00 00 push $0x514d - 2562: 6a 01 push $0x1 - 2564: e8 c5 1a 00 00 call 402e - 2569: 83 c4 10 add $0x10,%esp - exit(); - 256c: e8 48 19 00 00 call 3eb9 - } - if(chdir("dd/ff") == 0){ - 2571: 83 ec 0c sub $0xc,%esp - 2574: 68 e8 4d 00 00 push $0x4de8 - 2579: e8 ab 19 00 00 call 3f29 - 257e: 83 c4 10 add $0x10,%esp - 2581: 85 c0 test %eax,%eax - 2583: 75 17 jne 259c - printf(1, "chdir dd/ff succeeded!\n"); - 2585: 83 ec 08 sub $0x8,%esp - 2588: 68 69 51 00 00 push $0x5169 - 258d: 6a 01 push $0x1 - 258f: e8 9a 1a 00 00 call 402e - 2594: 83 c4 10 add $0x10,%esp - exit(); - 2597: e8 1d 19 00 00 call 3eb9 - } - if(chdir("dd/xx") == 0){ - 259c: 83 ec 0c sub $0xc,%esp - 259f: 68 81 51 00 00 push $0x5181 - 25a4: e8 80 19 00 00 call 3f29 - 25a9: 83 c4 10 add $0x10,%esp - 25ac: 85 c0 test %eax,%eax - 25ae: 75 17 jne 25c7 - printf(1, "chdir dd/xx succeeded!\n"); - 25b0: 83 ec 08 sub $0x8,%esp - 25b3: 68 87 51 00 00 push $0x5187 - 25b8: 6a 01 push $0x1 - 25ba: e8 6f 1a 00 00 call 402e - 25bf: 83 c4 10 add $0x10,%esp - exit(); - 25c2: e8 f2 18 00 00 call 3eb9 - } - - if(unlink("dd/dd/ffff") != 0){ - 25c7: 83 ec 0c sub $0xc,%esp - 25ca: 68 b0 4e 00 00 push $0x4eb0 - 25cf: e8 35 19 00 00 call 3f09 - 25d4: 83 c4 10 add $0x10,%esp - 25d7: 85 c0 test %eax,%eax - 25d9: 74 17 je 25f2 - printf(1, "unlink dd/dd/ff failed\n"); - 25db: 83 ec 08 sub $0x8,%esp - 25de: 68 dd 4e 00 00 push $0x4edd - 25e3: 6a 01 push $0x1 - 25e5: e8 44 1a 00 00 call 402e - 25ea: 83 c4 10 add $0x10,%esp - exit(); - 25ed: e8 c7 18 00 00 call 3eb9 - } - if(unlink("dd/ff") != 0){ - 25f2: 83 ec 0c sub $0xc,%esp - 25f5: 68 e8 4d 00 00 push $0x4de8 - 25fa: e8 0a 19 00 00 call 3f09 - 25ff: 83 c4 10 add $0x10,%esp - 2602: 85 c0 test %eax,%eax - 2604: 74 17 je 261d - printf(1, "unlink dd/ff failed\n"); - 2606: 83 ec 08 sub $0x8,%esp - 2609: 68 9f 51 00 00 push $0x519f - 260e: 6a 01 push $0x1 - 2610: e8 19 1a 00 00 call 402e - 2615: 83 c4 10 add $0x10,%esp - exit(); - 2618: e8 9c 18 00 00 call 3eb9 - } - if(unlink("dd") == 0){ - 261d: 83 ec 0c sub $0xc,%esp - 2620: 68 cd 4d 00 00 push $0x4dcd - 2625: e8 df 18 00 00 call 3f09 - 262a: 83 c4 10 add $0x10,%esp - 262d: 85 c0 test %eax,%eax - 262f: 75 17 jne 2648 - printf(1, "unlink non-empty dd succeeded!\n"); - 2631: 83 ec 08 sub $0x8,%esp - 2634: 68 b4 51 00 00 push $0x51b4 - 2639: 6a 01 push $0x1 - 263b: e8 ee 19 00 00 call 402e - 2640: 83 c4 10 add $0x10,%esp - exit(); - 2643: e8 71 18 00 00 call 3eb9 - } - if(unlink("dd/dd") < 0){ - 2648: 83 ec 0c sub $0xc,%esp - 264b: 68 d4 51 00 00 push $0x51d4 - 2650: e8 b4 18 00 00 call 3f09 - 2655: 83 c4 10 add $0x10,%esp - 2658: 85 c0 test %eax,%eax - 265a: 79 17 jns 2673 - printf(1, "unlink dd/dd failed\n"); - 265c: 83 ec 08 sub $0x8,%esp - 265f: 68 da 51 00 00 push $0x51da - 2664: 6a 01 push $0x1 - 2666: e8 c3 19 00 00 call 402e - 266b: 83 c4 10 add $0x10,%esp - exit(); - 266e: e8 46 18 00 00 call 3eb9 - } - if(unlink("dd") < 0){ - 2673: 83 ec 0c sub $0xc,%esp - 2676: 68 cd 4d 00 00 push $0x4dcd - 267b: e8 89 18 00 00 call 3f09 - 2680: 83 c4 10 add $0x10,%esp - 2683: 85 c0 test %eax,%eax - 2685: 79 17 jns 269e - printf(1, "unlink dd failed\n"); - 2687: 83 ec 08 sub $0x8,%esp - 268a: 68 ef 51 00 00 push $0x51ef - 268f: 6a 01 push $0x1 - 2691: e8 98 19 00 00 call 402e - 2696: 83 c4 10 add $0x10,%esp - exit(); - 2699: e8 1b 18 00 00 call 3eb9 - } - - printf(1, "subdir ok\n"); - 269e: 83 ec 08 sub $0x8,%esp - 26a1: 68 01 52 00 00 push $0x5201 - 26a6: 6a 01 push $0x1 - 26a8: e8 81 19 00 00 call 402e - 26ad: 83 c4 10 add $0x10,%esp -} - 26b0: c9 leave - 26b1: c3 ret - -000026b2 : - -// test writes that are larger than the log. -void -bigwrite(void) -{ - 26b2: 55 push %ebp - 26b3: 89 e5 mov %esp,%ebp - 26b5: 83 ec 18 sub $0x18,%esp - int fd, sz; - - printf(1, "bigwrite test\n"); - 26b8: 83 ec 08 sub $0x8,%esp - 26bb: 68 0c 52 00 00 push $0x520c - 26c0: 6a 01 push $0x1 - 26c2: e8 67 19 00 00 call 402e - 26c7: 83 c4 10 add $0x10,%esp - - unlink("bigwrite"); - 26ca: 83 ec 0c sub $0xc,%esp - 26cd: 68 1b 52 00 00 push $0x521b - 26d2: e8 32 18 00 00 call 3f09 - 26d7: 83 c4 10 add $0x10,%esp - for(sz = 499; sz < 12*512; sz += 471){ - 26da: c7 45 f4 f3 01 00 00 movl $0x1f3,-0xc(%ebp) - 26e1: e9 a8 00 00 00 jmp 278e - fd = open("bigwrite", O_CREATE | O_RDWR); - 26e6: 83 ec 08 sub $0x8,%esp - 26e9: 68 02 02 00 00 push $0x202 - 26ee: 68 1b 52 00 00 push $0x521b - 26f3: e8 01 18 00 00 call 3ef9 - 26f8: 83 c4 10 add $0x10,%esp - 26fb: 89 45 ec mov %eax,-0x14(%ebp) - if(fd < 0){ - 26fe: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 2702: 79 17 jns 271b - printf(1, "cannot create bigwrite\n"); - 2704: 83 ec 08 sub $0x8,%esp - 2707: 68 24 52 00 00 push $0x5224 - 270c: 6a 01 push $0x1 - 270e: e8 1b 19 00 00 call 402e - 2713: 83 c4 10 add $0x10,%esp - exit(); - 2716: e8 9e 17 00 00 call 3eb9 - } - int i; - for(i = 0; i < 2; i++){ - 271b: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - 2722: eb 3f jmp 2763 - int cc = write(fd, buf, sz); - 2724: 83 ec 04 sub $0x4,%esp - 2727: ff 75 f4 pushl -0xc(%ebp) - 272a: 68 c0 8a 00 00 push $0x8ac0 - 272f: ff 75 ec pushl -0x14(%ebp) - 2732: e8 a2 17 00 00 call 3ed9 - 2737: 83 c4 10 add $0x10,%esp - 273a: 89 45 e8 mov %eax,-0x18(%ebp) - if(cc != sz){ - 273d: 8b 45 e8 mov -0x18(%ebp),%eax - 2740: 3b 45 f4 cmp -0xc(%ebp),%eax - 2743: 74 1a je 275f - printf(1, "write(%d) ret %d\n", sz, cc); - 2745: ff 75 e8 pushl -0x18(%ebp) - 2748: ff 75 f4 pushl -0xc(%ebp) - 274b: 68 3c 52 00 00 push $0x523c - 2750: 6a 01 push $0x1 - 2752: e8 d7 18 00 00 call 402e - 2757: 83 c4 10 add $0x10,%esp - exit(); - 275a: e8 5a 17 00 00 call 3eb9 - if(fd < 0){ - printf(1, "cannot create bigwrite\n"); - exit(); - } - int i; - for(i = 0; i < 2; i++){ - 275f: 83 45 f0 01 addl $0x1,-0x10(%ebp) - 2763: 83 7d f0 01 cmpl $0x1,-0x10(%ebp) - 2767: 7e bb jle 2724 - if(cc != sz){ - printf(1, "write(%d) ret %d\n", sz, cc); - exit(); - } - } - close(fd); - 2769: 83 ec 0c sub $0xc,%esp - 276c: ff 75 ec pushl -0x14(%ebp) - 276f: e8 6d 17 00 00 call 3ee1 - 2774: 83 c4 10 add $0x10,%esp - unlink("bigwrite"); - 2777: 83 ec 0c sub $0xc,%esp - 277a: 68 1b 52 00 00 push $0x521b - 277f: e8 85 17 00 00 call 3f09 - 2784: 83 c4 10 add $0x10,%esp - int fd, sz; - - printf(1, "bigwrite test\n"); - - unlink("bigwrite"); - for(sz = 499; sz < 12*512; sz += 471){ - 2787: 81 45 f4 d7 01 00 00 addl $0x1d7,-0xc(%ebp) - 278e: 81 7d f4 ff 17 00 00 cmpl $0x17ff,-0xc(%ebp) - 2795: 0f 8e 4b ff ff ff jle 26e6 - } - close(fd); - unlink("bigwrite"); - } - - printf(1, "bigwrite ok\n"); - 279b: 83 ec 08 sub $0x8,%esp - 279e: 68 4e 52 00 00 push $0x524e - 27a3: 6a 01 push $0x1 - 27a5: e8 84 18 00 00 call 402e - 27aa: 83 c4 10 add $0x10,%esp -} - 27ad: c9 leave - 27ae: c3 ret - -000027af : - -void -bigfile(void) -{ - 27af: 55 push %ebp - 27b0: 89 e5 mov %esp,%ebp - 27b2: 83 ec 18 sub $0x18,%esp - int fd, i, total, cc; - - printf(1, "bigfile test\n"); - 27b5: 83 ec 08 sub $0x8,%esp - 27b8: 68 5b 52 00 00 push $0x525b - 27bd: 6a 01 push $0x1 - 27bf: e8 6a 18 00 00 call 402e - 27c4: 83 c4 10 add $0x10,%esp - - unlink("bigfile"); - 27c7: 83 ec 0c sub $0xc,%esp - 27ca: 68 69 52 00 00 push $0x5269 - 27cf: e8 35 17 00 00 call 3f09 - 27d4: 83 c4 10 add $0x10,%esp - fd = open("bigfile", O_CREATE | O_RDWR); - 27d7: 83 ec 08 sub $0x8,%esp - 27da: 68 02 02 00 00 push $0x202 - 27df: 68 69 52 00 00 push $0x5269 - 27e4: e8 10 17 00 00 call 3ef9 - 27e9: 83 c4 10 add $0x10,%esp - 27ec: 89 45 ec mov %eax,-0x14(%ebp) - if(fd < 0){ - 27ef: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 27f3: 79 17 jns 280c - printf(1, "cannot create bigfile"); - 27f5: 83 ec 08 sub $0x8,%esp - 27f8: 68 71 52 00 00 push $0x5271 - 27fd: 6a 01 push $0x1 - 27ff: e8 2a 18 00 00 call 402e - 2804: 83 c4 10 add $0x10,%esp - exit(); - 2807: e8 ad 16 00 00 call 3eb9 - } - for(i = 0; i < 20; i++){ - 280c: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 2813: eb 52 jmp 2867 - memset(buf, i, 600); - 2815: 83 ec 04 sub $0x4,%esp - 2818: 68 58 02 00 00 push $0x258 - 281d: ff 75 f4 pushl -0xc(%ebp) - 2820: 68 c0 8a 00 00 push $0x8ac0 - 2825: e8 f5 14 00 00 call 3d1f - 282a: 83 c4 10 add $0x10,%esp - if(write(fd, buf, 600) != 600){ - 282d: 83 ec 04 sub $0x4,%esp - 2830: 68 58 02 00 00 push $0x258 - 2835: 68 c0 8a 00 00 push $0x8ac0 - 283a: ff 75 ec pushl -0x14(%ebp) - 283d: e8 97 16 00 00 call 3ed9 - 2842: 83 c4 10 add $0x10,%esp - 2845: 3d 58 02 00 00 cmp $0x258,%eax - 284a: 74 17 je 2863 - printf(1, "write bigfile failed\n"); - 284c: 83 ec 08 sub $0x8,%esp - 284f: 68 87 52 00 00 push $0x5287 - 2854: 6a 01 push $0x1 - 2856: e8 d3 17 00 00 call 402e - 285b: 83 c4 10 add $0x10,%esp - exit(); - 285e: e8 56 16 00 00 call 3eb9 - fd = open("bigfile", O_CREATE | O_RDWR); - if(fd < 0){ - printf(1, "cannot create bigfile"); - exit(); - } - for(i = 0; i < 20; i++){ - 2863: 83 45 f4 01 addl $0x1,-0xc(%ebp) - 2867: 83 7d f4 13 cmpl $0x13,-0xc(%ebp) - 286b: 7e a8 jle 2815 - if(write(fd, buf, 600) != 600){ - printf(1, "write bigfile failed\n"); - exit(); - } - } - close(fd); - 286d: 83 ec 0c sub $0xc,%esp - 2870: ff 75 ec pushl -0x14(%ebp) - 2873: e8 69 16 00 00 call 3ee1 - 2878: 83 c4 10 add $0x10,%esp - - fd = open("bigfile", 0); - 287b: 83 ec 08 sub $0x8,%esp - 287e: 6a 00 push $0x0 - 2880: 68 69 52 00 00 push $0x5269 - 2885: e8 6f 16 00 00 call 3ef9 - 288a: 83 c4 10 add $0x10,%esp - 288d: 89 45 ec mov %eax,-0x14(%ebp) - if(fd < 0){ - 2890: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 2894: 79 17 jns 28ad - printf(1, "cannot open bigfile\n"); - 2896: 83 ec 08 sub $0x8,%esp - 2899: 68 9d 52 00 00 push $0x529d - 289e: 6a 01 push $0x1 - 28a0: e8 89 17 00 00 call 402e - 28a5: 83 c4 10 add $0x10,%esp - exit(); - 28a8: e8 0c 16 00 00 call 3eb9 - } - total = 0; - 28ad: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - for(i = 0; ; i++){ - 28b4: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - cc = read(fd, buf, 300); - 28bb: 83 ec 04 sub $0x4,%esp - 28be: 68 2c 01 00 00 push $0x12c - 28c3: 68 c0 8a 00 00 push $0x8ac0 - 28c8: ff 75 ec pushl -0x14(%ebp) - 28cb: e8 01 16 00 00 call 3ed1 - 28d0: 83 c4 10 add $0x10,%esp - 28d3: 89 45 e8 mov %eax,-0x18(%ebp) - if(cc < 0){ - 28d6: 83 7d e8 00 cmpl $0x0,-0x18(%ebp) - 28da: 79 17 jns 28f3 - printf(1, "read bigfile failed\n"); - 28dc: 83 ec 08 sub $0x8,%esp - 28df: 68 b2 52 00 00 push $0x52b2 - 28e4: 6a 01 push $0x1 - 28e6: e8 43 17 00 00 call 402e - 28eb: 83 c4 10 add $0x10,%esp - exit(); - 28ee: e8 c6 15 00 00 call 3eb9 - } - if(cc == 0) - 28f3: 83 7d e8 00 cmpl $0x0,-0x18(%ebp) - 28f7: 75 1e jne 2917 - break; - 28f9: 90 nop - printf(1, "read bigfile wrong data\n"); - exit(); - } - total += cc; - } - close(fd); - 28fa: 83 ec 0c sub $0xc,%esp - 28fd: ff 75 ec pushl -0x14(%ebp) - 2900: e8 dc 15 00 00 call 3ee1 - 2905: 83 c4 10 add $0x10,%esp - if(total != 20*600){ - 2908: 81 7d f0 e0 2e 00 00 cmpl $0x2ee0,-0x10(%ebp) - 290f: 0f 84 93 00 00 00 je 29a8 - 2915: eb 7a jmp 2991 - printf(1, "read bigfile failed\n"); - exit(); - } - if(cc == 0) - break; - if(cc != 300){ - 2917: 81 7d e8 2c 01 00 00 cmpl $0x12c,-0x18(%ebp) - 291e: 74 17 je 2937 - printf(1, "short read bigfile\n"); - 2920: 83 ec 08 sub $0x8,%esp - 2923: 68 c7 52 00 00 push $0x52c7 - 2928: 6a 01 push $0x1 - 292a: e8 ff 16 00 00 call 402e - 292f: 83 c4 10 add $0x10,%esp - exit(); - 2932: e8 82 15 00 00 call 3eb9 - } - if(buf[0] != i/2 || buf[299] != i/2){ - 2937: 0f b6 05 c0 8a 00 00 movzbl 0x8ac0,%eax - 293e: 0f be d0 movsbl %al,%edx - 2941: 8b 45 f4 mov -0xc(%ebp),%eax - 2944: 89 c1 mov %eax,%ecx - 2946: c1 e9 1f shr $0x1f,%ecx - 2949: 01 c8 add %ecx,%eax - 294b: d1 f8 sar %eax - 294d: 39 c2 cmp %eax,%edx - 294f: 75 1a jne 296b - 2951: 0f b6 05 eb 8b 00 00 movzbl 0x8beb,%eax - 2958: 0f be d0 movsbl %al,%edx - 295b: 8b 45 f4 mov -0xc(%ebp),%eax - 295e: 89 c1 mov %eax,%ecx - 2960: c1 e9 1f shr $0x1f,%ecx - 2963: 01 c8 add %ecx,%eax - 2965: d1 f8 sar %eax - 2967: 39 c2 cmp %eax,%edx - 2969: 74 17 je 2982 - printf(1, "read bigfile wrong data\n"); - 296b: 83 ec 08 sub $0x8,%esp - 296e: 68 db 52 00 00 push $0x52db - 2973: 6a 01 push $0x1 - 2975: e8 b4 16 00 00 call 402e - 297a: 83 c4 10 add $0x10,%esp - exit(); - 297d: e8 37 15 00 00 call 3eb9 - } - total += cc; - 2982: 8b 45 e8 mov -0x18(%ebp),%eax - 2985: 01 45 f0 add %eax,-0x10(%ebp) - if(fd < 0){ - printf(1, "cannot open bigfile\n"); - exit(); - } - total = 0; - for(i = 0; ; i++){ - 2988: 83 45 f4 01 addl $0x1,-0xc(%ebp) - if(buf[0] != i/2 || buf[299] != i/2){ - printf(1, "read bigfile wrong data\n"); - exit(); - } - total += cc; - } - 298c: e9 2a ff ff ff jmp 28bb - close(fd); - if(total != 20*600){ - printf(1, "read bigfile wrong total\n"); - 2991: 83 ec 08 sub $0x8,%esp - 2994: 68 f4 52 00 00 push $0x52f4 - 2999: 6a 01 push $0x1 - 299b: e8 8e 16 00 00 call 402e - 29a0: 83 c4 10 add $0x10,%esp - exit(); - 29a3: e8 11 15 00 00 call 3eb9 - } - unlink("bigfile"); - 29a8: 83 ec 0c sub $0xc,%esp - 29ab: 68 69 52 00 00 push $0x5269 - 29b0: e8 54 15 00 00 call 3f09 - 29b5: 83 c4 10 add $0x10,%esp - - printf(1, "bigfile test ok\n"); - 29b8: 83 ec 08 sub $0x8,%esp - 29bb: 68 0e 53 00 00 push $0x530e - 29c0: 6a 01 push $0x1 - 29c2: e8 67 16 00 00 call 402e - 29c7: 83 c4 10 add $0x10,%esp -} - 29ca: c9 leave - 29cb: c3 ret - -000029cc : - -void -fourteen(void) -{ - 29cc: 55 push %ebp - 29cd: 89 e5 mov %esp,%ebp - 29cf: 83 ec 18 sub $0x18,%esp - int fd; - - // DIRSIZ is 14. - printf(1, "fourteen test\n"); - 29d2: 83 ec 08 sub $0x8,%esp - 29d5: 68 1f 53 00 00 push $0x531f - 29da: 6a 01 push $0x1 - 29dc: e8 4d 16 00 00 call 402e - 29e1: 83 c4 10 add $0x10,%esp - - if(mkdir("12345678901234") != 0){ - 29e4: 83 ec 0c sub $0xc,%esp - 29e7: 68 2e 53 00 00 push $0x532e - 29ec: e8 30 15 00 00 call 3f21 - 29f1: 83 c4 10 add $0x10,%esp - 29f4: 85 c0 test %eax,%eax - 29f6: 74 17 je 2a0f - printf(1, "mkdir 12345678901234 failed\n"); - 29f8: 83 ec 08 sub $0x8,%esp - 29fb: 68 3d 53 00 00 push $0x533d - 2a00: 6a 01 push $0x1 - 2a02: e8 27 16 00 00 call 402e - 2a07: 83 c4 10 add $0x10,%esp - exit(); - 2a0a: e8 aa 14 00 00 call 3eb9 - } - if(mkdir("12345678901234/123456789012345") != 0){ - 2a0f: 83 ec 0c sub $0xc,%esp - 2a12: 68 5c 53 00 00 push $0x535c - 2a17: e8 05 15 00 00 call 3f21 - 2a1c: 83 c4 10 add $0x10,%esp - 2a1f: 85 c0 test %eax,%eax - 2a21: 74 17 je 2a3a - printf(1, "mkdir 12345678901234/123456789012345 failed\n"); - 2a23: 83 ec 08 sub $0x8,%esp - 2a26: 68 7c 53 00 00 push $0x537c - 2a2b: 6a 01 push $0x1 - 2a2d: e8 fc 15 00 00 call 402e - 2a32: 83 c4 10 add $0x10,%esp - exit(); - 2a35: e8 7f 14 00 00 call 3eb9 - } - fd = open("123456789012345/123456789012345/123456789012345", O_CREATE); - 2a3a: 83 ec 08 sub $0x8,%esp - 2a3d: 68 00 02 00 00 push $0x200 - 2a42: 68 ac 53 00 00 push $0x53ac - 2a47: e8 ad 14 00 00 call 3ef9 - 2a4c: 83 c4 10 add $0x10,%esp - 2a4f: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd < 0){ - 2a52: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 2a56: 79 17 jns 2a6f - printf(1, "create 123456789012345/123456789012345/123456789012345 failed\n"); - 2a58: 83 ec 08 sub $0x8,%esp - 2a5b: 68 dc 53 00 00 push $0x53dc - 2a60: 6a 01 push $0x1 - 2a62: e8 c7 15 00 00 call 402e - 2a67: 83 c4 10 add $0x10,%esp - exit(); - 2a6a: e8 4a 14 00 00 call 3eb9 - } - close(fd); - 2a6f: 83 ec 0c sub $0xc,%esp - 2a72: ff 75 f4 pushl -0xc(%ebp) - 2a75: e8 67 14 00 00 call 3ee1 - 2a7a: 83 c4 10 add $0x10,%esp - fd = open("12345678901234/12345678901234/12345678901234", 0); - 2a7d: 83 ec 08 sub $0x8,%esp - 2a80: 6a 00 push $0x0 - 2a82: 68 1c 54 00 00 push $0x541c - 2a87: e8 6d 14 00 00 call 3ef9 - 2a8c: 83 c4 10 add $0x10,%esp - 2a8f: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd < 0){ - 2a92: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 2a96: 79 17 jns 2aaf - printf(1, "open 12345678901234/12345678901234/12345678901234 failed\n"); - 2a98: 83 ec 08 sub $0x8,%esp - 2a9b: 68 4c 54 00 00 push $0x544c - 2aa0: 6a 01 push $0x1 - 2aa2: e8 87 15 00 00 call 402e - 2aa7: 83 c4 10 add $0x10,%esp - exit(); - 2aaa: e8 0a 14 00 00 call 3eb9 - } - close(fd); - 2aaf: 83 ec 0c sub $0xc,%esp - 2ab2: ff 75 f4 pushl -0xc(%ebp) - 2ab5: e8 27 14 00 00 call 3ee1 - 2aba: 83 c4 10 add $0x10,%esp - - if(mkdir("12345678901234/12345678901234") == 0){ - 2abd: 83 ec 0c sub $0xc,%esp - 2ac0: 68 86 54 00 00 push $0x5486 - 2ac5: e8 57 14 00 00 call 3f21 - 2aca: 83 c4 10 add $0x10,%esp - 2acd: 85 c0 test %eax,%eax - 2acf: 75 17 jne 2ae8 - printf(1, "mkdir 12345678901234/12345678901234 succeeded!\n"); - 2ad1: 83 ec 08 sub $0x8,%esp - 2ad4: 68 a4 54 00 00 push $0x54a4 - 2ad9: 6a 01 push $0x1 - 2adb: e8 4e 15 00 00 call 402e - 2ae0: 83 c4 10 add $0x10,%esp - exit(); - 2ae3: e8 d1 13 00 00 call 3eb9 - } - if(mkdir("123456789012345/12345678901234") == 0){ - 2ae8: 83 ec 0c sub $0xc,%esp - 2aeb: 68 d4 54 00 00 push $0x54d4 - 2af0: e8 2c 14 00 00 call 3f21 - 2af5: 83 c4 10 add $0x10,%esp - 2af8: 85 c0 test %eax,%eax - 2afa: 75 17 jne 2b13 - printf(1, "mkdir 12345678901234/123456789012345 succeeded!\n"); - 2afc: 83 ec 08 sub $0x8,%esp - 2aff: 68 f4 54 00 00 push $0x54f4 - 2b04: 6a 01 push $0x1 - 2b06: e8 23 15 00 00 call 402e - 2b0b: 83 c4 10 add $0x10,%esp - exit(); - 2b0e: e8 a6 13 00 00 call 3eb9 - } - - printf(1, "fourteen ok\n"); - 2b13: 83 ec 08 sub $0x8,%esp - 2b16: 68 25 55 00 00 push $0x5525 - 2b1b: 6a 01 push $0x1 - 2b1d: e8 0c 15 00 00 call 402e - 2b22: 83 c4 10 add $0x10,%esp -} - 2b25: c9 leave - 2b26: c3 ret - -00002b27 : - -void -rmdot(void) -{ - 2b27: 55 push %ebp - 2b28: 89 e5 mov %esp,%ebp - 2b2a: 83 ec 08 sub $0x8,%esp - printf(1, "rmdot test\n"); - 2b2d: 83 ec 08 sub $0x8,%esp - 2b30: 68 32 55 00 00 push $0x5532 - 2b35: 6a 01 push $0x1 - 2b37: e8 f2 14 00 00 call 402e - 2b3c: 83 c4 10 add $0x10,%esp - if(mkdir("dots") != 0){ - 2b3f: 83 ec 0c sub $0xc,%esp - 2b42: 68 3e 55 00 00 push $0x553e - 2b47: e8 d5 13 00 00 call 3f21 - 2b4c: 83 c4 10 add $0x10,%esp - 2b4f: 85 c0 test %eax,%eax - 2b51: 74 17 je 2b6a - printf(1, "mkdir dots failed\n"); - 2b53: 83 ec 08 sub $0x8,%esp - 2b56: 68 43 55 00 00 push $0x5543 - 2b5b: 6a 01 push $0x1 - 2b5d: e8 cc 14 00 00 call 402e - 2b62: 83 c4 10 add $0x10,%esp - exit(); - 2b65: e8 4f 13 00 00 call 3eb9 - } - if(chdir("dots") != 0){ - 2b6a: 83 ec 0c sub $0xc,%esp - 2b6d: 68 3e 55 00 00 push $0x553e - 2b72: e8 b2 13 00 00 call 3f29 - 2b77: 83 c4 10 add $0x10,%esp - 2b7a: 85 c0 test %eax,%eax - 2b7c: 74 17 je 2b95 - printf(1, "chdir dots failed\n"); - 2b7e: 83 ec 08 sub $0x8,%esp - 2b81: 68 56 55 00 00 push $0x5556 - 2b86: 6a 01 push $0x1 - 2b88: e8 a1 14 00 00 call 402e - 2b8d: 83 c4 10 add $0x10,%esp - exit(); - 2b90: e8 24 13 00 00 call 3eb9 - } - if(unlink(".") == 0){ - 2b95: 83 ec 0c sub $0xc,%esp - 2b98: 68 6f 4c 00 00 push $0x4c6f - 2b9d: e8 67 13 00 00 call 3f09 - 2ba2: 83 c4 10 add $0x10,%esp - 2ba5: 85 c0 test %eax,%eax - 2ba7: 75 17 jne 2bc0 - printf(1, "rm . worked!\n"); - 2ba9: 83 ec 08 sub $0x8,%esp - 2bac: 68 69 55 00 00 push $0x5569 - 2bb1: 6a 01 push $0x1 - 2bb3: e8 76 14 00 00 call 402e - 2bb8: 83 c4 10 add $0x10,%esp - exit(); - 2bbb: e8 f9 12 00 00 call 3eb9 - } - if(unlink("..") == 0){ - 2bc0: 83 ec 0c sub $0xc,%esp - 2bc3: 68 02 48 00 00 push $0x4802 - 2bc8: e8 3c 13 00 00 call 3f09 - 2bcd: 83 c4 10 add $0x10,%esp - 2bd0: 85 c0 test %eax,%eax - 2bd2: 75 17 jne 2beb - printf(1, "rm .. worked!\n"); - 2bd4: 83 ec 08 sub $0x8,%esp - 2bd7: 68 77 55 00 00 push $0x5577 - 2bdc: 6a 01 push $0x1 - 2bde: e8 4b 14 00 00 call 402e - 2be3: 83 c4 10 add $0x10,%esp - exit(); - 2be6: e8 ce 12 00 00 call 3eb9 - } - if(chdir("/") != 0){ - 2beb: 83 ec 0c sub $0xc,%esp - 2bee: 68 56 44 00 00 push $0x4456 - 2bf3: e8 31 13 00 00 call 3f29 - 2bf8: 83 c4 10 add $0x10,%esp - 2bfb: 85 c0 test %eax,%eax - 2bfd: 74 17 je 2c16 - printf(1, "chdir / failed\n"); - 2bff: 83 ec 08 sub $0x8,%esp - 2c02: 68 58 44 00 00 push $0x4458 - 2c07: 6a 01 push $0x1 - 2c09: e8 20 14 00 00 call 402e - 2c0e: 83 c4 10 add $0x10,%esp - exit(); - 2c11: e8 a3 12 00 00 call 3eb9 - } - if(unlink("dots/.") == 0){ - 2c16: 83 ec 0c sub $0xc,%esp - 2c19: 68 86 55 00 00 push $0x5586 - 2c1e: e8 e6 12 00 00 call 3f09 - 2c23: 83 c4 10 add $0x10,%esp - 2c26: 85 c0 test %eax,%eax - 2c28: 75 17 jne 2c41 - printf(1, "unlink dots/. worked!\n"); - 2c2a: 83 ec 08 sub $0x8,%esp - 2c2d: 68 8d 55 00 00 push $0x558d - 2c32: 6a 01 push $0x1 - 2c34: e8 f5 13 00 00 call 402e - 2c39: 83 c4 10 add $0x10,%esp - exit(); - 2c3c: e8 78 12 00 00 call 3eb9 - } - if(unlink("dots/..") == 0){ - 2c41: 83 ec 0c sub $0xc,%esp - 2c44: 68 a4 55 00 00 push $0x55a4 - 2c49: e8 bb 12 00 00 call 3f09 - 2c4e: 83 c4 10 add $0x10,%esp - 2c51: 85 c0 test %eax,%eax - 2c53: 75 17 jne 2c6c - printf(1, "unlink dots/.. worked!\n"); - 2c55: 83 ec 08 sub $0x8,%esp - 2c58: 68 ac 55 00 00 push $0x55ac - 2c5d: 6a 01 push $0x1 - 2c5f: e8 ca 13 00 00 call 402e - 2c64: 83 c4 10 add $0x10,%esp - exit(); - 2c67: e8 4d 12 00 00 call 3eb9 - } - if(unlink("dots") != 0){ - 2c6c: 83 ec 0c sub $0xc,%esp - 2c6f: 68 3e 55 00 00 push $0x553e - 2c74: e8 90 12 00 00 call 3f09 - 2c79: 83 c4 10 add $0x10,%esp - 2c7c: 85 c0 test %eax,%eax - 2c7e: 74 17 je 2c97 - printf(1, "unlink dots failed!\n"); - 2c80: 83 ec 08 sub $0x8,%esp - 2c83: 68 c4 55 00 00 push $0x55c4 - 2c88: 6a 01 push $0x1 - 2c8a: e8 9f 13 00 00 call 402e - 2c8f: 83 c4 10 add $0x10,%esp - exit(); - 2c92: e8 22 12 00 00 call 3eb9 - } - printf(1, "rmdot ok\n"); - 2c97: 83 ec 08 sub $0x8,%esp - 2c9a: 68 d9 55 00 00 push $0x55d9 - 2c9f: 6a 01 push $0x1 - 2ca1: e8 88 13 00 00 call 402e - 2ca6: 83 c4 10 add $0x10,%esp -} - 2ca9: c9 leave - 2caa: c3 ret - -00002cab : - -void -dirfile(void) -{ - 2cab: 55 push %ebp - 2cac: 89 e5 mov %esp,%ebp - 2cae: 83 ec 18 sub $0x18,%esp - int fd; - - printf(1, "dir vs file\n"); - 2cb1: 83 ec 08 sub $0x8,%esp - 2cb4: 68 e3 55 00 00 push $0x55e3 - 2cb9: 6a 01 push $0x1 - 2cbb: e8 6e 13 00 00 call 402e - 2cc0: 83 c4 10 add $0x10,%esp - - fd = open("dirfile", O_CREATE); - 2cc3: 83 ec 08 sub $0x8,%esp - 2cc6: 68 00 02 00 00 push $0x200 - 2ccb: 68 f0 55 00 00 push $0x55f0 - 2cd0: e8 24 12 00 00 call 3ef9 - 2cd5: 83 c4 10 add $0x10,%esp - 2cd8: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd < 0){ - 2cdb: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 2cdf: 79 17 jns 2cf8 - printf(1, "create dirfile failed\n"); - 2ce1: 83 ec 08 sub $0x8,%esp - 2ce4: 68 f8 55 00 00 push $0x55f8 - 2ce9: 6a 01 push $0x1 - 2ceb: e8 3e 13 00 00 call 402e - 2cf0: 83 c4 10 add $0x10,%esp - exit(); - 2cf3: e8 c1 11 00 00 call 3eb9 - } - close(fd); - 2cf8: 83 ec 0c sub $0xc,%esp - 2cfb: ff 75 f4 pushl -0xc(%ebp) - 2cfe: e8 de 11 00 00 call 3ee1 - 2d03: 83 c4 10 add $0x10,%esp - if(chdir("dirfile") == 0){ - 2d06: 83 ec 0c sub $0xc,%esp - 2d09: 68 f0 55 00 00 push $0x55f0 - 2d0e: e8 16 12 00 00 call 3f29 - 2d13: 83 c4 10 add $0x10,%esp - 2d16: 85 c0 test %eax,%eax - 2d18: 75 17 jne 2d31 - printf(1, "chdir dirfile succeeded!\n"); - 2d1a: 83 ec 08 sub $0x8,%esp - 2d1d: 68 0f 56 00 00 push $0x560f - 2d22: 6a 01 push $0x1 - 2d24: e8 05 13 00 00 call 402e - 2d29: 83 c4 10 add $0x10,%esp - exit(); - 2d2c: e8 88 11 00 00 call 3eb9 - } - fd = open("dirfile/xx", 0); - 2d31: 83 ec 08 sub $0x8,%esp - 2d34: 6a 00 push $0x0 - 2d36: 68 29 56 00 00 push $0x5629 - 2d3b: e8 b9 11 00 00 call 3ef9 - 2d40: 83 c4 10 add $0x10,%esp - 2d43: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd >= 0){ - 2d46: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 2d4a: 78 17 js 2d63 - printf(1, "create dirfile/xx succeeded!\n"); - 2d4c: 83 ec 08 sub $0x8,%esp - 2d4f: 68 34 56 00 00 push $0x5634 - 2d54: 6a 01 push $0x1 - 2d56: e8 d3 12 00 00 call 402e - 2d5b: 83 c4 10 add $0x10,%esp - exit(); - 2d5e: e8 56 11 00 00 call 3eb9 - } - fd = open("dirfile/xx", O_CREATE); - 2d63: 83 ec 08 sub $0x8,%esp - 2d66: 68 00 02 00 00 push $0x200 - 2d6b: 68 29 56 00 00 push $0x5629 - 2d70: e8 84 11 00 00 call 3ef9 - 2d75: 83 c4 10 add $0x10,%esp - 2d78: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd >= 0){ - 2d7b: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 2d7f: 78 17 js 2d98 - printf(1, "create dirfile/xx succeeded!\n"); - 2d81: 83 ec 08 sub $0x8,%esp - 2d84: 68 34 56 00 00 push $0x5634 - 2d89: 6a 01 push $0x1 - 2d8b: e8 9e 12 00 00 call 402e - 2d90: 83 c4 10 add $0x10,%esp - exit(); - 2d93: e8 21 11 00 00 call 3eb9 - } - if(mkdir("dirfile/xx") == 0){ - 2d98: 83 ec 0c sub $0xc,%esp - 2d9b: 68 29 56 00 00 push $0x5629 - 2da0: e8 7c 11 00 00 call 3f21 - 2da5: 83 c4 10 add $0x10,%esp - 2da8: 85 c0 test %eax,%eax - 2daa: 75 17 jne 2dc3 - printf(1, "mkdir dirfile/xx succeeded!\n"); - 2dac: 83 ec 08 sub $0x8,%esp - 2daf: 68 52 56 00 00 push $0x5652 - 2db4: 6a 01 push $0x1 - 2db6: e8 73 12 00 00 call 402e - 2dbb: 83 c4 10 add $0x10,%esp - exit(); - 2dbe: e8 f6 10 00 00 call 3eb9 - } - if(unlink("dirfile/xx") == 0){ - 2dc3: 83 ec 0c sub $0xc,%esp - 2dc6: 68 29 56 00 00 push $0x5629 - 2dcb: e8 39 11 00 00 call 3f09 - 2dd0: 83 c4 10 add $0x10,%esp - 2dd3: 85 c0 test %eax,%eax - 2dd5: 75 17 jne 2dee - printf(1, "unlink dirfile/xx succeeded!\n"); - 2dd7: 83 ec 08 sub $0x8,%esp - 2dda: 68 6f 56 00 00 push $0x566f - 2ddf: 6a 01 push $0x1 - 2de1: e8 48 12 00 00 call 402e - 2de6: 83 c4 10 add $0x10,%esp - exit(); - 2de9: e8 cb 10 00 00 call 3eb9 - } - if(link("README", "dirfile/xx") == 0){ - 2dee: 83 ec 08 sub $0x8,%esp - 2df1: 68 29 56 00 00 push $0x5629 - 2df6: 68 8d 56 00 00 push $0x568d - 2dfb: e8 19 11 00 00 call 3f19 - 2e00: 83 c4 10 add $0x10,%esp - 2e03: 85 c0 test %eax,%eax - 2e05: 75 17 jne 2e1e - printf(1, "link to dirfile/xx succeeded!\n"); - 2e07: 83 ec 08 sub $0x8,%esp - 2e0a: 68 94 56 00 00 push $0x5694 - 2e0f: 6a 01 push $0x1 - 2e11: e8 18 12 00 00 call 402e - 2e16: 83 c4 10 add $0x10,%esp - exit(); - 2e19: e8 9b 10 00 00 call 3eb9 - } - if(unlink("dirfile") != 0){ - 2e1e: 83 ec 0c sub $0xc,%esp - 2e21: 68 f0 55 00 00 push $0x55f0 - 2e26: e8 de 10 00 00 call 3f09 - 2e2b: 83 c4 10 add $0x10,%esp - 2e2e: 85 c0 test %eax,%eax - 2e30: 74 17 je 2e49 - printf(1, "unlink dirfile failed!\n"); - 2e32: 83 ec 08 sub $0x8,%esp - 2e35: 68 b3 56 00 00 push $0x56b3 - 2e3a: 6a 01 push $0x1 - 2e3c: e8 ed 11 00 00 call 402e - 2e41: 83 c4 10 add $0x10,%esp - exit(); - 2e44: e8 70 10 00 00 call 3eb9 - } - - fd = open(".", O_RDWR); - 2e49: 83 ec 08 sub $0x8,%esp - 2e4c: 6a 02 push $0x2 - 2e4e: 68 6f 4c 00 00 push $0x4c6f - 2e53: e8 a1 10 00 00 call 3ef9 - 2e58: 83 c4 10 add $0x10,%esp - 2e5b: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd >= 0){ - 2e5e: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 2e62: 78 17 js 2e7b - printf(1, "open . for writing succeeded!\n"); - 2e64: 83 ec 08 sub $0x8,%esp - 2e67: 68 cc 56 00 00 push $0x56cc - 2e6c: 6a 01 push $0x1 - 2e6e: e8 bb 11 00 00 call 402e - 2e73: 83 c4 10 add $0x10,%esp - exit(); - 2e76: e8 3e 10 00 00 call 3eb9 - } - fd = open(".", 0); - 2e7b: 83 ec 08 sub $0x8,%esp - 2e7e: 6a 00 push $0x0 - 2e80: 68 6f 4c 00 00 push $0x4c6f - 2e85: e8 6f 10 00 00 call 3ef9 - 2e8a: 83 c4 10 add $0x10,%esp - 2e8d: 89 45 f4 mov %eax,-0xc(%ebp) - if(write(fd, "x", 1) > 0){ - 2e90: 83 ec 04 sub $0x4,%esp - 2e93: 6a 01 push $0x1 - 2e95: 68 bb 48 00 00 push $0x48bb - 2e9a: ff 75 f4 pushl -0xc(%ebp) - 2e9d: e8 37 10 00 00 call 3ed9 - 2ea2: 83 c4 10 add $0x10,%esp - 2ea5: 85 c0 test %eax,%eax - 2ea7: 7e 17 jle 2ec0 - printf(1, "write . succeeded!\n"); - 2ea9: 83 ec 08 sub $0x8,%esp - 2eac: 68 eb 56 00 00 push $0x56eb - 2eb1: 6a 01 push $0x1 - 2eb3: e8 76 11 00 00 call 402e - 2eb8: 83 c4 10 add $0x10,%esp - exit(); - 2ebb: e8 f9 0f 00 00 call 3eb9 - } - close(fd); - 2ec0: 83 ec 0c sub $0xc,%esp - 2ec3: ff 75 f4 pushl -0xc(%ebp) - 2ec6: e8 16 10 00 00 call 3ee1 - 2ecb: 83 c4 10 add $0x10,%esp - - printf(1, "dir vs file OK\n"); - 2ece: 83 ec 08 sub $0x8,%esp - 2ed1: 68 ff 56 00 00 push $0x56ff - 2ed6: 6a 01 push $0x1 - 2ed8: e8 51 11 00 00 call 402e - 2edd: 83 c4 10 add $0x10,%esp -} - 2ee0: c9 leave - 2ee1: c3 ret - -00002ee2 : - -// test that iput() is called at the end of _namei() -void -iref(void) -{ - 2ee2: 55 push %ebp - 2ee3: 89 e5 mov %esp,%ebp - 2ee5: 83 ec 18 sub $0x18,%esp - int i, fd; - - printf(1, "empty file name\n"); - 2ee8: 83 ec 08 sub $0x8,%esp - 2eeb: 68 0f 57 00 00 push $0x570f - 2ef0: 6a 01 push $0x1 - 2ef2: e8 37 11 00 00 call 402e - 2ef7: 83 c4 10 add $0x10,%esp - - // the 50 is NINODE - for(i = 0; i < 50 + 1; i++){ - 2efa: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 2f01: e9 e7 00 00 00 jmp 2fed - if(mkdir("irefd") != 0){ - 2f06: 83 ec 0c sub $0xc,%esp - 2f09: 68 20 57 00 00 push $0x5720 - 2f0e: e8 0e 10 00 00 call 3f21 - 2f13: 83 c4 10 add $0x10,%esp - 2f16: 85 c0 test %eax,%eax - 2f18: 74 17 je 2f31 - printf(1, "mkdir irefd failed\n"); - 2f1a: 83 ec 08 sub $0x8,%esp - 2f1d: 68 26 57 00 00 push $0x5726 - 2f22: 6a 01 push $0x1 - 2f24: e8 05 11 00 00 call 402e - 2f29: 83 c4 10 add $0x10,%esp - exit(); - 2f2c: e8 88 0f 00 00 call 3eb9 - } - if(chdir("irefd") != 0){ - 2f31: 83 ec 0c sub $0xc,%esp - 2f34: 68 20 57 00 00 push $0x5720 - 2f39: e8 eb 0f 00 00 call 3f29 - 2f3e: 83 c4 10 add $0x10,%esp - 2f41: 85 c0 test %eax,%eax - 2f43: 74 17 je 2f5c - printf(1, "chdir irefd failed\n"); - 2f45: 83 ec 08 sub $0x8,%esp - 2f48: 68 3a 57 00 00 push $0x573a - 2f4d: 6a 01 push $0x1 - 2f4f: e8 da 10 00 00 call 402e - 2f54: 83 c4 10 add $0x10,%esp - exit(); - 2f57: e8 5d 0f 00 00 call 3eb9 - } - - mkdir(""); - 2f5c: 83 ec 0c sub $0xc,%esp - 2f5f: 68 4e 57 00 00 push $0x574e - 2f64: e8 b8 0f 00 00 call 3f21 - 2f69: 83 c4 10 add $0x10,%esp - link("README", ""); - 2f6c: 83 ec 08 sub $0x8,%esp - 2f6f: 68 4e 57 00 00 push $0x574e - 2f74: 68 8d 56 00 00 push $0x568d - 2f79: e8 9b 0f 00 00 call 3f19 - 2f7e: 83 c4 10 add $0x10,%esp - fd = open("", O_CREATE); - 2f81: 83 ec 08 sub $0x8,%esp - 2f84: 68 00 02 00 00 push $0x200 - 2f89: 68 4e 57 00 00 push $0x574e - 2f8e: e8 66 0f 00 00 call 3ef9 - 2f93: 83 c4 10 add $0x10,%esp - 2f96: 89 45 f0 mov %eax,-0x10(%ebp) - if(fd >= 0) - 2f99: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 2f9d: 78 0e js 2fad - close(fd); - 2f9f: 83 ec 0c sub $0xc,%esp - 2fa2: ff 75 f0 pushl -0x10(%ebp) - 2fa5: e8 37 0f 00 00 call 3ee1 - 2faa: 83 c4 10 add $0x10,%esp - fd = open("xx", O_CREATE); - 2fad: 83 ec 08 sub $0x8,%esp - 2fb0: 68 00 02 00 00 push $0x200 - 2fb5: 68 4f 57 00 00 push $0x574f - 2fba: e8 3a 0f 00 00 call 3ef9 - 2fbf: 83 c4 10 add $0x10,%esp - 2fc2: 89 45 f0 mov %eax,-0x10(%ebp) - if(fd >= 0) - 2fc5: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 2fc9: 78 0e js 2fd9 - close(fd); - 2fcb: 83 ec 0c sub $0xc,%esp - 2fce: ff 75 f0 pushl -0x10(%ebp) - 2fd1: e8 0b 0f 00 00 call 3ee1 - 2fd6: 83 c4 10 add $0x10,%esp - unlink("xx"); - 2fd9: 83 ec 0c sub $0xc,%esp - 2fdc: 68 4f 57 00 00 push $0x574f - 2fe1: e8 23 0f 00 00 call 3f09 - 2fe6: 83 c4 10 add $0x10,%esp - int i, fd; - - printf(1, "empty file name\n"); - - // the 50 is NINODE - for(i = 0; i < 50 + 1; i++){ - 2fe9: 83 45 f4 01 addl $0x1,-0xc(%ebp) - 2fed: 83 7d f4 32 cmpl $0x32,-0xc(%ebp) - 2ff1: 0f 8e 0f ff ff ff jle 2f06 - if(fd >= 0) - close(fd); - unlink("xx"); - } - - chdir("/"); - 2ff7: 83 ec 0c sub $0xc,%esp - 2ffa: 68 56 44 00 00 push $0x4456 - 2fff: e8 25 0f 00 00 call 3f29 - 3004: 83 c4 10 add $0x10,%esp - printf(1, "empty file name OK\n"); - 3007: 83 ec 08 sub $0x8,%esp - 300a: 68 52 57 00 00 push $0x5752 - 300f: 6a 01 push $0x1 - 3011: e8 18 10 00 00 call 402e - 3016: 83 c4 10 add $0x10,%esp -} - 3019: c9 leave - 301a: c3 ret - -0000301b : -// test that fork fails gracefully -// the forktest binary also does this, but it runs out of proc entries first. -// inside the bigger usertests binary, we run out of memory first. -void -forktest(void) -{ - 301b: 55 push %ebp - 301c: 89 e5 mov %esp,%ebp - 301e: 83 ec 18 sub $0x18,%esp - int n, pid; - - printf(1, "fork test\n"); - 3021: 83 ec 08 sub $0x8,%esp - 3024: 68 66 57 00 00 push $0x5766 - 3029: 6a 01 push $0x1 - 302b: e8 fe 0f 00 00 call 402e - 3030: 83 c4 10 add $0x10,%esp - - for(n=0; n<1000; n++){ - 3033: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 303a: eb 1f jmp 305b - pid = fork(); - 303c: e8 70 0e 00 00 call 3eb1 - 3041: 89 45 f0 mov %eax,-0x10(%ebp) - if(pid < 0) - 3044: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 3048: 79 02 jns 304c - break; - 304a: eb 18 jmp 3064 - if(pid == 0) - 304c: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 3050: 75 05 jne 3057 - exit(); - 3052: e8 62 0e 00 00 call 3eb9 -{ - int n, pid; - - printf(1, "fork test\n"); - - for(n=0; n<1000; n++){ - 3057: 83 45 f4 01 addl $0x1,-0xc(%ebp) - 305b: 81 7d f4 e7 03 00 00 cmpl $0x3e7,-0xc(%ebp) - 3062: 7e d8 jle 303c - break; - if(pid == 0) - exit(); - } - - if(n == 1000){ - 3064: 81 7d f4 e8 03 00 00 cmpl $0x3e8,-0xc(%ebp) - 306b: 75 17 jne 3084 - printf(1, "fork claimed to work 1000 times!\n"); - 306d: 83 ec 08 sub $0x8,%esp - 3070: 68 74 57 00 00 push $0x5774 - 3075: 6a 01 push $0x1 - 3077: e8 b2 0f 00 00 call 402e - 307c: 83 c4 10 add $0x10,%esp - exit(); - 307f: e8 35 0e 00 00 call 3eb9 - } - - for(; n > 0; n--){ - 3084: eb 24 jmp 30aa - if(wait() < 0){ - 3086: e8 36 0e 00 00 call 3ec1 - 308b: 85 c0 test %eax,%eax - 308d: 79 17 jns 30a6 - printf(1, "wait stopped early\n"); - 308f: 83 ec 08 sub $0x8,%esp - 3092: 68 96 57 00 00 push $0x5796 - 3097: 6a 01 push $0x1 - 3099: e8 90 0f 00 00 call 402e - 309e: 83 c4 10 add $0x10,%esp - exit(); - 30a1: e8 13 0e 00 00 call 3eb9 - if(n == 1000){ - printf(1, "fork claimed to work 1000 times!\n"); - exit(); - } - - for(; n > 0; n--){ - 30a6: 83 6d f4 01 subl $0x1,-0xc(%ebp) - 30aa: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 30ae: 7f d6 jg 3086 - printf(1, "wait stopped early\n"); - exit(); - } - } - - if(wait() != -1){ - 30b0: e8 0c 0e 00 00 call 3ec1 - 30b5: 83 f8 ff cmp $0xffffffff,%eax - 30b8: 74 17 je 30d1 - printf(1, "wait got too many\n"); - 30ba: 83 ec 08 sub $0x8,%esp - 30bd: 68 aa 57 00 00 push $0x57aa - 30c2: 6a 01 push $0x1 - 30c4: e8 65 0f 00 00 call 402e - 30c9: 83 c4 10 add $0x10,%esp - exit(); - 30cc: e8 e8 0d 00 00 call 3eb9 - } - - printf(1, "fork test OK\n"); - 30d1: 83 ec 08 sub $0x8,%esp - 30d4: 68 bd 57 00 00 push $0x57bd - 30d9: 6a 01 push $0x1 - 30db: e8 4e 0f 00 00 call 402e - 30e0: 83 c4 10 add $0x10,%esp -} - 30e3: c9 leave - 30e4: c3 ret - -000030e5 : - -void -sbrktest(void) -{ - 30e5: 55 push %ebp - 30e6: 89 e5 mov %esp,%ebp - 30e8: 53 push %ebx - 30e9: 83 ec 64 sub $0x64,%esp - int fds[2], pid, pids[10], ppid; - char *a, *b, *c, *lastaddr, *oldbrk, *p, scratch; - uint amt; - - printf(stdout, "sbrk test\n"); - 30ec: a1 a0 62 00 00 mov 0x62a0,%eax - 30f1: 83 ec 08 sub $0x8,%esp - 30f4: 68 cb 57 00 00 push $0x57cb - 30f9: 50 push %eax - 30fa: e8 2f 0f 00 00 call 402e - 30ff: 83 c4 10 add $0x10,%esp - oldbrk = sbrk(0); - 3102: 83 ec 0c sub $0xc,%esp - 3105: 6a 00 push $0x0 - 3107: e8 35 0e 00 00 call 3f41 - 310c: 83 c4 10 add $0x10,%esp - 310f: 89 45 ec mov %eax,-0x14(%ebp) - - // can one sbrk() less than a page? - a = sbrk(0); - 3112: 83 ec 0c sub $0xc,%esp - 3115: 6a 00 push $0x0 - 3117: e8 25 0e 00 00 call 3f41 - 311c: 83 c4 10 add $0x10,%esp - 311f: 89 45 f4 mov %eax,-0xc(%ebp) - int i; - for(i = 0; i < 5000; i++){ - 3122: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - 3129: eb 4f jmp 317a - b = sbrk(1); - 312b: 83 ec 0c sub $0xc,%esp - 312e: 6a 01 push $0x1 - 3130: e8 0c 0e 00 00 call 3f41 - 3135: 83 c4 10 add $0x10,%esp - 3138: 89 45 e8 mov %eax,-0x18(%ebp) - if(b != a){ - 313b: 8b 45 e8 mov -0x18(%ebp),%eax - 313e: 3b 45 f4 cmp -0xc(%ebp),%eax - 3141: 74 24 je 3167 - printf(stdout, "sbrk test failed %d %x %x\n", i, a, b); - 3143: a1 a0 62 00 00 mov 0x62a0,%eax - 3148: 83 ec 0c sub $0xc,%esp - 314b: ff 75 e8 pushl -0x18(%ebp) - 314e: ff 75 f4 pushl -0xc(%ebp) - 3151: ff 75 f0 pushl -0x10(%ebp) - 3154: 68 d6 57 00 00 push $0x57d6 - 3159: 50 push %eax - 315a: e8 cf 0e 00 00 call 402e - 315f: 83 c4 20 add $0x20,%esp - exit(); - 3162: e8 52 0d 00 00 call 3eb9 - } - *b = 1; - 3167: 8b 45 e8 mov -0x18(%ebp),%eax - 316a: c6 00 01 movb $0x1,(%eax) - a = b + 1; - 316d: 8b 45 e8 mov -0x18(%ebp),%eax - 3170: 83 c0 01 add $0x1,%eax - 3173: 89 45 f4 mov %eax,-0xc(%ebp) - oldbrk = sbrk(0); - - // can one sbrk() less than a page? - a = sbrk(0); - int i; - for(i = 0; i < 5000; i++){ - 3176: 83 45 f0 01 addl $0x1,-0x10(%ebp) - 317a: 81 7d f0 87 13 00 00 cmpl $0x1387,-0x10(%ebp) - 3181: 7e a8 jle 312b - exit(); - } - *b = 1; - a = b + 1; - } - pid = fork(); - 3183: e8 29 0d 00 00 call 3eb1 - 3188: 89 45 e4 mov %eax,-0x1c(%ebp) - if(pid < 0){ - 318b: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp) - 318f: 79 1b jns 31ac - printf(stdout, "sbrk test fork failed\n"); - 3191: a1 a0 62 00 00 mov 0x62a0,%eax - 3196: 83 ec 08 sub $0x8,%esp - 3199: 68 f1 57 00 00 push $0x57f1 - 319e: 50 push %eax - 319f: e8 8a 0e 00 00 call 402e - 31a4: 83 c4 10 add $0x10,%esp - exit(); - 31a7: e8 0d 0d 00 00 call 3eb9 - } - c = sbrk(1); - 31ac: 83 ec 0c sub $0xc,%esp - 31af: 6a 01 push $0x1 - 31b1: e8 8b 0d 00 00 call 3f41 - 31b6: 83 c4 10 add $0x10,%esp - 31b9: 89 45 e0 mov %eax,-0x20(%ebp) - c = sbrk(1); - 31bc: 83 ec 0c sub $0xc,%esp - 31bf: 6a 01 push $0x1 - 31c1: e8 7b 0d 00 00 call 3f41 - 31c6: 83 c4 10 add $0x10,%esp - 31c9: 89 45 e0 mov %eax,-0x20(%ebp) - if(c != a + 1){ - 31cc: 8b 45 f4 mov -0xc(%ebp),%eax - 31cf: 83 c0 01 add $0x1,%eax - 31d2: 3b 45 e0 cmp -0x20(%ebp),%eax - 31d5: 74 1b je 31f2 - printf(stdout, "sbrk test failed post-fork\n"); - 31d7: a1 a0 62 00 00 mov 0x62a0,%eax - 31dc: 83 ec 08 sub $0x8,%esp - 31df: 68 08 58 00 00 push $0x5808 - 31e4: 50 push %eax - 31e5: e8 44 0e 00 00 call 402e - 31ea: 83 c4 10 add $0x10,%esp - exit(); - 31ed: e8 c7 0c 00 00 call 3eb9 - } - if(pid == 0) - 31f2: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp) - 31f6: 75 05 jne 31fd - exit(); - 31f8: e8 bc 0c 00 00 call 3eb9 - wait(); - 31fd: e8 bf 0c 00 00 call 3ec1 - - // can one grow address space to something big? -#define BIG (100*1024*1024) - a = sbrk(0); - 3202: 83 ec 0c sub $0xc,%esp - 3205: 6a 00 push $0x0 - 3207: e8 35 0d 00 00 call 3f41 - 320c: 83 c4 10 add $0x10,%esp - 320f: 89 45 f4 mov %eax,-0xc(%ebp) - amt = (BIG) - (uint)a; - 3212: 8b 45 f4 mov -0xc(%ebp),%eax - 3215: ba 00 00 40 06 mov $0x6400000,%edx - 321a: 29 c2 sub %eax,%edx - 321c: 89 d0 mov %edx,%eax - 321e: 89 45 dc mov %eax,-0x24(%ebp) - p = sbrk(amt); - 3221: 8b 45 dc mov -0x24(%ebp),%eax - 3224: 83 ec 0c sub $0xc,%esp - 3227: 50 push %eax - 3228: e8 14 0d 00 00 call 3f41 - 322d: 83 c4 10 add $0x10,%esp - 3230: 89 45 d8 mov %eax,-0x28(%ebp) - if (p != a) { - 3233: 8b 45 d8 mov -0x28(%ebp),%eax - 3236: 3b 45 f4 cmp -0xc(%ebp),%eax - 3239: 74 1b je 3256 - printf(stdout, "sbrk test failed to grow big address space; enough phys mem?\n"); - 323b: a1 a0 62 00 00 mov 0x62a0,%eax - 3240: 83 ec 08 sub $0x8,%esp - 3243: 68 24 58 00 00 push $0x5824 - 3248: 50 push %eax - 3249: e8 e0 0d 00 00 call 402e - 324e: 83 c4 10 add $0x10,%esp - exit(); - 3251: e8 63 0c 00 00 call 3eb9 - } - lastaddr = (char*) (BIG-1); - 3256: c7 45 d4 ff ff 3f 06 movl $0x63fffff,-0x2c(%ebp) - *lastaddr = 99; - 325d: 8b 45 d4 mov -0x2c(%ebp),%eax - 3260: c6 00 63 movb $0x63,(%eax) - - // can one de-allocate? - a = sbrk(0); - 3263: 83 ec 0c sub $0xc,%esp - 3266: 6a 00 push $0x0 - 3268: e8 d4 0c 00 00 call 3f41 - 326d: 83 c4 10 add $0x10,%esp - 3270: 89 45 f4 mov %eax,-0xc(%ebp) - c = sbrk(-4096); - 3273: 83 ec 0c sub $0xc,%esp - 3276: 68 00 f0 ff ff push $0xfffff000 - 327b: e8 c1 0c 00 00 call 3f41 - 3280: 83 c4 10 add $0x10,%esp - 3283: 89 45 e0 mov %eax,-0x20(%ebp) - if(c == (char*)0xffffffff){ - 3286: 83 7d e0 ff cmpl $0xffffffff,-0x20(%ebp) - 328a: 75 1b jne 32a7 - printf(stdout, "sbrk could not deallocate\n"); - 328c: a1 a0 62 00 00 mov 0x62a0,%eax - 3291: 83 ec 08 sub $0x8,%esp - 3294: 68 62 58 00 00 push $0x5862 - 3299: 50 push %eax - 329a: e8 8f 0d 00 00 call 402e - 329f: 83 c4 10 add $0x10,%esp - exit(); - 32a2: e8 12 0c 00 00 call 3eb9 - } - c = sbrk(0); - 32a7: 83 ec 0c sub $0xc,%esp - 32aa: 6a 00 push $0x0 - 32ac: e8 90 0c 00 00 call 3f41 - 32b1: 83 c4 10 add $0x10,%esp - 32b4: 89 45 e0 mov %eax,-0x20(%ebp) - if(c != a - 4096){ - 32b7: 8b 45 f4 mov -0xc(%ebp),%eax - 32ba: 2d 00 10 00 00 sub $0x1000,%eax - 32bf: 3b 45 e0 cmp -0x20(%ebp),%eax - 32c2: 74 1e je 32e2 - printf(stdout, "sbrk deallocation produced wrong address, a %x c %x\n", a, c); - 32c4: a1 a0 62 00 00 mov 0x62a0,%eax - 32c9: ff 75 e0 pushl -0x20(%ebp) - 32cc: ff 75 f4 pushl -0xc(%ebp) - 32cf: 68 80 58 00 00 push $0x5880 - 32d4: 50 push %eax - 32d5: e8 54 0d 00 00 call 402e - 32da: 83 c4 10 add $0x10,%esp - exit(); - 32dd: e8 d7 0b 00 00 call 3eb9 - } - - // can one re-allocate that page? - a = sbrk(0); - 32e2: 83 ec 0c sub $0xc,%esp - 32e5: 6a 00 push $0x0 - 32e7: e8 55 0c 00 00 call 3f41 - 32ec: 83 c4 10 add $0x10,%esp - 32ef: 89 45 f4 mov %eax,-0xc(%ebp) - c = sbrk(4096); - 32f2: 83 ec 0c sub $0xc,%esp - 32f5: 68 00 10 00 00 push $0x1000 - 32fa: e8 42 0c 00 00 call 3f41 - 32ff: 83 c4 10 add $0x10,%esp - 3302: 89 45 e0 mov %eax,-0x20(%ebp) - if(c != a || sbrk(0) != a + 4096){ - 3305: 8b 45 e0 mov -0x20(%ebp),%eax - 3308: 3b 45 f4 cmp -0xc(%ebp),%eax - 330b: 75 1b jne 3328 - 330d: 83 ec 0c sub $0xc,%esp - 3310: 6a 00 push $0x0 - 3312: e8 2a 0c 00 00 call 3f41 - 3317: 83 c4 10 add $0x10,%esp - 331a: 89 c2 mov %eax,%edx - 331c: 8b 45 f4 mov -0xc(%ebp),%eax - 331f: 05 00 10 00 00 add $0x1000,%eax - 3324: 39 c2 cmp %eax,%edx - 3326: 74 1e je 3346 - printf(stdout, "sbrk re-allocation failed, a %x c %x\n", a, c); - 3328: a1 a0 62 00 00 mov 0x62a0,%eax - 332d: ff 75 e0 pushl -0x20(%ebp) - 3330: ff 75 f4 pushl -0xc(%ebp) - 3333: 68 b8 58 00 00 push $0x58b8 - 3338: 50 push %eax - 3339: e8 f0 0c 00 00 call 402e - 333e: 83 c4 10 add $0x10,%esp - exit(); - 3341: e8 73 0b 00 00 call 3eb9 - } - if(*lastaddr == 99){ - 3346: 8b 45 d4 mov -0x2c(%ebp),%eax - 3349: 0f b6 00 movzbl (%eax),%eax - 334c: 3c 63 cmp $0x63,%al - 334e: 75 1b jne 336b - // should be zero - printf(stdout, "sbrk de-allocation didn't really deallocate\n"); - 3350: a1 a0 62 00 00 mov 0x62a0,%eax - 3355: 83 ec 08 sub $0x8,%esp - 3358: 68 e0 58 00 00 push $0x58e0 - 335d: 50 push %eax - 335e: e8 cb 0c 00 00 call 402e - 3363: 83 c4 10 add $0x10,%esp - exit(); - 3366: e8 4e 0b 00 00 call 3eb9 - } - - a = sbrk(0); - 336b: 83 ec 0c sub $0xc,%esp - 336e: 6a 00 push $0x0 - 3370: e8 cc 0b 00 00 call 3f41 - 3375: 83 c4 10 add $0x10,%esp - 3378: 89 45 f4 mov %eax,-0xc(%ebp) - c = sbrk(-(sbrk(0) - oldbrk)); - 337b: 8b 5d ec mov -0x14(%ebp),%ebx - 337e: 83 ec 0c sub $0xc,%esp - 3381: 6a 00 push $0x0 - 3383: e8 b9 0b 00 00 call 3f41 - 3388: 83 c4 10 add $0x10,%esp - 338b: 29 c3 sub %eax,%ebx - 338d: 89 d8 mov %ebx,%eax - 338f: 83 ec 0c sub $0xc,%esp - 3392: 50 push %eax - 3393: e8 a9 0b 00 00 call 3f41 - 3398: 83 c4 10 add $0x10,%esp - 339b: 89 45 e0 mov %eax,-0x20(%ebp) - if(c != a){ - 339e: 8b 45 e0 mov -0x20(%ebp),%eax - 33a1: 3b 45 f4 cmp -0xc(%ebp),%eax - 33a4: 74 1e je 33c4 - printf(stdout, "sbrk downsize failed, a %x c %x\n", a, c); - 33a6: a1 a0 62 00 00 mov 0x62a0,%eax - 33ab: ff 75 e0 pushl -0x20(%ebp) - 33ae: ff 75 f4 pushl -0xc(%ebp) - 33b1: 68 10 59 00 00 push $0x5910 - 33b6: 50 push %eax - 33b7: e8 72 0c 00 00 call 402e - 33bc: 83 c4 10 add $0x10,%esp - exit(); - 33bf: e8 f5 0a 00 00 call 3eb9 - } - - // can we read the kernel's memory? - for(a = (char*)(KERNBASE); a < (char*) (KERNBASE+2000000); a += 50000){ - 33c4: c7 45 f4 00 00 00 80 movl $0x80000000,-0xc(%ebp) - 33cb: eb 76 jmp 3443 - ppid = getpid(); - 33cd: e8 67 0b 00 00 call 3f39 - 33d2: 89 45 d0 mov %eax,-0x30(%ebp) - pid = fork(); - 33d5: e8 d7 0a 00 00 call 3eb1 - 33da: 89 45 e4 mov %eax,-0x1c(%ebp) - if(pid < 0){ - 33dd: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp) - 33e1: 79 1b jns 33fe - printf(stdout, "fork failed\n"); - 33e3: a1 a0 62 00 00 mov 0x62a0,%eax - 33e8: 83 ec 08 sub $0x8,%esp - 33eb: 68 85 44 00 00 push $0x4485 - 33f0: 50 push %eax - 33f1: e8 38 0c 00 00 call 402e - 33f6: 83 c4 10 add $0x10,%esp - exit(); - 33f9: e8 bb 0a 00 00 call 3eb9 - } - if(pid == 0){ - 33fe: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp) - 3402: 75 33 jne 3437 - printf(stdout, "oops could read %x = %x\n", a, *a); - 3404: 8b 45 f4 mov -0xc(%ebp),%eax - 3407: 0f b6 00 movzbl (%eax),%eax - 340a: 0f be d0 movsbl %al,%edx - 340d: a1 a0 62 00 00 mov 0x62a0,%eax - 3412: 52 push %edx - 3413: ff 75 f4 pushl -0xc(%ebp) - 3416: 68 31 59 00 00 push $0x5931 - 341b: 50 push %eax - 341c: e8 0d 0c 00 00 call 402e - 3421: 83 c4 10 add $0x10,%esp - kill(ppid); - 3424: 83 ec 0c sub $0xc,%esp - 3427: ff 75 d0 pushl -0x30(%ebp) - 342a: e8 ba 0a 00 00 call 3ee9 - 342f: 83 c4 10 add $0x10,%esp - exit(); - 3432: e8 82 0a 00 00 call 3eb9 - } - wait(); - 3437: e8 85 0a 00 00 call 3ec1 - printf(stdout, "sbrk downsize failed, a %x c %x\n", a, c); - exit(); - } - - // can we read the kernel's memory? - for(a = (char*)(KERNBASE); a < (char*) (KERNBASE+2000000); a += 50000){ - 343c: 81 45 f4 50 c3 00 00 addl $0xc350,-0xc(%ebp) - 3443: 81 7d f4 7f 84 1e 80 cmpl $0x801e847f,-0xc(%ebp) - 344a: 76 81 jbe 33cd - wait(); - } - - // if we run the system out of memory, does it clean up the last - // failed allocation? - if(pipe(fds) != 0){ - 344c: 83 ec 0c sub $0xc,%esp - 344f: 8d 45 c8 lea -0x38(%ebp),%eax - 3452: 50 push %eax - 3453: e8 71 0a 00 00 call 3ec9 - 3458: 83 c4 10 add $0x10,%esp - 345b: 85 c0 test %eax,%eax - 345d: 74 17 je 3476 - printf(1, "pipe() failed\n"); - 345f: 83 ec 08 sub $0x8,%esp - 3462: 68 56 48 00 00 push $0x4856 - 3467: 6a 01 push $0x1 - 3469: e8 c0 0b 00 00 call 402e - 346e: 83 c4 10 add $0x10,%esp - exit(); - 3471: e8 43 0a 00 00 call 3eb9 - } - for(i = 0; i < sizeof(pids)/sizeof(pids[0]); i++){ - 3476: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - 347d: e9 88 00 00 00 jmp 350a - if((pids[i] = fork()) == 0){ - 3482: e8 2a 0a 00 00 call 3eb1 - 3487: 89 c2 mov %eax,%edx - 3489: 8b 45 f0 mov -0x10(%ebp),%eax - 348c: 89 54 85 a0 mov %edx,-0x60(%ebp,%eax,4) - 3490: 8b 45 f0 mov -0x10(%ebp),%eax - 3493: 8b 44 85 a0 mov -0x60(%ebp,%eax,4),%eax - 3497: 85 c0 test %eax,%eax - 3499: 75 4a jne 34e5 - // allocate a lot of memory - sbrk(BIG - (uint)sbrk(0)); - 349b: 83 ec 0c sub $0xc,%esp - 349e: 6a 00 push $0x0 - 34a0: e8 9c 0a 00 00 call 3f41 - 34a5: 83 c4 10 add $0x10,%esp - 34a8: ba 00 00 40 06 mov $0x6400000,%edx - 34ad: 29 c2 sub %eax,%edx - 34af: 89 d0 mov %edx,%eax - 34b1: 83 ec 0c sub $0xc,%esp - 34b4: 50 push %eax - 34b5: e8 87 0a 00 00 call 3f41 - 34ba: 83 c4 10 add $0x10,%esp - write(fds[1], "x", 1); - 34bd: 8b 45 cc mov -0x34(%ebp),%eax - 34c0: 83 ec 04 sub $0x4,%esp - 34c3: 6a 01 push $0x1 - 34c5: 68 bb 48 00 00 push $0x48bb - 34ca: 50 push %eax - 34cb: e8 09 0a 00 00 call 3ed9 - 34d0: 83 c4 10 add $0x10,%esp - // sit around until killed - for(;;) sleep(1000); - 34d3: 83 ec 0c sub $0xc,%esp - 34d6: 68 e8 03 00 00 push $0x3e8 - 34db: e8 69 0a 00 00 call 3f49 - 34e0: 83 c4 10 add $0x10,%esp - 34e3: eb ee jmp 34d3 - } - if(pids[i] != -1) - 34e5: 8b 45 f0 mov -0x10(%ebp),%eax - 34e8: 8b 44 85 a0 mov -0x60(%ebp,%eax,4),%eax - 34ec: 83 f8 ff cmp $0xffffffff,%eax - 34ef: 74 15 je 3506 - read(fds[0], &scratch, 1); - 34f1: 8b 45 c8 mov -0x38(%ebp),%eax - 34f4: 83 ec 04 sub $0x4,%esp - 34f7: 6a 01 push $0x1 - 34f9: 8d 55 9f lea -0x61(%ebp),%edx - 34fc: 52 push %edx - 34fd: 50 push %eax - 34fe: e8 ce 09 00 00 call 3ed1 - 3503: 83 c4 10 add $0x10,%esp - // failed allocation? - if(pipe(fds) != 0){ - printf(1, "pipe() failed\n"); - exit(); - } - for(i = 0; i < sizeof(pids)/sizeof(pids[0]); i++){ - 3506: 83 45 f0 01 addl $0x1,-0x10(%ebp) - 350a: 8b 45 f0 mov -0x10(%ebp),%eax - 350d: 83 f8 09 cmp $0x9,%eax - 3510: 0f 86 6c ff ff ff jbe 3482 - if(pids[i] != -1) - read(fds[0], &scratch, 1); - } - // if those failed allocations freed up the pages they did allocate, - // we'll be able to allocate here - c = sbrk(4096); - 3516: 83 ec 0c sub $0xc,%esp - 3519: 68 00 10 00 00 push $0x1000 - 351e: e8 1e 0a 00 00 call 3f41 - 3523: 83 c4 10 add $0x10,%esp - 3526: 89 45 e0 mov %eax,-0x20(%ebp) - for(i = 0; i < sizeof(pids)/sizeof(pids[0]); i++){ - 3529: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - 3530: eb 2a jmp 355c - if(pids[i] == -1) - 3532: 8b 45 f0 mov -0x10(%ebp),%eax - 3535: 8b 44 85 a0 mov -0x60(%ebp,%eax,4),%eax - 3539: 83 f8 ff cmp $0xffffffff,%eax - 353c: 75 02 jne 3540 - continue; - 353e: eb 18 jmp 3558 - kill(pids[i]); - 3540: 8b 45 f0 mov -0x10(%ebp),%eax - 3543: 8b 44 85 a0 mov -0x60(%ebp,%eax,4),%eax - 3547: 83 ec 0c sub $0xc,%esp - 354a: 50 push %eax - 354b: e8 99 09 00 00 call 3ee9 - 3550: 83 c4 10 add $0x10,%esp - wait(); - 3553: e8 69 09 00 00 call 3ec1 - read(fds[0], &scratch, 1); - } - // if those failed allocations freed up the pages they did allocate, - // we'll be able to allocate here - c = sbrk(4096); - for(i = 0; i < sizeof(pids)/sizeof(pids[0]); i++){ - 3558: 83 45 f0 01 addl $0x1,-0x10(%ebp) - 355c: 8b 45 f0 mov -0x10(%ebp),%eax - 355f: 83 f8 09 cmp $0x9,%eax - 3562: 76 ce jbe 3532 - if(pids[i] == -1) - continue; - kill(pids[i]); - wait(); - } - if(c == (char*)0xffffffff){ - 3564: 83 7d e0 ff cmpl $0xffffffff,-0x20(%ebp) - 3568: 75 1b jne 3585 - printf(stdout, "failed sbrk leaked memory\n"); - 356a: a1 a0 62 00 00 mov 0x62a0,%eax - 356f: 83 ec 08 sub $0x8,%esp - 3572: 68 4a 59 00 00 push $0x594a - 3577: 50 push %eax - 3578: e8 b1 0a 00 00 call 402e - 357d: 83 c4 10 add $0x10,%esp - exit(); - 3580: e8 34 09 00 00 call 3eb9 - } - - if(sbrk(0) > oldbrk) - 3585: 83 ec 0c sub $0xc,%esp - 3588: 6a 00 push $0x0 - 358a: e8 b2 09 00 00 call 3f41 - 358f: 83 c4 10 add $0x10,%esp - 3592: 3b 45 ec cmp -0x14(%ebp),%eax - 3595: 76 20 jbe 35b7 - sbrk(-(sbrk(0) - oldbrk)); - 3597: 8b 5d ec mov -0x14(%ebp),%ebx - 359a: 83 ec 0c sub $0xc,%esp - 359d: 6a 00 push $0x0 - 359f: e8 9d 09 00 00 call 3f41 - 35a4: 83 c4 10 add $0x10,%esp - 35a7: 29 c3 sub %eax,%ebx - 35a9: 89 d8 mov %ebx,%eax - 35ab: 83 ec 0c sub $0xc,%esp - 35ae: 50 push %eax - 35af: e8 8d 09 00 00 call 3f41 - 35b4: 83 c4 10 add $0x10,%esp - - printf(stdout, "sbrk test OK\n"); - 35b7: a1 a0 62 00 00 mov 0x62a0,%eax - 35bc: 83 ec 08 sub $0x8,%esp - 35bf: 68 65 59 00 00 push $0x5965 - 35c4: 50 push %eax - 35c5: e8 64 0a 00 00 call 402e - 35ca: 83 c4 10 add $0x10,%esp -} - 35cd: 8b 5d fc mov -0x4(%ebp),%ebx - 35d0: c9 leave - 35d1: c3 ret - -000035d2 : - -void -validateint(int *p) -{ - 35d2: 55 push %ebp - 35d3: 89 e5 mov %esp,%ebp - 35d5: 53 push %ebx - 35d6: 83 ec 10 sub $0x10,%esp - int res; - asm("mov %%esp, %%ebx\n\t" - 35d9: b8 0d 00 00 00 mov $0xd,%eax - 35de: 8b 55 08 mov 0x8(%ebp),%edx - 35e1: 89 d1 mov %edx,%ecx - 35e3: 89 e3 mov %esp,%ebx - 35e5: 89 cc mov %ecx,%esp - 35e7: cd 40 int $0x40 - 35e9: 89 dc mov %ebx,%esp - 35eb: 89 45 f8 mov %eax,-0x8(%ebp) - "int %2\n\t" - "mov %%ebx, %%esp" : - "=a" (res) : - "a" (SYS_sleep), "n" (T_SYSCALL), "c" (p) : - "ebx"); -} - 35ee: 83 c4 10 add $0x10,%esp - 35f1: 5b pop %ebx - 35f2: 5d pop %ebp - 35f3: c3 ret - -000035f4 : - -void -validatetest(void) -{ - 35f4: 55 push %ebp - 35f5: 89 e5 mov %esp,%ebp - 35f7: 83 ec 18 sub $0x18,%esp - int hi, pid; - uint p; - - printf(stdout, "validate test\n"); - 35fa: a1 a0 62 00 00 mov 0x62a0,%eax - 35ff: 83 ec 08 sub $0x8,%esp - 3602: 68 73 59 00 00 push $0x5973 - 3607: 50 push %eax - 3608: e8 21 0a 00 00 call 402e - 360d: 83 c4 10 add $0x10,%esp - hi = 1100*1024; - 3610: c7 45 f0 00 30 11 00 movl $0x113000,-0x10(%ebp) - - for(p = 0; p <= (uint)hi; p += 4096){ - 3617: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 361e: e9 8a 00 00 00 jmp 36ad - if((pid = fork()) == 0){ - 3623: e8 89 08 00 00 call 3eb1 - 3628: 89 45 ec mov %eax,-0x14(%ebp) - 362b: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 362f: 75 14 jne 3645 - // try to crash the kernel by passing in a badly placed integer - validateint((int*)p); - 3631: 8b 45 f4 mov -0xc(%ebp),%eax - 3634: 83 ec 0c sub $0xc,%esp - 3637: 50 push %eax - 3638: e8 95 ff ff ff call 35d2 - 363d: 83 c4 10 add $0x10,%esp - exit(); - 3640: e8 74 08 00 00 call 3eb9 - } - sleep(0); - 3645: 83 ec 0c sub $0xc,%esp - 3648: 6a 00 push $0x0 - 364a: e8 fa 08 00 00 call 3f49 - 364f: 83 c4 10 add $0x10,%esp - sleep(0); - 3652: 83 ec 0c sub $0xc,%esp - 3655: 6a 00 push $0x0 - 3657: e8 ed 08 00 00 call 3f49 - 365c: 83 c4 10 add $0x10,%esp - kill(pid); - 365f: 83 ec 0c sub $0xc,%esp - 3662: ff 75 ec pushl -0x14(%ebp) - 3665: e8 7f 08 00 00 call 3ee9 - 366a: 83 c4 10 add $0x10,%esp - wait(); - 366d: e8 4f 08 00 00 call 3ec1 - - // try to crash the kernel by passing in a bad string pointer - if(link("nosuchfile", (char*)p) != -1){ - 3672: 8b 45 f4 mov -0xc(%ebp),%eax - 3675: 83 ec 08 sub $0x8,%esp - 3678: 50 push %eax - 3679: 68 82 59 00 00 push $0x5982 - 367e: e8 96 08 00 00 call 3f19 - 3683: 83 c4 10 add $0x10,%esp - 3686: 83 f8 ff cmp $0xffffffff,%eax - 3689: 74 1b je 36a6 - printf(stdout, "link should not succeed\n"); - 368b: a1 a0 62 00 00 mov 0x62a0,%eax - 3690: 83 ec 08 sub $0x8,%esp - 3693: 68 8d 59 00 00 push $0x598d - 3698: 50 push %eax - 3699: e8 90 09 00 00 call 402e - 369e: 83 c4 10 add $0x10,%esp - exit(); - 36a1: e8 13 08 00 00 call 3eb9 - uint p; - - printf(stdout, "validate test\n"); - hi = 1100*1024; - - for(p = 0; p <= (uint)hi; p += 4096){ - 36a6: 81 45 f4 00 10 00 00 addl $0x1000,-0xc(%ebp) - 36ad: 8b 45 f0 mov -0x10(%ebp),%eax - 36b0: 3b 45 f4 cmp -0xc(%ebp),%eax - 36b3: 0f 83 6a ff ff ff jae 3623 - printf(stdout, "link should not succeed\n"); - exit(); - } - } - - printf(stdout, "validate ok\n"); - 36b9: a1 a0 62 00 00 mov 0x62a0,%eax - 36be: 83 ec 08 sub $0x8,%esp - 36c1: 68 a6 59 00 00 push $0x59a6 - 36c6: 50 push %eax - 36c7: e8 62 09 00 00 call 402e - 36cc: 83 c4 10 add $0x10,%esp -} - 36cf: c9 leave - 36d0: c3 ret - -000036d1 : - -// does unintialized data start out zero? -char uninit[10000]; -void -bsstest(void) -{ - 36d1: 55 push %ebp - 36d2: 89 e5 mov %esp,%ebp - 36d4: 83 ec 18 sub $0x18,%esp - int i; - - printf(stdout, "bss test\n"); - 36d7: a1 a0 62 00 00 mov 0x62a0,%eax - 36dc: 83 ec 08 sub $0x8,%esp - 36df: 68 b3 59 00 00 push $0x59b3 - 36e4: 50 push %eax - 36e5: e8 44 09 00 00 call 402e - 36ea: 83 c4 10 add $0x10,%esp - for(i = 0; i < sizeof(uninit); i++){ - 36ed: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 36f4: eb 2e jmp 3724 - if(uninit[i] != '\0'){ - 36f6: 8b 45 f4 mov -0xc(%ebp),%eax - 36f9: 05 80 63 00 00 add $0x6380,%eax - 36fe: 0f b6 00 movzbl (%eax),%eax - 3701: 84 c0 test %al,%al - 3703: 74 1b je 3720 - printf(stdout, "bss test failed\n"); - 3705: a1 a0 62 00 00 mov 0x62a0,%eax - 370a: 83 ec 08 sub $0x8,%esp - 370d: 68 bd 59 00 00 push $0x59bd - 3712: 50 push %eax - 3713: e8 16 09 00 00 call 402e - 3718: 83 c4 10 add $0x10,%esp - exit(); - 371b: e8 99 07 00 00 call 3eb9 -bsstest(void) -{ - int i; - - printf(stdout, "bss test\n"); - for(i = 0; i < sizeof(uninit); i++){ - 3720: 83 45 f4 01 addl $0x1,-0xc(%ebp) - 3724: 8b 45 f4 mov -0xc(%ebp),%eax - 3727: 3d 0f 27 00 00 cmp $0x270f,%eax - 372c: 76 c8 jbe 36f6 - if(uninit[i] != '\0'){ - printf(stdout, "bss test failed\n"); - exit(); - } - } - printf(stdout, "bss test ok\n"); - 372e: a1 a0 62 00 00 mov 0x62a0,%eax - 3733: 83 ec 08 sub $0x8,%esp - 3736: 68 ce 59 00 00 push $0x59ce - 373b: 50 push %eax - 373c: e8 ed 08 00 00 call 402e - 3741: 83 c4 10 add $0x10,%esp -} - 3744: c9 leave - 3745: c3 ret - -00003746 : -// does exec return an error if the arguments -// are larger than a page? or does it write -// below the stack and wreck the instructions/data? -void -bigargtest(void) -{ - 3746: 55 push %ebp - 3747: 89 e5 mov %esp,%ebp - 3749: 83 ec 18 sub $0x18,%esp - int pid, fd; - - unlink("bigarg-ok"); - 374c: 83 ec 0c sub $0xc,%esp - 374f: 68 db 59 00 00 push $0x59db - 3754: e8 b0 07 00 00 call 3f09 - 3759: 83 c4 10 add $0x10,%esp - pid = fork(); - 375c: e8 50 07 00 00 call 3eb1 - 3761: 89 45 f0 mov %eax,-0x10(%ebp) - if(pid == 0){ - 3764: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 3768: 0f 85 97 00 00 00 jne 3805 - static char *args[MAXARG]; - int i; - for(i = 0; i < MAXARG-1; i++) - 376e: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 3775: eb 12 jmp 3789 - args[i] = "bigargs test: failed\n "; - 3777: 8b 45 f4 mov -0xc(%ebp),%eax - 377a: c7 04 85 c0 62 00 00 movl $0x59e8,0x62c0(,%eax,4) - 3781: e8 59 00 00 - unlink("bigarg-ok"); - pid = fork(); - if(pid == 0){ - static char *args[MAXARG]; - int i; - for(i = 0; i < MAXARG-1; i++) - 3785: 83 45 f4 01 addl $0x1,-0xc(%ebp) - 3789: 83 7d f4 1e cmpl $0x1e,-0xc(%ebp) - 378d: 7e e8 jle 3777 - args[i] = "bigargs test: failed\n "; - args[MAXARG-1] = 0; - 378f: c7 05 3c 63 00 00 00 movl $0x0,0x633c - 3796: 00 00 00 - printf(stdout, "bigarg test\n"); - 3799: a1 a0 62 00 00 mov 0x62a0,%eax - 379e: 83 ec 08 sub $0x8,%esp - 37a1: 68 c5 5a 00 00 push $0x5ac5 - 37a6: 50 push %eax - 37a7: e8 82 08 00 00 call 402e - 37ac: 83 c4 10 add $0x10,%esp - exec("echo", args); - 37af: 83 ec 08 sub $0x8,%esp - 37b2: 68 c0 62 00 00 push $0x62c0 - 37b7: 68 e4 43 00 00 push $0x43e4 - 37bc: e8 30 07 00 00 call 3ef1 - 37c1: 83 c4 10 add $0x10,%esp - printf(stdout, "bigarg test ok\n"); - 37c4: a1 a0 62 00 00 mov 0x62a0,%eax - 37c9: 83 ec 08 sub $0x8,%esp - 37cc: 68 d2 5a 00 00 push $0x5ad2 - 37d1: 50 push %eax - 37d2: e8 57 08 00 00 call 402e - 37d7: 83 c4 10 add $0x10,%esp - fd = open("bigarg-ok", O_CREATE); - 37da: 83 ec 08 sub $0x8,%esp - 37dd: 68 00 02 00 00 push $0x200 - 37e2: 68 db 59 00 00 push $0x59db - 37e7: e8 0d 07 00 00 call 3ef9 - 37ec: 83 c4 10 add $0x10,%esp - 37ef: 89 45 ec mov %eax,-0x14(%ebp) - close(fd); - 37f2: 83 ec 0c sub $0xc,%esp - 37f5: ff 75 ec pushl -0x14(%ebp) - 37f8: e8 e4 06 00 00 call 3ee1 - 37fd: 83 c4 10 add $0x10,%esp - exit(); - 3800: e8 b4 06 00 00 call 3eb9 - } else if(pid < 0){ - 3805: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 3809: 79 1b jns 3826 - printf(stdout, "bigargtest: fork failed\n"); - 380b: a1 a0 62 00 00 mov 0x62a0,%eax - 3810: 83 ec 08 sub $0x8,%esp - 3813: 68 e2 5a 00 00 push $0x5ae2 - 3818: 50 push %eax - 3819: e8 10 08 00 00 call 402e - 381e: 83 c4 10 add $0x10,%esp - exit(); - 3821: e8 93 06 00 00 call 3eb9 - } - wait(); - 3826: e8 96 06 00 00 call 3ec1 - fd = open("bigarg-ok", 0); - 382b: 83 ec 08 sub $0x8,%esp - 382e: 6a 00 push $0x0 - 3830: 68 db 59 00 00 push $0x59db - 3835: e8 bf 06 00 00 call 3ef9 - 383a: 83 c4 10 add $0x10,%esp - 383d: 89 45 ec mov %eax,-0x14(%ebp) - if(fd < 0){ - 3840: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 3844: 79 1b jns 3861 - printf(stdout, "bigarg test failed!\n"); - 3846: a1 a0 62 00 00 mov 0x62a0,%eax - 384b: 83 ec 08 sub $0x8,%esp - 384e: 68 fb 5a 00 00 push $0x5afb - 3853: 50 push %eax - 3854: e8 d5 07 00 00 call 402e - 3859: 83 c4 10 add $0x10,%esp - exit(); - 385c: e8 58 06 00 00 call 3eb9 - } - close(fd); - 3861: 83 ec 0c sub $0xc,%esp - 3864: ff 75 ec pushl -0x14(%ebp) - 3867: e8 75 06 00 00 call 3ee1 - 386c: 83 c4 10 add $0x10,%esp - unlink("bigarg-ok"); - 386f: 83 ec 0c sub $0xc,%esp - 3872: 68 db 59 00 00 push $0x59db - 3877: e8 8d 06 00 00 call 3f09 - 387c: 83 c4 10 add $0x10,%esp -} - 387f: c9 leave - 3880: c3 ret - -00003881 : - -// what happens when the file system runs out of blocks? -// answer: balloc panics, so this test is not useful. -void -fsfull() -{ - 3881: 55 push %ebp - 3882: 89 e5 mov %esp,%ebp - 3884: 53 push %ebx - 3885: 83 ec 64 sub $0x64,%esp - int nfiles; - int fsblocks = 0; - 3888: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - - printf(1, "fsfull test\n"); - 388f: 83 ec 08 sub $0x8,%esp - 3892: 68 10 5b 00 00 push $0x5b10 - 3897: 6a 01 push $0x1 - 3899: e8 90 07 00 00 call 402e - 389e: 83 c4 10 add $0x10,%esp - - for(nfiles = 0; ; nfiles++){ - 38a1: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - char name[64]; - name[0] = 'f'; - 38a8: c6 45 a4 66 movb $0x66,-0x5c(%ebp) - name[1] = '0' + nfiles / 1000; - 38ac: 8b 4d f4 mov -0xc(%ebp),%ecx - 38af: ba d3 4d 62 10 mov $0x10624dd3,%edx - 38b4: 89 c8 mov %ecx,%eax - 38b6: f7 ea imul %edx - 38b8: c1 fa 06 sar $0x6,%edx - 38bb: 89 c8 mov %ecx,%eax - 38bd: c1 f8 1f sar $0x1f,%eax - 38c0: 29 c2 sub %eax,%edx - 38c2: 89 d0 mov %edx,%eax - 38c4: 83 c0 30 add $0x30,%eax - 38c7: 88 45 a5 mov %al,-0x5b(%ebp) - name[2] = '0' + (nfiles % 1000) / 100; - 38ca: 8b 5d f4 mov -0xc(%ebp),%ebx - 38cd: ba d3 4d 62 10 mov $0x10624dd3,%edx - 38d2: 89 d8 mov %ebx,%eax - 38d4: f7 ea imul %edx - 38d6: c1 fa 06 sar $0x6,%edx - 38d9: 89 d8 mov %ebx,%eax - 38db: c1 f8 1f sar $0x1f,%eax - 38de: 89 d1 mov %edx,%ecx - 38e0: 29 c1 sub %eax,%ecx - 38e2: 69 c1 e8 03 00 00 imul $0x3e8,%ecx,%eax - 38e8: 29 c3 sub %eax,%ebx - 38ea: 89 d9 mov %ebx,%ecx - 38ec: ba 1f 85 eb 51 mov $0x51eb851f,%edx - 38f1: 89 c8 mov %ecx,%eax - 38f3: f7 ea imul %edx - 38f5: c1 fa 05 sar $0x5,%edx - 38f8: 89 c8 mov %ecx,%eax - 38fa: c1 f8 1f sar $0x1f,%eax - 38fd: 29 c2 sub %eax,%edx - 38ff: 89 d0 mov %edx,%eax - 3901: 83 c0 30 add $0x30,%eax - 3904: 88 45 a6 mov %al,-0x5a(%ebp) - name[3] = '0' + (nfiles % 100) / 10; - 3907: 8b 5d f4 mov -0xc(%ebp),%ebx - 390a: ba 1f 85 eb 51 mov $0x51eb851f,%edx - 390f: 89 d8 mov %ebx,%eax - 3911: f7 ea imul %edx - 3913: c1 fa 05 sar $0x5,%edx - 3916: 89 d8 mov %ebx,%eax - 3918: c1 f8 1f sar $0x1f,%eax - 391b: 89 d1 mov %edx,%ecx - 391d: 29 c1 sub %eax,%ecx - 391f: 6b c1 64 imul $0x64,%ecx,%eax - 3922: 29 c3 sub %eax,%ebx - 3924: 89 d9 mov %ebx,%ecx - 3926: ba 67 66 66 66 mov $0x66666667,%edx - 392b: 89 c8 mov %ecx,%eax - 392d: f7 ea imul %edx - 392f: c1 fa 02 sar $0x2,%edx - 3932: 89 c8 mov %ecx,%eax - 3934: c1 f8 1f sar $0x1f,%eax - 3937: 29 c2 sub %eax,%edx - 3939: 89 d0 mov %edx,%eax - 393b: 83 c0 30 add $0x30,%eax - 393e: 88 45 a7 mov %al,-0x59(%ebp) - name[4] = '0' + (nfiles % 10); - 3941: 8b 4d f4 mov -0xc(%ebp),%ecx - 3944: ba 67 66 66 66 mov $0x66666667,%edx - 3949: 89 c8 mov %ecx,%eax - 394b: f7 ea imul %edx - 394d: c1 fa 02 sar $0x2,%edx - 3950: 89 c8 mov %ecx,%eax - 3952: c1 f8 1f sar $0x1f,%eax - 3955: 29 c2 sub %eax,%edx - 3957: 89 d0 mov %edx,%eax - 3959: c1 e0 02 shl $0x2,%eax - 395c: 01 d0 add %edx,%eax - 395e: 01 c0 add %eax,%eax - 3960: 29 c1 sub %eax,%ecx - 3962: 89 ca mov %ecx,%edx - 3964: 89 d0 mov %edx,%eax - 3966: 83 c0 30 add $0x30,%eax - 3969: 88 45 a8 mov %al,-0x58(%ebp) - name[5] = '\0'; - 396c: c6 45 a9 00 movb $0x0,-0x57(%ebp) - printf(1, "writing %s\n", name); - 3970: 83 ec 04 sub $0x4,%esp - 3973: 8d 45 a4 lea -0x5c(%ebp),%eax - 3976: 50 push %eax - 3977: 68 1d 5b 00 00 push $0x5b1d - 397c: 6a 01 push $0x1 - 397e: e8 ab 06 00 00 call 402e - 3983: 83 c4 10 add $0x10,%esp - int fd = open(name, O_CREATE|O_RDWR); - 3986: 83 ec 08 sub $0x8,%esp - 3989: 68 02 02 00 00 push $0x202 - 398e: 8d 45 a4 lea -0x5c(%ebp),%eax - 3991: 50 push %eax - 3992: e8 62 05 00 00 call 3ef9 - 3997: 83 c4 10 add $0x10,%esp - 399a: 89 45 e8 mov %eax,-0x18(%ebp) - if(fd < 0){ - 399d: 83 7d e8 00 cmpl $0x0,-0x18(%ebp) - 39a1: 79 18 jns 39bb - printf(1, "open %s failed\n", name); - 39a3: 83 ec 04 sub $0x4,%esp - 39a6: 8d 45 a4 lea -0x5c(%ebp),%eax - 39a9: 50 push %eax - 39aa: 68 29 5b 00 00 push $0x5b29 - 39af: 6a 01 push $0x1 - 39b1: e8 78 06 00 00 call 402e - 39b6: 83 c4 10 add $0x10,%esp - break; - 39b9: eb 6e jmp 3a29 - } - int total = 0; - 39bb: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - while(1){ - int cc = write(fd, buf, 512); - 39c2: 83 ec 04 sub $0x4,%esp - 39c5: 68 00 02 00 00 push $0x200 - 39ca: 68 c0 8a 00 00 push $0x8ac0 - 39cf: ff 75 e8 pushl -0x18(%ebp) - 39d2: e8 02 05 00 00 call 3ed9 - 39d7: 83 c4 10 add $0x10,%esp - 39da: 89 45 e4 mov %eax,-0x1c(%ebp) - if(cc < 512) - 39dd: 81 7d e4 ff 01 00 00 cmpl $0x1ff,-0x1c(%ebp) - 39e4: 7f 2c jg 3a12 - break; - 39e6: 90 nop - total += cc; - fsblocks++; - } - printf(1, "wrote %d bytes\n", total); - 39e7: 83 ec 04 sub $0x4,%esp - 39ea: ff 75 ec pushl -0x14(%ebp) - 39ed: 68 39 5b 00 00 push $0x5b39 - 39f2: 6a 01 push $0x1 - 39f4: e8 35 06 00 00 call 402e - 39f9: 83 c4 10 add $0x10,%esp - close(fd); - 39fc: 83 ec 0c sub $0xc,%esp - 39ff: ff 75 e8 pushl -0x18(%ebp) - 3a02: e8 da 04 00 00 call 3ee1 - 3a07: 83 c4 10 add $0x10,%esp - if(total == 0) - 3a0a: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 3a0e: 75 10 jne 3a20 - 3a10: eb 0c jmp 3a1e - int total = 0; - while(1){ - int cc = write(fd, buf, 512); - if(cc < 512) - break; - total += cc; - 3a12: 8b 45 e4 mov -0x1c(%ebp),%eax - 3a15: 01 45 ec add %eax,-0x14(%ebp) - fsblocks++; - 3a18: 83 45 f0 01 addl $0x1,-0x10(%ebp) - } - 3a1c: eb a4 jmp 39c2 - printf(1, "wrote %d bytes\n", total); - close(fd); - if(total == 0) - break; - 3a1e: eb 09 jmp 3a29 - int nfiles; - int fsblocks = 0; - - printf(1, "fsfull test\n"); - - for(nfiles = 0; ; nfiles++){ - 3a20: 83 45 f4 01 addl $0x1,-0xc(%ebp) - } - printf(1, "wrote %d bytes\n", total); - close(fd); - if(total == 0) - break; - } - 3a24: e9 7f fe ff ff jmp 38a8 - - while(nfiles >= 0){ - 3a29: e9 db 00 00 00 jmp 3b09 - char name[64]; - name[0] = 'f'; - 3a2e: c6 45 a4 66 movb $0x66,-0x5c(%ebp) - name[1] = '0' + nfiles / 1000; - 3a32: 8b 4d f4 mov -0xc(%ebp),%ecx - 3a35: ba d3 4d 62 10 mov $0x10624dd3,%edx - 3a3a: 89 c8 mov %ecx,%eax - 3a3c: f7 ea imul %edx - 3a3e: c1 fa 06 sar $0x6,%edx - 3a41: 89 c8 mov %ecx,%eax - 3a43: c1 f8 1f sar $0x1f,%eax - 3a46: 29 c2 sub %eax,%edx - 3a48: 89 d0 mov %edx,%eax - 3a4a: 83 c0 30 add $0x30,%eax - 3a4d: 88 45 a5 mov %al,-0x5b(%ebp) - name[2] = '0' + (nfiles % 1000) / 100; - 3a50: 8b 5d f4 mov -0xc(%ebp),%ebx - 3a53: ba d3 4d 62 10 mov $0x10624dd3,%edx - 3a58: 89 d8 mov %ebx,%eax - 3a5a: f7 ea imul %edx - 3a5c: c1 fa 06 sar $0x6,%edx - 3a5f: 89 d8 mov %ebx,%eax - 3a61: c1 f8 1f sar $0x1f,%eax - 3a64: 89 d1 mov %edx,%ecx - 3a66: 29 c1 sub %eax,%ecx - 3a68: 69 c1 e8 03 00 00 imul $0x3e8,%ecx,%eax - 3a6e: 29 c3 sub %eax,%ebx - 3a70: 89 d9 mov %ebx,%ecx - 3a72: ba 1f 85 eb 51 mov $0x51eb851f,%edx - 3a77: 89 c8 mov %ecx,%eax - 3a79: f7 ea imul %edx - 3a7b: c1 fa 05 sar $0x5,%edx - 3a7e: 89 c8 mov %ecx,%eax - 3a80: c1 f8 1f sar $0x1f,%eax - 3a83: 29 c2 sub %eax,%edx - 3a85: 89 d0 mov %edx,%eax - 3a87: 83 c0 30 add $0x30,%eax - 3a8a: 88 45 a6 mov %al,-0x5a(%ebp) - name[3] = '0' + (nfiles % 100) / 10; - 3a8d: 8b 5d f4 mov -0xc(%ebp),%ebx - 3a90: ba 1f 85 eb 51 mov $0x51eb851f,%edx - 3a95: 89 d8 mov %ebx,%eax - 3a97: f7 ea imul %edx - 3a99: c1 fa 05 sar $0x5,%edx - 3a9c: 89 d8 mov %ebx,%eax - 3a9e: c1 f8 1f sar $0x1f,%eax - 3aa1: 89 d1 mov %edx,%ecx - 3aa3: 29 c1 sub %eax,%ecx - 3aa5: 6b c1 64 imul $0x64,%ecx,%eax - 3aa8: 29 c3 sub %eax,%ebx - 3aaa: 89 d9 mov %ebx,%ecx - 3aac: ba 67 66 66 66 mov $0x66666667,%edx - 3ab1: 89 c8 mov %ecx,%eax - 3ab3: f7 ea imul %edx - 3ab5: c1 fa 02 sar $0x2,%edx - 3ab8: 89 c8 mov %ecx,%eax - 3aba: c1 f8 1f sar $0x1f,%eax - 3abd: 29 c2 sub %eax,%edx - 3abf: 89 d0 mov %edx,%eax - 3ac1: 83 c0 30 add $0x30,%eax - 3ac4: 88 45 a7 mov %al,-0x59(%ebp) - name[4] = '0' + (nfiles % 10); - 3ac7: 8b 4d f4 mov -0xc(%ebp),%ecx - 3aca: ba 67 66 66 66 mov $0x66666667,%edx - 3acf: 89 c8 mov %ecx,%eax - 3ad1: f7 ea imul %edx - 3ad3: c1 fa 02 sar $0x2,%edx - 3ad6: 89 c8 mov %ecx,%eax - 3ad8: c1 f8 1f sar $0x1f,%eax - 3adb: 29 c2 sub %eax,%edx - 3add: 89 d0 mov %edx,%eax - 3adf: c1 e0 02 shl $0x2,%eax - 3ae2: 01 d0 add %edx,%eax - 3ae4: 01 c0 add %eax,%eax - 3ae6: 29 c1 sub %eax,%ecx - 3ae8: 89 ca mov %ecx,%edx - 3aea: 89 d0 mov %edx,%eax - 3aec: 83 c0 30 add $0x30,%eax - 3aef: 88 45 a8 mov %al,-0x58(%ebp) - name[5] = '\0'; - 3af2: c6 45 a9 00 movb $0x0,-0x57(%ebp) - unlink(name); - 3af6: 83 ec 0c sub $0xc,%esp - 3af9: 8d 45 a4 lea -0x5c(%ebp),%eax - 3afc: 50 push %eax - 3afd: e8 07 04 00 00 call 3f09 - 3b02: 83 c4 10 add $0x10,%esp - nfiles--; - 3b05: 83 6d f4 01 subl $0x1,-0xc(%ebp) - close(fd); - if(total == 0) - break; - } - - while(nfiles >= 0){ - 3b09: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 3b0d: 0f 89 1b ff ff ff jns 3a2e - name[5] = '\0'; - unlink(name); - nfiles--; - } - - printf(1, "fsfull test finished\n"); - 3b13: 83 ec 08 sub $0x8,%esp - 3b16: 68 49 5b 00 00 push $0x5b49 - 3b1b: 6a 01 push $0x1 - 3b1d: e8 0c 05 00 00 call 402e - 3b22: 83 c4 10 add $0x10,%esp -} - 3b25: 8b 5d fc mov -0x4(%ebp),%ebx - 3b28: c9 leave - 3b29: c3 ret - -00003b2a : - -unsigned long randstate = 1; -unsigned int -rand() -{ - 3b2a: 55 push %ebp - 3b2b: 89 e5 mov %esp,%ebp - randstate = randstate * 1664525 + 1013904223; - 3b2d: a1 a4 62 00 00 mov 0x62a4,%eax - 3b32: 69 c0 0d 66 19 00 imul $0x19660d,%eax,%eax - 3b38: 05 5f f3 6e 3c add $0x3c6ef35f,%eax - 3b3d: a3 a4 62 00 00 mov %eax,0x62a4 - return randstate; - 3b42: a1 a4 62 00 00 mov 0x62a4,%eax -} - 3b47: 5d pop %ebp - 3b48: c3 ret - -00003b49
: - -int -main(int argc, char *argv[]) -{ - 3b49: 8d 4c 24 04 lea 0x4(%esp),%ecx - 3b4d: 83 e4 f0 and $0xfffffff0,%esp - 3b50: ff 71 fc pushl -0x4(%ecx) - 3b53: 55 push %ebp - 3b54: 89 e5 mov %esp,%ebp - 3b56: 51 push %ecx - 3b57: 83 ec 04 sub $0x4,%esp - printf(1, "usertests starting\n"); - 3b5a: 83 ec 08 sub $0x8,%esp - 3b5d: 68 5f 5b 00 00 push $0x5b5f - 3b62: 6a 01 push $0x1 - 3b64: e8 c5 04 00 00 call 402e - 3b69: 83 c4 10 add $0x10,%esp - - if(open("usertests.ran", 0) >= 0){ - 3b6c: 83 ec 08 sub $0x8,%esp - 3b6f: 6a 00 push $0x0 - 3b71: 68 73 5b 00 00 push $0x5b73 - 3b76: e8 7e 03 00 00 call 3ef9 - 3b7b: 83 c4 10 add $0x10,%esp - 3b7e: 85 c0 test %eax,%eax - 3b80: 78 17 js 3b99 - printf(1, "already ran user tests -- rebuild fs.img\n"); - 3b82: 83 ec 08 sub $0x8,%esp - 3b85: 68 84 5b 00 00 push $0x5b84 - 3b8a: 6a 01 push $0x1 - 3b8c: e8 9d 04 00 00 call 402e - 3b91: 83 c4 10 add $0x10,%esp - exit(); - 3b94: e8 20 03 00 00 call 3eb9 - } - close(open("usertests.ran", O_CREATE)); - 3b99: 83 ec 08 sub $0x8,%esp - 3b9c: 68 00 02 00 00 push $0x200 - 3ba1: 68 73 5b 00 00 push $0x5b73 - 3ba6: e8 4e 03 00 00 call 3ef9 - 3bab: 83 c4 10 add $0x10,%esp - 3bae: 83 ec 0c sub $0xc,%esp - 3bb1: 50 push %eax - 3bb2: e8 2a 03 00 00 call 3ee1 - 3bb7: 83 c4 10 add $0x10,%esp - - createdelete(); - 3bba: e8 e2 d6 ff ff call 12a1 - linkunlink(); - 3bbf: e8 ff e0 ff ff call 1cc3 - concreate(); - 3bc4: e8 4b dd ff ff call 1914 - fourfiles(); - 3bc9: e8 83 d4 ff ff call 1051 - sharedfd(); - 3bce: e8 9b d2 ff ff call e6e - - bigargtest(); - 3bd3: e8 6e fb ff ff call 3746 - bigwrite(); - 3bd8: e8 d5 ea ff ff call 26b2 - bigargtest(); - 3bdd: e8 64 fb ff ff call 3746 - bsstest(); - 3be2: e8 ea fa ff ff call 36d1 - sbrktest(); - 3be7: e8 f9 f4 ff ff call 30e5 - validatetest(); - 3bec: e8 03 fa ff ff call 35f4 - - opentest(); - 3bf1: e8 06 c7 ff ff call 2fc - writetest(); - 3bf6: e8 af c7 ff ff call 3aa - writetest1(); - 3bfb: e8 b9 c9 ff ff call 5b9 - createtest(); - 3c00: e8 b1 cb ff ff call 7b6 - - openiputtest(); - 3c05: e8 e4 c5 ff ff call 1ee - exitiputtest(); - 3c0a: e8 e1 c4 ff ff call f0 - iputtest(); - 3c0f: e8 ec c3 ff ff call 0 - - mem(); - 3c14: e8 65 d1 ff ff call d7e - pipe1(); - 3c19: e8 9c cd ff ff call 9ba - preempt(); - 3c1e: e8 80 cf ff ff call ba3 - exitwait(); - 3c23: e8 de d0 ff ff call d06 - - rmdot(); - 3c28: e8 fa ee ff ff call 2b27 - fourteen(); - 3c2d: e8 9a ed ff ff call 29cc - bigfile(); - 3c32: e8 78 eb ff ff call 27af - subdir(); - 3c37: e8 33 e3 ff ff call 1f6f - linktest(); - 3c3c: e8 92 da ff ff call 16d3 - unlinkread(); - 3c41: e8 cc d8 ff ff call 1512 - dirfile(); - 3c46: e8 60 f0 ff ff call 2cab - iref(); - 3c4b: e8 92 f2 ff ff call 2ee2 - forktest(); - 3c50: e8 c6 f3 ff ff call 301b - bigdir(); // slow - 3c55: e8 a1 e1 ff ff call 1dfb - exectest(); - 3c5a: e8 09 cd ff ff call 968 - - exit(); - 3c5f: e8 55 02 00 00 call 3eb9 - -00003c64 : - "cc"); -} - -static inline void -stosb(void *addr, int data, int cnt) -{ - 3c64: 55 push %ebp - 3c65: 89 e5 mov %esp,%ebp - 3c67: 57 push %edi - 3c68: 53 push %ebx - asm volatile("cld; rep stosb" : - 3c69: 8b 4d 08 mov 0x8(%ebp),%ecx - 3c6c: 8b 55 10 mov 0x10(%ebp),%edx - 3c6f: 8b 45 0c mov 0xc(%ebp),%eax - 3c72: 89 cb mov %ecx,%ebx - 3c74: 89 df mov %ebx,%edi - 3c76: 89 d1 mov %edx,%ecx - 3c78: fc cld - 3c79: f3 aa rep stos %al,%es:(%edi) - 3c7b: 89 ca mov %ecx,%edx - 3c7d: 89 fb mov %edi,%ebx - 3c7f: 89 5d 08 mov %ebx,0x8(%ebp) - 3c82: 89 55 10 mov %edx,0x10(%ebp) - "=D" (addr), "=c" (cnt) : - "0" (addr), "1" (cnt), "a" (data) : - "memory", "cc"); -} - 3c85: 5b pop %ebx - 3c86: 5f pop %edi - 3c87: 5d pop %ebp - 3c88: c3 ret - -00003c89 : -#include "user.h" -#include "x86.h" - -char* -strcpy(char *s, char *t) -{ - 3c89: 55 push %ebp - 3c8a: 89 e5 mov %esp,%ebp - 3c8c: 83 ec 10 sub $0x10,%esp - char *os; - - os = s; - 3c8f: 8b 45 08 mov 0x8(%ebp),%eax - 3c92: 89 45 fc mov %eax,-0x4(%ebp) - while((*s++ = *t++) != 0) - 3c95: 90 nop - 3c96: 8b 45 08 mov 0x8(%ebp),%eax - 3c99: 8d 50 01 lea 0x1(%eax),%edx - 3c9c: 89 55 08 mov %edx,0x8(%ebp) - 3c9f: 8b 55 0c mov 0xc(%ebp),%edx - 3ca2: 8d 4a 01 lea 0x1(%edx),%ecx - 3ca5: 89 4d 0c mov %ecx,0xc(%ebp) - 3ca8: 0f b6 12 movzbl (%edx),%edx - 3cab: 88 10 mov %dl,(%eax) - 3cad: 0f b6 00 movzbl (%eax),%eax - 3cb0: 84 c0 test %al,%al - 3cb2: 75 e2 jne 3c96 - ; - return os; - 3cb4: 8b 45 fc mov -0x4(%ebp),%eax -} - 3cb7: c9 leave - 3cb8: c3 ret - -00003cb9 : - -int -strcmp(const char *p, const char *q) -{ - 3cb9: 55 push %ebp - 3cba: 89 e5 mov %esp,%ebp - while(*p && *p == *q) - 3cbc: eb 08 jmp 3cc6 - p++, q++; - 3cbe: 83 45 08 01 addl $0x1,0x8(%ebp) - 3cc2: 83 45 0c 01 addl $0x1,0xc(%ebp) -} - -int -strcmp(const char *p, const char *q) -{ - while(*p && *p == *q) - 3cc6: 8b 45 08 mov 0x8(%ebp),%eax - 3cc9: 0f b6 00 movzbl (%eax),%eax - 3ccc: 84 c0 test %al,%al - 3cce: 74 10 je 3ce0 - 3cd0: 8b 45 08 mov 0x8(%ebp),%eax - 3cd3: 0f b6 10 movzbl (%eax),%edx - 3cd6: 8b 45 0c mov 0xc(%ebp),%eax - 3cd9: 0f b6 00 movzbl (%eax),%eax - 3cdc: 38 c2 cmp %al,%dl - 3cde: 74 de je 3cbe - p++, q++; - return (uchar)*p - (uchar)*q; - 3ce0: 8b 45 08 mov 0x8(%ebp),%eax - 3ce3: 0f b6 00 movzbl (%eax),%eax - 3ce6: 0f b6 d0 movzbl %al,%edx - 3ce9: 8b 45 0c mov 0xc(%ebp),%eax - 3cec: 0f b6 00 movzbl (%eax),%eax - 3cef: 0f b6 c0 movzbl %al,%eax - 3cf2: 29 c2 sub %eax,%edx - 3cf4: 89 d0 mov %edx,%eax -} - 3cf6: 5d pop %ebp - 3cf7: c3 ret - -00003cf8 : - -uint -strlen(char *s) -{ - 3cf8: 55 push %ebp - 3cf9: 89 e5 mov %esp,%ebp - 3cfb: 83 ec 10 sub $0x10,%esp - int n; - - for(n = 0; s[n]; n++) - 3cfe: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - 3d05: eb 04 jmp 3d0b - 3d07: 83 45 fc 01 addl $0x1,-0x4(%ebp) - 3d0b: 8b 55 fc mov -0x4(%ebp),%edx - 3d0e: 8b 45 08 mov 0x8(%ebp),%eax - 3d11: 01 d0 add %edx,%eax - 3d13: 0f b6 00 movzbl (%eax),%eax - 3d16: 84 c0 test %al,%al - 3d18: 75 ed jne 3d07 - ; - return n; - 3d1a: 8b 45 fc mov -0x4(%ebp),%eax -} - 3d1d: c9 leave - 3d1e: c3 ret - -00003d1f : - -void* -memset(void *dst, int c, uint n) -{ - 3d1f: 55 push %ebp - 3d20: 89 e5 mov %esp,%ebp - stosb(dst, c, n); - 3d22: 8b 45 10 mov 0x10(%ebp),%eax - 3d25: 50 push %eax - 3d26: ff 75 0c pushl 0xc(%ebp) - 3d29: ff 75 08 pushl 0x8(%ebp) - 3d2c: e8 33 ff ff ff call 3c64 - 3d31: 83 c4 0c add $0xc,%esp - return dst; - 3d34: 8b 45 08 mov 0x8(%ebp),%eax -} - 3d37: c9 leave - 3d38: c3 ret - -00003d39 : - -char* -strchr(const char *s, char c) -{ - 3d39: 55 push %ebp - 3d3a: 89 e5 mov %esp,%ebp - 3d3c: 83 ec 04 sub $0x4,%esp - 3d3f: 8b 45 0c mov 0xc(%ebp),%eax - 3d42: 88 45 fc mov %al,-0x4(%ebp) - for(; *s; s++) - 3d45: eb 14 jmp 3d5b - if(*s == c) - 3d47: 8b 45 08 mov 0x8(%ebp),%eax - 3d4a: 0f b6 00 movzbl (%eax),%eax - 3d4d: 3a 45 fc cmp -0x4(%ebp),%al - 3d50: 75 05 jne 3d57 - return (char*)s; - 3d52: 8b 45 08 mov 0x8(%ebp),%eax - 3d55: eb 13 jmp 3d6a -} - -char* -strchr(const char *s, char c) -{ - for(; *s; s++) - 3d57: 83 45 08 01 addl $0x1,0x8(%ebp) - 3d5b: 8b 45 08 mov 0x8(%ebp),%eax - 3d5e: 0f b6 00 movzbl (%eax),%eax - 3d61: 84 c0 test %al,%al - 3d63: 75 e2 jne 3d47 - if(*s == c) - return (char*)s; - return 0; - 3d65: b8 00 00 00 00 mov $0x0,%eax -} - 3d6a: c9 leave - 3d6b: c3 ret - -00003d6c : - -char* -gets(char *buf, int max) -{ - 3d6c: 55 push %ebp - 3d6d: 89 e5 mov %esp,%ebp - 3d6f: 83 ec 18 sub $0x18,%esp - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - 3d72: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 3d79: eb 44 jmp 3dbf - cc = read(0, &c, 1); - 3d7b: 83 ec 04 sub $0x4,%esp - 3d7e: 6a 01 push $0x1 - 3d80: 8d 45 ef lea -0x11(%ebp),%eax - 3d83: 50 push %eax - 3d84: 6a 00 push $0x0 - 3d86: e8 46 01 00 00 call 3ed1 - 3d8b: 83 c4 10 add $0x10,%esp - 3d8e: 89 45 f0 mov %eax,-0x10(%ebp) - if(cc < 1) - 3d91: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 3d95: 7f 02 jg 3d99 - break; - 3d97: eb 31 jmp 3dca - buf[i++] = c; - 3d99: 8b 45 f4 mov -0xc(%ebp),%eax - 3d9c: 8d 50 01 lea 0x1(%eax),%edx - 3d9f: 89 55 f4 mov %edx,-0xc(%ebp) - 3da2: 89 c2 mov %eax,%edx - 3da4: 8b 45 08 mov 0x8(%ebp),%eax - 3da7: 01 c2 add %eax,%edx - 3da9: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 3dad: 88 02 mov %al,(%edx) - if(c == '\n' || c == '\r') - 3daf: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 3db3: 3c 0a cmp $0xa,%al - 3db5: 74 13 je 3dca - 3db7: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 3dbb: 3c 0d cmp $0xd,%al - 3dbd: 74 0b je 3dca -gets(char *buf, int max) -{ - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - 3dbf: 8b 45 f4 mov -0xc(%ebp),%eax - 3dc2: 83 c0 01 add $0x1,%eax - 3dc5: 3b 45 0c cmp 0xc(%ebp),%eax - 3dc8: 7c b1 jl 3d7b - break; - buf[i++] = c; - if(c == '\n' || c == '\r') - break; - } - buf[i] = '\0'; - 3dca: 8b 55 f4 mov -0xc(%ebp),%edx - 3dcd: 8b 45 08 mov 0x8(%ebp),%eax - 3dd0: 01 d0 add %edx,%eax - 3dd2: c6 00 00 movb $0x0,(%eax) - return buf; - 3dd5: 8b 45 08 mov 0x8(%ebp),%eax -} - 3dd8: c9 leave - 3dd9: c3 ret - -00003dda : - -int -stat(char *n, struct stat *st) -{ - 3dda: 55 push %ebp - 3ddb: 89 e5 mov %esp,%ebp - 3ddd: 83 ec 18 sub $0x18,%esp - int fd; - int r; - - fd = open(n, O_RDONLY); - 3de0: 83 ec 08 sub $0x8,%esp - 3de3: 6a 00 push $0x0 - 3de5: ff 75 08 pushl 0x8(%ebp) - 3de8: e8 0c 01 00 00 call 3ef9 - 3ded: 83 c4 10 add $0x10,%esp - 3df0: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd < 0) - 3df3: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 3df7: 79 07 jns 3e00 - return -1; - 3df9: b8 ff ff ff ff mov $0xffffffff,%eax - 3dfe: eb 25 jmp 3e25 - r = fstat(fd, st); - 3e00: 83 ec 08 sub $0x8,%esp - 3e03: ff 75 0c pushl 0xc(%ebp) - 3e06: ff 75 f4 pushl -0xc(%ebp) - 3e09: e8 03 01 00 00 call 3f11 - 3e0e: 83 c4 10 add $0x10,%esp - 3e11: 89 45 f0 mov %eax,-0x10(%ebp) - close(fd); - 3e14: 83 ec 0c sub $0xc,%esp - 3e17: ff 75 f4 pushl -0xc(%ebp) - 3e1a: e8 c2 00 00 00 call 3ee1 - 3e1f: 83 c4 10 add $0x10,%esp - return r; - 3e22: 8b 45 f0 mov -0x10(%ebp),%eax -} - 3e25: c9 leave - 3e26: c3 ret - -00003e27 : - -int -atoi(const char *s) -{ - 3e27: 55 push %ebp - 3e28: 89 e5 mov %esp,%ebp - 3e2a: 83 ec 10 sub $0x10,%esp - int n; - - n = 0; - 3e2d: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - while('0' <= *s && *s <= '9') - 3e34: eb 25 jmp 3e5b - n = n*10 + *s++ - '0'; - 3e36: 8b 55 fc mov -0x4(%ebp),%edx - 3e39: 89 d0 mov %edx,%eax - 3e3b: c1 e0 02 shl $0x2,%eax - 3e3e: 01 d0 add %edx,%eax - 3e40: 01 c0 add %eax,%eax - 3e42: 89 c1 mov %eax,%ecx - 3e44: 8b 45 08 mov 0x8(%ebp),%eax - 3e47: 8d 50 01 lea 0x1(%eax),%edx - 3e4a: 89 55 08 mov %edx,0x8(%ebp) - 3e4d: 0f b6 00 movzbl (%eax),%eax - 3e50: 0f be c0 movsbl %al,%eax - 3e53: 01 c8 add %ecx,%eax - 3e55: 83 e8 30 sub $0x30,%eax - 3e58: 89 45 fc mov %eax,-0x4(%ebp) -atoi(const char *s) -{ - int n; - - n = 0; - while('0' <= *s && *s <= '9') - 3e5b: 8b 45 08 mov 0x8(%ebp),%eax - 3e5e: 0f b6 00 movzbl (%eax),%eax - 3e61: 3c 2f cmp $0x2f,%al - 3e63: 7e 0a jle 3e6f - 3e65: 8b 45 08 mov 0x8(%ebp),%eax - 3e68: 0f b6 00 movzbl (%eax),%eax - 3e6b: 3c 39 cmp $0x39,%al - 3e6d: 7e c7 jle 3e36 - n = n*10 + *s++ - '0'; - return n; - 3e6f: 8b 45 fc mov -0x4(%ebp),%eax -} - 3e72: c9 leave - 3e73: c3 ret - -00003e74 : - -void* -memmove(void *vdst, void *vsrc, int n) -{ - 3e74: 55 push %ebp - 3e75: 89 e5 mov %esp,%ebp - 3e77: 83 ec 10 sub $0x10,%esp - char *dst, *src; - - dst = vdst; - 3e7a: 8b 45 08 mov 0x8(%ebp),%eax - 3e7d: 89 45 fc mov %eax,-0x4(%ebp) - src = vsrc; - 3e80: 8b 45 0c mov 0xc(%ebp),%eax - 3e83: 89 45 f8 mov %eax,-0x8(%ebp) - while(n-- > 0) - 3e86: eb 17 jmp 3e9f - *dst++ = *src++; - 3e88: 8b 45 fc mov -0x4(%ebp),%eax - 3e8b: 8d 50 01 lea 0x1(%eax),%edx - 3e8e: 89 55 fc mov %edx,-0x4(%ebp) - 3e91: 8b 55 f8 mov -0x8(%ebp),%edx - 3e94: 8d 4a 01 lea 0x1(%edx),%ecx - 3e97: 89 4d f8 mov %ecx,-0x8(%ebp) - 3e9a: 0f b6 12 movzbl (%edx),%edx - 3e9d: 88 10 mov %dl,(%eax) -{ - char *dst, *src; - - dst = vdst; - src = vsrc; - while(n-- > 0) - 3e9f: 8b 45 10 mov 0x10(%ebp),%eax - 3ea2: 8d 50 ff lea -0x1(%eax),%edx - 3ea5: 89 55 10 mov %edx,0x10(%ebp) - 3ea8: 85 c0 test %eax,%eax - 3eaa: 7f dc jg 3e88 - *dst++ = *src++; - return vdst; - 3eac: 8b 45 08 mov 0x8(%ebp),%eax -} - 3eaf: c9 leave - 3eb0: c3 ret - -00003eb1 : - name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 3eb1: b8 01 00 00 00 mov $0x1,%eax - 3eb6: cd 40 int $0x40 - 3eb8: c3 ret - -00003eb9 : -SYSCALL(exit) - 3eb9: b8 02 00 00 00 mov $0x2,%eax - 3ebe: cd 40 int $0x40 - 3ec0: c3 ret - -00003ec1 : -SYSCALL(wait) - 3ec1: b8 03 00 00 00 mov $0x3,%eax - 3ec6: cd 40 int $0x40 - 3ec8: c3 ret - -00003ec9 : -SYSCALL(pipe) - 3ec9: b8 04 00 00 00 mov $0x4,%eax - 3ece: cd 40 int $0x40 - 3ed0: c3 ret - -00003ed1 : -SYSCALL(read) - 3ed1: b8 05 00 00 00 mov $0x5,%eax - 3ed6: cd 40 int $0x40 - 3ed8: c3 ret - -00003ed9 : -SYSCALL(write) - 3ed9: b8 10 00 00 00 mov $0x10,%eax - 3ede: cd 40 int $0x40 - 3ee0: c3 ret - -00003ee1 : -SYSCALL(close) - 3ee1: b8 15 00 00 00 mov $0x15,%eax - 3ee6: cd 40 int $0x40 - 3ee8: c3 ret - -00003ee9 : -SYSCALL(kill) - 3ee9: b8 06 00 00 00 mov $0x6,%eax - 3eee: cd 40 int $0x40 - 3ef0: c3 ret - -00003ef1 : -SYSCALL(exec) - 3ef1: b8 07 00 00 00 mov $0x7,%eax - 3ef6: cd 40 int $0x40 - 3ef8: c3 ret - -00003ef9 : -SYSCALL(open) - 3ef9: b8 0f 00 00 00 mov $0xf,%eax - 3efe: cd 40 int $0x40 - 3f00: c3 ret - -00003f01 : -SYSCALL(mknod) - 3f01: b8 11 00 00 00 mov $0x11,%eax - 3f06: cd 40 int $0x40 - 3f08: c3 ret - -00003f09 : -SYSCALL(unlink) - 3f09: b8 12 00 00 00 mov $0x12,%eax - 3f0e: cd 40 int $0x40 - 3f10: c3 ret - -00003f11 : -SYSCALL(fstat) - 3f11: b8 08 00 00 00 mov $0x8,%eax - 3f16: cd 40 int $0x40 - 3f18: c3 ret - -00003f19 : -SYSCALL(link) - 3f19: b8 13 00 00 00 mov $0x13,%eax - 3f1e: cd 40 int $0x40 - 3f20: c3 ret - -00003f21 : -SYSCALL(mkdir) - 3f21: b8 14 00 00 00 mov $0x14,%eax - 3f26: cd 40 int $0x40 - 3f28: c3 ret - -00003f29 : -SYSCALL(chdir) - 3f29: b8 09 00 00 00 mov $0x9,%eax - 3f2e: cd 40 int $0x40 - 3f30: c3 ret - -00003f31 : -SYSCALL(dup) - 3f31: b8 0a 00 00 00 mov $0xa,%eax - 3f36: cd 40 int $0x40 - 3f38: c3 ret - -00003f39 : -SYSCALL(getpid) - 3f39: b8 0b 00 00 00 mov $0xb,%eax - 3f3e: cd 40 int $0x40 - 3f40: c3 ret - -00003f41 : -SYSCALL(sbrk) - 3f41: b8 0c 00 00 00 mov $0xc,%eax - 3f46: cd 40 int $0x40 - 3f48: c3 ret - -00003f49 : -SYSCALL(sleep) - 3f49: b8 0d 00 00 00 mov $0xd,%eax - 3f4e: cd 40 int $0x40 - 3f50: c3 ret - -00003f51 : -SYSCALL(uptime) - 3f51: b8 0e 00 00 00 mov $0xe,%eax - 3f56: cd 40 int $0x40 - 3f58: c3 ret - -00003f59 : -#include "stat.h" -#include "user.h" - -static void -putc(int fd, char c) -{ - 3f59: 55 push %ebp - 3f5a: 89 e5 mov %esp,%ebp - 3f5c: 83 ec 18 sub $0x18,%esp - 3f5f: 8b 45 0c mov 0xc(%ebp),%eax - 3f62: 88 45 f4 mov %al,-0xc(%ebp) - write(fd, &c, 1); - 3f65: 83 ec 04 sub $0x4,%esp - 3f68: 6a 01 push $0x1 - 3f6a: 8d 45 f4 lea -0xc(%ebp),%eax - 3f6d: 50 push %eax - 3f6e: ff 75 08 pushl 0x8(%ebp) - 3f71: e8 63 ff ff ff call 3ed9 - 3f76: 83 c4 10 add $0x10,%esp -} - 3f79: c9 leave - 3f7a: c3 ret - -00003f7b : - -static void -printint(int fd, int xx, int base, int sgn) -{ - 3f7b: 55 push %ebp - 3f7c: 89 e5 mov %esp,%ebp - 3f7e: 53 push %ebx - 3f7f: 83 ec 24 sub $0x24,%esp - static char digits[] = "0123456789ABCDEF"; - char buf[16]; - int i, neg; - uint x; - - neg = 0; - 3f82: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - if(sgn && xx < 0){ - 3f89: 83 7d 14 00 cmpl $0x0,0x14(%ebp) - 3f8d: 74 17 je 3fa6 - 3f8f: 83 7d 0c 00 cmpl $0x0,0xc(%ebp) - 3f93: 79 11 jns 3fa6 - neg = 1; - 3f95: c7 45 f0 01 00 00 00 movl $0x1,-0x10(%ebp) - x = -xx; - 3f9c: 8b 45 0c mov 0xc(%ebp),%eax - 3f9f: f7 d8 neg %eax - 3fa1: 89 45 ec mov %eax,-0x14(%ebp) - 3fa4: eb 06 jmp 3fac - } else { - x = xx; - 3fa6: 8b 45 0c mov 0xc(%ebp),%eax - 3fa9: 89 45 ec mov %eax,-0x14(%ebp) - } - - i = 0; - 3fac: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - do{ - buf[i++] = digits[x % base]; - 3fb3: 8b 4d f4 mov -0xc(%ebp),%ecx - 3fb6: 8d 41 01 lea 0x1(%ecx),%eax - 3fb9: 89 45 f4 mov %eax,-0xc(%ebp) - 3fbc: 8b 5d 10 mov 0x10(%ebp),%ebx - 3fbf: 8b 45 ec mov -0x14(%ebp),%eax - 3fc2: ba 00 00 00 00 mov $0x0,%edx - 3fc7: f7 f3 div %ebx - 3fc9: 89 d0 mov %edx,%eax - 3fcb: 0f b6 80 a8 62 00 00 movzbl 0x62a8(%eax),%eax - 3fd2: 88 44 0d dc mov %al,-0x24(%ebp,%ecx,1) - }while((x /= base) != 0); - 3fd6: 8b 5d 10 mov 0x10(%ebp),%ebx - 3fd9: 8b 45 ec mov -0x14(%ebp),%eax - 3fdc: ba 00 00 00 00 mov $0x0,%edx - 3fe1: f7 f3 div %ebx - 3fe3: 89 45 ec mov %eax,-0x14(%ebp) - 3fe6: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 3fea: 75 c7 jne 3fb3 - if(neg) - 3fec: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 3ff0: 74 0e je 4000 - buf[i++] = '-'; - 3ff2: 8b 45 f4 mov -0xc(%ebp),%eax - 3ff5: 8d 50 01 lea 0x1(%eax),%edx - 3ff8: 89 55 f4 mov %edx,-0xc(%ebp) - 3ffb: c6 44 05 dc 2d movb $0x2d,-0x24(%ebp,%eax,1) - - while(--i >= 0) - 4000: eb 1d jmp 401f - putc(fd, buf[i]); - 4002: 8d 55 dc lea -0x24(%ebp),%edx - 4005: 8b 45 f4 mov -0xc(%ebp),%eax - 4008: 01 d0 add %edx,%eax - 400a: 0f b6 00 movzbl (%eax),%eax - 400d: 0f be c0 movsbl %al,%eax - 4010: 83 ec 08 sub $0x8,%esp - 4013: 50 push %eax - 4014: ff 75 08 pushl 0x8(%ebp) - 4017: e8 3d ff ff ff call 3f59 - 401c: 83 c4 10 add $0x10,%esp - buf[i++] = digits[x % base]; - }while((x /= base) != 0); - if(neg) - buf[i++] = '-'; - - while(--i >= 0) - 401f: 83 6d f4 01 subl $0x1,-0xc(%ebp) - 4023: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 4027: 79 d9 jns 4002 - putc(fd, buf[i]); -} - 4029: 8b 5d fc mov -0x4(%ebp),%ebx - 402c: c9 leave - 402d: c3 ret - -0000402e : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void -printf(int fd, char *fmt, ...) -{ - 402e: 55 push %ebp - 402f: 89 e5 mov %esp,%ebp - 4031: 83 ec 28 sub $0x28,%esp - char *s; - int c, i, state; - uint *ap; - - state = 0; - 4034: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - ap = (uint*)(void*)&fmt + 1; - 403b: 8d 45 0c lea 0xc(%ebp),%eax - 403e: 83 c0 04 add $0x4,%eax - 4041: 89 45 e8 mov %eax,-0x18(%ebp) - for(i = 0; fmt[i]; i++){ - 4044: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - 404b: e9 59 01 00 00 jmp 41a9 - c = fmt[i] & 0xff; - 4050: 8b 55 0c mov 0xc(%ebp),%edx - 4053: 8b 45 f0 mov -0x10(%ebp),%eax - 4056: 01 d0 add %edx,%eax - 4058: 0f b6 00 movzbl (%eax),%eax - 405b: 0f be c0 movsbl %al,%eax - 405e: 25 ff 00 00 00 and $0xff,%eax - 4063: 89 45 e4 mov %eax,-0x1c(%ebp) - if(state == 0){ - 4066: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 406a: 75 2c jne 4098 - if(c == '%'){ - 406c: 83 7d e4 25 cmpl $0x25,-0x1c(%ebp) - 4070: 75 0c jne 407e - state = '%'; - 4072: c7 45 ec 25 00 00 00 movl $0x25,-0x14(%ebp) - 4079: e9 27 01 00 00 jmp 41a5 - } else { - putc(fd, c); - 407e: 8b 45 e4 mov -0x1c(%ebp),%eax - 4081: 0f be c0 movsbl %al,%eax - 4084: 83 ec 08 sub $0x8,%esp - 4087: 50 push %eax - 4088: ff 75 08 pushl 0x8(%ebp) - 408b: e8 c9 fe ff ff call 3f59 - 4090: 83 c4 10 add $0x10,%esp - 4093: e9 0d 01 00 00 jmp 41a5 - } - } else if(state == '%'){ - 4098: 83 7d ec 25 cmpl $0x25,-0x14(%ebp) - 409c: 0f 85 03 01 00 00 jne 41a5 - if(c == 'd'){ - 40a2: 83 7d e4 64 cmpl $0x64,-0x1c(%ebp) - 40a6: 75 1e jne 40c6 - printint(fd, *ap, 10, 1); - 40a8: 8b 45 e8 mov -0x18(%ebp),%eax - 40ab: 8b 00 mov (%eax),%eax - 40ad: 6a 01 push $0x1 - 40af: 6a 0a push $0xa - 40b1: 50 push %eax - 40b2: ff 75 08 pushl 0x8(%ebp) - 40b5: e8 c1 fe ff ff call 3f7b - 40ba: 83 c4 10 add $0x10,%esp - ap++; - 40bd: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 40c1: e9 d8 00 00 00 jmp 419e - } else if(c == 'x' || c == 'p'){ - 40c6: 83 7d e4 78 cmpl $0x78,-0x1c(%ebp) - 40ca: 74 06 je 40d2 - 40cc: 83 7d e4 70 cmpl $0x70,-0x1c(%ebp) - 40d0: 75 1e jne 40f0 - printint(fd, *ap, 16, 0); - 40d2: 8b 45 e8 mov -0x18(%ebp),%eax - 40d5: 8b 00 mov (%eax),%eax - 40d7: 6a 00 push $0x0 - 40d9: 6a 10 push $0x10 - 40db: 50 push %eax - 40dc: ff 75 08 pushl 0x8(%ebp) - 40df: e8 97 fe ff ff call 3f7b - 40e4: 83 c4 10 add $0x10,%esp - ap++; - 40e7: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 40eb: e9 ae 00 00 00 jmp 419e - } else if(c == 's'){ - 40f0: 83 7d e4 73 cmpl $0x73,-0x1c(%ebp) - 40f4: 75 43 jne 4139 - s = (char*)*ap; - 40f6: 8b 45 e8 mov -0x18(%ebp),%eax - 40f9: 8b 00 mov (%eax),%eax - 40fb: 89 45 f4 mov %eax,-0xc(%ebp) - ap++; - 40fe: 83 45 e8 04 addl $0x4,-0x18(%ebp) - if(s == 0) - 4102: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 4106: 75 07 jne 410f - s = "(null)"; - 4108: c7 45 f4 ae 5b 00 00 movl $0x5bae,-0xc(%ebp) - while(*s != 0){ - 410f: eb 1c jmp 412d - putc(fd, *s); - 4111: 8b 45 f4 mov -0xc(%ebp),%eax - 4114: 0f b6 00 movzbl (%eax),%eax - 4117: 0f be c0 movsbl %al,%eax - 411a: 83 ec 08 sub $0x8,%esp - 411d: 50 push %eax - 411e: ff 75 08 pushl 0x8(%ebp) - 4121: e8 33 fe ff ff call 3f59 - 4126: 83 c4 10 add $0x10,%esp - s++; - 4129: 83 45 f4 01 addl $0x1,-0xc(%ebp) - } else if(c == 's'){ - s = (char*)*ap; - ap++; - if(s == 0) - s = "(null)"; - while(*s != 0){ - 412d: 8b 45 f4 mov -0xc(%ebp),%eax - 4130: 0f b6 00 movzbl (%eax),%eax - 4133: 84 c0 test %al,%al - 4135: 75 da jne 4111 - 4137: eb 65 jmp 419e - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 4139: 83 7d e4 63 cmpl $0x63,-0x1c(%ebp) - 413d: 75 1d jne 415c - putc(fd, *ap); - 413f: 8b 45 e8 mov -0x18(%ebp),%eax - 4142: 8b 00 mov (%eax),%eax - 4144: 0f be c0 movsbl %al,%eax - 4147: 83 ec 08 sub $0x8,%esp - 414a: 50 push %eax - 414b: ff 75 08 pushl 0x8(%ebp) - 414e: e8 06 fe ff ff call 3f59 - 4153: 83 c4 10 add $0x10,%esp - ap++; - 4156: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 415a: eb 42 jmp 419e - } else if(c == '%'){ - 415c: 83 7d e4 25 cmpl $0x25,-0x1c(%ebp) - 4160: 75 17 jne 4179 - putc(fd, c); - 4162: 8b 45 e4 mov -0x1c(%ebp),%eax - 4165: 0f be c0 movsbl %al,%eax - 4168: 83 ec 08 sub $0x8,%esp - 416b: 50 push %eax - 416c: ff 75 08 pushl 0x8(%ebp) - 416f: e8 e5 fd ff ff call 3f59 - 4174: 83 c4 10 add $0x10,%esp - 4177: eb 25 jmp 419e - } else { - // Unknown % sequence. Print it to draw attention. - putc(fd, '%'); - 4179: 83 ec 08 sub $0x8,%esp - 417c: 6a 25 push $0x25 - 417e: ff 75 08 pushl 0x8(%ebp) - 4181: e8 d3 fd ff ff call 3f59 - 4186: 83 c4 10 add $0x10,%esp - putc(fd, c); - 4189: 8b 45 e4 mov -0x1c(%ebp),%eax - 418c: 0f be c0 movsbl %al,%eax - 418f: 83 ec 08 sub $0x8,%esp - 4192: 50 push %eax - 4193: ff 75 08 pushl 0x8(%ebp) - 4196: e8 be fd ff ff call 3f59 - 419b: 83 c4 10 add $0x10,%esp - } - state = 0; - 419e: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for(i = 0; fmt[i]; i++){ - 41a5: 83 45 f0 01 addl $0x1,-0x10(%ebp) - 41a9: 8b 55 0c mov 0xc(%ebp),%edx - 41ac: 8b 45 f0 mov -0x10(%ebp),%eax - 41af: 01 d0 add %edx,%eax - 41b1: 0f b6 00 movzbl (%eax),%eax - 41b4: 84 c0 test %al,%al - 41b6: 0f 85 94 fe ff ff jne 4050 - putc(fd, c); - } - state = 0; - } - } -} - 41bc: c9 leave - 41bd: c3 ret - -000041be : -static Header base; -static Header *freep; - -void -free(void *ap) -{ - 41be: 55 push %ebp - 41bf: 89 e5 mov %esp,%ebp - 41c1: 83 ec 10 sub $0x10,%esp - Header *bp, *p; - - bp = (Header*)ap - 1; - 41c4: 8b 45 08 mov 0x8(%ebp),%eax - 41c7: 83 e8 08 sub $0x8,%eax - 41ca: 89 45 f8 mov %eax,-0x8(%ebp) - for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 41cd: a1 48 63 00 00 mov 0x6348,%eax - 41d2: 89 45 fc mov %eax,-0x4(%ebp) - 41d5: eb 24 jmp 41fb - if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 41d7: 8b 45 fc mov -0x4(%ebp),%eax - 41da: 8b 00 mov (%eax),%eax - 41dc: 3b 45 fc cmp -0x4(%ebp),%eax - 41df: 77 12 ja 41f3 - 41e1: 8b 45 f8 mov -0x8(%ebp),%eax - 41e4: 3b 45 fc cmp -0x4(%ebp),%eax - 41e7: 77 24 ja 420d - 41e9: 8b 45 fc mov -0x4(%ebp),%eax - 41ec: 8b 00 mov (%eax),%eax - 41ee: 3b 45 f8 cmp -0x8(%ebp),%eax - 41f1: 77 1a ja 420d -free(void *ap) -{ - Header *bp, *p; - - bp = (Header*)ap - 1; - for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 41f3: 8b 45 fc mov -0x4(%ebp),%eax - 41f6: 8b 00 mov (%eax),%eax - 41f8: 89 45 fc mov %eax,-0x4(%ebp) - 41fb: 8b 45 f8 mov -0x8(%ebp),%eax - 41fe: 3b 45 fc cmp -0x4(%ebp),%eax - 4201: 76 d4 jbe 41d7 - 4203: 8b 45 fc mov -0x4(%ebp),%eax - 4206: 8b 00 mov (%eax),%eax - 4208: 3b 45 f8 cmp -0x8(%ebp),%eax - 420b: 76 ca jbe 41d7 - if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - break; - if(bp + bp->s.size == p->s.ptr){ - 420d: 8b 45 f8 mov -0x8(%ebp),%eax - 4210: 8b 40 04 mov 0x4(%eax),%eax - 4213: 8d 14 c5 00 00 00 00 lea 0x0(,%eax,8),%edx - 421a: 8b 45 f8 mov -0x8(%ebp),%eax - 421d: 01 c2 add %eax,%edx - 421f: 8b 45 fc mov -0x4(%ebp),%eax - 4222: 8b 00 mov (%eax),%eax - 4224: 39 c2 cmp %eax,%edx - 4226: 75 24 jne 424c - bp->s.size += p->s.ptr->s.size; - 4228: 8b 45 f8 mov -0x8(%ebp),%eax - 422b: 8b 50 04 mov 0x4(%eax),%edx - 422e: 8b 45 fc mov -0x4(%ebp),%eax - 4231: 8b 00 mov (%eax),%eax - 4233: 8b 40 04 mov 0x4(%eax),%eax - 4236: 01 c2 add %eax,%edx - 4238: 8b 45 f8 mov -0x8(%ebp),%eax - 423b: 89 50 04 mov %edx,0x4(%eax) - bp->s.ptr = p->s.ptr->s.ptr; - 423e: 8b 45 fc mov -0x4(%ebp),%eax - 4241: 8b 00 mov (%eax),%eax - 4243: 8b 10 mov (%eax),%edx - 4245: 8b 45 f8 mov -0x8(%ebp),%eax - 4248: 89 10 mov %edx,(%eax) - 424a: eb 0a jmp 4256 - } else - bp->s.ptr = p->s.ptr; - 424c: 8b 45 fc mov -0x4(%ebp),%eax - 424f: 8b 10 mov (%eax),%edx - 4251: 8b 45 f8 mov -0x8(%ebp),%eax - 4254: 89 10 mov %edx,(%eax) - if(p + p->s.size == bp){ - 4256: 8b 45 fc mov -0x4(%ebp),%eax - 4259: 8b 40 04 mov 0x4(%eax),%eax - 425c: 8d 14 c5 00 00 00 00 lea 0x0(,%eax,8),%edx - 4263: 8b 45 fc mov -0x4(%ebp),%eax - 4266: 01 d0 add %edx,%eax - 4268: 3b 45 f8 cmp -0x8(%ebp),%eax - 426b: 75 20 jne 428d - p->s.size += bp->s.size; - 426d: 8b 45 fc mov -0x4(%ebp),%eax - 4270: 8b 50 04 mov 0x4(%eax),%edx - 4273: 8b 45 f8 mov -0x8(%ebp),%eax - 4276: 8b 40 04 mov 0x4(%eax),%eax - 4279: 01 c2 add %eax,%edx - 427b: 8b 45 fc mov -0x4(%ebp),%eax - 427e: 89 50 04 mov %edx,0x4(%eax) - p->s.ptr = bp->s.ptr; - 4281: 8b 45 f8 mov -0x8(%ebp),%eax - 4284: 8b 10 mov (%eax),%edx - 4286: 8b 45 fc mov -0x4(%ebp),%eax - 4289: 89 10 mov %edx,(%eax) - 428b: eb 08 jmp 4295 - } else - p->s.ptr = bp; - 428d: 8b 45 fc mov -0x4(%ebp),%eax - 4290: 8b 55 f8 mov -0x8(%ebp),%edx - 4293: 89 10 mov %edx,(%eax) - freep = p; - 4295: 8b 45 fc mov -0x4(%ebp),%eax - 4298: a3 48 63 00 00 mov %eax,0x6348 -} - 429d: c9 leave - 429e: c3 ret - -0000429f : - -static Header* -morecore(uint nu) -{ - 429f: 55 push %ebp - 42a0: 89 e5 mov %esp,%ebp - 42a2: 83 ec 18 sub $0x18,%esp - char *p; - Header *hp; - - if(nu < 4096) - 42a5: 81 7d 08 ff 0f 00 00 cmpl $0xfff,0x8(%ebp) - 42ac: 77 07 ja 42b5 - nu = 4096; - 42ae: c7 45 08 00 10 00 00 movl $0x1000,0x8(%ebp) - p = sbrk(nu * sizeof(Header)); - 42b5: 8b 45 08 mov 0x8(%ebp),%eax - 42b8: c1 e0 03 shl $0x3,%eax - 42bb: 83 ec 0c sub $0xc,%esp - 42be: 50 push %eax - 42bf: e8 7d fc ff ff call 3f41 - 42c4: 83 c4 10 add $0x10,%esp - 42c7: 89 45 f4 mov %eax,-0xc(%ebp) - if(p == (char*)-1) - 42ca: 83 7d f4 ff cmpl $0xffffffff,-0xc(%ebp) - 42ce: 75 07 jne 42d7 - return 0; - 42d0: b8 00 00 00 00 mov $0x0,%eax - 42d5: eb 26 jmp 42fd - hp = (Header*)p; - 42d7: 8b 45 f4 mov -0xc(%ebp),%eax - 42da: 89 45 f0 mov %eax,-0x10(%ebp) - hp->s.size = nu; - 42dd: 8b 45 f0 mov -0x10(%ebp),%eax - 42e0: 8b 55 08 mov 0x8(%ebp),%edx - 42e3: 89 50 04 mov %edx,0x4(%eax) - free((void*)(hp + 1)); - 42e6: 8b 45 f0 mov -0x10(%ebp),%eax - 42e9: 83 c0 08 add $0x8,%eax - 42ec: 83 ec 0c sub $0xc,%esp - 42ef: 50 push %eax - 42f0: e8 c9 fe ff ff call 41be - 42f5: 83 c4 10 add $0x10,%esp - return freep; - 42f8: a1 48 63 00 00 mov 0x6348,%eax -} - 42fd: c9 leave - 42fe: c3 ret - -000042ff : - -void* -malloc(uint nbytes) -{ - 42ff: 55 push %ebp - 4300: 89 e5 mov %esp,%ebp - 4302: 83 ec 18 sub $0x18,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 4305: 8b 45 08 mov 0x8(%ebp),%eax - 4308: 83 c0 07 add $0x7,%eax - 430b: c1 e8 03 shr $0x3,%eax - 430e: 83 c0 01 add $0x1,%eax - 4311: 89 45 ec mov %eax,-0x14(%ebp) - if((prevp = freep) == 0){ - 4314: a1 48 63 00 00 mov 0x6348,%eax - 4319: 89 45 f0 mov %eax,-0x10(%ebp) - 431c: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 4320: 75 23 jne 4345 - base.s.ptr = freep = prevp = &base; - 4322: c7 45 f0 40 63 00 00 movl $0x6340,-0x10(%ebp) - 4329: 8b 45 f0 mov -0x10(%ebp),%eax - 432c: a3 48 63 00 00 mov %eax,0x6348 - 4331: a1 48 63 00 00 mov 0x6348,%eax - 4336: a3 40 63 00 00 mov %eax,0x6340 - base.s.size = 0; - 433b: c7 05 44 63 00 00 00 movl $0x0,0x6344 - 4342: 00 00 00 - } - for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 4345: 8b 45 f0 mov -0x10(%ebp),%eax - 4348: 8b 00 mov (%eax),%eax - 434a: 89 45 f4 mov %eax,-0xc(%ebp) - if(p->s.size >= nunits){ - 434d: 8b 45 f4 mov -0xc(%ebp),%eax - 4350: 8b 40 04 mov 0x4(%eax),%eax - 4353: 3b 45 ec cmp -0x14(%ebp),%eax - 4356: 72 4d jb 43a5 - if(p->s.size == nunits) - 4358: 8b 45 f4 mov -0xc(%ebp),%eax - 435b: 8b 40 04 mov 0x4(%eax),%eax - 435e: 3b 45 ec cmp -0x14(%ebp),%eax - 4361: 75 0c jne 436f - prevp->s.ptr = p->s.ptr; - 4363: 8b 45 f4 mov -0xc(%ebp),%eax - 4366: 8b 10 mov (%eax),%edx - 4368: 8b 45 f0 mov -0x10(%ebp),%eax - 436b: 89 10 mov %edx,(%eax) - 436d: eb 26 jmp 4395 - else { - p->s.size -= nunits; - 436f: 8b 45 f4 mov -0xc(%ebp),%eax - 4372: 8b 40 04 mov 0x4(%eax),%eax - 4375: 2b 45 ec sub -0x14(%ebp),%eax - 4378: 89 c2 mov %eax,%edx - 437a: 8b 45 f4 mov -0xc(%ebp),%eax - 437d: 89 50 04 mov %edx,0x4(%eax) - p += p->s.size; - 4380: 8b 45 f4 mov -0xc(%ebp),%eax - 4383: 8b 40 04 mov 0x4(%eax),%eax - 4386: c1 e0 03 shl $0x3,%eax - 4389: 01 45 f4 add %eax,-0xc(%ebp) - p->s.size = nunits; - 438c: 8b 45 f4 mov -0xc(%ebp),%eax - 438f: 8b 55 ec mov -0x14(%ebp),%edx - 4392: 89 50 04 mov %edx,0x4(%eax) - } - freep = prevp; - 4395: 8b 45 f0 mov -0x10(%ebp),%eax - 4398: a3 48 63 00 00 mov %eax,0x6348 - return (void*)(p + 1); - 439d: 8b 45 f4 mov -0xc(%ebp),%eax - 43a0: 83 c0 08 add $0x8,%eax - 43a3: eb 3b jmp 43e0 - } - if(p == freep) - 43a5: a1 48 63 00 00 mov 0x6348,%eax - 43aa: 39 45 f4 cmp %eax,-0xc(%ebp) - 43ad: 75 1e jne 43cd - if((p = morecore(nunits)) == 0) - 43af: 83 ec 0c sub $0xc,%esp - 43b2: ff 75 ec pushl -0x14(%ebp) - 43b5: e8 e5 fe ff ff call 429f - 43ba: 83 c4 10 add $0x10,%esp - 43bd: 89 45 f4 mov %eax,-0xc(%ebp) - 43c0: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 43c4: 75 07 jne 43cd - return 0; - 43c6: b8 00 00 00 00 mov $0x0,%eax - 43cb: eb 13 jmp 43e0 - nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - if((prevp = freep) == 0){ - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 43cd: 8b 45 f4 mov -0xc(%ebp),%eax - 43d0: 89 45 f0 mov %eax,-0x10(%ebp) - 43d3: 8b 45 f4 mov -0xc(%ebp),%eax - 43d6: 8b 00 mov (%eax),%eax - 43d8: 89 45 f4 mov %eax,-0xc(%ebp) - return (void*)(p + 1); - } - if(p == freep) - if((p = morecore(nunits)) == 0) - return 0; - } - 43db: e9 6d ff ff ff jmp 434d -} - 43e0: c9 leave - 43e1: c3 ret diff --git a/xv6-public/usertests.d b/xv6-public/usertests.d deleted file mode 100755 index a4933d3..0000000 --- a/xv6-public/usertests.d +++ /dev/null @@ -1,2 +0,0 @@ -usertests.o: usertests.c /usr/include/stdc-predef.h param.h types.h \ - stat.h user.h fs.h fcntl.h syscall.h traps.h memlayout.h diff --git a/xv6-public/usertests.o b/xv6-public/usertests.o deleted file mode 100755 index f2296ee3c3e6ac6ccc542db05bc0290cd8396cdf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69192 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 z 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 diff --git a/xv6-public/vectors.o b/xv6-public/vectors.o deleted file mode 100755 index 4f2becaae69707fcbc15ea902fb77d087a7c51b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16332 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 G?f(Xtzzzoh diff --git a/xv6-public/vm.d b/xv6-public/vm.d deleted file mode 100755 index 51631b1..0000000 --- a/xv6-public/vm.d +++ /dev/null @@ -1,2 +0,0 @@ -vm.o: vm.c /usr/include/stdc-predef.h param.h types.h defs.h x86.h \ - memlayout.h mmu.h proc.h elf.h diff --git a/xv6-public/vm.o b/xv6-public/vm.o deleted file mode 100755 index fd47688111701ec0158e5f090226b21f5a43a34f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19796 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: - -char buf[512]; - -void -wc(int fd, char *name) -{ - 0: 55 push %ebp - 1: 89 e5 mov %esp,%ebp - 3: 83 ec 28 sub $0x28,%esp - int i, n; - int l, w, c, inword; - - l = w = c = 0; - 6: c7 45 e8 00 00 00 00 movl $0x0,-0x18(%ebp) - d: 8b 45 e8 mov -0x18(%ebp),%eax - 10: 89 45 ec mov %eax,-0x14(%ebp) - 13: 8b 45 ec mov -0x14(%ebp),%eax - 16: 89 45 f0 mov %eax,-0x10(%ebp) - inword = 0; - 19: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) - while((n = read(fd, buf, sizeof(buf))) > 0){ - 20: eb 69 jmp 8b - for(i=0; i - c++; - 2b: 83 45 e8 01 addl $0x1,-0x18(%ebp) - if(buf[i] == '\n') - 2f: 8b 45 f4 mov -0xc(%ebp),%eax - 32: 05 40 0c 00 00 add $0xc40,%eax - 37: 0f b6 00 movzbl (%eax),%eax - 3a: 3c 0a cmp $0xa,%al - 3c: 75 04 jne 42 - l++; - 3e: 83 45 f0 01 addl $0x1,-0x10(%ebp) - if(strchr(" \r\t\n\v", buf[i])) - 42: 8b 45 f4 mov -0xc(%ebp),%eax - 45: 05 40 0c 00 00 add $0xc40,%eax - 4a: 0f b6 00 movzbl (%eax),%eax - 4d: 0f be c0 movsbl %al,%eax - 50: 83 ec 08 sub $0x8,%esp - 53: 50 push %eax - 54: 68 3a 09 00 00 push $0x93a - 59: e8 33 02 00 00 call 291 - 5e: 83 c4 10 add $0x10,%esp - 61: 85 c0 test %eax,%eax - 63: 74 09 je 6e - inword = 0; - 65: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) - 6c: eb 11 jmp 7f - else if(!inword){ - 6e: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp) - 72: 75 0b jne 7f - w++; - 74: 83 45 ec 01 addl $0x1,-0x14(%ebp) - inword = 1; - 78: c7 45 e4 01 00 00 00 movl $0x1,-0x1c(%ebp) - int l, w, c, inword; - - l = w = c = 0; - inword = 0; - while((n = read(fd, buf, sizeof(buf))) > 0){ - for(i=0; i - int i, n; - int l, w, c, inword; - - l = w = c = 0; - inword = 0; - while((n = read(fd, buf, sizeof(buf))) > 0){ - 8b: 83 ec 04 sub $0x4,%esp - 8e: 68 00 02 00 00 push $0x200 - 93: 68 40 0c 00 00 push $0xc40 - 98: ff 75 08 pushl 0x8(%ebp) - 9b: e8 89 03 00 00 call 429 - a0: 83 c4 10 add $0x10,%esp - a3: 89 45 e0 mov %eax,-0x20(%ebp) - a6: 83 7d e0 00 cmpl $0x0,-0x20(%ebp) - aa: 0f 8f 72 ff ff ff jg 22 - w++; - inword = 1; - } - } - } - if(n < 0){ - b0: 83 7d e0 00 cmpl $0x0,-0x20(%ebp) - b4: 79 17 jns cd - printf(1, "wc: read error\n"); - b6: 83 ec 08 sub $0x8,%esp - b9: 68 40 09 00 00 push $0x940 - be: 6a 01 push $0x1 - c0: e8 c1 04 00 00 call 586 - c5: 83 c4 10 add $0x10,%esp - exit(); - c8: e8 44 03 00 00 call 411 - } - printf(1, "%d %d %d %s\n", l, w, c, name); - cd: 83 ec 08 sub $0x8,%esp - d0: ff 75 0c pushl 0xc(%ebp) - d3: ff 75 e8 pushl -0x18(%ebp) - d6: ff 75 ec pushl -0x14(%ebp) - d9: ff 75 f0 pushl -0x10(%ebp) - dc: 68 50 09 00 00 push $0x950 - e1: 6a 01 push $0x1 - e3: e8 9e 04 00 00 call 586 - e8: 83 c4 20 add $0x20,%esp -} - eb: c9 leave - ec: c3 ret - -000000ed
: - -int -main(int argc, char *argv[]) -{ - ed: 8d 4c 24 04 lea 0x4(%esp),%ecx - f1: 83 e4 f0 and $0xfffffff0,%esp - f4: ff 71 fc pushl -0x4(%ecx) - f7: 55 push %ebp - f8: 89 e5 mov %esp,%ebp - fa: 53 push %ebx - fb: 51 push %ecx - fc: 83 ec 10 sub $0x10,%esp - ff: 89 cb mov %ecx,%ebx - int fd, i; - - if(argc <= 1){ - 101: 83 3b 01 cmpl $0x1,(%ebx) - 104: 7f 17 jg 11d - wc(0, ""); - 106: 83 ec 08 sub $0x8,%esp - 109: 68 5d 09 00 00 push $0x95d - 10e: 6a 00 push $0x0 - 110: e8 eb fe ff ff call 0 - 115: 83 c4 10 add $0x10,%esp - exit(); - 118: e8 f4 02 00 00 call 411 - } - - for(i = 1; i < argc; i++){ - 11d: c7 45 f4 01 00 00 00 movl $0x1,-0xc(%ebp) - 124: e9 83 00 00 00 jmp 1ac - if((fd = open(argv[i], 0)) < 0){ - 129: 8b 45 f4 mov -0xc(%ebp),%eax - 12c: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx - 133: 8b 43 04 mov 0x4(%ebx),%eax - 136: 01 d0 add %edx,%eax - 138: 8b 00 mov (%eax),%eax - 13a: 83 ec 08 sub $0x8,%esp - 13d: 6a 00 push $0x0 - 13f: 50 push %eax - 140: e8 0c 03 00 00 call 451 - 145: 83 c4 10 add $0x10,%esp - 148: 89 45 f0 mov %eax,-0x10(%ebp) - 14b: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 14f: 79 29 jns 17a - printf(1, "wc: cannot open %s\n", argv[i]); - 151: 8b 45 f4 mov -0xc(%ebp),%eax - 154: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx - 15b: 8b 43 04 mov 0x4(%ebx),%eax - 15e: 01 d0 add %edx,%eax - 160: 8b 00 mov (%eax),%eax - 162: 83 ec 04 sub $0x4,%esp - 165: 50 push %eax - 166: 68 5e 09 00 00 push $0x95e - 16b: 6a 01 push $0x1 - 16d: e8 14 04 00 00 call 586 - 172: 83 c4 10 add $0x10,%esp - exit(); - 175: e8 97 02 00 00 call 411 - } - wc(fd, argv[i]); - 17a: 8b 45 f4 mov -0xc(%ebp),%eax - 17d: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx - 184: 8b 43 04 mov 0x4(%ebx),%eax - 187: 01 d0 add %edx,%eax - 189: 8b 00 mov (%eax),%eax - 18b: 83 ec 08 sub $0x8,%esp - 18e: 50 push %eax - 18f: ff 75 f0 pushl -0x10(%ebp) - 192: e8 69 fe ff ff call 0 - 197: 83 c4 10 add $0x10,%esp - close(fd); - 19a: 83 ec 0c sub $0xc,%esp - 19d: ff 75 f0 pushl -0x10(%ebp) - 1a0: e8 94 02 00 00 call 439 - 1a5: 83 c4 10 add $0x10,%esp - if(argc <= 1){ - wc(0, ""); - exit(); - } - - for(i = 1; i < argc; i++){ - 1a8: 83 45 f4 01 addl $0x1,-0xc(%ebp) - 1ac: 8b 45 f4 mov -0xc(%ebp),%eax - 1af: 3b 03 cmp (%ebx),%eax - 1b1: 0f 8c 72 ff ff ff jl 129 - exit(); - } - wc(fd, argv[i]); - close(fd); - } - exit(); - 1b7: e8 55 02 00 00 call 411 - -000001bc : - "cc"); -} - -static inline void -stosb(void *addr, int data, int cnt) -{ - 1bc: 55 push %ebp - 1bd: 89 e5 mov %esp,%ebp - 1bf: 57 push %edi - 1c0: 53 push %ebx - asm volatile("cld; rep stosb" : - 1c1: 8b 4d 08 mov 0x8(%ebp),%ecx - 1c4: 8b 55 10 mov 0x10(%ebp),%edx - 1c7: 8b 45 0c mov 0xc(%ebp),%eax - 1ca: 89 cb mov %ecx,%ebx - 1cc: 89 df mov %ebx,%edi - 1ce: 89 d1 mov %edx,%ecx - 1d0: fc cld - 1d1: f3 aa rep stos %al,%es:(%edi) - 1d3: 89 ca mov %ecx,%edx - 1d5: 89 fb mov %edi,%ebx - 1d7: 89 5d 08 mov %ebx,0x8(%ebp) - 1da: 89 55 10 mov %edx,0x10(%ebp) - "=D" (addr), "=c" (cnt) : - "0" (addr), "1" (cnt), "a" (data) : - "memory", "cc"); -} - 1dd: 5b pop %ebx - 1de: 5f pop %edi - 1df: 5d pop %ebp - 1e0: c3 ret - -000001e1 : -#include "user.h" -#include "x86.h" - -char* -strcpy(char *s, char *t) -{ - 1e1: 55 push %ebp - 1e2: 89 e5 mov %esp,%ebp - 1e4: 83 ec 10 sub $0x10,%esp - char *os; - - os = s; - 1e7: 8b 45 08 mov 0x8(%ebp),%eax - 1ea: 89 45 fc mov %eax,-0x4(%ebp) - while((*s++ = *t++) != 0) - 1ed: 90 nop - 1ee: 8b 45 08 mov 0x8(%ebp),%eax - 1f1: 8d 50 01 lea 0x1(%eax),%edx - 1f4: 89 55 08 mov %edx,0x8(%ebp) - 1f7: 8b 55 0c mov 0xc(%ebp),%edx - 1fa: 8d 4a 01 lea 0x1(%edx),%ecx - 1fd: 89 4d 0c mov %ecx,0xc(%ebp) - 200: 0f b6 12 movzbl (%edx),%edx - 203: 88 10 mov %dl,(%eax) - 205: 0f b6 00 movzbl (%eax),%eax - 208: 84 c0 test %al,%al - 20a: 75 e2 jne 1ee - ; - return os; - 20c: 8b 45 fc mov -0x4(%ebp),%eax -} - 20f: c9 leave - 210: c3 ret - -00000211 : - -int -strcmp(const char *p, const char *q) -{ - 211: 55 push %ebp - 212: 89 e5 mov %esp,%ebp - while(*p && *p == *q) - 214: eb 08 jmp 21e - p++, q++; - 216: 83 45 08 01 addl $0x1,0x8(%ebp) - 21a: 83 45 0c 01 addl $0x1,0xc(%ebp) -} - -int -strcmp(const char *p, const char *q) -{ - while(*p && *p == *q) - 21e: 8b 45 08 mov 0x8(%ebp),%eax - 221: 0f b6 00 movzbl (%eax),%eax - 224: 84 c0 test %al,%al - 226: 74 10 je 238 - 228: 8b 45 08 mov 0x8(%ebp),%eax - 22b: 0f b6 10 movzbl (%eax),%edx - 22e: 8b 45 0c mov 0xc(%ebp),%eax - 231: 0f b6 00 movzbl (%eax),%eax - 234: 38 c2 cmp %al,%dl - 236: 74 de je 216 - p++, q++; - return (uchar)*p - (uchar)*q; - 238: 8b 45 08 mov 0x8(%ebp),%eax - 23b: 0f b6 00 movzbl (%eax),%eax - 23e: 0f b6 d0 movzbl %al,%edx - 241: 8b 45 0c mov 0xc(%ebp),%eax - 244: 0f b6 00 movzbl (%eax),%eax - 247: 0f b6 c0 movzbl %al,%eax - 24a: 29 c2 sub %eax,%edx - 24c: 89 d0 mov %edx,%eax -} - 24e: 5d pop %ebp - 24f: c3 ret - -00000250 : - -uint -strlen(char *s) -{ - 250: 55 push %ebp - 251: 89 e5 mov %esp,%ebp - 253: 83 ec 10 sub $0x10,%esp - int n; - - for(n = 0; s[n]; n++) - 256: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - 25d: eb 04 jmp 263 - 25f: 83 45 fc 01 addl $0x1,-0x4(%ebp) - 263: 8b 55 fc mov -0x4(%ebp),%edx - 266: 8b 45 08 mov 0x8(%ebp),%eax - 269: 01 d0 add %edx,%eax - 26b: 0f b6 00 movzbl (%eax),%eax - 26e: 84 c0 test %al,%al - 270: 75 ed jne 25f - ; - return n; - 272: 8b 45 fc mov -0x4(%ebp),%eax -} - 275: c9 leave - 276: c3 ret - -00000277 : - -void* -memset(void *dst, int c, uint n) -{ - 277: 55 push %ebp - 278: 89 e5 mov %esp,%ebp - stosb(dst, c, n); - 27a: 8b 45 10 mov 0x10(%ebp),%eax - 27d: 50 push %eax - 27e: ff 75 0c pushl 0xc(%ebp) - 281: ff 75 08 pushl 0x8(%ebp) - 284: e8 33 ff ff ff call 1bc - 289: 83 c4 0c add $0xc,%esp - return dst; - 28c: 8b 45 08 mov 0x8(%ebp),%eax -} - 28f: c9 leave - 290: c3 ret - -00000291 : - -char* -strchr(const char *s, char c) -{ - 291: 55 push %ebp - 292: 89 e5 mov %esp,%ebp - 294: 83 ec 04 sub $0x4,%esp - 297: 8b 45 0c mov 0xc(%ebp),%eax - 29a: 88 45 fc mov %al,-0x4(%ebp) - for(; *s; s++) - 29d: eb 14 jmp 2b3 - if(*s == c) - 29f: 8b 45 08 mov 0x8(%ebp),%eax - 2a2: 0f b6 00 movzbl (%eax),%eax - 2a5: 3a 45 fc cmp -0x4(%ebp),%al - 2a8: 75 05 jne 2af - return (char*)s; - 2aa: 8b 45 08 mov 0x8(%ebp),%eax - 2ad: eb 13 jmp 2c2 -} - -char* -strchr(const char *s, char c) -{ - for(; *s; s++) - 2af: 83 45 08 01 addl $0x1,0x8(%ebp) - 2b3: 8b 45 08 mov 0x8(%ebp),%eax - 2b6: 0f b6 00 movzbl (%eax),%eax - 2b9: 84 c0 test %al,%al - 2bb: 75 e2 jne 29f - if(*s == c) - return (char*)s; - return 0; - 2bd: b8 00 00 00 00 mov $0x0,%eax -} - 2c2: c9 leave - 2c3: c3 ret - -000002c4 : - -char* -gets(char *buf, int max) -{ - 2c4: 55 push %ebp - 2c5: 89 e5 mov %esp,%ebp - 2c7: 83 ec 18 sub $0x18,%esp - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - 2ca: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 2d1: eb 44 jmp 317 - cc = read(0, &c, 1); - 2d3: 83 ec 04 sub $0x4,%esp - 2d6: 6a 01 push $0x1 - 2d8: 8d 45 ef lea -0x11(%ebp),%eax - 2db: 50 push %eax - 2dc: 6a 00 push $0x0 - 2de: e8 46 01 00 00 call 429 - 2e3: 83 c4 10 add $0x10,%esp - 2e6: 89 45 f0 mov %eax,-0x10(%ebp) - if(cc < 1) - 2e9: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 2ed: 7f 02 jg 2f1 - break; - 2ef: eb 31 jmp 322 - buf[i++] = c; - 2f1: 8b 45 f4 mov -0xc(%ebp),%eax - 2f4: 8d 50 01 lea 0x1(%eax),%edx - 2f7: 89 55 f4 mov %edx,-0xc(%ebp) - 2fa: 89 c2 mov %eax,%edx - 2fc: 8b 45 08 mov 0x8(%ebp),%eax - 2ff: 01 c2 add %eax,%edx - 301: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 305: 88 02 mov %al,(%edx) - if(c == '\n' || c == '\r') - 307: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 30b: 3c 0a cmp $0xa,%al - 30d: 74 13 je 322 - 30f: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 313: 3c 0d cmp $0xd,%al - 315: 74 0b je 322 -gets(char *buf, int max) -{ - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - 317: 8b 45 f4 mov -0xc(%ebp),%eax - 31a: 83 c0 01 add $0x1,%eax - 31d: 3b 45 0c cmp 0xc(%ebp),%eax - 320: 7c b1 jl 2d3 - break; - buf[i++] = c; - if(c == '\n' || c == '\r') - break; - } - buf[i] = '\0'; - 322: 8b 55 f4 mov -0xc(%ebp),%edx - 325: 8b 45 08 mov 0x8(%ebp),%eax - 328: 01 d0 add %edx,%eax - 32a: c6 00 00 movb $0x0,(%eax) - return buf; - 32d: 8b 45 08 mov 0x8(%ebp),%eax -} - 330: c9 leave - 331: c3 ret - -00000332 : - -int -stat(char *n, struct stat *st) -{ - 332: 55 push %ebp - 333: 89 e5 mov %esp,%ebp - 335: 83 ec 18 sub $0x18,%esp - int fd; - int r; - - fd = open(n, O_RDONLY); - 338: 83 ec 08 sub $0x8,%esp - 33b: 6a 00 push $0x0 - 33d: ff 75 08 pushl 0x8(%ebp) - 340: e8 0c 01 00 00 call 451 - 345: 83 c4 10 add $0x10,%esp - 348: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd < 0) - 34b: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 34f: 79 07 jns 358 - return -1; - 351: b8 ff ff ff ff mov $0xffffffff,%eax - 356: eb 25 jmp 37d - r = fstat(fd, st); - 358: 83 ec 08 sub $0x8,%esp - 35b: ff 75 0c pushl 0xc(%ebp) - 35e: ff 75 f4 pushl -0xc(%ebp) - 361: e8 03 01 00 00 call 469 - 366: 83 c4 10 add $0x10,%esp - 369: 89 45 f0 mov %eax,-0x10(%ebp) - close(fd); - 36c: 83 ec 0c sub $0xc,%esp - 36f: ff 75 f4 pushl -0xc(%ebp) - 372: e8 c2 00 00 00 call 439 - 377: 83 c4 10 add $0x10,%esp - return r; - 37a: 8b 45 f0 mov -0x10(%ebp),%eax -} - 37d: c9 leave - 37e: c3 ret - -0000037f : - -int -atoi(const char *s) -{ - 37f: 55 push %ebp - 380: 89 e5 mov %esp,%ebp - 382: 83 ec 10 sub $0x10,%esp - int n; - - n = 0; - 385: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - while('0' <= *s && *s <= '9') - 38c: eb 25 jmp 3b3 - n = n*10 + *s++ - '0'; - 38e: 8b 55 fc mov -0x4(%ebp),%edx - 391: 89 d0 mov %edx,%eax - 393: c1 e0 02 shl $0x2,%eax - 396: 01 d0 add %edx,%eax - 398: 01 c0 add %eax,%eax - 39a: 89 c1 mov %eax,%ecx - 39c: 8b 45 08 mov 0x8(%ebp),%eax - 39f: 8d 50 01 lea 0x1(%eax),%edx - 3a2: 89 55 08 mov %edx,0x8(%ebp) - 3a5: 0f b6 00 movzbl (%eax),%eax - 3a8: 0f be c0 movsbl %al,%eax - 3ab: 01 c8 add %ecx,%eax - 3ad: 83 e8 30 sub $0x30,%eax - 3b0: 89 45 fc mov %eax,-0x4(%ebp) -atoi(const char *s) -{ - int n; - - n = 0; - while('0' <= *s && *s <= '9') - 3b3: 8b 45 08 mov 0x8(%ebp),%eax - 3b6: 0f b6 00 movzbl (%eax),%eax - 3b9: 3c 2f cmp $0x2f,%al - 3bb: 7e 0a jle 3c7 - 3bd: 8b 45 08 mov 0x8(%ebp),%eax - 3c0: 0f b6 00 movzbl (%eax),%eax - 3c3: 3c 39 cmp $0x39,%al - 3c5: 7e c7 jle 38e - n = n*10 + *s++ - '0'; - return n; - 3c7: 8b 45 fc mov -0x4(%ebp),%eax -} - 3ca: c9 leave - 3cb: c3 ret - -000003cc : - -void* -memmove(void *vdst, void *vsrc, int n) -{ - 3cc: 55 push %ebp - 3cd: 89 e5 mov %esp,%ebp - 3cf: 83 ec 10 sub $0x10,%esp - char *dst, *src; - - dst = vdst; - 3d2: 8b 45 08 mov 0x8(%ebp),%eax - 3d5: 89 45 fc mov %eax,-0x4(%ebp) - src = vsrc; - 3d8: 8b 45 0c mov 0xc(%ebp),%eax - 3db: 89 45 f8 mov %eax,-0x8(%ebp) - while(n-- > 0) - 3de: eb 17 jmp 3f7 - *dst++ = *src++; - 3e0: 8b 45 fc mov -0x4(%ebp),%eax - 3e3: 8d 50 01 lea 0x1(%eax),%edx - 3e6: 89 55 fc mov %edx,-0x4(%ebp) - 3e9: 8b 55 f8 mov -0x8(%ebp),%edx - 3ec: 8d 4a 01 lea 0x1(%edx),%ecx - 3ef: 89 4d f8 mov %ecx,-0x8(%ebp) - 3f2: 0f b6 12 movzbl (%edx),%edx - 3f5: 88 10 mov %dl,(%eax) -{ - char *dst, *src; - - dst = vdst; - src = vsrc; - while(n-- > 0) - 3f7: 8b 45 10 mov 0x10(%ebp),%eax - 3fa: 8d 50 ff lea -0x1(%eax),%edx - 3fd: 89 55 10 mov %edx,0x10(%ebp) - 400: 85 c0 test %eax,%eax - 402: 7f dc jg 3e0 - *dst++ = *src++; - return vdst; - 404: 8b 45 08 mov 0x8(%ebp),%eax -} - 407: c9 leave - 408: c3 ret - -00000409 : - name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 409: b8 01 00 00 00 mov $0x1,%eax - 40e: cd 40 int $0x40 - 410: c3 ret - -00000411 : -SYSCALL(exit) - 411: b8 02 00 00 00 mov $0x2,%eax - 416: cd 40 int $0x40 - 418: c3 ret - -00000419 : -SYSCALL(wait) - 419: b8 03 00 00 00 mov $0x3,%eax - 41e: cd 40 int $0x40 - 420: c3 ret - -00000421 : -SYSCALL(pipe) - 421: b8 04 00 00 00 mov $0x4,%eax - 426: cd 40 int $0x40 - 428: c3 ret - -00000429 : -SYSCALL(read) - 429: b8 05 00 00 00 mov $0x5,%eax - 42e: cd 40 int $0x40 - 430: c3 ret - -00000431 : -SYSCALL(write) - 431: b8 10 00 00 00 mov $0x10,%eax - 436: cd 40 int $0x40 - 438: c3 ret - -00000439 : -SYSCALL(close) - 439: b8 15 00 00 00 mov $0x15,%eax - 43e: cd 40 int $0x40 - 440: c3 ret - -00000441 : -SYSCALL(kill) - 441: b8 06 00 00 00 mov $0x6,%eax - 446: cd 40 int $0x40 - 448: c3 ret - -00000449 : -SYSCALL(exec) - 449: b8 07 00 00 00 mov $0x7,%eax - 44e: cd 40 int $0x40 - 450: c3 ret - -00000451 : -SYSCALL(open) - 451: b8 0f 00 00 00 mov $0xf,%eax - 456: cd 40 int $0x40 - 458: c3 ret - -00000459 : -SYSCALL(mknod) - 459: b8 11 00 00 00 mov $0x11,%eax - 45e: cd 40 int $0x40 - 460: c3 ret - -00000461 : -SYSCALL(unlink) - 461: b8 12 00 00 00 mov $0x12,%eax - 466: cd 40 int $0x40 - 468: c3 ret - -00000469 : -SYSCALL(fstat) - 469: b8 08 00 00 00 mov $0x8,%eax - 46e: cd 40 int $0x40 - 470: c3 ret - -00000471 : -SYSCALL(link) - 471: b8 13 00 00 00 mov $0x13,%eax - 476: cd 40 int $0x40 - 478: c3 ret - -00000479 : -SYSCALL(mkdir) - 479: b8 14 00 00 00 mov $0x14,%eax - 47e: cd 40 int $0x40 - 480: c3 ret - -00000481 : -SYSCALL(chdir) - 481: b8 09 00 00 00 mov $0x9,%eax - 486: cd 40 int $0x40 - 488: c3 ret - -00000489 : -SYSCALL(dup) - 489: b8 0a 00 00 00 mov $0xa,%eax - 48e: cd 40 int $0x40 - 490: c3 ret - -00000491 : -SYSCALL(getpid) - 491: b8 0b 00 00 00 mov $0xb,%eax - 496: cd 40 int $0x40 - 498: c3 ret - -00000499 : -SYSCALL(sbrk) - 499: b8 0c 00 00 00 mov $0xc,%eax - 49e: cd 40 int $0x40 - 4a0: c3 ret - -000004a1 : -SYSCALL(sleep) - 4a1: b8 0d 00 00 00 mov $0xd,%eax - 4a6: cd 40 int $0x40 - 4a8: c3 ret - -000004a9 : -SYSCALL(uptime) - 4a9: b8 0e 00 00 00 mov $0xe,%eax - 4ae: cd 40 int $0x40 - 4b0: c3 ret - -000004b1 : -#include "stat.h" -#include "user.h" - -static void -putc(int fd, char c) -{ - 4b1: 55 push %ebp - 4b2: 89 e5 mov %esp,%ebp - 4b4: 83 ec 18 sub $0x18,%esp - 4b7: 8b 45 0c mov 0xc(%ebp),%eax - 4ba: 88 45 f4 mov %al,-0xc(%ebp) - write(fd, &c, 1); - 4bd: 83 ec 04 sub $0x4,%esp - 4c0: 6a 01 push $0x1 - 4c2: 8d 45 f4 lea -0xc(%ebp),%eax - 4c5: 50 push %eax - 4c6: ff 75 08 pushl 0x8(%ebp) - 4c9: e8 63 ff ff ff call 431 - 4ce: 83 c4 10 add $0x10,%esp -} - 4d1: c9 leave - 4d2: c3 ret - -000004d3 : - -static void -printint(int fd, int xx, int base, int sgn) -{ - 4d3: 55 push %ebp - 4d4: 89 e5 mov %esp,%ebp - 4d6: 53 push %ebx - 4d7: 83 ec 24 sub $0x24,%esp - static char digits[] = "0123456789ABCDEF"; - char buf[16]; - int i, neg; - uint x; - - neg = 0; - 4da: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - if(sgn && xx < 0){ - 4e1: 83 7d 14 00 cmpl $0x0,0x14(%ebp) - 4e5: 74 17 je 4fe - 4e7: 83 7d 0c 00 cmpl $0x0,0xc(%ebp) - 4eb: 79 11 jns 4fe - neg = 1; - 4ed: c7 45 f0 01 00 00 00 movl $0x1,-0x10(%ebp) - x = -xx; - 4f4: 8b 45 0c mov 0xc(%ebp),%eax - 4f7: f7 d8 neg %eax - 4f9: 89 45 ec mov %eax,-0x14(%ebp) - 4fc: eb 06 jmp 504 - } else { - x = xx; - 4fe: 8b 45 0c mov 0xc(%ebp),%eax - 501: 89 45 ec mov %eax,-0x14(%ebp) - } - - i = 0; - 504: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - do{ - buf[i++] = digits[x % base]; - 50b: 8b 4d f4 mov -0xc(%ebp),%ecx - 50e: 8d 41 01 lea 0x1(%ecx),%eax - 511: 89 45 f4 mov %eax,-0xc(%ebp) - 514: 8b 5d 10 mov 0x10(%ebp),%ebx - 517: 8b 45 ec mov -0x14(%ebp),%eax - 51a: ba 00 00 00 00 mov $0x0,%edx - 51f: f7 f3 div %ebx - 521: 89 d0 mov %edx,%eax - 523: 0f b6 80 e8 0b 00 00 movzbl 0xbe8(%eax),%eax - 52a: 88 44 0d dc mov %al,-0x24(%ebp,%ecx,1) - }while((x /= base) != 0); - 52e: 8b 5d 10 mov 0x10(%ebp),%ebx - 531: 8b 45 ec mov -0x14(%ebp),%eax - 534: ba 00 00 00 00 mov $0x0,%edx - 539: f7 f3 div %ebx - 53b: 89 45 ec mov %eax,-0x14(%ebp) - 53e: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 542: 75 c7 jne 50b - if(neg) - 544: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 548: 74 0e je 558 - buf[i++] = '-'; - 54a: 8b 45 f4 mov -0xc(%ebp),%eax - 54d: 8d 50 01 lea 0x1(%eax),%edx - 550: 89 55 f4 mov %edx,-0xc(%ebp) - 553: c6 44 05 dc 2d movb $0x2d,-0x24(%ebp,%eax,1) - - while(--i >= 0) - 558: eb 1d jmp 577 - putc(fd, buf[i]); - 55a: 8d 55 dc lea -0x24(%ebp),%edx - 55d: 8b 45 f4 mov -0xc(%ebp),%eax - 560: 01 d0 add %edx,%eax - 562: 0f b6 00 movzbl (%eax),%eax - 565: 0f be c0 movsbl %al,%eax - 568: 83 ec 08 sub $0x8,%esp - 56b: 50 push %eax - 56c: ff 75 08 pushl 0x8(%ebp) - 56f: e8 3d ff ff ff call 4b1 - 574: 83 c4 10 add $0x10,%esp - buf[i++] = digits[x % base]; - }while((x /= base) != 0); - if(neg) - buf[i++] = '-'; - - while(--i >= 0) - 577: 83 6d f4 01 subl $0x1,-0xc(%ebp) - 57b: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 57f: 79 d9 jns 55a - putc(fd, buf[i]); -} - 581: 8b 5d fc mov -0x4(%ebp),%ebx - 584: c9 leave - 585: c3 ret - -00000586 : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void -printf(int fd, char *fmt, ...) -{ - 586: 55 push %ebp - 587: 89 e5 mov %esp,%ebp - 589: 83 ec 28 sub $0x28,%esp - char *s; - int c, i, state; - uint *ap; - - state = 0; - 58c: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - ap = (uint*)(void*)&fmt + 1; - 593: 8d 45 0c lea 0xc(%ebp),%eax - 596: 83 c0 04 add $0x4,%eax - 599: 89 45 e8 mov %eax,-0x18(%ebp) - for(i = 0; fmt[i]; i++){ - 59c: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - 5a3: e9 59 01 00 00 jmp 701 - c = fmt[i] & 0xff; - 5a8: 8b 55 0c mov 0xc(%ebp),%edx - 5ab: 8b 45 f0 mov -0x10(%ebp),%eax - 5ae: 01 d0 add %edx,%eax - 5b0: 0f b6 00 movzbl (%eax),%eax - 5b3: 0f be c0 movsbl %al,%eax - 5b6: 25 ff 00 00 00 and $0xff,%eax - 5bb: 89 45 e4 mov %eax,-0x1c(%ebp) - if(state == 0){ - 5be: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 5c2: 75 2c jne 5f0 - if(c == '%'){ - 5c4: 83 7d e4 25 cmpl $0x25,-0x1c(%ebp) - 5c8: 75 0c jne 5d6 - state = '%'; - 5ca: c7 45 ec 25 00 00 00 movl $0x25,-0x14(%ebp) - 5d1: e9 27 01 00 00 jmp 6fd - } else { - putc(fd, c); - 5d6: 8b 45 e4 mov -0x1c(%ebp),%eax - 5d9: 0f be c0 movsbl %al,%eax - 5dc: 83 ec 08 sub $0x8,%esp - 5df: 50 push %eax - 5e0: ff 75 08 pushl 0x8(%ebp) - 5e3: e8 c9 fe ff ff call 4b1 - 5e8: 83 c4 10 add $0x10,%esp - 5eb: e9 0d 01 00 00 jmp 6fd - } - } else if(state == '%'){ - 5f0: 83 7d ec 25 cmpl $0x25,-0x14(%ebp) - 5f4: 0f 85 03 01 00 00 jne 6fd - if(c == 'd'){ - 5fa: 83 7d e4 64 cmpl $0x64,-0x1c(%ebp) - 5fe: 75 1e jne 61e - printint(fd, *ap, 10, 1); - 600: 8b 45 e8 mov -0x18(%ebp),%eax - 603: 8b 00 mov (%eax),%eax - 605: 6a 01 push $0x1 - 607: 6a 0a push $0xa - 609: 50 push %eax - 60a: ff 75 08 pushl 0x8(%ebp) - 60d: e8 c1 fe ff ff call 4d3 - 612: 83 c4 10 add $0x10,%esp - ap++; - 615: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 619: e9 d8 00 00 00 jmp 6f6 - } else if(c == 'x' || c == 'p'){ - 61e: 83 7d e4 78 cmpl $0x78,-0x1c(%ebp) - 622: 74 06 je 62a - 624: 83 7d e4 70 cmpl $0x70,-0x1c(%ebp) - 628: 75 1e jne 648 - printint(fd, *ap, 16, 0); - 62a: 8b 45 e8 mov -0x18(%ebp),%eax - 62d: 8b 00 mov (%eax),%eax - 62f: 6a 00 push $0x0 - 631: 6a 10 push $0x10 - 633: 50 push %eax - 634: ff 75 08 pushl 0x8(%ebp) - 637: e8 97 fe ff ff call 4d3 - 63c: 83 c4 10 add $0x10,%esp - ap++; - 63f: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 643: e9 ae 00 00 00 jmp 6f6 - } else if(c == 's'){ - 648: 83 7d e4 73 cmpl $0x73,-0x1c(%ebp) - 64c: 75 43 jne 691 - s = (char*)*ap; - 64e: 8b 45 e8 mov -0x18(%ebp),%eax - 651: 8b 00 mov (%eax),%eax - 653: 89 45 f4 mov %eax,-0xc(%ebp) - ap++; - 656: 83 45 e8 04 addl $0x4,-0x18(%ebp) - if(s == 0) - 65a: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 65e: 75 07 jne 667 - s = "(null)"; - 660: c7 45 f4 72 09 00 00 movl $0x972,-0xc(%ebp) - while(*s != 0){ - 667: eb 1c jmp 685 - putc(fd, *s); - 669: 8b 45 f4 mov -0xc(%ebp),%eax - 66c: 0f b6 00 movzbl (%eax),%eax - 66f: 0f be c0 movsbl %al,%eax - 672: 83 ec 08 sub $0x8,%esp - 675: 50 push %eax - 676: ff 75 08 pushl 0x8(%ebp) - 679: e8 33 fe ff ff call 4b1 - 67e: 83 c4 10 add $0x10,%esp - s++; - 681: 83 45 f4 01 addl $0x1,-0xc(%ebp) - } else if(c == 's'){ - s = (char*)*ap; - ap++; - if(s == 0) - s = "(null)"; - while(*s != 0){ - 685: 8b 45 f4 mov -0xc(%ebp),%eax - 688: 0f b6 00 movzbl (%eax),%eax - 68b: 84 c0 test %al,%al - 68d: 75 da jne 669 - 68f: eb 65 jmp 6f6 - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 691: 83 7d e4 63 cmpl $0x63,-0x1c(%ebp) - 695: 75 1d jne 6b4 - putc(fd, *ap); - 697: 8b 45 e8 mov -0x18(%ebp),%eax - 69a: 8b 00 mov (%eax),%eax - 69c: 0f be c0 movsbl %al,%eax - 69f: 83 ec 08 sub $0x8,%esp - 6a2: 50 push %eax - 6a3: ff 75 08 pushl 0x8(%ebp) - 6a6: e8 06 fe ff ff call 4b1 - 6ab: 83 c4 10 add $0x10,%esp - ap++; - 6ae: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 6b2: eb 42 jmp 6f6 - } else if(c == '%'){ - 6b4: 83 7d e4 25 cmpl $0x25,-0x1c(%ebp) - 6b8: 75 17 jne 6d1 - putc(fd, c); - 6ba: 8b 45 e4 mov -0x1c(%ebp),%eax - 6bd: 0f be c0 movsbl %al,%eax - 6c0: 83 ec 08 sub $0x8,%esp - 6c3: 50 push %eax - 6c4: ff 75 08 pushl 0x8(%ebp) - 6c7: e8 e5 fd ff ff call 4b1 - 6cc: 83 c4 10 add $0x10,%esp - 6cf: eb 25 jmp 6f6 - } else { - // Unknown % sequence. Print it to draw attention. - putc(fd, '%'); - 6d1: 83 ec 08 sub $0x8,%esp - 6d4: 6a 25 push $0x25 - 6d6: ff 75 08 pushl 0x8(%ebp) - 6d9: e8 d3 fd ff ff call 4b1 - 6de: 83 c4 10 add $0x10,%esp - putc(fd, c); - 6e1: 8b 45 e4 mov -0x1c(%ebp),%eax - 6e4: 0f be c0 movsbl %al,%eax - 6e7: 83 ec 08 sub $0x8,%esp - 6ea: 50 push %eax - 6eb: ff 75 08 pushl 0x8(%ebp) - 6ee: e8 be fd ff ff call 4b1 - 6f3: 83 c4 10 add $0x10,%esp - } - state = 0; - 6f6: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for(i = 0; fmt[i]; i++){ - 6fd: 83 45 f0 01 addl $0x1,-0x10(%ebp) - 701: 8b 55 0c mov 0xc(%ebp),%edx - 704: 8b 45 f0 mov -0x10(%ebp),%eax - 707: 01 d0 add %edx,%eax - 709: 0f b6 00 movzbl (%eax),%eax - 70c: 84 c0 test %al,%al - 70e: 0f 85 94 fe ff ff jne 5a8 - putc(fd, c); - } - state = 0; - } - } -} - 714: c9 leave - 715: c3 ret - -00000716 : -static Header base; -static Header *freep; - -void -free(void *ap) -{ - 716: 55 push %ebp - 717: 89 e5 mov %esp,%ebp - 719: 83 ec 10 sub $0x10,%esp - Header *bp, *p; - - bp = (Header*)ap - 1; - 71c: 8b 45 08 mov 0x8(%ebp),%eax - 71f: 83 e8 08 sub $0x8,%eax - 722: 89 45 f8 mov %eax,-0x8(%ebp) - for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 725: a1 08 0c 00 00 mov 0xc08,%eax - 72a: 89 45 fc mov %eax,-0x4(%ebp) - 72d: eb 24 jmp 753 - if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 72f: 8b 45 fc mov -0x4(%ebp),%eax - 732: 8b 00 mov (%eax),%eax - 734: 3b 45 fc cmp -0x4(%ebp),%eax - 737: 77 12 ja 74b - 739: 8b 45 f8 mov -0x8(%ebp),%eax - 73c: 3b 45 fc cmp -0x4(%ebp),%eax - 73f: 77 24 ja 765 - 741: 8b 45 fc mov -0x4(%ebp),%eax - 744: 8b 00 mov (%eax),%eax - 746: 3b 45 f8 cmp -0x8(%ebp),%eax - 749: 77 1a ja 765 -free(void *ap) -{ - Header *bp, *p; - - bp = (Header*)ap - 1; - for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 74b: 8b 45 fc mov -0x4(%ebp),%eax - 74e: 8b 00 mov (%eax),%eax - 750: 89 45 fc mov %eax,-0x4(%ebp) - 753: 8b 45 f8 mov -0x8(%ebp),%eax - 756: 3b 45 fc cmp -0x4(%ebp),%eax - 759: 76 d4 jbe 72f - 75b: 8b 45 fc mov -0x4(%ebp),%eax - 75e: 8b 00 mov (%eax),%eax - 760: 3b 45 f8 cmp -0x8(%ebp),%eax - 763: 76 ca jbe 72f - if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - break; - if(bp + bp->s.size == p->s.ptr){ - 765: 8b 45 f8 mov -0x8(%ebp),%eax - 768: 8b 40 04 mov 0x4(%eax),%eax - 76b: 8d 14 c5 00 00 00 00 lea 0x0(,%eax,8),%edx - 772: 8b 45 f8 mov -0x8(%ebp),%eax - 775: 01 c2 add %eax,%edx - 777: 8b 45 fc mov -0x4(%ebp),%eax - 77a: 8b 00 mov (%eax),%eax - 77c: 39 c2 cmp %eax,%edx - 77e: 75 24 jne 7a4 - bp->s.size += p->s.ptr->s.size; - 780: 8b 45 f8 mov -0x8(%ebp),%eax - 783: 8b 50 04 mov 0x4(%eax),%edx - 786: 8b 45 fc mov -0x4(%ebp),%eax - 789: 8b 00 mov (%eax),%eax - 78b: 8b 40 04 mov 0x4(%eax),%eax - 78e: 01 c2 add %eax,%edx - 790: 8b 45 f8 mov -0x8(%ebp),%eax - 793: 89 50 04 mov %edx,0x4(%eax) - bp->s.ptr = p->s.ptr->s.ptr; - 796: 8b 45 fc mov -0x4(%ebp),%eax - 799: 8b 00 mov (%eax),%eax - 79b: 8b 10 mov (%eax),%edx - 79d: 8b 45 f8 mov -0x8(%ebp),%eax - 7a0: 89 10 mov %edx,(%eax) - 7a2: eb 0a jmp 7ae - } else - bp->s.ptr = p->s.ptr; - 7a4: 8b 45 fc mov -0x4(%ebp),%eax - 7a7: 8b 10 mov (%eax),%edx - 7a9: 8b 45 f8 mov -0x8(%ebp),%eax - 7ac: 89 10 mov %edx,(%eax) - if(p + p->s.size == bp){ - 7ae: 8b 45 fc mov -0x4(%ebp),%eax - 7b1: 8b 40 04 mov 0x4(%eax),%eax - 7b4: 8d 14 c5 00 00 00 00 lea 0x0(,%eax,8),%edx - 7bb: 8b 45 fc mov -0x4(%ebp),%eax - 7be: 01 d0 add %edx,%eax - 7c0: 3b 45 f8 cmp -0x8(%ebp),%eax - 7c3: 75 20 jne 7e5 - p->s.size += bp->s.size; - 7c5: 8b 45 fc mov -0x4(%ebp),%eax - 7c8: 8b 50 04 mov 0x4(%eax),%edx - 7cb: 8b 45 f8 mov -0x8(%ebp),%eax - 7ce: 8b 40 04 mov 0x4(%eax),%eax - 7d1: 01 c2 add %eax,%edx - 7d3: 8b 45 fc mov -0x4(%ebp),%eax - 7d6: 89 50 04 mov %edx,0x4(%eax) - p->s.ptr = bp->s.ptr; - 7d9: 8b 45 f8 mov -0x8(%ebp),%eax - 7dc: 8b 10 mov (%eax),%edx - 7de: 8b 45 fc mov -0x4(%ebp),%eax - 7e1: 89 10 mov %edx,(%eax) - 7e3: eb 08 jmp 7ed - } else - p->s.ptr = bp; - 7e5: 8b 45 fc mov -0x4(%ebp),%eax - 7e8: 8b 55 f8 mov -0x8(%ebp),%edx - 7eb: 89 10 mov %edx,(%eax) - freep = p; - 7ed: 8b 45 fc mov -0x4(%ebp),%eax - 7f0: a3 08 0c 00 00 mov %eax,0xc08 -} - 7f5: c9 leave - 7f6: c3 ret - -000007f7 : - -static Header* -morecore(uint nu) -{ - 7f7: 55 push %ebp - 7f8: 89 e5 mov %esp,%ebp - 7fa: 83 ec 18 sub $0x18,%esp - char *p; - Header *hp; - - if(nu < 4096) - 7fd: 81 7d 08 ff 0f 00 00 cmpl $0xfff,0x8(%ebp) - 804: 77 07 ja 80d - nu = 4096; - 806: c7 45 08 00 10 00 00 movl $0x1000,0x8(%ebp) - p = sbrk(nu * sizeof(Header)); - 80d: 8b 45 08 mov 0x8(%ebp),%eax - 810: c1 e0 03 shl $0x3,%eax - 813: 83 ec 0c sub $0xc,%esp - 816: 50 push %eax - 817: e8 7d fc ff ff call 499 - 81c: 83 c4 10 add $0x10,%esp - 81f: 89 45 f4 mov %eax,-0xc(%ebp) - if(p == (char*)-1) - 822: 83 7d f4 ff cmpl $0xffffffff,-0xc(%ebp) - 826: 75 07 jne 82f - return 0; - 828: b8 00 00 00 00 mov $0x0,%eax - 82d: eb 26 jmp 855 - hp = (Header*)p; - 82f: 8b 45 f4 mov -0xc(%ebp),%eax - 832: 89 45 f0 mov %eax,-0x10(%ebp) - hp->s.size = nu; - 835: 8b 45 f0 mov -0x10(%ebp),%eax - 838: 8b 55 08 mov 0x8(%ebp),%edx - 83b: 89 50 04 mov %edx,0x4(%eax) - free((void*)(hp + 1)); - 83e: 8b 45 f0 mov -0x10(%ebp),%eax - 841: 83 c0 08 add $0x8,%eax - 844: 83 ec 0c sub $0xc,%esp - 847: 50 push %eax - 848: e8 c9 fe ff ff call 716 - 84d: 83 c4 10 add $0x10,%esp - return freep; - 850: a1 08 0c 00 00 mov 0xc08,%eax -} - 855: c9 leave - 856: c3 ret - -00000857 : - -void* -malloc(uint nbytes) -{ - 857: 55 push %ebp - 858: 89 e5 mov %esp,%ebp - 85a: 83 ec 18 sub $0x18,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 85d: 8b 45 08 mov 0x8(%ebp),%eax - 860: 83 c0 07 add $0x7,%eax - 863: c1 e8 03 shr $0x3,%eax - 866: 83 c0 01 add $0x1,%eax - 869: 89 45 ec mov %eax,-0x14(%ebp) - if((prevp = freep) == 0){ - 86c: a1 08 0c 00 00 mov 0xc08,%eax - 871: 89 45 f0 mov %eax,-0x10(%ebp) - 874: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 878: 75 23 jne 89d - base.s.ptr = freep = prevp = &base; - 87a: c7 45 f0 00 0c 00 00 movl $0xc00,-0x10(%ebp) - 881: 8b 45 f0 mov -0x10(%ebp),%eax - 884: a3 08 0c 00 00 mov %eax,0xc08 - 889: a1 08 0c 00 00 mov 0xc08,%eax - 88e: a3 00 0c 00 00 mov %eax,0xc00 - base.s.size = 0; - 893: c7 05 04 0c 00 00 00 movl $0x0,0xc04 - 89a: 00 00 00 - } - for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 89d: 8b 45 f0 mov -0x10(%ebp),%eax - 8a0: 8b 00 mov (%eax),%eax - 8a2: 89 45 f4 mov %eax,-0xc(%ebp) - if(p->s.size >= nunits){ - 8a5: 8b 45 f4 mov -0xc(%ebp),%eax - 8a8: 8b 40 04 mov 0x4(%eax),%eax - 8ab: 3b 45 ec cmp -0x14(%ebp),%eax - 8ae: 72 4d jb 8fd - if(p->s.size == nunits) - 8b0: 8b 45 f4 mov -0xc(%ebp),%eax - 8b3: 8b 40 04 mov 0x4(%eax),%eax - 8b6: 3b 45 ec cmp -0x14(%ebp),%eax - 8b9: 75 0c jne 8c7 - prevp->s.ptr = p->s.ptr; - 8bb: 8b 45 f4 mov -0xc(%ebp),%eax - 8be: 8b 10 mov (%eax),%edx - 8c0: 8b 45 f0 mov -0x10(%ebp),%eax - 8c3: 89 10 mov %edx,(%eax) - 8c5: eb 26 jmp 8ed - else { - p->s.size -= nunits; - 8c7: 8b 45 f4 mov -0xc(%ebp),%eax - 8ca: 8b 40 04 mov 0x4(%eax),%eax - 8cd: 2b 45 ec sub -0x14(%ebp),%eax - 8d0: 89 c2 mov %eax,%edx - 8d2: 8b 45 f4 mov -0xc(%ebp),%eax - 8d5: 89 50 04 mov %edx,0x4(%eax) - p += p->s.size; - 8d8: 8b 45 f4 mov -0xc(%ebp),%eax - 8db: 8b 40 04 mov 0x4(%eax),%eax - 8de: c1 e0 03 shl $0x3,%eax - 8e1: 01 45 f4 add %eax,-0xc(%ebp) - p->s.size = nunits; - 8e4: 8b 45 f4 mov -0xc(%ebp),%eax - 8e7: 8b 55 ec mov -0x14(%ebp),%edx - 8ea: 89 50 04 mov %edx,0x4(%eax) - } - freep = prevp; - 8ed: 8b 45 f0 mov -0x10(%ebp),%eax - 8f0: a3 08 0c 00 00 mov %eax,0xc08 - return (void*)(p + 1); - 8f5: 8b 45 f4 mov -0xc(%ebp),%eax - 8f8: 83 c0 08 add $0x8,%eax - 8fb: eb 3b jmp 938 - } - if(p == freep) - 8fd: a1 08 0c 00 00 mov 0xc08,%eax - 902: 39 45 f4 cmp %eax,-0xc(%ebp) - 905: 75 1e jne 925 - if((p = morecore(nunits)) == 0) - 907: 83 ec 0c sub $0xc,%esp - 90a: ff 75 ec pushl -0x14(%ebp) - 90d: e8 e5 fe ff ff call 7f7 - 912: 83 c4 10 add $0x10,%esp - 915: 89 45 f4 mov %eax,-0xc(%ebp) - 918: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 91c: 75 07 jne 925 - return 0; - 91e: b8 00 00 00 00 mov $0x0,%eax - 923: eb 13 jmp 938 - nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - if((prevp = freep) == 0){ - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 925: 8b 45 f4 mov -0xc(%ebp),%eax - 928: 89 45 f0 mov %eax,-0x10(%ebp) - 92b: 8b 45 f4 mov -0xc(%ebp),%eax - 92e: 8b 00 mov (%eax),%eax - 930: 89 45 f4 mov %eax,-0xc(%ebp) - return (void*)(p + 1); - } - if(p == freep) - if((p = morecore(nunits)) == 0) - return 0; - } - 933: e9 6d ff ff ff jmp 8a5 -} - 938: c9 leave - 939: c3 ret diff --git a/xv6-public/wc.d b/xv6-public/wc.d deleted file mode 100755 index 6adc498..0000000 --- a/xv6-public/wc.d +++ /dev/null @@ -1 +0,0 @@ -wc.o: wc.c /usr/include/stdc-predef.h types.h stat.h user.h diff --git a/xv6-public/wc.o b/xv6-public/wc.o deleted file mode 100755 index da75279e548985b427ad8f1efe74c9f0679861b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4712 zcma)9ZEPGz8J^j@v)6a$kIUtQ5=u9%ojSmsixWc02Z@tj6DJiIXuyPuWPM)yF4%YO z-k$A5i3%K%uuK%WAX*6|3IY^CfA9lEh|(&ERv`jJen7<^P<|w8Dh|m(kq{!{c%IoA zdtD;I=ysm>d)|3xW@qoY!c$L5DTQfL#KbBm#GjI(W`}})u~B5jv4vZWX8+Z~ZORr4 zw-*Y{#X@tTuza;}lcK+tuNLkqVzg1XEf))S6Xd!ti#^GDyir(=in?FB(rDTvC0g9R z*J`yIulJn45_FhYnZ~)BqMm9Lni3+W)+pR%fZc@~XJ2YG<0WAUq1;<_+eBC>+-RJ; zA-XU6j0o!VCX7;QgZn9Ij6!VMt$Mmuzul@gTlMAA#;A#N?N=9`>Ww#UF1Mb&hiQN6 z6OCri!fzV8<#Q_DBQ#z~TgAiFndI9Ibjb3;`tu;f;=#DQz9^8xDKTQkN5vZFmc{99 z_pytQlzQR!j%4p+XpbOk6S2|6OjbEvs95*cSO#U}bao_DVy?K$@jZ9k@qEAPCq>`5 zqklE5H?>8#QmF<`b;heWeGtx~$oQefCzXP$01ot*2A{B3; zw`AL1Kw7RtFMB1&Wcr+W4<7k_bZs4^dWRtA9CC`If^*>Xwos0?L7W@KMiHWlmI+?A2*WDm};)hkk| zk3xiPrAZqbGcWh0WA?7p?$o1cn(l9V;Xqnuv9}T;ln-Yu?C&xKZvNQZe%eGBCQ5iMvtb4vulR#lyW%B9J;oM;p_m8NB3&{eQBoC zv(|l&N;#8&IqJVvL6$=au|8@U+HH6js<$yOF!PlJ_N0Z_6g3^rQluKoZ;2pIz+eB_`+5lABhW`C{EU`329K<8V2w_o+0jfQWo+eNew0iW1pkEKg1fDVk8zsIK ziV5MkOQRrFdjLHH!t^9j>q|#ZhT?kXrQeu zg0fK}bPISa(T85je|2@DS64WqNW8uCd^L)C&GYlRRtXjC-KXq<`oPlBTSu)&vP+Xk z@n*1M^8rA%9clYgtkdd~llGS5_O(HK-)HSDpL@mX&sx1%+8t+S-%>7T-qbEXwGtSb zcZ8@{YURm_H}3EyKkb$)VIJkmT-6^J6?fVbwZJcy{8h_h$@PWm4t?yHbI{q5|44q& z$xUx(7t|}>-bt_G`Q;*57p{BfAK#hVxx>j#;x|6$`V%==e*7^fH&LnPW@txZtX`f9 z%9W78nB`)SbEnE~tz3cQ#H{P*0^cou;lJ6OTjM0Ay-H9E-K*2(AUEM7``kl%8$E&EAnHtn#lXrkfCzi8>>&AC|4$`Fj2HSHs*V? zhQplUuwv-?Ze`MAj1|#Tx#AgX3@h@*>NM9!Il;&CkvOf9 zh{w8fzPuC7e7^#kKCCy}K^T=x5bz}VT-0dnevIGr`vs71L zchWcknIGFFJkb!Nk-B7{GxH#A_7q6rplFv#=w_xwG-FbA7~fJ~gm44sZaj>~x^v8E zykA54A;?TK@eFS;Dvygh>XXvw*8am}{OAbe&8$O@n82orwAjjNHF~b-YKyI@6ytH{ zthSh1`6!RcM_NqHd{qz=tm`zb;ZGve#$QgsngBu-zd*-8`G$F z3G(v@q>&X!*CvW6%9u>wifeA7IyrI81-m@|#+o#0FrT4A4S?4-jF;zl;|C zV^3;*g*@WSYW>%Vu>UR*|1p22<*c{F8RwamDb_qh?pN}xr^H%3sBsGsi_)+4tQYNe zYUIB;@*_m}J*{z+i0xF>`tzE9UgLK(s&fmwSGC<$E&nYM@&2gsFB;#{xUA8_yf{Ap z2@|tK_-)d-nTYs(TEAT*-@%lBM&mO?_<0&xPx5mbd8WxPXnbDdw=}*+#Q4{V*avTF i{@)rOhA;JdG#=47sZp&9IxLwQXHcU9v|zJe<9`4g0;C-P diff --git a/xv6-public/wc.sym b/xv6-public/wc.sym deleted file mode 100755 index 3b0a1cd..0000000 --- a/xv6-public/wc.sym +++ /dev/null @@ -1,63 +0,0 @@ -00000000 .text -0000093a .rodata -0000097c .eh_frame -00000be8 .data -00000c00 .bss -00000000 .comment -00000000 .debug_aranges -00000000 .debug_info -00000000 .debug_abbrev -00000000 .debug_line -00000000 .debug_str -00000000 .debug_loc -00000000 wc.c -00000000 ulib.c -000001bc stosb -00000000 printf.c -000004b1 putc -000004d3 printint -00000be8 digits.1372 -00000000 umalloc.c -00000c00 base -00000c08 freep -000007f7 morecore -00000000 -000001e1 strcpy -00000586 printf -000003cc memmove -00000459 mknod -000002c4 gets -00000491 getpid -00000857 malloc -000004a1 sleep -00000421 pipe -00000431 write -00000469 fstat -00000441 kill -00000481 chdir -00000449 exec -00000419 wait -00000429 read -00000461 unlink -00000000 wc -00000409 fork -00000499 sbrk -000004a9 uptime -00000bf9 __bss_start -00000277 memset -000000ed main -00000211 strcmp -00000489 dup -00000c40 buf -00000332 stat -00000bf9 _edata -00000e40 _end -00000471 link -00000411 exit -0000037f atoi -00000250 strlen -00000451 open -00000291 strchr -00000479 mkdir -00000439 close -00000716 free diff --git a/xv6-public/xv6.img b/xv6-public/xv6.img deleted file mode 100755 index 88a9655c71d5c09f345956db18151cac38c5bd6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5120000 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

)qwz1wmkvL2PcLJL?V-SRLCTw1o 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 z `ch`h0~<6njy{|gu}=^= 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 z1IBX8(fH7bU7z4(DF<=ZB1IBX8(fH7bU7z4(D zF<=ZB1IBX8(fH7bU7z4(DF<=ZB1IBX8(fH7bU z7z4(DF<=ZB1IBX8(fH7bU7z4(DF<=ZB1IBX8( zfH7bU7z4(DF<=ZB1IBX8(fH7bU7z4(DF<=ZB1IBX8(fH7bU7z4(DF<=ZB1IBX8(fH7bU7z4(DF<=ZB1IBX8(fH7bU7z4(DF<=ZB1IBX8(fH7bU7z4(DF<=ZB1IBX8(fH7bU7z4(DF<=ZB1IBX8(fH7bU7z4(DF<=ZB z1IBX8(fH7bU7z4(DF<=ZB1IBX8(fH7bU7z4(D zF<=ZB1IBX8(fH7bU7z4(DF<=ZB1IBX8(fH7bU z7z4(DF<=ZB1IBX8(fH7bU7z4(DF<=ZB1IBX8( zfH7bU7z4(DF<=ZB1IBX8(fH7bU7z4(DF<=ZB1IBX8(fH7bU7z4(DF<=ZB1IBX8(fH7bU7z4(DF<=ZB1IBX8(fH7bU7z4(DF<=ZB1IBX8(fH7bU7z4(DF<=ZB1IBX8(fH7bU7z4(DF<=ZB1IBX8(fH7bU7z4(DF<=ZB z1IBX8(fH7bU7z4(DF<=ZB1IBX8(fH7bU7z4(D zF<=ZB1IBX8(fH7bU7z4(DF<=ZB1IBX8(fH7bU z7z4(DF<=ZB1IBX9dhaEZ)000000P=rrgaii;95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=0qxKM2><{9fS~`c+Y#sl4Hz(Bz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM G+y??@Qi|&U diff --git a/xv6-public/zombie.asm b/xv6-public/zombie.asm deleted file mode 100755 index 24a1d21..0000000 --- a/xv6-public/zombie.asm +++ /dev/null @@ -1,1157 +0,0 @@ - -_zombie: file format elf32-i386 - - -Disassembly of section .text: - -00000000

: -#include "stat.h" -#include "user.h" - -int -main(void) -{ - 0: 8d 4c 24 04 lea 0x4(%esp),%ecx - 4: 83 e4 f0 and $0xfffffff0,%esp - 7: ff 71 fc pushl -0x4(%ecx) - a: 55 push %ebp - b: 89 e5 mov %esp,%ebp - d: 51 push %ecx - e: 83 ec 04 sub $0x4,%esp - if(fork() > 0) - 11: e8 63 02 00 00 call 279 - 16: 85 c0 test %eax,%eax - 18: 7e 0d jle 27 - sleep(5); // Let child exit before parent. - 1a: 83 ec 0c sub $0xc,%esp - 1d: 6a 05 push $0x5 - 1f: e8 ed 02 00 00 call 311 - 24: 83 c4 10 add $0x10,%esp - exit(); - 27: e8 55 02 00 00 call 281 - -0000002c : - "cc"); -} - -static inline void -stosb(void *addr, int data, int cnt) -{ - 2c: 55 push %ebp - 2d: 89 e5 mov %esp,%ebp - 2f: 57 push %edi - 30: 53 push %ebx - asm volatile("cld; rep stosb" : - 31: 8b 4d 08 mov 0x8(%ebp),%ecx - 34: 8b 55 10 mov 0x10(%ebp),%edx - 37: 8b 45 0c mov 0xc(%ebp),%eax - 3a: 89 cb mov %ecx,%ebx - 3c: 89 df mov %ebx,%edi - 3e: 89 d1 mov %edx,%ecx - 40: fc cld - 41: f3 aa rep stos %al,%es:(%edi) - 43: 89 ca mov %ecx,%edx - 45: 89 fb mov %edi,%ebx - 47: 89 5d 08 mov %ebx,0x8(%ebp) - 4a: 89 55 10 mov %edx,0x10(%ebp) - "=D" (addr), "=c" (cnt) : - "0" (addr), "1" (cnt), "a" (data) : - "memory", "cc"); -} - 4d: 5b pop %ebx - 4e: 5f pop %edi - 4f: 5d pop %ebp - 50: c3 ret - -00000051 : -#include "user.h" -#include "x86.h" - -char* -strcpy(char *s, char *t) -{ - 51: 55 push %ebp - 52: 89 e5 mov %esp,%ebp - 54: 83 ec 10 sub $0x10,%esp - char *os; - - os = s; - 57: 8b 45 08 mov 0x8(%ebp),%eax - 5a: 89 45 fc mov %eax,-0x4(%ebp) - while((*s++ = *t++) != 0) - 5d: 90 nop - 5e: 8b 45 08 mov 0x8(%ebp),%eax - 61: 8d 50 01 lea 0x1(%eax),%edx - 64: 89 55 08 mov %edx,0x8(%ebp) - 67: 8b 55 0c mov 0xc(%ebp),%edx - 6a: 8d 4a 01 lea 0x1(%edx),%ecx - 6d: 89 4d 0c mov %ecx,0xc(%ebp) - 70: 0f b6 12 movzbl (%edx),%edx - 73: 88 10 mov %dl,(%eax) - 75: 0f b6 00 movzbl (%eax),%eax - 78: 84 c0 test %al,%al - 7a: 75 e2 jne 5e - ; - return os; - 7c: 8b 45 fc mov -0x4(%ebp),%eax -} - 7f: c9 leave - 80: c3 ret - -00000081 : - -int -strcmp(const char *p, const char *q) -{ - 81: 55 push %ebp - 82: 89 e5 mov %esp,%ebp - while(*p && *p == *q) - 84: eb 08 jmp 8e - p++, q++; - 86: 83 45 08 01 addl $0x1,0x8(%ebp) - 8a: 83 45 0c 01 addl $0x1,0xc(%ebp) -} - -int -strcmp(const char *p, const char *q) -{ - while(*p && *p == *q) - 8e: 8b 45 08 mov 0x8(%ebp),%eax - 91: 0f b6 00 movzbl (%eax),%eax - 94: 84 c0 test %al,%al - 96: 74 10 je a8 - 98: 8b 45 08 mov 0x8(%ebp),%eax - 9b: 0f b6 10 movzbl (%eax),%edx - 9e: 8b 45 0c mov 0xc(%ebp),%eax - a1: 0f b6 00 movzbl (%eax),%eax - a4: 38 c2 cmp %al,%dl - a6: 74 de je 86 - p++, q++; - return (uchar)*p - (uchar)*q; - a8: 8b 45 08 mov 0x8(%ebp),%eax - ab: 0f b6 00 movzbl (%eax),%eax - ae: 0f b6 d0 movzbl %al,%edx - b1: 8b 45 0c mov 0xc(%ebp),%eax - b4: 0f b6 00 movzbl (%eax),%eax - b7: 0f b6 c0 movzbl %al,%eax - ba: 29 c2 sub %eax,%edx - bc: 89 d0 mov %edx,%eax -} - be: 5d pop %ebp - bf: c3 ret - -000000c0 : - -uint -strlen(char *s) -{ - c0: 55 push %ebp - c1: 89 e5 mov %esp,%ebp - c3: 83 ec 10 sub $0x10,%esp - int n; - - for(n = 0; s[n]; n++) - c6: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - cd: eb 04 jmp d3 - cf: 83 45 fc 01 addl $0x1,-0x4(%ebp) - d3: 8b 55 fc mov -0x4(%ebp),%edx - d6: 8b 45 08 mov 0x8(%ebp),%eax - d9: 01 d0 add %edx,%eax - db: 0f b6 00 movzbl (%eax),%eax - de: 84 c0 test %al,%al - e0: 75 ed jne cf - ; - return n; - e2: 8b 45 fc mov -0x4(%ebp),%eax -} - e5: c9 leave - e6: c3 ret - -000000e7 : - -void* -memset(void *dst, int c, uint n) -{ - e7: 55 push %ebp - e8: 89 e5 mov %esp,%ebp - stosb(dst, c, n); - ea: 8b 45 10 mov 0x10(%ebp),%eax - ed: 50 push %eax - ee: ff 75 0c pushl 0xc(%ebp) - f1: ff 75 08 pushl 0x8(%ebp) - f4: e8 33 ff ff ff call 2c - f9: 83 c4 0c add $0xc,%esp - return dst; - fc: 8b 45 08 mov 0x8(%ebp),%eax -} - ff: c9 leave - 100: c3 ret - -00000101 : - -char* -strchr(const char *s, char c) -{ - 101: 55 push %ebp - 102: 89 e5 mov %esp,%ebp - 104: 83 ec 04 sub $0x4,%esp - 107: 8b 45 0c mov 0xc(%ebp),%eax - 10a: 88 45 fc mov %al,-0x4(%ebp) - for(; *s; s++) - 10d: eb 14 jmp 123 - if(*s == c) - 10f: 8b 45 08 mov 0x8(%ebp),%eax - 112: 0f b6 00 movzbl (%eax),%eax - 115: 3a 45 fc cmp -0x4(%ebp),%al - 118: 75 05 jne 11f - return (char*)s; - 11a: 8b 45 08 mov 0x8(%ebp),%eax - 11d: eb 13 jmp 132 -} - -char* -strchr(const char *s, char c) -{ - for(; *s; s++) - 11f: 83 45 08 01 addl $0x1,0x8(%ebp) - 123: 8b 45 08 mov 0x8(%ebp),%eax - 126: 0f b6 00 movzbl (%eax),%eax - 129: 84 c0 test %al,%al - 12b: 75 e2 jne 10f - if(*s == c) - return (char*)s; - return 0; - 12d: b8 00 00 00 00 mov $0x0,%eax -} - 132: c9 leave - 133: c3 ret - -00000134 : - -char* -gets(char *buf, int max) -{ - 134: 55 push %ebp - 135: 89 e5 mov %esp,%ebp - 137: 83 ec 18 sub $0x18,%esp - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - 13a: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - 141: eb 44 jmp 187 - cc = read(0, &c, 1); - 143: 83 ec 04 sub $0x4,%esp - 146: 6a 01 push $0x1 - 148: 8d 45 ef lea -0x11(%ebp),%eax - 14b: 50 push %eax - 14c: 6a 00 push $0x0 - 14e: e8 46 01 00 00 call 299 - 153: 83 c4 10 add $0x10,%esp - 156: 89 45 f0 mov %eax,-0x10(%ebp) - if(cc < 1) - 159: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 15d: 7f 02 jg 161 - break; - 15f: eb 31 jmp 192 - buf[i++] = c; - 161: 8b 45 f4 mov -0xc(%ebp),%eax - 164: 8d 50 01 lea 0x1(%eax),%edx - 167: 89 55 f4 mov %edx,-0xc(%ebp) - 16a: 89 c2 mov %eax,%edx - 16c: 8b 45 08 mov 0x8(%ebp),%eax - 16f: 01 c2 add %eax,%edx - 171: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 175: 88 02 mov %al,(%edx) - if(c == '\n' || c == '\r') - 177: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 17b: 3c 0a cmp $0xa,%al - 17d: 74 13 je 192 - 17f: 0f b6 45 ef movzbl -0x11(%ebp),%eax - 183: 3c 0d cmp $0xd,%al - 185: 74 0b je 192 -gets(char *buf, int max) -{ - int i, cc; - char c; - - for(i=0; i+1 < max; ){ - 187: 8b 45 f4 mov -0xc(%ebp),%eax - 18a: 83 c0 01 add $0x1,%eax - 18d: 3b 45 0c cmp 0xc(%ebp),%eax - 190: 7c b1 jl 143 - break; - buf[i++] = c; - if(c == '\n' || c == '\r') - break; - } - buf[i] = '\0'; - 192: 8b 55 f4 mov -0xc(%ebp),%edx - 195: 8b 45 08 mov 0x8(%ebp),%eax - 198: 01 d0 add %edx,%eax - 19a: c6 00 00 movb $0x0,(%eax) - return buf; - 19d: 8b 45 08 mov 0x8(%ebp),%eax -} - 1a0: c9 leave - 1a1: c3 ret - -000001a2 : - -int -stat(char *n, struct stat *st) -{ - 1a2: 55 push %ebp - 1a3: 89 e5 mov %esp,%ebp - 1a5: 83 ec 18 sub $0x18,%esp - int fd; - int r; - - fd = open(n, O_RDONLY); - 1a8: 83 ec 08 sub $0x8,%esp - 1ab: 6a 00 push $0x0 - 1ad: ff 75 08 pushl 0x8(%ebp) - 1b0: e8 0c 01 00 00 call 2c1 - 1b5: 83 c4 10 add $0x10,%esp - 1b8: 89 45 f4 mov %eax,-0xc(%ebp) - if(fd < 0) - 1bb: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 1bf: 79 07 jns 1c8 - return -1; - 1c1: b8 ff ff ff ff mov $0xffffffff,%eax - 1c6: eb 25 jmp 1ed - r = fstat(fd, st); - 1c8: 83 ec 08 sub $0x8,%esp - 1cb: ff 75 0c pushl 0xc(%ebp) - 1ce: ff 75 f4 pushl -0xc(%ebp) - 1d1: e8 03 01 00 00 call 2d9 - 1d6: 83 c4 10 add $0x10,%esp - 1d9: 89 45 f0 mov %eax,-0x10(%ebp) - close(fd); - 1dc: 83 ec 0c sub $0xc,%esp - 1df: ff 75 f4 pushl -0xc(%ebp) - 1e2: e8 c2 00 00 00 call 2a9 - 1e7: 83 c4 10 add $0x10,%esp - return r; - 1ea: 8b 45 f0 mov -0x10(%ebp),%eax -} - 1ed: c9 leave - 1ee: c3 ret - -000001ef : - -int -atoi(const char *s) -{ - 1ef: 55 push %ebp - 1f0: 89 e5 mov %esp,%ebp - 1f2: 83 ec 10 sub $0x10,%esp - int n; - - n = 0; - 1f5: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) - while('0' <= *s && *s <= '9') - 1fc: eb 25 jmp 223 - n = n*10 + *s++ - '0'; - 1fe: 8b 55 fc mov -0x4(%ebp),%edx - 201: 89 d0 mov %edx,%eax - 203: c1 e0 02 shl $0x2,%eax - 206: 01 d0 add %edx,%eax - 208: 01 c0 add %eax,%eax - 20a: 89 c1 mov %eax,%ecx - 20c: 8b 45 08 mov 0x8(%ebp),%eax - 20f: 8d 50 01 lea 0x1(%eax),%edx - 212: 89 55 08 mov %edx,0x8(%ebp) - 215: 0f b6 00 movzbl (%eax),%eax - 218: 0f be c0 movsbl %al,%eax - 21b: 01 c8 add %ecx,%eax - 21d: 83 e8 30 sub $0x30,%eax - 220: 89 45 fc mov %eax,-0x4(%ebp) -atoi(const char *s) -{ - int n; - - n = 0; - while('0' <= *s && *s <= '9') - 223: 8b 45 08 mov 0x8(%ebp),%eax - 226: 0f b6 00 movzbl (%eax),%eax - 229: 3c 2f cmp $0x2f,%al - 22b: 7e 0a jle 237 - 22d: 8b 45 08 mov 0x8(%ebp),%eax - 230: 0f b6 00 movzbl (%eax),%eax - 233: 3c 39 cmp $0x39,%al - 235: 7e c7 jle 1fe - n = n*10 + *s++ - '0'; - return n; - 237: 8b 45 fc mov -0x4(%ebp),%eax -} - 23a: c9 leave - 23b: c3 ret - -0000023c : - -void* -memmove(void *vdst, void *vsrc, int n) -{ - 23c: 55 push %ebp - 23d: 89 e5 mov %esp,%ebp - 23f: 83 ec 10 sub $0x10,%esp - char *dst, *src; - - dst = vdst; - 242: 8b 45 08 mov 0x8(%ebp),%eax - 245: 89 45 fc mov %eax,-0x4(%ebp) - src = vsrc; - 248: 8b 45 0c mov 0xc(%ebp),%eax - 24b: 89 45 f8 mov %eax,-0x8(%ebp) - while(n-- > 0) - 24e: eb 17 jmp 267 - *dst++ = *src++; - 250: 8b 45 fc mov -0x4(%ebp),%eax - 253: 8d 50 01 lea 0x1(%eax),%edx - 256: 89 55 fc mov %edx,-0x4(%ebp) - 259: 8b 55 f8 mov -0x8(%ebp),%edx - 25c: 8d 4a 01 lea 0x1(%edx),%ecx - 25f: 89 4d f8 mov %ecx,-0x8(%ebp) - 262: 0f b6 12 movzbl (%edx),%edx - 265: 88 10 mov %dl,(%eax) -{ - char *dst, *src; - - dst = vdst; - src = vsrc; - while(n-- > 0) - 267: 8b 45 10 mov 0x10(%ebp),%eax - 26a: 8d 50 ff lea -0x1(%eax),%edx - 26d: 89 55 10 mov %edx,0x10(%ebp) - 270: 85 c0 test %eax,%eax - 272: 7f dc jg 250 - *dst++ = *src++; - return vdst; - 274: 8b 45 08 mov 0x8(%ebp),%eax -} - 277: c9 leave - 278: c3 ret - -00000279 : - name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 279: b8 01 00 00 00 mov $0x1,%eax - 27e: cd 40 int $0x40 - 280: c3 ret - -00000281 : -SYSCALL(exit) - 281: b8 02 00 00 00 mov $0x2,%eax - 286: cd 40 int $0x40 - 288: c3 ret - -00000289 : -SYSCALL(wait) - 289: b8 03 00 00 00 mov $0x3,%eax - 28e: cd 40 int $0x40 - 290: c3 ret - -00000291 : -SYSCALL(pipe) - 291: b8 04 00 00 00 mov $0x4,%eax - 296: cd 40 int $0x40 - 298: c3 ret - -00000299 : -SYSCALL(read) - 299: b8 05 00 00 00 mov $0x5,%eax - 29e: cd 40 int $0x40 - 2a0: c3 ret - -000002a1 : -SYSCALL(write) - 2a1: b8 10 00 00 00 mov $0x10,%eax - 2a6: cd 40 int $0x40 - 2a8: c3 ret - -000002a9 : -SYSCALL(close) - 2a9: b8 15 00 00 00 mov $0x15,%eax - 2ae: cd 40 int $0x40 - 2b0: c3 ret - -000002b1 : -SYSCALL(kill) - 2b1: b8 06 00 00 00 mov $0x6,%eax - 2b6: cd 40 int $0x40 - 2b8: c3 ret - -000002b9 : -SYSCALL(exec) - 2b9: b8 07 00 00 00 mov $0x7,%eax - 2be: cd 40 int $0x40 - 2c0: c3 ret - -000002c1 : -SYSCALL(open) - 2c1: b8 0f 00 00 00 mov $0xf,%eax - 2c6: cd 40 int $0x40 - 2c8: c3 ret - -000002c9 : -SYSCALL(mknod) - 2c9: b8 11 00 00 00 mov $0x11,%eax - 2ce: cd 40 int $0x40 - 2d0: c3 ret - -000002d1 : -SYSCALL(unlink) - 2d1: b8 12 00 00 00 mov $0x12,%eax - 2d6: cd 40 int $0x40 - 2d8: c3 ret - -000002d9 : -SYSCALL(fstat) - 2d9: b8 08 00 00 00 mov $0x8,%eax - 2de: cd 40 int $0x40 - 2e0: c3 ret - -000002e1 : -SYSCALL(link) - 2e1: b8 13 00 00 00 mov $0x13,%eax - 2e6: cd 40 int $0x40 - 2e8: c3 ret - -000002e9 : -SYSCALL(mkdir) - 2e9: b8 14 00 00 00 mov $0x14,%eax - 2ee: cd 40 int $0x40 - 2f0: c3 ret - -000002f1 : -SYSCALL(chdir) - 2f1: b8 09 00 00 00 mov $0x9,%eax - 2f6: cd 40 int $0x40 - 2f8: c3 ret - -000002f9 : -SYSCALL(dup) - 2f9: b8 0a 00 00 00 mov $0xa,%eax - 2fe: cd 40 int $0x40 - 300: c3 ret - -00000301 : -SYSCALL(getpid) - 301: b8 0b 00 00 00 mov $0xb,%eax - 306: cd 40 int $0x40 - 308: c3 ret - -00000309 : -SYSCALL(sbrk) - 309: b8 0c 00 00 00 mov $0xc,%eax - 30e: cd 40 int $0x40 - 310: c3 ret - -00000311 : -SYSCALL(sleep) - 311: b8 0d 00 00 00 mov $0xd,%eax - 316: cd 40 int $0x40 - 318: c3 ret - -00000319 : -SYSCALL(uptime) - 319: b8 0e 00 00 00 mov $0xe,%eax - 31e: cd 40 int $0x40 - 320: c3 ret - -00000321 : -#include "stat.h" -#include "user.h" - -static void -putc(int fd, char c) -{ - 321: 55 push %ebp - 322: 89 e5 mov %esp,%ebp - 324: 83 ec 18 sub $0x18,%esp - 327: 8b 45 0c mov 0xc(%ebp),%eax - 32a: 88 45 f4 mov %al,-0xc(%ebp) - write(fd, &c, 1); - 32d: 83 ec 04 sub $0x4,%esp - 330: 6a 01 push $0x1 - 332: 8d 45 f4 lea -0xc(%ebp),%eax - 335: 50 push %eax - 336: ff 75 08 pushl 0x8(%ebp) - 339: e8 63 ff ff ff call 2a1 - 33e: 83 c4 10 add $0x10,%esp -} - 341: c9 leave - 342: c3 ret - -00000343 : - -static void -printint(int fd, int xx, int base, int sgn) -{ - 343: 55 push %ebp - 344: 89 e5 mov %esp,%ebp - 346: 53 push %ebx - 347: 83 ec 24 sub $0x24,%esp - static char digits[] = "0123456789ABCDEF"; - char buf[16]; - int i, neg; - uint x; - - neg = 0; - 34a: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - if(sgn && xx < 0){ - 351: 83 7d 14 00 cmpl $0x0,0x14(%ebp) - 355: 74 17 je 36e - 357: 83 7d 0c 00 cmpl $0x0,0xc(%ebp) - 35b: 79 11 jns 36e - neg = 1; - 35d: c7 45 f0 01 00 00 00 movl $0x1,-0x10(%ebp) - x = -xx; - 364: 8b 45 0c mov 0xc(%ebp),%eax - 367: f7 d8 neg %eax - 369: 89 45 ec mov %eax,-0x14(%ebp) - 36c: eb 06 jmp 374 - } else { - x = xx; - 36e: 8b 45 0c mov 0xc(%ebp),%eax - 371: 89 45 ec mov %eax,-0x14(%ebp) - } - - i = 0; - 374: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) - do{ - buf[i++] = digits[x % base]; - 37b: 8b 4d f4 mov -0xc(%ebp),%ecx - 37e: 8d 41 01 lea 0x1(%ecx),%eax - 381: 89 45 f4 mov %eax,-0xc(%ebp) - 384: 8b 5d 10 mov 0x10(%ebp),%ebx - 387: 8b 45 ec mov -0x14(%ebp),%eax - 38a: ba 00 00 00 00 mov $0x0,%edx - 38f: f7 f3 div %ebx - 391: 89 d0 mov %edx,%eax - 393: 0f b6 80 fc 09 00 00 movzbl 0x9fc(%eax),%eax - 39a: 88 44 0d dc mov %al,-0x24(%ebp,%ecx,1) - }while((x /= base) != 0); - 39e: 8b 5d 10 mov 0x10(%ebp),%ebx - 3a1: 8b 45 ec mov -0x14(%ebp),%eax - 3a4: ba 00 00 00 00 mov $0x0,%edx - 3a9: f7 f3 div %ebx - 3ab: 89 45 ec mov %eax,-0x14(%ebp) - 3ae: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 3b2: 75 c7 jne 37b - if(neg) - 3b4: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 3b8: 74 0e je 3c8 - buf[i++] = '-'; - 3ba: 8b 45 f4 mov -0xc(%ebp),%eax - 3bd: 8d 50 01 lea 0x1(%eax),%edx - 3c0: 89 55 f4 mov %edx,-0xc(%ebp) - 3c3: c6 44 05 dc 2d movb $0x2d,-0x24(%ebp,%eax,1) - - while(--i >= 0) - 3c8: eb 1d jmp 3e7 - putc(fd, buf[i]); - 3ca: 8d 55 dc lea -0x24(%ebp),%edx - 3cd: 8b 45 f4 mov -0xc(%ebp),%eax - 3d0: 01 d0 add %edx,%eax - 3d2: 0f b6 00 movzbl (%eax),%eax - 3d5: 0f be c0 movsbl %al,%eax - 3d8: 83 ec 08 sub $0x8,%esp - 3db: 50 push %eax - 3dc: ff 75 08 pushl 0x8(%ebp) - 3df: e8 3d ff ff ff call 321 - 3e4: 83 c4 10 add $0x10,%esp - buf[i++] = digits[x % base]; - }while((x /= base) != 0); - if(neg) - buf[i++] = '-'; - - while(--i >= 0) - 3e7: 83 6d f4 01 subl $0x1,-0xc(%ebp) - 3eb: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 3ef: 79 d9 jns 3ca - putc(fd, buf[i]); -} - 3f1: 8b 5d fc mov -0x4(%ebp),%ebx - 3f4: c9 leave - 3f5: c3 ret - -000003f6 : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void -printf(int fd, char *fmt, ...) -{ - 3f6: 55 push %ebp - 3f7: 89 e5 mov %esp,%ebp - 3f9: 83 ec 28 sub $0x28,%esp - char *s; - int c, i, state; - uint *ap; - - state = 0; - 3fc: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - ap = (uint*)(void*)&fmt + 1; - 403: 8d 45 0c lea 0xc(%ebp),%eax - 406: 83 c0 04 add $0x4,%eax - 409: 89 45 e8 mov %eax,-0x18(%ebp) - for(i = 0; fmt[i]; i++){ - 40c: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) - 413: e9 59 01 00 00 jmp 571 - c = fmt[i] & 0xff; - 418: 8b 55 0c mov 0xc(%ebp),%edx - 41b: 8b 45 f0 mov -0x10(%ebp),%eax - 41e: 01 d0 add %edx,%eax - 420: 0f b6 00 movzbl (%eax),%eax - 423: 0f be c0 movsbl %al,%eax - 426: 25 ff 00 00 00 and $0xff,%eax - 42b: 89 45 e4 mov %eax,-0x1c(%ebp) - if(state == 0){ - 42e: 83 7d ec 00 cmpl $0x0,-0x14(%ebp) - 432: 75 2c jne 460 - if(c == '%'){ - 434: 83 7d e4 25 cmpl $0x25,-0x1c(%ebp) - 438: 75 0c jne 446 - state = '%'; - 43a: c7 45 ec 25 00 00 00 movl $0x25,-0x14(%ebp) - 441: e9 27 01 00 00 jmp 56d - } else { - putc(fd, c); - 446: 8b 45 e4 mov -0x1c(%ebp),%eax - 449: 0f be c0 movsbl %al,%eax - 44c: 83 ec 08 sub $0x8,%esp - 44f: 50 push %eax - 450: ff 75 08 pushl 0x8(%ebp) - 453: e8 c9 fe ff ff call 321 - 458: 83 c4 10 add $0x10,%esp - 45b: e9 0d 01 00 00 jmp 56d - } - } else if(state == '%'){ - 460: 83 7d ec 25 cmpl $0x25,-0x14(%ebp) - 464: 0f 85 03 01 00 00 jne 56d - if(c == 'd'){ - 46a: 83 7d e4 64 cmpl $0x64,-0x1c(%ebp) - 46e: 75 1e jne 48e - printint(fd, *ap, 10, 1); - 470: 8b 45 e8 mov -0x18(%ebp),%eax - 473: 8b 00 mov (%eax),%eax - 475: 6a 01 push $0x1 - 477: 6a 0a push $0xa - 479: 50 push %eax - 47a: ff 75 08 pushl 0x8(%ebp) - 47d: e8 c1 fe ff ff call 343 - 482: 83 c4 10 add $0x10,%esp - ap++; - 485: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 489: e9 d8 00 00 00 jmp 566 - } else if(c == 'x' || c == 'p'){ - 48e: 83 7d e4 78 cmpl $0x78,-0x1c(%ebp) - 492: 74 06 je 49a - 494: 83 7d e4 70 cmpl $0x70,-0x1c(%ebp) - 498: 75 1e jne 4b8 - printint(fd, *ap, 16, 0); - 49a: 8b 45 e8 mov -0x18(%ebp),%eax - 49d: 8b 00 mov (%eax),%eax - 49f: 6a 00 push $0x0 - 4a1: 6a 10 push $0x10 - 4a3: 50 push %eax - 4a4: ff 75 08 pushl 0x8(%ebp) - 4a7: e8 97 fe ff ff call 343 - 4ac: 83 c4 10 add $0x10,%esp - ap++; - 4af: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 4b3: e9 ae 00 00 00 jmp 566 - } else if(c == 's'){ - 4b8: 83 7d e4 73 cmpl $0x73,-0x1c(%ebp) - 4bc: 75 43 jne 501 - s = (char*)*ap; - 4be: 8b 45 e8 mov -0x18(%ebp),%eax - 4c1: 8b 00 mov (%eax),%eax - 4c3: 89 45 f4 mov %eax,-0xc(%ebp) - ap++; - 4c6: 83 45 e8 04 addl $0x4,-0x18(%ebp) - if(s == 0) - 4ca: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 4ce: 75 07 jne 4d7 - s = "(null)"; - 4d0: c7 45 f4 aa 07 00 00 movl $0x7aa,-0xc(%ebp) - while(*s != 0){ - 4d7: eb 1c jmp 4f5 - putc(fd, *s); - 4d9: 8b 45 f4 mov -0xc(%ebp),%eax - 4dc: 0f b6 00 movzbl (%eax),%eax - 4df: 0f be c0 movsbl %al,%eax - 4e2: 83 ec 08 sub $0x8,%esp - 4e5: 50 push %eax - 4e6: ff 75 08 pushl 0x8(%ebp) - 4e9: e8 33 fe ff ff call 321 - 4ee: 83 c4 10 add $0x10,%esp - s++; - 4f1: 83 45 f4 01 addl $0x1,-0xc(%ebp) - } else if(c == 's'){ - s = (char*)*ap; - ap++; - if(s == 0) - s = "(null)"; - while(*s != 0){ - 4f5: 8b 45 f4 mov -0xc(%ebp),%eax - 4f8: 0f b6 00 movzbl (%eax),%eax - 4fb: 84 c0 test %al,%al - 4fd: 75 da jne 4d9 - 4ff: eb 65 jmp 566 - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 501: 83 7d e4 63 cmpl $0x63,-0x1c(%ebp) - 505: 75 1d jne 524 - putc(fd, *ap); - 507: 8b 45 e8 mov -0x18(%ebp),%eax - 50a: 8b 00 mov (%eax),%eax - 50c: 0f be c0 movsbl %al,%eax - 50f: 83 ec 08 sub $0x8,%esp - 512: 50 push %eax - 513: ff 75 08 pushl 0x8(%ebp) - 516: e8 06 fe ff ff call 321 - 51b: 83 c4 10 add $0x10,%esp - ap++; - 51e: 83 45 e8 04 addl $0x4,-0x18(%ebp) - 522: eb 42 jmp 566 - } else if(c == '%'){ - 524: 83 7d e4 25 cmpl $0x25,-0x1c(%ebp) - 528: 75 17 jne 541 - putc(fd, c); - 52a: 8b 45 e4 mov -0x1c(%ebp),%eax - 52d: 0f be c0 movsbl %al,%eax - 530: 83 ec 08 sub $0x8,%esp - 533: 50 push %eax - 534: ff 75 08 pushl 0x8(%ebp) - 537: e8 e5 fd ff ff call 321 - 53c: 83 c4 10 add $0x10,%esp - 53f: eb 25 jmp 566 - } else { - // Unknown % sequence. Print it to draw attention. - putc(fd, '%'); - 541: 83 ec 08 sub $0x8,%esp - 544: 6a 25 push $0x25 - 546: ff 75 08 pushl 0x8(%ebp) - 549: e8 d3 fd ff ff call 321 - 54e: 83 c4 10 add $0x10,%esp - putc(fd, c); - 551: 8b 45 e4 mov -0x1c(%ebp),%eax - 554: 0f be c0 movsbl %al,%eax - 557: 83 ec 08 sub $0x8,%esp - 55a: 50 push %eax - 55b: ff 75 08 pushl 0x8(%ebp) - 55e: e8 be fd ff ff call 321 - 563: 83 c4 10 add $0x10,%esp - } - state = 0; - 566: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp) - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for(i = 0; fmt[i]; i++){ - 56d: 83 45 f0 01 addl $0x1,-0x10(%ebp) - 571: 8b 55 0c mov 0xc(%ebp),%edx - 574: 8b 45 f0 mov -0x10(%ebp),%eax - 577: 01 d0 add %edx,%eax - 579: 0f b6 00 movzbl (%eax),%eax - 57c: 84 c0 test %al,%al - 57e: 0f 85 94 fe ff ff jne 418 - putc(fd, c); - } - state = 0; - } - } -} - 584: c9 leave - 585: c3 ret - -00000586 : -static Header base; -static Header *freep; - -void -free(void *ap) -{ - 586: 55 push %ebp - 587: 89 e5 mov %esp,%ebp - 589: 83 ec 10 sub $0x10,%esp - Header *bp, *p; - - bp = (Header*)ap - 1; - 58c: 8b 45 08 mov 0x8(%ebp),%eax - 58f: 83 e8 08 sub $0x8,%eax - 592: 89 45 f8 mov %eax,-0x8(%ebp) - for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 595: a1 18 0a 00 00 mov 0xa18,%eax - 59a: 89 45 fc mov %eax,-0x4(%ebp) - 59d: eb 24 jmp 5c3 - if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 59f: 8b 45 fc mov -0x4(%ebp),%eax - 5a2: 8b 00 mov (%eax),%eax - 5a4: 3b 45 fc cmp -0x4(%ebp),%eax - 5a7: 77 12 ja 5bb - 5a9: 8b 45 f8 mov -0x8(%ebp),%eax - 5ac: 3b 45 fc cmp -0x4(%ebp),%eax - 5af: 77 24 ja 5d5 - 5b1: 8b 45 fc mov -0x4(%ebp),%eax - 5b4: 8b 00 mov (%eax),%eax - 5b6: 3b 45 f8 cmp -0x8(%ebp),%eax - 5b9: 77 1a ja 5d5 -free(void *ap) -{ - Header *bp, *p; - - bp = (Header*)ap - 1; - for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 5bb: 8b 45 fc mov -0x4(%ebp),%eax - 5be: 8b 00 mov (%eax),%eax - 5c0: 89 45 fc mov %eax,-0x4(%ebp) - 5c3: 8b 45 f8 mov -0x8(%ebp),%eax - 5c6: 3b 45 fc cmp -0x4(%ebp),%eax - 5c9: 76 d4 jbe 59f - 5cb: 8b 45 fc mov -0x4(%ebp),%eax - 5ce: 8b 00 mov (%eax),%eax - 5d0: 3b 45 f8 cmp -0x8(%ebp),%eax - 5d3: 76 ca jbe 59f - if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - break; - if(bp + bp->s.size == p->s.ptr){ - 5d5: 8b 45 f8 mov -0x8(%ebp),%eax - 5d8: 8b 40 04 mov 0x4(%eax),%eax - 5db: 8d 14 c5 00 00 00 00 lea 0x0(,%eax,8),%edx - 5e2: 8b 45 f8 mov -0x8(%ebp),%eax - 5e5: 01 c2 add %eax,%edx - 5e7: 8b 45 fc mov -0x4(%ebp),%eax - 5ea: 8b 00 mov (%eax),%eax - 5ec: 39 c2 cmp %eax,%edx - 5ee: 75 24 jne 614 - bp->s.size += p->s.ptr->s.size; - 5f0: 8b 45 f8 mov -0x8(%ebp),%eax - 5f3: 8b 50 04 mov 0x4(%eax),%edx - 5f6: 8b 45 fc mov -0x4(%ebp),%eax - 5f9: 8b 00 mov (%eax),%eax - 5fb: 8b 40 04 mov 0x4(%eax),%eax - 5fe: 01 c2 add %eax,%edx - 600: 8b 45 f8 mov -0x8(%ebp),%eax - 603: 89 50 04 mov %edx,0x4(%eax) - bp->s.ptr = p->s.ptr->s.ptr; - 606: 8b 45 fc mov -0x4(%ebp),%eax - 609: 8b 00 mov (%eax),%eax - 60b: 8b 10 mov (%eax),%edx - 60d: 8b 45 f8 mov -0x8(%ebp),%eax - 610: 89 10 mov %edx,(%eax) - 612: eb 0a jmp 61e - } else - bp->s.ptr = p->s.ptr; - 614: 8b 45 fc mov -0x4(%ebp),%eax - 617: 8b 10 mov (%eax),%edx - 619: 8b 45 f8 mov -0x8(%ebp),%eax - 61c: 89 10 mov %edx,(%eax) - if(p + p->s.size == bp){ - 61e: 8b 45 fc mov -0x4(%ebp),%eax - 621: 8b 40 04 mov 0x4(%eax),%eax - 624: 8d 14 c5 00 00 00 00 lea 0x0(,%eax,8),%edx - 62b: 8b 45 fc mov -0x4(%ebp),%eax - 62e: 01 d0 add %edx,%eax - 630: 3b 45 f8 cmp -0x8(%ebp),%eax - 633: 75 20 jne 655 - p->s.size += bp->s.size; - 635: 8b 45 fc mov -0x4(%ebp),%eax - 638: 8b 50 04 mov 0x4(%eax),%edx - 63b: 8b 45 f8 mov -0x8(%ebp),%eax - 63e: 8b 40 04 mov 0x4(%eax),%eax - 641: 01 c2 add %eax,%edx - 643: 8b 45 fc mov -0x4(%ebp),%eax - 646: 89 50 04 mov %edx,0x4(%eax) - p->s.ptr = bp->s.ptr; - 649: 8b 45 f8 mov -0x8(%ebp),%eax - 64c: 8b 10 mov (%eax),%edx - 64e: 8b 45 fc mov -0x4(%ebp),%eax - 651: 89 10 mov %edx,(%eax) - 653: eb 08 jmp 65d - } else - p->s.ptr = bp; - 655: 8b 45 fc mov -0x4(%ebp),%eax - 658: 8b 55 f8 mov -0x8(%ebp),%edx - 65b: 89 10 mov %edx,(%eax) - freep = p; - 65d: 8b 45 fc mov -0x4(%ebp),%eax - 660: a3 18 0a 00 00 mov %eax,0xa18 -} - 665: c9 leave - 666: c3 ret - -00000667 : - -static Header* -morecore(uint nu) -{ - 667: 55 push %ebp - 668: 89 e5 mov %esp,%ebp - 66a: 83 ec 18 sub $0x18,%esp - char *p; - Header *hp; - - if(nu < 4096) - 66d: 81 7d 08 ff 0f 00 00 cmpl $0xfff,0x8(%ebp) - 674: 77 07 ja 67d - nu = 4096; - 676: c7 45 08 00 10 00 00 movl $0x1000,0x8(%ebp) - p = sbrk(nu * sizeof(Header)); - 67d: 8b 45 08 mov 0x8(%ebp),%eax - 680: c1 e0 03 shl $0x3,%eax - 683: 83 ec 0c sub $0xc,%esp - 686: 50 push %eax - 687: e8 7d fc ff ff call 309 - 68c: 83 c4 10 add $0x10,%esp - 68f: 89 45 f4 mov %eax,-0xc(%ebp) - if(p == (char*)-1) - 692: 83 7d f4 ff cmpl $0xffffffff,-0xc(%ebp) - 696: 75 07 jne 69f - return 0; - 698: b8 00 00 00 00 mov $0x0,%eax - 69d: eb 26 jmp 6c5 - hp = (Header*)p; - 69f: 8b 45 f4 mov -0xc(%ebp),%eax - 6a2: 89 45 f0 mov %eax,-0x10(%ebp) - hp->s.size = nu; - 6a5: 8b 45 f0 mov -0x10(%ebp),%eax - 6a8: 8b 55 08 mov 0x8(%ebp),%edx - 6ab: 89 50 04 mov %edx,0x4(%eax) - free((void*)(hp + 1)); - 6ae: 8b 45 f0 mov -0x10(%ebp),%eax - 6b1: 83 c0 08 add $0x8,%eax - 6b4: 83 ec 0c sub $0xc,%esp - 6b7: 50 push %eax - 6b8: e8 c9 fe ff ff call 586 - 6bd: 83 c4 10 add $0x10,%esp - return freep; - 6c0: a1 18 0a 00 00 mov 0xa18,%eax -} - 6c5: c9 leave - 6c6: c3 ret - -000006c7 : - -void* -malloc(uint nbytes) -{ - 6c7: 55 push %ebp - 6c8: 89 e5 mov %esp,%ebp - 6ca: 83 ec 18 sub $0x18,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 6cd: 8b 45 08 mov 0x8(%ebp),%eax - 6d0: 83 c0 07 add $0x7,%eax - 6d3: c1 e8 03 shr $0x3,%eax - 6d6: 83 c0 01 add $0x1,%eax - 6d9: 89 45 ec mov %eax,-0x14(%ebp) - if((prevp = freep) == 0){ - 6dc: a1 18 0a 00 00 mov 0xa18,%eax - 6e1: 89 45 f0 mov %eax,-0x10(%ebp) - 6e4: 83 7d f0 00 cmpl $0x0,-0x10(%ebp) - 6e8: 75 23 jne 70d - base.s.ptr = freep = prevp = &base; - 6ea: c7 45 f0 10 0a 00 00 movl $0xa10,-0x10(%ebp) - 6f1: 8b 45 f0 mov -0x10(%ebp),%eax - 6f4: a3 18 0a 00 00 mov %eax,0xa18 - 6f9: a1 18 0a 00 00 mov 0xa18,%eax - 6fe: a3 10 0a 00 00 mov %eax,0xa10 - base.s.size = 0; - 703: c7 05 14 0a 00 00 00 movl $0x0,0xa14 - 70a: 00 00 00 - } - for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 70d: 8b 45 f0 mov -0x10(%ebp),%eax - 710: 8b 00 mov (%eax),%eax - 712: 89 45 f4 mov %eax,-0xc(%ebp) - if(p->s.size >= nunits){ - 715: 8b 45 f4 mov -0xc(%ebp),%eax - 718: 8b 40 04 mov 0x4(%eax),%eax - 71b: 3b 45 ec cmp -0x14(%ebp),%eax - 71e: 72 4d jb 76d - if(p->s.size == nunits) - 720: 8b 45 f4 mov -0xc(%ebp),%eax - 723: 8b 40 04 mov 0x4(%eax),%eax - 726: 3b 45 ec cmp -0x14(%ebp),%eax - 729: 75 0c jne 737 - prevp->s.ptr = p->s.ptr; - 72b: 8b 45 f4 mov -0xc(%ebp),%eax - 72e: 8b 10 mov (%eax),%edx - 730: 8b 45 f0 mov -0x10(%ebp),%eax - 733: 89 10 mov %edx,(%eax) - 735: eb 26 jmp 75d - else { - p->s.size -= nunits; - 737: 8b 45 f4 mov -0xc(%ebp),%eax - 73a: 8b 40 04 mov 0x4(%eax),%eax - 73d: 2b 45 ec sub -0x14(%ebp),%eax - 740: 89 c2 mov %eax,%edx - 742: 8b 45 f4 mov -0xc(%ebp),%eax - 745: 89 50 04 mov %edx,0x4(%eax) - p += p->s.size; - 748: 8b 45 f4 mov -0xc(%ebp),%eax - 74b: 8b 40 04 mov 0x4(%eax),%eax - 74e: c1 e0 03 shl $0x3,%eax - 751: 01 45 f4 add %eax,-0xc(%ebp) - p->s.size = nunits; - 754: 8b 45 f4 mov -0xc(%ebp),%eax - 757: 8b 55 ec mov -0x14(%ebp),%edx - 75a: 89 50 04 mov %edx,0x4(%eax) - } - freep = prevp; - 75d: 8b 45 f0 mov -0x10(%ebp),%eax - 760: a3 18 0a 00 00 mov %eax,0xa18 - return (void*)(p + 1); - 765: 8b 45 f4 mov -0xc(%ebp),%eax - 768: 83 c0 08 add $0x8,%eax - 76b: eb 3b jmp 7a8 - } - if(p == freep) - 76d: a1 18 0a 00 00 mov 0xa18,%eax - 772: 39 45 f4 cmp %eax,-0xc(%ebp) - 775: 75 1e jne 795 - if((p = morecore(nunits)) == 0) - 777: 83 ec 0c sub $0xc,%esp - 77a: ff 75 ec pushl -0x14(%ebp) - 77d: e8 e5 fe ff ff call 667 - 782: 83 c4 10 add $0x10,%esp - 785: 89 45 f4 mov %eax,-0xc(%ebp) - 788: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) - 78c: 75 07 jne 795 - return 0; - 78e: b8 00 00 00 00 mov $0x0,%eax - 793: eb 13 jmp 7a8 - nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - if((prevp = freep) == 0){ - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 795: 8b 45 f4 mov -0xc(%ebp),%eax - 798: 89 45 f0 mov %eax,-0x10(%ebp) - 79b: 8b 45 f4 mov -0xc(%ebp),%eax - 79e: 8b 00 mov (%eax),%eax - 7a0: 89 45 f4 mov %eax,-0xc(%ebp) - return (void*)(p + 1); - } - if(p == freep) - if((p = morecore(nunits)) == 0) - return 0; - } - 7a3: e9 6d ff ff ff jmp 715 -} - 7a8: c9 leave - 7a9: c3 ret diff --git a/xv6-public/zombie.d b/xv6-public/zombie.d deleted file mode 100755 index c3e36f5..0000000 --- a/xv6-public/zombie.d +++ /dev/null @@ -1 +0,0 @@ -zombie.o: zombie.c /usr/include/stdc-predef.h types.h stat.h user.h diff --git a/xv6-public/zombie.o b/xv6-public/zombie.o deleted file mode 100755 index 117827468deaceda558aa202d4f034ee90c277c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2504 zcma)7&u<$=6rS;}9S1vUeo!a`#3H341$I-K5J5?xG|;H1Dgr474k%eWYkR4^c6Qex zts+1T2zo#&TzcieA>x3LdVpgOJ;0d@e?XBc(E}VfQ4zjxb|&7413Y=>d*7S)-n@C^ zo&E6j3+JSi!iW@>7%(B$?QCXV!HhU6CdB6#rtRH3zwd9}U%mG0Tf6t{yZ86^_dmJy z!N~5t>U%}Sc5jaSdu@}Udrr3 zj?3etlND=pYIGbckCiYtEh?3lVM0w>Eem0L@|CJJdb;vb<*DlVNjje?-8fs7lc?d^ zRVl{hb5Kj3$h$38g%~;&3Pr^9qa5f?MJ~9;Hs1H+h6~R( zPdaWR>bgDpQK|LAb{a+*Nm9h8uHO#*B#aQ)*z#jHjs5zie^b{_SXn2C(j*J-cEZ$c z#C|7mdtH<>k}P3_5ipYZQC?AP0!N^0tsWWjR%~ z?ay!;4s1M2iu!xMR+VC9tXSxaIZ@HYI^7hWw% zgh%5>Q0q6>!l=>3l+yiLEe^H}L-~0}KlY<$a45DNMuG9ha>A>3J8Zb{A~e&({@f%* zbF(x-YfW`O+sgkMpMV!yAk3ed_l@d-j^-R?3eT|8vf(b?!DCSQ($I%53rym;<`$5$ zuExP&@;w6+{r}64^_UoDS;zA|6)k4&BzV3)l0Dd1UlEU~?+kPk165s#A5qa_<}QL8 zol`eJTZ5`FuZs zu%FCV!DI66KxYj5LwOqa%kw4)I8{EMYBYXpI2e96j2OS`Fyz9;ra3_EXy(4we%bvf zL<+w}lMKlEC|}{p@8ec(A7hv^`xu9wU+O!MZ(%cH)+L%XIk$%|oC71@eO~6w$GluK zpYKOBkMDvJlh1I2dAlwC*f)0K;V(FOeg$%~>nzGr|I9%KOQ_HBfx%KIdO#7M?-cX# zqz7UNesKq4i6a97%~Crbm@IVU0ZsYNPvB(p5$uz>GwDYDC>1T_gPU62%If=+-P!7r zSO1{`k~(lLAYg`w!{mJKPDpYmm0s(sOrQ8!o4z&S`X-e7l8i&S Date: Tue, 22 Sep 2015 14:05:09 -0600 Subject: [PATCH 5/8] removed makefile made targets --- xv6-public/_cat | Bin 13336 -> 0 bytes xv6-public/_echo | Bin 12433 -> 0 bytes xv6-public/_forktest | Bin 8153 -> 0 bytes xv6-public/_grep | Bin 15024 -> 0 bytes xv6-public/_init | Bin 13094 -> 0 bytes xv6-public/_kill | Bin 12581 -> 0 bytes xv6-public/_ln | Bin 12439 -> 0 bytes xv6-public/_ls | Bin 14815 -> 0 bytes xv6-public/_mkdir | Bin 12586 -> 0 bytes xv6-public/_rm | Bin 12563 -> 0 bytes xv6-public/_sh | Bin 23579 -> 0 bytes xv6-public/_stressfs | Bin 13289 -> 0 bytes xv6-public/_usertests | Bin 58600 -> 0 bytes xv6-public/_wc | Bin 13862 -> 0 bytes xv6-public/_zombie | Bin 12211 -> 0 bytes 15 files changed, 0 insertions(+), 0 deletions(-) delete mode 100755 xv6-public/_cat delete mode 100755 xv6-public/_echo delete mode 100755 xv6-public/_forktest delete mode 100755 xv6-public/_grep delete mode 100755 xv6-public/_init delete mode 100755 xv6-public/_kill delete mode 100755 xv6-public/_ln delete mode 100755 xv6-public/_ls delete mode 100755 xv6-public/_mkdir delete mode 100755 xv6-public/_rm delete mode 100755 xv6-public/_sh delete mode 100755 xv6-public/_stressfs delete mode 100755 xv6-public/_usertests delete mode 100755 xv6-public/_wc delete mode 100755 xv6-public/_zombie diff --git a/xv6-public/_cat b/xv6-public/_cat deleted file mode 100755 index ad190be31f9d0e5ac0fe777577a19074649e0684..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13336 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 a9dfycOgyMkM^7~4Y1SU5pii1usQ4dmJ-$u= diff --git a/xv6-public/_forktest b/xv6-public/_forktest deleted file mode 100755 index bbb93087b2186da3abbc2f479a1ff53e16bc3e01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8153 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 RX~yHOT?|2=M{%^`{{ij#JB9!N diff --git a/xv6-public/_kill b/xv6-public/_kill deleted file mode 100755 index 98819a36839bc593ed0c08131aed31d0dada61da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12581 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 F{{pSF(Q5zz diff --git a/xv6-public/_ln b/xv6-public/_ln deleted file mode 100755 index 7b07a9efe8c44a5fc2500d04448ac0e4462b7fa9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12439 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 diff --git a/xv6-public/_mkdir b/xv6-public/_mkdir deleted file mode 100755 index 42c6331493b8cc2fdd47b5a9bd156f3239b36672..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12586 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 Zx!gl09#pBLCz|mzi~o=4oHQ{}@jsR@=n4P; diff --git a/xv6-public/_rm b/xv6-public/_rm deleted file mode 100755 index 4e70e052e4278aa2ad86f93e4c729b9093a3e328..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12563 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 diff --git a/xv6-public/_stressfs b/xv6-public/_stressfs deleted file mode 100755 index f56a24fcbf15e07954ce3851eec256897c061bff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13289 zcmbVT3w%`7nLp>wBR82zCX)ftqBaOotR#UzQHnuc1ACX>lzATMX`jZj6c zqg&F*+Hq~|cDssot9{wkt;^3=e>C8O`q*9i*p~L^T57?KP1e#jt!Yi0{r}Iocjg9J zyY2mP?)U!AcfRwTbMKrRZjEnPBc&AXWeA^esYPJ6%+r!ZqE;AUuBaB3N^ZFZfUO}R z+R@5@`_ZmCVYPe2MU?Vtw7nbV`18k4PTnxlI&k8ukB`nVgg6|3J!fT8hvUD<w#(t;@SA_OIzQ^~L>OXwV(*==|8a7%W%y|X3&G*|7`qvX3^)6P zxO3EPU^Z!wb-t#3eOCL5?2o@WaA*)pNA|?uWM2k6?~T9SGQ0vl z;B+8<()D|;+q2W}qKp zLT(PkCq4zRw?z)L!X&(Ry&TvWj_j}5Qytka?ijLP8;no9K>ZOjA2($_9+uEoGK&r( z``HcXOAcADYDr}O5zUJ1AG+|+z!A5*!|@38eAj296v&X2>IQXy72a)3b%lMGg$f@8pN)V-~>%Mjcq=K&%NRk2!Ff1Iry);Xv#tN-yldN(WYHsOtGlRUc!{Opl?C%;BUe zqH2}XP5IF|hvO$%F?J)IfEO=_O6fv@v*@z zn4HmX(fY0544`grTaBRhtgd`zsw6&|-#seq!z?YUs#sXhuMWIYKXT6ARwNd?jGjEy zgNm|QN15+do0Qn~4 z-9fFHj}QCbI0|R*yweKe-sftH?Oe6y@O>W5uWQYmy-ImQ2I+vy!7f8?e~pZ%CMq;GLk}PN&6h-$TNhXt32!loqpHD{{Y z0nKzWokvDJiM?Yea_7D1$X%9L7x`iAo8u2|!~A3Ajm*Jv8Wc<86F1fj#>WX=&iIY* zQ8KkYDe3=#qdVUJB6J6r`}ata#|NrM zu*@e0HBQXqXhI%Y8Xvc7$)*u|QNERnaT-m)fk}BQTme4Bp}3pa$9J2PSgto>mP|gP zG2ny8eAuR1hIdb>d~z;#k4@TTYO5VNA2Wr$6qPvGYN}37=7&sW;1rokmFu4g94b3F z?89D)_2#5eZN>I%RQI)r1-?{FO85{thXdE)u2Xe#5P8S`JBE=hjgMwG7Ev4PVT>a@ zi4ig`Xj~K@RgZQR85tOj)aI?DI$YHkv=R2mQq|{@_?V67JRU@&!zXl^=~1J4^{8Xe zSEC+N(Y(=(HT=Red~e}POKr|dWUWk3x~*@A1m7DanVyUk3R?ue`S;H!;SmAn)@p z?;`Jn{P&PId+m3X`riZjf!|L~p68WcujRGieF^d*$iLy0ug?37uRiyTo8y2wxvSh`|RjcD`#M)J>K2SS%?FU;gtX3By|nyTQN9Lhsdv~fz_VT3e-)a1-*>MM0oSBo4uC1w zBLKcJ@Nxq+x7yPUu%Td8>FB1HvSVdnP-GCdYmZd0-#CqE$DaF;K zj{Fyp>J}lURn(?aI76uky#MJsL~XNqFgBpxND`bTnibx_EhuR>DJ=HQMZ=gn*)`-afsi3CB5|o=E{s@*+SA4ByT`^%S;?GjM3%AqNmGK#9 z`F!h?Se2On3*b!i2Oa_|a0hPwAW>ts2)3vCg}>}8it-0DJ-xzjGE>HEGw>X&{N-9R z9C(RTg_c#LhE>&;>8drq4WYb9GCoe#Kfr^03%ByT5)l19T7@dMi&S?7e<+E9mx?Nf znh5(V<=sFGQ!WRfqleMvqA5lw2N5OP&_b3&41%cYg{Xp}ub_#DpTC%VQmvs%`8Wt8 zCfO_foj`j5P5upTp+1O+aC$>GIK(Uv@NyUU)pS)Ux#b!&C5KOY?tUxKBppT3`Al|> zRan&{jC0u2F1o1H1zD$ZL7Vf@{)u)oaErF*Fo-%P2bR$!a3?cSc&SsVE|@jvLiKUz zz*{dnnWvILPn*$RL6cYF#_Y`FNT#7c=xiP%$5sHl&l7vUvZKvmv_;U8-vSbCvpXPk z;*WMGc7k%^sLBZAV&YxUu1dnGqV59~196G&AziZ*eqII>U9r@RwJO={hQaJdlXG$7 zu-3XAaqMf!MTk|{t&DZ-=uI%HvcgzTVh+|p%}?Nk+!`KPgvbelnhOLo#7(MFevN&$ zsy^9Y0&NxKvI7Xy(#o{l1WpVAd{~dof*mW&*rq0jHe6W`(~d)_cti=E$*H)-L-|8+ zvyE-Nb0*~O@6`N|C8k!afc^jXlhTv1q*@uoG7Vbmz$A{q%XtfU+ z|KI0ZU<@WQDCwaS?Jnd<-VK*QKCpuBvn&amTt3N?P~+Q#yPyNF(nVO(d?w7FrHjSj zDHmba#m=2j(uCjqu`tQ>Map+uO0b7fTWhOJUR(iMA)%Z@mYF*#Rq3{0klCTlTJ zHIBK?I3gY0*d*tY|1~I7qn_paNF4_iLY^+7qOS}DB2~oKK$O3Uo-}C`+CzyxA?I<+ zcp0*?-A<@wj{x}$%*(#(A~AU7D9V<*NWw*OF0#i#MAXlrM*VfT*Qkf3&v{sW5M8Oa zk601I1Bg#=6jTZo=@e8M^jJ_FKTk`up#QRhGA@OQEWaL3eEtC6&H|!G21Up#34)>qO=?-jiiWRLaWsrR`}_`h|+hAXh>d8{4B{x??Mts z&?FzxVdnNMV%Wqh+d$0ZxyEdarqU%=f)G{y3jaR?M(XLQQBsSZM$r;bkk=!^>K+?1 zM)~)Sg9T)NlSC)nHPPyqprVh%jFTLF4Tw7Csqpj7&Ux(BNUmON`HYNRFuhgfV7&~b z*za+Z%T+cIH5{*`<28^^TTDAe?jd;&$yL<+Hpu8Ba1(&Bn6B2;bdD(C<1gOnE2((~ z{RDjcfqsTO6CB?RH844Ybqa;3tgDKJd{r~6qOwL-Bb~+>!dLZy(9+Pl7}V#8P-q$C zs1XNcj}7v&uvWStye>w|<-z+_h9xY5fugxlfy!MZe5Uqhz&T!kT<4UQ58N*C+O`08 z6%q8rE<;kTi_uefmRJ{SMC6qU2_RwKelJzsMFLR5M4gGjM7`p5F|ANTzesU|@P>S8 z_%9rMO!}%qAr6G01uBcfxCFxpf^-H+vaFOTvjKLrx*$9yOW2-@c|ck!JR}^1KzfoE z)&zG?>94P;(`JhGDoepOsTCYxkZT;BY>$c zH8;UErzVBvfi$ovr|Eh7YZDTarGh)P!lu@rIb%w7mY2%WyRN*EP8nd>GeD%ca%!ro z^e7^wNWyGI72LE-O0DB z@I_I7g5-uO+~c%{B*b{-N@W{5iCMe)QaO!cEn`>2Mi-UlGV?NXmU%~^APm1T4>uWH zAKY$k_>q|g;k$=7^KTt~=BRm|*-RGIedgT`zw_uvi~yqe37i@tj{7^~+Ih)h-MihD zY16@ZLc-af<%o+BGfe)R^Iar2n~(Vo-?i&A3`z!TgXW9PP0fuTSJeH%F>`Yhekb^S z!B3I1KKMGM=B(zXry3u^O!Q*M3Cu% zIScc5;zwqFU;fcYpEhGp-IKoqTE491i~Ml2im|sZ)gw|nGnUXf{4+l^+7nhn*gd&S zx+m3Mo9s+vMXs|qYtUOB(E zzN4qNzK?oD+U!ghPQ^8W#hpo7^@*-bB8QW5F#8kPdMleq?sz9zpU81=-Kiccr_Fo2 zGgf^^Hqo7`@9V_~Qd!q69Mtz^d#zN`>O~%$BY8}zP6gq+-=%u?in@Xa=Z>qmftms0fL`OE2>Qi@2HESC6j+a0*LsolLy7q1z>3{eoX0MA2{ViUn^g?^YoTNQwnF2~BG73ES~ z?FvbrkH$O^&ega{_#uVcCZRgcgbq-3(QYXkgCSgo2Db!SwG;tWSEE7IPe{2GSK+R% z1-SFn9?2(gtSu#T=xYEOAmOzdHwphv;kHS5ujUs6q#ypWV}OKOUW$tHHZAuPI`X1D z=}#-UH2ECj+I zDBLy)|5NjeU6B5v!y`PZag(qN6~)j9O@)`{jCOA+-GYKzUP=jRo~AO@gdvTagto$M zlTe*~d1`@+W0{f{x(Jt}VaNnpwa|rL)m0DPB}&{v@KH2Okb2Ldoa#3!p5-UprE!yx zUj#TZ!e=zUm=PZRehv*aM4-+rMWKuE%bHD~txCZ>2Hv-{nBX9qHyElvt9X{5@Oh1! zgb_mrLs+fwQkrS^hSDu4_!e-agFvg6GESNY1X>MuE4k0%Zt`EX@TOZt*lS;SH zMVLWD!~|b(*o2;ysaII3GOmD_UtnRi31BZ8#@SBzdCewptlEL9>)qC6yFnMWNyzVn z9Fy1X1PFBDCmdFIpMrY5_T5aV?QkmZTwg>o_oE?7f@5fKQCw^MYnQoNOrRe_h3g2f z)@*`qG+13nc(Y~`+~=?f_h~kP)5mp$tZ{Tr;8PtOyQ-pM?g`R2*Y5?dL5m5Txh{&Sz7mbW60X*`NjO{0hHVmZQF|*>eNt1rLKj}uMI{;n zBjDK{10&?N0Jgh3c#DuHkUP*ICYY|RItjfVbjPI!!8Oq3!vSUlj<_AU(^o@oSGSdD z6AgG-)v(jWtkh0RG-P|#&xD3l=T`OJEE+W3mdlBTWN$ZLuE9&S+3Br`Y@#QP_fUt- z^mO#Pc%rQhubD1|SKO3~qdOOM-#6Xh-VM%#5Cc+wGfX|!6OUKji!xrb(1;^XO1=sQ zsP6;rUasDSV7Ph{@Y4r99yhy}yICxB^td?qrQ%7nsH^12NG?HRIMn0G>7^S4cJ^^$W4jc4Tn^X#xA`69>Y8G64wc29u(B+FQ233)|t=gnf1cU z=k&n3(6mk{=U>wSjW~Coz>$FG@)fIDGkwKbb!ktc!14*4l6fwl@JzIlho_9oFMc&S zwFZAR8G{~wkktX=j7R0nbxHm6K=81Ikn#%v`PJ_m4$b-IcsXAZ*}fFey=cD%1jo-5 zNf8iN0P@2GGei0+Kz@PQ21x(ji}rj6;oB_xsewEJ$gg$$yA#r#p!wmr*^&1F@(VAo zYRLNm`Mtddkoq?Pp0B4x$!`bEPcuJvFIKPuo`9p!%jEcy52JWr_q z%K^6PF9MXh=1L|I-`F+q+j>w&jQVlsN9Ds=Nnm-$3LIi z|L)OW1ezyrKXdeX=A!=E62~f2&RvSfj_O3^l*5*W1q&~3@*J$F0~vi-Qane2V;=W7 zM{n+_Q1_0W-gco*e{k!|w7Ul@xh@{H^kr~drjOY4;n0puSC>e3wr8?9$x9{0jXYxG zAA#bePMr*?<2H4oWA|B^?v&WN70=?WI1S3;P{(sj$9QnK)Q*D|b?me?rJmedQ$6iM cc~U2Z?l}|>tkn4-&3LM{gCXdHE)G=uFCYPM_W%F@ diff --git a/xv6-public/_usertests b/xv6-public/_usertests deleted file mode 100755 index 5c542b0ac8702f796215386713a07704663d21ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58600 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

j$#C*hl`}&*v{wO&KhoMa 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 Y{EjDo>Y$aTI8q(h#z^!@B*!cM8&>_t<^TWy diff --git a/xv6-public/_zombie b/xv6-public/_zombie deleted file mode 100755 index 8371a7c25a157392bdbb9f077b18e6021652b16c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12211 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 Date: Tue, 22 Sep 2015 14:21:15 -0600 Subject: [PATCH 6/8] updated .gitignore --- xv6-public/.gitignore | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/xv6-public/.gitignore b/xv6-public/.gitignore index 3e2c9de..45db1cb 100755 --- a/xv6-public/.gitignore +++ b/xv6-public/.gitignore @@ -10,7 +10,7 @@ bootblock entryother initcode initcode.out -kernel -kernelmemfs -mkfs +*kernel +*kernelmemfs +*mkfs .gdbinit From bb39e5571cf634240b183a8b5ac1e11bd340e4b9 Mon Sep 17 00:00:00 2001 From: Jordaen Graham Date: Tue, 22 Sep 2015 14:49:17 -0600 Subject: [PATCH 7/8] Updated .gitignore again --- .gitignore | 3 ++- xv6-public/.gitignore | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 875ac17..12f71b5 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ _* *.asm *.img *.out -kernel +*kernel +*mkfs diff --git a/xv6-public/.gitignore b/xv6-public/.gitignore index 45db1cb..3e2c9de 100755 --- a/xv6-public/.gitignore +++ b/xv6-public/.gitignore @@ -10,7 +10,7 @@ bootblock entryother initcode initcode.out -*kernel -*kernelmemfs -*mkfs +kernel +kernelmemfs +mkfs .gdbinit From b61cee12415f42c3940e52c7dab62e00605cc6c1 Mon Sep 17 00:00:00 2001 From: Jordaen Graham Date: Tue, 22 Sep 2015 15:17:32 -0600 Subject: [PATCH 8/8] Fixed error when running getpcount. Updated getpcount.c file to exit() instead of return 0; --- xv6-public/getpcount.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xv6-public/getpcount.c b/xv6-public/getpcount.c index 4b63488..e5e54b1 100644 --- a/xv6-public/getpcount.c +++ b/xv6-public/getpcount.c @@ -7,5 +7,5 @@ main(void){ int running_count; running_count = getpcount(); printf(1, "Processes currently running: %d\n", running_count); - return 0; -} \ No newline at end of file + exit(); +}