From 9b23ca2a45998500f582464bb343161c5a9ecd7d Mon Sep 17 00:00:00 2001 From: iDunnoDev Date: Fri, 9 Dec 2022 10:39:55 +0000 Subject: [PATCH] Added buffer to the console Added hotkeys to switch between console buffers and to return to the home one Added clear screen command Added debug text outputs to the hello command and when loading sh --- .vscode/settings.json | 6 + Makefile | 4 +- _argtest | Bin 14504 -> 0 bytes _cat | Bin 15608 -> 0 bytes _echo | Bin 14488 -> 0 bytes _forktest | Bin 8920 -> 0 bytes _grep | Bin 18460 -> 0 bytes _hello | Bin 14124 -> 0 bytes _init | Bin 15088 -> 0 bytes _kill | Bin 14580 -> 0 bytes _ln | Bin 14472 -> 0 bytes _ls | Bin 17040 -> 0 bytes _mkdir | Bin 14600 -> 0 bytes _rm | Bin 14580 -> 0 bytes _screen | Bin 14808 -> 0 bytes _sh | Bin 28720 -> 0 bytes _shutdown | Bin 14736 -> 0 bytes _stressfs | Bin 15508 -> 0 bytes _usertests | Bin 63104 -> 0 bytes _wc | Bin 16044 -> 0 bytes _zombie | Bin 14156 -> 0 bytes argtest.asm | 1162 --- argtest.d | 1 - argtest.o | Bin 3276 -> 0 bytes argtest.sym | 48 - bio.d | 2 - bio.o | Bin 7012 -> 0 bytes bootasm.d | 1 - bootasm.o | Bin 1708 -> 0 bytes bootblock | Bin 512 -> 0 bytes bootblock.asm | 341 - bootblock.o | Bin 5688 -> 0 bytes bootblockother.o | Bin 1268 -> 0 bytes bootmain.d | 1 - bootmain.o | Bin 6804 -> 0 bytes cat.asm | 1256 ---- cat.d | 1 - cat.o | Bin 4964 -> 0 bytes cat.sym | 50 - cls.c | 8 + console.c | 223 +- console.d | 3 - console.o | Bin 21200 -> 0 bytes defs.h | 5 + echo.asm | 1169 --- echo.d | 1 - echo.o | Bin 3304 -> 0 bytes echo.sym | 48 - entry.o | Bin 1432 -> 0 bytes entryother | Bin 122 -> 0 bytes entryother.asm | 115 - entryother.d | 1 - entryother.o | Bin 1660 -> 0 bytes exec.d | 2 - exec.o | Bin 10572 -> 0 bytes file.d | 2 - file.o | Bin 9992 -> 0 bytes forktest.asm | 673 -- forktest.d | 1 - forktest.o | Bin 5480 -> 0 bytes fs.d | 2 - fs.o | Bin 31048 -> 0 bytes gensyscalls.pl | 4 +- grep.asm | 1583 ---- grep.d | 1 - grep.o | Bin 8728 -> 0 bytes grep.sym | 53 - hello.asm | 1129 --- hello.c | 2 +- hello.d | 1 - hello.o | Bin 2644 -> 0 bytes hello.sym | 48 - ide.d | 2 - ide.o | Bin 13096 -> 0 bytes init.asm | 1226 --- init.d | 1 - init.o | Bin 4292 -> 0 bytes init.sym | 49 - initcode | Bin 44 -> 0 bytes initcode.asm | 43 - initcode.d | 1 - initcode.o | Bin 1508 -> 0 bytes initcode.out | Bin 1136 -> 0 bytes ioapic.d | 1 - ioapic.o | Bin 5040 -> 0 bytes kalloc.d | 2 - kalloc.o | Bin 6744 -> 0 bytes kbd.d | 1 - kbd.o | Bin 6072 -> 0 bytes kernel | Bin 205296 -> 0 bytes kernel.asm | 15968 ---------------------------------------- kernel.sym | 511 -- kill.asm | 1173 --- kill.d | 1 - kill.o | Bin 3472 -> 0 bytes kill.sym | 48 - lapic.d | 2 - lapic.o | Bin 15188 -> 0 bytes ln.asm | 1169 --- ln.d | 1 - ln.o | Bin 3308 -> 0 bytes ln.sym | 48 - log.d | 2 - log.o | Bin 10232 -> 0 bytes ls.asm | 1454 ---- ls.d | 1 - ls.o | Bin 7016 -> 0 bytes ls.sym | 51 - main.d | 2 - main.o | Bin 17796 -> 0 bytes mkdir.asm | 1190 --- mkdir.d | 1 - mkdir.o | Bin 3460 -> 0 bytes mkdir.sym | 48 - mkfs | Bin 21440 -> 0 bytes mp.d | 2 - mp.o | Bin 11516 -> 0 bytes param.h | 4 +- picirq.d | 1 - picirq.o | Bin 2660 -> 0 bytes pipe.d | 2 - pipe.o | Bin 11028 -> 0 bytes printf.d | 1 - printf.o | Bin 7136 -> 0 bytes proc.c | 13 +- proc.d | 2 - proc.h | 2 + proc.o | Bin 24408 -> 0 bytes rm.asm | 1190 --- rm.d | 1 - rm.o | Bin 3452 -> 0 bytes rm.sym | 48 - screen.asm | 1202 --- screen.c | 15 +- screen.d | 1 - screen.o | Bin 3788 -> 0 bytes screen.sym | 48 - sh.asm | 2715 ------- sh.c | 1 + sh.d | 1 - sh.o | Bin 23344 -> 0 bytes sh.sym | 69 - shutdown.asm | 1198 --- shutdown.d | 1 - shutdown.o | Bin 3692 -> 0 bytes shutdown.sym | 48 - sleeplock.d | 2 - sleeplock.o | Bin 7356 -> 0 bytes spinlock.d | 2 - spinlock.o | Bin 10580 -> 0 bytes stressfs.asm | 1276 ---- stressfs.d | 2 - stressfs.o | Bin 4784 -> 0 bytes stressfs.sym | 48 - string.d | 1 - string.o | Bin 7076 -> 0 bytes swtch.o | Bin 1204 -> 0 bytes syscall.d | 2 - syscall.h | 27 - syscall.o | Bin 10428 -> 0 bytes syscalltable.h | 54 - sysfile.d | 2 - sysfile.o | Bin 24588 -> 0 bytes sysproc.c | 25 + sysproc.d | 2 - sysproc.o | Bin 8552 -> 0 bytes trap.d | 2 - trap.o | Bin 11100 -> 0 bytes trapasm.o | Bin 1328 -> 0 bytes uart.d | 2 - uart.o | Bin 7184 -> 0 bytes ulib.d | 2 - ulib.o | Bin 7100 -> 0 bytes umalloc.d | 2 - umalloc.o | Bin 5272 -> 0 bytes user.h | 2 + usertests.asm | 6618 ----------------- usertests.d | 2 - usertests.o | Bin 73980 -> 0 bytes usertests.sym | 93 - usys.S | 37 - usys.o | Bin 1888 -> 0 bytes vectors.S | 1537 ---- vectors.o | Bin 16384 -> 0 bytes vm.d | 2 - vm.o | Bin 27440 -> 0 bytes wc.asm | 1307 ---- wc.d | 1 - wc.o | Bin 5500 -> 0 bytes wc.sym | 50 - zombie.asm | 1145 --- zombie.d | 1 - zombie.o | Bin 2708 -> 0 bytes zombie.sym | 48 - 194 files changed, 283 insertions(+), 49519 deletions(-) create mode 100644 .vscode/settings.json delete mode 100644 _argtest delete mode 100644 _cat delete mode 100644 _echo delete mode 100644 _forktest delete mode 100644 _grep delete mode 100644 _hello delete mode 100644 _init delete mode 100644 _kill delete mode 100644 _ln delete mode 100644 _ls delete mode 100644 _mkdir delete mode 100644 _rm delete mode 100644 _screen delete mode 100644 _sh delete mode 100644 _shutdown delete mode 100644 _stressfs delete mode 100644 _usertests delete mode 100644 _wc delete mode 100644 _zombie delete mode 100644 argtest.asm delete mode 100644 argtest.d delete mode 100644 argtest.o delete mode 100644 argtest.sym delete mode 100644 bio.d delete mode 100644 bio.o delete mode 100644 bootasm.d delete mode 100644 bootasm.o delete mode 100644 bootblock delete mode 100644 bootblock.asm delete mode 100644 bootblock.o delete mode 100644 bootblockother.o delete mode 100644 bootmain.d delete mode 100644 bootmain.o delete mode 100644 cat.asm delete mode 100644 cat.d delete mode 100644 cat.o delete mode 100644 cat.sym create mode 100644 cls.c delete mode 100644 console.d delete mode 100644 console.o delete mode 100644 echo.asm delete mode 100644 echo.d delete mode 100644 echo.o delete mode 100644 echo.sym delete mode 100644 entry.o delete mode 100644 entryother delete mode 100644 entryother.asm delete mode 100644 entryother.d delete mode 100644 entryother.o delete mode 100644 exec.d delete mode 100644 exec.o delete mode 100644 file.d delete mode 100644 file.o delete mode 100644 forktest.asm delete mode 100644 forktest.d delete mode 100644 forktest.o delete mode 100644 fs.d delete mode 100644 fs.o delete mode 100644 grep.asm delete mode 100644 grep.d delete mode 100644 grep.o delete mode 100644 grep.sym delete mode 100644 hello.asm delete mode 100644 hello.d delete mode 100644 hello.o delete mode 100644 hello.sym delete mode 100644 ide.d delete mode 100644 ide.o delete mode 100644 init.asm delete mode 100644 init.d delete mode 100644 init.o delete mode 100644 init.sym delete mode 100644 initcode delete mode 100644 initcode.asm delete mode 100644 initcode.d delete mode 100644 initcode.o delete mode 100644 initcode.out delete mode 100644 ioapic.d delete mode 100644 ioapic.o delete mode 100644 kalloc.d delete mode 100644 kalloc.o delete mode 100644 kbd.d delete mode 100644 kbd.o delete mode 100644 kernel delete mode 100644 kernel.asm delete mode 100644 kernel.sym delete mode 100644 kill.asm delete mode 100644 kill.d delete mode 100644 kill.o delete mode 100644 kill.sym delete mode 100644 lapic.d delete mode 100644 lapic.o delete mode 100644 ln.asm delete mode 100644 ln.d delete mode 100644 ln.o delete mode 100644 ln.sym delete mode 100644 log.d delete mode 100644 log.o delete mode 100644 ls.asm delete mode 100644 ls.d delete mode 100644 ls.o delete mode 100644 ls.sym delete mode 100644 main.d delete mode 100644 main.o delete mode 100644 mkdir.asm delete mode 100644 mkdir.d delete mode 100644 mkdir.o delete mode 100644 mkdir.sym delete mode 100644 mkfs delete mode 100644 mp.d delete mode 100644 mp.o delete mode 100644 picirq.d delete mode 100644 picirq.o delete mode 100644 pipe.d delete mode 100644 pipe.o delete mode 100644 printf.d delete mode 100644 printf.o delete mode 100644 proc.d delete mode 100644 proc.o delete mode 100644 rm.asm delete mode 100644 rm.d delete mode 100644 rm.o delete mode 100644 rm.sym delete mode 100644 screen.asm delete mode 100644 screen.d delete mode 100644 screen.o delete mode 100644 screen.sym delete mode 100644 sh.asm delete mode 100644 sh.d delete mode 100644 sh.o delete mode 100644 sh.sym delete mode 100644 shutdown.asm delete mode 100644 shutdown.d delete mode 100644 shutdown.o delete mode 100644 shutdown.sym delete mode 100644 sleeplock.d delete mode 100644 sleeplock.o delete mode 100644 spinlock.d delete mode 100644 spinlock.o delete mode 100644 stressfs.asm delete mode 100644 stressfs.d delete mode 100644 stressfs.o delete mode 100644 stressfs.sym delete mode 100644 string.d delete mode 100644 string.o delete mode 100644 swtch.o delete mode 100644 syscall.d delete mode 100644 syscall.h delete mode 100644 syscall.o delete mode 100644 syscalltable.h delete mode 100644 sysfile.d delete mode 100644 sysfile.o delete mode 100644 sysproc.d delete mode 100644 sysproc.o delete mode 100644 trap.d delete mode 100644 trap.o delete mode 100644 trapasm.o delete mode 100644 uart.d delete mode 100644 uart.o delete mode 100644 ulib.d delete mode 100644 ulib.o delete mode 100644 umalloc.d delete mode 100644 umalloc.o delete mode 100644 usertests.asm delete mode 100644 usertests.d delete mode 100644 usertests.o delete mode 100644 usertests.sym delete mode 100644 usys.S delete mode 100644 usys.o delete mode 100644 vectors.S delete mode 100644 vectors.o delete mode 100644 vm.d delete mode 100644 vm.o delete mode 100644 wc.asm delete mode 100644 wc.d delete mode 100644 wc.o delete mode 100644 wc.sym delete mode 100644 zombie.asm delete mode 100644 zombie.d delete mode 100644 zombie.o delete mode 100644 zombie.sym diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..929365a --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "files.associations": { + "new": "c", + "*.tcc": "c" + } +} \ No newline at end of file diff --git a/Makefile b/Makefile index 505c640..1e3387a 100644 --- a/Makefile +++ b/Makefile @@ -199,6 +199,7 @@ UPROGS=\ _shutdown\ _argtest\ _screen\ + _cls\ fs.img: mkfs $(UPROGS) ./mkfs fs.img $(UPROGS) @@ -222,7 +223,8 @@ QEMUGDB = $(shell if $(QEMU) -help | grep -q '^-gdb'; \ then echo "-gdb tcp::$(GDBPORT)"; \ else echo "-s -p $(GDBPORT)"; fi) ifndef CPUS -CPUS := 2 +#CPUS := 2 +CPUS := 1 endif QEMUOPTS = -drive file=fs.img,index=1,media=disk,format=raw -drive file=xv6.img,index=0,media=disk,format=raw -smp $(CPUS) -m 512 $(QEMUEXTRA) diff --git a/_argtest b/_argtest deleted file mode 100644 index cb6a2dd7089968a911c389216ac85455fa5c022b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14504 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

i6m2 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

    {5Y-~9SU5Gqs ziySrc^y{RVf6HC?J|N}f|BoW(d0(hoQW58%hVbZhA z9F||qoWu^hib6|(=-hnlEzHDYh!OOmJTU#m(5pZ=CD%I$StLwTJE!+jQ(_OX^o@6^ ze2-%paBogFK(kClDiRVxAEZFCK?-m@?;ON>Yn`f|0^nJQtUXW&S=577tnqAs8Rq!= zP5&%&eAv7KTQbFFskLNUyOkf@U+J)~d?B*Z^pBp9ISvLS_Cl@=JZ*yx-^|o~oVo3P zIy~{~Rg7IQI|pP+|H3i73oAqs5Jc?vX1V?Bs)NP|EXplr{tUbgU^mtytf(F(9Y81w zp%uVtx2tlN!qcs56`l?w(i&lA>znalng`EN$>pqMGpEPQUIn}dQ$i-MfGhiyzKGf*=8t%KND-53$-_YooqEsiLZ~j%T)aNs*c5Aw*hn-6=~!`fQ)6|s zF;Z_6n>RMbitAddH-?K_n(+tGaH}g^U2|J;OKWp1ToY?{h%Jp_aI2$RA~g-I&5`DK zv^XBw)EKEPj#aO33P-_=#;8}*R2^+_wHuowqNb@i8Wz>9^)-UO`4G{D=GItfaH{-E zY)dQdb(Con;mwUPM~1A8;f))c+rpx@I#x|28jguJ{y_*+f+y^n5JX}vTSR?078P+7 zJ-QPUaoT9(pDC(i&5cTIV+*?G=z0;`(gMF~Ygy~ecE^TeDpIjY{hNIDq;Ye(%%1p)b(A1J?Gi={E%KB zlHspsN@~Ra-NAS?+*;Bg;!Ta~A-j3TRX{l1D0;eu&W<^_aoZ0-PheBx%jfWm@7^F9 z_-mbEOw?}2Z5!cjyCsp`@*WA)*1=1=RiVVQku5XLilFFC#B4296xr~OHzy+3K^ zG}=3-?NIi2=-;9J!TE3i2tTH2@a!?|kcK%O(te|1l;3D)iJj9vCHATIH(->0Ry(S> zqyJ8Rg3Jr!6ZyT1Xa;EaYt96XUilU)#CS`-Ejhdz)+Tx!qK~$Z$m5VB-vJo`2c!;= zF8NC}RG=7Y7Fk0RhJ;nj;xC5Ql{^~$~)dn=HRd@zQ^ceT+ z59qe!1NwuyOZ@=9)v~GW#(joM{SkaY*+^kL!5JYr{0evRWzP|bd{e%U$Q$p=yHsi3 z1)qS@A#`W8^X%@|AJfr&pr2<`O=K^;xrjZxCI41SIo*v^E+`+8h zl%FEb^9_!~{s79H{aNh`)$i87ixo5Cmg_P7HEtG=dlt1})9yuHY}$Z+zdN#uiYSJY#rGjH zk8L;ZllMzK_T+Zse)$kWL;+j|WR@Al_e-^Rin(ZuZ$YKrvQBT&dW>~-dK6uAn;PMGleiq*yb2I1=aQLHD;PS)fz` zcYlOId@*pZ^Q`a#=bv)j-)51&7Wg~%s|o&gEkzCasKRRWR73;V%F`n1mk#&j0(y3%|(}{|CMMQz*{=H;QBb zOp^G20iP}H-x(3_2OdnC|3|L|+7r#i3GMIIy@;<4K1O%YKWZxQ@G z%DS*RsICh~YVDJ(d+g*PRUP-KiF515+vtUTHs;iYD2Z;_h_f{MSgYMPxKJ#-IVMV4 zo0aX7aKk!vY8NH&O_bC$Z{(>|l+=dT$LrTsw^m2$ao}{&#zCA9mQmC0nNQ!Iqu1X-D}JhcqV+!xDP=f zS?(2V8WC41iAR|vcSQM>_A@CHbfi$_m$g9H*;)YMSAIy)w4?!CFmRDv51#zo=iSSd F`)}w$=W_r6 diff --git a/_echo b/_echo deleted file mode 100644 index fffe6f07af7077527a0ec8969d84d68d32a3011b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14488 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 diff --git a/_forktest b/_forktest deleted file mode 100644 index d0b763b7bcc212f2a60e019a83dae07975bb79fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8920 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 diff --git a/_grep b/_grep deleted file mode 100644 index 5900456f6e268136e7ffd0e53bae43a57f21a58e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18460 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�^2lp2Z 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 Pedl_{ej+7|o5lBkh^Hy^ diff --git a/_ln b/_ln deleted file mode 100644 index f8eb52e12919e2c3fadb86a08de2ade1f4dd3c4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14472 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 diff --git a/_mkdir b/_mkdir deleted file mode 100644 index f88bbb2bc9c5ef7476772fb0df1c3ca32b855136..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14600 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 E1MC!BH2?qr diff --git a/_shutdown b/_shutdown deleted file mode 100644 index 5ed067db2db83211b7801701fda0378650247ea2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14736 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 KN*Fhb@BaYWlwf55 diff --git a/_stressfs b/_stressfs deleted file mode 100644 index 8a9004f7edda2abebd5a4e2856cad5a47b392d17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15508 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 a;!2B*jIKQD+L`J8{#RTU<1)c@>HY^Sd|)sD diff --git a/_wc b/_wc deleted file mode 100644 index b90c872a616f25598889759d363b103854e74c77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16044 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 F{{wj>K8pYV diff --git a/_zombie b/_zombie deleted file mode 100644 index de8668a2066f255ee58ce73ddac1969d50405190..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14156 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 I<7V;wFQk&`2mk;8 diff --git a/argtest.asm b/argtest.asm deleted file mode 100644 index 8e7be3e..0000000 --- a/argtest.asm +++ /dev/null @@ -1,1162 +0,0 @@ - -_argtest: file format elf32-i386 - - -Disassembly of section .text: - -00000000
    : -#include "types.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 push -0x4(%ecx) - a: 55 push %ebp - b: 89 e5 mov %esp,%ebp - d: 57 push %edi - e: 56 push %esi - f: 53 push %ebx - 10: 51 push %ecx - 11: 83 ec 08 sub $0x8,%esp - 14: 8b 31 mov (%ecx),%esi - 16: 8b 79 04 mov 0x4(%ecx),%edi - for (int i = 1; i < argc; i++) { - 19: 83 fe 01 cmp $0x1,%esi - 1c: 7e 24 jle 42 - 1e: bb 01 00 00 00 mov $0x1,%ebx - 23: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 27: 90 nop - printf(1, "Arg %d: %s\n", i, argv[i]); - 28: ff 34 9f push (%edi,%ebx,4) - 2b: 53 push %ebx - for (int i = 1; i < argc; i++) { - 2c: 83 c3 01 add $0x1,%ebx - printf(1, "Arg %d: %s\n", i, argv[i]); - 2f: 68 38 07 00 00 push $0x738 - 34: 6a 01 push $0x1 - 36: e8 d5 03 00 00 call 410 - for (int i = 1; i < argc; i++) { - 3b: 83 c4 10 add $0x10,%esp - 3e: 39 de cmp %ebx,%esi - 40: 75 e6 jne 28 - } - - exit(); - 42: e8 5c 02 00 00 call 2a3 - 47: 66 90 xchg %ax,%ax - 49: 66 90 xchg %ax,%ax - 4b: 66 90 xchg %ax,%ax - 4d: 66 90 xchg %ax,%ax - 4f: 90 nop - -00000050 : -#include "stat.h" -#include "fcntl.h" -#include "user.h" -#include "x86.h" - -char*strcpy(char *s, const char *t) { - 50: 55 push %ebp - char *os; - - os = s; - while ((*s++ = *t++) != 0) { - 51: 31 c0 xor %eax,%eax -char*strcpy(char *s, const char *t) { - 53: 89 e5 mov %esp,%ebp - 55: 53 push %ebx - 56: 8b 4d 08 mov 0x8(%ebp),%ecx - 59: 8b 5d 0c mov 0xc(%ebp),%ebx - 5c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - while ((*s++ = *t++) != 0) { - 60: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 64: 88 14 01 mov %dl,(%ecx,%eax,1) - 67: 83 c0 01 add $0x1,%eax - 6a: 84 d2 test %dl,%dl - 6c: 75 f2 jne 60 - ; - } - return os; -} - 6e: 8b 5d fc mov -0x4(%ebp),%ebx - 71: 89 c8 mov %ecx,%eax - 73: c9 leave - 74: c3 ret - 75: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 7c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000080 : - -int strcmp(const char *p, const char *q) { - 80: 55 push %ebp - 81: 89 e5 mov %esp,%ebp - 83: 53 push %ebx - 84: 8b 55 08 mov 0x8(%ebp),%edx - 87: 8b 4d 0c mov 0xc(%ebp),%ecx - while (*p && *p == *q) { - 8a: 0f b6 02 movzbl (%edx),%eax - 8d: 84 c0 test %al,%al - 8f: 75 17 jne a8 - 91: eb 3a jmp cd - 93: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 97: 90 nop - 98: 0f b6 42 01 movzbl 0x1(%edx),%eax - p++, q++; - 9c: 83 c2 01 add $0x1,%edx - 9f: 8d 59 01 lea 0x1(%ecx),%ebx - while (*p && *p == *q) { - a2: 84 c0 test %al,%al - a4: 74 1a je c0 - p++, q++; - a6: 89 d9 mov %ebx,%ecx - while (*p && *p == *q) { - a8: 0f b6 19 movzbl (%ecx),%ebx - ab: 38 c3 cmp %al,%bl - ad: 74 e9 je 98 - } - return (uchar) * p - (uchar) * q; - af: 29 d8 sub %ebx,%eax -} - b1: 8b 5d fc mov -0x4(%ebp),%ebx - b4: c9 leave - b5: c3 ret - b6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - bd: 8d 76 00 lea 0x0(%esi),%esi - return (uchar) * p - (uchar) * q; - c0: 0f b6 59 01 movzbl 0x1(%ecx),%ebx - c4: 31 c0 xor %eax,%eax - c6: 29 d8 sub %ebx,%eax -} - c8: 8b 5d fc mov -0x4(%ebp),%ebx - cb: c9 leave - cc: c3 ret - return (uchar) * p - (uchar) * q; - cd: 0f b6 19 movzbl (%ecx),%ebx - d0: 31 c0 xor %eax,%eax - d2: eb db jmp af - d4: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - db: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - df: 90 nop - -000000e0 : - -uint strlen(const char *s) { - e0: 55 push %ebp - e1: 89 e5 mov %esp,%ebp - e3: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - for (n = 0; s[n]; n++) { - e6: 80 3a 00 cmpb $0x0,(%edx) - e9: 74 15 je 100 - eb: 31 c0 xor %eax,%eax - ed: 8d 76 00 lea 0x0(%esi),%esi - f0: 83 c0 01 add $0x1,%eax - f3: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - f7: 89 c1 mov %eax,%ecx - f9: 75 f5 jne f0 - ; - } - return n; -} - fb: 89 c8 mov %ecx,%eax - fd: 5d pop %ebp - fe: c3 ret - ff: 90 nop - for (n = 0; s[n]; n++) { - 100: 31 c9 xor %ecx,%ecx -} - 102: 5d pop %ebp - 103: 89 c8 mov %ecx,%eax - 105: c3 ret - 106: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 10d: 8d 76 00 lea 0x0(%esi),%esi - -00000110 : - -void* memset(void *dst, int c, uint n) { - 110: 55 push %ebp - 111: 89 e5 mov %esp,%ebp - 113: 57 push %edi - 114: 8b 55 08 mov 0x8(%ebp),%edx - "d" (port), "0" (addr), "1" (cnt) : - "cc"); -} - -static inline void stosb(void *addr, int data, int cnt) { - asm volatile ("cld; rep stosb" : - 117: 8b 4d 10 mov 0x10(%ebp),%ecx - 11a: 8b 45 0c mov 0xc(%ebp),%eax - 11d: 89 d7 mov %edx,%edi - 11f: fc cld - 120: f3 aa rep stos %al,%es:(%edi) - stosb(dst, c, n); - return dst; -} - 122: 8b 7d fc mov -0x4(%ebp),%edi - 125: 89 d0 mov %edx,%eax - 127: c9 leave - 128: c3 ret - 129: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -00000130 : - -char* strchr(const char *s, char c) { - 130: 55 push %ebp - 131: 89 e5 mov %esp,%ebp - 133: 8b 45 08 mov 0x8(%ebp),%eax - 136: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx - for (; *s; s++) { - 13a: 0f b6 10 movzbl (%eax),%edx - 13d: 84 d2 test %dl,%dl - 13f: 75 12 jne 153 - 141: eb 1d jmp 160 - 143: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 147: 90 nop - 148: 0f b6 50 01 movzbl 0x1(%eax),%edx - 14c: 83 c0 01 add $0x1,%eax - 14f: 84 d2 test %dl,%dl - 151: 74 0d je 160 - if (*s == c) { - 153: 38 d1 cmp %dl,%cl - 155: 75 f1 jne 148 - return (char*)s; - } - } - return 0; -} - 157: 5d pop %ebp - 158: c3 ret - 159: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - return 0; - 160: 31 c0 xor %eax,%eax -} - 162: 5d pop %ebp - 163: c3 ret - 164: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 16b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 16f: 90 nop - -00000170 : - -char* gets(char *buf, int max) { - 170: 55 push %ebp - 171: 89 e5 mov %esp,%ebp - 173: 57 push %edi - 174: 56 push %esi - int i, cc; - char c; - - for (i = 0; i + 1 < max;) { - cc = read(0, &c, 1); - 175: 8d 7d e7 lea -0x19(%ebp),%edi -char* gets(char *buf, int max) { - 178: 53 push %ebx - for (i = 0; i + 1 < max;) { - 179: 31 db xor %ebx,%ebx -char* gets(char *buf, int max) { - 17b: 83 ec 1c sub $0x1c,%esp - for (i = 0; i + 1 < max;) { - 17e: eb 27 jmp 1a7 - cc = read(0, &c, 1); - 180: 83 ec 04 sub $0x4,%esp - 183: 6a 01 push $0x1 - 185: 57 push %edi - 186: 6a 00 push $0x0 - 188: e8 2e 01 00 00 call 2bb - if (cc < 1) { - 18d: 83 c4 10 add $0x10,%esp - 190: 85 c0 test %eax,%eax - 192: 7e 1d jle 1b1 - break; - } - buf[i++] = c; - 194: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 198: 8b 55 08 mov 0x8(%ebp),%edx - 19b: 88 44 1a ff mov %al,-0x1(%edx,%ebx,1) - if (c == '\n' || c == '\r') { - 19f: 3c 0a cmp $0xa,%al - 1a1: 74 1d je 1c0 - 1a3: 3c 0d cmp $0xd,%al - 1a5: 74 19 je 1c0 - for (i = 0; i + 1 < max;) { - 1a7: 89 de mov %ebx,%esi - 1a9: 83 c3 01 add $0x1,%ebx - 1ac: 3b 5d 0c cmp 0xc(%ebp),%ebx - 1af: 7c cf jl 180 - break; - } - } - buf[i] = '\0'; - 1b1: 8b 45 08 mov 0x8(%ebp),%eax - 1b4: c6 04 30 00 movb $0x0,(%eax,%esi,1) - return buf; -} - 1b8: 8d 65 f4 lea -0xc(%ebp),%esp - 1bb: 5b pop %ebx - 1bc: 5e pop %esi - 1bd: 5f pop %edi - 1be: 5d pop %ebp - 1bf: c3 ret - buf[i] = '\0'; - 1c0: 8b 45 08 mov 0x8(%ebp),%eax - 1c3: 89 de mov %ebx,%esi - 1c5: c6 04 30 00 movb $0x0,(%eax,%esi,1) -} - 1c9: 8d 65 f4 lea -0xc(%ebp),%esp - 1cc: 5b pop %ebx - 1cd: 5e pop %esi - 1ce: 5f pop %edi - 1cf: 5d pop %ebp - 1d0: c3 ret - 1d1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 1d8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 1df: 90 nop - -000001e0 : - -int stat(const char *n, struct stat *st) { - 1e0: 55 push %ebp - 1e1: 89 e5 mov %esp,%ebp - 1e3: 56 push %esi - 1e4: 53 push %ebx - int fd; - int r; - - fd = open(n, O_RDONLY); - 1e5: 83 ec 08 sub $0x8,%esp - 1e8: 6a 00 push $0x0 - 1ea: ff 75 08 push 0x8(%ebp) - 1ed: e8 19 01 00 00 call 30b - if (fd < 0) { - 1f2: 83 c4 10 add $0x10,%esp - 1f5: 85 c0 test %eax,%eax - 1f7: 78 27 js 220 - return -1; - } - r = fstat(fd, st); - 1f9: 83 ec 08 sub $0x8,%esp - 1fc: ff 75 0c push 0xc(%ebp) - 1ff: 89 c3 mov %eax,%ebx - 201: 50 push %eax - 202: e8 cc 00 00 00 call 2d3 - close(fd); - 207: 89 1c 24 mov %ebx,(%esp) - r = fstat(fd, st); - 20a: 89 c6 mov %eax,%esi - close(fd); - 20c: e8 2a 01 00 00 call 33b - return r; - 211: 83 c4 10 add $0x10,%esp -} - 214: 8d 65 f8 lea -0x8(%ebp),%esp - 217: 89 f0 mov %esi,%eax - 219: 5b pop %ebx - 21a: 5e pop %esi - 21b: 5d pop %ebp - 21c: c3 ret - 21d: 8d 76 00 lea 0x0(%esi),%esi - return -1; - 220: be ff ff ff ff mov $0xffffffff,%esi - 225: eb ed jmp 214 - 227: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 22e: 66 90 xchg %ax,%ax - -00000230 : - -int atoi(const char *s) { - 230: 55 push %ebp - 231: 89 e5 mov %esp,%ebp - 233: 53 push %ebx - 234: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - n = 0; - while ('0' <= *s && *s <= '9') { - 237: 0f be 02 movsbl (%edx),%eax - 23a: 8d 48 d0 lea -0x30(%eax),%ecx - 23d: 80 f9 09 cmp $0x9,%cl - n = 0; - 240: b9 00 00 00 00 mov $0x0,%ecx - while ('0' <= *s && *s <= '9') { - 245: 77 1e ja 265 - 247: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 24e: 66 90 xchg %ax,%ax - n = n * 10 + *s++ - '0'; - 250: 83 c2 01 add $0x1,%edx - 253: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 256: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx - while ('0' <= *s && *s <= '9') { - 25a: 0f be 02 movsbl (%edx),%eax - 25d: 8d 58 d0 lea -0x30(%eax),%ebx - 260: 80 fb 09 cmp $0x9,%bl - 263: 76 eb jbe 250 - } - return n; -} - 265: 8b 5d fc mov -0x4(%ebp),%ebx - 268: 89 c8 mov %ecx,%eax - 26a: c9 leave - 26b: c3 ret - 26c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000270 : - -void* memmove(void *vdst, const void *vsrc, int n) { - 270: 55 push %ebp - 271: 89 e5 mov %esp,%ebp - 273: 57 push %edi - 274: 8b 45 10 mov 0x10(%ebp),%eax - 277: 8b 55 08 mov 0x8(%ebp),%edx - 27a: 56 push %esi - 27b: 8b 75 0c mov 0xc(%ebp),%esi - char *dst; - const char *src; - - dst = vdst; - src = vsrc; - while (n-- > 0) { - 27e: 85 c0 test %eax,%eax - 280: 7e 13 jle 295 - 282: 01 d0 add %edx,%eax - dst = vdst; - 284: 89 d7 mov %edx,%edi - 286: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 28d: 8d 76 00 lea 0x0(%esi),%esi - *dst++ = *src++; - 290: a4 movsb %ds:(%esi),%es:(%edi) - while (n-- > 0) { - 291: 39 f8 cmp %edi,%eax - 293: 75 fb jne 290 - } - return vdst; -} - 295: 5e pop %esi - 296: 89 d0 mov %edx,%eax - 298: 5f pop %edi - 299: 5d pop %ebp - 29a: c3 ret - -0000029b : -name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 29b: b8 01 00 00 00 mov $0x1,%eax - 2a0: cd 40 int $0x40 - 2a2: c3 ret - -000002a3 : -SYSCALL(exit) - 2a3: b8 02 00 00 00 mov $0x2,%eax - 2a8: cd 40 int $0x40 - 2aa: c3 ret - -000002ab : -SYSCALL(wait) - 2ab: b8 03 00 00 00 mov $0x3,%eax - 2b0: cd 40 int $0x40 - 2b2: c3 ret - -000002b3 : -SYSCALL(pipe) - 2b3: b8 04 00 00 00 mov $0x4,%eax - 2b8: cd 40 int $0x40 - 2ba: c3 ret - -000002bb : -SYSCALL(read) - 2bb: b8 05 00 00 00 mov $0x5,%eax - 2c0: cd 40 int $0x40 - 2c2: c3 ret - -000002c3 : -SYSCALL(kill) - 2c3: b8 06 00 00 00 mov $0x6,%eax - 2c8: cd 40 int $0x40 - 2ca: c3 ret - -000002cb : -SYSCALL(exec) - 2cb: b8 07 00 00 00 mov $0x7,%eax - 2d0: cd 40 int $0x40 - 2d2: c3 ret - -000002d3 : -SYSCALL(fstat) - 2d3: b8 08 00 00 00 mov $0x8,%eax - 2d8: cd 40 int $0x40 - 2da: c3 ret - -000002db : -SYSCALL(chdir) - 2db: b8 09 00 00 00 mov $0x9,%eax - 2e0: cd 40 int $0x40 - 2e2: c3 ret - -000002e3 : -SYSCALL(dup) - 2e3: b8 0a 00 00 00 mov $0xa,%eax - 2e8: cd 40 int $0x40 - 2ea: c3 ret - -000002eb : -SYSCALL(getpid) - 2eb: b8 0b 00 00 00 mov $0xb,%eax - 2f0: cd 40 int $0x40 - 2f2: c3 ret - -000002f3 : -SYSCALL(sbrk) - 2f3: b8 0c 00 00 00 mov $0xc,%eax - 2f8: cd 40 int $0x40 - 2fa: c3 ret - -000002fb : -SYSCALL(sleep) - 2fb: b8 0d 00 00 00 mov $0xd,%eax - 300: cd 40 int $0x40 - 302: c3 ret - -00000303 : -SYSCALL(uptime) - 303: b8 0e 00 00 00 mov $0xe,%eax - 308: cd 40 int $0x40 - 30a: c3 ret - -0000030b : -SYSCALL(open) - 30b: b8 0f 00 00 00 mov $0xf,%eax - 310: cd 40 int $0x40 - 312: c3 ret - -00000313 : -SYSCALL(write) - 313: b8 10 00 00 00 mov $0x10,%eax - 318: cd 40 int $0x40 - 31a: c3 ret - -0000031b : -SYSCALL(mknod) - 31b: b8 11 00 00 00 mov $0x11,%eax - 320: cd 40 int $0x40 - 322: c3 ret - -00000323 : -SYSCALL(unlink) - 323: b8 12 00 00 00 mov $0x12,%eax - 328: cd 40 int $0x40 - 32a: c3 ret - -0000032b : -SYSCALL(link) - 32b: b8 13 00 00 00 mov $0x13,%eax - 330: cd 40 int $0x40 - 332: c3 ret - -00000333 : -SYSCALL(mkdir) - 333: b8 14 00 00 00 mov $0x14,%eax - 338: cd 40 int $0x40 - 33a: c3 ret - -0000033b : -SYSCALL(close) - 33b: b8 15 00 00 00 mov $0x15,%eax - 340: cd 40 int $0x40 - 342: c3 ret - -00000343 : -SYSCALL(getch) - 343: b8 16 00 00 00 mov $0x16,%eax - 348: cd 40 int $0x40 - 34a: c3 ret - -0000034b : -SYSCALL(greeting) - 34b: b8 17 00 00 00 mov $0x17,%eax - 350: cd 40 int $0x40 - 352: c3 ret - -00000353 : -SYSCALL(shutdown) - 353: b8 18 00 00 00 mov $0x18,%eax - 358: cd 40 int $0x40 - 35a: c3 ret - 35b: 66 90 xchg %ax,%ax - 35d: 66 90 xchg %ax,%ax - 35f: 90 nop - -00000360 : - -static void putc(int fd, char c) { - write(fd, &c, 1); -} - -static void printint(int fd, int xx, int base, int sgn) { - 360: 55 push %ebp - 361: 89 e5 mov %esp,%ebp - 363: 57 push %edi - 364: 56 push %esi - 365: 53 push %ebx - 366: 83 ec 3c sub $0x3c,%esp - 369: 89 4d c4 mov %ecx,-0x3c(%ebp) - uint x; - - neg = 0; - if (sgn && xx < 0) { - neg = 1; - x = -xx; - 36c: 89 d1 mov %edx,%ecx -static void printint(int fd, int xx, int base, int sgn) { - 36e: 89 45 b8 mov %eax,-0x48(%ebp) - if (sgn && xx < 0) { - 371: 85 d2 test %edx,%edx - 373: 0f 89 7f 00 00 00 jns 3f8 - 379: f6 45 08 01 testb $0x1,0x8(%ebp) - 37d: 74 79 je 3f8 - neg = 1; - 37f: c7 45 bc 01 00 00 00 movl $0x1,-0x44(%ebp) - x = -xx; - 386: f7 d9 neg %ecx - } - else { - x = xx; - } - - i = 0; - 388: 31 db xor %ebx,%ebx - 38a: 8d 75 d7 lea -0x29(%ebp),%esi - 38d: 8d 76 00 lea 0x0(%esi),%esi - do { - buf[i++] = digits[x % base]; - 390: 89 c8 mov %ecx,%eax - 392: 31 d2 xor %edx,%edx - 394: 89 cf mov %ecx,%edi - 396: f7 75 c4 divl -0x3c(%ebp) - 399: 0f b6 92 a4 07 00 00 movzbl 0x7a4(%edx),%edx - 3a0: 89 45 c0 mov %eax,-0x40(%ebp) - 3a3: 89 d8 mov %ebx,%eax - 3a5: 8d 5b 01 lea 0x1(%ebx),%ebx - } - while ((x /= base) != 0); - 3a8: 8b 4d c0 mov -0x40(%ebp),%ecx - buf[i++] = digits[x % base]; - 3ab: 88 14 1e mov %dl,(%esi,%ebx,1) - while ((x /= base) != 0); - 3ae: 39 7d c4 cmp %edi,-0x3c(%ebp) - 3b1: 76 dd jbe 390 - if (neg) { - 3b3: 8b 4d bc mov -0x44(%ebp),%ecx - 3b6: 85 c9 test %ecx,%ecx - 3b8: 74 0c je 3c6 - buf[i++] = '-'; - 3ba: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) - buf[i++] = digits[x % base]; - 3bf: 89 d8 mov %ebx,%eax - buf[i++] = '-'; - 3c1: ba 2d 00 00 00 mov $0x2d,%edx - } - - while (--i >= 0) { - 3c6: 8b 7d b8 mov -0x48(%ebp),%edi - 3c9: 8d 5c 05 d7 lea -0x29(%ebp,%eax,1),%ebx - 3cd: eb 07 jmp 3d6 - 3cf: 90 nop - putc(fd, buf[i]); - 3d0: 0f b6 13 movzbl (%ebx),%edx - 3d3: 83 eb 01 sub $0x1,%ebx - write(fd, &c, 1); - 3d6: 83 ec 04 sub $0x4,%esp - 3d9: 88 55 d7 mov %dl,-0x29(%ebp) - 3dc: 6a 01 push $0x1 - 3de: 56 push %esi - 3df: 57 push %edi - 3e0: e8 2e ff ff ff call 313 - while (--i >= 0) { - 3e5: 83 c4 10 add $0x10,%esp - 3e8: 39 de cmp %ebx,%esi - 3ea: 75 e4 jne 3d0 - } -} - 3ec: 8d 65 f4 lea -0xc(%ebp),%esp - 3ef: 5b pop %ebx - 3f0: 5e pop %esi - 3f1: 5f pop %edi - 3f2: 5d pop %ebp - 3f3: c3 ret - 3f4: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - neg = 0; - 3f8: c7 45 bc 00 00 00 00 movl $0x0,-0x44(%ebp) - 3ff: eb 87 jmp 388 - 401: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 408: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 40f: 90 nop - -00000410 : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void printf(int fd, const char *fmt, ...) { - 410: 55 push %ebp - 411: 89 e5 mov %esp,%ebp - 413: 57 push %edi - 414: 56 push %esi - 415: 53 push %ebx - 416: 83 ec 2c sub $0x2c,%esp - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for (i = 0; fmt[i]; i++) { - 419: 8b 5d 0c mov 0xc(%ebp),%ebx -void printf(int fd, const char *fmt, ...) { - 41c: 8b 75 08 mov 0x8(%ebp),%esi - for (i = 0; fmt[i]; i++) { - 41f: 0f b6 13 movzbl (%ebx),%edx - 422: 84 d2 test %dl,%dl - 424: 74 6a je 490 - ap = (uint*)(void*)&fmt + 1; - 426: 8d 45 10 lea 0x10(%ebp),%eax - 429: 83 c3 01 add $0x1,%ebx - write(fd, &c, 1); - 42c: 8d 7d e7 lea -0x19(%ebp),%edi - state = 0; - 42f: 31 c9 xor %ecx,%ecx - ap = (uint*)(void*)&fmt + 1; - 431: 89 45 d0 mov %eax,-0x30(%ebp) - 434: eb 36 jmp 46c - 436: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 43d: 8d 76 00 lea 0x0(%esi),%esi - 440: 89 4d d4 mov %ecx,-0x2c(%ebp) - c = fmt[i] & 0xff; - if (state == 0) { - if (c == '%') { - state = '%'; - 443: b9 25 00 00 00 mov $0x25,%ecx - if (c == '%') { - 448: 83 f8 25 cmp $0x25,%eax - 44b: 74 15 je 462 - write(fd, &c, 1); - 44d: 83 ec 04 sub $0x4,%esp - 450: 88 55 e7 mov %dl,-0x19(%ebp) - 453: 6a 01 push $0x1 - 455: 57 push %edi - 456: 56 push %esi - 457: e8 b7 fe ff ff call 313 - 45c: 8b 4d d4 mov -0x2c(%ebp),%ecx - } - else { - putc(fd, c); - 45f: 83 c4 10 add $0x10,%esp - for (i = 0; fmt[i]; i++) { - 462: 0f b6 13 movzbl (%ebx),%edx - 465: 83 c3 01 add $0x1,%ebx - 468: 84 d2 test %dl,%dl - 46a: 74 24 je 490 - c = fmt[i] & 0xff; - 46c: 0f b6 c2 movzbl %dl,%eax - if (state == 0) { - 46f: 85 c9 test %ecx,%ecx - 471: 74 cd je 440 - } - } - else if (state == '%') { - 473: 83 f9 25 cmp $0x25,%ecx - 476: 75 ea jne 462 - if (c == 'd') { - 478: 83 f8 25 cmp $0x25,%eax - 47b: 0f 84 07 01 00 00 je 588 - 481: 83 e8 63 sub $0x63,%eax - 484: 83 f8 15 cmp $0x15,%eax - 487: 77 17 ja 4a0 - 489: ff 24 85 4c 07 00 00 jmp *0x74c(,%eax,4) - putc(fd, c); - } - state = 0; - } - } -} - 490: 8d 65 f4 lea -0xc(%ebp),%esp - 493: 5b pop %ebx - 494: 5e pop %esi - 495: 5f pop %edi - 496: 5d pop %ebp - 497: c3 ret - 498: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 49f: 90 nop - write(fd, &c, 1); - 4a0: 83 ec 04 sub $0x4,%esp - 4a3: 88 55 d4 mov %dl,-0x2c(%ebp) - 4a6: 6a 01 push $0x1 - 4a8: 57 push %edi - 4a9: 56 push %esi - 4aa: c6 45 e7 25 movb $0x25,-0x19(%ebp) - 4ae: e8 60 fe ff ff call 313 - putc(fd, c); - 4b3: 0f b6 55 d4 movzbl -0x2c(%ebp),%edx - write(fd, &c, 1); - 4b7: 83 c4 0c add $0xc,%esp - 4ba: 88 55 e7 mov %dl,-0x19(%ebp) - 4bd: 6a 01 push $0x1 - 4bf: 57 push %edi - 4c0: 56 push %esi - 4c1: e8 4d fe ff ff call 313 - putc(fd, c); - 4c6: 83 c4 10 add $0x10,%esp - state = 0; - 4c9: 31 c9 xor %ecx,%ecx - 4cb: eb 95 jmp 462 - 4cd: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 16, 0); - 4d0: 83 ec 0c sub $0xc,%esp - 4d3: b9 10 00 00 00 mov $0x10,%ecx - 4d8: 6a 00 push $0x0 - 4da: 8b 45 d0 mov -0x30(%ebp),%eax - 4dd: 8b 10 mov (%eax),%edx - 4df: 89 f0 mov %esi,%eax - 4e1: e8 7a fe ff ff call 360 - ap++; - 4e6: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 4ea: 83 c4 10 add $0x10,%esp - state = 0; - 4ed: 31 c9 xor %ecx,%ecx - 4ef: e9 6e ff ff ff jmp 462 - 4f4: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - s = (char*)*ap; - 4f8: 8b 45 d0 mov -0x30(%ebp),%eax - 4fb: 8b 10 mov (%eax),%edx - ap++; - 4fd: 83 c0 04 add $0x4,%eax - 500: 89 45 d0 mov %eax,-0x30(%ebp) - if (s == 0) { - 503: 85 d2 test %edx,%edx - 505: 0f 84 8d 00 00 00 je 598 - while (*s != 0) { - 50b: 0f b6 02 movzbl (%edx),%eax - state = 0; - 50e: 31 c9 xor %ecx,%ecx - while (*s != 0) { - 510: 84 c0 test %al,%al - 512: 0f 84 4a ff ff ff je 462 - 518: 89 5d d4 mov %ebx,-0x2c(%ebp) - 51b: 89 d3 mov %edx,%ebx - 51d: 8d 76 00 lea 0x0(%esi),%esi - write(fd, &c, 1); - 520: 83 ec 04 sub $0x4,%esp - s++; - 523: 83 c3 01 add $0x1,%ebx - 526: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 529: 6a 01 push $0x1 - 52b: 57 push %edi - 52c: 56 push %esi - 52d: e8 e1 fd ff ff call 313 - while (*s != 0) { - 532: 0f b6 03 movzbl (%ebx),%eax - 535: 83 c4 10 add $0x10,%esp - 538: 84 c0 test %al,%al - 53a: 75 e4 jne 520 - state = 0; - 53c: 8b 5d d4 mov -0x2c(%ebp),%ebx - 53f: 31 c9 xor %ecx,%ecx - 541: e9 1c ff ff ff jmp 462 - 546: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 54d: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 10, 1); - 550: 83 ec 0c sub $0xc,%esp - 553: b9 0a 00 00 00 mov $0xa,%ecx - 558: 6a 01 push $0x1 - 55a: e9 7b ff ff ff jmp 4da - 55f: 90 nop - putc(fd, *ap); - 560: 8b 45 d0 mov -0x30(%ebp),%eax - write(fd, &c, 1); - 563: 83 ec 04 sub $0x4,%esp - putc(fd, *ap); - 566: 8b 00 mov (%eax),%eax - write(fd, &c, 1); - 568: 6a 01 push $0x1 - 56a: 57 push %edi - 56b: 56 push %esi - putc(fd, *ap); - 56c: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 56f: e8 9f fd ff ff call 313 - ap++; - 574: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 578: 83 c4 10 add $0x10,%esp - state = 0; - 57b: 31 c9 xor %ecx,%ecx - 57d: e9 e0 fe ff ff jmp 462 - 582: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - putc(fd, c); - 588: 88 55 e7 mov %dl,-0x19(%ebp) - write(fd, &c, 1); - 58b: 83 ec 04 sub $0x4,%esp - 58e: e9 2a ff ff ff jmp 4bd - 593: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 597: 90 nop - s = "(null)"; - 598: ba 44 07 00 00 mov $0x744,%edx - while (*s != 0) { - 59d: 89 5d d4 mov %ebx,-0x2c(%ebp) - 5a0: b8 28 00 00 00 mov $0x28,%eax - 5a5: 89 d3 mov %edx,%ebx - 5a7: e9 74 ff ff ff jmp 520 - 5ac: 66 90 xchg %ax,%ax - 5ae: 66 90 xchg %ax,%ax - -000005b0 : -typedef union header Header; - -static Header base; -static Header *freep; - -void free(void *ap) { - 5b0: 55 push %ebp - Header *bp, *p; - - bp = (Header*)ap - 1; - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 5b1: a1 58 0a 00 00 mov 0xa58,%eax -void free(void *ap) { - 5b6: 89 e5 mov %esp,%ebp - 5b8: 57 push %edi - 5b9: 56 push %esi - 5ba: 53 push %ebx - 5bb: 8b 5d 08 mov 0x8(%ebp),%ebx - bp = (Header*)ap - 1; - 5be: 8d 4b f8 lea -0x8(%ebx),%ecx - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 5c1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 5c8: 89 c2 mov %eax,%edx - 5ca: 8b 00 mov (%eax),%eax - 5cc: 39 ca cmp %ecx,%edx - 5ce: 73 30 jae 600 - 5d0: 39 c1 cmp %eax,%ecx - 5d2: 72 04 jb 5d8 - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 5d4: 39 c2 cmp %eax,%edx - 5d6: 72 f0 jb 5c8 - break; - } - } - if (bp + bp->s.size == p->s.ptr) { - 5d8: 8b 73 fc mov -0x4(%ebx),%esi - 5db: 8d 3c f1 lea (%ecx,%esi,8),%edi - 5de: 39 f8 cmp %edi,%eax - 5e0: 74 30 je 612 - bp->s.size += p->s.ptr->s.size; - bp->s.ptr = p->s.ptr->s.ptr; - 5e2: 89 43 f8 mov %eax,-0x8(%ebx) - } - else { - bp->s.ptr = p->s.ptr; - } - if (p + p->s.size == bp) { - 5e5: 8b 42 04 mov 0x4(%edx),%eax - 5e8: 8d 34 c2 lea (%edx,%eax,8),%esi - 5eb: 39 f1 cmp %esi,%ecx - 5ed: 74 3a je 629 - p->s.size += bp->s.size; - p->s.ptr = bp->s.ptr; - 5ef: 89 0a mov %ecx,(%edx) - } - else { - p->s.ptr = bp; - } - freep = p; -} - 5f1: 5b pop %ebx - freep = p; - 5f2: 89 15 58 0a 00 00 mov %edx,0xa58 -} - 5f8: 5e pop %esi - 5f9: 5f pop %edi - 5fa: 5d pop %ebp - 5fb: c3 ret - 5fc: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 600: 39 c2 cmp %eax,%edx - 602: 72 c4 jb 5c8 - 604: 39 c1 cmp %eax,%ecx - 606: 73 c0 jae 5c8 - if (bp + bp->s.size == p->s.ptr) { - 608: 8b 73 fc mov -0x4(%ebx),%esi - 60b: 8d 3c f1 lea (%ecx,%esi,8),%edi - 60e: 39 f8 cmp %edi,%eax - 610: 75 d0 jne 5e2 - bp->s.size += p->s.ptr->s.size; - 612: 03 70 04 add 0x4(%eax),%esi - 615: 89 73 fc mov %esi,-0x4(%ebx) - bp->s.ptr = p->s.ptr->s.ptr; - 618: 8b 02 mov (%edx),%eax - 61a: 8b 00 mov (%eax),%eax - 61c: 89 43 f8 mov %eax,-0x8(%ebx) - if (p + p->s.size == bp) { - 61f: 8b 42 04 mov 0x4(%edx),%eax - 622: 8d 34 c2 lea (%edx,%eax,8),%esi - 625: 39 f1 cmp %esi,%ecx - 627: 75 c6 jne 5ef - p->s.size += bp->s.size; - 629: 03 43 fc add -0x4(%ebx),%eax - freep = p; - 62c: 89 15 58 0a 00 00 mov %edx,0xa58 - p->s.size += bp->s.size; - 632: 89 42 04 mov %eax,0x4(%edx) - p->s.ptr = bp->s.ptr; - 635: 8b 4b f8 mov -0x8(%ebx),%ecx - 638: 89 0a mov %ecx,(%edx) -} - 63a: 5b pop %ebx - 63b: 5e pop %esi - 63c: 5f pop %edi - 63d: 5d pop %ebp - 63e: c3 ret - 63f: 90 nop - -00000640 : - hp->s.size = nu; - free((void*)(hp + 1)); - return freep; -} - -void* malloc(uint nbytes) { - 640: 55 push %ebp - 641: 89 e5 mov %esp,%ebp - 643: 57 push %edi - 644: 56 push %esi - 645: 53 push %ebx - 646: 83 ec 1c sub $0x1c,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 649: 8b 45 08 mov 0x8(%ebp),%eax - if ((prevp = freep) == 0) { - 64c: 8b 3d 58 0a 00 00 mov 0xa58,%edi - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 652: 8d 70 07 lea 0x7(%eax),%esi - 655: c1 ee 03 shr $0x3,%esi - 658: 83 c6 01 add $0x1,%esi - if ((prevp = freep) == 0) { - 65b: 85 ff test %edi,%edi - 65d: 0f 84 9d 00 00 00 je 700 - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 663: 8b 17 mov (%edi),%edx - if (p->s.size >= nunits) { - 665: 8b 4a 04 mov 0x4(%edx),%ecx - 668: 39 f1 cmp %esi,%ecx - 66a: 73 6a jae 6d6 - 66c: bb 00 10 00 00 mov $0x1000,%ebx - 671: 39 de cmp %ebx,%esi - 673: 0f 43 de cmovae %esi,%ebx - p = sbrk(nu * sizeof(Header)); - 676: 8d 04 dd 00 00 00 00 lea 0x0(,%ebx,8),%eax - 67d: 89 45 e4 mov %eax,-0x1c(%ebp) - 680: eb 17 jmp 699 - 682: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 688: 8b 02 mov (%edx),%eax - if (p->s.size >= nunits) { - 68a: 8b 48 04 mov 0x4(%eax),%ecx - 68d: 39 f1 cmp %esi,%ecx - 68f: 73 4f jae 6e0 - p->s.size = nunits; - } - freep = prevp; - return (void*)(p + 1); - } - if (p == freep) { - 691: 8b 3d 58 0a 00 00 mov 0xa58,%edi - 697: 89 c2 mov %eax,%edx - 699: 39 d7 cmp %edx,%edi - 69b: 75 eb jne 688 - p = sbrk(nu * sizeof(Header)); - 69d: 83 ec 0c sub $0xc,%esp - 6a0: ff 75 e4 push -0x1c(%ebp) - 6a3: e8 4b fc ff ff call 2f3 - if (p == (char*)-1) { - 6a8: 83 c4 10 add $0x10,%esp - 6ab: 83 f8 ff cmp $0xffffffff,%eax - 6ae: 74 1c je 6cc - hp->s.size = nu; - 6b0: 89 58 04 mov %ebx,0x4(%eax) - free((void*)(hp + 1)); - 6b3: 83 ec 0c sub $0xc,%esp - 6b6: 83 c0 08 add $0x8,%eax - 6b9: 50 push %eax - 6ba: e8 f1 fe ff ff call 5b0 - return freep; - 6bf: 8b 15 58 0a 00 00 mov 0xa58,%edx - if ((p = morecore(nunits)) == 0) { - 6c5: 83 c4 10 add $0x10,%esp - 6c8: 85 d2 test %edx,%edx - 6ca: 75 bc jne 688 - return 0; - } - } - } -} - 6cc: 8d 65 f4 lea -0xc(%ebp),%esp - return 0; - 6cf: 31 c0 xor %eax,%eax -} - 6d1: 5b pop %ebx - 6d2: 5e pop %esi - 6d3: 5f pop %edi - 6d4: 5d pop %ebp - 6d5: c3 ret - if (p->s.size >= nunits) { - 6d6: 89 d0 mov %edx,%eax - 6d8: 89 fa mov %edi,%edx - 6da: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - if (p->s.size == nunits) { - 6e0: 39 ce cmp %ecx,%esi - 6e2: 74 4c je 730 - p->s.size -= nunits; - 6e4: 29 f1 sub %esi,%ecx - 6e6: 89 48 04 mov %ecx,0x4(%eax) - p += p->s.size; - 6e9: 8d 04 c8 lea (%eax,%ecx,8),%eax - p->s.size = nunits; - 6ec: 89 70 04 mov %esi,0x4(%eax) - freep = prevp; - 6ef: 89 15 58 0a 00 00 mov %edx,0xa58 -} - 6f5: 8d 65 f4 lea -0xc(%ebp),%esp - return (void*)(p + 1); - 6f8: 83 c0 08 add $0x8,%eax -} - 6fb: 5b pop %ebx - 6fc: 5e pop %esi - 6fd: 5f pop %edi - 6fe: 5d pop %ebp - 6ff: c3 ret - base.s.ptr = freep = prevp = &base; - 700: c7 05 58 0a 00 00 5c movl $0xa5c,0xa58 - 707: 0a 00 00 - base.s.size = 0; - 70a: bf 5c 0a 00 00 mov $0xa5c,%edi - base.s.ptr = freep = prevp = &base; - 70f: c7 05 5c 0a 00 00 5c movl $0xa5c,0xa5c - 716: 0a 00 00 - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 719: 89 fa mov %edi,%edx - base.s.size = 0; - 71b: c7 05 60 0a 00 00 00 movl $0x0,0xa60 - 722: 00 00 00 - if (p->s.size >= nunits) { - 725: e9 42 ff ff ff jmp 66c - 72a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - prevp->s.ptr = p->s.ptr; - 730: 8b 08 mov (%eax),%ecx - 732: 89 0a mov %ecx,(%edx) - 734: eb b9 jmp 6ef diff --git a/argtest.d b/argtest.d deleted file mode 100644 index 2c57752..0000000 --- a/argtest.d +++ /dev/null @@ -1 +0,0 @@ -argtest.o: argtest.c /usr/include/stdc-predef.h types.h user.h diff --git a/argtest.o b/argtest.o deleted file mode 100644 index 979a741f74be45e81d89bee86f2abffea99dc3c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3276 zcma)8TWDNG7@j$oO`1)UO=BC=D%oD5skobN8d{sST3c-zsl6DY^+r6|oNSJ6&Zg&5 zTT%NEK}7_WB0dy~FFuG5eenW5iGmNl)JH``@PdeVdr}nR_sz~^PY|g;%zXcC{+a)r zfBtjM-+A<~lu{Uy!WJz_hzspa%cz1Ou}N$cw@0<&;Otm&Fzyg99^K|Fee=um>A$9) z|MtFnCr>W@*#1K0g>%l*-}32g?=#ek$qnMA<SNgMQDL_?4+HO} zQ9OvPT%lehQw8NXIl{4Cb{uD`bsEz+codo@l%Mw5YE>>dTZiSOGdyY~!WkX2(np-J zy>@*5lC$@qoD|n#jiuJLw%{W+v+%3XYJFj=$UbjQKebU{M>$&SUx9@(p>y(S~a_rnCx2SNU zDetFnO6y{`kD^o#iRLRft|xo!=kqx@A|fRIAO-6idh9G#55XGigvyg0LyX z3A~e%R}Z{62y0DcV^Ucp>KRUnA1CFi z7+&ya18+EWaKK=R+JW(#(q>r9~wV&XskFiHIs%(s-I}7 zk}9$C^vFng$LMyg=G(u96G%RBkC0Ec%T1k*^BijCX6RUxBvprZbV@N%aII9_(QT)T zxk8(jK3T|F>Dhv9rAgDXHM8^#IpSCLqZP7OT_bb|lx~*nW>v4KY_zy6*{XrIG`2v) z$&f7y8Hw@P+FE3bUXj-#b6bb~vn$A>AFPnFwH~y3vHG2=vfcqti7T`lXrXx?BBFbv zZJ~jp*$|O}YVPR$8z=)e5^;gI5aGOC`>A;FXFRUkr}4PPP~%yROGI>?SG4@P#J$8;#icU1_gRn$`y!yy-Xh{yeLT*o0?gF zCap~e;amf274OZ=ME;qqwce=KgE(PG#L!-m7uNh$swk}e%dH-Sz6p$j7?$d3C082@ zytbkoqLq}<&Pu99G`I5Sr&aGk;{T7>>v@0F#{<~>M`^7!cWblu<0B>gm*0)Bu@hjLya?#pqTMsvOckjF6$u}(<*JwW-Y_fNTw1^i-j@W!L0)VWRqO-^9N zvlu^-(PV6QL(ax~2Jzm5j`7+sOuUD|n>AoX3gHVfnvAUh+3+--w1k+}J_KXqzfE@E zeb|gSa$l79%DzkB%^I-cGU64=0xZ`Lrx6~r4LqsiEK@3Zk9 z%EV)5H1Xa9Z`Lrx&xm({j3#4y19CQA9r1>sW4_GW#Cr!k*X+O`Eup~Hn;?+Ma(tlC z_`QYz9(0C`-=|QJH-3M>k2Pt?_^Cc+l)%B&pAQv-X4VkbAWcO>@H?V;0`nmKfRWAj z0`ld3VZQ9uCf{rrIZ%SC-~v G{Qd!9w~Vp? diff --git a/argtest.sym b/argtest.sym deleted file mode 100644 index d19cced..0000000 --- a/argtest.sym +++ /dev/null @@ -1,48 +0,0 @@ -00000000 argtest.c -00000000 ulib.c -00000000 printf.c -00000360 printint -000007a4 digits.0 -00000000 umalloc.c -00000a58 freep -00000a5c base -00000050 strcpy -00000410 printf -0000034b greeting -00000270 memmove -0000031b mknod -00000170 gets -000002eb getpid -00000640 malloc -000002fb sleep -000002b3 pipe -00000343 getch -00000313 write -000002d3 fstat -000002c3 kill -000002db chdir -000002cb exec -000002ab wait -000002bb read -00000323 unlink -0000029b fork -000002f3 sbrk -00000303 uptime -00000a58 __bss_start -00000110 memset -00000000 main -00000080 strcmp -00000353 shutdown -000002e3 dup -000001e0 stat -00000a58 _edata -00000a64 _end -0000032b link -000002a3 exit -00000230 atoi -000000e0 strlen -0000030b open -00000130 strchr -00000333 mkdir -0000033b close -000005b0 free diff --git a/bio.d b/bio.d deleted file mode 100644 index b4bbd30..0000000 --- a/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 \ - sleeplock.h fs.h buf.h diff --git a/bio.o b/bio.o deleted file mode 100644 index 0535832e89eaf7bd208f6a1ef6c17e62742d4d5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7012 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 diff --git a/bootasm.d b/bootasm.d deleted file mode 100644 index 3b3dc19..0000000 --- a/bootasm.d +++ /dev/null @@ -1 +0,0 @@ -bootasm.o: bootasm.S asm.h memlayout.h mmu.h diff --git a/bootasm.o b/bootasm.o deleted file mode 100644 index 0db07ccdd1f1cac0a1de6af735c79864c42a55b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1708 zcma)6OH30{6ur|Hzt9#TV8loTNr;~r+8To~CXo1vK@ADIz^E{_(~qGo=?n%|YTTNJ zxOC~tr3)7 z>}VpfSl~JB!>DviQnu60#>Ymp@%~HxWn^jl)rXCI$Ube%Cyc(5BvQ@7lXpg9sQEQ5 zd!(?Ilpvz8Cerxa*nGoun?G8u*0-OlK?RXk3+(xNfX~*YU#4NWi`5}9ISxdp-{V~b z_J{>C=(ig&1|x~c5m;rEAL)qj8|^fPEz8PU)|i#%Cp&w7YVyt$Y*SWx_IBhbQdkuy zU$!l`FgLT}PSaupjUNg=!!EuRYU0?_CZxdM#DMeb9F ze~7qW{9cH>58~O-&r=$>RD_CwNAC{peZ)?YLm_e^sqZ2pC`sg%neIx(vvWYN9$-na zy0c(<&ax+F-u7%UbFM2Ujd>@xRGeEVR~@+8d=7ECzg#WUl;6(f>dph*YuD{+(Lur> z0b~DH2H86n&qCpUfh(#LfpM1U`6U_7Q2Aoo!C zo6+lzqb_r^F3+dx&V#EMP`L%Amn0PBd*CLb@Nhr)o;T!37OQ@TKjdd~7?YfV_ znNOW}6$*8bRksLSZfne>?iVWhhU5Pw-Lu FegQg&ySo4Y diff --git a/bootblock b/bootblock deleted file mode 100644 index ccebab4e51219d356eaa3c71debb09e5867b6800..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmexmc%bh_-+{ghPf}JemHygr@mUI#b^locKciSi4Zp&HwB{3x{7MI28P;$xr0o!3 zfaplu!NAb>pzp;Vh8hNj7Y`U17+(LI03^ZS|9>Dg>pTOPo^+l;oFM?HYS(v028K7y z4-VKkl>Rsz+W9m*xI32T#nb=)|L*|GFzosSB;W1&3?w^myz9Ji@CC=NFCZZhQ()Iu z7*nG8#DiVmK)f9aAZ;LH-@TXzG^V?jV`l?M=mSvb&*$9e_*k$#VZqIBc)DXbx=RH* z?=#o(bbe6%4^*Lf_~1Lv=3|VO_sgW3-*AKlzeoof(s-DGiGcwq+: -# 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: 68 7c 0f 20 c0 push $0xc0200f7c - movl %cr0, %eax - orl $CR0_PE, %eax - 7c25: 66 83 c8 01 or $0x1,%ax - movl %eax, %cr0 - 7c29: 0f 22 c0 mov %eax,%cr0 - - # Complete the transition to 32-bit protected mode by using a 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 .byte 0xea - 7c2d: 31 7c 08 00 xor %edi,0x0(%eax,%ecx,1) - -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 e0 00 00 00 call 7d2d - -00007c4d : - - # If bootmain returns (it shouldn't), loop. -spin: - jmp spin - 7c4d: eb fe jmp 7c4d - 7c4f: 90 nop - -00007c50 : - ... - 7c58: ff (bad) - 7c59: ff 00 incl (%eax) - 7c5b: 00 00 add %al,(%eax) - 7c5d: 9a cf 00 ff ff 00 00 lcall $0x0,$0xffff00cf - 7c64: 00 .byte 0x0 - 7c65: 92 xchg %eax,%edx - 7c66: cf iret - ... - -00007c68 : - 7c68: 17 pop %ss - 7c69: 00 50 7c add %dl,0x7c(%eax) - ... - -00007c6e : -// Routines to let C code use special x86 instructions. - -static inline uchar inb(ushort port) { - uchar data; - - asm volatile ("in %1,%0" : "=a" (data) : "d" (port)); - 7c6e: ba f7 01 00 00 mov $0x1f7,%edx - 7c73: ec in (%dx),%al - entry(); -} - -void waitdisk(void) { - // Wait for disk ready. - while ((inb(0x1F7) & 0xC0) != 0x40) { - 7c74: 83 e0 c0 and $0xffffffc0,%eax - 7c77: 3c 40 cmp $0x40,%al - 7c79: 75 f8 jne 7c73 - ; - } -} - 7c7b: c3 ret - -00007c7c : - -// Read a single sector at offset into dst. -void readsect(void *dst, uint offset) { - 7c7c: 55 push %ebp - 7c7d: 89 e5 mov %esp,%ebp - 7c7f: 57 push %edi - 7c80: 53 push %ebx - 7c81: 8b 5d 0c mov 0xc(%ebp),%ebx - // Issue command. - waitdisk(); - 7c84: e8 e5 ff ff ff call 7c6e - "d" (port), "0" (addr), "1" (cnt) : - "memory", "cc"); -} - -static inline void outb(ushort port, uchar data) { - asm volatile ("out %0,%1" : : "a" (data), "d" (port)); - 7c89: b8 01 00 00 00 mov $0x1,%eax - 7c8e: ba f2 01 00 00 mov $0x1f2,%edx - 7c93: ee out %al,(%dx) - 7c94: ba f3 01 00 00 mov $0x1f3,%edx - 7c99: 89 d8 mov %ebx,%eax - 7c9b: ee out %al,(%dx) - outb(0x1F2, 1); // count = 1 - outb(0x1F3, offset); - outb(0x1F4, offset >> 8); - 7c9c: 89 d8 mov %ebx,%eax - 7c9e: c1 e8 08 shr $0x8,%eax - 7ca1: ba f4 01 00 00 mov $0x1f4,%edx - 7ca6: ee out %al,(%dx) - outb(0x1F5, offset >> 16); - 7ca7: 89 d8 mov %ebx,%eax - 7ca9: c1 e8 10 shr $0x10,%eax - 7cac: ba f5 01 00 00 mov $0x1f5,%edx - 7cb1: ee out %al,(%dx) - outb(0x1F6, (offset >> 24) | 0xE0); - 7cb2: 89 d8 mov %ebx,%eax - 7cb4: c1 e8 18 shr $0x18,%eax - 7cb7: 83 c8 e0 or $0xffffffe0,%eax - 7cba: ba f6 01 00 00 mov $0x1f6,%edx - 7cbf: ee out %al,(%dx) - 7cc0: b8 20 00 00 00 mov $0x20,%eax - 7cc5: ba f7 01 00 00 mov $0x1f7,%edx - 7cca: ee out %al,(%dx) - outb(0x1F7, 0x20); // cmd 0x20 - read sectors - - // Read data. - waitdisk(); - 7ccb: e8 9e ff ff ff call 7c6e - asm volatile ("cld; rep insl" : - 7cd0: 8b 7d 08 mov 0x8(%ebp),%edi - 7cd3: b9 80 00 00 00 mov $0x80,%ecx - 7cd8: ba f0 01 00 00 mov $0x1f0,%edx - 7cdd: fc cld - 7cde: f3 6d rep insl (%dx),%es:(%edi) - insl(0x1F0, dst, SECTSIZE / 4); -} - 7ce0: 5b pop %ebx - 7ce1: 5f pop %edi - 7ce2: 5d pop %ebp - 7ce3: c3 ret - -00007ce4 : - -// Read 'count' bytes at 'offset' from kernel into physical address 'pa'. -// Might copy more than asked. - -void readseg(uchar* pa, uint count, uint offset) { - 7ce4: 55 push %ebp - 7ce5: 89 e5 mov %esp,%ebp - 7ce7: 57 push %edi - 7ce8: 56 push %esi - 7ce9: 53 push %ebx - 7cea: 83 ec 0c sub $0xc,%esp - 7ced: 8b 5d 08 mov 0x8(%ebp),%ebx - 7cf0: 8b 75 10 mov 0x10(%ebp),%esi - uchar* epa; - - epa = pa + count; - 7cf3: 89 df mov %ebx,%edi - 7cf5: 03 7d 0c add 0xc(%ebp),%edi - - // Round down to sector boundary. - pa -= offset % SECTSIZE; - 7cf8: 89 f0 mov %esi,%eax - 7cfa: 25 ff 01 00 00 and $0x1ff,%eax - 7cff: 29 c3 sub %eax,%ebx - - // Translate from bytes to sectors; kernel starts at sector 1. - offset = (offset / SECTSIZE) + 1; - 7d01: c1 ee 09 shr $0x9,%esi - 7d04: 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++) { - 7d07: 39 df cmp %ebx,%edi - 7d09: 76 1a jbe 7d25 - readsect(pa, offset); - 7d0b: 83 ec 08 sub $0x8,%esp - 7d0e: 56 push %esi - 7d0f: 53 push %ebx - 7d10: e8 67 ff ff ff call 7c7c - for (; pa < epa; pa += SECTSIZE, offset++) { - 7d15: 81 c3 00 02 00 00 add $0x200,%ebx - 7d1b: 83 c6 01 add $0x1,%esi - 7d1e: 83 c4 10 add $0x10,%esp - 7d21: 39 df cmp %ebx,%edi - 7d23: 77 e6 ja 7d0b - } -} - 7d25: 8d 65 f4 lea -0xc(%ebp),%esp - 7d28: 5b pop %ebx - 7d29: 5e pop %esi - 7d2a: 5f pop %edi - 7d2b: 5d pop %ebp - 7d2c: c3 ret - -00007d2d : -void bootmain(void) { - 7d2d: 55 push %ebp - 7d2e: 89 e5 mov %esp,%ebp - 7d30: 57 push %edi - 7d31: 56 push %esi - 7d32: 53 push %ebx - 7d33: 83 ec 10 sub $0x10,%esp - readseg((uchar*)elf, 4096, 0); - 7d36: 6a 00 push $0x0 - 7d38: 68 00 10 00 00 push $0x1000 - 7d3d: 68 00 00 01 00 push $0x10000 - 7d42: e8 9d ff ff ff call 7ce4 - if (elf->magic != ELF_MAGIC) { - 7d47: 83 c4 10 add $0x10,%esp - 7d4a: 81 3d 00 00 01 00 7f cmpl $0x464c457f,0x10000 - 7d51: 45 4c 46 - 7d54: 75 21 jne 7d77 - ph = (struct proghdr*)((uchar*)elf + elf->phoff); - 7d56: a1 1c 00 01 00 mov 0x1001c,%eax - 7d5b: 8d 98 00 00 01 00 lea 0x10000(%eax),%ebx - eph = ph + elf->phnum; - 7d61: 0f b7 35 2c 00 01 00 movzwl 0x1002c,%esi - 7d68: c1 e6 05 shl $0x5,%esi - 7d6b: 01 de add %ebx,%esi - for (; ph < eph; ph++) { - 7d6d: 39 f3 cmp %esi,%ebx - 7d6f: 72 15 jb 7d86 - entry(); - 7d71: ff 15 18 00 01 00 call *0x10018 -} - 7d77: 8d 65 f4 lea -0xc(%ebp),%esp - 7d7a: 5b pop %ebx - 7d7b: 5e pop %esi - 7d7c: 5f pop %edi - 7d7d: 5d pop %ebp - 7d7e: c3 ret - for (; ph < eph; ph++) { - 7d7f: 83 c3 20 add $0x20,%ebx - 7d82: 39 de cmp %ebx,%esi - 7d84: 76 eb jbe 7d71 - pa = (uchar*)ph->paddr; - 7d86: 8b 7b 0c mov 0xc(%ebx),%edi - readseg(pa, ph->filesz, ph->off); - 7d89: 83 ec 04 sub $0x4,%esp - 7d8c: ff 73 04 push 0x4(%ebx) - 7d8f: ff 73 10 push 0x10(%ebx) - 7d92: 57 push %edi - 7d93: e8 4c ff ff ff call 7ce4 - if (ph->memsz > ph->filesz) { - 7d98: 8b 4b 14 mov 0x14(%ebx),%ecx - 7d9b: 8b 43 10 mov 0x10(%ebx),%eax - 7d9e: 83 c4 10 add $0x10,%esp - 7da1: 39 c1 cmp %eax,%ecx - 7da3: 76 da jbe 7d7f - stosb(pa + ph->filesz, 0, ph->memsz - ph->filesz); - 7da5: 01 c7 add %eax,%edi - 7da7: 29 c1 sub %eax,%ecx - "d" (port), "0" (addr), "1" (cnt) : - "cc"); -} - -static inline void stosb(void *addr, int data, int cnt) { - asm volatile ("cld; rep stosb" : - 7da9: b8 00 00 00 00 mov $0x0,%eax - 7dae: fc cld - 7daf: f3 aa rep stos %al,%es:(%edi) - "=D" (addr), "=c" (cnt) : - "0" (addr), "1" (cnt), "a" (data) : - "memory", "cc"); -} - 7db1: eb cc jmp 7d7f diff --git a/bootblock.o b/bootblock.o deleted file mode 100644 index 485cd592cf16cba8b689852e740f7773ca3912ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5688 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 diff --git a/bootblockother.o b/bootblockother.o deleted file mode 100644 index 83514b1b631c7a68469c442e0d855eab51888f4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1268 zcma)6&ubG=5T3Vbv?|ReT3exF*VbZD%-W=&NYm1T3Pwa|6(WVWF`FM^ez9)nDW?H0&!#?EB$;@b6RI&Q7P>**3+H-!`poWo=WKW8KOJ z3+jHVY$PcVR5pk@yPfx@wY#>NG{<(|d~Fe#V>?(hAV{oY)$@s;sP&G1L;Uy)J)2g2yrQ3@e2Akr?2_Cj|!>Wk`k?HB93KLlr1)@ch^@F>c#-wvfxuujhgC_Eau6 zTbRui=4$s13j^Gy?=83dn(L(($Zojhx?{^qaba2B^jcNhks-neDWFIbs$ z_ToR3dxr9+_L|yqSn8uMy#%nYPLYd(h7kFS1t!!h-HGsVG=fuSg`m@jD`7tgp8bno z0)HCmp9AOPVPic-_S>Rr*)O~D9!cNv{A`9~yWZp?6^kV)i>gdTx9s>1QnO5ymdg#_ zDIxn_kZT(G?h~KVWw-RGT68?8S#_nR^=74|u~RB}?qkg!)SIrx7^ESW@pv!T_Gx#Yjiu7h8nA?L`G{_({J>wd< z#@w0&xyv9l-MbCWn4izK4ss!YDsqqA3A5I{MUiioHm&0v+|{7-35C~y2jKhQd@jk5 ehkrw0L@%&tPN5+19JUlZs(T0BL)8g_*8K)Z6SWrr diff --git a/bootmain.d b/bootmain.d deleted file mode 100644 index b32eaf5..0000000 --- a/bootmain.d +++ /dev/null @@ -1 +0,0 @@ -bootmain.o: bootmain.c types.h elf.h x86.h memlayout.h diff --git a/bootmain.o b/bootmain.o deleted file mode 100644 index 0734b9195426bedc42a394220e273f57b5df7316..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6804 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 diff --git a/cat.asm b/cat.asm deleted file mode 100644 index 014fa56..0000000 --- a/cat.asm +++ /dev/null @@ -1,1256 +0,0 @@ - -_cat: file format elf32-i386 - - -Disassembly of section .text: - -00000000
    : - printf(1, "cat: read error\n"); - exit(); - } -} - -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 push -0x4(%ecx) - a: 55 push %ebp - b: 89 e5 mov %esp,%ebp - d: 57 push %edi - e: 56 push %esi - f: be 01 00 00 00 mov $0x1,%esi - 14: 53 push %ebx - 15: 51 push %ecx - 16: 83 ec 18 sub $0x18,%esp - 19: 8b 01 mov (%ecx),%eax - 1b: 8b 59 04 mov 0x4(%ecx),%ebx - 1e: 89 45 e4 mov %eax,-0x1c(%ebp) - 21: 83 c3 04 add $0x4,%ebx - int fd, i; - - if (argc <= 1) { - 24: 83 f8 01 cmp $0x1,%eax - 27: 7e 54 jle 7d - 29: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - cat(0); - exit(); - } - - for (i = 1; i < argc; i++) { - if ((fd = open(argv[i], 0)) < 0) { - 30: 83 ec 08 sub $0x8,%esp - 33: 6a 00 push $0x0 - 35: ff 33 push (%ebx) - 37: e8 8f 03 00 00 call 3cb - 3c: 83 c4 10 add $0x10,%esp - 3f: 89 c7 mov %eax,%edi - 41: 85 c0 test %eax,%eax - 43: 78 24 js 69 - printf(1, "cat: cannot open %s\n", argv[i]); - exit(); - } - cat(fd); - 45: 83 ec 0c sub $0xc,%esp - for (i = 1; i < argc; i++) { - 48: 83 c6 01 add $0x1,%esi - 4b: 83 c3 04 add $0x4,%ebx - cat(fd); - 4e: 50 push %eax - 4f: e8 3c 00 00 00 call 90 - close(fd); - 54: 89 3c 24 mov %edi,(%esp) - 57: e8 9f 03 00 00 call 3fb - for (i = 1; i < argc; i++) { - 5c: 83 c4 10 add $0x10,%esp - 5f: 39 75 e4 cmp %esi,-0x1c(%ebp) - 62: 75 cc jne 30 - } - exit(); - 64: e8 fa 02 00 00 call 363 - printf(1, "cat: cannot open %s\n", argv[i]); - 69: 50 push %eax - 6a: ff 33 push (%ebx) - 6c: 68 1b 08 00 00 push $0x81b - 71: 6a 01 push $0x1 - 73: e8 58 04 00 00 call 4d0 - exit(); - 78: e8 e6 02 00 00 call 363 - cat(0); - 7d: 83 ec 0c sub $0xc,%esp - 80: 6a 00 push $0x0 - 82: e8 09 00 00 00 call 90 - exit(); - 87: e8 d7 02 00 00 call 363 - 8c: 66 90 xchg %ax,%ax - 8e: 66 90 xchg %ax,%ax - -00000090 : -void cat(int fd) { - 90: 55 push %ebp - 91: 89 e5 mov %esp,%ebp - 93: 56 push %esi - 94: 8b 75 08 mov 0x8(%ebp),%esi - 97: 53 push %ebx - while ((n = read(fd, buf, sizeof(buf))) > 0) { - 98: eb 1d jmp b7 - 9a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - if (write(1, buf, n) != n) { - a0: 83 ec 04 sub $0x4,%esp - a3: 53 push %ebx - a4: 68 80 0b 00 00 push $0xb80 - a9: 6a 01 push $0x1 - ab: e8 23 03 00 00 call 3d3 - b0: 83 c4 10 add $0x10,%esp - b3: 39 d8 cmp %ebx,%eax - b5: 75 25 jne dc - while ((n = read(fd, buf, sizeof(buf))) > 0) { - b7: 83 ec 04 sub $0x4,%esp - ba: 68 00 02 00 00 push $0x200 - bf: 68 80 0b 00 00 push $0xb80 - c4: 56 push %esi - c5: e8 b1 02 00 00 call 37b - ca: 83 c4 10 add $0x10,%esp - cd: 89 c3 mov %eax,%ebx - cf: 85 c0 test %eax,%eax - d1: 7f cd jg a0 - if (n < 0) { - d3: 75 1b jne f0 -} - d5: 8d 65 f8 lea -0x8(%ebp),%esp - d8: 5b pop %ebx - d9: 5e pop %esi - da: 5d pop %ebp - db: c3 ret - printf(1, "cat: write error\n"); - dc: 83 ec 08 sub $0x8,%esp - df: 68 f8 07 00 00 push $0x7f8 - e4: 6a 01 push $0x1 - e6: e8 e5 03 00 00 call 4d0 - exit(); - eb: e8 73 02 00 00 call 363 - printf(1, "cat: read error\n"); - f0: 50 push %eax - f1: 50 push %eax - f2: 68 0a 08 00 00 push $0x80a - f7: 6a 01 push $0x1 - f9: e8 d2 03 00 00 call 4d0 - exit(); - fe: e8 60 02 00 00 call 363 - 103: 66 90 xchg %ax,%ax - 105: 66 90 xchg %ax,%ax - 107: 66 90 xchg %ax,%ax - 109: 66 90 xchg %ax,%ax - 10b: 66 90 xchg %ax,%ax - 10d: 66 90 xchg %ax,%ax - 10f: 90 nop - -00000110 : -#include "stat.h" -#include "fcntl.h" -#include "user.h" -#include "x86.h" - -char*strcpy(char *s, const char *t) { - 110: 55 push %ebp - char *os; - - os = s; - while ((*s++ = *t++) != 0) { - 111: 31 c0 xor %eax,%eax -char*strcpy(char *s, const char *t) { - 113: 89 e5 mov %esp,%ebp - 115: 53 push %ebx - 116: 8b 4d 08 mov 0x8(%ebp),%ecx - 119: 8b 5d 0c mov 0xc(%ebp),%ebx - 11c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - while ((*s++ = *t++) != 0) { - 120: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 124: 88 14 01 mov %dl,(%ecx,%eax,1) - 127: 83 c0 01 add $0x1,%eax - 12a: 84 d2 test %dl,%dl - 12c: 75 f2 jne 120 - ; - } - return os; -} - 12e: 8b 5d fc mov -0x4(%ebp),%ebx - 131: 89 c8 mov %ecx,%eax - 133: c9 leave - 134: c3 ret - 135: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 13c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000140 : - -int strcmp(const char *p, const char *q) { - 140: 55 push %ebp - 141: 89 e5 mov %esp,%ebp - 143: 53 push %ebx - 144: 8b 55 08 mov 0x8(%ebp),%edx - 147: 8b 4d 0c mov 0xc(%ebp),%ecx - while (*p && *p == *q) { - 14a: 0f b6 02 movzbl (%edx),%eax - 14d: 84 c0 test %al,%al - 14f: 75 17 jne 168 - 151: eb 3a jmp 18d - 153: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 157: 90 nop - 158: 0f b6 42 01 movzbl 0x1(%edx),%eax - p++, q++; - 15c: 83 c2 01 add $0x1,%edx - 15f: 8d 59 01 lea 0x1(%ecx),%ebx - while (*p && *p == *q) { - 162: 84 c0 test %al,%al - 164: 74 1a je 180 - p++, q++; - 166: 89 d9 mov %ebx,%ecx - while (*p && *p == *q) { - 168: 0f b6 19 movzbl (%ecx),%ebx - 16b: 38 c3 cmp %al,%bl - 16d: 74 e9 je 158 - } - return (uchar) * p - (uchar) * q; - 16f: 29 d8 sub %ebx,%eax -} - 171: 8b 5d fc mov -0x4(%ebp),%ebx - 174: c9 leave - 175: c3 ret - 176: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 17d: 8d 76 00 lea 0x0(%esi),%esi - return (uchar) * p - (uchar) * q; - 180: 0f b6 59 01 movzbl 0x1(%ecx),%ebx - 184: 31 c0 xor %eax,%eax - 186: 29 d8 sub %ebx,%eax -} - 188: 8b 5d fc mov -0x4(%ebp),%ebx - 18b: c9 leave - 18c: c3 ret - return (uchar) * p - (uchar) * q; - 18d: 0f b6 19 movzbl (%ecx),%ebx - 190: 31 c0 xor %eax,%eax - 192: eb db jmp 16f - 194: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 19b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 19f: 90 nop - -000001a0 : - -uint strlen(const char *s) { - 1a0: 55 push %ebp - 1a1: 89 e5 mov %esp,%ebp - 1a3: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - for (n = 0; s[n]; n++) { - 1a6: 80 3a 00 cmpb $0x0,(%edx) - 1a9: 74 15 je 1c0 - 1ab: 31 c0 xor %eax,%eax - 1ad: 8d 76 00 lea 0x0(%esi),%esi - 1b0: 83 c0 01 add $0x1,%eax - 1b3: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - 1b7: 89 c1 mov %eax,%ecx - 1b9: 75 f5 jne 1b0 - ; - } - return n; -} - 1bb: 89 c8 mov %ecx,%eax - 1bd: 5d pop %ebp - 1be: c3 ret - 1bf: 90 nop - for (n = 0; s[n]; n++) { - 1c0: 31 c9 xor %ecx,%ecx -} - 1c2: 5d pop %ebp - 1c3: 89 c8 mov %ecx,%eax - 1c5: c3 ret - 1c6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 1cd: 8d 76 00 lea 0x0(%esi),%esi - -000001d0 : - -void* memset(void *dst, int c, uint n) { - 1d0: 55 push %ebp - 1d1: 89 e5 mov %esp,%ebp - 1d3: 57 push %edi - 1d4: 8b 55 08 mov 0x8(%ebp),%edx - "d" (port), "0" (addr), "1" (cnt) : - "cc"); -} - -static inline void stosb(void *addr, int data, int cnt) { - asm volatile ("cld; rep stosb" : - 1d7: 8b 4d 10 mov 0x10(%ebp),%ecx - 1da: 8b 45 0c mov 0xc(%ebp),%eax - 1dd: 89 d7 mov %edx,%edi - 1df: fc cld - 1e0: f3 aa rep stos %al,%es:(%edi) - stosb(dst, c, n); - return dst; -} - 1e2: 8b 7d fc mov -0x4(%ebp),%edi - 1e5: 89 d0 mov %edx,%eax - 1e7: c9 leave - 1e8: c3 ret - 1e9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -000001f0 : - -char* strchr(const char *s, char c) { - 1f0: 55 push %ebp - 1f1: 89 e5 mov %esp,%ebp - 1f3: 8b 45 08 mov 0x8(%ebp),%eax - 1f6: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx - for (; *s; s++) { - 1fa: 0f b6 10 movzbl (%eax),%edx - 1fd: 84 d2 test %dl,%dl - 1ff: 75 12 jne 213 - 201: eb 1d jmp 220 - 203: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 207: 90 nop - 208: 0f b6 50 01 movzbl 0x1(%eax),%edx - 20c: 83 c0 01 add $0x1,%eax - 20f: 84 d2 test %dl,%dl - 211: 74 0d je 220 - if (*s == c) { - 213: 38 d1 cmp %dl,%cl - 215: 75 f1 jne 208 - return (char*)s; - } - } - return 0; -} - 217: 5d pop %ebp - 218: c3 ret - 219: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - return 0; - 220: 31 c0 xor %eax,%eax -} - 222: 5d pop %ebp - 223: c3 ret - 224: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 22b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 22f: 90 nop - -00000230 : - -char* gets(char *buf, int max) { - 230: 55 push %ebp - 231: 89 e5 mov %esp,%ebp - 233: 57 push %edi - 234: 56 push %esi - int i, cc; - char c; - - for (i = 0; i + 1 < max;) { - cc = read(0, &c, 1); - 235: 8d 7d e7 lea -0x19(%ebp),%edi -char* gets(char *buf, int max) { - 238: 53 push %ebx - for (i = 0; i + 1 < max;) { - 239: 31 db xor %ebx,%ebx -char* gets(char *buf, int max) { - 23b: 83 ec 1c sub $0x1c,%esp - for (i = 0; i + 1 < max;) { - 23e: eb 27 jmp 267 - cc = read(0, &c, 1); - 240: 83 ec 04 sub $0x4,%esp - 243: 6a 01 push $0x1 - 245: 57 push %edi - 246: 6a 00 push $0x0 - 248: e8 2e 01 00 00 call 37b - if (cc < 1) { - 24d: 83 c4 10 add $0x10,%esp - 250: 85 c0 test %eax,%eax - 252: 7e 1d jle 271 - break; - } - buf[i++] = c; - 254: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 258: 8b 55 08 mov 0x8(%ebp),%edx - 25b: 88 44 1a ff mov %al,-0x1(%edx,%ebx,1) - if (c == '\n' || c == '\r') { - 25f: 3c 0a cmp $0xa,%al - 261: 74 1d je 280 - 263: 3c 0d cmp $0xd,%al - 265: 74 19 je 280 - for (i = 0; i + 1 < max;) { - 267: 89 de mov %ebx,%esi - 269: 83 c3 01 add $0x1,%ebx - 26c: 3b 5d 0c cmp 0xc(%ebp),%ebx - 26f: 7c cf jl 240 - break; - } - } - buf[i] = '\0'; - 271: 8b 45 08 mov 0x8(%ebp),%eax - 274: c6 04 30 00 movb $0x0,(%eax,%esi,1) - return buf; -} - 278: 8d 65 f4 lea -0xc(%ebp),%esp - 27b: 5b pop %ebx - 27c: 5e pop %esi - 27d: 5f pop %edi - 27e: 5d pop %ebp - 27f: c3 ret - buf[i] = '\0'; - 280: 8b 45 08 mov 0x8(%ebp),%eax - 283: 89 de mov %ebx,%esi - 285: c6 04 30 00 movb $0x0,(%eax,%esi,1) -} - 289: 8d 65 f4 lea -0xc(%ebp),%esp - 28c: 5b pop %ebx - 28d: 5e pop %esi - 28e: 5f pop %edi - 28f: 5d pop %ebp - 290: c3 ret - 291: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 298: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 29f: 90 nop - -000002a0 : - -int stat(const char *n, struct stat *st) { - 2a0: 55 push %ebp - 2a1: 89 e5 mov %esp,%ebp - 2a3: 56 push %esi - 2a4: 53 push %ebx - int fd; - int r; - - fd = open(n, O_RDONLY); - 2a5: 83 ec 08 sub $0x8,%esp - 2a8: 6a 00 push $0x0 - 2aa: ff 75 08 push 0x8(%ebp) - 2ad: e8 19 01 00 00 call 3cb - if (fd < 0) { - 2b2: 83 c4 10 add $0x10,%esp - 2b5: 85 c0 test %eax,%eax - 2b7: 78 27 js 2e0 - return -1; - } - r = fstat(fd, st); - 2b9: 83 ec 08 sub $0x8,%esp - 2bc: ff 75 0c push 0xc(%ebp) - 2bf: 89 c3 mov %eax,%ebx - 2c1: 50 push %eax - 2c2: e8 cc 00 00 00 call 393 - close(fd); - 2c7: 89 1c 24 mov %ebx,(%esp) - r = fstat(fd, st); - 2ca: 89 c6 mov %eax,%esi - close(fd); - 2cc: e8 2a 01 00 00 call 3fb - return r; - 2d1: 83 c4 10 add $0x10,%esp -} - 2d4: 8d 65 f8 lea -0x8(%ebp),%esp - 2d7: 89 f0 mov %esi,%eax - 2d9: 5b pop %ebx - 2da: 5e pop %esi - 2db: 5d pop %ebp - 2dc: c3 ret - 2dd: 8d 76 00 lea 0x0(%esi),%esi - return -1; - 2e0: be ff ff ff ff mov $0xffffffff,%esi - 2e5: eb ed jmp 2d4 - 2e7: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 2ee: 66 90 xchg %ax,%ax - -000002f0 : - -int atoi(const char *s) { - 2f0: 55 push %ebp - 2f1: 89 e5 mov %esp,%ebp - 2f3: 53 push %ebx - 2f4: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - n = 0; - while ('0' <= *s && *s <= '9') { - 2f7: 0f be 02 movsbl (%edx),%eax - 2fa: 8d 48 d0 lea -0x30(%eax),%ecx - 2fd: 80 f9 09 cmp $0x9,%cl - n = 0; - 300: b9 00 00 00 00 mov $0x0,%ecx - while ('0' <= *s && *s <= '9') { - 305: 77 1e ja 325 - 307: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 30e: 66 90 xchg %ax,%ax - n = n * 10 + *s++ - '0'; - 310: 83 c2 01 add $0x1,%edx - 313: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 316: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx - while ('0' <= *s && *s <= '9') { - 31a: 0f be 02 movsbl (%edx),%eax - 31d: 8d 58 d0 lea -0x30(%eax),%ebx - 320: 80 fb 09 cmp $0x9,%bl - 323: 76 eb jbe 310 - } - return n; -} - 325: 8b 5d fc mov -0x4(%ebp),%ebx - 328: 89 c8 mov %ecx,%eax - 32a: c9 leave - 32b: c3 ret - 32c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000330 : - -void* memmove(void *vdst, const void *vsrc, int n) { - 330: 55 push %ebp - 331: 89 e5 mov %esp,%ebp - 333: 57 push %edi - 334: 8b 45 10 mov 0x10(%ebp),%eax - 337: 8b 55 08 mov 0x8(%ebp),%edx - 33a: 56 push %esi - 33b: 8b 75 0c mov 0xc(%ebp),%esi - char *dst; - const char *src; - - dst = vdst; - src = vsrc; - while (n-- > 0) { - 33e: 85 c0 test %eax,%eax - 340: 7e 13 jle 355 - 342: 01 d0 add %edx,%eax - dst = vdst; - 344: 89 d7 mov %edx,%edi - 346: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 34d: 8d 76 00 lea 0x0(%esi),%esi - *dst++ = *src++; - 350: a4 movsb %ds:(%esi),%es:(%edi) - while (n-- > 0) { - 351: 39 f8 cmp %edi,%eax - 353: 75 fb jne 350 - } - return vdst; -} - 355: 5e pop %esi - 356: 89 d0 mov %edx,%eax - 358: 5f pop %edi - 359: 5d pop %ebp - 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(kill) - 383: b8 06 00 00 00 mov $0x6,%eax - 388: cd 40 int $0x40 - 38a: c3 ret - -0000038b : -SYSCALL(exec) - 38b: b8 07 00 00 00 mov $0x7,%eax - 390: cd 40 int $0x40 - 392: c3 ret - -00000393 : -SYSCALL(fstat) - 393: b8 08 00 00 00 mov $0x8,%eax - 398: cd 40 int $0x40 - 39a: c3 ret - -0000039b : -SYSCALL(chdir) - 39b: b8 09 00 00 00 mov $0x9,%eax - 3a0: cd 40 int $0x40 - 3a2: c3 ret - -000003a3 : -SYSCALL(dup) - 3a3: b8 0a 00 00 00 mov $0xa,%eax - 3a8: cd 40 int $0x40 - 3aa: c3 ret - -000003ab : -SYSCALL(getpid) - 3ab: b8 0b 00 00 00 mov $0xb,%eax - 3b0: cd 40 int $0x40 - 3b2: c3 ret - -000003b3 : -SYSCALL(sbrk) - 3b3: b8 0c 00 00 00 mov $0xc,%eax - 3b8: cd 40 int $0x40 - 3ba: c3 ret - -000003bb : -SYSCALL(sleep) - 3bb: b8 0d 00 00 00 mov $0xd,%eax - 3c0: cd 40 int $0x40 - 3c2: c3 ret - -000003c3 : -SYSCALL(uptime) - 3c3: b8 0e 00 00 00 mov $0xe,%eax - 3c8: cd 40 int $0x40 - 3ca: c3 ret - -000003cb : -SYSCALL(open) - 3cb: b8 0f 00 00 00 mov $0xf,%eax - 3d0: cd 40 int $0x40 - 3d2: c3 ret - -000003d3 : -SYSCALL(write) - 3d3: b8 10 00 00 00 mov $0x10,%eax - 3d8: cd 40 int $0x40 - 3da: c3 ret - -000003db : -SYSCALL(mknod) - 3db: b8 11 00 00 00 mov $0x11,%eax - 3e0: cd 40 int $0x40 - 3e2: c3 ret - -000003e3 : -SYSCALL(unlink) - 3e3: b8 12 00 00 00 mov $0x12,%eax - 3e8: cd 40 int $0x40 - 3ea: c3 ret - -000003eb : -SYSCALL(link) - 3eb: b8 13 00 00 00 mov $0x13,%eax - 3f0: cd 40 int $0x40 - 3f2: c3 ret - -000003f3 : -SYSCALL(mkdir) - 3f3: b8 14 00 00 00 mov $0x14,%eax - 3f8: cd 40 int $0x40 - 3fa: c3 ret - -000003fb : -SYSCALL(close) - 3fb: b8 15 00 00 00 mov $0x15,%eax - 400: cd 40 int $0x40 - 402: c3 ret - -00000403 : -SYSCALL(getch) - 403: b8 16 00 00 00 mov $0x16,%eax - 408: cd 40 int $0x40 - 40a: c3 ret - -0000040b : -SYSCALL(greeting) - 40b: b8 17 00 00 00 mov $0x17,%eax - 410: cd 40 int $0x40 - 412: c3 ret - -00000413 : -SYSCALL(shutdown) - 413: b8 18 00 00 00 mov $0x18,%eax - 418: cd 40 int $0x40 - 41a: c3 ret - 41b: 66 90 xchg %ax,%ax - 41d: 66 90 xchg %ax,%ax - 41f: 90 nop - -00000420 : - -static void putc(int fd, char c) { - write(fd, &c, 1); -} - -static void printint(int fd, int xx, int base, int sgn) { - 420: 55 push %ebp - 421: 89 e5 mov %esp,%ebp - 423: 57 push %edi - 424: 56 push %esi - 425: 53 push %ebx - 426: 83 ec 3c sub $0x3c,%esp - 429: 89 4d c4 mov %ecx,-0x3c(%ebp) - uint x; - - neg = 0; - if (sgn && xx < 0) { - neg = 1; - x = -xx; - 42c: 89 d1 mov %edx,%ecx -static void printint(int fd, int xx, int base, int sgn) { - 42e: 89 45 b8 mov %eax,-0x48(%ebp) - if (sgn && xx < 0) { - 431: 85 d2 test %edx,%edx - 433: 0f 89 7f 00 00 00 jns 4b8 - 439: f6 45 08 01 testb $0x1,0x8(%ebp) - 43d: 74 79 je 4b8 - neg = 1; - 43f: c7 45 bc 01 00 00 00 movl $0x1,-0x44(%ebp) - x = -xx; - 446: f7 d9 neg %ecx - } - else { - x = xx; - } - - i = 0; - 448: 31 db xor %ebx,%ebx - 44a: 8d 75 d7 lea -0x29(%ebp),%esi - 44d: 8d 76 00 lea 0x0(%esi),%esi - do { - buf[i++] = digits[x % base]; - 450: 89 c8 mov %ecx,%eax - 452: 31 d2 xor %edx,%edx - 454: 89 cf mov %ecx,%edi - 456: f7 75 c4 divl -0x3c(%ebp) - 459: 0f b6 92 90 08 00 00 movzbl 0x890(%edx),%edx - 460: 89 45 c0 mov %eax,-0x40(%ebp) - 463: 89 d8 mov %ebx,%eax - 465: 8d 5b 01 lea 0x1(%ebx),%ebx - } - while ((x /= base) != 0); - 468: 8b 4d c0 mov -0x40(%ebp),%ecx - buf[i++] = digits[x % base]; - 46b: 88 14 1e mov %dl,(%esi,%ebx,1) - while ((x /= base) != 0); - 46e: 39 7d c4 cmp %edi,-0x3c(%ebp) - 471: 76 dd jbe 450 - if (neg) { - 473: 8b 4d bc mov -0x44(%ebp),%ecx - 476: 85 c9 test %ecx,%ecx - 478: 74 0c je 486 - buf[i++] = '-'; - 47a: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) - buf[i++] = digits[x % base]; - 47f: 89 d8 mov %ebx,%eax - buf[i++] = '-'; - 481: ba 2d 00 00 00 mov $0x2d,%edx - } - - while (--i >= 0) { - 486: 8b 7d b8 mov -0x48(%ebp),%edi - 489: 8d 5c 05 d7 lea -0x29(%ebp,%eax,1),%ebx - 48d: eb 07 jmp 496 - 48f: 90 nop - putc(fd, buf[i]); - 490: 0f b6 13 movzbl (%ebx),%edx - 493: 83 eb 01 sub $0x1,%ebx - write(fd, &c, 1); - 496: 83 ec 04 sub $0x4,%esp - 499: 88 55 d7 mov %dl,-0x29(%ebp) - 49c: 6a 01 push $0x1 - 49e: 56 push %esi - 49f: 57 push %edi - 4a0: e8 2e ff ff ff call 3d3 - while (--i >= 0) { - 4a5: 83 c4 10 add $0x10,%esp - 4a8: 39 de cmp %ebx,%esi - 4aa: 75 e4 jne 490 - } -} - 4ac: 8d 65 f4 lea -0xc(%ebp),%esp - 4af: 5b pop %ebx - 4b0: 5e pop %esi - 4b1: 5f pop %edi - 4b2: 5d pop %ebp - 4b3: c3 ret - 4b4: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - neg = 0; - 4b8: c7 45 bc 00 00 00 00 movl $0x0,-0x44(%ebp) - 4bf: eb 87 jmp 448 - 4c1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 4c8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 4cf: 90 nop - -000004d0 : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void printf(int fd, const char *fmt, ...) { - 4d0: 55 push %ebp - 4d1: 89 e5 mov %esp,%ebp - 4d3: 57 push %edi - 4d4: 56 push %esi - 4d5: 53 push %ebx - 4d6: 83 ec 2c sub $0x2c,%esp - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for (i = 0; fmt[i]; i++) { - 4d9: 8b 5d 0c mov 0xc(%ebp),%ebx -void printf(int fd, const char *fmt, ...) { - 4dc: 8b 75 08 mov 0x8(%ebp),%esi - for (i = 0; fmt[i]; i++) { - 4df: 0f b6 13 movzbl (%ebx),%edx - 4e2: 84 d2 test %dl,%dl - 4e4: 74 6a je 550 - ap = (uint*)(void*)&fmt + 1; - 4e6: 8d 45 10 lea 0x10(%ebp),%eax - 4e9: 83 c3 01 add $0x1,%ebx - write(fd, &c, 1); - 4ec: 8d 7d e7 lea -0x19(%ebp),%edi - state = 0; - 4ef: 31 c9 xor %ecx,%ecx - ap = (uint*)(void*)&fmt + 1; - 4f1: 89 45 d0 mov %eax,-0x30(%ebp) - 4f4: eb 36 jmp 52c - 4f6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 4fd: 8d 76 00 lea 0x0(%esi),%esi - 500: 89 4d d4 mov %ecx,-0x2c(%ebp) - c = fmt[i] & 0xff; - if (state == 0) { - if (c == '%') { - state = '%'; - 503: b9 25 00 00 00 mov $0x25,%ecx - if (c == '%') { - 508: 83 f8 25 cmp $0x25,%eax - 50b: 74 15 je 522 - write(fd, &c, 1); - 50d: 83 ec 04 sub $0x4,%esp - 510: 88 55 e7 mov %dl,-0x19(%ebp) - 513: 6a 01 push $0x1 - 515: 57 push %edi - 516: 56 push %esi - 517: e8 b7 fe ff ff call 3d3 - 51c: 8b 4d d4 mov -0x2c(%ebp),%ecx - } - else { - putc(fd, c); - 51f: 83 c4 10 add $0x10,%esp - for (i = 0; fmt[i]; i++) { - 522: 0f b6 13 movzbl (%ebx),%edx - 525: 83 c3 01 add $0x1,%ebx - 528: 84 d2 test %dl,%dl - 52a: 74 24 je 550 - c = fmt[i] & 0xff; - 52c: 0f b6 c2 movzbl %dl,%eax - if (state == 0) { - 52f: 85 c9 test %ecx,%ecx - 531: 74 cd je 500 - } - } - else if (state == '%') { - 533: 83 f9 25 cmp $0x25,%ecx - 536: 75 ea jne 522 - if (c == 'd') { - 538: 83 f8 25 cmp $0x25,%eax - 53b: 0f 84 07 01 00 00 je 648 - 541: 83 e8 63 sub $0x63,%eax - 544: 83 f8 15 cmp $0x15,%eax - 547: 77 17 ja 560 - 549: ff 24 85 38 08 00 00 jmp *0x838(,%eax,4) - putc(fd, c); - } - state = 0; - } - } -} - 550: 8d 65 f4 lea -0xc(%ebp),%esp - 553: 5b pop %ebx - 554: 5e pop %esi - 555: 5f pop %edi - 556: 5d pop %ebp - 557: c3 ret - 558: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 55f: 90 nop - write(fd, &c, 1); - 560: 83 ec 04 sub $0x4,%esp - 563: 88 55 d4 mov %dl,-0x2c(%ebp) - 566: 6a 01 push $0x1 - 568: 57 push %edi - 569: 56 push %esi - 56a: c6 45 e7 25 movb $0x25,-0x19(%ebp) - 56e: e8 60 fe ff ff call 3d3 - putc(fd, c); - 573: 0f b6 55 d4 movzbl -0x2c(%ebp),%edx - write(fd, &c, 1); - 577: 83 c4 0c add $0xc,%esp - 57a: 88 55 e7 mov %dl,-0x19(%ebp) - 57d: 6a 01 push $0x1 - 57f: 57 push %edi - 580: 56 push %esi - 581: e8 4d fe ff ff call 3d3 - putc(fd, c); - 586: 83 c4 10 add $0x10,%esp - state = 0; - 589: 31 c9 xor %ecx,%ecx - 58b: eb 95 jmp 522 - 58d: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 16, 0); - 590: 83 ec 0c sub $0xc,%esp - 593: b9 10 00 00 00 mov $0x10,%ecx - 598: 6a 00 push $0x0 - 59a: 8b 45 d0 mov -0x30(%ebp),%eax - 59d: 8b 10 mov (%eax),%edx - 59f: 89 f0 mov %esi,%eax - 5a1: e8 7a fe ff ff call 420 - ap++; - 5a6: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 5aa: 83 c4 10 add $0x10,%esp - state = 0; - 5ad: 31 c9 xor %ecx,%ecx - 5af: e9 6e ff ff ff jmp 522 - 5b4: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - s = (char*)*ap; - 5b8: 8b 45 d0 mov -0x30(%ebp),%eax - 5bb: 8b 10 mov (%eax),%edx - ap++; - 5bd: 83 c0 04 add $0x4,%eax - 5c0: 89 45 d0 mov %eax,-0x30(%ebp) - if (s == 0) { - 5c3: 85 d2 test %edx,%edx - 5c5: 0f 84 8d 00 00 00 je 658 - while (*s != 0) { - 5cb: 0f b6 02 movzbl (%edx),%eax - state = 0; - 5ce: 31 c9 xor %ecx,%ecx - while (*s != 0) { - 5d0: 84 c0 test %al,%al - 5d2: 0f 84 4a ff ff ff je 522 - 5d8: 89 5d d4 mov %ebx,-0x2c(%ebp) - 5db: 89 d3 mov %edx,%ebx - 5dd: 8d 76 00 lea 0x0(%esi),%esi - write(fd, &c, 1); - 5e0: 83 ec 04 sub $0x4,%esp - s++; - 5e3: 83 c3 01 add $0x1,%ebx - 5e6: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 5e9: 6a 01 push $0x1 - 5eb: 57 push %edi - 5ec: 56 push %esi - 5ed: e8 e1 fd ff ff call 3d3 - while (*s != 0) { - 5f2: 0f b6 03 movzbl (%ebx),%eax - 5f5: 83 c4 10 add $0x10,%esp - 5f8: 84 c0 test %al,%al - 5fa: 75 e4 jne 5e0 - state = 0; - 5fc: 8b 5d d4 mov -0x2c(%ebp),%ebx - 5ff: 31 c9 xor %ecx,%ecx - 601: e9 1c ff ff ff jmp 522 - 606: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 60d: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 10, 1); - 610: 83 ec 0c sub $0xc,%esp - 613: b9 0a 00 00 00 mov $0xa,%ecx - 618: 6a 01 push $0x1 - 61a: e9 7b ff ff ff jmp 59a - 61f: 90 nop - putc(fd, *ap); - 620: 8b 45 d0 mov -0x30(%ebp),%eax - write(fd, &c, 1); - 623: 83 ec 04 sub $0x4,%esp - putc(fd, *ap); - 626: 8b 00 mov (%eax),%eax - write(fd, &c, 1); - 628: 6a 01 push $0x1 - 62a: 57 push %edi - 62b: 56 push %esi - putc(fd, *ap); - 62c: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 62f: e8 9f fd ff ff call 3d3 - ap++; - 634: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 638: 83 c4 10 add $0x10,%esp - state = 0; - 63b: 31 c9 xor %ecx,%ecx - 63d: e9 e0 fe ff ff jmp 522 - 642: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - putc(fd, c); - 648: 88 55 e7 mov %dl,-0x19(%ebp) - write(fd, &c, 1); - 64b: 83 ec 04 sub $0x4,%esp - 64e: e9 2a ff ff ff jmp 57d - 653: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 657: 90 nop - s = "(null)"; - 658: ba 30 08 00 00 mov $0x830,%edx - while (*s != 0) { - 65d: 89 5d d4 mov %ebx,-0x2c(%ebp) - 660: b8 28 00 00 00 mov $0x28,%eax - 665: 89 d3 mov %edx,%ebx - 667: e9 74 ff ff ff jmp 5e0 - 66c: 66 90 xchg %ax,%ax - 66e: 66 90 xchg %ax,%ax - -00000670 : -typedef union header Header; - -static Header base; -static Header *freep; - -void free(void *ap) { - 670: 55 push %ebp - Header *bp, *p; - - bp = (Header*)ap - 1; - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 671: a1 80 0d 00 00 mov 0xd80,%eax -void free(void *ap) { - 676: 89 e5 mov %esp,%ebp - 678: 57 push %edi - 679: 56 push %esi - 67a: 53 push %ebx - 67b: 8b 5d 08 mov 0x8(%ebp),%ebx - bp = (Header*)ap - 1; - 67e: 8d 4b f8 lea -0x8(%ebx),%ecx - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 681: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 688: 89 c2 mov %eax,%edx - 68a: 8b 00 mov (%eax),%eax - 68c: 39 ca cmp %ecx,%edx - 68e: 73 30 jae 6c0 - 690: 39 c1 cmp %eax,%ecx - 692: 72 04 jb 698 - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 694: 39 c2 cmp %eax,%edx - 696: 72 f0 jb 688 - break; - } - } - if (bp + bp->s.size == p->s.ptr) { - 698: 8b 73 fc mov -0x4(%ebx),%esi - 69b: 8d 3c f1 lea (%ecx,%esi,8),%edi - 69e: 39 f8 cmp %edi,%eax - 6a0: 74 30 je 6d2 - bp->s.size += p->s.ptr->s.size; - bp->s.ptr = p->s.ptr->s.ptr; - 6a2: 89 43 f8 mov %eax,-0x8(%ebx) - } - else { - bp->s.ptr = p->s.ptr; - } - if (p + p->s.size == bp) { - 6a5: 8b 42 04 mov 0x4(%edx),%eax - 6a8: 8d 34 c2 lea (%edx,%eax,8),%esi - 6ab: 39 f1 cmp %esi,%ecx - 6ad: 74 3a je 6e9 - p->s.size += bp->s.size; - p->s.ptr = bp->s.ptr; - 6af: 89 0a mov %ecx,(%edx) - } - else { - p->s.ptr = bp; - } - freep = p; -} - 6b1: 5b pop %ebx - freep = p; - 6b2: 89 15 80 0d 00 00 mov %edx,0xd80 -} - 6b8: 5e pop %esi - 6b9: 5f pop %edi - 6ba: 5d pop %ebp - 6bb: c3 ret - 6bc: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 6c0: 39 c2 cmp %eax,%edx - 6c2: 72 c4 jb 688 - 6c4: 39 c1 cmp %eax,%ecx - 6c6: 73 c0 jae 688 - if (bp + bp->s.size == p->s.ptr) { - 6c8: 8b 73 fc mov -0x4(%ebx),%esi - 6cb: 8d 3c f1 lea (%ecx,%esi,8),%edi - 6ce: 39 f8 cmp %edi,%eax - 6d0: 75 d0 jne 6a2 - bp->s.size += p->s.ptr->s.size; - 6d2: 03 70 04 add 0x4(%eax),%esi - 6d5: 89 73 fc mov %esi,-0x4(%ebx) - bp->s.ptr = p->s.ptr->s.ptr; - 6d8: 8b 02 mov (%edx),%eax - 6da: 8b 00 mov (%eax),%eax - 6dc: 89 43 f8 mov %eax,-0x8(%ebx) - if (p + p->s.size == bp) { - 6df: 8b 42 04 mov 0x4(%edx),%eax - 6e2: 8d 34 c2 lea (%edx,%eax,8),%esi - 6e5: 39 f1 cmp %esi,%ecx - 6e7: 75 c6 jne 6af - p->s.size += bp->s.size; - 6e9: 03 43 fc add -0x4(%ebx),%eax - freep = p; - 6ec: 89 15 80 0d 00 00 mov %edx,0xd80 - p->s.size += bp->s.size; - 6f2: 89 42 04 mov %eax,0x4(%edx) - p->s.ptr = bp->s.ptr; - 6f5: 8b 4b f8 mov -0x8(%ebx),%ecx - 6f8: 89 0a mov %ecx,(%edx) -} - 6fa: 5b pop %ebx - 6fb: 5e pop %esi - 6fc: 5f pop %edi - 6fd: 5d pop %ebp - 6fe: c3 ret - 6ff: 90 nop - -00000700 : - hp->s.size = nu; - free((void*)(hp + 1)); - return freep; -} - -void* malloc(uint nbytes) { - 700: 55 push %ebp - 701: 89 e5 mov %esp,%ebp - 703: 57 push %edi - 704: 56 push %esi - 705: 53 push %ebx - 706: 83 ec 1c sub $0x1c,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 709: 8b 45 08 mov 0x8(%ebp),%eax - if ((prevp = freep) == 0) { - 70c: 8b 3d 80 0d 00 00 mov 0xd80,%edi - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 712: 8d 70 07 lea 0x7(%eax),%esi - 715: c1 ee 03 shr $0x3,%esi - 718: 83 c6 01 add $0x1,%esi - if ((prevp = freep) == 0) { - 71b: 85 ff test %edi,%edi - 71d: 0f 84 9d 00 00 00 je 7c0 - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 723: 8b 17 mov (%edi),%edx - if (p->s.size >= nunits) { - 725: 8b 4a 04 mov 0x4(%edx),%ecx - 728: 39 f1 cmp %esi,%ecx - 72a: 73 6a jae 796 - 72c: bb 00 10 00 00 mov $0x1000,%ebx - 731: 39 de cmp %ebx,%esi - 733: 0f 43 de cmovae %esi,%ebx - p = sbrk(nu * sizeof(Header)); - 736: 8d 04 dd 00 00 00 00 lea 0x0(,%ebx,8),%eax - 73d: 89 45 e4 mov %eax,-0x1c(%ebp) - 740: eb 17 jmp 759 - 742: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 748: 8b 02 mov (%edx),%eax - if (p->s.size >= nunits) { - 74a: 8b 48 04 mov 0x4(%eax),%ecx - 74d: 39 f1 cmp %esi,%ecx - 74f: 73 4f jae 7a0 - p->s.size = nunits; - } - freep = prevp; - return (void*)(p + 1); - } - if (p == freep) { - 751: 8b 3d 80 0d 00 00 mov 0xd80,%edi - 757: 89 c2 mov %eax,%edx - 759: 39 d7 cmp %edx,%edi - 75b: 75 eb jne 748 - p = sbrk(nu * sizeof(Header)); - 75d: 83 ec 0c sub $0xc,%esp - 760: ff 75 e4 push -0x1c(%ebp) - 763: e8 4b fc ff ff call 3b3 - if (p == (char*)-1) { - 768: 83 c4 10 add $0x10,%esp - 76b: 83 f8 ff cmp $0xffffffff,%eax - 76e: 74 1c je 78c - hp->s.size = nu; - 770: 89 58 04 mov %ebx,0x4(%eax) - free((void*)(hp + 1)); - 773: 83 ec 0c sub $0xc,%esp - 776: 83 c0 08 add $0x8,%eax - 779: 50 push %eax - 77a: e8 f1 fe ff ff call 670 - return freep; - 77f: 8b 15 80 0d 00 00 mov 0xd80,%edx - if ((p = morecore(nunits)) == 0) { - 785: 83 c4 10 add $0x10,%esp - 788: 85 d2 test %edx,%edx - 78a: 75 bc jne 748 - return 0; - } - } - } -} - 78c: 8d 65 f4 lea -0xc(%ebp),%esp - return 0; - 78f: 31 c0 xor %eax,%eax -} - 791: 5b pop %ebx - 792: 5e pop %esi - 793: 5f pop %edi - 794: 5d pop %ebp - 795: c3 ret - if (p->s.size >= nunits) { - 796: 89 d0 mov %edx,%eax - 798: 89 fa mov %edi,%edx - 79a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - if (p->s.size == nunits) { - 7a0: 39 ce cmp %ecx,%esi - 7a2: 74 4c je 7f0 - p->s.size -= nunits; - 7a4: 29 f1 sub %esi,%ecx - 7a6: 89 48 04 mov %ecx,0x4(%eax) - p += p->s.size; - 7a9: 8d 04 c8 lea (%eax,%ecx,8),%eax - p->s.size = nunits; - 7ac: 89 70 04 mov %esi,0x4(%eax) - freep = prevp; - 7af: 89 15 80 0d 00 00 mov %edx,0xd80 -} - 7b5: 8d 65 f4 lea -0xc(%ebp),%esp - return (void*)(p + 1); - 7b8: 83 c0 08 add $0x8,%eax -} - 7bb: 5b pop %ebx - 7bc: 5e pop %esi - 7bd: 5f pop %edi - 7be: 5d pop %ebp - 7bf: c3 ret - base.s.ptr = freep = prevp = &base; - 7c0: c7 05 80 0d 00 00 84 movl $0xd84,0xd80 - 7c7: 0d 00 00 - base.s.size = 0; - 7ca: bf 84 0d 00 00 mov $0xd84,%edi - base.s.ptr = freep = prevp = &base; - 7cf: c7 05 84 0d 00 00 84 movl $0xd84,0xd84 - 7d6: 0d 00 00 - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 7d9: 89 fa mov %edi,%edx - base.s.size = 0; - 7db: c7 05 88 0d 00 00 00 movl $0x0,0xd88 - 7e2: 00 00 00 - if (p->s.size >= nunits) { - 7e5: e9 42 ff ff ff jmp 72c - 7ea: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - prevp->s.ptr = p->s.ptr; - 7f0: 8b 08 mov (%eax),%ecx - 7f2: 89 0a mov %ecx,(%edx) - 7f4: eb b9 jmp 7af diff --git a/cat.d b/cat.d deleted file mode 100644 index 8f55acc..0000000 --- a/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/cat.o b/cat.o deleted file mode 100644 index 58306c262e587ee6c5a6b77a05755c7253ae33dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4964 zcma)9TWnOv8J;jc{ z6oS+hw*U{3+CH>VX&IQ>jv)psEy%wo#t8RGrkAL}v+m(Cq z>Z*!0Je+S`jHXV)!?yzImhM=tC8#V}Qz_59TOpl+f5 zjf3l)%AHT=Pd~s&j*b4DV?Xk2b^Ub+fL=aeEH~&pKM?y^zoFK?^_tb zFE8GjTUWVPUwL1GIjsCw``4NB9pyXa-zZ~vzAyiI1km#m5$@HW5=v9qDNK+nq{DV< zwjf(WErwK2MT_m!xKM4YrUsq0Wt=SAayP+>J8r=bMeUd1Vya`G=dq?Twh3B-zWVX< zq>yfG2)b({6V5-7B?ggQN3y60)rm%`-=j}us=&>%)Iwu*v_D`e6>C8g4Nl_*lv^>E z1x+iduZw-Mz+|vy;j{s2$*3nm#aPgU+X81xE7xAGP;sEC{>j&VhN9%ZRf+1M^{QCb z37=fCl0_>}!U>B_PDJtd!PrGdK{T)#59tJw>_^5S%cIC{Gs5#w=IALP`xO;hf1q;S zcrHUxWL70dxZE}_CwDn^pO7^%`4@Hs9gsDui*3G;aWz=c&bpKUNxs(cAxw;5<)468 z;CcyZ6*(uNs4NLY%mbDXtI2)?_K%R(u!{7dsSYxp>W)l7<8;fN$X=&%9GN1WgrZ17 z9uVi{1;n;oF$A#JiA3Vbgx!ec&B)yycH_=Y>xsmUPWO?Hp=5uD1jlU>iB5;?*j8c3 zcXrArI@@+6hLTp>+k;ronijdfF`2N}u39_N)*_qXitDg(EVh(GNrtKGM2nkUY`P7q z>3S6`fyNMOcZbz3L<3q%2+^1kswb+9{kSYU`a7_xbPu&Z>RmJHi5718)}_Tm$rjlf z+tYqd4I=3Zj7_)3ww5h%L?c$z&R}68BDN8V~OVy$5iCiiX3s)kdHyUh2%yD5t+YAw$YA+KRo*2>ovuFn%!Qjy-%&Zr z!bmJj#Ok0rVmT@~mvotz9Q$ zGWHP;h?H)Zj%+VS?dC>Y#tb6Q9TxJX zxLj55I9ITJyWv}{O7y81XpCR91{>UgOZHP0#~P@+J@Ed(dteVF_z9r4Hjrts9&sL0Yld__W^*QH8XzR_yXPw_o(ZN%DQg1-D_tc?OXEoZn zQNLtEwAL1$RK}&f4QOEy!?f}B#e3L7L;UctFg-c#Kc)Re?SGtz>0&*rUWhRwHW|NV zSZ@Z%c-#YwcUJo=MDVX@n=2^shM+4#V)@hu7AAQGZ6N1Qg49K<6@t$Ld0RAY*Z8Ey z7c{b6j*sn&So8k)^$22~#F|To2<7pz| zoYPp*h-XFlzpnAy8o#gc#~ME-Vz1%dQ|-nyHW87QY3$biM>THK{@ogfG#=J?T;qhs zHjW?td|KnA#;Zhd-qeVt!pAzlmm@#ECsaMPe&F#0F-{i|>-VU}9*x{@^zR{p|4kzJ zDImvqkO*63g0nNYmVsd@!o1N+-gGAP=0cH~$c9;w84m)HDHUmu-IM8osX1_DOJR97 z@=SQ+<*5?|f3k?WO3#jum%KC8rPIaSbRh^C5-~KZl=Y{)C9aY`^MsyRiD$%bGTmHIJQdO(rAEfQ8powZ+N$$>rX6dYAuQCi~@UUKyD%N-Y~*= zOnWtQZz+NEy3v7V9J`@ckK+dz#{u{_4%Ri}7=g~XMtIhI>@6dv>{&Rf<9&*Fd=nXu z<1_KH&`lkv;-47!cdHym<=h*cyl>&0yiG-mDdQbl-R>L?Pd9vQ7hPCr_cC--2dX%X zL6T?0lvUuUj`tnJhWC3o zs2ko!bb|Mh5ySg49Mp}Bu(MTS%07dSy4gx&;LTO>I4_h>kgCUfziR$?&zkwGj>UQ( oqS7#&T$6guYX&lwIcrcw3Y&!Ys1egY&Sf<(j(7fnAps5VKVv3`y8r+H diff --git a/cat.sym b/cat.sym deleted file mode 100644 index f364576..0000000 --- a/cat.sym +++ /dev/null @@ -1,50 +0,0 @@ -00000000 cat.c -00000000 ulib.c -00000000 printf.c -00000420 printint -00000890 digits.0 -00000000 umalloc.c -00000d80 freep -00000d84 base -00000110 strcpy -000004d0 printf -0000040b greeting -00000330 memmove -000003db mknod -00000230 gets -000003ab getpid -00000090 cat -00000700 malloc -000003bb sleep -00000373 pipe -00000403 getch -000003d3 write -00000393 fstat -00000383 kill -0000039b chdir -0000038b exec -0000036b wait -0000037b read -000003e3 unlink -0000035b fork -000003b3 sbrk -000003c3 uptime -00000b74 __bss_start -000001d0 memset -00000000 main -00000140 strcmp -00000413 shutdown -000003a3 dup -00000b80 buf -000002a0 stat -00000b74 _edata -00000d8c _end -000003eb link -00000363 exit -000002f0 atoi -000001a0 strlen -000003cb open -000001f0 strchr -000003f3 mkdir -000003fb close -00000670 free diff --git a/cls.c b/cls.c new file mode 100644 index 0000000..d24073e --- /dev/null +++ b/cls.c @@ -0,0 +1,8 @@ +#include "types.h" +#include "user.h" + +int main(int argc, char *argv[]) { + cls(); + //printf(1, "$ "); + exit(); +} \ No newline at end of file diff --git a/console.c b/console.c index a330c97..2308029 100644 --- a/console.c +++ b/console.c @@ -28,9 +28,21 @@ struct kbdbuffer inputBuffer; struct kbdbuffer * input = 0; +struct vconsole { + ushort screenbuffer[SCRWIDTH * SCRHEIGHT]; + struct kbdbuffer keybuffer; + int pos; + int active; +}; + +struct vconsole consoles[MAXVCONSOLES]; +static uint currentconsoleindex = 0; + #define C(x) ((x) - '@') // Control-x - +void clearconsole(ushort *bufferin); +void loadscreenbuffer(ushort *bufferin); +void clearscreen(void); static void consputc(int); @@ -148,44 +160,67 @@ void panic(char *s) { #define BACKSPACE 0x100 #define CRTPORT 0x3d4 +#define TITLEOFF (SCRWIDTH * 1) // Size of the offset we need for the title bar + static ushort *crt = (ushort*)P2V(0xb8000); // CGA memory static void cgaputc(int c) { int pos; + int consoleindex = 0; + // Check if a process has actually been created otherwise use the base console + if (myproc() != 0x0) + { + consoleindex = myproc()->consoleIndex; + } + ushort* currentbuffer = consoles[consoleindex].screenbuffer; - // Cursor position: col + 80*row. - outb(CRTPORT, 14); - pos = inb(CRTPORT + 1) << 8; - outb(CRTPORT, 15); - pos |= inb(CRTPORT + 1); + if (consoleindex == currentconsoleindex) + { + // Cursor position: col + 80*row. + outb(CRTPORT, 14); + pos = inb(CRTPORT + 1) << 8; + outb(CRTPORT, 15); + pos |= inb(CRTPORT + 1); + } + else + { + pos = consoles[consoleindex].pos; + } if (c == '\n') { - pos += 80 - pos % 80; + pos += SCRWIDTH - pos % SCRWIDTH; } else if (c == BACKSPACE) { - if (pos > 0) { + if (pos > (TITLEOFF)) { + currentbuffer[pos] = 0; // Clear the character from the buffer --pos; } } else { - crt[pos++] = (c & 0xff) | 0x0700; // black on white + currentbuffer[pos++] = (c & 0xff) | 0x0700; // black on white } - if (pos < 0 || pos > 25 * 80) { + if (pos < TITLEOFF || pos > SCRHEIGHT * SCRWIDTH) { panic("pos under/overflow"); } if ((pos / 80) >= 24) { // Scroll up. - memmove(crt, crt + 80, sizeof(crt[0]) * 23 * 80); + memmove(currentbuffer + TITLEOFF, currentbuffer + (SCRWIDTH + TITLEOFF), sizeof(crt[0]) * (SCRHEIGHT - 1) * SCRWIDTH); pos -= 80; - memset(crt + pos, 0, sizeof(crt[0]) * (24 * 80 - pos)); + memset(currentbuffer + pos, 0, sizeof(crt[0]) * (SCRHEIGHT * SCRWIDTH - pos)); } + consoles[consoleindex].pos = pos; - outb(CRTPORT, 14); - outb(CRTPORT + 1, pos >> 8); - outb(CRTPORT, 15); - outb(CRTPORT + 1, pos); - crt[pos] = ' ' | 0x0700; + if (consoleindex == currentconsoleindex) + { + loadscreenbuffer(currentbuffer); + + outb(CRTPORT, 14); + outb(CRTPORT + 1, pos >> 8); + outb(CRTPORT, 15); + outb(CRTPORT + 1, pos); + crt[pos] = ' ' | 0x0700; + } } void consputc(int c) { @@ -224,7 +259,7 @@ int consoleget(void) { } void consoleintr(int (*getc)(void)) { - int c, doprocdump = 0; + int c, doprocdump = 0, doconsoleswitch = 0, doconsolehome = 0; acquire(&cons.lock); while ((c = getc()) >= 0) { @@ -247,6 +282,12 @@ void consoleintr(int (*getc)(void)) { consputc(BACKSPACE); } break; + case C('T'): + doconsoleswitch = 1; + break; + case C('K'): + doconsolehome = 1; + break; default: if (c != 0 && input->e - input->r < INPUT_BUF) { c = (c == '\r') ? '\n' : c; @@ -264,6 +305,28 @@ void consoleintr(int (*getc)(void)) { if (doprocdump) { procdump(); // now call procdump() wo. cons.lock held } + if (doconsolehome) { + if (currentconsoleindex != 0) + { + switchtoconsole(0); + } + } + if (doconsoleswitch) + { + int toconsole = 0; + for (int i = (currentconsoleindex + 1); i < MAXVCONSOLES; i++) + { + if (consoles[i].active) + { + toconsole = i; + break; + } + } + if (toconsole != currentconsoleindex) + { + switchtoconsole(toconsole); + } + } } int consoleread(struct inode *ip, char *dst, int n) { @@ -317,16 +380,132 @@ int consolewrite(struct inode *ip, char *buf, int n) { return n; } -void consoleinit(void) { - initlock(&cons.lock, "console"); +void testfillbuffer(ushort *bufferin) +{ + ushort firstchar = 65; + ushort lastchar = 90; + ushort currentchar = firstchar; - // Initialise pointer to point to our console input buffer - input = &inputBuffer; + for (int i = 0; i < (SCRHEIGHT * SCRWIDTH); i++) + { + if (currentchar > lastchar) + { + currentchar = firstchar; + } + + bufferin[i] = (currentchar & 0xff) | 0x0700; + + currentchar++; + } +} + +void clearconsole(ushort *bufferin) +{ + // Flood the screen buffer with blank spaces + memset(bufferin, 0x0700, sizeof(bufferin[0]) * SCRHEIGHT * SCRWIDTH); +} + +void loadscreenbuffer(ushort *bufferin) +{ + // Copy the memory from the console buffer to the crt buffer + memmove(crt, bufferin, sizeof(bufferin[0]) * SCRHEIGHT * SCRWIDTH); +} + +void clearscreen(void) +{ + //cprintf("process id: %d", myproc()->consoleIndex); + //return; + + //cprintf("size of buffer item: %d\n", sizeof(consoles[currentconsoleindex].screenbuffer[0]) * (SCRHEIGHT * SCRWIDTH)); + //cprintf("size of crt item: %d\n", sizeof(crt[0]) * (SCRHEIGHT * SCRWIDTH)); + + //return; + int pos = TITLEOFF; + + //testfillbuffer(consoles[currentconsoleindex].screenbuffer); + clearconsole(consoles[currentconsoleindex].screenbuffer); + loadscreenbuffer(consoles[currentconsoleindex].screenbuffer); + + consoles[currentconsoleindex].pos = pos; + + outb(CRTPORT, 14); + outb(CRTPORT + 1, pos >> 8); + outb(CRTPORT, 15); + outb(CRTPORT + 1, pos); +} + +void consoleinit(void) { + initlock(&cons.lock, "console"); + + consoles[currentconsoleindex].active = 1; + + // Initialise pointer to point to our console input buffer + input = &consoles[currentconsoleindex].keybuffer; devsw[CONSOLE].write = consolewrite; devsw[CONSOLE].read = consoleread; cons.locking = 1; + clearscreen(); + cprintf("Welcome! you are currently in the base console\n"); + ioapicenable(IRQ_KBD, 0); } +int newconsole(void) +{ + int result = 0; + + for (int i = 1; i < MAXVCONSOLES; i++) + { + if (!consoles[i].active) + { + result = i; + break; + } + } + + return result; +} + +int switchtoconsole(int consoleindex) +{ + acquire(&cons.lock); + currentconsoleindex = consoleindex; + input = &consoles[currentconsoleindex].keybuffer; + //ioapicenable(IRQ_KBD, 0); + release(&cons.lock); + + loadscreenbuffer(consoles[currentconsoleindex].screenbuffer); + + if (!consoles[currentconsoleindex].active) + { + clearscreen(); + cprintf("Welcome to Console: %d\n", currentconsoleindex); + consoles[currentconsoleindex].active = 1; + } + else + { + int pos = consoles[currentconsoleindex].pos; + + outb(CRTPORT, 14); + outb(CRTPORT + 1, pos >> 8); + outb(CRTPORT, 15); + outb(CRTPORT + 1, pos); + } + + return 0; +} + +int closeconsole(int consoleindex) +{ + clearconsole(consoles[currentconsoleindex].screenbuffer); + consoles[currentconsoleindex].active = 0; + switchtoconsole(0); + return 0; +} + +int getcurrentconsoleindex(void) +{ + return currentconsoleindex; +} \ No newline at end of file diff --git a/console.d b/console.d deleted file mode 100644 index 7b5564c..0000000 --- a/console.d +++ /dev/null @@ -1,3 +0,0 @@ -console.o: console.c /usr/include/stdc-predef.h types.h defs.h param.h \ - traps.h spinlock.h sleeplock.h fs.h file.h memlayout.h mmu.h proc.h \ - x86.h diff --git a/console.o b/console.o deleted file mode 100644 index e1c81e910a6b4faaad8017f62a5e67655eacfd1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21200 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: -#include "types.h" -#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 push -0x4(%ecx) - a: 55 push %ebp - b: 89 e5 mov %esp,%ebp - d: 57 push %edi - e: 56 push %esi - f: 53 push %ebx - 10: 51 push %ecx - 11: 83 ec 08 sub $0x8,%esp - 14: 8b 31 mov (%ecx),%esi - 16: 8b 79 04 mov 0x4(%ecx),%edi - int i; - - for (i = 1; i < argc; i++) { - 19: 83 fe 01 cmp $0x1,%esi - 1c: 7e 47 jle 65 - 1e: bb 01 00 00 00 mov $0x1,%ebx - printf(1, "%s%s", argv[i], i + 1 < argc ? " " : "\n"); - 23: 83 c3 01 add $0x1,%ebx - 26: 8b 44 9f fc mov -0x4(%edi,%ebx,4),%eax - 2a: 39 f3 cmp %esi,%ebx - 2c: 74 22 je 50 - 2e: 66 90 xchg %ax,%ax - 30: 68 58 07 00 00 push $0x758 - 35: 83 c3 01 add $0x1,%ebx - 38: 50 push %eax - 39: 68 5a 07 00 00 push $0x75a - 3e: 6a 01 push $0x1 - 40: e8 eb 03 00 00 call 430 - 45: 8b 44 9f fc mov -0x4(%edi,%ebx,4),%eax - 49: 83 c4 10 add $0x10,%esp - 4c: 39 f3 cmp %esi,%ebx - 4e: 75 e0 jne 30 - 50: 68 5f 07 00 00 push $0x75f - 55: 50 push %eax - 56: 68 5a 07 00 00 push $0x75a - 5b: 6a 01 push $0x1 - 5d: e8 ce 03 00 00 call 430 - 62: 83 c4 10 add $0x10,%esp - } - exit(); - 65: e8 59 02 00 00 call 2c3 - 6a: 66 90 xchg %ax,%ax - 6c: 66 90 xchg %ax,%ax - 6e: 66 90 xchg %ax,%ax - -00000070 : -#include "stat.h" -#include "fcntl.h" -#include "user.h" -#include "x86.h" - -char*strcpy(char *s, const char *t) { - 70: 55 push %ebp - char *os; - - os = s; - while ((*s++ = *t++) != 0) { - 71: 31 c0 xor %eax,%eax -char*strcpy(char *s, const char *t) { - 73: 89 e5 mov %esp,%ebp - 75: 53 push %ebx - 76: 8b 4d 08 mov 0x8(%ebp),%ecx - 79: 8b 5d 0c mov 0xc(%ebp),%ebx - 7c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - while ((*s++ = *t++) != 0) { - 80: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 84: 88 14 01 mov %dl,(%ecx,%eax,1) - 87: 83 c0 01 add $0x1,%eax - 8a: 84 d2 test %dl,%dl - 8c: 75 f2 jne 80 - ; - } - return os; -} - 8e: 8b 5d fc mov -0x4(%ebp),%ebx - 91: 89 c8 mov %ecx,%eax - 93: c9 leave - 94: c3 ret - 95: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 9c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -000000a0 : - -int strcmp(const char *p, const char *q) { - a0: 55 push %ebp - a1: 89 e5 mov %esp,%ebp - a3: 53 push %ebx - a4: 8b 55 08 mov 0x8(%ebp),%edx - a7: 8b 4d 0c mov 0xc(%ebp),%ecx - while (*p && *p == *q) { - aa: 0f b6 02 movzbl (%edx),%eax - ad: 84 c0 test %al,%al - af: 75 17 jne c8 - b1: eb 3a jmp ed - b3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - b7: 90 nop - b8: 0f b6 42 01 movzbl 0x1(%edx),%eax - p++, q++; - bc: 83 c2 01 add $0x1,%edx - bf: 8d 59 01 lea 0x1(%ecx),%ebx - while (*p && *p == *q) { - c2: 84 c0 test %al,%al - c4: 74 1a je e0 - p++, q++; - c6: 89 d9 mov %ebx,%ecx - while (*p && *p == *q) { - c8: 0f b6 19 movzbl (%ecx),%ebx - cb: 38 c3 cmp %al,%bl - cd: 74 e9 je b8 - } - return (uchar) * p - (uchar) * q; - cf: 29 d8 sub %ebx,%eax -} - d1: 8b 5d fc mov -0x4(%ebp),%ebx - d4: c9 leave - d5: c3 ret - d6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - dd: 8d 76 00 lea 0x0(%esi),%esi - return (uchar) * p - (uchar) * q; - e0: 0f b6 59 01 movzbl 0x1(%ecx),%ebx - e4: 31 c0 xor %eax,%eax - e6: 29 d8 sub %ebx,%eax -} - e8: 8b 5d fc mov -0x4(%ebp),%ebx - eb: c9 leave - ec: c3 ret - return (uchar) * p - (uchar) * q; - ed: 0f b6 19 movzbl (%ecx),%ebx - f0: 31 c0 xor %eax,%eax - f2: eb db jmp cf - f4: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - fb: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - ff: 90 nop - -00000100 : - -uint strlen(const char *s) { - 100: 55 push %ebp - 101: 89 e5 mov %esp,%ebp - 103: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - for (n = 0; s[n]; n++) { - 106: 80 3a 00 cmpb $0x0,(%edx) - 109: 74 15 je 120 - 10b: 31 c0 xor %eax,%eax - 10d: 8d 76 00 lea 0x0(%esi),%esi - 110: 83 c0 01 add $0x1,%eax - 113: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - 117: 89 c1 mov %eax,%ecx - 119: 75 f5 jne 110 - ; - } - return n; -} - 11b: 89 c8 mov %ecx,%eax - 11d: 5d pop %ebp - 11e: c3 ret - 11f: 90 nop - for (n = 0; s[n]; n++) { - 120: 31 c9 xor %ecx,%ecx -} - 122: 5d pop %ebp - 123: 89 c8 mov %ecx,%eax - 125: c3 ret - 126: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 12d: 8d 76 00 lea 0x0(%esi),%esi - -00000130 : - -void* memset(void *dst, int c, uint n) { - 130: 55 push %ebp - 131: 89 e5 mov %esp,%ebp - 133: 57 push %edi - 134: 8b 55 08 mov 0x8(%ebp),%edx - "d" (port), "0" (addr), "1" (cnt) : - "cc"); -} - -static inline void stosb(void *addr, int data, int cnt) { - asm volatile ("cld; rep stosb" : - 137: 8b 4d 10 mov 0x10(%ebp),%ecx - 13a: 8b 45 0c mov 0xc(%ebp),%eax - 13d: 89 d7 mov %edx,%edi - 13f: fc cld - 140: f3 aa rep stos %al,%es:(%edi) - stosb(dst, c, n); - return dst; -} - 142: 8b 7d fc mov -0x4(%ebp),%edi - 145: 89 d0 mov %edx,%eax - 147: c9 leave - 148: c3 ret - 149: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -00000150 : - -char* strchr(const char *s, char c) { - 150: 55 push %ebp - 151: 89 e5 mov %esp,%ebp - 153: 8b 45 08 mov 0x8(%ebp),%eax - 156: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx - for (; *s; s++) { - 15a: 0f b6 10 movzbl (%eax),%edx - 15d: 84 d2 test %dl,%dl - 15f: 75 12 jne 173 - 161: eb 1d jmp 180 - 163: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 167: 90 nop - 168: 0f b6 50 01 movzbl 0x1(%eax),%edx - 16c: 83 c0 01 add $0x1,%eax - 16f: 84 d2 test %dl,%dl - 171: 74 0d je 180 - if (*s == c) { - 173: 38 d1 cmp %dl,%cl - 175: 75 f1 jne 168 - return (char*)s; - } - } - return 0; -} - 177: 5d pop %ebp - 178: c3 ret - 179: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - return 0; - 180: 31 c0 xor %eax,%eax -} - 182: 5d pop %ebp - 183: c3 ret - 184: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 18b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 18f: 90 nop - -00000190 : - -char* gets(char *buf, int max) { - 190: 55 push %ebp - 191: 89 e5 mov %esp,%ebp - 193: 57 push %edi - 194: 56 push %esi - int i, cc; - char c; - - for (i = 0; i + 1 < max;) { - cc = read(0, &c, 1); - 195: 8d 7d e7 lea -0x19(%ebp),%edi -char* gets(char *buf, int max) { - 198: 53 push %ebx - for (i = 0; i + 1 < max;) { - 199: 31 db xor %ebx,%ebx -char* gets(char *buf, int max) { - 19b: 83 ec 1c sub $0x1c,%esp - for (i = 0; i + 1 < max;) { - 19e: eb 27 jmp 1c7 - cc = read(0, &c, 1); - 1a0: 83 ec 04 sub $0x4,%esp - 1a3: 6a 01 push $0x1 - 1a5: 57 push %edi - 1a6: 6a 00 push $0x0 - 1a8: e8 2e 01 00 00 call 2db - if (cc < 1) { - 1ad: 83 c4 10 add $0x10,%esp - 1b0: 85 c0 test %eax,%eax - 1b2: 7e 1d jle 1d1 - break; - } - buf[i++] = c; - 1b4: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 1b8: 8b 55 08 mov 0x8(%ebp),%edx - 1bb: 88 44 1a ff mov %al,-0x1(%edx,%ebx,1) - if (c == '\n' || c == '\r') { - 1bf: 3c 0a cmp $0xa,%al - 1c1: 74 1d je 1e0 - 1c3: 3c 0d cmp $0xd,%al - 1c5: 74 19 je 1e0 - for (i = 0; i + 1 < max;) { - 1c7: 89 de mov %ebx,%esi - 1c9: 83 c3 01 add $0x1,%ebx - 1cc: 3b 5d 0c cmp 0xc(%ebp),%ebx - 1cf: 7c cf jl 1a0 - break; - } - } - buf[i] = '\0'; - 1d1: 8b 45 08 mov 0x8(%ebp),%eax - 1d4: c6 04 30 00 movb $0x0,(%eax,%esi,1) - return buf; -} - 1d8: 8d 65 f4 lea -0xc(%ebp),%esp - 1db: 5b pop %ebx - 1dc: 5e pop %esi - 1dd: 5f pop %edi - 1de: 5d pop %ebp - 1df: c3 ret - buf[i] = '\0'; - 1e0: 8b 45 08 mov 0x8(%ebp),%eax - 1e3: 89 de mov %ebx,%esi - 1e5: c6 04 30 00 movb $0x0,(%eax,%esi,1) -} - 1e9: 8d 65 f4 lea -0xc(%ebp),%esp - 1ec: 5b pop %ebx - 1ed: 5e pop %esi - 1ee: 5f pop %edi - 1ef: 5d pop %ebp - 1f0: c3 ret - 1f1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 1f8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 1ff: 90 nop - -00000200 : - -int stat(const char *n, struct stat *st) { - 200: 55 push %ebp - 201: 89 e5 mov %esp,%ebp - 203: 56 push %esi - 204: 53 push %ebx - int fd; - int r; - - fd = open(n, O_RDONLY); - 205: 83 ec 08 sub $0x8,%esp - 208: 6a 00 push $0x0 - 20a: ff 75 08 push 0x8(%ebp) - 20d: e8 19 01 00 00 call 32b - if (fd < 0) { - 212: 83 c4 10 add $0x10,%esp - 215: 85 c0 test %eax,%eax - 217: 78 27 js 240 - return -1; - } - r = fstat(fd, st); - 219: 83 ec 08 sub $0x8,%esp - 21c: ff 75 0c push 0xc(%ebp) - 21f: 89 c3 mov %eax,%ebx - 221: 50 push %eax - 222: e8 cc 00 00 00 call 2f3 - close(fd); - 227: 89 1c 24 mov %ebx,(%esp) - r = fstat(fd, st); - 22a: 89 c6 mov %eax,%esi - close(fd); - 22c: e8 2a 01 00 00 call 35b - return r; - 231: 83 c4 10 add $0x10,%esp -} - 234: 8d 65 f8 lea -0x8(%ebp),%esp - 237: 89 f0 mov %esi,%eax - 239: 5b pop %ebx - 23a: 5e pop %esi - 23b: 5d pop %ebp - 23c: c3 ret - 23d: 8d 76 00 lea 0x0(%esi),%esi - return -1; - 240: be ff ff ff ff mov $0xffffffff,%esi - 245: eb ed jmp 234 - 247: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 24e: 66 90 xchg %ax,%ax - -00000250 : - -int atoi(const char *s) { - 250: 55 push %ebp - 251: 89 e5 mov %esp,%ebp - 253: 53 push %ebx - 254: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - n = 0; - while ('0' <= *s && *s <= '9') { - 257: 0f be 02 movsbl (%edx),%eax - 25a: 8d 48 d0 lea -0x30(%eax),%ecx - 25d: 80 f9 09 cmp $0x9,%cl - n = 0; - 260: b9 00 00 00 00 mov $0x0,%ecx - while ('0' <= *s && *s <= '9') { - 265: 77 1e ja 285 - 267: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 26e: 66 90 xchg %ax,%ax - n = n * 10 + *s++ - '0'; - 270: 83 c2 01 add $0x1,%edx - 273: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 276: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx - while ('0' <= *s && *s <= '9') { - 27a: 0f be 02 movsbl (%edx),%eax - 27d: 8d 58 d0 lea -0x30(%eax),%ebx - 280: 80 fb 09 cmp $0x9,%bl - 283: 76 eb jbe 270 - } - return n; -} - 285: 8b 5d fc mov -0x4(%ebp),%ebx - 288: 89 c8 mov %ecx,%eax - 28a: c9 leave - 28b: c3 ret - 28c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000290 : - -void* memmove(void *vdst, const void *vsrc, int n) { - 290: 55 push %ebp - 291: 89 e5 mov %esp,%ebp - 293: 57 push %edi - 294: 8b 45 10 mov 0x10(%ebp),%eax - 297: 8b 55 08 mov 0x8(%ebp),%edx - 29a: 56 push %esi - 29b: 8b 75 0c mov 0xc(%ebp),%esi - char *dst; - const char *src; - - dst = vdst; - src = vsrc; - while (n-- > 0) { - 29e: 85 c0 test %eax,%eax - 2a0: 7e 13 jle 2b5 - 2a2: 01 d0 add %edx,%eax - dst = vdst; - 2a4: 89 d7 mov %edx,%edi - 2a6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 2ad: 8d 76 00 lea 0x0(%esi),%esi - *dst++ = *src++; - 2b0: a4 movsb %ds:(%esi),%es:(%edi) - while (n-- > 0) { - 2b1: 39 f8 cmp %edi,%eax - 2b3: 75 fb jne 2b0 - } - return vdst; -} - 2b5: 5e pop %esi - 2b6: 89 d0 mov %edx,%eax - 2b8: 5f pop %edi - 2b9: 5d pop %ebp - 2ba: c3 ret - -000002bb : -name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 2bb: b8 01 00 00 00 mov $0x1,%eax - 2c0: cd 40 int $0x40 - 2c2: c3 ret - -000002c3 : -SYSCALL(exit) - 2c3: b8 02 00 00 00 mov $0x2,%eax - 2c8: cd 40 int $0x40 - 2ca: c3 ret - -000002cb : -SYSCALL(wait) - 2cb: b8 03 00 00 00 mov $0x3,%eax - 2d0: cd 40 int $0x40 - 2d2: c3 ret - -000002d3 : -SYSCALL(pipe) - 2d3: b8 04 00 00 00 mov $0x4,%eax - 2d8: cd 40 int $0x40 - 2da: c3 ret - -000002db : -SYSCALL(read) - 2db: b8 05 00 00 00 mov $0x5,%eax - 2e0: cd 40 int $0x40 - 2e2: c3 ret - -000002e3 : -SYSCALL(kill) - 2e3: b8 06 00 00 00 mov $0x6,%eax - 2e8: cd 40 int $0x40 - 2ea: c3 ret - -000002eb : -SYSCALL(exec) - 2eb: b8 07 00 00 00 mov $0x7,%eax - 2f0: cd 40 int $0x40 - 2f2: c3 ret - -000002f3 : -SYSCALL(fstat) - 2f3: b8 08 00 00 00 mov $0x8,%eax - 2f8: cd 40 int $0x40 - 2fa: c3 ret - -000002fb : -SYSCALL(chdir) - 2fb: b8 09 00 00 00 mov $0x9,%eax - 300: cd 40 int $0x40 - 302: c3 ret - -00000303 : -SYSCALL(dup) - 303: b8 0a 00 00 00 mov $0xa,%eax - 308: cd 40 int $0x40 - 30a: c3 ret - -0000030b : -SYSCALL(getpid) - 30b: b8 0b 00 00 00 mov $0xb,%eax - 310: cd 40 int $0x40 - 312: c3 ret - -00000313 : -SYSCALL(sbrk) - 313: b8 0c 00 00 00 mov $0xc,%eax - 318: cd 40 int $0x40 - 31a: c3 ret - -0000031b : -SYSCALL(sleep) - 31b: b8 0d 00 00 00 mov $0xd,%eax - 320: cd 40 int $0x40 - 322: c3 ret - -00000323 : -SYSCALL(uptime) - 323: b8 0e 00 00 00 mov $0xe,%eax - 328: cd 40 int $0x40 - 32a: c3 ret - -0000032b : -SYSCALL(open) - 32b: b8 0f 00 00 00 mov $0xf,%eax - 330: cd 40 int $0x40 - 332: c3 ret - -00000333 : -SYSCALL(write) - 333: b8 10 00 00 00 mov $0x10,%eax - 338: cd 40 int $0x40 - 33a: c3 ret - -0000033b : -SYSCALL(mknod) - 33b: b8 11 00 00 00 mov $0x11,%eax - 340: cd 40 int $0x40 - 342: c3 ret - -00000343 : -SYSCALL(unlink) - 343: b8 12 00 00 00 mov $0x12,%eax - 348: cd 40 int $0x40 - 34a: c3 ret - -0000034b : -SYSCALL(link) - 34b: b8 13 00 00 00 mov $0x13,%eax - 350: cd 40 int $0x40 - 352: c3 ret - -00000353 : -SYSCALL(mkdir) - 353: b8 14 00 00 00 mov $0x14,%eax - 358: cd 40 int $0x40 - 35a: c3 ret - -0000035b : -SYSCALL(close) - 35b: b8 15 00 00 00 mov $0x15,%eax - 360: cd 40 int $0x40 - 362: c3 ret - -00000363 : -SYSCALL(getch) - 363: b8 16 00 00 00 mov $0x16,%eax - 368: cd 40 int $0x40 - 36a: c3 ret - -0000036b : -SYSCALL(greeting) - 36b: b8 17 00 00 00 mov $0x17,%eax - 370: cd 40 int $0x40 - 372: c3 ret - -00000373 : -SYSCALL(shutdown) - 373: b8 18 00 00 00 mov $0x18,%eax - 378: cd 40 int $0x40 - 37a: c3 ret - 37b: 66 90 xchg %ax,%ax - 37d: 66 90 xchg %ax,%ax - 37f: 90 nop - -00000380 : - -static void putc(int fd, char c) { - write(fd, &c, 1); -} - -static void printint(int fd, int xx, int base, int sgn) { - 380: 55 push %ebp - 381: 89 e5 mov %esp,%ebp - 383: 57 push %edi - 384: 56 push %esi - 385: 53 push %ebx - 386: 83 ec 3c sub $0x3c,%esp - 389: 89 4d c4 mov %ecx,-0x3c(%ebp) - uint x; - - neg = 0; - if (sgn && xx < 0) { - neg = 1; - x = -xx; - 38c: 89 d1 mov %edx,%ecx -static void printint(int fd, int xx, int base, int sgn) { - 38e: 89 45 b8 mov %eax,-0x48(%ebp) - if (sgn && xx < 0) { - 391: 85 d2 test %edx,%edx - 393: 0f 89 7f 00 00 00 jns 418 - 399: f6 45 08 01 testb $0x1,0x8(%ebp) - 39d: 74 79 je 418 - neg = 1; - 39f: c7 45 bc 01 00 00 00 movl $0x1,-0x44(%ebp) - x = -xx; - 3a6: f7 d9 neg %ecx - } - else { - x = xx; - } - - i = 0; - 3a8: 31 db xor %ebx,%ebx - 3aa: 8d 75 d7 lea -0x29(%ebp),%esi - 3ad: 8d 76 00 lea 0x0(%esi),%esi - do { - buf[i++] = digits[x % base]; - 3b0: 89 c8 mov %ecx,%eax - 3b2: 31 d2 xor %edx,%edx - 3b4: 89 cf mov %ecx,%edi - 3b6: f7 75 c4 divl -0x3c(%ebp) - 3b9: 0f b6 92 c0 07 00 00 movzbl 0x7c0(%edx),%edx - 3c0: 89 45 c0 mov %eax,-0x40(%ebp) - 3c3: 89 d8 mov %ebx,%eax - 3c5: 8d 5b 01 lea 0x1(%ebx),%ebx - } - while ((x /= base) != 0); - 3c8: 8b 4d c0 mov -0x40(%ebp),%ecx - buf[i++] = digits[x % base]; - 3cb: 88 14 1e mov %dl,(%esi,%ebx,1) - while ((x /= base) != 0); - 3ce: 39 7d c4 cmp %edi,-0x3c(%ebp) - 3d1: 76 dd jbe 3b0 - if (neg) { - 3d3: 8b 4d bc mov -0x44(%ebp),%ecx - 3d6: 85 c9 test %ecx,%ecx - 3d8: 74 0c je 3e6 - buf[i++] = '-'; - 3da: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) - buf[i++] = digits[x % base]; - 3df: 89 d8 mov %ebx,%eax - buf[i++] = '-'; - 3e1: ba 2d 00 00 00 mov $0x2d,%edx - } - - while (--i >= 0) { - 3e6: 8b 7d b8 mov -0x48(%ebp),%edi - 3e9: 8d 5c 05 d7 lea -0x29(%ebp,%eax,1),%ebx - 3ed: eb 07 jmp 3f6 - 3ef: 90 nop - putc(fd, buf[i]); - 3f0: 0f b6 13 movzbl (%ebx),%edx - 3f3: 83 eb 01 sub $0x1,%ebx - write(fd, &c, 1); - 3f6: 83 ec 04 sub $0x4,%esp - 3f9: 88 55 d7 mov %dl,-0x29(%ebp) - 3fc: 6a 01 push $0x1 - 3fe: 56 push %esi - 3ff: 57 push %edi - 400: e8 2e ff ff ff call 333 - while (--i >= 0) { - 405: 83 c4 10 add $0x10,%esp - 408: 39 de cmp %ebx,%esi - 40a: 75 e4 jne 3f0 - } -} - 40c: 8d 65 f4 lea -0xc(%ebp),%esp - 40f: 5b pop %ebx - 410: 5e pop %esi - 411: 5f pop %edi - 412: 5d pop %ebp - 413: c3 ret - 414: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - neg = 0; - 418: c7 45 bc 00 00 00 00 movl $0x0,-0x44(%ebp) - 41f: eb 87 jmp 3a8 - 421: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 428: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 42f: 90 nop - -00000430 : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void printf(int fd, const char *fmt, ...) { - 430: 55 push %ebp - 431: 89 e5 mov %esp,%ebp - 433: 57 push %edi - 434: 56 push %esi - 435: 53 push %ebx - 436: 83 ec 2c sub $0x2c,%esp - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for (i = 0; fmt[i]; i++) { - 439: 8b 5d 0c mov 0xc(%ebp),%ebx -void printf(int fd, const char *fmt, ...) { - 43c: 8b 75 08 mov 0x8(%ebp),%esi - for (i = 0; fmt[i]; i++) { - 43f: 0f b6 13 movzbl (%ebx),%edx - 442: 84 d2 test %dl,%dl - 444: 74 6a je 4b0 - ap = (uint*)(void*)&fmt + 1; - 446: 8d 45 10 lea 0x10(%ebp),%eax - 449: 83 c3 01 add $0x1,%ebx - write(fd, &c, 1); - 44c: 8d 7d e7 lea -0x19(%ebp),%edi - state = 0; - 44f: 31 c9 xor %ecx,%ecx - ap = (uint*)(void*)&fmt + 1; - 451: 89 45 d0 mov %eax,-0x30(%ebp) - 454: eb 36 jmp 48c - 456: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 45d: 8d 76 00 lea 0x0(%esi),%esi - 460: 89 4d d4 mov %ecx,-0x2c(%ebp) - c = fmt[i] & 0xff; - if (state == 0) { - if (c == '%') { - state = '%'; - 463: b9 25 00 00 00 mov $0x25,%ecx - if (c == '%') { - 468: 83 f8 25 cmp $0x25,%eax - 46b: 74 15 je 482 - write(fd, &c, 1); - 46d: 83 ec 04 sub $0x4,%esp - 470: 88 55 e7 mov %dl,-0x19(%ebp) - 473: 6a 01 push $0x1 - 475: 57 push %edi - 476: 56 push %esi - 477: e8 b7 fe ff ff call 333 - 47c: 8b 4d d4 mov -0x2c(%ebp),%ecx - } - else { - putc(fd, c); - 47f: 83 c4 10 add $0x10,%esp - for (i = 0; fmt[i]; i++) { - 482: 0f b6 13 movzbl (%ebx),%edx - 485: 83 c3 01 add $0x1,%ebx - 488: 84 d2 test %dl,%dl - 48a: 74 24 je 4b0 - c = fmt[i] & 0xff; - 48c: 0f b6 c2 movzbl %dl,%eax - if (state == 0) { - 48f: 85 c9 test %ecx,%ecx - 491: 74 cd je 460 - } - } - else if (state == '%') { - 493: 83 f9 25 cmp $0x25,%ecx - 496: 75 ea jne 482 - if (c == 'd') { - 498: 83 f8 25 cmp $0x25,%eax - 49b: 0f 84 07 01 00 00 je 5a8 - 4a1: 83 e8 63 sub $0x63,%eax - 4a4: 83 f8 15 cmp $0x15,%eax - 4a7: 77 17 ja 4c0 - 4a9: ff 24 85 68 07 00 00 jmp *0x768(,%eax,4) - putc(fd, c); - } - state = 0; - } - } -} - 4b0: 8d 65 f4 lea -0xc(%ebp),%esp - 4b3: 5b pop %ebx - 4b4: 5e pop %esi - 4b5: 5f pop %edi - 4b6: 5d pop %ebp - 4b7: c3 ret - 4b8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 4bf: 90 nop - write(fd, &c, 1); - 4c0: 83 ec 04 sub $0x4,%esp - 4c3: 88 55 d4 mov %dl,-0x2c(%ebp) - 4c6: 6a 01 push $0x1 - 4c8: 57 push %edi - 4c9: 56 push %esi - 4ca: c6 45 e7 25 movb $0x25,-0x19(%ebp) - 4ce: e8 60 fe ff ff call 333 - putc(fd, c); - 4d3: 0f b6 55 d4 movzbl -0x2c(%ebp),%edx - write(fd, &c, 1); - 4d7: 83 c4 0c add $0xc,%esp - 4da: 88 55 e7 mov %dl,-0x19(%ebp) - 4dd: 6a 01 push $0x1 - 4df: 57 push %edi - 4e0: 56 push %esi - 4e1: e8 4d fe ff ff call 333 - putc(fd, c); - 4e6: 83 c4 10 add $0x10,%esp - state = 0; - 4e9: 31 c9 xor %ecx,%ecx - 4eb: eb 95 jmp 482 - 4ed: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 16, 0); - 4f0: 83 ec 0c sub $0xc,%esp - 4f3: b9 10 00 00 00 mov $0x10,%ecx - 4f8: 6a 00 push $0x0 - 4fa: 8b 45 d0 mov -0x30(%ebp),%eax - 4fd: 8b 10 mov (%eax),%edx - 4ff: 89 f0 mov %esi,%eax - 501: e8 7a fe ff ff call 380 - ap++; - 506: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 50a: 83 c4 10 add $0x10,%esp - state = 0; - 50d: 31 c9 xor %ecx,%ecx - 50f: e9 6e ff ff ff jmp 482 - 514: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - s = (char*)*ap; - 518: 8b 45 d0 mov -0x30(%ebp),%eax - 51b: 8b 10 mov (%eax),%edx - ap++; - 51d: 83 c0 04 add $0x4,%eax - 520: 89 45 d0 mov %eax,-0x30(%ebp) - if (s == 0) { - 523: 85 d2 test %edx,%edx - 525: 0f 84 8d 00 00 00 je 5b8 - while (*s != 0) { - 52b: 0f b6 02 movzbl (%edx),%eax - state = 0; - 52e: 31 c9 xor %ecx,%ecx - while (*s != 0) { - 530: 84 c0 test %al,%al - 532: 0f 84 4a ff ff ff je 482 - 538: 89 5d d4 mov %ebx,-0x2c(%ebp) - 53b: 89 d3 mov %edx,%ebx - 53d: 8d 76 00 lea 0x0(%esi),%esi - write(fd, &c, 1); - 540: 83 ec 04 sub $0x4,%esp - s++; - 543: 83 c3 01 add $0x1,%ebx - 546: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 549: 6a 01 push $0x1 - 54b: 57 push %edi - 54c: 56 push %esi - 54d: e8 e1 fd ff ff call 333 - while (*s != 0) { - 552: 0f b6 03 movzbl (%ebx),%eax - 555: 83 c4 10 add $0x10,%esp - 558: 84 c0 test %al,%al - 55a: 75 e4 jne 540 - state = 0; - 55c: 8b 5d d4 mov -0x2c(%ebp),%ebx - 55f: 31 c9 xor %ecx,%ecx - 561: e9 1c ff ff ff jmp 482 - 566: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 56d: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 10, 1); - 570: 83 ec 0c sub $0xc,%esp - 573: b9 0a 00 00 00 mov $0xa,%ecx - 578: 6a 01 push $0x1 - 57a: e9 7b ff ff ff jmp 4fa - 57f: 90 nop - putc(fd, *ap); - 580: 8b 45 d0 mov -0x30(%ebp),%eax - write(fd, &c, 1); - 583: 83 ec 04 sub $0x4,%esp - putc(fd, *ap); - 586: 8b 00 mov (%eax),%eax - write(fd, &c, 1); - 588: 6a 01 push $0x1 - 58a: 57 push %edi - 58b: 56 push %esi - putc(fd, *ap); - 58c: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 58f: e8 9f fd ff ff call 333 - ap++; - 594: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 598: 83 c4 10 add $0x10,%esp - state = 0; - 59b: 31 c9 xor %ecx,%ecx - 59d: e9 e0 fe ff ff jmp 482 - 5a2: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - putc(fd, c); - 5a8: 88 55 e7 mov %dl,-0x19(%ebp) - write(fd, &c, 1); - 5ab: 83 ec 04 sub $0x4,%esp - 5ae: e9 2a ff ff ff jmp 4dd - 5b3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 5b7: 90 nop - s = "(null)"; - 5b8: ba 61 07 00 00 mov $0x761,%edx - while (*s != 0) { - 5bd: 89 5d d4 mov %ebx,-0x2c(%ebp) - 5c0: b8 28 00 00 00 mov $0x28,%eax - 5c5: 89 d3 mov %edx,%ebx - 5c7: e9 74 ff ff ff jmp 540 - 5cc: 66 90 xchg %ax,%ax - 5ce: 66 90 xchg %ax,%ax - -000005d0 : -typedef union header Header; - -static Header base; -static Header *freep; - -void free(void *ap) { - 5d0: 55 push %ebp - Header *bp, *p; - - bp = (Header*)ap - 1; - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 5d1: a1 74 0a 00 00 mov 0xa74,%eax -void free(void *ap) { - 5d6: 89 e5 mov %esp,%ebp - 5d8: 57 push %edi - 5d9: 56 push %esi - 5da: 53 push %ebx - 5db: 8b 5d 08 mov 0x8(%ebp),%ebx - bp = (Header*)ap - 1; - 5de: 8d 4b f8 lea -0x8(%ebx),%ecx - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 5e1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 5e8: 89 c2 mov %eax,%edx - 5ea: 8b 00 mov (%eax),%eax - 5ec: 39 ca cmp %ecx,%edx - 5ee: 73 30 jae 620 - 5f0: 39 c1 cmp %eax,%ecx - 5f2: 72 04 jb 5f8 - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 5f4: 39 c2 cmp %eax,%edx - 5f6: 72 f0 jb 5e8 - break; - } - } - if (bp + bp->s.size == p->s.ptr) { - 5f8: 8b 73 fc mov -0x4(%ebx),%esi - 5fb: 8d 3c f1 lea (%ecx,%esi,8),%edi - 5fe: 39 f8 cmp %edi,%eax - 600: 74 30 je 632 - bp->s.size += p->s.ptr->s.size; - bp->s.ptr = p->s.ptr->s.ptr; - 602: 89 43 f8 mov %eax,-0x8(%ebx) - } - else { - bp->s.ptr = p->s.ptr; - } - if (p + p->s.size == bp) { - 605: 8b 42 04 mov 0x4(%edx),%eax - 608: 8d 34 c2 lea (%edx,%eax,8),%esi - 60b: 39 f1 cmp %esi,%ecx - 60d: 74 3a je 649 - p->s.size += bp->s.size; - p->s.ptr = bp->s.ptr; - 60f: 89 0a mov %ecx,(%edx) - } - else { - p->s.ptr = bp; - } - freep = p; -} - 611: 5b pop %ebx - freep = p; - 612: 89 15 74 0a 00 00 mov %edx,0xa74 -} - 618: 5e pop %esi - 619: 5f pop %edi - 61a: 5d pop %ebp - 61b: c3 ret - 61c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 620: 39 c2 cmp %eax,%edx - 622: 72 c4 jb 5e8 - 624: 39 c1 cmp %eax,%ecx - 626: 73 c0 jae 5e8 - if (bp + bp->s.size == p->s.ptr) { - 628: 8b 73 fc mov -0x4(%ebx),%esi - 62b: 8d 3c f1 lea (%ecx,%esi,8),%edi - 62e: 39 f8 cmp %edi,%eax - 630: 75 d0 jne 602 - bp->s.size += p->s.ptr->s.size; - 632: 03 70 04 add 0x4(%eax),%esi - 635: 89 73 fc mov %esi,-0x4(%ebx) - bp->s.ptr = p->s.ptr->s.ptr; - 638: 8b 02 mov (%edx),%eax - 63a: 8b 00 mov (%eax),%eax - 63c: 89 43 f8 mov %eax,-0x8(%ebx) - if (p + p->s.size == bp) { - 63f: 8b 42 04 mov 0x4(%edx),%eax - 642: 8d 34 c2 lea (%edx,%eax,8),%esi - 645: 39 f1 cmp %esi,%ecx - 647: 75 c6 jne 60f - p->s.size += bp->s.size; - 649: 03 43 fc add -0x4(%ebx),%eax - freep = p; - 64c: 89 15 74 0a 00 00 mov %edx,0xa74 - p->s.size += bp->s.size; - 652: 89 42 04 mov %eax,0x4(%edx) - p->s.ptr = bp->s.ptr; - 655: 8b 4b f8 mov -0x8(%ebx),%ecx - 658: 89 0a mov %ecx,(%edx) -} - 65a: 5b pop %ebx - 65b: 5e pop %esi - 65c: 5f pop %edi - 65d: 5d pop %ebp - 65e: c3 ret - 65f: 90 nop - -00000660 : - hp->s.size = nu; - free((void*)(hp + 1)); - return freep; -} - -void* malloc(uint nbytes) { - 660: 55 push %ebp - 661: 89 e5 mov %esp,%ebp - 663: 57 push %edi - 664: 56 push %esi - 665: 53 push %ebx - 666: 83 ec 1c sub $0x1c,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 669: 8b 45 08 mov 0x8(%ebp),%eax - if ((prevp = freep) == 0) { - 66c: 8b 3d 74 0a 00 00 mov 0xa74,%edi - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 672: 8d 70 07 lea 0x7(%eax),%esi - 675: c1 ee 03 shr $0x3,%esi - 678: 83 c6 01 add $0x1,%esi - if ((prevp = freep) == 0) { - 67b: 85 ff test %edi,%edi - 67d: 0f 84 9d 00 00 00 je 720 - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 683: 8b 17 mov (%edi),%edx - if (p->s.size >= nunits) { - 685: 8b 4a 04 mov 0x4(%edx),%ecx - 688: 39 f1 cmp %esi,%ecx - 68a: 73 6a jae 6f6 - 68c: bb 00 10 00 00 mov $0x1000,%ebx - 691: 39 de cmp %ebx,%esi - 693: 0f 43 de cmovae %esi,%ebx - p = sbrk(nu * sizeof(Header)); - 696: 8d 04 dd 00 00 00 00 lea 0x0(,%ebx,8),%eax - 69d: 89 45 e4 mov %eax,-0x1c(%ebp) - 6a0: eb 17 jmp 6b9 - 6a2: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 6a8: 8b 02 mov (%edx),%eax - if (p->s.size >= nunits) { - 6aa: 8b 48 04 mov 0x4(%eax),%ecx - 6ad: 39 f1 cmp %esi,%ecx - 6af: 73 4f jae 700 - p->s.size = nunits; - } - freep = prevp; - return (void*)(p + 1); - } - if (p == freep) { - 6b1: 8b 3d 74 0a 00 00 mov 0xa74,%edi - 6b7: 89 c2 mov %eax,%edx - 6b9: 39 d7 cmp %edx,%edi - 6bb: 75 eb jne 6a8 - p = sbrk(nu * sizeof(Header)); - 6bd: 83 ec 0c sub $0xc,%esp - 6c0: ff 75 e4 push -0x1c(%ebp) - 6c3: e8 4b fc ff ff call 313 - if (p == (char*)-1) { - 6c8: 83 c4 10 add $0x10,%esp - 6cb: 83 f8 ff cmp $0xffffffff,%eax - 6ce: 74 1c je 6ec - hp->s.size = nu; - 6d0: 89 58 04 mov %ebx,0x4(%eax) - free((void*)(hp + 1)); - 6d3: 83 ec 0c sub $0xc,%esp - 6d6: 83 c0 08 add $0x8,%eax - 6d9: 50 push %eax - 6da: e8 f1 fe ff ff call 5d0 - return freep; - 6df: 8b 15 74 0a 00 00 mov 0xa74,%edx - if ((p = morecore(nunits)) == 0) { - 6e5: 83 c4 10 add $0x10,%esp - 6e8: 85 d2 test %edx,%edx - 6ea: 75 bc jne 6a8 - return 0; - } - } - } -} - 6ec: 8d 65 f4 lea -0xc(%ebp),%esp - return 0; - 6ef: 31 c0 xor %eax,%eax -} - 6f1: 5b pop %ebx - 6f2: 5e pop %esi - 6f3: 5f pop %edi - 6f4: 5d pop %ebp - 6f5: c3 ret - if (p->s.size >= nunits) { - 6f6: 89 d0 mov %edx,%eax - 6f8: 89 fa mov %edi,%edx - 6fa: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - if (p->s.size == nunits) { - 700: 39 ce cmp %ecx,%esi - 702: 74 4c je 750 - p->s.size -= nunits; - 704: 29 f1 sub %esi,%ecx - 706: 89 48 04 mov %ecx,0x4(%eax) - p += p->s.size; - 709: 8d 04 c8 lea (%eax,%ecx,8),%eax - p->s.size = nunits; - 70c: 89 70 04 mov %esi,0x4(%eax) - freep = prevp; - 70f: 89 15 74 0a 00 00 mov %edx,0xa74 -} - 715: 8d 65 f4 lea -0xc(%ebp),%esp - return (void*)(p + 1); - 718: 83 c0 08 add $0x8,%eax -} - 71b: 5b pop %ebx - 71c: 5e pop %esi - 71d: 5f pop %edi - 71e: 5d pop %ebp - 71f: c3 ret - base.s.ptr = freep = prevp = &base; - 720: c7 05 74 0a 00 00 78 movl $0xa78,0xa74 - 727: 0a 00 00 - base.s.size = 0; - 72a: bf 78 0a 00 00 mov $0xa78,%edi - base.s.ptr = freep = prevp = &base; - 72f: c7 05 78 0a 00 00 78 movl $0xa78,0xa78 - 736: 0a 00 00 - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 739: 89 fa mov %edi,%edx - base.s.size = 0; - 73b: c7 05 7c 0a 00 00 00 movl $0x0,0xa7c - 742: 00 00 00 - if (p->s.size >= nunits) { - 745: e9 42 ff ff ff jmp 68c - 74a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - prevp->s.ptr = p->s.ptr; - 750: 8b 08 mov (%eax),%ecx - 752: 89 0a mov %ecx,(%edx) - 754: eb b9 jmp 70f diff --git a/echo.d b/echo.d deleted file mode 100644 index 16a6098..0000000 --- a/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/echo.o b/echo.o deleted file mode 100644 index 1ebc79c668872d5245547f9c1e4ede994b4c9366..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3304 zcma)8U2IfE6h3qJ-fhda+m1SM$3BD&RFk8F^ziWbu%%F^<1c}R2Eb?v}1bK<*uQ>PycUHSgl z(IbZ^er~>+zdCMC{4Fl*{fJXdd?K#yzWHFw{itW;wK5Na=TO;zGAe#}Ff}#B;fYT> zw%m^=%S~|43L+p$_Ykm1m;kcYqI={~Rw1o*ki9TD0STjNE`wTq*0E)^&|S$w2Y*Av~iu< z7D;mvhjmcAR-3YdM?lH}*iX-Q_1k+r1xm@+VU zhk{TMquNz?mc9e4}o)db0sqU;*y(l*l zI8`?{R>OpDpvg}0RBkM&MQ$;wDd(8yBI<{yK1Nq`%$b;GnbF0nZMB6Yp>g|TDghl@u!D~ zbI+1E-z*lln&xHH%H!~H{jtcJ+ubT?u){K9+TEUr$C4dQMtr^_X~btc5=I==nKM0? zoEDRQnbJCAV%8O5+iDEMmeoA%OW@IJltle`o^~Y&Z%BhAsH4H+{QOwWNP;q?o_@Kv zxtO2dO)WfHp9}kBHg(4Gd#bM}OB(S!n!wfBs_+S*fwz&b75k4VJfZv}jF^zuAh30w zTVRX4N->9MzQRR}IEo%dkXJK;w@%?Eg*z1TUFP^vg|Whm3SVVR5WT7FcNMC6Ye#OrM4e-eh z$E&zzz$mC=S!Q12$xMv!pm0Gdlg%PJj4#f%_zvRwx1%ByYw2J4uIx!ZaRd%10cCl9FTTQl)N5;lO zmy?f2eJZznQoc&q_`}I!(D;7I9~WT#|I5r+efO3s9v>;ofALl##ePKA1X{jf*Tw8;AeV;dTe??+=PW58x0|4{Rbz`uIDE_siDTHb^5n>K)Y zzfVJN%=b3(-GPtu@r$DKy#QU0fl4=Ee9ejy9jn3CI)_fZ?bF&XcX z=S7)M&pQEKkAX^ekT1)M5*_3F+L&*wAs?QV>3nZM*JC)vB=Yf{)S_dr!_k=U67uo6 z^7{DY)aSzIs>eX3`^a~V6(u_M4(!H!myvH3e4LN>t@C{VoyV+0W4VL^>()tNv&!vb zg_?I0368_3Mf1LbgLTdO13a!tEt>Z&9IR`3Z1&H~bnGq&%)>UNECX+!(iwOkEI*+& z?)O&1`OQa6@3%1*kEH3jgbcOUa+-kTRUw{9t=#DWq>erqDjj`3X9 z?5yM^Cz*F|SE&BHd+$rGxc~BFK3Cd*55p)|`kX6{7ey4r@drc;?Q*bR1$E>!s8Zjv zi=g^Y9Hk`a$KlYeF;HYSvjFP2s#;yIuUG5Wcj}o8!b`Ab7$7r~{!CLM^RTV~)kqa2 zKUYvo%E_)|SF^`vnLs!NOwzSZV$&(x9?HF-+40KJZlgAgw!=ZI>_t%!MLh&mFssnjz1X0jdtKQgHRe#?1iy;3_~Bcnw?N!e)vdwUZ>Br6F`Ob z&ygPyamkO0Tp-7A=E$)(9Hg3IZ^nK+;mhQ>E@whsOt{X&kZioT(XbbLK6o4&-nLR0 zblo_37K_{TVozK@io~U{8TfmxMz_-s(t4-AJ3y%RdA=V8Pt#s6^!lv;1xx_WKu7-v zd~@z2dna(G(tCyLYv70B#5c5t7~GTZfWM;i8OJqVP4wj3NgH|^?C$fe8UL?1_F{8b zhxIloBw&5qjdXuo=#TZ;A2-wXcLTD`fhcc){CXCwZv%#Oz5A%gKf`+b3AWxgWSav~ zJ^{HW7Oc;Q!OHY~1r{kJz+MSE!1TGVa4z?W=VDbS=RSeVdb~Gb9!kZCn$l+xB_?nU o#xb-kkTd5!Sf6LwSwNH@h`T}|0oEcEfa$o`DE?e~46$*)0PZV(Jpcdz diff --git a/entryother b/entryother deleted file mode 100644 index 0e1f31a69373cac02f1c858730d63f9f9b89c29b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122 zcmexmc%bh_-+{gh{ET8H1^fyJ(wa{&@+%!kd!: -# This code combines elements of bootasm.S and entry.S. - -.code16 -.globl start -start: - cli - 7000: fa cli - - # Zero data segment registers DS, ES, and SS. - 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 - - # 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 - 7009: 0f 01 16 lgdtl (%esi) - 700c: 74 70 je 707e <_end+0x2> - movl %cr0, %eax - 700e: 0f 20 c0 mov %cr0,%eax - orl $CR0_PE, %eax - 7011: 66 83 c8 01 or $0x1,%ax - movl %eax, %cr0 - 7015: 0f 22 c0 mov %eax,%cr0 - - # Complete the transition to 32-bit protected mode by using a 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. - ljmpl $(SEG_KCODE<<3), $(start32) - 7018: 66 ea 20 70 00 00 ljmpw $0x0,$0x7020 - 701e: 08 00 or %al,(%eax) - -00007020 : - - -.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 - 7020: 66 b8 10 00 mov $0x10,%ax - movw %ax, %ds # -> DS: Data Segment - 7024: 8e d8 mov %eax,%ds - movw %ax, %es # -> ES: Extra Segment - 7026: 8e c0 mov %eax,%es - movw %ax, %ss # -> SS: Stack Segment - 7028: 8e d0 mov %eax,%ss - movw $0, %ax # Zero segments not ready for use - 702a: 66 b8 00 00 mov $0x0,%ax - movw %ax, %fs # -> FS - 702e: 8e e0 mov %eax,%fs - movw %ax, %gs # -> 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 entrypgdir 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 - -0000705a : - - # We should never return. -spin: - jmp spin - 705a: eb fe jmp 705a - -0000705c : - ... - 7064: ff (bad) - 7065: ff 00 incl (%eax) - 7067: 00 00 add %al,(%eax) - 7069: 9a cf 00 ff ff 00 00 lcall $0x0,$0xffff00cf - 7070: 00 .byte 0x0 - 7071: 92 xchg %eax,%edx - 7072: cf iret - ... - -00007074 : - 7074: 17 pop %ss - 7075: 00 5c 70 00 add %bl,0x0(%eax,%esi,2) - ... diff --git a/entryother.d b/entryother.d deleted file mode 100644 index a140303..0000000 --- a/entryother.d +++ /dev/null @@ -1 +0,0 @@ -entryother.o: entryother.S asm.h memlayout.h mmu.h diff --git a/entryother.o b/entryother.o deleted file mode 100644 index ffdaa2ef84c6083eb9b92c0a1958e30a333f9aec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1660 zcma)6%}Z2K6hC*KmVG#HEYrxy$CMBiGpRuaX}ZV)BLpij0)5lG8Ao)C_g<22GTa2k zELugY`UhIOoTWQkv~cNCYTF_znts3c?wy_x)q!)*?|j_zaqoTa>GfOVN+~g<#FF2d z$VV&oT#Ce5>5z#x_gYxUX(TXltEJN44~rn0m3(kBN|ZBp9ENE}ew5UK6dc5P>8 zeKTWcciw$zG#Ykx8=Kmds5R_*(f0$k#<8zhKL3oXi8LBOZ?E10Sx3;X_0e~ z==yuQor3*>0eYj>Q>r&*r%u5t=ebC0imP>8ozCa;gVVzkW6vjmCi4Bm!z0rp!_(L1 z=2H$5dv(qAg)-5~ISV9~3F1A@h0SqkSoKR2~kaacrD3(GW5Z7mXUQ98 zmtoVbTw+0bHd#Br>VxJuR2DKTC-rFKF4X{0=J-C{92K$o!O0~3P{BEJ(d&^0$>$}ymhlFtg?)_itW$$3lLgF{R8liYG zFR}+J-^XZdmJK}Ei@<3x_cM;?*Qa&;%aHfblf+mOzX!(uD~|n`J%CZZSprSQ$6k{C z?V>*iHulGtXZjlj<{rkA(omA03Vq}|T0%rL4&xc4Kr)6j2~O5+!$9U-IG?FI3vBiP z$~=@#0!_xpn=_cMH7E{&Cgvnn!O6NqsGEU}^Wqa|)_n%dd}iLaP%c9^M4w?CS(CP5 ltV6TGCLi;&rnxgfd9BZxn8aKpemlvyn^0axo_H~FzW}F!yW;== diff --git a/exec.d b/exec.d deleted file mode 100644 index 0400275..0000000 --- a/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/exec.o b/exec.o deleted file mode 100644 index 796192dd0245cf3ee99a6bef06e7cf875a260698..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10572 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 diff --git a/file.d b/file.d deleted file mode 100644 index fea73d1..0000000 --- a/file.d +++ /dev/null @@ -1,2 +0,0 @@ -file.o: file.c /usr/include/stdc-predef.h types.h defs.h param.h fs.h \ - spinlock.h sleeplock.h file.h diff --git a/file.o b/file.o deleted file mode 100644 index 89a3fe4243c8483931e3527a8f6a32498ea2621d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9992 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 kl2Cd: - } - - printf(1, "fork test OK\n"); -} - -int main(void) { - 0: 55 push %ebp - 1: 89 e5 mov %esp,%ebp - 3: 83 e4 f0 and $0xfffffff0,%esp - forktest(); - 6: e8 35 00 00 00 call 40 - exit(); - b: e8 63 03 00 00 call 373 - -00000010 : -void printf(int fd, const char *s, ...) { - 10: 55 push %ebp - 11: 89 e5 mov %esp,%ebp - 13: 53 push %ebx - 14: 83 ec 10 sub $0x10,%esp - 17: 8b 5d 0c mov 0xc(%ebp),%ebx - write(fd, s, strlen(s)); - 1a: 53 push %ebx - 1b: e8 90 01 00 00 call 1b0 - 20: 83 c4 0c add $0xc,%esp - 23: 50 push %eax - 24: 53 push %ebx - 25: ff 75 08 push 0x8(%ebp) - 28: e8 b6 03 00 00 call 3e3 -} - 2d: 8b 5d fc mov -0x4(%ebp),%ebx - 30: 83 c4 10 add $0x10,%esp - 33: c9 leave - 34: c3 ret - 35: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 3c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000040 : -void forktest(void) { - 40: 55 push %ebp - 41: 89 e5 mov %esp,%ebp - 43: 53 push %ebx - for (n = 0; n < N; n++) { - 44: 31 db xor %ebx,%ebx -void forktest(void) { - 46: 83 ec 10 sub $0x10,%esp - write(fd, s, strlen(s)); - 49: 68 2c 04 00 00 push $0x42c - 4e: e8 5d 01 00 00 call 1b0 - 53: 83 c4 0c add $0xc,%esp - 56: 50 push %eax - 57: 68 2c 04 00 00 push $0x42c - 5c: 6a 01 push $0x1 - 5e: e8 80 03 00 00 call 3e3 - 63: 83 c4 10 add $0x10,%esp - 66: eb 19 jmp 81 - 68: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 6f: 90 nop - if (pid == 0) { - 70: 74 58 je ca - for (n = 0; n < N; n++) { - 72: 83 c3 01 add $0x1,%ebx - 75: 81 fb e8 03 00 00 cmp $0x3e8,%ebx - 7b: 0f 84 83 00 00 00 je 104 - pid = fork(); - 81: e8 e5 02 00 00 call 36b - if (pid < 0) { - 86: 85 c0 test %eax,%eax - 88: 79 e6 jns 70 - for (; n > 0; n--) { - 8a: 85 db test %ebx,%ebx - 8c: 74 10 je 9e - 8e: 66 90 xchg %ax,%ax - if (wait() < 0) { - 90: e8 e6 02 00 00 call 37b - 95: 85 c0 test %eax,%eax - 97: 78 36 js cf - for (; n > 0; n--) { - 99: 83 eb 01 sub $0x1,%ebx - 9c: 75 f2 jne 90 - if (wait() != -1) { - 9e: e8 d8 02 00 00 call 37b - a3: 83 f8 ff cmp $0xffffffff,%eax - a6: 75 49 jne f1 - write(fd, s, strlen(s)); - a8: 83 ec 0c sub $0xc,%esp - ab: 68 5e 04 00 00 push $0x45e - b0: e8 fb 00 00 00 call 1b0 - b5: 83 c4 0c add $0xc,%esp - b8: 50 push %eax - b9: 68 5e 04 00 00 push $0x45e - be: 6a 01 push $0x1 - c0: e8 1e 03 00 00 call 3e3 -} - c5: 8b 5d fc mov -0x4(%ebp),%ebx - c8: c9 leave - c9: c3 ret - exit(); - ca: e8 a4 02 00 00 call 373 - write(fd, s, strlen(s)); - cf: 83 ec 0c sub $0xc,%esp - d2: 68 37 04 00 00 push $0x437 - d7: e8 d4 00 00 00 call 1b0 - dc: 83 c4 0c add $0xc,%esp - df: 50 push %eax - e0: 68 37 04 00 00 push $0x437 - e5: 6a 01 push $0x1 - e7: e8 f7 02 00 00 call 3e3 - exit(); - ec: e8 82 02 00 00 call 373 - printf(1, "wait got too many\n"); - f1: 52 push %edx - f2: 52 push %edx - f3: 68 4b 04 00 00 push $0x44b - f8: 6a 01 push $0x1 - fa: e8 11 ff ff ff call 10 - exit(); - ff: e8 6f 02 00 00 call 373 - printf(1, "fork claimed to work N times!\n", N); - 104: 50 push %eax - 105: 68 e8 03 00 00 push $0x3e8 - 10a: 68 6c 04 00 00 push $0x46c - 10f: 6a 01 push $0x1 - 111: e8 fa fe ff ff call 10 - exit(); - 116: e8 58 02 00 00 call 373 - 11b: 66 90 xchg %ax,%ax - 11d: 66 90 xchg %ax,%ax - 11f: 90 nop - -00000120 : -#include "stat.h" -#include "fcntl.h" -#include "user.h" -#include "x86.h" - -char*strcpy(char *s, const char *t) { - 120: 55 push %ebp - char *os; - - os = s; - while ((*s++ = *t++) != 0) { - 121: 31 c0 xor %eax,%eax -char*strcpy(char *s, const char *t) { - 123: 89 e5 mov %esp,%ebp - 125: 53 push %ebx - 126: 8b 4d 08 mov 0x8(%ebp),%ecx - 129: 8b 5d 0c mov 0xc(%ebp),%ebx - 12c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - while ((*s++ = *t++) != 0) { - 130: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 134: 88 14 01 mov %dl,(%ecx,%eax,1) - 137: 83 c0 01 add $0x1,%eax - 13a: 84 d2 test %dl,%dl - 13c: 75 f2 jne 130 - ; - } - return os; -} - 13e: 8b 5d fc mov -0x4(%ebp),%ebx - 141: 89 c8 mov %ecx,%eax - 143: c9 leave - 144: c3 ret - 145: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 14c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000150 : - -int strcmp(const char *p, const char *q) { - 150: 55 push %ebp - 151: 89 e5 mov %esp,%ebp - 153: 53 push %ebx - 154: 8b 55 08 mov 0x8(%ebp),%edx - 157: 8b 4d 0c mov 0xc(%ebp),%ecx - while (*p && *p == *q) { - 15a: 0f b6 02 movzbl (%edx),%eax - 15d: 84 c0 test %al,%al - 15f: 75 17 jne 178 - 161: eb 3a jmp 19d - 163: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 167: 90 nop - 168: 0f b6 42 01 movzbl 0x1(%edx),%eax - p++, q++; - 16c: 83 c2 01 add $0x1,%edx - 16f: 8d 59 01 lea 0x1(%ecx),%ebx - while (*p && *p == *q) { - 172: 84 c0 test %al,%al - 174: 74 1a je 190 - p++, q++; - 176: 89 d9 mov %ebx,%ecx - while (*p && *p == *q) { - 178: 0f b6 19 movzbl (%ecx),%ebx - 17b: 38 c3 cmp %al,%bl - 17d: 74 e9 je 168 - } - return (uchar) * p - (uchar) * q; - 17f: 29 d8 sub %ebx,%eax -} - 181: 8b 5d fc mov -0x4(%ebp),%ebx - 184: c9 leave - 185: c3 ret - 186: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 18d: 8d 76 00 lea 0x0(%esi),%esi - return (uchar) * p - (uchar) * q; - 190: 0f b6 59 01 movzbl 0x1(%ecx),%ebx - 194: 31 c0 xor %eax,%eax - 196: 29 d8 sub %ebx,%eax -} - 198: 8b 5d fc mov -0x4(%ebp),%ebx - 19b: c9 leave - 19c: c3 ret - return (uchar) * p - (uchar) * q; - 19d: 0f b6 19 movzbl (%ecx),%ebx - 1a0: 31 c0 xor %eax,%eax - 1a2: eb db jmp 17f - 1a4: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 1ab: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 1af: 90 nop - -000001b0 : - -uint strlen(const char *s) { - 1b0: 55 push %ebp - 1b1: 89 e5 mov %esp,%ebp - 1b3: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - for (n = 0; s[n]; n++) { - 1b6: 80 3a 00 cmpb $0x0,(%edx) - 1b9: 74 15 je 1d0 - 1bb: 31 c0 xor %eax,%eax - 1bd: 8d 76 00 lea 0x0(%esi),%esi - 1c0: 83 c0 01 add $0x1,%eax - 1c3: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - 1c7: 89 c1 mov %eax,%ecx - 1c9: 75 f5 jne 1c0 - ; - } - return n; -} - 1cb: 89 c8 mov %ecx,%eax - 1cd: 5d pop %ebp - 1ce: c3 ret - 1cf: 90 nop - for (n = 0; s[n]; n++) { - 1d0: 31 c9 xor %ecx,%ecx -} - 1d2: 5d pop %ebp - 1d3: 89 c8 mov %ecx,%eax - 1d5: c3 ret - 1d6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 1dd: 8d 76 00 lea 0x0(%esi),%esi - -000001e0 : - -void* memset(void *dst, int c, uint n) { - 1e0: 55 push %ebp - 1e1: 89 e5 mov %esp,%ebp - 1e3: 57 push %edi - 1e4: 8b 55 08 mov 0x8(%ebp),%edx - "d" (port), "0" (addr), "1" (cnt) : - "cc"); -} - -static inline void stosb(void *addr, int data, int cnt) { - asm volatile ("cld; rep stosb" : - 1e7: 8b 4d 10 mov 0x10(%ebp),%ecx - 1ea: 8b 45 0c mov 0xc(%ebp),%eax - 1ed: 89 d7 mov %edx,%edi - 1ef: fc cld - 1f0: f3 aa rep stos %al,%es:(%edi) - stosb(dst, c, n); - return dst; -} - 1f2: 8b 7d fc mov -0x4(%ebp),%edi - 1f5: 89 d0 mov %edx,%eax - 1f7: c9 leave - 1f8: c3 ret - 1f9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -00000200 : - -char* strchr(const char *s, char c) { - 200: 55 push %ebp - 201: 89 e5 mov %esp,%ebp - 203: 8b 45 08 mov 0x8(%ebp),%eax - 206: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx - for (; *s; s++) { - 20a: 0f b6 10 movzbl (%eax),%edx - 20d: 84 d2 test %dl,%dl - 20f: 75 12 jne 223 - 211: eb 1d jmp 230 - 213: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 217: 90 nop - 218: 0f b6 50 01 movzbl 0x1(%eax),%edx - 21c: 83 c0 01 add $0x1,%eax - 21f: 84 d2 test %dl,%dl - 221: 74 0d je 230 - if (*s == c) { - 223: 38 d1 cmp %dl,%cl - 225: 75 f1 jne 218 - return (char*)s; - } - } - return 0; -} - 227: 5d pop %ebp - 228: c3 ret - 229: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - return 0; - 230: 31 c0 xor %eax,%eax -} - 232: 5d pop %ebp - 233: c3 ret - 234: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 23b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 23f: 90 nop - -00000240 : - -char* gets(char *buf, int max) { - 240: 55 push %ebp - 241: 89 e5 mov %esp,%ebp - 243: 57 push %edi - 244: 56 push %esi - int i, cc; - char c; - - for (i = 0; i + 1 < max;) { - cc = read(0, &c, 1); - 245: 8d 7d e7 lea -0x19(%ebp),%edi -char* gets(char *buf, int max) { - 248: 53 push %ebx - for (i = 0; i + 1 < max;) { - 249: 31 db xor %ebx,%ebx -char* gets(char *buf, int max) { - 24b: 83 ec 1c sub $0x1c,%esp - for (i = 0; i + 1 < max;) { - 24e: eb 27 jmp 277 - cc = read(0, &c, 1); - 250: 83 ec 04 sub $0x4,%esp - 253: 6a 01 push $0x1 - 255: 57 push %edi - 256: 6a 00 push $0x0 - 258: e8 2e 01 00 00 call 38b - if (cc < 1) { - 25d: 83 c4 10 add $0x10,%esp - 260: 85 c0 test %eax,%eax - 262: 7e 1d jle 281 - break; - } - buf[i++] = c; - 264: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 268: 8b 55 08 mov 0x8(%ebp),%edx - 26b: 88 44 1a ff mov %al,-0x1(%edx,%ebx,1) - if (c == '\n' || c == '\r') { - 26f: 3c 0a cmp $0xa,%al - 271: 74 1d je 290 - 273: 3c 0d cmp $0xd,%al - 275: 74 19 je 290 - for (i = 0; i + 1 < max;) { - 277: 89 de mov %ebx,%esi - 279: 83 c3 01 add $0x1,%ebx - 27c: 3b 5d 0c cmp 0xc(%ebp),%ebx - 27f: 7c cf jl 250 - break; - } - } - buf[i] = '\0'; - 281: 8b 45 08 mov 0x8(%ebp),%eax - 284: c6 04 30 00 movb $0x0,(%eax,%esi,1) - return buf; -} - 288: 8d 65 f4 lea -0xc(%ebp),%esp - 28b: 5b pop %ebx - 28c: 5e pop %esi - 28d: 5f pop %edi - 28e: 5d pop %ebp - 28f: c3 ret - buf[i] = '\0'; - 290: 8b 45 08 mov 0x8(%ebp),%eax - 293: 89 de mov %ebx,%esi - 295: c6 04 30 00 movb $0x0,(%eax,%esi,1) -} - 299: 8d 65 f4 lea -0xc(%ebp),%esp - 29c: 5b pop %ebx - 29d: 5e pop %esi - 29e: 5f pop %edi - 29f: 5d pop %ebp - 2a0: c3 ret - 2a1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 2a8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 2af: 90 nop - -000002b0 : - -int stat(const char *n, struct stat *st) { - 2b0: 55 push %ebp - 2b1: 89 e5 mov %esp,%ebp - 2b3: 56 push %esi - 2b4: 53 push %ebx - int fd; - int r; - - fd = open(n, O_RDONLY); - 2b5: 83 ec 08 sub $0x8,%esp - 2b8: 6a 00 push $0x0 - 2ba: ff 75 08 push 0x8(%ebp) - 2bd: e8 19 01 00 00 call 3db - if (fd < 0) { - 2c2: 83 c4 10 add $0x10,%esp - 2c5: 85 c0 test %eax,%eax - 2c7: 78 27 js 2f0 - return -1; - } - r = fstat(fd, st); - 2c9: 83 ec 08 sub $0x8,%esp - 2cc: ff 75 0c push 0xc(%ebp) - 2cf: 89 c3 mov %eax,%ebx - 2d1: 50 push %eax - 2d2: e8 cc 00 00 00 call 3a3 - close(fd); - 2d7: 89 1c 24 mov %ebx,(%esp) - r = fstat(fd, st); - 2da: 89 c6 mov %eax,%esi - close(fd); - 2dc: e8 2a 01 00 00 call 40b - return r; - 2e1: 83 c4 10 add $0x10,%esp -} - 2e4: 8d 65 f8 lea -0x8(%ebp),%esp - 2e7: 89 f0 mov %esi,%eax - 2e9: 5b pop %ebx - 2ea: 5e pop %esi - 2eb: 5d pop %ebp - 2ec: c3 ret - 2ed: 8d 76 00 lea 0x0(%esi),%esi - return -1; - 2f0: be ff ff ff ff mov $0xffffffff,%esi - 2f5: eb ed jmp 2e4 - 2f7: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 2fe: 66 90 xchg %ax,%ax - -00000300 : - -int atoi(const char *s) { - 300: 55 push %ebp - 301: 89 e5 mov %esp,%ebp - 303: 53 push %ebx - 304: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - n = 0; - while ('0' <= *s && *s <= '9') { - 307: 0f be 02 movsbl (%edx),%eax - 30a: 8d 48 d0 lea -0x30(%eax),%ecx - 30d: 80 f9 09 cmp $0x9,%cl - n = 0; - 310: b9 00 00 00 00 mov $0x0,%ecx - while ('0' <= *s && *s <= '9') { - 315: 77 1e ja 335 - 317: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 31e: 66 90 xchg %ax,%ax - n = n * 10 + *s++ - '0'; - 320: 83 c2 01 add $0x1,%edx - 323: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 326: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx - while ('0' <= *s && *s <= '9') { - 32a: 0f be 02 movsbl (%edx),%eax - 32d: 8d 58 d0 lea -0x30(%eax),%ebx - 330: 80 fb 09 cmp $0x9,%bl - 333: 76 eb jbe 320 - } - return n; -} - 335: 8b 5d fc mov -0x4(%ebp),%ebx - 338: 89 c8 mov %ecx,%eax - 33a: c9 leave - 33b: c3 ret - 33c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000340 : - -void* memmove(void *vdst, const void *vsrc, int n) { - 340: 55 push %ebp - 341: 89 e5 mov %esp,%ebp - 343: 57 push %edi - 344: 8b 45 10 mov 0x10(%ebp),%eax - 347: 8b 55 08 mov 0x8(%ebp),%edx - 34a: 56 push %esi - 34b: 8b 75 0c mov 0xc(%ebp),%esi - char *dst; - const char *src; - - dst = vdst; - src = vsrc; - while (n-- > 0) { - 34e: 85 c0 test %eax,%eax - 350: 7e 13 jle 365 - 352: 01 d0 add %edx,%eax - dst = vdst; - 354: 89 d7 mov %edx,%edi - 356: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 35d: 8d 76 00 lea 0x0(%esi),%esi - *dst++ = *src++; - 360: a4 movsb %ds:(%esi),%es:(%edi) - while (n-- > 0) { - 361: 39 f8 cmp %edi,%eax - 363: 75 fb jne 360 - } - return vdst; -} - 365: 5e pop %esi - 366: 89 d0 mov %edx,%eax - 368: 5f pop %edi - 369: 5d pop %ebp - 36a: c3 ret - -0000036b : -name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 36b: b8 01 00 00 00 mov $0x1,%eax - 370: cd 40 int $0x40 - 372: c3 ret - -00000373 : -SYSCALL(exit) - 373: b8 02 00 00 00 mov $0x2,%eax - 378: cd 40 int $0x40 - 37a: c3 ret - -0000037b : -SYSCALL(wait) - 37b: b8 03 00 00 00 mov $0x3,%eax - 380: cd 40 int $0x40 - 382: c3 ret - -00000383 : -SYSCALL(pipe) - 383: b8 04 00 00 00 mov $0x4,%eax - 388: cd 40 int $0x40 - 38a: c3 ret - -0000038b : -SYSCALL(read) - 38b: b8 05 00 00 00 mov $0x5,%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(fstat) - 3a3: b8 08 00 00 00 mov $0x8,%eax - 3a8: cd 40 int $0x40 - 3aa: c3 ret - -000003ab : -SYSCALL(chdir) - 3ab: b8 09 00 00 00 mov $0x9,%eax - 3b0: cd 40 int $0x40 - 3b2: c3 ret - -000003b3 : -SYSCALL(dup) - 3b3: b8 0a 00 00 00 mov $0xa,%eax - 3b8: cd 40 int $0x40 - 3ba: c3 ret - -000003bb : -SYSCALL(getpid) - 3bb: b8 0b 00 00 00 mov $0xb,%eax - 3c0: cd 40 int $0x40 - 3c2: c3 ret - -000003c3 : -SYSCALL(sbrk) - 3c3: b8 0c 00 00 00 mov $0xc,%eax - 3c8: cd 40 int $0x40 - 3ca: c3 ret - -000003cb : -SYSCALL(sleep) - 3cb: b8 0d 00 00 00 mov $0xd,%eax - 3d0: cd 40 int $0x40 - 3d2: c3 ret - -000003d3 : -SYSCALL(uptime) - 3d3: b8 0e 00 00 00 mov $0xe,%eax - 3d8: cd 40 int $0x40 - 3da: c3 ret - -000003db : -SYSCALL(open) - 3db: b8 0f 00 00 00 mov $0xf,%eax - 3e0: cd 40 int $0x40 - 3e2: c3 ret - -000003e3 : -SYSCALL(write) - 3e3: b8 10 00 00 00 mov $0x10,%eax - 3e8: cd 40 int $0x40 - 3ea: c3 ret - -000003eb : -SYSCALL(mknod) - 3eb: b8 11 00 00 00 mov $0x11,%eax - 3f0: cd 40 int $0x40 - 3f2: c3 ret - -000003f3 : -SYSCALL(unlink) - 3f3: b8 12 00 00 00 mov $0x12,%eax - 3f8: cd 40 int $0x40 - 3fa: c3 ret - -000003fb : -SYSCALL(link) - 3fb: b8 13 00 00 00 mov $0x13,%eax - 400: cd 40 int $0x40 - 402: c3 ret - -00000403 : -SYSCALL(mkdir) - 403: b8 14 00 00 00 mov $0x14,%eax - 408: cd 40 int $0x40 - 40a: c3 ret - -0000040b : -SYSCALL(close) - 40b: b8 15 00 00 00 mov $0x15,%eax - 410: cd 40 int $0x40 - 412: c3 ret - -00000413 : -SYSCALL(getch) - 413: b8 16 00 00 00 mov $0x16,%eax - 418: cd 40 int $0x40 - 41a: c3 ret - -0000041b : -SYSCALL(greeting) - 41b: b8 17 00 00 00 mov $0x17,%eax - 420: cd 40 int $0x40 - 422: c3 ret - -00000423 : -SYSCALL(shutdown) - 423: b8 18 00 00 00 mov $0x18,%eax - 428: cd 40 int $0x40 - 42a: c3 ret diff --git a/forktest.d b/forktest.d deleted file mode 100644 index d31a0c2..0000000 --- a/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/forktest.o b/forktest.o deleted file mode 100644 index 5ec77c57d921fea0c19216d78448b804ba72b7eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5480 zcma)9dyG_99X@C7oV&9-v+spvLEPE$D39*2Ln#7<7Fa5!ZD6zO>XH;;cK7bgw6ino z+&hJ>Sgc#3gf^BcTI)t)OyeUa+N3YjHe#p|5^Q2Z)QCn+upyz$N@0r>j<}%-@t2mWXPt%>VzKy`rD_~L_P3##cUq3` zOAKB9@cQ-ZGjApahOSp)S~vzQVGv50~xjY$ZOT)-J|qII-7k-7waXh+6YYfbe*Yl^CTF%YT| zrn=o|npeXbaTR5?9I}?&Wl-z2_;pB8dZRT-)O`zji>p9i?(&!a3H@wD-D_wZ>23tH zzKEu+4UJ6eT#y8po1A@@EeD|m+V-Q0_D(di$?XGNq&VA;;m3-io;{e4nm~D$7yrg^_9Zp+*Lvlpsu!(2wRh3PWfrsG^=3o~4Nm=QyQ)Y?FK* z>NKiOavZ`jRQWs_o#Z75H8kdzOJ9~<>}v~GdFygLoHo<%8i(E3y5P|+_Mv^Q zGwkZ9^?SH;ByKxBZ*D+Rk7RxdL$t9%bn5BlV9uZ_p$`K{!kp{w5ag&(k-k$=wO$TI z*Kc(EBd4MpJ;>QtrC#RbW2cX3YL^^{etbEa(FruOa#qR#TnsVpp(QR3KOs)l^ho*? zu8f%87_P%3=7w&3dcC_2ceM6tojw+qO;jw6oQOu3E{g;)u@r{tnyU>3D~vQubrp2W z1!;$?*f-Fl^-H2l`h-5?jz=`Kh`SI>;yQ3}+g)pFBrqeFzLec^CFF?gjxUp$ayH`#7E$snB#_HAwIJ2cS2&J$R9~`p^7gf8f=bcblJ$ySIX?z9Qy$B0$*zCqXo~0(+?PjtJu%k=zOUt@a=*J$d$@L zvNlYPe5#CgLQjYA4qx zHcw?b=k|x|PO^#oWOajUpc% z6!LIPE=okBU%`e*!e(E2++t!|Q|xGDd!yPhRt?`wtG7S^=tTqL2}`6HiakS*k=tOBHd z`%U@=qtn;M@rD+LS&(MM9@HDtx~t1nZ(_Yx^-e|(K8_-|mvNzqNV5=|fD(uO-Nt^e z(f1gCnb<1C<3vo)R}Ibr8TVc4$oC_o^P#}Jd;>->IlQgNJ4+qB-x&S()WQ1`5xh&r zeuX-ortca1HQKQjBUm`J*Achb8oXvO3LpKA2Im{>Hn_rI+TbRGJBXO?oY9XE(T^E} z$Bg|MgLvZU?`$`Cz+je$^*Ckp!v<%J{Yj(qrNe&m`9l5=jQ+AgoN=<<1pZ7ps7zHY z56eTB`>BMARae7?rTUS)K5!Vb7L|qhwrZ)`(8tQNI?Q_#3dd#(`$zwvL3?Zd6h^LB zTdcerhVXbVV7&BkygX;^c*h|#uPvvc%wlcYVtof-2euh1z$&0olet6elr3D=3&^ea}D-=lc}y zEADgVL+V<-A40Y<5XBqFw~~S>*7rR0aK1t)ALrZ7%Nvkw3{$*~eA`0?EB*|=aK0yy zZv$-XAMZb#?;K>t^r5n>z+&8FlR&4)dcmOOjUssgHd`$35)70r?=A3dvn1oA|6LP$7qff6^%1rSu_qU!=nnj)Ubts7$dHmF4x&{PB0O;|=E`?=bFr-jCeZJfF$q gd^4BbyAZ{B+%H=wn8G|Pc>c`cUBGw4=Z59|7rcAm0RR91 diff --git a/fs.d b/fs.d deleted file mode 100644 index a1d05cc..0000000 --- a/fs.d +++ /dev/null @@ -1,2 +0,0 @@ -fs.o: fs.c /usr/include/stdc-predef.h types.h defs.h param.h stat.h mmu.h \ - proc.h spinlock.h sleeplock.h fs.h buf.h file.h diff --git a/fs.o b/fs.o deleted file mode 100644 index 4c93a34e3c194a42f58d157b51e4ba499aac1908..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31048 zcma)l34B!5`S#s2lT0#6CJR}Ru*f1NA%GwfWLI_~0SpR4RtSU;k_m_kA|c>7q5-wq z{;6Qy+KQsKigg7Mk=iOQRop68R1oXFfN1kQ&$;i-g8hHrH^1M#&w0;zxAUI&EHjxq zxqAGR3v^xAyqB(-T05m_=Qg@6gBA4EGPMkkRpG42p2)#HM+2ta1$5-2*~O99nm+Rt zU3B!P*4Ea@TYFBKP0uApo^Sdf<}vEM=EGLNYlnl6PB~+4^PX_e9}YHs7U=%Mwd2m1 zJKL2R+)E+EHdUUu^s;$-!LW$NRQ0Am_hwn3Wme>)i)R-%eU=@KXLV%!q2>d@^&3&# zKmJ|TL>u3QKanr@oDd(2S{n~}1|s8++(D+u_`?OekLPb%p+)vQK{unbj=NpV!QL{}d{jsNXyX9nk9tm-0#ZhuQIncePLAhLJUsJV+YL(>*(MJ`{q%NG&c zRQYY>%S$htKX0!Wl5lTL#UrwRcER_>PjJYZKIQ9=#Z~UZrcjJo4KRY(pe;|_0--lPBBa!nXv#tFX_!zVO z7fiujYd5Aw@H8if6<>*@0H17^y#w=|e(q?+@ZF3{fMu#`I zhO?o5Mq53ij3i`~AB7+?yy5Z;6R)!J*FeCe2W(n=HE+3dm!4y#r9KWe8-kUB- ziC%SEpt-g2?x=S3e6ozYJrLQC(Y!Qrf_B)sVX&k;;CRk1jy4A1?P9&P(F>KEAB(e# zWX{aqfjPcaNRT16mn}?F3KVBO75+il21(9Z0=fH$=0PBZ4Uh{m> zu~yUGxt*M7ZMaKu1$PyH+w@!@@_cmc@5PsK&fKaW*4iwR~O=APD!RXj2=sc!PP}XD_ffn|&W29RL$xx{NS?&D`?n+dB zD=rG|D*C=EQal5QJ{HdeqL0P1qeVYOic1y`F4{D9Zs%^obXC)pMcV$cQ#k&?=9RJt zEcd#^VOZi3UUqcuU$`$j)DUoIjN6-3wX&>9KpfqEsmViSYfo3^E-!8SO<%-p)0F{t z36B=5=)4+^ft$0n@IYvATRMilX^BsV+5O|0)fy)}lSs{0mB;M^7H#l#5_~SP=|6ho zA2&s>hhSv&kxdPABQGD1;{Y~2Zw>oTI3t?Y{A&1{sCl&JL~HAQhX#%xVSBWRGT3#n zmgmB){bNhm=uVh|-BppXMP7Czx@>}r#|l+^u|B$^8CiW8wVSS;i|q(gaZ?@52UPyh z{tw|`oBhvzXl*_IDGXs#jIKVck|BDN^1(d%G8!2H5se8F9limD=n*;SDVf#{5q zNKqmdc*z$zPpl3^$NQp{9e*e~s$|&n!HtiTns=n& zK;&)x>)@6>k(Yz(?m=B-Prt8*9Sn|rF*5Z?^MUX}r9V3FP~_`9pZX(*j$U+USzK>)n2PHjOjp4tpzj!CP1}iuL#Pf8qcmah>&UB*i@x=<_&2 z!&VdI^kcL9<}ztDQ(jccM z@ARb4OfdOud$3Vn`dlKT&Co-!&9uf$MBgrCl zC9XN>KK_Uss)xMgMV$u_FYql+Xl+EsySwxMvY*ZKaShXh&CReHEiNf&-PCvpv-W(I z7mE{-cCvIPHl0XpoK@Ad`j8gxg57D;__r4)VAKO%JA6)W+MhW5%945>913>32NdRS zbUasS8xT1+xNFuSED6WH!+Ah50=_Q#4eYy`KwRq)(kplTBRGX*uRS*(35etkuCG8k zdLq%fMeQq96OMkTEmg;3*rBGqdhk)RFhBhL`rX0x4&*_yn22KJ{la{=vL*QFg*rBH zFk0((H+~g4(eF^xiFj`VvKA*4M^1U?YYf8Lk@<~k;er0O!}G(~=Gzzas-`uJ@822U z@$VuG{OZT zU~)MkgL_5(;|;~JG_GJPwCL0$n^JThC1xEi>fkd4pG$n+(2k7;BhLSHEZF=stYS>$ z0FR?%9RmucF;YZg`yYWpdP$ogWCbO8NL;K z@A=klKy~m)hYp5|qtkrN2i8n+Pq8zO?*U6^BjEwjHNNK7HT}@iX1kM0yvy)R9m_}W zz_@5Fyit{%@~P>w9PF1Ifp%5ckQPR-Ea4<*4fj*C;kduWP3wk?U(APTYCbf+@689O za;N5E%z93qDlAaqP7Wu~Sp~a0WPRH-b|*0>?V>+;zLMZM8L`pU}c+J!m9oU)o_}l^rE5cyqt#WD=Kr&tjMWV z{x_(i>!m8zEL%tfG=xj*!z{b49>uQYcx|!Tzwpk&)^sku+PPD4>&lXPy9`VTlG3zp z8%&)2y9_~b7~k=yTQS@eyNy7#(PaW_jF=0tUv|43HD;GfSfl%%1<~yrFj@(eI?uAJ zYr|UHa?}hqjX$HxxP<&>ESohW9~w+2t`g=gv%IcRGh>qOcQnms)|EGCrZ4tk5CJXj zGAKx~Yy)6qP`wk!vSwCPuF$L)e+|l(iGFLAPpS49bx>{j6Vcst8!v8#XBIibVZHUQ`HYnPJxbIs(emrMVWS{Dh^3qsP$H*p~(lq(1&H; zxmw&pXjx=0*$gn=L4#c*ajSxh_EJSyW<$dO&8`iMppbEpEz1-UYb+sA7f1O3*a|dz zxoSx?SY_8MBH1XU>ITJ@0=9vg9ab$}jJK$uQ4yJDdHo>GUJ>^zh-RCW)peS^Qpw~P zQ>g87W@R~uD-?0ISy=(%N<|DXE6YG!rHH|1WdpRWR@%-*3y3v} zC`3!OW?!w?MnM6HwTc*r7R|m!xi-Q07yVqPh)E_g$8J*PDaLU&tXIS|bWO9HRk_Ic zmJJ&eF~h7t!$wt}Y5dHFYZWoutU^OXl}ikVoxDyFmzWFD5LM;5Mvx8HE8;S!k*n~o+V7H*D} zdMWBGGu)s#b{dn`XD);>$4Oa$hB{*~s+^cm0hqTNTPg2T^WrY!YdGlm74dr`0NYM% zaxYA|9a>xk_)?rqs#ei;vQ%_IAns1KA}lplPFF?v)bKcGC?cTJ!0D!lL@kD{C-~t< z9SR{X9<~-ogI76c(xBOJh352D+?uhMj`RsE;M_NULl^t1g}`V0iaqI<(hn^Gv#z>A zbIwxECmJ`hrN44M#SB+z&e`c#f~$+cemJ=*MA^o05_u|7bBs?(Q_gtA)T zVvK(G_@KzFuSABJ%6-eYgG#JeD)bq%p*zM_gx|P;zB5NH`!T1w32NhwtHWQUipK*$2lG2`qNWkb#B3ZReas5nDD{PT* zge|Fxm|TZqqw#BVpK+*tCGm)PKQD*?rH=p+n=zQ z^4uBxZpSs_A5iR1bfaLLglT`0BCxEINLEC^NQVJ`ND){`sUSrWDaKb+kgA9-T3ikN z^mk?dRIvPKs3>SESpIH`FjTPoIf}4Uu>9Q>;kdr_P}+PdSpJ?WSOGUA|A1Z<5^Rvg z@GsGS&QCPOvGfm7tBbqC`iI7<1~t3mp@F6sH?b8l&Bb7h}ZkM{V#KNNB-s2(=#EkFueir81t4alc1}FXoIBC>sah zPE5DBBtQ5K?uaotim#(?E@HDAV+= zA!eG5sA}2;Gqd&WdO4cZ#L(|h*`^tsSo-gh*)Uj3U@AADsKQ*JUHBv&ztcP)Rj!%| z%fTPFJc*0qt*Gs7TkB6_UXkT?Kpu1jjCt0CCjoiuM+4ChZ`AGmzYkhaQ+hrtxrC20a{=$w|g z1)(k}Ar2A`$t6^Z%R#qsVU7ddf*ZPN8sr+#( z`=K&%4=Y_mcfinQ>VKbg%8)84Lor8CIVo)`+zpcbKjdMH>qoCkV0NRCz#PzU*5&8Z z`qr6ons#PBL^c{Zv}tSxsTj|8Noz6>#(xA`Krb>kYfeC)p%(=7i_FayH1*1aOY4jv zwH{7DN0nBxE3NB{EYUiJTJCO|{Uoj&Y!3?zwLQ#-ma({| zbFS(Oj4rhFD$0MwmGoe;rhNyq+6-J(M#5#VV(mudS7`l$60KqPFF)E87F%8$*Rq%}*<~nc`>(+A63`z+uy$%ik#>CJwV2Ft=D)+&Z zz6I3fhMzo25Q)=xha#8mNaIB~9SJ0?*e}e)ir=~Lo^WmK9_dO8N ze+#P7h=0X1(gM*Na3#?QIn4WA1N+HA1HVD*Z8UHrYN%I#7zJ9=^k1W-3@9HDfHHXN zjke`Rd@MStRNMpc-%-UsL{k3@1=q(fFnrC_8iBK`VNZVqg(=AN-t)lpH`I)P9;7^T z9SM)Oji8m)Tq+)EBrvl!pt1)ua-`9fbPs0TNTVOiz6NcS;hyViDr>dTvc2?50!y-? zR)`#kKg=#|rRhEub!f<9CSn?@1Wq>2q^c(%@(8Xj+~AUp0qpAApkK#@xAIk5$W?v{ z^f$PQ@IGBnF+$uYjm<^O`&2jYyFoz~C)ZGzrcu2Ng+BPRnZ6DMuE_dLD7?U?2T)*_ z^?fKXar9TEpkP^ho3xg>8a_PWs^1{$AJ8+D z`ih1yntHaWe?ZR_^$+Mn+tlxDQ@^ua{ez-D|91$2?7_ z-v?Ii)cdo+*lcMr{Pf_W!SG67ugB{eMuc5nulJx&zG|&mcTcQ~Q3}+6*@y0IaP9d@ zwT-%ZN2%o^tF=-+o_=ykp^{QPM|G^M7R7#S$-4snl}QguQA$#S2aV;@gT7D0l^HrS zgDPg|-Kav#9}U4m{Y#XKQPQ_^a?b#RUg$<|AjUioSMda-8y0l85a` ze+q?J_$Gw@5egqMi&GGL)zk|G?zwt_)Sx&ETxw;nK!Gc}{-P+*bQ>j|Rozfft5Say z$eleN1+@?K9S7^VIu{j2Cs)r_(dnCmpe5<|Np+Gt*c_;28K??yhx8P3;9V5dW$r?r z``kIk6^ZJ6?x1T0^P%n|wLi8X*k40N-^yNg<>x{lsgGs0!jTqS13B3~I*Wt*7D|7| z6%SP(tBo)fdi=Ns4Mp?EY8#vmax5-=Cp4>2WWx~^ib-B!9SUkI8N3svR}(Scu2w$m zqYu#js_OO{sJRMPJo@>XnqHegZDb9*`?~7w??K*$OCJO+YJm7|QEh^2P~gEU`$iNv zQrgT1m|Kslg{KHYPbsVGahf@YJ%3z%l!ZAoke^vS-kYD5Jp;DC;2Oj@JfWt_zd#%mFm`VJJ7gRh~$1EBs93UpBaxA4ru8)3D7TmhHl z$fW7X(9H2`=j^5Lcma1unAf=qZ+bwP~tT@k_O7YPNrc>Q8X#XF!#5Zw3k~l>9_hg_~wo)C$JKmvhv@wH9?2Q()_( z=&^F=oD8ORU#vSlaK)EtLzJltK#Woq)!GoXEG`CB!J4Jo5Ebr?Aet0QoiQJYc0#c>tp}?N%V?1t}RooZz=&1LL*O>-AndALb__u`5j2qLx+wq2U_ybSGs$ED`cyC@vOrKZj|DEu3j-UumWn|~AF)XBaT1vM-we2>5nv)oPm zN@zWU?+`G9^}A55*3Cboki^N9!tG!;sMnPbUGZH;>snML;5-w{>n0Gfx8v5GoEqY; zZW{qfx)ba1=YaPNTn_oqMxieW%8f>0I4(UMvdZUqD5&XPiGm6o(_KYJS2K_KcC%NN z!rhwLKN=?Wt#fFR2k|oKyo`DuLmSWE*{`FZ_P!6=WOLcpdf**%oy+mn@G=Z696 zm|uc+tq-nZ-QMMCzaFjE;?fr}v+2Yw>eaJ5(?FAE4AX_rz8eJqCYOB zYZeL@k)V}DC{&Q3>D4H#!sSr$O(<+4K?6Hb_#+7#dK`s61E4ZvLKm_pa z#^QAf#84D+amCv3BQ}Y*EZokf!jn*_4aD`Lu6P%LZvh3VWfKY;Nl^d2DBMYcMxRFE zFtg+sV5r3$rTH*;f2l{Vu4Qr;-7{(<@HH$@?EsWuB2k$4dK%3y)Ni8P-4F7 z91ETY^(Rq~)$Txhae}s5zZ!wUXOd>Zd2z$zhQ&<`or`u86~2xYmaP?pjPzY&uv*); zHW5P3;P$GRpcdENVy$m5CA;gxZR%17rA~A#r7$8P-Ass!Qzp9mbkqbUYDSkeSR3O# z4ays_nV{dcnE|i6)9vm_eKHC&*q+o?F9^-h9~%=lE4`$CV1XK+NiLXQe##~_@c z1_2@JmZq#2?tmd(y^yJ(i`DLJkzmg{#G*$hAF)n!vV{-oe&J`w(BPQcv4`-c_XM43 z#Gdr=RJo3zv2RCZ-JL!e(&v7j%c_GotcIYr5Q}|(2x(`x`RQeWJmW0P_w60rAC3L6`oLQNA7`MXFCqVAkSXM%E9eMkz(j)M>XeoVR0qU z!y#=QBp(MS&P~*z?WxFso|~kfnGlLIyJdAFVugc3(ye2bT->q2wOZ0yty?*#bMC}(jl;gxo;X)vJT6tMGv`t!_6A$SS^vMh ztb^&Fr|U)5=jk_h(TlCM8O@o12Qv3%8UwajFJ&IeMB|~%Pg#3U*2`IdlUdhiqw&8e z!+xaH&49Y+GL6kMt>>sHTw?9Zd`ZzSWxke)Gt6t5Te8@^CF`Cn>rQ>fHt0T~YEERG z%%Z@_tY2q?iY6uH_nE;PwzQ*JuAaTXASONMV!Yo0ea`tQ)(W$k1n7Co+D@Fv56?knwYdv$@16 z%-&}G%y?dGHD^AN2@Xa9@P6hIM)gSM%~_ys&bkdf*5KCnB)>-h(0DSdl~ik1Q#Kpv zi9Wl{w)IrT!3=O6bk*OJ^$=wqLWlH=vDaJQrQg^E?53t1K=(xwZ%FX6Ztn672m6^W zUvzQMo<)uCDl8)4Hqc-Cd2a&$_$otE4+O`=mJ_%{-*L zFYD>-*O;u|eVcU4HLWBW z)8{BU+xpNv=4v=y)QyqV5_?UY8$-%lPsTnI3*FDeM&ckGiMye#(K-6l}A;_igYaY8(95`^}YCZ?mrV z|48~rf2&`gL3X^rbgLhIeaQbOKdk-9|2-(T$!m}Lv2sNHxB3GsuO6B?q*sI10|RG0 z<$sk8ulngviTJ~?TH9luj$wBZ*Y{&0K7I)b@7p}m>%H|=%(pQx`7K!5OrjsCvb#cY z*X3&L+kCOKu2?L)_Jp%N`=h--+h?@JrSAX;4k$wuE0!ZO+h5kXW6?5pf>o#GY_ld* z#1%knXr`|5?fZi7SQO5RB`x6^M`o#X! zcIVco_Pq`&?scAW(EOD1GO3rHR~@(cRp+0q|EKdl>N_fID?{_+HiqVL`){_{5ZGq@ z&E7&`Y-C%U+a0vr?%eCBmV2E&r1v;~16>17*9A5;hfB zG+KAr_tNIQu!$)C&3?~zV3E7br?Bpox4>uegyD%eTS#qjenaXv=(f4ydfnPa``jf&#Y^_1 zR5Ehl6xuo;3ax{o`%;z3)E%h|+K$wh75#GRD~f(4^&8UCEk;5K_^kVsKmYsZPisTfgZw=K+Xro2THZ?WxSx6M6iSZmX6PNPpZr`?j)KD}t&+Mae@I-9Ob zkES#9(ewut{XqIoMej^MK)QpcBH|N~fQa}kS0rG$BJG1yCxl;Mbqym z>`Z?Wpi;@&n!Y{Vze2m&h;41n+-7Z0zb73#y}SHaAEbSfW^Tq>`$^hYY3SfrXwnYlBY(t+#RZ!-t)i*lJc| zYJ~1ewGLrqHFV&bbZdS3hIFeX{oZutIX*E>|2iFK^xL{<)@?X^Ts7 z+gF0(R67ktJKs(lo(FRBLR)v5*4ciipYwu!h67`3Vbv^kZH4TRj@o!Tbc=mPsT~?^ z2guuKXFy3pp`B4^CzPPVH`(r{+qsTjVkZ^a@n8snA(&@p&ap$o?I7#&p-8tgOYFq3 zJw!7s! z;ve7y?YJxK0p=BXc6=Y;suCC)>D&>rd+F#Bm3B4?PQFuxuD@aTV|`AEFBwAS3XCQ-guyTwnT@8b61&$V^dK#7 zQeFwrnd<~g?AVdEeZU(|>cMbscHqT`Nw%F^Vy9AUJH^)O zu2?EY)PBnOhxzQyT+Gi;8Vz(MX4sBp{5jp=0cV|KMxbAJjKOL4 z*^X}r;|d=$bWrgvcE)J?>}7Vw5<7?}a_k&47Ts6Fh!7w}SZQKDdsS5`tB~^k``xLQ zr>0t=9r&xAa2_LX=QCD)F|n9olT~)aI}5+D(-DSvXIoQ~n+T)rl%Y1h&XJOZdmh1d z=Gr+Y-J#EMFnu#d*;!-lSaX${&+sDjv29OxE4X&R5>^_R;Ut?Z2{}TkPn^c2o$Qto z^Ug)J22g0k<|Z{NSb(~f*u6O_{Cln0k6{I!6t?XV&NkHv=y(F53}Ll++I8{_I_Vo_ zCm~AuI;eZ_NtK(r8NA(g9CP6j+i%9{c31QqYf@JvC!BrHPGFB1szK~Pd#D(pZlmqw zp(=1)K!qm#Uy5W;rlJu@RYoDlnbQPUk^9%6w$Tec(i92349k?6?t_~lJI6_a<0I@; zIzGwu|8YB)gN+V5m!q2_Y^y>u2THSqb8L{(EnHMh?@0S<2Q$FJWWz)p9%SNBw3@{RTA^Ccut1>o1B(82RQ5P zo{st0)xI~_o1P2-#^_R{K}cCmMIaCa6#%EjF?&#@E^#m~EwS^>Z?&(V@`Ms4l<|<^7(5gJC-CvvIh{@G}TUoh;E{PcsM3(r<`pMcg*x7uHVCz-#6RC z;WtN1`He-n@D1+Rm#QeHJHCO++jQ!i)9(0vAln@mm(POB^tZ{*TMhq}w>gCv;=*>{ z7tmRDVs58SRF(X{I)R=in$@bup%yhd{tDVf3alnw8hOd z!`Yy!a9YAN%11fLj-QNbOuS}PVHLy-BB$H$GTT3J9TbgWN{UYO5k^w=%}SHsdE3?K zWz;R$>vZ$+)o<7V^LhB0imigX@&>FNZ>ud6g-g_O3q~~qng0(ukE&hg!g3tAlGQWc(w)xN1c_kDj`*G`qW#Xa{=O-OsiIm)QFK_CV*aoJs>Z zmAcylFSY~uw!Y8~bTjZ#qP}QZO$DAdZ>XuPtkdf1@g+4rd#!noW^3c8j+rrMy0*Nw z^763OfQQK|8fz-+waTS+;Z@qo`s#3H`(xqSh0|u`j4c?NQ&5mMC~rVc?$SX6aSJ!r zR*qO$SzB3OT@JFezI@S$>LKS2$;n-~u%av{cRHA=YM14fHCESzt7~1NAq?(tZfQ+* zX#<~zR~*ZhR)=$|>Pwea=GHC4Q`(jF9&>5=lH9ubW#P*5@G_~atFAtgfxd4VRYHR5qXyPnbilyr#5aktbcftX8XUSW%##T6J}8 zby%yftf?$*sMH$js@>=7ODihswT8yJ%6j)9|2lr_y{@#r5>KB~u2L&gPu8No~ z4J+jlevH$ya+l?Tar385pEh0tPMkJ<+<5#{KttvHK?U;%4u;dUOQ5i}y4*7^qg+ur zKdhBqQCYuCYpiXkURYbn=kL)AsP&%e*OubR^m^(onpiYmD=lB%SY2PK)gt!Vj9JsB zjUF>)yjHzzX_>}n{k4Wg%kUh3Cv9Y{mi{180~oFXtyX!Z5~mu!OHdtFKB*rZSXNbC zQ|bOz0XkO?7ugpT_J$=0a82b>{5U}!!VIp8#yaoU4eA!+hY7S<(`FTqABX-{FrN#& z!XU3O*ejgl6^3|)pxu-xBksBK*8X5_H>1w-10P-#SNEmWg)Ig$v;yR=Tmh885i;mTShs{4xzZjc8K zq9%?jv$l*sJ)x9fh?L0{n1>ab%2RxIwK`niSX-{aUM+9+(81rQ(AtNRA^a zmtm@6`M|*NcPP9e8ld`Ctqjr6rIkw?z>N;fcNdo0@|tSaE?u?)8CJOvKXOs7xiMx` z@Woj9tqM*-HCOQDaXI=aKRcn7)>W6o@1>=Sk;+S|YickaT;AODQa!6`$Sc?Km*Oe? z()@<1`NgXmit3jw%r9+dsBCChig6tH|7cYT)Qu}fLmrj~nc*yA?gExBZN#194&WfL zi7PH$U=_viTr2Jsm5R_V96R>BoW8Tl8f(LivYzG^G%B)S&A@?q0|xh#YJTjK!W&-t z75KF6DxaPeu&itGv0Go%WvdqVtKiz`1Yff;J>DL(!ECaO>9Ko9KRkAm0xs&AX0ig!^PFI-f8O2OxV z-XlG2yk4KibqMbSckIW3-}@?X8^6*W?xdUfR0m$~IjALBku-P$HU)}1Hj61|g%F|RY}PC9pDP$BbgH~qo)6(2^q zO`qq_<(=eJ|Gosj_t37(KQ7*$?)H!4lZbKf9u;=mFO0V@blYj7;|nR(_Oi6ETH6Q| zI{&gSX zqt82y9(5Xhq0qEJ{nJis_x`TQYTDyR{R=R@T-TBjuS%fzV*65D+tGeEknIg#BarP^ zokpua4oDr_x8U;DI?DeVw6~U#z5}$kW|6)J^ln+7Nbdmcy{PXmxV9rHMg!Tt$7=+# z{iW0BcR+jV68R5<_SPNJ$3c5*3+b;wdus{lA3%FA>i-#+w^p!S?Om8x{E9hgKC0ur z$j_fM^5#C<`6CA2i|zdJHg7JnJ@>Tsb3l7@kL|D>*-drylp|={FNbMz{AC5-o_KGt)SCtO z$SH3b)XdhC@P$dl)kwy-NQqcnIA06|dl68_Jm7pVFxXMj;D11H7waMStk6CT4dt?c z zU4RC@3VOcK7YIFH=v74cvxfEXXAcqf`FmFMhhJk-{RfioQqth#&vKA&9T5*y+zq6? z`-!+77J3)Zz+(HH)E^{`XZZMJDfy3*hMp6o5ucw)L!XVkg!bcrtWOe57wjt7Q?Q?4 zzMy*i*@rJmgEqQheUtiYNkcFHC{4Y02=bv)`tdRmasPmbaXCf=Kc0P1{o*s9?0;|4 zkmp06l&dGgZ$3{+x&L81`nR1l#^*kvA0&kBO{lgkYJs}|V%ppQgDG_$pupKes zV~4aG6}m;}KNEZ7xe=*)v_2}rwq&WLt*3%yV1Err@7{DD($3B7~&~$7>NPUG||8%SYJ&4c=QN=e*@O;6^ zf<=P!1j_`&f@=jg2|gmYNARfNcY-$8G58fLm?qdmkWav}{X9Xgm!#JSZWG)g$R8_Z z`#!<<1wRvX&{wvrbrYB?^i08j2!1XYgZPp^M{t?y*gH$GP;iXk1i@*7GX*aZ*qaQg`O=K7QBXtb#H^vw+TKW_?F=3 zf_x&DdXokF2o4pTC^$!Or68Zjq}*=>9~OL8@MFPN!C0(GTz4{vkn1bR$5L58OXvkc zFB5u=;0;oLpU}I6eqQKTh*-P-A^5h`ew@zxZV(ap9uaVM6`2%V>_QLC7vLnoo&QKK|XNGx-*I3=_fdl2)?0$lcj#T;7qCK z&nA&?p3DzMVopPK4d31@}rl_iNVkmy(G868u=uf(_RD z1mlU&njTd`R%`f^QOG_e&!B{jK0hX*Y4UWqpibs$hoT8ARys zEA-idd^VVR&l4OgI7M(a5ptIb-9Ut$m4eNJ5y9I8w+h}tg#JGY{z>pj!RLw4|BBF` z3w?qJJ3k5PIBSwGj)?l8U{}HJf&&Bx3l1Z~{usf@f-?o@304VSDcDSez3YVDNrc@$ z2|g+HdjwyX`a^;r2!15^x!~7=KM>&;KiDDq1w(?_f@ccm6XDMgp{En!PqE+v!3x28 z!4-m=1UC!*iU_;g1b;91kl+(U*xM)cKZ&sSFTpPazY)}Nz-PNHm@Jqk*h{dlU;z>K zhX_uS`Wb?k3eFd-AcB9X;0nR31tWr61pi0yF2VZ+cM;LAj|8)DR-xWJBK#jHI9za~ z-~_=bg7b-xs~}>12}}Lug4YN(3tmSA-%Uc_D!5(nF2VZ+9};|&2s_URz99ID;M;;9 z3Vts5lVA|AV76e6U_ZfJ!GT2B8!k9baE4&DV7=g4!JCM%bF1JVrGBU2Ua8+N zcu??l!S@6|5d4@3KfVw=A*ka$ChOw_Qv`bmo{#L=Q(tfw#1A>nUJ}>wI5qduo{9N#B!Bc{*g6Vi;%zkAH<`N-aAb6hO`GOY; zP8OUgSRz;|SSeU5STA^`;MIcbiLk$2@DG9y3+@qomk7TO3my~vx8V1JKME$}GYslY zCnBCbh>-6sm@ha;uuyQ6;6%Zxf-{KFbE(kt1s4g{2sR3?5?n)sAHNa2Q*ejiBZ5y0 zz9e{z2!H=A__fsY4=k!*M6_oK_7dzXIEqMr1uLX}k>GN{M!^k4_!$-4CiQm;?ht%X z@DU>TpAmdP@D;c#5j57@0*5U`N+`nZ|t_NwHz0MXa5F8>nTyT`&c)>}6(*`xZcG@ zUI~9~$Wvbx$x~mZ$}7XaKgg?JMuOZ0c?F%x!5|@0QCZfwaDH`d)iO=WrDgb=%8HJy z_yG#G+Gi)C34Q3Y>Ias^Hhnjt?8%_0tsaHXx>%5x*LE*xugs=%M&mPoDw3Dib|>hL zcKL_n7SypHObIW3e?plu190*6(p20|iyzxL=AHO3khh}Fd$EnzOM;%h%3^ozJe}`N z;q&S@gRkR@y7)Sdi)Ah)eBDfabY5Ow@e|M;``gl>X%C`~{lyWyt-l?0p<3I0v8Mk1 q-UVf(m*PtVQkOS3P}FiR)wByer$Bo}%5>x#6~>Q`Q9xcE-~R!wL^rem diff --git a/gensyscalls.pl b/gensyscalls.pl index fa040a1..54c8ce0 100644 --- a/gensyscalls.pl +++ b/gensyscalls.pl @@ -37,7 +37,9 @@ my @syscalls = ( "close", "getch", "greeting", - "shutdown" + "shutdown", + "screen", + "cls" ); my $i; diff --git a/grep.asm b/grep.asm deleted file mode 100644 index f27bab9..0000000 --- a/grep.asm +++ /dev/null @@ -1,1583 +0,0 @@ - -_grep: file format elf32-i386 - - -Disassembly of section .text: - -00000000
    : - memmove(buf, p, m); - } - } -} - -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 push -0x4(%ecx) - a: 55 push %ebp - b: 89 e5 mov %esp,%ebp - d: 57 push %edi - e: 56 push %esi - f: 53 push %ebx - 10: 51 push %ecx - 11: 83 ec 18 sub $0x18,%esp - 14: 8b 01 mov (%ecx),%eax - 16: 8b 59 04 mov 0x4(%ecx),%ebx - 19: 89 45 e4 mov %eax,-0x1c(%ebp) - int fd, i; - char *pattern; - - if (argc <= 1) { - 1c: 83 f8 01 cmp $0x1,%eax - 1f: 7e 6f jle 90 - printf(2, "usage: grep pattern [file ...]\n"); - exit(); - } - pattern = argv[1]; - 21: 8b 43 04 mov 0x4(%ebx),%eax - 24: 83 c3 08 add $0x8,%ebx - - if (argc <= 2) { - 27: 83 7d e4 02 cmpl $0x2,-0x1c(%ebp) - grep(pattern, 0); - exit(); - } - - for (i = 2; i < argc; i++) { - 2b: be 02 00 00 00 mov $0x2,%esi - pattern = argv[1]; - 30: 89 45 e0 mov %eax,-0x20(%ebp) - if (argc <= 2) { - 33: 75 2d jne 62 - 35: eb 6c jmp a3 - 37: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 3e: 66 90 xchg %ax,%ax - if ((fd = open(argv[i], 0)) < 0) { - printf(1, "grep: cannot open %s\n", argv[i]); - exit(); - } - grep(pattern, fd); - 40: 83 ec 08 sub $0x8,%esp - for (i = 2; i < argc; i++) { - 43: 83 c6 01 add $0x1,%esi - 46: 83 c3 04 add $0x4,%ebx - grep(pattern, fd); - 49: 50 push %eax - 4a: ff 75 e0 push -0x20(%ebp) - 4d: e8 7e 01 00 00 call 1d0 - close(fd); - 52: 89 3c 24 mov %edi,(%esp) - 55: e8 01 06 00 00 call 65b - for (i = 2; i < argc; i++) { - 5a: 83 c4 10 add $0x10,%esp - 5d: 39 75 e4 cmp %esi,-0x1c(%ebp) - 60: 7e 29 jle 8b - if ((fd = open(argv[i], 0)) < 0) { - 62: 83 ec 08 sub $0x8,%esp - 65: 6a 00 push $0x0 - 67: ff 33 push (%ebx) - 69: e8 bd 05 00 00 call 62b - 6e: 83 c4 10 add $0x10,%esp - 71: 89 c7 mov %eax,%edi - 73: 85 c0 test %eax,%eax - 75: 79 c9 jns 40 - printf(1, "grep: cannot open %s\n", argv[i]); - 77: 50 push %eax - 78: ff 33 push (%ebx) - 7a: 68 78 0a 00 00 push $0xa78 - 7f: 6a 01 push $0x1 - 81: e8 aa 06 00 00 call 730 - exit(); - 86: e8 38 05 00 00 call 5c3 - } - exit(); - 8b: e8 33 05 00 00 call 5c3 - printf(2, "usage: grep pattern [file ...]\n"); - 90: 51 push %ecx - 91: 51 push %ecx - 92: 68 58 0a 00 00 push $0xa58 - 97: 6a 02 push $0x2 - 99: e8 92 06 00 00 call 730 - exit(); - 9e: e8 20 05 00 00 call 5c3 - grep(pattern, 0); - a3: 52 push %edx - a4: 52 push %edx - a5: 6a 00 push $0x0 - a7: 50 push %eax - a8: e8 23 01 00 00 call 1d0 - exit(); - ad: e8 11 05 00 00 call 5c3 - b2: 66 90 xchg %ax,%ax - b4: 66 90 xchg %ax,%ax - b6: 66 90 xchg %ax,%ax - b8: 66 90 xchg %ax,%ax - ba: 66 90 xchg %ax,%ax - bc: 66 90 xchg %ax,%ax - be: 66 90 xchg %ax,%ax - -000000c0 : - while (*text++ != '\0'); - return 0; -} - -// matchhere: search for re at beginning of text -int matchhere(char *re, char *text){ - c0: 55 push %ebp - c1: 89 e5 mov %esp,%ebp - c3: 57 push %edi - c4: 56 push %esi - c5: 53 push %ebx - c6: 83 ec 0c sub $0xc,%esp - c9: 8b 75 08 mov 0x8(%ebp),%esi - cc: 8b 7d 0c mov 0xc(%ebp),%edi - if (re[0] == '\0') { - cf: 0f b6 06 movzbl (%esi),%eax - d2: 84 c0 test %al,%al - d4: 75 2d jne 103 - d6: e9 7d 00 00 00 jmp 158 - db: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - df: 90 nop - } - if (re[1] == '*') { - return matchstar(re[0], re + 2, text); - } - if (re[0] == '$' && re[1] == '\0') { - return *text == '\0'; - e0: 0f b6 0f movzbl (%edi),%ecx - if (re[0] == '$' && re[1] == '\0') { - e3: 80 fb 24 cmp $0x24,%bl - e6: 75 04 jne ec - e8: 84 c0 test %al,%al - ea: 74 79 je 165 - } - if (*text != '\0' && (re[0] == '.' || re[0] == *text)) { - ec: 84 c9 test %cl,%cl - ee: 74 58 je 148 - f0: 38 d9 cmp %bl,%cl - f2: 74 05 je f9 - f4: 80 fb 2e cmp $0x2e,%bl - f7: 75 4f jne 148 - return matchhere(re + 1, text + 1); - f9: 83 c7 01 add $0x1,%edi - fc: 83 c6 01 add $0x1,%esi - if (re[0] == '\0') { - ff: 84 c0 test %al,%al - 101: 74 55 je 158 - if (re[1] == '*') { - 103: 0f be d8 movsbl %al,%ebx - 106: 0f b6 46 01 movzbl 0x1(%esi),%eax - 10a: 3c 2a cmp $0x2a,%al - 10c: 75 d2 jne e0 - return matchstar(re[0], re + 2, text); - 10e: 83 c6 02 add $0x2,%esi - } - return 0; -} - -// matchstar: search for c*re at beginning of text -int matchstar(int c, char *re, char *text) { - 111: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - do { // a * matches zero or more instances - if (matchhere(re, text)) { - 118: 83 ec 08 sub $0x8,%esp - 11b: 57 push %edi - 11c: 56 push %esi - 11d: e8 9e ff ff ff call c0 - 122: 83 c4 10 add $0x10,%esp - 125: 85 c0 test %eax,%eax - 127: 75 2f jne 158 - return 1; - } - } - while (*text != '\0' && (*text++ == c || c == '.')); - 129: 0f be 17 movsbl (%edi),%edx - 12c: 84 d2 test %dl,%dl - 12e: 74 0c je 13c - 130: 83 c7 01 add $0x1,%edi - 133: 83 fb 2e cmp $0x2e,%ebx - 136: 74 e0 je 118 - 138: 39 da cmp %ebx,%edx - 13a: 74 dc je 118 -} - 13c: 8d 65 f4 lea -0xc(%ebp),%esp - 13f: 5b pop %ebx - 140: 5e pop %esi - 141: 5f pop %edi - 142: 5d pop %ebp - 143: c3 ret - 144: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 148: 8d 65 f4 lea -0xc(%ebp),%esp - return 0; - 14b: 31 c0 xor %eax,%eax -} - 14d: 5b pop %ebx - 14e: 5e pop %esi - 14f: 5f pop %edi - 150: 5d pop %ebp - 151: c3 ret - 152: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - 158: 8d 65 f4 lea -0xc(%ebp),%esp - return 1; - 15b: b8 01 00 00 00 mov $0x1,%eax -} - 160: 5b pop %ebx - 161: 5e pop %esi - 162: 5f pop %edi - 163: 5d pop %ebp - 164: c3 ret - return *text == '\0'; - 165: 31 c0 xor %eax,%eax - 167: 84 c9 test %cl,%cl - 169: 0f 94 c0 sete %al - 16c: eb ce jmp 13c - 16e: 66 90 xchg %ax,%ax - -00000170 : -int match(char *re, char *text) { - 170: 55 push %ebp - 171: 89 e5 mov %esp,%ebp - 173: 56 push %esi - 174: 53 push %ebx - 175: 8b 5d 08 mov 0x8(%ebp),%ebx - 178: 8b 75 0c mov 0xc(%ebp),%esi - if (re[0] == '^') { - 17b: 80 3b 5e cmpb $0x5e,(%ebx) - 17e: 75 11 jne 191 - 180: eb 2e jmp 1b0 - 182: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - while (*text++ != '\0'); - 188: 83 c6 01 add $0x1,%esi - 18b: 80 7e ff 00 cmpb $0x0,-0x1(%esi) - 18f: 74 16 je 1a7 - if (matchhere(re, text)) { - 191: 83 ec 08 sub $0x8,%esp - 194: 56 push %esi - 195: 53 push %ebx - 196: e8 25 ff ff ff call c0 - 19b: 83 c4 10 add $0x10,%esp - 19e: 85 c0 test %eax,%eax - 1a0: 74 e6 je 188 - return 1; - 1a2: b8 01 00 00 00 mov $0x1,%eax -} - 1a7: 8d 65 f8 lea -0x8(%ebp),%esp - 1aa: 5b pop %ebx - 1ab: 5e pop %esi - 1ac: 5d pop %ebp - 1ad: c3 ret - 1ae: 66 90 xchg %ax,%ax - return matchhere(re + 1, text); - 1b0: 83 c3 01 add $0x1,%ebx - 1b3: 89 5d 08 mov %ebx,0x8(%ebp) -} - 1b6: 8d 65 f8 lea -0x8(%ebp),%esp - 1b9: 5b pop %ebx - 1ba: 5e pop %esi - 1bb: 5d pop %ebp - return matchhere(re + 1, text); - 1bc: e9 ff fe ff ff jmp c0 - 1c1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 1c8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 1cf: 90 nop - -000001d0 : -void grep(char *pattern, int fd) { - 1d0: 55 push %ebp - 1d1: 89 e5 mov %esp,%ebp - 1d3: 57 push %edi - 1d4: 56 push %esi - 1d5: 53 push %ebx - 1d6: 83 ec 1c sub $0x1c,%esp - 1d9: 8b 7d 08 mov 0x8(%ebp),%edi - m = 0; - 1dc: c7 45 dc 00 00 00 00 movl $0x0,-0x24(%ebp) - return matchhere(re + 1, text); - 1e3: 8d 47 01 lea 0x1(%edi),%eax - 1e6: 89 45 d8 mov %eax,-0x28(%ebp) - 1e9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - while ((n = read(fd, buf + m, sizeof(buf) - m - 1)) > 0) { - 1f0: 8b 4d dc mov -0x24(%ebp),%ecx - 1f3: b8 ff 03 00 00 mov $0x3ff,%eax - 1f8: 83 ec 04 sub $0x4,%esp - 1fb: 29 c8 sub %ecx,%eax - 1fd: 50 push %eax - 1fe: 8d 81 a0 0e 00 00 lea 0xea0(%ecx),%eax - 204: 50 push %eax - 205: ff 75 0c push 0xc(%ebp) - 208: e8 ce 03 00 00 call 5db - 20d: 83 c4 10 add $0x10,%esp - 210: 85 c0 test %eax,%eax - 212: 0f 8e e5 00 00 00 jle 2fd - m += n; - 218: 01 45 dc add %eax,-0x24(%ebp) - 21b: 8b 4d dc mov -0x24(%ebp),%ecx - p = buf; - 21e: c7 45 e4 a0 0e 00 00 movl $0xea0,-0x1c(%ebp) - buf[m] = '\0'; - 225: c6 81 a0 0e 00 00 00 movb $0x0,0xea0(%ecx) - while ((q = strchr(p, '\n')) != 0) { - 22c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 230: 83 ec 08 sub $0x8,%esp - 233: 6a 0a push $0xa - 235: ff 75 e4 push -0x1c(%ebp) - 238: e8 13 02 00 00 call 450 - 23d: 83 c4 10 add $0x10,%esp - 240: 89 c3 mov %eax,%ebx - 242: 85 c0 test %eax,%eax - 244: 74 72 je 2b8 - *q = 0; - 246: c6 03 00 movb $0x0,(%ebx) - write(1, p, q + 1 - p); - 249: 8d 43 01 lea 0x1(%ebx),%eax - if (re[0] == '^') { - 24c: 80 3f 5e cmpb $0x5e,(%edi) - write(1, p, q + 1 - p); - 24f: 89 45 e0 mov %eax,-0x20(%ebp) - 252: 8b 75 e4 mov -0x1c(%ebp),%esi - if (re[0] == '^') { - 255: 75 12 jne 269 - 257: eb 47 jmp 2a0 - 259: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - while (*text++ != '\0'); - 260: 83 c6 01 add $0x1,%esi - 263: 80 7e ff 00 cmpb $0x0,-0x1(%esi) - 267: 74 2b je 294 - if (matchhere(re, text)) { - 269: 83 ec 08 sub $0x8,%esp - 26c: 56 push %esi - 26d: 57 push %edi - 26e: e8 4d fe ff ff call c0 - 273: 83 c4 10 add $0x10,%esp - 276: 85 c0 test %eax,%eax - 278: 74 e6 je 260 - write(1, p, q + 1 - p); - 27a: 8b 55 e4 mov -0x1c(%ebp),%edx - 27d: 8b 45 e0 mov -0x20(%ebp),%eax - 280: 83 ec 04 sub $0x4,%esp - *q = '\n'; - 283: c6 03 0a movb $0xa,(%ebx) - write(1, p, q + 1 - p); - 286: 29 d0 sub %edx,%eax - 288: 50 push %eax - 289: 52 push %edx - 28a: 6a 01 push $0x1 - 28c: e8 a2 03 00 00 call 633 - 291: 83 c4 10 add $0x10,%esp - p = q + 1; - 294: 8b 45 e0 mov -0x20(%ebp),%eax - 297: 89 45 e4 mov %eax,-0x1c(%ebp) - 29a: eb 94 jmp 230 - 29c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - return matchhere(re + 1, text); - 2a0: 83 ec 08 sub $0x8,%esp - 2a3: 56 push %esi - 2a4: ff 75 d8 push -0x28(%ebp) - 2a7: e8 14 fe ff ff call c0 - 2ac: 83 c4 10 add $0x10,%esp - if (match(pattern, p)) { - 2af: 85 c0 test %eax,%eax - 2b1: 74 e1 je 294 - 2b3: eb c5 jmp 27a - 2b5: 8d 76 00 lea 0x0(%esi),%esi - if (p == buf) { - 2b8: 8b 55 e4 mov -0x1c(%ebp),%edx - 2bb: 81 fa a0 0e 00 00 cmp $0xea0,%edx - 2c1: 74 2e je 2f1 - if (m > 0) { - 2c3: 8b 4d dc mov -0x24(%ebp),%ecx - 2c6: 85 c9 test %ecx,%ecx - 2c8: 0f 8e 22 ff ff ff jle 1f0 - m -= p - buf; - 2ce: 89 d0 mov %edx,%eax - memmove(buf, p, m); - 2d0: 83 ec 04 sub $0x4,%esp - m -= p - buf; - 2d3: 2d a0 0e 00 00 sub $0xea0,%eax - 2d8: 29 c1 sub %eax,%ecx - memmove(buf, p, m); - 2da: 51 push %ecx - 2db: 52 push %edx - 2dc: 68 a0 0e 00 00 push $0xea0 - m -= p - buf; - 2e1: 89 4d dc mov %ecx,-0x24(%ebp) - memmove(buf, p, m); - 2e4: e8 a7 02 00 00 call 590 - 2e9: 83 c4 10 add $0x10,%esp - 2ec: e9 ff fe ff ff jmp 1f0 - m = 0; - 2f1: c7 45 dc 00 00 00 00 movl $0x0,-0x24(%ebp) - 2f8: e9 f3 fe ff ff jmp 1f0 -} - 2fd: 8d 65 f4 lea -0xc(%ebp),%esp - 300: 5b pop %ebx - 301: 5e pop %esi - 302: 5f pop %edi - 303: 5d pop %ebp - 304: c3 ret - 305: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 30c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000310 : -int matchstar(int c, char *re, char *text) { - 310: 55 push %ebp - 311: 89 e5 mov %esp,%ebp - 313: 57 push %edi - 314: 56 push %esi - 315: 53 push %ebx - 316: 83 ec 0c sub $0xc,%esp - 319: 8b 5d 08 mov 0x8(%ebp),%ebx - 31c: 8b 75 0c mov 0xc(%ebp),%esi - 31f: 8b 7d 10 mov 0x10(%ebp),%edi - 322: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - if (matchhere(re, text)) { - 328: 83 ec 08 sub $0x8,%esp - 32b: 57 push %edi - 32c: 56 push %esi - 32d: e8 8e fd ff ff call c0 - 332: 83 c4 10 add $0x10,%esp - 335: 85 c0 test %eax,%eax - 337: 75 1f jne 358 - while (*text != '\0' && (*text++ == c || c == '.')); - 339: 0f be 17 movsbl (%edi),%edx - 33c: 84 d2 test %dl,%dl - 33e: 74 0c je 34c - 340: 83 c7 01 add $0x1,%edi - 343: 39 da cmp %ebx,%edx - 345: 74 e1 je 328 - 347: 83 fb 2e cmp $0x2e,%ebx - 34a: 74 dc je 328 -} - 34c: 8d 65 f4 lea -0xc(%ebp),%esp - 34f: 5b pop %ebx - 350: 5e pop %esi - 351: 5f pop %edi - 352: 5d pop %ebp - 353: c3 ret - 354: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 358: 8d 65 f4 lea -0xc(%ebp),%esp - return 1; - 35b: b8 01 00 00 00 mov $0x1,%eax -} - 360: 5b pop %ebx - 361: 5e pop %esi - 362: 5f pop %edi - 363: 5d pop %ebp - 364: c3 ret - 365: 66 90 xchg %ax,%ax - 367: 66 90 xchg %ax,%ax - 369: 66 90 xchg %ax,%ax - 36b: 66 90 xchg %ax,%ax - 36d: 66 90 xchg %ax,%ax - 36f: 90 nop - -00000370 : -#include "stat.h" -#include "fcntl.h" -#include "user.h" -#include "x86.h" - -char*strcpy(char *s, const char *t) { - 370: 55 push %ebp - char *os; - - os = s; - while ((*s++ = *t++) != 0) { - 371: 31 c0 xor %eax,%eax -char*strcpy(char *s, const char *t) { - 373: 89 e5 mov %esp,%ebp - 375: 53 push %ebx - 376: 8b 4d 08 mov 0x8(%ebp),%ecx - 379: 8b 5d 0c mov 0xc(%ebp),%ebx - 37c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - while ((*s++ = *t++) != 0) { - 380: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 384: 88 14 01 mov %dl,(%ecx,%eax,1) - 387: 83 c0 01 add $0x1,%eax - 38a: 84 d2 test %dl,%dl - 38c: 75 f2 jne 380 - ; - } - return os; -} - 38e: 8b 5d fc mov -0x4(%ebp),%ebx - 391: 89 c8 mov %ecx,%eax - 393: c9 leave - 394: c3 ret - 395: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 39c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -000003a0 : - -int strcmp(const char *p, const char *q) { - 3a0: 55 push %ebp - 3a1: 89 e5 mov %esp,%ebp - 3a3: 53 push %ebx - 3a4: 8b 55 08 mov 0x8(%ebp),%edx - 3a7: 8b 4d 0c mov 0xc(%ebp),%ecx - while (*p && *p == *q) { - 3aa: 0f b6 02 movzbl (%edx),%eax - 3ad: 84 c0 test %al,%al - 3af: 75 17 jne 3c8 - 3b1: eb 3a jmp 3ed - 3b3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 3b7: 90 nop - 3b8: 0f b6 42 01 movzbl 0x1(%edx),%eax - p++, q++; - 3bc: 83 c2 01 add $0x1,%edx - 3bf: 8d 59 01 lea 0x1(%ecx),%ebx - while (*p && *p == *q) { - 3c2: 84 c0 test %al,%al - 3c4: 74 1a je 3e0 - p++, q++; - 3c6: 89 d9 mov %ebx,%ecx - while (*p && *p == *q) { - 3c8: 0f b6 19 movzbl (%ecx),%ebx - 3cb: 38 c3 cmp %al,%bl - 3cd: 74 e9 je 3b8 - } - return (uchar) * p - (uchar) * q; - 3cf: 29 d8 sub %ebx,%eax -} - 3d1: 8b 5d fc mov -0x4(%ebp),%ebx - 3d4: c9 leave - 3d5: c3 ret - 3d6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 3dd: 8d 76 00 lea 0x0(%esi),%esi - return (uchar) * p - (uchar) * q; - 3e0: 0f b6 59 01 movzbl 0x1(%ecx),%ebx - 3e4: 31 c0 xor %eax,%eax - 3e6: 29 d8 sub %ebx,%eax -} - 3e8: 8b 5d fc mov -0x4(%ebp),%ebx - 3eb: c9 leave - 3ec: c3 ret - return (uchar) * p - (uchar) * q; - 3ed: 0f b6 19 movzbl (%ecx),%ebx - 3f0: 31 c0 xor %eax,%eax - 3f2: eb db jmp 3cf - 3f4: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 3fb: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 3ff: 90 nop - -00000400 : - -uint strlen(const char *s) { - 400: 55 push %ebp - 401: 89 e5 mov %esp,%ebp - 403: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - for (n = 0; s[n]; n++) { - 406: 80 3a 00 cmpb $0x0,(%edx) - 409: 74 15 je 420 - 40b: 31 c0 xor %eax,%eax - 40d: 8d 76 00 lea 0x0(%esi),%esi - 410: 83 c0 01 add $0x1,%eax - 413: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - 417: 89 c1 mov %eax,%ecx - 419: 75 f5 jne 410 - ; - } - return n; -} - 41b: 89 c8 mov %ecx,%eax - 41d: 5d pop %ebp - 41e: c3 ret - 41f: 90 nop - for (n = 0; s[n]; n++) { - 420: 31 c9 xor %ecx,%ecx -} - 422: 5d pop %ebp - 423: 89 c8 mov %ecx,%eax - 425: c3 ret - 426: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 42d: 8d 76 00 lea 0x0(%esi),%esi - -00000430 : - -void* memset(void *dst, int c, uint n) { - 430: 55 push %ebp - 431: 89 e5 mov %esp,%ebp - 433: 57 push %edi - 434: 8b 55 08 mov 0x8(%ebp),%edx - "d" (port), "0" (addr), "1" (cnt) : - "cc"); -} - -static inline void stosb(void *addr, int data, int cnt) { - asm volatile ("cld; rep stosb" : - 437: 8b 4d 10 mov 0x10(%ebp),%ecx - 43a: 8b 45 0c mov 0xc(%ebp),%eax - 43d: 89 d7 mov %edx,%edi - 43f: fc cld - 440: f3 aa rep stos %al,%es:(%edi) - stosb(dst, c, n); - return dst; -} - 442: 8b 7d fc mov -0x4(%ebp),%edi - 445: 89 d0 mov %edx,%eax - 447: c9 leave - 448: c3 ret - 449: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -00000450 : - -char* strchr(const char *s, char c) { - 450: 55 push %ebp - 451: 89 e5 mov %esp,%ebp - 453: 8b 45 08 mov 0x8(%ebp),%eax - 456: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx - for (; *s; s++) { - 45a: 0f b6 10 movzbl (%eax),%edx - 45d: 84 d2 test %dl,%dl - 45f: 75 12 jne 473 - 461: eb 1d jmp 480 - 463: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 467: 90 nop - 468: 0f b6 50 01 movzbl 0x1(%eax),%edx - 46c: 83 c0 01 add $0x1,%eax - 46f: 84 d2 test %dl,%dl - 471: 74 0d je 480 - if (*s == c) { - 473: 38 d1 cmp %dl,%cl - 475: 75 f1 jne 468 - return (char*)s; - } - } - return 0; -} - 477: 5d pop %ebp - 478: c3 ret - 479: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - return 0; - 480: 31 c0 xor %eax,%eax -} - 482: 5d pop %ebp - 483: c3 ret - 484: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 48b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 48f: 90 nop - -00000490 : - -char* gets(char *buf, int max) { - 490: 55 push %ebp - 491: 89 e5 mov %esp,%ebp - 493: 57 push %edi - 494: 56 push %esi - int i, cc; - char c; - - for (i = 0; i + 1 < max;) { - cc = read(0, &c, 1); - 495: 8d 7d e7 lea -0x19(%ebp),%edi -char* gets(char *buf, int max) { - 498: 53 push %ebx - for (i = 0; i + 1 < max;) { - 499: 31 db xor %ebx,%ebx -char* gets(char *buf, int max) { - 49b: 83 ec 1c sub $0x1c,%esp - for (i = 0; i + 1 < max;) { - 49e: eb 27 jmp 4c7 - cc = read(0, &c, 1); - 4a0: 83 ec 04 sub $0x4,%esp - 4a3: 6a 01 push $0x1 - 4a5: 57 push %edi - 4a6: 6a 00 push $0x0 - 4a8: e8 2e 01 00 00 call 5db - if (cc < 1) { - 4ad: 83 c4 10 add $0x10,%esp - 4b0: 85 c0 test %eax,%eax - 4b2: 7e 1d jle 4d1 - break; - } - buf[i++] = c; - 4b4: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 4b8: 8b 55 08 mov 0x8(%ebp),%edx - 4bb: 88 44 1a ff mov %al,-0x1(%edx,%ebx,1) - if (c == '\n' || c == '\r') { - 4bf: 3c 0a cmp $0xa,%al - 4c1: 74 1d je 4e0 - 4c3: 3c 0d cmp $0xd,%al - 4c5: 74 19 je 4e0 - for (i = 0; i + 1 < max;) { - 4c7: 89 de mov %ebx,%esi - 4c9: 83 c3 01 add $0x1,%ebx - 4cc: 3b 5d 0c cmp 0xc(%ebp),%ebx - 4cf: 7c cf jl 4a0 - break; - } - } - buf[i] = '\0'; - 4d1: 8b 45 08 mov 0x8(%ebp),%eax - 4d4: c6 04 30 00 movb $0x0,(%eax,%esi,1) - return buf; -} - 4d8: 8d 65 f4 lea -0xc(%ebp),%esp - 4db: 5b pop %ebx - 4dc: 5e pop %esi - 4dd: 5f pop %edi - 4de: 5d pop %ebp - 4df: c3 ret - buf[i] = '\0'; - 4e0: 8b 45 08 mov 0x8(%ebp),%eax - 4e3: 89 de mov %ebx,%esi - 4e5: c6 04 30 00 movb $0x0,(%eax,%esi,1) -} - 4e9: 8d 65 f4 lea -0xc(%ebp),%esp - 4ec: 5b pop %ebx - 4ed: 5e pop %esi - 4ee: 5f pop %edi - 4ef: 5d pop %ebp - 4f0: c3 ret - 4f1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 4f8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 4ff: 90 nop - -00000500 : - -int stat(const char *n, struct stat *st) { - 500: 55 push %ebp - 501: 89 e5 mov %esp,%ebp - 503: 56 push %esi - 504: 53 push %ebx - int fd; - int r; - - fd = open(n, O_RDONLY); - 505: 83 ec 08 sub $0x8,%esp - 508: 6a 00 push $0x0 - 50a: ff 75 08 push 0x8(%ebp) - 50d: e8 19 01 00 00 call 62b - if (fd < 0) { - 512: 83 c4 10 add $0x10,%esp - 515: 85 c0 test %eax,%eax - 517: 78 27 js 540 - return -1; - } - r = fstat(fd, st); - 519: 83 ec 08 sub $0x8,%esp - 51c: ff 75 0c push 0xc(%ebp) - 51f: 89 c3 mov %eax,%ebx - 521: 50 push %eax - 522: e8 cc 00 00 00 call 5f3 - close(fd); - 527: 89 1c 24 mov %ebx,(%esp) - r = fstat(fd, st); - 52a: 89 c6 mov %eax,%esi - close(fd); - 52c: e8 2a 01 00 00 call 65b - return r; - 531: 83 c4 10 add $0x10,%esp -} - 534: 8d 65 f8 lea -0x8(%ebp),%esp - 537: 89 f0 mov %esi,%eax - 539: 5b pop %ebx - 53a: 5e pop %esi - 53b: 5d pop %ebp - 53c: c3 ret - 53d: 8d 76 00 lea 0x0(%esi),%esi - return -1; - 540: be ff ff ff ff mov $0xffffffff,%esi - 545: eb ed jmp 534 - 547: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 54e: 66 90 xchg %ax,%ax - -00000550 : - -int atoi(const char *s) { - 550: 55 push %ebp - 551: 89 e5 mov %esp,%ebp - 553: 53 push %ebx - 554: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - n = 0; - while ('0' <= *s && *s <= '9') { - 557: 0f be 02 movsbl (%edx),%eax - 55a: 8d 48 d0 lea -0x30(%eax),%ecx - 55d: 80 f9 09 cmp $0x9,%cl - n = 0; - 560: b9 00 00 00 00 mov $0x0,%ecx - while ('0' <= *s && *s <= '9') { - 565: 77 1e ja 585 - 567: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 56e: 66 90 xchg %ax,%ax - n = n * 10 + *s++ - '0'; - 570: 83 c2 01 add $0x1,%edx - 573: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 576: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx - while ('0' <= *s && *s <= '9') { - 57a: 0f be 02 movsbl (%edx),%eax - 57d: 8d 58 d0 lea -0x30(%eax),%ebx - 580: 80 fb 09 cmp $0x9,%bl - 583: 76 eb jbe 570 - } - return n; -} - 585: 8b 5d fc mov -0x4(%ebp),%ebx - 588: 89 c8 mov %ecx,%eax - 58a: c9 leave - 58b: c3 ret - 58c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000590 : - -void* memmove(void *vdst, const void *vsrc, int n) { - 590: 55 push %ebp - 591: 89 e5 mov %esp,%ebp - 593: 57 push %edi - 594: 8b 45 10 mov 0x10(%ebp),%eax - 597: 8b 55 08 mov 0x8(%ebp),%edx - 59a: 56 push %esi - 59b: 8b 75 0c mov 0xc(%ebp),%esi - char *dst; - const char *src; - - dst = vdst; - src = vsrc; - while (n-- > 0) { - 59e: 85 c0 test %eax,%eax - 5a0: 7e 13 jle 5b5 - 5a2: 01 d0 add %edx,%eax - dst = vdst; - 5a4: 89 d7 mov %edx,%edi - 5a6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 5ad: 8d 76 00 lea 0x0(%esi),%esi - *dst++ = *src++; - 5b0: a4 movsb %ds:(%esi),%es:(%edi) - while (n-- > 0) { - 5b1: 39 f8 cmp %edi,%eax - 5b3: 75 fb jne 5b0 - } - return vdst; -} - 5b5: 5e pop %esi - 5b6: 89 d0 mov %edx,%eax - 5b8: 5f pop %edi - 5b9: 5d pop %ebp - 5ba: c3 ret - -000005bb : -name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 5bb: b8 01 00 00 00 mov $0x1,%eax - 5c0: cd 40 int $0x40 - 5c2: c3 ret - -000005c3 : -SYSCALL(exit) - 5c3: b8 02 00 00 00 mov $0x2,%eax - 5c8: cd 40 int $0x40 - 5ca: c3 ret - -000005cb : -SYSCALL(wait) - 5cb: b8 03 00 00 00 mov $0x3,%eax - 5d0: cd 40 int $0x40 - 5d2: c3 ret - -000005d3 : -SYSCALL(pipe) - 5d3: b8 04 00 00 00 mov $0x4,%eax - 5d8: cd 40 int $0x40 - 5da: c3 ret - -000005db : -SYSCALL(read) - 5db: b8 05 00 00 00 mov $0x5,%eax - 5e0: cd 40 int $0x40 - 5e2: c3 ret - -000005e3 : -SYSCALL(kill) - 5e3: b8 06 00 00 00 mov $0x6,%eax - 5e8: cd 40 int $0x40 - 5ea: c3 ret - -000005eb : -SYSCALL(exec) - 5eb: b8 07 00 00 00 mov $0x7,%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(chdir) - 5fb: b8 09 00 00 00 mov $0x9,%eax - 600: cd 40 int $0x40 - 602: c3 ret - -00000603 : -SYSCALL(dup) - 603: b8 0a 00 00 00 mov $0xa,%eax - 608: cd 40 int $0x40 - 60a: c3 ret - -0000060b : -SYSCALL(getpid) - 60b: b8 0b 00 00 00 mov $0xb,%eax - 610: cd 40 int $0x40 - 612: c3 ret - -00000613 : -SYSCALL(sbrk) - 613: b8 0c 00 00 00 mov $0xc,%eax - 618: cd 40 int $0x40 - 61a: c3 ret - -0000061b : -SYSCALL(sleep) - 61b: b8 0d 00 00 00 mov $0xd,%eax - 620: cd 40 int $0x40 - 622: c3 ret - -00000623 : -SYSCALL(uptime) - 623: b8 0e 00 00 00 mov $0xe,%eax - 628: cd 40 int $0x40 - 62a: c3 ret - -0000062b : -SYSCALL(open) - 62b: b8 0f 00 00 00 mov $0xf,%eax - 630: cd 40 int $0x40 - 632: c3 ret - -00000633 : -SYSCALL(write) - 633: b8 10 00 00 00 mov $0x10,%eax - 638: cd 40 int $0x40 - 63a: c3 ret - -0000063b : -SYSCALL(mknod) - 63b: b8 11 00 00 00 mov $0x11,%eax - 640: cd 40 int $0x40 - 642: c3 ret - -00000643 : -SYSCALL(unlink) - 643: b8 12 00 00 00 mov $0x12,%eax - 648: cd 40 int $0x40 - 64a: c3 ret - -0000064b : -SYSCALL(link) - 64b: b8 13 00 00 00 mov $0x13,%eax - 650: cd 40 int $0x40 - 652: c3 ret - -00000653 : -SYSCALL(mkdir) - 653: b8 14 00 00 00 mov $0x14,%eax - 658: cd 40 int $0x40 - 65a: c3 ret - -0000065b : -SYSCALL(close) - 65b: b8 15 00 00 00 mov $0x15,%eax - 660: cd 40 int $0x40 - 662: c3 ret - -00000663 : -SYSCALL(getch) - 663: b8 16 00 00 00 mov $0x16,%eax - 668: cd 40 int $0x40 - 66a: c3 ret - -0000066b : -SYSCALL(greeting) - 66b: b8 17 00 00 00 mov $0x17,%eax - 670: cd 40 int $0x40 - 672: c3 ret - -00000673 : -SYSCALL(shutdown) - 673: b8 18 00 00 00 mov $0x18,%eax - 678: cd 40 int $0x40 - 67a: c3 ret - 67b: 66 90 xchg %ax,%ax - 67d: 66 90 xchg %ax,%ax - 67f: 90 nop - -00000680 : - -static void putc(int fd, char c) { - write(fd, &c, 1); -} - -static void printint(int fd, int xx, int base, int sgn) { - 680: 55 push %ebp - 681: 89 e5 mov %esp,%ebp - 683: 57 push %edi - 684: 56 push %esi - 685: 53 push %ebx - 686: 83 ec 3c sub $0x3c,%esp - 689: 89 4d c4 mov %ecx,-0x3c(%ebp) - uint x; - - neg = 0; - if (sgn && xx < 0) { - neg = 1; - x = -xx; - 68c: 89 d1 mov %edx,%ecx -static void printint(int fd, int xx, int base, int sgn) { - 68e: 89 45 b8 mov %eax,-0x48(%ebp) - if (sgn && xx < 0) { - 691: 85 d2 test %edx,%edx - 693: 0f 89 7f 00 00 00 jns 718 - 699: f6 45 08 01 testb $0x1,0x8(%ebp) - 69d: 74 79 je 718 - neg = 1; - 69f: c7 45 bc 01 00 00 00 movl $0x1,-0x44(%ebp) - x = -xx; - 6a6: f7 d9 neg %ecx - } - else { - x = xx; - } - - i = 0; - 6a8: 31 db xor %ebx,%ebx - 6aa: 8d 75 d7 lea -0x29(%ebp),%esi - 6ad: 8d 76 00 lea 0x0(%esi),%esi - do { - buf[i++] = digits[x % base]; - 6b0: 89 c8 mov %ecx,%eax - 6b2: 31 d2 xor %edx,%edx - 6b4: 89 cf mov %ecx,%edi - 6b6: f7 75 c4 divl -0x3c(%ebp) - 6b9: 0f b6 92 f0 0a 00 00 movzbl 0xaf0(%edx),%edx - 6c0: 89 45 c0 mov %eax,-0x40(%ebp) - 6c3: 89 d8 mov %ebx,%eax - 6c5: 8d 5b 01 lea 0x1(%ebx),%ebx - } - while ((x /= base) != 0); - 6c8: 8b 4d c0 mov -0x40(%ebp),%ecx - buf[i++] = digits[x % base]; - 6cb: 88 14 1e mov %dl,(%esi,%ebx,1) - while ((x /= base) != 0); - 6ce: 39 7d c4 cmp %edi,-0x3c(%ebp) - 6d1: 76 dd jbe 6b0 - if (neg) { - 6d3: 8b 4d bc mov -0x44(%ebp),%ecx - 6d6: 85 c9 test %ecx,%ecx - 6d8: 74 0c je 6e6 - buf[i++] = '-'; - 6da: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) - buf[i++] = digits[x % base]; - 6df: 89 d8 mov %ebx,%eax - buf[i++] = '-'; - 6e1: ba 2d 00 00 00 mov $0x2d,%edx - } - - while (--i >= 0) { - 6e6: 8b 7d b8 mov -0x48(%ebp),%edi - 6e9: 8d 5c 05 d7 lea -0x29(%ebp,%eax,1),%ebx - 6ed: eb 07 jmp 6f6 - 6ef: 90 nop - putc(fd, buf[i]); - 6f0: 0f b6 13 movzbl (%ebx),%edx - 6f3: 83 eb 01 sub $0x1,%ebx - write(fd, &c, 1); - 6f6: 83 ec 04 sub $0x4,%esp - 6f9: 88 55 d7 mov %dl,-0x29(%ebp) - 6fc: 6a 01 push $0x1 - 6fe: 56 push %esi - 6ff: 57 push %edi - 700: e8 2e ff ff ff call 633 - while (--i >= 0) { - 705: 83 c4 10 add $0x10,%esp - 708: 39 de cmp %ebx,%esi - 70a: 75 e4 jne 6f0 - } -} - 70c: 8d 65 f4 lea -0xc(%ebp),%esp - 70f: 5b pop %ebx - 710: 5e pop %esi - 711: 5f pop %edi - 712: 5d pop %ebp - 713: c3 ret - 714: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - neg = 0; - 718: c7 45 bc 00 00 00 00 movl $0x0,-0x44(%ebp) - 71f: eb 87 jmp 6a8 - 721: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 728: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 72f: 90 nop - -00000730 : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void printf(int fd, const char *fmt, ...) { - 730: 55 push %ebp - 731: 89 e5 mov %esp,%ebp - 733: 57 push %edi - 734: 56 push %esi - 735: 53 push %ebx - 736: 83 ec 2c sub $0x2c,%esp - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for (i = 0; fmt[i]; i++) { - 739: 8b 5d 0c mov 0xc(%ebp),%ebx -void printf(int fd, const char *fmt, ...) { - 73c: 8b 75 08 mov 0x8(%ebp),%esi - for (i = 0; fmt[i]; i++) { - 73f: 0f b6 13 movzbl (%ebx),%edx - 742: 84 d2 test %dl,%dl - 744: 74 6a je 7b0 - ap = (uint*)(void*)&fmt + 1; - 746: 8d 45 10 lea 0x10(%ebp),%eax - 749: 83 c3 01 add $0x1,%ebx - write(fd, &c, 1); - 74c: 8d 7d e7 lea -0x19(%ebp),%edi - state = 0; - 74f: 31 c9 xor %ecx,%ecx - ap = (uint*)(void*)&fmt + 1; - 751: 89 45 d0 mov %eax,-0x30(%ebp) - 754: eb 36 jmp 78c - 756: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 75d: 8d 76 00 lea 0x0(%esi),%esi - 760: 89 4d d4 mov %ecx,-0x2c(%ebp) - c = fmt[i] & 0xff; - if (state == 0) { - if (c == '%') { - state = '%'; - 763: b9 25 00 00 00 mov $0x25,%ecx - if (c == '%') { - 768: 83 f8 25 cmp $0x25,%eax - 76b: 74 15 je 782 - write(fd, &c, 1); - 76d: 83 ec 04 sub $0x4,%esp - 770: 88 55 e7 mov %dl,-0x19(%ebp) - 773: 6a 01 push $0x1 - 775: 57 push %edi - 776: 56 push %esi - 777: e8 b7 fe ff ff call 633 - 77c: 8b 4d d4 mov -0x2c(%ebp),%ecx - } - else { - putc(fd, c); - 77f: 83 c4 10 add $0x10,%esp - for (i = 0; fmt[i]; i++) { - 782: 0f b6 13 movzbl (%ebx),%edx - 785: 83 c3 01 add $0x1,%ebx - 788: 84 d2 test %dl,%dl - 78a: 74 24 je 7b0 - c = fmt[i] & 0xff; - 78c: 0f b6 c2 movzbl %dl,%eax - if (state == 0) { - 78f: 85 c9 test %ecx,%ecx - 791: 74 cd je 760 - } - } - else if (state == '%') { - 793: 83 f9 25 cmp $0x25,%ecx - 796: 75 ea jne 782 - if (c == 'd') { - 798: 83 f8 25 cmp $0x25,%eax - 79b: 0f 84 07 01 00 00 je 8a8 - 7a1: 83 e8 63 sub $0x63,%eax - 7a4: 83 f8 15 cmp $0x15,%eax - 7a7: 77 17 ja 7c0 - 7a9: ff 24 85 98 0a 00 00 jmp *0xa98(,%eax,4) - putc(fd, c); - } - state = 0; - } - } -} - 7b0: 8d 65 f4 lea -0xc(%ebp),%esp - 7b3: 5b pop %ebx - 7b4: 5e pop %esi - 7b5: 5f pop %edi - 7b6: 5d pop %ebp - 7b7: c3 ret - 7b8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 7bf: 90 nop - write(fd, &c, 1); - 7c0: 83 ec 04 sub $0x4,%esp - 7c3: 88 55 d4 mov %dl,-0x2c(%ebp) - 7c6: 6a 01 push $0x1 - 7c8: 57 push %edi - 7c9: 56 push %esi - 7ca: c6 45 e7 25 movb $0x25,-0x19(%ebp) - 7ce: e8 60 fe ff ff call 633 - putc(fd, c); - 7d3: 0f b6 55 d4 movzbl -0x2c(%ebp),%edx - write(fd, &c, 1); - 7d7: 83 c4 0c add $0xc,%esp - 7da: 88 55 e7 mov %dl,-0x19(%ebp) - 7dd: 6a 01 push $0x1 - 7df: 57 push %edi - 7e0: 56 push %esi - 7e1: e8 4d fe ff ff call 633 - putc(fd, c); - 7e6: 83 c4 10 add $0x10,%esp - state = 0; - 7e9: 31 c9 xor %ecx,%ecx - 7eb: eb 95 jmp 782 - 7ed: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 16, 0); - 7f0: 83 ec 0c sub $0xc,%esp - 7f3: b9 10 00 00 00 mov $0x10,%ecx - 7f8: 6a 00 push $0x0 - 7fa: 8b 45 d0 mov -0x30(%ebp),%eax - 7fd: 8b 10 mov (%eax),%edx - 7ff: 89 f0 mov %esi,%eax - 801: e8 7a fe ff ff call 680 - ap++; - 806: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 80a: 83 c4 10 add $0x10,%esp - state = 0; - 80d: 31 c9 xor %ecx,%ecx - 80f: e9 6e ff ff ff jmp 782 - 814: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - s = (char*)*ap; - 818: 8b 45 d0 mov -0x30(%ebp),%eax - 81b: 8b 10 mov (%eax),%edx - ap++; - 81d: 83 c0 04 add $0x4,%eax - 820: 89 45 d0 mov %eax,-0x30(%ebp) - if (s == 0) { - 823: 85 d2 test %edx,%edx - 825: 0f 84 8d 00 00 00 je 8b8 - while (*s != 0) { - 82b: 0f b6 02 movzbl (%edx),%eax - state = 0; - 82e: 31 c9 xor %ecx,%ecx - while (*s != 0) { - 830: 84 c0 test %al,%al - 832: 0f 84 4a ff ff ff je 782 - 838: 89 5d d4 mov %ebx,-0x2c(%ebp) - 83b: 89 d3 mov %edx,%ebx - 83d: 8d 76 00 lea 0x0(%esi),%esi - write(fd, &c, 1); - 840: 83 ec 04 sub $0x4,%esp - s++; - 843: 83 c3 01 add $0x1,%ebx - 846: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 849: 6a 01 push $0x1 - 84b: 57 push %edi - 84c: 56 push %esi - 84d: e8 e1 fd ff ff call 633 - while (*s != 0) { - 852: 0f b6 03 movzbl (%ebx),%eax - 855: 83 c4 10 add $0x10,%esp - 858: 84 c0 test %al,%al - 85a: 75 e4 jne 840 - state = 0; - 85c: 8b 5d d4 mov -0x2c(%ebp),%ebx - 85f: 31 c9 xor %ecx,%ecx - 861: e9 1c ff ff ff jmp 782 - 866: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 86d: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 10, 1); - 870: 83 ec 0c sub $0xc,%esp - 873: b9 0a 00 00 00 mov $0xa,%ecx - 878: 6a 01 push $0x1 - 87a: e9 7b ff ff ff jmp 7fa - 87f: 90 nop - putc(fd, *ap); - 880: 8b 45 d0 mov -0x30(%ebp),%eax - write(fd, &c, 1); - 883: 83 ec 04 sub $0x4,%esp - putc(fd, *ap); - 886: 8b 00 mov (%eax),%eax - write(fd, &c, 1); - 888: 6a 01 push $0x1 - 88a: 57 push %edi - 88b: 56 push %esi - putc(fd, *ap); - 88c: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 88f: e8 9f fd ff ff call 633 - ap++; - 894: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 898: 83 c4 10 add $0x10,%esp - state = 0; - 89b: 31 c9 xor %ecx,%ecx - 89d: e9 e0 fe ff ff jmp 782 - 8a2: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - putc(fd, c); - 8a8: 88 55 e7 mov %dl,-0x19(%ebp) - write(fd, &c, 1); - 8ab: 83 ec 04 sub $0x4,%esp - 8ae: e9 2a ff ff ff jmp 7dd - 8b3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 8b7: 90 nop - s = "(null)"; - 8b8: ba 8e 0a 00 00 mov $0xa8e,%edx - while (*s != 0) { - 8bd: 89 5d d4 mov %ebx,-0x2c(%ebp) - 8c0: b8 28 00 00 00 mov $0x28,%eax - 8c5: 89 d3 mov %edx,%ebx - 8c7: e9 74 ff ff ff jmp 840 - 8cc: 66 90 xchg %ax,%ax - 8ce: 66 90 xchg %ax,%ax - -000008d0 : -typedef union header Header; - -static Header base; -static Header *freep; - -void free(void *ap) { - 8d0: 55 push %ebp - Header *bp, *p; - - bp = (Header*)ap - 1; - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 8d1: a1 a0 12 00 00 mov 0x12a0,%eax -void free(void *ap) { - 8d6: 89 e5 mov %esp,%ebp - 8d8: 57 push %edi - 8d9: 56 push %esi - 8da: 53 push %ebx - 8db: 8b 5d 08 mov 0x8(%ebp),%ebx - bp = (Header*)ap - 1; - 8de: 8d 4b f8 lea -0x8(%ebx),%ecx - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 8e1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 8e8: 89 c2 mov %eax,%edx - 8ea: 8b 00 mov (%eax),%eax - 8ec: 39 ca cmp %ecx,%edx - 8ee: 73 30 jae 920 - 8f0: 39 c1 cmp %eax,%ecx - 8f2: 72 04 jb 8f8 - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 8f4: 39 c2 cmp %eax,%edx - 8f6: 72 f0 jb 8e8 - break; - } - } - if (bp + bp->s.size == p->s.ptr) { - 8f8: 8b 73 fc mov -0x4(%ebx),%esi - 8fb: 8d 3c f1 lea (%ecx,%esi,8),%edi - 8fe: 39 f8 cmp %edi,%eax - 900: 74 30 je 932 - bp->s.size += p->s.ptr->s.size; - bp->s.ptr = p->s.ptr->s.ptr; - 902: 89 43 f8 mov %eax,-0x8(%ebx) - } - else { - bp->s.ptr = p->s.ptr; - } - if (p + p->s.size == bp) { - 905: 8b 42 04 mov 0x4(%edx),%eax - 908: 8d 34 c2 lea (%edx,%eax,8),%esi - 90b: 39 f1 cmp %esi,%ecx - 90d: 74 3a je 949 - p->s.size += bp->s.size; - p->s.ptr = bp->s.ptr; - 90f: 89 0a mov %ecx,(%edx) - } - else { - p->s.ptr = bp; - } - freep = p; -} - 911: 5b pop %ebx - freep = p; - 912: 89 15 a0 12 00 00 mov %edx,0x12a0 -} - 918: 5e pop %esi - 919: 5f pop %edi - 91a: 5d pop %ebp - 91b: c3 ret - 91c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 920: 39 c2 cmp %eax,%edx - 922: 72 c4 jb 8e8 - 924: 39 c1 cmp %eax,%ecx - 926: 73 c0 jae 8e8 - if (bp + bp->s.size == p->s.ptr) { - 928: 8b 73 fc mov -0x4(%ebx),%esi - 92b: 8d 3c f1 lea (%ecx,%esi,8),%edi - 92e: 39 f8 cmp %edi,%eax - 930: 75 d0 jne 902 - bp->s.size += p->s.ptr->s.size; - 932: 03 70 04 add 0x4(%eax),%esi - 935: 89 73 fc mov %esi,-0x4(%ebx) - bp->s.ptr = p->s.ptr->s.ptr; - 938: 8b 02 mov (%edx),%eax - 93a: 8b 00 mov (%eax),%eax - 93c: 89 43 f8 mov %eax,-0x8(%ebx) - if (p + p->s.size == bp) { - 93f: 8b 42 04 mov 0x4(%edx),%eax - 942: 8d 34 c2 lea (%edx,%eax,8),%esi - 945: 39 f1 cmp %esi,%ecx - 947: 75 c6 jne 90f - p->s.size += bp->s.size; - 949: 03 43 fc add -0x4(%ebx),%eax - freep = p; - 94c: 89 15 a0 12 00 00 mov %edx,0x12a0 - p->s.size += bp->s.size; - 952: 89 42 04 mov %eax,0x4(%edx) - p->s.ptr = bp->s.ptr; - 955: 8b 4b f8 mov -0x8(%ebx),%ecx - 958: 89 0a mov %ecx,(%edx) -} - 95a: 5b pop %ebx - 95b: 5e pop %esi - 95c: 5f pop %edi - 95d: 5d pop %ebp - 95e: c3 ret - 95f: 90 nop - -00000960 : - hp->s.size = nu; - free((void*)(hp + 1)); - return freep; -} - -void* malloc(uint nbytes) { - 960: 55 push %ebp - 961: 89 e5 mov %esp,%ebp - 963: 57 push %edi - 964: 56 push %esi - 965: 53 push %ebx - 966: 83 ec 1c sub $0x1c,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 969: 8b 45 08 mov 0x8(%ebp),%eax - if ((prevp = freep) == 0) { - 96c: 8b 3d a0 12 00 00 mov 0x12a0,%edi - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 972: 8d 70 07 lea 0x7(%eax),%esi - 975: c1 ee 03 shr $0x3,%esi - 978: 83 c6 01 add $0x1,%esi - if ((prevp = freep) == 0) { - 97b: 85 ff test %edi,%edi - 97d: 0f 84 9d 00 00 00 je a20 - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 983: 8b 17 mov (%edi),%edx - if (p->s.size >= nunits) { - 985: 8b 4a 04 mov 0x4(%edx),%ecx - 988: 39 f1 cmp %esi,%ecx - 98a: 73 6a jae 9f6 - 98c: bb 00 10 00 00 mov $0x1000,%ebx - 991: 39 de cmp %ebx,%esi - 993: 0f 43 de cmovae %esi,%ebx - p = sbrk(nu * sizeof(Header)); - 996: 8d 04 dd 00 00 00 00 lea 0x0(,%ebx,8),%eax - 99d: 89 45 e4 mov %eax,-0x1c(%ebp) - 9a0: eb 17 jmp 9b9 - 9a2: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 9a8: 8b 02 mov (%edx),%eax - if (p->s.size >= nunits) { - 9aa: 8b 48 04 mov 0x4(%eax),%ecx - 9ad: 39 f1 cmp %esi,%ecx - 9af: 73 4f jae a00 - p->s.size = nunits; - } - freep = prevp; - return (void*)(p + 1); - } - if (p == freep) { - 9b1: 8b 3d a0 12 00 00 mov 0x12a0,%edi - 9b7: 89 c2 mov %eax,%edx - 9b9: 39 d7 cmp %edx,%edi - 9bb: 75 eb jne 9a8 - p = sbrk(nu * sizeof(Header)); - 9bd: 83 ec 0c sub $0xc,%esp - 9c0: ff 75 e4 push -0x1c(%ebp) - 9c3: e8 4b fc ff ff call 613 - if (p == (char*)-1) { - 9c8: 83 c4 10 add $0x10,%esp - 9cb: 83 f8 ff cmp $0xffffffff,%eax - 9ce: 74 1c je 9ec - hp->s.size = nu; - 9d0: 89 58 04 mov %ebx,0x4(%eax) - free((void*)(hp + 1)); - 9d3: 83 ec 0c sub $0xc,%esp - 9d6: 83 c0 08 add $0x8,%eax - 9d9: 50 push %eax - 9da: e8 f1 fe ff ff call 8d0 - return freep; - 9df: 8b 15 a0 12 00 00 mov 0x12a0,%edx - if ((p = morecore(nunits)) == 0) { - 9e5: 83 c4 10 add $0x10,%esp - 9e8: 85 d2 test %edx,%edx - 9ea: 75 bc jne 9a8 - return 0; - } - } - } -} - 9ec: 8d 65 f4 lea -0xc(%ebp),%esp - return 0; - 9ef: 31 c0 xor %eax,%eax -} - 9f1: 5b pop %ebx - 9f2: 5e pop %esi - 9f3: 5f pop %edi - 9f4: 5d pop %ebp - 9f5: c3 ret - if (p->s.size >= nunits) { - 9f6: 89 d0 mov %edx,%eax - 9f8: 89 fa mov %edi,%edx - 9fa: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - if (p->s.size == nunits) { - a00: 39 ce cmp %ecx,%esi - a02: 74 4c je a50 - p->s.size -= nunits; - a04: 29 f1 sub %esi,%ecx - a06: 89 48 04 mov %ecx,0x4(%eax) - p += p->s.size; - a09: 8d 04 c8 lea (%eax,%ecx,8),%eax - p->s.size = nunits; - a0c: 89 70 04 mov %esi,0x4(%eax) - freep = prevp; - a0f: 89 15 a0 12 00 00 mov %edx,0x12a0 -} - a15: 8d 65 f4 lea -0xc(%ebp),%esp - return (void*)(p + 1); - a18: 83 c0 08 add $0x8,%eax -} - a1b: 5b pop %ebx - a1c: 5e pop %esi - a1d: 5f pop %edi - a1e: 5d pop %ebp - a1f: c3 ret - base.s.ptr = freep = prevp = &base; - a20: c7 05 a0 12 00 00 a4 movl $0x12a4,0x12a0 - a27: 12 00 00 - base.s.size = 0; - a2a: bf a4 12 00 00 mov $0x12a4,%edi - base.s.ptr = freep = prevp = &base; - a2f: c7 05 a4 12 00 00 a4 movl $0x12a4,0x12a4 - a36: 12 00 00 - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - a39: 89 fa mov %edi,%edx - base.s.size = 0; - a3b: c7 05 a8 12 00 00 00 movl $0x0,0x12a8 - a42: 00 00 00 - if (p->s.size >= nunits) { - a45: e9 42 ff ff ff jmp 98c - a4a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - prevp->s.ptr = p->s.ptr; - a50: 8b 08 mov (%eax),%ecx - a52: 89 0a mov %ecx,(%edx) - a54: eb b9 jmp a0f diff --git a/grep.d b/grep.d deleted file mode 100644 index 15fc65b..0000000 --- a/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/grep.o b/grep.o deleted file mode 100644 index 31f70ae48c84a76e4c8152ed70f87f407ce2b824..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8728 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 O-C^|0KjFOMk^c*Q$Q#-K diff --git a/grep.sym b/grep.sym deleted file mode 100644 index 0ff3fb4..0000000 --- a/grep.sym +++ /dev/null @@ -1,53 +0,0 @@ -00000000 grep.c -00000000 ulib.c -00000000 printf.c -00000680 printint -00000af0 digits.0 -00000000 umalloc.c -000012a0 freep -000012a4 base -00000370 strcpy -00000730 printf -0000066b greeting -00000590 memmove -000000c0 matchhere -0000063b mknod -00000490 gets -0000060b getpid -000001d0 grep -00000960 malloc -0000061b sleep -000005d3 pipe -00000663 getch -00000633 write -000005f3 fstat -000005e3 kill -000005fb chdir -000005eb exec -000005cb wait -000005db read -00000643 unlink -000005bb fork -00000613 sbrk -00000623 uptime -00000e90 __bss_start -00000430 memset -00000000 main -00000310 matchstar -000003a0 strcmp -00000673 shutdown -00000603 dup -00000ea0 buf -00000500 stat -00000e90 _edata -000012ac _end -00000170 match -0000064b link -000005c3 exit -00000550 atoi -00000400 strlen -0000062b open -00000450 strchr -00000653 mkdir -0000065b close -000008d0 free diff --git a/hello.asm b/hello.asm deleted file mode 100644 index 21f6e0e..0000000 --- a/hello.asm +++ /dev/null @@ -1,1129 +0,0 @@ - -_hello: file format elf32-i386 - - -Disassembly of section .text: - -00000000
    : -#include "types.h" -#include "user.h" - -int main(int argc, char *argv[]) { - 0: 55 push %ebp - 1: 89 e5 mov %esp,%ebp - 3: 83 e4 f0 and $0xfffffff0,%esp - greeting(); - 6: e8 00 03 00 00 call 30b - exit(); - b: e8 53 02 00 00 call 263 - -00000010 : -#include "stat.h" -#include "fcntl.h" -#include "user.h" -#include "x86.h" - -char*strcpy(char *s, const char *t) { - 10: 55 push %ebp - char *os; - - os = s; - while ((*s++ = *t++) != 0) { - 11: 31 c0 xor %eax,%eax -char*strcpy(char *s, const char *t) { - 13: 89 e5 mov %esp,%ebp - 15: 53 push %ebx - 16: 8b 4d 08 mov 0x8(%ebp),%ecx - 19: 8b 5d 0c mov 0xc(%ebp),%ebx - 1c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - while ((*s++ = *t++) != 0) { - 20: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 24: 88 14 01 mov %dl,(%ecx,%eax,1) - 27: 83 c0 01 add $0x1,%eax - 2a: 84 d2 test %dl,%dl - 2c: 75 f2 jne 20 - ; - } - return os; -} - 2e: 8b 5d fc mov -0x4(%ebp),%ebx - 31: 89 c8 mov %ecx,%eax - 33: c9 leave - 34: c3 ret - 35: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 3c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000040 : - -int strcmp(const char *p, const char *q) { - 40: 55 push %ebp - 41: 89 e5 mov %esp,%ebp - 43: 53 push %ebx - 44: 8b 55 08 mov 0x8(%ebp),%edx - 47: 8b 4d 0c mov 0xc(%ebp),%ecx - while (*p && *p == *q) { - 4a: 0f b6 02 movzbl (%edx),%eax - 4d: 84 c0 test %al,%al - 4f: 75 17 jne 68 - 51: eb 3a jmp 8d - 53: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 57: 90 nop - 58: 0f b6 42 01 movzbl 0x1(%edx),%eax - p++, q++; - 5c: 83 c2 01 add $0x1,%edx - 5f: 8d 59 01 lea 0x1(%ecx),%ebx - while (*p && *p == *q) { - 62: 84 c0 test %al,%al - 64: 74 1a je 80 - p++, q++; - 66: 89 d9 mov %ebx,%ecx - while (*p && *p == *q) { - 68: 0f b6 19 movzbl (%ecx),%ebx - 6b: 38 c3 cmp %al,%bl - 6d: 74 e9 je 58 - } - return (uchar) * p - (uchar) * q; - 6f: 29 d8 sub %ebx,%eax -} - 71: 8b 5d fc mov -0x4(%ebp),%ebx - 74: c9 leave - 75: c3 ret - 76: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 7d: 8d 76 00 lea 0x0(%esi),%esi - return (uchar) * p - (uchar) * q; - 80: 0f b6 59 01 movzbl 0x1(%ecx),%ebx - 84: 31 c0 xor %eax,%eax - 86: 29 d8 sub %ebx,%eax -} - 88: 8b 5d fc mov -0x4(%ebp),%ebx - 8b: c9 leave - 8c: c3 ret - return (uchar) * p - (uchar) * q; - 8d: 0f b6 19 movzbl (%ecx),%ebx - 90: 31 c0 xor %eax,%eax - 92: eb db jmp 6f - 94: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 9b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 9f: 90 nop - -000000a0 : - -uint strlen(const char *s) { - a0: 55 push %ebp - a1: 89 e5 mov %esp,%ebp - a3: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - for (n = 0; s[n]; n++) { - a6: 80 3a 00 cmpb $0x0,(%edx) - a9: 74 15 je c0 - ab: 31 c0 xor %eax,%eax - ad: 8d 76 00 lea 0x0(%esi),%esi - b0: 83 c0 01 add $0x1,%eax - b3: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - b7: 89 c1 mov %eax,%ecx - b9: 75 f5 jne b0 - ; - } - return n; -} - bb: 89 c8 mov %ecx,%eax - bd: 5d pop %ebp - be: c3 ret - bf: 90 nop - for (n = 0; s[n]; n++) { - c0: 31 c9 xor %ecx,%ecx -} - c2: 5d pop %ebp - c3: 89 c8 mov %ecx,%eax - c5: c3 ret - c6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - cd: 8d 76 00 lea 0x0(%esi),%esi - -000000d0 : - -void* memset(void *dst, int c, uint n) { - d0: 55 push %ebp - d1: 89 e5 mov %esp,%ebp - d3: 57 push %edi - d4: 8b 55 08 mov 0x8(%ebp),%edx - "d" (port), "0" (addr), "1" (cnt) : - "cc"); -} - -static inline void stosb(void *addr, int data, int cnt) { - asm volatile ("cld; rep stosb" : - d7: 8b 4d 10 mov 0x10(%ebp),%ecx - da: 8b 45 0c mov 0xc(%ebp),%eax - dd: 89 d7 mov %edx,%edi - df: fc cld - e0: f3 aa rep stos %al,%es:(%edi) - stosb(dst, c, n); - return dst; -} - e2: 8b 7d fc mov -0x4(%ebp),%edi - e5: 89 d0 mov %edx,%eax - e7: c9 leave - e8: c3 ret - e9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -000000f0 : - -char* strchr(const char *s, char c) { - f0: 55 push %ebp - f1: 89 e5 mov %esp,%ebp - f3: 8b 45 08 mov 0x8(%ebp),%eax - f6: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx - for (; *s; s++) { - fa: 0f b6 10 movzbl (%eax),%edx - fd: 84 d2 test %dl,%dl - ff: 75 12 jne 113 - 101: eb 1d jmp 120 - 103: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 107: 90 nop - 108: 0f b6 50 01 movzbl 0x1(%eax),%edx - 10c: 83 c0 01 add $0x1,%eax - 10f: 84 d2 test %dl,%dl - 111: 74 0d je 120 - if (*s == c) { - 113: 38 d1 cmp %dl,%cl - 115: 75 f1 jne 108 - return (char*)s; - } - } - return 0; -} - 117: 5d pop %ebp - 118: c3 ret - 119: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - return 0; - 120: 31 c0 xor %eax,%eax -} - 122: 5d pop %ebp - 123: c3 ret - 124: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 12b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 12f: 90 nop - -00000130 : - -char* gets(char *buf, int max) { - 130: 55 push %ebp - 131: 89 e5 mov %esp,%ebp - 133: 57 push %edi - 134: 56 push %esi - int i, cc; - char c; - - for (i = 0; i + 1 < max;) { - cc = read(0, &c, 1); - 135: 8d 7d e7 lea -0x19(%ebp),%edi -char* gets(char *buf, int max) { - 138: 53 push %ebx - for (i = 0; i + 1 < max;) { - 139: 31 db xor %ebx,%ebx -char* gets(char *buf, int max) { - 13b: 83 ec 1c sub $0x1c,%esp - for (i = 0; i + 1 < max;) { - 13e: eb 27 jmp 167 - cc = read(0, &c, 1); - 140: 83 ec 04 sub $0x4,%esp - 143: 6a 01 push $0x1 - 145: 57 push %edi - 146: 6a 00 push $0x0 - 148: e8 2e 01 00 00 call 27b - if (cc < 1) { - 14d: 83 c4 10 add $0x10,%esp - 150: 85 c0 test %eax,%eax - 152: 7e 1d jle 171 - break; - } - buf[i++] = c; - 154: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 158: 8b 55 08 mov 0x8(%ebp),%edx - 15b: 88 44 1a ff mov %al,-0x1(%edx,%ebx,1) - if (c == '\n' || c == '\r') { - 15f: 3c 0a cmp $0xa,%al - 161: 74 1d je 180 - 163: 3c 0d cmp $0xd,%al - 165: 74 19 je 180 - for (i = 0; i + 1 < max;) { - 167: 89 de mov %ebx,%esi - 169: 83 c3 01 add $0x1,%ebx - 16c: 3b 5d 0c cmp 0xc(%ebp),%ebx - 16f: 7c cf jl 140 - break; - } - } - buf[i] = '\0'; - 171: 8b 45 08 mov 0x8(%ebp),%eax - 174: c6 04 30 00 movb $0x0,(%eax,%esi,1) - return buf; -} - 178: 8d 65 f4 lea -0xc(%ebp),%esp - 17b: 5b pop %ebx - 17c: 5e pop %esi - 17d: 5f pop %edi - 17e: 5d pop %ebp - 17f: c3 ret - buf[i] = '\0'; - 180: 8b 45 08 mov 0x8(%ebp),%eax - 183: 89 de mov %ebx,%esi - 185: c6 04 30 00 movb $0x0,(%eax,%esi,1) -} - 189: 8d 65 f4 lea -0xc(%ebp),%esp - 18c: 5b pop %ebx - 18d: 5e pop %esi - 18e: 5f pop %edi - 18f: 5d pop %ebp - 190: c3 ret - 191: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 198: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 19f: 90 nop - -000001a0 : - -int stat(const char *n, struct stat *st) { - 1a0: 55 push %ebp - 1a1: 89 e5 mov %esp,%ebp - 1a3: 56 push %esi - 1a4: 53 push %ebx - int fd; - int r; - - fd = open(n, O_RDONLY); - 1a5: 83 ec 08 sub $0x8,%esp - 1a8: 6a 00 push $0x0 - 1aa: ff 75 08 push 0x8(%ebp) - 1ad: e8 19 01 00 00 call 2cb - if (fd < 0) { - 1b2: 83 c4 10 add $0x10,%esp - 1b5: 85 c0 test %eax,%eax - 1b7: 78 27 js 1e0 - return -1; - } - r = fstat(fd, st); - 1b9: 83 ec 08 sub $0x8,%esp - 1bc: ff 75 0c push 0xc(%ebp) - 1bf: 89 c3 mov %eax,%ebx - 1c1: 50 push %eax - 1c2: e8 cc 00 00 00 call 293 - close(fd); - 1c7: 89 1c 24 mov %ebx,(%esp) - r = fstat(fd, st); - 1ca: 89 c6 mov %eax,%esi - close(fd); - 1cc: e8 2a 01 00 00 call 2fb - return r; - 1d1: 83 c4 10 add $0x10,%esp -} - 1d4: 8d 65 f8 lea -0x8(%ebp),%esp - 1d7: 89 f0 mov %esi,%eax - 1d9: 5b pop %ebx - 1da: 5e pop %esi - 1db: 5d pop %ebp - 1dc: c3 ret - 1dd: 8d 76 00 lea 0x0(%esi),%esi - return -1; - 1e0: be ff ff ff ff mov $0xffffffff,%esi - 1e5: eb ed jmp 1d4 - 1e7: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 1ee: 66 90 xchg %ax,%ax - -000001f0 : - -int atoi(const char *s) { - 1f0: 55 push %ebp - 1f1: 89 e5 mov %esp,%ebp - 1f3: 53 push %ebx - 1f4: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - n = 0; - while ('0' <= *s && *s <= '9') { - 1f7: 0f be 02 movsbl (%edx),%eax - 1fa: 8d 48 d0 lea -0x30(%eax),%ecx - 1fd: 80 f9 09 cmp $0x9,%cl - n = 0; - 200: b9 00 00 00 00 mov $0x0,%ecx - while ('0' <= *s && *s <= '9') { - 205: 77 1e ja 225 - 207: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 20e: 66 90 xchg %ax,%ax - n = n * 10 + *s++ - '0'; - 210: 83 c2 01 add $0x1,%edx - 213: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 216: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx - while ('0' <= *s && *s <= '9') { - 21a: 0f be 02 movsbl (%edx),%eax - 21d: 8d 58 d0 lea -0x30(%eax),%ebx - 220: 80 fb 09 cmp $0x9,%bl - 223: 76 eb jbe 210 - } - return n; -} - 225: 8b 5d fc mov -0x4(%ebp),%ebx - 228: 89 c8 mov %ecx,%eax - 22a: c9 leave - 22b: c3 ret - 22c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000230 : - -void* memmove(void *vdst, const void *vsrc, int n) { - 230: 55 push %ebp - 231: 89 e5 mov %esp,%ebp - 233: 57 push %edi - 234: 8b 45 10 mov 0x10(%ebp),%eax - 237: 8b 55 08 mov 0x8(%ebp),%edx - 23a: 56 push %esi - 23b: 8b 75 0c mov 0xc(%ebp),%esi - char *dst; - const char *src; - - dst = vdst; - src = vsrc; - while (n-- > 0) { - 23e: 85 c0 test %eax,%eax - 240: 7e 13 jle 255 - 242: 01 d0 add %edx,%eax - dst = vdst; - 244: 89 d7 mov %edx,%edi - 246: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 24d: 8d 76 00 lea 0x0(%esi),%esi - *dst++ = *src++; - 250: a4 movsb %ds:(%esi),%es:(%edi) - while (n-- > 0) { - 251: 39 f8 cmp %edi,%eax - 253: 75 fb jne 250 - } - return vdst; -} - 255: 5e pop %esi - 256: 89 d0 mov %edx,%eax - 258: 5f pop %edi - 259: 5d pop %ebp - 25a: c3 ret - -0000025b : -name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 25b: b8 01 00 00 00 mov $0x1,%eax - 260: cd 40 int $0x40 - 262: c3 ret - -00000263 : -SYSCALL(exit) - 263: b8 02 00 00 00 mov $0x2,%eax - 268: cd 40 int $0x40 - 26a: c3 ret - -0000026b : -SYSCALL(wait) - 26b: b8 03 00 00 00 mov $0x3,%eax - 270: cd 40 int $0x40 - 272: c3 ret - -00000273 : -SYSCALL(pipe) - 273: b8 04 00 00 00 mov $0x4,%eax - 278: cd 40 int $0x40 - 27a: c3 ret - -0000027b : -SYSCALL(read) - 27b: b8 05 00 00 00 mov $0x5,%eax - 280: cd 40 int $0x40 - 282: c3 ret - -00000283 : -SYSCALL(kill) - 283: b8 06 00 00 00 mov $0x6,%eax - 288: cd 40 int $0x40 - 28a: c3 ret - -0000028b : -SYSCALL(exec) - 28b: b8 07 00 00 00 mov $0x7,%eax - 290: cd 40 int $0x40 - 292: c3 ret - -00000293 : -SYSCALL(fstat) - 293: b8 08 00 00 00 mov $0x8,%eax - 298: cd 40 int $0x40 - 29a: c3 ret - -0000029b : -SYSCALL(chdir) - 29b: b8 09 00 00 00 mov $0x9,%eax - 2a0: cd 40 int $0x40 - 2a2: c3 ret - -000002a3 : -SYSCALL(dup) - 2a3: b8 0a 00 00 00 mov $0xa,%eax - 2a8: cd 40 int $0x40 - 2aa: c3 ret - -000002ab : -SYSCALL(getpid) - 2ab: b8 0b 00 00 00 mov $0xb,%eax - 2b0: cd 40 int $0x40 - 2b2: c3 ret - -000002b3 : -SYSCALL(sbrk) - 2b3: b8 0c 00 00 00 mov $0xc,%eax - 2b8: cd 40 int $0x40 - 2ba: c3 ret - -000002bb : -SYSCALL(sleep) - 2bb: b8 0d 00 00 00 mov $0xd,%eax - 2c0: cd 40 int $0x40 - 2c2: c3 ret - -000002c3 : -SYSCALL(uptime) - 2c3: b8 0e 00 00 00 mov $0xe,%eax - 2c8: cd 40 int $0x40 - 2ca: c3 ret - -000002cb : -SYSCALL(open) - 2cb: b8 0f 00 00 00 mov $0xf,%eax - 2d0: cd 40 int $0x40 - 2d2: c3 ret - -000002d3 : -SYSCALL(write) - 2d3: b8 10 00 00 00 mov $0x10,%eax - 2d8: cd 40 int $0x40 - 2da: c3 ret - -000002db : -SYSCALL(mknod) - 2db: b8 11 00 00 00 mov $0x11,%eax - 2e0: cd 40 int $0x40 - 2e2: c3 ret - -000002e3 : -SYSCALL(unlink) - 2e3: b8 12 00 00 00 mov $0x12,%eax - 2e8: cd 40 int $0x40 - 2ea: c3 ret - -000002eb : -SYSCALL(link) - 2eb: b8 13 00 00 00 mov $0x13,%eax - 2f0: cd 40 int $0x40 - 2f2: c3 ret - -000002f3 : -SYSCALL(mkdir) - 2f3: b8 14 00 00 00 mov $0x14,%eax - 2f8: cd 40 int $0x40 - 2fa: c3 ret - -000002fb : -SYSCALL(close) - 2fb: b8 15 00 00 00 mov $0x15,%eax - 300: cd 40 int $0x40 - 302: c3 ret - -00000303 : -SYSCALL(getch) - 303: b8 16 00 00 00 mov $0x16,%eax - 308: cd 40 int $0x40 - 30a: c3 ret - -0000030b : -SYSCALL(greeting) - 30b: b8 17 00 00 00 mov $0x17,%eax - 310: cd 40 int $0x40 - 312: c3 ret - -00000313 : -SYSCALL(shutdown) - 313: b8 18 00 00 00 mov $0x18,%eax - 318: cd 40 int $0x40 - 31a: c3 ret - 31b: 66 90 xchg %ax,%ax - 31d: 66 90 xchg %ax,%ax - 31f: 90 nop - -00000320 : - -static void putc(int fd, char c) { - write(fd, &c, 1); -} - -static void printint(int fd, int xx, int base, int sgn) { - 320: 55 push %ebp - 321: 89 e5 mov %esp,%ebp - 323: 57 push %edi - 324: 56 push %esi - 325: 53 push %ebx - 326: 83 ec 3c sub $0x3c,%esp - 329: 89 4d c4 mov %ecx,-0x3c(%ebp) - uint x; - - neg = 0; - if (sgn && xx < 0) { - neg = 1; - x = -xx; - 32c: 89 d1 mov %edx,%ecx -static void printint(int fd, int xx, int base, int sgn) { - 32e: 89 45 b8 mov %eax,-0x48(%ebp) - if (sgn && xx < 0) { - 331: 85 d2 test %edx,%edx - 333: 0f 89 7f 00 00 00 jns 3b8 - 339: f6 45 08 01 testb $0x1,0x8(%ebp) - 33d: 74 79 je 3b8 - neg = 1; - 33f: c7 45 bc 01 00 00 00 movl $0x1,-0x44(%ebp) - x = -xx; - 346: f7 d9 neg %ecx - } - else { - x = xx; - } - - i = 0; - 348: 31 db xor %ebx,%ebx - 34a: 8d 75 d7 lea -0x29(%ebp),%esi - 34d: 8d 76 00 lea 0x0(%esi),%esi - do { - buf[i++] = digits[x % base]; - 350: 89 c8 mov %ecx,%eax - 352: 31 d2 xor %edx,%edx - 354: 89 cf mov %ecx,%edi - 356: f7 75 c4 divl -0x3c(%ebp) - 359: 0f b6 92 58 07 00 00 movzbl 0x758(%edx),%edx - 360: 89 45 c0 mov %eax,-0x40(%ebp) - 363: 89 d8 mov %ebx,%eax - 365: 8d 5b 01 lea 0x1(%ebx),%ebx - } - while ((x /= base) != 0); - 368: 8b 4d c0 mov -0x40(%ebp),%ecx - buf[i++] = digits[x % base]; - 36b: 88 14 1e mov %dl,(%esi,%ebx,1) - while ((x /= base) != 0); - 36e: 39 7d c4 cmp %edi,-0x3c(%ebp) - 371: 76 dd jbe 350 - if (neg) { - 373: 8b 4d bc mov -0x44(%ebp),%ecx - 376: 85 c9 test %ecx,%ecx - 378: 74 0c je 386 - buf[i++] = '-'; - 37a: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) - buf[i++] = digits[x % base]; - 37f: 89 d8 mov %ebx,%eax - buf[i++] = '-'; - 381: ba 2d 00 00 00 mov $0x2d,%edx - } - - while (--i >= 0) { - 386: 8b 7d b8 mov -0x48(%ebp),%edi - 389: 8d 5c 05 d7 lea -0x29(%ebp,%eax,1),%ebx - 38d: eb 07 jmp 396 - 38f: 90 nop - putc(fd, buf[i]); - 390: 0f b6 13 movzbl (%ebx),%edx - 393: 83 eb 01 sub $0x1,%ebx - write(fd, &c, 1); - 396: 83 ec 04 sub $0x4,%esp - 399: 88 55 d7 mov %dl,-0x29(%ebp) - 39c: 6a 01 push $0x1 - 39e: 56 push %esi - 39f: 57 push %edi - 3a0: e8 2e ff ff ff call 2d3 - while (--i >= 0) { - 3a5: 83 c4 10 add $0x10,%esp - 3a8: 39 de cmp %ebx,%esi - 3aa: 75 e4 jne 390 - } -} - 3ac: 8d 65 f4 lea -0xc(%ebp),%esp - 3af: 5b pop %ebx - 3b0: 5e pop %esi - 3b1: 5f pop %edi - 3b2: 5d pop %ebp - 3b3: c3 ret - 3b4: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - neg = 0; - 3b8: c7 45 bc 00 00 00 00 movl $0x0,-0x44(%ebp) - 3bf: eb 87 jmp 348 - 3c1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 3c8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 3cf: 90 nop - -000003d0 : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void printf(int fd, const char *fmt, ...) { - 3d0: 55 push %ebp - 3d1: 89 e5 mov %esp,%ebp - 3d3: 57 push %edi - 3d4: 56 push %esi - 3d5: 53 push %ebx - 3d6: 83 ec 2c sub $0x2c,%esp - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for (i = 0; fmt[i]; i++) { - 3d9: 8b 5d 0c mov 0xc(%ebp),%ebx -void printf(int fd, const char *fmt, ...) { - 3dc: 8b 75 08 mov 0x8(%ebp),%esi - for (i = 0; fmt[i]; i++) { - 3df: 0f b6 13 movzbl (%ebx),%edx - 3e2: 84 d2 test %dl,%dl - 3e4: 74 6a je 450 - ap = (uint*)(void*)&fmt + 1; - 3e6: 8d 45 10 lea 0x10(%ebp),%eax - 3e9: 83 c3 01 add $0x1,%ebx - write(fd, &c, 1); - 3ec: 8d 7d e7 lea -0x19(%ebp),%edi - state = 0; - 3ef: 31 c9 xor %ecx,%ecx - ap = (uint*)(void*)&fmt + 1; - 3f1: 89 45 d0 mov %eax,-0x30(%ebp) - 3f4: eb 36 jmp 42c - 3f6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 3fd: 8d 76 00 lea 0x0(%esi),%esi - 400: 89 4d d4 mov %ecx,-0x2c(%ebp) - c = fmt[i] & 0xff; - if (state == 0) { - if (c == '%') { - state = '%'; - 403: b9 25 00 00 00 mov $0x25,%ecx - if (c == '%') { - 408: 83 f8 25 cmp $0x25,%eax - 40b: 74 15 je 422 - write(fd, &c, 1); - 40d: 83 ec 04 sub $0x4,%esp - 410: 88 55 e7 mov %dl,-0x19(%ebp) - 413: 6a 01 push $0x1 - 415: 57 push %edi - 416: 56 push %esi - 417: e8 b7 fe ff ff call 2d3 - 41c: 8b 4d d4 mov -0x2c(%ebp),%ecx - } - else { - putc(fd, c); - 41f: 83 c4 10 add $0x10,%esp - for (i = 0; fmt[i]; i++) { - 422: 0f b6 13 movzbl (%ebx),%edx - 425: 83 c3 01 add $0x1,%ebx - 428: 84 d2 test %dl,%dl - 42a: 74 24 je 450 - c = fmt[i] & 0xff; - 42c: 0f b6 c2 movzbl %dl,%eax - if (state == 0) { - 42f: 85 c9 test %ecx,%ecx - 431: 74 cd je 400 - } - } - else if (state == '%') { - 433: 83 f9 25 cmp $0x25,%ecx - 436: 75 ea jne 422 - if (c == 'd') { - 438: 83 f8 25 cmp $0x25,%eax - 43b: 0f 84 07 01 00 00 je 548 - 441: 83 e8 63 sub $0x63,%eax - 444: 83 f8 15 cmp $0x15,%eax - 447: 77 17 ja 460 - 449: ff 24 85 00 07 00 00 jmp *0x700(,%eax,4) - putc(fd, c); - } - state = 0; - } - } -} - 450: 8d 65 f4 lea -0xc(%ebp),%esp - 453: 5b pop %ebx - 454: 5e pop %esi - 455: 5f pop %edi - 456: 5d pop %ebp - 457: c3 ret - 458: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 45f: 90 nop - write(fd, &c, 1); - 460: 83 ec 04 sub $0x4,%esp - 463: 88 55 d4 mov %dl,-0x2c(%ebp) - 466: 6a 01 push $0x1 - 468: 57 push %edi - 469: 56 push %esi - 46a: c6 45 e7 25 movb $0x25,-0x19(%ebp) - 46e: e8 60 fe ff ff call 2d3 - putc(fd, c); - 473: 0f b6 55 d4 movzbl -0x2c(%ebp),%edx - write(fd, &c, 1); - 477: 83 c4 0c add $0xc,%esp - 47a: 88 55 e7 mov %dl,-0x19(%ebp) - 47d: 6a 01 push $0x1 - 47f: 57 push %edi - 480: 56 push %esi - 481: e8 4d fe ff ff call 2d3 - putc(fd, c); - 486: 83 c4 10 add $0x10,%esp - state = 0; - 489: 31 c9 xor %ecx,%ecx - 48b: eb 95 jmp 422 - 48d: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 16, 0); - 490: 83 ec 0c sub $0xc,%esp - 493: b9 10 00 00 00 mov $0x10,%ecx - 498: 6a 00 push $0x0 - 49a: 8b 45 d0 mov -0x30(%ebp),%eax - 49d: 8b 10 mov (%eax),%edx - 49f: 89 f0 mov %esi,%eax - 4a1: e8 7a fe ff ff call 320 - ap++; - 4a6: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 4aa: 83 c4 10 add $0x10,%esp - state = 0; - 4ad: 31 c9 xor %ecx,%ecx - 4af: e9 6e ff ff ff jmp 422 - 4b4: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - s = (char*)*ap; - 4b8: 8b 45 d0 mov -0x30(%ebp),%eax - 4bb: 8b 10 mov (%eax),%edx - ap++; - 4bd: 83 c0 04 add $0x4,%eax - 4c0: 89 45 d0 mov %eax,-0x30(%ebp) - if (s == 0) { - 4c3: 85 d2 test %edx,%edx - 4c5: 0f 84 8d 00 00 00 je 558 - while (*s != 0) { - 4cb: 0f b6 02 movzbl (%edx),%eax - state = 0; - 4ce: 31 c9 xor %ecx,%ecx - while (*s != 0) { - 4d0: 84 c0 test %al,%al - 4d2: 0f 84 4a ff ff ff je 422 - 4d8: 89 5d d4 mov %ebx,-0x2c(%ebp) - 4db: 89 d3 mov %edx,%ebx - 4dd: 8d 76 00 lea 0x0(%esi),%esi - write(fd, &c, 1); - 4e0: 83 ec 04 sub $0x4,%esp - s++; - 4e3: 83 c3 01 add $0x1,%ebx - 4e6: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 4e9: 6a 01 push $0x1 - 4eb: 57 push %edi - 4ec: 56 push %esi - 4ed: e8 e1 fd ff ff call 2d3 - while (*s != 0) { - 4f2: 0f b6 03 movzbl (%ebx),%eax - 4f5: 83 c4 10 add $0x10,%esp - 4f8: 84 c0 test %al,%al - 4fa: 75 e4 jne 4e0 - state = 0; - 4fc: 8b 5d d4 mov -0x2c(%ebp),%ebx - 4ff: 31 c9 xor %ecx,%ecx - 501: e9 1c ff ff ff jmp 422 - 506: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 50d: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 10, 1); - 510: 83 ec 0c sub $0xc,%esp - 513: b9 0a 00 00 00 mov $0xa,%ecx - 518: 6a 01 push $0x1 - 51a: e9 7b ff ff ff jmp 49a - 51f: 90 nop - putc(fd, *ap); - 520: 8b 45 d0 mov -0x30(%ebp),%eax - write(fd, &c, 1); - 523: 83 ec 04 sub $0x4,%esp - putc(fd, *ap); - 526: 8b 00 mov (%eax),%eax - write(fd, &c, 1); - 528: 6a 01 push $0x1 - 52a: 57 push %edi - 52b: 56 push %esi - putc(fd, *ap); - 52c: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 52f: e8 9f fd ff ff call 2d3 - ap++; - 534: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 538: 83 c4 10 add $0x10,%esp - state = 0; - 53b: 31 c9 xor %ecx,%ecx - 53d: e9 e0 fe ff ff jmp 422 - 542: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - putc(fd, c); - 548: 88 55 e7 mov %dl,-0x19(%ebp) - write(fd, &c, 1); - 54b: 83 ec 04 sub $0x4,%esp - 54e: e9 2a ff ff ff jmp 47d - 553: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 557: 90 nop - s = "(null)"; - 558: ba f8 06 00 00 mov $0x6f8,%edx - while (*s != 0) { - 55d: 89 5d d4 mov %ebx,-0x2c(%ebp) - 560: b8 28 00 00 00 mov $0x28,%eax - 565: 89 d3 mov %edx,%ebx - 567: e9 74 ff ff ff jmp 4e0 - 56c: 66 90 xchg %ax,%ax - 56e: 66 90 xchg %ax,%ax - -00000570 : -typedef union header Header; - -static Header base; -static Header *freep; - -void free(void *ap) { - 570: 55 push %ebp - Header *bp, *p; - - bp = (Header*)ap - 1; - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 571: a1 f8 09 00 00 mov 0x9f8,%eax -void free(void *ap) { - 576: 89 e5 mov %esp,%ebp - 578: 57 push %edi - 579: 56 push %esi - 57a: 53 push %ebx - 57b: 8b 5d 08 mov 0x8(%ebp),%ebx - bp = (Header*)ap - 1; - 57e: 8d 4b f8 lea -0x8(%ebx),%ecx - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 581: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 588: 89 c2 mov %eax,%edx - 58a: 8b 00 mov (%eax),%eax - 58c: 39 ca cmp %ecx,%edx - 58e: 73 30 jae 5c0 - 590: 39 c1 cmp %eax,%ecx - 592: 72 04 jb 598 - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 594: 39 c2 cmp %eax,%edx - 596: 72 f0 jb 588 - break; - } - } - if (bp + bp->s.size == p->s.ptr) { - 598: 8b 73 fc mov -0x4(%ebx),%esi - 59b: 8d 3c f1 lea (%ecx,%esi,8),%edi - 59e: 39 f8 cmp %edi,%eax - 5a0: 74 30 je 5d2 - bp->s.size += p->s.ptr->s.size; - bp->s.ptr = p->s.ptr->s.ptr; - 5a2: 89 43 f8 mov %eax,-0x8(%ebx) - } - else { - bp->s.ptr = p->s.ptr; - } - if (p + p->s.size == bp) { - 5a5: 8b 42 04 mov 0x4(%edx),%eax - 5a8: 8d 34 c2 lea (%edx,%eax,8),%esi - 5ab: 39 f1 cmp %esi,%ecx - 5ad: 74 3a je 5e9 - p->s.size += bp->s.size; - p->s.ptr = bp->s.ptr; - 5af: 89 0a mov %ecx,(%edx) - } - else { - p->s.ptr = bp; - } - freep = p; -} - 5b1: 5b pop %ebx - freep = p; - 5b2: 89 15 f8 09 00 00 mov %edx,0x9f8 -} - 5b8: 5e pop %esi - 5b9: 5f pop %edi - 5ba: 5d pop %ebp - 5bb: c3 ret - 5bc: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 5c0: 39 c2 cmp %eax,%edx - 5c2: 72 c4 jb 588 - 5c4: 39 c1 cmp %eax,%ecx - 5c6: 73 c0 jae 588 - if (bp + bp->s.size == p->s.ptr) { - 5c8: 8b 73 fc mov -0x4(%ebx),%esi - 5cb: 8d 3c f1 lea (%ecx,%esi,8),%edi - 5ce: 39 f8 cmp %edi,%eax - 5d0: 75 d0 jne 5a2 - bp->s.size += p->s.ptr->s.size; - 5d2: 03 70 04 add 0x4(%eax),%esi - 5d5: 89 73 fc mov %esi,-0x4(%ebx) - bp->s.ptr = p->s.ptr->s.ptr; - 5d8: 8b 02 mov (%edx),%eax - 5da: 8b 00 mov (%eax),%eax - 5dc: 89 43 f8 mov %eax,-0x8(%ebx) - if (p + p->s.size == bp) { - 5df: 8b 42 04 mov 0x4(%edx),%eax - 5e2: 8d 34 c2 lea (%edx,%eax,8),%esi - 5e5: 39 f1 cmp %esi,%ecx - 5e7: 75 c6 jne 5af - p->s.size += bp->s.size; - 5e9: 03 43 fc add -0x4(%ebx),%eax - freep = p; - 5ec: 89 15 f8 09 00 00 mov %edx,0x9f8 - p->s.size += bp->s.size; - 5f2: 89 42 04 mov %eax,0x4(%edx) - p->s.ptr = bp->s.ptr; - 5f5: 8b 4b f8 mov -0x8(%ebx),%ecx - 5f8: 89 0a mov %ecx,(%edx) -} - 5fa: 5b pop %ebx - 5fb: 5e pop %esi - 5fc: 5f pop %edi - 5fd: 5d pop %ebp - 5fe: c3 ret - 5ff: 90 nop - -00000600 : - hp->s.size = nu; - free((void*)(hp + 1)); - return freep; -} - -void* malloc(uint nbytes) { - 600: 55 push %ebp - 601: 89 e5 mov %esp,%ebp - 603: 57 push %edi - 604: 56 push %esi - 605: 53 push %ebx - 606: 83 ec 1c sub $0x1c,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 609: 8b 45 08 mov 0x8(%ebp),%eax - if ((prevp = freep) == 0) { - 60c: 8b 3d f8 09 00 00 mov 0x9f8,%edi - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 612: 8d 70 07 lea 0x7(%eax),%esi - 615: c1 ee 03 shr $0x3,%esi - 618: 83 c6 01 add $0x1,%esi - if ((prevp = freep) == 0) { - 61b: 85 ff test %edi,%edi - 61d: 0f 84 9d 00 00 00 je 6c0 - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 623: 8b 17 mov (%edi),%edx - if (p->s.size >= nunits) { - 625: 8b 4a 04 mov 0x4(%edx),%ecx - 628: 39 f1 cmp %esi,%ecx - 62a: 73 6a jae 696 - 62c: bb 00 10 00 00 mov $0x1000,%ebx - 631: 39 de cmp %ebx,%esi - 633: 0f 43 de cmovae %esi,%ebx - p = sbrk(nu * sizeof(Header)); - 636: 8d 04 dd 00 00 00 00 lea 0x0(,%ebx,8),%eax - 63d: 89 45 e4 mov %eax,-0x1c(%ebp) - 640: eb 17 jmp 659 - 642: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 648: 8b 02 mov (%edx),%eax - if (p->s.size >= nunits) { - 64a: 8b 48 04 mov 0x4(%eax),%ecx - 64d: 39 f1 cmp %esi,%ecx - 64f: 73 4f jae 6a0 - p->s.size = nunits; - } - freep = prevp; - return (void*)(p + 1); - } - if (p == freep) { - 651: 8b 3d f8 09 00 00 mov 0x9f8,%edi - 657: 89 c2 mov %eax,%edx - 659: 39 d7 cmp %edx,%edi - 65b: 75 eb jne 648 - p = sbrk(nu * sizeof(Header)); - 65d: 83 ec 0c sub $0xc,%esp - 660: ff 75 e4 push -0x1c(%ebp) - 663: e8 4b fc ff ff call 2b3 - if (p == (char*)-1) { - 668: 83 c4 10 add $0x10,%esp - 66b: 83 f8 ff cmp $0xffffffff,%eax - 66e: 74 1c je 68c - hp->s.size = nu; - 670: 89 58 04 mov %ebx,0x4(%eax) - free((void*)(hp + 1)); - 673: 83 ec 0c sub $0xc,%esp - 676: 83 c0 08 add $0x8,%eax - 679: 50 push %eax - 67a: e8 f1 fe ff ff call 570 - return freep; - 67f: 8b 15 f8 09 00 00 mov 0x9f8,%edx - if ((p = morecore(nunits)) == 0) { - 685: 83 c4 10 add $0x10,%esp - 688: 85 d2 test %edx,%edx - 68a: 75 bc jne 648 - return 0; - } - } - } -} - 68c: 8d 65 f4 lea -0xc(%ebp),%esp - return 0; - 68f: 31 c0 xor %eax,%eax -} - 691: 5b pop %ebx - 692: 5e pop %esi - 693: 5f pop %edi - 694: 5d pop %ebp - 695: c3 ret - if (p->s.size >= nunits) { - 696: 89 d0 mov %edx,%eax - 698: 89 fa mov %edi,%edx - 69a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - if (p->s.size == nunits) { - 6a0: 39 ce cmp %ecx,%esi - 6a2: 74 4c je 6f0 - p->s.size -= nunits; - 6a4: 29 f1 sub %esi,%ecx - 6a6: 89 48 04 mov %ecx,0x4(%eax) - p += p->s.size; - 6a9: 8d 04 c8 lea (%eax,%ecx,8),%eax - p->s.size = nunits; - 6ac: 89 70 04 mov %esi,0x4(%eax) - freep = prevp; - 6af: 89 15 f8 09 00 00 mov %edx,0x9f8 -} - 6b5: 8d 65 f4 lea -0xc(%ebp),%esp - return (void*)(p + 1); - 6b8: 83 c0 08 add $0x8,%eax -} - 6bb: 5b pop %ebx - 6bc: 5e pop %esi - 6bd: 5f pop %edi - 6be: 5d pop %ebp - 6bf: c3 ret - base.s.ptr = freep = prevp = &base; - 6c0: c7 05 f8 09 00 00 fc movl $0x9fc,0x9f8 - 6c7: 09 00 00 - base.s.size = 0; - 6ca: bf fc 09 00 00 mov $0x9fc,%edi - base.s.ptr = freep = prevp = &base; - 6cf: c7 05 fc 09 00 00 fc movl $0x9fc,0x9fc - 6d6: 09 00 00 - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 6d9: 89 fa mov %edi,%edx - base.s.size = 0; - 6db: c7 05 00 0a 00 00 00 movl $0x0,0xa00 - 6e2: 00 00 00 - if (p->s.size >= nunits) { - 6e5: e9 42 ff ff ff jmp 62c - 6ea: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - prevp->s.ptr = p->s.ptr; - 6f0: 8b 08 mov (%eax),%ecx - 6f2: 89 0a mov %ecx,(%edx) - 6f4: eb b9 jmp 6af diff --git a/hello.c b/hello.c index e7489c6..c1dde4d 100644 --- a/hello.c +++ b/hello.c @@ -2,6 +2,6 @@ #include "user.h" int main(int argc, char *argv[]) { - greeting(); + greeting(); exit(); } \ No newline at end of file diff --git a/hello.d b/hello.d deleted file mode 100644 index 8d6eb56..0000000 --- a/hello.d +++ /dev/null @@ -1 +0,0 @@ -hello.o: hello.c /usr/include/stdc-predef.h types.h user.h diff --git a/hello.o b/hello.o deleted file mode 100644 index 64534cfacb413786eb18c81ff558c021281ea919..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2644 zcma)8-D@0G6u)<7XR~pe&6hPvqhu4bO~ILDlakt|sj*RGptPkLK@{Tb?qqgwcP7k7 zZHij3N)-ex`cOm#UwjetK|voBd=Px_#RvTlD)^{xqC)(gyZ0oMg46@|{?7OPm~-y# z)yK|0E~OMqQkY^-65_pL*K$n3v=|j5?5c46&0nwG`u(?mc6N5u^f|PakOeYY^O)`< zu7q)b7)`R!L!2~v#tCHUFF>&mlTox*0X+pP2vboSBGtH3^_H+NSx`K*VgN&a@G&_! zm?{)z+z`eP+zu)Aje=Q*@*IXq-isKb@Ci+yVv@4h2VWuY7v=KlvROgACCtjnNx3*# zI8k03HbxQogm_tA9Y##QC{GsFz*&Rxfy!{%oEV>29~qPbxRIhG9v(wzd9i$=d}M5G z__`cBHHLHO+_-?!?Ji{Rb>#lIK{-@h9=$Rqv5vSG!@$7eYNm+}!qgAO(l&LW1LC4q z%>eOT|E}~AsADR{gggw3At#J}^HFf(EKN_*WK9W6t#;6|hOMdMpk?{RXK*D_W?>Te zq1UX^NAWHPsqkaZOM}oCNh^xe>OKcI_8VgL+mTk^fo zi-QJ4H*U0+f`x|`ss9+aoHoPAu4h3T>AOOb!aKFycHkyhva5_bL27TtZpX8? zB5ccx+1YKpU~k1y>NV0xE4Km3Cr}cLyuy zV9XLPc3MKLuB@D_POsOqFwOKO+O!BHUiFEl_N1cW5OMQ~vYE-pJtzg{MeQ^wIg-62fm*<8h6rG@jS^tj0}3bWWz_S2ez^^*1$sruB4t($p^);?%x? zQ>4ef9@JRVxS(;F5Pnsl0TfQM-9Z5Z)3}Q*=2Gu+Dx9X9y27a^iEv`C?T`|_Zk%RY zT}{)gXZ}VIZboocyj!ow-le?Njor}qbc(K19Qy4bN%!g6LFjQ3?1EWRZz#DDb*LeP z6QVaAybreOx$aV4YeO|NPW8V@{dT~ctFikVwHMAcJqZ=@xN=4R<#z;Ds+BwWsk(q4 zue%Ih)g+LJdHRl2*UK10Kcfc8b`XOebQ-kY84TVlSaAX43t}{}?KI?kzFSD}4s?`{ z_QLt-2ajXG3KPQn#AssM^N^V*(}xhM#AssMbCC1vrsx$u2kCj;1U$!3ifB40lKpPNkG?q*`+Wrk@l4-yfoTQXeuPXswKfs?v>VJ9H_ F{R=ojJG%e? diff --git a/hello.sym b/hello.sym deleted file mode 100644 index 6d2e467..0000000 --- a/hello.sym +++ /dev/null @@ -1,48 +0,0 @@ -00000000 hello.c -00000000 ulib.c -00000000 printf.c -00000320 printint -00000758 digits.0 -00000000 umalloc.c -000009f8 freep -000009fc base -00000010 strcpy -000003d0 printf -0000030b greeting -00000230 memmove -000002db mknod -00000130 gets -000002ab getpid -00000600 malloc -000002bb sleep -00000273 pipe -00000303 getch -000002d3 write -00000293 fstat -00000283 kill -0000029b chdir -0000028b exec -0000026b wait -0000027b read -000002e3 unlink -0000025b fork -000002b3 sbrk -000002c3 uptime -000009f8 __bss_start -000000d0 memset -00000000 main -00000040 strcmp -00000313 shutdown -000002a3 dup -000001a0 stat -000009f8 _edata -00000a04 _end -000002eb link -00000263 exit -000001f0 atoi -000000a0 strlen -000002cb open -000000f0 strchr -000002f3 mkdir -000002fb close -00000570 free diff --git a/ide.d b/ide.d deleted file mode 100644 index 21155b9..0000000 --- a/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 sleeplock.h fs.h buf.h diff --git a/ide.o b/ide.o deleted file mode 100644 index b8474f52eb3a48dae21998b23873d1a1f703429f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13096 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: -#include "user.h" -#include "fcntl.h" - -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 push -0x4(%ecx) - a: 55 push %ebp - b: 89 e5 mov %esp,%ebp - d: 53 push %ebx - e: 51 push %ecx - int pid, wpid; - - if (open("console", O_RDWR) < 0) { - f: 83 ec 08 sub $0x8,%esp - 12: 6a 02 push $0x2 - 14: 68 c8 07 00 00 push $0x7c8 - 19: e8 7d 03 00 00 call 39b - 1e: 83 c4 10 add $0x10,%esp - 21: 85 c0 test %eax,%eax - 23: 0f 88 8d 00 00 00 js b6 - mknod("console", 1, 1); - open("console", O_RDWR); - } - dup(0); // stdout - 29: 83 ec 0c sub $0xc,%esp - 2c: 6a 00 push $0x0 - 2e: e8 40 03 00 00 call 373 - dup(0); // stderr - 33: c7 04 24 00 00 00 00 movl $0x0,(%esp) - 3a: e8 34 03 00 00 call 373 - 3f: 83 c4 10 add $0x10,%esp - 42: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - - for (;;) { - printf(1, "init: starting sh\n"); - 48: 83 ec 08 sub $0x8,%esp - 4b: 68 d0 07 00 00 push $0x7d0 - 50: 6a 01 push $0x1 - 52: e8 49 04 00 00 call 4a0 - pid = fork(); - 57: e8 cf 02 00 00 call 32b - if (pid < 0) { - 5c: 83 c4 10 add $0x10,%esp - pid = fork(); - 5f: 89 c3 mov %eax,%ebx - if (pid < 0) { - 61: 85 c0 test %eax,%eax - 63: 78 1a js 7f - printf(1, "init: fork failed\n"); - exit(); - } - if (pid == 0) { - 65: 74 2b je 92 - 67: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 6e: 66 90 xchg %ax,%ax - exec("sh", argv); - printf(1, "init: exec sh failed\n"); - exit(); - } - while ((wpid = wait()) >= 0 && wpid != pid) { - 70: e8 c6 02 00 00 call 33b - 75: 85 c0 test %eax,%eax - 77: 78 cf js 48 - 79: 39 c3 cmp %eax,%ebx - 7b: 75 f3 jne 70 - 7d: eb c9 jmp 48 - printf(1, "init: fork failed\n"); - 7f: 53 push %ebx - 80: 53 push %ebx - 81: 68 e3 07 00 00 push $0x7e3 - 86: 6a 01 push $0x1 - 88: e8 13 04 00 00 call 4a0 - exit(); - 8d: e8 a1 02 00 00 call 333 - exec("sh", argv); - 92: 50 push %eax - 93: 50 push %eax - 94: 68 1c 0b 00 00 push $0xb1c - 99: 68 f6 07 00 00 push $0x7f6 - 9e: e8 b8 02 00 00 call 35b - printf(1, "init: exec sh failed\n"); - a3: 5a pop %edx - a4: 59 pop %ecx - a5: 68 f9 07 00 00 push $0x7f9 - aa: 6a 01 push $0x1 - ac: e8 ef 03 00 00 call 4a0 - exit(); - b1: e8 7d 02 00 00 call 333 - mknod("console", 1, 1); - b6: 50 push %eax - b7: 6a 01 push $0x1 - b9: 6a 01 push $0x1 - bb: 68 c8 07 00 00 push $0x7c8 - c0: e8 e6 02 00 00 call 3ab - open("console", O_RDWR); - c5: 58 pop %eax - c6: 5a pop %edx - c7: 6a 02 push $0x2 - c9: 68 c8 07 00 00 push $0x7c8 - ce: e8 c8 02 00 00 call 39b - d3: 83 c4 10 add $0x10,%esp - d6: e9 4e ff ff ff jmp 29 - db: 66 90 xchg %ax,%ax - dd: 66 90 xchg %ax,%ax - df: 90 nop - -000000e0 : -#include "stat.h" -#include "fcntl.h" -#include "user.h" -#include "x86.h" - -char*strcpy(char *s, const char *t) { - e0: 55 push %ebp - char *os; - - os = s; - while ((*s++ = *t++) != 0) { - e1: 31 c0 xor %eax,%eax -char*strcpy(char *s, const char *t) { - e3: 89 e5 mov %esp,%ebp - e5: 53 push %ebx - e6: 8b 4d 08 mov 0x8(%ebp),%ecx - e9: 8b 5d 0c mov 0xc(%ebp),%ebx - ec: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - while ((*s++ = *t++) != 0) { - f0: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - f4: 88 14 01 mov %dl,(%ecx,%eax,1) - f7: 83 c0 01 add $0x1,%eax - fa: 84 d2 test %dl,%dl - fc: 75 f2 jne f0 - ; - } - return os; -} - fe: 8b 5d fc mov -0x4(%ebp),%ebx - 101: 89 c8 mov %ecx,%eax - 103: c9 leave - 104: c3 ret - 105: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 10c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000110 : - -int strcmp(const char *p, const char *q) { - 110: 55 push %ebp - 111: 89 e5 mov %esp,%ebp - 113: 53 push %ebx - 114: 8b 55 08 mov 0x8(%ebp),%edx - 117: 8b 4d 0c mov 0xc(%ebp),%ecx - while (*p && *p == *q) { - 11a: 0f b6 02 movzbl (%edx),%eax - 11d: 84 c0 test %al,%al - 11f: 75 17 jne 138 - 121: eb 3a jmp 15d - 123: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 127: 90 nop - 128: 0f b6 42 01 movzbl 0x1(%edx),%eax - p++, q++; - 12c: 83 c2 01 add $0x1,%edx - 12f: 8d 59 01 lea 0x1(%ecx),%ebx - while (*p && *p == *q) { - 132: 84 c0 test %al,%al - 134: 74 1a je 150 - p++, q++; - 136: 89 d9 mov %ebx,%ecx - while (*p && *p == *q) { - 138: 0f b6 19 movzbl (%ecx),%ebx - 13b: 38 c3 cmp %al,%bl - 13d: 74 e9 je 128 - } - return (uchar) * p - (uchar) * q; - 13f: 29 d8 sub %ebx,%eax -} - 141: 8b 5d fc mov -0x4(%ebp),%ebx - 144: c9 leave - 145: c3 ret - 146: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 14d: 8d 76 00 lea 0x0(%esi),%esi - return (uchar) * p - (uchar) * q; - 150: 0f b6 59 01 movzbl 0x1(%ecx),%ebx - 154: 31 c0 xor %eax,%eax - 156: 29 d8 sub %ebx,%eax -} - 158: 8b 5d fc mov -0x4(%ebp),%ebx - 15b: c9 leave - 15c: c3 ret - return (uchar) * p - (uchar) * q; - 15d: 0f b6 19 movzbl (%ecx),%ebx - 160: 31 c0 xor %eax,%eax - 162: eb db jmp 13f - 164: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 16b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 16f: 90 nop - -00000170 : - -uint strlen(const char *s) { - 170: 55 push %ebp - 171: 89 e5 mov %esp,%ebp - 173: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - for (n = 0; s[n]; n++) { - 176: 80 3a 00 cmpb $0x0,(%edx) - 179: 74 15 je 190 - 17b: 31 c0 xor %eax,%eax - 17d: 8d 76 00 lea 0x0(%esi),%esi - 180: 83 c0 01 add $0x1,%eax - 183: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - 187: 89 c1 mov %eax,%ecx - 189: 75 f5 jne 180 - ; - } - return n; -} - 18b: 89 c8 mov %ecx,%eax - 18d: 5d pop %ebp - 18e: c3 ret - 18f: 90 nop - for (n = 0; s[n]; n++) { - 190: 31 c9 xor %ecx,%ecx -} - 192: 5d pop %ebp - 193: 89 c8 mov %ecx,%eax - 195: c3 ret - 196: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 19d: 8d 76 00 lea 0x0(%esi),%esi - -000001a0 : - -void* memset(void *dst, int c, uint n) { - 1a0: 55 push %ebp - 1a1: 89 e5 mov %esp,%ebp - 1a3: 57 push %edi - 1a4: 8b 55 08 mov 0x8(%ebp),%edx - "d" (port), "0" (addr), "1" (cnt) : - "cc"); -} - -static inline void stosb(void *addr, int data, int cnt) { - asm volatile ("cld; rep stosb" : - 1a7: 8b 4d 10 mov 0x10(%ebp),%ecx - 1aa: 8b 45 0c mov 0xc(%ebp),%eax - 1ad: 89 d7 mov %edx,%edi - 1af: fc cld - 1b0: f3 aa rep stos %al,%es:(%edi) - stosb(dst, c, n); - return dst; -} - 1b2: 8b 7d fc mov -0x4(%ebp),%edi - 1b5: 89 d0 mov %edx,%eax - 1b7: c9 leave - 1b8: c3 ret - 1b9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -000001c0 : - -char* strchr(const char *s, char c) { - 1c0: 55 push %ebp - 1c1: 89 e5 mov %esp,%ebp - 1c3: 8b 45 08 mov 0x8(%ebp),%eax - 1c6: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx - for (; *s; s++) { - 1ca: 0f b6 10 movzbl (%eax),%edx - 1cd: 84 d2 test %dl,%dl - 1cf: 75 12 jne 1e3 - 1d1: eb 1d jmp 1f0 - 1d3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 1d7: 90 nop - 1d8: 0f b6 50 01 movzbl 0x1(%eax),%edx - 1dc: 83 c0 01 add $0x1,%eax - 1df: 84 d2 test %dl,%dl - 1e1: 74 0d je 1f0 - if (*s == c) { - 1e3: 38 d1 cmp %dl,%cl - 1e5: 75 f1 jne 1d8 - return (char*)s; - } - } - return 0; -} - 1e7: 5d pop %ebp - 1e8: c3 ret - 1e9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - return 0; - 1f0: 31 c0 xor %eax,%eax -} - 1f2: 5d pop %ebp - 1f3: c3 ret - 1f4: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 1fb: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 1ff: 90 nop - -00000200 : - -char* gets(char *buf, int max) { - 200: 55 push %ebp - 201: 89 e5 mov %esp,%ebp - 203: 57 push %edi - 204: 56 push %esi - int i, cc; - char c; - - for (i = 0; i + 1 < max;) { - cc = read(0, &c, 1); - 205: 8d 7d e7 lea -0x19(%ebp),%edi -char* gets(char *buf, int max) { - 208: 53 push %ebx - for (i = 0; i + 1 < max;) { - 209: 31 db xor %ebx,%ebx -char* gets(char *buf, int max) { - 20b: 83 ec 1c sub $0x1c,%esp - for (i = 0; i + 1 < max;) { - 20e: eb 27 jmp 237 - cc = read(0, &c, 1); - 210: 83 ec 04 sub $0x4,%esp - 213: 6a 01 push $0x1 - 215: 57 push %edi - 216: 6a 00 push $0x0 - 218: e8 2e 01 00 00 call 34b - if (cc < 1) { - 21d: 83 c4 10 add $0x10,%esp - 220: 85 c0 test %eax,%eax - 222: 7e 1d jle 241 - break; - } - buf[i++] = c; - 224: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 228: 8b 55 08 mov 0x8(%ebp),%edx - 22b: 88 44 1a ff mov %al,-0x1(%edx,%ebx,1) - if (c == '\n' || c == '\r') { - 22f: 3c 0a cmp $0xa,%al - 231: 74 1d je 250 - 233: 3c 0d cmp $0xd,%al - 235: 74 19 je 250 - for (i = 0; i + 1 < max;) { - 237: 89 de mov %ebx,%esi - 239: 83 c3 01 add $0x1,%ebx - 23c: 3b 5d 0c cmp 0xc(%ebp),%ebx - 23f: 7c cf jl 210 - break; - } - } - buf[i] = '\0'; - 241: 8b 45 08 mov 0x8(%ebp),%eax - 244: c6 04 30 00 movb $0x0,(%eax,%esi,1) - return buf; -} - 248: 8d 65 f4 lea -0xc(%ebp),%esp - 24b: 5b pop %ebx - 24c: 5e pop %esi - 24d: 5f pop %edi - 24e: 5d pop %ebp - 24f: c3 ret - buf[i] = '\0'; - 250: 8b 45 08 mov 0x8(%ebp),%eax - 253: 89 de mov %ebx,%esi - 255: c6 04 30 00 movb $0x0,(%eax,%esi,1) -} - 259: 8d 65 f4 lea -0xc(%ebp),%esp - 25c: 5b pop %ebx - 25d: 5e pop %esi - 25e: 5f pop %edi - 25f: 5d pop %ebp - 260: c3 ret - 261: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 268: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 26f: 90 nop - -00000270 : - -int stat(const char *n, struct stat *st) { - 270: 55 push %ebp - 271: 89 e5 mov %esp,%ebp - 273: 56 push %esi - 274: 53 push %ebx - int fd; - int r; - - fd = open(n, O_RDONLY); - 275: 83 ec 08 sub $0x8,%esp - 278: 6a 00 push $0x0 - 27a: ff 75 08 push 0x8(%ebp) - 27d: e8 19 01 00 00 call 39b - if (fd < 0) { - 282: 83 c4 10 add $0x10,%esp - 285: 85 c0 test %eax,%eax - 287: 78 27 js 2b0 - return -1; - } - r = fstat(fd, st); - 289: 83 ec 08 sub $0x8,%esp - 28c: ff 75 0c push 0xc(%ebp) - 28f: 89 c3 mov %eax,%ebx - 291: 50 push %eax - 292: e8 cc 00 00 00 call 363 - close(fd); - 297: 89 1c 24 mov %ebx,(%esp) - r = fstat(fd, st); - 29a: 89 c6 mov %eax,%esi - close(fd); - 29c: e8 2a 01 00 00 call 3cb - return r; - 2a1: 83 c4 10 add $0x10,%esp -} - 2a4: 8d 65 f8 lea -0x8(%ebp),%esp - 2a7: 89 f0 mov %esi,%eax - 2a9: 5b pop %ebx - 2aa: 5e pop %esi - 2ab: 5d pop %ebp - 2ac: c3 ret - 2ad: 8d 76 00 lea 0x0(%esi),%esi - return -1; - 2b0: be ff ff ff ff mov $0xffffffff,%esi - 2b5: eb ed jmp 2a4 - 2b7: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 2be: 66 90 xchg %ax,%ax - -000002c0 : - -int atoi(const char *s) { - 2c0: 55 push %ebp - 2c1: 89 e5 mov %esp,%ebp - 2c3: 53 push %ebx - 2c4: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - n = 0; - while ('0' <= *s && *s <= '9') { - 2c7: 0f be 02 movsbl (%edx),%eax - 2ca: 8d 48 d0 lea -0x30(%eax),%ecx - 2cd: 80 f9 09 cmp $0x9,%cl - n = 0; - 2d0: b9 00 00 00 00 mov $0x0,%ecx - while ('0' <= *s && *s <= '9') { - 2d5: 77 1e ja 2f5 - 2d7: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 2de: 66 90 xchg %ax,%ax - n = n * 10 + *s++ - '0'; - 2e0: 83 c2 01 add $0x1,%edx - 2e3: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 2e6: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx - while ('0' <= *s && *s <= '9') { - 2ea: 0f be 02 movsbl (%edx),%eax - 2ed: 8d 58 d0 lea -0x30(%eax),%ebx - 2f0: 80 fb 09 cmp $0x9,%bl - 2f3: 76 eb jbe 2e0 - } - return n; -} - 2f5: 8b 5d fc mov -0x4(%ebp),%ebx - 2f8: 89 c8 mov %ecx,%eax - 2fa: c9 leave - 2fb: c3 ret - 2fc: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000300 : - -void* memmove(void *vdst, const void *vsrc, int n) { - 300: 55 push %ebp - 301: 89 e5 mov %esp,%ebp - 303: 57 push %edi - 304: 8b 45 10 mov 0x10(%ebp),%eax - 307: 8b 55 08 mov 0x8(%ebp),%edx - 30a: 56 push %esi - 30b: 8b 75 0c mov 0xc(%ebp),%esi - char *dst; - const char *src; - - dst = vdst; - src = vsrc; - while (n-- > 0) { - 30e: 85 c0 test %eax,%eax - 310: 7e 13 jle 325 - 312: 01 d0 add %edx,%eax - dst = vdst; - 314: 89 d7 mov %edx,%edi - 316: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 31d: 8d 76 00 lea 0x0(%esi),%esi - *dst++ = *src++; - 320: a4 movsb %ds:(%esi),%es:(%edi) - while (n-- > 0) { - 321: 39 f8 cmp %edi,%eax - 323: 75 fb jne 320 - } - return vdst; -} - 325: 5e pop %esi - 326: 89 d0 mov %edx,%eax - 328: 5f pop %edi - 329: 5d pop %ebp - 32a: c3 ret - -0000032b : -name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 32b: b8 01 00 00 00 mov $0x1,%eax - 330: cd 40 int $0x40 - 332: c3 ret - -00000333 : -SYSCALL(exit) - 333: b8 02 00 00 00 mov $0x2,%eax - 338: cd 40 int $0x40 - 33a: c3 ret - -0000033b : -SYSCALL(wait) - 33b: b8 03 00 00 00 mov $0x3,%eax - 340: cd 40 int $0x40 - 342: c3 ret - -00000343 : -SYSCALL(pipe) - 343: b8 04 00 00 00 mov $0x4,%eax - 348: cd 40 int $0x40 - 34a: c3 ret - -0000034b : -SYSCALL(read) - 34b: b8 05 00 00 00 mov $0x5,%eax - 350: cd 40 int $0x40 - 352: c3 ret - -00000353 : -SYSCALL(kill) - 353: b8 06 00 00 00 mov $0x6,%eax - 358: cd 40 int $0x40 - 35a: c3 ret - -0000035b : -SYSCALL(exec) - 35b: b8 07 00 00 00 mov $0x7,%eax - 360: cd 40 int $0x40 - 362: c3 ret - -00000363 : -SYSCALL(fstat) - 363: b8 08 00 00 00 mov $0x8,%eax - 368: cd 40 int $0x40 - 36a: c3 ret - -0000036b : -SYSCALL(chdir) - 36b: b8 09 00 00 00 mov $0x9,%eax - 370: cd 40 int $0x40 - 372: c3 ret - -00000373 : -SYSCALL(dup) - 373: b8 0a 00 00 00 mov $0xa,%eax - 378: cd 40 int $0x40 - 37a: c3 ret - -0000037b : -SYSCALL(getpid) - 37b: b8 0b 00 00 00 mov $0xb,%eax - 380: cd 40 int $0x40 - 382: c3 ret - -00000383 : -SYSCALL(sbrk) - 383: b8 0c 00 00 00 mov $0xc,%eax - 388: cd 40 int $0x40 - 38a: c3 ret - -0000038b : -SYSCALL(sleep) - 38b: b8 0d 00 00 00 mov $0xd,%eax - 390: cd 40 int $0x40 - 392: c3 ret - -00000393 : -SYSCALL(uptime) - 393: b8 0e 00 00 00 mov $0xe,%eax - 398: cd 40 int $0x40 - 39a: c3 ret - -0000039b : -SYSCALL(open) - 39b: b8 0f 00 00 00 mov $0xf,%eax - 3a0: cd 40 int $0x40 - 3a2: c3 ret - -000003a3 : -SYSCALL(write) - 3a3: b8 10 00 00 00 mov $0x10,%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(link) - 3bb: b8 13 00 00 00 mov $0x13,%eax - 3c0: cd 40 int $0x40 - 3c2: c3 ret - -000003c3 : -SYSCALL(mkdir) - 3c3: b8 14 00 00 00 mov $0x14,%eax - 3c8: cd 40 int $0x40 - 3ca: c3 ret - -000003cb : -SYSCALL(close) - 3cb: b8 15 00 00 00 mov $0x15,%eax - 3d0: cd 40 int $0x40 - 3d2: c3 ret - -000003d3 : -SYSCALL(getch) - 3d3: b8 16 00 00 00 mov $0x16,%eax - 3d8: cd 40 int $0x40 - 3da: c3 ret - -000003db : -SYSCALL(greeting) - 3db: b8 17 00 00 00 mov $0x17,%eax - 3e0: cd 40 int $0x40 - 3e2: c3 ret - -000003e3 : -SYSCALL(shutdown) - 3e3: b8 18 00 00 00 mov $0x18,%eax - 3e8: cd 40 int $0x40 - 3ea: c3 ret - 3eb: 66 90 xchg %ax,%ax - 3ed: 66 90 xchg %ax,%ax - 3ef: 90 nop - -000003f0 : - -static void putc(int fd, char c) { - write(fd, &c, 1); -} - -static void printint(int fd, int xx, int base, int sgn) { - 3f0: 55 push %ebp - 3f1: 89 e5 mov %esp,%ebp - 3f3: 57 push %edi - 3f4: 56 push %esi - 3f5: 53 push %ebx - 3f6: 83 ec 3c sub $0x3c,%esp - 3f9: 89 4d c4 mov %ecx,-0x3c(%ebp) - uint x; - - neg = 0; - if (sgn && xx < 0) { - neg = 1; - x = -xx; - 3fc: 89 d1 mov %edx,%ecx -static void printint(int fd, int xx, int base, int sgn) { - 3fe: 89 45 b8 mov %eax,-0x48(%ebp) - if (sgn && xx < 0) { - 401: 85 d2 test %edx,%edx - 403: 0f 89 7f 00 00 00 jns 488 - 409: f6 45 08 01 testb $0x1,0x8(%ebp) - 40d: 74 79 je 488 - neg = 1; - 40f: c7 45 bc 01 00 00 00 movl $0x1,-0x44(%ebp) - x = -xx; - 416: f7 d9 neg %ecx - } - else { - x = xx; - } - - i = 0; - 418: 31 db xor %ebx,%ebx - 41a: 8d 75 d7 lea -0x29(%ebp),%esi - 41d: 8d 76 00 lea 0x0(%esi),%esi - do { - buf[i++] = digits[x % base]; - 420: 89 c8 mov %ecx,%eax - 422: 31 d2 xor %edx,%edx - 424: 89 cf mov %ecx,%edi - 426: f7 75 c4 divl -0x3c(%ebp) - 429: 0f b6 92 70 08 00 00 movzbl 0x870(%edx),%edx - 430: 89 45 c0 mov %eax,-0x40(%ebp) - 433: 89 d8 mov %ebx,%eax - 435: 8d 5b 01 lea 0x1(%ebx),%ebx - } - while ((x /= base) != 0); - 438: 8b 4d c0 mov -0x40(%ebp),%ecx - buf[i++] = digits[x % base]; - 43b: 88 14 1e mov %dl,(%esi,%ebx,1) - while ((x /= base) != 0); - 43e: 39 7d c4 cmp %edi,-0x3c(%ebp) - 441: 76 dd jbe 420 - if (neg) { - 443: 8b 4d bc mov -0x44(%ebp),%ecx - 446: 85 c9 test %ecx,%ecx - 448: 74 0c je 456 - buf[i++] = '-'; - 44a: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) - buf[i++] = digits[x % base]; - 44f: 89 d8 mov %ebx,%eax - buf[i++] = '-'; - 451: ba 2d 00 00 00 mov $0x2d,%edx - } - - while (--i >= 0) { - 456: 8b 7d b8 mov -0x48(%ebp),%edi - 459: 8d 5c 05 d7 lea -0x29(%ebp,%eax,1),%ebx - 45d: eb 07 jmp 466 - 45f: 90 nop - putc(fd, buf[i]); - 460: 0f b6 13 movzbl (%ebx),%edx - 463: 83 eb 01 sub $0x1,%ebx - write(fd, &c, 1); - 466: 83 ec 04 sub $0x4,%esp - 469: 88 55 d7 mov %dl,-0x29(%ebp) - 46c: 6a 01 push $0x1 - 46e: 56 push %esi - 46f: 57 push %edi - 470: e8 2e ff ff ff call 3a3 - while (--i >= 0) { - 475: 83 c4 10 add $0x10,%esp - 478: 39 de cmp %ebx,%esi - 47a: 75 e4 jne 460 - } -} - 47c: 8d 65 f4 lea -0xc(%ebp),%esp - 47f: 5b pop %ebx - 480: 5e pop %esi - 481: 5f pop %edi - 482: 5d pop %ebp - 483: c3 ret - 484: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - neg = 0; - 488: c7 45 bc 00 00 00 00 movl $0x0,-0x44(%ebp) - 48f: eb 87 jmp 418 - 491: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 498: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 49f: 90 nop - -000004a0 : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void printf(int fd, const char *fmt, ...) { - 4a0: 55 push %ebp - 4a1: 89 e5 mov %esp,%ebp - 4a3: 57 push %edi - 4a4: 56 push %esi - 4a5: 53 push %ebx - 4a6: 83 ec 2c sub $0x2c,%esp - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for (i = 0; fmt[i]; i++) { - 4a9: 8b 5d 0c mov 0xc(%ebp),%ebx -void printf(int fd, const char *fmt, ...) { - 4ac: 8b 75 08 mov 0x8(%ebp),%esi - for (i = 0; fmt[i]; i++) { - 4af: 0f b6 13 movzbl (%ebx),%edx - 4b2: 84 d2 test %dl,%dl - 4b4: 74 6a je 520 - ap = (uint*)(void*)&fmt + 1; - 4b6: 8d 45 10 lea 0x10(%ebp),%eax - 4b9: 83 c3 01 add $0x1,%ebx - write(fd, &c, 1); - 4bc: 8d 7d e7 lea -0x19(%ebp),%edi - state = 0; - 4bf: 31 c9 xor %ecx,%ecx - ap = (uint*)(void*)&fmt + 1; - 4c1: 89 45 d0 mov %eax,-0x30(%ebp) - 4c4: eb 36 jmp 4fc - 4c6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 4cd: 8d 76 00 lea 0x0(%esi),%esi - 4d0: 89 4d d4 mov %ecx,-0x2c(%ebp) - c = fmt[i] & 0xff; - if (state == 0) { - if (c == '%') { - state = '%'; - 4d3: b9 25 00 00 00 mov $0x25,%ecx - if (c == '%') { - 4d8: 83 f8 25 cmp $0x25,%eax - 4db: 74 15 je 4f2 - write(fd, &c, 1); - 4dd: 83 ec 04 sub $0x4,%esp - 4e0: 88 55 e7 mov %dl,-0x19(%ebp) - 4e3: 6a 01 push $0x1 - 4e5: 57 push %edi - 4e6: 56 push %esi - 4e7: e8 b7 fe ff ff call 3a3 - 4ec: 8b 4d d4 mov -0x2c(%ebp),%ecx - } - else { - putc(fd, c); - 4ef: 83 c4 10 add $0x10,%esp - for (i = 0; fmt[i]; i++) { - 4f2: 0f b6 13 movzbl (%ebx),%edx - 4f5: 83 c3 01 add $0x1,%ebx - 4f8: 84 d2 test %dl,%dl - 4fa: 74 24 je 520 - c = fmt[i] & 0xff; - 4fc: 0f b6 c2 movzbl %dl,%eax - if (state == 0) { - 4ff: 85 c9 test %ecx,%ecx - 501: 74 cd je 4d0 - } - } - else if (state == '%') { - 503: 83 f9 25 cmp $0x25,%ecx - 506: 75 ea jne 4f2 - if (c == 'd') { - 508: 83 f8 25 cmp $0x25,%eax - 50b: 0f 84 07 01 00 00 je 618 - 511: 83 e8 63 sub $0x63,%eax - 514: 83 f8 15 cmp $0x15,%eax - 517: 77 17 ja 530 - 519: ff 24 85 18 08 00 00 jmp *0x818(,%eax,4) - putc(fd, c); - } - state = 0; - } - } -} - 520: 8d 65 f4 lea -0xc(%ebp),%esp - 523: 5b pop %ebx - 524: 5e pop %esi - 525: 5f pop %edi - 526: 5d pop %ebp - 527: c3 ret - 528: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 52f: 90 nop - write(fd, &c, 1); - 530: 83 ec 04 sub $0x4,%esp - 533: 88 55 d4 mov %dl,-0x2c(%ebp) - 536: 6a 01 push $0x1 - 538: 57 push %edi - 539: 56 push %esi - 53a: c6 45 e7 25 movb $0x25,-0x19(%ebp) - 53e: e8 60 fe ff ff call 3a3 - putc(fd, c); - 543: 0f b6 55 d4 movzbl -0x2c(%ebp),%edx - write(fd, &c, 1); - 547: 83 c4 0c add $0xc,%esp - 54a: 88 55 e7 mov %dl,-0x19(%ebp) - 54d: 6a 01 push $0x1 - 54f: 57 push %edi - 550: 56 push %esi - 551: e8 4d fe ff ff call 3a3 - putc(fd, c); - 556: 83 c4 10 add $0x10,%esp - state = 0; - 559: 31 c9 xor %ecx,%ecx - 55b: eb 95 jmp 4f2 - 55d: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 16, 0); - 560: 83 ec 0c sub $0xc,%esp - 563: b9 10 00 00 00 mov $0x10,%ecx - 568: 6a 00 push $0x0 - 56a: 8b 45 d0 mov -0x30(%ebp),%eax - 56d: 8b 10 mov (%eax),%edx - 56f: 89 f0 mov %esi,%eax - 571: e8 7a fe ff ff call 3f0 - ap++; - 576: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 57a: 83 c4 10 add $0x10,%esp - state = 0; - 57d: 31 c9 xor %ecx,%ecx - 57f: e9 6e ff ff ff jmp 4f2 - 584: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - s = (char*)*ap; - 588: 8b 45 d0 mov -0x30(%ebp),%eax - 58b: 8b 10 mov (%eax),%edx - ap++; - 58d: 83 c0 04 add $0x4,%eax - 590: 89 45 d0 mov %eax,-0x30(%ebp) - if (s == 0) { - 593: 85 d2 test %edx,%edx - 595: 0f 84 8d 00 00 00 je 628 - while (*s != 0) { - 59b: 0f b6 02 movzbl (%edx),%eax - state = 0; - 59e: 31 c9 xor %ecx,%ecx - while (*s != 0) { - 5a0: 84 c0 test %al,%al - 5a2: 0f 84 4a ff ff ff je 4f2 - 5a8: 89 5d d4 mov %ebx,-0x2c(%ebp) - 5ab: 89 d3 mov %edx,%ebx - 5ad: 8d 76 00 lea 0x0(%esi),%esi - write(fd, &c, 1); - 5b0: 83 ec 04 sub $0x4,%esp - s++; - 5b3: 83 c3 01 add $0x1,%ebx - 5b6: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 5b9: 6a 01 push $0x1 - 5bb: 57 push %edi - 5bc: 56 push %esi - 5bd: e8 e1 fd ff ff call 3a3 - while (*s != 0) { - 5c2: 0f b6 03 movzbl (%ebx),%eax - 5c5: 83 c4 10 add $0x10,%esp - 5c8: 84 c0 test %al,%al - 5ca: 75 e4 jne 5b0 - state = 0; - 5cc: 8b 5d d4 mov -0x2c(%ebp),%ebx - 5cf: 31 c9 xor %ecx,%ecx - 5d1: e9 1c ff ff ff jmp 4f2 - 5d6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 5dd: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 10, 1); - 5e0: 83 ec 0c sub $0xc,%esp - 5e3: b9 0a 00 00 00 mov $0xa,%ecx - 5e8: 6a 01 push $0x1 - 5ea: e9 7b ff ff ff jmp 56a - 5ef: 90 nop - putc(fd, *ap); - 5f0: 8b 45 d0 mov -0x30(%ebp),%eax - write(fd, &c, 1); - 5f3: 83 ec 04 sub $0x4,%esp - putc(fd, *ap); - 5f6: 8b 00 mov (%eax),%eax - write(fd, &c, 1); - 5f8: 6a 01 push $0x1 - 5fa: 57 push %edi - 5fb: 56 push %esi - putc(fd, *ap); - 5fc: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 5ff: e8 9f fd ff ff call 3a3 - ap++; - 604: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 608: 83 c4 10 add $0x10,%esp - state = 0; - 60b: 31 c9 xor %ecx,%ecx - 60d: e9 e0 fe ff ff jmp 4f2 - 612: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - putc(fd, c); - 618: 88 55 e7 mov %dl,-0x19(%ebp) - write(fd, &c, 1); - 61b: 83 ec 04 sub $0x4,%esp - 61e: e9 2a ff ff ff jmp 54d - 623: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 627: 90 nop - s = "(null)"; - 628: ba 0f 08 00 00 mov $0x80f,%edx - while (*s != 0) { - 62d: 89 5d d4 mov %ebx,-0x2c(%ebp) - 630: b8 28 00 00 00 mov $0x28,%eax - 635: 89 d3 mov %edx,%ebx - 637: e9 74 ff ff ff jmp 5b0 - 63c: 66 90 xchg %ax,%ax - 63e: 66 90 xchg %ax,%ax - -00000640 : -typedef union header Header; - -static Header base; -static Header *freep; - -void free(void *ap) { - 640: 55 push %ebp - Header *bp, *p; - - bp = (Header*)ap - 1; - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 641: a1 24 0b 00 00 mov 0xb24,%eax -void free(void *ap) { - 646: 89 e5 mov %esp,%ebp - 648: 57 push %edi - 649: 56 push %esi - 64a: 53 push %ebx - 64b: 8b 5d 08 mov 0x8(%ebp),%ebx - bp = (Header*)ap - 1; - 64e: 8d 4b f8 lea -0x8(%ebx),%ecx - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 651: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 658: 89 c2 mov %eax,%edx - 65a: 8b 00 mov (%eax),%eax - 65c: 39 ca cmp %ecx,%edx - 65e: 73 30 jae 690 - 660: 39 c1 cmp %eax,%ecx - 662: 72 04 jb 668 - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 664: 39 c2 cmp %eax,%edx - 666: 72 f0 jb 658 - break; - } - } - if (bp + bp->s.size == p->s.ptr) { - 668: 8b 73 fc mov -0x4(%ebx),%esi - 66b: 8d 3c f1 lea (%ecx,%esi,8),%edi - 66e: 39 f8 cmp %edi,%eax - 670: 74 30 je 6a2 - bp->s.size += p->s.ptr->s.size; - bp->s.ptr = p->s.ptr->s.ptr; - 672: 89 43 f8 mov %eax,-0x8(%ebx) - } - else { - bp->s.ptr = p->s.ptr; - } - if (p + p->s.size == bp) { - 675: 8b 42 04 mov 0x4(%edx),%eax - 678: 8d 34 c2 lea (%edx,%eax,8),%esi - 67b: 39 f1 cmp %esi,%ecx - 67d: 74 3a je 6b9 - p->s.size += bp->s.size; - p->s.ptr = bp->s.ptr; - 67f: 89 0a mov %ecx,(%edx) - } - else { - p->s.ptr = bp; - } - freep = p; -} - 681: 5b pop %ebx - freep = p; - 682: 89 15 24 0b 00 00 mov %edx,0xb24 -} - 688: 5e pop %esi - 689: 5f pop %edi - 68a: 5d pop %ebp - 68b: c3 ret - 68c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 690: 39 c2 cmp %eax,%edx - 692: 72 c4 jb 658 - 694: 39 c1 cmp %eax,%ecx - 696: 73 c0 jae 658 - if (bp + bp->s.size == p->s.ptr) { - 698: 8b 73 fc mov -0x4(%ebx),%esi - 69b: 8d 3c f1 lea (%ecx,%esi,8),%edi - 69e: 39 f8 cmp %edi,%eax - 6a0: 75 d0 jne 672 - bp->s.size += p->s.ptr->s.size; - 6a2: 03 70 04 add 0x4(%eax),%esi - 6a5: 89 73 fc mov %esi,-0x4(%ebx) - bp->s.ptr = p->s.ptr->s.ptr; - 6a8: 8b 02 mov (%edx),%eax - 6aa: 8b 00 mov (%eax),%eax - 6ac: 89 43 f8 mov %eax,-0x8(%ebx) - if (p + p->s.size == bp) { - 6af: 8b 42 04 mov 0x4(%edx),%eax - 6b2: 8d 34 c2 lea (%edx,%eax,8),%esi - 6b5: 39 f1 cmp %esi,%ecx - 6b7: 75 c6 jne 67f - p->s.size += bp->s.size; - 6b9: 03 43 fc add -0x4(%ebx),%eax - freep = p; - 6bc: 89 15 24 0b 00 00 mov %edx,0xb24 - p->s.size += bp->s.size; - 6c2: 89 42 04 mov %eax,0x4(%edx) - p->s.ptr = bp->s.ptr; - 6c5: 8b 4b f8 mov -0x8(%ebx),%ecx - 6c8: 89 0a mov %ecx,(%edx) -} - 6ca: 5b pop %ebx - 6cb: 5e pop %esi - 6cc: 5f pop %edi - 6cd: 5d pop %ebp - 6ce: c3 ret - 6cf: 90 nop - -000006d0 : - hp->s.size = nu; - free((void*)(hp + 1)); - return freep; -} - -void* malloc(uint nbytes) { - 6d0: 55 push %ebp - 6d1: 89 e5 mov %esp,%ebp - 6d3: 57 push %edi - 6d4: 56 push %esi - 6d5: 53 push %ebx - 6d6: 83 ec 1c sub $0x1c,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 6d9: 8b 45 08 mov 0x8(%ebp),%eax - if ((prevp = freep) == 0) { - 6dc: 8b 3d 24 0b 00 00 mov 0xb24,%edi - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 6e2: 8d 70 07 lea 0x7(%eax),%esi - 6e5: c1 ee 03 shr $0x3,%esi - 6e8: 83 c6 01 add $0x1,%esi - if ((prevp = freep) == 0) { - 6eb: 85 ff test %edi,%edi - 6ed: 0f 84 9d 00 00 00 je 790 - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 6f3: 8b 17 mov (%edi),%edx - if (p->s.size >= nunits) { - 6f5: 8b 4a 04 mov 0x4(%edx),%ecx - 6f8: 39 f1 cmp %esi,%ecx - 6fa: 73 6a jae 766 - 6fc: bb 00 10 00 00 mov $0x1000,%ebx - 701: 39 de cmp %ebx,%esi - 703: 0f 43 de cmovae %esi,%ebx - p = sbrk(nu * sizeof(Header)); - 706: 8d 04 dd 00 00 00 00 lea 0x0(,%ebx,8),%eax - 70d: 89 45 e4 mov %eax,-0x1c(%ebp) - 710: eb 17 jmp 729 - 712: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 718: 8b 02 mov (%edx),%eax - if (p->s.size >= nunits) { - 71a: 8b 48 04 mov 0x4(%eax),%ecx - 71d: 39 f1 cmp %esi,%ecx - 71f: 73 4f jae 770 - p->s.size = nunits; - } - freep = prevp; - return (void*)(p + 1); - } - if (p == freep) { - 721: 8b 3d 24 0b 00 00 mov 0xb24,%edi - 727: 89 c2 mov %eax,%edx - 729: 39 d7 cmp %edx,%edi - 72b: 75 eb jne 718 - p = sbrk(nu * sizeof(Header)); - 72d: 83 ec 0c sub $0xc,%esp - 730: ff 75 e4 push -0x1c(%ebp) - 733: e8 4b fc ff ff call 383 - if (p == (char*)-1) { - 738: 83 c4 10 add $0x10,%esp - 73b: 83 f8 ff cmp $0xffffffff,%eax - 73e: 74 1c je 75c - hp->s.size = nu; - 740: 89 58 04 mov %ebx,0x4(%eax) - free((void*)(hp + 1)); - 743: 83 ec 0c sub $0xc,%esp - 746: 83 c0 08 add $0x8,%eax - 749: 50 push %eax - 74a: e8 f1 fe ff ff call 640 - return freep; - 74f: 8b 15 24 0b 00 00 mov 0xb24,%edx - if ((p = morecore(nunits)) == 0) { - 755: 83 c4 10 add $0x10,%esp - 758: 85 d2 test %edx,%edx - 75a: 75 bc jne 718 - return 0; - } - } - } -} - 75c: 8d 65 f4 lea -0xc(%ebp),%esp - return 0; - 75f: 31 c0 xor %eax,%eax -} - 761: 5b pop %ebx - 762: 5e pop %esi - 763: 5f pop %edi - 764: 5d pop %ebp - 765: c3 ret - if (p->s.size >= nunits) { - 766: 89 d0 mov %edx,%eax - 768: 89 fa mov %edi,%edx - 76a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - if (p->s.size == nunits) { - 770: 39 ce cmp %ecx,%esi - 772: 74 4c je 7c0 - p->s.size -= nunits; - 774: 29 f1 sub %esi,%ecx - 776: 89 48 04 mov %ecx,0x4(%eax) - p += p->s.size; - 779: 8d 04 c8 lea (%eax,%ecx,8),%eax - p->s.size = nunits; - 77c: 89 70 04 mov %esi,0x4(%eax) - freep = prevp; - 77f: 89 15 24 0b 00 00 mov %edx,0xb24 -} - 785: 8d 65 f4 lea -0xc(%ebp),%esp - return (void*)(p + 1); - 788: 83 c0 08 add $0x8,%eax -} - 78b: 5b pop %ebx - 78c: 5e pop %esi - 78d: 5f pop %edi - 78e: 5d pop %ebp - 78f: c3 ret - base.s.ptr = freep = prevp = &base; - 790: c7 05 24 0b 00 00 28 movl $0xb28,0xb24 - 797: 0b 00 00 - base.s.size = 0; - 79a: bf 28 0b 00 00 mov $0xb28,%edi - base.s.ptr = freep = prevp = &base; - 79f: c7 05 28 0b 00 00 28 movl $0xb28,0xb28 - 7a6: 0b 00 00 - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 7a9: 89 fa mov %edi,%edx - base.s.size = 0; - 7ab: c7 05 2c 0b 00 00 00 movl $0x0,0xb2c - 7b2: 00 00 00 - if (p->s.size >= nunits) { - 7b5: e9 42 ff ff ff jmp 6fc - 7ba: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - prevp->s.ptr = p->s.ptr; - 7c0: 8b 08 mov (%eax),%ecx - 7c2: 89 0a mov %ecx,(%edx) - 7c4: eb b9 jmp 77f diff --git a/init.d b/init.d deleted file mode 100644 index ee304c8..0000000 --- a/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/init.o b/init.o deleted file mode 100644 index 5f7bf3d67a9357bd8683046a19fb842d10f7dbc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4292 zcma)9Yit}>6~1?7XT0n6W9@C5xGu>WIcZ9|Yp)aXZezuz!BvzxH5N%g4ddPM?%3;D zcW1V7sy-y5lIBNHgeVdSQHhrj2$WV8NCl*#QV{$g6{w0(C4MCWL_s`$Hj??iyZ71? z_Xiwl?{{AJ+vEN+}FUVT%n(h-y#AvRA<_ai16#CGA{khEcQOiy#c* zLxm{zT5%B83Q@gVs}`EArNV+2H2i9}i0WGFulf}@tsBhJ3a^|PO_TD?g@$iS;yaQL2e%_T{%; zd~@~Qc=wgpchYO&sxm-#{oq^e|NQMYv$OT#O|xcZ)cSRvT6v#6Q!j7!S(J-%W1FYX zZrb!;Ph#`$BCn2+Da;jJ%;!fGhe79Ulgt5q+fr`Iw z9zu%LlXQ{p7$8f&rvPV}?wSVg*cgO6h@tBk<@+%7l6wU|i(xEsB1N|MW0+~V4(;v^ z@QUjjqIT5%J+u~07P)?r@&UPOdqr4xE62YZ2jP4`5Bg>~SIs<3D+i)2CgUffVn}+7dvL_Le`q>?WJto`mc)k*cvu5+M_)c`Zy(-1 zw`D-)keIZNi@MH8Ii2V1?h!0Gmc>?fs%CEW?LvD1M&CrsxD!j|U4>XtL;KS(ovbT`BzF_Z&i;&)N` zo)kaSI=&z1bszNg68Pv?DpGEjJHT6VyVY+`ffJ8$IK{!q2}dnwXQbog?{ac(zmxg1 zlfLOV?zLCaC!9?FmecP_r{|2*f7r>mV@?mGjC-a9u%qURABuJu1+~zx7Wm4a_kvg~dqF7JJvVHXy4MnFIDT@j zFjd}PD3?onO5=s%@}3C{aXa)Ms`;Vc3Mvr2R;B(>u&KHW0!)YOG7U$bR z1I@c5L@~VMqSpw#hz(tNG?#<8xX|*J{o+a!Tk>1R*{duSS6a>3uf$EQTnT(wz34(% zskfS8vmF)N;rSq}7GrO|;YTpyy1=|j!;9)>cF+vP@>1BWit~Koqk6Ly7w$;IN((D5 z2(MLpTJUl~HjtN&Bh$p2s8kVS%YHTR#-fFDvlpV7R z(6N3=s%9VQkzzXMSZ#5v-)^tEIooQpBW)s9s-cwl*P7vpcBhxFt8C$}^Bp_7MS^V6 zosc*my(2+3+Io^~F_0ADkEW9#8>clZ@JxePzc*p$`#88sW(zk&ySfLpg7Qa=5lH#| zP4a_U=DGvu2E2_8(SM&2fRs&HsP{*`TfDM#EvYh6ua~MNRa)vD>r^7AOLTy{HQo!f zaR0EESUBimjVH97&B{XKKTSj`pCV!tpV#)w+Wti%Qu{LXNYK}`U0upZ@prY%-o<#Y z5#j$ct^WmO6xwgKe4R4(#hgf7uY3kF)5*QWBWKQu+`mL)WR4}AAJBf|8ux2_Sfi(L zN#iOJ`+ZK!mo$Dywu=XLhMiBZYFg9XX zs?RC8(p+Xw6{QgEzl1BOsM>mGDZhSB-4{6g|3|}c!(&+QV4eRQ8*^zR@wO(ZEa3=`T&zvBr<`tdiV(RAXg zkl7mzv6e{uHcjqt7liLY$Nh1x+20&^vj?zZ3Bn%}3d5d)EgA0}2$L`}9?xmwdEm_) zu;LLM{K166u+b*J6$F^%1Wm@T2|2lL4p$1#$aQ(Um~~aJfNba*3K3^WTBN+`UwrcwYgZj5m&WrVh}e*W>*tF$b);iFoX1hD^NgLy?Sk0P%J~ z$MX*0XZH67c+O$nkX}Y#K4^kKCd=R38jauY@bGzm7&3nELP6g6?L;4E|1o6z{saYi zLr=gjNyheXD9Kye_$l~JYM#Jzkl4eM=lxtFf9#j$yvbOc_hrPJfs%I)rYJww1!I|a a4Xn6{hmm~e%>J0mq+cCDZgYYr: - - -# 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/initcode.d b/initcode.d deleted file mode 100644 index ab1af4d..0000000 --- a/initcode.d +++ /dev/null @@ -1 +0,0 @@ -initcode.o: initcode.S syscall.h traps.h diff --git a/initcode.o b/initcode.o deleted file mode 100644 index 0e6fa21e0e3aa4c0fa3fc558f9fb94215cb6c6b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1508 zcma)5yKWOf6uskhcm(;CAczRUD?}t-+64oWktj^Tqll0tL*dF<V-<- z3Zim@A6a2P@m5W@8+IGru&{>Wa1sy3QJC)bI!9?cnGM4zP2)73#M7)H9Q=AVh=Wev z^w~^Ik?j`yx=rsKgu~2xgH2tmnYD^n-YjpG*H;iFf6D>f6?U0(a?}1!>)DG}{^O3{ z2<|nt&!05^JUR0B&SB&f4E>kf0a>rRY;H$3;>npshK47rzxmwR5}xqzmhhy6(_NxU zHc>J>us>AdL!4}yMG4N=^5ij+A2m5sU!?{O{wwOcPCs;cGBj9JqQ>}|i(jBVD{{$c z-Ua%$KWLMey*5F5G|8gA1ZkGc^+>HG-V3t$Fq2>qWswB^G?jqCLEL{k?Cp)GF;WY= zhjsbArx zL%5!G{C``{cTZDx;OD_w;ueJU|EeP&T?5nh+os{5xjXRl{Mz8>BSwC_S<0^kn`>B4 ze1UL=f;q}dr#1c!2JexAHAEYdpSzE_?9I8{pU&NZt!rRP5zcuU4w~c1sm;^|9G`{* zdlFMfe(q`A6%10UjxUQUCw| diff --git a/initcode.out b/initcode.out deleted file mode 100644 index ee27f9d0b6a62faefa467291f8db2cb71b2b5e94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1136 zcmah|J#Q015S=~S0s=U85>BB_X~O$1M(BC{zi z#Ba+*SqS-8x&e5v^mD)}d~co0H7xJsgu&CT(B^dO`_Fikj&hM>W@*IY2<|M5{nT0@ zH8CNn_X-E%CL(v>=EyXqakXid7Ay7D`px=s4bf*|Usdk1!kAz6%LI0SgRF&Sky(ot zqw9!DSfm#2Qduy)Ufk>S;%EuQyz<*g;@Vw_$1WM!*zfkchyGr;|X49ebDo5$=M7bRdGPkel{U~+H(MT!7I6j-X@xLi&!FlpCr187e*--0O#~H9r z?Fgi$0(idU_kpu@U!c$4%~|fzT-{gb6}X!Ac#eQ_=DxvqNJ`V(8)$N#Pg{q0P|&b4 zN4F(vT@OM2C2CqnEPw5g`i#Ia*abNMAI_yw>IzV81)DZh0NIDeZ*sP78+9K-rdYJ@ E52p2ci~s-t diff --git a/ioapic.d b/ioapic.d deleted file mode 100644 index 997e68a..0000000 --- a/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/ioapic.o b/ioapic.o deleted file mode 100644 index 469e9b884f1b0ebe7c04933a0e398d13f88940b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5040 zcma)9YiwM_8J*dCXJdQ)*!3oU#4))xNgbfOiSsIU?8J!!BtVIq;E+IRyk6h67wp~5 z?%hBr5L(lyE7wvGpuUh&q_$F9sc!+IR0KjvRaz=4B>Ir3N{fV4ghGE*l|ZED%+A=G z_75Y?obPdF=9|ZznS1KGo3EEr3Y(;G#Ih#D#g?jPtA-7tL$q6}#_7iK{JV`aB)s$CrAwC< zGO-A&)s=`@#mkQW$}a7vw$To!a5$@`0D~K0VeT9>bWGkS?2PxD`eB z6%e?*o*BLWEgAM#}TZtqdk4;sXF@ zRqPLdl`K|?@EbJA@EwR`#U~-}{4t6x$nuFP*xIti<3jFizXO)gBcgpDY;vbpRo&20 zOvrh-1ozP%wTs^4ur)(%M3xySt0A-@iw@G?q_h`Vjw;PfK)wdKlUzi>t;9&gcah~2 ztW%d2_3Uy7@;2nU?38Gv;RrI$UFd<3frnt|qCsiHg*u-ZdmaQ=&f} zYJYkUKH^Zf?2jLm&+Lhew;$<|MIQox4GsI_*J9GbEh5t6(zzljcXg7l-Qm8@m~0J?bllg;R_nH!nmvhu$bK6_y;^Dy zMtmwUxxP6ban^RNW#uTMjG$ukU<5sav8!{a6Z^$Ph%croE}iB`r0Qos&4_S`&iGok z3AP-)yqQo3HocVlJBq~%wo9CKfV$tj%TmU7>ef3t28atjYQg^9E71M|`;0q5m6K|Dqxs3W7QAoi_4 z>y93hV^!1eggop{d|NsvK$60Z^oIJiFgz04q}!jDr=>i^>RLL8gTy_JX6eRmrBabj zQJ!@xu!6Y;MmpfqB@25tQoae<4$qB5+?HP9_9oro5#ioC;TDQ+aG&m~+Oqo2RHEq*C#fsy*DI8n09;d{#AKT(H69)Jqj}?zvH$Tf_2_+5SDN*buaG5qA2G| z+3B2*s~R`u^6f3k%epc9xzyyWFVck~T$$yH>6uhfOr?U9xZ##@Z?ykYUVndbOLCK! znA@@$MNrQ9!_$7wFJ{wFQ^oYmaCZB(+r7l}^wgx6H~>;6mrqQVv$H`qS5-;@*g+yS zn@yFnx#_AgKbH*>nPO_rPZaV9!Y^8KDt&jNP|OE@I>;MiA?w4NDxJ)wXNvh;zFbO_ zbN6I(Q;C4%D8X3@ST8-BD$Us1*?i8uUCbj3ZGw+5TJHPwo-M<2toW02QHB;s7Yf@QyS@H73N0q>!G0o!!t-5% zGzJXey>Zz1PZ&I7@Mi`u7<|JZXAdtLJu4DZ*Ge4|z&9k3PcexTyO#(uk9YF67#uXX z%b<=2e#S#y+Tdw}UpL6P<+#on{m%yfYVaRK^c&*6f_7FBp|2*c5aKFg7;|lKyTL(& zdx_xhCxSn2>_-jyM6`Ps5xj?t{b7TT7<}B|H;CYW$LQZP_){Y4KTSkGFB|)B48Css ze=`1ejQw4M|2F;)jK2YGaa_#?+YNRZTu(&4nuz`ejD6VP^#*S=I7URiorw6022UA8 zSNb0-YUaC_h;`>r0a5QW;C7?$Fv!cD?Rr4m8)Bb9ku05@!$ArRidCGkQqiAH2L8Q) zNa|Z5Iaw-+WHC>L?Ed6dsNhWbljZ4S*<2W>qmE1r1_ZE)A>1`!Xk;EP(O)FE1@rfYB&DOF@3{eoF6x>1rf`- zbYhJ_u6>(v&YAdaV`;<)GSg@AT}%LZ?yx@39e$@gXQ<iz(&61@mIL^ z7`E~za9C$EG81`LrcNIHqXq#w9ft91SaX}mVd5E3JC5ft4n9sf4(>BM4*j16-KO^t zD1R7jvf`aESed?G;+%Tkl4^X%Yh=3bM`s=dlWZGv&@YP*=Ox#G@nMTE#rF_oTL+?e z0_`zoo2>6K7_3a+Kf!ye#$d%W@YVMFTlCAhXTQ9S?7VynGV9RC^gAr#glz;mMdlwE zw7dj@&%kDr4DBJWrC!;1=-ydP4Y?uBVcoQ`|j)UoSn+a diff --git a/kalloc.d b/kalloc.d deleted file mode 100644 index 512c5db..0000000 --- a/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/kalloc.o b/kalloc.o deleted file mode 100644 index 865d558db37b2e2d32fe284b6c9fdc544634a575..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6744 zcmbtY3vg7`89wK}vSE{uWyyC3JP(g|J)-SB?`wBpF_b*AK>nGrP>3&0XWW0x1M_}iHdRMebd;&v}h1Gg2#AL`Fx;-jSP;O0JLQJY=CX$ttJ?GZ3O9C1PEGo zES?ghH=@9E48wOHWad4180HAIElfsfIR3)`Yecj=E%E{J2?N0WFy3c5g)Sk8kW zZ0YO-l+w&O3d&C(EL|BR$QOQEy@*~eD%^OBkcEZRj!C5B2(#GtAsBN%Vv&IWX(60n z;4!vAj+PT3HV=W5B_(UAGG~%0&0h(aW0sI9Q={gKag)fEn|}q^sFV;yTggsyo%$qQH9le@!@5Bf>jzcEe zw_%K$|IgsxM_2RvVUdSkOe-~iHMp@HcM6Zp{BjFOF0q(Gug5{~#gRvAn1XR6+Tm_RA)u z5eUfYqM+Zb99zktiXj?Rnv*up8=WZLkkLVD7Ww^|k}#+eWRAL&1`%6B1*6UtH5IFZnVL=*F5WM7tt*Gi zR|Rux9YQI5-iqpltm3NgkriC{iNgnn{7iCEZW?%J#>@KP&GOl0{-&~x{#*SUkZ$!= zG7g*)hNU;X5H)J|AS1zzYYX)u0EZ^6H_hLfa-H>0^OOZRWu3N+BOOX-iF>$#56A~4 zP+(|Ayke7FZ*AI4U1E;}y+`hswmSSX1{dT@hH=EQUNT-bj1-nnSeNBf6p{Q?k=W$Q z7!L{Ue#3u6IFkk|{o=xyW7dA7-+<$O^!o1qfx@;U~;)gjF>1B(8aEyJXuiJ}dpLxhcEQid8 z%}gv0nk4WstdEQf29h{!iV%FzYyr%18NE_e zNMM=JK~%~b(1xruM%s;_#9BT!@X^dij1Rj67XcFHTxr|E(RPV5GG&ihY}X3IGX8E? z6IyNC*>TbKIWTd49<+lX3O9nD2^rW8AlsB$ezn2Qcg*b#zMZ%O^njV*n8}UyG_%{6 zg8!gB%_)ZUV!KR&9BCI%w5Kh!i`UpiKeo$S?R-w>JZ={$yg$RY*;5tk+GRuu&)Zt< z8pli{upo#)gI!!>*O)sRY{yy3X@c|*i|vvc?VElb_=G%y!0PXDD_8S?8;-axTptxiN%_n$zFGkkPt;-?sBq zA#YWDzO&jM1HLQ_=j}*s3k%q@2g8c&{4Ee3&)OF{CAKdLeL8mtmnDC-(`pyMG=CvR zTn{%v!@wp;xE*dJiK}9yqoXS-x+C#eRPgfH5lf~-npZw`i^NSb=|YfnH^XkLh(|hI zk&Y*0ZE?3H6m5?rhByxDNv0x+l!!#{O2-neNVaz+QlYFpEz}tLa$7{^x~d$nT-y{{ zUVm+J)^#VkQf@TWrG?!w z7ura2M?Bh|=!$oxlXdC%wphHSE){9+aFb9XPmGIpM3U{^=vY@=B)emAl}`_EuPkUH z5^r-wEFMcK`BqZ(LcweicekU^Y7N3sF|*TciA826TQ{%YkzAMPYMU8JCf#JR(~YNQ z{}*l6NtW1e!?dW!iV&(GX3q!R{&FOe5tt(zvpH^)Bw`R`{&zdt;i*W#q z<|%+Ccit@IH+^z!frZb55Hld-iN(enq*z+y+iNTyjf$5Mt=GX{D%96<_{5Z zXW{Q>BY>Mb5jU`@NP##HNI$m|VaK050PW^#Sl>Ro+^_K=BKjl5JRu&_^2aqkt?@aHFA!n(s^;I&_%;#!T_WQ8z2-mB{J%8jVehFt zHI61iS3!i|sajsAah}G78W$5`ccbRlX#5%xes0&eMdNO*->dOHjSp!29+Bg?Kd^66 z8r=9ZX949C$zy-c&{(gL=M3f7XLxqJ-J$Z(s^N` zgY1ZiI-(%T3`)e?t}^L}#a&O2DLs*M*m7qmA9q__kAYDnnj>D2k{34wcIH~CBQ{SI`w^VVYC z`H(RWyw2HqPlBdzt{>ZD1^Bbhn+!Zj_8)5W?B>D=bMu;K_W}f@J-bI?$1}ofp53bu zkoMYH29?u1-8slednx`Bb|2)}v3_j7LeI_jPUKq)8S~{`igsMbTwh?tv-nnbLx}&e k)PAKM*N47xwxy`Wdvph6Ui0FEc$nP*%=;(L2 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 l0pib@ygQK}y&uY@*E~cP26&})5dVQs>A>Q diff --git a/kernel b/kernel deleted file mode 100644 index 2e6eb676a4c0cc6a8513220de4c191342c25b639..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 205296 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 PIK9DnJSvI*vGx83=+;uI diff --git a/kernel.asm b/kernel.asm deleted file mode 100644 index 57b96ee..0000000 --- a/kernel.asm +++ /dev/null @@ -1,15968 +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 .byte 0xe4 - -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 90 10 00 mov $0x109000,%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 f0 54 11 80 mov $0x801154f0,%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 80 31 10 80 mov $0x80103180,%eax - jmp *%eax -80100032: ff e0 jmp *%eax -80100034: 66 90 xchg %ax,%ax -80100036: 66 90 xchg %ax,%ax -80100038: 66 90 xchg %ax,%ax -8010003a: 66 90 xchg %ax,%ax -8010003c: 66 90 xchg %ax,%ax -8010003e: 66 90 xchg %ax,%ax - -80100040 : - // Linked list of all buffers, through prev/next. - // head.next is most recently used. - struct buf head; -} bcache; - -void binit(void) { -80100040: 55 push %ebp -80100041: 89 e5 mov %esp,%ebp -80100043: 53 push %ebx - initlock(&bcache.lock, "bcache"); - - // Create linked list of buffers - bcache.head.prev = &bcache.head; - bcache.head.next = &bcache.head; - for (b = bcache.buf; b < bcache.buf + NBUF; b++) { -80100044: bb 54 a5 10 80 mov $0x8010a554,%ebx -void binit(void) { -80100049: 83 ec 0c sub $0xc,%esp - initlock(&bcache.lock, "bcache"); -8010004c: 68 e0 73 10 80 push $0x801073e0 -80100051: 68 20 a5 10 80 push $0x8010a520 -80100056: e8 d5 44 00 00 call 80104530 - bcache.head.next = &bcache.head; -8010005b: 83 c4 10 add $0x10,%esp -8010005e: b8 1c ec 10 80 mov $0x8010ec1c,%eax - bcache.head.prev = &bcache.head; -80100063: c7 05 6c ec 10 80 1c movl $0x8010ec1c,0x8010ec6c -8010006a: ec 10 80 - bcache.head.next = &bcache.head; -8010006d: c7 05 70 ec 10 80 1c movl $0x8010ec1c,0x8010ec70 -80100074: ec 10 80 - for (b = bcache.buf; b < bcache.buf + NBUF; b++) { -80100077: eb 09 jmp 80100082 -80100079: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80100080: 89 d3 mov %edx,%ebx - b->next = bcache.head.next; -80100082: 89 43 54 mov %eax,0x54(%ebx) - b->prev = &bcache.head; - initsleeplock(&b->lock, "buffer"); -80100085: 83 ec 08 sub $0x8,%esp -80100088: 8d 43 0c lea 0xc(%ebx),%eax - b->prev = &bcache.head; -8010008b: c7 43 50 1c ec 10 80 movl $0x8010ec1c,0x50(%ebx) - initsleeplock(&b->lock, "buffer"); -80100092: 68 e7 73 10 80 push $0x801073e7 -80100097: 50 push %eax -80100098: e8 63 43 00 00 call 80104400 - bcache.head.next->prev = b; -8010009d: a1 70 ec 10 80 mov 0x8010ec70,%eax - for (b = bcache.buf; b < bcache.buf + NBUF; b++) { -801000a2: 8d 93 5c 02 00 00 lea 0x25c(%ebx),%edx -801000a8: 83 c4 10 add $0x10,%esp - bcache.head.next->prev = b; -801000ab: 89 58 50 mov %ebx,0x50(%eax) - bcache.head.next = b; -801000ae: 89 d8 mov %ebx,%eax -801000b0: 89 1d 70 ec 10 80 mov %ebx,0x8010ec70 - for (b = bcache.buf; b < bcache.buf + NBUF; b++) { -801000b6: 81 fb c0 e9 10 80 cmp $0x8010e9c0,%ebx -801000bc: 75 c2 jne 80100080 - } -} -801000be: 8b 5d fc mov -0x4(%ebp),%ebx -801000c1: c9 leave -801000c2: c3 ret -801000c3: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801000ca: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -801000d0 : - panic("bget: no buffers"); -} - -// Return a locked buf with the contents of the indicated block. - -struct buf*bread(uint dev, uint blockno) { -801000d0: 55 push %ebp -801000d1: 89 e5 mov %esp,%ebp -801000d3: 57 push %edi -801000d4: 56 push %esi -801000d5: 53 push %ebx -801000d6: 83 ec 18 sub $0x18,%esp -801000d9: 8b 75 08 mov 0x8(%ebp),%esi -801000dc: 8b 7d 0c mov 0xc(%ebp),%edi - acquire(&bcache.lock); -801000df: 68 20 a5 10 80 push $0x8010a520 -801000e4: e8 17 46 00 00 call 80104700 - for (b = bcache.head.next; b != &bcache.head; b = b->next) { -801000e9: 8b 1d 70 ec 10 80 mov 0x8010ec70,%ebx -801000ef: 83 c4 10 add $0x10,%esp -801000f2: 81 fb 1c ec 10 80 cmp $0x8010ec1c,%ebx -801000f8: 75 11 jne 8010010b -801000fa: eb 24 jmp 80100120 -801000fc: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -80100100: 8b 5b 54 mov 0x54(%ebx),%ebx -80100103: 81 fb 1c ec 10 80 cmp $0x8010ec1c,%ebx -80100109: 74 15 je 80100120 - if (b->dev == dev && b->blockno == blockno) { -8010010b: 3b 73 04 cmp 0x4(%ebx),%esi -8010010e: 75 f0 jne 80100100 -80100110: 3b 7b 08 cmp 0x8(%ebx),%edi -80100113: 75 eb jne 80100100 - b->refcnt++; -80100115: 83 43 4c 01 addl $0x1,0x4c(%ebx) - release(&bcache.lock); -80100119: eb 3f jmp 8010015a -8010011b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -8010011f: 90 nop - for (b = bcache.head.prev; b != &bcache.head; b = b->prev) { -80100120: 8b 1d 6c ec 10 80 mov 0x8010ec6c,%ebx -80100126: 81 fb 1c ec 10 80 cmp $0x8010ec1c,%ebx -8010012c: 75 0d jne 8010013b -8010012e: eb 6e jmp 8010019e -80100130: 8b 5b 50 mov 0x50(%ebx),%ebx -80100133: 81 fb 1c ec 10 80 cmp $0x8010ec1c,%ebx -80100139: 74 63 je 8010019e - if (b->refcnt == 0 && (b->flags & B_DIRTY) == 0) { -8010013b: 8b 43 4c mov 0x4c(%ebx),%eax -8010013e: 85 c0 test %eax,%eax -80100140: 75 ee jne 80100130 -80100142: f6 03 04 testb $0x4,(%ebx) -80100145: 75 e9 jne 80100130 - b->dev = dev; -80100147: 89 73 04 mov %esi,0x4(%ebx) - b->blockno = blockno; -8010014a: 89 7b 08 mov %edi,0x8(%ebx) - b->flags = 0; -8010014d: c7 03 00 00 00 00 movl $0x0,(%ebx) - b->refcnt = 1; -80100153: c7 43 4c 01 00 00 00 movl $0x1,0x4c(%ebx) - release(&bcache.lock); -8010015a: 83 ec 0c sub $0xc,%esp -8010015d: 68 20 a5 10 80 push $0x8010a520 -80100162: e8 39 45 00 00 call 801046a0 - acquiresleep(&b->lock); -80100167: 8d 43 0c lea 0xc(%ebx),%eax -8010016a: 89 04 24 mov %eax,(%esp) -8010016d: e8 ce 42 00 00 call 80104440 - return b; -80100172: 83 c4 10 add $0x10,%esp - struct buf *b; - - b = bget(dev, blockno); - if ((b->flags & B_VALID) == 0) { -80100175: f6 03 02 testb $0x2,(%ebx) -80100178: 74 0e je 80100188 - iderw(b); - } - return b; -} -8010017a: 8d 65 f4 lea -0xc(%ebp),%esp -8010017d: 89 d8 mov %ebx,%eax -8010017f: 5b pop %ebx -80100180: 5e pop %esi -80100181: 5f pop %edi -80100182: 5d pop %ebp -80100183: c3 ret -80100184: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - iderw(b); -80100188: 83 ec 0c sub $0xc,%esp -8010018b: 53 push %ebx -8010018c: e8 6f 22 00 00 call 80102400 -80100191: 83 c4 10 add $0x10,%esp -} -80100194: 8d 65 f4 lea -0xc(%ebp),%esp -80100197: 89 d8 mov %ebx,%eax -80100199: 5b pop %ebx -8010019a: 5e pop %esi -8010019b: 5f pop %edi -8010019c: 5d pop %ebp -8010019d: c3 ret - panic("bget: no buffers"); -8010019e: 83 ec 0c sub $0xc,%esp -801001a1: 68 ee 73 10 80 push $0x801073ee -801001a6: e8 e5 01 00 00 call 80100390 -801001ab: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -801001af: 90 nop - -801001b0 : - -// Write b's contents to disk. Must be locked. - -void bwrite(struct buf *b) { -801001b0: 55 push %ebp -801001b1: 89 e5 mov %esp,%ebp -801001b3: 53 push %ebx -801001b4: 83 ec 10 sub $0x10,%esp -801001b7: 8b 5d 08 mov 0x8(%ebp),%ebx - if (!holdingsleep(&b->lock)) { -801001ba: 8d 43 0c lea 0xc(%ebx),%eax -801001bd: 50 push %eax -801001be: e8 1d 43 00 00 call 801044e0 -801001c3: 83 c4 10 add $0x10,%esp -801001c6: 85 c0 test %eax,%eax -801001c8: 74 0f je 801001d9 - panic("bwrite"); - } - b->flags |= B_DIRTY; -801001ca: 83 0b 04 orl $0x4,(%ebx) - iderw(b); -801001cd: 89 5d 08 mov %ebx,0x8(%ebp) -} -801001d0: 8b 5d fc mov -0x4(%ebp),%ebx -801001d3: c9 leave - iderw(b); -801001d4: e9 27 22 00 00 jmp 80102400 - panic("bwrite"); -801001d9: 83 ec 0c sub $0xc,%esp -801001dc: 68 ff 73 10 80 push $0x801073ff -801001e1: e8 aa 01 00 00 call 80100390 -801001e6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801001ed: 8d 76 00 lea 0x0(%esi),%esi - -801001f0 : - -// Release a locked buffer. -// Move to the head of the MRU list. - -void brelse(struct buf *b) { -801001f0: 55 push %ebp -801001f1: 89 e5 mov %esp,%ebp -801001f3: 56 push %esi -801001f4: 53 push %ebx -801001f5: 8b 5d 08 mov 0x8(%ebp),%ebx - if (!holdingsleep(&b->lock)) { -801001f8: 8d 73 0c lea 0xc(%ebx),%esi -801001fb: 83 ec 0c sub $0xc,%esp -801001fe: 56 push %esi -801001ff: e8 dc 42 00 00 call 801044e0 -80100204: 83 c4 10 add $0x10,%esp -80100207: 85 c0 test %eax,%eax -80100209: 74 66 je 80100271 - panic("brelse"); - } - - releasesleep(&b->lock); -8010020b: 83 ec 0c sub $0xc,%esp -8010020e: 56 push %esi -8010020f: e8 8c 42 00 00 call 801044a0 - - acquire(&bcache.lock); -80100214: c7 04 24 20 a5 10 80 movl $0x8010a520,(%esp) -8010021b: e8 e0 44 00 00 call 80104700 - b->refcnt--; -80100220: 8b 43 4c mov 0x4c(%ebx),%eax - if (b->refcnt == 0) { -80100223: 83 c4 10 add $0x10,%esp - b->refcnt--; -80100226: 83 e8 01 sub $0x1,%eax -80100229: 89 43 4c mov %eax,0x4c(%ebx) - if (b->refcnt == 0) { -8010022c: 85 c0 test %eax,%eax -8010022e: 75 2f jne 8010025f - // no one is waiting for it. - b->next->prev = b->prev; -80100230: 8b 43 54 mov 0x54(%ebx),%eax -80100233: 8b 53 50 mov 0x50(%ebx),%edx -80100236: 89 50 50 mov %edx,0x50(%eax) - b->prev->next = b->next; -80100239: 8b 43 50 mov 0x50(%ebx),%eax -8010023c: 8b 53 54 mov 0x54(%ebx),%edx -8010023f: 89 50 54 mov %edx,0x54(%eax) - b->next = bcache.head.next; -80100242: a1 70 ec 10 80 mov 0x8010ec70,%eax - b->prev = &bcache.head; -80100247: c7 43 50 1c ec 10 80 movl $0x8010ec1c,0x50(%ebx) - b->next = bcache.head.next; -8010024e: 89 43 54 mov %eax,0x54(%ebx) - bcache.head.next->prev = b; -80100251: a1 70 ec 10 80 mov 0x8010ec70,%eax -80100256: 89 58 50 mov %ebx,0x50(%eax) - bcache.head.next = b; -80100259: 89 1d 70 ec 10 80 mov %ebx,0x8010ec70 - } - - release(&bcache.lock); -8010025f: c7 45 08 20 a5 10 80 movl $0x8010a520,0x8(%ebp) -} -80100266: 8d 65 f8 lea -0x8(%ebp),%esp -80100269: 5b pop %ebx -8010026a: 5e pop %esi -8010026b: 5d pop %ebp - release(&bcache.lock); -8010026c: e9 2f 44 00 00 jmp 801046a0 - panic("brelse"); -80100271: 83 ec 0c sub $0xc,%esp -80100274: 68 06 74 10 80 push $0x80107406 -80100279: e8 12 01 00 00 call 80100390 -8010027e: 66 90 xchg %ax,%ax - -80100280 : - if (doprocdump) { - procdump(); // now call procdump() wo. cons.lock held - } -} - -int consoleread(struct inode *ip, char *dst, int n) { -80100280: 55 push %ebp -80100281: 89 e5 mov %esp,%ebp -80100283: 57 push %edi -80100284: 56 push %esi -80100285: 53 push %ebx -80100286: 83 ec 28 sub $0x28,%esp -80100289: 8b 5d 10 mov 0x10(%ebp),%ebx -8010028c: 8b 75 0c mov 0xc(%ebp),%esi - uint target; - int c; - - iunlock(ip); -8010028f: ff 75 08 push 0x8(%ebp) -80100292: e8 e9 16 00 00 call 80101980 - target = n; - acquire(&cons.lock); -80100297: c7 04 24 40 ef 10 80 movl $0x8010ef40,(%esp) - target = n; -8010029e: 89 5d e4 mov %ebx,-0x1c(%ebp) - acquire(&cons.lock); -801002a1: e8 5a 44 00 00 call 80104700 - while (n > 0) { -801002a6: 83 c4 10 add $0x10,%esp -801002a9: 85 db test %ebx,%ebx -801002ab: 0f 8e aa 00 00 00 jle 8010035b - while (input->r == input->w) { -801002b1: a1 80 ee 10 80 mov 0x8010ee80,%eax -801002b6: 8b 90 80 00 00 00 mov 0x80(%eax),%edx -801002bc: 3b 90 84 00 00 00 cmp 0x84(%eax),%edx -801002c2: 74 38 je 801002fc -801002c4: eb 6a jmp 80100330 -801002c6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801002cd: 8d 76 00 lea 0x0(%esi),%esi - if (myproc()->killed) { - release(&cons.lock); - ilock(ip); - return -1; - } - sleep(&(input->r), &cons.lock); -801002d0: a1 80 ee 10 80 mov 0x8010ee80,%eax -801002d5: 83 ec 08 sub $0x8,%esp -801002d8: 68 40 ef 10 80 push $0x8010ef40 -801002dd: 83 e8 80 sub $0xffffff80,%eax -801002e0: 50 push %eax -801002e1: e8 ba 3e 00 00 call 801041a0 - while (input->r == input->w) { -801002e6: a1 80 ee 10 80 mov 0x8010ee80,%eax -801002eb: 83 c4 10 add $0x10,%esp -801002ee: 8b 90 80 00 00 00 mov 0x80(%eax),%edx -801002f4: 3b 90 84 00 00 00 cmp 0x84(%eax),%edx -801002fa: 75 34 jne 80100330 - if (myproc()->killed) { -801002fc: e8 cf 37 00 00 call 80103ad0 -80100301: 8b 48 24 mov 0x24(%eax),%ecx -80100304: 85 c9 test %ecx,%ecx -80100306: 74 c8 je 801002d0 - release(&cons.lock); -80100308: 83 ec 0c sub $0xc,%esp -8010030b: 68 40 ef 10 80 push $0x8010ef40 -80100310: e8 8b 43 00 00 call 801046a0 - ilock(ip); -80100315: 5a pop %edx -80100316: ff 75 08 push 0x8(%ebp) -80100319: e8 82 15 00 00 call 801018a0 - return -1; -8010031e: 83 c4 10 add $0x10,%esp - } - release(&cons.lock); - ilock(ip); - - return target - n; -} -80100321: 8d 65 f4 lea -0xc(%ebp),%esp - return -1; -80100324: b8 ff ff ff ff mov $0xffffffff,%eax -} -80100329: 5b pop %ebx -8010032a: 5e pop %esi -8010032b: 5f pop %edi -8010032c: 5d pop %ebp -8010032d: c3 ret -8010032e: 66 90 xchg %ax,%ax - c = input->buf[input->r++ % INPUT_BUF]; -80100330: 8d 4a 01 lea 0x1(%edx),%ecx -80100333: 89 88 80 00 00 00 mov %ecx,0x80(%eax) -80100339: 89 d1 mov %edx,%ecx -8010033b: 83 e1 7f and $0x7f,%ecx -8010033e: 0f be 3c 08 movsbl (%eax,%ecx,1),%edi -80100342: 89 f9 mov %edi,%ecx - if (c == C('D')) { // EOF -80100344: 80 f9 04 cmp $0x4,%cl -80100347: 74 38 je 80100381 - *dst++ = c; -80100349: 83 c6 01 add $0x1,%esi - --n; -8010034c: 83 eb 01 sub $0x1,%ebx - *dst++ = c; -8010034f: 88 4e ff mov %cl,-0x1(%esi) - if (c == '\n') { -80100352: 83 ff 0a cmp $0xa,%edi -80100355: 0f 85 4e ff ff ff jne 801002a9 - release(&cons.lock); -8010035b: 83 ec 0c sub $0xc,%esp -8010035e: 68 40 ef 10 80 push $0x8010ef40 -80100363: e8 38 43 00 00 call 801046a0 - ilock(ip); -80100368: 58 pop %eax -80100369: ff 75 08 push 0x8(%ebp) -8010036c: e8 2f 15 00 00 call 801018a0 - return target - n; -80100371: 8b 45 e4 mov -0x1c(%ebp),%eax -80100374: 83 c4 10 add $0x10,%esp -} -80100377: 8d 65 f4 lea -0xc(%ebp),%esp - return target - n; -8010037a: 29 d8 sub %ebx,%eax -} -8010037c: 5b pop %ebx -8010037d: 5e pop %esi -8010037e: 5f pop %edi -8010037f: 5d pop %ebp -80100380: c3 ret - if (n < target) { -80100381: 3b 5d e4 cmp -0x1c(%ebp),%ebx -80100384: 73 d5 jae 8010035b - input->r--; -80100386: 89 90 80 00 00 00 mov %edx,0x80(%eax) -8010038c: eb cd jmp 8010035b -8010038e: 66 90 xchg %ax,%ax - -80100390 : -void panic(char *s) { -80100390: 55 push %ebp -80100391: 89 e5 mov %esp,%ebp -80100393: 56 push %esi -80100394: 53 push %ebx -80100395: 83 ec 30 sub $0x30,%esp -static inline void loadgs(ushort v) { - asm volatile ("movw %0, %%gs" : : "r" (v)); -} - -static inline void cli(void) { - asm volatile ("cli"); -80100398: fa cli - cons.locking = 0; -80100399: c7 05 74 ef 10 80 00 movl $0x0,0x8010ef74 -801003a0: 00 00 00 - getcallerpcs(&s, pcs); -801003a3: 8d 5d d0 lea -0x30(%ebp),%ebx -801003a6: 8d 75 f8 lea -0x8(%ebp),%esi - cprintf("lapicid %d: panic: ", lapicid()); -801003a9: e8 62 26 00 00 call 80102a10 -801003ae: 83 ec 08 sub $0x8,%esp -801003b1: 50 push %eax -801003b2: 68 0d 74 10 80 push $0x8010740d -801003b7: e8 f4 02 00 00 call 801006b0 - cprintf(s); -801003bc: 58 pop %eax -801003bd: ff 75 08 push 0x8(%ebp) -801003c0: e8 eb 02 00 00 call 801006b0 - cprintf("\n"); -801003c5: c7 04 24 4f 7d 10 80 movl $0x80107d4f,(%esp) -801003cc: e8 df 02 00 00 call 801006b0 - getcallerpcs(&s, pcs); -801003d1: 8d 45 08 lea 0x8(%ebp),%eax -801003d4: 5a pop %edx -801003d5: 59 pop %ecx -801003d6: 53 push %ebx -801003d7: 50 push %eax -801003d8: e8 73 41 00 00 call 80104550 - for (i = 0; i < 10; i++) { -801003dd: 83 c4 10 add $0x10,%esp - cprintf(" %p", pcs[i]); -801003e0: 83 ec 08 sub $0x8,%esp -801003e3: ff 33 push (%ebx) - for (i = 0; i < 10; i++) { -801003e5: 83 c3 04 add $0x4,%ebx - cprintf(" %p", pcs[i]); -801003e8: 68 21 74 10 80 push $0x80107421 -801003ed: e8 be 02 00 00 call 801006b0 - for (i = 0; i < 10; i++) { -801003f2: 83 c4 10 add $0x10,%esp -801003f5: 39 f3 cmp %esi,%ebx -801003f7: 75 e7 jne 801003e0 - panicked = 1; // freeze other CPU -801003f9: c7 05 78 ef 10 80 01 movl $0x1,0x8010ef78 -80100400: 00 00 00 - for (;;) { -80100403: eb fe jmp 80100403 -80100405: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010040c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -80100410 : -void consputc(int c) { -80100410: 55 push %ebp -80100411: 89 e5 mov %esp,%ebp -80100413: 57 push %edi -80100414: 56 push %esi -80100415: 53 push %ebx -80100416: 89 c3 mov %eax,%ebx -80100418: 83 ec 1c sub $0x1c,%esp - if (c == BACKSPACE) { -8010041b: 3d 00 01 00 00 cmp $0x100,%eax -80100420: 0f 84 ea 00 00 00 je 80100510 - uartputc(c); -80100426: 83 ec 0c sub $0xc,%esp -80100429: 50 push %eax -8010042a: e8 a1 5a 00 00 call 80105ed0 -8010042f: 83 c4 10 add $0x10,%esp - asm volatile ("out %0,%1" : : "a" (data), "d" (port)); -80100432: bf d4 03 00 00 mov $0x3d4,%edi -80100437: b8 0e 00 00 00 mov $0xe,%eax -8010043c: 89 fa mov %edi,%edx -8010043e: ee out %al,(%dx) - asm volatile ("in %1,%0" : "=a" (data) : "d" (port)); -8010043f: be d5 03 00 00 mov $0x3d5,%esi -80100444: 89 f2 mov %esi,%edx -80100446: ec in (%dx),%al - pos = inb(CRTPORT + 1) << 8; -80100447: 0f b6 c8 movzbl %al,%ecx - asm volatile ("out %0,%1" : : "a" (data), "d" (port)); -8010044a: 89 fa mov %edi,%edx -8010044c: b8 0f 00 00 00 mov $0xf,%eax -80100451: c1 e1 08 shl $0x8,%ecx -80100454: ee out %al,(%dx) - asm volatile ("in %1,%0" : "=a" (data) : "d" (port)); -80100455: 89 f2 mov %esi,%edx -80100457: ec in (%dx),%al - pos |= inb(CRTPORT + 1); -80100458: 0f b6 c0 movzbl %al,%eax -8010045b: 09 c8 or %ecx,%eax - if (c == '\n') { -8010045d: 83 fb 0a cmp $0xa,%ebx -80100460: 0f 84 92 00 00 00 je 801004f8 - else if (c == BACKSPACE) { -80100466: 81 fb 00 01 00 00 cmp $0x100,%ebx -8010046c: 74 72 je 801004e0 - crt[pos++] = (c & 0xff) | 0x0700; // black on white -8010046e: 0f b6 db movzbl %bl,%ebx -80100471: 8d 70 01 lea 0x1(%eax),%esi -80100474: 80 cf 07 or $0x7,%bh -80100477: 66 89 9c 00 00 80 0b mov %bx,-0x7ff48000(%eax,%eax,1) -8010047e: 80 - if (pos < 0 || pos > 25 * 80) { -8010047f: 81 fe d0 07 00 00 cmp $0x7d0,%esi -80100485: 0f 8f fb 00 00 00 jg 80100586 - if ((pos / 80) >= 24) { // Scroll up. -8010048b: 81 fe 7f 07 00 00 cmp $0x77f,%esi -80100491: 0f 8f a9 00 00 00 jg 80100540 - outb(CRTPORT + 1, pos >> 8); -80100497: 89 f0 mov %esi,%eax - crt[pos] = ' ' | 0x0700; -80100499: 8d b4 36 00 80 0b 80 lea -0x7ff48000(%esi,%esi,1),%esi - outb(CRTPORT + 1, pos); -801004a0: 88 45 e7 mov %al,-0x19(%ebp) - outb(CRTPORT + 1, pos >> 8); -801004a3: 0f b6 fc movzbl %ah,%edi - asm volatile ("out %0,%1" : : "a" (data), "d" (port)); -801004a6: bb d4 03 00 00 mov $0x3d4,%ebx -801004ab: b8 0e 00 00 00 mov $0xe,%eax -801004b0: 89 da mov %ebx,%edx -801004b2: ee out %al,(%dx) -801004b3: b9 d5 03 00 00 mov $0x3d5,%ecx -801004b8: 89 f8 mov %edi,%eax -801004ba: 89 ca mov %ecx,%edx -801004bc: ee out %al,(%dx) -801004bd: b8 0f 00 00 00 mov $0xf,%eax -801004c2: 89 da mov %ebx,%edx -801004c4: ee out %al,(%dx) -801004c5: 0f b6 45 e7 movzbl -0x19(%ebp),%eax -801004c9: 89 ca mov %ecx,%edx -801004cb: ee out %al,(%dx) - crt[pos] = ' ' | 0x0700; -801004cc: b8 20 07 00 00 mov $0x720,%eax -801004d1: 66 89 06 mov %ax,(%esi) -} -801004d4: 8d 65 f4 lea -0xc(%ebp),%esp -801004d7: 5b pop %ebx -801004d8: 5e pop %esi -801004d9: 5f pop %edi -801004da: 5d pop %ebp -801004db: c3 ret -801004dc: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - --pos; -801004e0: 8d 70 ff lea -0x1(%eax),%esi - if (pos > 0) { -801004e3: 85 c0 test %eax,%eax -801004e5: 75 98 jne 8010047f -801004e7: c6 45 e7 00 movb $0x0,-0x19(%ebp) -801004eb: be 00 80 0b 80 mov $0x800b8000,%esi -801004f0: 31 ff xor %edi,%edi -801004f2: eb b2 jmp 801004a6 -801004f4: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - pos += 80 - pos % 80; -801004f8: ba cd cc cc cc mov $0xcccccccd,%edx -801004fd: f7 e2 mul %edx -801004ff: c1 ea 06 shr $0x6,%edx -80100502: 8d 04 92 lea (%edx,%edx,4),%eax -80100505: c1 e0 04 shl $0x4,%eax -80100508: 8d 70 50 lea 0x50(%eax),%esi -8010050b: e9 6f ff ff ff jmp 8010047f - uartputc('\b'); -80100510: 83 ec 0c sub $0xc,%esp -80100513: 6a 08 push $0x8 -80100515: e8 b6 59 00 00 call 80105ed0 - uartputc(' '); -8010051a: c7 04 24 20 00 00 00 movl $0x20,(%esp) -80100521: e8 aa 59 00 00 call 80105ed0 - uartputc('\b'); -80100526: c7 04 24 08 00 00 00 movl $0x8,(%esp) -8010052d: e8 9e 59 00 00 call 80105ed0 -80100532: 83 c4 10 add $0x10,%esp -80100535: e9 f8 fe ff ff jmp 80100432 -8010053a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - memmove(crt, crt + 80, sizeof(crt[0]) * 23 * 80); -80100540: 83 ec 04 sub $0x4,%esp - pos -= 80; -80100543: 8d 5e b0 lea -0x50(%esi),%ebx - memset(crt + pos, 0, sizeof(crt[0]) * (24 * 80 - pos)); -80100546: 8d b4 36 60 7f 0b 80 lea -0x7ff480a0(%esi,%esi,1),%esi - outb(CRTPORT + 1, pos); -8010054d: bf 07 00 00 00 mov $0x7,%edi - memmove(crt, crt + 80, sizeof(crt[0]) * 23 * 80); -80100552: 68 60 0e 00 00 push $0xe60 -80100557: 68 a0 80 0b 80 push $0x800b80a0 -8010055c: 68 00 80 0b 80 push $0x800b8000 -80100561: e8 fa 42 00 00 call 80104860 - memset(crt + pos, 0, sizeof(crt[0]) * (24 * 80 - pos)); -80100566: b8 80 07 00 00 mov $0x780,%eax -8010056b: 83 c4 0c add $0xc,%esp -8010056e: 29 d8 sub %ebx,%eax -80100570: 01 c0 add %eax,%eax -80100572: 50 push %eax -80100573: 6a 00 push $0x0 -80100575: 56 push %esi -80100576: e8 45 42 00 00 call 801047c0 - outb(CRTPORT + 1, pos); -8010057b: 88 5d e7 mov %bl,-0x19(%ebp) -8010057e: 83 c4 10 add $0x10,%esp -80100581: e9 20 ff ff ff jmp 801004a6 - panic("pos under/overflow"); -80100586: 83 ec 0c sub $0xc,%esp -80100589: 68 25 74 10 80 push $0x80107425 -8010058e: e8 fd fd ff ff call 80100390 -80100593: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010059a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -801005a0 : - -int consolewrite(struct inode *ip, char *buf, int n) { -801005a0: 55 push %ebp -801005a1: 89 e5 mov %esp,%ebp -801005a3: 57 push %edi -801005a4: 56 push %esi -801005a5: 53 push %ebx -801005a6: 83 ec 18 sub $0x18,%esp - int i; - - iunlock(ip); -801005a9: ff 75 08 push 0x8(%ebp) -int consolewrite(struct inode *ip, char *buf, int n) { -801005ac: 8b 75 10 mov 0x10(%ebp),%esi - iunlock(ip); -801005af: e8 cc 13 00 00 call 80101980 - acquire(&cons.lock); -801005b4: c7 04 24 40 ef 10 80 movl $0x8010ef40,(%esp) -801005bb: e8 40 41 00 00 call 80104700 - for (i = 0; i < n; i++) { -801005c0: 83 c4 10 add $0x10,%esp -801005c3: 85 f6 test %esi,%esi -801005c5: 7e 25 jle 801005ec -801005c7: 8b 5d 0c mov 0xc(%ebp),%ebx -801005ca: 8d 3c 33 lea (%ebx,%esi,1),%edi - if (panicked) { -801005cd: 8b 15 78 ef 10 80 mov 0x8010ef78,%edx - consputc(buf[i] & 0xff); -801005d3: 0f b6 03 movzbl (%ebx),%eax - if (panicked) { -801005d6: 85 d2 test %edx,%edx -801005d8: 74 06 je 801005e0 - asm volatile ("cli"); -801005da: fa cli - for (;;) { -801005db: eb fe jmp 801005db -801005dd: 8d 76 00 lea 0x0(%esi),%esi -801005e0: e8 2b fe ff ff call 80100410 - for (i = 0; i < n; i++) { -801005e5: 83 c3 01 add $0x1,%ebx -801005e8: 39 df cmp %ebx,%edi -801005ea: 75 e1 jne 801005cd - } - release(&cons.lock); -801005ec: 83 ec 0c sub $0xc,%esp -801005ef: 68 40 ef 10 80 push $0x8010ef40 -801005f4: e8 a7 40 00 00 call 801046a0 - ilock(ip); -801005f9: 58 pop %eax -801005fa: ff 75 08 push 0x8(%ebp) -801005fd: e8 9e 12 00 00 call 801018a0 - - return n; -} -80100602: 8d 65 f4 lea -0xc(%ebp),%esp -80100605: 89 f0 mov %esi,%eax -80100607: 5b pop %ebx -80100608: 5e pop %esi -80100609: 5f pop %edi -8010060a: 5d pop %ebp -8010060b: c3 ret -8010060c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -80100610 : -static void printint(int xx, int base, int sign) { -80100610: 55 push %ebp -80100611: 89 e5 mov %esp,%ebp -80100613: 57 push %edi -80100614: 56 push %esi -80100615: 53 push %ebx -80100616: 83 ec 2c sub $0x2c,%esp -80100619: 89 55 d4 mov %edx,-0x2c(%ebp) -8010061c: 89 4d d0 mov %ecx,-0x30(%ebp) - if (sign && (sign = xx < 0)) { -8010061f: 85 c9 test %ecx,%ecx -80100621: 74 04 je 80100627 -80100623: 85 c0 test %eax,%eax -80100625: 78 6d js 80100694 - x = xx; -80100627: c7 45 d0 00 00 00 00 movl $0x0,-0x30(%ebp) -8010062e: 89 c1 mov %eax,%ecx - i = 0; -80100630: 31 db xor %ebx,%ebx -80100632: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - buf[i++] = digits[x % base]; -80100638: 89 c8 mov %ecx,%eax -8010063a: 31 d2 xor %edx,%edx -8010063c: 89 de mov %ebx,%esi -8010063e: 89 cf mov %ecx,%edi -80100640: f7 75 d4 divl -0x2c(%ebp) -80100643: 8d 5b 01 lea 0x1(%ebx),%ebx -80100646: 0f b6 92 50 74 10 80 movzbl -0x7fef8bb0(%edx),%edx - while ((x /= base) != 0); -8010064d: 89 c1 mov %eax,%ecx - buf[i++] = digits[x % base]; -8010064f: 88 54 1d d7 mov %dl,-0x29(%ebp,%ebx,1) - while ((x /= base) != 0); -80100653: 3b 7d d4 cmp -0x2c(%ebp),%edi -80100656: 73 e0 jae 80100638 - if (sign) { -80100658: 8b 4d d0 mov -0x30(%ebp),%ecx -8010065b: 85 c9 test %ecx,%ecx -8010065d: 74 0c je 8010066b - buf[i++] = '-'; -8010065f: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) - buf[i++] = digits[x % base]; -80100664: 89 de mov %ebx,%esi - buf[i++] = '-'; -80100666: ba 2d 00 00 00 mov $0x2d,%edx - while (--i >= 0) { -8010066b: 8d 5c 35 d7 lea -0x29(%ebp,%esi,1),%ebx -8010066f: 0f be c2 movsbl %dl,%eax - if (panicked) { -80100672: 8b 15 78 ef 10 80 mov 0x8010ef78,%edx -80100678: 85 d2 test %edx,%edx -8010067a: 74 04 je 80100680 -8010067c: fa cli - for (;;) { -8010067d: eb fe jmp 8010067d -8010067f: 90 nop -80100680: e8 8b fd ff ff call 80100410 - while (--i >= 0) { -80100685: 8d 45 d7 lea -0x29(%ebp),%eax -80100688: 39 c3 cmp %eax,%ebx -8010068a: 74 0e je 8010069a - consputc(buf[i]); -8010068c: 0f be 03 movsbl (%ebx),%eax -8010068f: 83 eb 01 sub $0x1,%ebx -80100692: eb de jmp 80100672 - x = -xx; -80100694: f7 d8 neg %eax -80100696: 89 c1 mov %eax,%ecx -80100698: eb 96 jmp 80100630 -} -8010069a: 83 c4 2c add $0x2c,%esp -8010069d: 5b pop %ebx -8010069e: 5e pop %esi -8010069f: 5f pop %edi -801006a0: 5d pop %ebp -801006a1: c3 ret -801006a2: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801006a9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -801006b0 : -void cprintf(char *fmt, ...) { -801006b0: 55 push %ebp -801006b1: 89 e5 mov %esp,%ebp -801006b3: 57 push %edi -801006b4: 56 push %esi -801006b5: 53 push %ebx -801006b6: 83 ec 1c sub $0x1c,%esp - locking = cons.locking; -801006b9: a1 74 ef 10 80 mov 0x8010ef74,%eax -801006be: 89 45 e4 mov %eax,-0x1c(%ebp) - if (locking) { -801006c1: 85 c0 test %eax,%eax -801006c3: 0f 85 27 01 00 00 jne 801007f0 - if (fmt == 0) { -801006c9: 8b 75 08 mov 0x8(%ebp),%esi -801006cc: 85 f6 test %esi,%esi -801006ce: 0f 84 ac 01 00 00 je 80100880 - for (i = 0; (c = fmt[i] & 0xff) != 0; i++) { -801006d4: 0f b6 06 movzbl (%esi),%eax - argp = (uint*)(void*)(&fmt + 1); -801006d7: 8d 7d 0c lea 0xc(%ebp),%edi - for (i = 0; (c = fmt[i] & 0xff) != 0; i++) { -801006da: 31 db xor %ebx,%ebx -801006dc: 85 c0 test %eax,%eax -801006de: 74 56 je 80100736 - if (c != '%') { -801006e0: 83 f8 25 cmp $0x25,%eax -801006e3: 0f 85 cf 00 00 00 jne 801007b8 - c = fmt[++i] & 0xff; -801006e9: 83 c3 01 add $0x1,%ebx -801006ec: 0f b6 14 1e movzbl (%esi,%ebx,1),%edx - if (c == 0) { -801006f0: 85 d2 test %edx,%edx -801006f2: 74 42 je 80100736 - switch (c) { -801006f4: 83 fa 70 cmp $0x70,%edx -801006f7: 0f 84 90 00 00 00 je 8010078d -801006fd: 7f 51 jg 80100750 -801006ff: 83 fa 25 cmp $0x25,%edx -80100702: 0f 84 c0 00 00 00 je 801007c8 -80100708: 83 fa 64 cmp $0x64,%edx -8010070b: 0f 85 f4 00 00 00 jne 80100805 - printint(*argp++, 10, 1); -80100711: 8d 47 04 lea 0x4(%edi),%eax -80100714: b9 01 00 00 00 mov $0x1,%ecx -80100719: ba 0a 00 00 00 mov $0xa,%edx -8010071e: 89 45 e0 mov %eax,-0x20(%ebp) -80100721: 8b 07 mov (%edi),%eax -80100723: e8 e8 fe ff ff call 80100610 -80100728: 8b 7d e0 mov -0x20(%ebp),%edi - for (i = 0; (c = fmt[i] & 0xff) != 0; i++) { -8010072b: 83 c3 01 add $0x1,%ebx -8010072e: 0f b6 04 1e movzbl (%esi,%ebx,1),%eax -80100732: 85 c0 test %eax,%eax -80100734: 75 aa jne 801006e0 - if (locking) { -80100736: 8b 45 e4 mov -0x1c(%ebp),%eax -80100739: 85 c0 test %eax,%eax -8010073b: 0f 85 22 01 00 00 jne 80100863 -} -80100741: 8d 65 f4 lea -0xc(%ebp),%esp -80100744: 5b pop %ebx -80100745: 5e pop %esi -80100746: 5f pop %edi -80100747: 5d pop %ebp -80100748: c3 ret -80100749: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - switch (c) { -80100750: 83 fa 73 cmp $0x73,%edx -80100753: 75 33 jne 80100788 - if ((s = (char*)*argp++) == 0) { -80100755: 8d 47 04 lea 0x4(%edi),%eax -80100758: 8b 3f mov (%edi),%edi -8010075a: 89 45 e0 mov %eax,-0x20(%ebp) -8010075d: 85 ff test %edi,%edi -8010075f: 0f 84 e3 00 00 00 je 80100848 - for (; *s; s++) { -80100765: 0f be 07 movsbl (%edi),%eax -80100768: 84 c0 test %al,%al -8010076a: 0f 84 08 01 00 00 je 80100878 - if (panicked) { -80100770: 8b 15 78 ef 10 80 mov 0x8010ef78,%edx -80100776: 85 d2 test %edx,%edx -80100778: 0f 84 b2 00 00 00 je 80100830 -8010077e: fa cli - for (;;) { -8010077f: eb fe jmp 8010077f -80100781: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - switch (c) { -80100788: 83 fa 78 cmp $0x78,%edx -8010078b: 75 78 jne 80100805 - printint(*argp++, 16, 0); -8010078d: 8d 47 04 lea 0x4(%edi),%eax -80100790: 31 c9 xor %ecx,%ecx -80100792: ba 10 00 00 00 mov $0x10,%edx - for (i = 0; (c = fmt[i] & 0xff) != 0; i++) { -80100797: 83 c3 01 add $0x1,%ebx - printint(*argp++, 16, 0); -8010079a: 89 45 e0 mov %eax,-0x20(%ebp) -8010079d: 8b 07 mov (%edi),%eax -8010079f: e8 6c fe ff ff call 80100610 - for (i = 0; (c = fmt[i] & 0xff) != 0; i++) { -801007a4: 0f b6 04 1e movzbl (%esi,%ebx,1),%eax - printint(*argp++, 16, 0); -801007a8: 8b 7d e0 mov -0x20(%ebp),%edi - for (i = 0; (c = fmt[i] & 0xff) != 0; i++) { -801007ab: 85 c0 test %eax,%eax -801007ad: 0f 85 2d ff ff ff jne 801006e0 -801007b3: eb 81 jmp 80100736 -801007b5: 8d 76 00 lea 0x0(%esi),%esi - if (panicked) { -801007b8: 8b 0d 78 ef 10 80 mov 0x8010ef78,%ecx -801007be: 85 c9 test %ecx,%ecx -801007c0: 74 14 je 801007d6 -801007c2: fa cli - for (;;) { -801007c3: eb fe jmp 801007c3 -801007c5: 8d 76 00 lea 0x0(%esi),%esi - if (panicked) { -801007c8: a1 78 ef 10 80 mov 0x8010ef78,%eax -801007cd: 85 c0 test %eax,%eax -801007cf: 75 6c jne 8010083d -801007d1: b8 25 00 00 00 mov $0x25,%eax -801007d6: e8 35 fc ff ff call 80100410 - for (i = 0; (c = fmt[i] & 0xff) != 0; i++) { -801007db: 83 c3 01 add $0x1,%ebx -801007de: 0f b6 04 1e movzbl (%esi,%ebx,1),%eax -801007e2: 85 c0 test %eax,%eax -801007e4: 0f 85 f6 fe ff ff jne 801006e0 -801007ea: e9 47 ff ff ff jmp 80100736 -801007ef: 90 nop - acquire(&cons.lock); -801007f0: 83 ec 0c sub $0xc,%esp -801007f3: 68 40 ef 10 80 push $0x8010ef40 -801007f8: e8 03 3f 00 00 call 80104700 -801007fd: 83 c4 10 add $0x10,%esp -80100800: e9 c4 fe ff ff jmp 801006c9 - if (panicked) { -80100805: 8b 0d 78 ef 10 80 mov 0x8010ef78,%ecx -8010080b: 85 c9 test %ecx,%ecx -8010080d: 75 31 jne 80100840 -8010080f: b8 25 00 00 00 mov $0x25,%eax -80100814: 89 55 e0 mov %edx,-0x20(%ebp) -80100817: e8 f4 fb ff ff call 80100410 -8010081c: 8b 15 78 ef 10 80 mov 0x8010ef78,%edx -80100822: 85 d2 test %edx,%edx -80100824: 8b 55 e0 mov -0x20(%ebp),%edx -80100827: 74 2e je 80100857 -80100829: fa cli - for (;;) { -8010082a: eb fe jmp 8010082a -8010082c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -80100830: e8 db fb ff ff call 80100410 - for (; *s; s++) { -80100835: 83 c7 01 add $0x1,%edi -80100838: e9 28 ff ff ff jmp 80100765 -8010083d: fa cli - for (;;) { -8010083e: eb fe jmp 8010083e -80100840: fa cli -80100841: eb fe jmp 80100841 -80100843: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -80100847: 90 nop - s = "(null)"; -80100848: bf 38 74 10 80 mov $0x80107438,%edi - for (; *s; s++) { -8010084d: b8 28 00 00 00 mov $0x28,%eax -80100852: e9 19 ff ff ff jmp 80100770 -80100857: 89 d0 mov %edx,%eax -80100859: e8 b2 fb ff ff call 80100410 -8010085e: e9 c8 fe ff ff jmp 8010072b - release(&cons.lock); -80100863: 83 ec 0c sub $0xc,%esp -80100866: 68 40 ef 10 80 push $0x8010ef40 -8010086b: e8 30 3e 00 00 call 801046a0 -80100870: 83 c4 10 add $0x10,%esp -} -80100873: e9 c9 fe ff ff jmp 80100741 - if ((s = (char*)*argp++) == 0) { -80100878: 8b 7d e0 mov -0x20(%ebp),%edi -8010087b: e9 ab fe ff ff jmp 8010072b - panic("null fmt"); -80100880: 83 ec 0c sub $0xc,%esp -80100883: 68 3f 74 10 80 push $0x8010743f -80100888: e8 03 fb ff ff call 80100390 -8010088d: 8d 76 00 lea 0x0(%esi),%esi - -80100890 : -int consoleget(void) { -80100890: 55 push %ebp -80100891: 89 e5 mov %esp,%ebp -80100893: 83 ec 24 sub $0x24,%esp - acquire(&cons.lock); -80100896: 68 40 ef 10 80 push $0x8010ef40 -8010089b: e8 60 3e 00 00 call 80104700 - while ((c = kbdgetc()) <= 0) { -801008a0: 83 c4 10 add $0x10,%esp -801008a3: eb 05 jmp 801008aa -801008a5: 8d 76 00 lea 0x0(%esi),%esi - if (c == 0) { -801008a8: 74 26 je 801008d0 - while ((c = kbdgetc()) <= 0) { -801008aa: e8 61 1f 00 00 call 80102810 -801008af: 85 c0 test %eax,%eax -801008b1: 7e f5 jle 801008a8 - release(&cons.lock); -801008b3: 83 ec 0c sub $0xc,%esp -801008b6: 89 45 f4 mov %eax,-0xc(%ebp) -801008b9: 68 40 ef 10 80 push $0x8010ef40 -801008be: e8 dd 3d 00 00 call 801046a0 -} -801008c3: 8b 45 f4 mov -0xc(%ebp),%eax -801008c6: c9 leave -801008c7: c3 ret -801008c8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801008cf: 90 nop - c = kbdgetc(); -801008d0: e8 3b 1f 00 00 call 80102810 -801008d5: eb d3 jmp 801008aa -801008d7: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801008de: 66 90 xchg %ax,%ax - -801008e0 : -void consoleintr(int (*getc)(void)) { -801008e0: 55 push %ebp -801008e1: 89 e5 mov %esp,%ebp -801008e3: 57 push %edi -801008e4: 56 push %esi - int c, doprocdump = 0; -801008e5: 31 f6 xor %esi,%esi -void consoleintr(int (*getc)(void)) { -801008e7: 53 push %ebx -801008e8: 83 ec 28 sub $0x28,%esp -801008eb: 8b 7d 08 mov 0x8(%ebp),%edi - acquire(&cons.lock); -801008ee: 68 40 ef 10 80 push $0x8010ef40 -801008f3: e8 08 3e 00 00 call 80104700 - while ((c = getc()) >= 0) { -801008f8: 83 c4 10 add $0x10,%esp -801008fb: eb 1a jmp 80100917 -801008fd: 8d 76 00 lea 0x0(%esi),%esi - switch (c) { -80100900: 83 fb 08 cmp $0x8,%ebx -80100903: 0f 84 07 01 00 00 je 80100a10 -80100909: 83 fb 10 cmp $0x10,%ebx -8010090c: 0f 85 4a 01 00 00 jne 80100a5c -80100912: be 01 00 00 00 mov $0x1,%esi - while ((c = getc()) >= 0) { -80100917: ff d7 call *%edi -80100919: 89 c3 mov %eax,%ebx -8010091b: 85 c0 test %eax,%eax -8010091d: 0f 88 1d 01 00 00 js 80100a40 - switch (c) { -80100923: 83 fb 15 cmp $0x15,%ebx -80100926: 0f 84 9e 00 00 00 je 801009ca -8010092c: 7e d2 jle 80100900 -8010092e: 83 fb 7f cmp $0x7f,%ebx -80100931: 0f 84 d9 00 00 00 je 80100a10 - if (c != 0 && input->e - input->r < INPUT_BUF) { -80100937: 8b 15 80 ee 10 80 mov 0x8010ee80,%edx -8010093d: 8b 82 88 00 00 00 mov 0x88(%edx),%eax -80100943: 89 c1 mov %eax,%ecx -80100945: 2b 8a 80 00 00 00 sub 0x80(%edx),%ecx -8010094b: 83 f9 7f cmp $0x7f,%ecx -8010094e: 77 c7 ja 80100917 - if (panicked) { -80100950: 8b 0d 78 ef 10 80 mov 0x8010ef78,%ecx -80100956: 89 4d e4 mov %ecx,-0x1c(%ebp) - input->buf[input->e++ % INPUT_BUF] = c; -80100959: 8d 48 01 lea 0x1(%eax),%ecx -8010095c: 83 e0 7f and $0x7f,%eax -8010095f: 89 8a 88 00 00 00 mov %ecx,0x88(%edx) - c = (c == '\r') ? '\n' : c; -80100965: 83 fb 0d cmp $0xd,%ebx -80100968: 0f 84 1d 01 00 00 je 80100a8b - input->buf[input->e++ % INPUT_BUF] = c; -8010096e: 88 1c 02 mov %bl,(%edx,%eax,1) - if (panicked) { -80100971: 8b 55 e4 mov -0x1c(%ebp),%edx -80100974: 85 d2 test %edx,%edx -80100976: 0f 85 1a 01 00 00 jne 80100a96 -8010097c: 89 d8 mov %ebx,%eax -8010097e: e8 8d fa ff ff call 80100410 - if (c == '\n' || c == C('D') || input->e == input->r + INPUT_BUF) { -80100983: a1 80 ee 10 80 mov 0x8010ee80,%eax -80100988: 83 fb 0a cmp $0xa,%ebx -8010098b: 0f 84 1e 01 00 00 je 80100aaf -80100991: 83 fb 04 cmp $0x4,%ebx -80100994: 0f 84 15 01 00 00 je 80100aaf -8010099a: 8b 88 80 00 00 00 mov 0x80(%eax),%ecx -801009a0: 8d 91 80 00 00 00 lea 0x80(%ecx),%edx -801009a6: 39 90 88 00 00 00 cmp %edx,0x88(%eax) -801009ac: 0f 85 65 ff ff ff jne 80100917 -801009b2: e9 fe 00 00 00 jmp 80100ab5 -801009b7: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801009be: 66 90 xchg %ax,%ax -801009c0: b8 00 01 00 00 mov $0x100,%eax -801009c5: e8 46 fa ff ff call 80100410 - while (input->e != input->w && -801009ca: 8b 15 80 ee 10 80 mov 0x8010ee80,%edx -801009d0: 8b 82 88 00 00 00 mov 0x88(%edx),%eax -801009d6: 3b 82 84 00 00 00 cmp 0x84(%edx),%eax -801009dc: 0f 84 35 ff ff ff je 80100917 - input->buf[(input->e - 1) % INPUT_BUF] != '\n') { -801009e2: 83 e8 01 sub $0x1,%eax -801009e5: 89 c1 mov %eax,%ecx -801009e7: 83 e1 7f and $0x7f,%ecx - while (input->e != input->w && -801009ea: 80 3c 0a 0a cmpb $0xa,(%edx,%ecx,1) -801009ee: 0f 84 23 ff ff ff je 80100917 - if (panicked) { -801009f4: 8b 1d 78 ef 10 80 mov 0x8010ef78,%ebx - input->e--; -801009fa: 89 82 88 00 00 00 mov %eax,0x88(%edx) - if (panicked) { -80100a00: 85 db test %ebx,%ebx -80100a02: 74 bc je 801009c0 -80100a04: fa cli - for (;;) { -80100a05: eb fe jmp 80100a05 -80100a07: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80100a0e: 66 90 xchg %ax,%ax - if (input->e != input->w) { -80100a10: a1 80 ee 10 80 mov 0x8010ee80,%eax -80100a15: 8b 90 88 00 00 00 mov 0x88(%eax),%edx -80100a1b: 3b 90 84 00 00 00 cmp 0x84(%eax),%edx -80100a21: 0f 84 f0 fe ff ff je 80100917 - if (panicked) { -80100a27: 8b 0d 78 ef 10 80 mov 0x8010ef78,%ecx - input->e--; -80100a2d: 83 ea 01 sub $0x1,%edx -80100a30: 89 90 88 00 00 00 mov %edx,0x88(%eax) - if (panicked) { -80100a36: 85 c9 test %ecx,%ecx -80100a38: 74 36 je 80100a70 -80100a3a: fa cli - for (;;) { -80100a3b: eb fe jmp 80100a3b -80100a3d: 8d 76 00 lea 0x0(%esi),%esi - release(&cons.lock); -80100a40: 83 ec 0c sub $0xc,%esp -80100a43: 68 40 ef 10 80 push $0x8010ef40 -80100a48: e8 53 3c 00 00 call 801046a0 - if (doprocdump) { -80100a4d: 83 c4 10 add $0x10,%esp -80100a50: 85 f6 test %esi,%esi -80100a52: 75 2b jne 80100a7f -} -80100a54: 8d 65 f4 lea -0xc(%ebp),%esp -80100a57: 5b pop %ebx -80100a58: 5e pop %esi -80100a59: 5f pop %edi -80100a5a: 5d pop %ebp -80100a5b: c3 ret - if (c != 0 && input->e - input->r < INPUT_BUF) { -80100a5c: 85 db test %ebx,%ebx -80100a5e: 0f 84 b3 fe ff ff je 80100917 -80100a64: e9 ce fe ff ff jmp 80100937 -80100a69: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80100a70: b8 00 01 00 00 mov $0x100,%eax -80100a75: e8 96 f9 ff ff call 80100410 -80100a7a: e9 98 fe ff ff jmp 80100917 -} -80100a7f: 8d 65 f4 lea -0xc(%ebp),%esp -80100a82: 5b pop %ebx -80100a83: 5e pop %esi -80100a84: 5f pop %edi -80100a85: 5d pop %ebp - procdump(); // now call procdump() wo. cons.lock held -80100a86: e9 b5 38 00 00 jmp 80104340 - input->buf[input->e++ % INPUT_BUF] = c; -80100a8b: c6 04 02 0a movb $0xa,(%edx,%eax,1) - if (panicked) { -80100a8f: 8b 45 e4 mov -0x1c(%ebp),%eax -80100a92: 85 c0 test %eax,%eax -80100a94: 74 0a je 80100aa0 -80100a96: fa cli - for (;;) { -80100a97: eb fe jmp 80100a97 -80100a99: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80100aa0: b8 0a 00 00 00 mov $0xa,%eax -80100aa5: e8 66 f9 ff ff call 80100410 - input->w = input->e; -80100aaa: a1 80 ee 10 80 mov 0x8010ee80,%eax -80100aaf: 8b 90 88 00 00 00 mov 0x88(%eax),%edx -80100ab5: 89 90 84 00 00 00 mov %edx,0x84(%eax) - wakeup(&(input->r)); -80100abb: 83 ec 0c sub $0xc,%esp -80100abe: 83 e8 80 sub $0xffffff80,%eax -80100ac1: 50 push %eax -80100ac2: e8 99 37 00 00 call 80104260 -80100ac7: 83 c4 10 add $0x10,%esp -80100aca: e9 48 fe ff ff jmp 80100917 -80100acf: 90 nop - -80100ad0 : - -void consoleinit(void) { -80100ad0: 55 push %ebp -80100ad1: 89 e5 mov %esp,%ebp -80100ad3: 83 ec 10 sub $0x10,%esp - initlock(&cons.lock, "console"); -80100ad6: 68 48 74 10 80 push $0x80107448 -80100adb: 68 40 ef 10 80 push $0x8010ef40 -80100ae0: e8 4b 3a 00 00 call 80104530 - - devsw[CONSOLE].write = consolewrite; - devsw[CONSOLE].read = consoleread; - cons.locking = 1; - - ioapicenable(IRQ_KBD, 0); -80100ae5: 58 pop %eax -80100ae6: 5a pop %edx -80100ae7: 6a 00 push $0x0 -80100ae9: 6a 01 push $0x1 - input = &inputBuffer; -80100aeb: c7 05 80 ee 10 80 a0 movl $0x8010eea0,0x8010ee80 -80100af2: ee 10 80 - devsw[CONSOLE].write = consolewrite; -80100af5: c7 05 2c f9 10 80 a0 movl $0x801005a0,0x8010f92c -80100afc: 05 10 80 - devsw[CONSOLE].read = consoleread; -80100aff: c7 05 28 f9 10 80 80 movl $0x80100280,0x8010f928 -80100b06: 02 10 80 - cons.locking = 1; -80100b09: c7 05 74 ef 10 80 01 movl $0x1,0x8010ef74 -80100b10: 00 00 00 - ioapicenable(IRQ_KBD, 0); -80100b13: e8 88 1a 00 00 call 801025a0 -} -80100b18: 83 c4 10 add $0x10,%esp -80100b1b: c9 leave -80100b1c: c3 ret -80100b1d: 66 90 xchg %ax,%ax -80100b1f: 90 nop - -80100b20 : -#include "proc.h" -#include "defs.h" -#include "x86.h" -#include "elf.h" - -void cleanupexec(pde_t * pgdir, struct inode *ip) { -80100b20: 55 push %ebp -80100b21: 89 e5 mov %esp,%ebp -80100b23: 53 push %ebx -80100b24: 83 ec 04 sub $0x4,%esp -80100b27: 8b 45 08 mov 0x8(%ebp),%eax -80100b2a: 8b 5d 0c mov 0xc(%ebp),%ebx - if (pgdir) { -80100b2d: 85 c0 test %eax,%eax -80100b2f: 74 0c je 80100b3d - freevm(pgdir); -80100b31: 83 ec 0c sub $0xc,%esp -80100b34: 50 push %eax -80100b35: e8 a6 64 00 00 call 80106fe0 -80100b3a: 83 c4 10 add $0x10,%esp - } - if (ip) { -80100b3d: 85 db test %ebx,%ebx -80100b3f: 74 1f je 80100b60 - iunlockput(ip); -80100b41: 83 ec 0c sub $0xc,%esp -80100b44: 53 push %ebx -80100b45: e8 e6 0f 00 00 call 80101b30 - end_op(); - } -} -80100b4a: 8b 5d fc mov -0x4(%ebp),%ebx - end_op(); -80100b4d: 83 c4 10 add $0x10,%esp -} -80100b50: c9 leave - end_op(); -80100b51: e9 9a 23 00 00 jmp 80102ef0 -80100b56: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80100b5d: 8d 76 00 lea 0x0(%esi),%esi -} -80100b60: 8b 5d fc mov -0x4(%ebp),%ebx -80100b63: c9 leave -80100b64: c3 ret -80100b65: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80100b6c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -80100b70 : - -int exec(char *path, char **argv) { -80100b70: 55 push %ebp -80100b71: 89 e5 mov %esp,%ebp -80100b73: 57 push %edi -80100b74: 56 push %esi -80100b75: 53 push %ebx -80100b76: 81 ec 0c 01 00 00 sub $0x10c,%esp - uint argc, sz, sp, ustack[3 + MAXARG + 1]; - struct elfhdr elf; - struct inode *ip; - struct proghdr ph; - pde_t *pgdir, *oldpgdir; - struct proc *curproc = myproc(); -80100b7c: e8 4f 2f 00 00 call 80103ad0 -80100b81: 89 85 ec fe ff ff mov %eax,-0x114(%ebp) - - begin_op(); -80100b87: e8 f4 22 00 00 call 80102e80 - - if ((ip = namei(path)) == 0) { -80100b8c: 83 ec 0c sub $0xc,%esp -80100b8f: ff 75 08 push 0x8(%ebp) -80100b92: e8 29 16 00 00 call 801021c0 -80100b97: 83 c4 10 add $0x10,%esp -80100b9a: 85 c0 test %eax,%eax -80100b9c: 0f 84 49 03 00 00 je 80100eeb - end_op(); - cprintf("exec: fail\n"); - return -1; - } - ilock(ip); -80100ba2: 83 ec 0c sub $0xc,%esp -80100ba5: 89 c7 mov %eax,%edi -80100ba7: 50 push %eax -80100ba8: e8 f3 0c 00 00 call 801018a0 - pgdir = 0; - - // Check ELF header - if (readi(ip, (char*)&elf, 0, sizeof(elf)) != sizeof(elf)) { -80100bad: 8d 85 24 ff ff ff lea -0xdc(%ebp),%eax -80100bb3: 6a 34 push $0x34 -80100bb5: 6a 00 push $0x0 -80100bb7: 50 push %eax -80100bb8: 57 push %edi -80100bb9: e8 f2 0f 00 00 call 80101bb0 -80100bbe: 83 c4 20 add $0x20,%esp -80100bc1: 83 f8 34 cmp $0x34,%eax -80100bc4: 0f 85 d6 02 00 00 jne 80100ea0 - cleanupexec(pgdir, ip); - return -1; - } - if (elf.magic != ELF_MAGIC) { -80100bca: 81 bd 24 ff ff ff 7f cmpl $0x464c457f,-0xdc(%ebp) -80100bd1: 45 4c 46 -80100bd4: 0f 85 c6 02 00 00 jne 80100ea0 - cleanupexec(pgdir, ip); - return -1; - } - - if ((pgdir = setupkvm()) == 0) { -80100bda: e8 81 64 00 00 call 80107060 -80100bdf: 89 85 f4 fe ff ff mov %eax,-0x10c(%ebp) -80100be5: 85 c0 test %eax,%eax -80100be7: 0f 84 b3 02 00 00 je 80100ea0 - return -1; - } - - // Load program into memory. - sz = 0; - for (i = 0, off = elf.phoff; i < elf.phnum; i++, off += sizeof(ph)) { -80100bed: 66 83 bd 50 ff ff ff cmpw $0x0,-0xb0(%ebp) -80100bf4: 00 -80100bf5: 8b 9d 40 ff ff ff mov -0xc0(%ebp),%ebx -80100bfb: 0f 84 ba 02 00 00 je 80100ebb - sz = 0; -80100c01: c7 85 f0 fe ff ff 00 movl $0x0,-0x110(%ebp) -80100c08: 00 00 00 - for (i = 0, off = elf.phoff; i < elf.phnum; i++, off += sizeof(ph)) { -80100c0b: 31 f6 xor %esi,%esi -80100c0d: e9 8c 00 00 00 jmp 80100c9e -80100c12: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - if (readi(ip, (char*)&ph, off, sizeof(ph)) != sizeof(ph)) { - cleanupexec(pgdir, ip); - return -1; - } - if (ph.type != ELF_PROG_LOAD) { -80100c18: 83 bd 04 ff ff ff 01 cmpl $0x1,-0xfc(%ebp) -80100c1f: 75 6c jne 80100c8d - continue; - } - if (ph.memsz < ph.filesz) { -80100c21: 8b 85 18 ff ff ff mov -0xe8(%ebp),%eax -80100c27: 3b 85 14 ff ff ff cmp -0xec(%ebp),%eax -80100c2d: 0f 82 87 00 00 00 jb 80100cba - cleanupexec(pgdir, ip); - return -1; - } - if (ph.vaddr + ph.memsz < ph.vaddr) { -80100c33: 03 85 0c ff ff ff add -0xf4(%ebp),%eax -80100c39: 72 7f jb 80100cba - cleanupexec(pgdir, ip); - return -1; - } - if ((sz = allocuvm(pgdir, sz, ph.vaddr + ph.memsz)) == 0) { -80100c3b: 83 ec 04 sub $0x4,%esp -80100c3e: 50 push %eax -80100c3f: ff b5 f0 fe ff ff push -0x110(%ebp) -80100c45: ff b5 f4 fe ff ff push -0x10c(%ebp) -80100c4b: e8 30 62 00 00 call 80106e80 -80100c50: 83 c4 10 add $0x10,%esp -80100c53: 89 85 f0 fe ff ff mov %eax,-0x110(%ebp) -80100c59: 85 c0 test %eax,%eax -80100c5b: 74 5d je 80100cba - cleanupexec(pgdir, ip); - return -1; - } - if (ph.vaddr % PGSIZE != 0) { -80100c5d: 8b 85 0c ff ff ff mov -0xf4(%ebp),%eax -80100c63: a9 ff 0f 00 00 test $0xfff,%eax -80100c68: 75 50 jne 80100cba - cleanupexec(pgdir, ip); - return -1; - } - if (loaduvm(pgdir, (char*)ph.vaddr, ip, ph.off, ph.filesz) < 0) { -80100c6a: 83 ec 0c sub $0xc,%esp -80100c6d: ff b5 14 ff ff ff push -0xec(%ebp) -80100c73: ff b5 08 ff ff ff push -0xf8(%ebp) -80100c79: 57 push %edi -80100c7a: 50 push %eax -80100c7b: ff b5 f4 fe ff ff push -0x10c(%ebp) -80100c81: e8 0a 61 00 00 call 80106d90 -80100c86: 83 c4 20 add $0x20,%esp -80100c89: 85 c0 test %eax,%eax -80100c8b: 78 2d js 80100cba - for (i = 0, off = elf.phoff; i < elf.phnum; i++, off += sizeof(ph)) { -80100c8d: 0f b7 85 50 ff ff ff movzwl -0xb0(%ebp),%eax -80100c94: 83 c6 01 add $0x1,%esi -80100c97: 83 c3 20 add $0x20,%ebx -80100c9a: 39 f0 cmp %esi,%eax -80100c9c: 7e 4a jle 80100ce8 - if (readi(ip, (char*)&ph, off, sizeof(ph)) != sizeof(ph)) { -80100c9e: 8d 85 04 ff ff ff lea -0xfc(%ebp),%eax -80100ca4: 6a 20 push $0x20 -80100ca6: 53 push %ebx -80100ca7: 50 push %eax -80100ca8: 57 push %edi -80100ca9: e8 02 0f 00 00 call 80101bb0 -80100cae: 83 c4 10 add $0x10,%esp -80100cb1: 83 f8 20 cmp $0x20,%eax -80100cb4: 0f 84 5e ff ff ff je 80100c18 - freevm(pgdir); -80100cba: 83 ec 0c sub $0xc,%esp -80100cbd: ff b5 f4 fe ff ff push -0x10c(%ebp) -80100cc3: e8 18 63 00 00 call 80106fe0 - iunlockput(ip); -80100cc8: 89 3c 24 mov %edi,(%esp) -80100ccb: e8 60 0e 00 00 call 80101b30 - end_op(); -80100cd0: e8 1b 22 00 00 call 80102ef0 -} -80100cd5: 83 c4 10 add $0x10,%esp - cleanupexec(pgdir, ip); - return -1; -80100cd8: b8 ff ff ff ff mov $0xffffffff,%eax - curproc->tf->eip = elf.entry; // main - curproc->tf->esp = sp; - switchuvm(curproc); - freevm(oldpgdir); - return 0; -} -80100cdd: 8d 65 f4 lea -0xc(%ebp),%esp -80100ce0: 5b pop %ebx -80100ce1: 5e pop %esi -80100ce2: 5f pop %edi -80100ce3: 5d pop %ebp -80100ce4: c3 ret -80100ce5: 8d 76 00 lea 0x0(%esi),%esi - sz = PGROUNDUP(sz); -80100ce8: 8b b5 f0 fe ff ff mov -0x110(%ebp),%esi -80100cee: 81 c6 ff 0f 00 00 add $0xfff,%esi -80100cf4: 81 e6 00 f0 ff ff and $0xfffff000,%esi - if ((sz = allocuvm(pgdir, sz, sz + 2 * PGSIZE)) == 0) { -80100cfa: 8d 9e 00 20 00 00 lea 0x2000(%esi),%ebx - iunlockput(ip); -80100d00: 83 ec 0c sub $0xc,%esp -80100d03: 57 push %edi -80100d04: e8 27 0e 00 00 call 80101b30 - end_op(); -80100d09: e8 e2 21 00 00 call 80102ef0 - if ((sz = allocuvm(pgdir, sz, sz + 2 * PGSIZE)) == 0) { -80100d0e: 83 c4 0c add $0xc,%esp -80100d11: 53 push %ebx -80100d12: 56 push %esi -80100d13: ff b5 f4 fe ff ff push -0x10c(%ebp) -80100d19: e8 62 61 00 00 call 80106e80 -80100d1e: 83 c4 10 add $0x10,%esp -80100d21: 89 c7 mov %eax,%edi -80100d23: 85 c0 test %eax,%eax -80100d25: 0f 84 87 00 00 00 je 80100db2 - clearpteu(pgdir, (char*)(sz - 2 * PGSIZE)); -80100d2b: 83 ec 08 sub $0x8,%esp -80100d2e: 8d 80 00 e0 ff ff lea -0x2000(%eax),%eax - for (argc = 0; argv[argc]; argc++) { -80100d34: 89 fb mov %edi,%ebx -80100d36: 31 f6 xor %esi,%esi - clearpteu(pgdir, (char*)(sz - 2 * PGSIZE)); -80100d38: 50 push %eax -80100d39: ff b5 f4 fe ff ff push -0x10c(%ebp) -80100d3f: e8 bc 63 00 00 call 80107100 - for (argc = 0; argv[argc]; argc++) { -80100d44: 8b 45 0c mov 0xc(%ebp),%eax -80100d47: 83 c4 10 add $0x10,%esp -80100d4a: 8b 08 mov (%eax),%ecx -80100d4c: 85 c9 test %ecx,%ecx -80100d4e: 0f 84 73 01 00 00 je 80100ec7 -80100d54: 89 bd f0 fe ff ff mov %edi,-0x110(%ebp) -80100d5a: 8b 7d 0c mov 0xc(%ebp),%edi -80100d5d: eb 1f jmp 80100d7e -80100d5f: 90 nop -80100d60: 8d 46 01 lea 0x1(%esi),%eax - ustack[3 + argc] = sp; -80100d63: 89 9c b5 64 ff ff ff mov %ebx,-0x9c(%ebp,%esi,4) -80100d6a: 8d 95 58 ff ff ff lea -0xa8(%ebp),%edx - for (argc = 0; argv[argc]; argc++) { -80100d70: 8b 0c 87 mov (%edi,%eax,4),%ecx -80100d73: 85 c9 test %ecx,%ecx -80100d75: 74 59 je 80100dd0 - if (argc >= MAXARG) { -80100d77: 83 f8 20 cmp $0x20,%eax -80100d7a: 74 36 je 80100db2 -80100d7c: 89 c6 mov %eax,%esi - sp = (sp - (strlen(argv[argc]) + 1)) & ~3; -80100d7e: 83 ec 0c sub $0xc,%esp -80100d81: 51 push %ecx -80100d82: e8 39 3c 00 00 call 801049c0 - if (copyout(pgdir, sp, argv[argc], strlen(argv[argc]) + 1) < 0) { -80100d87: 5a pop %edx -80100d88: ff 34 b7 push (%edi,%esi,4) - sp = (sp - (strlen(argv[argc]) + 1)) & ~3; -80100d8b: 29 c3 sub %eax,%ebx -80100d8d: 83 eb 01 sub $0x1,%ebx - if (copyout(pgdir, sp, argv[argc], strlen(argv[argc]) + 1) < 0) { -80100d90: e8 2b 3c 00 00 call 801049c0 - sp = (sp - (strlen(argv[argc]) + 1)) & ~3; -80100d95: 83 e3 fc and $0xfffffffc,%ebx - if (copyout(pgdir, sp, argv[argc], strlen(argv[argc]) + 1) < 0) { -80100d98: 83 c0 01 add $0x1,%eax -80100d9b: 50 push %eax -80100d9c: ff 34 b7 push (%edi,%esi,4) -80100d9f: 53 push %ebx -80100da0: ff b5 f4 fe ff ff push -0x10c(%ebp) -80100da6: e8 45 65 00 00 call 801072f0 -80100dab: 83 c4 20 add $0x20,%esp -80100dae: 85 c0 test %eax,%eax -80100db0: 79 ae jns 80100d60 - freevm(pgdir); -80100db2: 83 ec 0c sub $0xc,%esp -80100db5: ff b5 f4 fe ff ff push -0x10c(%ebp) -80100dbb: e8 20 62 00 00 call 80106fe0 -} -80100dc0: 83 c4 10 add $0x10,%esp -} -80100dc3: 8d 65 f4 lea -0xc(%ebp),%esp - return -1; -80100dc6: b8 ff ff ff ff mov $0xffffffff,%eax -} -80100dcb: 5b pop %ebx -80100dcc: 5e pop %esi -80100dcd: 5f pop %edi -80100dce: 5d pop %ebp -80100dcf: c3 ret - ustack[2] = sp - (argc + 1) * 4; // argv pointer -80100dd0: 8d 0c b5 08 00 00 00 lea 0x8(,%esi,4),%ecx - ustack[3 + argc] = 0; -80100dd7: 8b bd f0 fe ff ff mov -0x110(%ebp),%edi -80100ddd: 89 85 f0 fe ff ff mov %eax,-0x110(%ebp) -80100de3: 8d 46 04 lea 0x4(%esi),%eax - sp -= (3 + argc + 1) * 4; -80100de6: 8d 71 0c lea 0xc(%ecx),%esi - ustack[3 + argc] = 0; -80100de9: c7 84 85 58 ff ff ff movl $0x0,-0xa8(%ebp,%eax,4) -80100df0: 00 00 00 00 - ustack[1] = argc; -80100df4: 8b 85 f0 fe ff ff mov -0x110(%ebp),%eax - if (copyout(pgdir, sp, ustack, (3 + argc + 1) * 4) < 0) { -80100dfa: 56 push %esi - ustack[1] = argc; -80100dfb: 89 85 5c ff ff ff mov %eax,-0xa4(%ebp) - ustack[2] = sp - (argc + 1) * 4; // argv pointer -80100e01: 89 d8 mov %ebx,%eax - sp -= (3 + argc + 1) * 4; -80100e03: 29 f3 sub %esi,%ebx - if (copyout(pgdir, sp, ustack, (3 + argc + 1) * 4) < 0) { -80100e05: 52 push %edx - ustack[2] = sp - (argc + 1) * 4; // argv pointer -80100e06: 29 c8 sub %ecx,%eax - if (copyout(pgdir, sp, ustack, (3 + argc + 1) * 4) < 0) { -80100e08: 53 push %ebx -80100e09: ff b5 f4 fe ff ff push -0x10c(%ebp) - ustack[0] = 0xffffffff; // fake return PC -80100e0f: c7 85 58 ff ff ff ff movl $0xffffffff,-0xa8(%ebp) -80100e16: ff ff ff - ustack[2] = sp - (argc + 1) * 4; // argv pointer -80100e19: 89 85 60 ff ff ff mov %eax,-0xa0(%ebp) - if (copyout(pgdir, sp, ustack, (3 + argc + 1) * 4) < 0) { -80100e1f: e8 cc 64 00 00 call 801072f0 -80100e24: 83 c4 10 add $0x10,%esp -80100e27: 85 c0 test %eax,%eax -80100e29: 0f 88 db 00 00 00 js 80100f0a - for (last = s = path; *s; s++) { -80100e2f: 8b 45 08 mov 0x8(%ebp),%eax -80100e32: 8b 55 08 mov 0x8(%ebp),%edx -80100e35: 8b 4d 08 mov 0x8(%ebp),%ecx -80100e38: 0f b6 00 movzbl (%eax),%eax -80100e3b: 84 c0 test %al,%al -80100e3d: 74 10 je 80100e4f -80100e3f: 90 nop - last = s + 1; -80100e40: 83 c1 01 add $0x1,%ecx -80100e43: 3c 2f cmp $0x2f,%al - for (last = s = path; *s; s++) { -80100e45: 0f b6 01 movzbl (%ecx),%eax - last = s + 1; -80100e48: 0f 44 d1 cmove %ecx,%edx - for (last = s = path; *s; s++) { -80100e4b: 84 c0 test %al,%al -80100e4d: 75 f1 jne 80100e40 - safestrcpy(curproc->name, last, sizeof(curproc->name)); -80100e4f: 8b b5 ec fe ff ff mov -0x114(%ebp),%esi -80100e55: 83 ec 04 sub $0x4,%esp -80100e58: 6a 10 push $0x10 -80100e5a: 8d 46 6c lea 0x6c(%esi),%eax -80100e5d: 52 push %edx -80100e5e: 50 push %eax -80100e5f: e8 1c 3b 00 00 call 80104980 - curproc->pgdir = pgdir; -80100e64: 8b 95 f4 fe ff ff mov -0x10c(%ebp),%edx - oldpgdir = curproc->pgdir; -80100e6a: 89 f1 mov %esi,%ecx -80100e6c: 8b 76 04 mov 0x4(%esi),%esi - curproc->tf->eip = elf.entry; // main -80100e6f: 8b 41 18 mov 0x18(%ecx),%eax - curproc->sz = sz; -80100e72: 89 39 mov %edi,(%ecx) - curproc->pgdir = pgdir; -80100e74: 89 51 04 mov %edx,0x4(%ecx) - curproc->tf->eip = elf.entry; // main -80100e77: 8b 95 3c ff ff ff mov -0xc4(%ebp),%edx -80100e7d: 89 50 38 mov %edx,0x38(%eax) - curproc->tf->esp = sp; -80100e80: 8b 41 18 mov 0x18(%ecx),%eax -80100e83: 89 58 44 mov %ebx,0x44(%eax) - switchuvm(curproc); -80100e86: 89 0c 24 mov %ecx,(%esp) -80100e89: e8 72 5d 00 00 call 80106c00 - freevm(oldpgdir); -80100e8e: 89 34 24 mov %esi,(%esp) -80100e91: e8 4a 61 00 00 call 80106fe0 - return 0; -80100e96: 83 c4 10 add $0x10,%esp -80100e99: 31 c0 xor %eax,%eax -80100e9b: e9 3d fe ff ff jmp 80100cdd - iunlockput(ip); -80100ea0: 83 ec 0c sub $0xc,%esp -80100ea3: 57 push %edi -80100ea4: e8 87 0c 00 00 call 80101b30 - end_op(); -80100ea9: e8 42 20 00 00 call 80102ef0 -} -80100eae: 83 c4 10 add $0x10,%esp - return -1; -80100eb1: b8 ff ff ff ff mov $0xffffffff,%eax -} -80100eb6: e9 22 fe ff ff jmp 80100cdd - for (i = 0, off = elf.phoff; i < elf.phnum; i++, off += sizeof(ph)) { -80100ebb: bb 00 20 00 00 mov $0x2000,%ebx -80100ec0: 31 f6 xor %esi,%esi -80100ec2: e9 39 fe ff ff jmp 80100d00 - for (argc = 0; argv[argc]; argc++) { -80100ec7: be 10 00 00 00 mov $0x10,%esi -80100ecc: b9 04 00 00 00 mov $0x4,%ecx -80100ed1: b8 03 00 00 00 mov $0x3,%eax -80100ed6: c7 85 f0 fe ff ff 00 movl $0x0,-0x110(%ebp) -80100edd: 00 00 00 -80100ee0: 8d 95 58 ff ff ff lea -0xa8(%ebp),%edx -80100ee6: e9 fe fe ff ff jmp 80100de9 - end_op(); -80100eeb: e8 00 20 00 00 call 80102ef0 - cprintf("exec: fail\n"); -80100ef0: 83 ec 0c sub $0xc,%esp -80100ef3: 68 61 74 10 80 push $0x80107461 -80100ef8: e8 b3 f7 ff ff call 801006b0 - return -1; -80100efd: 83 c4 10 add $0x10,%esp -80100f00: b8 ff ff ff ff mov $0xffffffff,%eax -80100f05: e9 d3 fd ff ff jmp 80100cdd - cleanupexec(pgdir, ip); -80100f0a: 50 push %eax -80100f0b: 50 push %eax -80100f0c: 6a 00 push $0x0 -80100f0e: ff b5 f4 fe ff ff push -0x10c(%ebp) -80100f14: e8 07 fc ff ff call 80100b20 - return -1; -80100f19: 83 c4 10 add $0x10,%esp -80100f1c: 83 c8 ff or $0xffffffff,%eax -80100f1f: e9 b9 fd ff ff jmp 80100cdd -80100f24: 66 90 xchg %ax,%ax -80100f26: 66 90 xchg %ax,%ax -80100f28: 66 90 xchg %ax,%ax -80100f2a: 66 90 xchg %ax,%ax -80100f2c: 66 90 xchg %ax,%ax -80100f2e: 66 90 xchg %ax,%ax - -80100f30 : -struct { - struct spinlock lock; - struct file file[NFILE]; -} ftable; - -void fileinit(void) { -80100f30: 55 push %ebp -80100f31: 89 e5 mov %esp,%ebp -80100f33: 83 ec 10 sub $0x10,%esp - initlock(&ftable.lock, "ftable"); -80100f36: 68 6d 74 10 80 push $0x8010746d -80100f3b: 68 80 ef 10 80 push $0x8010ef80 -80100f40: e8 eb 35 00 00 call 80104530 -} -80100f45: 83 c4 10 add $0x10,%esp -80100f48: c9 leave -80100f49: c3 ret -80100f4a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -80100f50 : - -// Allocate a file structure. -struct file* filealloc(void) { -80100f50: 55 push %ebp -80100f51: 89 e5 mov %esp,%ebp -80100f53: 53 push %ebx - struct file *f; - - acquire(&ftable.lock); - for (f = ftable.file; f < ftable.file + NFILE; f++) { -80100f54: bb b4 ef 10 80 mov $0x8010efb4,%ebx -struct file* filealloc(void) { -80100f59: 83 ec 10 sub $0x10,%esp - acquire(&ftable.lock); -80100f5c: 68 80 ef 10 80 push $0x8010ef80 -80100f61: e8 9a 37 00 00 call 80104700 -80100f66: 83 c4 10 add $0x10,%esp -80100f69: eb 10 jmp 80100f7b -80100f6b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -80100f6f: 90 nop - for (f = ftable.file; f < ftable.file + NFILE; f++) { -80100f70: 83 c3 18 add $0x18,%ebx -80100f73: 81 fb 14 f9 10 80 cmp $0x8010f914,%ebx -80100f79: 74 25 je 80100fa0 - if (f->ref == 0) { -80100f7b: 8b 43 04 mov 0x4(%ebx),%eax -80100f7e: 85 c0 test %eax,%eax -80100f80: 75 ee jne 80100f70 - f->ref = 1; - release(&ftable.lock); -80100f82: 83 ec 0c sub $0xc,%esp - f->ref = 1; -80100f85: c7 43 04 01 00 00 00 movl $0x1,0x4(%ebx) - release(&ftable.lock); -80100f8c: 68 80 ef 10 80 push $0x8010ef80 -80100f91: e8 0a 37 00 00 call 801046a0 - return f; - } - } - release(&ftable.lock); - return 0; -} -80100f96: 89 d8 mov %ebx,%eax - return f; -80100f98: 83 c4 10 add $0x10,%esp -} -80100f9b: 8b 5d fc mov -0x4(%ebp),%ebx -80100f9e: c9 leave -80100f9f: c3 ret - release(&ftable.lock); -80100fa0: 83 ec 0c sub $0xc,%esp - return 0; -80100fa3: 31 db xor %ebx,%ebx - release(&ftable.lock); -80100fa5: 68 80 ef 10 80 push $0x8010ef80 -80100faa: e8 f1 36 00 00 call 801046a0 -} -80100faf: 89 d8 mov %ebx,%eax - return 0; -80100fb1: 83 c4 10 add $0x10,%esp -} -80100fb4: 8b 5d fc mov -0x4(%ebp),%ebx -80100fb7: c9 leave -80100fb8: c3 ret -80100fb9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -80100fc0 : - -// Increment ref count for file f. -struct file* filedup(struct file *f) { -80100fc0: 55 push %ebp -80100fc1: 89 e5 mov %esp,%ebp -80100fc3: 53 push %ebx -80100fc4: 83 ec 10 sub $0x10,%esp -80100fc7: 8b 5d 08 mov 0x8(%ebp),%ebx - acquire(&ftable.lock); -80100fca: 68 80 ef 10 80 push $0x8010ef80 -80100fcf: e8 2c 37 00 00 call 80104700 - if (f->ref < 1) { -80100fd4: 8b 43 04 mov 0x4(%ebx),%eax -80100fd7: 83 c4 10 add $0x10,%esp -80100fda: 85 c0 test %eax,%eax -80100fdc: 7e 1a jle 80100ff8 - panic("filedup"); - } - f->ref++; -80100fde: 83 c0 01 add $0x1,%eax - release(&ftable.lock); -80100fe1: 83 ec 0c sub $0xc,%esp - f->ref++; -80100fe4: 89 43 04 mov %eax,0x4(%ebx) - release(&ftable.lock); -80100fe7: 68 80 ef 10 80 push $0x8010ef80 -80100fec: e8 af 36 00 00 call 801046a0 - return f; -} -80100ff1: 89 d8 mov %ebx,%eax -80100ff3: 8b 5d fc mov -0x4(%ebp),%ebx -80100ff6: c9 leave -80100ff7: c3 ret - panic("filedup"); -80100ff8: 83 ec 0c sub $0xc,%esp -80100ffb: 68 74 74 10 80 push $0x80107474 -80101000: e8 8b f3 ff ff call 80100390 -80101005: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010100c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -80101010 : - -// Close file f. (Decrement ref count, close when reaches 0.) -void fileclose(struct file *f) { -80101010: 55 push %ebp -80101011: 89 e5 mov %esp,%ebp -80101013: 57 push %edi -80101014: 56 push %esi -80101015: 53 push %ebx -80101016: 83 ec 28 sub $0x28,%esp -80101019: 8b 5d 08 mov 0x8(%ebp),%ebx - struct file ff; - - acquire(&ftable.lock); -8010101c: 68 80 ef 10 80 push $0x8010ef80 -80101021: e8 da 36 00 00 call 80104700 - if (f->ref < 1) { -80101026: 8b 53 04 mov 0x4(%ebx),%edx -80101029: 83 c4 10 add $0x10,%esp -8010102c: 85 d2 test %edx,%edx -8010102e: 0f 8e a5 00 00 00 jle 801010d9 - panic("fileclose"); - } - if (--f->ref > 0) { -80101034: 83 ea 01 sub $0x1,%edx -80101037: 89 53 04 mov %edx,0x4(%ebx) -8010103a: 75 44 jne 80101080 - release(&ftable.lock); - return; - } - ff = *f; -8010103c: 0f b6 43 09 movzbl 0x9(%ebx),%eax - f->ref = 0; - f->type = FD_NONE; - release(&ftable.lock); -80101040: 83 ec 0c sub $0xc,%esp - ff = *f; -80101043: 8b 3b mov (%ebx),%edi - f->type = FD_NONE; -80101045: c7 03 00 00 00 00 movl $0x0,(%ebx) - ff = *f; -8010104b: 8b 73 0c mov 0xc(%ebx),%esi -8010104e: 88 45 e7 mov %al,-0x19(%ebp) -80101051: 8b 43 10 mov 0x10(%ebx),%eax - release(&ftable.lock); -80101054: 68 80 ef 10 80 push $0x8010ef80 - ff = *f; -80101059: 89 45 e0 mov %eax,-0x20(%ebp) - release(&ftable.lock); -8010105c: e8 3f 36 00 00 call 801046a0 - - if (ff.type == FD_PIPE) { -80101061: 83 c4 10 add $0x10,%esp -80101064: 83 ff 01 cmp $0x1,%edi -80101067: 74 57 je 801010c0 - pipeclose(ff.pipe, ff.writable); - } - else if (ff.type == FD_INODE) { -80101069: 83 ff 02 cmp $0x2,%edi -8010106c: 74 2a je 80101098 - begin_op(); - iput(ff.ip); - end_op(); - } -} -8010106e: 8d 65 f4 lea -0xc(%ebp),%esp -80101071: 5b pop %ebx -80101072: 5e pop %esi -80101073: 5f pop %edi -80101074: 5d pop %ebp -80101075: c3 ret -80101076: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010107d: 8d 76 00 lea 0x0(%esi),%esi - release(&ftable.lock); -80101080: c7 45 08 80 ef 10 80 movl $0x8010ef80,0x8(%ebp) -} -80101087: 8d 65 f4 lea -0xc(%ebp),%esp -8010108a: 5b pop %ebx -8010108b: 5e pop %esi -8010108c: 5f pop %edi -8010108d: 5d pop %ebp - release(&ftable.lock); -8010108e: e9 0d 36 00 00 jmp 801046a0 -80101093: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -80101097: 90 nop - begin_op(); -80101098: e8 e3 1d 00 00 call 80102e80 - iput(ff.ip); -8010109d: 83 ec 0c sub $0xc,%esp -801010a0: ff 75 e0 push -0x20(%ebp) -801010a3: e8 28 09 00 00 call 801019d0 - end_op(); -801010a8: 83 c4 10 add $0x10,%esp -} -801010ab: 8d 65 f4 lea -0xc(%ebp),%esp -801010ae: 5b pop %ebx -801010af: 5e pop %esi -801010b0: 5f pop %edi -801010b1: 5d pop %ebp - end_op(); -801010b2: e9 39 1e 00 00 jmp 80102ef0 -801010b7: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801010be: 66 90 xchg %ax,%ax - pipeclose(ff.pipe, ff.writable); -801010c0: 0f be 5d e7 movsbl -0x19(%ebp),%ebx -801010c4: 83 ec 08 sub $0x8,%esp -801010c7: 53 push %ebx -801010c8: 56 push %esi -801010c9: e8 c2 25 00 00 call 80103690 -801010ce: 83 c4 10 add $0x10,%esp -} -801010d1: 8d 65 f4 lea -0xc(%ebp),%esp -801010d4: 5b pop %ebx -801010d5: 5e pop %esi -801010d6: 5f pop %edi -801010d7: 5d pop %ebp -801010d8: c3 ret - panic("fileclose"); -801010d9: 83 ec 0c sub $0xc,%esp -801010dc: 68 7c 74 10 80 push $0x8010747c -801010e1: e8 aa f2 ff ff call 80100390 -801010e6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801010ed: 8d 76 00 lea 0x0(%esi),%esi - -801010f0 : - -// Get metadata about file f. -int filestat(struct file *f, struct stat *st) { -801010f0: 55 push %ebp -801010f1: 89 e5 mov %esp,%ebp -801010f3: 53 push %ebx -801010f4: 83 ec 04 sub $0x4,%esp -801010f7: 8b 5d 08 mov 0x8(%ebp),%ebx - if (f->type == FD_INODE) { -801010fa: 83 3b 02 cmpl $0x2,(%ebx) -801010fd: 75 31 jne 80101130 - ilock(f->ip); -801010ff: 83 ec 0c sub $0xc,%esp -80101102: ff 73 10 push 0x10(%ebx) -80101105: e8 96 07 00 00 call 801018a0 - stati(f->ip, st); -8010110a: 58 pop %eax -8010110b: 5a pop %edx -8010110c: ff 75 0c push 0xc(%ebp) -8010110f: ff 73 10 push 0x10(%ebx) -80101112: e8 69 0a 00 00 call 80101b80 - iunlock(f->ip); -80101117: 59 pop %ecx -80101118: ff 73 10 push 0x10(%ebx) -8010111b: e8 60 08 00 00 call 80101980 - return 0; - } - return -1; -} -80101120: 8b 5d fc mov -0x4(%ebp),%ebx - return 0; -80101123: 83 c4 10 add $0x10,%esp -80101126: 31 c0 xor %eax,%eax -} -80101128: c9 leave -80101129: c3 ret -8010112a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi -80101130: 8b 5d fc mov -0x4(%ebp),%ebx - return -1; -80101133: b8 ff ff ff ff mov $0xffffffff,%eax -} -80101138: c9 leave -80101139: c3 ret -8010113a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -80101140 : - -// Read from file f. -int fileread(struct file *f, char *addr, int n) { -80101140: 55 push %ebp -80101141: 89 e5 mov %esp,%ebp -80101143: 57 push %edi -80101144: 56 push %esi -80101145: 53 push %ebx -80101146: 83 ec 0c sub $0xc,%esp -80101149: 8b 5d 08 mov 0x8(%ebp),%ebx -8010114c: 8b 75 0c mov 0xc(%ebp),%esi -8010114f: 8b 7d 10 mov 0x10(%ebp),%edi - int r; - - if (f->readable == 0) { -80101152: 80 7b 08 00 cmpb $0x0,0x8(%ebx) -80101156: 74 60 je 801011b8 - return -1; - } - if (f->type == FD_PIPE) { -80101158: 8b 03 mov (%ebx),%eax -8010115a: 83 f8 01 cmp $0x1,%eax -8010115d: 74 41 je 801011a0 - return piperead(f->pipe, addr, n); - } - if (f->type == FD_INODE) { -8010115f: 83 f8 02 cmp $0x2,%eax -80101162: 75 5b jne 801011bf - ilock(f->ip); -80101164: 83 ec 0c sub $0xc,%esp -80101167: ff 73 10 push 0x10(%ebx) -8010116a: e8 31 07 00 00 call 801018a0 - if ((r = readi(f->ip, addr, f->off, n)) > 0) { -8010116f: 57 push %edi -80101170: ff 73 14 push 0x14(%ebx) -80101173: 56 push %esi -80101174: ff 73 10 push 0x10(%ebx) -80101177: e8 34 0a 00 00 call 80101bb0 -8010117c: 83 c4 20 add $0x20,%esp -8010117f: 89 c6 mov %eax,%esi -80101181: 85 c0 test %eax,%eax -80101183: 7e 03 jle 80101188 - f->off += r; -80101185: 01 43 14 add %eax,0x14(%ebx) - } - iunlock(f->ip); -80101188: 83 ec 0c sub $0xc,%esp -8010118b: ff 73 10 push 0x10(%ebx) -8010118e: e8 ed 07 00 00 call 80101980 - return r; -80101193: 83 c4 10 add $0x10,%esp - } - panic("fileread"); -} -80101196: 8d 65 f4 lea -0xc(%ebp),%esp -80101199: 89 f0 mov %esi,%eax -8010119b: 5b pop %ebx -8010119c: 5e pop %esi -8010119d: 5f pop %edi -8010119e: 5d pop %ebp -8010119f: c3 ret - return piperead(f->pipe, addr, n); -801011a0: 8b 43 0c mov 0xc(%ebx),%eax -801011a3: 89 45 08 mov %eax,0x8(%ebp) -} -801011a6: 8d 65 f4 lea -0xc(%ebp),%esp -801011a9: 5b pop %ebx -801011aa: 5e pop %esi -801011ab: 5f pop %edi -801011ac: 5d pop %ebp - return piperead(f->pipe, addr, n); -801011ad: e9 7e 26 00 00 jmp 80103830 -801011b2: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - return -1; -801011b8: be ff ff ff ff mov $0xffffffff,%esi -801011bd: eb d7 jmp 80101196 - panic("fileread"); -801011bf: 83 ec 0c sub $0xc,%esp -801011c2: 68 86 74 10 80 push $0x80107486 -801011c7: e8 c4 f1 ff ff call 80100390 -801011cc: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -801011d0 : - - -// Write to file f. -int filewrite(struct file *f, char *addr, int n) { -801011d0: 55 push %ebp -801011d1: 89 e5 mov %esp,%ebp -801011d3: 57 push %edi -801011d4: 56 push %esi -801011d5: 53 push %ebx -801011d6: 83 ec 1c sub $0x1c,%esp -801011d9: 8b 45 0c mov 0xc(%ebp),%eax -801011dc: 8b 5d 08 mov 0x8(%ebp),%ebx -801011df: 89 45 dc mov %eax,-0x24(%ebp) -801011e2: 8b 45 10 mov 0x10(%ebp),%eax - int r; - - if (f->writable == 0) { -801011e5: 80 7b 09 00 cmpb $0x0,0x9(%ebx) -int filewrite(struct file *f, char *addr, int n) { -801011e9: 89 45 e4 mov %eax,-0x1c(%ebp) - if (f->writable == 0) { -801011ec: 0f 84 bd 00 00 00 je 801012af - return -1; - } - if (f->type == FD_PIPE) { -801011f2: 8b 03 mov (%ebx),%eax -801011f4: 83 f8 01 cmp $0x1,%eax -801011f7: 0f 84 bf 00 00 00 je 801012bc - return pipewrite(f->pipe, addr, n); - } - if (f->type == FD_INODE) { -801011fd: 83 f8 02 cmp $0x2,%eax -80101200: 0f 85 c8 00 00 00 jne 801012ce - // 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 = ((MAXOPBLOCKS - 1 - 1 - 2) / 2) * 512; - int i = 0; - while (i < n) { -80101206: 8b 45 e4 mov -0x1c(%ebp),%eax - int i = 0; -80101209: 31 f6 xor %esi,%esi - while (i < n) { -8010120b: 85 c0 test %eax,%eax -8010120d: 7f 30 jg 8010123f -8010120f: e9 94 00 00 00 jmp 801012a8 -80101214: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - } - - begin_op(); - ilock(f->ip); - if ((r = writei(f->ip, addr + i, f->off, n1)) > 0) { - f->off += r; -80101218: 01 43 14 add %eax,0x14(%ebx) - } - iunlock(f->ip); -8010121b: 83 ec 0c sub $0xc,%esp -8010121e: ff 73 10 push 0x10(%ebx) - f->off += r; -80101221: 89 45 e0 mov %eax,-0x20(%ebp) - iunlock(f->ip); -80101224: e8 57 07 00 00 call 80101980 - end_op(); -80101229: e8 c2 1c 00 00 call 80102ef0 - - if (r < 0) { - break; - } - if (r != n1) { -8010122e: 8b 45 e0 mov -0x20(%ebp),%eax -80101231: 83 c4 10 add $0x10,%esp -80101234: 39 c7 cmp %eax,%edi -80101236: 75 5c jne 80101294 - panic("short filewrite"); - } - i += r; -80101238: 01 fe add %edi,%esi - while (i < n) { -8010123a: 39 75 e4 cmp %esi,-0x1c(%ebp) -8010123d: 7e 69 jle 801012a8 - int n1 = n - i; -8010123f: 8b 7d e4 mov -0x1c(%ebp),%edi -80101242: b8 00 06 00 00 mov $0x600,%eax -80101247: 29 f7 sub %esi,%edi -80101249: 39 c7 cmp %eax,%edi -8010124b: 0f 4f f8 cmovg %eax,%edi - begin_op(); -8010124e: e8 2d 1c 00 00 call 80102e80 - ilock(f->ip); -80101253: 83 ec 0c sub $0xc,%esp -80101256: ff 73 10 push 0x10(%ebx) -80101259: e8 42 06 00 00 call 801018a0 - if ((r = writei(f->ip, addr + i, f->off, n1)) > 0) { -8010125e: 8b 45 dc mov -0x24(%ebp),%eax -80101261: 57 push %edi -80101262: ff 73 14 push 0x14(%ebx) -80101265: 01 f0 add %esi,%eax -80101267: 50 push %eax -80101268: ff 73 10 push 0x10(%ebx) -8010126b: e8 40 0a 00 00 call 80101cb0 -80101270: 83 c4 20 add $0x20,%esp -80101273: 85 c0 test %eax,%eax -80101275: 7f a1 jg 80101218 - iunlock(f->ip); -80101277: 83 ec 0c sub $0xc,%esp -8010127a: ff 73 10 push 0x10(%ebx) -8010127d: 89 45 e4 mov %eax,-0x1c(%ebp) -80101280: e8 fb 06 00 00 call 80101980 - end_op(); -80101285: e8 66 1c 00 00 call 80102ef0 - if (r < 0) { -8010128a: 8b 45 e4 mov -0x1c(%ebp),%eax -8010128d: 83 c4 10 add $0x10,%esp -80101290: 85 c0 test %eax,%eax -80101292: 75 1b jne 801012af - panic("short filewrite"); -80101294: 83 ec 0c sub $0xc,%esp -80101297: 68 8f 74 10 80 push $0x8010748f -8010129c: e8 ef f0 ff ff call 80100390 -801012a1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - } - return i == n ? n : -1; -801012a8: 89 f0 mov %esi,%eax -801012aa: 3b 75 e4 cmp -0x1c(%ebp),%esi -801012ad: 74 05 je 801012b4 -801012af: b8 ff ff ff ff mov $0xffffffff,%eax - } - panic("filewrite"); -} -801012b4: 8d 65 f4 lea -0xc(%ebp),%esp -801012b7: 5b pop %ebx -801012b8: 5e pop %esi -801012b9: 5f pop %edi -801012ba: 5d pop %ebp -801012bb: c3 ret - return pipewrite(f->pipe, addr, n); -801012bc: 8b 43 0c mov 0xc(%ebx),%eax -801012bf: 89 45 08 mov %eax,0x8(%ebp) -} -801012c2: 8d 65 f4 lea -0xc(%ebp),%esp -801012c5: 5b pop %ebx -801012c6: 5e pop %esi -801012c7: 5f pop %edi -801012c8: 5d pop %ebp - return pipewrite(f->pipe, addr, n); -801012c9: e9 62 24 00 00 jmp 80103730 - panic("filewrite"); -801012ce: 83 ec 0c sub $0xc,%esp -801012d1: 68 95 74 10 80 push $0x80107495 -801012d6: e8 b5 f0 ff ff call 80100390 -801012db: 66 90 xchg %ax,%ax -801012dd: 66 90 xchg %ax,%ax -801012df: 90 nop - -801012e0 : - } - panic("balloc: out of blocks"); -} - -// Free a disk block. -static void bfree(int dev, uint b) { -801012e0: 55 push %ebp -801012e1: 89 c1 mov %eax,%ecx - struct buf *bp; - int bi, m; - - bp = bread(dev, BBLOCK(b, sb)); -801012e3: 89 d0 mov %edx,%eax -801012e5: c1 e8 0c shr $0xc,%eax -801012e8: 03 05 ec 15 11 80 add 0x801115ec,%eax -static void bfree(int dev, uint b) { -801012ee: 89 e5 mov %esp,%ebp -801012f0: 56 push %esi -801012f1: 53 push %ebx -801012f2: 89 d3 mov %edx,%ebx - bp = bread(dev, BBLOCK(b, sb)); -801012f4: 83 ec 08 sub $0x8,%esp -801012f7: 50 push %eax -801012f8: 51 push %ecx -801012f9: e8 d2 ed ff ff call 801000d0 - bi = b % BPB; - m = 1 << (bi % 8); -801012fe: 89 d9 mov %ebx,%ecx - if ((bp->data[bi / 8] & m) == 0) { -80101300: c1 fb 03 sar $0x3,%ebx -80101303: 83 c4 10 add $0x10,%esp - bp = bread(dev, BBLOCK(b, sb)); -80101306: 89 c6 mov %eax,%esi - m = 1 << (bi % 8); -80101308: 83 e1 07 and $0x7,%ecx -8010130b: b8 01 00 00 00 mov $0x1,%eax - if ((bp->data[bi / 8] & m) == 0) { -80101310: 81 e3 ff 01 00 00 and $0x1ff,%ebx - m = 1 << (bi % 8); -80101316: d3 e0 shl %cl,%eax - if ((bp->data[bi / 8] & m) == 0) { -80101318: 0f b6 4c 1e 5c movzbl 0x5c(%esi,%ebx,1),%ecx -8010131d: 85 c1 test %eax,%ecx -8010131f: 74 23 je 80101344 - panic("freeing free block"); - } - bp->data[bi / 8] &= ~m; -80101321: f7 d0 not %eax - log_write(bp); -80101323: 83 ec 0c sub $0xc,%esp - bp->data[bi / 8] &= ~m; -80101326: 21 c8 and %ecx,%eax -80101328: 88 44 1e 5c mov %al,0x5c(%esi,%ebx,1) - log_write(bp); -8010132c: 56 push %esi -8010132d: e8 2e 1d 00 00 call 80103060 - brelse(bp); -80101332: 89 34 24 mov %esi,(%esp) -80101335: e8 b6 ee ff ff call 801001f0 -} -8010133a: 83 c4 10 add $0x10,%esp -8010133d: 8d 65 f8 lea -0x8(%ebp),%esp -80101340: 5b pop %ebx -80101341: 5e pop %esi -80101342: 5d pop %ebp -80101343: c3 ret - panic("freeing free block"); -80101344: 83 ec 0c sub $0xc,%esp -80101347: 68 9f 74 10 80 push $0x8010749f -8010134c: e8 3f f0 ff ff call 80100390 -80101351: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80101358: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010135f: 90 nop - -80101360 : -static uint balloc(uint dev) { -80101360: 55 push %ebp -80101361: 89 e5 mov %esp,%ebp -80101363: 57 push %edi -80101364: 56 push %esi -80101365: 53 push %ebx -80101366: 83 ec 1c sub $0x1c,%esp - for (b = 0; b < sb.size; b += BPB) { -80101369: 8b 0d d4 15 11 80 mov 0x801115d4,%ecx -static uint balloc(uint dev) { -8010136f: 89 45 d8 mov %eax,-0x28(%ebp) - for (b = 0; b < sb.size; b += BPB) { -80101372: 85 c9 test %ecx,%ecx -80101374: 0f 84 87 00 00 00 je 80101401 -8010137a: c7 45 dc 00 00 00 00 movl $0x0,-0x24(%ebp) - bp = bread(dev, BBLOCK(b, sb)); -80101381: 8b 75 dc mov -0x24(%ebp),%esi -80101384: 83 ec 08 sub $0x8,%esp -80101387: 89 f0 mov %esi,%eax -80101389: c1 f8 0c sar $0xc,%eax -8010138c: 03 05 ec 15 11 80 add 0x801115ec,%eax -80101392: 50 push %eax -80101393: ff 75 d8 push -0x28(%ebp) -80101396: e8 35 ed ff ff call 801000d0 -8010139b: 83 c4 10 add $0x10,%esp -8010139e: 89 45 e4 mov %eax,-0x1c(%ebp) - for (bi = 0; bi < BPB && b + bi < sb.size; bi++) { -801013a1: a1 d4 15 11 80 mov 0x801115d4,%eax -801013a6: 89 45 e0 mov %eax,-0x20(%ebp) -801013a9: 31 c0 xor %eax,%eax -801013ab: eb 2f jmp 801013dc -801013ad: 8d 76 00 lea 0x0(%esi),%esi - m = 1 << (bi % 8); -801013b0: 89 c1 mov %eax,%ecx -801013b2: bb 01 00 00 00 mov $0x1,%ebx - if ((bp->data[bi / 8] & m) == 0) { // Is block free? -801013b7: 8b 55 e4 mov -0x1c(%ebp),%edx - m = 1 << (bi % 8); -801013ba: 83 e1 07 and $0x7,%ecx -801013bd: d3 e3 shl %cl,%ebx - if ((bp->data[bi / 8] & m) == 0) { // Is block free? -801013bf: 89 c1 mov %eax,%ecx -801013c1: c1 f9 03 sar $0x3,%ecx -801013c4: 0f b6 7c 0a 5c movzbl 0x5c(%edx,%ecx,1),%edi -801013c9: 89 fa mov %edi,%edx -801013cb: 85 df test %ebx,%edi -801013cd: 74 41 je 80101410 - for (bi = 0; bi < BPB && b + bi < sb.size; bi++) { -801013cf: 83 c0 01 add $0x1,%eax -801013d2: 83 c6 01 add $0x1,%esi -801013d5: 3d 00 10 00 00 cmp $0x1000,%eax -801013da: 74 05 je 801013e1 -801013dc: 39 75 e0 cmp %esi,-0x20(%ebp) -801013df: 77 cf ja 801013b0 - brelse(bp); -801013e1: 83 ec 0c sub $0xc,%esp -801013e4: ff 75 e4 push -0x1c(%ebp) -801013e7: e8 04 ee ff ff call 801001f0 - for (b = 0; b < sb.size; b += BPB) { -801013ec: 81 45 dc 00 10 00 00 addl $0x1000,-0x24(%ebp) -801013f3: 83 c4 10 add $0x10,%esp -801013f6: 8b 45 dc mov -0x24(%ebp),%eax -801013f9: 39 05 d4 15 11 80 cmp %eax,0x801115d4 -801013ff: 77 80 ja 80101381 - panic("balloc: out of blocks"); -80101401: 83 ec 0c sub $0xc,%esp -80101404: 68 b2 74 10 80 push $0x801074b2 -80101409: e8 82 ef ff ff call 80100390 -8010140e: 66 90 xchg %ax,%ax - bp->data[bi / 8] |= m; // Mark block in use. -80101410: 8b 7d e4 mov -0x1c(%ebp),%edi - log_write(bp); -80101413: 83 ec 0c sub $0xc,%esp - bp->data[bi / 8] |= m; // Mark block in use. -80101416: 09 da or %ebx,%edx -80101418: 88 54 0f 5c mov %dl,0x5c(%edi,%ecx,1) - log_write(bp); -8010141c: 57 push %edi -8010141d: e8 3e 1c 00 00 call 80103060 - brelse(bp); -80101422: 89 3c 24 mov %edi,(%esp) -80101425: e8 c6 ed ff ff call 801001f0 - bp = bread(dev, bno); -8010142a: 58 pop %eax -8010142b: 5a pop %edx -8010142c: 56 push %esi -8010142d: ff 75 d8 push -0x28(%ebp) -80101430: e8 9b ec ff ff call 801000d0 - memset(bp->data, 0, BSIZE); -80101435: 83 c4 0c add $0xc,%esp - bp = bread(dev, bno); -80101438: 89 c3 mov %eax,%ebx - memset(bp->data, 0, BSIZE); -8010143a: 8d 40 5c lea 0x5c(%eax),%eax -8010143d: 68 00 02 00 00 push $0x200 -80101442: 6a 00 push $0x0 -80101444: 50 push %eax -80101445: e8 76 33 00 00 call 801047c0 - log_write(bp); -8010144a: 89 1c 24 mov %ebx,(%esp) -8010144d: e8 0e 1c 00 00 call 80103060 - brelse(bp); -80101452: 89 1c 24 mov %ebx,(%esp) -80101455: e8 96 ed ff ff call 801001f0 -} -8010145a: 8d 65 f4 lea -0xc(%ebp),%esp -8010145d: 89 f0 mov %esi,%eax -8010145f: 5b pop %ebx -80101460: 5e pop %esi -80101461: 5f pop %edi -80101462: 5d pop %ebp -80101463: c3 ret -80101464: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010146b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -8010146f: 90 nop - -80101470 : -} - -// 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) { -80101470: 55 push %ebp -80101471: 89 e5 mov %esp,%ebp -80101473: 57 push %edi -80101474: 89 c7 mov %eax,%edi -80101476: 56 push %esi - struct inode *ip, *empty; - - acquire(&icache.lock); - - // Is the inode already cached? - empty = 0; -80101477: 31 f6 xor %esi,%esi -static struct inode* iget(uint dev, uint inum) { -80101479: 53 push %ebx - for (ip = &icache.inode[0]; ip < &icache.inode[NINODE]; ip++) { -8010147a: bb b4 f9 10 80 mov $0x8010f9b4,%ebx -static struct inode* iget(uint dev, uint inum) { -8010147f: 83 ec 28 sub $0x28,%esp -80101482: 89 55 e4 mov %edx,-0x1c(%ebp) - acquire(&icache.lock); -80101485: 68 80 f9 10 80 push $0x8010f980 -8010148a: e8 71 32 00 00 call 80104700 - for (ip = &icache.inode[0]; ip < &icache.inode[NINODE]; ip++) { -8010148f: 8b 55 e4 mov -0x1c(%ebp),%edx - acquire(&icache.lock); -80101492: 83 c4 10 add $0x10,%esp -80101495: eb 1b jmp 801014b2 -80101497: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010149e: 66 90 xchg %ax,%ax - if (ip->ref > 0 && ip->dev == dev && ip->inum == inum) { -801014a0: 39 3b cmp %edi,(%ebx) -801014a2: 74 6c je 80101510 - for (ip = &icache.inode[0]; ip < &icache.inode[NINODE]; ip++) { -801014a4: 81 c3 90 00 00 00 add $0x90,%ebx -801014aa: 81 fb d4 15 11 80 cmp $0x801115d4,%ebx -801014b0: 73 26 jae 801014d8 - if (ip->ref > 0 && ip->dev == dev && ip->inum == inum) { -801014b2: 8b 43 08 mov 0x8(%ebx),%eax -801014b5: 85 c0 test %eax,%eax -801014b7: 7f e7 jg 801014a0 - ip->ref++; - release(&icache.lock); - return ip; - } - if (empty == 0 && ip->ref == 0) { // Remember empty slot. -801014b9: 85 f6 test %esi,%esi -801014bb: 75 e7 jne 801014a4 -801014bd: 85 c0 test %eax,%eax -801014bf: 75 76 jne 80101537 -801014c1: 89 de mov %ebx,%esi - for (ip = &icache.inode[0]; ip < &icache.inode[NINODE]; ip++) { -801014c3: 81 c3 90 00 00 00 add $0x90,%ebx -801014c9: 81 fb d4 15 11 80 cmp $0x801115d4,%ebx -801014cf: 72 e1 jb 801014b2 -801014d1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - empty = ip; - } - } - - // Recycle an inode cache entry. - if (empty == 0) { -801014d8: 85 f6 test %esi,%esi -801014da: 74 79 je 80101555 - ip = empty; - ip->dev = dev; - ip->inum = inum; - ip->ref = 1; - ip->valid = 0; - release(&icache.lock); -801014dc: 83 ec 0c sub $0xc,%esp - ip->dev = dev; -801014df: 89 3e mov %edi,(%esi) - ip->inum = inum; -801014e1: 89 56 04 mov %edx,0x4(%esi) - ip->ref = 1; -801014e4: c7 46 08 01 00 00 00 movl $0x1,0x8(%esi) - ip->valid = 0; -801014eb: c7 46 4c 00 00 00 00 movl $0x0,0x4c(%esi) - release(&icache.lock); -801014f2: 68 80 f9 10 80 push $0x8010f980 -801014f7: e8 a4 31 00 00 call 801046a0 - - return ip; -801014fc: 83 c4 10 add $0x10,%esp -} -801014ff: 8d 65 f4 lea -0xc(%ebp),%esp -80101502: 89 f0 mov %esi,%eax -80101504: 5b pop %ebx -80101505: 5e pop %esi -80101506: 5f pop %edi -80101507: 5d pop %ebp -80101508: c3 ret -80101509: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - if (ip->ref > 0 && ip->dev == dev && ip->inum == inum) { -80101510: 39 53 04 cmp %edx,0x4(%ebx) -80101513: 75 8f jne 801014a4 - release(&icache.lock); -80101515: 83 ec 0c sub $0xc,%esp - ip->ref++; -80101518: 83 c0 01 add $0x1,%eax - return ip; -8010151b: 89 de mov %ebx,%esi - release(&icache.lock); -8010151d: 68 80 f9 10 80 push $0x8010f980 - ip->ref++; -80101522: 89 43 08 mov %eax,0x8(%ebx) - release(&icache.lock); -80101525: e8 76 31 00 00 call 801046a0 - return ip; -8010152a: 83 c4 10 add $0x10,%esp -} -8010152d: 8d 65 f4 lea -0xc(%ebp),%esp -80101530: 89 f0 mov %esi,%eax -80101532: 5b pop %ebx -80101533: 5e pop %esi -80101534: 5f pop %edi -80101535: 5d pop %ebp -80101536: c3 ret - for (ip = &icache.inode[0]; ip < &icache.inode[NINODE]; ip++) { -80101537: 81 c3 90 00 00 00 add $0x90,%ebx -8010153d: 81 fb d4 15 11 80 cmp $0x801115d4,%ebx -80101543: 73 10 jae 80101555 - if (ip->ref > 0 && ip->dev == dev && ip->inum == inum) { -80101545: 8b 43 08 mov 0x8(%ebx),%eax -80101548: 85 c0 test %eax,%eax -8010154a: 0f 8f 50 ff ff ff jg 801014a0 -80101550: e9 68 ff ff ff jmp 801014bd - panic("iget: no inodes"); -80101555: 83 ec 0c sub $0xc,%esp -80101558: 68 c8 74 10 80 push $0x801074c8 -8010155d: e8 2e ee ff ff call 80100390 -80101562: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80101569: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -80101570 : -// are listed in ip->addrs[]. The next NINDIRECT blocks are -// listed in block ip->addrs[NDIRECT]. - -// 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) { -80101570: 55 push %ebp -80101571: 89 e5 mov %esp,%ebp -80101573: 57 push %edi -80101574: 56 push %esi -80101575: 89 c6 mov %eax,%esi -80101577: 53 push %ebx -80101578: 83 ec 1c sub $0x1c,%esp - uint addr, *a; - struct buf *bp; - - if (bn < NDIRECT) { -8010157b: 83 fa 0b cmp $0xb,%edx -8010157e: 0f 86 8c 00 00 00 jbe 80101610 - if ((addr = ip->addrs[bn]) == 0) { - ip->addrs[bn] = addr = balloc(ip->dev); - } - return addr; - } - bn -= NDIRECT; -80101584: 8d 5a f4 lea -0xc(%edx),%ebx - - if (bn < NINDIRECT) { -80101587: 83 fb 7f cmp $0x7f,%ebx -8010158a: 0f 87 a2 00 00 00 ja 80101632 - // Load indirect block, allocating if necessary. - if ((addr = ip->addrs[NDIRECT]) == 0) { -80101590: 8b 80 8c 00 00 00 mov 0x8c(%eax),%eax -80101596: 85 c0 test %eax,%eax -80101598: 74 5e je 801015f8 - ip->addrs[NDIRECT] = addr = balloc(ip->dev); - } - bp = bread(ip->dev, addr); -8010159a: 83 ec 08 sub $0x8,%esp -8010159d: 50 push %eax -8010159e: ff 36 push (%esi) -801015a0: e8 2b eb ff ff call 801000d0 - a = (uint*)bp->data; - if ((addr = a[bn]) == 0) { -801015a5: 83 c4 10 add $0x10,%esp -801015a8: 8d 5c 98 5c lea 0x5c(%eax,%ebx,4),%ebx - bp = bread(ip->dev, addr); -801015ac: 89 c2 mov %eax,%edx - if ((addr = a[bn]) == 0) { -801015ae: 8b 3b mov (%ebx),%edi -801015b0: 85 ff test %edi,%edi -801015b2: 74 1c je 801015d0 - a[bn] = addr = balloc(ip->dev); - log_write(bp); - } - brelse(bp); -801015b4: 83 ec 0c sub $0xc,%esp -801015b7: 52 push %edx -801015b8: e8 33 ec ff ff call 801001f0 -801015bd: 83 c4 10 add $0x10,%esp - return addr; - } - - panic("bmap: out of range"); -} -801015c0: 8d 65 f4 lea -0xc(%ebp),%esp -801015c3: 89 f8 mov %edi,%eax -801015c5: 5b pop %ebx -801015c6: 5e pop %esi -801015c7: 5f pop %edi -801015c8: 5d pop %ebp -801015c9: c3 ret -801015ca: 8d b6 00 00 00 00 lea 0x0(%esi),%esi -801015d0: 89 45 e4 mov %eax,-0x1c(%ebp) - a[bn] = addr = balloc(ip->dev); -801015d3: 8b 06 mov (%esi),%eax -801015d5: e8 86 fd ff ff call 80101360 - log_write(bp); -801015da: 8b 55 e4 mov -0x1c(%ebp),%edx -801015dd: 83 ec 0c sub $0xc,%esp - a[bn] = addr = balloc(ip->dev); -801015e0: 89 03 mov %eax,(%ebx) -801015e2: 89 c7 mov %eax,%edi - log_write(bp); -801015e4: 52 push %edx -801015e5: e8 76 1a 00 00 call 80103060 -801015ea: 8b 55 e4 mov -0x1c(%ebp),%edx -801015ed: 83 c4 10 add $0x10,%esp -801015f0: eb c2 jmp 801015b4 -801015f2: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - ip->addrs[NDIRECT] = addr = balloc(ip->dev); -801015f8: 8b 06 mov (%esi),%eax -801015fa: e8 61 fd ff ff call 80101360 -801015ff: 89 86 8c 00 00 00 mov %eax,0x8c(%esi) -80101605: eb 93 jmp 8010159a -80101607: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010160e: 66 90 xchg %ax,%ax - if ((addr = ip->addrs[bn]) == 0) { -80101610: 8d 5a 14 lea 0x14(%edx),%ebx -80101613: 8b 7c 98 0c mov 0xc(%eax,%ebx,4),%edi -80101617: 85 ff test %edi,%edi -80101619: 75 a5 jne 801015c0 - ip->addrs[bn] = addr = balloc(ip->dev); -8010161b: 8b 00 mov (%eax),%eax -8010161d: e8 3e fd ff ff call 80101360 -80101622: 89 44 9e 0c mov %eax,0xc(%esi,%ebx,4) -80101626: 89 c7 mov %eax,%edi -} -80101628: 8d 65 f4 lea -0xc(%ebp),%esp -8010162b: 5b pop %ebx -8010162c: 89 f8 mov %edi,%eax -8010162e: 5e pop %esi -8010162f: 5f pop %edi -80101630: 5d pop %ebp -80101631: c3 ret - panic("bmap: out of range"); -80101632: 83 ec 0c sub $0xc,%esp -80101635: 68 d8 74 10 80 push $0x801074d8 -8010163a: e8 51 ed ff ff call 80100390 -8010163f: 90 nop - -80101640 : -void readsb(int dev, struct superblock *sb) { -80101640: 55 push %ebp -80101641: 89 e5 mov %esp,%ebp -80101643: 56 push %esi -80101644: 53 push %ebx -80101645: 8b 75 0c mov 0xc(%ebp),%esi - bp = bread(dev, 1); -80101648: 83 ec 08 sub $0x8,%esp -8010164b: 6a 01 push $0x1 -8010164d: ff 75 08 push 0x8(%ebp) -80101650: e8 7b ea ff ff call 801000d0 - memmove(sb, bp->data, sizeof(*sb)); -80101655: 83 c4 0c add $0xc,%esp - bp = bread(dev, 1); -80101658: 89 c3 mov %eax,%ebx - memmove(sb, bp->data, sizeof(*sb)); -8010165a: 8d 40 5c lea 0x5c(%eax),%eax -8010165d: 6a 1c push $0x1c -8010165f: 50 push %eax -80101660: 56 push %esi -80101661: e8 fa 31 00 00 call 80104860 - brelse(bp); -80101666: 89 5d 08 mov %ebx,0x8(%ebp) -80101669: 83 c4 10 add $0x10,%esp -} -8010166c: 8d 65 f8 lea -0x8(%ebp),%esp -8010166f: 5b pop %ebx -80101670: 5e pop %esi -80101671: 5d pop %ebp - brelse(bp); -80101672: e9 79 eb ff ff jmp 801001f0 -80101677: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010167e: 66 90 xchg %ax,%ax - -80101680 : -void iinit(int dev) { -80101680: 55 push %ebp -80101681: 89 e5 mov %esp,%ebp -80101683: 53 push %ebx -80101684: bb c0 f9 10 80 mov $0x8010f9c0,%ebx -80101689: 83 ec 0c sub $0xc,%esp - initlock(&icache.lock, "icache"); -8010168c: 68 eb 74 10 80 push $0x801074eb -80101691: 68 80 f9 10 80 push $0x8010f980 -80101696: e8 95 2e 00 00 call 80104530 - for (i = 0; i < NINODE; i++) { -8010169b: 83 c4 10 add $0x10,%esp -8010169e: 66 90 xchg %ax,%ax - initsleeplock(&icache.inode[i].lock, "inode"); -801016a0: 83 ec 08 sub $0x8,%esp -801016a3: 68 f2 74 10 80 push $0x801074f2 -801016a8: 53 push %ebx - for (i = 0; i < NINODE; i++) { -801016a9: 81 c3 90 00 00 00 add $0x90,%ebx - initsleeplock(&icache.inode[i].lock, "inode"); -801016af: e8 4c 2d 00 00 call 80104400 - for (i = 0; i < NINODE; i++) { -801016b4: 83 c4 10 add $0x10,%esp -801016b7: 81 fb e0 15 11 80 cmp $0x801115e0,%ebx -801016bd: 75 e1 jne 801016a0 - bp = bread(dev, 1); -801016bf: 83 ec 08 sub $0x8,%esp -801016c2: 6a 01 push $0x1 -801016c4: ff 75 08 push 0x8(%ebp) -801016c7: e8 04 ea ff ff call 801000d0 - memmove(sb, bp->data, sizeof(*sb)); -801016cc: 83 c4 0c add $0xc,%esp - bp = bread(dev, 1); -801016cf: 89 c3 mov %eax,%ebx - memmove(sb, bp->data, sizeof(*sb)); -801016d1: 8d 40 5c lea 0x5c(%eax),%eax -801016d4: 6a 1c push $0x1c -801016d6: 50 push %eax -801016d7: 68 d4 15 11 80 push $0x801115d4 -801016dc: e8 7f 31 00 00 call 80104860 - brelse(bp); -801016e1: 89 1c 24 mov %ebx,(%esp) -801016e4: e8 07 eb ff ff call 801001f0 - cprintf("sb: size %d nblocks %d ninodes %d nlog %d logstart %d\ -801016e9: ff 35 ec 15 11 80 push 0x801115ec -801016ef: ff 35 e8 15 11 80 push 0x801115e8 -801016f5: ff 35 e4 15 11 80 push 0x801115e4 -801016fb: ff 35 e0 15 11 80 push 0x801115e0 -80101701: ff 35 dc 15 11 80 push 0x801115dc -80101707: ff 35 d8 15 11 80 push 0x801115d8 -8010170d: ff 35 d4 15 11 80 push 0x801115d4 -80101713: 68 58 75 10 80 push $0x80107558 -80101718: e8 93 ef ff ff call 801006b0 -} -8010171d: 8b 5d fc mov -0x4(%ebp),%ebx -80101720: 83 c4 30 add $0x30,%esp -80101723: c9 leave -80101724: c3 ret -80101725: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010172c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -80101730 : -struct inode* ialloc(uint dev, short type) { -80101730: 55 push %ebp -80101731: 89 e5 mov %esp,%ebp -80101733: 57 push %edi -80101734: 56 push %esi -80101735: 53 push %ebx -80101736: 83 ec 1c sub $0x1c,%esp -80101739: 8b 45 0c mov 0xc(%ebp),%eax - for (inum = 1; inum < sb.ninodes; inum++) { -8010173c: 83 3d dc 15 11 80 01 cmpl $0x1,0x801115dc -struct inode* ialloc(uint dev, short type) { -80101743: 8b 75 08 mov 0x8(%ebp),%esi -80101746: 89 45 e4 mov %eax,-0x1c(%ebp) - for (inum = 1; inum < sb.ninodes; inum++) { -80101749: 0f 86 91 00 00 00 jbe 801017e0 -8010174f: bf 01 00 00 00 mov $0x1,%edi -80101754: eb 21 jmp 80101777 -80101756: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010175d: 8d 76 00 lea 0x0(%esi),%esi - brelse(bp); -80101760: 83 ec 0c sub $0xc,%esp - for (inum = 1; inum < sb.ninodes; inum++) { -80101763: 83 c7 01 add $0x1,%edi - brelse(bp); -80101766: 53 push %ebx -80101767: e8 84 ea ff ff call 801001f0 - for (inum = 1; inum < sb.ninodes; inum++) { -8010176c: 83 c4 10 add $0x10,%esp -8010176f: 3b 3d dc 15 11 80 cmp 0x801115dc,%edi -80101775: 73 69 jae 801017e0 - bp = bread(dev, IBLOCK(inum, sb)); -80101777: 89 f8 mov %edi,%eax -80101779: 83 ec 08 sub $0x8,%esp -8010177c: c1 e8 03 shr $0x3,%eax -8010177f: 03 05 e8 15 11 80 add 0x801115e8,%eax -80101785: 50 push %eax -80101786: 56 push %esi -80101787: e8 44 e9 ff ff call 801000d0 - if (dip->type == 0) { // a free inode -8010178c: 83 c4 10 add $0x10,%esp - bp = bread(dev, IBLOCK(inum, sb)); -8010178f: 89 c3 mov %eax,%ebx - dip = (struct dinode*)bp->data + inum % IPB; -80101791: 89 f8 mov %edi,%eax -80101793: 83 e0 07 and $0x7,%eax -80101796: c1 e0 06 shl $0x6,%eax -80101799: 8d 4c 03 5c lea 0x5c(%ebx,%eax,1),%ecx - if (dip->type == 0) { // a free inode -8010179d: 66 83 39 00 cmpw $0x0,(%ecx) -801017a1: 75 bd jne 80101760 - memset(dip, 0, sizeof(*dip)); -801017a3: 83 ec 04 sub $0x4,%esp -801017a6: 89 4d e0 mov %ecx,-0x20(%ebp) -801017a9: 6a 40 push $0x40 -801017ab: 6a 00 push $0x0 -801017ad: 51 push %ecx -801017ae: e8 0d 30 00 00 call 801047c0 - dip->type = type; -801017b3: 0f b7 45 e4 movzwl -0x1c(%ebp),%eax -801017b7: 8b 4d e0 mov -0x20(%ebp),%ecx -801017ba: 66 89 01 mov %ax,(%ecx) - log_write(bp); // mark it allocated on the disk -801017bd: 89 1c 24 mov %ebx,(%esp) -801017c0: e8 9b 18 00 00 call 80103060 - brelse(bp); -801017c5: 89 1c 24 mov %ebx,(%esp) -801017c8: e8 23 ea ff ff call 801001f0 - return iget(dev, inum); -801017cd: 83 c4 10 add $0x10,%esp -} -801017d0: 8d 65 f4 lea -0xc(%ebp),%esp - return iget(dev, inum); -801017d3: 89 fa mov %edi,%edx -} -801017d5: 5b pop %ebx - return iget(dev, inum); -801017d6: 89 f0 mov %esi,%eax -} -801017d8: 5e pop %esi -801017d9: 5f pop %edi -801017da: 5d pop %ebp - return iget(dev, inum); -801017db: e9 90 fc ff ff jmp 80101470 - panic("ialloc: no inodes"); -801017e0: 83 ec 0c sub $0xc,%esp -801017e3: 68 f8 74 10 80 push $0x801074f8 -801017e8: e8 a3 eb ff ff call 80100390 -801017ed: 8d 76 00 lea 0x0(%esi),%esi - -801017f0 : -void iupdate(struct inode *ip) { -801017f0: 55 push %ebp -801017f1: 89 e5 mov %esp,%ebp -801017f3: 56 push %esi -801017f4: 53 push %ebx -801017f5: 8b 5d 08 mov 0x8(%ebp),%ebx - bp = bread(ip->dev, IBLOCK(ip->inum, sb)); -801017f8: 8b 43 04 mov 0x4(%ebx),%eax - memmove(dip->addrs, ip->addrs, sizeof(ip->addrs)); -801017fb: 83 c3 5c add $0x5c,%ebx - bp = bread(ip->dev, IBLOCK(ip->inum, sb)); -801017fe: 83 ec 08 sub $0x8,%esp -80101801: c1 e8 03 shr $0x3,%eax -80101804: 03 05 e8 15 11 80 add 0x801115e8,%eax -8010180a: 50 push %eax -8010180b: ff 73 a4 push -0x5c(%ebx) -8010180e: e8 bd e8 ff ff call 801000d0 - dip->type = ip->type; -80101813: 0f b7 53 f4 movzwl -0xc(%ebx),%edx - memmove(dip->addrs, ip->addrs, sizeof(ip->addrs)); -80101817: 83 c4 0c add $0xc,%esp - bp = bread(ip->dev, IBLOCK(ip->inum, sb)); -8010181a: 89 c6 mov %eax,%esi - dip = (struct dinode*)bp->data + ip->inum % IPB; -8010181c: 8b 43 a8 mov -0x58(%ebx),%eax -8010181f: 83 e0 07 and $0x7,%eax -80101822: c1 e0 06 shl $0x6,%eax -80101825: 8d 44 06 5c lea 0x5c(%esi,%eax,1),%eax - dip->type = ip->type; -80101829: 66 89 10 mov %dx,(%eax) - dip->major = ip->major; -8010182c: 0f b7 53 f6 movzwl -0xa(%ebx),%edx - memmove(dip->addrs, ip->addrs, sizeof(ip->addrs)); -80101830: 83 c0 0c add $0xc,%eax - dip->major = ip->major; -80101833: 66 89 50 f6 mov %dx,-0xa(%eax) - dip->minor = ip->minor; -80101837: 0f b7 53 f8 movzwl -0x8(%ebx),%edx -8010183b: 66 89 50 f8 mov %dx,-0x8(%eax) - dip->nlink = ip->nlink; -8010183f: 0f b7 53 fa movzwl -0x6(%ebx),%edx -80101843: 66 89 50 fa mov %dx,-0x6(%eax) - dip->size = ip->size; -80101847: 8b 53 fc mov -0x4(%ebx),%edx -8010184a: 89 50 fc mov %edx,-0x4(%eax) - memmove(dip->addrs, ip->addrs, sizeof(ip->addrs)); -8010184d: 6a 34 push $0x34 -8010184f: 53 push %ebx -80101850: 50 push %eax -80101851: e8 0a 30 00 00 call 80104860 - log_write(bp); -80101856: 89 34 24 mov %esi,(%esp) -80101859: e8 02 18 00 00 call 80103060 - brelse(bp); -8010185e: 89 75 08 mov %esi,0x8(%ebp) -80101861: 83 c4 10 add $0x10,%esp -} -80101864: 8d 65 f8 lea -0x8(%ebp),%esp -80101867: 5b pop %ebx -80101868: 5e pop %esi -80101869: 5d pop %ebp - brelse(bp); -8010186a: e9 81 e9 ff ff jmp 801001f0 -8010186f: 90 nop - -80101870 : -struct inode* idup(struct inode *ip) { -80101870: 55 push %ebp -80101871: 89 e5 mov %esp,%ebp -80101873: 53 push %ebx -80101874: 83 ec 10 sub $0x10,%esp -80101877: 8b 5d 08 mov 0x8(%ebp),%ebx - acquire(&icache.lock); -8010187a: 68 80 f9 10 80 push $0x8010f980 -8010187f: e8 7c 2e 00 00 call 80104700 - ip->ref++; -80101884: 83 43 08 01 addl $0x1,0x8(%ebx) - release(&icache.lock); -80101888: c7 04 24 80 f9 10 80 movl $0x8010f980,(%esp) -8010188f: e8 0c 2e 00 00 call 801046a0 -} -80101894: 89 d8 mov %ebx,%eax -80101896: 8b 5d fc mov -0x4(%ebp),%ebx -80101899: c9 leave -8010189a: c3 ret -8010189b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -8010189f: 90 nop - -801018a0 : -void ilock(struct inode *ip) { -801018a0: 55 push %ebp -801018a1: 89 e5 mov %esp,%ebp -801018a3: 56 push %esi -801018a4: 53 push %ebx -801018a5: 8b 5d 08 mov 0x8(%ebp),%ebx - if (ip == 0 || ip->ref < 1) { -801018a8: 85 db test %ebx,%ebx -801018aa: 0f 84 b7 00 00 00 je 80101967 -801018b0: 8b 53 08 mov 0x8(%ebx),%edx -801018b3: 85 d2 test %edx,%edx -801018b5: 0f 8e ac 00 00 00 jle 80101967 - acquiresleep(&ip->lock); -801018bb: 83 ec 0c sub $0xc,%esp -801018be: 8d 43 0c lea 0xc(%ebx),%eax -801018c1: 50 push %eax -801018c2: e8 79 2b 00 00 call 80104440 - if (ip->valid == 0) { -801018c7: 8b 43 4c mov 0x4c(%ebx),%eax -801018ca: 83 c4 10 add $0x10,%esp -801018cd: 85 c0 test %eax,%eax -801018cf: 74 0f je 801018e0 -} -801018d1: 8d 65 f8 lea -0x8(%ebp),%esp -801018d4: 5b pop %ebx -801018d5: 5e pop %esi -801018d6: 5d pop %ebp -801018d7: c3 ret -801018d8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801018df: 90 nop - bp = bread(ip->dev, IBLOCK(ip->inum, sb)); -801018e0: 8b 43 04 mov 0x4(%ebx),%eax -801018e3: 83 ec 08 sub $0x8,%esp -801018e6: c1 e8 03 shr $0x3,%eax -801018e9: 03 05 e8 15 11 80 add 0x801115e8,%eax -801018ef: 50 push %eax -801018f0: ff 33 push (%ebx) -801018f2: e8 d9 e7 ff ff call 801000d0 - memmove(ip->addrs, dip->addrs, sizeof(ip->addrs)); -801018f7: 83 c4 0c add $0xc,%esp - bp = bread(ip->dev, IBLOCK(ip->inum, sb)); -801018fa: 89 c6 mov %eax,%esi - dip = (struct dinode*)bp->data + ip->inum % IPB; -801018fc: 8b 43 04 mov 0x4(%ebx),%eax -801018ff: 83 e0 07 and $0x7,%eax -80101902: c1 e0 06 shl $0x6,%eax -80101905: 8d 44 06 5c lea 0x5c(%esi,%eax,1),%eax - ip->type = dip->type; -80101909: 0f b7 10 movzwl (%eax),%edx - memmove(ip->addrs, dip->addrs, sizeof(ip->addrs)); -8010190c: 83 c0 0c add $0xc,%eax - ip->type = dip->type; -8010190f: 66 89 53 50 mov %dx,0x50(%ebx) - ip->major = dip->major; -80101913: 0f b7 50 f6 movzwl -0xa(%eax),%edx -80101917: 66 89 53 52 mov %dx,0x52(%ebx) - ip->minor = dip->minor; -8010191b: 0f b7 50 f8 movzwl -0x8(%eax),%edx -8010191f: 66 89 53 54 mov %dx,0x54(%ebx) - ip->nlink = dip->nlink; -80101923: 0f b7 50 fa movzwl -0x6(%eax),%edx -80101927: 66 89 53 56 mov %dx,0x56(%ebx) - ip->size = dip->size; -8010192b: 8b 50 fc mov -0x4(%eax),%edx -8010192e: 89 53 58 mov %edx,0x58(%ebx) - memmove(ip->addrs, dip->addrs, sizeof(ip->addrs)); -80101931: 6a 34 push $0x34 -80101933: 50 push %eax -80101934: 8d 43 5c lea 0x5c(%ebx),%eax -80101937: 50 push %eax -80101938: e8 23 2f 00 00 call 80104860 - brelse(bp); -8010193d: 89 34 24 mov %esi,(%esp) -80101940: e8 ab e8 ff ff call 801001f0 - if (ip->type == 0) { -80101945: 83 c4 10 add $0x10,%esp -80101948: 66 83 7b 50 00 cmpw $0x0,0x50(%ebx) - ip->valid = 1; -8010194d: c7 43 4c 01 00 00 00 movl $0x1,0x4c(%ebx) - if (ip->type == 0) { -80101954: 0f 85 77 ff ff ff jne 801018d1 - panic("ilock: no type"); -8010195a: 83 ec 0c sub $0xc,%esp -8010195d: 68 10 75 10 80 push $0x80107510 -80101962: e8 29 ea ff ff call 80100390 - panic("ilock"); -80101967: 83 ec 0c sub $0xc,%esp -8010196a: 68 0a 75 10 80 push $0x8010750a -8010196f: e8 1c ea ff ff call 80100390 -80101974: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010197b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -8010197f: 90 nop - -80101980 : -void iunlock(struct inode *ip) { -80101980: 55 push %ebp -80101981: 89 e5 mov %esp,%ebp -80101983: 56 push %esi -80101984: 53 push %ebx -80101985: 8b 5d 08 mov 0x8(%ebp),%ebx - if (ip == 0 || !holdingsleep(&ip->lock) || ip->ref < 1) { -80101988: 85 db test %ebx,%ebx -8010198a: 74 28 je 801019b4 -8010198c: 83 ec 0c sub $0xc,%esp -8010198f: 8d 73 0c lea 0xc(%ebx),%esi -80101992: 56 push %esi -80101993: e8 48 2b 00 00 call 801044e0 -80101998: 83 c4 10 add $0x10,%esp -8010199b: 85 c0 test %eax,%eax -8010199d: 74 15 je 801019b4 -8010199f: 8b 43 08 mov 0x8(%ebx),%eax -801019a2: 85 c0 test %eax,%eax -801019a4: 7e 0e jle 801019b4 - releasesleep(&ip->lock); -801019a6: 89 75 08 mov %esi,0x8(%ebp) -} -801019a9: 8d 65 f8 lea -0x8(%ebp),%esp -801019ac: 5b pop %ebx -801019ad: 5e pop %esi -801019ae: 5d pop %ebp - releasesleep(&ip->lock); -801019af: e9 ec 2a 00 00 jmp 801044a0 - panic("iunlock"); -801019b4: 83 ec 0c sub $0xc,%esp -801019b7: 68 1f 75 10 80 push $0x8010751f -801019bc: e8 cf e9 ff ff call 80100390 -801019c1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801019c8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801019cf: 90 nop - -801019d0 : -void iput(struct inode *ip) { -801019d0: 55 push %ebp -801019d1: 89 e5 mov %esp,%ebp -801019d3: 57 push %edi -801019d4: 56 push %esi -801019d5: 53 push %ebx -801019d6: 83 ec 28 sub $0x28,%esp -801019d9: 8b 5d 08 mov 0x8(%ebp),%ebx - acquiresleep(&ip->lock); -801019dc: 8d 7b 0c lea 0xc(%ebx),%edi -801019df: 57 push %edi -801019e0: e8 5b 2a 00 00 call 80104440 - if (ip->valid && ip->nlink == 0) { -801019e5: 8b 53 4c mov 0x4c(%ebx),%edx -801019e8: 83 c4 10 add $0x10,%esp -801019eb: 85 d2 test %edx,%edx -801019ed: 74 07 je 801019f6 -801019ef: 66 83 7b 56 00 cmpw $0x0,0x56(%ebx) -801019f4: 74 32 je 80101a28 - releasesleep(&ip->lock); -801019f6: 83 ec 0c sub $0xc,%esp -801019f9: 57 push %edi -801019fa: e8 a1 2a 00 00 call 801044a0 - acquire(&icache.lock); -801019ff: c7 04 24 80 f9 10 80 movl $0x8010f980,(%esp) -80101a06: e8 f5 2c 00 00 call 80104700 - ip->ref--; -80101a0b: 83 6b 08 01 subl $0x1,0x8(%ebx) - release(&icache.lock); -80101a0f: 83 c4 10 add $0x10,%esp -80101a12: c7 45 08 80 f9 10 80 movl $0x8010f980,0x8(%ebp) -} -80101a19: 8d 65 f4 lea -0xc(%ebp),%esp -80101a1c: 5b pop %ebx -80101a1d: 5e pop %esi -80101a1e: 5f pop %edi -80101a1f: 5d pop %ebp - release(&icache.lock); -80101a20: e9 7b 2c 00 00 jmp 801046a0 -80101a25: 8d 76 00 lea 0x0(%esi),%esi - acquire(&icache.lock); -80101a28: 83 ec 0c sub $0xc,%esp -80101a2b: 68 80 f9 10 80 push $0x8010f980 -80101a30: e8 cb 2c 00 00 call 80104700 - int r = ip->ref; -80101a35: 8b 73 08 mov 0x8(%ebx),%esi - release(&icache.lock); -80101a38: c7 04 24 80 f9 10 80 movl $0x8010f980,(%esp) -80101a3f: e8 5c 2c 00 00 call 801046a0 - if (r == 1) { -80101a44: 83 c4 10 add $0x10,%esp -80101a47: 83 fe 01 cmp $0x1,%esi -80101a4a: 75 aa jne 801019f6 -80101a4c: 8d 8b 8c 00 00 00 lea 0x8c(%ebx),%ecx -80101a52: 89 7d e4 mov %edi,-0x1c(%ebp) -80101a55: 8d 73 5c lea 0x5c(%ebx),%esi -80101a58: 89 cf mov %ecx,%edi -80101a5a: eb 0b jmp 80101a67 -80101a5c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -static void itrunc(struct inode *ip) { - int i, j; - struct buf *bp; - uint *a; - - for (i = 0; i < NDIRECT; i++) { -80101a60: 83 c6 04 add $0x4,%esi -80101a63: 39 fe cmp %edi,%esi -80101a65: 74 19 je 80101a80 - if (ip->addrs[i]) { -80101a67: 8b 16 mov (%esi),%edx -80101a69: 85 d2 test %edx,%edx -80101a6b: 74 f3 je 80101a60 - bfree(ip->dev, ip->addrs[i]); -80101a6d: 8b 03 mov (%ebx),%eax -80101a6f: e8 6c f8 ff ff call 801012e0 - ip->addrs[i] = 0; -80101a74: c7 06 00 00 00 00 movl $0x0,(%esi) -80101a7a: eb e4 jmp 80101a60 -80101a7c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - } - } - - if (ip->addrs[NDIRECT]) { -80101a80: 8b 83 8c 00 00 00 mov 0x8c(%ebx),%eax -80101a86: 8b 7d e4 mov -0x1c(%ebp),%edi -80101a89: 85 c0 test %eax,%eax -80101a8b: 75 2d jne 80101aba - bfree(ip->dev, ip->addrs[NDIRECT]); - ip->addrs[NDIRECT] = 0; - } - - ip->size = 0; - iupdate(ip); -80101a8d: 83 ec 0c sub $0xc,%esp - ip->size = 0; -80101a90: c7 43 58 00 00 00 00 movl $0x0,0x58(%ebx) - iupdate(ip); -80101a97: 53 push %ebx -80101a98: e8 53 fd ff ff call 801017f0 - ip->type = 0; -80101a9d: 31 c0 xor %eax,%eax -80101a9f: 66 89 43 50 mov %ax,0x50(%ebx) - iupdate(ip); -80101aa3: 89 1c 24 mov %ebx,(%esp) -80101aa6: e8 45 fd ff ff call 801017f0 - ip->valid = 0; -80101aab: c7 43 4c 00 00 00 00 movl $0x0,0x4c(%ebx) -80101ab2: 83 c4 10 add $0x10,%esp -80101ab5: e9 3c ff ff ff jmp 801019f6 - bp = bread(ip->dev, ip->addrs[NDIRECT]); -80101aba: 83 ec 08 sub $0x8,%esp -80101abd: 50 push %eax -80101abe: ff 33 push (%ebx) -80101ac0: e8 0b e6 ff ff call 801000d0 -80101ac5: 89 7d e0 mov %edi,-0x20(%ebp) -80101ac8: 83 c4 10 add $0x10,%esp -80101acb: 8d 88 5c 02 00 00 lea 0x25c(%eax),%ecx -80101ad1: 89 45 e4 mov %eax,-0x1c(%ebp) - for (j = 0; j < NINDIRECT; j++) { -80101ad4: 8d 70 5c lea 0x5c(%eax),%esi -80101ad7: 89 cf mov %ecx,%edi -80101ad9: eb 0c jmp 80101ae7 -80101adb: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -80101adf: 90 nop -80101ae0: 83 c6 04 add $0x4,%esi -80101ae3: 39 f7 cmp %esi,%edi -80101ae5: 74 0f je 80101af6 - if (a[j]) { -80101ae7: 8b 16 mov (%esi),%edx -80101ae9: 85 d2 test %edx,%edx -80101aeb: 74 f3 je 80101ae0 - bfree(ip->dev, a[j]); -80101aed: 8b 03 mov (%ebx),%eax -80101aef: e8 ec f7 ff ff call 801012e0 -80101af4: eb ea jmp 80101ae0 - brelse(bp); -80101af6: 83 ec 0c sub $0xc,%esp -80101af9: ff 75 e4 push -0x1c(%ebp) -80101afc: 8b 7d e0 mov -0x20(%ebp),%edi -80101aff: e8 ec e6 ff ff call 801001f0 - bfree(ip->dev, ip->addrs[NDIRECT]); -80101b04: 8b 93 8c 00 00 00 mov 0x8c(%ebx),%edx -80101b0a: 8b 03 mov (%ebx),%eax -80101b0c: e8 cf f7 ff ff call 801012e0 - ip->addrs[NDIRECT] = 0; -80101b11: 83 c4 10 add $0x10,%esp -80101b14: c7 83 8c 00 00 00 00 movl $0x0,0x8c(%ebx) -80101b1b: 00 00 00 -80101b1e: e9 6a ff ff ff jmp 80101a8d -80101b23: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80101b2a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -80101b30 : -void iunlockput(struct inode *ip) { -80101b30: 55 push %ebp -80101b31: 89 e5 mov %esp,%ebp -80101b33: 56 push %esi -80101b34: 53 push %ebx -80101b35: 8b 5d 08 mov 0x8(%ebp),%ebx - if (ip == 0 || !holdingsleep(&ip->lock) || ip->ref < 1) { -80101b38: 85 db test %ebx,%ebx -80101b3a: 74 34 je 80101b70 -80101b3c: 83 ec 0c sub $0xc,%esp -80101b3f: 8d 73 0c lea 0xc(%ebx),%esi -80101b42: 56 push %esi -80101b43: e8 98 29 00 00 call 801044e0 -80101b48: 83 c4 10 add $0x10,%esp -80101b4b: 85 c0 test %eax,%eax -80101b4d: 74 21 je 80101b70 -80101b4f: 8b 43 08 mov 0x8(%ebx),%eax -80101b52: 85 c0 test %eax,%eax -80101b54: 7e 1a jle 80101b70 - releasesleep(&ip->lock); -80101b56: 83 ec 0c sub $0xc,%esp -80101b59: 56 push %esi -80101b5a: e8 41 29 00 00 call 801044a0 - iput(ip); -80101b5f: 89 5d 08 mov %ebx,0x8(%ebp) -80101b62: 83 c4 10 add $0x10,%esp -} -80101b65: 8d 65 f8 lea -0x8(%ebp),%esp -80101b68: 5b pop %ebx -80101b69: 5e pop %esi -80101b6a: 5d pop %ebp - iput(ip); -80101b6b: e9 60 fe ff ff jmp 801019d0 - panic("iunlock"); -80101b70: 83 ec 0c sub $0xc,%esp -80101b73: 68 1f 75 10 80 push $0x8010751f -80101b78: e8 13 e8 ff ff call 80100390 -80101b7d: 8d 76 00 lea 0x0(%esi),%esi - -80101b80 : -} - -// Copy stat information from inode. -// Caller must hold ip->lock. -void stati(struct inode *ip, struct stat *st) { -80101b80: 55 push %ebp -80101b81: 89 e5 mov %esp,%ebp -80101b83: 8b 55 08 mov 0x8(%ebp),%edx -80101b86: 8b 45 0c mov 0xc(%ebp),%eax - st->dev = ip->dev; -80101b89: 8b 0a mov (%edx),%ecx -80101b8b: 89 48 04 mov %ecx,0x4(%eax) - st->ino = ip->inum; -80101b8e: 8b 4a 04 mov 0x4(%edx),%ecx -80101b91: 89 48 08 mov %ecx,0x8(%eax) - st->type = ip->type; -80101b94: 0f b7 4a 50 movzwl 0x50(%edx),%ecx -80101b98: 66 89 08 mov %cx,(%eax) - st->nlink = ip->nlink; -80101b9b: 0f b7 4a 56 movzwl 0x56(%edx),%ecx -80101b9f: 66 89 48 0c mov %cx,0xc(%eax) - st->size = ip->size; -80101ba3: 8b 52 58 mov 0x58(%edx),%edx -80101ba6: 89 50 10 mov %edx,0x10(%eax) -} -80101ba9: 5d pop %ebp -80101baa: c3 ret -80101bab: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -80101baf: 90 nop - -80101bb0 : - - -// Read data from inode. -// Caller must hold ip->lock. -int readi(struct inode *ip, char *dst, uint off, uint n) { -80101bb0: 55 push %ebp -80101bb1: 89 e5 mov %esp,%ebp -80101bb3: 57 push %edi -80101bb4: 56 push %esi -80101bb5: 53 push %ebx -80101bb6: 83 ec 1c sub $0x1c,%esp -80101bb9: 8b 7d 0c mov 0xc(%ebp),%edi -80101bbc: 8b 45 08 mov 0x8(%ebp),%eax -80101bbf: 8b 75 10 mov 0x10(%ebp),%esi -80101bc2: 89 7d e0 mov %edi,-0x20(%ebp) -80101bc5: 8b 7d 14 mov 0x14(%ebp),%edi - uint tot, m; - struct buf *bp; - - if (ip->type == T_DEV) { -80101bc8: 66 83 78 50 03 cmpw $0x3,0x50(%eax) -int readi(struct inode *ip, char *dst, uint off, uint n) { -80101bcd: 89 45 d8 mov %eax,-0x28(%ebp) -80101bd0: 89 7d e4 mov %edi,-0x1c(%ebp) - if (ip->type == T_DEV) { -80101bd3: 0f 84 a7 00 00 00 je 80101c80 - return -1; - } - return devsw[ip->major].read(ip, dst, n); - } - - if (off > ip->size || off + n < off) { -80101bd9: 8b 45 d8 mov -0x28(%ebp),%eax -80101bdc: 8b 40 58 mov 0x58(%eax),%eax -80101bdf: 39 c6 cmp %eax,%esi -80101be1: 0f 87 ba 00 00 00 ja 80101ca1 -80101be7: 8b 5d e4 mov -0x1c(%ebp),%ebx -80101bea: 31 c9 xor %ecx,%ecx -80101bec: 89 da mov %ebx,%edx -80101bee: 01 f2 add %esi,%edx -80101bf0: 0f 92 c1 setb %cl -80101bf3: 89 cf mov %ecx,%edi -80101bf5: 0f 82 a6 00 00 00 jb 80101ca1 - return -1; - } - if (off + n > ip->size) { - n = ip->size - off; -80101bfb: 89 c1 mov %eax,%ecx -80101bfd: 29 f1 sub %esi,%ecx -80101bff: 39 d0 cmp %edx,%eax -80101c01: 0f 43 cb cmovae %ebx,%ecx -80101c04: 89 4d e4 mov %ecx,-0x1c(%ebp) - } - - for (tot = 0; tot < n; tot += m, off += m, dst += m) { -80101c07: 85 c9 test %ecx,%ecx -80101c09: 74 67 je 80101c72 -80101c0b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -80101c0f: 90 nop - bp = bread(ip->dev, bmap(ip, off / BSIZE)); -80101c10: 8b 5d d8 mov -0x28(%ebp),%ebx -80101c13: 89 f2 mov %esi,%edx -80101c15: c1 ea 09 shr $0x9,%edx -80101c18: 89 d8 mov %ebx,%eax -80101c1a: e8 51 f9 ff ff call 80101570 -80101c1f: 83 ec 08 sub $0x8,%esp -80101c22: 50 push %eax -80101c23: ff 33 push (%ebx) -80101c25: e8 a6 e4 ff ff call 801000d0 - m = min(n - tot, BSIZE - off % BSIZE); -80101c2a: 8b 5d e4 mov -0x1c(%ebp),%ebx -80101c2d: b9 00 02 00 00 mov $0x200,%ecx - bp = bread(ip->dev, bmap(ip, off / BSIZE)); -80101c32: 89 c2 mov %eax,%edx - m = min(n - tot, BSIZE - off % BSIZE); -80101c34: 89 f0 mov %esi,%eax -80101c36: 25 ff 01 00 00 and $0x1ff,%eax -80101c3b: 29 fb sub %edi,%ebx - memmove(dst, bp->data + off % BSIZE, m); -80101c3d: 89 55 dc mov %edx,-0x24(%ebp) - m = min(n - tot, BSIZE - off % BSIZE); -80101c40: 29 c1 sub %eax,%ecx - memmove(dst, bp->data + off % BSIZE, m); -80101c42: 8d 44 02 5c lea 0x5c(%edx,%eax,1),%eax - m = min(n - tot, BSIZE - off % BSIZE); -80101c46: 39 d9 cmp %ebx,%ecx -80101c48: 0f 46 d9 cmovbe %ecx,%ebx - memmove(dst, bp->data + off % BSIZE, m); -80101c4b: 83 c4 0c add $0xc,%esp -80101c4e: 53 push %ebx - for (tot = 0; tot < n; tot += m, off += m, dst += m) { -80101c4f: 01 df add %ebx,%edi -80101c51: 01 de add %ebx,%esi - memmove(dst, bp->data + off % BSIZE, m); -80101c53: 50 push %eax -80101c54: ff 75 e0 push -0x20(%ebp) -80101c57: e8 04 2c 00 00 call 80104860 - brelse(bp); -80101c5c: 8b 55 dc mov -0x24(%ebp),%edx -80101c5f: 89 14 24 mov %edx,(%esp) -80101c62: e8 89 e5 ff ff call 801001f0 - for (tot = 0; tot < n; tot += m, off += m, dst += m) { -80101c67: 01 5d e0 add %ebx,-0x20(%ebp) -80101c6a: 83 c4 10 add $0x10,%esp -80101c6d: 39 7d e4 cmp %edi,-0x1c(%ebp) -80101c70: 77 9e ja 80101c10 - } - return n; -80101c72: 8b 45 e4 mov -0x1c(%ebp),%eax -} -80101c75: 8d 65 f4 lea -0xc(%ebp),%esp -80101c78: 5b pop %ebx -80101c79: 5e pop %esi -80101c7a: 5f pop %edi -80101c7b: 5d pop %ebp -80101c7c: c3 ret -80101c7d: 8d 76 00 lea 0x0(%esi),%esi - if (ip->major < 0 || ip->major >= NDEV || !devsw[ip->major].read) { -80101c80: 0f bf 40 52 movswl 0x52(%eax),%eax -80101c84: 66 83 f8 09 cmp $0x9,%ax -80101c88: 77 17 ja 80101ca1 -80101c8a: 8b 04 c5 20 f9 10 80 mov -0x7fef06e0(,%eax,8),%eax -80101c91: 85 c0 test %eax,%eax -80101c93: 74 0c je 80101ca1 - return devsw[ip->major].read(ip, dst, n); -80101c95: 89 7d 10 mov %edi,0x10(%ebp) -} -80101c98: 8d 65 f4 lea -0xc(%ebp),%esp -80101c9b: 5b pop %ebx -80101c9c: 5e pop %esi -80101c9d: 5f pop %edi -80101c9e: 5d pop %ebp - return devsw[ip->major].read(ip, dst, n); -80101c9f: ff e0 jmp *%eax - return -1; -80101ca1: b8 ff ff ff ff mov $0xffffffff,%eax -80101ca6: eb cd jmp 80101c75 -80101ca8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80101caf: 90 nop - -80101cb0 : - -// Write data to inode. -// Caller must hold ip->lock. -int writei(struct inode *ip, char *src, uint off, uint n) { -80101cb0: 55 push %ebp -80101cb1: 89 e5 mov %esp,%ebp -80101cb3: 57 push %edi -80101cb4: 56 push %esi -80101cb5: 53 push %ebx -80101cb6: 83 ec 1c sub $0x1c,%esp -80101cb9: 8b 45 08 mov 0x8(%ebp),%eax -80101cbc: 8b 75 0c mov 0xc(%ebp),%esi -80101cbf: 8b 55 14 mov 0x14(%ebp),%edx - uint tot, m; - struct buf *bp; - - if (ip->type == T_DEV) { -80101cc2: 66 83 78 50 03 cmpw $0x3,0x50(%eax) -int writei(struct inode *ip, char *src, uint off, uint n) { -80101cc7: 89 75 dc mov %esi,-0x24(%ebp) -80101cca: 89 45 d8 mov %eax,-0x28(%ebp) -80101ccd: 8b 75 10 mov 0x10(%ebp),%esi -80101cd0: 89 55 e0 mov %edx,-0x20(%ebp) - if (ip->type == T_DEV) { -80101cd3: 0f 84 b7 00 00 00 je 80101d90 - return -1; - } - return devsw[ip->major].write(ip, src, n); - } - - if (off > ip->size || off + n < off) { -80101cd9: 8b 45 d8 mov -0x28(%ebp),%eax -80101cdc: 3b 70 58 cmp 0x58(%eax),%esi -80101cdf: 0f 87 e7 00 00 00 ja 80101dcc -80101ce5: 8b 7d e0 mov -0x20(%ebp),%edi -80101ce8: 31 d2 xor %edx,%edx -80101cea: 89 f8 mov %edi,%eax -80101cec: 01 f0 add %esi,%eax -80101cee: 0f 92 c2 setb %dl - return -1; - } - if (off + n > MAXFILE * BSIZE) { -80101cf1: 3d 00 18 01 00 cmp $0x11800,%eax -80101cf6: 0f 87 d0 00 00 00 ja 80101dcc -80101cfc: 85 d2 test %edx,%edx -80101cfe: 0f 85 c8 00 00 00 jne 80101dcc - return -1; - } - - for (tot = 0; tot < n; tot += m, off += m, src += m) { -80101d04: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) -80101d0b: 85 ff test %edi,%edi -80101d0d: 74 72 je 80101d81 -80101d0f: 90 nop - bp = bread(ip->dev, bmap(ip, off / BSIZE)); -80101d10: 8b 7d d8 mov -0x28(%ebp),%edi -80101d13: 89 f2 mov %esi,%edx -80101d15: c1 ea 09 shr $0x9,%edx -80101d18: 89 f8 mov %edi,%eax -80101d1a: e8 51 f8 ff ff call 80101570 -80101d1f: 83 ec 08 sub $0x8,%esp -80101d22: 50 push %eax -80101d23: ff 37 push (%edi) -80101d25: e8 a6 e3 ff ff call 801000d0 - m = min(n - tot, BSIZE - off % BSIZE); -80101d2a: b9 00 02 00 00 mov $0x200,%ecx -80101d2f: 8b 5d e0 mov -0x20(%ebp),%ebx -80101d32: 2b 5d e4 sub -0x1c(%ebp),%ebx - bp = bread(ip->dev, bmap(ip, off / BSIZE)); -80101d35: 89 c7 mov %eax,%edi - m = min(n - tot, BSIZE - off % BSIZE); -80101d37: 89 f0 mov %esi,%eax -80101d39: 25 ff 01 00 00 and $0x1ff,%eax -80101d3e: 29 c1 sub %eax,%ecx - memmove(bp->data + off % BSIZE, src, m); -80101d40: 8d 44 07 5c lea 0x5c(%edi,%eax,1),%eax - m = min(n - tot, BSIZE - off % BSIZE); -80101d44: 39 d9 cmp %ebx,%ecx -80101d46: 0f 46 d9 cmovbe %ecx,%ebx - memmove(bp->data + off % BSIZE, src, m); -80101d49: 83 c4 0c add $0xc,%esp -80101d4c: 53 push %ebx - for (tot = 0; tot < n; tot += m, off += m, src += m) { -80101d4d: 01 de add %ebx,%esi - memmove(bp->data + off % BSIZE, src, m); -80101d4f: ff 75 dc push -0x24(%ebp) -80101d52: 50 push %eax -80101d53: e8 08 2b 00 00 call 80104860 - log_write(bp); -80101d58: 89 3c 24 mov %edi,(%esp) -80101d5b: e8 00 13 00 00 call 80103060 - brelse(bp); -80101d60: 89 3c 24 mov %edi,(%esp) -80101d63: e8 88 e4 ff ff call 801001f0 - for (tot = 0; tot < n; tot += m, off += m, src += m) { -80101d68: 01 5d e4 add %ebx,-0x1c(%ebp) -80101d6b: 83 c4 10 add $0x10,%esp -80101d6e: 8b 45 e4 mov -0x1c(%ebp),%eax -80101d71: 01 5d dc add %ebx,-0x24(%ebp) -80101d74: 39 45 e0 cmp %eax,-0x20(%ebp) -80101d77: 77 97 ja 80101d10 - } - - if (n > 0 && off > ip->size) { -80101d79: 8b 45 d8 mov -0x28(%ebp),%eax -80101d7c: 3b 70 58 cmp 0x58(%eax),%esi -80101d7f: 77 37 ja 80101db8 - ip->size = off; - iupdate(ip); - } - return n; -80101d81: 8b 45 e0 mov -0x20(%ebp),%eax -} -80101d84: 8d 65 f4 lea -0xc(%ebp),%esp -80101d87: 5b pop %ebx -80101d88: 5e pop %esi -80101d89: 5f pop %edi -80101d8a: 5d pop %ebp -80101d8b: c3 ret -80101d8c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - if (ip->major < 0 || ip->major >= NDEV || !devsw[ip->major].write) { -80101d90: 0f bf 40 52 movswl 0x52(%eax),%eax -80101d94: 66 83 f8 09 cmp $0x9,%ax -80101d98: 77 32 ja 80101dcc -80101d9a: 8b 04 c5 24 f9 10 80 mov -0x7fef06dc(,%eax,8),%eax -80101da1: 85 c0 test %eax,%eax -80101da3: 74 27 je 80101dcc - return devsw[ip->major].write(ip, src, n); -80101da5: 89 55 10 mov %edx,0x10(%ebp) -} -80101da8: 8d 65 f4 lea -0xc(%ebp),%esp -80101dab: 5b pop %ebx -80101dac: 5e pop %esi -80101dad: 5f pop %edi -80101dae: 5d pop %ebp - return devsw[ip->major].write(ip, src, n); -80101daf: ff e0 jmp *%eax -80101db1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - ip->size = off; -80101db8: 8b 45 d8 mov -0x28(%ebp),%eax - iupdate(ip); -80101dbb: 83 ec 0c sub $0xc,%esp - ip->size = off; -80101dbe: 89 70 58 mov %esi,0x58(%eax) - iupdate(ip); -80101dc1: 50 push %eax -80101dc2: e8 29 fa ff ff call 801017f0 -80101dc7: 83 c4 10 add $0x10,%esp -80101dca: eb b5 jmp 80101d81 - return -1; -80101dcc: b8 ff ff ff ff mov $0xffffffff,%eax -80101dd1: eb b1 jmp 80101d84 -80101dd3: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80101dda: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -80101de0 : - - -// Directories - -int namecmp(const char *s, const char *t) { -80101de0: 55 push %ebp -80101de1: 89 e5 mov %esp,%ebp -80101de3: 83 ec 0c sub $0xc,%esp - return strncmp(s, t, DIRSIZ); -80101de6: 6a 0e push $0xe -80101de8: ff 75 0c push 0xc(%ebp) -80101deb: ff 75 08 push 0x8(%ebp) -80101dee: e8 dd 2a 00 00 call 801048d0 -} -80101df3: c9 leave -80101df4: c3 ret -80101df5: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80101dfc: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -80101e00 : - -// 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) { -80101e00: 55 push %ebp -80101e01: 89 e5 mov %esp,%ebp -80101e03: 57 push %edi -80101e04: 56 push %esi -80101e05: 53 push %ebx -80101e06: 83 ec 1c sub $0x1c,%esp -80101e09: 8b 5d 08 mov 0x8(%ebp),%ebx - uint off, inum; - struct dirent de; - - if (dp->type != T_DIR) { -80101e0c: 66 83 7b 50 01 cmpw $0x1,0x50(%ebx) -80101e11: 0f 85 85 00 00 00 jne 80101e9c - panic("dirlookup not DIR"); - } - - for (off = 0; off < dp->size; off += sizeof(de)) { -80101e17: 8b 53 58 mov 0x58(%ebx),%edx -80101e1a: 31 ff xor %edi,%edi -80101e1c: 8d 75 d8 lea -0x28(%ebp),%esi -80101e1f: 85 d2 test %edx,%edx -80101e21: 74 3e je 80101e61 -80101e23: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -80101e27: 90 nop - if (readi(dp, (char*)&de, off, sizeof(de)) != sizeof(de)) { -80101e28: 6a 10 push $0x10 -80101e2a: 57 push %edi -80101e2b: 56 push %esi -80101e2c: 53 push %ebx -80101e2d: e8 7e fd ff ff call 80101bb0 -80101e32: 83 c4 10 add $0x10,%esp -80101e35: 83 f8 10 cmp $0x10,%eax -80101e38: 75 55 jne 80101e8f - panic("dirlookup read"); - } - if (de.inum == 0) { -80101e3a: 66 83 7d d8 00 cmpw $0x0,-0x28(%ebp) -80101e3f: 74 18 je 80101e59 - return strncmp(s, t, DIRSIZ); -80101e41: 83 ec 04 sub $0x4,%esp -80101e44: 8d 45 da lea -0x26(%ebp),%eax -80101e47: 6a 0e push $0xe -80101e49: 50 push %eax -80101e4a: ff 75 0c push 0xc(%ebp) -80101e4d: e8 7e 2a 00 00 call 801048d0 - continue; - } - if (namecmp(name, de.name) == 0) { -80101e52: 83 c4 10 add $0x10,%esp -80101e55: 85 c0 test %eax,%eax -80101e57: 74 17 je 80101e70 - for (off = 0; off < dp->size; off += sizeof(de)) { -80101e59: 83 c7 10 add $0x10,%edi -80101e5c: 3b 7b 58 cmp 0x58(%ebx),%edi -80101e5f: 72 c7 jb 80101e28 - return iget(dp->dev, inum); - } - } - - return 0; -} -80101e61: 8d 65 f4 lea -0xc(%ebp),%esp - return 0; -80101e64: 31 c0 xor %eax,%eax -} -80101e66: 5b pop %ebx -80101e67: 5e pop %esi -80101e68: 5f pop %edi -80101e69: 5d pop %ebp -80101e6a: c3 ret -80101e6b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -80101e6f: 90 nop - if (poff) { -80101e70: 8b 45 10 mov 0x10(%ebp),%eax -80101e73: 85 c0 test %eax,%eax -80101e75: 74 05 je 80101e7c - *poff = off; -80101e77: 8b 45 10 mov 0x10(%ebp),%eax -80101e7a: 89 38 mov %edi,(%eax) - inum = de.inum; -80101e7c: 0f b7 55 d8 movzwl -0x28(%ebp),%edx - return iget(dp->dev, inum); -80101e80: 8b 03 mov (%ebx),%eax -80101e82: e8 e9 f5 ff ff call 80101470 -} -80101e87: 8d 65 f4 lea -0xc(%ebp),%esp -80101e8a: 5b pop %ebx -80101e8b: 5e pop %esi -80101e8c: 5f pop %edi -80101e8d: 5d pop %ebp -80101e8e: c3 ret - panic("dirlookup read"); -80101e8f: 83 ec 0c sub $0xc,%esp -80101e92: 68 39 75 10 80 push $0x80107539 -80101e97: e8 f4 e4 ff ff call 80100390 - panic("dirlookup not DIR"); -80101e9c: 83 ec 0c sub $0xc,%esp -80101e9f: 68 27 75 10 80 push $0x80107527 -80101ea4: e8 e7 e4 ff ff call 80100390 -80101ea9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -80101eb0 : - -// Look up and return the inode for a path name. -// 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) { -80101eb0: 55 push %ebp -80101eb1: 89 e5 mov %esp,%ebp -80101eb3: 57 push %edi -80101eb4: 56 push %esi -80101eb5: 53 push %ebx -80101eb6: 89 c3 mov %eax,%ebx -80101eb8: 83 ec 1c sub $0x1c,%esp - struct inode *ip, *next; - - if (*path == '/') { -80101ebb: 80 38 2f cmpb $0x2f,(%eax) -static struct inode* namex(char *path, int nameiparent, char *name) { -80101ebe: 89 55 dc mov %edx,-0x24(%ebp) -80101ec1: 89 4d e4 mov %ecx,-0x1c(%ebp) - if (*path == '/') { -80101ec4: 0f 84 64 01 00 00 je 8010202e - ip = iget(ROOTDEV, ROOTINO); - } - else { - ip = idup(myproc()->cwd); -80101eca: e8 01 1c 00 00 call 80103ad0 - acquire(&icache.lock); -80101ecf: 83 ec 0c sub $0xc,%esp - ip = idup(myproc()->cwd); -80101ed2: 8b 70 68 mov 0x68(%eax),%esi - acquire(&icache.lock); -80101ed5: 68 80 f9 10 80 push $0x8010f980 -80101eda: e8 21 28 00 00 call 80104700 - ip->ref++; -80101edf: 83 46 08 01 addl $0x1,0x8(%esi) - release(&icache.lock); -80101ee3: c7 04 24 80 f9 10 80 movl $0x8010f980,(%esp) -80101eea: e8 b1 27 00 00 call 801046a0 -80101eef: 83 c4 10 add $0x10,%esp -80101ef2: eb 07 jmp 80101efb -80101ef4: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - path++; -80101ef8: 83 c3 01 add $0x1,%ebx - while (*path == '/') { -80101efb: 0f b6 03 movzbl (%ebx),%eax -80101efe: 3c 2f cmp $0x2f,%al -80101f00: 74 f6 je 80101ef8 - if (*path == 0) { -80101f02: 84 c0 test %al,%al -80101f04: 0f 84 06 01 00 00 je 80102010 - while (*path != '/' && *path != 0) { -80101f0a: 0f b6 03 movzbl (%ebx),%eax -80101f0d: 84 c0 test %al,%al -80101f0f: 0f 84 10 01 00 00 je 80102025 -80101f15: 89 df mov %ebx,%edi -80101f17: 3c 2f cmp $0x2f,%al -80101f19: 0f 84 06 01 00 00 je 80102025 -80101f1f: 90 nop -80101f20: 0f b6 47 01 movzbl 0x1(%edi),%eax - path++; -80101f24: 83 c7 01 add $0x1,%edi - while (*path != '/' && *path != 0) { -80101f27: 3c 2f cmp $0x2f,%al -80101f29: 74 04 je 80101f2f -80101f2b: 84 c0 test %al,%al -80101f2d: 75 f1 jne 80101f20 - len = path - s; -80101f2f: 89 f8 mov %edi,%eax -80101f31: 29 d8 sub %ebx,%eax - if (len >= DIRSIZ) { -80101f33: 83 f8 0d cmp $0xd,%eax -80101f36: 0f 8e ac 00 00 00 jle 80101fe8 - memmove(name, s, DIRSIZ); -80101f3c: 83 ec 04 sub $0x4,%esp -80101f3f: 6a 0e push $0xe -80101f41: 53 push %ebx - path++; -80101f42: 89 fb mov %edi,%ebx - memmove(name, s, DIRSIZ); -80101f44: ff 75 e4 push -0x1c(%ebp) -80101f47: e8 14 29 00 00 call 80104860 -80101f4c: 83 c4 10 add $0x10,%esp - while (*path == '/') { -80101f4f: 80 3f 2f cmpb $0x2f,(%edi) -80101f52: 75 0c jne 80101f60 -80101f54: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - path++; -80101f58: 83 c3 01 add $0x1,%ebx - while (*path == '/') { -80101f5b: 80 3b 2f cmpb $0x2f,(%ebx) -80101f5e: 74 f8 je 80101f58 - } - - while ((path = skipelem(path, name)) != 0) { - ilock(ip); -80101f60: 83 ec 0c sub $0xc,%esp -80101f63: 56 push %esi -80101f64: e8 37 f9 ff ff call 801018a0 - if (ip->type != T_DIR) { -80101f69: 83 c4 10 add $0x10,%esp -80101f6c: 66 83 7e 50 01 cmpw $0x1,0x50(%esi) -80101f71: 0f 85 cd 00 00 00 jne 80102044 - iunlockput(ip); - return 0; - } - if (nameiparent && *path == '\0') { -80101f77: 8b 45 dc mov -0x24(%ebp),%eax -80101f7a: 85 c0 test %eax,%eax -80101f7c: 74 09 je 80101f87 -80101f7e: 80 3b 00 cmpb $0x0,(%ebx) -80101f81: 0f 84 22 01 00 00 je 801020a9 - // Stop one level early. - iunlock(ip); - return ip; - } - if ((next = dirlookup(ip, name, 0)) == 0) { -80101f87: 83 ec 04 sub $0x4,%esp -80101f8a: 6a 00 push $0x0 -80101f8c: ff 75 e4 push -0x1c(%ebp) -80101f8f: 56 push %esi -80101f90: e8 6b fe ff ff call 80101e00 - if (ip == 0 || !holdingsleep(&ip->lock) || ip->ref < 1) { -80101f95: 8d 56 0c lea 0xc(%esi),%edx - if ((next = dirlookup(ip, name, 0)) == 0) { -80101f98: 83 c4 10 add $0x10,%esp -80101f9b: 89 c7 mov %eax,%edi -80101f9d: 85 c0 test %eax,%eax -80101f9f: 0f 84 e1 00 00 00 je 80102086 - if (ip == 0 || !holdingsleep(&ip->lock) || ip->ref < 1) { -80101fa5: 83 ec 0c sub $0xc,%esp -80101fa8: 89 55 e0 mov %edx,-0x20(%ebp) -80101fab: 52 push %edx -80101fac: e8 2f 25 00 00 call 801044e0 -80101fb1: 83 c4 10 add $0x10,%esp -80101fb4: 85 c0 test %eax,%eax -80101fb6: 0f 84 30 01 00 00 je 801020ec -80101fbc: 8b 56 08 mov 0x8(%esi),%edx -80101fbf: 85 d2 test %edx,%edx -80101fc1: 0f 8e 25 01 00 00 jle 801020ec - releasesleep(&ip->lock); -80101fc7: 8b 55 e0 mov -0x20(%ebp),%edx -80101fca: 83 ec 0c sub $0xc,%esp -80101fcd: 52 push %edx -80101fce: e8 cd 24 00 00 call 801044a0 - iput(ip); -80101fd3: 89 34 24 mov %esi,(%esp) -80101fd6: 89 fe mov %edi,%esi -80101fd8: e8 f3 f9 ff ff call 801019d0 -80101fdd: 83 c4 10 add $0x10,%esp -80101fe0: e9 16 ff ff ff jmp 80101efb -80101fe5: 8d 76 00 lea 0x0(%esi),%esi - name[len] = 0; -80101fe8: 8b 4d e4 mov -0x1c(%ebp),%ecx -80101feb: 8d 14 01 lea (%ecx,%eax,1),%edx - memmove(name, s, len); -80101fee: 83 ec 04 sub $0x4,%esp -80101ff1: 89 55 e0 mov %edx,-0x20(%ebp) -80101ff4: 50 push %eax -80101ff5: 53 push %ebx - name[len] = 0; -80101ff6: 89 fb mov %edi,%ebx - memmove(name, s, len); -80101ff8: ff 75 e4 push -0x1c(%ebp) -80101ffb: e8 60 28 00 00 call 80104860 - name[len] = 0; -80102000: 8b 55 e0 mov -0x20(%ebp),%edx -80102003: 83 c4 10 add $0x10,%esp -80102006: c6 02 00 movb $0x0,(%edx) -80102009: e9 41 ff ff ff jmp 80101f4f -8010200e: 66 90 xchg %ax,%ax - return 0; - } - iunlockput(ip); - ip = next; - } - if (nameiparent) { -80102010: 8b 45 dc mov -0x24(%ebp),%eax -80102013: 85 c0 test %eax,%eax -80102015: 0f 85 be 00 00 00 jne 801020d9 - iput(ip); - return 0; - } - return ip; -} -8010201b: 8d 65 f4 lea -0xc(%ebp),%esp -8010201e: 89 f0 mov %esi,%eax -80102020: 5b pop %ebx -80102021: 5e pop %esi -80102022: 5f pop %edi -80102023: 5d pop %ebp -80102024: c3 ret - while (*path != '/' && *path != 0) { -80102025: 8b 55 e4 mov -0x1c(%ebp),%edx -80102028: 89 df mov %ebx,%edi -8010202a: 31 c0 xor %eax,%eax -8010202c: eb c0 jmp 80101fee - ip = iget(ROOTDEV, ROOTINO); -8010202e: ba 01 00 00 00 mov $0x1,%edx -80102033: b8 01 00 00 00 mov $0x1,%eax -80102038: e8 33 f4 ff ff call 80101470 -8010203d: 89 c6 mov %eax,%esi -8010203f: e9 b7 fe ff ff jmp 80101efb - if (ip == 0 || !holdingsleep(&ip->lock) || ip->ref < 1) { -80102044: 83 ec 0c sub $0xc,%esp -80102047: 8d 5e 0c lea 0xc(%esi),%ebx -8010204a: 53 push %ebx -8010204b: e8 90 24 00 00 call 801044e0 -80102050: 83 c4 10 add $0x10,%esp -80102053: 85 c0 test %eax,%eax -80102055: 0f 84 91 00 00 00 je 801020ec -8010205b: 8b 46 08 mov 0x8(%esi),%eax -8010205e: 85 c0 test %eax,%eax -80102060: 0f 8e 86 00 00 00 jle 801020ec - releasesleep(&ip->lock); -80102066: 83 ec 0c sub $0xc,%esp -80102069: 53 push %ebx -8010206a: e8 31 24 00 00 call 801044a0 - iput(ip); -8010206f: 89 34 24 mov %esi,(%esp) - return 0; -80102072: 31 f6 xor %esi,%esi - iput(ip); -80102074: e8 57 f9 ff ff call 801019d0 - return 0; -80102079: 83 c4 10 add $0x10,%esp -} -8010207c: 8d 65 f4 lea -0xc(%ebp),%esp -8010207f: 89 f0 mov %esi,%eax -80102081: 5b pop %ebx -80102082: 5e pop %esi -80102083: 5f pop %edi -80102084: 5d pop %ebp -80102085: c3 ret - if (ip == 0 || !holdingsleep(&ip->lock) || ip->ref < 1) { -80102086: 83 ec 0c sub $0xc,%esp -80102089: 89 55 e4 mov %edx,-0x1c(%ebp) -8010208c: 52 push %edx -8010208d: e8 4e 24 00 00 call 801044e0 -80102092: 83 c4 10 add $0x10,%esp -80102095: 85 c0 test %eax,%eax -80102097: 74 53 je 801020ec -80102099: 8b 4e 08 mov 0x8(%esi),%ecx -8010209c: 85 c9 test %ecx,%ecx -8010209e: 7e 4c jle 801020ec - releasesleep(&ip->lock); -801020a0: 8b 55 e4 mov -0x1c(%ebp),%edx -801020a3: 83 ec 0c sub $0xc,%esp -801020a6: 52 push %edx -801020a7: eb c1 jmp 8010206a - if (ip == 0 || !holdingsleep(&ip->lock) || ip->ref < 1) { -801020a9: 83 ec 0c sub $0xc,%esp -801020ac: 8d 5e 0c lea 0xc(%esi),%ebx -801020af: 53 push %ebx -801020b0: e8 2b 24 00 00 call 801044e0 -801020b5: 83 c4 10 add $0x10,%esp -801020b8: 85 c0 test %eax,%eax -801020ba: 74 30 je 801020ec -801020bc: 8b 7e 08 mov 0x8(%esi),%edi -801020bf: 85 ff test %edi,%edi -801020c1: 7e 29 jle 801020ec - releasesleep(&ip->lock); -801020c3: 83 ec 0c sub $0xc,%esp -801020c6: 53 push %ebx -801020c7: e8 d4 23 00 00 call 801044a0 -} -801020cc: 83 c4 10 add $0x10,%esp -} -801020cf: 8d 65 f4 lea -0xc(%ebp),%esp -801020d2: 89 f0 mov %esi,%eax -801020d4: 5b pop %ebx -801020d5: 5e pop %esi -801020d6: 5f pop %edi -801020d7: 5d pop %ebp -801020d8: c3 ret - iput(ip); -801020d9: 83 ec 0c sub $0xc,%esp -801020dc: 56 push %esi - return 0; -801020dd: 31 f6 xor %esi,%esi - iput(ip); -801020df: e8 ec f8 ff ff call 801019d0 - return 0; -801020e4: 83 c4 10 add $0x10,%esp -801020e7: e9 2f ff ff ff jmp 8010201b - panic("iunlock"); -801020ec: 83 ec 0c sub $0xc,%esp -801020ef: 68 1f 75 10 80 push $0x8010751f -801020f4: e8 97 e2 ff ff call 80100390 -801020f9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -80102100 : -int dirlink(struct inode *dp, char *name, uint inum) { -80102100: 55 push %ebp -80102101: 89 e5 mov %esp,%ebp -80102103: 57 push %edi -80102104: 56 push %esi -80102105: 53 push %ebx -80102106: 83 ec 20 sub $0x20,%esp -80102109: 8b 5d 08 mov 0x8(%ebp),%ebx - if ((ip = dirlookup(dp, name, 0)) != 0) { -8010210c: 6a 00 push $0x0 -8010210e: ff 75 0c push 0xc(%ebp) -80102111: 53 push %ebx -80102112: e8 e9 fc ff ff call 80101e00 -80102117: 83 c4 10 add $0x10,%esp -8010211a: 85 c0 test %eax,%eax -8010211c: 75 67 jne 80102185 - for (off = 0; off < dp->size; off += sizeof(de)) { -8010211e: 8b 7b 58 mov 0x58(%ebx),%edi -80102121: 8d 75 d8 lea -0x28(%ebp),%esi -80102124: 85 ff test %edi,%edi -80102126: 74 29 je 80102151 -80102128: 31 ff xor %edi,%edi -8010212a: 8d 75 d8 lea -0x28(%ebp),%esi -8010212d: eb 09 jmp 80102138 -8010212f: 90 nop -80102130: 83 c7 10 add $0x10,%edi -80102133: 3b 7b 58 cmp 0x58(%ebx),%edi -80102136: 73 19 jae 80102151 - if (readi(dp, (char*)&de, off, sizeof(de)) != sizeof(de)) { -80102138: 6a 10 push $0x10 -8010213a: 57 push %edi -8010213b: 56 push %esi -8010213c: 53 push %ebx -8010213d: e8 6e fa ff ff call 80101bb0 -80102142: 83 c4 10 add $0x10,%esp -80102145: 83 f8 10 cmp $0x10,%eax -80102148: 75 4e jne 80102198 - if (de.inum == 0) { -8010214a: 66 83 7d d8 00 cmpw $0x0,-0x28(%ebp) -8010214f: 75 df jne 80102130 - strncpy(de.name, name, DIRSIZ); -80102151: 83 ec 04 sub $0x4,%esp -80102154: 8d 45 da lea -0x26(%ebp),%eax -80102157: 6a 0e push $0xe -80102159: ff 75 0c push 0xc(%ebp) -8010215c: 50 push %eax -8010215d: e8 be 27 00 00 call 80104920 - if (writei(dp, (char*)&de, off, sizeof(de)) != sizeof(de)) { -80102162: 6a 10 push $0x10 - de.inum = inum; -80102164: 8b 45 10 mov 0x10(%ebp),%eax - if (writei(dp, (char*)&de, off, sizeof(de)) != sizeof(de)) { -80102167: 57 push %edi -80102168: 56 push %esi -80102169: 53 push %ebx - de.inum = inum; -8010216a: 66 89 45 d8 mov %ax,-0x28(%ebp) - if (writei(dp, (char*)&de, off, sizeof(de)) != sizeof(de)) { -8010216e: e8 3d fb ff ff call 80101cb0 -80102173: 83 c4 20 add $0x20,%esp -80102176: 83 f8 10 cmp $0x10,%eax -80102179: 75 2a jne 801021a5 - return 0; -8010217b: 31 c0 xor %eax,%eax -} -8010217d: 8d 65 f4 lea -0xc(%ebp),%esp -80102180: 5b pop %ebx -80102181: 5e pop %esi -80102182: 5f pop %edi -80102183: 5d pop %ebp -80102184: c3 ret - iput(ip); -80102185: 83 ec 0c sub $0xc,%esp -80102188: 50 push %eax -80102189: e8 42 f8 ff ff call 801019d0 - return -1; -8010218e: 83 c4 10 add $0x10,%esp -80102191: b8 ff ff ff ff mov $0xffffffff,%eax -80102196: eb e5 jmp 8010217d - panic("dirlink read"); -80102198: 83 ec 0c sub $0xc,%esp -8010219b: 68 48 75 10 80 push $0x80107548 -801021a0: e8 eb e1 ff ff call 80100390 - panic("dirlink"); -801021a5: 83 ec 0c sub $0xc,%esp -801021a8: 68 2a 7b 10 80 push $0x80107b2a -801021ad: e8 de e1 ff ff call 80100390 -801021b2: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801021b9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -801021c0 : - -struct inode* namei(char *path) { -801021c0: 55 push %ebp - char name[DIRSIZ]; - return namex(path, 0, name); -801021c1: 31 d2 xor %edx,%edx -struct inode* namei(char *path) { -801021c3: 89 e5 mov %esp,%ebp -801021c5: 83 ec 18 sub $0x18,%esp - return namex(path, 0, name); -801021c8: 8b 45 08 mov 0x8(%ebp),%eax -801021cb: 8d 4d ea lea -0x16(%ebp),%ecx -801021ce: e8 dd fc ff ff call 80101eb0 -} -801021d3: c9 leave -801021d4: c3 ret -801021d5: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801021dc: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -801021e0 : - -struct inode*nameiparent(char *path, char *name) { -801021e0: 55 push %ebp - return namex(path, 1, name); -801021e1: ba 01 00 00 00 mov $0x1,%edx -struct inode*nameiparent(char *path, char *name) { -801021e6: 89 e5 mov %esp,%ebp - return namex(path, 1, name); -801021e8: 8b 4d 0c mov 0xc(%ebp),%ecx -801021eb: 8b 45 08 mov 0x8(%ebp),%eax -} -801021ee: 5d pop %ebp - return namex(path, 1, name); -801021ef: e9 bc fc ff ff jmp 80101eb0 -801021f4: 66 90 xchg %ax,%ax -801021f6: 66 90 xchg %ax,%ax -801021f8: 66 90 xchg %ax,%ax -801021fa: 66 90 xchg %ax,%ax -801021fc: 66 90 xchg %ax,%ax -801021fe: 66 90 xchg %ax,%ax - -80102200 : - // Switch back to disk 0. - outb(0x1f6, 0xe0 | (0 << 4)); -} - -// Start the request for b. Caller must hold idelock. -static void idestart(struct buf *b) { -80102200: 55 push %ebp -80102201: 89 e5 mov %esp,%ebp -80102203: 57 push %edi -80102204: 56 push %esi -80102205: 53 push %ebx -80102206: 83 ec 0c sub $0xc,%esp - if (b == 0) { -80102209: 85 c0 test %eax,%eax -8010220b: 0f 84 b4 00 00 00 je 801022c5 - panic("idestart"); - } - if (b->blockno >= FSSIZE) { -80102211: 8b 70 08 mov 0x8(%eax),%esi -80102214: 89 c3 mov %eax,%ebx -80102216: 81 fe e7 03 00 00 cmp $0x3e7,%esi -8010221c: 0f 87 96 00 00 00 ja 801022b8 - asm volatile ("in %1,%0" : "=a" (data) : "d" (port)); -80102222: b9 f7 01 00 00 mov $0x1f7,%ecx -80102227: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010222e: 66 90 xchg %ax,%ax -80102230: 89 ca mov %ecx,%edx -80102232: ec in (%dx),%al - while (((r = inb(0x1f7)) & (IDE_BSY | IDE_DRDY)) != IDE_DRDY) { -80102233: 83 e0 c0 and $0xffffffc0,%eax -80102236: 3c 40 cmp $0x40,%al -80102238: 75 f6 jne 80102230 - asm volatile ("out %0,%1" : : "a" (data), "d" (port)); -8010223a: 31 ff xor %edi,%edi -8010223c: ba f6 03 00 00 mov $0x3f6,%edx -80102241: 89 f8 mov %edi,%eax -80102243: ee out %al,(%dx) -80102244: b8 01 00 00 00 mov $0x1,%eax -80102249: ba f2 01 00 00 mov $0x1f2,%edx -8010224e: ee out %al,(%dx) -8010224f: ba f3 01 00 00 mov $0x1f3,%edx -80102254: 89 f0 mov %esi,%eax -80102256: ee out %al,(%dx) - - idewait(0); - outb(0x3f6, 0); // generate interrupt - outb(0x1f2, sector_per_block); // number of sectors - outb(0x1f3, sector & 0xff); - outb(0x1f4, (sector >> 8) & 0xff); -80102257: 89 f0 mov %esi,%eax -80102259: ba f4 01 00 00 mov $0x1f4,%edx -8010225e: c1 f8 08 sar $0x8,%eax -80102261: ee out %al,(%dx) -80102262: ba f5 01 00 00 mov $0x1f5,%edx -80102267: 89 f8 mov %edi,%eax -80102269: ee out %al,(%dx) - outb(0x1f5, (sector >> 16) & 0xff); - outb(0x1f6, 0xe0 | ((b->dev & 1) << 4) | ((sector >> 24) & 0x0f)); -8010226a: 0f b6 43 04 movzbl 0x4(%ebx),%eax -8010226e: ba f6 01 00 00 mov $0x1f6,%edx -80102273: c1 e0 04 shl $0x4,%eax -80102276: 83 e0 10 and $0x10,%eax -80102279: 83 c8 e0 or $0xffffffe0,%eax -8010227c: ee out %al,(%dx) - if (b->flags & B_DIRTY) { -8010227d: f6 03 04 testb $0x4,(%ebx) -80102280: 75 16 jne 80102298 -80102282: b8 20 00 00 00 mov $0x20,%eax -80102287: 89 ca mov %ecx,%edx -80102289: ee out %al,(%dx) - outsl(0x1f0, b->data, BSIZE / 4); - } - else { - outb(0x1f7, read_cmd); - } -} -8010228a: 8d 65 f4 lea -0xc(%ebp),%esp -8010228d: 5b pop %ebx -8010228e: 5e pop %esi -8010228f: 5f pop %edi -80102290: 5d pop %ebp -80102291: c3 ret -80102292: 8d b6 00 00 00 00 lea 0x0(%esi),%esi -80102298: b8 30 00 00 00 mov $0x30,%eax -8010229d: 89 ca mov %ecx,%edx -8010229f: ee out %al,(%dx) - asm volatile ("cld; rep outsl" : -801022a0: b9 80 00 00 00 mov $0x80,%ecx - outsl(0x1f0, b->data, BSIZE / 4); -801022a5: 8d 73 5c lea 0x5c(%ebx),%esi -801022a8: ba f0 01 00 00 mov $0x1f0,%edx -801022ad: fc cld -801022ae: f3 6f rep outsl %ds:(%esi),(%dx) -} -801022b0: 8d 65 f4 lea -0xc(%ebp),%esp -801022b3: 5b pop %ebx -801022b4: 5e pop %esi -801022b5: 5f pop %edi -801022b6: 5d pop %ebp -801022b7: c3 ret - panic("incorrect blockno"); -801022b8: 83 ec 0c sub $0xc,%esp -801022bb: 68 b4 75 10 80 push $0x801075b4 -801022c0: e8 cb e0 ff ff call 80100390 - panic("idestart"); -801022c5: 83 ec 0c sub $0xc,%esp -801022c8: 68 ab 75 10 80 push $0x801075ab -801022cd: e8 be e0 ff ff call 80100390 -801022d2: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801022d9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -801022e0 : -void ideinit(void) { -801022e0: 55 push %ebp -801022e1: 89 e5 mov %esp,%ebp -801022e3: 83 ec 10 sub $0x10,%esp - initlock(&idelock, "ide"); -801022e6: 68 c6 75 10 80 push $0x801075c6 -801022eb: 68 20 16 11 80 push $0x80111620 -801022f0: e8 3b 22 00 00 call 80104530 - ioapicenable(IRQ_IDE, ncpu - 1); -801022f5: 58 pop %eax -801022f6: a1 a4 17 11 80 mov 0x801117a4,%eax -801022fb: 5a pop %edx -801022fc: 83 e8 01 sub $0x1,%eax -801022ff: 50 push %eax -80102300: 6a 0e push $0xe -80102302: e8 99 02 00 00 call 801025a0 - while (((r = inb(0x1f7)) & (IDE_BSY | IDE_DRDY)) != IDE_DRDY) { -80102307: 83 c4 10 add $0x10,%esp - asm volatile ("in %1,%0" : "=a" (data) : "d" (port)); -8010230a: ba f7 01 00 00 mov $0x1f7,%edx -8010230f: 90 nop -80102310: ec in (%dx),%al -80102311: 83 e0 c0 and $0xffffffc0,%eax -80102314: 3c 40 cmp $0x40,%al -80102316: 75 f8 jne 80102310 - asm volatile ("out %0,%1" : : "a" (data), "d" (port)); -80102318: b8 f0 ff ff ff mov $0xfffffff0,%eax -8010231d: ba f6 01 00 00 mov $0x1f6,%edx -80102322: ee out %al,(%dx) -80102323: b9 e8 03 00 00 mov $0x3e8,%ecx - asm volatile ("in %1,%0" : "=a" (data) : "d" (port)); -80102328: ba f7 01 00 00 mov $0x1f7,%edx -8010232d: eb 06 jmp 80102335 -8010232f: 90 nop - for (i = 0; i < 1000; i++) { -80102330: 83 e9 01 sub $0x1,%ecx -80102333: 74 0f je 80102344 -80102335: ec in (%dx),%al - if (inb(0x1f7) != 0) { -80102336: 84 c0 test %al,%al -80102338: 74 f6 je 80102330 - havedisk1 = 1; -8010233a: c7 05 00 16 11 80 01 movl $0x1,0x80111600 -80102341: 00 00 00 - asm volatile ("out %0,%1" : : "a" (data), "d" (port)); -80102344: b8 e0 ff ff ff mov $0xffffffe0,%eax -80102349: ba f6 01 00 00 mov $0x1f6,%edx -8010234e: ee out %al,(%dx) -} -8010234f: c9 leave -80102350: c3 ret -80102351: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80102358: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010235f: 90 nop - -80102360 : - -// Interrupt handler. -void ideintr(void) { -80102360: 55 push %ebp -80102361: 89 e5 mov %esp,%ebp -80102363: 57 push %edi -80102364: 56 push %esi -80102365: 53 push %ebx -80102366: 83 ec 18 sub $0x18,%esp - struct buf *b; - - // First queued buffer is the active request. - acquire(&idelock); -80102369: 68 20 16 11 80 push $0x80111620 -8010236e: e8 8d 23 00 00 call 80104700 - - if ((b = idequeue) == 0) { -80102373: 8b 1d 04 16 11 80 mov 0x80111604,%ebx -80102379: 83 c4 10 add $0x10,%esp -8010237c: 85 db test %ebx,%ebx -8010237e: 74 63 je 801023e3 - release(&idelock); - return; - } - idequeue = b->qnext; -80102380: 8b 43 58 mov 0x58(%ebx),%eax -80102383: a3 04 16 11 80 mov %eax,0x80111604 - - // Read data if needed. - if (!(b->flags & B_DIRTY) && idewait(1) >= 0) { -80102388: 8b 33 mov (%ebx),%esi -8010238a: f7 c6 04 00 00 00 test $0x4,%esi -80102390: 75 2f jne 801023c1 - asm volatile ("in %1,%0" : "=a" (data) : "d" (port)); -80102392: ba f7 01 00 00 mov $0x1f7,%edx -80102397: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010239e: 66 90 xchg %ax,%ax -801023a0: ec in (%dx),%al - while (((r = inb(0x1f7)) & (IDE_BSY | IDE_DRDY)) != IDE_DRDY) { -801023a1: 89 c1 mov %eax,%ecx -801023a3: 83 e1 c0 and $0xffffffc0,%ecx -801023a6: 80 f9 40 cmp $0x40,%cl -801023a9: 75 f5 jne 801023a0 - if (checkerr && (r & (IDE_DF | IDE_ERR)) != 0) { -801023ab: a8 21 test $0x21,%al -801023ad: 75 12 jne 801023c1 - insl(0x1f0, b->data, BSIZE / 4); -801023af: 8d 7b 5c lea 0x5c(%ebx),%edi - asm volatile ("cld; rep insl" : -801023b2: b9 80 00 00 00 mov $0x80,%ecx -801023b7: ba f0 01 00 00 mov $0x1f0,%edx -801023bc: fc cld -801023bd: f3 6d rep insl (%dx),%es:(%edi) - } - - // Wake process waiting for this buf. - b->flags |= B_VALID; -801023bf: 8b 33 mov (%ebx),%esi - b->flags &= ~B_DIRTY; -801023c1: 83 e6 fb and $0xfffffffb,%esi - wakeup(b); -801023c4: 83 ec 0c sub $0xc,%esp - b->flags &= ~B_DIRTY; -801023c7: 83 ce 02 or $0x2,%esi -801023ca: 89 33 mov %esi,(%ebx) - wakeup(b); -801023cc: 53 push %ebx -801023cd: e8 8e 1e 00 00 call 80104260 - - // Start disk on next buf in queue. - if (idequeue != 0) { -801023d2: a1 04 16 11 80 mov 0x80111604,%eax -801023d7: 83 c4 10 add $0x10,%esp -801023da: 85 c0 test %eax,%eax -801023dc: 74 05 je 801023e3 - idestart(idequeue); -801023de: e8 1d fe ff ff call 80102200 - release(&idelock); -801023e3: 83 ec 0c sub $0xc,%esp -801023e6: 68 20 16 11 80 push $0x80111620 -801023eb: e8 b0 22 00 00 call 801046a0 - } - - release(&idelock); -} -801023f0: 8d 65 f4 lea -0xc(%ebp),%esp -801023f3: 5b pop %ebx -801023f4: 5e pop %esi -801023f5: 5f pop %edi -801023f6: 5d pop %ebp -801023f7: c3 ret -801023f8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801023ff: 90 nop - -80102400 : - - -// 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) { -80102400: 55 push %ebp -80102401: 89 e5 mov %esp,%ebp -80102403: 53 push %ebx -80102404: 83 ec 10 sub $0x10,%esp -80102407: 8b 5d 08 mov 0x8(%ebp),%ebx - struct buf **pp; - - if (!holdingsleep(&b->lock)) { -8010240a: 8d 43 0c lea 0xc(%ebx),%eax -8010240d: 50 push %eax -8010240e: e8 cd 20 00 00 call 801044e0 -80102413: 83 c4 10 add $0x10,%esp -80102416: 85 c0 test %eax,%eax -80102418: 0f 84 c3 00 00 00 je 801024e1 - panic("iderw: buf not locked"); - } - if ((b->flags & (B_VALID | B_DIRTY)) == B_VALID) { -8010241e: 8b 03 mov (%ebx),%eax -80102420: 83 e0 06 and $0x6,%eax -80102423: 83 f8 02 cmp $0x2,%eax -80102426: 0f 84 a8 00 00 00 je 801024d4 - panic("iderw: nothing to do"); - } - if (b->dev != 0 && !havedisk1) { -8010242c: 8b 53 04 mov 0x4(%ebx),%edx -8010242f: 85 d2 test %edx,%edx -80102431: 74 0d je 80102440 -80102433: a1 00 16 11 80 mov 0x80111600,%eax -80102438: 85 c0 test %eax,%eax -8010243a: 0f 84 87 00 00 00 je 801024c7 - panic("iderw: ide disk 1 not present"); - } - - acquire(&idelock); //DOC:acquire-lock -80102440: 83 ec 0c sub $0xc,%esp -80102443: 68 20 16 11 80 push $0x80111620 -80102448: e8 b3 22 00 00 call 80104700 - - // Append b to idequeue. - b->qnext = 0; - for (pp = &idequeue; *pp; pp = &(*pp)->qnext) { //DOC:insert-queue -8010244d: a1 04 16 11 80 mov 0x80111604,%eax - b->qnext = 0; -80102452: c7 43 58 00 00 00 00 movl $0x0,0x58(%ebx) - for (pp = &idequeue; *pp; pp = &(*pp)->qnext) { //DOC:insert-queue -80102459: 83 c4 10 add $0x10,%esp -8010245c: 85 c0 test %eax,%eax -8010245e: 74 60 je 801024c0 -80102460: 89 c2 mov %eax,%edx -80102462: 8b 40 58 mov 0x58(%eax),%eax -80102465: 85 c0 test %eax,%eax -80102467: 75 f7 jne 80102460 -80102469: 83 c2 58 add $0x58,%edx - ; - } - *pp = b; -8010246c: 89 1a mov %ebx,(%edx) - - // Start disk if necessary. - if (idequeue == b) { -8010246e: 39 1d 04 16 11 80 cmp %ebx,0x80111604 -80102474: 74 3a je 801024b0 - idestart(b); - } - - // Wait for request to finish. - while ((b->flags & (B_VALID | B_DIRTY)) != B_VALID) { -80102476: 8b 03 mov (%ebx),%eax -80102478: 83 e0 06 and $0x6,%eax -8010247b: 83 f8 02 cmp $0x2,%eax -8010247e: 74 1b je 8010249b - sleep(b, &idelock); -80102480: 83 ec 08 sub $0x8,%esp -80102483: 68 20 16 11 80 push $0x80111620 -80102488: 53 push %ebx -80102489: e8 12 1d 00 00 call 801041a0 - while ((b->flags & (B_VALID | B_DIRTY)) != B_VALID) { -8010248e: 8b 03 mov (%ebx),%eax -80102490: 83 c4 10 add $0x10,%esp -80102493: 83 e0 06 and $0x6,%eax -80102496: 83 f8 02 cmp $0x2,%eax -80102499: 75 e5 jne 80102480 - } - - release(&idelock); -8010249b: c7 45 08 20 16 11 80 movl $0x80111620,0x8(%ebp) -} -801024a2: 8b 5d fc mov -0x4(%ebp),%ebx -801024a5: c9 leave - release(&idelock); -801024a6: e9 f5 21 00 00 jmp 801046a0 -801024ab: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -801024af: 90 nop - idestart(b); -801024b0: 89 d8 mov %ebx,%eax -801024b2: e8 49 fd ff ff call 80102200 -801024b7: eb bd jmp 80102476 -801024b9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - for (pp = &idequeue; *pp; pp = &(*pp)->qnext) { //DOC:insert-queue -801024c0: ba 04 16 11 80 mov $0x80111604,%edx -801024c5: eb a5 jmp 8010246c - panic("iderw: ide disk 1 not present"); -801024c7: 83 ec 0c sub $0xc,%esp -801024ca: 68 f5 75 10 80 push $0x801075f5 -801024cf: e8 bc de ff ff call 80100390 - panic("iderw: nothing to do"); -801024d4: 83 ec 0c sub $0xc,%esp -801024d7: 68 e0 75 10 80 push $0x801075e0 -801024dc: e8 af de ff ff call 80100390 - panic("iderw: buf not locked"); -801024e1: 83 ec 0c sub $0xc,%esp -801024e4: 68 ca 75 10 80 push $0x801075ca -801024e9: e8 a2 de ff ff call 80100390 -801024ee: 66 90 xchg %ax,%ax - -801024f0 : -static void ioapicwrite(int reg, uint data) { - ioapic->reg = reg; - ioapic->data = data; -} - -void ioapicinit(void) { -801024f0: 55 push %ebp - int i, id, maxintr; - - ioapic = (volatile struct ioapic*)IOAPIC; -801024f1: c7 05 54 16 11 80 00 movl $0xfec00000,0x80111654 -801024f8: 00 c0 fe -void ioapicinit(void) { -801024fb: 89 e5 mov %esp,%ebp -801024fd: 56 push %esi -801024fe: 53 push %ebx - ioapic->reg = reg; -801024ff: c7 05 00 00 c0 fe 01 movl $0x1,0xfec00000 -80102506: 00 00 00 - return ioapic->data; -80102509: 8b 15 54 16 11 80 mov 0x80111654,%edx -8010250f: 8b 72 10 mov 0x10(%edx),%esi - ioapic->reg = reg; -80102512: c7 02 00 00 00 00 movl $0x0,(%edx) - return ioapic->data; -80102518: 8b 0d 54 16 11 80 mov 0x80111654,%ecx - maxintr = (ioapicread(REG_VER) >> 16) & 0xFF; - id = ioapicread(REG_ID) >> 24; - if (id != ioapicid) { -8010251e: 0f b6 15 a0 17 11 80 movzbl 0x801117a0,%edx - maxintr = (ioapicread(REG_VER) >> 16) & 0xFF; -80102525: c1 ee 10 shr $0x10,%esi -80102528: 89 f0 mov %esi,%eax -8010252a: 0f b6 f0 movzbl %al,%esi - return ioapic->data; -8010252d: 8b 41 10 mov 0x10(%ecx),%eax - id = ioapicread(REG_ID) >> 24; -80102530: c1 e8 18 shr $0x18,%eax - if (id != ioapicid) { -80102533: 39 c2 cmp %eax,%edx -80102535: 74 16 je 8010254d - cprintf("ioapicinit: id isn't equal to ioapicid; not a MP\n"); -80102537: 83 ec 0c sub $0xc,%esp -8010253a: 68 14 76 10 80 push $0x80107614 -8010253f: e8 6c e1 ff ff call 801006b0 - ioapic->reg = reg; -80102544: 8b 0d 54 16 11 80 mov 0x80111654,%ecx -8010254a: 83 c4 10 add $0x10,%esp -8010254d: 83 c6 21 add $0x21,%esi -void ioapicinit(void) { -80102550: ba 10 00 00 00 mov $0x10,%edx -80102555: b8 20 00 00 00 mov $0x20,%eax -8010255a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - ioapic->reg = reg; -80102560: 89 11 mov %edx,(%ecx) - } - - // Mark all interrupts edge-triggered, active high, disabled, - // and not routed to any CPUs. - for (i = 0; i <= maxintr; i++) { - ioapicwrite(REG_TABLE + 2 * i, INT_DISABLED | (T_IRQ0 + i)); -80102562: 89 c3 mov %eax,%ebx - ioapic->data = data; -80102564: 8b 0d 54 16 11 80 mov 0x80111654,%ecx - for (i = 0; i <= maxintr; i++) { -8010256a: 83 c0 01 add $0x1,%eax - ioapicwrite(REG_TABLE + 2 * i, INT_DISABLED | (T_IRQ0 + i)); -8010256d: 81 cb 00 00 01 00 or $0x10000,%ebx - ioapic->data = data; -80102573: 89 59 10 mov %ebx,0x10(%ecx) - ioapic->reg = reg; -80102576: 8d 5a 01 lea 0x1(%edx),%ebx - for (i = 0; i <= maxintr; i++) { -80102579: 83 c2 02 add $0x2,%edx - ioapic->reg = reg; -8010257c: 89 19 mov %ebx,(%ecx) - ioapic->data = data; -8010257e: 8b 0d 54 16 11 80 mov 0x80111654,%ecx -80102584: c7 41 10 00 00 00 00 movl $0x0,0x10(%ecx) - for (i = 0; i <= maxintr; i++) { -8010258b: 39 f0 cmp %esi,%eax -8010258d: 75 d1 jne 80102560 - ioapicwrite(REG_TABLE + 2 * i + 1, 0); - } -} -8010258f: 8d 65 f8 lea -0x8(%ebp),%esp -80102592: 5b pop %ebx -80102593: 5e pop %esi -80102594: 5d pop %ebp -80102595: c3 ret -80102596: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010259d: 8d 76 00 lea 0x0(%esi),%esi - -801025a0 : - -void ioapicenable(int irq, int cpunum) { -801025a0: 55 push %ebp - ioapic->reg = reg; -801025a1: 8b 0d 54 16 11 80 mov 0x80111654,%ecx -void ioapicenable(int irq, int cpunum) { -801025a7: 89 e5 mov %esp,%ebp -801025a9: 8b 45 08 mov 0x8(%ebp),%eax - // 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); -801025ac: 8d 50 20 lea 0x20(%eax),%edx -801025af: 8d 44 00 10 lea 0x10(%eax,%eax,1),%eax - ioapic->reg = reg; -801025b3: 89 01 mov %eax,(%ecx) - ioapic->data = data; -801025b5: 8b 0d 54 16 11 80 mov 0x80111654,%ecx - ioapicwrite(REG_TABLE + 2 * irq + 1, cpunum << 24); -801025bb: 83 c0 01 add $0x1,%eax - ioapic->data = data; -801025be: 89 51 10 mov %edx,0x10(%ecx) - ioapicwrite(REG_TABLE + 2 * irq + 1, cpunum << 24); -801025c1: 8b 55 0c mov 0xc(%ebp),%edx - ioapic->reg = reg; -801025c4: 89 01 mov %eax,(%ecx) - ioapic->data = data; -801025c6: a1 54 16 11 80 mov 0x80111654,%eax - ioapicwrite(REG_TABLE + 2 * irq + 1, cpunum << 24); -801025cb: c1 e2 18 shl $0x18,%edx - ioapic->data = data; -801025ce: 89 50 10 mov %edx,0x10(%eax) -} -801025d1: 5d pop %ebp -801025d2: c3 ret -801025d3: 66 90 xchg %ax,%ax -801025d5: 66 90 xchg %ax,%ax -801025d7: 66 90 xchg %ax,%ax -801025d9: 66 90 xchg %ax,%ax -801025db: 66 90 xchg %ax,%ax -801025dd: 66 90 xchg %ax,%ax -801025df: 90 nop - -801025e0 : - -// Free the page of physical memory pointed at by v, -// 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) { -801025e0: 55 push %ebp -801025e1: 89 e5 mov %esp,%ebp -801025e3: 53 push %ebx -801025e4: 83 ec 04 sub $0x4,%esp -801025e7: 8b 5d 08 mov 0x8(%ebp),%ebx - struct run *r; - - if ((uint)v % PGSIZE || v < end || V2P(v) >= PHYSTOP) { -801025ea: f7 c3 ff 0f 00 00 test $0xfff,%ebx -801025f0: 75 76 jne 80102668 -801025f2: 81 fb f0 54 11 80 cmp $0x801154f0,%ebx -801025f8: 72 6e jb 80102668 -801025fa: 8d 83 00 00 00 80 lea -0x80000000(%ebx),%eax -80102600: 3d ff ff ff 0d cmp $0xdffffff,%eax -80102605: 77 61 ja 80102668 - panic("kfree"); - } - - // Fill with junk to catch dangling refs. - memset(v, 1, PGSIZE); -80102607: 83 ec 04 sub $0x4,%esp -8010260a: 68 00 10 00 00 push $0x1000 -8010260f: 6a 01 push $0x1 -80102611: 53 push %ebx -80102612: e8 a9 21 00 00 call 801047c0 - - if (kmem.use_lock) { -80102617: 8b 15 94 16 11 80 mov 0x80111694,%edx -8010261d: 83 c4 10 add $0x10,%esp -80102620: 85 d2 test %edx,%edx -80102622: 75 1c jne 80102640 - acquire(&kmem.lock); - } - r = (struct run*)v; - r->next = kmem.freelist; -80102624: a1 98 16 11 80 mov 0x80111698,%eax -80102629: 89 03 mov %eax,(%ebx) - kmem.freelist = r; - if (kmem.use_lock) { -8010262b: a1 94 16 11 80 mov 0x80111694,%eax - kmem.freelist = r; -80102630: 89 1d 98 16 11 80 mov %ebx,0x80111698 - if (kmem.use_lock) { -80102636: 85 c0 test %eax,%eax -80102638: 75 1e jne 80102658 - release(&kmem.lock); - } -} -8010263a: 8b 5d fc mov -0x4(%ebp),%ebx -8010263d: c9 leave -8010263e: c3 ret -8010263f: 90 nop - acquire(&kmem.lock); -80102640: 83 ec 0c sub $0xc,%esp -80102643: 68 60 16 11 80 push $0x80111660 -80102648: e8 b3 20 00 00 call 80104700 -8010264d: 83 c4 10 add $0x10,%esp -80102650: eb d2 jmp 80102624 -80102652: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - release(&kmem.lock); -80102658: c7 45 08 60 16 11 80 movl $0x80111660,0x8(%ebp) -} -8010265f: 8b 5d fc mov -0x4(%ebp),%ebx -80102662: c9 leave - release(&kmem.lock); -80102663: e9 38 20 00 00 jmp 801046a0 - panic("kfree"); -80102668: 83 ec 0c sub $0xc,%esp -8010266b: 68 46 76 10 80 push $0x80107646 -80102670: e8 1b dd ff ff call 80100390 -80102675: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010267c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -80102680 : -void freerange(void *vstart, void *vend) { -80102680: 55 push %ebp -80102681: 89 e5 mov %esp,%ebp -80102683: 56 push %esi - p = (char*)PGROUNDUP((uint)vstart); -80102684: 8b 45 08 mov 0x8(%ebp),%eax -void freerange(void *vstart, void *vend) { -80102687: 8b 75 0c mov 0xc(%ebp),%esi -8010268a: 53 push %ebx - p = (char*)PGROUNDUP((uint)vstart); -8010268b: 8d 98 ff 0f 00 00 lea 0xfff(%eax),%ebx -80102691: 81 e3 00 f0 ff ff and $0xfffff000,%ebx - for (; p + PGSIZE <= (char*)vend; p += PGSIZE) { -80102697: 81 c3 00 10 00 00 add $0x1000,%ebx -8010269d: 39 de cmp %ebx,%esi -8010269f: 72 23 jb 801026c4 -801026a1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - kfree(p); -801026a8: 83 ec 0c sub $0xc,%esp -801026ab: 8d 83 00 f0 ff ff lea -0x1000(%ebx),%eax - for (; p + PGSIZE <= (char*)vend; p += PGSIZE) { -801026b1: 81 c3 00 10 00 00 add $0x1000,%ebx - kfree(p); -801026b7: 50 push %eax -801026b8: e8 23 ff ff ff call 801025e0 - for (; p + PGSIZE <= (char*)vend; p += PGSIZE) { -801026bd: 83 c4 10 add $0x10,%esp -801026c0: 39 f3 cmp %esi,%ebx -801026c2: 76 e4 jbe 801026a8 -} -801026c4: 8d 65 f8 lea -0x8(%ebp),%esp -801026c7: 5b pop %ebx -801026c8: 5e pop %esi -801026c9: 5d pop %ebp -801026ca: c3 ret -801026cb: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -801026cf: 90 nop - -801026d0 : -void kinit2(void *vstart, void *vend) { -801026d0: 55 push %ebp -801026d1: 89 e5 mov %esp,%ebp -801026d3: 56 push %esi - p = (char*)PGROUNDUP((uint)vstart); -801026d4: 8b 45 08 mov 0x8(%ebp),%eax -void kinit2(void *vstart, void *vend) { -801026d7: 8b 75 0c mov 0xc(%ebp),%esi -801026da: 53 push %ebx - p = (char*)PGROUNDUP((uint)vstart); -801026db: 8d 98 ff 0f 00 00 lea 0xfff(%eax),%ebx -801026e1: 81 e3 00 f0 ff ff and $0xfffff000,%ebx - for (; p + PGSIZE <= (char*)vend; p += PGSIZE) { -801026e7: 81 c3 00 10 00 00 add $0x1000,%ebx -801026ed: 39 de cmp %ebx,%esi -801026ef: 72 23 jb 80102714 -801026f1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - kfree(p); -801026f8: 83 ec 0c sub $0xc,%esp -801026fb: 8d 83 00 f0 ff ff lea -0x1000(%ebx),%eax - for (; p + PGSIZE <= (char*)vend; p += PGSIZE) { -80102701: 81 c3 00 10 00 00 add $0x1000,%ebx - kfree(p); -80102707: 50 push %eax -80102708: e8 d3 fe ff ff call 801025e0 - for (; p + PGSIZE <= (char*)vend; p += PGSIZE) { -8010270d: 83 c4 10 add $0x10,%esp -80102710: 39 de cmp %ebx,%esi -80102712: 73 e4 jae 801026f8 - kmem.use_lock = 1; -80102714: c7 05 94 16 11 80 01 movl $0x1,0x80111694 -8010271b: 00 00 00 -} -8010271e: 8d 65 f8 lea -0x8(%ebp),%esp -80102721: 5b pop %ebx -80102722: 5e pop %esi -80102723: 5d pop %ebp -80102724: c3 ret -80102725: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010272c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -80102730 : -void kinit1(void *vstart, void *vend) { -80102730: 55 push %ebp -80102731: 89 e5 mov %esp,%ebp -80102733: 56 push %esi -80102734: 53 push %ebx -80102735: 8b 75 0c mov 0xc(%ebp),%esi - initlock(&kmem.lock, "kmem"); -80102738: 83 ec 08 sub $0x8,%esp -8010273b: 68 4c 76 10 80 push $0x8010764c -80102740: 68 60 16 11 80 push $0x80111660 -80102745: e8 e6 1d 00 00 call 80104530 - p = (char*)PGROUNDUP((uint)vstart); -8010274a: 8b 45 08 mov 0x8(%ebp),%eax - for (; p + PGSIZE <= (char*)vend; p += PGSIZE) { -8010274d: 83 c4 10 add $0x10,%esp - kmem.use_lock = 0; -80102750: c7 05 94 16 11 80 00 movl $0x0,0x80111694 -80102757: 00 00 00 - p = (char*)PGROUNDUP((uint)vstart); -8010275a: 8d 98 ff 0f 00 00 lea 0xfff(%eax),%ebx -80102760: 81 e3 00 f0 ff ff and $0xfffff000,%ebx - for (; p + PGSIZE <= (char*)vend; p += PGSIZE) { -80102766: 81 c3 00 10 00 00 add $0x1000,%ebx -8010276c: 39 de cmp %ebx,%esi -8010276e: 72 1c jb 8010278c - kfree(p); -80102770: 83 ec 0c sub $0xc,%esp -80102773: 8d 83 00 f0 ff ff lea -0x1000(%ebx),%eax - for (; p + PGSIZE <= (char*)vend; p += PGSIZE) { -80102779: 81 c3 00 10 00 00 add $0x1000,%ebx - kfree(p); -8010277f: 50 push %eax -80102780: e8 5b fe ff ff call 801025e0 - for (; p + PGSIZE <= (char*)vend; p += PGSIZE) { -80102785: 83 c4 10 add $0x10,%esp -80102788: 39 de cmp %ebx,%esi -8010278a: 73 e4 jae 80102770 -} -8010278c: 8d 65 f8 lea -0x8(%ebp),%esp -8010278f: 5b pop %ebx -80102790: 5e pop %esi -80102791: 5d pop %ebp -80102792: c3 ret -80102793: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010279a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -801027a0 : -// Returns a pointer that the kernel can use. -// Returns 0 if the memory cannot be allocated. -char* kalloc(void) { - struct run *r; - - if (kmem.use_lock) { -801027a0: a1 94 16 11 80 mov 0x80111694,%eax -801027a5: 85 c0 test %eax,%eax -801027a7: 75 1f jne 801027c8 - acquire(&kmem.lock); - } - r = kmem.freelist; -801027a9: a1 98 16 11 80 mov 0x80111698,%eax - if (r) { -801027ae: 85 c0 test %eax,%eax -801027b0: 74 0e je 801027c0 - kmem.freelist = r->next; -801027b2: 8b 10 mov (%eax),%edx -801027b4: 89 15 98 16 11 80 mov %edx,0x80111698 - } - if (kmem.use_lock) { -801027ba: c3 ret -801027bb: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -801027bf: 90 nop - release(&kmem.lock); - } - return (char*)r; -} -801027c0: c3 ret -801027c1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -char* kalloc(void) { -801027c8: 55 push %ebp -801027c9: 89 e5 mov %esp,%ebp -801027cb: 83 ec 24 sub $0x24,%esp - acquire(&kmem.lock); -801027ce: 68 60 16 11 80 push $0x80111660 -801027d3: e8 28 1f 00 00 call 80104700 - r = kmem.freelist; -801027d8: a1 98 16 11 80 mov 0x80111698,%eax - if (kmem.use_lock) { -801027dd: 8b 15 94 16 11 80 mov 0x80111694,%edx - if (r) { -801027e3: 83 c4 10 add $0x10,%esp -801027e6: 85 c0 test %eax,%eax -801027e8: 74 08 je 801027f2 - kmem.freelist = r->next; -801027ea: 8b 08 mov (%eax),%ecx -801027ec: 89 0d 98 16 11 80 mov %ecx,0x80111698 - if (kmem.use_lock) { -801027f2: 85 d2 test %edx,%edx -801027f4: 74 16 je 8010280c - release(&kmem.lock); -801027f6: 83 ec 0c sub $0xc,%esp -801027f9: 89 45 f4 mov %eax,-0xc(%ebp) -801027fc: 68 60 16 11 80 push $0x80111660 -80102801: e8 9a 1e 00 00 call 801046a0 - return (char*)r; -80102806: 8b 45 f4 mov -0xc(%ebp),%eax - release(&kmem.lock); -80102809: 83 c4 10 add $0x10,%esp -} -8010280c: c9 leave -8010280d: c3 ret -8010280e: 66 90 xchg %ax,%ax - -80102810 : - asm volatile ("in %1,%0" : "=a" (data) : "d" (port)); -80102810: ba 64 00 00 00 mov $0x64,%edx -80102815: ec in (%dx),%al - normalmap, shiftmap, ctlmap, ctlmap - }; - uint st, data, c; - - st = inb(KBSTATP); - if ((st & KBS_DIB) == 0) { -80102816: a8 01 test $0x1,%al -80102818: 0f 84 c2 00 00 00 je 801028e0 -int kbdgetc(void) { -8010281e: 55 push %ebp -8010281f: ba 60 00 00 00 mov $0x60,%edx -80102824: 89 e5 mov %esp,%ebp -80102826: 53 push %ebx -80102827: ec in (%dx),%al - return -1; - } - data = inb(KBDATAP); - - if (data == 0xE0) { - shift |= E0ESC; -80102828: 8b 1d 9c 16 11 80 mov 0x8011169c,%ebx - data = inb(KBDATAP); -8010282e: 0f b6 c8 movzbl %al,%ecx - if (data == 0xE0) { -80102831: 3c e0 cmp $0xe0,%al -80102833: 74 5b je 80102890 - return 0; - } - else if (data & 0x80) { - // Key released - data = (shift & E0ESC ? data : data & 0x7F); -80102835: 89 da mov %ebx,%edx -80102837: 83 e2 40 and $0x40,%edx - else if (data & 0x80) { -8010283a: 84 c0 test %al,%al -8010283c: 78 62 js 801028a0 - shift &= ~(shiftcode[data] | E0ESC); - return 0; - } - else if (shift & E0ESC) { -8010283e: 85 d2 test %edx,%edx -80102840: 74 09 je 8010284b - // Last character was an E0 escape; or with 0x80 - data |= 0x80; -80102842: 83 c8 80 or $0xffffff80,%eax - shift &= ~E0ESC; -80102845: 83 e3 bf and $0xffffffbf,%ebx - data |= 0x80; -80102848: 0f b6 c8 movzbl %al,%ecx - } - - shift |= shiftcode[data]; -8010284b: 0f b6 91 80 77 10 80 movzbl -0x7fef8880(%ecx),%edx - shift ^= togglecode[data]; -80102852: 0f b6 81 80 76 10 80 movzbl -0x7fef8980(%ecx),%eax - shift |= shiftcode[data]; -80102859: 09 da or %ebx,%edx - shift ^= togglecode[data]; -8010285b: 31 c2 xor %eax,%edx - c = charcode[shift & (CTL | SHIFT)][data]; -8010285d: 89 d0 mov %edx,%eax - shift ^= togglecode[data]; -8010285f: 89 15 9c 16 11 80 mov %edx,0x8011169c - c = charcode[shift & (CTL | SHIFT)][data]; -80102865: 83 e0 03 and $0x3,%eax - if (shift & CAPSLOCK) { -80102868: 83 e2 08 and $0x8,%edx - c = charcode[shift & (CTL | SHIFT)][data]; -8010286b: 8b 04 85 60 76 10 80 mov -0x7fef89a0(,%eax,4),%eax -80102872: 0f b6 04 08 movzbl (%eax,%ecx,1),%eax - if (shift & CAPSLOCK) { -80102876: 74 0b je 80102883 - if ('a' <= c && c <= 'z') { -80102878: 8d 50 9f lea -0x61(%eax),%edx -8010287b: 83 fa 19 cmp $0x19,%edx -8010287e: 77 48 ja 801028c8 - c += 'A' - 'a'; -80102880: 83 e8 20 sub $0x20,%eax - else if ('A' <= c && c <= 'Z') { - c += 'a' - 'A'; - } - } - return c; -} -80102883: 8b 5d fc mov -0x4(%ebp),%ebx -80102886: c9 leave -80102887: c3 ret -80102888: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010288f: 90 nop - shift |= E0ESC; -80102890: 83 cb 40 or $0x40,%ebx - return 0; -80102893: 31 c0 xor %eax,%eax - shift |= E0ESC; -80102895: 89 1d 9c 16 11 80 mov %ebx,0x8011169c -} -8010289b: 8b 5d fc mov -0x4(%ebp),%ebx -8010289e: c9 leave -8010289f: c3 ret - data = (shift & E0ESC ? data : data & 0x7F); -801028a0: 83 e0 7f and $0x7f,%eax -801028a3: 85 d2 test %edx,%edx -801028a5: 0f 44 c8 cmove %eax,%ecx - shift &= ~(shiftcode[data] | E0ESC); -801028a8: 0f b6 81 80 77 10 80 movzbl -0x7fef8880(%ecx),%eax -801028af: 83 c8 40 or $0x40,%eax -801028b2: 0f b6 c0 movzbl %al,%eax -801028b5: f7 d0 not %eax -801028b7: 21 d8 and %ebx,%eax -} -801028b9: 8b 5d fc mov -0x4(%ebp),%ebx - shift &= ~(shiftcode[data] | E0ESC); -801028bc: a3 9c 16 11 80 mov %eax,0x8011169c - return 0; -801028c1: 31 c0 xor %eax,%eax -} -801028c3: c9 leave -801028c4: c3 ret -801028c5: 8d 76 00 lea 0x0(%esi),%esi - else if ('A' <= c && c <= 'Z') { -801028c8: 8d 48 bf lea -0x41(%eax),%ecx - c += 'a' - 'A'; -801028cb: 8d 50 20 lea 0x20(%eax),%edx -} -801028ce: 8b 5d fc mov -0x4(%ebp),%ebx -801028d1: c9 leave - c += 'a' - 'A'; -801028d2: 83 f9 1a cmp $0x1a,%ecx -801028d5: 0f 42 c2 cmovb %edx,%eax -} -801028d8: c3 ret -801028d9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - return -1; -801028e0: b8 ff ff ff ff mov $0xffffffff,%eax -} -801028e5: c3 ret -801028e6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801028ed: 8d 76 00 lea 0x0(%esi),%esi - -801028f0 : - -void kbdintr(void) { -801028f0: 55 push %ebp -801028f1: 89 e5 mov %esp,%ebp -801028f3: 83 ec 14 sub $0x14,%esp - consoleintr(kbdgetc); -801028f6: 68 10 28 10 80 push $0x80102810 -801028fb: e8 e0 df ff ff call 801008e0 -} -80102900: 83 c4 10 add $0x10,%esp -80102903: c9 leave -80102904: c3 ret -80102905: 66 90 xchg %ax,%ax -80102907: 66 90 xchg %ax,%ax -80102909: 66 90 xchg %ax,%ax -8010290b: 66 90 xchg %ax,%ax -8010290d: 66 90 xchg %ax,%ax -8010290f: 90 nop - -80102910 : - lapic[index] = value; - lapic[ID]; // wait for write to finish, by reading -} - -void lapicinit(void) { - if (!lapic) { -80102910: a1 a0 16 11 80 mov 0x801116a0,%eax -80102915: 85 c0 test %eax,%eax -80102917: 0f 84 cb 00 00 00 je 801029e8 - lapic[index] = value; -8010291d: c7 80 f0 00 00 00 3f movl $0x13f,0xf0(%eax) -80102924: 01 00 00 - lapic[ID]; // wait for write to finish, by reading -80102927: 8b 50 20 mov 0x20(%eax),%edx - lapic[index] = value; -8010292a: c7 80 e0 03 00 00 0b movl $0xb,0x3e0(%eax) -80102931: 00 00 00 - lapic[ID]; // wait for write to finish, by reading -80102934: 8b 50 20 mov 0x20(%eax),%edx - lapic[index] = value; -80102937: c7 80 20 03 00 00 20 movl $0x20020,0x320(%eax) -8010293e: 00 02 00 - lapic[ID]; // wait for write to finish, by reading -80102941: 8b 50 20 mov 0x20(%eax),%edx - lapic[index] = value; -80102944: c7 80 80 03 00 00 80 movl $0x989680,0x380(%eax) -8010294b: 96 98 00 - lapic[ID]; // wait for write to finish, by reading -8010294e: 8b 50 20 mov 0x20(%eax),%edx - lapic[index] = value; -80102951: c7 80 50 03 00 00 00 movl $0x10000,0x350(%eax) -80102958: 00 01 00 - lapic[ID]; // wait for write to finish, by reading -8010295b: 8b 50 20 mov 0x20(%eax),%edx - lapic[index] = value; -8010295e: c7 80 60 03 00 00 00 movl $0x10000,0x360(%eax) -80102965: 00 01 00 - lapic[ID]; // wait for write to finish, by reading -80102968: 8b 50 20 mov 0x20(%eax),%edx - lapicw(LINT0, MASKED); - lapicw(LINT1, MASKED); - - // Disable performance counter overflow interrupts - // on machines that provide that interrupt entry. - if (((lapic[VER] >> 16) & 0xFF) >= 4) { -8010296b: 8b 50 30 mov 0x30(%eax),%edx -8010296e: c1 ea 10 shr $0x10,%edx -80102971: 81 e2 fc 00 00 00 and $0xfc,%edx -80102977: 75 77 jne 801029f0 - lapic[index] = value; -80102979: c7 80 70 03 00 00 33 movl $0x33,0x370(%eax) -80102980: 00 00 00 - lapic[ID]; // wait for write to finish, by reading -80102983: 8b 50 20 mov 0x20(%eax),%edx - lapic[index] = value; -80102986: c7 80 80 02 00 00 00 movl $0x0,0x280(%eax) -8010298d: 00 00 00 - lapic[ID]; // wait for write to finish, by reading -80102990: 8b 50 20 mov 0x20(%eax),%edx - lapic[index] = value; -80102993: c7 80 80 02 00 00 00 movl $0x0,0x280(%eax) -8010299a: 00 00 00 - lapic[ID]; // wait for write to finish, by reading -8010299d: 8b 50 20 mov 0x20(%eax),%edx - lapic[index] = value; -801029a0: c7 80 b0 00 00 00 00 movl $0x0,0xb0(%eax) -801029a7: 00 00 00 - lapic[ID]; // wait for write to finish, by reading -801029aa: 8b 50 20 mov 0x20(%eax),%edx - lapic[index] = value; -801029ad: c7 80 10 03 00 00 00 movl $0x0,0x310(%eax) -801029b4: 00 00 00 - lapic[ID]; // wait for write to finish, by reading -801029b7: 8b 50 20 mov 0x20(%eax),%edx - lapic[index] = value; -801029ba: c7 80 00 03 00 00 00 movl $0x88500,0x300(%eax) -801029c1: 85 08 00 - lapic[ID]; // wait for write to finish, by reading -801029c4: 8b 50 20 mov 0x20(%eax),%edx -801029c7: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801029ce: 66 90 xchg %ax,%ax - lapicw(EOI, 0); - - // Send an Init Level De-Assert to synchronise arbitration ID's. - lapicw(ICRHI, 0); - lapicw(ICRLO, BCAST | INIT | LEVEL); - while (lapic[ICRLO] & DELIVS) { -801029d0: 8b 90 00 03 00 00 mov 0x300(%eax),%edx -801029d6: 80 e6 10 and $0x10,%dh -801029d9: 75 f5 jne 801029d0 - lapic[index] = value; -801029db: c7 80 80 00 00 00 00 movl $0x0,0x80(%eax) -801029e2: 00 00 00 - lapic[ID]; // wait for write to finish, by reading -801029e5: 8b 40 20 mov 0x20(%eax),%eax - ; - } - - // Enable interrupts on the APIC (but not on the processor). - lapicw(TPR, 0); -} -801029e8: c3 ret -801029e9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - lapic[index] = value; -801029f0: c7 80 40 03 00 00 00 movl $0x10000,0x340(%eax) -801029f7: 00 01 00 - lapic[ID]; // wait for write to finish, by reading -801029fa: 8b 50 20 mov 0x20(%eax),%edx -} -801029fd: e9 77 ff ff ff jmp 80102979 -80102a02: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80102a09: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -80102a10 : - -int lapicid(void) { - if (!lapic) { -80102a10: a1 a0 16 11 80 mov 0x801116a0,%eax -80102a15: 85 c0 test %eax,%eax -80102a17: 74 07 je 80102a20 - return 0; - } - return lapic[ID] >> 24; -80102a19: 8b 40 20 mov 0x20(%eax),%eax -80102a1c: c1 e8 18 shr $0x18,%eax -80102a1f: c3 ret - return 0; -80102a20: 31 c0 xor %eax,%eax -} -80102a22: c3 ret -80102a23: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80102a2a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -80102a30 : - -// Acknowledge interrupt. -void lapiceoi(void) { - if (lapic) { -80102a30: a1 a0 16 11 80 mov 0x801116a0,%eax -80102a35: 85 c0 test %eax,%eax -80102a37: 74 0d je 80102a46 - lapic[index] = value; -80102a39: c7 80 b0 00 00 00 00 movl $0x0,0xb0(%eax) -80102a40: 00 00 00 - lapic[ID]; // wait for write to finish, by reading -80102a43: 8b 40 20 mov 0x20(%eax),%eax - lapicw(EOI, 0); - } -} -80102a46: c3 ret -80102a47: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80102a4e: 66 90 xchg %ax,%ax - -80102a50 : - -// Spin for a given number of microseconds. -// On real hardware would want to tune this dynamically. -void microdelay(int us) { -} -80102a50: c3 ret -80102a51: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80102a58: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80102a5f: 90 nop - -80102a60 : -#define CMOS_PORT 0x70 -#define CMOS_RETURN 0x71 - -// Start additional processor running entry code at addr. -// See Appendix B of MultiProcessor Specification. -void lapicstartap(uchar apicid, uint addr) { -80102a60: 55 push %ebp - asm volatile ("out %0,%1" : : "a" (data), "d" (port)); -80102a61: b8 0f 00 00 00 mov $0xf,%eax -80102a66: ba 70 00 00 00 mov $0x70,%edx -80102a6b: 89 e5 mov %esp,%ebp -80102a6d: 53 push %ebx -80102a6e: 8b 4d 0c mov 0xc(%ebp),%ecx -80102a71: 8b 5d 08 mov 0x8(%ebp),%ebx -80102a74: ee out %al,(%dx) -80102a75: b8 0a 00 00 00 mov $0xa,%eax -80102a7a: ba 71 00 00 00 mov $0x71,%edx -80102a7f: ee out %al,(%dx) - // 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 - outb(CMOS_PORT + 1, 0x0A); - wrv = (ushort*)P2V((0x40 << 4 | 0x67)); // Warm reset vector - wrv[0] = 0; -80102a80: 31 c0 xor %eax,%eax - wrv[1] = addr >> 4; - - // "Universal startup algorithm." - // Send INIT (level-triggered) interrupt to reset other CPU. - lapicw(ICRHI, apicid << 24); -80102a82: c1 e3 18 shl $0x18,%ebx - wrv[0] = 0; -80102a85: 66 a3 67 04 00 80 mov %ax,0x80000467 - wrv[1] = addr >> 4; -80102a8b: 89 c8 mov %ecx,%eax - // 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++) { - lapicw(ICRHI, apicid << 24); - lapicw(ICRLO, STARTUP | (addr >> 12)); -80102a8d: c1 e9 0c shr $0xc,%ecx - lapicw(ICRHI, apicid << 24); -80102a90: 89 da mov %ebx,%edx - wrv[1] = addr >> 4; -80102a92: c1 e8 04 shr $0x4,%eax - lapicw(ICRLO, STARTUP | (addr >> 12)); -80102a95: 80 cd 06 or $0x6,%ch - wrv[1] = addr >> 4; -80102a98: 66 a3 69 04 00 80 mov %ax,0x80000469 - lapic[index] = value; -80102a9e: a1 a0 16 11 80 mov 0x801116a0,%eax -80102aa3: 89 98 10 03 00 00 mov %ebx,0x310(%eax) - lapic[ID]; // wait for write to finish, by reading -80102aa9: 8b 58 20 mov 0x20(%eax),%ebx - lapic[index] = value; -80102aac: c7 80 00 03 00 00 00 movl $0xc500,0x300(%eax) -80102ab3: c5 00 00 - lapic[ID]; // wait for write to finish, by reading -80102ab6: 8b 58 20 mov 0x20(%eax),%ebx - lapic[index] = value; -80102ab9: c7 80 00 03 00 00 00 movl $0x8500,0x300(%eax) -80102ac0: 85 00 00 - lapic[ID]; // wait for write to finish, by reading -80102ac3: 8b 58 20 mov 0x20(%eax),%ebx - lapic[index] = value; -80102ac6: 89 90 10 03 00 00 mov %edx,0x310(%eax) - lapic[ID]; // wait for write to finish, by reading -80102acc: 8b 58 20 mov 0x20(%eax),%ebx - lapic[index] = value; -80102acf: 89 88 00 03 00 00 mov %ecx,0x300(%eax) - lapic[ID]; // wait for write to finish, by reading -80102ad5: 8b 58 20 mov 0x20(%eax),%ebx - lapic[index] = value; -80102ad8: 89 90 10 03 00 00 mov %edx,0x310(%eax) - lapic[ID]; // wait for write to finish, by reading -80102ade: 8b 50 20 mov 0x20(%eax),%edx - lapic[index] = value; -80102ae1: 89 88 00 03 00 00 mov %ecx,0x300(%eax) - lapic[ID]; // wait for write to finish, by reading -80102ae7: 8b 40 20 mov 0x20(%eax),%eax - microdelay(200); - } -} -80102aea: 8b 5d fc mov -0x4(%ebp),%ebx -80102aed: c9 leave -80102aee: c3 ret -80102aef: 90 nop - -80102af0 : - r->month = cmos_read(MONTH); - r->year = cmos_read(YEAR); -} - -// qemu seems to use 24-hour GWT and the values are BCD encoded -void cmostime(struct rtcdate *r) { -80102af0: 55 push %ebp -80102af1: b8 0b 00 00 00 mov $0xb,%eax -80102af6: ba 70 00 00 00 mov $0x70,%edx -80102afb: 89 e5 mov %esp,%ebp -80102afd: 57 push %edi -80102afe: 56 push %esi -80102aff: 53 push %ebx -80102b00: 83 ec 4c sub $0x4c,%esp -80102b03: ee out %al,(%dx) - asm volatile ("in %1,%0" : "=a" (data) : "d" (port)); -80102b04: ba 71 00 00 00 mov $0x71,%edx -80102b09: ec in (%dx),%al - struct rtcdate t1, t2; - int sb, bcd; - - sb = cmos_read(CMOS_STATB); - - bcd = (sb & (1 << 2)) == 0; -80102b0a: 83 e0 04 and $0x4,%eax - asm volatile ("out %0,%1" : : "a" (data), "d" (port)); -80102b0d: bb 70 00 00 00 mov $0x70,%ebx -80102b12: 88 45 b3 mov %al,-0x4d(%ebp) -80102b15: 8d 76 00 lea 0x0(%esi),%esi -80102b18: 31 c0 xor %eax,%eax -80102b1a: 89 da mov %ebx,%edx -80102b1c: ee out %al,(%dx) - asm volatile ("in %1,%0" : "=a" (data) : "d" (port)); -80102b1d: b9 71 00 00 00 mov $0x71,%ecx -80102b22: 89 ca mov %ecx,%edx -80102b24: ec in (%dx),%al -80102b25: 88 45 b7 mov %al,-0x49(%ebp) - asm volatile ("out %0,%1" : : "a" (data), "d" (port)); -80102b28: 89 da mov %ebx,%edx -80102b2a: b8 02 00 00 00 mov $0x2,%eax -80102b2f: ee out %al,(%dx) - asm volatile ("in %1,%0" : "=a" (data) : "d" (port)); -80102b30: 89 ca mov %ecx,%edx -80102b32: ec in (%dx),%al -80102b33: 88 45 b6 mov %al,-0x4a(%ebp) - asm volatile ("out %0,%1" : : "a" (data), "d" (port)); -80102b36: 89 da mov %ebx,%edx -80102b38: b8 04 00 00 00 mov $0x4,%eax -80102b3d: ee out %al,(%dx) - asm volatile ("in %1,%0" : "=a" (data) : "d" (port)); -80102b3e: 89 ca mov %ecx,%edx -80102b40: ec in (%dx),%al -80102b41: 88 45 b5 mov %al,-0x4b(%ebp) - asm volatile ("out %0,%1" : : "a" (data), "d" (port)); -80102b44: 89 da mov %ebx,%edx -80102b46: b8 07 00 00 00 mov $0x7,%eax -80102b4b: ee out %al,(%dx) - asm volatile ("in %1,%0" : "=a" (data) : "d" (port)); -80102b4c: 89 ca mov %ecx,%edx -80102b4e: ec in (%dx),%al -80102b4f: 88 45 b4 mov %al,-0x4c(%ebp) - asm volatile ("out %0,%1" : : "a" (data), "d" (port)); -80102b52: 89 da mov %ebx,%edx -80102b54: b8 08 00 00 00 mov $0x8,%eax -80102b59: ee out %al,(%dx) - asm volatile ("in %1,%0" : "=a" (data) : "d" (port)); -80102b5a: 89 ca mov %ecx,%edx -80102b5c: ec in (%dx),%al -80102b5d: 89 c7 mov %eax,%edi - asm volatile ("out %0,%1" : : "a" (data), "d" (port)); -80102b5f: 89 da mov %ebx,%edx -80102b61: b8 09 00 00 00 mov $0x9,%eax -80102b66: ee out %al,(%dx) - asm volatile ("in %1,%0" : "=a" (data) : "d" (port)); -80102b67: 89 ca mov %ecx,%edx -80102b69: ec in (%dx),%al -80102b6a: 89 c6 mov %eax,%esi - asm volatile ("out %0,%1" : : "a" (data), "d" (port)); -80102b6c: 89 da mov %ebx,%edx -80102b6e: b8 0a 00 00 00 mov $0xa,%eax -80102b73: ee out %al,(%dx) - asm volatile ("in %1,%0" : "=a" (data) : "d" (port)); -80102b74: 89 ca mov %ecx,%edx -80102b76: ec in (%dx),%al - - // make sure CMOS doesn't modify time while we read it - for (;;) { - fill_rtcdate(&t1); - if (cmos_read(CMOS_STATA) & CMOS_UIP) { -80102b77: 84 c0 test %al,%al -80102b79: 78 9d js 80102b18 - return inb(CMOS_RETURN); -80102b7b: 0f b6 45 b7 movzbl -0x49(%ebp),%eax -80102b7f: 89 fa mov %edi,%edx -80102b81: 0f b6 fa movzbl %dl,%edi -80102b84: 89 f2 mov %esi,%edx -80102b86: 89 45 b8 mov %eax,-0x48(%ebp) -80102b89: 0f b6 45 b6 movzbl -0x4a(%ebp),%eax -80102b8d: 0f b6 f2 movzbl %dl,%esi - asm volatile ("out %0,%1" : : "a" (data), "d" (port)); -80102b90: 89 da mov %ebx,%edx -80102b92: 89 7d c8 mov %edi,-0x38(%ebp) -80102b95: 89 45 bc mov %eax,-0x44(%ebp) -80102b98: 0f b6 45 b5 movzbl -0x4b(%ebp),%eax -80102b9c: 89 75 cc mov %esi,-0x34(%ebp) -80102b9f: 89 45 c0 mov %eax,-0x40(%ebp) -80102ba2: 0f b6 45 b4 movzbl -0x4c(%ebp),%eax -80102ba6: 89 45 c4 mov %eax,-0x3c(%ebp) -80102ba9: 31 c0 xor %eax,%eax -80102bab: ee out %al,(%dx) - asm volatile ("in %1,%0" : "=a" (data) : "d" (port)); -80102bac: 89 ca mov %ecx,%edx -80102bae: ec in (%dx),%al -80102baf: 0f b6 c0 movzbl %al,%eax - asm volatile ("out %0,%1" : : "a" (data), "d" (port)); -80102bb2: 89 da mov %ebx,%edx -80102bb4: 89 45 d0 mov %eax,-0x30(%ebp) -80102bb7: b8 02 00 00 00 mov $0x2,%eax -80102bbc: ee out %al,(%dx) - asm volatile ("in %1,%0" : "=a" (data) : "d" (port)); -80102bbd: 89 ca mov %ecx,%edx -80102bbf: ec in (%dx),%al -80102bc0: 0f b6 c0 movzbl %al,%eax - asm volatile ("out %0,%1" : : "a" (data), "d" (port)); -80102bc3: 89 da mov %ebx,%edx -80102bc5: 89 45 d4 mov %eax,-0x2c(%ebp) -80102bc8: b8 04 00 00 00 mov $0x4,%eax -80102bcd: ee out %al,(%dx) - asm volatile ("in %1,%0" : "=a" (data) : "d" (port)); -80102bce: 89 ca mov %ecx,%edx -80102bd0: ec in (%dx),%al -80102bd1: 0f b6 c0 movzbl %al,%eax - asm volatile ("out %0,%1" : : "a" (data), "d" (port)); -80102bd4: 89 da mov %ebx,%edx -80102bd6: 89 45 d8 mov %eax,-0x28(%ebp) -80102bd9: b8 07 00 00 00 mov $0x7,%eax -80102bde: ee out %al,(%dx) - asm volatile ("in %1,%0" : "=a" (data) : "d" (port)); -80102bdf: 89 ca mov %ecx,%edx -80102be1: ec in (%dx),%al -80102be2: 0f b6 c0 movzbl %al,%eax - asm volatile ("out %0,%1" : : "a" (data), "d" (port)); -80102be5: 89 da mov %ebx,%edx -80102be7: 89 45 dc mov %eax,-0x24(%ebp) -80102bea: b8 08 00 00 00 mov $0x8,%eax -80102bef: ee out %al,(%dx) - asm volatile ("in %1,%0" : "=a" (data) : "d" (port)); -80102bf0: 89 ca mov %ecx,%edx -80102bf2: ec in (%dx),%al -80102bf3: 0f b6 c0 movzbl %al,%eax - asm volatile ("out %0,%1" : : "a" (data), "d" (port)); -80102bf6: 89 da mov %ebx,%edx -80102bf8: 89 45 e0 mov %eax,-0x20(%ebp) -80102bfb: b8 09 00 00 00 mov $0x9,%eax -80102c00: ee out %al,(%dx) - asm volatile ("in %1,%0" : "=a" (data) : "d" (port)); -80102c01: 89 ca mov %ecx,%edx -80102c03: ec in (%dx),%al -80102c04: 0f b6 c0 movzbl %al,%eax - continue; - } - fill_rtcdate(&t2); - if (memcmp(&t1, &t2, sizeof(t1)) == 0) { -80102c07: 83 ec 04 sub $0x4,%esp - return inb(CMOS_RETURN); -80102c0a: 89 45 e4 mov %eax,-0x1c(%ebp) - if (memcmp(&t1, &t2, sizeof(t1)) == 0) { -80102c0d: 8d 45 d0 lea -0x30(%ebp),%eax -80102c10: 6a 18 push $0x18 -80102c12: 50 push %eax -80102c13: 8d 45 b8 lea -0x48(%ebp),%eax -80102c16: 50 push %eax -80102c17: e8 f4 1b 00 00 call 80104810 -80102c1c: 83 c4 10 add $0x10,%esp -80102c1f: 85 c0 test %eax,%eax -80102c21: 0f 85 f1 fe ff ff jne 80102b18 - break; - } - } - - // convert - if (bcd) { -80102c27: 80 7d b3 00 cmpb $0x0,-0x4d(%ebp) -80102c2b: 75 78 jne 80102ca5 -#define CONV(x) (t1.x = ((t1.x >> 4) * 10) + (t1.x & 0xf)) - CONV(second); -80102c2d: 8b 45 b8 mov -0x48(%ebp),%eax -80102c30: 89 c2 mov %eax,%edx -80102c32: 83 e0 0f and $0xf,%eax -80102c35: c1 ea 04 shr $0x4,%edx -80102c38: 8d 14 92 lea (%edx,%edx,4),%edx -80102c3b: 8d 04 50 lea (%eax,%edx,2),%eax -80102c3e: 89 45 b8 mov %eax,-0x48(%ebp) - CONV(minute); -80102c41: 8b 45 bc mov -0x44(%ebp),%eax -80102c44: 89 c2 mov %eax,%edx -80102c46: 83 e0 0f and $0xf,%eax -80102c49: c1 ea 04 shr $0x4,%edx -80102c4c: 8d 14 92 lea (%edx,%edx,4),%edx -80102c4f: 8d 04 50 lea (%eax,%edx,2),%eax -80102c52: 89 45 bc mov %eax,-0x44(%ebp) - CONV(hour ); -80102c55: 8b 45 c0 mov -0x40(%ebp),%eax -80102c58: 89 c2 mov %eax,%edx -80102c5a: 83 e0 0f and $0xf,%eax -80102c5d: c1 ea 04 shr $0x4,%edx -80102c60: 8d 14 92 lea (%edx,%edx,4),%edx -80102c63: 8d 04 50 lea (%eax,%edx,2),%eax -80102c66: 89 45 c0 mov %eax,-0x40(%ebp) - CONV(day ); -80102c69: 8b 45 c4 mov -0x3c(%ebp),%eax -80102c6c: 89 c2 mov %eax,%edx -80102c6e: 83 e0 0f and $0xf,%eax -80102c71: c1 ea 04 shr $0x4,%edx -80102c74: 8d 14 92 lea (%edx,%edx,4),%edx -80102c77: 8d 04 50 lea (%eax,%edx,2),%eax -80102c7a: 89 45 c4 mov %eax,-0x3c(%ebp) - CONV(month ); -80102c7d: 8b 45 c8 mov -0x38(%ebp),%eax -80102c80: 89 c2 mov %eax,%edx -80102c82: 83 e0 0f and $0xf,%eax -80102c85: c1 ea 04 shr $0x4,%edx -80102c88: 8d 14 92 lea (%edx,%edx,4),%edx -80102c8b: 8d 04 50 lea (%eax,%edx,2),%eax -80102c8e: 89 45 c8 mov %eax,-0x38(%ebp) - CONV(year ); -80102c91: 8b 45 cc mov -0x34(%ebp),%eax -80102c94: 89 c2 mov %eax,%edx -80102c96: 83 e0 0f and $0xf,%eax -80102c99: c1 ea 04 shr $0x4,%edx -80102c9c: 8d 14 92 lea (%edx,%edx,4),%edx -80102c9f: 8d 04 50 lea (%eax,%edx,2),%eax -80102ca2: 89 45 cc mov %eax,-0x34(%ebp) -#undef CONV - } - - *r = t1; -80102ca5: 8b 75 08 mov 0x8(%ebp),%esi -80102ca8: 8b 45 b8 mov -0x48(%ebp),%eax -80102cab: 89 06 mov %eax,(%esi) -80102cad: 8b 45 bc mov -0x44(%ebp),%eax -80102cb0: 89 46 04 mov %eax,0x4(%esi) -80102cb3: 8b 45 c0 mov -0x40(%ebp),%eax -80102cb6: 89 46 08 mov %eax,0x8(%esi) -80102cb9: 8b 45 c4 mov -0x3c(%ebp),%eax -80102cbc: 89 46 0c mov %eax,0xc(%esi) -80102cbf: 8b 45 c8 mov -0x38(%ebp),%eax -80102cc2: 89 46 10 mov %eax,0x10(%esi) -80102cc5: 8b 45 cc mov -0x34(%ebp),%eax -80102cc8: 89 46 14 mov %eax,0x14(%esi) - r->year += 2000; -80102ccb: 81 46 14 d0 07 00 00 addl $0x7d0,0x14(%esi) -} -80102cd2: 8d 65 f4 lea -0xc(%ebp),%esp -80102cd5: 5b pop %ebx -80102cd6: 5e pop %esi -80102cd7: 5f pop %edi -80102cd8: 5d pop %ebp -80102cd9: c3 ret -80102cda: 66 90 xchg %ax,%ax -80102cdc: 66 90 xchg %ax,%ax -80102cde: 66 90 xchg %ax,%ax - -80102ce0 : -static void -install_trans(void) -{ - int tail; - - for (tail = 0; tail < log.lh.n; tail++) { -80102ce0: 8b 0d 08 17 11 80 mov 0x80111708,%ecx -80102ce6: 85 c9 test %ecx,%ecx -80102ce8: 0f 8e 8a 00 00 00 jle 80102d78 -{ -80102cee: 55 push %ebp -80102cef: 89 e5 mov %esp,%ebp -80102cf1: 57 push %edi - for (tail = 0; tail < log.lh.n; tail++) { -80102cf2: 31 ff xor %edi,%edi -{ -80102cf4: 56 push %esi -80102cf5: 53 push %ebx -80102cf6: 83 ec 0c sub $0xc,%esp -80102cf9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - struct buf *lbuf = bread(log.dev, log.start+tail+1); // read log block -80102d00: a1 f4 16 11 80 mov 0x801116f4,%eax -80102d05: 83 ec 08 sub $0x8,%esp -80102d08: 01 f8 add %edi,%eax -80102d0a: 83 c0 01 add $0x1,%eax -80102d0d: 50 push %eax -80102d0e: ff 35 04 17 11 80 push 0x80111704 -80102d14: e8 b7 d3 ff ff call 801000d0 -80102d19: 89 c6 mov %eax,%esi - struct buf *dbuf = bread(log.dev, log.lh.block[tail]); // read dst -80102d1b: 58 pop %eax -80102d1c: 5a pop %edx -80102d1d: ff 34 bd 0c 17 11 80 push -0x7feee8f4(,%edi,4) -80102d24: ff 35 04 17 11 80 push 0x80111704 - for (tail = 0; tail < log.lh.n; tail++) { -80102d2a: 83 c7 01 add $0x1,%edi - struct buf *dbuf = bread(log.dev, log.lh.block[tail]); // read dst -80102d2d: e8 9e d3 ff ff call 801000d0 - memmove(dbuf->data, lbuf->data, BSIZE); // copy block to dst -80102d32: 83 c4 0c add $0xc,%esp - struct buf *dbuf = bread(log.dev, log.lh.block[tail]); // read dst -80102d35: 89 c3 mov %eax,%ebx - memmove(dbuf->data, lbuf->data, BSIZE); // copy block to dst -80102d37: 8d 46 5c lea 0x5c(%esi),%eax -80102d3a: 68 00 02 00 00 push $0x200 -80102d3f: 50 push %eax -80102d40: 8d 43 5c lea 0x5c(%ebx),%eax -80102d43: 50 push %eax -80102d44: e8 17 1b 00 00 call 80104860 - bwrite(dbuf); // write dst to disk -80102d49: 89 1c 24 mov %ebx,(%esp) -80102d4c: e8 5f d4 ff ff call 801001b0 - brelse(lbuf); -80102d51: 89 34 24 mov %esi,(%esp) -80102d54: e8 97 d4 ff ff call 801001f0 - brelse(dbuf); -80102d59: 89 1c 24 mov %ebx,(%esp) -80102d5c: e8 8f d4 ff ff call 801001f0 - for (tail = 0; tail < log.lh.n; tail++) { -80102d61: 83 c4 10 add $0x10,%esp -80102d64: 39 3d 08 17 11 80 cmp %edi,0x80111708 -80102d6a: 7f 94 jg 80102d00 - } -} -80102d6c: 8d 65 f4 lea -0xc(%ebp),%esp -80102d6f: 5b pop %ebx -80102d70: 5e pop %esi -80102d71: 5f pop %edi -80102d72: 5d pop %ebp -80102d73: c3 ret -80102d74: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -80102d78: c3 ret -80102d79: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -80102d80 : -// Write in-memory log header to disk. -// This is the true point at which the -// current transaction commits. -static void -write_head(void) -{ -80102d80: 55 push %ebp -80102d81: 89 e5 mov %esp,%ebp -80102d83: 53 push %ebx -80102d84: 83 ec 0c sub $0xc,%esp - struct buf *buf = bread(log.dev, log.start); -80102d87: ff 35 f4 16 11 80 push 0x801116f4 -80102d8d: ff 35 04 17 11 80 push 0x80111704 -80102d93: e8 38 d3 ff ff call 801000d0 - struct logheader *hb = (struct logheader *) (buf->data); - int i; - hb->n = log.lh.n; - for (i = 0; i < log.lh.n; i++) { -80102d98: 83 c4 10 add $0x10,%esp - struct buf *buf = bread(log.dev, log.start); -80102d9b: 89 c3 mov %eax,%ebx - hb->n = log.lh.n; -80102d9d: a1 08 17 11 80 mov 0x80111708,%eax -80102da2: 89 43 5c mov %eax,0x5c(%ebx) - for (i = 0; i < log.lh.n; i++) { -80102da5: 85 c0 test %eax,%eax -80102da7: 7e 19 jle 80102dc2 -80102da9: 31 d2 xor %edx,%edx -80102dab: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -80102daf: 90 nop - hb->block[i] = log.lh.block[i]; -80102db0: 8b 0c 95 0c 17 11 80 mov -0x7feee8f4(,%edx,4),%ecx -80102db7: 89 4c 93 60 mov %ecx,0x60(%ebx,%edx,4) - for (i = 0; i < log.lh.n; i++) { -80102dbb: 83 c2 01 add $0x1,%edx -80102dbe: 39 d0 cmp %edx,%eax -80102dc0: 75 ee jne 80102db0 - } - bwrite(buf); -80102dc2: 83 ec 0c sub $0xc,%esp -80102dc5: 53 push %ebx -80102dc6: e8 e5 d3 ff ff call 801001b0 - brelse(buf); -80102dcb: 89 1c 24 mov %ebx,(%esp) -80102dce: e8 1d d4 ff ff call 801001f0 -} -80102dd3: 8b 5d fc mov -0x4(%ebp),%ebx -80102dd6: 83 c4 10 add $0x10,%esp -80102dd9: c9 leave -80102dda: c3 ret -80102ddb: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -80102ddf: 90 nop - -80102de0 : -{ -80102de0: 55 push %ebp -80102de1: 89 e5 mov %esp,%ebp -80102de3: 53 push %ebx -80102de4: 83 ec 2c sub $0x2c,%esp -80102de7: 8b 5d 08 mov 0x8(%ebp),%ebx - initlock(&log.lock, "log"); -80102dea: 68 80 78 10 80 push $0x80107880 -80102def: 68 c0 16 11 80 push $0x801116c0 -80102df4: e8 37 17 00 00 call 80104530 - readsb(dev, &sb); -80102df9: 58 pop %eax -80102dfa: 8d 45 dc lea -0x24(%ebp),%eax -80102dfd: 5a pop %edx -80102dfe: 50 push %eax -80102dff: 53 push %ebx -80102e00: e8 3b e8 ff ff call 80101640 - log.start = sb.logstart; -80102e05: 8b 45 ec mov -0x14(%ebp),%eax - struct buf *buf = bread(log.dev, log.start); -80102e08: 59 pop %ecx - log.dev = dev; -80102e09: 89 1d 04 17 11 80 mov %ebx,0x80111704 - log.size = sb.nlog; -80102e0f: 8b 55 e8 mov -0x18(%ebp),%edx - log.start = sb.logstart; -80102e12: a3 f4 16 11 80 mov %eax,0x801116f4 - log.size = sb.nlog; -80102e17: 89 15 f8 16 11 80 mov %edx,0x801116f8 - struct buf *buf = bread(log.dev, log.start); -80102e1d: 5a pop %edx -80102e1e: 50 push %eax -80102e1f: 53 push %ebx -80102e20: e8 ab d2 ff ff call 801000d0 - for (i = 0; i < log.lh.n; i++) { -80102e25: 83 c4 10 add $0x10,%esp - log.lh.n = lh->n; -80102e28: 8b 58 5c mov 0x5c(%eax),%ebx -80102e2b: 89 1d 08 17 11 80 mov %ebx,0x80111708 - for (i = 0; i < log.lh.n; i++) { -80102e31: 85 db test %ebx,%ebx -80102e33: 7e 1d jle 80102e52 -80102e35: 31 d2 xor %edx,%edx -80102e37: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80102e3e: 66 90 xchg %ax,%ax - log.lh.block[i] = lh->block[i]; -80102e40: 8b 4c 90 60 mov 0x60(%eax,%edx,4),%ecx -80102e44: 89 0c 95 0c 17 11 80 mov %ecx,-0x7feee8f4(,%edx,4) - for (i = 0; i < log.lh.n; i++) { -80102e4b: 83 c2 01 add $0x1,%edx -80102e4e: 39 d3 cmp %edx,%ebx -80102e50: 75 ee jne 80102e40 - brelse(buf); -80102e52: 83 ec 0c sub $0xc,%esp -80102e55: 50 push %eax -80102e56: e8 95 d3 ff ff call 801001f0 - -static void -recover_from_log(void) -{ - read_head(); - install_trans(); // if committed, copy from log to disk -80102e5b: e8 80 fe ff ff call 80102ce0 - log.lh.n = 0; -80102e60: c7 05 08 17 11 80 00 movl $0x0,0x80111708 -80102e67: 00 00 00 - write_head(); // clear the log -80102e6a: e8 11 ff ff ff call 80102d80 -} -80102e6f: 8b 5d fc mov -0x4(%ebp),%ebx -80102e72: 83 c4 10 add $0x10,%esp -80102e75: c9 leave -80102e76: c3 ret -80102e77: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80102e7e: 66 90 xchg %ax,%ax - -80102e80 : -} - -// called at the start of each FS system call. -void -begin_op(void) -{ -80102e80: 55 push %ebp -80102e81: 89 e5 mov %esp,%ebp -80102e83: 83 ec 14 sub $0x14,%esp - acquire(&log.lock); -80102e86: 68 c0 16 11 80 push $0x801116c0 -80102e8b: e8 70 18 00 00 call 80104700 -80102e90: 83 c4 10 add $0x10,%esp -80102e93: eb 18 jmp 80102ead -80102e95: 8d 76 00 lea 0x0(%esi),%esi - while(1){ - if(log.committing){ - sleep(&log, &log.lock); -80102e98: 83 ec 08 sub $0x8,%esp -80102e9b: 68 c0 16 11 80 push $0x801116c0 -80102ea0: 68 c0 16 11 80 push $0x801116c0 -80102ea5: e8 f6 12 00 00 call 801041a0 -80102eaa: 83 c4 10 add $0x10,%esp - if(log.committing){ -80102ead: a1 00 17 11 80 mov 0x80111700,%eax -80102eb2: 85 c0 test %eax,%eax -80102eb4: 75 e2 jne 80102e98 - } else if(log.lh.n + (log.outstanding+1)*MAXOPBLOCKS > LOGSIZE){ -80102eb6: a1 fc 16 11 80 mov 0x801116fc,%eax -80102ebb: 8b 15 08 17 11 80 mov 0x80111708,%edx -80102ec1: 83 c0 01 add $0x1,%eax -80102ec4: 8d 0c 80 lea (%eax,%eax,4),%ecx -80102ec7: 8d 14 4a lea (%edx,%ecx,2),%edx -80102eca: 83 fa 1e cmp $0x1e,%edx -80102ecd: 7f c9 jg 80102e98 - // this op might exhaust log space; wait for commit. - sleep(&log, &log.lock); - } else { - log.outstanding += 1; - release(&log.lock); -80102ecf: 83 ec 0c sub $0xc,%esp - log.outstanding += 1; -80102ed2: a3 fc 16 11 80 mov %eax,0x801116fc - release(&log.lock); -80102ed7: 68 c0 16 11 80 push $0x801116c0 -80102edc: e8 bf 17 00 00 call 801046a0 - break; - } - } -} -80102ee1: 83 c4 10 add $0x10,%esp -80102ee4: c9 leave -80102ee5: c3 ret -80102ee6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80102eed: 8d 76 00 lea 0x0(%esi),%esi - -80102ef0 : - -// called at the end of each FS system call. -// commits if this was the last outstanding operation. -void -end_op(void) -{ -80102ef0: 55 push %ebp -80102ef1: 89 e5 mov %esp,%ebp -80102ef3: 57 push %edi -80102ef4: 56 push %esi -80102ef5: 53 push %ebx -80102ef6: 83 ec 18 sub $0x18,%esp - int do_commit = 0; - - acquire(&log.lock); -80102ef9: 68 c0 16 11 80 push $0x801116c0 -80102efe: e8 fd 17 00 00 call 80104700 - log.outstanding -= 1; -80102f03: a1 fc 16 11 80 mov 0x801116fc,%eax - if(log.committing) -80102f08: 8b 35 00 17 11 80 mov 0x80111700,%esi -80102f0e: 83 c4 10 add $0x10,%esp - log.outstanding -= 1; -80102f11: 8d 58 ff lea -0x1(%eax),%ebx -80102f14: 89 1d fc 16 11 80 mov %ebx,0x801116fc - if(log.committing) -80102f1a: 85 f6 test %esi,%esi -80102f1c: 0f 85 22 01 00 00 jne 80103044 - panic("log.committing"); - if(log.outstanding == 0){ -80102f22: 85 db test %ebx,%ebx -80102f24: 0f 85 f6 00 00 00 jne 80103020 - do_commit = 1; - log.committing = 1; -80102f2a: c7 05 00 17 11 80 01 movl $0x1,0x80111700 -80102f31: 00 00 00 - // begin_op() may be waiting for log space, - // and decrementing log.outstanding has decreased - // the amount of reserved space. - wakeup(&log); - } - release(&log.lock); -80102f34: 83 ec 0c sub $0xc,%esp -80102f37: 68 c0 16 11 80 push $0x801116c0 -80102f3c: e8 5f 17 00 00 call 801046a0 -} - -static void -commit() -{ - if (log.lh.n > 0) { -80102f41: 8b 0d 08 17 11 80 mov 0x80111708,%ecx -80102f47: 83 c4 10 add $0x10,%esp -80102f4a: 85 c9 test %ecx,%ecx -80102f4c: 7f 42 jg 80102f90 - acquire(&log.lock); -80102f4e: 83 ec 0c sub $0xc,%esp -80102f51: 68 c0 16 11 80 push $0x801116c0 -80102f56: e8 a5 17 00 00 call 80104700 - wakeup(&log); -80102f5b: c7 04 24 c0 16 11 80 movl $0x801116c0,(%esp) - log.committing = 0; -80102f62: c7 05 00 17 11 80 00 movl $0x0,0x80111700 -80102f69: 00 00 00 - wakeup(&log); -80102f6c: e8 ef 12 00 00 call 80104260 - release(&log.lock); -80102f71: c7 04 24 c0 16 11 80 movl $0x801116c0,(%esp) -80102f78: e8 23 17 00 00 call 801046a0 -80102f7d: 83 c4 10 add $0x10,%esp -} -80102f80: 8d 65 f4 lea -0xc(%ebp),%esp -80102f83: 5b pop %ebx -80102f84: 5e pop %esi -80102f85: 5f pop %edi -80102f86: 5d pop %ebp -80102f87: c3 ret -80102f88: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80102f8f: 90 nop - struct buf *to = bread(log.dev, log.start+tail+1); // log block -80102f90: a1 f4 16 11 80 mov 0x801116f4,%eax -80102f95: 83 ec 08 sub $0x8,%esp -80102f98: 01 d8 add %ebx,%eax -80102f9a: 83 c0 01 add $0x1,%eax -80102f9d: 50 push %eax -80102f9e: ff 35 04 17 11 80 push 0x80111704 -80102fa4: e8 27 d1 ff ff call 801000d0 -80102fa9: 89 c6 mov %eax,%esi - struct buf *from = bread(log.dev, log.lh.block[tail]); // cache block -80102fab: 58 pop %eax -80102fac: 5a pop %edx -80102fad: ff 34 9d 0c 17 11 80 push -0x7feee8f4(,%ebx,4) -80102fb4: ff 35 04 17 11 80 push 0x80111704 - for (tail = 0; tail < log.lh.n; tail++) { -80102fba: 83 c3 01 add $0x1,%ebx - struct buf *from = bread(log.dev, log.lh.block[tail]); // cache block -80102fbd: e8 0e d1 ff ff call 801000d0 - memmove(to->data, from->data, BSIZE); -80102fc2: 83 c4 0c add $0xc,%esp - struct buf *from = bread(log.dev, log.lh.block[tail]); // cache block -80102fc5: 89 c7 mov %eax,%edi - memmove(to->data, from->data, BSIZE); -80102fc7: 8d 40 5c lea 0x5c(%eax),%eax -80102fca: 68 00 02 00 00 push $0x200 -80102fcf: 50 push %eax -80102fd0: 8d 46 5c lea 0x5c(%esi),%eax -80102fd3: 50 push %eax -80102fd4: e8 87 18 00 00 call 80104860 - bwrite(to); // write the log -80102fd9: 89 34 24 mov %esi,(%esp) -80102fdc: e8 cf d1 ff ff call 801001b0 - brelse(from); -80102fe1: 89 3c 24 mov %edi,(%esp) -80102fe4: e8 07 d2 ff ff call 801001f0 - brelse(to); -80102fe9: 89 34 24 mov %esi,(%esp) -80102fec: e8 ff d1 ff ff call 801001f0 - for (tail = 0; tail < log.lh.n; tail++) { -80102ff1: 83 c4 10 add $0x10,%esp -80102ff4: 3b 1d 08 17 11 80 cmp 0x80111708,%ebx -80102ffa: 7c 94 jl 80102f90 - write_log(); // Write modified blocks from cache to log - write_head(); // Write header to disk -- the real commit -80102ffc: e8 7f fd ff ff call 80102d80 - install_trans(); // Now install writes to home locations -80103001: e8 da fc ff ff call 80102ce0 - log.lh.n = 0; -80103006: c7 05 08 17 11 80 00 movl $0x0,0x80111708 -8010300d: 00 00 00 - write_head(); // Erase the transaction from the log -80103010: e8 6b fd ff ff call 80102d80 -80103015: e9 34 ff ff ff jmp 80102f4e -8010301a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - wakeup(&log); -80103020: 83 ec 0c sub $0xc,%esp -80103023: 68 c0 16 11 80 push $0x801116c0 -80103028: e8 33 12 00 00 call 80104260 - release(&log.lock); -8010302d: c7 04 24 c0 16 11 80 movl $0x801116c0,(%esp) -80103034: e8 67 16 00 00 call 801046a0 -80103039: 83 c4 10 add $0x10,%esp -} -8010303c: 8d 65 f4 lea -0xc(%ebp),%esp -8010303f: 5b pop %ebx -80103040: 5e pop %esi -80103041: 5f pop %edi -80103042: 5d pop %ebp -80103043: c3 ret - panic("log.committing"); -80103044: 83 ec 0c sub $0xc,%esp -80103047: 68 84 78 10 80 push $0x80107884 -8010304c: e8 3f d3 ff ff call 80100390 -80103051: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80103058: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010305f: 90 nop - -80103060 : -// modify bp->data[] -// log_write(bp) -// brelse(bp) -void -log_write(struct buf *b) -{ -80103060: 55 push %ebp -80103061: 89 e5 mov %esp,%ebp -80103063: 53 push %ebx -80103064: 83 ec 04 sub $0x4,%esp - int i; - - if (log.lh.n >= LOGSIZE || log.lh.n >= log.size - 1) -80103067: 8b 15 08 17 11 80 mov 0x80111708,%edx -{ -8010306d: 8b 5d 08 mov 0x8(%ebp),%ebx - if (log.lh.n >= LOGSIZE || log.lh.n >= log.size - 1) -80103070: 83 fa 1d cmp $0x1d,%edx -80103073: 0f 8f 85 00 00 00 jg 801030fe -80103079: a1 f8 16 11 80 mov 0x801116f8,%eax -8010307e: 83 e8 01 sub $0x1,%eax -80103081: 39 c2 cmp %eax,%edx -80103083: 7d 79 jge 801030fe - panic("too big a transaction"); - if (log.outstanding < 1) -80103085: a1 fc 16 11 80 mov 0x801116fc,%eax -8010308a: 85 c0 test %eax,%eax -8010308c: 7e 7d jle 8010310b - panic("log_write outside of trans"); - - acquire(&log.lock); -8010308e: 83 ec 0c sub $0xc,%esp -80103091: 68 c0 16 11 80 push $0x801116c0 -80103096: e8 65 16 00 00 call 80104700 - for (i = 0; i < log.lh.n; i++) { -8010309b: 8b 15 08 17 11 80 mov 0x80111708,%edx -801030a1: 83 c4 10 add $0x10,%esp -801030a4: 85 d2 test %edx,%edx -801030a6: 7e 4a jle 801030f2 - if (log.lh.block[i] == b->blockno) // log absorbtion -801030a8: 8b 4b 08 mov 0x8(%ebx),%ecx - for (i = 0; i < log.lh.n; i++) { -801030ab: 31 c0 xor %eax,%eax -801030ad: eb 08 jmp 801030b7 -801030af: 90 nop -801030b0: 83 c0 01 add $0x1,%eax -801030b3: 39 c2 cmp %eax,%edx -801030b5: 74 29 je 801030e0 - if (log.lh.block[i] == b->blockno) // log absorbtion -801030b7: 39 0c 85 0c 17 11 80 cmp %ecx,-0x7feee8f4(,%eax,4) -801030be: 75 f0 jne 801030b0 - break; - } - log.lh.block[i] = b->blockno; -801030c0: 89 0c 85 0c 17 11 80 mov %ecx,-0x7feee8f4(,%eax,4) - if (i == log.lh.n) - log.lh.n++; - b->flags |= B_DIRTY; // prevent eviction -801030c7: 83 0b 04 orl $0x4,(%ebx) - release(&log.lock); -} -801030ca: 8b 5d fc mov -0x4(%ebp),%ebx - release(&log.lock); -801030cd: c7 45 08 c0 16 11 80 movl $0x801116c0,0x8(%ebp) -} -801030d4: c9 leave - release(&log.lock); -801030d5: e9 c6 15 00 00 jmp 801046a0 -801030da: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - log.lh.block[i] = b->blockno; -801030e0: 89 0c 95 0c 17 11 80 mov %ecx,-0x7feee8f4(,%edx,4) - log.lh.n++; -801030e7: 83 c2 01 add $0x1,%edx -801030ea: 89 15 08 17 11 80 mov %edx,0x80111708 -801030f0: eb d5 jmp 801030c7 - log.lh.block[i] = b->blockno; -801030f2: 8b 43 08 mov 0x8(%ebx),%eax -801030f5: a3 0c 17 11 80 mov %eax,0x8011170c - if (i == log.lh.n) -801030fa: 75 cb jne 801030c7 -801030fc: eb e9 jmp 801030e7 - panic("too big a transaction"); -801030fe: 83 ec 0c sub $0xc,%esp -80103101: 68 93 78 10 80 push $0x80107893 -80103106: e8 85 d2 ff ff call 80100390 - panic("log_write outside of trans"); -8010310b: 83 ec 0c sub $0xc,%esp -8010310e: 68 a9 78 10 80 push $0x801078a9 -80103113: e8 78 d2 ff ff call 80100390 -80103118: 66 90 xchg %ax,%ax -8010311a: 66 90 xchg %ax,%ax -8010311c: 66 90 xchg %ax,%ax -8010311e: 66 90 xchg %ax,%ax - -80103120 : - lapicinit(); - mpmain(); -} - -// Common CPU setup code. -static void mpmain(void) { -80103120: 55 push %ebp -80103121: 89 e5 mov %esp,%ebp -80103123: 53 push %ebx -80103124: 83 ec 04 sub $0x4,%esp - cprintf("cpu%d: starting %d\n", cpuid(), cpuid()); -80103127: e8 84 09 00 00 call 80103ab0 -8010312c: 89 c3 mov %eax,%ebx -8010312e: e8 7d 09 00 00 call 80103ab0 -80103133: 83 ec 04 sub $0x4,%esp -80103136: 53 push %ebx -80103137: 50 push %eax -80103138: 68 c4 78 10 80 push $0x801078c4 -8010313d: e8 6e d5 ff ff call 801006b0 - idtinit(); // load idt register -80103142: e8 b9 29 00 00 call 80105b00 - xchg(&(mycpu()->started), 1); // tell startothers() we're up -80103147: e8 04 09 00 00 call 80103a50 -8010314c: 89 c2 mov %eax,%edx - -static inline uint xchg(volatile uint *addr, uint newval) { - uint result; - - // The + in "+m" denotes a read-modify-write operand. - asm volatile ("lock; xchgl %0, %1" : -8010314e: b8 01 00 00 00 mov $0x1,%eax -80103153: f0 87 82 a0 00 00 00 lock xchg %eax,0xa0(%edx) - scheduler(); // start running processes -8010315a: e8 31 0c 00 00 call 80103d90 -8010315f: 90 nop - -80103160 : -static void mpenter(void) { -80103160: 55 push %ebp -80103161: 89 e5 mov %esp,%ebp -80103163: 83 ec 08 sub $0x8,%esp - switchkvm(); -80103166: e8 85 3a 00 00 call 80106bf0 - seginit(); -8010316b: e8 f0 39 00 00 call 80106b60 - lapicinit(); -80103170: e8 9b f7 ff ff call 80102910 - mpmain(); -80103175: e8 a6 ff ff ff call 80103120 -8010317a: 66 90 xchg %ax,%ax -8010317c: 66 90 xchg %ax,%ax -8010317e: 66 90 xchg %ax,%ax - -80103180

    : -int main(void) { -80103180: 8d 4c 24 04 lea 0x4(%esp),%ecx -80103184: 83 e4 f0 and $0xfffffff0,%esp -80103187: ff 71 fc push -0x4(%ecx) -8010318a: 55 push %ebp -8010318b: 89 e5 mov %esp,%ebp -8010318d: 53 push %ebx -8010318e: 51 push %ecx - kinit1(end, P2V(4 * 1024 * 1024)); // phys page allocator -8010318f: 83 ec 08 sub $0x8,%esp -80103192: 68 00 00 40 80 push $0x80400000 -80103197: 68 f0 54 11 80 push $0x801154f0 -8010319c: e8 8f f5 ff ff call 80102730 - kvmalloc(); // kernel page table -801031a1: e8 3a 3f 00 00 call 801070e0 - mpinit(); // detect other processors -801031a6: e8 85 01 00 00 call 80103330 - lapicinit(); // interrupt controller -801031ab: e8 60 f7 ff ff call 80102910 - seginit(); // segment descriptors -801031b0: e8 ab 39 00 00 call 80106b60 - picinit(); // disable pic -801031b5: e8 76 03 00 00 call 80103530 - ioapicinit(); // another interrupt controller -801031ba: e8 31 f3 ff ff call 801024f0 - consoleinit(); // console hardware -801031bf: e8 0c d9 ff ff call 80100ad0 - uartinit(); // serial port -801031c4: e8 27 2c 00 00 call 80105df0 - pinit(); // process table -801031c9: e8 62 08 00 00 call 80103a30 - tvinit(); // trap vectors -801031ce: e8 ad 28 00 00 call 80105a80 - binit(); // buffer cache -801031d3: e8 68 ce ff ff call 80100040 - fileinit(); // file table -801031d8: e8 53 dd ff ff call 80100f30 - ideinit(); // disk -801031dd: e8 fe f0 ff ff call 801022e0 - - // Write entry code to unused memory at 0x7000. - // 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); -801031e2: 83 c4 0c add $0xc,%esp -801031e5: 68 7a 00 00 00 push $0x7a -801031ea: 68 8c a4 10 80 push $0x8010a48c -801031ef: 68 00 70 00 80 push $0x80007000 -801031f4: e8 67 16 00 00 call 80104860 - - for (c = cpus; c < cpus + ncpu; c++) { -801031f9: 83 c4 10 add $0x10,%esp -801031fc: 69 05 a4 17 11 80 b0 imul $0xb0,0x801117a4,%eax -80103203: 00 00 00 -80103206: 05 c0 17 11 80 add $0x801117c0,%eax -8010320b: 3d c0 17 11 80 cmp $0x801117c0,%eax -80103210: 76 7e jbe 80103290 -80103212: bb c0 17 11 80 mov $0x801117c0,%ebx -80103217: eb 20 jmp 80103239 -80103219: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80103220: 69 05 a4 17 11 80 b0 imul $0xb0,0x801117a4,%eax -80103227: 00 00 00 -8010322a: 81 c3 b0 00 00 00 add $0xb0,%ebx -80103230: 05 c0 17 11 80 add $0x801117c0,%eax -80103235: 39 c3 cmp %eax,%ebx -80103237: 73 57 jae 80103290 - if (c == mycpu()) { // We've started already. -80103239: e8 12 08 00 00 call 80103a50 -8010323e: 39 c3 cmp %eax,%ebx -80103240: 74 de je 80103220 - } - - // 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(); -80103242: e8 59 f5 ff ff call 801027a0 - *(void**)(code - 4) = stack + KSTACKSIZE; - *(void(**)(void))(code - 8) = mpenter; - *(int**)(code - 12) = (void *) V2P(entrypgdir); - - lapicstartap(c->apicid, V2P(code)); -80103247: 83 ec 08 sub $0x8,%esp - *(void(**)(void))(code - 8) = mpenter; -8010324a: c7 05 f8 6f 00 80 60 movl $0x80103160,0x80006ff8 -80103251: 31 10 80 - *(int**)(code - 12) = (void *) V2P(entrypgdir); -80103254: c7 05 f4 6f 00 80 00 movl $0x109000,0x80006ff4 -8010325b: 90 10 00 - *(void**)(code - 4) = stack + KSTACKSIZE; -8010325e: 05 00 10 00 00 add $0x1000,%eax -80103263: a3 fc 6f 00 80 mov %eax,0x80006ffc - lapicstartap(c->apicid, V2P(code)); -80103268: 0f b6 03 movzbl (%ebx),%eax -8010326b: 68 00 70 00 00 push $0x7000 -80103270: 50 push %eax -80103271: e8 ea f7 ff ff call 80102a60 - - // wait for cpu to finish mpmain() - while (c->started == 0) { -80103276: 83 c4 10 add $0x10,%esp -80103279: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80103280: 8b 83 a0 00 00 00 mov 0xa0(%ebx),%eax -80103286: 85 c0 test %eax,%eax -80103288: 74 f6 je 80103280 -8010328a: eb 94 jmp 80103220 -8010328c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - kinit2(P2V(4 * 1024 * 1024), P2V(PHYSTOP)); // must come after startothers() -80103290: 83 ec 08 sub $0x8,%esp -80103293: 68 00 00 00 8e push $0x8e000000 -80103298: 68 00 00 40 80 push $0x80400000 -8010329d: e8 2e f4 ff ff call 801026d0 - userinit(); // first user process -801032a2: e8 59 08 00 00 call 80103b00 - mpmain(); // finish this processor's setup -801032a7: e8 74 fe ff ff call 80103120 -801032ac: 66 90 xchg %ax,%ax -801032ae: 66 90 xchg %ax,%ax - -801032b0 : - } - return sum; -} - -// Look for an MP structure in the len bytes at addr. -static struct mp*mpsearch1(uint a, int len) { -801032b0: 55 push %ebp -801032b1: 89 e5 mov %esp,%ebp -801032b3: 57 push %edi -801032b4: 56 push %esi - uchar *e, *p, *addr; - - addr = P2V(a); -801032b5: 8d b0 00 00 00 80 lea -0x80000000(%eax),%esi -static struct mp*mpsearch1(uint a, int len) { -801032bb: 53 push %ebx - e = addr + len; -801032bc: 8d 1c 16 lea (%esi,%edx,1),%ebx -static struct mp*mpsearch1(uint a, int len) { -801032bf: 83 ec 0c sub $0xc,%esp - for (p = addr; p < e; p += sizeof(struct mp)) { -801032c2: 39 de cmp %ebx,%esi -801032c4: 72 10 jb 801032d6 -801032c6: eb 50 jmp 80103318 -801032c8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801032cf: 90 nop -801032d0: 89 fe mov %edi,%esi -801032d2: 39 fb cmp %edi,%ebx -801032d4: 76 42 jbe 80103318 - if (memcmp(p, "_MP_", 4) == 0 && sum(p, sizeof(struct mp)) == 0) { -801032d6: 83 ec 04 sub $0x4,%esp -801032d9: 8d 7e 10 lea 0x10(%esi),%edi -801032dc: 6a 04 push $0x4 -801032de: 68 d8 78 10 80 push $0x801078d8 -801032e3: 56 push %esi -801032e4: e8 27 15 00 00 call 80104810 -801032e9: 83 c4 10 add $0x10,%esp -801032ec: 85 c0 test %eax,%eax -801032ee: 75 e0 jne 801032d0 -801032f0: 89 f2 mov %esi,%edx -801032f2: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - sum += addr[i]; -801032f8: 0f b6 0a movzbl (%edx),%ecx - for (i = 0; i < len; i++) { -801032fb: 83 c2 01 add $0x1,%edx - sum += addr[i]; -801032fe: 01 c8 add %ecx,%eax - for (i = 0; i < len; i++) { -80103300: 39 fa cmp %edi,%edx -80103302: 75 f4 jne 801032f8 - if (memcmp(p, "_MP_", 4) == 0 && sum(p, sizeof(struct mp)) == 0) { -80103304: 84 c0 test %al,%al -80103306: 75 c8 jne 801032d0 - return (struct mp*)p; - } - } - return 0; -} -80103308: 8d 65 f4 lea -0xc(%ebp),%esp -8010330b: 89 f0 mov %esi,%eax -8010330d: 5b pop %ebx -8010330e: 5e pop %esi -8010330f: 5f pop %edi -80103310: 5d pop %ebp -80103311: c3 ret -80103312: 8d b6 00 00 00 00 lea 0x0(%esi),%esi -80103318: 8d 65 f4 lea -0xc(%ebp),%esp - return 0; -8010331b: 31 f6 xor %esi,%esi -} -8010331d: 5b pop %ebx -8010331e: 89 f0 mov %esi,%eax -80103320: 5e pop %esi -80103321: 5f pop %edi -80103322: 5d pop %ebp -80103323: c3 ret -80103324: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010332b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -8010332f: 90 nop - -80103330 : - } - *pmp = mp; - return conf; -} - -void mpinit(void) { -80103330: 55 push %ebp -80103331: 89 e5 mov %esp,%ebp -80103333: 57 push %edi -80103334: 56 push %esi -80103335: 53 push %ebx -80103336: 83 ec 1c sub $0x1c,%esp - if ((p = ((bda[0x0F] << 8) | bda[0x0E]) << 4)) { -80103339: 0f b6 05 0f 04 00 80 movzbl 0x8000040f,%eax -80103340: 0f b6 15 0e 04 00 80 movzbl 0x8000040e,%edx -80103347: c1 e0 08 shl $0x8,%eax -8010334a: 09 d0 or %edx,%eax -8010334c: c1 e0 04 shl $0x4,%eax -8010334f: 75 1b jne 8010336c - p = ((bda[0x14] << 8) | bda[0x13]) * 1024; -80103351: 0f b6 05 14 04 00 80 movzbl 0x80000414,%eax -80103358: 0f b6 15 13 04 00 80 movzbl 0x80000413,%edx -8010335f: c1 e0 08 shl $0x8,%eax -80103362: 09 d0 or %edx,%eax -80103364: c1 e0 0a shl $0xa,%eax - if ((mp = mpsearch1(p - 1024, 1024))) { -80103367: 2d 00 04 00 00 sub $0x400,%eax - if ((mp = mpsearch1(p, 1024))) { -8010336c: ba 00 04 00 00 mov $0x400,%edx -80103371: e8 3a ff ff ff call 801032b0 -80103376: 89 c3 mov %eax,%ebx -80103378: 85 c0 test %eax,%eax -8010337a: 0f 84 40 01 00 00 je 801034c0 - if ((mp = mpsearch()) == 0 || mp->physaddr == 0) { -80103380: 8b 73 04 mov 0x4(%ebx),%esi -80103383: 85 f6 test %esi,%esi -80103385: 0f 84 25 01 00 00 je 801034b0 - if (memcmp(conf, "PCMP", 4) != 0) { -8010338b: 83 ec 04 sub $0x4,%esp - conf = (struct mpconf*) P2V((uint) mp->physaddr); -8010338e: 8d 86 00 00 00 80 lea -0x80000000(%esi),%eax - if (memcmp(conf, "PCMP", 4) != 0) { -80103394: 6a 04 push $0x4 -80103396: 68 dd 78 10 80 push $0x801078dd -8010339b: 50 push %eax - conf = (struct mpconf*) P2V((uint) mp->physaddr); -8010339c: 89 45 e4 mov %eax,-0x1c(%ebp) - if (memcmp(conf, "PCMP", 4) != 0) { -8010339f: e8 6c 14 00 00 call 80104810 -801033a4: 83 c4 10 add $0x10,%esp -801033a7: 85 c0 test %eax,%eax -801033a9: 0f 85 01 01 00 00 jne 801034b0 - if (conf->version != 1 && conf->version != 4) { -801033af: 0f b6 86 06 00 00 80 movzbl -0x7ffffffa(%esi),%eax -801033b6: 3c 01 cmp $0x1,%al -801033b8: 74 08 je 801033c2 -801033ba: 3c 04 cmp $0x4,%al -801033bc: 0f 85 ee 00 00 00 jne 801034b0 - if (sum((uchar*)conf, conf->length) != 0) { -801033c2: 0f b7 96 04 00 00 80 movzwl -0x7ffffffc(%esi),%edx - for (i = 0; i < len; i++) { -801033c9: 66 85 d2 test %dx,%dx -801033cc: 74 22 je 801033f0 -801033ce: 8d 3c 32 lea (%edx,%esi,1),%edi -801033d1: 89 f0 mov %esi,%eax - sum = 0; -801033d3: 31 d2 xor %edx,%edx -801033d5: 8d 76 00 lea 0x0(%esi),%esi - sum += addr[i]; -801033d8: 0f b6 88 00 00 00 80 movzbl -0x80000000(%eax),%ecx - for (i = 0; i < len; i++) { -801033df: 83 c0 01 add $0x1,%eax - sum += addr[i]; -801033e2: 01 ca add %ecx,%edx - for (i = 0; i < len; i++) { -801033e4: 39 c7 cmp %eax,%edi -801033e6: 75 f0 jne 801033d8 - if (sum((uchar*)conf, conf->length) != 0) { -801033e8: 84 d2 test %dl,%dl -801033ea: 0f 85 c0 00 00 00 jne 801034b0 - - if ((conf = mpconfig(&mp)) == 0) { - panic("Expect to run on an SMP"); - } - ismp = 1; - lapic = (uint*)conf->lapicaddr; -801033f0: 8b 86 24 00 00 80 mov -0x7fffffdc(%esi),%eax -801033f6: a3 a0 16 11 80 mov %eax,0x801116a0 - for (p = (uchar*)(conf + 1), e = (uchar*)conf + conf->length; p < e;) { -801033fb: 0f b7 96 04 00 00 80 movzwl -0x7ffffffc(%esi),%edx -80103402: 8d 86 2c 00 00 80 lea -0x7fffffd4(%esi),%eax - ismp = 1; -80103408: be 01 00 00 00 mov $0x1,%esi - for (p = (uchar*)(conf + 1), e = (uchar*)conf + conf->length; p < e;) { -8010340d: 03 55 e4 add -0x1c(%ebp),%edx -80103410: 89 5d e4 mov %ebx,-0x1c(%ebp) -80103413: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -80103417: 90 nop -80103418: 39 d0 cmp %edx,%eax -8010341a: 73 15 jae 80103431 - switch (*p) { -8010341c: 0f b6 08 movzbl (%eax),%ecx -8010341f: 80 f9 02 cmp $0x2,%cl -80103422: 74 4c je 80103470 -80103424: 77 3a ja 80103460 -80103426: 84 c9 test %cl,%cl -80103428: 74 56 je 80103480 - p += sizeof(struct mpioapic); - continue; - case MPBUS: - case MPIOINTR: - case MPLINTR: - p += 8; -8010342a: 83 c0 08 add $0x8,%eax - for (p = (uchar*)(conf + 1), e = (uchar*)conf + conf->length; p < e;) { -8010342d: 39 d0 cmp %edx,%eax -8010342f: 72 eb jb 8010341c - default: - ismp = 0; - break; - } - } - if (!ismp) { -80103431: 8b 5d e4 mov -0x1c(%ebp),%ebx -80103434: 85 f6 test %esi,%esi -80103436: 0f 84 d9 00 00 00 je 80103515 - panic("Didn't find a suitable machine"); - } - - if (mp->imcrp) { -8010343c: 80 7b 0c 00 cmpb $0x0,0xc(%ebx) -80103440: 74 15 je 80103457 - asm volatile ("out %0,%1" : : "a" (data), "d" (port)); -80103442: b8 70 00 00 00 mov $0x70,%eax -80103447: ba 22 00 00 00 mov $0x22,%edx -8010344c: ee out %al,(%dx) - asm volatile ("in %1,%0" : "=a" (data) : "d" (port)); -8010344d: ba 23 00 00 00 mov $0x23,%edx -80103452: ec in (%dx),%al - // Bochs doesn't support IMCR, so this doesn't run on Bochs. - // But it would on real hardware. - outb(0x22, 0x70); // Select IMCR - outb(0x23, inb(0x23) | 1); // Mask external interrupts. -80103453: 83 c8 01 or $0x1,%eax - asm volatile ("out %0,%1" : : "a" (data), "d" (port)); -80103456: ee out %al,(%dx) - } -} -80103457: 8d 65 f4 lea -0xc(%ebp),%esp -8010345a: 5b pop %ebx -8010345b: 5e pop %esi -8010345c: 5f pop %edi -8010345d: 5d pop %ebp -8010345e: c3 ret -8010345f: 90 nop - switch (*p) { -80103460: 83 e9 03 sub $0x3,%ecx -80103463: 80 f9 01 cmp $0x1,%cl -80103466: 76 c2 jbe 8010342a -80103468: 31 f6 xor %esi,%esi -8010346a: eb ac jmp 80103418 -8010346c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - ioapicid = ioapic->apicno; -80103470: 0f b6 48 01 movzbl 0x1(%eax),%ecx - p += sizeof(struct mpioapic); -80103474: 83 c0 08 add $0x8,%eax - ioapicid = ioapic->apicno; -80103477: 88 0d a0 17 11 80 mov %cl,0x801117a0 - continue; -8010347d: eb 99 jmp 80103418 -8010347f: 90 nop - if (ncpu < NCPU) { -80103480: 8b 0d a4 17 11 80 mov 0x801117a4,%ecx -80103486: 83 f9 07 cmp $0x7,%ecx -80103489: 7f 19 jg 801034a4 - cpus[ncpu].apicid = proc->apicid; // apicid may differ from ncpu -8010348b: 69 f9 b0 00 00 00 imul $0xb0,%ecx,%edi -80103491: 0f b6 58 01 movzbl 0x1(%eax),%ebx - ncpu++; -80103495: 83 c1 01 add $0x1,%ecx -80103498: 89 0d a4 17 11 80 mov %ecx,0x801117a4 - cpus[ncpu].apicid = proc->apicid; // apicid may differ from ncpu -8010349e: 88 9f c0 17 11 80 mov %bl,-0x7feee840(%edi) - p += sizeof(struct mpproc); -801034a4: 83 c0 14 add $0x14,%eax - continue; -801034a7: e9 6c ff ff ff jmp 80103418 -801034ac: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - panic("Expect to run on an SMP"); -801034b0: 83 ec 0c sub $0xc,%esp -801034b3: 68 e2 78 10 80 push $0x801078e2 -801034b8: e8 d3 ce ff ff call 80100390 -801034bd: 8d 76 00 lea 0x0(%esi),%esi -void mpinit(void) { -801034c0: bb 00 00 0f 80 mov $0x800f0000,%ebx -801034c5: eb 13 jmp 801034da -801034c7: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801034ce: 66 90 xchg %ax,%ax - for (p = addr; p < e; p += sizeof(struct mp)) { -801034d0: 89 f3 mov %esi,%ebx -801034d2: 81 fe 00 00 10 80 cmp $0x80100000,%esi -801034d8: 74 d6 je 801034b0 - if (memcmp(p, "_MP_", 4) == 0 && sum(p, sizeof(struct mp)) == 0) { -801034da: 83 ec 04 sub $0x4,%esp -801034dd: 8d 73 10 lea 0x10(%ebx),%esi -801034e0: 6a 04 push $0x4 -801034e2: 68 d8 78 10 80 push $0x801078d8 -801034e7: 53 push %ebx -801034e8: e8 23 13 00 00 call 80104810 -801034ed: 83 c4 10 add $0x10,%esp -801034f0: 85 c0 test %eax,%eax -801034f2: 75 dc jne 801034d0 -801034f4: 89 da mov %ebx,%edx -801034f6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801034fd: 8d 76 00 lea 0x0(%esi),%esi - sum += addr[i]; -80103500: 0f b6 0a movzbl (%edx),%ecx - for (i = 0; i < len; i++) { -80103503: 83 c2 01 add $0x1,%edx - sum += addr[i]; -80103506: 01 c8 add %ecx,%eax - for (i = 0; i < len; i++) { -80103508: 39 d6 cmp %edx,%esi -8010350a: 75 f4 jne 80103500 - if (memcmp(p, "_MP_", 4) == 0 && sum(p, sizeof(struct mp)) == 0) { -8010350c: 84 c0 test %al,%al -8010350e: 75 c0 jne 801034d0 -80103510: e9 6b fe ff ff jmp 80103380 - panic("Didn't find a suitable machine"); -80103515: 83 ec 0c sub $0xc,%esp -80103518: 68 fc 78 10 80 push $0x801078fc -8010351d: e8 6e ce ff ff call 80100390 -80103522: 66 90 xchg %ax,%ax -80103524: 66 90 xchg %ax,%ax -80103526: 66 90 xchg %ax,%ax -80103528: 66 90 xchg %ax,%ax -8010352a: 66 90 xchg %ax,%ax -8010352c: 66 90 xchg %ax,%ax -8010352e: 66 90 xchg %ax,%ax - -80103530 : -80103530: b8 ff ff ff ff mov $0xffffffff,%eax -80103535: ba 21 00 00 00 mov $0x21,%edx -8010353a: ee out %al,(%dx) -8010353b: ba a1 00 00 00 mov $0xa1,%edx -80103540: ee out %al,(%dx) -// Don't use the 8259A interrupt controllers. Xv6 assumes SMP hardware. -void picinit(void) { - // mask all interrupts - outb(IO_PIC1 + 1, 0xFF); - outb(IO_PIC2 + 1, 0xFF); -} -80103541: c3 ret -80103542: 66 90 xchg %ax,%ax -80103544: 66 90 xchg %ax,%ax -80103546: 66 90 xchg %ax,%ax -80103548: 66 90 xchg %ax,%ax -8010354a: 66 90 xchg %ax,%ax -8010354c: 66 90 xchg %ax,%ax -8010354e: 66 90 xchg %ax,%ax - -80103550 : - uint nwrite; // number of bytes written - int readopen; // read fd is still open - int writeopen; // write fd is still open -}; - -void cleanuppipealloc(struct pipe *p, struct file **f0, struct file **f1) { -80103550: 55 push %ebp -80103551: 89 e5 mov %esp,%ebp -80103553: 56 push %esi -80103554: 8b 45 08 mov 0x8(%ebp),%eax -80103557: 8b 75 0c mov 0xc(%ebp),%esi -8010355a: 53 push %ebx -8010355b: 8b 5d 10 mov 0x10(%ebp),%ebx - if (p) { -8010355e: 85 c0 test %eax,%eax -80103560: 74 0c je 8010356e - kfree((char*)p); -80103562: 83 ec 0c sub $0xc,%esp -80103565: 50 push %eax -80103566: e8 75 f0 ff ff call 801025e0 -8010356b: 83 c4 10 add $0x10,%esp - } - if (*f0) { -8010356e: 8b 06 mov (%esi),%eax -80103570: 85 c0 test %eax,%eax -80103572: 74 0c je 80103580 - fileclose(*f0); -80103574: 83 ec 0c sub $0xc,%esp -80103577: 50 push %eax -80103578: e8 93 da ff ff call 80101010 -8010357d: 83 c4 10 add $0x10,%esp - } - if (*f1) { -80103580: 8b 03 mov (%ebx),%eax -80103582: 85 c0 test %eax,%eax -80103584: 74 12 je 80103598 - fileclose(*f1); -80103586: 89 45 08 mov %eax,0x8(%ebp) - } -} -80103589: 8d 65 f8 lea -0x8(%ebp),%esp -8010358c: 5b pop %ebx -8010358d: 5e pop %esi -8010358e: 5d pop %ebp - fileclose(*f1); -8010358f: e9 7c da ff ff jmp 80101010 -80103594: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -} -80103598: 8d 65 f8 lea -0x8(%ebp),%esp -8010359b: 5b pop %ebx -8010359c: 5e pop %esi -8010359d: 5d pop %ebp -8010359e: c3 ret -8010359f: 90 nop - -801035a0 : - -int pipealloc(struct file **f0, struct file **f1) { -801035a0: 55 push %ebp -801035a1: 89 e5 mov %esp,%ebp -801035a3: 57 push %edi -801035a4: 56 push %esi -801035a5: 53 push %ebx -801035a6: 83 ec 0c sub $0xc,%esp -801035a9: 8b 75 08 mov 0x8(%ebp),%esi -801035ac: 8b 7d 0c mov 0xc(%ebp),%edi - struct pipe *p; - - p = 0; - *f0 = *f1 = 0; -801035af: c7 07 00 00 00 00 movl $0x0,(%edi) -801035b5: c7 06 00 00 00 00 movl $0x0,(%esi) - if ((*f0 = filealloc()) == 0 || (*f1 = filealloc()) == 0) { -801035bb: e8 90 d9 ff ff call 80100f50 -801035c0: 89 06 mov %eax,(%esi) -801035c2: 85 c0 test %eax,%eax -801035c4: 0f 84 a5 00 00 00 je 8010366f -801035ca: e8 81 d9 ff ff call 80100f50 -801035cf: 89 07 mov %eax,(%edi) -801035d1: 85 c0 test %eax,%eax -801035d3: 0f 84 84 00 00 00 je 8010365d - cleanuppipealloc(p, f0, f1); - return -1; - } - if ((p = (struct pipe*)kalloc()) == 0) { -801035d9: e8 c2 f1 ff ff call 801027a0 -801035de: 89 c3 mov %eax,%ebx -801035e0: 85 c0 test %eax,%eax -801035e2: 0f 84 a0 00 00 00 je 80103688 - cleanuppipealloc(p, f0, f1); - return -1; - } - p->readopen = 1; -801035e8: c7 80 3c 02 00 00 01 movl $0x1,0x23c(%eax) -801035ef: 00 00 00 - p->writeopen = 1; - p->nwrite = 0; - p->nread = 0; - initlock(&p->lock, "pipe"); -801035f2: 83 ec 08 sub $0x8,%esp - p->writeopen = 1; -801035f5: c7 80 40 02 00 00 01 movl $0x1,0x240(%eax) -801035fc: 00 00 00 - p->nwrite = 0; -801035ff: c7 80 38 02 00 00 00 movl $0x0,0x238(%eax) -80103606: 00 00 00 - p->nread = 0; -80103609: c7 80 34 02 00 00 00 movl $0x0,0x234(%eax) -80103610: 00 00 00 - initlock(&p->lock, "pipe"); -80103613: 68 1b 79 10 80 push $0x8010791b -80103618: 50 push %eax -80103619: e8 12 0f 00 00 call 80104530 - (*f0)->type = FD_PIPE; -8010361e: 8b 06 mov (%esi),%eax - (*f0)->pipe = p; - (*f1)->type = FD_PIPE; - (*f1)->readable = 0; - (*f1)->writable = 1; - (*f1)->pipe = p; - return 0; -80103620: 83 c4 10 add $0x10,%esp - (*f0)->type = FD_PIPE; -80103623: c7 00 01 00 00 00 movl $0x1,(%eax) - (*f0)->readable = 1; -80103629: 8b 06 mov (%esi),%eax -8010362b: c6 40 08 01 movb $0x1,0x8(%eax) - (*f0)->writable = 0; -8010362f: 8b 06 mov (%esi),%eax -80103631: c6 40 09 00 movb $0x0,0x9(%eax) - (*f0)->pipe = p; -80103635: 8b 06 mov (%esi),%eax -80103637: 89 58 0c mov %ebx,0xc(%eax) - (*f1)->type = FD_PIPE; -8010363a: 8b 07 mov (%edi),%eax -8010363c: c7 00 01 00 00 00 movl $0x1,(%eax) - (*f1)->readable = 0; -80103642: 8b 07 mov (%edi),%eax -80103644: c6 40 08 00 movb $0x0,0x8(%eax) - (*f1)->writable = 1; -80103648: 8b 07 mov (%edi),%eax -8010364a: c6 40 09 01 movb $0x1,0x9(%eax) - (*f1)->pipe = p; -8010364e: 8b 07 mov (%edi),%eax -80103650: 89 58 0c mov %ebx,0xc(%eax) - return 0; -80103653: 31 c0 xor %eax,%eax -} -80103655: 8d 65 f4 lea -0xc(%ebp),%esp -80103658: 5b pop %ebx -80103659: 5e pop %esi -8010365a: 5f pop %edi -8010365b: 5d pop %ebp -8010365c: c3 ret - if (*f0) { -8010365d: 8b 06 mov (%esi),%eax -8010365f: 85 c0 test %eax,%eax -80103661: 74 1e je 80103681 - fileclose(*f0); -80103663: 83 ec 0c sub $0xc,%esp -80103666: 50 push %eax -80103667: e8 a4 d9 ff ff call 80101010 -8010366c: 83 c4 10 add $0x10,%esp - if (*f1) { -8010366f: 8b 07 mov (%edi),%eax -80103671: 85 c0 test %eax,%eax -80103673: 74 0c je 80103681 - fileclose(*f1); -80103675: 83 ec 0c sub $0xc,%esp -80103678: 50 push %eax -80103679: e8 92 d9 ff ff call 80101010 -8010367e: 83 c4 10 add $0x10,%esp - return -1; -80103681: b8 ff ff ff ff mov $0xffffffff,%eax -80103686: eb cd jmp 80103655 - if (*f0) { -80103688: 8b 06 mov (%esi),%eax -8010368a: 85 c0 test %eax,%eax -8010368c: 75 d5 jne 80103663 -8010368e: eb df jmp 8010366f - -80103690 : - -void pipeclose(struct pipe *p, int writable) { -80103690: 55 push %ebp -80103691: 89 e5 mov %esp,%ebp -80103693: 56 push %esi -80103694: 53 push %ebx -80103695: 8b 5d 08 mov 0x8(%ebp),%ebx -80103698: 8b 75 0c mov 0xc(%ebp),%esi - acquire(&p->lock); -8010369b: 83 ec 0c sub $0xc,%esp -8010369e: 53 push %ebx -8010369f: e8 5c 10 00 00 call 80104700 - if (writable) { -801036a4: 83 c4 10 add $0x10,%esp -801036a7: 85 f6 test %esi,%esi -801036a9: 74 65 je 80103710 - p->writeopen = 0; - wakeup(&p->nread); -801036ab: 83 ec 0c sub $0xc,%esp -801036ae: 8d 83 34 02 00 00 lea 0x234(%ebx),%eax - p->writeopen = 0; -801036b4: c7 83 40 02 00 00 00 movl $0x0,0x240(%ebx) -801036bb: 00 00 00 - wakeup(&p->nread); -801036be: 50 push %eax -801036bf: e8 9c 0b 00 00 call 80104260 -801036c4: 83 c4 10 add $0x10,%esp - } - else { - p->readopen = 0; - wakeup(&p->nwrite); - } - if (p->readopen == 0 && p->writeopen == 0) { -801036c7: 8b 93 3c 02 00 00 mov 0x23c(%ebx),%edx -801036cd: 85 d2 test %edx,%edx -801036cf: 75 0a jne 801036db -801036d1: 8b 83 40 02 00 00 mov 0x240(%ebx),%eax -801036d7: 85 c0 test %eax,%eax -801036d9: 74 15 je 801036f0 - release(&p->lock); - kfree((char*)p); - } - else { - release(&p->lock); -801036db: 89 5d 08 mov %ebx,0x8(%ebp) - } -} -801036de: 8d 65 f8 lea -0x8(%ebp),%esp -801036e1: 5b pop %ebx -801036e2: 5e pop %esi -801036e3: 5d pop %ebp - release(&p->lock); -801036e4: e9 b7 0f 00 00 jmp 801046a0 -801036e9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - release(&p->lock); -801036f0: 83 ec 0c sub $0xc,%esp -801036f3: 53 push %ebx -801036f4: e8 a7 0f 00 00 call 801046a0 - kfree((char*)p); -801036f9: 89 5d 08 mov %ebx,0x8(%ebp) -801036fc: 83 c4 10 add $0x10,%esp -} -801036ff: 8d 65 f8 lea -0x8(%ebp),%esp -80103702: 5b pop %ebx -80103703: 5e pop %esi -80103704: 5d pop %ebp - kfree((char*)p); -80103705: e9 d6 ee ff ff jmp 801025e0 -8010370a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - wakeup(&p->nwrite); -80103710: 83 ec 0c sub $0xc,%esp -80103713: 8d 83 38 02 00 00 lea 0x238(%ebx),%eax - p->readopen = 0; -80103719: c7 83 3c 02 00 00 00 movl $0x0,0x23c(%ebx) -80103720: 00 00 00 - wakeup(&p->nwrite); -80103723: 50 push %eax -80103724: e8 37 0b 00 00 call 80104260 -80103729: 83 c4 10 add $0x10,%esp -8010372c: eb 99 jmp 801036c7 -8010372e: 66 90 xchg %ax,%ax - -80103730 : - -int pipewrite(struct pipe *p, char *addr, int n) { -80103730: 55 push %ebp -80103731: 89 e5 mov %esp,%ebp -80103733: 57 push %edi -80103734: 56 push %esi -80103735: 53 push %ebx -80103736: 83 ec 28 sub $0x28,%esp -80103739: 8b 5d 08 mov 0x8(%ebp),%ebx - int i; - - acquire(&p->lock); -8010373c: 53 push %ebx -8010373d: e8 be 0f 00 00 call 80104700 - for (i = 0; i < n; i++) { -80103742: 8b 45 10 mov 0x10(%ebp),%eax -80103745: 83 c4 10 add $0x10,%esp -80103748: 85 c0 test %eax,%eax -8010374a: 0f 8e c0 00 00 00 jle 80103810 -80103750: 8b 45 0c mov 0xc(%ebp),%eax - while (p->nwrite == p->nread + PIPESIZE) { //DOC: pipewrite-full -80103753: 8b 8b 38 02 00 00 mov 0x238(%ebx),%ecx - if (p->readopen == 0 || myproc()->killed) { - release(&p->lock); - return -1; - } - wakeup(&p->nread); -80103759: 8d bb 34 02 00 00 lea 0x234(%ebx),%edi -8010375f: 89 45 e4 mov %eax,-0x1c(%ebp) -80103762: 03 45 10 add 0x10(%ebp),%eax -80103765: 89 45 e0 mov %eax,-0x20(%ebp) - while (p->nwrite == p->nread + PIPESIZE) { //DOC: pipewrite-full -80103768: 8b 83 34 02 00 00 mov 0x234(%ebx),%eax - sleep(&p->nwrite, &p->lock); //DOC: pipewrite-sleep -8010376e: 8d b3 38 02 00 00 lea 0x238(%ebx),%esi - while (p->nwrite == p->nread + PIPESIZE) { //DOC: pipewrite-full -80103774: 89 ca mov %ecx,%edx -80103776: 05 00 02 00 00 add $0x200,%eax -8010377b: 39 c1 cmp %eax,%ecx -8010377d: 74 3f je 801037be -8010377f: eb 67 jmp 801037e8 -80103781: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - if (p->readopen == 0 || myproc()->killed) { -80103788: e8 43 03 00 00 call 80103ad0 -8010378d: 8b 48 24 mov 0x24(%eax),%ecx -80103790: 85 c9 test %ecx,%ecx -80103792: 75 34 jne 801037c8 - wakeup(&p->nread); -80103794: 83 ec 0c sub $0xc,%esp -80103797: 57 push %edi -80103798: e8 c3 0a 00 00 call 80104260 - sleep(&p->nwrite, &p->lock); //DOC: pipewrite-sleep -8010379d: 58 pop %eax -8010379e: 5a pop %edx -8010379f: 53 push %ebx -801037a0: 56 push %esi -801037a1: e8 fa 09 00 00 call 801041a0 - while (p->nwrite == p->nread + PIPESIZE) { //DOC: pipewrite-full -801037a6: 8b 83 34 02 00 00 mov 0x234(%ebx),%eax -801037ac: 8b 93 38 02 00 00 mov 0x238(%ebx),%edx -801037b2: 83 c4 10 add $0x10,%esp -801037b5: 05 00 02 00 00 add $0x200,%eax -801037ba: 39 c2 cmp %eax,%edx -801037bc: 75 2a jne 801037e8 - if (p->readopen == 0 || myproc()->killed) { -801037be: 8b 83 3c 02 00 00 mov 0x23c(%ebx),%eax -801037c4: 85 c0 test %eax,%eax -801037c6: 75 c0 jne 80103788 - release(&p->lock); -801037c8: 83 ec 0c sub $0xc,%esp -801037cb: 53 push %ebx -801037cc: e8 cf 0e 00 00 call 801046a0 - return -1; -801037d1: 83 c4 10 add $0x10,%esp -801037d4: b8 ff ff ff ff mov $0xffffffff,%eax - p->data[p->nwrite++ % PIPESIZE] = addr[i]; - } - wakeup(&p->nread); //DOC: pipewrite-wakeup1 - release(&p->lock); - return n; -} -801037d9: 8d 65 f4 lea -0xc(%ebp),%esp -801037dc: 5b pop %ebx -801037dd: 5e pop %esi -801037de: 5f pop %edi -801037df: 5d pop %ebp -801037e0: c3 ret -801037e1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - p->data[p->nwrite++ % PIPESIZE] = addr[i]; -801037e8: 8b 75 e4 mov -0x1c(%ebp),%esi -801037eb: 8d 4a 01 lea 0x1(%edx),%ecx -801037ee: 81 e2 ff 01 00 00 and $0x1ff,%edx -801037f4: 89 8b 38 02 00 00 mov %ecx,0x238(%ebx) -801037fa: 0f b6 06 movzbl (%esi),%eax - for (i = 0; i < n; i++) { -801037fd: 83 c6 01 add $0x1,%esi -80103800: 89 75 e4 mov %esi,-0x1c(%ebp) - p->data[p->nwrite++ % PIPESIZE] = addr[i]; -80103803: 88 44 13 34 mov %al,0x34(%ebx,%edx,1) - for (i = 0; i < n; i++) { -80103807: 3b 75 e0 cmp -0x20(%ebp),%esi -8010380a: 0f 85 58 ff ff ff jne 80103768 - wakeup(&p->nread); //DOC: pipewrite-wakeup1 -80103810: 83 ec 0c sub $0xc,%esp -80103813: 8d 83 34 02 00 00 lea 0x234(%ebx),%eax -80103819: 50 push %eax -8010381a: e8 41 0a 00 00 call 80104260 - release(&p->lock); -8010381f: 89 1c 24 mov %ebx,(%esp) -80103822: e8 79 0e 00 00 call 801046a0 - return n; -80103827: 8b 45 10 mov 0x10(%ebp),%eax -8010382a: 83 c4 10 add $0x10,%esp -8010382d: eb aa jmp 801037d9 -8010382f: 90 nop - -80103830 : - -int piperead(struct pipe *p, char *addr, int n) { -80103830: 55 push %ebp -80103831: 89 e5 mov %esp,%ebp -80103833: 57 push %edi -80103834: 56 push %esi -80103835: 53 push %ebx -80103836: 83 ec 18 sub $0x18,%esp -80103839: 8b 75 08 mov 0x8(%ebp),%esi -8010383c: 8b 7d 0c mov 0xc(%ebp),%edi - int i; - - acquire(&p->lock); -8010383f: 56 push %esi -80103840: 8d 9e 34 02 00 00 lea 0x234(%esi),%ebx -80103846: e8 b5 0e 00 00 call 80104700 - while (p->nread == p->nwrite && p->writeopen) { //DOC: pipe-empty -8010384b: 8b 86 34 02 00 00 mov 0x234(%esi),%eax -80103851: 83 c4 10 add $0x10,%esp -80103854: 39 86 38 02 00 00 cmp %eax,0x238(%esi) -8010385a: 74 2f je 8010388b -8010385c: eb 37 jmp 80103895 -8010385e: 66 90 xchg %ax,%ax - if (myproc()->killed) { -80103860: e8 6b 02 00 00 call 80103ad0 -80103865: 8b 48 24 mov 0x24(%eax),%ecx -80103868: 85 c9 test %ecx,%ecx -8010386a: 0f 85 80 00 00 00 jne 801038f0 - release(&p->lock); - return -1; - } - sleep(&p->nread, &p->lock); //DOC: piperead-sleep -80103870: 83 ec 08 sub $0x8,%esp -80103873: 56 push %esi -80103874: 53 push %ebx -80103875: e8 26 09 00 00 call 801041a0 - while (p->nread == p->nwrite && p->writeopen) { //DOC: pipe-empty -8010387a: 8b 86 38 02 00 00 mov 0x238(%esi),%eax -80103880: 83 c4 10 add $0x10,%esp -80103883: 39 86 34 02 00 00 cmp %eax,0x234(%esi) -80103889: 75 0a jne 80103895 -8010388b: 8b 86 40 02 00 00 mov 0x240(%esi),%eax -80103891: 85 c0 test %eax,%eax -80103893: 75 cb jne 80103860 - } - for (i = 0; i < n; i++) { //DOC: piperead-copy -80103895: 8b 55 10 mov 0x10(%ebp),%edx -80103898: 31 db xor %ebx,%ebx -8010389a: 85 d2 test %edx,%edx -8010389c: 7f 20 jg 801038be -8010389e: eb 2c jmp 801038cc - if (p->nread == p->nwrite) { - break; - } - addr[i] = p->data[p->nread++ % PIPESIZE]; -801038a0: 8d 48 01 lea 0x1(%eax),%ecx -801038a3: 25 ff 01 00 00 and $0x1ff,%eax -801038a8: 89 8e 34 02 00 00 mov %ecx,0x234(%esi) -801038ae: 0f b6 44 06 34 movzbl 0x34(%esi,%eax,1),%eax -801038b3: 88 04 1f mov %al,(%edi,%ebx,1) - for (i = 0; i < n; i++) { //DOC: piperead-copy -801038b6: 83 c3 01 add $0x1,%ebx -801038b9: 39 5d 10 cmp %ebx,0x10(%ebp) -801038bc: 74 0e je 801038cc - if (p->nread == p->nwrite) { -801038be: 8b 86 34 02 00 00 mov 0x234(%esi),%eax -801038c4: 3b 86 38 02 00 00 cmp 0x238(%esi),%eax -801038ca: 75 d4 jne 801038a0 - } - wakeup(&p->nwrite); //DOC: piperead-wakeup -801038cc: 83 ec 0c sub $0xc,%esp -801038cf: 8d 86 38 02 00 00 lea 0x238(%esi),%eax -801038d5: 50 push %eax -801038d6: e8 85 09 00 00 call 80104260 - release(&p->lock); -801038db: 89 34 24 mov %esi,(%esp) -801038de: e8 bd 0d 00 00 call 801046a0 - return i; -801038e3: 83 c4 10 add $0x10,%esp -} -801038e6: 8d 65 f4 lea -0xc(%ebp),%esp -801038e9: 89 d8 mov %ebx,%eax -801038eb: 5b pop %ebx -801038ec: 5e pop %esi -801038ed: 5f pop %edi -801038ee: 5d pop %ebp -801038ef: c3 ret - release(&p->lock); -801038f0: 83 ec 0c sub $0xc,%esp - return -1; -801038f3: bb ff ff ff ff mov $0xffffffff,%ebx - release(&p->lock); -801038f8: 56 push %esi -801038f9: e8 a2 0d 00 00 call 801046a0 - return -1; -801038fe: 83 c4 10 add $0x10,%esp -} -80103901: 8d 65 f4 lea -0xc(%ebp),%esp -80103904: 89 d8 mov %ebx,%eax -80103906: 5b pop %ebx -80103907: 5e pop %esi -80103908: 5f pop %edi -80103909: 5d pop %ebp -8010390a: c3 ret -8010390b: 66 90 xchg %ax,%ax -8010390d: 66 90 xchg %ax,%ax -8010390f: 90 nop - -80103910 : - -// Look in the process table for an UNUSED proc. -// If found, change state to EMBRYO and initialize -// state required to run in the kernel. -// Otherwise return 0. -static struct proc* allocproc(void) { -80103910: 55 push %ebp -80103911: 89 e5 mov %esp,%ebp -80103913: 53 push %ebx - char *sp; - int found = 0; - - acquire(&ptable.lock); - - p = ptable.proc; -80103914: bb 74 1d 11 80 mov $0x80111d74,%ebx -static struct proc* allocproc(void) { -80103919: 83 ec 10 sub $0x10,%esp - acquire(&ptable.lock); -8010391c: 68 40 1d 11 80 push $0x80111d40 -80103921: e8 da 0d 00 00 call 80104700 -80103926: 83 c4 10 add $0x10,%esp - while (p < &ptable.proc[NPROC] && !found) { - if (p->state == UNUSED) { -80103929: 8b 43 0c mov 0xc(%ebx),%eax -8010392c: 85 c0 test %eax,%eax -8010392e: 74 28 je 80103958 - found = 1; - } - else { - p++; -80103930: 83 c3 7c add $0x7c,%ebx - while (p < &ptable.proc[NPROC] && !found) { -80103933: 81 fb 74 3c 11 80 cmp $0x80113c74,%ebx -80103939: 75 ee jne 80103929 - } - - } - if (!found) { - release(&ptable.lock); -8010393b: 83 ec 0c sub $0xc,%esp - return 0; -8010393e: 31 db xor %ebx,%ebx - release(&ptable.lock); -80103940: 68 40 1d 11 80 push $0x80111d40 -80103945: e8 56 0d 00 00 call 801046a0 - p->context = (struct context*)sp; - memset(p->context, 0, sizeof *p->context); - p->context->eip = (uint)forkret; - - return p; -} -8010394a: 89 d8 mov %ebx,%eax - return 0; -8010394c: 83 c4 10 add $0x10,%esp -} -8010394f: 8b 5d fc mov -0x4(%ebp),%ebx -80103952: c9 leave -80103953: c3 ret -80103954: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - p->pid = nextpid++; -80103958: a1 04 a0 10 80 mov 0x8010a004,%eax - release(&ptable.lock); -8010395d: 83 ec 0c sub $0xc,%esp - p->state = EMBRYO; -80103960: c7 43 0c 01 00 00 00 movl $0x1,0xc(%ebx) - p->pid = nextpid++; -80103967: 89 43 10 mov %eax,0x10(%ebx) -8010396a: 8d 50 01 lea 0x1(%eax),%edx - release(&ptable.lock); -8010396d: 68 40 1d 11 80 push $0x80111d40 - p->pid = nextpid++; -80103972: 89 15 04 a0 10 80 mov %edx,0x8010a004 - release(&ptable.lock); -80103978: e8 23 0d 00 00 call 801046a0 - if ((p->kstack = kalloc()) == 0) { -8010397d: e8 1e ee ff ff call 801027a0 -80103982: 83 c4 10 add $0x10,%esp -80103985: 89 43 08 mov %eax,0x8(%ebx) -80103988: 85 c0 test %eax,%eax -8010398a: 74 3c je 801039c8 - sp -= sizeof *p->tf; -8010398c: 8d 90 b4 0f 00 00 lea 0xfb4(%eax),%edx - memset(p->context, 0, sizeof *p->context); -80103992: 83 ec 04 sub $0x4,%esp - sp -= sizeof *p->context; -80103995: 05 9c 0f 00 00 add $0xf9c,%eax - sp -= sizeof *p->tf; -8010399a: 89 53 18 mov %edx,0x18(%ebx) - *(uint*)sp = (uint)trapret; -8010399d: c7 40 14 66 5a 10 80 movl $0x80105a66,0x14(%eax) - p->context = (struct context*)sp; -801039a4: 89 43 1c mov %eax,0x1c(%ebx) - memset(p->context, 0, sizeof *p->context); -801039a7: 6a 14 push $0x14 -801039a9: 6a 00 push $0x0 -801039ab: 50 push %eax -801039ac: e8 0f 0e 00 00 call 801047c0 - p->context->eip = (uint)forkret; -801039b1: 8b 43 1c mov 0x1c(%ebx),%eax - return p; -801039b4: 83 c4 10 add $0x10,%esp - p->context->eip = (uint)forkret; -801039b7: c7 40 10 e0 39 10 80 movl $0x801039e0,0x10(%eax) -} -801039be: 89 d8 mov %ebx,%eax -801039c0: 8b 5d fc mov -0x4(%ebp),%ebx -801039c3: c9 leave -801039c4: c3 ret -801039c5: 8d 76 00 lea 0x0(%esi),%esi - p->state = UNUSED; -801039c8: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx) - return 0; -801039cf: 31 db xor %ebx,%ebx -} -801039d1: 89 d8 mov %ebx,%eax -801039d3: 8b 5d fc mov -0x4(%ebp),%ebx -801039d6: c9 leave -801039d7: c3 ret -801039d8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801039df: 90 nop - -801039e0 : - release(&ptable.lock); -} - -// A fork child's very first scheduling by scheduler() -// will swtch here. "Return" to user space. -void forkret(void) { -801039e0: 55 push %ebp -801039e1: 89 e5 mov %esp,%ebp -801039e3: 83 ec 14 sub $0x14,%esp - static int first = 1; - // Still holding ptable.lock from scheduler. - release(&ptable.lock); -801039e6: 68 40 1d 11 80 push $0x80111d40 -801039eb: e8 b0 0c 00 00 call 801046a0 - - if (first) { -801039f0: a1 00 a0 10 80 mov 0x8010a000,%eax -801039f5: 83 c4 10 add $0x10,%esp -801039f8: 85 c0 test %eax,%eax -801039fa: 75 04 jne 80103a00 - iinit(ROOTDEV); - initlog(ROOTDEV); - } - - // Return to "caller", actually trapret (see allocproc). -} -801039fc: c9 leave -801039fd: c3 ret -801039fe: 66 90 xchg %ax,%ax - first = 0; -80103a00: c7 05 00 a0 10 80 00 movl $0x0,0x8010a000 -80103a07: 00 00 00 - iinit(ROOTDEV); -80103a0a: 83 ec 0c sub $0xc,%esp -80103a0d: 6a 01 push $0x1 -80103a0f: e8 6c dc ff ff call 80101680 - initlog(ROOTDEV); -80103a14: c7 04 24 01 00 00 00 movl $0x1,(%esp) -80103a1b: e8 c0 f3 ff ff call 80102de0 -} -80103a20: 83 c4 10 add $0x10,%esp -80103a23: c9 leave -80103a24: c3 ret -80103a25: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80103a2c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -80103a30 : -void pinit(void) { -80103a30: 55 push %ebp -80103a31: 89 e5 mov %esp,%ebp -80103a33: 83 ec 10 sub $0x10,%esp - initlock(&ptable.lock, "ptable"); -80103a36: 68 20 79 10 80 push $0x80107920 -80103a3b: 68 40 1d 11 80 push $0x80111d40 -80103a40: e8 eb 0a 00 00 call 80104530 -} -80103a45: 83 c4 10 add $0x10,%esp -80103a48: c9 leave -80103a49: c3 ret -80103a4a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -80103a50 : -struct cpu*mycpu(void) { -80103a50: 55 push %ebp -80103a51: 89 e5 mov %esp,%ebp -80103a53: 56 push %esi -80103a54: 53 push %ebx - asm volatile ("pushfl; popl %0" : "=r" (eflags)); -80103a55: 9c pushf -80103a56: 58 pop %eax - if (readeflags() & FL_IF) { -80103a57: f6 c4 02 test $0x2,%ah -80103a5a: 75 46 jne 80103aa2 - apicid = lapicid(); -80103a5c: e8 af ef ff ff call 80102a10 - for (i = 0; i < ncpu; ++i) { -80103a61: 8b 35 a4 17 11 80 mov 0x801117a4,%esi -80103a67: 85 f6 test %esi,%esi -80103a69: 7e 2a jle 80103a95 -80103a6b: 31 d2 xor %edx,%edx -80103a6d: eb 08 jmp 80103a77 -80103a6f: 90 nop -80103a70: 83 c2 01 add $0x1,%edx -80103a73: 39 f2 cmp %esi,%edx -80103a75: 74 1e je 80103a95 - if (cpus[i].apicid == apicid) { -80103a77: 69 ca b0 00 00 00 imul $0xb0,%edx,%ecx -80103a7d: 0f b6 99 c0 17 11 80 movzbl -0x7feee840(%ecx),%ebx -80103a84: 39 c3 cmp %eax,%ebx -80103a86: 75 e8 jne 80103a70 -} -80103a88: 8d 65 f8 lea -0x8(%ebp),%esp - return &cpus[i]; -80103a8b: 8d 81 c0 17 11 80 lea -0x7feee840(%ecx),%eax -} -80103a91: 5b pop %ebx -80103a92: 5e pop %esi -80103a93: 5d pop %ebp -80103a94: c3 ret - panic("unknown apicid\n"); -80103a95: 83 ec 0c sub $0xc,%esp -80103a98: 68 27 79 10 80 push $0x80107927 -80103a9d: e8 ee c8 ff ff call 80100390 - panic("mycpu called with interrupts enabled\n"); -80103aa2: 83 ec 0c sub $0xc,%esp -80103aa5: 68 04 7a 10 80 push $0x80107a04 -80103aaa: e8 e1 c8 ff ff call 80100390 -80103aaf: 90 nop - -80103ab0 : -int cpuid() { -80103ab0: 55 push %ebp -80103ab1: 89 e5 mov %esp,%ebp -80103ab3: 83 ec 08 sub $0x8,%esp - return mycpu() - cpus; -80103ab6: e8 95 ff ff ff call 80103a50 -} -80103abb: c9 leave - return mycpu() - cpus; -80103abc: 2d c0 17 11 80 sub $0x801117c0,%eax -80103ac1: c1 f8 04 sar $0x4,%eax -80103ac4: 69 c0 a3 8b 2e ba imul $0xba2e8ba3,%eax,%eax -} -80103aca: c3 ret -80103acb: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -80103acf: 90 nop - -80103ad0 : -struct proc*myproc(void) { -80103ad0: 55 push %ebp -80103ad1: 89 e5 mov %esp,%ebp -80103ad3: 53 push %ebx -80103ad4: 83 ec 04 sub $0x4,%esp - pushcli(); -80103ad7: e8 d4 0a 00 00 call 801045b0 - c = mycpu(); -80103adc: e8 6f ff ff ff call 80103a50 - p = c->proc; -80103ae1: 8b 98 ac 00 00 00 mov 0xac(%eax),%ebx - popcli(); -80103ae7: e8 14 0b 00 00 call 80104600 -} -80103aec: 89 d8 mov %ebx,%eax -80103aee: 8b 5d fc mov -0x4(%ebp),%ebx -80103af1: c9 leave -80103af2: c3 ret -80103af3: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80103afa: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -80103b00 : -void userinit(void) { -80103b00: 55 push %ebp -80103b01: 89 e5 mov %esp,%ebp -80103b03: 53 push %ebx -80103b04: 83 ec 04 sub $0x4,%esp - p = allocproc(); -80103b07: e8 04 fe ff ff call 80103910 -80103b0c: 89 c3 mov %eax,%ebx - initproc = p; -80103b0e: a3 74 3c 11 80 mov %eax,0x80113c74 - if ((p->pgdir = setupkvm()) == 0) { -80103b13: e8 48 35 00 00 call 80107060 -80103b18: 89 43 04 mov %eax,0x4(%ebx) -80103b1b: 85 c0 test %eax,%eax -80103b1d: 0f 84 bd 00 00 00 je 80103be0 - inituvm(p->pgdir, _binary_initcode_start, (int)_binary_initcode_size); -80103b23: 83 ec 04 sub $0x4,%esp -80103b26: 68 2c 00 00 00 push $0x2c -80103b2b: 68 60 a4 10 80 push $0x8010a460 -80103b30: 50 push %eax -80103b31: e8 da 31 00 00 call 80106d10 - memset(p->tf, 0, sizeof(*p->tf)); -80103b36: 83 c4 0c add $0xc,%esp - p->sz = PGSIZE; -80103b39: c7 03 00 10 00 00 movl $0x1000,(%ebx) - memset(p->tf, 0, sizeof(*p->tf)); -80103b3f: 6a 4c push $0x4c -80103b41: 6a 00 push $0x0 -80103b43: ff 73 18 push 0x18(%ebx) -80103b46: e8 75 0c 00 00 call 801047c0 - p->tf->cs = (SEG_UCODE << 3) | DPL_USER; -80103b4b: 8b 43 18 mov 0x18(%ebx),%eax -80103b4e: ba 1b 00 00 00 mov $0x1b,%edx - safestrcpy(p->name, "initcode", sizeof(p->name)); -80103b53: 83 c4 0c add $0xc,%esp - p->tf->ds = (SEG_UDATA << 3) | DPL_USER; -80103b56: b9 23 00 00 00 mov $0x23,%ecx - p->tf->cs = (SEG_UCODE << 3) | DPL_USER; -80103b5b: 66 89 50 3c mov %dx,0x3c(%eax) - p->tf->ds = (SEG_UDATA << 3) | DPL_USER; -80103b5f: 8b 43 18 mov 0x18(%ebx),%eax -80103b62: 66 89 48 2c mov %cx,0x2c(%eax) - p->tf->es = p->tf->ds; -80103b66: 8b 43 18 mov 0x18(%ebx),%eax -80103b69: 0f b7 50 2c movzwl 0x2c(%eax),%edx -80103b6d: 66 89 50 28 mov %dx,0x28(%eax) - p->tf->ss = p->tf->ds; -80103b71: 8b 43 18 mov 0x18(%ebx),%eax -80103b74: 0f b7 50 2c movzwl 0x2c(%eax),%edx -80103b78: 66 89 50 48 mov %dx,0x48(%eax) - p->tf->eflags = FL_IF; -80103b7c: 8b 43 18 mov 0x18(%ebx),%eax -80103b7f: c7 40 40 00 02 00 00 movl $0x200,0x40(%eax) - p->tf->esp = PGSIZE; -80103b86: 8b 43 18 mov 0x18(%ebx),%eax -80103b89: c7 40 44 00 10 00 00 movl $0x1000,0x44(%eax) - p->tf->eip = 0; // beginning of initcode.S -80103b90: 8b 43 18 mov 0x18(%ebx),%eax -80103b93: c7 40 38 00 00 00 00 movl $0x0,0x38(%eax) - safestrcpy(p->name, "initcode", sizeof(p->name)); -80103b9a: 8d 43 6c lea 0x6c(%ebx),%eax -80103b9d: 6a 10 push $0x10 -80103b9f: 68 50 79 10 80 push $0x80107950 -80103ba4: 50 push %eax -80103ba5: e8 d6 0d 00 00 call 80104980 - p->cwd = namei("/"); -80103baa: c7 04 24 59 79 10 80 movl $0x80107959,(%esp) -80103bb1: e8 0a e6 ff ff call 801021c0 -80103bb6: 89 43 68 mov %eax,0x68(%ebx) - acquire(&ptable.lock); -80103bb9: c7 04 24 40 1d 11 80 movl $0x80111d40,(%esp) -80103bc0: e8 3b 0b 00 00 call 80104700 - p->state = RUNNABLE; -80103bc5: c7 43 0c 03 00 00 00 movl $0x3,0xc(%ebx) - release(&ptable.lock); -80103bcc: c7 04 24 40 1d 11 80 movl $0x80111d40,(%esp) -80103bd3: e8 c8 0a 00 00 call 801046a0 -} -80103bd8: 8b 5d fc mov -0x4(%ebp),%ebx -80103bdb: 83 c4 10 add $0x10,%esp -80103bde: c9 leave -80103bdf: c3 ret - panic("userinit: out of memory?"); -80103be0: 83 ec 0c sub $0xc,%esp -80103be3: 68 37 79 10 80 push $0x80107937 -80103be8: e8 a3 c7 ff ff call 80100390 -80103bed: 8d 76 00 lea 0x0(%esi),%esi - -80103bf0 : -int growproc(int n) { -80103bf0: 55 push %ebp -80103bf1: 89 e5 mov %esp,%ebp -80103bf3: 56 push %esi -80103bf4: 53 push %ebx -80103bf5: 8b 75 08 mov 0x8(%ebp),%esi - pushcli(); -80103bf8: e8 b3 09 00 00 call 801045b0 - c = mycpu(); -80103bfd: e8 4e fe ff ff call 80103a50 - p = c->proc; -80103c02: 8b 98 ac 00 00 00 mov 0xac(%eax),%ebx - popcli(); -80103c08: e8 f3 09 00 00 call 80104600 - sz = curproc->sz; -80103c0d: 8b 03 mov (%ebx),%eax - if (n > 0) { -80103c0f: 85 f6 test %esi,%esi -80103c11: 7f 1d jg 80103c30 - else if (n < 0) { -80103c13: 75 3b jne 80103c50 - switchuvm(curproc); -80103c15: 83 ec 0c sub $0xc,%esp - curproc->sz = sz; -80103c18: 89 03 mov %eax,(%ebx) - switchuvm(curproc); -80103c1a: 53 push %ebx -80103c1b: e8 e0 2f 00 00 call 80106c00 - return 0; -80103c20: 83 c4 10 add $0x10,%esp -80103c23: 31 c0 xor %eax,%eax -} -80103c25: 8d 65 f8 lea -0x8(%ebp),%esp -80103c28: 5b pop %ebx -80103c29: 5e pop %esi -80103c2a: 5d pop %ebp -80103c2b: c3 ret -80103c2c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - if ((sz = allocuvm(curproc->pgdir, sz, sz + n)) == 0) { -80103c30: 83 ec 04 sub $0x4,%esp -80103c33: 01 c6 add %eax,%esi -80103c35: 56 push %esi -80103c36: 50 push %eax -80103c37: ff 73 04 push 0x4(%ebx) -80103c3a: e8 41 32 00 00 call 80106e80 -80103c3f: 83 c4 10 add $0x10,%esp -80103c42: 85 c0 test %eax,%eax -80103c44: 75 cf jne 80103c15 - return -1; -80103c46: b8 ff ff ff ff mov $0xffffffff,%eax -80103c4b: eb d8 jmp 80103c25 -80103c4d: 8d 76 00 lea 0x0(%esi),%esi - if ((sz = deallocuvm(curproc->pgdir, sz, sz + n)) == 0) { -80103c50: 83 ec 04 sub $0x4,%esp -80103c53: 01 c6 add %eax,%esi -80103c55: 56 push %esi -80103c56: 50 push %eax -80103c57: ff 73 04 push 0x4(%ebx) -80103c5a: e8 51 33 00 00 call 80106fb0 -80103c5f: 83 c4 10 add $0x10,%esp -80103c62: 85 c0 test %eax,%eax -80103c64: 75 af jne 80103c15 -80103c66: eb de jmp 80103c46 -80103c68: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80103c6f: 90 nop - -80103c70 : -int fork(void) { -80103c70: 55 push %ebp -80103c71: 89 e5 mov %esp,%ebp -80103c73: 57 push %edi -80103c74: 56 push %esi -80103c75: 53 push %ebx -80103c76: 83 ec 1c sub $0x1c,%esp - pushcli(); -80103c79: e8 32 09 00 00 call 801045b0 - c = mycpu(); -80103c7e: e8 cd fd ff ff call 80103a50 - p = c->proc; -80103c83: 8b 98 ac 00 00 00 mov 0xac(%eax),%ebx - popcli(); -80103c89: e8 72 09 00 00 call 80104600 - if ((np = allocproc()) == 0) { -80103c8e: e8 7d fc ff ff call 80103910 -80103c93: 89 45 e4 mov %eax,-0x1c(%ebp) -80103c96: 85 c0 test %eax,%eax -80103c98: 0f 84 b7 00 00 00 je 80103d55 - if ((np->pgdir = copyuvm(curproc->pgdir, curproc->sz)) == 0) { -80103c9e: 83 ec 08 sub $0x8,%esp -80103ca1: ff 33 push (%ebx) -80103ca3: 89 c7 mov %eax,%edi -80103ca5: ff 73 04 push 0x4(%ebx) -80103ca8: e8 a3 34 00 00 call 80107150 -80103cad: 83 c4 10 add $0x10,%esp -80103cb0: 89 47 04 mov %eax,0x4(%edi) -80103cb3: 85 c0 test %eax,%eax -80103cb5: 0f 84 a1 00 00 00 je 80103d5c - np->sz = curproc->sz; -80103cbb: 8b 03 mov (%ebx),%eax -80103cbd: 8b 4d e4 mov -0x1c(%ebp),%ecx -80103cc0: 89 01 mov %eax,(%ecx) - *np->tf = *curproc->tf; -80103cc2: 8b 79 18 mov 0x18(%ecx),%edi - np->parent = curproc; -80103cc5: 89 c8 mov %ecx,%eax -80103cc7: 89 59 14 mov %ebx,0x14(%ecx) - *np->tf = *curproc->tf; -80103cca: b9 13 00 00 00 mov $0x13,%ecx -80103ccf: 8b 73 18 mov 0x18(%ebx),%esi -80103cd2: f3 a5 rep movsl %ds:(%esi),%es:(%edi) - for (i = 0; i < NOFILE; i++) { -80103cd4: 31 f6 xor %esi,%esi - np->tf->eax = 0; -80103cd6: 8b 40 18 mov 0x18(%eax),%eax -80103cd9: c7 40 1c 00 00 00 00 movl $0x0,0x1c(%eax) - if (curproc->ofile[i]) { -80103ce0: 8b 44 b3 28 mov 0x28(%ebx,%esi,4),%eax -80103ce4: 85 c0 test %eax,%eax -80103ce6: 74 13 je 80103cfb - np->ofile[i] = filedup(curproc->ofile[i]); -80103ce8: 83 ec 0c sub $0xc,%esp -80103ceb: 50 push %eax -80103cec: e8 cf d2 ff ff call 80100fc0 -80103cf1: 8b 55 e4 mov -0x1c(%ebp),%edx -80103cf4: 83 c4 10 add $0x10,%esp -80103cf7: 89 44 b2 28 mov %eax,0x28(%edx,%esi,4) - for (i = 0; i < NOFILE; i++) { -80103cfb: 83 c6 01 add $0x1,%esi -80103cfe: 83 fe 10 cmp $0x10,%esi -80103d01: 75 dd jne 80103ce0 - np->cwd = idup(curproc->cwd); -80103d03: 83 ec 0c sub $0xc,%esp -80103d06: ff 73 68 push 0x68(%ebx) - safestrcpy(np->name, curproc->name, sizeof(curproc->name)); -80103d09: 83 c3 6c add $0x6c,%ebx - np->cwd = idup(curproc->cwd); -80103d0c: e8 5f db ff ff call 80101870 -80103d11: 8b 7d e4 mov -0x1c(%ebp),%edi - safestrcpy(np->name, curproc->name, sizeof(curproc->name)); -80103d14: 83 c4 0c add $0xc,%esp - np->cwd = idup(curproc->cwd); -80103d17: 89 47 68 mov %eax,0x68(%edi) - safestrcpy(np->name, curproc->name, sizeof(curproc->name)); -80103d1a: 8d 47 6c lea 0x6c(%edi),%eax -80103d1d: 6a 10 push $0x10 -80103d1f: 53 push %ebx -80103d20: 50 push %eax -80103d21: e8 5a 0c 00 00 call 80104980 - pid = np->pid; -80103d26: 8b 5f 10 mov 0x10(%edi),%ebx - acquire(&ptable.lock); -80103d29: c7 04 24 40 1d 11 80 movl $0x80111d40,(%esp) -80103d30: e8 cb 09 00 00 call 80104700 - np->state = RUNNABLE; -80103d35: c7 47 0c 03 00 00 00 movl $0x3,0xc(%edi) - release(&ptable.lock); -80103d3c: c7 04 24 40 1d 11 80 movl $0x80111d40,(%esp) -80103d43: e8 58 09 00 00 call 801046a0 - return pid; -80103d48: 83 c4 10 add $0x10,%esp -} -80103d4b: 8d 65 f4 lea -0xc(%ebp),%esp -80103d4e: 89 d8 mov %ebx,%eax -80103d50: 5b pop %ebx -80103d51: 5e pop %esi -80103d52: 5f pop %edi -80103d53: 5d pop %ebp -80103d54: c3 ret - return -1; -80103d55: bb ff ff ff ff mov $0xffffffff,%ebx -80103d5a: eb ef jmp 80103d4b - kfree(np->kstack); -80103d5c: 8b 5d e4 mov -0x1c(%ebp),%ebx -80103d5f: 83 ec 0c sub $0xc,%esp -80103d62: ff 73 08 push 0x8(%ebx) -80103d65: e8 76 e8 ff ff call 801025e0 - np->kstack = 0; -80103d6a: c7 43 08 00 00 00 00 movl $0x0,0x8(%ebx) - return -1; -80103d71: 83 c4 10 add $0x10,%esp - np->state = UNUSED; -80103d74: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx) - return -1; -80103d7b: bb ff ff ff ff mov $0xffffffff,%ebx -80103d80: eb c9 jmp 80103d4b -80103d82: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80103d89: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -80103d90 : -void scheduler(void) { -80103d90: 55 push %ebp -80103d91: 89 e5 mov %esp,%ebp -80103d93: 57 push %edi -80103d94: 56 push %esi -80103d95: 53 push %ebx -80103d96: 83 ec 0c sub $0xc,%esp - struct cpu *c = mycpu(); -80103d99: e8 b2 fc ff ff call 80103a50 - c->proc = 0; -80103d9e: c7 80 ac 00 00 00 00 movl $0x0,0xac(%eax) -80103da5: 00 00 00 - struct cpu *c = mycpu(); -80103da8: 89 c6 mov %eax,%esi - c->proc = 0; -80103daa: 8d 78 04 lea 0x4(%eax),%edi -80103dad: 8d 76 00 lea 0x0(%esi),%esi - asm volatile ("sti"); -80103db0: fb sti - acquire(&ptable.lock); -80103db1: 83 ec 0c sub $0xc,%esp - for (p = ptable.proc; p < &ptable.proc[NPROC]; p++) { -80103db4: bb 74 1d 11 80 mov $0x80111d74,%ebx - acquire(&ptable.lock); -80103db9: 68 40 1d 11 80 push $0x80111d40 -80103dbe: e8 3d 09 00 00 call 80104700 -80103dc3: 83 c4 10 add $0x10,%esp -80103dc6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80103dcd: 8d 76 00 lea 0x0(%esi),%esi - if (p->state != RUNNABLE) { -80103dd0: 83 7b 0c 03 cmpl $0x3,0xc(%ebx) -80103dd4: 75 33 jne 80103e09 - switchuvm(p); -80103dd6: 83 ec 0c sub $0xc,%esp - c->proc = p; -80103dd9: 89 9e ac 00 00 00 mov %ebx,0xac(%esi) - switchuvm(p); -80103ddf: 53 push %ebx -80103de0: e8 1b 2e 00 00 call 80106c00 - swtch(&(c->scheduler), p->context); -80103de5: 58 pop %eax -80103de6: 5a pop %edx -80103de7: ff 73 1c push 0x1c(%ebx) -80103dea: 57 push %edi - p->state = RUNNING; -80103deb: c7 43 0c 04 00 00 00 movl $0x4,0xc(%ebx) - swtch(&(c->scheduler), p->context); -80103df2: e8 e4 0b 00 00 call 801049db - switchkvm(); -80103df7: e8 f4 2d 00 00 call 80106bf0 - c->proc = 0; -80103dfc: 83 c4 10 add $0x10,%esp -80103dff: c7 86 ac 00 00 00 00 movl $0x0,0xac(%esi) -80103e06: 00 00 00 - for (p = ptable.proc; p < &ptable.proc[NPROC]; p++) { -80103e09: 83 c3 7c add $0x7c,%ebx -80103e0c: 81 fb 74 3c 11 80 cmp $0x80113c74,%ebx -80103e12: 75 bc jne 80103dd0 - release(&ptable.lock); -80103e14: 83 ec 0c sub $0xc,%esp -80103e17: 68 40 1d 11 80 push $0x80111d40 -80103e1c: e8 7f 08 00 00 call 801046a0 - sti(); -80103e21: 83 c4 10 add $0x10,%esp -80103e24: eb 8a jmp 80103db0 -80103e26: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80103e2d: 8d 76 00 lea 0x0(%esi),%esi - -80103e30 : -void sched(void) { -80103e30: 55 push %ebp -80103e31: 89 e5 mov %esp,%ebp -80103e33: 56 push %esi -80103e34: 53 push %ebx - pushcli(); -80103e35: e8 76 07 00 00 call 801045b0 - c = mycpu(); -80103e3a: e8 11 fc ff ff call 80103a50 - p = c->proc; -80103e3f: 8b 98 ac 00 00 00 mov 0xac(%eax),%ebx - popcli(); -80103e45: e8 b6 07 00 00 call 80104600 - if (!holding(&ptable.lock)) { -80103e4a: 83 ec 0c sub $0xc,%esp -80103e4d: 68 40 1d 11 80 push $0x80111d40 -80103e52: e8 09 08 00 00 call 80104660 -80103e57: 83 c4 10 add $0x10,%esp -80103e5a: 85 c0 test %eax,%eax -80103e5c: 74 4f je 80103ead - if (mycpu()->ncli != 1) { -80103e5e: e8 ed fb ff ff call 80103a50 -80103e63: 83 b8 a4 00 00 00 01 cmpl $0x1,0xa4(%eax) -80103e6a: 75 68 jne 80103ed4 - if (p->state == RUNNING) { -80103e6c: 83 7b 0c 04 cmpl $0x4,0xc(%ebx) -80103e70: 74 55 je 80103ec7 - asm volatile ("pushfl; popl %0" : "=r" (eflags)); -80103e72: 9c pushf -80103e73: 58 pop %eax - if (readeflags() & FL_IF) { -80103e74: f6 c4 02 test $0x2,%ah -80103e77: 75 41 jne 80103eba - intena = mycpu()->intena; -80103e79: e8 d2 fb ff ff call 80103a50 - swtch(&p->context, mycpu()->scheduler); -80103e7e: 83 c3 1c add $0x1c,%ebx - intena = mycpu()->intena; -80103e81: 8b b0 a8 00 00 00 mov 0xa8(%eax),%esi - swtch(&p->context, mycpu()->scheduler); -80103e87: e8 c4 fb ff ff call 80103a50 -80103e8c: 83 ec 08 sub $0x8,%esp -80103e8f: ff 70 04 push 0x4(%eax) -80103e92: 53 push %ebx -80103e93: e8 43 0b 00 00 call 801049db - mycpu()->intena = intena; -80103e98: e8 b3 fb ff ff call 80103a50 -} -80103e9d: 83 c4 10 add $0x10,%esp - mycpu()->intena = intena; -80103ea0: 89 b0 a8 00 00 00 mov %esi,0xa8(%eax) -} -80103ea6: 8d 65 f8 lea -0x8(%ebp),%esp -80103ea9: 5b pop %ebx -80103eaa: 5e pop %esi -80103eab: 5d pop %ebp -80103eac: c3 ret - panic("sched ptable.lock"); -80103ead: 83 ec 0c sub $0xc,%esp -80103eb0: 68 5b 79 10 80 push $0x8010795b -80103eb5: e8 d6 c4 ff ff call 80100390 - panic("sched interruptible"); -80103eba: 83 ec 0c sub $0xc,%esp -80103ebd: 68 87 79 10 80 push $0x80107987 -80103ec2: e8 c9 c4 ff ff call 80100390 - panic("sched running"); -80103ec7: 83 ec 0c sub $0xc,%esp -80103eca: 68 79 79 10 80 push $0x80107979 -80103ecf: e8 bc c4 ff ff call 80100390 - panic("sched locks"); -80103ed4: 83 ec 0c sub $0xc,%esp -80103ed7: 68 6d 79 10 80 push $0x8010796d -80103edc: e8 af c4 ff ff call 80100390 -80103ee1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80103ee8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80103eef: 90 nop - -80103ef0 : -void exit(void) { -80103ef0: 55 push %ebp -80103ef1: 89 e5 mov %esp,%ebp -80103ef3: 57 push %edi -80103ef4: 56 push %esi -80103ef5: 53 push %ebx -80103ef6: 83 ec 0c sub $0xc,%esp - struct proc *curproc = myproc(); -80103ef9: e8 d2 fb ff ff call 80103ad0 - if (curproc == initproc) { -80103efe: 39 05 74 3c 11 80 cmp %eax,0x80113c74 -80103f04: 0f 84 fd 00 00 00 je 80104007 -80103f0a: 89 c3 mov %eax,%ebx -80103f0c: 8d 70 28 lea 0x28(%eax),%esi -80103f0f: 8d 78 68 lea 0x68(%eax),%edi -80103f12: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - if (curproc->ofile[fd]) { -80103f18: 8b 06 mov (%esi),%eax -80103f1a: 85 c0 test %eax,%eax -80103f1c: 74 12 je 80103f30 - fileclose(curproc->ofile[fd]); -80103f1e: 83 ec 0c sub $0xc,%esp -80103f21: 50 push %eax -80103f22: e8 e9 d0 ff ff call 80101010 - curproc->ofile[fd] = 0; -80103f27: c7 06 00 00 00 00 movl $0x0,(%esi) -80103f2d: 83 c4 10 add $0x10,%esp - for (fd = 0; fd < NOFILE; fd++) { -80103f30: 83 c6 04 add $0x4,%esi -80103f33: 39 f7 cmp %esi,%edi -80103f35: 75 e1 jne 80103f18 - begin_op(); -80103f37: e8 44 ef ff ff call 80102e80 - iput(curproc->cwd); -80103f3c: 83 ec 0c sub $0xc,%esp -80103f3f: ff 73 68 push 0x68(%ebx) -80103f42: e8 89 da ff ff call 801019d0 - end_op(); -80103f47: e8 a4 ef ff ff call 80102ef0 - curproc->cwd = 0; -80103f4c: c7 43 68 00 00 00 00 movl $0x0,0x68(%ebx) - acquire(&ptable.lock); -80103f53: c7 04 24 40 1d 11 80 movl $0x80111d40,(%esp) -80103f5a: e8 a1 07 00 00 call 80104700 - wakeup1(curproc->parent); -80103f5f: 8b 53 14 mov 0x14(%ebx),%edx -80103f62: 83 c4 10 add $0x10,%esp -// Wake up all processes sleeping on chan. -// The ptable lock must be held. -static void wakeup1(void *chan) { - struct proc *p; - - for (p = ptable.proc; p < &ptable.proc[NPROC]; p++) { -80103f65: b8 74 1d 11 80 mov $0x80111d74,%eax -80103f6a: eb 0e jmp 80103f7a -80103f6c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -80103f70: 83 c0 7c add $0x7c,%eax -80103f73: 3d 74 3c 11 80 cmp $0x80113c74,%eax -80103f78: 74 1c je 80103f96 - if (p->state == SLEEPING && p->chan == chan) { -80103f7a: 83 78 0c 02 cmpl $0x2,0xc(%eax) -80103f7e: 75 f0 jne 80103f70 -80103f80: 3b 50 20 cmp 0x20(%eax),%edx -80103f83: 75 eb jne 80103f70 - p->state = RUNNABLE; -80103f85: c7 40 0c 03 00 00 00 movl $0x3,0xc(%eax) - for (p = ptable.proc; p < &ptable.proc[NPROC]; p++) { -80103f8c: 83 c0 7c add $0x7c,%eax -80103f8f: 3d 74 3c 11 80 cmp $0x80113c74,%eax -80103f94: 75 e4 jne 80103f7a - p->parent = initproc; -80103f96: 8b 0d 74 3c 11 80 mov 0x80113c74,%ecx - for (p = ptable.proc; p < &ptable.proc[NPROC]; p++) { -80103f9c: ba 74 1d 11 80 mov $0x80111d74,%edx -80103fa1: eb 10 jmp 80103fb3 -80103fa3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -80103fa7: 90 nop -80103fa8: 83 c2 7c add $0x7c,%edx -80103fab: 81 fa 74 3c 11 80 cmp $0x80113c74,%edx -80103fb1: 74 3b je 80103fee - if (p->parent == curproc) { -80103fb3: 39 5a 14 cmp %ebx,0x14(%edx) -80103fb6: 75 f0 jne 80103fa8 - if (p->state == ZOMBIE) { -80103fb8: 83 7a 0c 05 cmpl $0x5,0xc(%edx) - p->parent = initproc; -80103fbc: 89 4a 14 mov %ecx,0x14(%edx) - if (p->state == ZOMBIE) { -80103fbf: 75 e7 jne 80103fa8 - for (p = ptable.proc; p < &ptable.proc[NPROC]; p++) { -80103fc1: b8 74 1d 11 80 mov $0x80111d74,%eax -80103fc6: eb 12 jmp 80103fda -80103fc8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80103fcf: 90 nop -80103fd0: 83 c0 7c add $0x7c,%eax -80103fd3: 3d 74 3c 11 80 cmp $0x80113c74,%eax -80103fd8: 74 ce je 80103fa8 - if (p->state == SLEEPING && p->chan == chan) { -80103fda: 83 78 0c 02 cmpl $0x2,0xc(%eax) -80103fde: 75 f0 jne 80103fd0 -80103fe0: 3b 48 20 cmp 0x20(%eax),%ecx -80103fe3: 75 eb jne 80103fd0 - p->state = RUNNABLE; -80103fe5: c7 40 0c 03 00 00 00 movl $0x3,0xc(%eax) -80103fec: eb e2 jmp 80103fd0 - curproc->state = ZOMBIE; -80103fee: c7 43 0c 05 00 00 00 movl $0x5,0xc(%ebx) - sched(); -80103ff5: e8 36 fe ff ff call 80103e30 - panic("zombie exit"); -80103ffa: 83 ec 0c sub $0xc,%esp -80103ffd: 68 a8 79 10 80 push $0x801079a8 -80104002: e8 89 c3 ff ff call 80100390 - panic("init exiting"); -80104007: 83 ec 0c sub $0xc,%esp -8010400a: 68 9b 79 10 80 push $0x8010799b -8010400f: e8 7c c3 ff ff call 80100390 -80104014: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010401b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -8010401f: 90 nop - -80104020 : -int wait(void) { -80104020: 55 push %ebp -80104021: 89 e5 mov %esp,%ebp -80104023: 56 push %esi -80104024: 53 push %ebx - pushcli(); -80104025: e8 86 05 00 00 call 801045b0 - c = mycpu(); -8010402a: e8 21 fa ff ff call 80103a50 - p = c->proc; -8010402f: 8b b0 ac 00 00 00 mov 0xac(%eax),%esi - popcli(); -80104035: e8 c6 05 00 00 call 80104600 - acquire(&ptable.lock); -8010403a: 83 ec 0c sub $0xc,%esp -8010403d: 68 40 1d 11 80 push $0x80111d40 -80104042: e8 b9 06 00 00 call 80104700 -80104047: 83 c4 10 add $0x10,%esp - havekids = 0; -8010404a: 31 c0 xor %eax,%eax - for (p = ptable.proc; p < &ptable.proc[NPROC]; p++) { -8010404c: bb 74 1d 11 80 mov $0x80111d74,%ebx -80104051: eb 10 jmp 80104063 -80104053: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -80104057: 90 nop -80104058: 83 c3 7c add $0x7c,%ebx -8010405b: 81 fb 74 3c 11 80 cmp $0x80113c74,%ebx -80104061: 74 1b je 8010407e - if (p->parent != curproc) { -80104063: 39 73 14 cmp %esi,0x14(%ebx) -80104066: 75 f0 jne 80104058 - if (p->state == ZOMBIE) { -80104068: 83 7b 0c 05 cmpl $0x5,0xc(%ebx) -8010406c: 74 62 je 801040d0 - for (p = ptable.proc; p < &ptable.proc[NPROC]; p++) { -8010406e: 83 c3 7c add $0x7c,%ebx - havekids = 1; -80104071: b8 01 00 00 00 mov $0x1,%eax - for (p = ptable.proc; p < &ptable.proc[NPROC]; p++) { -80104076: 81 fb 74 3c 11 80 cmp $0x80113c74,%ebx -8010407c: 75 e5 jne 80104063 - if (!havekids || curproc->killed) { -8010407e: 85 c0 test %eax,%eax -80104080: 0f 84 a0 00 00 00 je 80104126 -80104086: 8b 46 24 mov 0x24(%esi),%eax -80104089: 85 c0 test %eax,%eax -8010408b: 0f 85 95 00 00 00 jne 80104126 - pushcli(); -80104091: e8 1a 05 00 00 call 801045b0 - c = mycpu(); -80104096: e8 b5 f9 ff ff call 80103a50 - p = c->proc; -8010409b: 8b 98 ac 00 00 00 mov 0xac(%eax),%ebx - popcli(); -801040a1: e8 5a 05 00 00 call 80104600 - if (p == 0) { -801040a6: 85 db test %ebx,%ebx -801040a8: 0f 84 8f 00 00 00 je 8010413d - p->chan = chan; -801040ae: 89 73 20 mov %esi,0x20(%ebx) - p->state = SLEEPING; -801040b1: c7 43 0c 02 00 00 00 movl $0x2,0xc(%ebx) - sched(); -801040b8: e8 73 fd ff ff call 80103e30 - p->chan = 0; -801040bd: c7 43 20 00 00 00 00 movl $0x0,0x20(%ebx) -} -801040c4: eb 84 jmp 8010404a -801040c6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801040cd: 8d 76 00 lea 0x0(%esi),%esi - kfree(p->kstack); -801040d0: 83 ec 0c sub $0xc,%esp - pid = p->pid; -801040d3: 8b 73 10 mov 0x10(%ebx),%esi - kfree(p->kstack); -801040d6: ff 73 08 push 0x8(%ebx) -801040d9: e8 02 e5 ff ff call 801025e0 - p->kstack = 0; -801040de: c7 43 08 00 00 00 00 movl $0x0,0x8(%ebx) - freevm(p->pgdir); -801040e5: 5a pop %edx -801040e6: ff 73 04 push 0x4(%ebx) -801040e9: e8 f2 2e 00 00 call 80106fe0 - p->pid = 0; -801040ee: c7 43 10 00 00 00 00 movl $0x0,0x10(%ebx) - p->parent = 0; -801040f5: c7 43 14 00 00 00 00 movl $0x0,0x14(%ebx) - p->name[0] = 0; -801040fc: c6 43 6c 00 movb $0x0,0x6c(%ebx) - p->killed = 0; -80104100: c7 43 24 00 00 00 00 movl $0x0,0x24(%ebx) - p->state = UNUSED; -80104107: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx) - release(&ptable.lock); -8010410e: c7 04 24 40 1d 11 80 movl $0x80111d40,(%esp) -80104115: e8 86 05 00 00 call 801046a0 - return pid; -8010411a: 83 c4 10 add $0x10,%esp -} -8010411d: 8d 65 f8 lea -0x8(%ebp),%esp -80104120: 89 f0 mov %esi,%eax -80104122: 5b pop %ebx -80104123: 5e pop %esi -80104124: 5d pop %ebp -80104125: c3 ret - release(&ptable.lock); -80104126: 83 ec 0c sub $0xc,%esp - return -1; -80104129: be ff ff ff ff mov $0xffffffff,%esi - release(&ptable.lock); -8010412e: 68 40 1d 11 80 push $0x80111d40 -80104133: e8 68 05 00 00 call 801046a0 - return -1; -80104138: 83 c4 10 add $0x10,%esp -8010413b: eb e0 jmp 8010411d - panic("sleep"); -8010413d: 83 ec 0c sub $0xc,%esp -80104140: 68 b4 79 10 80 push $0x801079b4 -80104145: e8 46 c2 ff ff call 80100390 -8010414a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -80104150 : -void yield(void) { -80104150: 55 push %ebp -80104151: 89 e5 mov %esp,%ebp -80104153: 53 push %ebx -80104154: 83 ec 10 sub $0x10,%esp - acquire(&ptable.lock); //DOC: yieldlock -80104157: 68 40 1d 11 80 push $0x80111d40 -8010415c: e8 9f 05 00 00 call 80104700 - pushcli(); -80104161: e8 4a 04 00 00 call 801045b0 - c = mycpu(); -80104166: e8 e5 f8 ff ff call 80103a50 - p = c->proc; -8010416b: 8b 98 ac 00 00 00 mov 0xac(%eax),%ebx - popcli(); -80104171: e8 8a 04 00 00 call 80104600 - myproc()->state = RUNNABLE; -80104176: c7 43 0c 03 00 00 00 movl $0x3,0xc(%ebx) - sched(); -8010417d: e8 ae fc ff ff call 80103e30 - release(&ptable.lock); -80104182: c7 04 24 40 1d 11 80 movl $0x80111d40,(%esp) -80104189: e8 12 05 00 00 call 801046a0 -} -8010418e: 8b 5d fc mov -0x4(%ebp),%ebx -80104191: 83 c4 10 add $0x10,%esp -80104194: c9 leave -80104195: c3 ret -80104196: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010419d: 8d 76 00 lea 0x0(%esi),%esi - -801041a0 : -void sleep(void *chan, struct spinlock *lk) { -801041a0: 55 push %ebp -801041a1: 89 e5 mov %esp,%ebp -801041a3: 57 push %edi -801041a4: 56 push %esi -801041a5: 53 push %ebx -801041a6: 83 ec 0c sub $0xc,%esp -801041a9: 8b 7d 08 mov 0x8(%ebp),%edi -801041ac: 8b 75 0c mov 0xc(%ebp),%esi - pushcli(); -801041af: e8 fc 03 00 00 call 801045b0 - c = mycpu(); -801041b4: e8 97 f8 ff ff call 80103a50 - p = c->proc; -801041b9: 8b 98 ac 00 00 00 mov 0xac(%eax),%ebx - popcli(); -801041bf: e8 3c 04 00 00 call 80104600 - if (p == 0) { -801041c4: 85 db test %ebx,%ebx -801041c6: 0f 84 87 00 00 00 je 80104253 - if (lk == 0) { -801041cc: 85 f6 test %esi,%esi -801041ce: 74 76 je 80104246 - if (lk != &ptable.lock) { //DOC: sleeplock0 -801041d0: 81 fe 40 1d 11 80 cmp $0x80111d40,%esi -801041d6: 74 50 je 80104228 - acquire(&ptable.lock); //DOC: sleeplock1 -801041d8: 83 ec 0c sub $0xc,%esp -801041db: 68 40 1d 11 80 push $0x80111d40 -801041e0: e8 1b 05 00 00 call 80104700 - release(lk); -801041e5: 89 34 24 mov %esi,(%esp) -801041e8: e8 b3 04 00 00 call 801046a0 - p->chan = chan; -801041ed: 89 7b 20 mov %edi,0x20(%ebx) - p->state = SLEEPING; -801041f0: c7 43 0c 02 00 00 00 movl $0x2,0xc(%ebx) - sched(); -801041f7: e8 34 fc ff ff call 80103e30 - p->chan = 0; -801041fc: c7 43 20 00 00 00 00 movl $0x0,0x20(%ebx) - release(&ptable.lock); -80104203: c7 04 24 40 1d 11 80 movl $0x80111d40,(%esp) -8010420a: e8 91 04 00 00 call 801046a0 - acquire(lk); -8010420f: 89 75 08 mov %esi,0x8(%ebp) -80104212: 83 c4 10 add $0x10,%esp -} -80104215: 8d 65 f4 lea -0xc(%ebp),%esp -80104218: 5b pop %ebx -80104219: 5e pop %esi -8010421a: 5f pop %edi -8010421b: 5d pop %ebp - acquire(lk); -8010421c: e9 df 04 00 00 jmp 80104700 -80104221: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - p->chan = chan; -80104228: 89 7b 20 mov %edi,0x20(%ebx) - p->state = SLEEPING; -8010422b: c7 43 0c 02 00 00 00 movl $0x2,0xc(%ebx) - sched(); -80104232: e8 f9 fb ff ff call 80103e30 - p->chan = 0; -80104237: c7 43 20 00 00 00 00 movl $0x0,0x20(%ebx) -} -8010423e: 8d 65 f4 lea -0xc(%ebp),%esp -80104241: 5b pop %ebx -80104242: 5e pop %esi -80104243: 5f pop %edi -80104244: 5d pop %ebp -80104245: c3 ret - panic("sleep without lk"); -80104246: 83 ec 0c sub $0xc,%esp -80104249: 68 ba 79 10 80 push $0x801079ba -8010424e: e8 3d c1 ff ff call 80100390 - panic("sleep"); -80104253: 83 ec 0c sub $0xc,%esp -80104256: 68 b4 79 10 80 push $0x801079b4 -8010425b: e8 30 c1 ff ff call 80100390 - -80104260 : - } - } -} - -// Wake up all processes sleeping on chan. -void wakeup(void *chan) { -80104260: 55 push %ebp -80104261: 89 e5 mov %esp,%ebp -80104263: 53 push %ebx -80104264: 83 ec 10 sub $0x10,%esp -80104267: 8b 5d 08 mov 0x8(%ebp),%ebx - acquire(&ptable.lock); -8010426a: 68 40 1d 11 80 push $0x80111d40 -8010426f: e8 8c 04 00 00 call 80104700 -80104274: 83 c4 10 add $0x10,%esp - for (p = ptable.proc; p < &ptable.proc[NPROC]; p++) { -80104277: b8 74 1d 11 80 mov $0x80111d74,%eax -8010427c: eb 0c jmp 8010428a -8010427e: 66 90 xchg %ax,%ax -80104280: 83 c0 7c add $0x7c,%eax -80104283: 3d 74 3c 11 80 cmp $0x80113c74,%eax -80104288: 74 1c je 801042a6 - if (p->state == SLEEPING && p->chan == chan) { -8010428a: 83 78 0c 02 cmpl $0x2,0xc(%eax) -8010428e: 75 f0 jne 80104280 -80104290: 3b 58 20 cmp 0x20(%eax),%ebx -80104293: 75 eb jne 80104280 - p->state = RUNNABLE; -80104295: c7 40 0c 03 00 00 00 movl $0x3,0xc(%eax) - for (p = ptable.proc; p < &ptable.proc[NPROC]; p++) { -8010429c: 83 c0 7c add $0x7c,%eax -8010429f: 3d 74 3c 11 80 cmp $0x80113c74,%eax -801042a4: 75 e4 jne 8010428a - wakeup1(chan); - release(&ptable.lock); -801042a6: c7 45 08 40 1d 11 80 movl $0x80111d40,0x8(%ebp) -} -801042ad: 8b 5d fc mov -0x4(%ebp),%ebx -801042b0: c9 leave - release(&ptable.lock); -801042b1: e9 ea 03 00 00 jmp 801046a0 -801042b6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801042bd: 8d 76 00 lea 0x0(%esi),%esi - -801042c0 : - -// 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) { -801042c0: 55 push %ebp -801042c1: 89 e5 mov %esp,%ebp -801042c3: 53 push %ebx -801042c4: 83 ec 10 sub $0x10,%esp -801042c7: 8b 5d 08 mov 0x8(%ebp),%ebx - struct proc *p; - - acquire(&ptable.lock); -801042ca: 68 40 1d 11 80 push $0x80111d40 -801042cf: e8 2c 04 00 00 call 80104700 -801042d4: 83 c4 10 add $0x10,%esp - for (p = ptable.proc; p < &ptable.proc[NPROC]; p++) { -801042d7: b8 74 1d 11 80 mov $0x80111d74,%eax -801042dc: eb 0c jmp 801042ea -801042de: 66 90 xchg %ax,%ax -801042e0: 83 c0 7c add $0x7c,%eax -801042e3: 3d 74 3c 11 80 cmp $0x80113c74,%eax -801042e8: 74 36 je 80104320 - if (p->pid == pid) { -801042ea: 39 58 10 cmp %ebx,0x10(%eax) -801042ed: 75 f1 jne 801042e0 - p->killed = 1; - // Wake process from sleep if necessary. - if (p->state == SLEEPING) { -801042ef: 83 78 0c 02 cmpl $0x2,0xc(%eax) - p->killed = 1; -801042f3: c7 40 24 01 00 00 00 movl $0x1,0x24(%eax) - if (p->state == SLEEPING) { -801042fa: 75 07 jne 80104303 - p->state = RUNNABLE; -801042fc: c7 40 0c 03 00 00 00 movl $0x3,0xc(%eax) - } - release(&ptable.lock); -80104303: 83 ec 0c sub $0xc,%esp -80104306: 68 40 1d 11 80 push $0x80111d40 -8010430b: e8 90 03 00 00 call 801046a0 - return 0; - } - } - release(&ptable.lock); - return -1; -} -80104310: 8b 5d fc mov -0x4(%ebp),%ebx - return 0; -80104313: 83 c4 10 add $0x10,%esp -80104316: 31 c0 xor %eax,%eax -} -80104318: c9 leave -80104319: c3 ret -8010431a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - release(&ptable.lock); -80104320: 83 ec 0c sub $0xc,%esp -80104323: 68 40 1d 11 80 push $0x80111d40 -80104328: e8 73 03 00 00 call 801046a0 -} -8010432d: 8b 5d fc mov -0x4(%ebp),%ebx - return -1; -80104330: 83 c4 10 add $0x10,%esp -80104333: b8 ff ff ff ff mov $0xffffffff,%eax -} -80104338: c9 leave -80104339: c3 ret -8010433a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -80104340 : - -// 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) { -80104340: 55 push %ebp -80104341: 89 e5 mov %esp,%ebp -80104343: 57 push %edi -80104344: 56 push %esi -80104345: 8d 75 e8 lea -0x18(%ebp),%esi -80104348: 53 push %ebx -80104349: bb e0 1d 11 80 mov $0x80111de0,%ebx -8010434e: 83 ec 3c sub $0x3c,%esp -80104351: eb 24 jmp 80104377 -80104353: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -80104357: 90 nop - getcallerpcs((uint*)p->context->ebp + 2, pc); - for (i = 0; i < 10 && pc[i] != 0; i++) { - cprintf(" %p", pc[i]); - } - } - cprintf("\n"); -80104358: 83 ec 0c sub $0xc,%esp -8010435b: 68 4f 7d 10 80 push $0x80107d4f -80104360: e8 4b c3 ff ff call 801006b0 -80104365: 83 c4 10 add $0x10,%esp - for (p = ptable.proc; p < &ptable.proc[NPROC]; p++) { -80104368: 83 c3 7c add $0x7c,%ebx -8010436b: 81 fb e0 3c 11 80 cmp $0x80113ce0,%ebx -80104371: 0f 84 81 00 00 00 je 801043f8 - if (p->state == UNUSED) { -80104377: 8b 43 a0 mov -0x60(%ebx),%eax -8010437a: 85 c0 test %eax,%eax -8010437c: 74 ea je 80104368 - state = "???"; -8010437e: ba cb 79 10 80 mov $0x801079cb,%edx - if (p->state >= 0 && p->state < NELEM(states) && states[p->state]) { -80104383: 83 f8 05 cmp $0x5,%eax -80104386: 77 11 ja 80104399 -80104388: 8b 14 85 2c 7a 10 80 mov -0x7fef85d4(,%eax,4),%edx - state = "???"; -8010438f: b8 cb 79 10 80 mov $0x801079cb,%eax -80104394: 85 d2 test %edx,%edx -80104396: 0f 44 d0 cmove %eax,%edx - cprintf("%d %s %s", p->pid, state, p->name); -80104399: 53 push %ebx -8010439a: 52 push %edx -8010439b: ff 73 a4 push -0x5c(%ebx) -8010439e: 68 cf 79 10 80 push $0x801079cf -801043a3: e8 08 c3 ff ff call 801006b0 - if (p->state == SLEEPING) { -801043a8: 83 c4 10 add $0x10,%esp -801043ab: 83 7b a0 02 cmpl $0x2,-0x60(%ebx) -801043af: 75 a7 jne 80104358 - getcallerpcs((uint*)p->context->ebp + 2, pc); -801043b1: 83 ec 08 sub $0x8,%esp -801043b4: 8d 45 c0 lea -0x40(%ebp),%eax -801043b7: 8d 7d c0 lea -0x40(%ebp),%edi -801043ba: 50 push %eax -801043bb: 8b 43 b0 mov -0x50(%ebx),%eax -801043be: 8b 40 0c mov 0xc(%eax),%eax -801043c1: 83 c0 08 add $0x8,%eax -801043c4: 50 push %eax -801043c5: e8 86 01 00 00 call 80104550 - for (i = 0; i < 10 && pc[i] != 0; i++) { -801043ca: 83 c4 10 add $0x10,%esp -801043cd: 8d 76 00 lea 0x0(%esi),%esi -801043d0: 8b 17 mov (%edi),%edx -801043d2: 85 d2 test %edx,%edx -801043d4: 74 82 je 80104358 - cprintf(" %p", pc[i]); -801043d6: 83 ec 08 sub $0x8,%esp - for (i = 0; i < 10 && pc[i] != 0; i++) { -801043d9: 83 c7 04 add $0x4,%edi - cprintf(" %p", pc[i]); -801043dc: 52 push %edx -801043dd: 68 21 74 10 80 push $0x80107421 -801043e2: e8 c9 c2 ff ff call 801006b0 - for (i = 0; i < 10 && pc[i] != 0; i++) { -801043e7: 83 c4 10 add $0x10,%esp -801043ea: 39 fe cmp %edi,%esi -801043ec: 75 e2 jne 801043d0 -801043ee: e9 65 ff ff ff jmp 80104358 -801043f3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -801043f7: 90 nop - } -} -801043f8: 8d 65 f4 lea -0xc(%ebp),%esp -801043fb: 5b pop %ebx -801043fc: 5e pop %esi -801043fd: 5f pop %edi -801043fe: 5d pop %ebp -801043ff: c3 ret - -80104400 : -#include "mmu.h" -#include "proc.h" -#include "spinlock.h" -#include "sleeplock.h" - -void initsleeplock(struct sleeplock *lk, char *name) { -80104400: 55 push %ebp -80104401: 89 e5 mov %esp,%ebp -80104403: 53 push %ebx -80104404: 83 ec 0c sub $0xc,%esp -80104407: 8b 5d 08 mov 0x8(%ebp),%ebx - initlock(&lk->lk, "sleep lock"); -8010440a: 68 44 7a 10 80 push $0x80107a44 -8010440f: 8d 43 04 lea 0x4(%ebx),%eax -80104412: 50 push %eax -80104413: e8 18 01 00 00 call 80104530 - lk->name = name; -80104418: 8b 45 0c mov 0xc(%ebp),%eax - lk->locked = 0; -8010441b: c7 03 00 00 00 00 movl $0x0,(%ebx) - lk->pid = 0; -} -80104421: 83 c4 10 add $0x10,%esp - lk->pid = 0; -80104424: c7 43 3c 00 00 00 00 movl $0x0,0x3c(%ebx) - lk->name = name; -8010442b: 89 43 38 mov %eax,0x38(%ebx) -} -8010442e: 8b 5d fc mov -0x4(%ebp),%ebx -80104431: c9 leave -80104432: c3 ret -80104433: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010443a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -80104440 : - -void acquiresleep(struct sleeplock *lk) { -80104440: 55 push %ebp -80104441: 89 e5 mov %esp,%ebp -80104443: 56 push %esi -80104444: 53 push %ebx -80104445: 8b 5d 08 mov 0x8(%ebp),%ebx - acquire(&lk->lk); -80104448: 8d 73 04 lea 0x4(%ebx),%esi -8010444b: 83 ec 0c sub $0xc,%esp -8010444e: 56 push %esi -8010444f: e8 ac 02 00 00 call 80104700 - while (lk->locked) { -80104454: 8b 13 mov (%ebx),%edx -80104456: 83 c4 10 add $0x10,%esp -80104459: 85 d2 test %edx,%edx -8010445b: 74 16 je 80104473 -8010445d: 8d 76 00 lea 0x0(%esi),%esi - sleep(lk, &lk->lk); -80104460: 83 ec 08 sub $0x8,%esp -80104463: 56 push %esi -80104464: 53 push %ebx -80104465: e8 36 fd ff ff call 801041a0 - while (lk->locked) { -8010446a: 8b 03 mov (%ebx),%eax -8010446c: 83 c4 10 add $0x10,%esp -8010446f: 85 c0 test %eax,%eax -80104471: 75 ed jne 80104460 - } - lk->locked = 1; -80104473: c7 03 01 00 00 00 movl $0x1,(%ebx) - lk->pid = myproc()->pid; -80104479: e8 52 f6 ff ff call 80103ad0 -8010447e: 8b 40 10 mov 0x10(%eax),%eax -80104481: 89 43 3c mov %eax,0x3c(%ebx) - release(&lk->lk); -80104484: 89 75 08 mov %esi,0x8(%ebp) -} -80104487: 8d 65 f8 lea -0x8(%ebp),%esp -8010448a: 5b pop %ebx -8010448b: 5e pop %esi -8010448c: 5d pop %ebp - release(&lk->lk); -8010448d: e9 0e 02 00 00 jmp 801046a0 -80104492: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80104499: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -801044a0 : - -void releasesleep(struct sleeplock *lk) { -801044a0: 55 push %ebp -801044a1: 89 e5 mov %esp,%ebp -801044a3: 56 push %esi -801044a4: 53 push %ebx -801044a5: 8b 5d 08 mov 0x8(%ebp),%ebx - acquire(&lk->lk); -801044a8: 8d 73 04 lea 0x4(%ebx),%esi -801044ab: 83 ec 0c sub $0xc,%esp -801044ae: 56 push %esi -801044af: e8 4c 02 00 00 call 80104700 - lk->locked = 0; -801044b4: c7 03 00 00 00 00 movl $0x0,(%ebx) - lk->pid = 0; -801044ba: c7 43 3c 00 00 00 00 movl $0x0,0x3c(%ebx) - wakeup(lk); -801044c1: 89 1c 24 mov %ebx,(%esp) -801044c4: e8 97 fd ff ff call 80104260 - release(&lk->lk); -801044c9: 89 75 08 mov %esi,0x8(%ebp) -801044cc: 83 c4 10 add $0x10,%esp -} -801044cf: 8d 65 f8 lea -0x8(%ebp),%esp -801044d2: 5b pop %ebx -801044d3: 5e pop %esi -801044d4: 5d pop %ebp - release(&lk->lk); -801044d5: e9 c6 01 00 00 jmp 801046a0 -801044da: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -801044e0 : - -int holdingsleep(struct sleeplock *lk) { -801044e0: 55 push %ebp -801044e1: 89 e5 mov %esp,%ebp -801044e3: 57 push %edi -801044e4: 31 ff xor %edi,%edi -801044e6: 56 push %esi -801044e7: 53 push %ebx -801044e8: 83 ec 18 sub $0x18,%esp -801044eb: 8b 5d 08 mov 0x8(%ebp),%ebx - int r; - - acquire(&lk->lk); -801044ee: 8d 73 04 lea 0x4(%ebx),%esi -801044f1: 56 push %esi -801044f2: e8 09 02 00 00 call 80104700 - r = lk->locked && (lk->pid == myproc()->pid); -801044f7: 8b 03 mov (%ebx),%eax -801044f9: 83 c4 10 add $0x10,%esp -801044fc: 85 c0 test %eax,%eax -801044fe: 75 18 jne 80104518 - release(&lk->lk); -80104500: 83 ec 0c sub $0xc,%esp -80104503: 56 push %esi -80104504: e8 97 01 00 00 call 801046a0 - return r; -} -80104509: 8d 65 f4 lea -0xc(%ebp),%esp -8010450c: 89 f8 mov %edi,%eax -8010450e: 5b pop %ebx -8010450f: 5e pop %esi -80104510: 5f pop %edi -80104511: 5d pop %ebp -80104512: c3 ret -80104513: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -80104517: 90 nop - r = lk->locked && (lk->pid == myproc()->pid); -80104518: 8b 5b 3c mov 0x3c(%ebx),%ebx -8010451b: e8 b0 f5 ff ff call 80103ad0 -80104520: 39 58 10 cmp %ebx,0x10(%eax) -80104523: 0f 94 c0 sete %al -80104526: 0f b6 c0 movzbl %al,%eax -80104529: 89 c7 mov %eax,%edi -8010452b: eb d3 jmp 80104500 -8010452d: 66 90 xchg %ax,%ax -8010452f: 90 nop - -80104530 : -#include "memlayout.h" -#include "mmu.h" -#include "proc.h" -#include "spinlock.h" - -void initlock(struct spinlock *lk, char *name) { -80104530: 55 push %ebp -80104531: 89 e5 mov %esp,%ebp -80104533: 8b 45 08 mov 0x8(%ebp),%eax - lk->name = name; -80104536: 8b 55 0c mov 0xc(%ebp),%edx - lk->locked = 0; -80104539: c7 00 00 00 00 00 movl $0x0,(%eax) - lk->name = name; -8010453f: 89 50 04 mov %edx,0x4(%eax) - lk->cpu = 0; -80104542: c7 40 08 00 00 00 00 movl $0x0,0x8(%eax) -} -80104549: 5d pop %ebp -8010454a: c3 ret -8010454b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -8010454f: 90 nop - -80104550 : - - popcli(); -} - -// Record the current call stack in pcs[] by following the %ebp chain. -void getcallerpcs(void *v, uint pcs[]) { -80104550: 55 push %ebp - uint *ebp; - int i; - - ebp = (uint*)v - 2; - for (i = 0; i < 10; i++) { -80104551: 31 d2 xor %edx,%edx -void getcallerpcs(void *v, uint pcs[]) { -80104553: 89 e5 mov %esp,%ebp -80104555: 53 push %ebx - ebp = (uint*)v - 2; -80104556: 8b 45 08 mov 0x8(%ebp),%eax -void getcallerpcs(void *v, uint pcs[]) { -80104559: 8b 4d 0c mov 0xc(%ebp),%ecx - ebp = (uint*)v - 2; -8010455c: 83 e8 08 sub $0x8,%eax - for (i = 0; i < 10; i++) { -8010455f: 90 nop - if (ebp == 0 || ebp < (uint*)KERNBASE || ebp == (uint*)0xffffffff) { -80104560: 8d 98 00 00 00 80 lea -0x80000000(%eax),%ebx -80104566: 81 fb fe ff ff 7f cmp $0x7ffffffe,%ebx -8010456c: 77 1a ja 80104588 - break; - } - pcs[i] = ebp[1]; // saved %eip -8010456e: 8b 58 04 mov 0x4(%eax),%ebx -80104571: 89 1c 91 mov %ebx,(%ecx,%edx,4) - for (i = 0; i < 10; i++) { -80104574: 83 c2 01 add $0x1,%edx - ebp = (uint*)ebp[0]; // saved %ebp -80104577: 8b 00 mov (%eax),%eax - for (i = 0; i < 10; i++) { -80104579: 83 fa 0a cmp $0xa,%edx -8010457c: 75 e2 jne 80104560 - } - for (; i < 10; i++) { - pcs[i] = 0; - } -} -8010457e: 8b 5d fc mov -0x4(%ebp),%ebx -80104581: c9 leave -80104582: c3 ret -80104583: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -80104587: 90 nop - for (; i < 10; i++) { -80104588: 8d 04 91 lea (%ecx,%edx,4),%eax -8010458b: 8d 51 28 lea 0x28(%ecx),%edx -8010458e: 66 90 xchg %ax,%ax - pcs[i] = 0; -80104590: c7 00 00 00 00 00 movl $0x0,(%eax) - for (; i < 10; i++) { -80104596: 83 c0 04 add $0x4,%eax -80104599: 39 d0 cmp %edx,%eax -8010459b: 75 f3 jne 80104590 -} -8010459d: 8b 5d fc mov -0x4(%ebp),%ebx -801045a0: c9 leave -801045a1: c3 ret -801045a2: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801045a9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -801045b0 : - -// Pushcli/popcli are like cli/sti except that they are matched: -// it takes two popcli to undo two pushcli. Also, if interrupts -// are off, then pushcli, popcli leaves them off. - -void pushcli(void) { -801045b0: 55 push %ebp -801045b1: 89 e5 mov %esp,%ebp -801045b3: 53 push %ebx -801045b4: 83 ec 04 sub $0x4,%esp -801045b7: 9c pushf -801045b8: 5b pop %ebx - asm volatile ("cli"); -801045b9: fa cli - int eflags; - - eflags = readeflags(); - cli(); - if (mycpu()->ncli == 0) { -801045ba: e8 91 f4 ff ff call 80103a50 -801045bf: 8b 80 a4 00 00 00 mov 0xa4(%eax),%eax -801045c5: 85 c0 test %eax,%eax -801045c7: 74 17 je 801045e0 - mycpu()->intena = eflags & FL_IF; - } - mycpu()->ncli += 1; -801045c9: e8 82 f4 ff ff call 80103a50 -801045ce: 83 80 a4 00 00 00 01 addl $0x1,0xa4(%eax) -} -801045d5: 8b 5d fc mov -0x4(%ebp),%ebx -801045d8: c9 leave -801045d9: c3 ret -801045da: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - mycpu()->intena = eflags & FL_IF; -801045e0: e8 6b f4 ff ff call 80103a50 -801045e5: 81 e3 00 02 00 00 and $0x200,%ebx -801045eb: 89 98 a8 00 00 00 mov %ebx,0xa8(%eax) -801045f1: eb d6 jmp 801045c9 -801045f3: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801045fa: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -80104600 : - -void popcli(void) { -80104600: 55 push %ebp -80104601: 89 e5 mov %esp,%ebp -80104603: 83 ec 08 sub $0x8,%esp - asm volatile ("pushfl; popl %0" : "=r" (eflags)); -80104606: 9c pushf -80104607: 58 pop %eax - if (readeflags() & FL_IF) { -80104608: f6 c4 02 test $0x2,%ah -8010460b: 75 35 jne 80104642 - panic("popcli - interruptible"); - } - if (--mycpu()->ncli < 0) { -8010460d: e8 3e f4 ff ff call 80103a50 -80104612: 83 a8 a4 00 00 00 01 subl $0x1,0xa4(%eax) -80104619: 78 34 js 8010464f - panic("popcli"); - } - if (mycpu()->ncli == 0 && mycpu()->intena) { -8010461b: e8 30 f4 ff ff call 80103a50 -80104620: 8b 90 a4 00 00 00 mov 0xa4(%eax),%edx -80104626: 85 d2 test %edx,%edx -80104628: 74 06 je 80104630 - sti(); - } -} -8010462a: c9 leave -8010462b: c3 ret -8010462c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - if (mycpu()->ncli == 0 && mycpu()->intena) { -80104630: e8 1b f4 ff ff call 80103a50 -80104635: 8b 80 a8 00 00 00 mov 0xa8(%eax),%eax -8010463b: 85 c0 test %eax,%eax -8010463d: 74 eb je 8010462a - asm volatile ("sti"); -8010463f: fb sti -} -80104640: c9 leave -80104641: c3 ret - panic("popcli - interruptible"); -80104642: 83 ec 0c sub $0xc,%esp -80104645: 68 4f 7a 10 80 push $0x80107a4f -8010464a: e8 41 bd ff ff call 80100390 - panic("popcli"); -8010464f: 83 ec 0c sub $0xc,%esp -80104652: 68 66 7a 10 80 push $0x80107a66 -80104657: e8 34 bd ff ff call 80100390 -8010465c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -80104660 : -int holding(struct spinlock *lock) { -80104660: 55 push %ebp -80104661: 89 e5 mov %esp,%ebp -80104663: 56 push %esi -80104664: 53 push %ebx -80104665: 8b 75 08 mov 0x8(%ebp),%esi -80104668: 31 db xor %ebx,%ebx - pushcli(); -8010466a: e8 41 ff ff ff call 801045b0 - r = lock->locked && lock->cpu == mycpu(); -8010466f: 8b 06 mov (%esi),%eax -80104671: 85 c0 test %eax,%eax -80104673: 75 0b jne 80104680 - popcli(); -80104675: e8 86 ff ff ff call 80104600 -} -8010467a: 89 d8 mov %ebx,%eax -8010467c: 5b pop %ebx -8010467d: 5e pop %esi -8010467e: 5d pop %ebp -8010467f: c3 ret - r = lock->locked && lock->cpu == mycpu(); -80104680: 8b 5e 08 mov 0x8(%esi),%ebx -80104683: e8 c8 f3 ff ff call 80103a50 -80104688: 39 c3 cmp %eax,%ebx -8010468a: 0f 94 c3 sete %bl - popcli(); -8010468d: e8 6e ff ff ff call 80104600 - r = lock->locked && lock->cpu == mycpu(); -80104692: 0f b6 db movzbl %bl,%ebx -} -80104695: 89 d8 mov %ebx,%eax -80104697: 5b pop %ebx -80104698: 5e pop %esi -80104699: 5d pop %ebp -8010469a: c3 ret -8010469b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -8010469f: 90 nop - -801046a0 : -void release(struct spinlock *lk) { -801046a0: 55 push %ebp -801046a1: 89 e5 mov %esp,%ebp -801046a3: 56 push %esi -801046a4: 53 push %ebx -801046a5: 8b 5d 08 mov 0x8(%ebp),%ebx - pushcli(); -801046a8: e8 03 ff ff ff call 801045b0 - r = lock->locked && lock->cpu == mycpu(); -801046ad: 8b 03 mov (%ebx),%eax -801046af: 85 c0 test %eax,%eax -801046b1: 75 15 jne 801046c8 - popcli(); -801046b3: e8 48 ff ff ff call 80104600 - panic("release"); -801046b8: 83 ec 0c sub $0xc,%esp -801046bb: 68 6d 7a 10 80 push $0x80107a6d -801046c0: e8 cb bc ff ff call 80100390 -801046c5: 8d 76 00 lea 0x0(%esi),%esi - r = lock->locked && lock->cpu == mycpu(); -801046c8: 8b 73 08 mov 0x8(%ebx),%esi -801046cb: e8 80 f3 ff ff call 80103a50 -801046d0: 39 c6 cmp %eax,%esi -801046d2: 75 df jne 801046b3 - popcli(); -801046d4: e8 27 ff ff ff call 80104600 - lk->pcs[0] = 0; -801046d9: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx) - lk->cpu = 0; -801046e0: c7 43 08 00 00 00 00 movl $0x0,0x8(%ebx) - __sync_synchronize(); -801046e7: f0 83 0c 24 00 lock orl $0x0,(%esp) - asm volatile ("movl $0, %0" : "+m" (lk->locked) :); -801046ec: c7 03 00 00 00 00 movl $0x0,(%ebx) -} -801046f2: 8d 65 f8 lea -0x8(%ebp),%esp -801046f5: 5b pop %ebx -801046f6: 5e pop %esi -801046f7: 5d pop %ebp - popcli(); -801046f8: e9 03 ff ff ff jmp 80104600 -801046fd: 8d 76 00 lea 0x0(%esi),%esi - -80104700 : -void acquire(struct spinlock *lk) { -80104700: 55 push %ebp -80104701: 89 e5 mov %esp,%ebp -80104703: 53 push %ebx -80104704: 83 ec 04 sub $0x4,%esp - pushcli(); // disable interrupts to avoid deadlock. -80104707: e8 a4 fe ff ff call 801045b0 - if (holding(lk)) { -8010470c: 8b 5d 08 mov 0x8(%ebp),%ebx - pushcli(); -8010470f: e8 9c fe ff ff call 801045b0 - r = lock->locked && lock->cpu == mycpu(); -80104714: 8b 03 mov (%ebx),%eax -80104716: 85 c0 test %eax,%eax -80104718: 75 7e jne 80104798 - popcli(); -8010471a: e8 e1 fe ff ff call 80104600 - asm volatile ("lock; xchgl %0, %1" : -8010471f: b9 01 00 00 00 mov $0x1,%ecx -80104724: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - while (xchg(&lk->locked, 1) != 0) { -80104728: 8b 55 08 mov 0x8(%ebp),%edx -8010472b: 89 c8 mov %ecx,%eax -8010472d: f0 87 02 lock xchg %eax,(%edx) -80104730: 85 c0 test %eax,%eax -80104732: 75 f4 jne 80104728 - __sync_synchronize(); -80104734: f0 83 0c 24 00 lock orl $0x0,(%esp) - lk->cpu = mycpu(); -80104739: 8b 5d 08 mov 0x8(%ebp),%ebx -8010473c: e8 0f f3 ff ff call 80103a50 - getcallerpcs(&lk, lk->pcs); -80104741: 8b 4d 08 mov 0x8(%ebp),%ecx - ebp = (uint*)v - 2; -80104744: 89 ea mov %ebp,%edx - lk->cpu = mycpu(); -80104746: 89 43 08 mov %eax,0x8(%ebx) - for (i = 0; i < 10; i++) { -80104749: 31 c0 xor %eax,%eax -8010474b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -8010474f: 90 nop - if (ebp == 0 || ebp < (uint*)KERNBASE || ebp == (uint*)0xffffffff) { -80104750: 8d 9a 00 00 00 80 lea -0x80000000(%edx),%ebx -80104756: 81 fb fe ff ff 7f cmp $0x7ffffffe,%ebx -8010475c: 77 1a ja 80104778 - pcs[i] = ebp[1]; // saved %eip -8010475e: 8b 5a 04 mov 0x4(%edx),%ebx -80104761: 89 5c 81 0c mov %ebx,0xc(%ecx,%eax,4) - for (i = 0; i < 10; i++) { -80104765: 83 c0 01 add $0x1,%eax - ebp = (uint*)ebp[0]; // saved %ebp -80104768: 8b 12 mov (%edx),%edx - for (i = 0; i < 10; i++) { -8010476a: 83 f8 0a cmp $0xa,%eax -8010476d: 75 e1 jne 80104750 -} -8010476f: 8b 5d fc mov -0x4(%ebp),%ebx -80104772: c9 leave -80104773: c3 ret -80104774: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - for (; i < 10; i++) { -80104778: 8d 44 81 0c lea 0xc(%ecx,%eax,4),%eax -8010477c: 8d 51 34 lea 0x34(%ecx),%edx -8010477f: 90 nop - pcs[i] = 0; -80104780: c7 00 00 00 00 00 movl $0x0,(%eax) - for (; i < 10; i++) { -80104786: 83 c0 04 add $0x4,%eax -80104789: 39 c2 cmp %eax,%edx -8010478b: 75 f3 jne 80104780 -} -8010478d: 8b 5d fc mov -0x4(%ebp),%ebx -80104790: c9 leave -80104791: c3 ret -80104792: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - r = lock->locked && lock->cpu == mycpu(); -80104798: 8b 5b 08 mov 0x8(%ebx),%ebx -8010479b: e8 b0 f2 ff ff call 80103a50 -801047a0: 39 c3 cmp %eax,%ebx -801047a2: 0f 85 72 ff ff ff jne 8010471a - popcli(); -801047a8: e8 53 fe ff ff call 80104600 - panic("acquire"); -801047ad: 83 ec 0c sub $0xc,%esp -801047b0: 68 75 7a 10 80 push $0x80107a75 -801047b5: e8 d6 bb ff ff call 80100390 -801047ba: 66 90 xchg %ax,%ax -801047bc: 66 90 xchg %ax,%ax -801047be: 66 90 xchg %ax,%ax - -801047c0 : -#include "types.h" -#include "x86.h" - -void* memset(void *dst, int c, uint n) { -801047c0: 55 push %ebp -801047c1: 89 e5 mov %esp,%ebp -801047c3: 57 push %edi -801047c4: 8b 55 08 mov 0x8(%ebp),%edx -801047c7: 8b 4d 10 mov 0x10(%ebp),%ecx -801047ca: 53 push %ebx -801047cb: 8b 45 0c mov 0xc(%ebp),%eax - if ((int)dst % 4 == 0 && n % 4 == 0) { -801047ce: 89 d7 mov %edx,%edi -801047d0: 09 cf or %ecx,%edi -801047d2: 83 e7 03 and $0x3,%edi -801047d5: 75 29 jne 80104800 - c &= 0xFF; -801047d7: 0f b6 f8 movzbl %al,%edi - stosl(dst, (c << 24) | (c << 16) | (c << 8) | c, n / 4); -801047da: c1 e0 18 shl $0x18,%eax -801047dd: 89 fb mov %edi,%ebx -801047df: c1 e9 02 shr $0x2,%ecx -801047e2: c1 e3 10 shl $0x10,%ebx -801047e5: 09 d8 or %ebx,%eax -801047e7: 09 f8 or %edi,%eax -801047e9: c1 e7 08 shl $0x8,%edi -801047ec: 09 f8 or %edi,%eax - asm volatile ("cld; rep stosl" : -801047ee: 89 d7 mov %edx,%edi -801047f0: fc cld -801047f1: f3 ab rep stos %eax,%es:(%edi) - } - else { - stosb(dst, c, n); - } - return dst; -} -801047f3: 5b pop %ebx -801047f4: 89 d0 mov %edx,%eax -801047f6: 5f pop %edi -801047f7: 5d pop %ebp -801047f8: c3 ret -801047f9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - asm volatile ("cld; rep stosb" : -80104800: 89 d7 mov %edx,%edi -80104802: fc cld -80104803: f3 aa rep stos %al,%es:(%edi) -80104805: 5b pop %ebx -80104806: 89 d0 mov %edx,%eax -80104808: 5f pop %edi -80104809: 5d pop %ebp -8010480a: c3 ret -8010480b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -8010480f: 90 nop - -80104810 : - -int memcmp(const void *v1, const void *v2, uint n) { -80104810: 55 push %ebp -80104811: 89 e5 mov %esp,%ebp -80104813: 56 push %esi -80104814: 8b 75 10 mov 0x10(%ebp),%esi -80104817: 8b 55 08 mov 0x8(%ebp),%edx -8010481a: 53 push %ebx -8010481b: 8b 45 0c mov 0xc(%ebp),%eax - const uchar *s1, *s2; - - s1 = v1; - s2 = v2; - while (n-- > 0) { -8010481e: 85 f6 test %esi,%esi -80104820: 74 2e je 80104850 -80104822: 01 c6 add %eax,%esi -80104824: eb 14 jmp 8010483a -80104826: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010482d: 8d 76 00 lea 0x0(%esi),%esi - if (*s1 != *s2) { - return *s1 - *s2; - } - s1++, s2++; -80104830: 83 c0 01 add $0x1,%eax -80104833: 83 c2 01 add $0x1,%edx - while (n-- > 0) { -80104836: 39 f0 cmp %esi,%eax -80104838: 74 16 je 80104850 - if (*s1 != *s2) { -8010483a: 0f b6 0a movzbl (%edx),%ecx -8010483d: 0f b6 18 movzbl (%eax),%ebx -80104840: 38 d9 cmp %bl,%cl -80104842: 74 ec je 80104830 - return *s1 - *s2; -80104844: 0f b6 c1 movzbl %cl,%eax -80104847: 29 d8 sub %ebx,%eax - } - - return 0; -} -80104849: 5b pop %ebx -8010484a: 5e pop %esi -8010484b: 5d pop %ebp -8010484c: c3 ret -8010484d: 8d 76 00 lea 0x0(%esi),%esi -80104850: 5b pop %ebx - return 0; -80104851: 31 c0 xor %eax,%eax -} -80104853: 5e pop %esi -80104854: 5d pop %ebp -80104855: c3 ret -80104856: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010485d: 8d 76 00 lea 0x0(%esi),%esi - -80104860 : - -void* memmove(void *dst, const void *src, uint n) { -80104860: 55 push %ebp -80104861: 89 e5 mov %esp,%ebp -80104863: 57 push %edi -80104864: 8b 55 08 mov 0x8(%ebp),%edx -80104867: 8b 4d 10 mov 0x10(%ebp),%ecx -8010486a: 56 push %esi -8010486b: 8b 75 0c mov 0xc(%ebp),%esi - const char *s; - char *d; - - s = src; - d = dst; - if (s < d && s + n > d) { -8010486e: 39 d6 cmp %edx,%esi -80104870: 73 26 jae 80104898 -80104872: 8d 3c 0e lea (%esi,%ecx,1),%edi -80104875: 39 fa cmp %edi,%edx -80104877: 73 1f jae 80104898 -80104879: 8d 41 ff lea -0x1(%ecx),%eax - s += n; - d += n; - while (n-- > 0) { -8010487c: 85 c9 test %ecx,%ecx -8010487e: 74 0c je 8010488c - *--d = *--s; -80104880: 0f b6 0c 06 movzbl (%esi,%eax,1),%ecx -80104884: 88 0c 02 mov %cl,(%edx,%eax,1) - while (n-- > 0) { -80104887: 83 e8 01 sub $0x1,%eax -8010488a: 73 f4 jae 80104880 - *d++ = *s++; - } - } - - return dst; -} -8010488c: 5e pop %esi -8010488d: 89 d0 mov %edx,%eax -8010488f: 5f pop %edi -80104890: 5d pop %ebp -80104891: c3 ret -80104892: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - while (n-- > 0) { -80104898: 8d 04 0e lea (%esi,%ecx,1),%eax -8010489b: 89 d7 mov %edx,%edi -8010489d: 85 c9 test %ecx,%ecx -8010489f: 74 eb je 8010488c -801048a1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - *d++ = *s++; -801048a8: a4 movsb %ds:(%esi),%es:(%edi) - while (n-- > 0) { -801048a9: 39 c6 cmp %eax,%esi -801048ab: 75 fb jne 801048a8 -} -801048ad: 5e pop %esi -801048ae: 89 d0 mov %edx,%eax -801048b0: 5f pop %edi -801048b1: 5d pop %ebp -801048b2: c3 ret -801048b3: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801048ba: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -801048c0 : - -// memcpy exists to placate GCC. Use memmove. -void* memcpy(void *dst, const void *src, uint n) { - return memmove(dst, src, n); -801048c0: eb 9e jmp 80104860 -801048c2: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801048c9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -801048d0 : -} - -int strncmp(const char *p, const char *q, uint n) { -801048d0: 55 push %ebp -801048d1: 89 e5 mov %esp,%ebp -801048d3: 56 push %esi -801048d4: 8b 75 10 mov 0x10(%ebp),%esi -801048d7: 8b 4d 08 mov 0x8(%ebp),%ecx -801048da: 53 push %ebx -801048db: 8b 55 0c mov 0xc(%ebp),%edx - while (n > 0 && *p && *p == *q) { -801048de: 85 f6 test %esi,%esi -801048e0: 74 2e je 80104910 -801048e2: 01 d6 add %edx,%esi -801048e4: eb 18 jmp 801048fe -801048e6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801048ed: 8d 76 00 lea 0x0(%esi),%esi -801048f0: 38 d8 cmp %bl,%al -801048f2: 75 14 jne 80104908 - n--, p++, q++; -801048f4: 83 c2 01 add $0x1,%edx -801048f7: 83 c1 01 add $0x1,%ecx - while (n > 0 && *p && *p == *q) { -801048fa: 39 f2 cmp %esi,%edx -801048fc: 74 12 je 80104910 -801048fe: 0f b6 01 movzbl (%ecx),%eax -80104901: 0f b6 1a movzbl (%edx),%ebx -80104904: 84 c0 test %al,%al -80104906: 75 e8 jne 801048f0 - } - if (n == 0) { - return 0; - } - return (uchar) * p - (uchar) * q; -80104908: 29 d8 sub %ebx,%eax -} -8010490a: 5b pop %ebx -8010490b: 5e pop %esi -8010490c: 5d pop %ebp -8010490d: c3 ret -8010490e: 66 90 xchg %ax,%ax -80104910: 5b pop %ebx - return 0; -80104911: 31 c0 xor %eax,%eax -} -80104913: 5e pop %esi -80104914: 5d pop %ebp -80104915: c3 ret -80104916: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010491d: 8d 76 00 lea 0x0(%esi),%esi - -80104920 : - -char* strncpy(char *s, const char *t, int n) { -80104920: 55 push %ebp -80104921: 89 e5 mov %esp,%ebp -80104923: 57 push %edi -80104924: 56 push %esi -80104925: 8b 75 08 mov 0x8(%ebp),%esi -80104928: 53 push %ebx -80104929: 8b 4d 10 mov 0x10(%ebp),%ecx - char *os; - - os = s; - while (n-- > 0 && (*s++ = *t++) != 0) { -8010492c: 89 f0 mov %esi,%eax -8010492e: eb 15 jmp 80104945 -80104930: 83 45 0c 01 addl $0x1,0xc(%ebp) -80104934: 8b 7d 0c mov 0xc(%ebp),%edi -80104937: 83 c0 01 add $0x1,%eax -8010493a: 0f b6 57 ff movzbl -0x1(%edi),%edx -8010493e: 88 50 ff mov %dl,-0x1(%eax) -80104941: 84 d2 test %dl,%dl -80104943: 74 09 je 8010494e -80104945: 89 cb mov %ecx,%ebx -80104947: 83 e9 01 sub $0x1,%ecx -8010494a: 85 db test %ebx,%ebx -8010494c: 7f e2 jg 80104930 - ; - } - while (n-- > 0) { -8010494e: 89 c2 mov %eax,%edx -80104950: 85 c9 test %ecx,%ecx -80104952: 7e 17 jle 8010496b -80104954: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - *s++ = 0; -80104958: 83 c2 01 add $0x1,%edx -8010495b: 89 c1 mov %eax,%ecx -8010495d: c6 42 ff 00 movb $0x0,-0x1(%edx) - while (n-- > 0) { -80104961: 29 d1 sub %edx,%ecx -80104963: 8d 4c 0b ff lea -0x1(%ebx,%ecx,1),%ecx -80104967: 85 c9 test %ecx,%ecx -80104969: 7f ed jg 80104958 - } - return os; -} -8010496b: 5b pop %ebx -8010496c: 89 f0 mov %esi,%eax -8010496e: 5e pop %esi -8010496f: 5f pop %edi -80104970: 5d pop %ebp -80104971: c3 ret -80104972: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80104979: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -80104980 : - -// Like strncpy but guaranteed to NUL-terminate. -char* safestrcpy(char *s, const char *t, int n) { -80104980: 55 push %ebp -80104981: 89 e5 mov %esp,%ebp -80104983: 56 push %esi -80104984: 8b 55 10 mov 0x10(%ebp),%edx -80104987: 8b 75 08 mov 0x8(%ebp),%esi -8010498a: 53 push %ebx -8010498b: 8b 45 0c mov 0xc(%ebp),%eax - char *os; - - os = s; - if (n <= 0) { -8010498e: 85 d2 test %edx,%edx -80104990: 7e 25 jle 801049b7 -80104992: 8d 5c 10 ff lea -0x1(%eax,%edx,1),%ebx -80104996: 89 f2 mov %esi,%edx -80104998: eb 16 jmp 801049b0 -8010499a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - return os; - } - while (--n > 0 && (*s++ = *t++) != 0) { -801049a0: 0f b6 08 movzbl (%eax),%ecx -801049a3: 83 c0 01 add $0x1,%eax -801049a6: 83 c2 01 add $0x1,%edx -801049a9: 88 4a ff mov %cl,-0x1(%edx) -801049ac: 84 c9 test %cl,%cl -801049ae: 74 04 je 801049b4 -801049b0: 39 d8 cmp %ebx,%eax -801049b2: 75 ec jne 801049a0 - ; - } - *s = 0; -801049b4: c6 02 00 movb $0x0,(%edx) - return os; -} -801049b7: 89 f0 mov %esi,%eax -801049b9: 5b pop %ebx -801049ba: 5e pop %esi -801049bb: 5d pop %ebp -801049bc: c3 ret -801049bd: 8d 76 00 lea 0x0(%esi),%esi - -801049c0 : - -int strlen(const char *s) { -801049c0: 55 push %ebp - int n; - - for (n = 0; s[n]; n++) { -801049c1: 31 c0 xor %eax,%eax -int strlen(const char *s) { -801049c3: 89 e5 mov %esp,%ebp -801049c5: 8b 55 08 mov 0x8(%ebp),%edx - for (n = 0; s[n]; n++) { -801049c8: 80 3a 00 cmpb $0x0,(%edx) -801049cb: 74 0c je 801049d9 -801049cd: 8d 76 00 lea 0x0(%esi),%esi -801049d0: 83 c0 01 add $0x1,%eax -801049d3: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) -801049d7: 75 f7 jne 801049d0 - ; - } - return n; -} -801049d9: 5d pop %ebp -801049da: c3 ret - -801049db : -# a struct context, and save its address in *old. -# Switch stacks to new and pop previously-saved registers. - -.globl swtch -swtch: - movl 4(%esp), %eax -801049db: 8b 44 24 04 mov 0x4(%esp),%eax - movl 8(%esp), %edx -801049df: 8b 54 24 08 mov 0x8(%esp),%edx - - # Save old callee-saved registers - pushl %ebp -801049e3: 55 push %ebp - pushl %ebx -801049e4: 53 push %ebx - pushl %esi -801049e5: 56 push %esi - pushl %edi -801049e6: 57 push %edi - - # Switch stacks - movl %esp, (%eax) -801049e7: 89 20 mov %esp,(%eax) - movl %edx, %esp -801049e9: 89 d4 mov %edx,%esp - - # Load new callee-saved registers - popl %edi -801049eb: 5f pop %edi - popl %esi -801049ec: 5e pop %esi - popl %ebx -801049ed: 5b pop %ebx - popl %ebp -801049ee: 5d pop %ebp - ret -801049ef: c3 ret - -801049f0 : -// Arguments on the stack, from the user call to the C -// library system call function. The saved user %esp points -// 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) { -801049f0: 55 push %ebp -801049f1: 89 e5 mov %esp,%ebp -801049f3: 53 push %ebx -801049f4: 83 ec 04 sub $0x4,%esp -801049f7: 8b 5d 08 mov 0x8(%ebp),%ebx - struct proc *curproc = myproc(); -801049fa: e8 d1 f0 ff ff call 80103ad0 - - if (addr >= curproc->sz || addr + 4 > curproc->sz) { -801049ff: 8b 00 mov (%eax),%eax -80104a01: 39 d8 cmp %ebx,%eax -80104a03: 76 1b jbe 80104a20 -80104a05: 8d 53 04 lea 0x4(%ebx),%edx -80104a08: 39 d0 cmp %edx,%eax -80104a0a: 72 14 jb 80104a20 - return -1; - } - *ip = *(int*)(addr); -80104a0c: 8b 45 0c mov 0xc(%ebp),%eax -80104a0f: 8b 13 mov (%ebx),%edx -80104a11: 89 10 mov %edx,(%eax) - return 0; -80104a13: 31 c0 xor %eax,%eax -} -80104a15: 8b 5d fc mov -0x4(%ebp),%ebx -80104a18: c9 leave -80104a19: c3 ret -80104a1a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - return -1; -80104a20: b8 ff ff ff ff mov $0xffffffff,%eax -80104a25: eb ee jmp 80104a15 -80104a27: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80104a2e: 66 90 xchg %ax,%ax - -80104a30 : - -// 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) { -80104a30: 55 push %ebp -80104a31: 89 e5 mov %esp,%ebp -80104a33: 53 push %ebx -80104a34: 83 ec 04 sub $0x4,%esp -80104a37: 8b 5d 08 mov 0x8(%ebp),%ebx - char *s, *ep; - struct proc *curproc = myproc(); -80104a3a: e8 91 f0 ff ff call 80103ad0 - - if (addr >= curproc->sz) { -80104a3f: 39 18 cmp %ebx,(%eax) -80104a41: 76 2d jbe 80104a70 - return -1; - } - *pp = (char*)addr; -80104a43: 8b 55 0c mov 0xc(%ebp),%edx -80104a46: 89 1a mov %ebx,(%edx) - ep = (char*)curproc->sz; -80104a48: 8b 10 mov (%eax),%edx - for (s = *pp; s < ep; s++) { -80104a4a: 39 d3 cmp %edx,%ebx -80104a4c: 73 22 jae 80104a70 -80104a4e: 89 d8 mov %ebx,%eax -80104a50: eb 0d jmp 80104a5f -80104a52: 8d b6 00 00 00 00 lea 0x0(%esi),%esi -80104a58: 83 c0 01 add $0x1,%eax -80104a5b: 39 c2 cmp %eax,%edx -80104a5d: 76 11 jbe 80104a70 - if (*s == 0) { -80104a5f: 80 38 00 cmpb $0x0,(%eax) -80104a62: 75 f4 jne 80104a58 - return s - *pp; -80104a64: 29 d8 sub %ebx,%eax - } - } - return -1; -} -80104a66: 8b 5d fc mov -0x4(%ebp),%ebx -80104a69: c9 leave -80104a6a: c3 ret -80104a6b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -80104a6f: 90 nop -80104a70: 8b 5d fc mov -0x4(%ebp),%ebx - return -1; -80104a73: b8 ff ff ff ff mov $0xffffffff,%eax -} -80104a78: c9 leave -80104a79: c3 ret -80104a7a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -80104a80 : - -// Fetch the nth 32-bit system call argument. -int argint(int n, int *ip) { -80104a80: 55 push %ebp -80104a81: 89 e5 mov %esp,%ebp -80104a83: 56 push %esi -80104a84: 53 push %ebx - return fetchint((myproc()->tf->esp) + 4 + 4 * n, ip); -80104a85: e8 46 f0 ff ff call 80103ad0 -80104a8a: 8b 55 08 mov 0x8(%ebp),%edx -80104a8d: 8b 40 18 mov 0x18(%eax),%eax -80104a90: 8b 40 44 mov 0x44(%eax),%eax -80104a93: 8d 1c 90 lea (%eax,%edx,4),%ebx - struct proc *curproc = myproc(); -80104a96: e8 35 f0 ff ff call 80103ad0 - return fetchint((myproc()->tf->esp) + 4 + 4 * n, ip); -80104a9b: 8d 73 04 lea 0x4(%ebx),%esi - if (addr >= curproc->sz || addr + 4 > curproc->sz) { -80104a9e: 8b 00 mov (%eax),%eax -80104aa0: 39 c6 cmp %eax,%esi -80104aa2: 73 1c jae 80104ac0 -80104aa4: 8d 53 08 lea 0x8(%ebx),%edx -80104aa7: 39 d0 cmp %edx,%eax -80104aa9: 72 15 jb 80104ac0 - *ip = *(int*)(addr); -80104aab: 8b 45 0c mov 0xc(%ebp),%eax -80104aae: 8b 53 04 mov 0x4(%ebx),%edx -80104ab1: 89 10 mov %edx,(%eax) - return 0; -80104ab3: 31 c0 xor %eax,%eax -} -80104ab5: 5b pop %ebx -80104ab6: 5e pop %esi -80104ab7: 5d pop %ebp -80104ab8: c3 ret -80104ab9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - return -1; -80104ac0: b8 ff ff ff ff mov $0xffffffff,%eax - return fetchint((myproc()->tf->esp) + 4 + 4 * n, ip); -80104ac5: eb ee jmp 80104ab5 -80104ac7: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80104ace: 66 90 xchg %ax,%ax - -80104ad0 : - -// Fetch the nth word-sized system call argument as a pointer -// to a block of memory of size bytes. Check that the pointer -// lies within the process address space. -int argptr(int n, char **pp, int size) { -80104ad0: 55 push %ebp -80104ad1: 89 e5 mov %esp,%ebp -80104ad3: 57 push %edi -80104ad4: 56 push %esi -80104ad5: 53 push %ebx -80104ad6: 83 ec 0c sub $0xc,%esp - int i; - struct proc *curproc = myproc(); -80104ad9: e8 f2 ef ff ff call 80103ad0 -80104ade: 89 c6 mov %eax,%esi - return fetchint((myproc()->tf->esp) + 4 + 4 * n, ip); -80104ae0: e8 eb ef ff ff call 80103ad0 -80104ae5: 8b 55 08 mov 0x8(%ebp),%edx -80104ae8: 8b 40 18 mov 0x18(%eax),%eax -80104aeb: 8b 40 44 mov 0x44(%eax),%eax -80104aee: 8d 1c 90 lea (%eax,%edx,4),%ebx - struct proc *curproc = myproc(); -80104af1: e8 da ef ff ff call 80103ad0 - return fetchint((myproc()->tf->esp) + 4 + 4 * n, ip); -80104af6: 8d 7b 04 lea 0x4(%ebx),%edi - if (addr >= curproc->sz || addr + 4 > curproc->sz) { -80104af9: 8b 00 mov (%eax),%eax -80104afb: 39 c7 cmp %eax,%edi -80104afd: 73 31 jae 80104b30 -80104aff: 8d 4b 08 lea 0x8(%ebx),%ecx -80104b02: 39 c8 cmp %ecx,%eax -80104b04: 72 2a jb 80104b30 - - if (argint(n, &i) < 0) { - return -1; - } - if (size < 0 || (uint)i >= curproc->sz || (uint)i + size > curproc->sz) { -80104b06: 8b 55 10 mov 0x10(%ebp),%edx - *ip = *(int*)(addr); -80104b09: 8b 43 04 mov 0x4(%ebx),%eax - if (size < 0 || (uint)i >= curproc->sz || (uint)i + size > curproc->sz) { -80104b0c: 85 d2 test %edx,%edx -80104b0e: 78 20 js 80104b30 -80104b10: 8b 16 mov (%esi),%edx -80104b12: 39 c2 cmp %eax,%edx -80104b14: 76 1a jbe 80104b30 -80104b16: 8b 5d 10 mov 0x10(%ebp),%ebx -80104b19: 01 c3 add %eax,%ebx -80104b1b: 39 da cmp %ebx,%edx -80104b1d: 72 11 jb 80104b30 - return -1; - } - *pp = (char*)i; -80104b1f: 8b 55 0c mov 0xc(%ebp),%edx -80104b22: 89 02 mov %eax,(%edx) - return 0; -80104b24: 31 c0 xor %eax,%eax -} -80104b26: 83 c4 0c add $0xc,%esp -80104b29: 5b pop %ebx -80104b2a: 5e pop %esi -80104b2b: 5f pop %edi -80104b2c: 5d pop %ebp -80104b2d: c3 ret -80104b2e: 66 90 xchg %ax,%ax - return -1; -80104b30: b8 ff ff ff ff mov $0xffffffff,%eax -80104b35: eb ef jmp 80104b26 -80104b37: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80104b3e: 66 90 xchg %ax,%ax - -80104b40 : - -// Fetch the nth word-sized system call argument as a string pointer. -// 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) { -80104b40: 55 push %ebp -80104b41: 89 e5 mov %esp,%ebp -80104b43: 56 push %esi -80104b44: 53 push %ebx - return fetchint((myproc()->tf->esp) + 4 + 4 * n, ip); -80104b45: e8 86 ef ff ff call 80103ad0 -80104b4a: 8b 55 08 mov 0x8(%ebp),%edx -80104b4d: 8b 40 18 mov 0x18(%eax),%eax -80104b50: 8b 40 44 mov 0x44(%eax),%eax -80104b53: 8d 1c 90 lea (%eax,%edx,4),%ebx - struct proc *curproc = myproc(); -80104b56: e8 75 ef ff ff call 80103ad0 - return fetchint((myproc()->tf->esp) + 4 + 4 * n, ip); -80104b5b: 8d 73 04 lea 0x4(%ebx),%esi - if (addr >= curproc->sz || addr + 4 > curproc->sz) { -80104b5e: 8b 00 mov (%eax),%eax -80104b60: 39 c6 cmp %eax,%esi -80104b62: 73 44 jae 80104ba8 -80104b64: 8d 53 08 lea 0x8(%ebx),%edx -80104b67: 39 d0 cmp %edx,%eax -80104b69: 72 3d jb 80104ba8 - *ip = *(int*)(addr); -80104b6b: 8b 5b 04 mov 0x4(%ebx),%ebx - struct proc *curproc = myproc(); -80104b6e: e8 5d ef ff ff call 80103ad0 - if (addr >= curproc->sz) { -80104b73: 3b 18 cmp (%eax),%ebx -80104b75: 73 31 jae 80104ba8 - *pp = (char*)addr; -80104b77: 8b 55 0c mov 0xc(%ebp),%edx -80104b7a: 89 1a mov %ebx,(%edx) - ep = (char*)curproc->sz; -80104b7c: 8b 10 mov (%eax),%edx - for (s = *pp; s < ep; s++) { -80104b7e: 39 d3 cmp %edx,%ebx -80104b80: 73 26 jae 80104ba8 -80104b82: 89 d8 mov %ebx,%eax -80104b84: eb 11 jmp 80104b97 -80104b86: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80104b8d: 8d 76 00 lea 0x0(%esi),%esi -80104b90: 83 c0 01 add $0x1,%eax -80104b93: 39 c2 cmp %eax,%edx -80104b95: 76 11 jbe 80104ba8 - if (*s == 0) { -80104b97: 80 38 00 cmpb $0x0,(%eax) -80104b9a: 75 f4 jne 80104b90 - return s - *pp; -80104b9c: 29 d8 sub %ebx,%eax - int addr; - if (argint(n, &addr) < 0) { - return -1; - } - return fetchstr(addr, pp); -} -80104b9e: 5b pop %ebx -80104b9f: 5e pop %esi -80104ba0: 5d pop %ebp -80104ba1: c3 ret -80104ba2: 8d b6 00 00 00 00 lea 0x0(%esi),%esi -80104ba8: 5b pop %ebx - return -1; -80104ba9: b8 ff ff ff ff mov $0xffffffff,%eax -} -80104bae: 5e pop %esi -80104baf: 5d pop %ebp -80104bb0: c3 ret -80104bb1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80104bb8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80104bbf: 90 nop - -80104bc0 : - -void syscall(void) { -80104bc0: 55 push %ebp -80104bc1: 89 e5 mov %esp,%ebp -80104bc3: 53 push %ebx -80104bc4: 83 ec 04 sub $0x4,%esp - int num; - struct proc *curproc = myproc(); -80104bc7: e8 04 ef ff ff call 80103ad0 -80104bcc: 89 c3 mov %eax,%ebx - - num = curproc->tf->eax; -80104bce: 8b 40 18 mov 0x18(%eax),%eax -80104bd1: 8b 40 1c mov 0x1c(%eax),%eax - if (num > 0 && num < NELEM(syscalls) && syscalls[num]) { -80104bd4: 8d 50 ff lea -0x1(%eax),%edx -80104bd7: 83 fa 17 cmp $0x17,%edx -80104bda: 77 24 ja 80104c00 -80104bdc: 8b 14 85 a0 7a 10 80 mov -0x7fef8560(,%eax,4),%edx -80104be3: 85 d2 test %edx,%edx -80104be5: 74 19 je 80104c00 - curproc->tf->eax = syscalls[num](); -80104be7: ff d2 call *%edx -80104be9: 89 c2 mov %eax,%edx -80104beb: 8b 43 18 mov 0x18(%ebx),%eax -80104bee: 89 50 1c mov %edx,0x1c(%eax) - else { - cprintf("%d %s: unknown sys call %d\n", - curproc->pid, curproc->name, num); - curproc->tf->eax = -1; - } -} -80104bf1: 8b 5d fc mov -0x4(%ebp),%ebx -80104bf4: c9 leave -80104bf5: c3 ret -80104bf6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80104bfd: 8d 76 00 lea 0x0(%esi),%esi - cprintf("%d %s: unknown sys call %d\n", -80104c00: 50 push %eax - curproc->pid, curproc->name, num); -80104c01: 8d 43 6c lea 0x6c(%ebx),%eax - cprintf("%d %s: unknown sys call %d\n", -80104c04: 50 push %eax -80104c05: ff 73 10 push 0x10(%ebx) -80104c08: 68 7d 7a 10 80 push $0x80107a7d -80104c0d: e8 9e ba ff ff call 801006b0 - curproc->tf->eax = -1; -80104c12: 8b 43 18 mov 0x18(%ebx),%eax -80104c15: 83 c4 10 add $0x10,%esp -80104c18: c7 40 1c ff ff ff ff movl $0xffffffff,0x1c(%eax) -} -80104c1f: 8b 5d fc mov -0x4(%ebp),%ebx -80104c22: c9 leave -80104c23: c3 ret -80104c24: 66 90 xchg %ax,%ax -80104c26: 66 90 xchg %ax,%ax -80104c28: 66 90 xchg %ax,%ax -80104c2a: 66 90 xchg %ax,%ax -80104c2c: 66 90 xchg %ax,%ax -80104c2e: 66 90 xchg %ax,%ax - -80104c30 : - end_op(); - - return 0; -} - -static struct inode* create(char *path, short type, short major, short minor) { -80104c30: 55 push %ebp -80104c31: 89 e5 mov %esp,%ebp -80104c33: 57 push %edi -80104c34: 56 push %esi - struct inode *ip, *dp; - char name[DIRSIZ]; - - if ((dp = nameiparent(path, name)) == 0) { -80104c35: 8d 7d da lea -0x26(%ebp),%edi -static struct inode* create(char *path, short type, short major, short minor) { -80104c38: 53 push %ebx -80104c39: 83 ec 34 sub $0x34,%esp -80104c3c: 89 4d d0 mov %ecx,-0x30(%ebp) -80104c3f: 8b 4d 08 mov 0x8(%ebp),%ecx - if ((dp = nameiparent(path, name)) == 0) { -80104c42: 57 push %edi -80104c43: 50 push %eax -static struct inode* create(char *path, short type, short major, short minor) { -80104c44: 89 55 d4 mov %edx,-0x2c(%ebp) -80104c47: 89 4d cc mov %ecx,-0x34(%ebp) - if ((dp = nameiparent(path, name)) == 0) { -80104c4a: e8 91 d5 ff ff call 801021e0 -80104c4f: 83 c4 10 add $0x10,%esp -80104c52: 85 c0 test %eax,%eax -80104c54: 0f 84 46 01 00 00 je 80104da0 - return 0; - } - ilock(dp); -80104c5a: 83 ec 0c sub $0xc,%esp -80104c5d: 89 c3 mov %eax,%ebx -80104c5f: 50 push %eax -80104c60: e8 3b cc ff ff call 801018a0 - - if ((ip = dirlookup(dp, name, 0)) != 0) { -80104c65: 83 c4 0c add $0xc,%esp -80104c68: 6a 00 push $0x0 -80104c6a: 57 push %edi -80104c6b: 53 push %ebx -80104c6c: e8 8f d1 ff ff call 80101e00 -80104c71: 83 c4 10 add $0x10,%esp -80104c74: 89 c6 mov %eax,%esi -80104c76: 85 c0 test %eax,%eax -80104c78: 74 56 je 80104cd0 - iunlockput(dp); -80104c7a: 83 ec 0c sub $0xc,%esp -80104c7d: 53 push %ebx -80104c7e: e8 ad ce ff ff call 80101b30 - ilock(ip); -80104c83: 89 34 24 mov %esi,(%esp) -80104c86: e8 15 cc ff ff call 801018a0 - if (type == T_FILE && ip->type == T_FILE) { -80104c8b: 83 c4 10 add $0x10,%esp -80104c8e: 66 83 7d d4 02 cmpw $0x2,-0x2c(%ebp) -80104c93: 75 1b jne 80104cb0 -80104c95: 66 83 7e 50 02 cmpw $0x2,0x50(%esi) -80104c9a: 75 14 jne 80104cb0 - } - - iunlockput(dp); - - return ip; -} -80104c9c: 8d 65 f4 lea -0xc(%ebp),%esp -80104c9f: 89 f0 mov %esi,%eax -80104ca1: 5b pop %ebx -80104ca2: 5e pop %esi -80104ca3: 5f pop %edi -80104ca4: 5d pop %ebp -80104ca5: c3 ret -80104ca6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80104cad: 8d 76 00 lea 0x0(%esi),%esi - iunlockput(ip); -80104cb0: 83 ec 0c sub $0xc,%esp -80104cb3: 56 push %esi - return 0; -80104cb4: 31 f6 xor %esi,%esi - iunlockput(ip); -80104cb6: e8 75 ce ff ff call 80101b30 - return 0; -80104cbb: 83 c4 10 add $0x10,%esp -} -80104cbe: 8d 65 f4 lea -0xc(%ebp),%esp -80104cc1: 89 f0 mov %esi,%eax -80104cc3: 5b pop %ebx -80104cc4: 5e pop %esi -80104cc5: 5f pop %edi -80104cc6: 5d pop %ebp -80104cc7: c3 ret -80104cc8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80104ccf: 90 nop - if ((ip = ialloc(dp->dev, type)) == 0) { -80104cd0: 0f bf 45 d4 movswl -0x2c(%ebp),%eax -80104cd4: 83 ec 08 sub $0x8,%esp -80104cd7: 50 push %eax -80104cd8: ff 33 push (%ebx) -80104cda: e8 51 ca ff ff call 80101730 -80104cdf: 83 c4 10 add $0x10,%esp -80104ce2: 89 c6 mov %eax,%esi -80104ce4: 85 c0 test %eax,%eax -80104ce6: 0f 84 cd 00 00 00 je 80104db9 - ilock(ip); -80104cec: 83 ec 0c sub $0xc,%esp -80104cef: 50 push %eax -80104cf0: e8 ab cb ff ff call 801018a0 - ip->major = major; -80104cf5: 0f b7 45 d0 movzwl -0x30(%ebp),%eax -80104cf9: 66 89 46 52 mov %ax,0x52(%esi) - ip->minor = minor; -80104cfd: 0f b7 45 cc movzwl -0x34(%ebp),%eax -80104d01: 66 89 46 54 mov %ax,0x54(%esi) - ip->nlink = 1; -80104d05: b8 01 00 00 00 mov $0x1,%eax -80104d0a: 66 89 46 56 mov %ax,0x56(%esi) - iupdate(ip); -80104d0e: 89 34 24 mov %esi,(%esp) -80104d11: e8 da ca ff ff call 801017f0 - if (type == T_DIR) { // Create . and .. entries. -80104d16: 83 c4 10 add $0x10,%esp -80104d19: 66 83 7d d4 01 cmpw $0x1,-0x2c(%ebp) -80104d1e: 74 30 je 80104d50 - if (dirlink(dp, name, ip->inum) < 0) { -80104d20: 83 ec 04 sub $0x4,%esp -80104d23: ff 76 04 push 0x4(%esi) -80104d26: 57 push %edi -80104d27: 53 push %ebx -80104d28: e8 d3 d3 ff ff call 80102100 -80104d2d: 83 c4 10 add $0x10,%esp -80104d30: 85 c0 test %eax,%eax -80104d32: 78 78 js 80104dac - iunlockput(dp); -80104d34: 83 ec 0c sub $0xc,%esp -80104d37: 53 push %ebx -80104d38: e8 f3 cd ff ff call 80101b30 - return ip; -80104d3d: 83 c4 10 add $0x10,%esp -} -80104d40: 8d 65 f4 lea -0xc(%ebp),%esp -80104d43: 89 f0 mov %esi,%eax -80104d45: 5b pop %ebx -80104d46: 5e pop %esi -80104d47: 5f pop %edi -80104d48: 5d pop %ebp -80104d49: c3 ret -80104d4a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - iupdate(dp); -80104d50: 83 ec 0c sub $0xc,%esp - dp->nlink++; // for ".." -80104d53: 66 83 43 56 01 addw $0x1,0x56(%ebx) - iupdate(dp); -80104d58: 53 push %ebx -80104d59: e8 92 ca ff ff call 801017f0 - if (dirlink(ip, ".", ip->inum) < 0 || dirlink(ip, "..", dp->inum) < 0) { -80104d5e: 83 c4 0c add $0xc,%esp -80104d61: ff 76 04 push 0x4(%esi) -80104d64: 68 20 7b 10 80 push $0x80107b20 -80104d69: 56 push %esi -80104d6a: e8 91 d3 ff ff call 80102100 -80104d6f: 83 c4 10 add $0x10,%esp -80104d72: 85 c0 test %eax,%eax -80104d74: 78 18 js 80104d8e -80104d76: 83 ec 04 sub $0x4,%esp -80104d79: ff 73 04 push 0x4(%ebx) -80104d7c: 68 1f 7b 10 80 push $0x80107b1f -80104d81: 56 push %esi -80104d82: e8 79 d3 ff ff call 80102100 -80104d87: 83 c4 10 add $0x10,%esp -80104d8a: 85 c0 test %eax,%eax -80104d8c: 79 92 jns 80104d20 - panic("create dots"); -80104d8e: 83 ec 0c sub $0xc,%esp -80104d91: 68 13 7b 10 80 push $0x80107b13 -80104d96: e8 f5 b5 ff ff call 80100390 -80104d9b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -80104d9f: 90 nop -} -80104da0: 8d 65 f4 lea -0xc(%ebp),%esp - return 0; -80104da3: 31 f6 xor %esi,%esi -} -80104da5: 5b pop %ebx -80104da6: 89 f0 mov %esi,%eax -80104da8: 5e pop %esi -80104da9: 5f pop %edi -80104daa: 5d pop %ebp -80104dab: c3 ret - panic("create: dirlink"); -80104dac: 83 ec 0c sub $0xc,%esp -80104daf: 68 22 7b 10 80 push $0x80107b22 -80104db4: e8 d7 b5 ff ff call 80100390 - panic("create: ialloc"); -80104db9: 83 ec 0c sub $0xc,%esp -80104dbc: 68 04 7b 10 80 push $0x80107b04 -80104dc1: e8 ca b5 ff ff call 80100390 -80104dc6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80104dcd: 8d 76 00 lea 0x0(%esi),%esi - -80104dd0 : -int sys_dup(void) { -80104dd0: 55 push %ebp -80104dd1: 89 e5 mov %esp,%ebp -80104dd3: 56 push %esi -80104dd4: 53 push %ebx - if (argint(n, &fd) < 0) { -80104dd5: 8d 45 f4 lea -0xc(%ebp),%eax -int sys_dup(void) { -80104dd8: 83 ec 18 sub $0x18,%esp - if (argint(n, &fd) < 0) { -80104ddb: 50 push %eax -80104ddc: 6a 00 push $0x0 -80104dde: e8 9d fc ff ff call 80104a80 -80104de3: 83 c4 10 add $0x10,%esp -80104de6: 85 c0 test %eax,%eax -80104de8: 78 36 js 80104e20 - if (fd < 0 || fd >= NOFILE || (f = myproc()->ofile[fd]) == 0) { -80104dea: 83 7d f4 0f cmpl $0xf,-0xc(%ebp) -80104dee: 77 30 ja 80104e20 -80104df0: e8 db ec ff ff call 80103ad0 -80104df5: 8b 55 f4 mov -0xc(%ebp),%edx -80104df8: 8b 74 90 28 mov 0x28(%eax,%edx,4),%esi -80104dfc: 85 f6 test %esi,%esi -80104dfe: 74 20 je 80104e20 - struct proc *curproc = myproc(); -80104e00: e8 cb ec ff ff call 80103ad0 - for (fd = 0; fd < NOFILE; fd++) { -80104e05: 31 db xor %ebx,%ebx -80104e07: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80104e0e: 66 90 xchg %ax,%ax - if (curproc->ofile[fd] == 0) { -80104e10: 8b 54 98 28 mov 0x28(%eax,%ebx,4),%edx -80104e14: 85 d2 test %edx,%edx -80104e16: 74 18 je 80104e30 - for (fd = 0; fd < NOFILE; fd++) { -80104e18: 83 c3 01 add $0x1,%ebx -80104e1b: 83 fb 10 cmp $0x10,%ebx -80104e1e: 75 f0 jne 80104e10 -} -80104e20: 8d 65 f8 lea -0x8(%ebp),%esp - return -1; -80104e23: bb ff ff ff ff mov $0xffffffff,%ebx -} -80104e28: 89 d8 mov %ebx,%eax -80104e2a: 5b pop %ebx -80104e2b: 5e pop %esi -80104e2c: 5d pop %ebp -80104e2d: c3 ret -80104e2e: 66 90 xchg %ax,%ax - filedup(f); -80104e30: 83 ec 0c sub $0xc,%esp - curproc->ofile[fd] = f; -80104e33: 89 74 98 28 mov %esi,0x28(%eax,%ebx,4) - filedup(f); -80104e37: 56 push %esi -80104e38: e8 83 c1 ff ff call 80100fc0 - return fd; -80104e3d: 83 c4 10 add $0x10,%esp -} -80104e40: 8d 65 f8 lea -0x8(%ebp),%esp -80104e43: 89 d8 mov %ebx,%eax -80104e45: 5b pop %ebx -80104e46: 5e pop %esi -80104e47: 5d pop %ebp -80104e48: c3 ret -80104e49: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -80104e50 : -int sys_read(void) { -80104e50: 55 push %ebp -80104e51: 89 e5 mov %esp,%ebp -80104e53: 56 push %esi -80104e54: 53 push %ebx - if (argint(n, &fd) < 0) { -80104e55: 8d 5d f4 lea -0xc(%ebp),%ebx -int sys_read(void) { -80104e58: 83 ec 18 sub $0x18,%esp - if (argint(n, &fd) < 0) { -80104e5b: 53 push %ebx -80104e5c: 6a 00 push $0x0 -80104e5e: e8 1d fc ff ff call 80104a80 -80104e63: 83 c4 10 add $0x10,%esp -80104e66: 85 c0 test %eax,%eax -80104e68: 78 5e js 80104ec8 - if (fd < 0 || fd >= NOFILE || (f = myproc()->ofile[fd]) == 0) { -80104e6a: 83 7d f4 0f cmpl $0xf,-0xc(%ebp) -80104e6e: 77 58 ja 80104ec8 -80104e70: e8 5b ec ff ff call 80103ad0 -80104e75: 8b 55 f4 mov -0xc(%ebp),%edx -80104e78: 8b 74 90 28 mov 0x28(%eax,%edx,4),%esi -80104e7c: 85 f6 test %esi,%esi -80104e7e: 74 48 je 80104ec8 - if (argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argptr(1, &p, n) < 0) { -80104e80: 83 ec 08 sub $0x8,%esp -80104e83: 8d 45 f0 lea -0x10(%ebp),%eax -80104e86: 50 push %eax -80104e87: 6a 02 push $0x2 -80104e89: e8 f2 fb ff ff call 80104a80 -80104e8e: 83 c4 10 add $0x10,%esp -80104e91: 85 c0 test %eax,%eax -80104e93: 78 33 js 80104ec8 -80104e95: 83 ec 04 sub $0x4,%esp -80104e98: ff 75 f0 push -0x10(%ebp) -80104e9b: 53 push %ebx -80104e9c: 6a 01 push $0x1 -80104e9e: e8 2d fc ff ff call 80104ad0 -80104ea3: 83 c4 10 add $0x10,%esp -80104ea6: 85 c0 test %eax,%eax -80104ea8: 78 1e js 80104ec8 - return fileread(f, p, n); -80104eaa: 83 ec 04 sub $0x4,%esp -80104ead: ff 75 f0 push -0x10(%ebp) -80104eb0: ff 75 f4 push -0xc(%ebp) -80104eb3: 56 push %esi -80104eb4: e8 87 c2 ff ff call 80101140 -80104eb9: 83 c4 10 add $0x10,%esp -} -80104ebc: 8d 65 f8 lea -0x8(%ebp),%esp -80104ebf: 5b pop %ebx -80104ec0: 5e pop %esi -80104ec1: 5d pop %ebp -80104ec2: c3 ret -80104ec3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -80104ec7: 90 nop - return -1; -80104ec8: b8 ff ff ff ff mov $0xffffffff,%eax -80104ecd: eb ed jmp 80104ebc -80104ecf: 90 nop - -80104ed0 : -int sys_write(void) { -80104ed0: 55 push %ebp -80104ed1: 89 e5 mov %esp,%ebp -80104ed3: 56 push %esi -80104ed4: 53 push %ebx - if (argint(n, &fd) < 0) { -80104ed5: 8d 5d f4 lea -0xc(%ebp),%ebx -int sys_write(void) { -80104ed8: 83 ec 18 sub $0x18,%esp - if (argint(n, &fd) < 0) { -80104edb: 53 push %ebx -80104edc: 6a 00 push $0x0 -80104ede: e8 9d fb ff ff call 80104a80 -80104ee3: 83 c4 10 add $0x10,%esp -80104ee6: 85 c0 test %eax,%eax -80104ee8: 78 5e js 80104f48 - if (fd < 0 || fd >= NOFILE || (f = myproc()->ofile[fd]) == 0) { -80104eea: 83 7d f4 0f cmpl $0xf,-0xc(%ebp) -80104eee: 77 58 ja 80104f48 -80104ef0: e8 db eb ff ff call 80103ad0 -80104ef5: 8b 55 f4 mov -0xc(%ebp),%edx -80104ef8: 8b 74 90 28 mov 0x28(%eax,%edx,4),%esi -80104efc: 85 f6 test %esi,%esi -80104efe: 74 48 je 80104f48 - if (argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argptr(1, &p, n) < 0) { -80104f00: 83 ec 08 sub $0x8,%esp -80104f03: 8d 45 f0 lea -0x10(%ebp),%eax -80104f06: 50 push %eax -80104f07: 6a 02 push $0x2 -80104f09: e8 72 fb ff ff call 80104a80 -80104f0e: 83 c4 10 add $0x10,%esp -80104f11: 85 c0 test %eax,%eax -80104f13: 78 33 js 80104f48 -80104f15: 83 ec 04 sub $0x4,%esp -80104f18: ff 75 f0 push -0x10(%ebp) -80104f1b: 53 push %ebx -80104f1c: 6a 01 push $0x1 -80104f1e: e8 ad fb ff ff call 80104ad0 -80104f23: 83 c4 10 add $0x10,%esp -80104f26: 85 c0 test %eax,%eax -80104f28: 78 1e js 80104f48 - return filewrite(f, p, n); -80104f2a: 83 ec 04 sub $0x4,%esp -80104f2d: ff 75 f0 push -0x10(%ebp) -80104f30: ff 75 f4 push -0xc(%ebp) -80104f33: 56 push %esi -80104f34: e8 97 c2 ff ff call 801011d0 -80104f39: 83 c4 10 add $0x10,%esp -} -80104f3c: 8d 65 f8 lea -0x8(%ebp),%esp -80104f3f: 5b pop %ebx -80104f40: 5e pop %esi -80104f41: 5d pop %ebp -80104f42: c3 ret -80104f43: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -80104f47: 90 nop - return -1; -80104f48: b8 ff ff ff ff mov $0xffffffff,%eax -80104f4d: eb ed jmp 80104f3c -80104f4f: 90 nop - -80104f50 : -int sys_close(void) { -80104f50: 55 push %ebp -80104f51: 89 e5 mov %esp,%ebp -80104f53: 56 push %esi -80104f54: 53 push %ebx - if (argint(n, &fd) < 0) { -80104f55: 8d 45 f4 lea -0xc(%ebp),%eax -int sys_close(void) { -80104f58: 83 ec 18 sub $0x18,%esp - if (argint(n, &fd) < 0) { -80104f5b: 50 push %eax -80104f5c: 6a 00 push $0x0 -80104f5e: e8 1d fb ff ff call 80104a80 -80104f63: 83 c4 10 add $0x10,%esp -80104f66: 85 c0 test %eax,%eax -80104f68: 78 3e js 80104fa8 - if (fd < 0 || fd >= NOFILE || (f = myproc()->ofile[fd]) == 0) { -80104f6a: 83 7d f4 0f cmpl $0xf,-0xc(%ebp) -80104f6e: 77 38 ja 80104fa8 -80104f70: e8 5b eb ff ff call 80103ad0 -80104f75: 8b 55 f4 mov -0xc(%ebp),%edx -80104f78: 8d 5a 08 lea 0x8(%edx),%ebx -80104f7b: 8b 74 98 08 mov 0x8(%eax,%ebx,4),%esi -80104f7f: 85 f6 test %esi,%esi -80104f81: 74 25 je 80104fa8 - myproc()->ofile[fd] = 0; -80104f83: e8 48 eb ff ff call 80103ad0 - fileclose(f); -80104f88: 83 ec 0c sub $0xc,%esp - myproc()->ofile[fd] = 0; -80104f8b: c7 44 98 08 00 00 00 movl $0x0,0x8(%eax,%ebx,4) -80104f92: 00 - fileclose(f); -80104f93: 56 push %esi -80104f94: e8 77 c0 ff ff call 80101010 - return 0; -80104f99: 83 c4 10 add $0x10,%esp -80104f9c: 31 c0 xor %eax,%eax -} -80104f9e: 8d 65 f8 lea -0x8(%ebp),%esp -80104fa1: 5b pop %ebx -80104fa2: 5e pop %esi -80104fa3: 5d pop %ebp -80104fa4: c3 ret -80104fa5: 8d 76 00 lea 0x0(%esi),%esi - return -1; -80104fa8: b8 ff ff ff ff mov $0xffffffff,%eax -80104fad: eb ef jmp 80104f9e -80104faf: 90 nop - -80104fb0 : -int sys_fstat(void) { -80104fb0: 55 push %ebp -80104fb1: 89 e5 mov %esp,%ebp -80104fb3: 56 push %esi -80104fb4: 53 push %ebx - if (argint(n, &fd) < 0) { -80104fb5: 8d 5d f4 lea -0xc(%ebp),%ebx -int sys_fstat(void) { -80104fb8: 83 ec 18 sub $0x18,%esp - if (argint(n, &fd) < 0) { -80104fbb: 53 push %ebx -80104fbc: 6a 00 push $0x0 -80104fbe: e8 bd fa ff ff call 80104a80 -80104fc3: 83 c4 10 add $0x10,%esp -80104fc6: 85 c0 test %eax,%eax -80104fc8: 78 46 js 80105010 - if (fd < 0 || fd >= NOFILE || (f = myproc()->ofile[fd]) == 0) { -80104fca: 83 7d f4 0f cmpl $0xf,-0xc(%ebp) -80104fce: 77 40 ja 80105010 -80104fd0: e8 fb ea ff ff call 80103ad0 -80104fd5: 8b 55 f4 mov -0xc(%ebp),%edx -80104fd8: 8b 74 90 28 mov 0x28(%eax,%edx,4),%esi -80104fdc: 85 f6 test %esi,%esi -80104fde: 74 30 je 80105010 - if (argfd(0, 0, &f) < 0 || argptr(1, (void*)&st, sizeof(*st)) < 0) { -80104fe0: 83 ec 04 sub $0x4,%esp -80104fe3: 6a 14 push $0x14 -80104fe5: 53 push %ebx -80104fe6: 6a 01 push $0x1 -80104fe8: e8 e3 fa ff ff call 80104ad0 -80104fed: 83 c4 10 add $0x10,%esp -80104ff0: 85 c0 test %eax,%eax -80104ff2: 78 1c js 80105010 - return filestat(f, st); -80104ff4: 83 ec 08 sub $0x8,%esp -80104ff7: ff 75 f4 push -0xc(%ebp) -80104ffa: 56 push %esi -80104ffb: e8 f0 c0 ff ff call 801010f0 -80105000: 83 c4 10 add $0x10,%esp -} -80105003: 8d 65 f8 lea -0x8(%ebp),%esp -80105006: 5b pop %ebx -80105007: 5e pop %esi -80105008: 5d pop %ebp -80105009: c3 ret -8010500a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - return -1; -80105010: b8 ff ff ff ff mov $0xffffffff,%eax -80105015: eb ec jmp 80105003 -80105017: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010501e: 66 90 xchg %ax,%ax - -80105020 : -void cleanupsyslink(struct inode * ip) { -80105020: 55 push %ebp -80105021: 89 e5 mov %esp,%ebp -80105023: 53 push %ebx -80105024: 83 ec 10 sub $0x10,%esp -80105027: 8b 5d 08 mov 0x8(%ebp),%ebx - ilock(ip); -8010502a: 53 push %ebx -8010502b: e8 70 c8 ff ff call 801018a0 - ip->nlink--; -80105030: 66 83 6b 56 01 subw $0x1,0x56(%ebx) - iupdate(ip); -80105035: 89 1c 24 mov %ebx,(%esp) -80105038: e8 b3 c7 ff ff call 801017f0 - iunlockput(ip); -8010503d: 89 1c 24 mov %ebx,(%esp) -80105040: e8 eb ca ff ff call 80101b30 -} -80105045: 8b 5d fc mov -0x4(%ebp),%ebx - end_op(); -80105048: 83 c4 10 add $0x10,%esp -} -8010504b: c9 leave - end_op(); -8010504c: e9 9f de ff ff jmp 80102ef0 -80105051: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80105058: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010505f: 90 nop - -80105060 : -int sys_link(void) { -80105060: 55 push %ebp -80105061: 89 e5 mov %esp,%ebp -80105063: 57 push %edi -80105064: 56 push %esi - if (argstr(0, &old) < 0 || argstr(1, &new) < 0) { -80105065: 8d 45 d4 lea -0x2c(%ebp),%eax -int sys_link(void) { -80105068: 53 push %ebx -80105069: 83 ec 34 sub $0x34,%esp - if (argstr(0, &old) < 0 || argstr(1, &new) < 0) { -8010506c: 50 push %eax -8010506d: 6a 00 push $0x0 -8010506f: e8 cc fa ff ff call 80104b40 -80105074: 83 c4 10 add $0x10,%esp -80105077: 85 c0 test %eax,%eax -80105079: 0f 88 ff 00 00 00 js 8010517e -8010507f: 83 ec 08 sub $0x8,%esp -80105082: 8d 45 d0 lea -0x30(%ebp),%eax -80105085: 50 push %eax -80105086: 6a 01 push $0x1 -80105088: e8 b3 fa ff ff call 80104b40 -8010508d: 83 c4 10 add $0x10,%esp -80105090: 85 c0 test %eax,%eax -80105092: 0f 88 e6 00 00 00 js 8010517e - begin_op(); -80105098: e8 e3 dd ff ff call 80102e80 - if ((ip = namei(old)) == 0) { -8010509d: 83 ec 0c sub $0xc,%esp -801050a0: ff 75 d4 push -0x2c(%ebp) -801050a3: e8 18 d1 ff ff call 801021c0 -801050a8: 83 c4 10 add $0x10,%esp -801050ab: 89 c3 mov %eax,%ebx -801050ad: 85 c0 test %eax,%eax -801050af: 0f 84 e8 00 00 00 je 8010519d - ilock(ip); -801050b5: 83 ec 0c sub $0xc,%esp -801050b8: 50 push %eax -801050b9: e8 e2 c7 ff ff call 801018a0 - if (ip->type == T_DIR) { -801050be: 83 c4 10 add $0x10,%esp -801050c1: 66 83 7b 50 01 cmpw $0x1,0x50(%ebx) -801050c6: 0f 84 b9 00 00 00 je 80105185 - iupdate(ip); -801050cc: 83 ec 0c sub $0xc,%esp - ip->nlink++; -801050cf: 66 83 43 56 01 addw $0x1,0x56(%ebx) - if ((dp = nameiparent(new, name)) == 0) { -801050d4: 8d 7d da lea -0x26(%ebp),%edi - iupdate(ip); -801050d7: 53 push %ebx -801050d8: e8 13 c7 ff ff call 801017f0 - iunlock(ip); -801050dd: 89 1c 24 mov %ebx,(%esp) -801050e0: e8 9b c8 ff ff call 80101980 - if ((dp = nameiparent(new, name)) == 0) { -801050e5: 58 pop %eax -801050e6: 5a pop %edx -801050e7: 57 push %edi -801050e8: ff 75 d0 push -0x30(%ebp) -801050eb: e8 f0 d0 ff ff call 801021e0 -801050f0: 83 c4 10 add $0x10,%esp -801050f3: 89 c6 mov %eax,%esi -801050f5: 85 c0 test %eax,%eax -801050f7: 0f 84 ac 00 00 00 je 801051a9 - ilock(dp); -801050fd: 83 ec 0c sub $0xc,%esp -80105100: 50 push %eax -80105101: e8 9a c7 ff ff call 801018a0 - if (dp->dev != ip->dev || dirlink(dp, name, ip->inum) < 0) { -80105106: 8b 03 mov (%ebx),%eax -80105108: 83 c4 10 add $0x10,%esp -8010510b: 39 06 cmp %eax,(%esi) -8010510d: 75 41 jne 80105150 -8010510f: 83 ec 04 sub $0x4,%esp -80105112: ff 73 04 push 0x4(%ebx) -80105115: 57 push %edi -80105116: 56 push %esi -80105117: e8 e4 cf ff ff call 80102100 -8010511c: 83 c4 10 add $0x10,%esp -8010511f: 85 c0 test %eax,%eax -80105121: 78 2d js 80105150 - iunlockput(dp); -80105123: 83 ec 0c sub $0xc,%esp -80105126: 56 push %esi -80105127: e8 04 ca ff ff call 80101b30 - iput(ip); -8010512c: 89 1c 24 mov %ebx,(%esp) -8010512f: e8 9c c8 ff ff call 801019d0 - end_op(); -80105134: e8 b7 dd ff ff call 80102ef0 - return 0; -80105139: 83 c4 10 add $0x10,%esp -8010513c: 31 c0 xor %eax,%eax -} -8010513e: 8d 65 f4 lea -0xc(%ebp),%esp -80105141: 5b pop %ebx -80105142: 5e pop %esi -80105143: 5f pop %edi -80105144: 5d pop %ebp -80105145: c3 ret -80105146: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010514d: 8d 76 00 lea 0x0(%esi),%esi - iunlockput(dp); -80105150: 83 ec 0c sub $0xc,%esp -80105153: 56 push %esi -80105154: e8 d7 c9 ff ff call 80101b30 - ilock(ip); -80105159: 89 1c 24 mov %ebx,(%esp) -8010515c: e8 3f c7 ff ff call 801018a0 - ip->nlink--; -80105161: 66 83 6b 56 01 subw $0x1,0x56(%ebx) - iupdate(ip); -80105166: 89 1c 24 mov %ebx,(%esp) -80105169: e8 82 c6 ff ff call 801017f0 - iunlockput(ip); -8010516e: 89 1c 24 mov %ebx,(%esp) -80105171: e8 ba c9 ff ff call 80101b30 - end_op(); -80105176: e8 75 dd ff ff call 80102ef0 -} -8010517b: 83 c4 10 add $0x10,%esp - return -1; -8010517e: b8 ff ff ff ff mov $0xffffffff,%eax -} -80105183: eb b9 jmp 8010513e - iunlockput(ip); -80105185: 83 ec 0c sub $0xc,%esp -80105188: 53 push %ebx -80105189: e8 a2 c9 ff ff call 80101b30 - end_op(); -8010518e: e8 5d dd ff ff call 80102ef0 - return -1; -80105193: 83 c4 10 add $0x10,%esp -80105196: b8 ff ff ff ff mov $0xffffffff,%eax -8010519b: eb a1 jmp 8010513e - end_op(); -8010519d: e8 4e dd ff ff call 80102ef0 - return -1; -801051a2: b8 ff ff ff ff mov $0xffffffff,%eax -801051a7: eb 95 jmp 8010513e - ilock(ip); -801051a9: 83 ec 0c sub $0xc,%esp -801051ac: 53 push %ebx -801051ad: eb ad jmp 8010515c -801051af: 90 nop - -801051b0 : -int sys_unlink(void) { -801051b0: 55 push %ebp -801051b1: 89 e5 mov %esp,%ebp -801051b3: 57 push %edi -801051b4: 56 push %esi - if (argstr(0, &path) < 0) { -801051b5: 8d 45 c0 lea -0x40(%ebp),%eax -int sys_unlink(void) { -801051b8: 53 push %ebx -801051b9: 83 ec 54 sub $0x54,%esp - if (argstr(0, &path) < 0) { -801051bc: 50 push %eax -801051bd: 6a 00 push $0x0 -801051bf: e8 7c f9 ff ff call 80104b40 -801051c4: 83 c4 10 add $0x10,%esp -801051c7: 85 c0 test %eax,%eax -801051c9: 0f 88 4c 01 00 00 js 8010531b - begin_op(); -801051cf: e8 ac dc ff ff call 80102e80 - if ((dp = nameiparent(path, name)) == 0) { -801051d4: 8d 5d ca lea -0x36(%ebp),%ebx -801051d7: 83 ec 08 sub $0x8,%esp -801051da: 53 push %ebx -801051db: ff 75 c0 push -0x40(%ebp) -801051de: e8 fd cf ff ff call 801021e0 -801051e3: 83 c4 10 add $0x10,%esp -801051e6: 89 45 b4 mov %eax,-0x4c(%ebp) -801051e9: 85 c0 test %eax,%eax -801051eb: 0f 84 55 01 00 00 je 80105346 - ilock(dp); -801051f1: 83 ec 0c sub $0xc,%esp -801051f4: ff 75 b4 push -0x4c(%ebp) -801051f7: e8 a4 c6 ff ff call 801018a0 - if (namecmp(name, ".") == 0 || namecmp(name, "..") == 0) { -801051fc: 5a pop %edx -801051fd: 59 pop %ecx -801051fe: 68 20 7b 10 80 push $0x80107b20 -80105203: 53 push %ebx -80105204: e8 d7 cb ff ff call 80101de0 -80105209: 83 c4 10 add $0x10,%esp -8010520c: 85 c0 test %eax,%eax -8010520e: 0f 84 2d 01 00 00 je 80105341 -80105214: 83 ec 08 sub $0x8,%esp -80105217: 68 1f 7b 10 80 push $0x80107b1f -8010521c: 53 push %ebx -8010521d: e8 be cb ff ff call 80101de0 -80105222: 83 c4 10 add $0x10,%esp -80105225: 85 c0 test %eax,%eax -80105227: 0f 84 14 01 00 00 je 80105341 - if ((ip = dirlookup(dp, name, &off)) == 0) { -8010522d: 83 ec 04 sub $0x4,%esp -80105230: 8d 45 c4 lea -0x3c(%ebp),%eax -80105233: 50 push %eax -80105234: 53 push %ebx -80105235: ff 75 b4 push -0x4c(%ebp) -80105238: e8 c3 cb ff ff call 80101e00 -8010523d: 83 c4 10 add $0x10,%esp -80105240: 89 c3 mov %eax,%ebx -80105242: 85 c0 test %eax,%eax -80105244: 0f 84 f7 00 00 00 je 80105341 - ilock(ip); -8010524a: 83 ec 0c sub $0xc,%esp -8010524d: 50 push %eax -8010524e: e8 4d c6 ff ff call 801018a0 - if (ip->nlink < 1) { -80105253: 83 c4 10 add $0x10,%esp -80105256: 66 83 7b 56 00 cmpw $0x0,0x56(%ebx) -8010525b: 0f 8e 01 01 00 00 jle 80105362 - if (ip->type == T_DIR && !isdirempty(ip)) { -80105261: 66 83 7b 50 01 cmpw $0x1,0x50(%ebx) -80105266: 8d 7d d8 lea -0x28(%ebp),%edi -80105269: 74 65 je 801052d0 - memset(&de, 0, sizeof(de)); -8010526b: 83 ec 04 sub $0x4,%esp -8010526e: 6a 10 push $0x10 -80105270: 6a 00 push $0x0 -80105272: 57 push %edi -80105273: e8 48 f5 ff ff call 801047c0 - if (writei(dp, (char*)&de, off, sizeof(de)) != sizeof(de)) { -80105278: 6a 10 push $0x10 -8010527a: ff 75 c4 push -0x3c(%ebp) -8010527d: 57 push %edi -8010527e: ff 75 b4 push -0x4c(%ebp) -80105281: e8 2a ca ff ff call 80101cb0 -80105286: 83 c4 20 add $0x20,%esp -80105289: 83 f8 10 cmp $0x10,%eax -8010528c: 0f 85 dd 00 00 00 jne 8010536f - if (ip->type == T_DIR) { -80105292: 66 83 7b 50 01 cmpw $0x1,0x50(%ebx) -80105297: 0f 84 8b 00 00 00 je 80105328 - iunlockput(dp); -8010529d: 83 ec 0c sub $0xc,%esp -801052a0: ff 75 b4 push -0x4c(%ebp) -801052a3: e8 88 c8 ff ff call 80101b30 - ip->nlink--; -801052a8: 66 83 6b 56 01 subw $0x1,0x56(%ebx) - iupdate(ip); -801052ad: 89 1c 24 mov %ebx,(%esp) -801052b0: e8 3b c5 ff ff call 801017f0 - iunlockput(ip); -801052b5: 89 1c 24 mov %ebx,(%esp) -801052b8: e8 73 c8 ff ff call 80101b30 - end_op(); -801052bd: e8 2e dc ff ff call 80102ef0 - return 0; -801052c2: 83 c4 10 add $0x10,%esp -801052c5: 31 c0 xor %eax,%eax -} -801052c7: 8d 65 f4 lea -0xc(%ebp),%esp -801052ca: 5b pop %ebx -801052cb: 5e pop %esi -801052cc: 5f pop %edi -801052cd: 5d pop %ebp -801052ce: c3 ret -801052cf: 90 nop - for (off = 2 * sizeof(de); off < dp->size; off += sizeof(de)) { -801052d0: 83 7b 58 20 cmpl $0x20,0x58(%ebx) -801052d4: 76 95 jbe 8010526b -801052d6: be 20 00 00 00 mov $0x20,%esi -801052db: eb 0b jmp 801052e8 -801052dd: 8d 76 00 lea 0x0(%esi),%esi -801052e0: 83 c6 10 add $0x10,%esi -801052e3: 39 73 58 cmp %esi,0x58(%ebx) -801052e6: 76 83 jbe 8010526b - if (readi(dp, (char*)&de, off, sizeof(de)) != sizeof(de)) { -801052e8: 6a 10 push $0x10 -801052ea: 56 push %esi -801052eb: 57 push %edi -801052ec: 53 push %ebx -801052ed: e8 be c8 ff ff call 80101bb0 -801052f2: 83 c4 10 add $0x10,%esp -801052f5: 83 f8 10 cmp $0x10,%eax -801052f8: 75 5b jne 80105355 - if (de.inum != 0) { -801052fa: 66 83 7d d8 00 cmpw $0x0,-0x28(%ebp) -801052ff: 74 df je 801052e0 - iunlockput(ip); -80105301: 83 ec 0c sub $0xc,%esp -80105304: 53 push %ebx -80105305: e8 26 c8 ff ff call 80101b30 - iunlockput(dp); -8010530a: 58 pop %eax -8010530b: ff 75 b4 push -0x4c(%ebp) -8010530e: e8 1d c8 ff ff call 80101b30 - end_op(); -80105313: e8 d8 db ff ff call 80102ef0 - return -1; -80105318: 83 c4 10 add $0x10,%esp -8010531b: b8 ff ff ff ff mov $0xffffffff,%eax -80105320: eb a5 jmp 801052c7 -80105322: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - dp->nlink--; -80105328: 8b 45 b4 mov -0x4c(%ebp),%eax - iupdate(dp); -8010532b: 83 ec 0c sub $0xc,%esp - dp->nlink--; -8010532e: 66 83 68 56 01 subw $0x1,0x56(%eax) - iupdate(dp); -80105333: 50 push %eax -80105334: e8 b7 c4 ff ff call 801017f0 -80105339: 83 c4 10 add $0x10,%esp -8010533c: e9 5c ff ff ff jmp 8010529d - iunlockput(dp); -80105341: 83 ec 0c sub $0xc,%esp -80105344: eb c5 jmp 8010530b - end_op(); -80105346: e8 a5 db ff ff call 80102ef0 - return -1; -8010534b: b8 ff ff ff ff mov $0xffffffff,%eax -80105350: e9 72 ff ff ff jmp 801052c7 - panic("isdirempty: readi"); -80105355: 83 ec 0c sub $0xc,%esp -80105358: 68 44 7b 10 80 push $0x80107b44 -8010535d: e8 2e b0 ff ff call 80100390 - panic("unlink: nlink < 1"); -80105362: 83 ec 0c sub $0xc,%esp -80105365: 68 32 7b 10 80 push $0x80107b32 -8010536a: e8 21 b0 ff ff call 80100390 - panic("unlink: writei"); -8010536f: 83 ec 0c sub $0xc,%esp -80105372: 68 56 7b 10 80 push $0x80107b56 -80105377: e8 14 b0 ff ff call 80100390 -8010537c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -80105380 : - -int sys_open(void) { -80105380: 55 push %ebp -80105381: 89 e5 mov %esp,%ebp -80105383: 57 push %edi -80105384: 56 push %esi - char *path; - int fd, omode; - struct file *f; - struct inode *ip; - - if (argstr(0, &path) < 0 || argint(1, &omode) < 0) { -80105385: 8d 45 e0 lea -0x20(%ebp),%eax -int sys_open(void) { -80105388: 53 push %ebx -80105389: 83 ec 24 sub $0x24,%esp - if (argstr(0, &path) < 0 || argint(1, &omode) < 0) { -8010538c: 50 push %eax -8010538d: 6a 00 push $0x0 -8010538f: e8 ac f7 ff ff call 80104b40 -80105394: 83 c4 10 add $0x10,%esp -80105397: 85 c0 test %eax,%eax -80105399: 0f 88 8e 00 00 00 js 8010542d -8010539f: 83 ec 08 sub $0x8,%esp -801053a2: 8d 45 e4 lea -0x1c(%ebp),%eax -801053a5: 50 push %eax -801053a6: 6a 01 push $0x1 -801053a8: e8 d3 f6 ff ff call 80104a80 -801053ad: 83 c4 10 add $0x10,%esp -801053b0: 85 c0 test %eax,%eax -801053b2: 78 79 js 8010542d - return -1; - } - - begin_op(); -801053b4: e8 c7 da ff ff call 80102e80 - - if (omode & O_CREATE) { -801053b9: f6 45 e5 02 testb $0x2,-0x1b(%ebp) -801053bd: 75 79 jne 80105438 - end_op(); - return -1; - } - } - else { - if ((ip = namei(path)) == 0) { -801053bf: 83 ec 0c sub $0xc,%esp -801053c2: ff 75 e0 push -0x20(%ebp) -801053c5: e8 f6 cd ff ff call 801021c0 -801053ca: 83 c4 10 add $0x10,%esp -801053cd: 89 c6 mov %eax,%esi -801053cf: 85 c0 test %eax,%eax -801053d1: 0f 84 7e 00 00 00 je 80105455 - end_op(); - return -1; - } - ilock(ip); -801053d7: 83 ec 0c sub $0xc,%esp -801053da: 50 push %eax -801053db: e8 c0 c4 ff ff call 801018a0 - if (ip->type == T_DIR && omode != O_RDONLY) { -801053e0: 83 c4 10 add $0x10,%esp -801053e3: 66 83 7e 50 01 cmpw $0x1,0x50(%esi) -801053e8: 0f 84 c2 00 00 00 je 801054b0 - end_op(); - return -1; - } - } - - if ((f = filealloc()) == 0 || (fd = fdalloc(f)) < 0) { -801053ee: e8 5d bb ff ff call 80100f50 -801053f3: 89 c7 mov %eax,%edi -801053f5: 85 c0 test %eax,%eax -801053f7: 74 23 je 8010541c - struct proc *curproc = myproc(); -801053f9: e8 d2 e6 ff ff call 80103ad0 - for (fd = 0; fd < NOFILE; fd++) { -801053fe: 31 db xor %ebx,%ebx - if (curproc->ofile[fd] == 0) { -80105400: 8b 54 98 28 mov 0x28(%eax,%ebx,4),%edx -80105404: 85 d2 test %edx,%edx -80105406: 74 60 je 80105468 - for (fd = 0; fd < NOFILE; fd++) { -80105408: 83 c3 01 add $0x1,%ebx -8010540b: 83 fb 10 cmp $0x10,%ebx -8010540e: 75 f0 jne 80105400 - if (f) { - fileclose(f); -80105410: 83 ec 0c sub $0xc,%esp -80105413: 57 push %edi -80105414: e8 f7 bb ff ff call 80101010 -80105419: 83 c4 10 add $0x10,%esp - } - iunlockput(ip); -8010541c: 83 ec 0c sub $0xc,%esp -8010541f: 56 push %esi -80105420: e8 0b c7 ff ff call 80101b30 - end_op(); -80105425: e8 c6 da ff ff call 80102ef0 - return -1; -8010542a: 83 c4 10 add $0x10,%esp -8010542d: bb ff ff ff ff mov $0xffffffff,%ebx -80105432: eb 6d jmp 801054a1 -80105434: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - ip = create(path, T_FILE, 0, 0); -80105438: 83 ec 0c sub $0xc,%esp -8010543b: 8b 45 e0 mov -0x20(%ebp),%eax -8010543e: 31 c9 xor %ecx,%ecx -80105440: ba 02 00 00 00 mov $0x2,%edx -80105445: 6a 00 push $0x0 -80105447: e8 e4 f7 ff ff call 80104c30 - if (ip == 0) { -8010544c: 83 c4 10 add $0x10,%esp - ip = create(path, T_FILE, 0, 0); -8010544f: 89 c6 mov %eax,%esi - if (ip == 0) { -80105451: 85 c0 test %eax,%eax -80105453: 75 99 jne 801053ee - end_op(); -80105455: e8 96 da ff ff call 80102ef0 - return -1; -8010545a: bb ff ff ff ff mov $0xffffffff,%ebx -8010545f: eb 40 jmp 801054a1 -80105461: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - } - iunlock(ip); -80105468: 83 ec 0c sub $0xc,%esp - curproc->ofile[fd] = f; -8010546b: 89 7c 98 28 mov %edi,0x28(%eax,%ebx,4) - iunlock(ip); -8010546f: 56 push %esi -80105470: e8 0b c5 ff ff call 80101980 - end_op(); -80105475: e8 76 da ff ff call 80102ef0 - - f->type = FD_INODE; -8010547a: c7 07 02 00 00 00 movl $0x2,(%edi) - f->ip = ip; - f->off = 0; - f->readable = !(omode & O_WRONLY); -80105480: 8b 55 e4 mov -0x1c(%ebp),%edx - f->writable = (omode & O_WRONLY) || (omode & O_RDWR); -80105483: 83 c4 10 add $0x10,%esp - f->ip = ip; -80105486: 89 77 10 mov %esi,0x10(%edi) - f->readable = !(omode & O_WRONLY); -80105489: 89 d0 mov %edx,%eax - f->off = 0; -8010548b: c7 47 14 00 00 00 00 movl $0x0,0x14(%edi) - f->readable = !(omode & O_WRONLY); -80105492: f7 d0 not %eax -80105494: 83 e0 01 and $0x1,%eax - f->writable = (omode & O_WRONLY) || (omode & O_RDWR); -80105497: 83 e2 03 and $0x3,%edx - f->readable = !(omode & O_WRONLY); -8010549a: 88 47 08 mov %al,0x8(%edi) - f->writable = (omode & O_WRONLY) || (omode & O_RDWR); -8010549d: 0f 95 47 09 setne 0x9(%edi) - return fd; -} -801054a1: 8d 65 f4 lea -0xc(%ebp),%esp -801054a4: 89 d8 mov %ebx,%eax -801054a6: 5b pop %ebx -801054a7: 5e pop %esi -801054a8: 5f pop %edi -801054a9: 5d pop %ebp -801054aa: c3 ret -801054ab: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -801054af: 90 nop - if (ip->type == T_DIR && omode != O_RDONLY) { -801054b0: 8b 4d e4 mov -0x1c(%ebp),%ecx -801054b3: 85 c9 test %ecx,%ecx -801054b5: 0f 84 33 ff ff ff je 801053ee -801054bb: e9 5c ff ff ff jmp 8010541c - -801054c0 : - -int sys_mkdir(void) { -801054c0: 55 push %ebp -801054c1: 89 e5 mov %esp,%ebp -801054c3: 83 ec 18 sub $0x18,%esp - char *path; - struct inode *ip; - - begin_op(); -801054c6: e8 b5 d9 ff ff call 80102e80 - if (argstr(0, &path) < 0 || (ip = create(path, T_DIR, 0, 0)) == 0) { -801054cb: 83 ec 08 sub $0x8,%esp -801054ce: 8d 45 f4 lea -0xc(%ebp),%eax -801054d1: 50 push %eax -801054d2: 6a 00 push $0x0 -801054d4: e8 67 f6 ff ff call 80104b40 -801054d9: 83 c4 10 add $0x10,%esp -801054dc: 85 c0 test %eax,%eax -801054de: 78 30 js 80105510 -801054e0: 83 ec 0c sub $0xc,%esp -801054e3: 8b 45 f4 mov -0xc(%ebp),%eax -801054e6: 31 c9 xor %ecx,%ecx -801054e8: ba 01 00 00 00 mov $0x1,%edx -801054ed: 6a 00 push $0x0 -801054ef: e8 3c f7 ff ff call 80104c30 -801054f4: 83 c4 10 add $0x10,%esp -801054f7: 85 c0 test %eax,%eax -801054f9: 74 15 je 80105510 - end_op(); - return -1; - } - iunlockput(ip); -801054fb: 83 ec 0c sub $0xc,%esp -801054fe: 50 push %eax -801054ff: e8 2c c6 ff ff call 80101b30 - end_op(); -80105504: e8 e7 d9 ff ff call 80102ef0 - return 0; -80105509: 83 c4 10 add $0x10,%esp -8010550c: 31 c0 xor %eax,%eax -} -8010550e: c9 leave -8010550f: c3 ret - end_op(); -80105510: e8 db d9 ff ff call 80102ef0 - return -1; -80105515: b8 ff ff ff ff mov $0xffffffff,%eax -} -8010551a: c9 leave -8010551b: c3 ret -8010551c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -80105520 : - -int sys_mknod(void) { -80105520: 55 push %ebp -80105521: 89 e5 mov %esp,%ebp -80105523: 83 ec 18 sub $0x18,%esp - struct inode *ip; - char *path; - int major, minor; - - begin_op(); -80105526: e8 55 d9 ff ff call 80102e80 - if ((argstr(0, &path)) < 0 || -8010552b: 83 ec 08 sub $0x8,%esp -8010552e: 8d 45 ec lea -0x14(%ebp),%eax -80105531: 50 push %eax -80105532: 6a 00 push $0x0 -80105534: e8 07 f6 ff ff call 80104b40 -80105539: 83 c4 10 add $0x10,%esp -8010553c: 85 c0 test %eax,%eax -8010553e: 78 60 js 801055a0 - argint(1, &major) < 0 || -80105540: 83 ec 08 sub $0x8,%esp -80105543: 8d 45 f0 lea -0x10(%ebp),%eax -80105546: 50 push %eax -80105547: 6a 01 push $0x1 -80105549: e8 32 f5 ff ff call 80104a80 - if ((argstr(0, &path)) < 0 || -8010554e: 83 c4 10 add $0x10,%esp -80105551: 85 c0 test %eax,%eax -80105553: 78 4b js 801055a0 - argint(2, &minor) < 0 || -80105555: 83 ec 08 sub $0x8,%esp -80105558: 8d 45 f4 lea -0xc(%ebp),%eax -8010555b: 50 push %eax -8010555c: 6a 02 push $0x2 -8010555e: e8 1d f5 ff ff call 80104a80 - argint(1, &major) < 0 || -80105563: 83 c4 10 add $0x10,%esp -80105566: 85 c0 test %eax,%eax -80105568: 78 36 js 801055a0 - (ip = create(path, T_DEV, major, minor)) == 0) { -8010556a: 0f bf 45 f4 movswl -0xc(%ebp),%eax -8010556e: 83 ec 0c sub $0xc,%esp -80105571: 0f bf 4d f0 movswl -0x10(%ebp),%ecx -80105575: ba 03 00 00 00 mov $0x3,%edx -8010557a: 50 push %eax -8010557b: 8b 45 ec mov -0x14(%ebp),%eax -8010557e: e8 ad f6 ff ff call 80104c30 - argint(2, &minor) < 0 || -80105583: 83 c4 10 add $0x10,%esp -80105586: 85 c0 test %eax,%eax -80105588: 74 16 je 801055a0 - end_op(); - return -1; - } - iunlockput(ip); -8010558a: 83 ec 0c sub $0xc,%esp -8010558d: 50 push %eax -8010558e: e8 9d c5 ff ff call 80101b30 - end_op(); -80105593: e8 58 d9 ff ff call 80102ef0 - return 0; -80105598: 83 c4 10 add $0x10,%esp -8010559b: 31 c0 xor %eax,%eax -} -8010559d: c9 leave -8010559e: c3 ret -8010559f: 90 nop - end_op(); -801055a0: e8 4b d9 ff ff call 80102ef0 - return -1; -801055a5: b8 ff ff ff ff mov $0xffffffff,%eax -} -801055aa: c9 leave -801055ab: c3 ret -801055ac: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -801055b0 : - -int sys_chdir(void) { -801055b0: 55 push %ebp -801055b1: 89 e5 mov %esp,%ebp -801055b3: 56 push %esi -801055b4: 53 push %ebx -801055b5: 83 ec 10 sub $0x10,%esp - char *path; - struct inode *ip; - struct proc *curproc = myproc(); -801055b8: e8 13 e5 ff ff call 80103ad0 -801055bd: 89 c6 mov %eax,%esi - - begin_op(); -801055bf: e8 bc d8 ff ff call 80102e80 - if (argstr(0, &path) < 0 || (ip = namei(path)) == 0) { -801055c4: 83 ec 08 sub $0x8,%esp -801055c7: 8d 45 f4 lea -0xc(%ebp),%eax -801055ca: 50 push %eax -801055cb: 6a 00 push $0x0 -801055cd: e8 6e f5 ff ff call 80104b40 -801055d2: 83 c4 10 add $0x10,%esp -801055d5: 85 c0 test %eax,%eax -801055d7: 78 77 js 80105650 -801055d9: 83 ec 0c sub $0xc,%esp -801055dc: ff 75 f4 push -0xc(%ebp) -801055df: e8 dc cb ff ff call 801021c0 -801055e4: 83 c4 10 add $0x10,%esp -801055e7: 89 c3 mov %eax,%ebx -801055e9: 85 c0 test %eax,%eax -801055eb: 74 63 je 80105650 - end_op(); - return -1; - } - ilock(ip); -801055ed: 83 ec 0c sub $0xc,%esp -801055f0: 50 push %eax -801055f1: e8 aa c2 ff ff call 801018a0 - if (ip->type != T_DIR) { -801055f6: 83 c4 10 add $0x10,%esp -801055f9: 66 83 7b 50 01 cmpw $0x1,0x50(%ebx) -801055fe: 75 30 jne 80105630 - iunlockput(ip); - end_op(); - return -1; - } - iunlock(ip); -80105600: 83 ec 0c sub $0xc,%esp -80105603: 53 push %ebx -80105604: e8 77 c3 ff ff call 80101980 - iput(curproc->cwd); -80105609: 58 pop %eax -8010560a: ff 76 68 push 0x68(%esi) -8010560d: e8 be c3 ff ff call 801019d0 - end_op(); -80105612: e8 d9 d8 ff ff call 80102ef0 - curproc->cwd = ip; -80105617: 89 5e 68 mov %ebx,0x68(%esi) - return 0; -8010561a: 83 c4 10 add $0x10,%esp -8010561d: 31 c0 xor %eax,%eax -} -8010561f: 8d 65 f8 lea -0x8(%ebp),%esp -80105622: 5b pop %ebx -80105623: 5e pop %esi -80105624: 5d pop %ebp -80105625: c3 ret -80105626: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010562d: 8d 76 00 lea 0x0(%esi),%esi - iunlockput(ip); -80105630: 83 ec 0c sub $0xc,%esp -80105633: 53 push %ebx -80105634: e8 f7 c4 ff ff call 80101b30 - end_op(); -80105639: e8 b2 d8 ff ff call 80102ef0 - return -1; -8010563e: 83 c4 10 add $0x10,%esp -80105641: b8 ff ff ff ff mov $0xffffffff,%eax -80105646: eb d7 jmp 8010561f -80105648: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010564f: 90 nop - end_op(); -80105650: e8 9b d8 ff ff call 80102ef0 - return -1; -80105655: b8 ff ff ff ff mov $0xffffffff,%eax -8010565a: eb c3 jmp 8010561f -8010565c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -80105660 : - -int sys_exec(void) { -80105660: 55 push %ebp -80105661: 89 e5 mov %esp,%ebp -80105663: 57 push %edi -80105664: 56 push %esi - char *path, *argv[MAXARG]; - int i; - uint uargv, uarg; - - if (argstr(0, &path) < 0 || argint(1, (int*)&uargv) < 0) { -80105665: 8d 85 5c ff ff ff lea -0xa4(%ebp),%eax -int sys_exec(void) { -8010566b: 53 push %ebx -8010566c: 81 ec a4 00 00 00 sub $0xa4,%esp - if (argstr(0, &path) < 0 || argint(1, (int*)&uargv) < 0) { -80105672: 50 push %eax -80105673: 6a 00 push $0x0 -80105675: e8 c6 f4 ff ff call 80104b40 -8010567a: 83 c4 10 add $0x10,%esp -8010567d: 85 c0 test %eax,%eax -8010567f: 0f 88 87 00 00 00 js 8010570c -80105685: 83 ec 08 sub $0x8,%esp -80105688: 8d 85 60 ff ff ff lea -0xa0(%ebp),%eax -8010568e: 50 push %eax -8010568f: 6a 01 push $0x1 -80105691: e8 ea f3 ff ff call 80104a80 -80105696: 83 c4 10 add $0x10,%esp -80105699: 85 c0 test %eax,%eax -8010569b: 78 6f js 8010570c - return -1; - } - memset(argv, 0, sizeof(argv)); -8010569d: 83 ec 04 sub $0x4,%esp -801056a0: 8d b5 68 ff ff ff lea -0x98(%ebp),%esi - for (i = 0;; i++) { -801056a6: 31 db xor %ebx,%ebx - memset(argv, 0, sizeof(argv)); -801056a8: 68 80 00 00 00 push $0x80 -801056ad: 6a 00 push $0x0 -801056af: 56 push %esi -801056b0: e8 0b f1 ff ff call 801047c0 -801056b5: 83 c4 10 add $0x10,%esp -801056b8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801056bf: 90 nop - if (i >= NELEM(argv)) { - return -1; - } - if (fetchint(uargv + 4 * i, (int*)&uarg) < 0) { -801056c0: 83 ec 08 sub $0x8,%esp -801056c3: 8d 85 64 ff ff ff lea -0x9c(%ebp),%eax -801056c9: 8d 3c 9d 00 00 00 00 lea 0x0(,%ebx,4),%edi -801056d0: 50 push %eax -801056d1: 8b 85 60 ff ff ff mov -0xa0(%ebp),%eax -801056d7: 01 f8 add %edi,%eax -801056d9: 50 push %eax -801056da: e8 11 f3 ff ff call 801049f0 -801056df: 83 c4 10 add $0x10,%esp -801056e2: 85 c0 test %eax,%eax -801056e4: 78 26 js 8010570c - return -1; - } - if (uarg == 0) { -801056e6: 8b 85 64 ff ff ff mov -0x9c(%ebp),%eax -801056ec: 85 c0 test %eax,%eax -801056ee: 74 30 je 80105720 - argv[i] = 0; - break; - } - if (fetchstr(uarg, &argv[i]) < 0) { -801056f0: 83 ec 08 sub $0x8,%esp -801056f3: 8d 14 3e lea (%esi,%edi,1),%edx -801056f6: 52 push %edx -801056f7: 50 push %eax -801056f8: e8 33 f3 ff ff call 80104a30 -801056fd: 83 c4 10 add $0x10,%esp -80105700: 85 c0 test %eax,%eax -80105702: 78 08 js 8010570c - for (i = 0;; i++) { -80105704: 83 c3 01 add $0x1,%ebx - if (i >= NELEM(argv)) { -80105707: 83 fb 20 cmp $0x20,%ebx -8010570a: 75 b4 jne 801056c0 - return -1; - } - } - return exec(path, argv); -} -8010570c: 8d 65 f4 lea -0xc(%ebp),%esp - return -1; -8010570f: b8 ff ff ff ff mov $0xffffffff,%eax -} -80105714: 5b pop %ebx -80105715: 5e pop %esi -80105716: 5f pop %edi -80105717: 5d pop %ebp -80105718: c3 ret -80105719: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - argv[i] = 0; -80105720: c7 84 9d 68 ff ff ff movl $0x0,-0x98(%ebp,%ebx,4) -80105727: 00 00 00 00 - return exec(path, argv); -8010572b: 83 ec 08 sub $0x8,%esp -8010572e: 56 push %esi -8010572f: ff b5 5c ff ff ff push -0xa4(%ebp) -80105735: e8 36 b4 ff ff call 80100b70 -8010573a: 83 c4 10 add $0x10,%esp -} -8010573d: 8d 65 f4 lea -0xc(%ebp),%esp -80105740: 5b pop %ebx -80105741: 5e pop %esi -80105742: 5f pop %edi -80105743: 5d pop %ebp -80105744: c3 ret -80105745: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010574c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -80105750 : - -int sys_pipe(void) { -80105750: 55 push %ebp -80105751: 89 e5 mov %esp,%ebp -80105753: 57 push %edi -80105754: 56 push %esi - int *fd; - struct file *rf, *wf; - int fd0, fd1; - - if (argptr(0, (void*)&fd, 2 * sizeof(fd[0])) < 0) { -80105755: 8d 45 dc lea -0x24(%ebp),%eax -int sys_pipe(void) { -80105758: 53 push %ebx -80105759: 83 ec 20 sub $0x20,%esp - if (argptr(0, (void*)&fd, 2 * sizeof(fd[0])) < 0) { -8010575c: 6a 08 push $0x8 -8010575e: 50 push %eax -8010575f: 6a 00 push $0x0 -80105761: e8 6a f3 ff ff call 80104ad0 -80105766: 83 c4 10 add $0x10,%esp -80105769: 85 c0 test %eax,%eax -8010576b: 78 4a js 801057b7 - return -1; - } - if (pipealloc(&rf, &wf) < 0) { -8010576d: 83 ec 08 sub $0x8,%esp -80105770: 8d 45 e4 lea -0x1c(%ebp),%eax -80105773: 50 push %eax -80105774: 8d 45 e0 lea -0x20(%ebp),%eax -80105777: 50 push %eax -80105778: e8 23 de ff ff call 801035a0 -8010577d: 83 c4 10 add $0x10,%esp -80105780: 85 c0 test %eax,%eax -80105782: 78 33 js 801057b7 - return -1; - } - fd0 = -1; - if ((fd0 = fdalloc(rf)) < 0 || (fd1 = fdalloc(wf)) < 0) { -80105784: 8b 7d e0 mov -0x20(%ebp),%edi - for (fd = 0; fd < NOFILE; fd++) { -80105787: 31 db xor %ebx,%ebx - struct proc *curproc = myproc(); -80105789: e8 42 e3 ff ff call 80103ad0 - for (fd = 0; fd < NOFILE; fd++) { -8010578e: 66 90 xchg %ax,%ax - if (curproc->ofile[fd] == 0) { -80105790: 8b 74 98 28 mov 0x28(%eax,%ebx,4),%esi -80105794: 85 f6 test %esi,%esi -80105796: 74 28 je 801057c0 - for (fd = 0; fd < NOFILE; fd++) { -80105798: 83 c3 01 add $0x1,%ebx -8010579b: 83 fb 10 cmp $0x10,%ebx -8010579e: 75 f0 jne 80105790 - if (fd0 >= 0) { - myproc()->ofile[fd0] = 0; - } - fileclose(rf); -801057a0: 83 ec 0c sub $0xc,%esp -801057a3: ff 75 e0 push -0x20(%ebp) -801057a6: e8 65 b8 ff ff call 80101010 - fileclose(wf); -801057ab: 58 pop %eax -801057ac: ff 75 e4 push -0x1c(%ebp) -801057af: e8 5c b8 ff ff call 80101010 - return -1; -801057b4: 83 c4 10 add $0x10,%esp -801057b7: b8 ff ff ff ff mov $0xffffffff,%eax -801057bc: eb 53 jmp 80105811 -801057be: 66 90 xchg %ax,%ax - curproc->ofile[fd] = f; -801057c0: 8d 73 08 lea 0x8(%ebx),%esi -801057c3: 89 7c b0 08 mov %edi,0x8(%eax,%esi,4) - if ((fd0 = fdalloc(rf)) < 0 || (fd1 = fdalloc(wf)) < 0) { -801057c7: 8b 7d e4 mov -0x1c(%ebp),%edi - struct proc *curproc = myproc(); -801057ca: e8 01 e3 ff ff call 80103ad0 - for (fd = 0; fd < NOFILE; fd++) { -801057cf: 31 d2 xor %edx,%edx -801057d1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - if (curproc->ofile[fd] == 0) { -801057d8: 8b 4c 90 28 mov 0x28(%eax,%edx,4),%ecx -801057dc: 85 c9 test %ecx,%ecx -801057de: 74 20 je 80105800 - for (fd = 0; fd < NOFILE; fd++) { -801057e0: 83 c2 01 add $0x1,%edx -801057e3: 83 fa 10 cmp $0x10,%edx -801057e6: 75 f0 jne 801057d8 - myproc()->ofile[fd0] = 0; -801057e8: e8 e3 e2 ff ff call 80103ad0 -801057ed: c7 44 b0 08 00 00 00 movl $0x0,0x8(%eax,%esi,4) -801057f4: 00 -801057f5: eb a9 jmp 801057a0 -801057f7: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801057fe: 66 90 xchg %ax,%ax - curproc->ofile[fd] = f; -80105800: 89 7c 90 28 mov %edi,0x28(%eax,%edx,4) - } - fd[0] = fd0; -80105804: 8b 45 dc mov -0x24(%ebp),%eax -80105807: 89 18 mov %ebx,(%eax) - fd[1] = fd1; -80105809: 8b 45 dc mov -0x24(%ebp),%eax -8010580c: 89 50 04 mov %edx,0x4(%eax) - return 0; -8010580f: 31 c0 xor %eax,%eax -} -80105811: 8d 65 f4 lea -0xc(%ebp),%esp -80105814: 5b pop %ebx -80105815: 5e pop %esi -80105816: 5f pop %edi -80105817: 5d pop %ebp -80105818: c3 ret -80105819: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -80105820 : - -int sys_getch(void) { - return consoleget(); -80105820: e9 6b b0 ff ff jmp 80100890 -80105825: 66 90 xchg %ax,%ax -80105827: 66 90 xchg %ax,%ax -80105829: 66 90 xchg %ax,%ax -8010582b: 66 90 xchg %ax,%ax -8010582d: 66 90 xchg %ax,%ax -8010582f: 90 nop - -80105830 : -#include "mmu.h" -#include "proc.h" - -int sys_fork(void) -{ - return fork(); -80105830: e9 3b e4 ff ff jmp 80103c70 -80105835: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010583c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -80105840 : -} - -int sys_exit(void) -{ -80105840: 55 push %ebp -80105841: 89 e5 mov %esp,%ebp -80105843: 83 ec 08 sub $0x8,%esp - exit(); -80105846: e8 a5 e6 ff ff call 80103ef0 - return 0; // not reached -} -8010584b: 31 c0 xor %eax,%eax -8010584d: c9 leave -8010584e: c3 ret -8010584f: 90 nop - -80105850 : - -int sys_wait(void) -{ - return wait(); -80105850: e9 cb e7 ff ff jmp 80104020 -80105855: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010585c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -80105860 : -} - -int sys_kill(void) -{ -80105860: 55 push %ebp -80105861: 89 e5 mov %esp,%ebp -80105863: 83 ec 20 sub $0x20,%esp - int pid; - - if (argint(0, &pid) < 0) -80105866: 8d 45 f4 lea -0xc(%ebp),%eax -80105869: 50 push %eax -8010586a: 6a 00 push $0x0 -8010586c: e8 0f f2 ff ff call 80104a80 -80105871: 83 c4 10 add $0x10,%esp -80105874: 85 c0 test %eax,%eax -80105876: 78 18 js 80105890 - { - return -1; - } - return kill(pid); -80105878: 83 ec 0c sub $0xc,%esp -8010587b: ff 75 f4 push -0xc(%ebp) -8010587e: e8 3d ea ff ff call 801042c0 -80105883: 83 c4 10 add $0x10,%esp -} -80105886: c9 leave -80105887: c3 ret -80105888: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010588f: 90 nop -80105890: c9 leave - return -1; -80105891: b8 ff ff ff ff mov $0xffffffff,%eax -} -80105896: c3 ret -80105897: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010589e: 66 90 xchg %ax,%ax - -801058a0 : - -int sys_getpid(void) -{ -801058a0: 55 push %ebp -801058a1: 89 e5 mov %esp,%ebp -801058a3: 83 ec 08 sub $0x8,%esp - return myproc()->pid; -801058a6: e8 25 e2 ff ff call 80103ad0 -801058ab: 8b 40 10 mov 0x10(%eax),%eax -} -801058ae: c9 leave -801058af: c3 ret - -801058b0 : - -int sys_sbrk(void) -{ -801058b0: 55 push %ebp -801058b1: 89 e5 mov %esp,%ebp -801058b3: 53 push %ebx - int addr; - int n; - - if (argint(0, &n) < 0) -801058b4: 8d 45 f4 lea -0xc(%ebp),%eax -{ -801058b7: 83 ec 1c sub $0x1c,%esp - if (argint(0, &n) < 0) -801058ba: 50 push %eax -801058bb: 6a 00 push $0x0 -801058bd: e8 be f1 ff ff call 80104a80 -801058c2: 83 c4 10 add $0x10,%esp -801058c5: 85 c0 test %eax,%eax -801058c7: 78 27 js 801058f0 - { - return -1; - } - addr = myproc()->sz; -801058c9: e8 02 e2 ff ff call 80103ad0 - if (growproc(n) < 0) -801058ce: 83 ec 0c sub $0xc,%esp - addr = myproc()->sz; -801058d1: 8b 18 mov (%eax),%ebx - if (growproc(n) < 0) -801058d3: ff 75 f4 push -0xc(%ebp) -801058d6: e8 15 e3 ff ff call 80103bf0 -801058db: 83 c4 10 add $0x10,%esp -801058de: 85 c0 test %eax,%eax -801058e0: 78 0e js 801058f0 - { - return -1; - } - return addr; -} -801058e2: 89 d8 mov %ebx,%eax -801058e4: 8b 5d fc mov -0x4(%ebp),%ebx -801058e7: c9 leave -801058e8: c3 ret -801058e9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - return -1; -801058f0: bb ff ff ff ff mov $0xffffffff,%ebx -801058f5: eb eb jmp 801058e2 -801058f7: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801058fe: 66 90 xchg %ax,%ax - -80105900 : - -int sys_sleep(void) -{ -80105900: 55 push %ebp -80105901: 89 e5 mov %esp,%ebp -80105903: 53 push %ebx - int n; - uint ticks0; - - if (argint(0, &n) < 0) -80105904: 8d 45 f4 lea -0xc(%ebp),%eax -{ -80105907: 83 ec 1c sub $0x1c,%esp - if (argint(0, &n) < 0) -8010590a: 50 push %eax -8010590b: 6a 00 push $0x0 -8010590d: e8 6e f1 ff ff call 80104a80 -80105912: 83 c4 10 add $0x10,%esp -80105915: 85 c0 test %eax,%eax -80105917: 0f 88 8a 00 00 00 js 801059a7 - { - return -1; - } - acquire(&tickslock); -8010591d: 83 ec 0c sub $0xc,%esp -80105920: 68 a0 3c 11 80 push $0x80113ca0 -80105925: e8 d6 ed ff ff call 80104700 - ticks0 = ticks; - while (ticks - ticks0 < n) -8010592a: 8b 55 f4 mov -0xc(%ebp),%edx - ticks0 = ticks; -8010592d: 8b 1d 80 3c 11 80 mov 0x80113c80,%ebx - while (ticks - ticks0 < n) -80105933: 83 c4 10 add $0x10,%esp -80105936: 85 d2 test %edx,%edx -80105938: 75 27 jne 80105961 -8010593a: eb 54 jmp 80105990 -8010593c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - if (myproc()->killed) - { - release(&tickslock); - return -1; - } - sleep(&ticks, &tickslock); -80105940: 83 ec 08 sub $0x8,%esp -80105943: 68 a0 3c 11 80 push $0x80113ca0 -80105948: 68 80 3c 11 80 push $0x80113c80 -8010594d: e8 4e e8 ff ff call 801041a0 - while (ticks - ticks0 < n) -80105952: a1 80 3c 11 80 mov 0x80113c80,%eax -80105957: 83 c4 10 add $0x10,%esp -8010595a: 29 d8 sub %ebx,%eax -8010595c: 3b 45 f4 cmp -0xc(%ebp),%eax -8010595f: 73 2f jae 80105990 - if (myproc()->killed) -80105961: e8 6a e1 ff ff call 80103ad0 -80105966: 8b 40 24 mov 0x24(%eax),%eax -80105969: 85 c0 test %eax,%eax -8010596b: 74 d3 je 80105940 - release(&tickslock); -8010596d: 83 ec 0c sub $0xc,%esp -80105970: 68 a0 3c 11 80 push $0x80113ca0 -80105975: e8 26 ed ff ff call 801046a0 - } - release(&tickslock); - return 0; -} -8010597a: 8b 5d fc mov -0x4(%ebp),%ebx - return -1; -8010597d: 83 c4 10 add $0x10,%esp -80105980: b8 ff ff ff ff mov $0xffffffff,%eax -} -80105985: c9 leave -80105986: c3 ret -80105987: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010598e: 66 90 xchg %ax,%ax - release(&tickslock); -80105990: 83 ec 0c sub $0xc,%esp -80105993: 68 a0 3c 11 80 push $0x80113ca0 -80105998: e8 03 ed ff ff call 801046a0 - return 0; -8010599d: 83 c4 10 add $0x10,%esp -801059a0: 31 c0 xor %eax,%eax -} -801059a2: 8b 5d fc mov -0x4(%ebp),%ebx -801059a5: c9 leave -801059a6: c3 ret - return -1; -801059a7: b8 ff ff ff ff mov $0xffffffff,%eax -801059ac: eb f4 jmp 801059a2 -801059ae: 66 90 xchg %ax,%ax - -801059b0 : - -// return how many clock tick interrupts have occurred -// since start. -int sys_uptime(void) -{ -801059b0: 55 push %ebp -801059b1: 89 e5 mov %esp,%ebp -801059b3: 53 push %ebx -801059b4: 83 ec 10 sub $0x10,%esp - uint xticks; - - acquire(&tickslock); -801059b7: 68 a0 3c 11 80 push $0x80113ca0 -801059bc: e8 3f ed ff ff call 80104700 - xticks = ticks; -801059c1: 8b 1d 80 3c 11 80 mov 0x80113c80,%ebx - release(&tickslock); -801059c7: c7 04 24 a0 3c 11 80 movl $0x80113ca0,(%esp) -801059ce: e8 cd ec ff ff call 801046a0 - return xticks; -} -801059d3: 89 d8 mov %ebx,%eax -801059d5: 8b 5d fc mov -0x4(%ebp),%ebx -801059d8: c9 leave -801059d9: c3 ret -801059da: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -801059e0 : - -int sys_greeting(void) -{ -801059e0: 55 push %ebp -801059e1: 89 e5 mov %esp,%ebp -801059e3: 83 ec 14 sub $0x14,%esp - cprintf("Hello again\n"); -801059e6: 68 65 7b 10 80 push $0x80107b65 -801059eb: e8 c0 ac ff ff call 801006b0 - return 0; -} -801059f0: 31 c0 xor %eax,%eax -801059f2: c9 leave -801059f3: c3 ret -801059f4: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801059fb: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -801059ff: 90 nop - -80105a00 : - -int sys_shutdown(void) -{ -80105a00: 55 push %ebp -80105a01: 89 e5 mov %esp,%ebp -80105a03: 83 ec 20 sub $0x20,%esp - int restart; - if (argint(0, &restart) < 0) -80105a06: 8d 45 f4 lea -0xc(%ebp),%eax -80105a09: 50 push %eax -80105a0a: 6a 00 push $0x0 -80105a0c: e8 6f f0 ff ff call 80104a80 -80105a11: 83 c4 10 add $0x10,%esp -80105a14: 85 c0 test %eax,%eax -80105a16: 78 2f js 80105a47 - { - return -1; - } - - if (restart == 1) -80105a18: 83 7d f4 01 cmpl $0x1,-0xc(%ebp) -80105a1c: 74 12 je 80105a30 - asm volatile ("out %0,%1" : : "a" (data), "d" (port)); -80105a1e: b8 00 20 00 00 mov $0x2000,%eax -80105a23: ba 04 06 00 00 mov $0x604,%edx -80105a28: 66 ef out %ax,(%dx) - else - { - outw(0x604, 0x2000); - } - return 0; -80105a2a: c9 leave - return 0; -80105a2b: 31 c0 xor %eax,%eax -80105a2d: c3 ret -80105a2e: 66 90 xchg %ax,%ax - asm volatile ("in %1,%0" : "=a" (data) : "d" (port)); -80105a30: ba 64 00 00 00 mov $0x64,%edx -80105a35: 8d 76 00 lea 0x0(%esi),%esi -80105a38: ec in (%dx),%al - while (good & 0x02) { -80105a39: a8 02 test $0x2,%al -80105a3b: 75 fb jne 80105a38 - asm volatile ("out %0,%1" : : "a" (data), "d" (port)); -80105a3d: b8 fe ff ff ff mov $0xfffffffe,%eax -80105a42: ee out %al,(%dx) -80105a43: c9 leave - return 0; -80105a44: 31 c0 xor %eax,%eax -80105a46: c3 ret -80105a47: c9 leave - return -1; -80105a48: b8 ff ff ff ff mov $0xffffffff,%eax -80105a4d: c3 ret - -80105a4e : - - # vectors.S sends all traps here. -.globl alltraps -alltraps: - # Build trap frame. - pushl %ds -80105a4e: 1e push %ds - pushl %es -80105a4f: 06 push %es - pushl %fs -80105a50: 0f a0 push %fs - pushl %gs -80105a52: 0f a8 push %gs - pushal -80105a54: 60 pusha - - # Set up data segments. - movw $(SEG_KDATA<<3), %ax -80105a55: 66 b8 10 00 mov $0x10,%ax - movw %ax, %ds -80105a59: 8e d8 mov %eax,%ds - movw %ax, %es -80105a5b: 8e c0 mov %eax,%es - - # Call trap(tf), where tf=%esp - pushl %esp -80105a5d: 54 push %esp - call trap -80105a5e: e8 cd 00 00 00 call 80105b30 - addl $4, %esp -80105a63: 83 c4 04 add $0x4,%esp - -80105a66 : - - # Return falls through to trapret... -.globl trapret -trapret: - popal -80105a66: 61 popa - popl %gs -80105a67: 0f a9 pop %gs - popl %fs -80105a69: 0f a1 pop %fs - popl %es -80105a6b: 07 pop %es - popl %ds -80105a6c: 1f pop %ds - addl $0x8, %esp # trapno and errcode -80105a6d: 83 c4 08 add $0x8,%esp - iret -80105a70: cf iret -80105a71: 66 90 xchg %ax,%ax -80105a73: 66 90 xchg %ax,%ax -80105a75: 66 90 xchg %ax,%ax -80105a77: 66 90 xchg %ax,%ax -80105a79: 66 90 xchg %ax,%ax -80105a7b: 66 90 xchg %ax,%ax -80105a7d: 66 90 xchg %ax,%ax -80105a7f: 90 nop - -80105a80 : -struct gatedesc idt[256]; -extern uint vectors[]; // in vectors.S: array of 256 entry pointers -struct spinlock tickslock; -uint ticks; - -void tvinit(void) { -80105a80: 55 push %ebp - int i; - - for (i = 0; i < 256; i++) { -80105a81: 31 c0 xor %eax,%eax -void tvinit(void) { -80105a83: 89 e5 mov %esp,%ebp -80105a85: 83 ec 08 sub $0x8,%esp -80105a88: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80105a8f: 90 nop - SETGATE(idt[i], 0, SEG_KCODE << 3, vectors[i], 0); -80105a90: 8b 14 85 08 a0 10 80 mov -0x7fef5ff8(,%eax,4),%edx -80105a97: c7 04 c5 e2 3c 11 80 movl $0x8e000008,-0x7feec31e(,%eax,8) -80105a9e: 08 00 00 8e -80105aa2: 66 89 14 c5 e0 3c 11 mov %dx,-0x7feec320(,%eax,8) -80105aa9: 80 -80105aaa: c1 ea 10 shr $0x10,%edx -80105aad: 66 89 14 c5 e6 3c 11 mov %dx,-0x7feec31a(,%eax,8) -80105ab4: 80 - for (i = 0; i < 256; i++) { -80105ab5: 83 c0 01 add $0x1,%eax -80105ab8: 3d 00 01 00 00 cmp $0x100,%eax -80105abd: 75 d1 jne 80105a90 - } - SETGATE(idt[T_SYSCALL], 1, SEG_KCODE << 3, vectors[T_SYSCALL], DPL_USER); - - initlock(&tickslock, "time"); -80105abf: 83 ec 08 sub $0x8,%esp - SETGATE(idt[T_SYSCALL], 1, SEG_KCODE << 3, vectors[T_SYSCALL], DPL_USER); -80105ac2: a1 08 a1 10 80 mov 0x8010a108,%eax -80105ac7: c7 05 e2 3e 11 80 08 movl $0xef000008,0x80113ee2 -80105ace: 00 00 ef - initlock(&tickslock, "time"); -80105ad1: 68 72 7b 10 80 push $0x80107b72 -80105ad6: 68 a0 3c 11 80 push $0x80113ca0 - SETGATE(idt[T_SYSCALL], 1, SEG_KCODE << 3, vectors[T_SYSCALL], DPL_USER); -80105adb: 66 a3 e0 3e 11 80 mov %ax,0x80113ee0 -80105ae1: c1 e8 10 shr $0x10,%eax -80105ae4: 66 a3 e6 3e 11 80 mov %ax,0x80113ee6 - initlock(&tickslock, "time"); -80105aea: e8 41 ea ff ff call 80104530 -} -80105aef: 83 c4 10 add $0x10,%esp -80105af2: c9 leave -80105af3: c3 ret -80105af4: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80105afb: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -80105aff: 90 nop - -80105b00 : - -void idtinit(void) { -80105b00: 55 push %ebp - pd[0] = size - 1; -80105b01: b8 ff 07 00 00 mov $0x7ff,%eax -80105b06: 89 e5 mov %esp,%ebp -80105b08: 83 ec 10 sub $0x10,%esp -80105b0b: 66 89 45 fa mov %ax,-0x6(%ebp) - pd[1] = (uint)p; -80105b0f: b8 e0 3c 11 80 mov $0x80113ce0,%eax -80105b14: 66 89 45 fc mov %ax,-0x4(%ebp) - pd[2] = (uint)p >> 16; -80105b18: c1 e8 10 shr $0x10,%eax -80105b1b: 66 89 45 fe mov %ax,-0x2(%ebp) - asm volatile ("lidt (%0)" : : "r" (pd)); -80105b1f: 8d 45 fa lea -0x6(%ebp),%eax -80105b22: 0f 01 18 lidtl (%eax) - lidt(idt, sizeof(idt)); -} -80105b25: c9 leave -80105b26: c3 ret -80105b27: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80105b2e: 66 90 xchg %ax,%ax - -80105b30 : - -void trap(struct trapframe *tf) { -80105b30: 55 push %ebp -80105b31: 89 e5 mov %esp,%ebp -80105b33: 57 push %edi -80105b34: 56 push %esi -80105b35: 53 push %ebx -80105b36: 83 ec 1c sub $0x1c,%esp -80105b39: 8b 5d 08 mov 0x8(%ebp),%ebx - if (tf->trapno == T_SYSCALL) { -80105b3c: 8b 43 30 mov 0x30(%ebx),%eax -80105b3f: 83 f8 40 cmp $0x40,%eax -80105b42: 0f 84 68 01 00 00 je 80105cb0 - exit(); - } - return; - } - - switch (tf->trapno) { -80105b48: 83 e8 20 sub $0x20,%eax -80105b4b: 83 f8 1f cmp $0x1f,%eax -80105b4e: 0f 87 8c 00 00 00 ja 80105be0 -80105b54: ff 24 85 18 7c 10 80 jmp *-0x7fef83e8(,%eax,4) -80105b5b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -80105b5f: 90 nop - release(&tickslock); - } - lapiceoi(); - break; - case T_IRQ0 + IRQ_IDE: - ideintr(); -80105b60: e8 fb c7 ff ff call 80102360 - lapiceoi(); -80105b65: e8 c6 ce ff ff call 80102a30 - } - - // 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 (myproc() && myproc()->killed && (tf->cs & 3) == DPL_USER) { -80105b6a: e8 61 df ff ff call 80103ad0 -80105b6f: 85 c0 test %eax,%eax -80105b71: 74 1d je 80105b90 -80105b73: e8 58 df ff ff call 80103ad0 -80105b78: 8b 50 24 mov 0x24(%eax),%edx -80105b7b: 85 d2 test %edx,%edx -80105b7d: 74 11 je 80105b90 -80105b7f: 0f b7 43 3c movzwl 0x3c(%ebx),%eax -80105b83: 83 e0 03 and $0x3,%eax -80105b86: 66 83 f8 03 cmp $0x3,%ax -80105b8a: 0f 84 e8 01 00 00 je 80105d78 - exit(); - } - - // Force process to give up CPU on clock tick. - // If interrupts were on while locks held, would need to check nlock. - if (myproc() && myproc()->state == RUNNING && -80105b90: e8 3b df ff ff call 80103ad0 -80105b95: 85 c0 test %eax,%eax -80105b97: 74 0f je 80105ba8 -80105b99: e8 32 df ff ff call 80103ad0 -80105b9e: 83 78 0c 04 cmpl $0x4,0xc(%eax) -80105ba2: 0f 84 b8 00 00 00 je 80105c60 - tf->trapno == T_IRQ0 + IRQ_TIMER) { - yield(); - } - - // Check if the process has been killed since we yielded - if (myproc() && myproc()->killed && (tf->cs & 3) == DPL_USER) { -80105ba8: e8 23 df ff ff call 80103ad0 -80105bad: 85 c0 test %eax,%eax -80105baf: 74 1d je 80105bce -80105bb1: e8 1a df ff ff call 80103ad0 -80105bb6: 8b 40 24 mov 0x24(%eax),%eax -80105bb9: 85 c0 test %eax,%eax -80105bbb: 74 11 je 80105bce -80105bbd: 0f b7 43 3c movzwl 0x3c(%ebx),%eax -80105bc1: 83 e0 03 and $0x3,%eax -80105bc4: 66 83 f8 03 cmp $0x3,%ax -80105bc8: 0f 84 0f 01 00 00 je 80105cdd - exit(); - } -} -80105bce: 8d 65 f4 lea -0xc(%ebp),%esp -80105bd1: 5b pop %ebx -80105bd2: 5e pop %esi -80105bd3: 5f pop %edi -80105bd4: 5d pop %ebp -80105bd5: c3 ret -80105bd6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80105bdd: 8d 76 00 lea 0x0(%esi),%esi - if (myproc() == 0 || (tf->cs & 3) == 0) { -80105be0: e8 eb de ff ff call 80103ad0 -80105be5: 8b 7b 38 mov 0x38(%ebx),%edi -80105be8: 85 c0 test %eax,%eax -80105bea: 0f 84 a2 01 00 00 je 80105d92 -80105bf0: f6 43 3c 03 testb $0x3,0x3c(%ebx) -80105bf4: 0f 84 98 01 00 00 je 80105d92 - return result; -} - -static inline uint rcr2(void) { - uint val; - asm volatile ("movl %%cr2,%0" : "=r" (val)); -80105bfa: 0f 20 d1 mov %cr2,%ecx -80105bfd: 89 4d d8 mov %ecx,-0x28(%ebp) - cprintf("pid %d %s: trap %d err %d on cpu %d " -80105c00: e8 ab de ff ff call 80103ab0 -80105c05: 8b 73 30 mov 0x30(%ebx),%esi -80105c08: 89 45 dc mov %eax,-0x24(%ebp) -80105c0b: 8b 43 34 mov 0x34(%ebx),%eax -80105c0e: 89 45 e4 mov %eax,-0x1c(%ebp) - myproc()->pid, myproc()->name, tf->trapno, -80105c11: e8 ba de ff ff call 80103ad0 -80105c16: 89 45 e0 mov %eax,-0x20(%ebp) -80105c19: e8 b2 de ff ff call 80103ad0 - cprintf("pid %d %s: trap %d err %d on cpu %d " -80105c1e: 8b 4d d8 mov -0x28(%ebp),%ecx -80105c21: 8b 55 dc mov -0x24(%ebp),%edx -80105c24: 51 push %ecx -80105c25: 57 push %edi -80105c26: 52 push %edx -80105c27: ff 75 e4 push -0x1c(%ebp) -80105c2a: 56 push %esi - myproc()->pid, myproc()->name, tf->trapno, -80105c2b: 8b 75 e0 mov -0x20(%ebp),%esi -80105c2e: 83 c6 6c add $0x6c,%esi - cprintf("pid %d %s: trap %d err %d on cpu %d " -80105c31: 56 push %esi -80105c32: ff 70 10 push 0x10(%eax) -80105c35: 68 d4 7b 10 80 push $0x80107bd4 -80105c3a: e8 71 aa ff ff call 801006b0 - myproc()->killed = 1; -80105c3f: 83 c4 20 add $0x20,%esp -80105c42: e8 89 de ff ff call 80103ad0 -80105c47: c7 40 24 01 00 00 00 movl $0x1,0x24(%eax) - if (myproc() && myproc()->killed && (tf->cs & 3) == DPL_USER) { -80105c4e: e8 7d de ff ff call 80103ad0 -80105c53: 85 c0 test %eax,%eax -80105c55: 0f 85 18 ff ff ff jne 80105b73 -80105c5b: e9 30 ff ff ff jmp 80105b90 - if (myproc() && myproc()->state == RUNNING && -80105c60: 83 7b 30 20 cmpl $0x20,0x30(%ebx) -80105c64: 0f 85 3e ff ff ff jne 80105ba8 - yield(); -80105c6a: e8 e1 e4 ff ff call 80104150 -80105c6f: e9 34 ff ff ff jmp 80105ba8 -80105c74: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - cprintf("cpu%d: spurious interrupt at %x:%x\n", -80105c78: 8b 7b 38 mov 0x38(%ebx),%edi -80105c7b: 0f b7 73 3c movzwl 0x3c(%ebx),%esi -80105c7f: e8 2c de ff ff call 80103ab0 -80105c84: 57 push %edi -80105c85: 56 push %esi -80105c86: 50 push %eax -80105c87: 68 7c 7b 10 80 push $0x80107b7c -80105c8c: e8 1f aa ff ff call 801006b0 - lapiceoi(); -80105c91: e8 9a cd ff ff call 80102a30 - break; -80105c96: 83 c4 10 add $0x10,%esp - if (myproc() && myproc()->killed && (tf->cs & 3) == DPL_USER) { -80105c99: e8 32 de ff ff call 80103ad0 -80105c9e: 85 c0 test %eax,%eax -80105ca0: 0f 85 cd fe ff ff jne 80105b73 -80105ca6: e9 e5 fe ff ff jmp 80105b90 -80105cab: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -80105caf: 90 nop - if (myproc()->killed) { -80105cb0: e8 1b de ff ff call 80103ad0 -80105cb5: 8b 70 24 mov 0x24(%eax),%esi -80105cb8: 85 f6 test %esi,%esi -80105cba: 0f 85 c8 00 00 00 jne 80105d88 - myproc()->tf = tf; -80105cc0: e8 0b de ff ff call 80103ad0 -80105cc5: 89 58 18 mov %ebx,0x18(%eax) - syscall(); -80105cc8: e8 f3 ee ff ff call 80104bc0 - if (myproc()->killed) { -80105ccd: e8 fe dd ff ff call 80103ad0 -80105cd2: 8b 48 24 mov 0x24(%eax),%ecx -80105cd5: 85 c9 test %ecx,%ecx -80105cd7: 0f 84 f1 fe ff ff je 80105bce -} -80105cdd: 8d 65 f4 lea -0xc(%ebp),%esp -80105ce0: 5b pop %ebx -80105ce1: 5e pop %esi -80105ce2: 5f pop %edi -80105ce3: 5d pop %ebp - exit(); -80105ce4: e9 07 e2 ff ff jmp 80103ef0 -80105ce9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - uartintr(); -80105cf0: e8 3b 02 00 00 call 80105f30 - lapiceoi(); -80105cf5: e8 36 cd ff ff call 80102a30 - if (myproc() && myproc()->killed && (tf->cs & 3) == DPL_USER) { -80105cfa: e8 d1 dd ff ff call 80103ad0 -80105cff: 85 c0 test %eax,%eax -80105d01: 0f 85 6c fe ff ff jne 80105b73 -80105d07: e9 84 fe ff ff jmp 80105b90 -80105d0c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - kbdintr(); -80105d10: e8 db cb ff ff call 801028f0 - lapiceoi(); -80105d15: e8 16 cd ff ff call 80102a30 - if (myproc() && myproc()->killed && (tf->cs & 3) == DPL_USER) { -80105d1a: e8 b1 dd ff ff call 80103ad0 -80105d1f: 85 c0 test %eax,%eax -80105d21: 0f 85 4c fe ff ff jne 80105b73 -80105d27: e9 64 fe ff ff jmp 80105b90 -80105d2c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - if (cpuid() == 0) { -80105d30: e8 7b dd ff ff call 80103ab0 -80105d35: 85 c0 test %eax,%eax -80105d37: 0f 85 28 fe ff ff jne 80105b65 - acquire(&tickslock); -80105d3d: 83 ec 0c sub $0xc,%esp -80105d40: 68 a0 3c 11 80 push $0x80113ca0 -80105d45: e8 b6 e9 ff ff call 80104700 - wakeup(&ticks); -80105d4a: c7 04 24 80 3c 11 80 movl $0x80113c80,(%esp) - ticks++; -80105d51: 83 05 80 3c 11 80 01 addl $0x1,0x80113c80 - wakeup(&ticks); -80105d58: e8 03 e5 ff ff call 80104260 - release(&tickslock); -80105d5d: c7 04 24 a0 3c 11 80 movl $0x80113ca0,(%esp) -80105d64: e8 37 e9 ff ff call 801046a0 -80105d69: 83 c4 10 add $0x10,%esp - lapiceoi(); -80105d6c: e9 f4 fd ff ff jmp 80105b65 -80105d71: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - exit(); -80105d78: e8 73 e1 ff ff call 80103ef0 -80105d7d: e9 0e fe ff ff jmp 80105b90 -80105d82: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - exit(); -80105d88: e8 63 e1 ff ff call 80103ef0 -80105d8d: e9 2e ff ff ff jmp 80105cc0 -80105d92: 0f 20 d6 mov %cr2,%esi - cprintf("unexpected trap %d from cpu %d eip %x (cr2=0x%x)\n", -80105d95: e8 16 dd ff ff call 80103ab0 -80105d9a: 83 ec 0c sub $0xc,%esp -80105d9d: 56 push %esi -80105d9e: 57 push %edi -80105d9f: 50 push %eax -80105da0: ff 73 30 push 0x30(%ebx) -80105da3: 68 a0 7b 10 80 push $0x80107ba0 -80105da8: e8 03 a9 ff ff call 801006b0 - panic("trap"); -80105dad: 83 c4 14 add $0x14,%esp -80105db0: 68 77 7b 10 80 push $0x80107b77 -80105db5: e8 d6 a5 ff ff call 80100390 -80105dba: 66 90 xchg %ax,%ax -80105dbc: 66 90 xchg %ax,%ax -80105dbe: 66 90 xchg %ax,%ax - -80105dc0 : - } - outb(COM1 + 0, c); -} - -static int uartgetc(void) { - if (!uart) { -80105dc0: a1 e0 44 11 80 mov 0x801144e0,%eax -80105dc5: 85 c0 test %eax,%eax -80105dc7: 74 17 je 80105de0 - asm volatile ("in %1,%0" : "=a" (data) : "d" (port)); -80105dc9: ba fd 03 00 00 mov $0x3fd,%edx -80105dce: ec in (%dx),%al - return -1; - } - if (!(inb(COM1 + 5) & 0x01)) { -80105dcf: a8 01 test $0x1,%al -80105dd1: 74 0d je 80105de0 -80105dd3: ba f8 03 00 00 mov $0x3f8,%edx -80105dd8: ec in (%dx),%al - return -1; - } - return inb(COM1 + 0); -80105dd9: 0f b6 c0 movzbl %al,%eax -80105ddc: c3 ret -80105ddd: 8d 76 00 lea 0x0(%esi),%esi - return -1; -80105de0: b8 ff ff ff ff mov $0xffffffff,%eax -} -80105de5: c3 ret -80105de6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80105ded: 8d 76 00 lea 0x0(%esi),%esi - -80105df0 : -void uartinit(void) { -80105df0: 55 push %ebp - asm volatile ("out %0,%1" : : "a" (data), "d" (port)); -80105df1: 31 c9 xor %ecx,%ecx -80105df3: 89 c8 mov %ecx,%eax -80105df5: 89 e5 mov %esp,%ebp -80105df7: 57 push %edi -80105df8: bf fa 03 00 00 mov $0x3fa,%edi -80105dfd: 56 push %esi -80105dfe: 89 fa mov %edi,%edx -80105e00: 53 push %ebx -80105e01: 83 ec 1c sub $0x1c,%esp -80105e04: ee out %al,(%dx) -80105e05: be fb 03 00 00 mov $0x3fb,%esi -80105e0a: b8 80 ff ff ff mov $0xffffff80,%eax -80105e0f: 89 f2 mov %esi,%edx -80105e11: ee out %al,(%dx) -80105e12: b8 0c 00 00 00 mov $0xc,%eax -80105e17: ba f8 03 00 00 mov $0x3f8,%edx -80105e1c: ee out %al,(%dx) -80105e1d: bb f9 03 00 00 mov $0x3f9,%ebx -80105e22: 89 c8 mov %ecx,%eax -80105e24: 89 da mov %ebx,%edx -80105e26: ee out %al,(%dx) -80105e27: b8 03 00 00 00 mov $0x3,%eax -80105e2c: 89 f2 mov %esi,%edx -80105e2e: ee out %al,(%dx) -80105e2f: ba fc 03 00 00 mov $0x3fc,%edx -80105e34: 89 c8 mov %ecx,%eax -80105e36: ee out %al,(%dx) -80105e37: b8 01 00 00 00 mov $0x1,%eax -80105e3c: 89 da mov %ebx,%edx -80105e3e: ee out %al,(%dx) - asm volatile ("in %1,%0" : "=a" (data) : "d" (port)); -80105e3f: ba fd 03 00 00 mov $0x3fd,%edx -80105e44: ec in (%dx),%al - if (inb(COM1 + 5) == 0xFF) { -80105e45: 3c ff cmp $0xff,%al -80105e47: 74 78 je 80105ec1 - uart = 1; -80105e49: c7 05 e0 44 11 80 01 movl $0x1,0x801144e0 -80105e50: 00 00 00 -80105e53: 89 fa mov %edi,%edx -80105e55: ec in (%dx),%al -80105e56: ba f8 03 00 00 mov $0x3f8,%edx -80105e5b: ec in (%dx),%al - ioapicenable(IRQ_COM1, 0); -80105e5c: 83 ec 08 sub $0x8,%esp - for (p = "xv6...\n"; *p; p++) { -80105e5f: bf 98 7c 10 80 mov $0x80107c98,%edi -80105e64: be fd 03 00 00 mov $0x3fd,%esi - ioapicenable(IRQ_COM1, 0); -80105e69: 6a 00 push $0x0 -80105e6b: 6a 04 push $0x4 -80105e6d: e8 2e c7 ff ff call 801025a0 - for (p = "xv6...\n"; *p; p++) { -80105e72: c6 45 e7 78 movb $0x78,-0x19(%ebp) - ioapicenable(IRQ_COM1, 0); -80105e76: 83 c4 10 add $0x10,%esp -80105e79: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - if (!uart) { -80105e80: a1 e0 44 11 80 mov 0x801144e0,%eax -80105e85: bb 80 00 00 00 mov $0x80,%ebx -80105e8a: 85 c0 test %eax,%eax -80105e8c: 75 14 jne 80105ea2 -80105e8e: eb 23 jmp 80105eb3 - microdelay(10); -80105e90: 83 ec 0c sub $0xc,%esp -80105e93: 6a 0a push $0xa -80105e95: e8 b6 cb ff ff call 80102a50 - for (i = 0; i < 128 && !(inb(COM1 + 5) & 0x20); i++) { -80105e9a: 83 c4 10 add $0x10,%esp -80105e9d: 83 eb 01 sub $0x1,%ebx -80105ea0: 74 07 je 80105ea9 -80105ea2: 89 f2 mov %esi,%edx -80105ea4: ec in (%dx),%al -80105ea5: a8 20 test $0x20,%al -80105ea7: 74 e7 je 80105e90 - asm volatile ("out %0,%1" : : "a" (data), "d" (port)); -80105ea9: 0f b6 45 e7 movzbl -0x19(%ebp),%eax -80105ead: ba f8 03 00 00 mov $0x3f8,%edx -80105eb2: ee out %al,(%dx) - for (p = "xv6...\n"; *p; p++) { -80105eb3: 0f b6 47 01 movzbl 0x1(%edi),%eax -80105eb7: 83 c7 01 add $0x1,%edi -80105eba: 88 45 e7 mov %al,-0x19(%ebp) -80105ebd: 84 c0 test %al,%al -80105ebf: 75 bf jne 80105e80 -} -80105ec1: 8d 65 f4 lea -0xc(%ebp),%esp -80105ec4: 5b pop %ebx -80105ec5: 5e pop %esi -80105ec6: 5f pop %edi -80105ec7: 5d pop %ebp -80105ec8: c3 ret -80105ec9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -80105ed0 : - if (!uart) { -80105ed0: a1 e0 44 11 80 mov 0x801144e0,%eax -80105ed5: 85 c0 test %eax,%eax -80105ed7: 74 47 je 80105f20 -void uartputc(int c) { -80105ed9: 55 push %ebp -80105eda: 89 e5 mov %esp,%ebp -80105edc: 56 push %esi - asm volatile ("in %1,%0" : "=a" (data) : "d" (port)); -80105edd: be fd 03 00 00 mov $0x3fd,%esi -80105ee2: 53 push %ebx -80105ee3: bb 80 00 00 00 mov $0x80,%ebx -80105ee8: eb 18 jmp 80105f02 -80105eea: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - microdelay(10); -80105ef0: 83 ec 0c sub $0xc,%esp -80105ef3: 6a 0a push $0xa -80105ef5: e8 56 cb ff ff call 80102a50 - for (i = 0; i < 128 && !(inb(COM1 + 5) & 0x20); i++) { -80105efa: 83 c4 10 add $0x10,%esp -80105efd: 83 eb 01 sub $0x1,%ebx -80105f00: 74 07 je 80105f09 -80105f02: 89 f2 mov %esi,%edx -80105f04: ec in (%dx),%al -80105f05: a8 20 test $0x20,%al -80105f07: 74 e7 je 80105ef0 - asm volatile ("out %0,%1" : : "a" (data), "d" (port)); -80105f09: 8b 45 08 mov 0x8(%ebp),%eax -80105f0c: ba f8 03 00 00 mov $0x3f8,%edx -80105f11: ee out %al,(%dx) -} -80105f12: 8d 65 f8 lea -0x8(%ebp),%esp -80105f15: 5b pop %ebx -80105f16: 5e pop %esi -80105f17: 5d pop %ebp -80105f18: c3 ret -80105f19: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80105f20: c3 ret -80105f21: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80105f28: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80105f2f: 90 nop - -80105f30 : - -void uartintr(void) { -80105f30: 55 push %ebp -80105f31: 89 e5 mov %esp,%ebp -80105f33: 83 ec 14 sub $0x14,%esp - consoleintr(uartgetc); -80105f36: 68 c0 5d 10 80 push $0x80105dc0 -80105f3b: e8 a0 a9 ff ff call 801008e0 -} -80105f40: 83 c4 10 add $0x10,%esp -80105f43: c9 leave -80105f44: c3 ret - -80105f45 : -# generated by vectors.pl - do not edit -# handlers -.globl alltraps -.globl vector0 -vector0: - pushl $0 -80105f45: 6a 00 push $0x0 - pushl $0 -80105f47: 6a 00 push $0x0 - jmp alltraps -80105f49: e9 00 fb ff ff jmp 80105a4e - -80105f4e : -.globl vector1 -vector1: - pushl $0 -80105f4e: 6a 00 push $0x0 - pushl $1 -80105f50: 6a 01 push $0x1 - jmp alltraps -80105f52: e9 f7 fa ff ff jmp 80105a4e - -80105f57 : -.globl vector2 -vector2: - pushl $0 -80105f57: 6a 00 push $0x0 - pushl $2 -80105f59: 6a 02 push $0x2 - jmp alltraps -80105f5b: e9 ee fa ff ff jmp 80105a4e - -80105f60 : -.globl vector3 -vector3: - pushl $0 -80105f60: 6a 00 push $0x0 - pushl $3 -80105f62: 6a 03 push $0x3 - jmp alltraps -80105f64: e9 e5 fa ff ff jmp 80105a4e - -80105f69 : -.globl vector4 -vector4: - pushl $0 -80105f69: 6a 00 push $0x0 - pushl $4 -80105f6b: 6a 04 push $0x4 - jmp alltraps -80105f6d: e9 dc fa ff ff jmp 80105a4e - -80105f72 : -.globl vector5 -vector5: - pushl $0 -80105f72: 6a 00 push $0x0 - pushl $5 -80105f74: 6a 05 push $0x5 - jmp alltraps -80105f76: e9 d3 fa ff ff jmp 80105a4e - -80105f7b : -.globl vector6 -vector6: - pushl $0 -80105f7b: 6a 00 push $0x0 - pushl $6 -80105f7d: 6a 06 push $0x6 - jmp alltraps -80105f7f: e9 ca fa ff ff jmp 80105a4e - -80105f84 : -.globl vector7 -vector7: - pushl $0 -80105f84: 6a 00 push $0x0 - pushl $7 -80105f86: 6a 07 push $0x7 - jmp alltraps -80105f88: e9 c1 fa ff ff jmp 80105a4e - -80105f8d : -.globl vector8 -vector8: - pushl $8 -80105f8d: 6a 08 push $0x8 - jmp alltraps -80105f8f: e9 ba fa ff ff jmp 80105a4e - -80105f94 : -.globl vector9 -vector9: - pushl $0 -80105f94: 6a 00 push $0x0 - pushl $9 -80105f96: 6a 09 push $0x9 - jmp alltraps -80105f98: e9 b1 fa ff ff jmp 80105a4e - -80105f9d : -.globl vector10 -vector10: - pushl $10 -80105f9d: 6a 0a push $0xa - jmp alltraps -80105f9f: e9 aa fa ff ff jmp 80105a4e - -80105fa4 : -.globl vector11 -vector11: - pushl $11 -80105fa4: 6a 0b push $0xb - jmp alltraps -80105fa6: e9 a3 fa ff ff jmp 80105a4e - -80105fab : -.globl vector12 -vector12: - pushl $12 -80105fab: 6a 0c push $0xc - jmp alltraps -80105fad: e9 9c fa ff ff jmp 80105a4e - -80105fb2 : -.globl vector13 -vector13: - pushl $13 -80105fb2: 6a 0d push $0xd - jmp alltraps -80105fb4: e9 95 fa ff ff jmp 80105a4e - -80105fb9 : -.globl vector14 -vector14: - pushl $14 -80105fb9: 6a 0e push $0xe - jmp alltraps -80105fbb: e9 8e fa ff ff jmp 80105a4e - -80105fc0 : -.globl vector15 -vector15: - pushl $0 -80105fc0: 6a 00 push $0x0 - pushl $15 -80105fc2: 6a 0f push $0xf - jmp alltraps -80105fc4: e9 85 fa ff ff jmp 80105a4e - -80105fc9 : -.globl vector16 -vector16: - pushl $0 -80105fc9: 6a 00 push $0x0 - pushl $16 -80105fcb: 6a 10 push $0x10 - jmp alltraps -80105fcd: e9 7c fa ff ff jmp 80105a4e - -80105fd2 : -.globl vector17 -vector17: - pushl $17 -80105fd2: 6a 11 push $0x11 - jmp alltraps -80105fd4: e9 75 fa ff ff jmp 80105a4e - -80105fd9 : -.globl vector18 -vector18: - pushl $0 -80105fd9: 6a 00 push $0x0 - pushl $18 -80105fdb: 6a 12 push $0x12 - jmp alltraps -80105fdd: e9 6c fa ff ff jmp 80105a4e - -80105fe2 : -.globl vector19 -vector19: - pushl $0 -80105fe2: 6a 00 push $0x0 - pushl $19 -80105fe4: 6a 13 push $0x13 - jmp alltraps -80105fe6: e9 63 fa ff ff jmp 80105a4e - -80105feb : -.globl vector20 -vector20: - pushl $0 -80105feb: 6a 00 push $0x0 - pushl $20 -80105fed: 6a 14 push $0x14 - jmp alltraps -80105fef: e9 5a fa ff ff jmp 80105a4e - -80105ff4 : -.globl vector21 -vector21: - pushl $0 -80105ff4: 6a 00 push $0x0 - pushl $21 -80105ff6: 6a 15 push $0x15 - jmp alltraps -80105ff8: e9 51 fa ff ff jmp 80105a4e - -80105ffd : -.globl vector22 -vector22: - pushl $0 -80105ffd: 6a 00 push $0x0 - pushl $22 -80105fff: 6a 16 push $0x16 - jmp alltraps -80106001: e9 48 fa ff ff jmp 80105a4e - -80106006 : -.globl vector23 -vector23: - pushl $0 -80106006: 6a 00 push $0x0 - pushl $23 -80106008: 6a 17 push $0x17 - jmp alltraps -8010600a: e9 3f fa ff ff jmp 80105a4e - -8010600f : -.globl vector24 -vector24: - pushl $0 -8010600f: 6a 00 push $0x0 - pushl $24 -80106011: 6a 18 push $0x18 - jmp alltraps -80106013: e9 36 fa ff ff jmp 80105a4e - -80106018 : -.globl vector25 -vector25: - pushl $0 -80106018: 6a 00 push $0x0 - pushl $25 -8010601a: 6a 19 push $0x19 - jmp alltraps -8010601c: e9 2d fa ff ff jmp 80105a4e - -80106021 : -.globl vector26 -vector26: - pushl $0 -80106021: 6a 00 push $0x0 - pushl $26 -80106023: 6a 1a push $0x1a - jmp alltraps -80106025: e9 24 fa ff ff jmp 80105a4e - -8010602a : -.globl vector27 -vector27: - pushl $0 -8010602a: 6a 00 push $0x0 - pushl $27 -8010602c: 6a 1b push $0x1b - jmp alltraps -8010602e: e9 1b fa ff ff jmp 80105a4e - -80106033 : -.globl vector28 -vector28: - pushl $0 -80106033: 6a 00 push $0x0 - pushl $28 -80106035: 6a 1c push $0x1c - jmp alltraps -80106037: e9 12 fa ff ff jmp 80105a4e - -8010603c : -.globl vector29 -vector29: - pushl $0 -8010603c: 6a 00 push $0x0 - pushl $29 -8010603e: 6a 1d push $0x1d - jmp alltraps -80106040: e9 09 fa ff ff jmp 80105a4e - -80106045 : -.globl vector30 -vector30: - pushl $0 -80106045: 6a 00 push $0x0 - pushl $30 -80106047: 6a 1e push $0x1e - jmp alltraps -80106049: e9 00 fa ff ff jmp 80105a4e - -8010604e : -.globl vector31 -vector31: - pushl $0 -8010604e: 6a 00 push $0x0 - pushl $31 -80106050: 6a 1f push $0x1f - jmp alltraps -80106052: e9 f7 f9 ff ff jmp 80105a4e - -80106057 : -.globl vector32 -vector32: - pushl $0 -80106057: 6a 00 push $0x0 - pushl $32 -80106059: 6a 20 push $0x20 - jmp alltraps -8010605b: e9 ee f9 ff ff jmp 80105a4e - -80106060 : -.globl vector33 -vector33: - pushl $0 -80106060: 6a 00 push $0x0 - pushl $33 -80106062: 6a 21 push $0x21 - jmp alltraps -80106064: e9 e5 f9 ff ff jmp 80105a4e - -80106069 : -.globl vector34 -vector34: - pushl $0 -80106069: 6a 00 push $0x0 - pushl $34 -8010606b: 6a 22 push $0x22 - jmp alltraps -8010606d: e9 dc f9 ff ff jmp 80105a4e - -80106072 : -.globl vector35 -vector35: - pushl $0 -80106072: 6a 00 push $0x0 - pushl $35 -80106074: 6a 23 push $0x23 - jmp alltraps -80106076: e9 d3 f9 ff ff jmp 80105a4e - -8010607b : -.globl vector36 -vector36: - pushl $0 -8010607b: 6a 00 push $0x0 - pushl $36 -8010607d: 6a 24 push $0x24 - jmp alltraps -8010607f: e9 ca f9 ff ff jmp 80105a4e - -80106084 : -.globl vector37 -vector37: - pushl $0 -80106084: 6a 00 push $0x0 - pushl $37 -80106086: 6a 25 push $0x25 - jmp alltraps -80106088: e9 c1 f9 ff ff jmp 80105a4e - -8010608d : -.globl vector38 -vector38: - pushl $0 -8010608d: 6a 00 push $0x0 - pushl $38 -8010608f: 6a 26 push $0x26 - jmp alltraps -80106091: e9 b8 f9 ff ff jmp 80105a4e - -80106096 : -.globl vector39 -vector39: - pushl $0 -80106096: 6a 00 push $0x0 - pushl $39 -80106098: 6a 27 push $0x27 - jmp alltraps -8010609a: e9 af f9 ff ff jmp 80105a4e - -8010609f : -.globl vector40 -vector40: - pushl $0 -8010609f: 6a 00 push $0x0 - pushl $40 -801060a1: 6a 28 push $0x28 - jmp alltraps -801060a3: e9 a6 f9 ff ff jmp 80105a4e - -801060a8 : -.globl vector41 -vector41: - pushl $0 -801060a8: 6a 00 push $0x0 - pushl $41 -801060aa: 6a 29 push $0x29 - jmp alltraps -801060ac: e9 9d f9 ff ff jmp 80105a4e - -801060b1 : -.globl vector42 -vector42: - pushl $0 -801060b1: 6a 00 push $0x0 - pushl $42 -801060b3: 6a 2a push $0x2a - jmp alltraps -801060b5: e9 94 f9 ff ff jmp 80105a4e - -801060ba : -.globl vector43 -vector43: - pushl $0 -801060ba: 6a 00 push $0x0 - pushl $43 -801060bc: 6a 2b push $0x2b - jmp alltraps -801060be: e9 8b f9 ff ff jmp 80105a4e - -801060c3 : -.globl vector44 -vector44: - pushl $0 -801060c3: 6a 00 push $0x0 - pushl $44 -801060c5: 6a 2c push $0x2c - jmp alltraps -801060c7: e9 82 f9 ff ff jmp 80105a4e - -801060cc : -.globl vector45 -vector45: - pushl $0 -801060cc: 6a 00 push $0x0 - pushl $45 -801060ce: 6a 2d push $0x2d - jmp alltraps -801060d0: e9 79 f9 ff ff jmp 80105a4e - -801060d5 : -.globl vector46 -vector46: - pushl $0 -801060d5: 6a 00 push $0x0 - pushl $46 -801060d7: 6a 2e push $0x2e - jmp alltraps -801060d9: e9 70 f9 ff ff jmp 80105a4e - -801060de : -.globl vector47 -vector47: - pushl $0 -801060de: 6a 00 push $0x0 - pushl $47 -801060e0: 6a 2f push $0x2f - jmp alltraps -801060e2: e9 67 f9 ff ff jmp 80105a4e - -801060e7 : -.globl vector48 -vector48: - pushl $0 -801060e7: 6a 00 push $0x0 - pushl $48 -801060e9: 6a 30 push $0x30 - jmp alltraps -801060eb: e9 5e f9 ff ff jmp 80105a4e - -801060f0 : -.globl vector49 -vector49: - pushl $0 -801060f0: 6a 00 push $0x0 - pushl $49 -801060f2: 6a 31 push $0x31 - jmp alltraps -801060f4: e9 55 f9 ff ff jmp 80105a4e - -801060f9 : -.globl vector50 -vector50: - pushl $0 -801060f9: 6a 00 push $0x0 - pushl $50 -801060fb: 6a 32 push $0x32 - jmp alltraps -801060fd: e9 4c f9 ff ff jmp 80105a4e - -80106102 : -.globl vector51 -vector51: - pushl $0 -80106102: 6a 00 push $0x0 - pushl $51 -80106104: 6a 33 push $0x33 - jmp alltraps -80106106: e9 43 f9 ff ff jmp 80105a4e - -8010610b : -.globl vector52 -vector52: - pushl $0 -8010610b: 6a 00 push $0x0 - pushl $52 -8010610d: 6a 34 push $0x34 - jmp alltraps -8010610f: e9 3a f9 ff ff jmp 80105a4e - -80106114 : -.globl vector53 -vector53: - pushl $0 -80106114: 6a 00 push $0x0 - pushl $53 -80106116: 6a 35 push $0x35 - jmp alltraps -80106118: e9 31 f9 ff ff jmp 80105a4e - -8010611d : -.globl vector54 -vector54: - pushl $0 -8010611d: 6a 00 push $0x0 - pushl $54 -8010611f: 6a 36 push $0x36 - jmp alltraps -80106121: e9 28 f9 ff ff jmp 80105a4e - -80106126 : -.globl vector55 -vector55: - pushl $0 -80106126: 6a 00 push $0x0 - pushl $55 -80106128: 6a 37 push $0x37 - jmp alltraps -8010612a: e9 1f f9 ff ff jmp 80105a4e - -8010612f : -.globl vector56 -vector56: - pushl $0 -8010612f: 6a 00 push $0x0 - pushl $56 -80106131: 6a 38 push $0x38 - jmp alltraps -80106133: e9 16 f9 ff ff jmp 80105a4e - -80106138 : -.globl vector57 -vector57: - pushl $0 -80106138: 6a 00 push $0x0 - pushl $57 -8010613a: 6a 39 push $0x39 - jmp alltraps -8010613c: e9 0d f9 ff ff jmp 80105a4e - -80106141 : -.globl vector58 -vector58: - pushl $0 -80106141: 6a 00 push $0x0 - pushl $58 -80106143: 6a 3a push $0x3a - jmp alltraps -80106145: e9 04 f9 ff ff jmp 80105a4e - -8010614a : -.globl vector59 -vector59: - pushl $0 -8010614a: 6a 00 push $0x0 - pushl $59 -8010614c: 6a 3b push $0x3b - jmp alltraps -8010614e: e9 fb f8 ff ff jmp 80105a4e - -80106153 : -.globl vector60 -vector60: - pushl $0 -80106153: 6a 00 push $0x0 - pushl $60 -80106155: 6a 3c push $0x3c - jmp alltraps -80106157: e9 f2 f8 ff ff jmp 80105a4e - -8010615c : -.globl vector61 -vector61: - pushl $0 -8010615c: 6a 00 push $0x0 - pushl $61 -8010615e: 6a 3d push $0x3d - jmp alltraps -80106160: e9 e9 f8 ff ff jmp 80105a4e - -80106165 : -.globl vector62 -vector62: - pushl $0 -80106165: 6a 00 push $0x0 - pushl $62 -80106167: 6a 3e push $0x3e - jmp alltraps -80106169: e9 e0 f8 ff ff jmp 80105a4e - -8010616e : -.globl vector63 -vector63: - pushl $0 -8010616e: 6a 00 push $0x0 - pushl $63 -80106170: 6a 3f push $0x3f - jmp alltraps -80106172: e9 d7 f8 ff ff jmp 80105a4e - -80106177 : -.globl vector64 -vector64: - pushl $0 -80106177: 6a 00 push $0x0 - pushl $64 -80106179: 6a 40 push $0x40 - jmp alltraps -8010617b: e9 ce f8 ff ff jmp 80105a4e - -80106180 : -.globl vector65 -vector65: - pushl $0 -80106180: 6a 00 push $0x0 - pushl $65 -80106182: 6a 41 push $0x41 - jmp alltraps -80106184: e9 c5 f8 ff ff jmp 80105a4e - -80106189 : -.globl vector66 -vector66: - pushl $0 -80106189: 6a 00 push $0x0 - pushl $66 -8010618b: 6a 42 push $0x42 - jmp alltraps -8010618d: e9 bc f8 ff ff jmp 80105a4e - -80106192 : -.globl vector67 -vector67: - pushl $0 -80106192: 6a 00 push $0x0 - pushl $67 -80106194: 6a 43 push $0x43 - jmp alltraps -80106196: e9 b3 f8 ff ff jmp 80105a4e - -8010619b : -.globl vector68 -vector68: - pushl $0 -8010619b: 6a 00 push $0x0 - pushl $68 -8010619d: 6a 44 push $0x44 - jmp alltraps -8010619f: e9 aa f8 ff ff jmp 80105a4e - -801061a4 : -.globl vector69 -vector69: - pushl $0 -801061a4: 6a 00 push $0x0 - pushl $69 -801061a6: 6a 45 push $0x45 - jmp alltraps -801061a8: e9 a1 f8 ff ff jmp 80105a4e - -801061ad : -.globl vector70 -vector70: - pushl $0 -801061ad: 6a 00 push $0x0 - pushl $70 -801061af: 6a 46 push $0x46 - jmp alltraps -801061b1: e9 98 f8 ff ff jmp 80105a4e - -801061b6 : -.globl vector71 -vector71: - pushl $0 -801061b6: 6a 00 push $0x0 - pushl $71 -801061b8: 6a 47 push $0x47 - jmp alltraps -801061ba: e9 8f f8 ff ff jmp 80105a4e - -801061bf : -.globl vector72 -vector72: - pushl $0 -801061bf: 6a 00 push $0x0 - pushl $72 -801061c1: 6a 48 push $0x48 - jmp alltraps -801061c3: e9 86 f8 ff ff jmp 80105a4e - -801061c8 : -.globl vector73 -vector73: - pushl $0 -801061c8: 6a 00 push $0x0 - pushl $73 -801061ca: 6a 49 push $0x49 - jmp alltraps -801061cc: e9 7d f8 ff ff jmp 80105a4e - -801061d1 : -.globl vector74 -vector74: - pushl $0 -801061d1: 6a 00 push $0x0 - pushl $74 -801061d3: 6a 4a push $0x4a - jmp alltraps -801061d5: e9 74 f8 ff ff jmp 80105a4e - -801061da : -.globl vector75 -vector75: - pushl $0 -801061da: 6a 00 push $0x0 - pushl $75 -801061dc: 6a 4b push $0x4b - jmp alltraps -801061de: e9 6b f8 ff ff jmp 80105a4e - -801061e3 : -.globl vector76 -vector76: - pushl $0 -801061e3: 6a 00 push $0x0 - pushl $76 -801061e5: 6a 4c push $0x4c - jmp alltraps -801061e7: e9 62 f8 ff ff jmp 80105a4e - -801061ec : -.globl vector77 -vector77: - pushl $0 -801061ec: 6a 00 push $0x0 - pushl $77 -801061ee: 6a 4d push $0x4d - jmp alltraps -801061f0: e9 59 f8 ff ff jmp 80105a4e - -801061f5 : -.globl vector78 -vector78: - pushl $0 -801061f5: 6a 00 push $0x0 - pushl $78 -801061f7: 6a 4e push $0x4e - jmp alltraps -801061f9: e9 50 f8 ff ff jmp 80105a4e - -801061fe : -.globl vector79 -vector79: - pushl $0 -801061fe: 6a 00 push $0x0 - pushl $79 -80106200: 6a 4f push $0x4f - jmp alltraps -80106202: e9 47 f8 ff ff jmp 80105a4e - -80106207 : -.globl vector80 -vector80: - pushl $0 -80106207: 6a 00 push $0x0 - pushl $80 -80106209: 6a 50 push $0x50 - jmp alltraps -8010620b: e9 3e f8 ff ff jmp 80105a4e - -80106210 : -.globl vector81 -vector81: - pushl $0 -80106210: 6a 00 push $0x0 - pushl $81 -80106212: 6a 51 push $0x51 - jmp alltraps -80106214: e9 35 f8 ff ff jmp 80105a4e - -80106219 : -.globl vector82 -vector82: - pushl $0 -80106219: 6a 00 push $0x0 - pushl $82 -8010621b: 6a 52 push $0x52 - jmp alltraps -8010621d: e9 2c f8 ff ff jmp 80105a4e - -80106222 : -.globl vector83 -vector83: - pushl $0 -80106222: 6a 00 push $0x0 - pushl $83 -80106224: 6a 53 push $0x53 - jmp alltraps -80106226: e9 23 f8 ff ff jmp 80105a4e - -8010622b : -.globl vector84 -vector84: - pushl $0 -8010622b: 6a 00 push $0x0 - pushl $84 -8010622d: 6a 54 push $0x54 - jmp alltraps -8010622f: e9 1a f8 ff ff jmp 80105a4e - -80106234 : -.globl vector85 -vector85: - pushl $0 -80106234: 6a 00 push $0x0 - pushl $85 -80106236: 6a 55 push $0x55 - jmp alltraps -80106238: e9 11 f8 ff ff jmp 80105a4e - -8010623d : -.globl vector86 -vector86: - pushl $0 -8010623d: 6a 00 push $0x0 - pushl $86 -8010623f: 6a 56 push $0x56 - jmp alltraps -80106241: e9 08 f8 ff ff jmp 80105a4e - -80106246 : -.globl vector87 -vector87: - pushl $0 -80106246: 6a 00 push $0x0 - pushl $87 -80106248: 6a 57 push $0x57 - jmp alltraps -8010624a: e9 ff f7 ff ff jmp 80105a4e - -8010624f : -.globl vector88 -vector88: - pushl $0 -8010624f: 6a 00 push $0x0 - pushl $88 -80106251: 6a 58 push $0x58 - jmp alltraps -80106253: e9 f6 f7 ff ff jmp 80105a4e - -80106258 : -.globl vector89 -vector89: - pushl $0 -80106258: 6a 00 push $0x0 - pushl $89 -8010625a: 6a 59 push $0x59 - jmp alltraps -8010625c: e9 ed f7 ff ff jmp 80105a4e - -80106261 : -.globl vector90 -vector90: - pushl $0 -80106261: 6a 00 push $0x0 - pushl $90 -80106263: 6a 5a push $0x5a - jmp alltraps -80106265: e9 e4 f7 ff ff jmp 80105a4e - -8010626a : -.globl vector91 -vector91: - pushl $0 -8010626a: 6a 00 push $0x0 - pushl $91 -8010626c: 6a 5b push $0x5b - jmp alltraps -8010626e: e9 db f7 ff ff jmp 80105a4e - -80106273 : -.globl vector92 -vector92: - pushl $0 -80106273: 6a 00 push $0x0 - pushl $92 -80106275: 6a 5c push $0x5c - jmp alltraps -80106277: e9 d2 f7 ff ff jmp 80105a4e - -8010627c : -.globl vector93 -vector93: - pushl $0 -8010627c: 6a 00 push $0x0 - pushl $93 -8010627e: 6a 5d push $0x5d - jmp alltraps -80106280: e9 c9 f7 ff ff jmp 80105a4e - -80106285 : -.globl vector94 -vector94: - pushl $0 -80106285: 6a 00 push $0x0 - pushl $94 -80106287: 6a 5e push $0x5e - jmp alltraps -80106289: e9 c0 f7 ff ff jmp 80105a4e - -8010628e : -.globl vector95 -vector95: - pushl $0 -8010628e: 6a 00 push $0x0 - pushl $95 -80106290: 6a 5f push $0x5f - jmp alltraps -80106292: e9 b7 f7 ff ff jmp 80105a4e - -80106297 : -.globl vector96 -vector96: - pushl $0 -80106297: 6a 00 push $0x0 - pushl $96 -80106299: 6a 60 push $0x60 - jmp alltraps -8010629b: e9 ae f7 ff ff jmp 80105a4e - -801062a0 : -.globl vector97 -vector97: - pushl $0 -801062a0: 6a 00 push $0x0 - pushl $97 -801062a2: 6a 61 push $0x61 - jmp alltraps -801062a4: e9 a5 f7 ff ff jmp 80105a4e - -801062a9 : -.globl vector98 -vector98: - pushl $0 -801062a9: 6a 00 push $0x0 - pushl $98 -801062ab: 6a 62 push $0x62 - jmp alltraps -801062ad: e9 9c f7 ff ff jmp 80105a4e - -801062b2 : -.globl vector99 -vector99: - pushl $0 -801062b2: 6a 00 push $0x0 - pushl $99 -801062b4: 6a 63 push $0x63 - jmp alltraps -801062b6: e9 93 f7 ff ff jmp 80105a4e - -801062bb : -.globl vector100 -vector100: - pushl $0 -801062bb: 6a 00 push $0x0 - pushl $100 -801062bd: 6a 64 push $0x64 - jmp alltraps -801062bf: e9 8a f7 ff ff jmp 80105a4e - -801062c4 : -.globl vector101 -vector101: - pushl $0 -801062c4: 6a 00 push $0x0 - pushl $101 -801062c6: 6a 65 push $0x65 - jmp alltraps -801062c8: e9 81 f7 ff ff jmp 80105a4e - -801062cd : -.globl vector102 -vector102: - pushl $0 -801062cd: 6a 00 push $0x0 - pushl $102 -801062cf: 6a 66 push $0x66 - jmp alltraps -801062d1: e9 78 f7 ff ff jmp 80105a4e - -801062d6 : -.globl vector103 -vector103: - pushl $0 -801062d6: 6a 00 push $0x0 - pushl $103 -801062d8: 6a 67 push $0x67 - jmp alltraps -801062da: e9 6f f7 ff ff jmp 80105a4e - -801062df : -.globl vector104 -vector104: - pushl $0 -801062df: 6a 00 push $0x0 - pushl $104 -801062e1: 6a 68 push $0x68 - jmp alltraps -801062e3: e9 66 f7 ff ff jmp 80105a4e - -801062e8 : -.globl vector105 -vector105: - pushl $0 -801062e8: 6a 00 push $0x0 - pushl $105 -801062ea: 6a 69 push $0x69 - jmp alltraps -801062ec: e9 5d f7 ff ff jmp 80105a4e - -801062f1 : -.globl vector106 -vector106: - pushl $0 -801062f1: 6a 00 push $0x0 - pushl $106 -801062f3: 6a 6a push $0x6a - jmp alltraps -801062f5: e9 54 f7 ff ff jmp 80105a4e - -801062fa : -.globl vector107 -vector107: - pushl $0 -801062fa: 6a 00 push $0x0 - pushl $107 -801062fc: 6a 6b push $0x6b - jmp alltraps -801062fe: e9 4b f7 ff ff jmp 80105a4e - -80106303 : -.globl vector108 -vector108: - pushl $0 -80106303: 6a 00 push $0x0 - pushl $108 -80106305: 6a 6c push $0x6c - jmp alltraps -80106307: e9 42 f7 ff ff jmp 80105a4e - -8010630c : -.globl vector109 -vector109: - pushl $0 -8010630c: 6a 00 push $0x0 - pushl $109 -8010630e: 6a 6d push $0x6d - jmp alltraps -80106310: e9 39 f7 ff ff jmp 80105a4e - -80106315 : -.globl vector110 -vector110: - pushl $0 -80106315: 6a 00 push $0x0 - pushl $110 -80106317: 6a 6e push $0x6e - jmp alltraps -80106319: e9 30 f7 ff ff jmp 80105a4e - -8010631e : -.globl vector111 -vector111: - pushl $0 -8010631e: 6a 00 push $0x0 - pushl $111 -80106320: 6a 6f push $0x6f - jmp alltraps -80106322: e9 27 f7 ff ff jmp 80105a4e - -80106327 : -.globl vector112 -vector112: - pushl $0 -80106327: 6a 00 push $0x0 - pushl $112 -80106329: 6a 70 push $0x70 - jmp alltraps -8010632b: e9 1e f7 ff ff jmp 80105a4e - -80106330 : -.globl vector113 -vector113: - pushl $0 -80106330: 6a 00 push $0x0 - pushl $113 -80106332: 6a 71 push $0x71 - jmp alltraps -80106334: e9 15 f7 ff ff jmp 80105a4e - -80106339 : -.globl vector114 -vector114: - pushl $0 -80106339: 6a 00 push $0x0 - pushl $114 -8010633b: 6a 72 push $0x72 - jmp alltraps -8010633d: e9 0c f7 ff ff jmp 80105a4e - -80106342 : -.globl vector115 -vector115: - pushl $0 -80106342: 6a 00 push $0x0 - pushl $115 -80106344: 6a 73 push $0x73 - jmp alltraps -80106346: e9 03 f7 ff ff jmp 80105a4e - -8010634b : -.globl vector116 -vector116: - pushl $0 -8010634b: 6a 00 push $0x0 - pushl $116 -8010634d: 6a 74 push $0x74 - jmp alltraps -8010634f: e9 fa f6 ff ff jmp 80105a4e - -80106354 : -.globl vector117 -vector117: - pushl $0 -80106354: 6a 00 push $0x0 - pushl $117 -80106356: 6a 75 push $0x75 - jmp alltraps -80106358: e9 f1 f6 ff ff jmp 80105a4e - -8010635d : -.globl vector118 -vector118: - pushl $0 -8010635d: 6a 00 push $0x0 - pushl $118 -8010635f: 6a 76 push $0x76 - jmp alltraps -80106361: e9 e8 f6 ff ff jmp 80105a4e - -80106366 : -.globl vector119 -vector119: - pushl $0 -80106366: 6a 00 push $0x0 - pushl $119 -80106368: 6a 77 push $0x77 - jmp alltraps -8010636a: e9 df f6 ff ff jmp 80105a4e - -8010636f : -.globl vector120 -vector120: - pushl $0 -8010636f: 6a 00 push $0x0 - pushl $120 -80106371: 6a 78 push $0x78 - jmp alltraps -80106373: e9 d6 f6 ff ff jmp 80105a4e - -80106378 : -.globl vector121 -vector121: - pushl $0 -80106378: 6a 00 push $0x0 - pushl $121 -8010637a: 6a 79 push $0x79 - jmp alltraps -8010637c: e9 cd f6 ff ff jmp 80105a4e - -80106381 : -.globl vector122 -vector122: - pushl $0 -80106381: 6a 00 push $0x0 - pushl $122 -80106383: 6a 7a push $0x7a - jmp alltraps -80106385: e9 c4 f6 ff ff jmp 80105a4e - -8010638a : -.globl vector123 -vector123: - pushl $0 -8010638a: 6a 00 push $0x0 - pushl $123 -8010638c: 6a 7b push $0x7b - jmp alltraps -8010638e: e9 bb f6 ff ff jmp 80105a4e - -80106393 : -.globl vector124 -vector124: - pushl $0 -80106393: 6a 00 push $0x0 - pushl $124 -80106395: 6a 7c push $0x7c - jmp alltraps -80106397: e9 b2 f6 ff ff jmp 80105a4e - -8010639c : -.globl vector125 -vector125: - pushl $0 -8010639c: 6a 00 push $0x0 - pushl $125 -8010639e: 6a 7d push $0x7d - jmp alltraps -801063a0: e9 a9 f6 ff ff jmp 80105a4e - -801063a5 : -.globl vector126 -vector126: - pushl $0 -801063a5: 6a 00 push $0x0 - pushl $126 -801063a7: 6a 7e push $0x7e - jmp alltraps -801063a9: e9 a0 f6 ff ff jmp 80105a4e - -801063ae : -.globl vector127 -vector127: - pushl $0 -801063ae: 6a 00 push $0x0 - pushl $127 -801063b0: 6a 7f push $0x7f - jmp alltraps -801063b2: e9 97 f6 ff ff jmp 80105a4e - -801063b7 : -.globl vector128 -vector128: - pushl $0 -801063b7: 6a 00 push $0x0 - pushl $128 -801063b9: 68 80 00 00 00 push $0x80 - jmp alltraps -801063be: e9 8b f6 ff ff jmp 80105a4e - -801063c3 : -.globl vector129 -vector129: - pushl $0 -801063c3: 6a 00 push $0x0 - pushl $129 -801063c5: 68 81 00 00 00 push $0x81 - jmp alltraps -801063ca: e9 7f f6 ff ff jmp 80105a4e - -801063cf : -.globl vector130 -vector130: - pushl $0 -801063cf: 6a 00 push $0x0 - pushl $130 -801063d1: 68 82 00 00 00 push $0x82 - jmp alltraps -801063d6: e9 73 f6 ff ff jmp 80105a4e - -801063db : -.globl vector131 -vector131: - pushl $0 -801063db: 6a 00 push $0x0 - pushl $131 -801063dd: 68 83 00 00 00 push $0x83 - jmp alltraps -801063e2: e9 67 f6 ff ff jmp 80105a4e - -801063e7 : -.globl vector132 -vector132: - pushl $0 -801063e7: 6a 00 push $0x0 - pushl $132 -801063e9: 68 84 00 00 00 push $0x84 - jmp alltraps -801063ee: e9 5b f6 ff ff jmp 80105a4e - -801063f3 : -.globl vector133 -vector133: - pushl $0 -801063f3: 6a 00 push $0x0 - pushl $133 -801063f5: 68 85 00 00 00 push $0x85 - jmp alltraps -801063fa: e9 4f f6 ff ff jmp 80105a4e - -801063ff : -.globl vector134 -vector134: - pushl $0 -801063ff: 6a 00 push $0x0 - pushl $134 -80106401: 68 86 00 00 00 push $0x86 - jmp alltraps -80106406: e9 43 f6 ff ff jmp 80105a4e - -8010640b : -.globl vector135 -vector135: - pushl $0 -8010640b: 6a 00 push $0x0 - pushl $135 -8010640d: 68 87 00 00 00 push $0x87 - jmp alltraps -80106412: e9 37 f6 ff ff jmp 80105a4e - -80106417 : -.globl vector136 -vector136: - pushl $0 -80106417: 6a 00 push $0x0 - pushl $136 -80106419: 68 88 00 00 00 push $0x88 - jmp alltraps -8010641e: e9 2b f6 ff ff jmp 80105a4e - -80106423 : -.globl vector137 -vector137: - pushl $0 -80106423: 6a 00 push $0x0 - pushl $137 -80106425: 68 89 00 00 00 push $0x89 - jmp alltraps -8010642a: e9 1f f6 ff ff jmp 80105a4e - -8010642f : -.globl vector138 -vector138: - pushl $0 -8010642f: 6a 00 push $0x0 - pushl $138 -80106431: 68 8a 00 00 00 push $0x8a - jmp alltraps -80106436: e9 13 f6 ff ff jmp 80105a4e - -8010643b : -.globl vector139 -vector139: - pushl $0 -8010643b: 6a 00 push $0x0 - pushl $139 -8010643d: 68 8b 00 00 00 push $0x8b - jmp alltraps -80106442: e9 07 f6 ff ff jmp 80105a4e - -80106447 : -.globl vector140 -vector140: - pushl $0 -80106447: 6a 00 push $0x0 - pushl $140 -80106449: 68 8c 00 00 00 push $0x8c - jmp alltraps -8010644e: e9 fb f5 ff ff jmp 80105a4e - -80106453 : -.globl vector141 -vector141: - pushl $0 -80106453: 6a 00 push $0x0 - pushl $141 -80106455: 68 8d 00 00 00 push $0x8d - jmp alltraps -8010645a: e9 ef f5 ff ff jmp 80105a4e - -8010645f : -.globl vector142 -vector142: - pushl $0 -8010645f: 6a 00 push $0x0 - pushl $142 -80106461: 68 8e 00 00 00 push $0x8e - jmp alltraps -80106466: e9 e3 f5 ff ff jmp 80105a4e - -8010646b : -.globl vector143 -vector143: - pushl $0 -8010646b: 6a 00 push $0x0 - pushl $143 -8010646d: 68 8f 00 00 00 push $0x8f - jmp alltraps -80106472: e9 d7 f5 ff ff jmp 80105a4e - -80106477 : -.globl vector144 -vector144: - pushl $0 -80106477: 6a 00 push $0x0 - pushl $144 -80106479: 68 90 00 00 00 push $0x90 - jmp alltraps -8010647e: e9 cb f5 ff ff jmp 80105a4e - -80106483 : -.globl vector145 -vector145: - pushl $0 -80106483: 6a 00 push $0x0 - pushl $145 -80106485: 68 91 00 00 00 push $0x91 - jmp alltraps -8010648a: e9 bf f5 ff ff jmp 80105a4e - -8010648f : -.globl vector146 -vector146: - pushl $0 -8010648f: 6a 00 push $0x0 - pushl $146 -80106491: 68 92 00 00 00 push $0x92 - jmp alltraps -80106496: e9 b3 f5 ff ff jmp 80105a4e - -8010649b : -.globl vector147 -vector147: - pushl $0 -8010649b: 6a 00 push $0x0 - pushl $147 -8010649d: 68 93 00 00 00 push $0x93 - jmp alltraps -801064a2: e9 a7 f5 ff ff jmp 80105a4e - -801064a7 : -.globl vector148 -vector148: - pushl $0 -801064a7: 6a 00 push $0x0 - pushl $148 -801064a9: 68 94 00 00 00 push $0x94 - jmp alltraps -801064ae: e9 9b f5 ff ff jmp 80105a4e - -801064b3 : -.globl vector149 -vector149: - pushl $0 -801064b3: 6a 00 push $0x0 - pushl $149 -801064b5: 68 95 00 00 00 push $0x95 - jmp alltraps -801064ba: e9 8f f5 ff ff jmp 80105a4e - -801064bf : -.globl vector150 -vector150: - pushl $0 -801064bf: 6a 00 push $0x0 - pushl $150 -801064c1: 68 96 00 00 00 push $0x96 - jmp alltraps -801064c6: e9 83 f5 ff ff jmp 80105a4e - -801064cb : -.globl vector151 -vector151: - pushl $0 -801064cb: 6a 00 push $0x0 - pushl $151 -801064cd: 68 97 00 00 00 push $0x97 - jmp alltraps -801064d2: e9 77 f5 ff ff jmp 80105a4e - -801064d7 : -.globl vector152 -vector152: - pushl $0 -801064d7: 6a 00 push $0x0 - pushl $152 -801064d9: 68 98 00 00 00 push $0x98 - jmp alltraps -801064de: e9 6b f5 ff ff jmp 80105a4e - -801064e3 : -.globl vector153 -vector153: - pushl $0 -801064e3: 6a 00 push $0x0 - pushl $153 -801064e5: 68 99 00 00 00 push $0x99 - jmp alltraps -801064ea: e9 5f f5 ff ff jmp 80105a4e - -801064ef : -.globl vector154 -vector154: - pushl $0 -801064ef: 6a 00 push $0x0 - pushl $154 -801064f1: 68 9a 00 00 00 push $0x9a - jmp alltraps -801064f6: e9 53 f5 ff ff jmp 80105a4e - -801064fb : -.globl vector155 -vector155: - pushl $0 -801064fb: 6a 00 push $0x0 - pushl $155 -801064fd: 68 9b 00 00 00 push $0x9b - jmp alltraps -80106502: e9 47 f5 ff ff jmp 80105a4e - -80106507 : -.globl vector156 -vector156: - pushl $0 -80106507: 6a 00 push $0x0 - pushl $156 -80106509: 68 9c 00 00 00 push $0x9c - jmp alltraps -8010650e: e9 3b f5 ff ff jmp 80105a4e - -80106513 : -.globl vector157 -vector157: - pushl $0 -80106513: 6a 00 push $0x0 - pushl $157 -80106515: 68 9d 00 00 00 push $0x9d - jmp alltraps -8010651a: e9 2f f5 ff ff jmp 80105a4e - -8010651f : -.globl vector158 -vector158: - pushl $0 -8010651f: 6a 00 push $0x0 - pushl $158 -80106521: 68 9e 00 00 00 push $0x9e - jmp alltraps -80106526: e9 23 f5 ff ff jmp 80105a4e - -8010652b : -.globl vector159 -vector159: - pushl $0 -8010652b: 6a 00 push $0x0 - pushl $159 -8010652d: 68 9f 00 00 00 push $0x9f - jmp alltraps -80106532: e9 17 f5 ff ff jmp 80105a4e - -80106537 : -.globl vector160 -vector160: - pushl $0 -80106537: 6a 00 push $0x0 - pushl $160 -80106539: 68 a0 00 00 00 push $0xa0 - jmp alltraps -8010653e: e9 0b f5 ff ff jmp 80105a4e - -80106543 : -.globl vector161 -vector161: - pushl $0 -80106543: 6a 00 push $0x0 - pushl $161 -80106545: 68 a1 00 00 00 push $0xa1 - jmp alltraps -8010654a: e9 ff f4 ff ff jmp 80105a4e - -8010654f : -.globl vector162 -vector162: - pushl $0 -8010654f: 6a 00 push $0x0 - pushl $162 -80106551: 68 a2 00 00 00 push $0xa2 - jmp alltraps -80106556: e9 f3 f4 ff ff jmp 80105a4e - -8010655b : -.globl vector163 -vector163: - pushl $0 -8010655b: 6a 00 push $0x0 - pushl $163 -8010655d: 68 a3 00 00 00 push $0xa3 - jmp alltraps -80106562: e9 e7 f4 ff ff jmp 80105a4e - -80106567 : -.globl vector164 -vector164: - pushl $0 -80106567: 6a 00 push $0x0 - pushl $164 -80106569: 68 a4 00 00 00 push $0xa4 - jmp alltraps -8010656e: e9 db f4 ff ff jmp 80105a4e - -80106573 : -.globl vector165 -vector165: - pushl $0 -80106573: 6a 00 push $0x0 - pushl $165 -80106575: 68 a5 00 00 00 push $0xa5 - jmp alltraps -8010657a: e9 cf f4 ff ff jmp 80105a4e - -8010657f : -.globl vector166 -vector166: - pushl $0 -8010657f: 6a 00 push $0x0 - pushl $166 -80106581: 68 a6 00 00 00 push $0xa6 - jmp alltraps -80106586: e9 c3 f4 ff ff jmp 80105a4e - -8010658b : -.globl vector167 -vector167: - pushl $0 -8010658b: 6a 00 push $0x0 - pushl $167 -8010658d: 68 a7 00 00 00 push $0xa7 - jmp alltraps -80106592: e9 b7 f4 ff ff jmp 80105a4e - -80106597 : -.globl vector168 -vector168: - pushl $0 -80106597: 6a 00 push $0x0 - pushl $168 -80106599: 68 a8 00 00 00 push $0xa8 - jmp alltraps -8010659e: e9 ab f4 ff ff jmp 80105a4e - -801065a3 : -.globl vector169 -vector169: - pushl $0 -801065a3: 6a 00 push $0x0 - pushl $169 -801065a5: 68 a9 00 00 00 push $0xa9 - jmp alltraps -801065aa: e9 9f f4 ff ff jmp 80105a4e - -801065af : -.globl vector170 -vector170: - pushl $0 -801065af: 6a 00 push $0x0 - pushl $170 -801065b1: 68 aa 00 00 00 push $0xaa - jmp alltraps -801065b6: e9 93 f4 ff ff jmp 80105a4e - -801065bb : -.globl vector171 -vector171: - pushl $0 -801065bb: 6a 00 push $0x0 - pushl $171 -801065bd: 68 ab 00 00 00 push $0xab - jmp alltraps -801065c2: e9 87 f4 ff ff jmp 80105a4e - -801065c7 : -.globl vector172 -vector172: - pushl $0 -801065c7: 6a 00 push $0x0 - pushl $172 -801065c9: 68 ac 00 00 00 push $0xac - jmp alltraps -801065ce: e9 7b f4 ff ff jmp 80105a4e - -801065d3 : -.globl vector173 -vector173: - pushl $0 -801065d3: 6a 00 push $0x0 - pushl $173 -801065d5: 68 ad 00 00 00 push $0xad - jmp alltraps -801065da: e9 6f f4 ff ff jmp 80105a4e - -801065df : -.globl vector174 -vector174: - pushl $0 -801065df: 6a 00 push $0x0 - pushl $174 -801065e1: 68 ae 00 00 00 push $0xae - jmp alltraps -801065e6: e9 63 f4 ff ff jmp 80105a4e - -801065eb : -.globl vector175 -vector175: - pushl $0 -801065eb: 6a 00 push $0x0 - pushl $175 -801065ed: 68 af 00 00 00 push $0xaf - jmp alltraps -801065f2: e9 57 f4 ff ff jmp 80105a4e - -801065f7 : -.globl vector176 -vector176: - pushl $0 -801065f7: 6a 00 push $0x0 - pushl $176 -801065f9: 68 b0 00 00 00 push $0xb0 - jmp alltraps -801065fe: e9 4b f4 ff ff jmp 80105a4e - -80106603 : -.globl vector177 -vector177: - pushl $0 -80106603: 6a 00 push $0x0 - pushl $177 -80106605: 68 b1 00 00 00 push $0xb1 - jmp alltraps -8010660a: e9 3f f4 ff ff jmp 80105a4e - -8010660f : -.globl vector178 -vector178: - pushl $0 -8010660f: 6a 00 push $0x0 - pushl $178 -80106611: 68 b2 00 00 00 push $0xb2 - jmp alltraps -80106616: e9 33 f4 ff ff jmp 80105a4e - -8010661b : -.globl vector179 -vector179: - pushl $0 -8010661b: 6a 00 push $0x0 - pushl $179 -8010661d: 68 b3 00 00 00 push $0xb3 - jmp alltraps -80106622: e9 27 f4 ff ff jmp 80105a4e - -80106627 : -.globl vector180 -vector180: - pushl $0 -80106627: 6a 00 push $0x0 - pushl $180 -80106629: 68 b4 00 00 00 push $0xb4 - jmp alltraps -8010662e: e9 1b f4 ff ff jmp 80105a4e - -80106633 : -.globl vector181 -vector181: - pushl $0 -80106633: 6a 00 push $0x0 - pushl $181 -80106635: 68 b5 00 00 00 push $0xb5 - jmp alltraps -8010663a: e9 0f f4 ff ff jmp 80105a4e - -8010663f : -.globl vector182 -vector182: - pushl $0 -8010663f: 6a 00 push $0x0 - pushl $182 -80106641: 68 b6 00 00 00 push $0xb6 - jmp alltraps -80106646: e9 03 f4 ff ff jmp 80105a4e - -8010664b : -.globl vector183 -vector183: - pushl $0 -8010664b: 6a 00 push $0x0 - pushl $183 -8010664d: 68 b7 00 00 00 push $0xb7 - jmp alltraps -80106652: e9 f7 f3 ff ff jmp 80105a4e - -80106657 : -.globl vector184 -vector184: - pushl $0 -80106657: 6a 00 push $0x0 - pushl $184 -80106659: 68 b8 00 00 00 push $0xb8 - jmp alltraps -8010665e: e9 eb f3 ff ff jmp 80105a4e - -80106663 : -.globl vector185 -vector185: - pushl $0 -80106663: 6a 00 push $0x0 - pushl $185 -80106665: 68 b9 00 00 00 push $0xb9 - jmp alltraps -8010666a: e9 df f3 ff ff jmp 80105a4e - -8010666f : -.globl vector186 -vector186: - pushl $0 -8010666f: 6a 00 push $0x0 - pushl $186 -80106671: 68 ba 00 00 00 push $0xba - jmp alltraps -80106676: e9 d3 f3 ff ff jmp 80105a4e - -8010667b : -.globl vector187 -vector187: - pushl $0 -8010667b: 6a 00 push $0x0 - pushl $187 -8010667d: 68 bb 00 00 00 push $0xbb - jmp alltraps -80106682: e9 c7 f3 ff ff jmp 80105a4e - -80106687 : -.globl vector188 -vector188: - pushl $0 -80106687: 6a 00 push $0x0 - pushl $188 -80106689: 68 bc 00 00 00 push $0xbc - jmp alltraps -8010668e: e9 bb f3 ff ff jmp 80105a4e - -80106693 : -.globl vector189 -vector189: - pushl $0 -80106693: 6a 00 push $0x0 - pushl $189 -80106695: 68 bd 00 00 00 push $0xbd - jmp alltraps -8010669a: e9 af f3 ff ff jmp 80105a4e - -8010669f : -.globl vector190 -vector190: - pushl $0 -8010669f: 6a 00 push $0x0 - pushl $190 -801066a1: 68 be 00 00 00 push $0xbe - jmp alltraps -801066a6: e9 a3 f3 ff ff jmp 80105a4e - -801066ab : -.globl vector191 -vector191: - pushl $0 -801066ab: 6a 00 push $0x0 - pushl $191 -801066ad: 68 bf 00 00 00 push $0xbf - jmp alltraps -801066b2: e9 97 f3 ff ff jmp 80105a4e - -801066b7 : -.globl vector192 -vector192: - pushl $0 -801066b7: 6a 00 push $0x0 - pushl $192 -801066b9: 68 c0 00 00 00 push $0xc0 - jmp alltraps -801066be: e9 8b f3 ff ff jmp 80105a4e - -801066c3 : -.globl vector193 -vector193: - pushl $0 -801066c3: 6a 00 push $0x0 - pushl $193 -801066c5: 68 c1 00 00 00 push $0xc1 - jmp alltraps -801066ca: e9 7f f3 ff ff jmp 80105a4e - -801066cf : -.globl vector194 -vector194: - pushl $0 -801066cf: 6a 00 push $0x0 - pushl $194 -801066d1: 68 c2 00 00 00 push $0xc2 - jmp alltraps -801066d6: e9 73 f3 ff ff jmp 80105a4e - -801066db : -.globl vector195 -vector195: - pushl $0 -801066db: 6a 00 push $0x0 - pushl $195 -801066dd: 68 c3 00 00 00 push $0xc3 - jmp alltraps -801066e2: e9 67 f3 ff ff jmp 80105a4e - -801066e7 : -.globl vector196 -vector196: - pushl $0 -801066e7: 6a 00 push $0x0 - pushl $196 -801066e9: 68 c4 00 00 00 push $0xc4 - jmp alltraps -801066ee: e9 5b f3 ff ff jmp 80105a4e - -801066f3 : -.globl vector197 -vector197: - pushl $0 -801066f3: 6a 00 push $0x0 - pushl $197 -801066f5: 68 c5 00 00 00 push $0xc5 - jmp alltraps -801066fa: e9 4f f3 ff ff jmp 80105a4e - -801066ff : -.globl vector198 -vector198: - pushl $0 -801066ff: 6a 00 push $0x0 - pushl $198 -80106701: 68 c6 00 00 00 push $0xc6 - jmp alltraps -80106706: e9 43 f3 ff ff jmp 80105a4e - -8010670b : -.globl vector199 -vector199: - pushl $0 -8010670b: 6a 00 push $0x0 - pushl $199 -8010670d: 68 c7 00 00 00 push $0xc7 - jmp alltraps -80106712: e9 37 f3 ff ff jmp 80105a4e - -80106717 : -.globl vector200 -vector200: - pushl $0 -80106717: 6a 00 push $0x0 - pushl $200 -80106719: 68 c8 00 00 00 push $0xc8 - jmp alltraps -8010671e: e9 2b f3 ff ff jmp 80105a4e - -80106723 : -.globl vector201 -vector201: - pushl $0 -80106723: 6a 00 push $0x0 - pushl $201 -80106725: 68 c9 00 00 00 push $0xc9 - jmp alltraps -8010672a: e9 1f f3 ff ff jmp 80105a4e - -8010672f : -.globl vector202 -vector202: - pushl $0 -8010672f: 6a 00 push $0x0 - pushl $202 -80106731: 68 ca 00 00 00 push $0xca - jmp alltraps -80106736: e9 13 f3 ff ff jmp 80105a4e - -8010673b : -.globl vector203 -vector203: - pushl $0 -8010673b: 6a 00 push $0x0 - pushl $203 -8010673d: 68 cb 00 00 00 push $0xcb - jmp alltraps -80106742: e9 07 f3 ff ff jmp 80105a4e - -80106747 : -.globl vector204 -vector204: - pushl $0 -80106747: 6a 00 push $0x0 - pushl $204 -80106749: 68 cc 00 00 00 push $0xcc - jmp alltraps -8010674e: e9 fb f2 ff ff jmp 80105a4e - -80106753 : -.globl vector205 -vector205: - pushl $0 -80106753: 6a 00 push $0x0 - pushl $205 -80106755: 68 cd 00 00 00 push $0xcd - jmp alltraps -8010675a: e9 ef f2 ff ff jmp 80105a4e - -8010675f : -.globl vector206 -vector206: - pushl $0 -8010675f: 6a 00 push $0x0 - pushl $206 -80106761: 68 ce 00 00 00 push $0xce - jmp alltraps -80106766: e9 e3 f2 ff ff jmp 80105a4e - -8010676b : -.globl vector207 -vector207: - pushl $0 -8010676b: 6a 00 push $0x0 - pushl $207 -8010676d: 68 cf 00 00 00 push $0xcf - jmp alltraps -80106772: e9 d7 f2 ff ff jmp 80105a4e - -80106777 : -.globl vector208 -vector208: - pushl $0 -80106777: 6a 00 push $0x0 - pushl $208 -80106779: 68 d0 00 00 00 push $0xd0 - jmp alltraps -8010677e: e9 cb f2 ff ff jmp 80105a4e - -80106783 : -.globl vector209 -vector209: - pushl $0 -80106783: 6a 00 push $0x0 - pushl $209 -80106785: 68 d1 00 00 00 push $0xd1 - jmp alltraps -8010678a: e9 bf f2 ff ff jmp 80105a4e - -8010678f : -.globl vector210 -vector210: - pushl $0 -8010678f: 6a 00 push $0x0 - pushl $210 -80106791: 68 d2 00 00 00 push $0xd2 - jmp alltraps -80106796: e9 b3 f2 ff ff jmp 80105a4e - -8010679b : -.globl vector211 -vector211: - pushl $0 -8010679b: 6a 00 push $0x0 - pushl $211 -8010679d: 68 d3 00 00 00 push $0xd3 - jmp alltraps -801067a2: e9 a7 f2 ff ff jmp 80105a4e - -801067a7 : -.globl vector212 -vector212: - pushl $0 -801067a7: 6a 00 push $0x0 - pushl $212 -801067a9: 68 d4 00 00 00 push $0xd4 - jmp alltraps -801067ae: e9 9b f2 ff ff jmp 80105a4e - -801067b3 : -.globl vector213 -vector213: - pushl $0 -801067b3: 6a 00 push $0x0 - pushl $213 -801067b5: 68 d5 00 00 00 push $0xd5 - jmp alltraps -801067ba: e9 8f f2 ff ff jmp 80105a4e - -801067bf : -.globl vector214 -vector214: - pushl $0 -801067bf: 6a 00 push $0x0 - pushl $214 -801067c1: 68 d6 00 00 00 push $0xd6 - jmp alltraps -801067c6: e9 83 f2 ff ff jmp 80105a4e - -801067cb : -.globl vector215 -vector215: - pushl $0 -801067cb: 6a 00 push $0x0 - pushl $215 -801067cd: 68 d7 00 00 00 push $0xd7 - jmp alltraps -801067d2: e9 77 f2 ff ff jmp 80105a4e - -801067d7 : -.globl vector216 -vector216: - pushl $0 -801067d7: 6a 00 push $0x0 - pushl $216 -801067d9: 68 d8 00 00 00 push $0xd8 - jmp alltraps -801067de: e9 6b f2 ff ff jmp 80105a4e - -801067e3 : -.globl vector217 -vector217: - pushl $0 -801067e3: 6a 00 push $0x0 - pushl $217 -801067e5: 68 d9 00 00 00 push $0xd9 - jmp alltraps -801067ea: e9 5f f2 ff ff jmp 80105a4e - -801067ef : -.globl vector218 -vector218: - pushl $0 -801067ef: 6a 00 push $0x0 - pushl $218 -801067f1: 68 da 00 00 00 push $0xda - jmp alltraps -801067f6: e9 53 f2 ff ff jmp 80105a4e - -801067fb : -.globl vector219 -vector219: - pushl $0 -801067fb: 6a 00 push $0x0 - pushl $219 -801067fd: 68 db 00 00 00 push $0xdb - jmp alltraps -80106802: e9 47 f2 ff ff jmp 80105a4e - -80106807 : -.globl vector220 -vector220: - pushl $0 -80106807: 6a 00 push $0x0 - pushl $220 -80106809: 68 dc 00 00 00 push $0xdc - jmp alltraps -8010680e: e9 3b f2 ff ff jmp 80105a4e - -80106813 : -.globl vector221 -vector221: - pushl $0 -80106813: 6a 00 push $0x0 - pushl $221 -80106815: 68 dd 00 00 00 push $0xdd - jmp alltraps -8010681a: e9 2f f2 ff ff jmp 80105a4e - -8010681f : -.globl vector222 -vector222: - pushl $0 -8010681f: 6a 00 push $0x0 - pushl $222 -80106821: 68 de 00 00 00 push $0xde - jmp alltraps -80106826: e9 23 f2 ff ff jmp 80105a4e - -8010682b : -.globl vector223 -vector223: - pushl $0 -8010682b: 6a 00 push $0x0 - pushl $223 -8010682d: 68 df 00 00 00 push $0xdf - jmp alltraps -80106832: e9 17 f2 ff ff jmp 80105a4e - -80106837 : -.globl vector224 -vector224: - pushl $0 -80106837: 6a 00 push $0x0 - pushl $224 -80106839: 68 e0 00 00 00 push $0xe0 - jmp alltraps -8010683e: e9 0b f2 ff ff jmp 80105a4e - -80106843 : -.globl vector225 -vector225: - pushl $0 -80106843: 6a 00 push $0x0 - pushl $225 -80106845: 68 e1 00 00 00 push $0xe1 - jmp alltraps -8010684a: e9 ff f1 ff ff jmp 80105a4e - -8010684f : -.globl vector226 -vector226: - pushl $0 -8010684f: 6a 00 push $0x0 - pushl $226 -80106851: 68 e2 00 00 00 push $0xe2 - jmp alltraps -80106856: e9 f3 f1 ff ff jmp 80105a4e - -8010685b : -.globl vector227 -vector227: - pushl $0 -8010685b: 6a 00 push $0x0 - pushl $227 -8010685d: 68 e3 00 00 00 push $0xe3 - jmp alltraps -80106862: e9 e7 f1 ff ff jmp 80105a4e - -80106867 : -.globl vector228 -vector228: - pushl $0 -80106867: 6a 00 push $0x0 - pushl $228 -80106869: 68 e4 00 00 00 push $0xe4 - jmp alltraps -8010686e: e9 db f1 ff ff jmp 80105a4e - -80106873 : -.globl vector229 -vector229: - pushl $0 -80106873: 6a 00 push $0x0 - pushl $229 -80106875: 68 e5 00 00 00 push $0xe5 - jmp alltraps -8010687a: e9 cf f1 ff ff jmp 80105a4e - -8010687f : -.globl vector230 -vector230: - pushl $0 -8010687f: 6a 00 push $0x0 - pushl $230 -80106881: 68 e6 00 00 00 push $0xe6 - jmp alltraps -80106886: e9 c3 f1 ff ff jmp 80105a4e - -8010688b : -.globl vector231 -vector231: - pushl $0 -8010688b: 6a 00 push $0x0 - pushl $231 -8010688d: 68 e7 00 00 00 push $0xe7 - jmp alltraps -80106892: e9 b7 f1 ff ff jmp 80105a4e - -80106897 : -.globl vector232 -vector232: - pushl $0 -80106897: 6a 00 push $0x0 - pushl $232 -80106899: 68 e8 00 00 00 push $0xe8 - jmp alltraps -8010689e: e9 ab f1 ff ff jmp 80105a4e - -801068a3 : -.globl vector233 -vector233: - pushl $0 -801068a3: 6a 00 push $0x0 - pushl $233 -801068a5: 68 e9 00 00 00 push $0xe9 - jmp alltraps -801068aa: e9 9f f1 ff ff jmp 80105a4e - -801068af : -.globl vector234 -vector234: - pushl $0 -801068af: 6a 00 push $0x0 - pushl $234 -801068b1: 68 ea 00 00 00 push $0xea - jmp alltraps -801068b6: e9 93 f1 ff ff jmp 80105a4e - -801068bb : -.globl vector235 -vector235: - pushl $0 -801068bb: 6a 00 push $0x0 - pushl $235 -801068bd: 68 eb 00 00 00 push $0xeb - jmp alltraps -801068c2: e9 87 f1 ff ff jmp 80105a4e - -801068c7 : -.globl vector236 -vector236: - pushl $0 -801068c7: 6a 00 push $0x0 - pushl $236 -801068c9: 68 ec 00 00 00 push $0xec - jmp alltraps -801068ce: e9 7b f1 ff ff jmp 80105a4e - -801068d3 : -.globl vector237 -vector237: - pushl $0 -801068d3: 6a 00 push $0x0 - pushl $237 -801068d5: 68 ed 00 00 00 push $0xed - jmp alltraps -801068da: e9 6f f1 ff ff jmp 80105a4e - -801068df : -.globl vector238 -vector238: - pushl $0 -801068df: 6a 00 push $0x0 - pushl $238 -801068e1: 68 ee 00 00 00 push $0xee - jmp alltraps -801068e6: e9 63 f1 ff ff jmp 80105a4e - -801068eb : -.globl vector239 -vector239: - pushl $0 -801068eb: 6a 00 push $0x0 - pushl $239 -801068ed: 68 ef 00 00 00 push $0xef - jmp alltraps -801068f2: e9 57 f1 ff ff jmp 80105a4e - -801068f7 : -.globl vector240 -vector240: - pushl $0 -801068f7: 6a 00 push $0x0 - pushl $240 -801068f9: 68 f0 00 00 00 push $0xf0 - jmp alltraps -801068fe: e9 4b f1 ff ff jmp 80105a4e - -80106903 : -.globl vector241 -vector241: - pushl $0 -80106903: 6a 00 push $0x0 - pushl $241 -80106905: 68 f1 00 00 00 push $0xf1 - jmp alltraps -8010690a: e9 3f f1 ff ff jmp 80105a4e - -8010690f : -.globl vector242 -vector242: - pushl $0 -8010690f: 6a 00 push $0x0 - pushl $242 -80106911: 68 f2 00 00 00 push $0xf2 - jmp alltraps -80106916: e9 33 f1 ff ff jmp 80105a4e - -8010691b : -.globl vector243 -vector243: - pushl $0 -8010691b: 6a 00 push $0x0 - pushl $243 -8010691d: 68 f3 00 00 00 push $0xf3 - jmp alltraps -80106922: e9 27 f1 ff ff jmp 80105a4e - -80106927 : -.globl vector244 -vector244: - pushl $0 -80106927: 6a 00 push $0x0 - pushl $244 -80106929: 68 f4 00 00 00 push $0xf4 - jmp alltraps -8010692e: e9 1b f1 ff ff jmp 80105a4e - -80106933 : -.globl vector245 -vector245: - pushl $0 -80106933: 6a 00 push $0x0 - pushl $245 -80106935: 68 f5 00 00 00 push $0xf5 - jmp alltraps -8010693a: e9 0f f1 ff ff jmp 80105a4e - -8010693f : -.globl vector246 -vector246: - pushl $0 -8010693f: 6a 00 push $0x0 - pushl $246 -80106941: 68 f6 00 00 00 push $0xf6 - jmp alltraps -80106946: e9 03 f1 ff ff jmp 80105a4e - -8010694b : -.globl vector247 -vector247: - pushl $0 -8010694b: 6a 00 push $0x0 - pushl $247 -8010694d: 68 f7 00 00 00 push $0xf7 - jmp alltraps -80106952: e9 f7 f0 ff ff jmp 80105a4e - -80106957 : -.globl vector248 -vector248: - pushl $0 -80106957: 6a 00 push $0x0 - pushl $248 -80106959: 68 f8 00 00 00 push $0xf8 - jmp alltraps -8010695e: e9 eb f0 ff ff jmp 80105a4e - -80106963 : -.globl vector249 -vector249: - pushl $0 -80106963: 6a 00 push $0x0 - pushl $249 -80106965: 68 f9 00 00 00 push $0xf9 - jmp alltraps -8010696a: e9 df f0 ff ff jmp 80105a4e - -8010696f : -.globl vector250 -vector250: - pushl $0 -8010696f: 6a 00 push $0x0 - pushl $250 -80106971: 68 fa 00 00 00 push $0xfa - jmp alltraps -80106976: e9 d3 f0 ff ff jmp 80105a4e - -8010697b : -.globl vector251 -vector251: - pushl $0 -8010697b: 6a 00 push $0x0 - pushl $251 -8010697d: 68 fb 00 00 00 push $0xfb - jmp alltraps -80106982: e9 c7 f0 ff ff jmp 80105a4e - -80106987 : -.globl vector252 -vector252: - pushl $0 -80106987: 6a 00 push $0x0 - pushl $252 -80106989: 68 fc 00 00 00 push $0xfc - jmp alltraps -8010698e: e9 bb f0 ff ff jmp 80105a4e - -80106993 : -.globl vector253 -vector253: - pushl $0 -80106993: 6a 00 push $0x0 - pushl $253 -80106995: 68 fd 00 00 00 push $0xfd - jmp alltraps -8010699a: e9 af f0 ff ff jmp 80105a4e - -8010699f : -.globl vector254 -vector254: - pushl $0 -8010699f: 6a 00 push $0x0 - pushl $254 -801069a1: 68 fe 00 00 00 push $0xfe - jmp alltraps -801069a6: e9 a3 f0 ff ff jmp 80105a4e - -801069ab : -.globl vector255 -vector255: - pushl $0 -801069ab: 6a 00 push $0x0 - pushl $255 -801069ad: 68 ff 00 00 00 push $0xff - jmp alltraps -801069b2: e9 97 f0 ff ff jmp 80105a4e -801069b7: 66 90 xchg %ax,%ax -801069b9: 66 90 xchg %ax,%ax -801069bb: 66 90 xchg %ax,%ax -801069bd: 66 90 xchg %ax,%ax -801069bf: 90 nop - -801069c0 : - -// Deallocate user pages to bring the process size from oldsz to -// 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) { -801069c0: 55 push %ebp -801069c1: 89 e5 mov %esp,%ebp -801069c3: 57 push %edi -801069c4: 56 push %esi -801069c5: 53 push %ebx - - if (newsz >= oldsz) { - return oldsz; - } - - a = PGROUNDUP(newsz); -801069c6: 8d 99 ff 0f 00 00 lea 0xfff(%ecx),%ebx -801069cc: 81 e3 00 f0 ff ff and $0xfffff000,%ebx -int deallocuvm(pde_t *pgdir, uint oldsz, uint newsz) { -801069d2: 83 ec 1c sub $0x1c,%esp -801069d5: 89 4d e0 mov %ecx,-0x20(%ebp) - for (; a < oldsz; a += PGSIZE) { -801069d8: 39 d3 cmp %edx,%ebx -801069da: 73 49 jae 80106a25 -801069dc: 89 c7 mov %eax,%edi -801069de: eb 0c jmp 801069ec - pte = walkpgdir(pgdir, (char*)a, 0); - if (!pte) { - a = PGADDR(PDX(a) + 1, 0, 0) - PGSIZE; -801069e0: 83 c0 01 add $0x1,%eax -801069e3: c1 e0 16 shl $0x16,%eax -801069e6: 89 c3 mov %eax,%ebx - for (; a < oldsz; a += PGSIZE) { -801069e8: 39 da cmp %ebx,%edx -801069ea: 76 39 jbe 80106a25 - pde = &pgdir[PDX(va)]; -801069ec: 89 d8 mov %ebx,%eax -801069ee: c1 e8 16 shr $0x16,%eax - if (*pde & PTE_P) { -801069f1: 8b 0c 87 mov (%edi,%eax,4),%ecx -801069f4: f6 c1 01 test $0x1,%cl -801069f7: 74 e7 je 801069e0 - return &pgtab[PTX(va)]; -801069f9: 89 de mov %ebx,%esi - pgtab = (pte_t*)P2V(PTE_ADDR(*pde)); -801069fb: 81 e1 00 f0 ff ff and $0xfffff000,%ecx - return &pgtab[PTX(va)]; -80106a01: c1 ee 0a shr $0xa,%esi -80106a04: 81 e6 fc 0f 00 00 and $0xffc,%esi -80106a0a: 8d b4 31 00 00 00 80 lea -0x80000000(%ecx,%esi,1),%esi - if (!pte) { -80106a11: 85 f6 test %esi,%esi -80106a13: 74 cb je 801069e0 - } - else if ((*pte & PTE_P) != 0) { -80106a15: 8b 06 mov (%esi),%eax -80106a17: a8 01 test $0x1,%al -80106a19: 75 15 jne 80106a30 - for (; a < oldsz; a += PGSIZE) { -80106a1b: 81 c3 00 10 00 00 add $0x1000,%ebx -80106a21: 39 da cmp %ebx,%edx -80106a23: 77 c7 ja 801069ec - kfree(v); - *pte = 0; - } - } - return newsz; -} -80106a25: 8b 45 e0 mov -0x20(%ebp),%eax -80106a28: 8d 65 f4 lea -0xc(%ebp),%esp -80106a2b: 5b pop %ebx -80106a2c: 5e pop %esi -80106a2d: 5f pop %edi -80106a2e: 5d pop %ebp -80106a2f: c3 ret - if (pa == 0) { -80106a30: 25 00 f0 ff ff and $0xfffff000,%eax -80106a35: 74 25 je 80106a5c - kfree(v); -80106a37: 83 ec 0c sub $0xc,%esp - char *v = P2V(pa); -80106a3a: 05 00 00 00 80 add $0x80000000,%eax -80106a3f: 89 55 e4 mov %edx,-0x1c(%ebp) - for (; a < oldsz; a += PGSIZE) { -80106a42: 81 c3 00 10 00 00 add $0x1000,%ebx - kfree(v); -80106a48: 50 push %eax -80106a49: e8 92 bb ff ff call 801025e0 - *pte = 0; -80106a4e: c7 06 00 00 00 00 movl $0x0,(%esi) - for (; a < oldsz; a += PGSIZE) { -80106a54: 8b 55 e4 mov -0x1c(%ebp),%edx -80106a57: 83 c4 10 add $0x10,%esp -80106a5a: eb 8c jmp 801069e8 - panic("kfree"); -80106a5c: 83 ec 0c sub $0xc,%esp -80106a5f: 68 46 76 10 80 push $0x80107646 -80106a64: e8 27 99 ff ff call 80100390 -80106a69: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -80106a70 : -static int mappages(pde_t *pgdir, void *va, uint size, uint pa, int perm) { -80106a70: 55 push %ebp -80106a71: 89 e5 mov %esp,%ebp -80106a73: 57 push %edi -80106a74: 56 push %esi -80106a75: 53 push %ebx - a = (char*)PGROUNDDOWN((uint)va); -80106a76: 89 d3 mov %edx,%ebx -80106a78: 81 e3 00 f0 ff ff and $0xfffff000,%ebx -static int mappages(pde_t *pgdir, void *va, uint size, uint pa, int perm) { -80106a7e: 83 ec 1c sub $0x1c,%esp -80106a81: 89 45 e4 mov %eax,-0x1c(%ebp) - last = (char*)PGROUNDDOWN(((uint)va) + size - 1); -80106a84: 8d 44 0a ff lea -0x1(%edx,%ecx,1),%eax -80106a88: 25 00 f0 ff ff and $0xfffff000,%eax -80106a8d: 89 45 dc mov %eax,-0x24(%ebp) -80106a90: 8b 45 08 mov 0x8(%ebp),%eax -80106a93: 29 d8 sub %ebx,%eax -80106a95: 89 45 e0 mov %eax,-0x20(%ebp) -80106a98: eb 3d jmp 80106ad7 -80106a9a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - return &pgtab[PTX(va)]; -80106aa0: 89 da mov %ebx,%edx - pgtab = (pte_t*)P2V(PTE_ADDR(*pde)); -80106aa2: 25 00 f0 ff ff and $0xfffff000,%eax - return &pgtab[PTX(va)]; -80106aa7: c1 ea 0a shr $0xa,%edx -80106aaa: 81 e2 fc 0f 00 00 and $0xffc,%edx -80106ab0: 8d 84 10 00 00 00 80 lea -0x80000000(%eax,%edx,1),%eax - if ((pte = walkpgdir(pgdir, a, 1)) == 0) { -80106ab7: 85 c0 test %eax,%eax -80106ab9: 74 75 je 80106b30 - if (*pte & PTE_P) { -80106abb: f6 00 01 testb $0x1,(%eax) -80106abe: 0f 85 86 00 00 00 jne 80106b4a - *pte = pa | perm | PTE_P; -80106ac4: 0b 75 0c or 0xc(%ebp),%esi -80106ac7: 83 ce 01 or $0x1,%esi -80106aca: 89 30 mov %esi,(%eax) - if (a == last) { -80106acc: 3b 5d dc cmp -0x24(%ebp),%ebx -80106acf: 74 6f je 80106b40 - a += PGSIZE; -80106ad1: 81 c3 00 10 00 00 add $0x1000,%ebx - for (;;) { -80106ad7: 8b 45 e0 mov -0x20(%ebp),%eax - pde = &pgdir[PDX(va)]; -80106ada: 8b 4d e4 mov -0x1c(%ebp),%ecx -80106add: 8d 34 18 lea (%eax,%ebx,1),%esi -80106ae0: 89 d8 mov %ebx,%eax -80106ae2: c1 e8 16 shr $0x16,%eax -80106ae5: 8d 3c 81 lea (%ecx,%eax,4),%edi - if (*pde & PTE_P) { -80106ae8: 8b 07 mov (%edi),%eax -80106aea: a8 01 test $0x1,%al -80106aec: 75 b2 jne 80106aa0 - if (!alloc || (pgtab = (pte_t*)kalloc()) == 0) { -80106aee: e8 ad bc ff ff call 801027a0 -80106af3: 85 c0 test %eax,%eax -80106af5: 74 39 je 80106b30 - memset(pgtab, 0, PGSIZE); -80106af7: 83 ec 04 sub $0x4,%esp -80106afa: 89 45 d8 mov %eax,-0x28(%ebp) -80106afd: 68 00 10 00 00 push $0x1000 -80106b02: 6a 00 push $0x0 -80106b04: 50 push %eax -80106b05: e8 b6 dc ff ff call 801047c0 - *pde = V2P(pgtab) | PTE_P | PTE_W | PTE_U; -80106b0a: 8b 55 d8 mov -0x28(%ebp),%edx - return &pgtab[PTX(va)]; -80106b0d: 83 c4 10 add $0x10,%esp - *pde = V2P(pgtab) | PTE_P | PTE_W | PTE_U; -80106b10: 8d 82 00 00 00 80 lea -0x80000000(%edx),%eax -80106b16: 83 c8 07 or $0x7,%eax -80106b19: 89 07 mov %eax,(%edi) - return &pgtab[PTX(va)]; -80106b1b: 89 d8 mov %ebx,%eax -80106b1d: c1 e8 0a shr $0xa,%eax -80106b20: 25 fc 0f 00 00 and $0xffc,%eax -80106b25: 01 d0 add %edx,%eax -80106b27: eb 92 jmp 80106abb -80106b29: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -} -80106b30: 8d 65 f4 lea -0xc(%ebp),%esp - return -1; -80106b33: b8 ff ff ff ff mov $0xffffffff,%eax -} -80106b38: 5b pop %ebx -80106b39: 5e pop %esi -80106b3a: 5f pop %edi -80106b3b: 5d pop %ebp -80106b3c: c3 ret -80106b3d: 8d 76 00 lea 0x0(%esi),%esi -80106b40: 8d 65 f4 lea -0xc(%ebp),%esp - return 0; -80106b43: 31 c0 xor %eax,%eax -} -80106b45: 5b pop %ebx -80106b46: 5e pop %esi -80106b47: 5f pop %edi -80106b48: 5d pop %ebp -80106b49: c3 ret - panic("remap"); -80106b4a: 83 ec 0c sub $0xc,%esp -80106b4d: 68 a0 7c 10 80 push $0x80107ca0 -80106b52: e8 39 98 ff ff call 80100390 -80106b57: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80106b5e: 66 90 xchg %ax,%ax - -80106b60 : -void seginit(void) { -80106b60: 55 push %ebp -80106b61: 89 e5 mov %esp,%ebp -80106b63: 83 ec 18 sub $0x18,%esp - c = &cpus[cpuid()]; -80106b66: e8 45 cf ff ff call 80103ab0 - pd[0] = size - 1; -80106b6b: ba 2f 00 00 00 mov $0x2f,%edx -80106b70: 69 c0 b0 00 00 00 imul $0xb0,%eax,%eax -80106b76: 66 89 55 f2 mov %dx,-0xe(%ebp) - c->gdt[SEG_KCODE] = SEG(STA_X | STA_R, 0, 0xffffffff, 0); -80106b7a: c7 80 38 18 11 80 ff movl $0xffff,-0x7feee7c8(%eax) -80106b81: ff 00 00 -80106b84: c7 80 3c 18 11 80 00 movl $0xcf9a00,-0x7feee7c4(%eax) -80106b8b: 9a cf 00 - c->gdt[SEG_KDATA] = SEG(STA_W, 0, 0xffffffff, 0); -80106b8e: c7 80 40 18 11 80 ff movl $0xffff,-0x7feee7c0(%eax) -80106b95: ff 00 00 -80106b98: c7 80 44 18 11 80 00 movl $0xcf9200,-0x7feee7bc(%eax) -80106b9f: 92 cf 00 - c->gdt[SEG_UCODE] = SEG(STA_X | STA_R, 0, 0xffffffff, DPL_USER); -80106ba2: c7 80 48 18 11 80 ff movl $0xffff,-0x7feee7b8(%eax) -80106ba9: ff 00 00 -80106bac: c7 80 4c 18 11 80 00 movl $0xcffa00,-0x7feee7b4(%eax) -80106bb3: fa cf 00 - c->gdt[SEG_UDATA] = SEG(STA_W, 0, 0xffffffff, DPL_USER); -80106bb6: c7 80 50 18 11 80 ff movl $0xffff,-0x7feee7b0(%eax) -80106bbd: ff 00 00 -80106bc0: c7 80 54 18 11 80 00 movl $0xcff200,-0x7feee7ac(%eax) -80106bc7: f2 cf 00 - lgdt(c->gdt, sizeof(c->gdt)); -80106bca: 05 30 18 11 80 add $0x80111830,%eax - pd[1] = (uint)p; -80106bcf: 66 89 45 f4 mov %ax,-0xc(%ebp) - pd[2] = (uint)p >> 16; -80106bd3: c1 e8 10 shr $0x10,%eax -80106bd6: 66 89 45 f6 mov %ax,-0xa(%ebp) - asm volatile ("lgdt (%0)" : : "r" (pd)); -80106bda: 8d 45 f2 lea -0xe(%ebp),%eax -80106bdd: 0f 01 10 lgdtl (%eax) -} -80106be0: c9 leave -80106be1: c3 ret -80106be2: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80106be9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -80106bf0 : - lcr3(V2P(kpgdir)); // switch to the kernel page table -80106bf0: a1 e4 44 11 80 mov 0x801144e4,%eax -80106bf5: 05 00 00 00 80 add $0x80000000,%eax - return val; -} - -static inline void lcr3(uint val) { - asm volatile ("movl %0,%%cr3" : : "r" (val)); -80106bfa: 0f 22 d8 mov %eax,%cr3 -} -80106bfd: c3 ret -80106bfe: 66 90 xchg %ax,%ax - -80106c00 : -void switchuvm(struct proc *p) { -80106c00: 55 push %ebp -80106c01: 89 e5 mov %esp,%ebp -80106c03: 57 push %edi -80106c04: 56 push %esi -80106c05: 53 push %ebx -80106c06: 83 ec 1c sub $0x1c,%esp -80106c09: 8b 75 08 mov 0x8(%ebp),%esi - if (p == 0) { -80106c0c: 85 f6 test %esi,%esi -80106c0e: 0f 84 cb 00 00 00 je 80106cdf - if (p->kstack == 0) { -80106c14: 8b 46 08 mov 0x8(%esi),%eax -80106c17: 85 c0 test %eax,%eax -80106c19: 0f 84 da 00 00 00 je 80106cf9 - if (p->pgdir == 0) { -80106c1f: 8b 46 04 mov 0x4(%esi),%eax -80106c22: 85 c0 test %eax,%eax -80106c24: 0f 84 c2 00 00 00 je 80106cec - pushcli(); -80106c2a: e8 81 d9 ff ff call 801045b0 - mycpu()->gdt[SEG_TSS] = SEG16(STS_T32A, &mycpu()->ts, -80106c2f: e8 1c ce ff ff call 80103a50 -80106c34: 89 c3 mov %eax,%ebx -80106c36: e8 15 ce ff ff call 80103a50 -80106c3b: 89 c7 mov %eax,%edi -80106c3d: e8 0e ce ff ff call 80103a50 -80106c42: 83 c7 08 add $0x8,%edi -80106c45: 89 45 e4 mov %eax,-0x1c(%ebp) -80106c48: e8 03 ce ff ff call 80103a50 -80106c4d: 8b 4d e4 mov -0x1c(%ebp),%ecx -80106c50: ba 67 00 00 00 mov $0x67,%edx -80106c55: 66 89 bb 9a 00 00 00 mov %di,0x9a(%ebx) -80106c5c: 83 c0 08 add $0x8,%eax -80106c5f: 66 89 93 98 00 00 00 mov %dx,0x98(%ebx) - mycpu()->ts.iomb = (ushort) 0xFFFF; -80106c66: bf ff ff ff ff mov $0xffffffff,%edi - mycpu()->gdt[SEG_TSS] = SEG16(STS_T32A, &mycpu()->ts, -80106c6b: 83 c1 08 add $0x8,%ecx -80106c6e: c1 e8 18 shr $0x18,%eax -80106c71: c1 e9 10 shr $0x10,%ecx -80106c74: 88 83 9f 00 00 00 mov %al,0x9f(%ebx) -80106c7a: 88 8b 9c 00 00 00 mov %cl,0x9c(%ebx) -80106c80: b9 99 40 00 00 mov $0x4099,%ecx -80106c85: 66 89 8b 9d 00 00 00 mov %cx,0x9d(%ebx) - mycpu()->ts.ss0 = SEG_KDATA << 3; -80106c8c: bb 10 00 00 00 mov $0x10,%ebx - mycpu()->gdt[SEG_TSS].s = 0; -80106c91: e8 ba cd ff ff call 80103a50 -80106c96: 80 a0 9d 00 00 00 ef andb $0xef,0x9d(%eax) - mycpu()->ts.ss0 = SEG_KDATA << 3; -80106c9d: e8 ae cd ff ff call 80103a50 -80106ca2: 66 89 58 10 mov %bx,0x10(%eax) - mycpu()->ts.esp0 = (uint)p->kstack + KSTACKSIZE; -80106ca6: 8b 5e 08 mov 0x8(%esi),%ebx -80106ca9: 81 c3 00 10 00 00 add $0x1000,%ebx -80106caf: e8 9c cd ff ff call 80103a50 -80106cb4: 89 58 0c mov %ebx,0xc(%eax) - mycpu()->ts.iomb = (ushort) 0xFFFF; -80106cb7: e8 94 cd ff ff call 80103a50 -80106cbc: 66 89 78 6e mov %di,0x6e(%eax) - asm volatile ("ltr %0" : : "r" (sel)); -80106cc0: b8 28 00 00 00 mov $0x28,%eax -80106cc5: 0f 00 d8 ltr %ax - lcr3(V2P(p->pgdir)); // switch to process's address space -80106cc8: 8b 46 04 mov 0x4(%esi),%eax -80106ccb: 05 00 00 00 80 add $0x80000000,%eax - asm volatile ("movl %0,%%cr3" : : "r" (val)); -80106cd0: 0f 22 d8 mov %eax,%cr3 -} -80106cd3: 8d 65 f4 lea -0xc(%ebp),%esp -80106cd6: 5b pop %ebx -80106cd7: 5e pop %esi -80106cd8: 5f pop %edi -80106cd9: 5d pop %ebp - popcli(); -80106cda: e9 21 d9 ff ff jmp 80104600 - panic("switchuvm: no process"); -80106cdf: 83 ec 0c sub $0xc,%esp -80106ce2: 68 a6 7c 10 80 push $0x80107ca6 -80106ce7: e8 a4 96 ff ff call 80100390 - panic("switchuvm: no pgdir"); -80106cec: 83 ec 0c sub $0xc,%esp -80106cef: 68 d1 7c 10 80 push $0x80107cd1 -80106cf4: e8 97 96 ff ff call 80100390 - panic("switchuvm: no kstack"); -80106cf9: 83 ec 0c sub $0xc,%esp -80106cfc: 68 bc 7c 10 80 push $0x80107cbc -80106d01: e8 8a 96 ff ff call 80100390 -80106d06: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80106d0d: 8d 76 00 lea 0x0(%esi),%esi - -80106d10 : -void inituvm(pde_t *pgdir, char *init, uint sz) { -80106d10: 55 push %ebp -80106d11: 89 e5 mov %esp,%ebp -80106d13: 57 push %edi -80106d14: 56 push %esi -80106d15: 53 push %ebx -80106d16: 83 ec 1c sub $0x1c,%esp -80106d19: 8b 45 0c mov 0xc(%ebp),%eax -80106d1c: 8b 75 10 mov 0x10(%ebp),%esi -80106d1f: 8b 7d 08 mov 0x8(%ebp),%edi -80106d22: 89 45 e4 mov %eax,-0x1c(%ebp) - if (sz >= PGSIZE) { -80106d25: 81 fe ff 0f 00 00 cmp $0xfff,%esi -80106d2b: 77 4b ja 80106d78 - mem = kalloc(); -80106d2d: e8 6e ba ff ff call 801027a0 - memset(mem, 0, PGSIZE); -80106d32: 83 ec 04 sub $0x4,%esp -80106d35: 68 00 10 00 00 push $0x1000 - mem = kalloc(); -80106d3a: 89 c3 mov %eax,%ebx - memset(mem, 0, PGSIZE); -80106d3c: 6a 00 push $0x0 -80106d3e: 50 push %eax -80106d3f: e8 7c da ff ff call 801047c0 - mappages(pgdir, 0, PGSIZE, V2P(mem), PTE_W | PTE_U); -80106d44: 58 pop %eax -80106d45: 8d 83 00 00 00 80 lea -0x80000000(%ebx),%eax -80106d4b: 5a pop %edx -80106d4c: 6a 06 push $0x6 -80106d4e: b9 00 10 00 00 mov $0x1000,%ecx -80106d53: 31 d2 xor %edx,%edx -80106d55: 50 push %eax -80106d56: 89 f8 mov %edi,%eax -80106d58: e8 13 fd ff ff call 80106a70 - memmove(mem, init, sz); -80106d5d: 8b 45 e4 mov -0x1c(%ebp),%eax -80106d60: 89 75 10 mov %esi,0x10(%ebp) -80106d63: 83 c4 10 add $0x10,%esp -80106d66: 89 5d 08 mov %ebx,0x8(%ebp) -80106d69: 89 45 0c mov %eax,0xc(%ebp) -} -80106d6c: 8d 65 f4 lea -0xc(%ebp),%esp -80106d6f: 5b pop %ebx -80106d70: 5e pop %esi -80106d71: 5f pop %edi -80106d72: 5d pop %ebp - memmove(mem, init, sz); -80106d73: e9 e8 da ff ff jmp 80104860 - panic("inituvm: more than a page"); -80106d78: 83 ec 0c sub $0xc,%esp -80106d7b: 68 e5 7c 10 80 push $0x80107ce5 -80106d80: e8 0b 96 ff ff call 80100390 -80106d85: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80106d8c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -80106d90 : -int loaduvm(pde_t *pgdir, char *addr, struct inode *ip, uint offset, uint sz) { -80106d90: 55 push %ebp -80106d91: 89 e5 mov %esp,%ebp -80106d93: 57 push %edi -80106d94: 56 push %esi -80106d95: 53 push %ebx -80106d96: 83 ec 1c sub $0x1c,%esp -80106d99: 8b 45 0c mov 0xc(%ebp),%eax -80106d9c: 8b 75 18 mov 0x18(%ebp),%esi - if ((uint) addr % PGSIZE != 0) { -80106d9f: a9 ff 0f 00 00 test $0xfff,%eax -80106da4: 0f 85 bb 00 00 00 jne 80106e65 - for (i = 0; i < sz; i += PGSIZE) { -80106daa: 01 f0 add %esi,%eax -80106dac: 89 f3 mov %esi,%ebx -80106dae: 89 45 e4 mov %eax,-0x1c(%ebp) - if (readi(ip, P2V(pa), offset + i, n) != n) { -80106db1: 8b 45 14 mov 0x14(%ebp),%eax -80106db4: 01 f0 add %esi,%eax -80106db6: 89 45 e0 mov %eax,-0x20(%ebp) - for (i = 0; i < sz; i += PGSIZE) { -80106db9: 85 f6 test %esi,%esi -80106dbb: 0f 84 87 00 00 00 je 80106e48 -80106dc1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - pde = &pgdir[PDX(va)]; -80106dc8: 8b 45 e4 mov -0x1c(%ebp),%eax - if (*pde & PTE_P) { -80106dcb: 8b 4d 08 mov 0x8(%ebp),%ecx -80106dce: 29 d8 sub %ebx,%eax - pde = &pgdir[PDX(va)]; -80106dd0: 89 c2 mov %eax,%edx -80106dd2: c1 ea 16 shr $0x16,%edx - if (*pde & PTE_P) { -80106dd5: 8b 14 91 mov (%ecx,%edx,4),%edx -80106dd8: f6 c2 01 test $0x1,%dl -80106ddb: 75 13 jne 80106df0 - panic("loaduvm: address should exist"); -80106ddd: 83 ec 0c sub $0xc,%esp -80106de0: 68 ff 7c 10 80 push $0x80107cff -80106de5: e8 a6 95 ff ff call 80100390 -80106dea: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - return &pgtab[PTX(va)]; -80106df0: c1 e8 0a shr $0xa,%eax - pgtab = (pte_t*)P2V(PTE_ADDR(*pde)); -80106df3: 81 e2 00 f0 ff ff and $0xfffff000,%edx - return &pgtab[PTX(va)]; -80106df9: 25 fc 0f 00 00 and $0xffc,%eax -80106dfe: 8d 84 02 00 00 00 80 lea -0x80000000(%edx,%eax,1),%eax - if ((pte = walkpgdir(pgdir, addr + i, 0)) == 0) { -80106e05: 85 c0 test %eax,%eax -80106e07: 74 d4 je 80106ddd - pa = PTE_ADDR(*pte); -80106e09: 8b 00 mov (%eax),%eax - if (readi(ip, P2V(pa), offset + i, n) != n) { -80106e0b: 8b 4d e0 mov -0x20(%ebp),%ecx - if (sz - i < PGSIZE) { -80106e0e: bf 00 10 00 00 mov $0x1000,%edi - pa = PTE_ADDR(*pte); -80106e13: 25 00 f0 ff ff and $0xfffff000,%eax - if (sz - i < PGSIZE) { -80106e18: 81 fb ff 0f 00 00 cmp $0xfff,%ebx -80106e1e: 0f 46 fb cmovbe %ebx,%edi - if (readi(ip, P2V(pa), offset + i, n) != n) { -80106e21: 29 d9 sub %ebx,%ecx -80106e23: 05 00 00 00 80 add $0x80000000,%eax -80106e28: 57 push %edi -80106e29: 51 push %ecx -80106e2a: 50 push %eax -80106e2b: ff 75 10 push 0x10(%ebp) -80106e2e: e8 7d ad ff ff call 80101bb0 -80106e33: 83 c4 10 add $0x10,%esp -80106e36: 39 f8 cmp %edi,%eax -80106e38: 75 1e jne 80106e58 - for (i = 0; i < sz; i += PGSIZE) { -80106e3a: 81 eb 00 10 00 00 sub $0x1000,%ebx -80106e40: 89 f0 mov %esi,%eax -80106e42: 29 d8 sub %ebx,%eax -80106e44: 39 c6 cmp %eax,%esi -80106e46: 77 80 ja 80106dc8 -} -80106e48: 8d 65 f4 lea -0xc(%ebp),%esp - return 0; -80106e4b: 31 c0 xor %eax,%eax -} -80106e4d: 5b pop %ebx -80106e4e: 5e pop %esi -80106e4f: 5f pop %edi -80106e50: 5d pop %ebp -80106e51: c3 ret -80106e52: 8d b6 00 00 00 00 lea 0x0(%esi),%esi -80106e58: 8d 65 f4 lea -0xc(%ebp),%esp - return -1; -80106e5b: b8 ff ff ff ff mov $0xffffffff,%eax -} -80106e60: 5b pop %ebx -80106e61: 5e pop %esi -80106e62: 5f pop %edi -80106e63: 5d pop %ebp -80106e64: c3 ret - panic("loaduvm: addr must be page aligned"); -80106e65: 83 ec 0c sub $0xc,%esp -80106e68: 68 a0 7d 10 80 push $0x80107da0 -80106e6d: e8 1e 95 ff ff call 80100390 -80106e72: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80106e79: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -80106e80 : -int allocuvm(pde_t *pgdir, uint oldsz, uint newsz) { -80106e80: 55 push %ebp -80106e81: 89 e5 mov %esp,%ebp -80106e83: 57 push %edi -80106e84: 56 push %esi -80106e85: 53 push %ebx -80106e86: 83 ec 1c sub $0x1c,%esp - if (newsz >= KERNBASE) { -80106e89: 8b 45 10 mov 0x10(%ebp),%eax -int allocuvm(pde_t *pgdir, uint oldsz, uint newsz) { -80106e8c: 8b 7d 08 mov 0x8(%ebp),%edi - if (newsz >= KERNBASE) { -80106e8f: 89 45 e4 mov %eax,-0x1c(%ebp) -80106e92: 85 c0 test %eax,%eax -80106e94: 0f 88 b6 00 00 00 js 80106f50 - if (newsz < oldsz) { -80106e9a: 3b 45 0c cmp 0xc(%ebp),%eax - return oldsz; -80106e9d: 8b 45 0c mov 0xc(%ebp),%eax - if (newsz < oldsz) { -80106ea0: 0f 82 9a 00 00 00 jb 80106f40 - a = PGROUNDUP(oldsz); -80106ea6: 8d b0 ff 0f 00 00 lea 0xfff(%eax),%esi -80106eac: 81 e6 00 f0 ff ff and $0xfffff000,%esi - for (; a < newsz; a += PGSIZE) { -80106eb2: 39 75 10 cmp %esi,0x10(%ebp) -80106eb5: 77 44 ja 80106efb -80106eb7: e9 87 00 00 00 jmp 80106f43 -80106ebc: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - memset(mem, 0, PGSIZE); -80106ec0: 83 ec 04 sub $0x4,%esp -80106ec3: 68 00 10 00 00 push $0x1000 -80106ec8: 6a 00 push $0x0 -80106eca: 50 push %eax -80106ecb: e8 f0 d8 ff ff call 801047c0 - if (mappages(pgdir, (char*)a, PGSIZE, V2P(mem), PTE_W | PTE_U) < 0) { -80106ed0: 58 pop %eax -80106ed1: 8d 83 00 00 00 80 lea -0x80000000(%ebx),%eax -80106ed7: 5a pop %edx -80106ed8: 6a 06 push $0x6 -80106eda: b9 00 10 00 00 mov $0x1000,%ecx -80106edf: 89 f2 mov %esi,%edx -80106ee1: 50 push %eax -80106ee2: 89 f8 mov %edi,%eax -80106ee4: e8 87 fb ff ff call 80106a70 -80106ee9: 83 c4 10 add $0x10,%esp -80106eec: 85 c0 test %eax,%eax -80106eee: 78 78 js 80106f68 - for (; a < newsz; a += PGSIZE) { -80106ef0: 81 c6 00 10 00 00 add $0x1000,%esi -80106ef6: 39 75 10 cmp %esi,0x10(%ebp) -80106ef9: 76 48 jbe 80106f43 - mem = kalloc(); -80106efb: e8 a0 b8 ff ff call 801027a0 -80106f00: 89 c3 mov %eax,%ebx - if (mem == 0) { -80106f02: 85 c0 test %eax,%eax -80106f04: 75 ba jne 80106ec0 - cprintf("allocuvm out of memory\n"); -80106f06: 83 ec 0c sub $0xc,%esp -80106f09: 68 1d 7d 10 80 push $0x80107d1d -80106f0e: e8 9d 97 ff ff call 801006b0 - if (newsz >= oldsz) { -80106f13: 8b 45 0c mov 0xc(%ebp),%eax -80106f16: 83 c4 10 add $0x10,%esp -80106f19: 39 45 10 cmp %eax,0x10(%ebp) -80106f1c: 74 32 je 80106f50 -80106f1e: 8b 55 10 mov 0x10(%ebp),%edx -80106f21: 89 c1 mov %eax,%ecx -80106f23: 89 f8 mov %edi,%eax -80106f25: e8 96 fa ff ff call 801069c0 - return 0; -80106f2a: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) -} -80106f31: 8b 45 e4 mov -0x1c(%ebp),%eax -80106f34: 8d 65 f4 lea -0xc(%ebp),%esp -80106f37: 5b pop %ebx -80106f38: 5e pop %esi -80106f39: 5f pop %edi -80106f3a: 5d pop %ebp -80106f3b: c3 ret -80106f3c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - return oldsz; -80106f40: 89 45 e4 mov %eax,-0x1c(%ebp) -} -80106f43: 8b 45 e4 mov -0x1c(%ebp),%eax -80106f46: 8d 65 f4 lea -0xc(%ebp),%esp -80106f49: 5b pop %ebx -80106f4a: 5e pop %esi -80106f4b: 5f pop %edi -80106f4c: 5d pop %ebp -80106f4d: c3 ret -80106f4e: 66 90 xchg %ax,%ax - return 0; -80106f50: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) -} -80106f57: 8b 45 e4 mov -0x1c(%ebp),%eax -80106f5a: 8d 65 f4 lea -0xc(%ebp),%esp -80106f5d: 5b pop %ebx -80106f5e: 5e pop %esi -80106f5f: 5f pop %edi -80106f60: 5d pop %ebp -80106f61: c3 ret -80106f62: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - cprintf("allocuvm out of memory (2)\n"); -80106f68: 83 ec 0c sub $0xc,%esp -80106f6b: 68 35 7d 10 80 push $0x80107d35 -80106f70: e8 3b 97 ff ff call 801006b0 - if (newsz >= oldsz) { -80106f75: 8b 45 0c mov 0xc(%ebp),%eax -80106f78: 83 c4 10 add $0x10,%esp -80106f7b: 39 45 10 cmp %eax,0x10(%ebp) -80106f7e: 74 0c je 80106f8c -80106f80: 8b 55 10 mov 0x10(%ebp),%edx -80106f83: 89 c1 mov %eax,%ecx -80106f85: 89 f8 mov %edi,%eax -80106f87: e8 34 fa ff ff call 801069c0 - kfree(mem); -80106f8c: 83 ec 0c sub $0xc,%esp -80106f8f: 53 push %ebx -80106f90: e8 4b b6 ff ff call 801025e0 - return 0; -80106f95: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) -80106f9c: 83 c4 10 add $0x10,%esp -} -80106f9f: 8b 45 e4 mov -0x1c(%ebp),%eax -80106fa2: 8d 65 f4 lea -0xc(%ebp),%esp -80106fa5: 5b pop %ebx -80106fa6: 5e pop %esi -80106fa7: 5f pop %edi -80106fa8: 5d pop %ebp -80106fa9: c3 ret -80106faa: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -80106fb0 : -int deallocuvm(pde_t *pgdir, uint oldsz, uint newsz) { -80106fb0: 55 push %ebp -80106fb1: 89 e5 mov %esp,%ebp -80106fb3: 8b 55 0c mov 0xc(%ebp),%edx -80106fb6: 8b 4d 10 mov 0x10(%ebp),%ecx -80106fb9: 8b 45 08 mov 0x8(%ebp),%eax - if (newsz >= oldsz) { -80106fbc: 39 d1 cmp %edx,%ecx -80106fbe: 73 10 jae 80106fd0 -} -80106fc0: 5d pop %ebp -80106fc1: e9 fa f9 ff ff jmp 801069c0 -80106fc6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80106fcd: 8d 76 00 lea 0x0(%esi),%esi -80106fd0: 89 d0 mov %edx,%eax -80106fd2: 5d pop %ebp -80106fd3: c3 ret -80106fd4: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -80106fdb: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -80106fdf: 90 nop - -80106fe0 : - -// Free a page table and all the physical memory pages -// in the user part. -void freevm(pde_t *pgdir) { -80106fe0: 55 push %ebp -80106fe1: 89 e5 mov %esp,%ebp -80106fe3: 57 push %edi -80106fe4: 56 push %esi -80106fe5: 53 push %ebx -80106fe6: 83 ec 0c sub $0xc,%esp -80106fe9: 8b 75 08 mov 0x8(%ebp),%esi - uint i; - - if (pgdir == 0) { -80106fec: 85 f6 test %esi,%esi -80106fee: 74 59 je 80107049 - if (newsz >= oldsz) { -80106ff0: 31 c9 xor %ecx,%ecx -80106ff2: ba 00 00 00 80 mov $0x80000000,%edx -80106ff7: 89 f0 mov %esi,%eax -80106ff9: 89 f3 mov %esi,%ebx -80106ffb: e8 c0 f9 ff ff call 801069c0 - panic("freevm: no pgdir"); - } - deallocuvm(pgdir, KERNBASE, 0); - for (i = 0; i < NPDENTRIES; i++) { -80107000: 8d be 00 10 00 00 lea 0x1000(%esi),%edi -80107006: eb 0f jmp 80107017 -80107008: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010700f: 90 nop -80107010: 83 c3 04 add $0x4,%ebx -80107013: 39 df cmp %ebx,%edi -80107015: 74 23 je 8010703a - if (pgdir[i] & PTE_P) { -80107017: 8b 03 mov (%ebx),%eax -80107019: a8 01 test $0x1,%al -8010701b: 74 f3 je 80107010 - char * v = P2V(PTE_ADDR(pgdir[i])); -8010701d: 25 00 f0 ff ff and $0xfffff000,%eax - kfree(v); -80107022: 83 ec 0c sub $0xc,%esp - for (i = 0; i < NPDENTRIES; i++) { -80107025: 83 c3 04 add $0x4,%ebx - char * v = P2V(PTE_ADDR(pgdir[i])); -80107028: 05 00 00 00 80 add $0x80000000,%eax - kfree(v); -8010702d: 50 push %eax -8010702e: e8 ad b5 ff ff call 801025e0 -80107033: 83 c4 10 add $0x10,%esp - for (i = 0; i < NPDENTRIES; i++) { -80107036: 39 df cmp %ebx,%edi -80107038: 75 dd jne 80107017 - } - } - kfree((char*)pgdir); -8010703a: 89 75 08 mov %esi,0x8(%ebp) -} -8010703d: 8d 65 f4 lea -0xc(%ebp),%esp -80107040: 5b pop %ebx -80107041: 5e pop %esi -80107042: 5f pop %edi -80107043: 5d pop %ebp - kfree((char*)pgdir); -80107044: e9 97 b5 ff ff jmp 801025e0 - panic("freevm: no pgdir"); -80107049: 83 ec 0c sub $0xc,%esp -8010704c: 68 51 7d 10 80 push $0x80107d51 -80107051: e8 3a 93 ff ff call 80100390 -80107056: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010705d: 8d 76 00 lea 0x0(%esi),%esi - -80107060 : -pde_t*setupkvm(void) { -80107060: 55 push %ebp -80107061: 89 e5 mov %esp,%ebp -80107063: 56 push %esi -80107064: 53 push %ebx - if ((pgdir = (pde_t*)kalloc()) == 0) { -80107065: e8 36 b7 ff ff call 801027a0 -8010706a: 89 c6 mov %eax,%esi -8010706c: 85 c0 test %eax,%eax -8010706e: 74 42 je 801070b2 - memset(pgdir, 0, PGSIZE); -80107070: 83 ec 04 sub $0x4,%esp - for (k = kmap; k < &kmap[NELEM(kmap)]; k++) { -80107073: bb 20 a4 10 80 mov $0x8010a420,%ebx - memset(pgdir, 0, PGSIZE); -80107078: 68 00 10 00 00 push $0x1000 -8010707d: 6a 00 push $0x0 -8010707f: 50 push %eax -80107080: e8 3b d7 ff ff call 801047c0 -80107085: 83 c4 10 add $0x10,%esp - (uint)k->phys_start, k->perm) < 0) { -80107088: 8b 43 04 mov 0x4(%ebx),%eax - if (mappages(pgdir, k->virt, k->phys_end - k->phys_start, -8010708b: 83 ec 08 sub $0x8,%esp -8010708e: 8b 4b 08 mov 0x8(%ebx),%ecx -80107091: ff 73 0c push 0xc(%ebx) -80107094: 8b 13 mov (%ebx),%edx -80107096: 50 push %eax -80107097: 29 c1 sub %eax,%ecx -80107099: 89 f0 mov %esi,%eax -8010709b: e8 d0 f9 ff ff call 80106a70 -801070a0: 83 c4 10 add $0x10,%esp -801070a3: 85 c0 test %eax,%eax -801070a5: 78 19 js 801070c0 - for (k = kmap; k < &kmap[NELEM(kmap)]; k++) { -801070a7: 83 c3 10 add $0x10,%ebx -801070aa: 81 fb 60 a4 10 80 cmp $0x8010a460,%ebx -801070b0: 75 d6 jne 80107088 -} -801070b2: 8d 65 f8 lea -0x8(%ebp),%esp -801070b5: 89 f0 mov %esi,%eax -801070b7: 5b pop %ebx -801070b8: 5e pop %esi -801070b9: 5d pop %ebp -801070ba: c3 ret -801070bb: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -801070bf: 90 nop - freevm(pgdir); -801070c0: 83 ec 0c sub $0xc,%esp -801070c3: 56 push %esi - return 0; -801070c4: 31 f6 xor %esi,%esi - freevm(pgdir); -801070c6: e8 15 ff ff ff call 80106fe0 - return 0; -801070cb: 83 c4 10 add $0x10,%esp -} -801070ce: 8d 65 f8 lea -0x8(%ebp),%esp -801070d1: 89 f0 mov %esi,%eax -801070d3: 5b pop %ebx -801070d4: 5e pop %esi -801070d5: 5d pop %ebp -801070d6: c3 ret -801070d7: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801070de: 66 90 xchg %ax,%ax - -801070e0 : -void kvmalloc(void) { -801070e0: 55 push %ebp -801070e1: 89 e5 mov %esp,%ebp -801070e3: 83 ec 08 sub $0x8,%esp - kpgdir = setupkvm(); -801070e6: e8 75 ff ff ff call 80107060 -801070eb: a3 e4 44 11 80 mov %eax,0x801144e4 - lcr3(V2P(kpgdir)); // switch to the kernel page table -801070f0: 05 00 00 00 80 add $0x80000000,%eax -801070f5: 0f 22 d8 mov %eax,%cr3 -} -801070f8: c9 leave -801070f9: c3 ret -801070fa: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -80107100 : - -// Clear PTE_U on a page. Used to create an inaccessible -// page beneath the user stack. -void clearpteu(pde_t *pgdir, char *uva) { -80107100: 55 push %ebp -80107101: 89 e5 mov %esp,%ebp -80107103: 83 ec 08 sub $0x8,%esp -80107106: 8b 45 0c mov 0xc(%ebp),%eax - if (*pde & PTE_P) { -80107109: 8b 55 08 mov 0x8(%ebp),%edx - pde = &pgdir[PDX(va)]; -8010710c: 89 c1 mov %eax,%ecx -8010710e: c1 e9 16 shr $0x16,%ecx - if (*pde & PTE_P) { -80107111: 8b 14 8a mov (%edx,%ecx,4),%edx -80107114: f6 c2 01 test $0x1,%dl -80107117: 75 17 jne 80107130 - pte_t *pte; - - pte = walkpgdir(pgdir, uva, 0); - if (pte == 0) { - panic("clearpteu"); -80107119: 83 ec 0c sub $0xc,%esp -8010711c: 68 62 7d 10 80 push $0x80107d62 -80107121: e8 6a 92 ff ff call 80100390 -80107126: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010712d: 8d 76 00 lea 0x0(%esi),%esi - return &pgtab[PTX(va)]; -80107130: c1 e8 0a shr $0xa,%eax - pgtab = (pte_t*)P2V(PTE_ADDR(*pde)); -80107133: 81 e2 00 f0 ff ff and $0xfffff000,%edx - return &pgtab[PTX(va)]; -80107139: 25 fc 0f 00 00 and $0xffc,%eax -8010713e: 8d 84 02 00 00 00 80 lea -0x80000000(%edx,%eax,1),%eax - if (pte == 0) { -80107145: 85 c0 test %eax,%eax -80107147: 74 d0 je 80107119 - } - *pte &= ~PTE_U; -80107149: 83 20 fb andl $0xfffffffb,(%eax) -} -8010714c: c9 leave -8010714d: c3 ret -8010714e: 66 90 xchg %ax,%ax - -80107150 : - -// Given a parent process's page table, create a copy -// of it for a child. -pde_t* copyuvm(pde_t *pgdir, uint sz) { -80107150: 55 push %ebp -80107151: 89 e5 mov %esp,%ebp -80107153: 57 push %edi -80107154: 56 push %esi -80107155: 53 push %ebx -80107156: 83 ec 1c sub $0x1c,%esp - pde_t *d; - pte_t *pte; - uint pa, i, flags; - char *mem; - - if ((d = setupkvm()) == 0) { -80107159: e8 02 ff ff ff call 80107060 -8010715e: 89 45 e0 mov %eax,-0x20(%ebp) -80107161: 85 c0 test %eax,%eax -80107163: 0f 84 bd 00 00 00 je 80107226 - return 0; - } - for (i = 0; i < sz; i += PGSIZE) { -80107169: 8b 5d 0c mov 0xc(%ebp),%ebx -8010716c: 85 db test %ebx,%ebx -8010716e: 0f 84 b2 00 00 00 je 80107226 -80107174: 31 f6 xor %esi,%esi -80107176: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010717d: 8d 76 00 lea 0x0(%esi),%esi - if (*pde & PTE_P) { -80107180: 8b 4d 08 mov 0x8(%ebp),%ecx - pde = &pgdir[PDX(va)]; -80107183: 89 f0 mov %esi,%eax -80107185: c1 e8 16 shr $0x16,%eax - if (*pde & PTE_P) { -80107188: 8b 04 81 mov (%ecx,%eax,4),%eax -8010718b: a8 01 test $0x1,%al -8010718d: 75 11 jne 801071a0 - if ((pte = walkpgdir(pgdir, (void *) i, 0)) == 0) { - panic("copyuvm: pte should exist"); -8010718f: 83 ec 0c sub $0xc,%esp -80107192: 68 6c 7d 10 80 push $0x80107d6c -80107197: e8 f4 91 ff ff call 80100390 -8010719c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - return &pgtab[PTX(va)]; -801071a0: 89 f2 mov %esi,%edx - pgtab = (pte_t*)P2V(PTE_ADDR(*pde)); -801071a2: 25 00 f0 ff ff and $0xfffff000,%eax - return &pgtab[PTX(va)]; -801071a7: c1 ea 0a shr $0xa,%edx -801071aa: 81 e2 fc 0f 00 00 and $0xffc,%edx -801071b0: 8d 84 10 00 00 00 80 lea -0x80000000(%eax,%edx,1),%eax - if ((pte = walkpgdir(pgdir, (void *) i, 0)) == 0) { -801071b7: 85 c0 test %eax,%eax -801071b9: 74 d4 je 8010718f - } - if (!(*pte & PTE_P)) { -801071bb: 8b 00 mov (%eax),%eax -801071bd: a8 01 test $0x1,%al -801071bf: 0f 84 c2 00 00 00 je 80107287 - panic("copyuvm: page not present"); - } - pa = PTE_ADDR(*pte); -801071c5: 89 c7 mov %eax,%edi - flags = PTE_FLAGS(*pte); -801071c7: 25 ff 0f 00 00 and $0xfff,%eax -801071cc: 89 45 e4 mov %eax,-0x1c(%ebp) - pa = PTE_ADDR(*pte); -801071cf: 81 e7 00 f0 ff ff and $0xfffff000,%edi - if ((mem = kalloc()) == 0) { -801071d5: e8 c6 b5 ff ff call 801027a0 -801071da: 89 c3 mov %eax,%ebx -801071dc: 85 c0 test %eax,%eax -801071de: 74 58 je 80107238 - freevm(d); - return 0; - } - memmove(mem, (char*)P2V(pa), PGSIZE); -801071e0: 83 ec 04 sub $0x4,%esp -801071e3: 81 c7 00 00 00 80 add $0x80000000,%edi -801071e9: 68 00 10 00 00 push $0x1000 -801071ee: 57 push %edi -801071ef: 50 push %eax -801071f0: e8 6b d6 ff ff call 80104860 - if (mappages(d, (void*)i, PGSIZE, V2P(mem), flags) < 0) { -801071f5: 8d 83 00 00 00 80 lea -0x80000000(%ebx),%eax -801071fb: 5a pop %edx -801071fc: 59 pop %ecx -801071fd: ff 75 e4 push -0x1c(%ebp) -80107200: b9 00 10 00 00 mov $0x1000,%ecx -80107205: 89 f2 mov %esi,%edx -80107207: 50 push %eax -80107208: 8b 45 e0 mov -0x20(%ebp),%eax -8010720b: e8 60 f8 ff ff call 80106a70 -80107210: 83 c4 10 add $0x10,%esp -80107213: 85 c0 test %eax,%eax -80107215: 78 49 js 80107260 - for (i = 0; i < sz; i += PGSIZE) { -80107217: 81 c6 00 10 00 00 add $0x1000,%esi -8010721d: 39 75 0c cmp %esi,0xc(%ebp) -80107220: 0f 87 5a ff ff ff ja 80107180 - freevm(d); - return 0; - } - } - return d; -} -80107226: 8b 45 e0 mov -0x20(%ebp),%eax -80107229: 8d 65 f4 lea -0xc(%ebp),%esp -8010722c: 5b pop %ebx -8010722d: 5e pop %esi -8010722e: 5f pop %edi -8010722f: 5d pop %ebp -80107230: c3 ret -80107231: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - freevm(d); -80107238: 83 ec 0c sub $0xc,%esp -8010723b: ff 75 e0 push -0x20(%ebp) -8010723e: e8 9d fd ff ff call 80106fe0 - return 0; -80107243: c7 45 e0 00 00 00 00 movl $0x0,-0x20(%ebp) -8010724a: 83 c4 10 add $0x10,%esp -} -8010724d: 8b 45 e0 mov -0x20(%ebp),%eax -80107250: 8d 65 f4 lea -0xc(%ebp),%esp -80107253: 5b pop %ebx -80107254: 5e pop %esi -80107255: 5f pop %edi -80107256: 5d pop %ebp -80107257: c3 ret -80107258: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010725f: 90 nop - kfree(mem); -80107260: 83 ec 0c sub $0xc,%esp -80107263: 53 push %ebx -80107264: e8 77 b3 ff ff call 801025e0 - freevm(d); -80107269: 58 pop %eax -8010726a: ff 75 e0 push -0x20(%ebp) -8010726d: e8 6e fd ff ff call 80106fe0 - return 0; -80107272: c7 45 e0 00 00 00 00 movl $0x0,-0x20(%ebp) -80107279: 83 c4 10 add $0x10,%esp -} -8010727c: 8b 45 e0 mov -0x20(%ebp),%eax -8010727f: 8d 65 f4 lea -0xc(%ebp),%esp -80107282: 5b pop %ebx -80107283: 5e pop %esi -80107284: 5f pop %edi -80107285: 5d pop %ebp -80107286: c3 ret - panic("copyuvm: page not present"); -80107287: 83 ec 0c sub $0xc,%esp -8010728a: 68 86 7d 10 80 push $0x80107d86 -8010728f: e8 fc 90 ff ff call 80100390 -80107294: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -8010729b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -8010729f: 90 nop - -801072a0 : - - -// Map user virtual address to kernel address. -char*uva2ka(pde_t *pgdir, char *uva) { -801072a0: 55 push %ebp -801072a1: 89 e5 mov %esp,%ebp -801072a3: 8b 45 0c mov 0xc(%ebp),%eax - if (*pde & PTE_P) { -801072a6: 8b 55 08 mov 0x8(%ebp),%edx - pde = &pgdir[PDX(va)]; -801072a9: 89 c1 mov %eax,%ecx -801072ab: c1 e9 16 shr $0x16,%ecx - if (*pde & PTE_P) { -801072ae: 8b 14 8a mov (%edx,%ecx,4),%edx -801072b1: f6 c2 01 test $0x1,%dl -801072b4: 0f 84 00 01 00 00 je 801073ba - return &pgtab[PTX(va)]; -801072ba: c1 e8 0c shr $0xc,%eax - pgtab = (pte_t*)P2V(PTE_ADDR(*pde)); -801072bd: 81 e2 00 f0 ff ff and $0xfffff000,%edx - } - if ((*pte & PTE_U) == 0) { - return 0; - } - return (char*)P2V(PTE_ADDR(*pte)); -} -801072c3: 5d pop %ebp - return &pgtab[PTX(va)]; -801072c4: 25 ff 03 00 00 and $0x3ff,%eax - if ((*pte & PTE_P) == 0) { -801072c9: 8b 84 82 00 00 00 80 mov -0x80000000(%edx,%eax,4),%eax - if ((*pte & PTE_U) == 0) { -801072d0: 89 c2 mov %eax,%edx - return (char*)P2V(PTE_ADDR(*pte)); -801072d2: 25 00 f0 ff ff and $0xfffff000,%eax - if ((*pte & PTE_U) == 0) { -801072d7: 83 e2 05 and $0x5,%edx - return (char*)P2V(PTE_ADDR(*pte)); -801072da: 05 00 00 00 80 add $0x80000000,%eax -801072df: 83 fa 05 cmp $0x5,%edx -801072e2: ba 00 00 00 00 mov $0x0,%edx -801072e7: 0f 45 c2 cmovne %edx,%eax -} -801072ea: c3 ret -801072eb: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -801072ef: 90 nop - -801072f0 : - -// 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) { -801072f0: 55 push %ebp -801072f1: 89 e5 mov %esp,%ebp -801072f3: 57 push %edi -801072f4: 56 push %esi -801072f5: 53 push %ebx -801072f6: 83 ec 0c sub $0xc,%esp -801072f9: 8b 75 14 mov 0x14(%ebp),%esi -801072fc: 8b 45 0c mov 0xc(%ebp),%eax -801072ff: 8b 55 10 mov 0x10(%ebp),%edx - char *buf, *pa0; - uint n, va0; - - buf = (char*)p; - while (len > 0) { -80107302: 85 f6 test %esi,%esi -80107304: 75 51 jne 80107357 -80107306: e9 a5 00 00 00 jmp 801073b0 -8010730b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -8010730f: 90 nop - return (char*)P2V(PTE_ADDR(*pte)); -80107310: 81 e3 00 f0 ff ff and $0xfffff000,%ebx -80107316: 8d 8b 00 00 00 80 lea -0x80000000(%ebx),%ecx - va0 = (uint)PGROUNDDOWN(va); - pa0 = uva2ka(pgdir, (char*)va0); - if (pa0 == 0) { -8010731c: 81 fb 00 00 00 80 cmp $0x80000000,%ebx -80107322: 74 75 je 80107399 - return -1; - } - n = PGSIZE - (va - va0); -80107324: 89 fb mov %edi,%ebx - if (n > len) { - n = len; - } - memmove(pa0 + (va - va0), buf, n); -80107326: 89 55 10 mov %edx,0x10(%ebp) - n = PGSIZE - (va - va0); -80107329: 29 c3 sub %eax,%ebx -8010732b: 81 c3 00 10 00 00 add $0x1000,%ebx -80107331: 39 f3 cmp %esi,%ebx -80107333: 0f 47 de cmova %esi,%ebx - memmove(pa0 + (va - va0), buf, n); -80107336: 29 f8 sub %edi,%eax -80107338: 83 ec 04 sub $0x4,%esp -8010733b: 01 c1 add %eax,%ecx -8010733d: 53 push %ebx -8010733e: 52 push %edx -8010733f: 51 push %ecx -80107340: e8 1b d5 ff ff call 80104860 - len -= n; - buf += n; -80107345: 8b 55 10 mov 0x10(%ebp),%edx - va = va0 + PGSIZE; -80107348: 8d 87 00 10 00 00 lea 0x1000(%edi),%eax - while (len > 0) { -8010734e: 83 c4 10 add $0x10,%esp - buf += n; -80107351: 01 da add %ebx,%edx - while (len > 0) { -80107353: 29 de sub %ebx,%esi -80107355: 74 59 je 801073b0 - if (*pde & PTE_P) { -80107357: 8b 5d 08 mov 0x8(%ebp),%ebx - pde = &pgdir[PDX(va)]; -8010735a: 89 c1 mov %eax,%ecx - va0 = (uint)PGROUNDDOWN(va); -8010735c: 89 c7 mov %eax,%edi - pde = &pgdir[PDX(va)]; -8010735e: c1 e9 16 shr $0x16,%ecx - va0 = (uint)PGROUNDDOWN(va); -80107361: 81 e7 00 f0 ff ff and $0xfffff000,%edi - if (*pde & PTE_P) { -80107367: 8b 0c 8b mov (%ebx,%ecx,4),%ecx -8010736a: f6 c1 01 test $0x1,%cl -8010736d: 0f 84 4e 00 00 00 je 801073c1 - return &pgtab[PTX(va)]; -80107373: 89 fb mov %edi,%ebx - pgtab = (pte_t*)P2V(PTE_ADDR(*pde)); -80107375: 81 e1 00 f0 ff ff and $0xfffff000,%ecx - return &pgtab[PTX(va)]; -8010737b: c1 eb 0c shr $0xc,%ebx -8010737e: 81 e3 ff 03 00 00 and $0x3ff,%ebx - if ((*pte & PTE_P) == 0) { -80107384: 8b 9c 99 00 00 00 80 mov -0x80000000(%ecx,%ebx,4),%ebx - if ((*pte & PTE_U) == 0) { -8010738b: 89 d9 mov %ebx,%ecx -8010738d: 83 e1 05 and $0x5,%ecx -80107390: 83 f9 05 cmp $0x5,%ecx -80107393: 0f 84 77 ff ff ff je 80107310 - } - return 0; -} -80107399: 8d 65 f4 lea -0xc(%ebp),%esp - return -1; -8010739c: b8 ff ff ff ff mov $0xffffffff,%eax -} -801073a1: 5b pop %ebx -801073a2: 5e pop %esi -801073a3: 5f pop %edi -801073a4: 5d pop %ebp -801073a5: c3 ret -801073a6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi -801073ad: 8d 76 00 lea 0x0(%esi),%esi -801073b0: 8d 65 f4 lea -0xc(%ebp),%esp - return 0; -801073b3: 31 c0 xor %eax,%eax -} -801073b5: 5b pop %ebx -801073b6: 5e pop %esi -801073b7: 5f pop %edi -801073b8: 5d pop %ebp -801073b9: c3 ret - -801073ba : - if ((*pte & PTE_P) == 0) { -801073ba: a1 00 00 00 00 mov 0x0,%eax -801073bf: 0f 0b ud2 - -801073c1 : -801073c1: a1 00 00 00 00 mov 0x0,%eax -801073c6: 0f 0b ud2 diff --git a/kernel.sym b/kernel.sym deleted file mode 100644 index 7d07730..0000000 --- a/kernel.sym +++ /dev/null @@ -1,511 +0,0 @@ -00000000 bio.c -00000000 console.c -8010ef40 cons -8010ef78 panicked -80100410 consputc.part.0 -80100610 printint -80107450 digits.0 -00000000 exec.c -00000000 file.c -00000000 fs.c -801012e0 bfree -80101360 balloc -80101470 iget -80101570 bmap -80101eb0 namex -00000000 ide.c -80102200 idestart -80111620 idelock -80111600 havedisk1 -80111604 idequeue -00000000 ioapic.c -00000000 kalloc.c -00000000 kbd.c -8011169c shift.1 -80107780 shiftcode -80107680 togglecode -80107660 charcode.0 -80108200 normalmap -80108100 shiftmap -80108000 ctlmap -00000000 lapic.c -00000000 log.c -80102ce0 install_trans -80102d80 write_head -00000000 main.c -80103120 mpmain -80103160 mpenter -00000000 mp.c -801032b0 mpsearch1 -00000000 picirq.c -00000000 pipe.c -00000000 proc.c -80103910 allocproc -8010a000 first.1 -80113c74 initproc -80107a2c states.0 -00000000 sleeplock.c -00000000 spinlock.c -00000000 string.c -00000000 syscall.c -80107aa0 syscalls -00000000 sysfile.c -80104c30 create -00000000 sysproc.c -00000000 trap.c -00000000 uart.c -80105dc0 uartgetc -801144e0 uart -00000000 vm.c -801069c0 deallocuvm.part.0 -80106a70 mappages -8010a420 kmap -801073ba uva2ka.cold -801073c1 copyout.cold -80100280 consoleread -8010690f vector242 -80106366 vector119 -8010000c entry -80106246 vector87 -8010623d vector86 -80104980 safestrcpy -80104f50 sys_close -8010697b vector251 -8010626a vector91 -80106060 vector33 -8010654f vector162 -80104150 yield -801116c0 log -80111660 kmem -801067b3 vector213 -80106303 vector108 -80105df0 uartinit -801060ba vector43 -80102a30 lapiceoi -80106573 vector165 -80106663 vector185 -801024f0 ioapicinit -80106342 vector115 -80101140 fileread -80106381 vector122 -801058b0 sys_sbrk -801117a0 ioapicid -80106507 vector156 -80106933 vector245 -80111654 ioapic -80106693 vector189 -80105f84 vector7 -8010615c vector61 -8010600f vector24 -8010631e vector111 -80106717 vector200 -80106192 vector67 -8010642f vector138 -801061d1 vector74 -80103e30 sched -80104860 memmove -80106138 vector57 -80104bc0 syscall -801067bf vector214 -801062b2 vector99 -80103ab0 cpuid -80101cb0 writei -80106453 vector141 -80105830 sys_fork -80100b20 cleanupexec -8010a520 bcache -801065c7 vector172 -80106903 vector241 -80104550 getcallerpcs -801054c0 sys_mkdir -80106993 vector253 -80105f60 vector3 -80105f57 vector2 -80101de0 namecmp -8010685b vector227 -8010678f vector210 -80104b40 argstr -80106837 vector224 -8010eea0 inputBuffer -801060a8 vector41 -801006b0 cprintf -80100fc0 filedup -801021c0 namei -80105ff4 vector21 -80100040 binit -80106603 vector177 -8010635d vector118 -801061ad vector70 -801061a4 vector69 -801068d3 vector237 -80106177 vector64 -8010602a vector27 -801063e7 vector132 -8010666f vector186 -80104e50 sys_read -801067e3 vector217 -801049f0 fetchint -80107060 setupkvm -801048c0 memcpy -80106fe0 freevm -80105f4e vector1 -8010660f vector178 -8010608d vector38 -801025e0 kfree -801068df vector238 -801059e0 sys_greeting -80103a50 mycpu -801019d0 iput -801063f3 vector133 -801061c8 vector73 -80106477 vector144 -8010699f vector254 -80101640 readsb -8010a004 nextpid -801062c4 vector101 -8010679b vector211 -80103330 mpinit -801065df vector174 -8010691b vector243 -80100f30 fileinit -80105020 cleanupsyslink -80104530 initlock -801063b7 vector128 -801072f0 copyout -80106210 vector81 -801041a0 sleep -80102a50 microdelay -80105fb2 vector13 -80106102 vector51 -80105fc9 vector16 -8010ee80 input -801068f7 vector240 -8010611d vector54 -80105fe2 vector19 -80106273 vector92 -80106927 vector244 -80101b80 stati -80106447 vector140 -80105860 sys_kill -801060cc vector45 -801061fe vector79 -80103690 pipeclose -80106873 vector229 -8010651f vector158 -80104fb0 sys_fstat -801005a0 consolewrite -80106096 vector39 -80106597 vector168 -80102ef0 end_op -80106072 vector35 -80106330 vector113 -80102680 freerange -8010639c vector125 -80106e80 allocuvm -80105a66 trapret -801067d7 vector216 -8010616e vector63 -80106021 vector26 -801066c3 vector193 -80102910 lapicinit -801066e7 vector196 -80106783 vector209 -80105f69 vector4 -801065af vector170 -801144f0 stack -80106417 vector136 -80105f9d vector10 -8010675f vector206 -80101980 iunlock -80105900 sys_sleep -801069ab vector255 -80106633 vector181 -8010614a vector59 -80106234 vector85 -8010622b vector84 -8010664b vector183 -8010652b vector159 -801067a7 vector212 -80105060 sys_link -801060de vector47 -80106867 vector228 -801060b1 vector42 -80106339 vector114 -801072a0 uva2ka -801065eb vector175 -8010646b vector143 -80100f50 filealloc -80104260 wakeup -801063cf vector130 -8010693f vector246 -80105f94 vector9 -8010645f vector142 -801062bb vector100 -80106723 vector201 -80107100 clearpteu -80103ad0 myproc -80105a80 tvinit -80106153 vector60 -80106006 vector23 -80101870 idup -801068c7 vector236 -801028f0 kbdintr -80105380 sys_open -8010688b vector231 -80106189 vector66 -8010603c vector29 -80101bb0 readi -8010640b vector135 -801008e0 consoleintr -801042c0 kill -801061ec vector77 -80101730 ialloc -80106627 vector180 -801144e4 kpgdir -80106777 vector208 -80102af0 cmostime -80105f30 uartintr -801062a9 vector98 -801062a0 vector97 -801065f7 vector176 -801066cf vector194 -80106057 vector32 -801154f0 end -8010670b vector199 -80100890 consoleget -801063db vector131 -80106987 vector252 -801011d0 filewrite -80105f45 vector0 -80104a80 argint -80103550 cleanuppipealloc -80100b70 exec -80106483 vector145 -80104ed0 sys_write -801046a0 release -80104a30 fetchstr -801062fa vector107 -8010609f vector40 -80104020 wait -801062cd vector102 -80109000 entrypgdir -0010000c _start -8010612f vector56 -8010619b vector68 -80105f7b vector6 -8010a48c _binary_initcode_end -80100000 multiboot_header -801063c3 vector129 -80103d90 scheduler -80101e00 dirlookup -801066f3 vector197 -80101010 fileclose -80102e80 begin_op -801064d7 vector152 -801070e0 kvmalloc -8010687f vector230 -801048d0 strncmp -80106084 vector37 -80106753 vector205 -80106543 vector161 -80113ca0 tickslock -80103730 pipewrite -80104920 strncpy -801061b6 vector71 -80107150 copyuvm -8010ef80 ftable -80106537 vector160 -80104ad0 argptr -801067cb vector215 -80106513 vector157 -80104dd0 sys_dup -80106327 vector112 -80100390 panic -801039e0 forkret -8010663f vector182 -80105fab vector12 -80104810 memcmp -80102810 kbdgetc -8010630c vector109 -80105feb vector20 -80103c70 fork -80106114 vector53 -80105fd9 vector18 -0000007a _binary_entryother_size -801117c0 cpus -801044a0 releasesleep -8010628e vector95 -80105820 sys_getch -80104660 holding -801115d4 sb -80104700 acquire -8010684f vector226 -801021e0 nameiparent -801060f0 vector49 -801060c3 vector44 -801116a0 lapic -801061f5 vector78 -80105a4e alltraps -801065d3 vector173 -80106354 vector117 -80106219 vector82 -8010681f vector222 -80105f8d vector8 -801064b3 vector149 -801017f0 iupdate -80108000 data -801047c0 memset -80106897 vector232 -80103180 main -80106bf0 switchkvm -801062f1 vector106 -80106807 vector220 -80106261 vector90 -8010655b vector163 -801068af vector234 -80103060 log_write -80104440 acquiresleep -801051b0 sys_unlink -80106165 vector62 -80106018 vector25 -801066ff vector198 -8010636f vector120 -8010a48c _binary_entryother_start -80102730 kinit1 -801060f9 vector50 -80105fc0 vector15 -801064cb vector151 -80106222 vector83 -80106258 vector89 -8010624f vector88 -80105a00 sys_shutdown -80105b30 trap -801059b0 sys_uptime -8010661b vector179 -80106069 vector34 -801060d5 vector46 -801063ff vector134 -8010682b vector223 -80113ce0 idt -801067ef vector218 -80103a30 pinit -80106fb0 deallocuvm -80106843 vector225 -80102a10 lapicid -8010667b vector187 -80103bf0 growproc -801044e0 holdingsleep -801117a4 ncpu -80106045 vector30 -80103b00 userinit -801000d0 bread -801063ae vector127 -80103830 piperead -80113c80 ticks -801066b7 vector192 -8010657f vector166 -80100ad0 consoleinit -801061e3 vector76 -801061da vector75 -80102360 ideintr -801066db vector195 -801064bf vector150 -80106141 vector58 -80106957 vector248 -8010638a vector123 -80106297 vector96 -8010604e vector31 -8010673b vector203 -8010643b vector139 -801064e3 vector153 -80106567 vector164 -80104340 procdump -80106378 vector121 -80105ed0 uartputc -80105f72 vector5 -8010658b vector167 -801064fb vector155 -80106963 vector249 -801001f0 brelse -8010696f vector250 -80106393 vector124 -80106315 vector110 -80106747 vector204 -801018a0 ilock -80105660 sys_exec -80106423 vector137 -8010a460 _binary_initcode_start -801049db swtch -8010694b vector247 -80105ffd vector22 -8010672f vector202 -80106b60 seginit -80101b30 iunlockput -801061bf vector72 -80106126 vector55 -801063a5 vector126 -80106180 vector65 -80106033 vector28 -8010a506 _binary_entryother_end -801065a3 vector169 -801001b0 bwrite -801068a3 vector233 -80105b00 idtinit -80103ef0 exit -80105850 sys_wait -80105840 sys_exit -80102100 dirlink -0000002c _binary_initcode_size -8010649b vector147 -80104400 initsleeplock -801022e0 ideinit -80106d90 loaduvm -801062df vector104 -8010634b vector116 -80111d40 ptable -801025a0 ioapicenable -80104600 popcli -8010a008 vectors -8010610b vector52 -80105fd2 vector17 -80106657 vector184 -801049c0 strlen -80105750 sys_pipe -80101680 iinit -80103530 picinit -8010676b vector207 -80106d10 inituvm -8010669f vector190 -801068eb vector239 -80106285 vector94 -8010627c vector93 -80102de0 initlog -80106687 vector188 -801060e7 vector48 -80102400 iderw -801067fb vector219 -801064a7 vector148 -80106813 vector221 -801027a0 kalloc -8010f920 devsw -801058a0 sys_getpid -80106207 vector80 -801065bb vector171 -801064ef vector154 -8010607b vector36 -801035a0 pipealloc -801068bb vector235 -801062e8 vector105 -801055b0 sys_chdir -8010f980 icache -8010648f vector146 -801066ab vector191 -801062d6 vector103 -80105520 sys_mknod -80102a60 lapicstartap -80106c00 switchuvm -801045b0 pushcli -801026d0 kinit2 -80105fa4 vector11 -80105fb9 vector14 -801010f0 filestat diff --git a/kill.asm b/kill.asm deleted file mode 100644 index 5b40d7a..0000000 --- a/kill.asm +++ /dev/null @@ -1,1173 +0,0 @@ - -_kill: file format elf32-i386 - - -Disassembly of section .text: - -00000000
    : -#include "types.h" -#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 push -0x4(%ecx) - a: 55 push %ebp - b: 89 e5 mov %esp,%ebp - d: 57 push %edi - e: 56 push %esi - f: 53 push %ebx - 10: bb 01 00 00 00 mov $0x1,%ebx - 15: 51 push %ecx - 16: 83 ec 08 sub $0x8,%esp - 19: 8b 31 mov (%ecx),%esi - 1b: 8b 79 04 mov 0x4(%ecx),%edi - int i; - - if (argc < 2) { - 1e: 83 fe 01 cmp $0x1,%esi - 21: 7e 27 jle 4a - 23: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 27: 90 nop - printf(2, "usage: kill pid...\n"); - exit(); - } - for (i = 1; i < argc; i++) { - kill(atoi(argv[i])); - 28: 83 ec 0c sub $0xc,%esp - 2b: ff 34 9f push (%edi,%ebx,4) - for (i = 1; i < argc; i++) { - 2e: 83 c3 01 add $0x1,%ebx - kill(atoi(argv[i])); - 31: e8 0a 02 00 00 call 240 - 36: 89 04 24 mov %eax,(%esp) - 39: e8 95 02 00 00 call 2d3 - for (i = 1; i < argc; i++) { - 3e: 83 c4 10 add $0x10,%esp - 41: 39 de cmp %ebx,%esi - 43: 75 e3 jne 28 - } - exit(); - 45: e8 69 02 00 00 call 2b3 - printf(2, "usage: kill pid...\n"); - 4a: 50 push %eax - 4b: 50 push %eax - 4c: 68 48 07 00 00 push $0x748 - 51: 6a 02 push $0x2 - 53: e8 c8 03 00 00 call 420 - exit(); - 58: e8 56 02 00 00 call 2b3 - 5d: 66 90 xchg %ax,%ax - 5f: 90 nop - -00000060 : -#include "stat.h" -#include "fcntl.h" -#include "user.h" -#include "x86.h" - -char*strcpy(char *s, const char *t) { - 60: 55 push %ebp - char *os; - - os = s; - while ((*s++ = *t++) != 0) { - 61: 31 c0 xor %eax,%eax -char*strcpy(char *s, const char *t) { - 63: 89 e5 mov %esp,%ebp - 65: 53 push %ebx - 66: 8b 4d 08 mov 0x8(%ebp),%ecx - 69: 8b 5d 0c mov 0xc(%ebp),%ebx - 6c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - while ((*s++ = *t++) != 0) { - 70: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 74: 88 14 01 mov %dl,(%ecx,%eax,1) - 77: 83 c0 01 add $0x1,%eax - 7a: 84 d2 test %dl,%dl - 7c: 75 f2 jne 70 - ; - } - return os; -} - 7e: 8b 5d fc mov -0x4(%ebp),%ebx - 81: 89 c8 mov %ecx,%eax - 83: c9 leave - 84: c3 ret - 85: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 8c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000090 : - -int strcmp(const char *p, const char *q) { - 90: 55 push %ebp - 91: 89 e5 mov %esp,%ebp - 93: 53 push %ebx - 94: 8b 55 08 mov 0x8(%ebp),%edx - 97: 8b 4d 0c mov 0xc(%ebp),%ecx - while (*p && *p == *q) { - 9a: 0f b6 02 movzbl (%edx),%eax - 9d: 84 c0 test %al,%al - 9f: 75 17 jne b8 - a1: eb 3a jmp dd - a3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - a7: 90 nop - a8: 0f b6 42 01 movzbl 0x1(%edx),%eax - p++, q++; - ac: 83 c2 01 add $0x1,%edx - af: 8d 59 01 lea 0x1(%ecx),%ebx - while (*p && *p == *q) { - b2: 84 c0 test %al,%al - b4: 74 1a je d0 - p++, q++; - b6: 89 d9 mov %ebx,%ecx - while (*p && *p == *q) { - b8: 0f b6 19 movzbl (%ecx),%ebx - bb: 38 c3 cmp %al,%bl - bd: 74 e9 je a8 - } - return (uchar) * p - (uchar) * q; - bf: 29 d8 sub %ebx,%eax -} - c1: 8b 5d fc mov -0x4(%ebp),%ebx - c4: c9 leave - c5: c3 ret - c6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - cd: 8d 76 00 lea 0x0(%esi),%esi - return (uchar) * p - (uchar) * q; - d0: 0f b6 59 01 movzbl 0x1(%ecx),%ebx - d4: 31 c0 xor %eax,%eax - d6: 29 d8 sub %ebx,%eax -} - d8: 8b 5d fc mov -0x4(%ebp),%ebx - db: c9 leave - dc: c3 ret - return (uchar) * p - (uchar) * q; - dd: 0f b6 19 movzbl (%ecx),%ebx - e0: 31 c0 xor %eax,%eax - e2: eb db jmp bf - e4: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - eb: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - ef: 90 nop - -000000f0 : - -uint strlen(const char *s) { - f0: 55 push %ebp - f1: 89 e5 mov %esp,%ebp - f3: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - for (n = 0; s[n]; n++) { - f6: 80 3a 00 cmpb $0x0,(%edx) - f9: 74 15 je 110 - fb: 31 c0 xor %eax,%eax - fd: 8d 76 00 lea 0x0(%esi),%esi - 100: 83 c0 01 add $0x1,%eax - 103: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - 107: 89 c1 mov %eax,%ecx - 109: 75 f5 jne 100 - ; - } - return n; -} - 10b: 89 c8 mov %ecx,%eax - 10d: 5d pop %ebp - 10e: c3 ret - 10f: 90 nop - for (n = 0; s[n]; n++) { - 110: 31 c9 xor %ecx,%ecx -} - 112: 5d pop %ebp - 113: 89 c8 mov %ecx,%eax - 115: c3 ret - 116: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 11d: 8d 76 00 lea 0x0(%esi),%esi - -00000120 : - -void* memset(void *dst, int c, uint n) { - 120: 55 push %ebp - 121: 89 e5 mov %esp,%ebp - 123: 57 push %edi - 124: 8b 55 08 mov 0x8(%ebp),%edx - "d" (port), "0" (addr), "1" (cnt) : - "cc"); -} - -static inline void stosb(void *addr, int data, int cnt) { - asm volatile ("cld; rep stosb" : - 127: 8b 4d 10 mov 0x10(%ebp),%ecx - 12a: 8b 45 0c mov 0xc(%ebp),%eax - 12d: 89 d7 mov %edx,%edi - 12f: fc cld - 130: f3 aa rep stos %al,%es:(%edi) - stosb(dst, c, n); - return dst; -} - 132: 8b 7d fc mov -0x4(%ebp),%edi - 135: 89 d0 mov %edx,%eax - 137: c9 leave - 138: c3 ret - 139: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -00000140 : - -char* strchr(const char *s, char c) { - 140: 55 push %ebp - 141: 89 e5 mov %esp,%ebp - 143: 8b 45 08 mov 0x8(%ebp),%eax - 146: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx - for (; *s; s++) { - 14a: 0f b6 10 movzbl (%eax),%edx - 14d: 84 d2 test %dl,%dl - 14f: 75 12 jne 163 - 151: eb 1d jmp 170 - 153: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 157: 90 nop - 158: 0f b6 50 01 movzbl 0x1(%eax),%edx - 15c: 83 c0 01 add $0x1,%eax - 15f: 84 d2 test %dl,%dl - 161: 74 0d je 170 - if (*s == c) { - 163: 38 d1 cmp %dl,%cl - 165: 75 f1 jne 158 - return (char*)s; - } - } - return 0; -} - 167: 5d pop %ebp - 168: c3 ret - 169: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - return 0; - 170: 31 c0 xor %eax,%eax -} - 172: 5d pop %ebp - 173: c3 ret - 174: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 17b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 17f: 90 nop - -00000180 : - -char* gets(char *buf, int max) { - 180: 55 push %ebp - 181: 89 e5 mov %esp,%ebp - 183: 57 push %edi - 184: 56 push %esi - int i, cc; - char c; - - for (i = 0; i + 1 < max;) { - cc = read(0, &c, 1); - 185: 8d 7d e7 lea -0x19(%ebp),%edi -char* gets(char *buf, int max) { - 188: 53 push %ebx - for (i = 0; i + 1 < max;) { - 189: 31 db xor %ebx,%ebx -char* gets(char *buf, int max) { - 18b: 83 ec 1c sub $0x1c,%esp - for (i = 0; i + 1 < max;) { - 18e: eb 27 jmp 1b7 - cc = read(0, &c, 1); - 190: 83 ec 04 sub $0x4,%esp - 193: 6a 01 push $0x1 - 195: 57 push %edi - 196: 6a 00 push $0x0 - 198: e8 2e 01 00 00 call 2cb - if (cc < 1) { - 19d: 83 c4 10 add $0x10,%esp - 1a0: 85 c0 test %eax,%eax - 1a2: 7e 1d jle 1c1 - break; - } - buf[i++] = c; - 1a4: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 1a8: 8b 55 08 mov 0x8(%ebp),%edx - 1ab: 88 44 1a ff mov %al,-0x1(%edx,%ebx,1) - if (c == '\n' || c == '\r') { - 1af: 3c 0a cmp $0xa,%al - 1b1: 74 1d je 1d0 - 1b3: 3c 0d cmp $0xd,%al - 1b5: 74 19 je 1d0 - for (i = 0; i + 1 < max;) { - 1b7: 89 de mov %ebx,%esi - 1b9: 83 c3 01 add $0x1,%ebx - 1bc: 3b 5d 0c cmp 0xc(%ebp),%ebx - 1bf: 7c cf jl 190 - break; - } - } - buf[i] = '\0'; - 1c1: 8b 45 08 mov 0x8(%ebp),%eax - 1c4: c6 04 30 00 movb $0x0,(%eax,%esi,1) - return buf; -} - 1c8: 8d 65 f4 lea -0xc(%ebp),%esp - 1cb: 5b pop %ebx - 1cc: 5e pop %esi - 1cd: 5f pop %edi - 1ce: 5d pop %ebp - 1cf: c3 ret - buf[i] = '\0'; - 1d0: 8b 45 08 mov 0x8(%ebp),%eax - 1d3: 89 de mov %ebx,%esi - 1d5: c6 04 30 00 movb $0x0,(%eax,%esi,1) -} - 1d9: 8d 65 f4 lea -0xc(%ebp),%esp - 1dc: 5b pop %ebx - 1dd: 5e pop %esi - 1de: 5f pop %edi - 1df: 5d pop %ebp - 1e0: c3 ret - 1e1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 1e8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 1ef: 90 nop - -000001f0 : - -int stat(const char *n, struct stat *st) { - 1f0: 55 push %ebp - 1f1: 89 e5 mov %esp,%ebp - 1f3: 56 push %esi - 1f4: 53 push %ebx - int fd; - int r; - - fd = open(n, O_RDONLY); - 1f5: 83 ec 08 sub $0x8,%esp - 1f8: 6a 00 push $0x0 - 1fa: ff 75 08 push 0x8(%ebp) - 1fd: e8 19 01 00 00 call 31b - if (fd < 0) { - 202: 83 c4 10 add $0x10,%esp - 205: 85 c0 test %eax,%eax - 207: 78 27 js 230 - return -1; - } - r = fstat(fd, st); - 209: 83 ec 08 sub $0x8,%esp - 20c: ff 75 0c push 0xc(%ebp) - 20f: 89 c3 mov %eax,%ebx - 211: 50 push %eax - 212: e8 cc 00 00 00 call 2e3 - close(fd); - 217: 89 1c 24 mov %ebx,(%esp) - r = fstat(fd, st); - 21a: 89 c6 mov %eax,%esi - close(fd); - 21c: e8 2a 01 00 00 call 34b - return r; - 221: 83 c4 10 add $0x10,%esp -} - 224: 8d 65 f8 lea -0x8(%ebp),%esp - 227: 89 f0 mov %esi,%eax - 229: 5b pop %ebx - 22a: 5e pop %esi - 22b: 5d pop %ebp - 22c: c3 ret - 22d: 8d 76 00 lea 0x0(%esi),%esi - return -1; - 230: be ff ff ff ff mov $0xffffffff,%esi - 235: eb ed jmp 224 - 237: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 23e: 66 90 xchg %ax,%ax - -00000240 : - -int atoi(const char *s) { - 240: 55 push %ebp - 241: 89 e5 mov %esp,%ebp - 243: 53 push %ebx - 244: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - n = 0; - while ('0' <= *s && *s <= '9') { - 247: 0f be 02 movsbl (%edx),%eax - 24a: 8d 48 d0 lea -0x30(%eax),%ecx - 24d: 80 f9 09 cmp $0x9,%cl - n = 0; - 250: b9 00 00 00 00 mov $0x0,%ecx - while ('0' <= *s && *s <= '9') { - 255: 77 1e ja 275 - 257: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 25e: 66 90 xchg %ax,%ax - n = n * 10 + *s++ - '0'; - 260: 83 c2 01 add $0x1,%edx - 263: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 266: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx - while ('0' <= *s && *s <= '9') { - 26a: 0f be 02 movsbl (%edx),%eax - 26d: 8d 58 d0 lea -0x30(%eax),%ebx - 270: 80 fb 09 cmp $0x9,%bl - 273: 76 eb jbe 260 - } - return n; -} - 275: 8b 5d fc mov -0x4(%ebp),%ebx - 278: 89 c8 mov %ecx,%eax - 27a: c9 leave - 27b: c3 ret - 27c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000280 : - -void* memmove(void *vdst, const void *vsrc, int n) { - 280: 55 push %ebp - 281: 89 e5 mov %esp,%ebp - 283: 57 push %edi - 284: 8b 45 10 mov 0x10(%ebp),%eax - 287: 8b 55 08 mov 0x8(%ebp),%edx - 28a: 56 push %esi - 28b: 8b 75 0c mov 0xc(%ebp),%esi - char *dst; - const char *src; - - dst = vdst; - src = vsrc; - while (n-- > 0) { - 28e: 85 c0 test %eax,%eax - 290: 7e 13 jle 2a5 - 292: 01 d0 add %edx,%eax - dst = vdst; - 294: 89 d7 mov %edx,%edi - 296: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 29d: 8d 76 00 lea 0x0(%esi),%esi - *dst++ = *src++; - 2a0: a4 movsb %ds:(%esi),%es:(%edi) - while (n-- > 0) { - 2a1: 39 f8 cmp %edi,%eax - 2a3: 75 fb jne 2a0 - } - return vdst; -} - 2a5: 5e pop %esi - 2a6: 89 d0 mov %edx,%eax - 2a8: 5f pop %edi - 2a9: 5d pop %ebp - 2aa: c3 ret - -000002ab : -name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 2ab: b8 01 00 00 00 mov $0x1,%eax - 2b0: cd 40 int $0x40 - 2b2: c3 ret - -000002b3 : -SYSCALL(exit) - 2b3: b8 02 00 00 00 mov $0x2,%eax - 2b8: cd 40 int $0x40 - 2ba: c3 ret - -000002bb : -SYSCALL(wait) - 2bb: b8 03 00 00 00 mov $0x3,%eax - 2c0: cd 40 int $0x40 - 2c2: c3 ret - -000002c3 : -SYSCALL(pipe) - 2c3: b8 04 00 00 00 mov $0x4,%eax - 2c8: cd 40 int $0x40 - 2ca: c3 ret - -000002cb : -SYSCALL(read) - 2cb: b8 05 00 00 00 mov $0x5,%eax - 2d0: cd 40 int $0x40 - 2d2: c3 ret - -000002d3 : -SYSCALL(kill) - 2d3: b8 06 00 00 00 mov $0x6,%eax - 2d8: cd 40 int $0x40 - 2da: c3 ret - -000002db : -SYSCALL(exec) - 2db: b8 07 00 00 00 mov $0x7,%eax - 2e0: cd 40 int $0x40 - 2e2: c3 ret - -000002e3 : -SYSCALL(fstat) - 2e3: b8 08 00 00 00 mov $0x8,%eax - 2e8: cd 40 int $0x40 - 2ea: c3 ret - -000002eb : -SYSCALL(chdir) - 2eb: b8 09 00 00 00 mov $0x9,%eax - 2f0: cd 40 int $0x40 - 2f2: c3 ret - -000002f3 : -SYSCALL(dup) - 2f3: b8 0a 00 00 00 mov $0xa,%eax - 2f8: cd 40 int $0x40 - 2fa: c3 ret - -000002fb : -SYSCALL(getpid) - 2fb: b8 0b 00 00 00 mov $0xb,%eax - 300: cd 40 int $0x40 - 302: c3 ret - -00000303 : -SYSCALL(sbrk) - 303: b8 0c 00 00 00 mov $0xc,%eax - 308: cd 40 int $0x40 - 30a: c3 ret - -0000030b : -SYSCALL(sleep) - 30b: b8 0d 00 00 00 mov $0xd,%eax - 310: cd 40 int $0x40 - 312: c3 ret - -00000313 : -SYSCALL(uptime) - 313: b8 0e 00 00 00 mov $0xe,%eax - 318: cd 40 int $0x40 - 31a: c3 ret - -0000031b : -SYSCALL(open) - 31b: b8 0f 00 00 00 mov $0xf,%eax - 320: cd 40 int $0x40 - 322: c3 ret - -00000323 : -SYSCALL(write) - 323: b8 10 00 00 00 mov $0x10,%eax - 328: cd 40 int $0x40 - 32a: c3 ret - -0000032b : -SYSCALL(mknod) - 32b: b8 11 00 00 00 mov $0x11,%eax - 330: cd 40 int $0x40 - 332: c3 ret - -00000333 : -SYSCALL(unlink) - 333: b8 12 00 00 00 mov $0x12,%eax - 338: cd 40 int $0x40 - 33a: c3 ret - -0000033b : -SYSCALL(link) - 33b: b8 13 00 00 00 mov $0x13,%eax - 340: cd 40 int $0x40 - 342: c3 ret - -00000343 : -SYSCALL(mkdir) - 343: b8 14 00 00 00 mov $0x14,%eax - 348: cd 40 int $0x40 - 34a: c3 ret - -0000034b : -SYSCALL(close) - 34b: b8 15 00 00 00 mov $0x15,%eax - 350: cd 40 int $0x40 - 352: c3 ret - -00000353 : -SYSCALL(getch) - 353: b8 16 00 00 00 mov $0x16,%eax - 358: cd 40 int $0x40 - 35a: c3 ret - -0000035b : -SYSCALL(greeting) - 35b: b8 17 00 00 00 mov $0x17,%eax - 360: cd 40 int $0x40 - 362: c3 ret - -00000363 : -SYSCALL(shutdown) - 363: b8 18 00 00 00 mov $0x18,%eax - 368: cd 40 int $0x40 - 36a: c3 ret - 36b: 66 90 xchg %ax,%ax - 36d: 66 90 xchg %ax,%ax - 36f: 90 nop - -00000370 : - -static void putc(int fd, char c) { - write(fd, &c, 1); -} - -static void printint(int fd, int xx, int base, int sgn) { - 370: 55 push %ebp - 371: 89 e5 mov %esp,%ebp - 373: 57 push %edi - 374: 56 push %esi - 375: 53 push %ebx - 376: 83 ec 3c sub $0x3c,%esp - 379: 89 4d c4 mov %ecx,-0x3c(%ebp) - uint x; - - neg = 0; - if (sgn && xx < 0) { - neg = 1; - x = -xx; - 37c: 89 d1 mov %edx,%ecx -static void printint(int fd, int xx, int base, int sgn) { - 37e: 89 45 b8 mov %eax,-0x48(%ebp) - if (sgn && xx < 0) { - 381: 85 d2 test %edx,%edx - 383: 0f 89 7f 00 00 00 jns 408 - 389: f6 45 08 01 testb $0x1,0x8(%ebp) - 38d: 74 79 je 408 - neg = 1; - 38f: c7 45 bc 01 00 00 00 movl $0x1,-0x44(%ebp) - x = -xx; - 396: f7 d9 neg %ecx - } - else { - x = xx; - } - - i = 0; - 398: 31 db xor %ebx,%ebx - 39a: 8d 75 d7 lea -0x29(%ebp),%esi - 39d: 8d 76 00 lea 0x0(%esi),%esi - do { - buf[i++] = digits[x % base]; - 3a0: 89 c8 mov %ecx,%eax - 3a2: 31 d2 xor %edx,%edx - 3a4: 89 cf mov %ecx,%edi - 3a6: f7 75 c4 divl -0x3c(%ebp) - 3a9: 0f b6 92 bc 07 00 00 movzbl 0x7bc(%edx),%edx - 3b0: 89 45 c0 mov %eax,-0x40(%ebp) - 3b3: 89 d8 mov %ebx,%eax - 3b5: 8d 5b 01 lea 0x1(%ebx),%ebx - } - while ((x /= base) != 0); - 3b8: 8b 4d c0 mov -0x40(%ebp),%ecx - buf[i++] = digits[x % base]; - 3bb: 88 14 1e mov %dl,(%esi,%ebx,1) - while ((x /= base) != 0); - 3be: 39 7d c4 cmp %edi,-0x3c(%ebp) - 3c1: 76 dd jbe 3a0 - if (neg) { - 3c3: 8b 4d bc mov -0x44(%ebp),%ecx - 3c6: 85 c9 test %ecx,%ecx - 3c8: 74 0c je 3d6 - buf[i++] = '-'; - 3ca: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) - buf[i++] = digits[x % base]; - 3cf: 89 d8 mov %ebx,%eax - buf[i++] = '-'; - 3d1: ba 2d 00 00 00 mov $0x2d,%edx - } - - while (--i >= 0) { - 3d6: 8b 7d b8 mov -0x48(%ebp),%edi - 3d9: 8d 5c 05 d7 lea -0x29(%ebp,%eax,1),%ebx - 3dd: eb 07 jmp 3e6 - 3df: 90 nop - putc(fd, buf[i]); - 3e0: 0f b6 13 movzbl (%ebx),%edx - 3e3: 83 eb 01 sub $0x1,%ebx - write(fd, &c, 1); - 3e6: 83 ec 04 sub $0x4,%esp - 3e9: 88 55 d7 mov %dl,-0x29(%ebp) - 3ec: 6a 01 push $0x1 - 3ee: 56 push %esi - 3ef: 57 push %edi - 3f0: e8 2e ff ff ff call 323 - while (--i >= 0) { - 3f5: 83 c4 10 add $0x10,%esp - 3f8: 39 de cmp %ebx,%esi - 3fa: 75 e4 jne 3e0 - } -} - 3fc: 8d 65 f4 lea -0xc(%ebp),%esp - 3ff: 5b pop %ebx - 400: 5e pop %esi - 401: 5f pop %edi - 402: 5d pop %ebp - 403: c3 ret - 404: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - neg = 0; - 408: c7 45 bc 00 00 00 00 movl $0x0,-0x44(%ebp) - 40f: eb 87 jmp 398 - 411: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 418: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 41f: 90 nop - -00000420 : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void printf(int fd, const char *fmt, ...) { - 420: 55 push %ebp - 421: 89 e5 mov %esp,%ebp - 423: 57 push %edi - 424: 56 push %esi - 425: 53 push %ebx - 426: 83 ec 2c sub $0x2c,%esp - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for (i = 0; fmt[i]; i++) { - 429: 8b 5d 0c mov 0xc(%ebp),%ebx -void printf(int fd, const char *fmt, ...) { - 42c: 8b 75 08 mov 0x8(%ebp),%esi - for (i = 0; fmt[i]; i++) { - 42f: 0f b6 13 movzbl (%ebx),%edx - 432: 84 d2 test %dl,%dl - 434: 74 6a je 4a0 - ap = (uint*)(void*)&fmt + 1; - 436: 8d 45 10 lea 0x10(%ebp),%eax - 439: 83 c3 01 add $0x1,%ebx - write(fd, &c, 1); - 43c: 8d 7d e7 lea -0x19(%ebp),%edi - state = 0; - 43f: 31 c9 xor %ecx,%ecx - ap = (uint*)(void*)&fmt + 1; - 441: 89 45 d0 mov %eax,-0x30(%ebp) - 444: eb 36 jmp 47c - 446: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 44d: 8d 76 00 lea 0x0(%esi),%esi - 450: 89 4d d4 mov %ecx,-0x2c(%ebp) - c = fmt[i] & 0xff; - if (state == 0) { - if (c == '%') { - state = '%'; - 453: b9 25 00 00 00 mov $0x25,%ecx - if (c == '%') { - 458: 83 f8 25 cmp $0x25,%eax - 45b: 74 15 je 472 - write(fd, &c, 1); - 45d: 83 ec 04 sub $0x4,%esp - 460: 88 55 e7 mov %dl,-0x19(%ebp) - 463: 6a 01 push $0x1 - 465: 57 push %edi - 466: 56 push %esi - 467: e8 b7 fe ff ff call 323 - 46c: 8b 4d d4 mov -0x2c(%ebp),%ecx - } - else { - putc(fd, c); - 46f: 83 c4 10 add $0x10,%esp - for (i = 0; fmt[i]; i++) { - 472: 0f b6 13 movzbl (%ebx),%edx - 475: 83 c3 01 add $0x1,%ebx - 478: 84 d2 test %dl,%dl - 47a: 74 24 je 4a0 - c = fmt[i] & 0xff; - 47c: 0f b6 c2 movzbl %dl,%eax - if (state == 0) { - 47f: 85 c9 test %ecx,%ecx - 481: 74 cd je 450 - } - } - else if (state == '%') { - 483: 83 f9 25 cmp $0x25,%ecx - 486: 75 ea jne 472 - if (c == 'd') { - 488: 83 f8 25 cmp $0x25,%eax - 48b: 0f 84 07 01 00 00 je 598 - 491: 83 e8 63 sub $0x63,%eax - 494: 83 f8 15 cmp $0x15,%eax - 497: 77 17 ja 4b0 - 499: ff 24 85 64 07 00 00 jmp *0x764(,%eax,4) - putc(fd, c); - } - state = 0; - } - } -} - 4a0: 8d 65 f4 lea -0xc(%ebp),%esp - 4a3: 5b pop %ebx - 4a4: 5e pop %esi - 4a5: 5f pop %edi - 4a6: 5d pop %ebp - 4a7: c3 ret - 4a8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 4af: 90 nop - write(fd, &c, 1); - 4b0: 83 ec 04 sub $0x4,%esp - 4b3: 88 55 d4 mov %dl,-0x2c(%ebp) - 4b6: 6a 01 push $0x1 - 4b8: 57 push %edi - 4b9: 56 push %esi - 4ba: c6 45 e7 25 movb $0x25,-0x19(%ebp) - 4be: e8 60 fe ff ff call 323 - putc(fd, c); - 4c3: 0f b6 55 d4 movzbl -0x2c(%ebp),%edx - write(fd, &c, 1); - 4c7: 83 c4 0c add $0xc,%esp - 4ca: 88 55 e7 mov %dl,-0x19(%ebp) - 4cd: 6a 01 push $0x1 - 4cf: 57 push %edi - 4d0: 56 push %esi - 4d1: e8 4d fe ff ff call 323 - putc(fd, c); - 4d6: 83 c4 10 add $0x10,%esp - state = 0; - 4d9: 31 c9 xor %ecx,%ecx - 4db: eb 95 jmp 472 - 4dd: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 16, 0); - 4e0: 83 ec 0c sub $0xc,%esp - 4e3: b9 10 00 00 00 mov $0x10,%ecx - 4e8: 6a 00 push $0x0 - 4ea: 8b 45 d0 mov -0x30(%ebp),%eax - 4ed: 8b 10 mov (%eax),%edx - 4ef: 89 f0 mov %esi,%eax - 4f1: e8 7a fe ff ff call 370 - ap++; - 4f6: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 4fa: 83 c4 10 add $0x10,%esp - state = 0; - 4fd: 31 c9 xor %ecx,%ecx - 4ff: e9 6e ff ff ff jmp 472 - 504: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - s = (char*)*ap; - 508: 8b 45 d0 mov -0x30(%ebp),%eax - 50b: 8b 10 mov (%eax),%edx - ap++; - 50d: 83 c0 04 add $0x4,%eax - 510: 89 45 d0 mov %eax,-0x30(%ebp) - if (s == 0) { - 513: 85 d2 test %edx,%edx - 515: 0f 84 8d 00 00 00 je 5a8 - while (*s != 0) { - 51b: 0f b6 02 movzbl (%edx),%eax - state = 0; - 51e: 31 c9 xor %ecx,%ecx - while (*s != 0) { - 520: 84 c0 test %al,%al - 522: 0f 84 4a ff ff ff je 472 - 528: 89 5d d4 mov %ebx,-0x2c(%ebp) - 52b: 89 d3 mov %edx,%ebx - 52d: 8d 76 00 lea 0x0(%esi),%esi - write(fd, &c, 1); - 530: 83 ec 04 sub $0x4,%esp - s++; - 533: 83 c3 01 add $0x1,%ebx - 536: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 539: 6a 01 push $0x1 - 53b: 57 push %edi - 53c: 56 push %esi - 53d: e8 e1 fd ff ff call 323 - while (*s != 0) { - 542: 0f b6 03 movzbl (%ebx),%eax - 545: 83 c4 10 add $0x10,%esp - 548: 84 c0 test %al,%al - 54a: 75 e4 jne 530 - state = 0; - 54c: 8b 5d d4 mov -0x2c(%ebp),%ebx - 54f: 31 c9 xor %ecx,%ecx - 551: e9 1c ff ff ff jmp 472 - 556: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 55d: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 10, 1); - 560: 83 ec 0c sub $0xc,%esp - 563: b9 0a 00 00 00 mov $0xa,%ecx - 568: 6a 01 push $0x1 - 56a: e9 7b ff ff ff jmp 4ea - 56f: 90 nop - putc(fd, *ap); - 570: 8b 45 d0 mov -0x30(%ebp),%eax - write(fd, &c, 1); - 573: 83 ec 04 sub $0x4,%esp - putc(fd, *ap); - 576: 8b 00 mov (%eax),%eax - write(fd, &c, 1); - 578: 6a 01 push $0x1 - 57a: 57 push %edi - 57b: 56 push %esi - putc(fd, *ap); - 57c: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 57f: e8 9f fd ff ff call 323 - ap++; - 584: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 588: 83 c4 10 add $0x10,%esp - state = 0; - 58b: 31 c9 xor %ecx,%ecx - 58d: e9 e0 fe ff ff jmp 472 - 592: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - putc(fd, c); - 598: 88 55 e7 mov %dl,-0x19(%ebp) - write(fd, &c, 1); - 59b: 83 ec 04 sub $0x4,%esp - 59e: e9 2a ff ff ff jmp 4cd - 5a3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 5a7: 90 nop - s = "(null)"; - 5a8: ba 5c 07 00 00 mov $0x75c,%edx - while (*s != 0) { - 5ad: 89 5d d4 mov %ebx,-0x2c(%ebp) - 5b0: b8 28 00 00 00 mov $0x28,%eax - 5b5: 89 d3 mov %edx,%ebx - 5b7: e9 74 ff ff ff jmp 530 - 5bc: 66 90 xchg %ax,%ax - 5be: 66 90 xchg %ax,%ax - -000005c0 : -typedef union header Header; - -static Header base; -static Header *freep; - -void free(void *ap) { - 5c0: 55 push %ebp - Header *bp, *p; - - bp = (Header*)ap - 1; - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 5c1: a1 74 0a 00 00 mov 0xa74,%eax -void free(void *ap) { - 5c6: 89 e5 mov %esp,%ebp - 5c8: 57 push %edi - 5c9: 56 push %esi - 5ca: 53 push %ebx - 5cb: 8b 5d 08 mov 0x8(%ebp),%ebx - bp = (Header*)ap - 1; - 5ce: 8d 4b f8 lea -0x8(%ebx),%ecx - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 5d1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 5d8: 89 c2 mov %eax,%edx - 5da: 8b 00 mov (%eax),%eax - 5dc: 39 ca cmp %ecx,%edx - 5de: 73 30 jae 610 - 5e0: 39 c1 cmp %eax,%ecx - 5e2: 72 04 jb 5e8 - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 5e4: 39 c2 cmp %eax,%edx - 5e6: 72 f0 jb 5d8 - break; - } - } - if (bp + bp->s.size == p->s.ptr) { - 5e8: 8b 73 fc mov -0x4(%ebx),%esi - 5eb: 8d 3c f1 lea (%ecx,%esi,8),%edi - 5ee: 39 f8 cmp %edi,%eax - 5f0: 74 30 je 622 - bp->s.size += p->s.ptr->s.size; - bp->s.ptr = p->s.ptr->s.ptr; - 5f2: 89 43 f8 mov %eax,-0x8(%ebx) - } - else { - bp->s.ptr = p->s.ptr; - } - if (p + p->s.size == bp) { - 5f5: 8b 42 04 mov 0x4(%edx),%eax - 5f8: 8d 34 c2 lea (%edx,%eax,8),%esi - 5fb: 39 f1 cmp %esi,%ecx - 5fd: 74 3a je 639 - p->s.size += bp->s.size; - p->s.ptr = bp->s.ptr; - 5ff: 89 0a mov %ecx,(%edx) - } - else { - p->s.ptr = bp; - } - freep = p; -} - 601: 5b pop %ebx - freep = p; - 602: 89 15 74 0a 00 00 mov %edx,0xa74 -} - 608: 5e pop %esi - 609: 5f pop %edi - 60a: 5d pop %ebp - 60b: c3 ret - 60c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 610: 39 c2 cmp %eax,%edx - 612: 72 c4 jb 5d8 - 614: 39 c1 cmp %eax,%ecx - 616: 73 c0 jae 5d8 - if (bp + bp->s.size == p->s.ptr) { - 618: 8b 73 fc mov -0x4(%ebx),%esi - 61b: 8d 3c f1 lea (%ecx,%esi,8),%edi - 61e: 39 f8 cmp %edi,%eax - 620: 75 d0 jne 5f2 - bp->s.size += p->s.ptr->s.size; - 622: 03 70 04 add 0x4(%eax),%esi - 625: 89 73 fc mov %esi,-0x4(%ebx) - bp->s.ptr = p->s.ptr->s.ptr; - 628: 8b 02 mov (%edx),%eax - 62a: 8b 00 mov (%eax),%eax - 62c: 89 43 f8 mov %eax,-0x8(%ebx) - if (p + p->s.size == bp) { - 62f: 8b 42 04 mov 0x4(%edx),%eax - 632: 8d 34 c2 lea (%edx,%eax,8),%esi - 635: 39 f1 cmp %esi,%ecx - 637: 75 c6 jne 5ff - p->s.size += bp->s.size; - 639: 03 43 fc add -0x4(%ebx),%eax - freep = p; - 63c: 89 15 74 0a 00 00 mov %edx,0xa74 - p->s.size += bp->s.size; - 642: 89 42 04 mov %eax,0x4(%edx) - p->s.ptr = bp->s.ptr; - 645: 8b 4b f8 mov -0x8(%ebx),%ecx - 648: 89 0a mov %ecx,(%edx) -} - 64a: 5b pop %ebx - 64b: 5e pop %esi - 64c: 5f pop %edi - 64d: 5d pop %ebp - 64e: c3 ret - 64f: 90 nop - -00000650 : - hp->s.size = nu; - free((void*)(hp + 1)); - return freep; -} - -void* malloc(uint nbytes) { - 650: 55 push %ebp - 651: 89 e5 mov %esp,%ebp - 653: 57 push %edi - 654: 56 push %esi - 655: 53 push %ebx - 656: 83 ec 1c sub $0x1c,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 659: 8b 45 08 mov 0x8(%ebp),%eax - if ((prevp = freep) == 0) { - 65c: 8b 3d 74 0a 00 00 mov 0xa74,%edi - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 662: 8d 70 07 lea 0x7(%eax),%esi - 665: c1 ee 03 shr $0x3,%esi - 668: 83 c6 01 add $0x1,%esi - if ((prevp = freep) == 0) { - 66b: 85 ff test %edi,%edi - 66d: 0f 84 9d 00 00 00 je 710 - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 673: 8b 17 mov (%edi),%edx - if (p->s.size >= nunits) { - 675: 8b 4a 04 mov 0x4(%edx),%ecx - 678: 39 f1 cmp %esi,%ecx - 67a: 73 6a jae 6e6 - 67c: bb 00 10 00 00 mov $0x1000,%ebx - 681: 39 de cmp %ebx,%esi - 683: 0f 43 de cmovae %esi,%ebx - p = sbrk(nu * sizeof(Header)); - 686: 8d 04 dd 00 00 00 00 lea 0x0(,%ebx,8),%eax - 68d: 89 45 e4 mov %eax,-0x1c(%ebp) - 690: eb 17 jmp 6a9 - 692: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 698: 8b 02 mov (%edx),%eax - if (p->s.size >= nunits) { - 69a: 8b 48 04 mov 0x4(%eax),%ecx - 69d: 39 f1 cmp %esi,%ecx - 69f: 73 4f jae 6f0 - p->s.size = nunits; - } - freep = prevp; - return (void*)(p + 1); - } - if (p == freep) { - 6a1: 8b 3d 74 0a 00 00 mov 0xa74,%edi - 6a7: 89 c2 mov %eax,%edx - 6a9: 39 d7 cmp %edx,%edi - 6ab: 75 eb jne 698 - p = sbrk(nu * sizeof(Header)); - 6ad: 83 ec 0c sub $0xc,%esp - 6b0: ff 75 e4 push -0x1c(%ebp) - 6b3: e8 4b fc ff ff call 303 - if (p == (char*)-1) { - 6b8: 83 c4 10 add $0x10,%esp - 6bb: 83 f8 ff cmp $0xffffffff,%eax - 6be: 74 1c je 6dc - hp->s.size = nu; - 6c0: 89 58 04 mov %ebx,0x4(%eax) - free((void*)(hp + 1)); - 6c3: 83 ec 0c sub $0xc,%esp - 6c6: 83 c0 08 add $0x8,%eax - 6c9: 50 push %eax - 6ca: e8 f1 fe ff ff call 5c0 - return freep; - 6cf: 8b 15 74 0a 00 00 mov 0xa74,%edx - if ((p = morecore(nunits)) == 0) { - 6d5: 83 c4 10 add $0x10,%esp - 6d8: 85 d2 test %edx,%edx - 6da: 75 bc jne 698 - return 0; - } - } - } -} - 6dc: 8d 65 f4 lea -0xc(%ebp),%esp - return 0; - 6df: 31 c0 xor %eax,%eax -} - 6e1: 5b pop %ebx - 6e2: 5e pop %esi - 6e3: 5f pop %edi - 6e4: 5d pop %ebp - 6e5: c3 ret - if (p->s.size >= nunits) { - 6e6: 89 d0 mov %edx,%eax - 6e8: 89 fa mov %edi,%edx - 6ea: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - if (p->s.size == nunits) { - 6f0: 39 ce cmp %ecx,%esi - 6f2: 74 4c je 740 - p->s.size -= nunits; - 6f4: 29 f1 sub %esi,%ecx - 6f6: 89 48 04 mov %ecx,0x4(%eax) - p += p->s.size; - 6f9: 8d 04 c8 lea (%eax,%ecx,8),%eax - p->s.size = nunits; - 6fc: 89 70 04 mov %esi,0x4(%eax) - freep = prevp; - 6ff: 89 15 74 0a 00 00 mov %edx,0xa74 -} - 705: 8d 65 f4 lea -0xc(%ebp),%esp - return (void*)(p + 1); - 708: 83 c0 08 add $0x8,%eax -} - 70b: 5b pop %ebx - 70c: 5e pop %esi - 70d: 5f pop %edi - 70e: 5d pop %ebp - 70f: c3 ret - base.s.ptr = freep = prevp = &base; - 710: c7 05 74 0a 00 00 78 movl $0xa78,0xa74 - 717: 0a 00 00 - base.s.size = 0; - 71a: bf 78 0a 00 00 mov $0xa78,%edi - base.s.ptr = freep = prevp = &base; - 71f: c7 05 78 0a 00 00 78 movl $0xa78,0xa78 - 726: 0a 00 00 - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 729: 89 fa mov %edi,%edx - base.s.size = 0; - 72b: c7 05 7c 0a 00 00 00 movl $0x0,0xa7c - 732: 00 00 00 - if (p->s.size >= nunits) { - 735: e9 42 ff ff ff jmp 67c - 73a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - prevp->s.ptr = p->s.ptr; - 740: 8b 08 mov (%eax),%ecx - 742: 89 0a mov %ecx,(%edx) - 744: eb b9 jmp 6ff diff --git a/kill.d b/kill.d deleted file mode 100644 index 078f4f8..0000000 --- a/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/kill.o b/kill.o deleted file mode 100644 index f84f644014641fbbce9fab855ad2a79638ca4848..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3472 zcma)9TWl2989rw&%bGQ78&kkIjn{<)gSvy)Aksh}Bu=5Wpn*6PqlnV+dc2;po;7m; zjFKSLs*(ti+e4lz<)Kn4Rq9I~l7~E@R^m00A~i~+BvM)_ibxe+BBYSG-*@($^`N#Y zzqIH3@8|ZPf9xwiKYCb7DGW(ri&aU8>8`eAkAe{~D7J_!@f*Ru%DJ%FtSpAJp69JK z;o{oSZO-yPzF9ec=j2QOJoT%o_n7R&^3CGa+SMgz`3L#@_G{^b;??Dw-79h*4 z^3KZ2%1h2Rh0A~IefZPt3&kHlKF_SbwUnfWok->i=}=#&VfgX=WI^3+P@{C#5T&)| zdx9*|Nm}j@qSrWX7^T7;fU5g(3}^7O$q2U>_MK$UQ^!F#&tZ_V@KZqX0*02b`Kh{$VQu*WFf@GNY~6MEOV1Nq3N@jZkqDJ)w|= zE;<~-Zy$cvUJP8Obr8b@nMn-4BQuTRWiqr=Bb*T=bGTF?w~12eV974S{tNM(ywZ<# zx?%$0^oY{1L(cW&qXTw%->|j6^zg8|ePE*hkpT%qp-(~T-iY_6z#Ml?)z#}-@wK}WTw=s*1QsGx~{ z3-0B+6r0|C9INQrBkW?wsjU-JNbL$$7~Hz10?`qU^_t^2TdngLCdp5pB7f=(czU4x z3tN?ESx!0SK|8tfrZc!*PKo=Vwdj&d&7(Hd1IA3Nitdb9)~a1VJgo1^>j=0MJ}WRo z@&WLc9I|@sad3i{DNb;3hlQ(V+vvLe8{FYS&t!4ZEk5IR3Cpnye{}Ct7_{XBTD;-* zQ;mYV=yutcr~hu@iO4KU!bTL#R#@%}ei(_x80?(js}&tcZ|Z3~3ex2O2>X#9~wW>2&*i6HyEhH(t z)2iPL{UnSUZDngAOsjLTzYtUxTUbdD8)v_MuDTev(x9HUv~n>FVD*!ws6HRJqE?nv zv*=wWWE)rmCh!41b*5IX}lnUOJS-#XxOz7 z%!dB1WbW+LQgS?QHFo()5+un&5T#@4w7mMgIq_uSn-V@AKzCQIXRO>X{JxL zTFaDJdwy)p8{M-*t9kbuIDq8kr-XdACiO!4zt*^57kzt(t5Gp={OtQ@)LWQ6Rth>?r)ua$Wq;F|VP&fbnt)!ybb^pKkvQOs4{RqN*J5J8iccWiB%{gLT96G-(+x|AQ`(1MZ0Eq|=PhE<+#}~jd3WYr25(}( ziu-Zk6*8KP?F!_4zRkIOXg{5NZ-6&3OmPtT@K;!ejO}%3^7%%PkLSwuvGba9{xf(J z16G_sz8A=7GPbuM=ktvs*$8yZ$9;P} z6y%NHY51`w4H>_Wp&)PQ_bjFy8QZ_0BadrU^dkI@YM#J-kiNn%zu)QH`E7*F>^Gl_ qaUXJCDEW^=2|xPre3%PI(V-7f_gg#C>e~CD%lrKX^WOe1e*XsZajQH4 diff --git a/kill.sym b/kill.sym deleted file mode 100644 index ed3d956..0000000 --- a/kill.sym +++ /dev/null @@ -1,48 +0,0 @@ -00000000 kill.c -00000000 ulib.c -00000000 printf.c -00000370 printint -000007bc digits.0 -00000000 umalloc.c -00000a74 freep -00000a78 base -00000060 strcpy -00000420 printf -0000035b greeting -00000280 memmove -0000032b mknod -00000180 gets -000002fb getpid -00000650 malloc -0000030b sleep -000002c3 pipe -00000353 getch -00000323 write -000002e3 fstat -000002d3 kill -000002eb chdir -000002db exec -000002bb wait -000002cb read -00000333 unlink -000002ab fork -00000303 sbrk -00000313 uptime -00000a74 __bss_start -00000120 memset -00000000 main -00000090 strcmp -00000363 shutdown -000002f3 dup -000001f0 stat -00000a74 _edata -00000a80 _end -0000033b link -000002b3 exit -00000240 atoi -000000f0 strlen -0000031b open -00000140 strchr -00000343 mkdir -0000034b close -000005c0 free diff --git a/lapic.d b/lapic.d deleted file mode 100644 index 6e62387..0000000 --- a/lapic.d +++ /dev/null @@ -1,2 +0,0 @@ -lapic.o: lapic.c /usr/include/stdc-predef.h param.h types.h defs.h date.h \ - memlayout.h traps.h mmu.h x86.h diff --git a/lapic.o b/lapic.o deleted file mode 100644 index 04f46de1a4effe2783620a13e36aeba74fa08dff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15188 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: -#include "types.h" -#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 push -0x4(%ecx) - if (argc != 3) { - a: 83 39 03 cmpl $0x3,(%ecx) -int main(int argc, char *argv[]) { - d: 55 push %ebp - e: 89 e5 mov %esp,%ebp - 10: 53 push %ebx - 11: 51 push %ecx - 12: 8b 59 04 mov 0x4(%ecx),%ebx - if (argc != 3) { - 15: 74 13 je 2a - printf(2, "Usage: ln old new\n"); - 17: 52 push %edx - 18: 52 push %edx - 19: 68 48 07 00 00 push $0x748 - 1e: 6a 02 push $0x2 - 20: e8 fb 03 00 00 call 420 - exit(); - 25: e8 89 02 00 00 call 2b3 - } - if (link(argv[1], argv[2]) < 0) { - 2a: 50 push %eax - 2b: 50 push %eax - 2c: ff 73 08 push 0x8(%ebx) - 2f: ff 73 04 push 0x4(%ebx) - 32: e8 04 03 00 00 call 33b - 37: 83 c4 10 add $0x10,%esp - 3a: 85 c0 test %eax,%eax - 3c: 78 05 js 43 - printf(2, "link %s %s: failed\n", argv[1], argv[2]); - } - exit(); - 3e: e8 70 02 00 00 call 2b3 - printf(2, "link %s %s: failed\n", argv[1], argv[2]); - 43: ff 73 08 push 0x8(%ebx) - 46: ff 73 04 push 0x4(%ebx) - 49: 68 5b 07 00 00 push $0x75b - 4e: 6a 02 push $0x2 - 50: e8 cb 03 00 00 call 420 - 55: 83 c4 10 add $0x10,%esp - 58: eb e4 jmp 3e - 5a: 66 90 xchg %ax,%ax - 5c: 66 90 xchg %ax,%ax - 5e: 66 90 xchg %ax,%ax - -00000060 : -#include "stat.h" -#include "fcntl.h" -#include "user.h" -#include "x86.h" - -char*strcpy(char *s, const char *t) { - 60: 55 push %ebp - char *os; - - os = s; - while ((*s++ = *t++) != 0) { - 61: 31 c0 xor %eax,%eax -char*strcpy(char *s, const char *t) { - 63: 89 e5 mov %esp,%ebp - 65: 53 push %ebx - 66: 8b 4d 08 mov 0x8(%ebp),%ecx - 69: 8b 5d 0c mov 0xc(%ebp),%ebx - 6c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - while ((*s++ = *t++) != 0) { - 70: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 74: 88 14 01 mov %dl,(%ecx,%eax,1) - 77: 83 c0 01 add $0x1,%eax - 7a: 84 d2 test %dl,%dl - 7c: 75 f2 jne 70 - ; - } - return os; -} - 7e: 8b 5d fc mov -0x4(%ebp),%ebx - 81: 89 c8 mov %ecx,%eax - 83: c9 leave - 84: c3 ret - 85: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 8c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000090 : - -int strcmp(const char *p, const char *q) { - 90: 55 push %ebp - 91: 89 e5 mov %esp,%ebp - 93: 53 push %ebx - 94: 8b 55 08 mov 0x8(%ebp),%edx - 97: 8b 4d 0c mov 0xc(%ebp),%ecx - while (*p && *p == *q) { - 9a: 0f b6 02 movzbl (%edx),%eax - 9d: 84 c0 test %al,%al - 9f: 75 17 jne b8 - a1: eb 3a jmp dd - a3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - a7: 90 nop - a8: 0f b6 42 01 movzbl 0x1(%edx),%eax - p++, q++; - ac: 83 c2 01 add $0x1,%edx - af: 8d 59 01 lea 0x1(%ecx),%ebx - while (*p && *p == *q) { - b2: 84 c0 test %al,%al - b4: 74 1a je d0 - p++, q++; - b6: 89 d9 mov %ebx,%ecx - while (*p && *p == *q) { - b8: 0f b6 19 movzbl (%ecx),%ebx - bb: 38 c3 cmp %al,%bl - bd: 74 e9 je a8 - } - return (uchar) * p - (uchar) * q; - bf: 29 d8 sub %ebx,%eax -} - c1: 8b 5d fc mov -0x4(%ebp),%ebx - c4: c9 leave - c5: c3 ret - c6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - cd: 8d 76 00 lea 0x0(%esi),%esi - return (uchar) * p - (uchar) * q; - d0: 0f b6 59 01 movzbl 0x1(%ecx),%ebx - d4: 31 c0 xor %eax,%eax - d6: 29 d8 sub %ebx,%eax -} - d8: 8b 5d fc mov -0x4(%ebp),%ebx - db: c9 leave - dc: c3 ret - return (uchar) * p - (uchar) * q; - dd: 0f b6 19 movzbl (%ecx),%ebx - e0: 31 c0 xor %eax,%eax - e2: eb db jmp bf - e4: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - eb: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - ef: 90 nop - -000000f0 : - -uint strlen(const char *s) { - f0: 55 push %ebp - f1: 89 e5 mov %esp,%ebp - f3: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - for (n = 0; s[n]; n++) { - f6: 80 3a 00 cmpb $0x0,(%edx) - f9: 74 15 je 110 - fb: 31 c0 xor %eax,%eax - fd: 8d 76 00 lea 0x0(%esi),%esi - 100: 83 c0 01 add $0x1,%eax - 103: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - 107: 89 c1 mov %eax,%ecx - 109: 75 f5 jne 100 - ; - } - return n; -} - 10b: 89 c8 mov %ecx,%eax - 10d: 5d pop %ebp - 10e: c3 ret - 10f: 90 nop - for (n = 0; s[n]; n++) { - 110: 31 c9 xor %ecx,%ecx -} - 112: 5d pop %ebp - 113: 89 c8 mov %ecx,%eax - 115: c3 ret - 116: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 11d: 8d 76 00 lea 0x0(%esi),%esi - -00000120 : - -void* memset(void *dst, int c, uint n) { - 120: 55 push %ebp - 121: 89 e5 mov %esp,%ebp - 123: 57 push %edi - 124: 8b 55 08 mov 0x8(%ebp),%edx - "d" (port), "0" (addr), "1" (cnt) : - "cc"); -} - -static inline void stosb(void *addr, int data, int cnt) { - asm volatile ("cld; rep stosb" : - 127: 8b 4d 10 mov 0x10(%ebp),%ecx - 12a: 8b 45 0c mov 0xc(%ebp),%eax - 12d: 89 d7 mov %edx,%edi - 12f: fc cld - 130: f3 aa rep stos %al,%es:(%edi) - stosb(dst, c, n); - return dst; -} - 132: 8b 7d fc mov -0x4(%ebp),%edi - 135: 89 d0 mov %edx,%eax - 137: c9 leave - 138: c3 ret - 139: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -00000140 : - -char* strchr(const char *s, char c) { - 140: 55 push %ebp - 141: 89 e5 mov %esp,%ebp - 143: 8b 45 08 mov 0x8(%ebp),%eax - 146: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx - for (; *s; s++) { - 14a: 0f b6 10 movzbl (%eax),%edx - 14d: 84 d2 test %dl,%dl - 14f: 75 12 jne 163 - 151: eb 1d jmp 170 - 153: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 157: 90 nop - 158: 0f b6 50 01 movzbl 0x1(%eax),%edx - 15c: 83 c0 01 add $0x1,%eax - 15f: 84 d2 test %dl,%dl - 161: 74 0d je 170 - if (*s == c) { - 163: 38 d1 cmp %dl,%cl - 165: 75 f1 jne 158 - return (char*)s; - } - } - return 0; -} - 167: 5d pop %ebp - 168: c3 ret - 169: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - return 0; - 170: 31 c0 xor %eax,%eax -} - 172: 5d pop %ebp - 173: c3 ret - 174: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 17b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 17f: 90 nop - -00000180 : - -char* gets(char *buf, int max) { - 180: 55 push %ebp - 181: 89 e5 mov %esp,%ebp - 183: 57 push %edi - 184: 56 push %esi - int i, cc; - char c; - - for (i = 0; i + 1 < max;) { - cc = read(0, &c, 1); - 185: 8d 7d e7 lea -0x19(%ebp),%edi -char* gets(char *buf, int max) { - 188: 53 push %ebx - for (i = 0; i + 1 < max;) { - 189: 31 db xor %ebx,%ebx -char* gets(char *buf, int max) { - 18b: 83 ec 1c sub $0x1c,%esp - for (i = 0; i + 1 < max;) { - 18e: eb 27 jmp 1b7 - cc = read(0, &c, 1); - 190: 83 ec 04 sub $0x4,%esp - 193: 6a 01 push $0x1 - 195: 57 push %edi - 196: 6a 00 push $0x0 - 198: e8 2e 01 00 00 call 2cb - if (cc < 1) { - 19d: 83 c4 10 add $0x10,%esp - 1a0: 85 c0 test %eax,%eax - 1a2: 7e 1d jle 1c1 - break; - } - buf[i++] = c; - 1a4: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 1a8: 8b 55 08 mov 0x8(%ebp),%edx - 1ab: 88 44 1a ff mov %al,-0x1(%edx,%ebx,1) - if (c == '\n' || c == '\r') { - 1af: 3c 0a cmp $0xa,%al - 1b1: 74 1d je 1d0 - 1b3: 3c 0d cmp $0xd,%al - 1b5: 74 19 je 1d0 - for (i = 0; i + 1 < max;) { - 1b7: 89 de mov %ebx,%esi - 1b9: 83 c3 01 add $0x1,%ebx - 1bc: 3b 5d 0c cmp 0xc(%ebp),%ebx - 1bf: 7c cf jl 190 - break; - } - } - buf[i] = '\0'; - 1c1: 8b 45 08 mov 0x8(%ebp),%eax - 1c4: c6 04 30 00 movb $0x0,(%eax,%esi,1) - return buf; -} - 1c8: 8d 65 f4 lea -0xc(%ebp),%esp - 1cb: 5b pop %ebx - 1cc: 5e pop %esi - 1cd: 5f pop %edi - 1ce: 5d pop %ebp - 1cf: c3 ret - buf[i] = '\0'; - 1d0: 8b 45 08 mov 0x8(%ebp),%eax - 1d3: 89 de mov %ebx,%esi - 1d5: c6 04 30 00 movb $0x0,(%eax,%esi,1) -} - 1d9: 8d 65 f4 lea -0xc(%ebp),%esp - 1dc: 5b pop %ebx - 1dd: 5e pop %esi - 1de: 5f pop %edi - 1df: 5d pop %ebp - 1e0: c3 ret - 1e1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 1e8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 1ef: 90 nop - -000001f0 : - -int stat(const char *n, struct stat *st) { - 1f0: 55 push %ebp - 1f1: 89 e5 mov %esp,%ebp - 1f3: 56 push %esi - 1f4: 53 push %ebx - int fd; - int r; - - fd = open(n, O_RDONLY); - 1f5: 83 ec 08 sub $0x8,%esp - 1f8: 6a 00 push $0x0 - 1fa: ff 75 08 push 0x8(%ebp) - 1fd: e8 19 01 00 00 call 31b - if (fd < 0) { - 202: 83 c4 10 add $0x10,%esp - 205: 85 c0 test %eax,%eax - 207: 78 27 js 230 - return -1; - } - r = fstat(fd, st); - 209: 83 ec 08 sub $0x8,%esp - 20c: ff 75 0c push 0xc(%ebp) - 20f: 89 c3 mov %eax,%ebx - 211: 50 push %eax - 212: e8 cc 00 00 00 call 2e3 - close(fd); - 217: 89 1c 24 mov %ebx,(%esp) - r = fstat(fd, st); - 21a: 89 c6 mov %eax,%esi - close(fd); - 21c: e8 2a 01 00 00 call 34b - return r; - 221: 83 c4 10 add $0x10,%esp -} - 224: 8d 65 f8 lea -0x8(%ebp),%esp - 227: 89 f0 mov %esi,%eax - 229: 5b pop %ebx - 22a: 5e pop %esi - 22b: 5d pop %ebp - 22c: c3 ret - 22d: 8d 76 00 lea 0x0(%esi),%esi - return -1; - 230: be ff ff ff ff mov $0xffffffff,%esi - 235: eb ed jmp 224 - 237: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 23e: 66 90 xchg %ax,%ax - -00000240 : - -int atoi(const char *s) { - 240: 55 push %ebp - 241: 89 e5 mov %esp,%ebp - 243: 53 push %ebx - 244: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - n = 0; - while ('0' <= *s && *s <= '9') { - 247: 0f be 02 movsbl (%edx),%eax - 24a: 8d 48 d0 lea -0x30(%eax),%ecx - 24d: 80 f9 09 cmp $0x9,%cl - n = 0; - 250: b9 00 00 00 00 mov $0x0,%ecx - while ('0' <= *s && *s <= '9') { - 255: 77 1e ja 275 - 257: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 25e: 66 90 xchg %ax,%ax - n = n * 10 + *s++ - '0'; - 260: 83 c2 01 add $0x1,%edx - 263: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 266: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx - while ('0' <= *s && *s <= '9') { - 26a: 0f be 02 movsbl (%edx),%eax - 26d: 8d 58 d0 lea -0x30(%eax),%ebx - 270: 80 fb 09 cmp $0x9,%bl - 273: 76 eb jbe 260 - } - return n; -} - 275: 8b 5d fc mov -0x4(%ebp),%ebx - 278: 89 c8 mov %ecx,%eax - 27a: c9 leave - 27b: c3 ret - 27c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000280 : - -void* memmove(void *vdst, const void *vsrc, int n) { - 280: 55 push %ebp - 281: 89 e5 mov %esp,%ebp - 283: 57 push %edi - 284: 8b 45 10 mov 0x10(%ebp),%eax - 287: 8b 55 08 mov 0x8(%ebp),%edx - 28a: 56 push %esi - 28b: 8b 75 0c mov 0xc(%ebp),%esi - char *dst; - const char *src; - - dst = vdst; - src = vsrc; - while (n-- > 0) { - 28e: 85 c0 test %eax,%eax - 290: 7e 13 jle 2a5 - 292: 01 d0 add %edx,%eax - dst = vdst; - 294: 89 d7 mov %edx,%edi - 296: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 29d: 8d 76 00 lea 0x0(%esi),%esi - *dst++ = *src++; - 2a0: a4 movsb %ds:(%esi),%es:(%edi) - while (n-- > 0) { - 2a1: 39 f8 cmp %edi,%eax - 2a3: 75 fb jne 2a0 - } - return vdst; -} - 2a5: 5e pop %esi - 2a6: 89 d0 mov %edx,%eax - 2a8: 5f pop %edi - 2a9: 5d pop %ebp - 2aa: c3 ret - -000002ab : -name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 2ab: b8 01 00 00 00 mov $0x1,%eax - 2b0: cd 40 int $0x40 - 2b2: c3 ret - -000002b3 : -SYSCALL(exit) - 2b3: b8 02 00 00 00 mov $0x2,%eax - 2b8: cd 40 int $0x40 - 2ba: c3 ret - -000002bb : -SYSCALL(wait) - 2bb: b8 03 00 00 00 mov $0x3,%eax - 2c0: cd 40 int $0x40 - 2c2: c3 ret - -000002c3 : -SYSCALL(pipe) - 2c3: b8 04 00 00 00 mov $0x4,%eax - 2c8: cd 40 int $0x40 - 2ca: c3 ret - -000002cb : -SYSCALL(read) - 2cb: b8 05 00 00 00 mov $0x5,%eax - 2d0: cd 40 int $0x40 - 2d2: c3 ret - -000002d3 : -SYSCALL(kill) - 2d3: b8 06 00 00 00 mov $0x6,%eax - 2d8: cd 40 int $0x40 - 2da: c3 ret - -000002db : -SYSCALL(exec) - 2db: b8 07 00 00 00 mov $0x7,%eax - 2e0: cd 40 int $0x40 - 2e2: c3 ret - -000002e3 : -SYSCALL(fstat) - 2e3: b8 08 00 00 00 mov $0x8,%eax - 2e8: cd 40 int $0x40 - 2ea: c3 ret - -000002eb : -SYSCALL(chdir) - 2eb: b8 09 00 00 00 mov $0x9,%eax - 2f0: cd 40 int $0x40 - 2f2: c3 ret - -000002f3 : -SYSCALL(dup) - 2f3: b8 0a 00 00 00 mov $0xa,%eax - 2f8: cd 40 int $0x40 - 2fa: c3 ret - -000002fb : -SYSCALL(getpid) - 2fb: b8 0b 00 00 00 mov $0xb,%eax - 300: cd 40 int $0x40 - 302: c3 ret - -00000303 : -SYSCALL(sbrk) - 303: b8 0c 00 00 00 mov $0xc,%eax - 308: cd 40 int $0x40 - 30a: c3 ret - -0000030b : -SYSCALL(sleep) - 30b: b8 0d 00 00 00 mov $0xd,%eax - 310: cd 40 int $0x40 - 312: c3 ret - -00000313 : -SYSCALL(uptime) - 313: b8 0e 00 00 00 mov $0xe,%eax - 318: cd 40 int $0x40 - 31a: c3 ret - -0000031b : -SYSCALL(open) - 31b: b8 0f 00 00 00 mov $0xf,%eax - 320: cd 40 int $0x40 - 322: c3 ret - -00000323 : -SYSCALL(write) - 323: b8 10 00 00 00 mov $0x10,%eax - 328: cd 40 int $0x40 - 32a: c3 ret - -0000032b : -SYSCALL(mknod) - 32b: b8 11 00 00 00 mov $0x11,%eax - 330: cd 40 int $0x40 - 332: c3 ret - -00000333 : -SYSCALL(unlink) - 333: b8 12 00 00 00 mov $0x12,%eax - 338: cd 40 int $0x40 - 33a: c3 ret - -0000033b : -SYSCALL(link) - 33b: b8 13 00 00 00 mov $0x13,%eax - 340: cd 40 int $0x40 - 342: c3 ret - -00000343 : -SYSCALL(mkdir) - 343: b8 14 00 00 00 mov $0x14,%eax - 348: cd 40 int $0x40 - 34a: c3 ret - -0000034b : -SYSCALL(close) - 34b: b8 15 00 00 00 mov $0x15,%eax - 350: cd 40 int $0x40 - 352: c3 ret - -00000353 : -SYSCALL(getch) - 353: b8 16 00 00 00 mov $0x16,%eax - 358: cd 40 int $0x40 - 35a: c3 ret - -0000035b : -SYSCALL(greeting) - 35b: b8 17 00 00 00 mov $0x17,%eax - 360: cd 40 int $0x40 - 362: c3 ret - -00000363 : -SYSCALL(shutdown) - 363: b8 18 00 00 00 mov $0x18,%eax - 368: cd 40 int $0x40 - 36a: c3 ret - 36b: 66 90 xchg %ax,%ax - 36d: 66 90 xchg %ax,%ax - 36f: 90 nop - -00000370 : - -static void putc(int fd, char c) { - write(fd, &c, 1); -} - -static void printint(int fd, int xx, int base, int sgn) { - 370: 55 push %ebp - 371: 89 e5 mov %esp,%ebp - 373: 57 push %edi - 374: 56 push %esi - 375: 53 push %ebx - 376: 83 ec 3c sub $0x3c,%esp - 379: 89 4d c4 mov %ecx,-0x3c(%ebp) - uint x; - - neg = 0; - if (sgn && xx < 0) { - neg = 1; - x = -xx; - 37c: 89 d1 mov %edx,%ecx -static void printint(int fd, int xx, int base, int sgn) { - 37e: 89 45 b8 mov %eax,-0x48(%ebp) - if (sgn && xx < 0) { - 381: 85 d2 test %edx,%edx - 383: 0f 89 7f 00 00 00 jns 408 - 389: f6 45 08 01 testb $0x1,0x8(%ebp) - 38d: 74 79 je 408 - neg = 1; - 38f: c7 45 bc 01 00 00 00 movl $0x1,-0x44(%ebp) - x = -xx; - 396: f7 d9 neg %ecx - } - else { - x = xx; - } - - i = 0; - 398: 31 db xor %ebx,%ebx - 39a: 8d 75 d7 lea -0x29(%ebp),%esi - 39d: 8d 76 00 lea 0x0(%esi),%esi - do { - buf[i++] = digits[x % base]; - 3a0: 89 c8 mov %ecx,%eax - 3a2: 31 d2 xor %edx,%edx - 3a4: 89 cf mov %ecx,%edi - 3a6: f7 75 c4 divl -0x3c(%ebp) - 3a9: 0f b6 92 d0 07 00 00 movzbl 0x7d0(%edx),%edx - 3b0: 89 45 c0 mov %eax,-0x40(%ebp) - 3b3: 89 d8 mov %ebx,%eax - 3b5: 8d 5b 01 lea 0x1(%ebx),%ebx - } - while ((x /= base) != 0); - 3b8: 8b 4d c0 mov -0x40(%ebp),%ecx - buf[i++] = digits[x % base]; - 3bb: 88 14 1e mov %dl,(%esi,%ebx,1) - while ((x /= base) != 0); - 3be: 39 7d c4 cmp %edi,-0x3c(%ebp) - 3c1: 76 dd jbe 3a0 - if (neg) { - 3c3: 8b 4d bc mov -0x44(%ebp),%ecx - 3c6: 85 c9 test %ecx,%ecx - 3c8: 74 0c je 3d6 - buf[i++] = '-'; - 3ca: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) - buf[i++] = digits[x % base]; - 3cf: 89 d8 mov %ebx,%eax - buf[i++] = '-'; - 3d1: ba 2d 00 00 00 mov $0x2d,%edx - } - - while (--i >= 0) { - 3d6: 8b 7d b8 mov -0x48(%ebp),%edi - 3d9: 8d 5c 05 d7 lea -0x29(%ebp,%eax,1),%ebx - 3dd: eb 07 jmp 3e6 - 3df: 90 nop - putc(fd, buf[i]); - 3e0: 0f b6 13 movzbl (%ebx),%edx - 3e3: 83 eb 01 sub $0x1,%ebx - write(fd, &c, 1); - 3e6: 83 ec 04 sub $0x4,%esp - 3e9: 88 55 d7 mov %dl,-0x29(%ebp) - 3ec: 6a 01 push $0x1 - 3ee: 56 push %esi - 3ef: 57 push %edi - 3f0: e8 2e ff ff ff call 323 - while (--i >= 0) { - 3f5: 83 c4 10 add $0x10,%esp - 3f8: 39 de cmp %ebx,%esi - 3fa: 75 e4 jne 3e0 - } -} - 3fc: 8d 65 f4 lea -0xc(%ebp),%esp - 3ff: 5b pop %ebx - 400: 5e pop %esi - 401: 5f pop %edi - 402: 5d pop %ebp - 403: c3 ret - 404: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - neg = 0; - 408: c7 45 bc 00 00 00 00 movl $0x0,-0x44(%ebp) - 40f: eb 87 jmp 398 - 411: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 418: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 41f: 90 nop - -00000420 : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void printf(int fd, const char *fmt, ...) { - 420: 55 push %ebp - 421: 89 e5 mov %esp,%ebp - 423: 57 push %edi - 424: 56 push %esi - 425: 53 push %ebx - 426: 83 ec 2c sub $0x2c,%esp - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for (i = 0; fmt[i]; i++) { - 429: 8b 5d 0c mov 0xc(%ebp),%ebx -void printf(int fd, const char *fmt, ...) { - 42c: 8b 75 08 mov 0x8(%ebp),%esi - for (i = 0; fmt[i]; i++) { - 42f: 0f b6 13 movzbl (%ebx),%edx - 432: 84 d2 test %dl,%dl - 434: 74 6a je 4a0 - ap = (uint*)(void*)&fmt + 1; - 436: 8d 45 10 lea 0x10(%ebp),%eax - 439: 83 c3 01 add $0x1,%ebx - write(fd, &c, 1); - 43c: 8d 7d e7 lea -0x19(%ebp),%edi - state = 0; - 43f: 31 c9 xor %ecx,%ecx - ap = (uint*)(void*)&fmt + 1; - 441: 89 45 d0 mov %eax,-0x30(%ebp) - 444: eb 36 jmp 47c - 446: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 44d: 8d 76 00 lea 0x0(%esi),%esi - 450: 89 4d d4 mov %ecx,-0x2c(%ebp) - c = fmt[i] & 0xff; - if (state == 0) { - if (c == '%') { - state = '%'; - 453: b9 25 00 00 00 mov $0x25,%ecx - if (c == '%') { - 458: 83 f8 25 cmp $0x25,%eax - 45b: 74 15 je 472 - write(fd, &c, 1); - 45d: 83 ec 04 sub $0x4,%esp - 460: 88 55 e7 mov %dl,-0x19(%ebp) - 463: 6a 01 push $0x1 - 465: 57 push %edi - 466: 56 push %esi - 467: e8 b7 fe ff ff call 323 - 46c: 8b 4d d4 mov -0x2c(%ebp),%ecx - } - else { - putc(fd, c); - 46f: 83 c4 10 add $0x10,%esp - for (i = 0; fmt[i]; i++) { - 472: 0f b6 13 movzbl (%ebx),%edx - 475: 83 c3 01 add $0x1,%ebx - 478: 84 d2 test %dl,%dl - 47a: 74 24 je 4a0 - c = fmt[i] & 0xff; - 47c: 0f b6 c2 movzbl %dl,%eax - if (state == 0) { - 47f: 85 c9 test %ecx,%ecx - 481: 74 cd je 450 - } - } - else if (state == '%') { - 483: 83 f9 25 cmp $0x25,%ecx - 486: 75 ea jne 472 - if (c == 'd') { - 488: 83 f8 25 cmp $0x25,%eax - 48b: 0f 84 07 01 00 00 je 598 - 491: 83 e8 63 sub $0x63,%eax - 494: 83 f8 15 cmp $0x15,%eax - 497: 77 17 ja 4b0 - 499: ff 24 85 78 07 00 00 jmp *0x778(,%eax,4) - putc(fd, c); - } - state = 0; - } - } -} - 4a0: 8d 65 f4 lea -0xc(%ebp),%esp - 4a3: 5b pop %ebx - 4a4: 5e pop %esi - 4a5: 5f pop %edi - 4a6: 5d pop %ebp - 4a7: c3 ret - 4a8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 4af: 90 nop - write(fd, &c, 1); - 4b0: 83 ec 04 sub $0x4,%esp - 4b3: 88 55 d4 mov %dl,-0x2c(%ebp) - 4b6: 6a 01 push $0x1 - 4b8: 57 push %edi - 4b9: 56 push %esi - 4ba: c6 45 e7 25 movb $0x25,-0x19(%ebp) - 4be: e8 60 fe ff ff call 323 - putc(fd, c); - 4c3: 0f b6 55 d4 movzbl -0x2c(%ebp),%edx - write(fd, &c, 1); - 4c7: 83 c4 0c add $0xc,%esp - 4ca: 88 55 e7 mov %dl,-0x19(%ebp) - 4cd: 6a 01 push $0x1 - 4cf: 57 push %edi - 4d0: 56 push %esi - 4d1: e8 4d fe ff ff call 323 - putc(fd, c); - 4d6: 83 c4 10 add $0x10,%esp - state = 0; - 4d9: 31 c9 xor %ecx,%ecx - 4db: eb 95 jmp 472 - 4dd: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 16, 0); - 4e0: 83 ec 0c sub $0xc,%esp - 4e3: b9 10 00 00 00 mov $0x10,%ecx - 4e8: 6a 00 push $0x0 - 4ea: 8b 45 d0 mov -0x30(%ebp),%eax - 4ed: 8b 10 mov (%eax),%edx - 4ef: 89 f0 mov %esi,%eax - 4f1: e8 7a fe ff ff call 370 - ap++; - 4f6: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 4fa: 83 c4 10 add $0x10,%esp - state = 0; - 4fd: 31 c9 xor %ecx,%ecx - 4ff: e9 6e ff ff ff jmp 472 - 504: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - s = (char*)*ap; - 508: 8b 45 d0 mov -0x30(%ebp),%eax - 50b: 8b 10 mov (%eax),%edx - ap++; - 50d: 83 c0 04 add $0x4,%eax - 510: 89 45 d0 mov %eax,-0x30(%ebp) - if (s == 0) { - 513: 85 d2 test %edx,%edx - 515: 0f 84 8d 00 00 00 je 5a8 - while (*s != 0) { - 51b: 0f b6 02 movzbl (%edx),%eax - state = 0; - 51e: 31 c9 xor %ecx,%ecx - while (*s != 0) { - 520: 84 c0 test %al,%al - 522: 0f 84 4a ff ff ff je 472 - 528: 89 5d d4 mov %ebx,-0x2c(%ebp) - 52b: 89 d3 mov %edx,%ebx - 52d: 8d 76 00 lea 0x0(%esi),%esi - write(fd, &c, 1); - 530: 83 ec 04 sub $0x4,%esp - s++; - 533: 83 c3 01 add $0x1,%ebx - 536: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 539: 6a 01 push $0x1 - 53b: 57 push %edi - 53c: 56 push %esi - 53d: e8 e1 fd ff ff call 323 - while (*s != 0) { - 542: 0f b6 03 movzbl (%ebx),%eax - 545: 83 c4 10 add $0x10,%esp - 548: 84 c0 test %al,%al - 54a: 75 e4 jne 530 - state = 0; - 54c: 8b 5d d4 mov -0x2c(%ebp),%ebx - 54f: 31 c9 xor %ecx,%ecx - 551: e9 1c ff ff ff jmp 472 - 556: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 55d: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 10, 1); - 560: 83 ec 0c sub $0xc,%esp - 563: b9 0a 00 00 00 mov $0xa,%ecx - 568: 6a 01 push $0x1 - 56a: e9 7b ff ff ff jmp 4ea - 56f: 90 nop - putc(fd, *ap); - 570: 8b 45 d0 mov -0x30(%ebp),%eax - write(fd, &c, 1); - 573: 83 ec 04 sub $0x4,%esp - putc(fd, *ap); - 576: 8b 00 mov (%eax),%eax - write(fd, &c, 1); - 578: 6a 01 push $0x1 - 57a: 57 push %edi - 57b: 56 push %esi - putc(fd, *ap); - 57c: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 57f: e8 9f fd ff ff call 323 - ap++; - 584: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 588: 83 c4 10 add $0x10,%esp - state = 0; - 58b: 31 c9 xor %ecx,%ecx - 58d: e9 e0 fe ff ff jmp 472 - 592: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - putc(fd, c); - 598: 88 55 e7 mov %dl,-0x19(%ebp) - write(fd, &c, 1); - 59b: 83 ec 04 sub $0x4,%esp - 59e: e9 2a ff ff ff jmp 4cd - 5a3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 5a7: 90 nop - s = "(null)"; - 5a8: ba 6f 07 00 00 mov $0x76f,%edx - while (*s != 0) { - 5ad: 89 5d d4 mov %ebx,-0x2c(%ebp) - 5b0: b8 28 00 00 00 mov $0x28,%eax - 5b5: 89 d3 mov %edx,%ebx - 5b7: e9 74 ff ff ff jmp 530 - 5bc: 66 90 xchg %ax,%ax - 5be: 66 90 xchg %ax,%ax - -000005c0 : -typedef union header Header; - -static Header base; -static Header *freep; - -void free(void *ap) { - 5c0: 55 push %ebp - Header *bp, *p; - - bp = (Header*)ap - 1; - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 5c1: a1 7c 0a 00 00 mov 0xa7c,%eax -void free(void *ap) { - 5c6: 89 e5 mov %esp,%ebp - 5c8: 57 push %edi - 5c9: 56 push %esi - 5ca: 53 push %ebx - 5cb: 8b 5d 08 mov 0x8(%ebp),%ebx - bp = (Header*)ap - 1; - 5ce: 8d 4b f8 lea -0x8(%ebx),%ecx - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 5d1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 5d8: 89 c2 mov %eax,%edx - 5da: 8b 00 mov (%eax),%eax - 5dc: 39 ca cmp %ecx,%edx - 5de: 73 30 jae 610 - 5e0: 39 c1 cmp %eax,%ecx - 5e2: 72 04 jb 5e8 - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 5e4: 39 c2 cmp %eax,%edx - 5e6: 72 f0 jb 5d8 - break; - } - } - if (bp + bp->s.size == p->s.ptr) { - 5e8: 8b 73 fc mov -0x4(%ebx),%esi - 5eb: 8d 3c f1 lea (%ecx,%esi,8),%edi - 5ee: 39 f8 cmp %edi,%eax - 5f0: 74 30 je 622 - bp->s.size += p->s.ptr->s.size; - bp->s.ptr = p->s.ptr->s.ptr; - 5f2: 89 43 f8 mov %eax,-0x8(%ebx) - } - else { - bp->s.ptr = p->s.ptr; - } - if (p + p->s.size == bp) { - 5f5: 8b 42 04 mov 0x4(%edx),%eax - 5f8: 8d 34 c2 lea (%edx,%eax,8),%esi - 5fb: 39 f1 cmp %esi,%ecx - 5fd: 74 3a je 639 - p->s.size += bp->s.size; - p->s.ptr = bp->s.ptr; - 5ff: 89 0a mov %ecx,(%edx) - } - else { - p->s.ptr = bp; - } - freep = p; -} - 601: 5b pop %ebx - freep = p; - 602: 89 15 7c 0a 00 00 mov %edx,0xa7c -} - 608: 5e pop %esi - 609: 5f pop %edi - 60a: 5d pop %ebp - 60b: c3 ret - 60c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 610: 39 c2 cmp %eax,%edx - 612: 72 c4 jb 5d8 - 614: 39 c1 cmp %eax,%ecx - 616: 73 c0 jae 5d8 - if (bp + bp->s.size == p->s.ptr) { - 618: 8b 73 fc mov -0x4(%ebx),%esi - 61b: 8d 3c f1 lea (%ecx,%esi,8),%edi - 61e: 39 f8 cmp %edi,%eax - 620: 75 d0 jne 5f2 - bp->s.size += p->s.ptr->s.size; - 622: 03 70 04 add 0x4(%eax),%esi - 625: 89 73 fc mov %esi,-0x4(%ebx) - bp->s.ptr = p->s.ptr->s.ptr; - 628: 8b 02 mov (%edx),%eax - 62a: 8b 00 mov (%eax),%eax - 62c: 89 43 f8 mov %eax,-0x8(%ebx) - if (p + p->s.size == bp) { - 62f: 8b 42 04 mov 0x4(%edx),%eax - 632: 8d 34 c2 lea (%edx,%eax,8),%esi - 635: 39 f1 cmp %esi,%ecx - 637: 75 c6 jne 5ff - p->s.size += bp->s.size; - 639: 03 43 fc add -0x4(%ebx),%eax - freep = p; - 63c: 89 15 7c 0a 00 00 mov %edx,0xa7c - p->s.size += bp->s.size; - 642: 89 42 04 mov %eax,0x4(%edx) - p->s.ptr = bp->s.ptr; - 645: 8b 4b f8 mov -0x8(%ebx),%ecx - 648: 89 0a mov %ecx,(%edx) -} - 64a: 5b pop %ebx - 64b: 5e pop %esi - 64c: 5f pop %edi - 64d: 5d pop %ebp - 64e: c3 ret - 64f: 90 nop - -00000650 : - hp->s.size = nu; - free((void*)(hp + 1)); - return freep; -} - -void* malloc(uint nbytes) { - 650: 55 push %ebp - 651: 89 e5 mov %esp,%ebp - 653: 57 push %edi - 654: 56 push %esi - 655: 53 push %ebx - 656: 83 ec 1c sub $0x1c,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 659: 8b 45 08 mov 0x8(%ebp),%eax - if ((prevp = freep) == 0) { - 65c: 8b 3d 7c 0a 00 00 mov 0xa7c,%edi - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 662: 8d 70 07 lea 0x7(%eax),%esi - 665: c1 ee 03 shr $0x3,%esi - 668: 83 c6 01 add $0x1,%esi - if ((prevp = freep) == 0) { - 66b: 85 ff test %edi,%edi - 66d: 0f 84 9d 00 00 00 je 710 - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 673: 8b 17 mov (%edi),%edx - if (p->s.size >= nunits) { - 675: 8b 4a 04 mov 0x4(%edx),%ecx - 678: 39 f1 cmp %esi,%ecx - 67a: 73 6a jae 6e6 - 67c: bb 00 10 00 00 mov $0x1000,%ebx - 681: 39 de cmp %ebx,%esi - 683: 0f 43 de cmovae %esi,%ebx - p = sbrk(nu * sizeof(Header)); - 686: 8d 04 dd 00 00 00 00 lea 0x0(,%ebx,8),%eax - 68d: 89 45 e4 mov %eax,-0x1c(%ebp) - 690: eb 17 jmp 6a9 - 692: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 698: 8b 02 mov (%edx),%eax - if (p->s.size >= nunits) { - 69a: 8b 48 04 mov 0x4(%eax),%ecx - 69d: 39 f1 cmp %esi,%ecx - 69f: 73 4f jae 6f0 - p->s.size = nunits; - } - freep = prevp; - return (void*)(p + 1); - } - if (p == freep) { - 6a1: 8b 3d 7c 0a 00 00 mov 0xa7c,%edi - 6a7: 89 c2 mov %eax,%edx - 6a9: 39 d7 cmp %edx,%edi - 6ab: 75 eb jne 698 - p = sbrk(nu * sizeof(Header)); - 6ad: 83 ec 0c sub $0xc,%esp - 6b0: ff 75 e4 push -0x1c(%ebp) - 6b3: e8 4b fc ff ff call 303 - if (p == (char*)-1) { - 6b8: 83 c4 10 add $0x10,%esp - 6bb: 83 f8 ff cmp $0xffffffff,%eax - 6be: 74 1c je 6dc - hp->s.size = nu; - 6c0: 89 58 04 mov %ebx,0x4(%eax) - free((void*)(hp + 1)); - 6c3: 83 ec 0c sub $0xc,%esp - 6c6: 83 c0 08 add $0x8,%eax - 6c9: 50 push %eax - 6ca: e8 f1 fe ff ff call 5c0 - return freep; - 6cf: 8b 15 7c 0a 00 00 mov 0xa7c,%edx - if ((p = morecore(nunits)) == 0) { - 6d5: 83 c4 10 add $0x10,%esp - 6d8: 85 d2 test %edx,%edx - 6da: 75 bc jne 698 - return 0; - } - } - } -} - 6dc: 8d 65 f4 lea -0xc(%ebp),%esp - return 0; - 6df: 31 c0 xor %eax,%eax -} - 6e1: 5b pop %ebx - 6e2: 5e pop %esi - 6e3: 5f pop %edi - 6e4: 5d pop %ebp - 6e5: c3 ret - if (p->s.size >= nunits) { - 6e6: 89 d0 mov %edx,%eax - 6e8: 89 fa mov %edi,%edx - 6ea: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - if (p->s.size == nunits) { - 6f0: 39 ce cmp %ecx,%esi - 6f2: 74 4c je 740 - p->s.size -= nunits; - 6f4: 29 f1 sub %esi,%ecx - 6f6: 89 48 04 mov %ecx,0x4(%eax) - p += p->s.size; - 6f9: 8d 04 c8 lea (%eax,%ecx,8),%eax - p->s.size = nunits; - 6fc: 89 70 04 mov %esi,0x4(%eax) - freep = prevp; - 6ff: 89 15 7c 0a 00 00 mov %edx,0xa7c -} - 705: 8d 65 f4 lea -0xc(%ebp),%esp - return (void*)(p + 1); - 708: 83 c0 08 add $0x8,%eax -} - 70b: 5b pop %ebx - 70c: 5e pop %esi - 70d: 5f pop %edi - 70e: 5d pop %ebp - 70f: c3 ret - base.s.ptr = freep = prevp = &base; - 710: c7 05 7c 0a 00 00 80 movl $0xa80,0xa7c - 717: 0a 00 00 - base.s.size = 0; - 71a: bf 80 0a 00 00 mov $0xa80,%edi - base.s.ptr = freep = prevp = &base; - 71f: c7 05 80 0a 00 00 80 movl $0xa80,0xa80 - 726: 0a 00 00 - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 729: 89 fa mov %edi,%edx - base.s.size = 0; - 72b: c7 05 84 0a 00 00 00 movl $0x0,0xa84 - 732: 00 00 00 - if (p->s.size >= nunits) { - 735: e9 42 ff ff ff jmp 67c - 73a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - prevp->s.ptr = p->s.ptr; - 740: 8b 08 mov (%eax),%ecx - 742: 89 0a mov %ecx,(%edx) - 744: eb b9 jmp 6ff diff --git a/ln.d b/ln.d deleted file mode 100644 index 6728be9..0000000 --- a/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/ln.o b/ln.o deleted file mode 100644 index ac99f39f6a353c906f552ca4d249b12d2a5616d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3308 zcma)8U1%It6h8B}*<|y-(lm{dX-t1{H`%nLZTe$vv^BMAn-bB0q_ew|-Lbo~>C9}K zmfE6GRMdz1ASi+$>VwZkL3~j3p}q+EV9_TZD)<9ZMMP;Ke&_DJn~5UzuyfCM&iT%{ zckbMuy?Eb|gPNw15{(R6v4}1w8C;QawqJHZ`UeC+jq~jQN{C5+8aXr zChU2~tGLCsM&8RuhRvmG*OyP-T-s&Kyzu?;V=q2tM(OG4GRL3Lf4I54yeyidN0-Co za%c);>9g)^De+bLk z0F^K;&yT336_xZ}>i}FuJVvu2bAj1fq7#gy2i)3$Mo$QC+gi>WPQ1oBoGcPk)NaDB zS%L#E&EnDCU}r~KL^_$QU!u-IVXouQ8n}4eIuGnA23yh88SFqa#b8o-W&oH&CJ)`@ zfsr;$snoud(Fx-H^rUtX^JQ2x1!Zd`iIrc=h?z~D?@kJjCXNsxK?&MjH( z?tY_lBDFiUE48VAD!r#)LsD|1sM4CH)zRm){yqIfZL6~yIjOZ6Qv2%2RJup&P3&KL zPE_r%NOd)p)>q100u|ncq|g%7)VKifk~!*$u!Mj{S=z5jJJ+69-jrK+dPITmgsGb zWu>j5M9*O>S+a(9KWZiSTCItZtClqjty#${mX$bTwLYTvp=8|;y^`-1ZC;1&q8CwE zt_6|3%HMD?Byb=w%4sP4OaORnz*UIC^P6v}(O@txy#rc^5C z?aad<&HJ@XzV1~b&u zgM{e>r2;Jk=zX4mPgBLu7HFjE7CmPqoS!>>Har^CN+V7fx?xy#{b=kKQBgoN_0SEn zICu_CPEOdHXYzGFs>{jDZ`DwD_j-BZ_6s z_XBPY%p-QmdT1So-A2|pP`9zhQ16!ZVQA(ZV;elaf;3D8pS>DhS)Al}RX#H{Xi*na zGsHH?TO@B(YCb?YZ=cknKJ1FLPfPu@)UQkZ4r>EWsIR2H${M`yr2bLr z-=w}FHP03Ec#iqr;`w4*yce_>Ki=mq_Cx2S=0lL}{j9;Wp>=4=hG(nTY|v5A&}D@p zcQK-D(TN<&=EIP(L5&S&=CV1MZY9ecIGiA=FEl(wH(xK!dH#G2xdJ=+eBhprM=P~L z#S0@Yi5ij>IDW}pr`0y~yj4F;6MWfAKaU#%u9bJn{X&8^goG^*C1v_r(vdch+ir zCxCh1DG~b##%?@VuHyT1tb&A{(0s@83BeZ}kBj#U*HiK#Kv&G6;DhkT>%EP7SK#A% z*hbBIj{~b5K>8fU*9@enSPizq9C}kHnvfh;Ds~b$-fsn+@wmBPEbnH&OTa1zkiJ1Z zn}HM+y9hg8FG4+@Gp>hYqgn4&V3h+%f1w`!*EB`NUV$fG@0r;6_#{>H{2s8%;Ueu= z5CH=zD)uhyc)gcUZ!>&6J|3s4_dYP^jN)OrfO^BK2yBM@d?K~ty@dkP@F`KeFX3RU zc)x?kYf_2geG3O;CHCs;rWyMM1m&C;i)LsLmqgbcv&ShJTy$3kX`w0F1$pk5i_cx*UoO%EN diff --git a/ln.sym b/ln.sym deleted file mode 100644 index 0c48f49..0000000 --- a/ln.sym +++ /dev/null @@ -1,48 +0,0 @@ -00000000 ln.c -00000000 ulib.c -00000000 printf.c -00000370 printint -000007d0 digits.0 -00000000 umalloc.c -00000a7c freep -00000a80 base -00000060 strcpy -00000420 printf -0000035b greeting -00000280 memmove -0000032b mknod -00000180 gets -000002fb getpid -00000650 malloc -0000030b sleep -000002c3 pipe -00000353 getch -00000323 write -000002e3 fstat -000002d3 kill -000002eb chdir -000002db exec -000002bb wait -000002cb read -00000333 unlink -000002ab fork -00000303 sbrk -00000313 uptime -00000a7c __bss_start -00000120 memset -00000000 main -00000090 strcmp -00000363 shutdown -000002f3 dup -000001f0 stat -00000a7c _edata -00000a88 _end -0000033b link -000002b3 exit -00000240 atoi -000000f0 strlen -0000031b open -00000140 strchr -00000343 mkdir -0000034b close -000005c0 free diff --git a/log.d b/log.d deleted file mode 100644 index 04c8930..0000000 --- a/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 \ - sleeplock.h fs.h buf.h diff --git a/log.o b/log.o deleted file mode 100644 index bb7150759cc39b686e7a00921718223e009caa42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10232 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 HFx2}$rEp1s diff --git a/ls.asm b/ls.asm deleted file mode 100644 index e8c2a47..0000000 --- a/ls.asm +++ /dev/null @@ -1,1454 +0,0 @@ - -_ls: file format elf32-i386 - - -Disassembly of section .text: - -00000000
    : - close(fd); -} - -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 push -0x4(%ecx) - a: 55 push %ebp - b: 89 e5 mov %esp,%ebp - d: 57 push %edi - e: 56 push %esi - f: 53 push %ebx - 10: bb 01 00 00 00 mov $0x1,%ebx - 15: 51 push %ecx - 16: 83 ec 08 sub $0x8,%esp - 19: 8b 31 mov (%ecx),%esi - 1b: 8b 79 04 mov 0x4(%ecx),%edi - int i; - - if(argc < 2){ - 1e: 83 fe 01 cmp $0x1,%esi - 21: 7e 1f jle 42 - 23: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 27: 90 nop - ls("."); - exit(); - } - for(i=1; i - for(i=1; i - exit(); - 3d: e8 51 05 00 00 call 593 - ls("."); - 42: 83 ec 0c sub $0xc,%esp - 45: 68 70 0a 00 00 push $0xa70 - 4a: e8 b1 00 00 00 call 100 - exit(); - 4f: e8 3f 05 00 00 call 593 - 54: 66 90 xchg %ax,%ax - 56: 66 90 xchg %ax,%ax - 58: 66 90 xchg %ax,%ax - 5a: 66 90 xchg %ax,%ax - 5c: 66 90 xchg %ax,%ax - 5e: 66 90 xchg %ax,%ax - -00000060 : -{ - 60: 55 push %ebp - 61: 89 e5 mov %esp,%ebp - 63: 56 push %esi - 64: 53 push %ebx - 65: 8b 75 08 mov 0x8(%ebp),%esi - for(p=path+strlen(path); p >= path && *p != '/'; p--) - 68: 83 ec 0c sub $0xc,%esp - 6b: 56 push %esi - 6c: e8 5f 03 00 00 call 3d0 - 71: 83 c4 10 add $0x10,%esp - 74: 01 f0 add %esi,%eax - 76: 89 c3 mov %eax,%ebx - 78: 73 0f jae 89 - 7a: eb 12 jmp 8e - 7c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 80: 8d 43 ff lea -0x1(%ebx),%eax - 83: 39 c6 cmp %eax,%esi - 85: 77 0a ja 91 - 87: 89 c3 mov %eax,%ebx - 89: 80 3b 2f cmpb $0x2f,(%ebx) - 8c: 75 f2 jne 80 - p++; - 8e: 83 c3 01 add $0x1,%ebx - if(strlen(p) >= DIRSIZ) - 91: 83 ec 0c sub $0xc,%esp - 94: 53 push %ebx - 95: e8 36 03 00 00 call 3d0 - 9a: 83 c4 10 add $0x10,%esp - 9d: 83 f8 0d cmp $0xd,%eax - a0: 77 4a ja ec - memmove(buf, p, strlen(p)); - a2: 83 ec 0c sub $0xc,%esp - a5: 53 push %ebx - a6: e8 25 03 00 00 call 3d0 - ab: 83 c4 0c add $0xc,%esp - ae: 50 push %eax - af: 53 push %ebx - b0: 68 04 0e 00 00 push $0xe04 - b5: e8 a6 04 00 00 call 560 - memset(buf+strlen(p), ' ', DIRSIZ-strlen(p)); - ba: 89 1c 24 mov %ebx,(%esp) - bd: e8 0e 03 00 00 call 3d0 - c2: 89 1c 24 mov %ebx,(%esp) - return buf; - c5: bb 04 0e 00 00 mov $0xe04,%ebx - memset(buf+strlen(p), ' ', DIRSIZ-strlen(p)); - ca: 89 c6 mov %eax,%esi - cc: e8 ff 02 00 00 call 3d0 - d1: ba 0e 00 00 00 mov $0xe,%edx - d6: 83 c4 0c add $0xc,%esp - d9: 29 f2 sub %esi,%edx - db: 05 04 0e 00 00 add $0xe04,%eax - e0: 52 push %edx - e1: 6a 20 push $0x20 - e3: 50 push %eax - e4: e8 17 03 00 00 call 400 - return buf; - e9: 83 c4 10 add $0x10,%esp -} - ec: 8d 65 f8 lea -0x8(%ebp),%esp - ef: 89 d8 mov %ebx,%eax - f1: 5b pop %ebx - f2: 5e pop %esi - f3: 5d pop %ebp - f4: c3 ret - f5: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - fc: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000100 : -{ - 100: 55 push %ebp - 101: 89 e5 mov %esp,%ebp - 103: 57 push %edi - 104: 56 push %esi - 105: 53 push %ebx - 106: 81 ec 64 02 00 00 sub $0x264,%esp - 10c: 8b 7d 08 mov 0x8(%ebp),%edi - if((fd = open(path, 0)) < 0){ - 10f: 6a 00 push $0x0 - 111: 57 push %edi - 112: e8 e4 04 00 00 call 5fb - 117: 83 c4 10 add $0x10,%esp - 11a: 85 c0 test %eax,%eax - 11c: 0f 88 9e 01 00 00 js 2c0 - if(fstat(fd, &st) < 0){ - 122: 83 ec 08 sub $0x8,%esp - 125: 8d b5 d4 fd ff ff lea -0x22c(%ebp),%esi - 12b: 89 c3 mov %eax,%ebx - 12d: 56 push %esi - 12e: 50 push %eax - 12f: e8 8f 04 00 00 call 5c3 - 134: 83 c4 10 add $0x10,%esp - 137: 85 c0 test %eax,%eax - 139: 0f 88 c1 01 00 00 js 300 - switch(st.type){ - 13f: 0f b7 85 d4 fd ff ff movzwl -0x22c(%ebp),%eax - 146: 66 83 f8 01 cmp $0x1,%ax - 14a: 74 64 je 1b0 - 14c: 66 83 f8 02 cmp $0x2,%ax - 150: 74 1e je 170 - close(fd); - 152: 83 ec 0c sub $0xc,%esp - 155: 53 push %ebx - 156: e8 d0 04 00 00 call 62b - 15b: 83 c4 10 add $0x10,%esp -} - 15e: 8d 65 f4 lea -0xc(%ebp),%esp - 161: 5b pop %ebx - 162: 5e pop %esi - 163: 5f pop %edi - 164: 5d pop %ebp - 165: c3 ret - 166: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 16d: 8d 76 00 lea 0x0(%esi),%esi - printf(1, "%s %d %d %d\n", fmtname(path), st.type, st.ino, st.size); - 170: 83 ec 0c sub $0xc,%esp - 173: 8b 95 e4 fd ff ff mov -0x21c(%ebp),%edx - 179: 8b b5 dc fd ff ff mov -0x224(%ebp),%esi - 17f: 57 push %edi - 180: 89 95 b4 fd ff ff mov %edx,-0x24c(%ebp) - 186: e8 d5 fe ff ff call 60 - 18b: 8b 95 b4 fd ff ff mov -0x24c(%ebp),%edx - 191: 59 pop %ecx - 192: 5f pop %edi - 193: 52 push %edx - 194: 56 push %esi - 195: 6a 02 push $0x2 - 197: 50 push %eax - 198: 68 50 0a 00 00 push $0xa50 - 19d: 6a 01 push $0x1 - 19f: e8 5c 05 00 00 call 700 - break; - 1a4: 83 c4 20 add $0x20,%esp - 1a7: eb a9 jmp 152 - 1a9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - if(strlen(path) + 1 + DIRSIZ + 1 > sizeof buf){ - 1b0: 83 ec 0c sub $0xc,%esp - 1b3: 57 push %edi - 1b4: e8 17 02 00 00 call 3d0 - 1b9: 83 c4 10 add $0x10,%esp - 1bc: 83 c0 10 add $0x10,%eax - 1bf: 3d 00 02 00 00 cmp $0x200,%eax - 1c4: 0f 87 16 01 00 00 ja 2e0 - strcpy(buf, path); - 1ca: 83 ec 08 sub $0x8,%esp - 1cd: 57 push %edi - 1ce: 8d bd e8 fd ff ff lea -0x218(%ebp),%edi - 1d4: 57 push %edi - 1d5: e8 66 01 00 00 call 340 - p = buf+strlen(buf); - 1da: 89 3c 24 mov %edi,(%esp) - 1dd: e8 ee 01 00 00 call 3d0 - while(read(fd, &de, sizeof(de)) == sizeof(de)){ - 1e2: 83 c4 10 add $0x10,%esp - p = buf+strlen(buf); - 1e5: 01 f8 add %edi,%eax - *p++ = '/'; - 1e7: 8d 48 01 lea 0x1(%eax),%ecx - p = buf+strlen(buf); - 1ea: 89 85 a8 fd ff ff mov %eax,-0x258(%ebp) - *p++ = '/'; - 1f0: 89 8d a4 fd ff ff mov %ecx,-0x25c(%ebp) - 1f6: c6 00 2f movb $0x2f,(%eax) - while(read(fd, &de, sizeof(de)) == sizeof(de)){ - 1f9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 200: 83 ec 04 sub $0x4,%esp - 203: 8d 85 c4 fd ff ff lea -0x23c(%ebp),%eax - 209: 6a 10 push $0x10 - 20b: 50 push %eax - 20c: 53 push %ebx - 20d: e8 99 03 00 00 call 5ab - 212: 83 c4 10 add $0x10,%esp - 215: 83 f8 10 cmp $0x10,%eax - 218: 0f 85 34 ff ff ff jne 152 - if(de.inum == 0) - 21e: 66 83 bd c4 fd ff ff cmpw $0x0,-0x23c(%ebp) - 225: 00 - 226: 74 d8 je 200 - memmove(p, de.name, DIRSIZ); - 228: 83 ec 04 sub $0x4,%esp - 22b: 8d 85 c6 fd ff ff lea -0x23a(%ebp),%eax - 231: 6a 0e push $0xe - 233: 50 push %eax - 234: ff b5 a4 fd ff ff push -0x25c(%ebp) - 23a: e8 21 03 00 00 call 560 - p[DIRSIZ] = 0; - 23f: 8b 85 a8 fd ff ff mov -0x258(%ebp),%eax - 245: c6 40 0f 00 movb $0x0,0xf(%eax) - if(stat(buf, &st) < 0){ - 249: 58 pop %eax - 24a: 5a pop %edx - 24b: 56 push %esi - 24c: 57 push %edi - 24d: e8 7e 02 00 00 call 4d0 - 252: 83 c4 10 add $0x10,%esp - 255: 85 c0 test %eax,%eax - 257: 0f 88 cb 00 00 00 js 328 - printf(1, "%s %d %d %d\n", fmtname(buf), st.type, st.ino, st.size); - 25d: 83 ec 0c sub $0xc,%esp - 260: 8b 8d e4 fd ff ff mov -0x21c(%ebp),%ecx - 266: 8b 95 dc fd ff ff mov -0x224(%ebp),%edx - 26c: 57 push %edi - 26d: 0f bf 85 d4 fd ff ff movswl -0x22c(%ebp),%eax - 274: 89 8d ac fd ff ff mov %ecx,-0x254(%ebp) - 27a: 89 95 b0 fd ff ff mov %edx,-0x250(%ebp) - 280: 89 85 b4 fd ff ff mov %eax,-0x24c(%ebp) - 286: e8 d5 fd ff ff call 60 - 28b: 5a pop %edx - 28c: 8b 95 b0 fd ff ff mov -0x250(%ebp),%edx - 292: 59 pop %ecx - 293: 8b 8d ac fd ff ff mov -0x254(%ebp),%ecx - 299: 51 push %ecx - 29a: 52 push %edx - 29b: ff b5 b4 fd ff ff push -0x24c(%ebp) - 2a1: 50 push %eax - 2a2: 68 50 0a 00 00 push $0xa50 - 2a7: 6a 01 push $0x1 - 2a9: e8 52 04 00 00 call 700 - 2ae: 83 c4 20 add $0x20,%esp - 2b1: e9 4a ff ff ff jmp 200 - 2b6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 2bd: 8d 76 00 lea 0x0(%esi),%esi - printf(2, "ls: cannot open %s\n", path); - 2c0: 83 ec 04 sub $0x4,%esp - 2c3: 57 push %edi - 2c4: 68 28 0a 00 00 push $0xa28 - 2c9: 6a 02 push $0x2 - 2cb: e8 30 04 00 00 call 700 - return; - 2d0: 83 c4 10 add $0x10,%esp -} - 2d3: 8d 65 f4 lea -0xc(%ebp),%esp - 2d6: 5b pop %ebx - 2d7: 5e pop %esi - 2d8: 5f pop %edi - 2d9: 5d pop %ebp - 2da: c3 ret - 2db: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 2df: 90 nop - printf(1, "ls: path too long\n"); - 2e0: 83 ec 08 sub $0x8,%esp - 2e3: 68 5d 0a 00 00 push $0xa5d - 2e8: 6a 01 push $0x1 - 2ea: e8 11 04 00 00 call 700 - break; - 2ef: 83 c4 10 add $0x10,%esp - 2f2: e9 5b fe ff ff jmp 152 - 2f7: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 2fe: 66 90 xchg %ax,%ax - printf(2, "ls: cannot stat %s\n", path); - 300: 83 ec 04 sub $0x4,%esp - 303: 57 push %edi - 304: 68 3c 0a 00 00 push $0xa3c - 309: 6a 02 push $0x2 - 30b: e8 f0 03 00 00 call 700 - close(fd); - 310: 89 1c 24 mov %ebx,(%esp) - 313: e8 13 03 00 00 call 62b - return; - 318: 83 c4 10 add $0x10,%esp -} - 31b: 8d 65 f4 lea -0xc(%ebp),%esp - 31e: 5b pop %ebx - 31f: 5e pop %esi - 320: 5f pop %edi - 321: 5d pop %ebp - 322: c3 ret - 323: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 327: 90 nop - printf(1, "ls: cannot stat %s\n", buf); - 328: 83 ec 04 sub $0x4,%esp - 32b: 57 push %edi - 32c: 68 3c 0a 00 00 push $0xa3c - 331: 6a 01 push $0x1 - 333: e8 c8 03 00 00 call 700 - continue; - 338: 83 c4 10 add $0x10,%esp - 33b: e9 c0 fe ff ff jmp 200 - -00000340 : -#include "stat.h" -#include "fcntl.h" -#include "user.h" -#include "x86.h" - -char*strcpy(char *s, const char *t) { - 340: 55 push %ebp - char *os; - - os = s; - while ((*s++ = *t++) != 0) { - 341: 31 c0 xor %eax,%eax -char*strcpy(char *s, const char *t) { - 343: 89 e5 mov %esp,%ebp - 345: 53 push %ebx - 346: 8b 4d 08 mov 0x8(%ebp),%ecx - 349: 8b 5d 0c mov 0xc(%ebp),%ebx - 34c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - while ((*s++ = *t++) != 0) { - 350: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 354: 88 14 01 mov %dl,(%ecx,%eax,1) - 357: 83 c0 01 add $0x1,%eax - 35a: 84 d2 test %dl,%dl - 35c: 75 f2 jne 350 - ; - } - return os; -} - 35e: 8b 5d fc mov -0x4(%ebp),%ebx - 361: 89 c8 mov %ecx,%eax - 363: c9 leave - 364: c3 ret - 365: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 36c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000370 : - -int strcmp(const char *p, const char *q) { - 370: 55 push %ebp - 371: 89 e5 mov %esp,%ebp - 373: 53 push %ebx - 374: 8b 55 08 mov 0x8(%ebp),%edx - 377: 8b 4d 0c mov 0xc(%ebp),%ecx - while (*p && *p == *q) { - 37a: 0f b6 02 movzbl (%edx),%eax - 37d: 84 c0 test %al,%al - 37f: 75 17 jne 398 - 381: eb 3a jmp 3bd - 383: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 387: 90 nop - 388: 0f b6 42 01 movzbl 0x1(%edx),%eax - p++, q++; - 38c: 83 c2 01 add $0x1,%edx - 38f: 8d 59 01 lea 0x1(%ecx),%ebx - while (*p && *p == *q) { - 392: 84 c0 test %al,%al - 394: 74 1a je 3b0 - p++, q++; - 396: 89 d9 mov %ebx,%ecx - while (*p && *p == *q) { - 398: 0f b6 19 movzbl (%ecx),%ebx - 39b: 38 c3 cmp %al,%bl - 39d: 74 e9 je 388 - } - return (uchar) * p - (uchar) * q; - 39f: 29 d8 sub %ebx,%eax -} - 3a1: 8b 5d fc mov -0x4(%ebp),%ebx - 3a4: c9 leave - 3a5: c3 ret - 3a6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 3ad: 8d 76 00 lea 0x0(%esi),%esi - return (uchar) * p - (uchar) * q; - 3b0: 0f b6 59 01 movzbl 0x1(%ecx),%ebx - 3b4: 31 c0 xor %eax,%eax - 3b6: 29 d8 sub %ebx,%eax -} - 3b8: 8b 5d fc mov -0x4(%ebp),%ebx - 3bb: c9 leave - 3bc: c3 ret - return (uchar) * p - (uchar) * q; - 3bd: 0f b6 19 movzbl (%ecx),%ebx - 3c0: 31 c0 xor %eax,%eax - 3c2: eb db jmp 39f - 3c4: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 3cb: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 3cf: 90 nop - -000003d0 : - -uint strlen(const char *s) { - 3d0: 55 push %ebp - 3d1: 89 e5 mov %esp,%ebp - 3d3: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - for (n = 0; s[n]; n++) { - 3d6: 80 3a 00 cmpb $0x0,(%edx) - 3d9: 74 15 je 3f0 - 3db: 31 c0 xor %eax,%eax - 3dd: 8d 76 00 lea 0x0(%esi),%esi - 3e0: 83 c0 01 add $0x1,%eax - 3e3: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - 3e7: 89 c1 mov %eax,%ecx - 3e9: 75 f5 jne 3e0 - ; - } - return n; -} - 3eb: 89 c8 mov %ecx,%eax - 3ed: 5d pop %ebp - 3ee: c3 ret - 3ef: 90 nop - for (n = 0; s[n]; n++) { - 3f0: 31 c9 xor %ecx,%ecx -} - 3f2: 5d pop %ebp - 3f3: 89 c8 mov %ecx,%eax - 3f5: c3 ret - 3f6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 3fd: 8d 76 00 lea 0x0(%esi),%esi - -00000400 : - -void* memset(void *dst, int c, uint n) { - 400: 55 push %ebp - 401: 89 e5 mov %esp,%ebp - 403: 57 push %edi - 404: 8b 55 08 mov 0x8(%ebp),%edx - "d" (port), "0" (addr), "1" (cnt) : - "cc"); -} - -static inline void stosb(void *addr, int data, int cnt) { - asm volatile ("cld; rep stosb" : - 407: 8b 4d 10 mov 0x10(%ebp),%ecx - 40a: 8b 45 0c mov 0xc(%ebp),%eax - 40d: 89 d7 mov %edx,%edi - 40f: fc cld - 410: f3 aa rep stos %al,%es:(%edi) - stosb(dst, c, n); - return dst; -} - 412: 8b 7d fc mov -0x4(%ebp),%edi - 415: 89 d0 mov %edx,%eax - 417: c9 leave - 418: c3 ret - 419: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -00000420 : - -char* strchr(const char *s, char c) { - 420: 55 push %ebp - 421: 89 e5 mov %esp,%ebp - 423: 8b 45 08 mov 0x8(%ebp),%eax - 426: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx - for (; *s; s++) { - 42a: 0f b6 10 movzbl (%eax),%edx - 42d: 84 d2 test %dl,%dl - 42f: 75 12 jne 443 - 431: eb 1d jmp 450 - 433: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 437: 90 nop - 438: 0f b6 50 01 movzbl 0x1(%eax),%edx - 43c: 83 c0 01 add $0x1,%eax - 43f: 84 d2 test %dl,%dl - 441: 74 0d je 450 - if (*s == c) { - 443: 38 d1 cmp %dl,%cl - 445: 75 f1 jne 438 - return (char*)s; - } - } - return 0; -} - 447: 5d pop %ebp - 448: c3 ret - 449: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - return 0; - 450: 31 c0 xor %eax,%eax -} - 452: 5d pop %ebp - 453: c3 ret - 454: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 45b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 45f: 90 nop - -00000460 : - -char* gets(char *buf, int max) { - 460: 55 push %ebp - 461: 89 e5 mov %esp,%ebp - 463: 57 push %edi - 464: 56 push %esi - int i, cc; - char c; - - for (i = 0; i + 1 < max;) { - cc = read(0, &c, 1); - 465: 8d 7d e7 lea -0x19(%ebp),%edi -char* gets(char *buf, int max) { - 468: 53 push %ebx - for (i = 0; i + 1 < max;) { - 469: 31 db xor %ebx,%ebx -char* gets(char *buf, int max) { - 46b: 83 ec 1c sub $0x1c,%esp - for (i = 0; i + 1 < max;) { - 46e: eb 27 jmp 497 - cc = read(0, &c, 1); - 470: 83 ec 04 sub $0x4,%esp - 473: 6a 01 push $0x1 - 475: 57 push %edi - 476: 6a 00 push $0x0 - 478: e8 2e 01 00 00 call 5ab - if (cc < 1) { - 47d: 83 c4 10 add $0x10,%esp - 480: 85 c0 test %eax,%eax - 482: 7e 1d jle 4a1 - break; - } - buf[i++] = c; - 484: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 488: 8b 55 08 mov 0x8(%ebp),%edx - 48b: 88 44 1a ff mov %al,-0x1(%edx,%ebx,1) - if (c == '\n' || c == '\r') { - 48f: 3c 0a cmp $0xa,%al - 491: 74 1d je 4b0 - 493: 3c 0d cmp $0xd,%al - 495: 74 19 je 4b0 - for (i = 0; i + 1 < max;) { - 497: 89 de mov %ebx,%esi - 499: 83 c3 01 add $0x1,%ebx - 49c: 3b 5d 0c cmp 0xc(%ebp),%ebx - 49f: 7c cf jl 470 - break; - } - } - buf[i] = '\0'; - 4a1: 8b 45 08 mov 0x8(%ebp),%eax - 4a4: c6 04 30 00 movb $0x0,(%eax,%esi,1) - return buf; -} - 4a8: 8d 65 f4 lea -0xc(%ebp),%esp - 4ab: 5b pop %ebx - 4ac: 5e pop %esi - 4ad: 5f pop %edi - 4ae: 5d pop %ebp - 4af: c3 ret - buf[i] = '\0'; - 4b0: 8b 45 08 mov 0x8(%ebp),%eax - 4b3: 89 de mov %ebx,%esi - 4b5: c6 04 30 00 movb $0x0,(%eax,%esi,1) -} - 4b9: 8d 65 f4 lea -0xc(%ebp),%esp - 4bc: 5b pop %ebx - 4bd: 5e pop %esi - 4be: 5f pop %edi - 4bf: 5d pop %ebp - 4c0: c3 ret - 4c1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 4c8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 4cf: 90 nop - -000004d0 : - -int stat(const char *n, struct stat *st) { - 4d0: 55 push %ebp - 4d1: 89 e5 mov %esp,%ebp - 4d3: 56 push %esi - 4d4: 53 push %ebx - int fd; - int r; - - fd = open(n, O_RDONLY); - 4d5: 83 ec 08 sub $0x8,%esp - 4d8: 6a 00 push $0x0 - 4da: ff 75 08 push 0x8(%ebp) - 4dd: e8 19 01 00 00 call 5fb - if (fd < 0) { - 4e2: 83 c4 10 add $0x10,%esp - 4e5: 85 c0 test %eax,%eax - 4e7: 78 27 js 510 - return -1; - } - r = fstat(fd, st); - 4e9: 83 ec 08 sub $0x8,%esp - 4ec: ff 75 0c push 0xc(%ebp) - 4ef: 89 c3 mov %eax,%ebx - 4f1: 50 push %eax - 4f2: e8 cc 00 00 00 call 5c3 - close(fd); - 4f7: 89 1c 24 mov %ebx,(%esp) - r = fstat(fd, st); - 4fa: 89 c6 mov %eax,%esi - close(fd); - 4fc: e8 2a 01 00 00 call 62b - return r; - 501: 83 c4 10 add $0x10,%esp -} - 504: 8d 65 f8 lea -0x8(%ebp),%esp - 507: 89 f0 mov %esi,%eax - 509: 5b pop %ebx - 50a: 5e pop %esi - 50b: 5d pop %ebp - 50c: c3 ret - 50d: 8d 76 00 lea 0x0(%esi),%esi - return -1; - 510: be ff ff ff ff mov $0xffffffff,%esi - 515: eb ed jmp 504 - 517: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 51e: 66 90 xchg %ax,%ax - -00000520 : - -int atoi(const char *s) { - 520: 55 push %ebp - 521: 89 e5 mov %esp,%ebp - 523: 53 push %ebx - 524: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - n = 0; - while ('0' <= *s && *s <= '9') { - 527: 0f be 02 movsbl (%edx),%eax - 52a: 8d 48 d0 lea -0x30(%eax),%ecx - 52d: 80 f9 09 cmp $0x9,%cl - n = 0; - 530: b9 00 00 00 00 mov $0x0,%ecx - while ('0' <= *s && *s <= '9') { - 535: 77 1e ja 555 - 537: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 53e: 66 90 xchg %ax,%ax - n = n * 10 + *s++ - '0'; - 540: 83 c2 01 add $0x1,%edx - 543: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 546: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx - while ('0' <= *s && *s <= '9') { - 54a: 0f be 02 movsbl (%edx),%eax - 54d: 8d 58 d0 lea -0x30(%eax),%ebx - 550: 80 fb 09 cmp $0x9,%bl - 553: 76 eb jbe 540 - } - return n; -} - 555: 8b 5d fc mov -0x4(%ebp),%ebx - 558: 89 c8 mov %ecx,%eax - 55a: c9 leave - 55b: c3 ret - 55c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000560 : - -void* memmove(void *vdst, const void *vsrc, int n) { - 560: 55 push %ebp - 561: 89 e5 mov %esp,%ebp - 563: 57 push %edi - 564: 8b 45 10 mov 0x10(%ebp),%eax - 567: 8b 55 08 mov 0x8(%ebp),%edx - 56a: 56 push %esi - 56b: 8b 75 0c mov 0xc(%ebp),%esi - char *dst; - const char *src; - - dst = vdst; - src = vsrc; - while (n-- > 0) { - 56e: 85 c0 test %eax,%eax - 570: 7e 13 jle 585 - 572: 01 d0 add %edx,%eax - dst = vdst; - 574: 89 d7 mov %edx,%edi - 576: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 57d: 8d 76 00 lea 0x0(%esi),%esi - *dst++ = *src++; - 580: a4 movsb %ds:(%esi),%es:(%edi) - while (n-- > 0) { - 581: 39 f8 cmp %edi,%eax - 583: 75 fb jne 580 - } - return vdst; -} - 585: 5e pop %esi - 586: 89 d0 mov %edx,%eax - 588: 5f pop %edi - 589: 5d pop %ebp - 58a: c3 ret - -0000058b : -name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 58b: b8 01 00 00 00 mov $0x1,%eax - 590: cd 40 int $0x40 - 592: c3 ret - -00000593 : -SYSCALL(exit) - 593: b8 02 00 00 00 mov $0x2,%eax - 598: cd 40 int $0x40 - 59a: c3 ret - -0000059b : -SYSCALL(wait) - 59b: b8 03 00 00 00 mov $0x3,%eax - 5a0: cd 40 int $0x40 - 5a2: c3 ret - -000005a3 : -SYSCALL(pipe) - 5a3: b8 04 00 00 00 mov $0x4,%eax - 5a8: cd 40 int $0x40 - 5aa: c3 ret - -000005ab : -SYSCALL(read) - 5ab: b8 05 00 00 00 mov $0x5,%eax - 5b0: cd 40 int $0x40 - 5b2: c3 ret - -000005b3 : -SYSCALL(kill) - 5b3: b8 06 00 00 00 mov $0x6,%eax - 5b8: cd 40 int $0x40 - 5ba: c3 ret - -000005bb : -SYSCALL(exec) - 5bb: b8 07 00 00 00 mov $0x7,%eax - 5c0: cd 40 int $0x40 - 5c2: c3 ret - -000005c3 : -SYSCALL(fstat) - 5c3: b8 08 00 00 00 mov $0x8,%eax - 5c8: cd 40 int $0x40 - 5ca: c3 ret - -000005cb : -SYSCALL(chdir) - 5cb: b8 09 00 00 00 mov $0x9,%eax - 5d0: cd 40 int $0x40 - 5d2: c3 ret - -000005d3 : -SYSCALL(dup) - 5d3: b8 0a 00 00 00 mov $0xa,%eax - 5d8: cd 40 int $0x40 - 5da: c3 ret - -000005db : -SYSCALL(getpid) - 5db: b8 0b 00 00 00 mov $0xb,%eax - 5e0: cd 40 int $0x40 - 5e2: c3 ret - -000005e3 : -SYSCALL(sbrk) - 5e3: b8 0c 00 00 00 mov $0xc,%eax - 5e8: cd 40 int $0x40 - 5ea: c3 ret - -000005eb : -SYSCALL(sleep) - 5eb: b8 0d 00 00 00 mov $0xd,%eax - 5f0: cd 40 int $0x40 - 5f2: c3 ret - -000005f3 : -SYSCALL(uptime) - 5f3: b8 0e 00 00 00 mov $0xe,%eax - 5f8: cd 40 int $0x40 - 5fa: c3 ret - -000005fb : -SYSCALL(open) - 5fb: b8 0f 00 00 00 mov $0xf,%eax - 600: cd 40 int $0x40 - 602: c3 ret - -00000603 : -SYSCALL(write) - 603: b8 10 00 00 00 mov $0x10,%eax - 608: cd 40 int $0x40 - 60a: c3 ret - -0000060b : -SYSCALL(mknod) - 60b: b8 11 00 00 00 mov $0x11,%eax - 610: cd 40 int $0x40 - 612: c3 ret - -00000613 : -SYSCALL(unlink) - 613: b8 12 00 00 00 mov $0x12,%eax - 618: cd 40 int $0x40 - 61a: c3 ret - -0000061b : -SYSCALL(link) - 61b: b8 13 00 00 00 mov $0x13,%eax - 620: cd 40 int $0x40 - 622: c3 ret - -00000623 : -SYSCALL(mkdir) - 623: b8 14 00 00 00 mov $0x14,%eax - 628: cd 40 int $0x40 - 62a: c3 ret - -0000062b : -SYSCALL(close) - 62b: b8 15 00 00 00 mov $0x15,%eax - 630: cd 40 int $0x40 - 632: c3 ret - -00000633 : -SYSCALL(getch) - 633: b8 16 00 00 00 mov $0x16,%eax - 638: cd 40 int $0x40 - 63a: c3 ret - -0000063b : -SYSCALL(greeting) - 63b: b8 17 00 00 00 mov $0x17,%eax - 640: cd 40 int $0x40 - 642: c3 ret - -00000643 : -SYSCALL(shutdown) - 643: b8 18 00 00 00 mov $0x18,%eax - 648: cd 40 int $0x40 - 64a: c3 ret - 64b: 66 90 xchg %ax,%ax - 64d: 66 90 xchg %ax,%ax - 64f: 90 nop - -00000650 : - -static void putc(int fd, char c) { - write(fd, &c, 1); -} - -static void printint(int fd, int xx, int base, int sgn) { - 650: 55 push %ebp - 651: 89 e5 mov %esp,%ebp - 653: 57 push %edi - 654: 56 push %esi - 655: 53 push %ebx - 656: 83 ec 3c sub $0x3c,%esp - 659: 89 4d c4 mov %ecx,-0x3c(%ebp) - uint x; - - neg = 0; - if (sgn && xx < 0) { - neg = 1; - x = -xx; - 65c: 89 d1 mov %edx,%ecx -static void printint(int fd, int xx, int base, int sgn) { - 65e: 89 45 b8 mov %eax,-0x48(%ebp) - if (sgn && xx < 0) { - 661: 85 d2 test %edx,%edx - 663: 0f 89 7f 00 00 00 jns 6e8 - 669: f6 45 08 01 testb $0x1,0x8(%ebp) - 66d: 74 79 je 6e8 - neg = 1; - 66f: c7 45 bc 01 00 00 00 movl $0x1,-0x44(%ebp) - x = -xx; - 676: f7 d9 neg %ecx - } - else { - x = xx; - } - - i = 0; - 678: 31 db xor %ebx,%ebx - 67a: 8d 75 d7 lea -0x29(%ebp),%esi - 67d: 8d 76 00 lea 0x0(%esi),%esi - do { - buf[i++] = digits[x % base]; - 680: 89 c8 mov %ecx,%eax - 682: 31 d2 xor %edx,%edx - 684: 89 cf mov %ecx,%edi - 686: f7 75 c4 divl -0x3c(%ebp) - 689: 0f b6 92 d4 0a 00 00 movzbl 0xad4(%edx),%edx - 690: 89 45 c0 mov %eax,-0x40(%ebp) - 693: 89 d8 mov %ebx,%eax - 695: 8d 5b 01 lea 0x1(%ebx),%ebx - } - while ((x /= base) != 0); - 698: 8b 4d c0 mov -0x40(%ebp),%ecx - buf[i++] = digits[x % base]; - 69b: 88 14 1e mov %dl,(%esi,%ebx,1) - while ((x /= base) != 0); - 69e: 39 7d c4 cmp %edi,-0x3c(%ebp) - 6a1: 76 dd jbe 680 - if (neg) { - 6a3: 8b 4d bc mov -0x44(%ebp),%ecx - 6a6: 85 c9 test %ecx,%ecx - 6a8: 74 0c je 6b6 - buf[i++] = '-'; - 6aa: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) - buf[i++] = digits[x % base]; - 6af: 89 d8 mov %ebx,%eax - buf[i++] = '-'; - 6b1: ba 2d 00 00 00 mov $0x2d,%edx - } - - while (--i >= 0) { - 6b6: 8b 7d b8 mov -0x48(%ebp),%edi - 6b9: 8d 5c 05 d7 lea -0x29(%ebp,%eax,1),%ebx - 6bd: eb 07 jmp 6c6 - 6bf: 90 nop - putc(fd, buf[i]); - 6c0: 0f b6 13 movzbl (%ebx),%edx - 6c3: 83 eb 01 sub $0x1,%ebx - write(fd, &c, 1); - 6c6: 83 ec 04 sub $0x4,%esp - 6c9: 88 55 d7 mov %dl,-0x29(%ebp) - 6cc: 6a 01 push $0x1 - 6ce: 56 push %esi - 6cf: 57 push %edi - 6d0: e8 2e ff ff ff call 603 - while (--i >= 0) { - 6d5: 83 c4 10 add $0x10,%esp - 6d8: 39 de cmp %ebx,%esi - 6da: 75 e4 jne 6c0 - } -} - 6dc: 8d 65 f4 lea -0xc(%ebp),%esp - 6df: 5b pop %ebx - 6e0: 5e pop %esi - 6e1: 5f pop %edi - 6e2: 5d pop %ebp - 6e3: c3 ret - 6e4: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - neg = 0; - 6e8: c7 45 bc 00 00 00 00 movl $0x0,-0x44(%ebp) - 6ef: eb 87 jmp 678 - 6f1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 6f8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 6ff: 90 nop - -00000700 : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void printf(int fd, const char *fmt, ...) { - 700: 55 push %ebp - 701: 89 e5 mov %esp,%ebp - 703: 57 push %edi - 704: 56 push %esi - 705: 53 push %ebx - 706: 83 ec 2c sub $0x2c,%esp - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for (i = 0; fmt[i]; i++) { - 709: 8b 5d 0c mov 0xc(%ebp),%ebx -void printf(int fd, const char *fmt, ...) { - 70c: 8b 75 08 mov 0x8(%ebp),%esi - for (i = 0; fmt[i]; i++) { - 70f: 0f b6 13 movzbl (%ebx),%edx - 712: 84 d2 test %dl,%dl - 714: 74 6a je 780 - ap = (uint*)(void*)&fmt + 1; - 716: 8d 45 10 lea 0x10(%ebp),%eax - 719: 83 c3 01 add $0x1,%ebx - write(fd, &c, 1); - 71c: 8d 7d e7 lea -0x19(%ebp),%edi - state = 0; - 71f: 31 c9 xor %ecx,%ecx - ap = (uint*)(void*)&fmt + 1; - 721: 89 45 d0 mov %eax,-0x30(%ebp) - 724: eb 36 jmp 75c - 726: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 72d: 8d 76 00 lea 0x0(%esi),%esi - 730: 89 4d d4 mov %ecx,-0x2c(%ebp) - c = fmt[i] & 0xff; - if (state == 0) { - if (c == '%') { - state = '%'; - 733: b9 25 00 00 00 mov $0x25,%ecx - if (c == '%') { - 738: 83 f8 25 cmp $0x25,%eax - 73b: 74 15 je 752 - write(fd, &c, 1); - 73d: 83 ec 04 sub $0x4,%esp - 740: 88 55 e7 mov %dl,-0x19(%ebp) - 743: 6a 01 push $0x1 - 745: 57 push %edi - 746: 56 push %esi - 747: e8 b7 fe ff ff call 603 - 74c: 8b 4d d4 mov -0x2c(%ebp),%ecx - } - else { - putc(fd, c); - 74f: 83 c4 10 add $0x10,%esp - for (i = 0; fmt[i]; i++) { - 752: 0f b6 13 movzbl (%ebx),%edx - 755: 83 c3 01 add $0x1,%ebx - 758: 84 d2 test %dl,%dl - 75a: 74 24 je 780 - c = fmt[i] & 0xff; - 75c: 0f b6 c2 movzbl %dl,%eax - if (state == 0) { - 75f: 85 c9 test %ecx,%ecx - 761: 74 cd je 730 - } - } - else if (state == '%') { - 763: 83 f9 25 cmp $0x25,%ecx - 766: 75 ea jne 752 - if (c == 'd') { - 768: 83 f8 25 cmp $0x25,%eax - 76b: 0f 84 07 01 00 00 je 878 - 771: 83 e8 63 sub $0x63,%eax - 774: 83 f8 15 cmp $0x15,%eax - 777: 77 17 ja 790 - 779: ff 24 85 7c 0a 00 00 jmp *0xa7c(,%eax,4) - putc(fd, c); - } - state = 0; - } - } -} - 780: 8d 65 f4 lea -0xc(%ebp),%esp - 783: 5b pop %ebx - 784: 5e pop %esi - 785: 5f pop %edi - 786: 5d pop %ebp - 787: c3 ret - 788: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 78f: 90 nop - write(fd, &c, 1); - 790: 83 ec 04 sub $0x4,%esp - 793: 88 55 d4 mov %dl,-0x2c(%ebp) - 796: 6a 01 push $0x1 - 798: 57 push %edi - 799: 56 push %esi - 79a: c6 45 e7 25 movb $0x25,-0x19(%ebp) - 79e: e8 60 fe ff ff call 603 - putc(fd, c); - 7a3: 0f b6 55 d4 movzbl -0x2c(%ebp),%edx - write(fd, &c, 1); - 7a7: 83 c4 0c add $0xc,%esp - 7aa: 88 55 e7 mov %dl,-0x19(%ebp) - 7ad: 6a 01 push $0x1 - 7af: 57 push %edi - 7b0: 56 push %esi - 7b1: e8 4d fe ff ff call 603 - putc(fd, c); - 7b6: 83 c4 10 add $0x10,%esp - state = 0; - 7b9: 31 c9 xor %ecx,%ecx - 7bb: eb 95 jmp 752 - 7bd: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 16, 0); - 7c0: 83 ec 0c sub $0xc,%esp - 7c3: b9 10 00 00 00 mov $0x10,%ecx - 7c8: 6a 00 push $0x0 - 7ca: 8b 45 d0 mov -0x30(%ebp),%eax - 7cd: 8b 10 mov (%eax),%edx - 7cf: 89 f0 mov %esi,%eax - 7d1: e8 7a fe ff ff call 650 - ap++; - 7d6: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 7da: 83 c4 10 add $0x10,%esp - state = 0; - 7dd: 31 c9 xor %ecx,%ecx - 7df: e9 6e ff ff ff jmp 752 - 7e4: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - s = (char*)*ap; - 7e8: 8b 45 d0 mov -0x30(%ebp),%eax - 7eb: 8b 10 mov (%eax),%edx - ap++; - 7ed: 83 c0 04 add $0x4,%eax - 7f0: 89 45 d0 mov %eax,-0x30(%ebp) - if (s == 0) { - 7f3: 85 d2 test %edx,%edx - 7f5: 0f 84 8d 00 00 00 je 888 - while (*s != 0) { - 7fb: 0f b6 02 movzbl (%edx),%eax - state = 0; - 7fe: 31 c9 xor %ecx,%ecx - while (*s != 0) { - 800: 84 c0 test %al,%al - 802: 0f 84 4a ff ff ff je 752 - 808: 89 5d d4 mov %ebx,-0x2c(%ebp) - 80b: 89 d3 mov %edx,%ebx - 80d: 8d 76 00 lea 0x0(%esi),%esi - write(fd, &c, 1); - 810: 83 ec 04 sub $0x4,%esp - s++; - 813: 83 c3 01 add $0x1,%ebx - 816: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 819: 6a 01 push $0x1 - 81b: 57 push %edi - 81c: 56 push %esi - 81d: e8 e1 fd ff ff call 603 - while (*s != 0) { - 822: 0f b6 03 movzbl (%ebx),%eax - 825: 83 c4 10 add $0x10,%esp - 828: 84 c0 test %al,%al - 82a: 75 e4 jne 810 - state = 0; - 82c: 8b 5d d4 mov -0x2c(%ebp),%ebx - 82f: 31 c9 xor %ecx,%ecx - 831: e9 1c ff ff ff jmp 752 - 836: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 83d: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 10, 1); - 840: 83 ec 0c sub $0xc,%esp - 843: b9 0a 00 00 00 mov $0xa,%ecx - 848: 6a 01 push $0x1 - 84a: e9 7b ff ff ff jmp 7ca - 84f: 90 nop - putc(fd, *ap); - 850: 8b 45 d0 mov -0x30(%ebp),%eax - write(fd, &c, 1); - 853: 83 ec 04 sub $0x4,%esp - putc(fd, *ap); - 856: 8b 00 mov (%eax),%eax - write(fd, &c, 1); - 858: 6a 01 push $0x1 - 85a: 57 push %edi - 85b: 56 push %esi - putc(fd, *ap); - 85c: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 85f: e8 9f fd ff ff call 603 - ap++; - 864: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 868: 83 c4 10 add $0x10,%esp - state = 0; - 86b: 31 c9 xor %ecx,%ecx - 86d: e9 e0 fe ff ff jmp 752 - 872: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - putc(fd, c); - 878: 88 55 e7 mov %dl,-0x19(%ebp) - write(fd, &c, 1); - 87b: 83 ec 04 sub $0x4,%esp - 87e: e9 2a ff ff ff jmp 7ad - 883: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 887: 90 nop - s = "(null)"; - 888: ba 72 0a 00 00 mov $0xa72,%edx - while (*s != 0) { - 88d: 89 5d d4 mov %ebx,-0x2c(%ebp) - 890: b8 28 00 00 00 mov $0x28,%eax - 895: 89 d3 mov %edx,%ebx - 897: e9 74 ff ff ff jmp 810 - 89c: 66 90 xchg %ax,%ax - 89e: 66 90 xchg %ax,%ax - -000008a0 : -typedef union header Header; - -static Header base; -static Header *freep; - -void free(void *ap) { - 8a0: 55 push %ebp - Header *bp, *p; - - bp = (Header*)ap - 1; - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 8a1: a1 14 0e 00 00 mov 0xe14,%eax -void free(void *ap) { - 8a6: 89 e5 mov %esp,%ebp - 8a8: 57 push %edi - 8a9: 56 push %esi - 8aa: 53 push %ebx - 8ab: 8b 5d 08 mov 0x8(%ebp),%ebx - bp = (Header*)ap - 1; - 8ae: 8d 4b f8 lea -0x8(%ebx),%ecx - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 8b1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 8b8: 89 c2 mov %eax,%edx - 8ba: 8b 00 mov (%eax),%eax - 8bc: 39 ca cmp %ecx,%edx - 8be: 73 30 jae 8f0 - 8c0: 39 c1 cmp %eax,%ecx - 8c2: 72 04 jb 8c8 - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 8c4: 39 c2 cmp %eax,%edx - 8c6: 72 f0 jb 8b8 - break; - } - } - if (bp + bp->s.size == p->s.ptr) { - 8c8: 8b 73 fc mov -0x4(%ebx),%esi - 8cb: 8d 3c f1 lea (%ecx,%esi,8),%edi - 8ce: 39 f8 cmp %edi,%eax - 8d0: 74 30 je 902 - bp->s.size += p->s.ptr->s.size; - bp->s.ptr = p->s.ptr->s.ptr; - 8d2: 89 43 f8 mov %eax,-0x8(%ebx) - } - else { - bp->s.ptr = p->s.ptr; - } - if (p + p->s.size == bp) { - 8d5: 8b 42 04 mov 0x4(%edx),%eax - 8d8: 8d 34 c2 lea (%edx,%eax,8),%esi - 8db: 39 f1 cmp %esi,%ecx - 8dd: 74 3a je 919 - p->s.size += bp->s.size; - p->s.ptr = bp->s.ptr; - 8df: 89 0a mov %ecx,(%edx) - } - else { - p->s.ptr = bp; - } - freep = p; -} - 8e1: 5b pop %ebx - freep = p; - 8e2: 89 15 14 0e 00 00 mov %edx,0xe14 -} - 8e8: 5e pop %esi - 8e9: 5f pop %edi - 8ea: 5d pop %ebp - 8eb: c3 ret - 8ec: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 8f0: 39 c2 cmp %eax,%edx - 8f2: 72 c4 jb 8b8 - 8f4: 39 c1 cmp %eax,%ecx - 8f6: 73 c0 jae 8b8 - if (bp + bp->s.size == p->s.ptr) { - 8f8: 8b 73 fc mov -0x4(%ebx),%esi - 8fb: 8d 3c f1 lea (%ecx,%esi,8),%edi - 8fe: 39 f8 cmp %edi,%eax - 900: 75 d0 jne 8d2 - bp->s.size += p->s.ptr->s.size; - 902: 03 70 04 add 0x4(%eax),%esi - 905: 89 73 fc mov %esi,-0x4(%ebx) - bp->s.ptr = p->s.ptr->s.ptr; - 908: 8b 02 mov (%edx),%eax - 90a: 8b 00 mov (%eax),%eax - 90c: 89 43 f8 mov %eax,-0x8(%ebx) - if (p + p->s.size == bp) { - 90f: 8b 42 04 mov 0x4(%edx),%eax - 912: 8d 34 c2 lea (%edx,%eax,8),%esi - 915: 39 f1 cmp %esi,%ecx - 917: 75 c6 jne 8df - p->s.size += bp->s.size; - 919: 03 43 fc add -0x4(%ebx),%eax - freep = p; - 91c: 89 15 14 0e 00 00 mov %edx,0xe14 - p->s.size += bp->s.size; - 922: 89 42 04 mov %eax,0x4(%edx) - p->s.ptr = bp->s.ptr; - 925: 8b 4b f8 mov -0x8(%ebx),%ecx - 928: 89 0a mov %ecx,(%edx) -} - 92a: 5b pop %ebx - 92b: 5e pop %esi - 92c: 5f pop %edi - 92d: 5d pop %ebp - 92e: c3 ret - 92f: 90 nop - -00000930 : - hp->s.size = nu; - free((void*)(hp + 1)); - return freep; -} - -void* malloc(uint nbytes) { - 930: 55 push %ebp - 931: 89 e5 mov %esp,%ebp - 933: 57 push %edi - 934: 56 push %esi - 935: 53 push %ebx - 936: 83 ec 1c sub $0x1c,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 939: 8b 45 08 mov 0x8(%ebp),%eax - if ((prevp = freep) == 0) { - 93c: 8b 3d 14 0e 00 00 mov 0xe14,%edi - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 942: 8d 70 07 lea 0x7(%eax),%esi - 945: c1 ee 03 shr $0x3,%esi - 948: 83 c6 01 add $0x1,%esi - if ((prevp = freep) == 0) { - 94b: 85 ff test %edi,%edi - 94d: 0f 84 9d 00 00 00 je 9f0 - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 953: 8b 17 mov (%edi),%edx - if (p->s.size >= nunits) { - 955: 8b 4a 04 mov 0x4(%edx),%ecx - 958: 39 f1 cmp %esi,%ecx - 95a: 73 6a jae 9c6 - 95c: bb 00 10 00 00 mov $0x1000,%ebx - 961: 39 de cmp %ebx,%esi - 963: 0f 43 de cmovae %esi,%ebx - p = sbrk(nu * sizeof(Header)); - 966: 8d 04 dd 00 00 00 00 lea 0x0(,%ebx,8),%eax - 96d: 89 45 e4 mov %eax,-0x1c(%ebp) - 970: eb 17 jmp 989 - 972: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 978: 8b 02 mov (%edx),%eax - if (p->s.size >= nunits) { - 97a: 8b 48 04 mov 0x4(%eax),%ecx - 97d: 39 f1 cmp %esi,%ecx - 97f: 73 4f jae 9d0 - p->s.size = nunits; - } - freep = prevp; - return (void*)(p + 1); - } - if (p == freep) { - 981: 8b 3d 14 0e 00 00 mov 0xe14,%edi - 987: 89 c2 mov %eax,%edx - 989: 39 d7 cmp %edx,%edi - 98b: 75 eb jne 978 - p = sbrk(nu * sizeof(Header)); - 98d: 83 ec 0c sub $0xc,%esp - 990: ff 75 e4 push -0x1c(%ebp) - 993: e8 4b fc ff ff call 5e3 - if (p == (char*)-1) { - 998: 83 c4 10 add $0x10,%esp - 99b: 83 f8 ff cmp $0xffffffff,%eax - 99e: 74 1c je 9bc - hp->s.size = nu; - 9a0: 89 58 04 mov %ebx,0x4(%eax) - free((void*)(hp + 1)); - 9a3: 83 ec 0c sub $0xc,%esp - 9a6: 83 c0 08 add $0x8,%eax - 9a9: 50 push %eax - 9aa: e8 f1 fe ff ff call 8a0 - return freep; - 9af: 8b 15 14 0e 00 00 mov 0xe14,%edx - if ((p = morecore(nunits)) == 0) { - 9b5: 83 c4 10 add $0x10,%esp - 9b8: 85 d2 test %edx,%edx - 9ba: 75 bc jne 978 - return 0; - } - } - } -} - 9bc: 8d 65 f4 lea -0xc(%ebp),%esp - return 0; - 9bf: 31 c0 xor %eax,%eax -} - 9c1: 5b pop %ebx - 9c2: 5e pop %esi - 9c3: 5f pop %edi - 9c4: 5d pop %ebp - 9c5: c3 ret - if (p->s.size >= nunits) { - 9c6: 89 d0 mov %edx,%eax - 9c8: 89 fa mov %edi,%edx - 9ca: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - if (p->s.size == nunits) { - 9d0: 39 ce cmp %ecx,%esi - 9d2: 74 4c je a20 - p->s.size -= nunits; - 9d4: 29 f1 sub %esi,%ecx - 9d6: 89 48 04 mov %ecx,0x4(%eax) - p += p->s.size; - 9d9: 8d 04 c8 lea (%eax,%ecx,8),%eax - p->s.size = nunits; - 9dc: 89 70 04 mov %esi,0x4(%eax) - freep = prevp; - 9df: 89 15 14 0e 00 00 mov %edx,0xe14 -} - 9e5: 8d 65 f4 lea -0xc(%ebp),%esp - return (void*)(p + 1); - 9e8: 83 c0 08 add $0x8,%eax -} - 9eb: 5b pop %ebx - 9ec: 5e pop %esi - 9ed: 5f pop %edi - 9ee: 5d pop %ebp - 9ef: c3 ret - base.s.ptr = freep = prevp = &base; - 9f0: c7 05 14 0e 00 00 18 movl $0xe18,0xe14 - 9f7: 0e 00 00 - base.s.size = 0; - 9fa: bf 18 0e 00 00 mov $0xe18,%edi - base.s.ptr = freep = prevp = &base; - 9ff: c7 05 18 0e 00 00 18 movl $0xe18,0xe18 - a06: 0e 00 00 - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - a09: 89 fa mov %edi,%edx - base.s.size = 0; - a0b: c7 05 1c 0e 00 00 00 movl $0x0,0xe1c - a12: 00 00 00 - if (p->s.size >= nunits) { - a15: e9 42 ff ff ff jmp 95c - a1a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - prevp->s.ptr = p->s.ptr; - a20: 8b 08 mov (%eax),%ecx - a22: 89 0a mov %ecx,(%edx) - a24: eb b9 jmp 9df diff --git a/ls.d b/ls.d deleted file mode 100644 index a55b6d4..0000000 --- a/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/ls.o b/ls.o deleted file mode 100644 index ac1663aefa1dec05551bf628780be6567ecf5d45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7016 zcma)AeQ=z`dEb5Cci%hRopdM3U$PB4fxi-}lVuxYj7(%3gDn`_U~B;f%t?ABossUu z-FpVxfC;hzjZkZK>P(t?Flp$tWSESTK**SoK<&6q+RpF??J!fCdKze9a8nA*)EP+B z-*0dCbWZz6cC`C@zV_K?pZ$3EbY#nIH%lpnEmF8*mJ=d6zoJ>AVTD*M7Fkn`yC>e? zvum;(9lw~^^T8K0Gc)7oQu5=8v!&!mO;h1AF|~Q-`tuLRCeA)_Lr3|O@v{n9d3vG^K=6X!L1rUCT$xx|+~QIy`XKfTksn+h&XytDWI`_4|i zyo@@IkNA4`?E31(0Y`|*$D;d1ueCn*M)H~GFxByk(WzJ7{>{wH#MwPnS5&?UW%AWy zR1J<_lHmYaC%m#I-qcj^+1~s2%?@|~-V&21-b0tkSKdY2J8|M=fF5&FlXvgCW6yqP z=kN*yxL=xJ(jUEOVn+XJgyV0dHVDL>e0p9b&fcllKcG|HYoe=?A13_L)K)oh?607k zn0f*2dC^hz=S>|u2hsl2&YHZZlE>Cyu?ELqr%r_Lj9-M^dD=DXoOy*lDlu!P=ev{Q zu6y=W17mjn4)JrcQ}4lc@`Rpj@+Uf56H_liHgV!K+hf)F-!rKtcTZ~d?RU()Le=kP z;=>-qWfze7^m_H4*zcHJ%_beodmO7bd~IziQy=dAZPmdb^yoi_29^GHS0QWF#jE(S zc6LotAHD%cBc=7}{%k&92-AhJAfH}ZiisLoDa?jiwzQO9I#Btm7>s4Z;dEFiq(=(* zp_s@Z1eU4WmU!dueLVBf7nPm)8V}p;n8jr0Ogxk z`Wd)*J(@YL`ZItUg534vq(x#NI3OZ*e-6@11VVpKSy{sMrtfzj3@F24u*CW@N>3yty> zgK#sD#xyw}ltYlE%Coq71Px`T&gGyy2tBO=}0QR7K2|NVc73dL!vSh zeTTWc<=V9R^Qu}?y07dbAbfccRLZPeEI^gYp;^&a_x? z0G#ZZN6kElxMLzYaa)A?Zq)UtaxI!kSjbHvE>gnOX$c)uB7A19WuzqJLis%SZrYzb zg_+kKhGt<*XLedd`^tl2ag+*o`oiJJm{{CQ)jss;MU4y&h%5B)&w_gbH98Q8D;r+~ zAycLUxk?2mT!aL63Nd&+)LsbG^a6)ya@ysO5V+eaUBA|Ga#R| zlJ9}Igr4$WL2xDHCumwoT!S9k&vp>n&zL3t$P%Y5@k0=L^mmM;vYpv~A-D646v-B# z-f=*20#%+|htsR`6iL?RsV+%{LTB_C6R|of-vq;H%SJXBM(RZ(ajTWw147TD&q^M$ z!~_U#Lb2!q8hys_O_f{4WAaEdHiZ(~061Jl9Yx2YTA*TroaeFsxdrUf2!{?*#DLGJPzn%&ZoQ(kkc+(o4>{&DO8Pxx}D=hw;Gy}I+#oj!Tk z`@Zv*L&DlsjJex9u^7gSZ-v7hr(CqB+#kA-oO7S?z&-1|2&n1ib9Z_|MW%&6CayZ= zsW`0TO|WfR0BXS%Fkb>2>|1TA0nLSqKwnu_#;eI@BSPT?rQuG!$*H*!LOf(YZ>T45 zd!vGAl}v;qTb-o85tO)@4bO?t(ej|^yGJM~lpeZ8xy{XUmGtZHQVko`GXJ=Lm%3Is zp65TOmJz$qxc;E>?oqDaHCOq*RO&eBqpBICd)$9tEd|l=q>61&OM6vAM!9$S(Xxs` zDmVDiZjRC1JO`t=hvXTR*re2x%Kt8Wyi{=)g8ZIJ&|Qe(V7KrLLL~JX+a9HScj%v- zHO;T9D6AsK)m2?8(gpG9PgOl6v7;)ozT*Z6hE#<7AV`E0syMi%(KMv5sXF%cpN|fy zMopd4G1eW2@U&9y15UsElu<5$bKf2L+xHx2Kv(NJ76@JFSPfSb0c9cUtvliti$%~NG@B-<%cT5!e}mRA1q?1_OSw9F+tH9 zXZs&)A1fBZpg$}a;aDz!Hd{KF?;kD}@`ZA#y_|nImmg>kvwb5$2};ZX{rX3;rD5AU zSIA>(#SzRjcqA8!a=w%s$_E4K{^4wqn*OnaqBLA6hUuz`?8z2-?EzfZ!8W^p6xufyj^K@(+qq z?oc2)MuUM|wxcw-Z`Z-n&SGJxBU>s3rP3%CWfk7Wnf~9$MB8!DQf62$D`1dxxfB!u z;+D;u*QZzP?knfRvRT{q&a!4ZA78a9vvSRsj9AR!5k`@R?hx|Ps9coryk~IwdATgs zn#xyJY;1@gb2inhO;5Swo-=iJRRhK6f?66&z)@ zxPn*xY;grYV6(-=3MCB7*G>~6v};Cj3Uv_)Q^@nuwuStcQJ+WU`mldHXj`aXWf>s( zb-%;&^I!}0TPy=4&pluZ`PG&IlE2;XT+b%tZ;#;#)K@k>p0=5l)tkv2X?uB@(~1|e zzSAlPwsO48Av7mlAL3D-Uws?k7Z5&RNI75O#9It9CW)sZV{s6~{YE}$zvT!{S9?~MlUGgvgpU)I#WVDQHV|HYugJV8I-V48@F zp~LVS3~nXXVb2@9+u(f$`-tfGpuy1KV+Q}2i26+;#yd}hzn>fAFCX&n8vG3r)yG~X zCJiny*kEI~dDZsE;!C^}k zgON-aJQ9k`KsL;ZOkb%aGQ|QJT6bnT!5SL~vc<4GR*?(@edVEjx%^-OeKno!>nq|v zN!q?587cISM4EVG>x!2*i>U@6&vLVU$l3k-`7)f(%}Z z?fL~)87dgwr=ND1{O?yMk`rwwNwyOBkNEEZ3m&KC^1t;YzL+`eRv%%09d!S!mZ&A$3a~>t=&oc9t>N@!MvL zoyS)osGY~lxI|Y##(A)>oyTs_Hdc`09QYs`hXO5 zQ1U0MEtV`nU}@_96wd$M8rA3uplipy7vB{-4_y7#ai6Z~15zBp_knh{*s;bTsP%Ug z{&;RV51v~)k8gmseL#x8gg<_FY_YnpK~U@OB>Zs==#T4c{e1_t?E_N034a%A1eW|Z zbhZ9og1@bh(I2*A)!!M=?8AM-@=e@})7A-ilB_>9Xzf4EnAVay;W{DcIL9yE`i6z7ypml{{jaijxhiL diff --git a/ls.sym b/ls.sym deleted file mode 100644 index 544af91..0000000 --- a/ls.sym +++ /dev/null @@ -1,51 +0,0 @@ -00000000 ls.c -00000e04 buf.0 -00000000 ulib.c -00000000 printf.c -00000650 printint -00000ad4 digits.0 -00000000 umalloc.c -00000e14 freep -00000e18 base -00000340 strcpy -00000060 fmtname -00000700 printf -0000063b greeting -00000560 memmove -0000060b mknod -00000460 gets -000005db getpid -00000930 malloc -000005eb sleep -000005a3 pipe -00000633 getch -00000603 write -000005c3 fstat -000005b3 kill -000005cb chdir -000005bb exec -0000059b wait -000005ab read -00000613 unlink -0000058b fork -000005e3 sbrk -000005f3 uptime -00000e04 __bss_start -00000400 memset -00000000 main -00000370 strcmp -00000643 shutdown -000005d3 dup -000004d0 stat -00000e04 _edata -00000e20 _end -0000061b link -00000100 ls -00000593 exit -00000520 atoi -000003d0 strlen -000005fb open -00000420 strchr -00000623 mkdir -0000062b close -000008a0 free diff --git a/main.d b/main.d deleted file mode 100644 index 354dab4..0000000 --- a/main.d +++ /dev/null @@ -1,2 +0,0 @@ -main.o: main.c /usr/include/stdc-predef.h types.h defs.h param.h \ - memlayout.h mmu.h proc.h x86.h diff --git a/main.o b/main.o deleted file mode 100644 index 3bd87b9aeeaa14dd904dee0bfcc891f0b1ed256e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17796 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 K)Vo`e-Twkivy$Tg diff --git a/mkdir.asm b/mkdir.asm deleted file mode 100644 index ec2314a..0000000 --- a/mkdir.asm +++ /dev/null @@ -1,1190 +0,0 @@ - -_mkdir: file format elf32-i386 - - -Disassembly of section .text: - -00000000
    : -#include "types.h" -#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 push -0x4(%ecx) - a: 55 push %ebp - b: 89 e5 mov %esp,%ebp - d: 57 push %edi - e: bf 01 00 00 00 mov $0x1,%edi - 13: 56 push %esi - 14: 53 push %ebx - 15: 51 push %ecx - 16: 83 ec 08 sub $0x8,%esp - 19: 8b 59 04 mov 0x4(%ecx),%ebx - 1c: 8b 31 mov (%ecx),%esi - 1e: 83 c3 04 add $0x4,%ebx - int i; - - if (argc < 2) { - 21: 83 fe 01 cmp $0x1,%esi - 24: 7e 3e jle 64 - 26: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 2d: 8d 76 00 lea 0x0(%esi),%esi - printf(2, "Usage: mkdir files...\n"); - exit(); - } - - for (i = 1; i < argc; i++) { - if (mkdir(argv[i]) < 0) { - 30: 83 ec 0c sub $0xc,%esp - 33: ff 33 push (%ebx) - 35: e8 29 03 00 00 call 363 - 3a: 83 c4 10 add $0x10,%esp - 3d: 85 c0 test %eax,%eax - 3f: 78 0f js 50 - for (i = 1; i < argc; i++) { - 41: 83 c7 01 add $0x1,%edi - 44: 83 c3 04 add $0x4,%ebx - 47: 39 fe cmp %edi,%esi - 49: 75 e5 jne 30 - printf(2, "mkdir: %s failed to create\n", argv[i]); - break; - } - } - - exit(); - 4b: e8 83 02 00 00 call 2d3 - printf(2, "mkdir: %s failed to create\n", argv[i]); - 50: 50 push %eax - 51: ff 33 push (%ebx) - 53: 68 7f 07 00 00 push $0x77f - 58: 6a 02 push $0x2 - 5a: e8 e1 03 00 00 call 440 - break; - 5f: 83 c4 10 add $0x10,%esp - 62: eb e7 jmp 4b - printf(2, "Usage: mkdir files...\n"); - 64: 52 push %edx - 65: 52 push %edx - 66: 68 68 07 00 00 push $0x768 - 6b: 6a 02 push $0x2 - 6d: e8 ce 03 00 00 call 440 - exit(); - 72: e8 5c 02 00 00 call 2d3 - 77: 66 90 xchg %ax,%ax - 79: 66 90 xchg %ax,%ax - 7b: 66 90 xchg %ax,%ax - 7d: 66 90 xchg %ax,%ax - 7f: 90 nop - -00000080 : -#include "stat.h" -#include "fcntl.h" -#include "user.h" -#include "x86.h" - -char*strcpy(char *s, const char *t) { - 80: 55 push %ebp - char *os; - - os = s; - while ((*s++ = *t++) != 0) { - 81: 31 c0 xor %eax,%eax -char*strcpy(char *s, const char *t) { - 83: 89 e5 mov %esp,%ebp - 85: 53 push %ebx - 86: 8b 4d 08 mov 0x8(%ebp),%ecx - 89: 8b 5d 0c mov 0xc(%ebp),%ebx - 8c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - while ((*s++ = *t++) != 0) { - 90: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 94: 88 14 01 mov %dl,(%ecx,%eax,1) - 97: 83 c0 01 add $0x1,%eax - 9a: 84 d2 test %dl,%dl - 9c: 75 f2 jne 90 - ; - } - return os; -} - 9e: 8b 5d fc mov -0x4(%ebp),%ebx - a1: 89 c8 mov %ecx,%eax - a3: c9 leave - a4: c3 ret - a5: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - ac: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -000000b0 : - -int strcmp(const char *p, const char *q) { - b0: 55 push %ebp - b1: 89 e5 mov %esp,%ebp - b3: 53 push %ebx - b4: 8b 55 08 mov 0x8(%ebp),%edx - b7: 8b 4d 0c mov 0xc(%ebp),%ecx - while (*p && *p == *q) { - ba: 0f b6 02 movzbl (%edx),%eax - bd: 84 c0 test %al,%al - bf: 75 17 jne d8 - c1: eb 3a jmp fd - c3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - c7: 90 nop - c8: 0f b6 42 01 movzbl 0x1(%edx),%eax - p++, q++; - cc: 83 c2 01 add $0x1,%edx - cf: 8d 59 01 lea 0x1(%ecx),%ebx - while (*p && *p == *q) { - d2: 84 c0 test %al,%al - d4: 74 1a je f0 - p++, q++; - d6: 89 d9 mov %ebx,%ecx - while (*p && *p == *q) { - d8: 0f b6 19 movzbl (%ecx),%ebx - db: 38 c3 cmp %al,%bl - dd: 74 e9 je c8 - } - return (uchar) * p - (uchar) * q; - df: 29 d8 sub %ebx,%eax -} - e1: 8b 5d fc mov -0x4(%ebp),%ebx - e4: c9 leave - e5: c3 ret - e6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - ed: 8d 76 00 lea 0x0(%esi),%esi - return (uchar) * p - (uchar) * q; - f0: 0f b6 59 01 movzbl 0x1(%ecx),%ebx - f4: 31 c0 xor %eax,%eax - f6: 29 d8 sub %ebx,%eax -} - f8: 8b 5d fc mov -0x4(%ebp),%ebx - fb: c9 leave - fc: c3 ret - return (uchar) * p - (uchar) * q; - fd: 0f b6 19 movzbl (%ecx),%ebx - 100: 31 c0 xor %eax,%eax - 102: eb db jmp df - 104: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 10b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 10f: 90 nop - -00000110 : - -uint strlen(const char *s) { - 110: 55 push %ebp - 111: 89 e5 mov %esp,%ebp - 113: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - for (n = 0; s[n]; n++) { - 116: 80 3a 00 cmpb $0x0,(%edx) - 119: 74 15 je 130 - 11b: 31 c0 xor %eax,%eax - 11d: 8d 76 00 lea 0x0(%esi),%esi - 120: 83 c0 01 add $0x1,%eax - 123: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - 127: 89 c1 mov %eax,%ecx - 129: 75 f5 jne 120 - ; - } - return n; -} - 12b: 89 c8 mov %ecx,%eax - 12d: 5d pop %ebp - 12e: c3 ret - 12f: 90 nop - for (n = 0; s[n]; n++) { - 130: 31 c9 xor %ecx,%ecx -} - 132: 5d pop %ebp - 133: 89 c8 mov %ecx,%eax - 135: c3 ret - 136: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 13d: 8d 76 00 lea 0x0(%esi),%esi - -00000140 : - -void* memset(void *dst, int c, uint n) { - 140: 55 push %ebp - 141: 89 e5 mov %esp,%ebp - 143: 57 push %edi - 144: 8b 55 08 mov 0x8(%ebp),%edx - "d" (port), "0" (addr), "1" (cnt) : - "cc"); -} - -static inline void stosb(void *addr, int data, int cnt) { - asm volatile ("cld; rep stosb" : - 147: 8b 4d 10 mov 0x10(%ebp),%ecx - 14a: 8b 45 0c mov 0xc(%ebp),%eax - 14d: 89 d7 mov %edx,%edi - 14f: fc cld - 150: f3 aa rep stos %al,%es:(%edi) - stosb(dst, c, n); - return dst; -} - 152: 8b 7d fc mov -0x4(%ebp),%edi - 155: 89 d0 mov %edx,%eax - 157: c9 leave - 158: c3 ret - 159: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -00000160 : - -char* strchr(const char *s, char c) { - 160: 55 push %ebp - 161: 89 e5 mov %esp,%ebp - 163: 8b 45 08 mov 0x8(%ebp),%eax - 166: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx - for (; *s; s++) { - 16a: 0f b6 10 movzbl (%eax),%edx - 16d: 84 d2 test %dl,%dl - 16f: 75 12 jne 183 - 171: eb 1d jmp 190 - 173: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 177: 90 nop - 178: 0f b6 50 01 movzbl 0x1(%eax),%edx - 17c: 83 c0 01 add $0x1,%eax - 17f: 84 d2 test %dl,%dl - 181: 74 0d je 190 - if (*s == c) { - 183: 38 d1 cmp %dl,%cl - 185: 75 f1 jne 178 - return (char*)s; - } - } - return 0; -} - 187: 5d pop %ebp - 188: c3 ret - 189: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - return 0; - 190: 31 c0 xor %eax,%eax -} - 192: 5d pop %ebp - 193: c3 ret - 194: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 19b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 19f: 90 nop - -000001a0 : - -char* gets(char *buf, int max) { - 1a0: 55 push %ebp - 1a1: 89 e5 mov %esp,%ebp - 1a3: 57 push %edi - 1a4: 56 push %esi - int i, cc; - char c; - - for (i = 0; i + 1 < max;) { - cc = read(0, &c, 1); - 1a5: 8d 7d e7 lea -0x19(%ebp),%edi -char* gets(char *buf, int max) { - 1a8: 53 push %ebx - for (i = 0; i + 1 < max;) { - 1a9: 31 db xor %ebx,%ebx -char* gets(char *buf, int max) { - 1ab: 83 ec 1c sub $0x1c,%esp - for (i = 0; i + 1 < max;) { - 1ae: eb 27 jmp 1d7 - cc = read(0, &c, 1); - 1b0: 83 ec 04 sub $0x4,%esp - 1b3: 6a 01 push $0x1 - 1b5: 57 push %edi - 1b6: 6a 00 push $0x0 - 1b8: e8 2e 01 00 00 call 2eb - if (cc < 1) { - 1bd: 83 c4 10 add $0x10,%esp - 1c0: 85 c0 test %eax,%eax - 1c2: 7e 1d jle 1e1 - break; - } - buf[i++] = c; - 1c4: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 1c8: 8b 55 08 mov 0x8(%ebp),%edx - 1cb: 88 44 1a ff mov %al,-0x1(%edx,%ebx,1) - if (c == '\n' || c == '\r') { - 1cf: 3c 0a cmp $0xa,%al - 1d1: 74 1d je 1f0 - 1d3: 3c 0d cmp $0xd,%al - 1d5: 74 19 je 1f0 - for (i = 0; i + 1 < max;) { - 1d7: 89 de mov %ebx,%esi - 1d9: 83 c3 01 add $0x1,%ebx - 1dc: 3b 5d 0c cmp 0xc(%ebp),%ebx - 1df: 7c cf jl 1b0 - break; - } - } - buf[i] = '\0'; - 1e1: 8b 45 08 mov 0x8(%ebp),%eax - 1e4: c6 04 30 00 movb $0x0,(%eax,%esi,1) - return buf; -} - 1e8: 8d 65 f4 lea -0xc(%ebp),%esp - 1eb: 5b pop %ebx - 1ec: 5e pop %esi - 1ed: 5f pop %edi - 1ee: 5d pop %ebp - 1ef: c3 ret - buf[i] = '\0'; - 1f0: 8b 45 08 mov 0x8(%ebp),%eax - 1f3: 89 de mov %ebx,%esi - 1f5: c6 04 30 00 movb $0x0,(%eax,%esi,1) -} - 1f9: 8d 65 f4 lea -0xc(%ebp),%esp - 1fc: 5b pop %ebx - 1fd: 5e pop %esi - 1fe: 5f pop %edi - 1ff: 5d pop %ebp - 200: c3 ret - 201: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 208: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 20f: 90 nop - -00000210 : - -int stat(const char *n, struct stat *st) { - 210: 55 push %ebp - 211: 89 e5 mov %esp,%ebp - 213: 56 push %esi - 214: 53 push %ebx - int fd; - int r; - - fd = open(n, O_RDONLY); - 215: 83 ec 08 sub $0x8,%esp - 218: 6a 00 push $0x0 - 21a: ff 75 08 push 0x8(%ebp) - 21d: e8 19 01 00 00 call 33b - if (fd < 0) { - 222: 83 c4 10 add $0x10,%esp - 225: 85 c0 test %eax,%eax - 227: 78 27 js 250 - return -1; - } - r = fstat(fd, st); - 229: 83 ec 08 sub $0x8,%esp - 22c: ff 75 0c push 0xc(%ebp) - 22f: 89 c3 mov %eax,%ebx - 231: 50 push %eax - 232: e8 cc 00 00 00 call 303 - close(fd); - 237: 89 1c 24 mov %ebx,(%esp) - r = fstat(fd, st); - 23a: 89 c6 mov %eax,%esi - close(fd); - 23c: e8 2a 01 00 00 call 36b - return r; - 241: 83 c4 10 add $0x10,%esp -} - 244: 8d 65 f8 lea -0x8(%ebp),%esp - 247: 89 f0 mov %esi,%eax - 249: 5b pop %ebx - 24a: 5e pop %esi - 24b: 5d pop %ebp - 24c: c3 ret - 24d: 8d 76 00 lea 0x0(%esi),%esi - return -1; - 250: be ff ff ff ff mov $0xffffffff,%esi - 255: eb ed jmp 244 - 257: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 25e: 66 90 xchg %ax,%ax - -00000260 : - -int atoi(const char *s) { - 260: 55 push %ebp - 261: 89 e5 mov %esp,%ebp - 263: 53 push %ebx - 264: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - n = 0; - while ('0' <= *s && *s <= '9') { - 267: 0f be 02 movsbl (%edx),%eax - 26a: 8d 48 d0 lea -0x30(%eax),%ecx - 26d: 80 f9 09 cmp $0x9,%cl - n = 0; - 270: b9 00 00 00 00 mov $0x0,%ecx - while ('0' <= *s && *s <= '9') { - 275: 77 1e ja 295 - 277: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 27e: 66 90 xchg %ax,%ax - n = n * 10 + *s++ - '0'; - 280: 83 c2 01 add $0x1,%edx - 283: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 286: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx - while ('0' <= *s && *s <= '9') { - 28a: 0f be 02 movsbl (%edx),%eax - 28d: 8d 58 d0 lea -0x30(%eax),%ebx - 290: 80 fb 09 cmp $0x9,%bl - 293: 76 eb jbe 280 - } - return n; -} - 295: 8b 5d fc mov -0x4(%ebp),%ebx - 298: 89 c8 mov %ecx,%eax - 29a: c9 leave - 29b: c3 ret - 29c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -000002a0 : - -void* memmove(void *vdst, const void *vsrc, int n) { - 2a0: 55 push %ebp - 2a1: 89 e5 mov %esp,%ebp - 2a3: 57 push %edi - 2a4: 8b 45 10 mov 0x10(%ebp),%eax - 2a7: 8b 55 08 mov 0x8(%ebp),%edx - 2aa: 56 push %esi - 2ab: 8b 75 0c mov 0xc(%ebp),%esi - char *dst; - const char *src; - - dst = vdst; - src = vsrc; - while (n-- > 0) { - 2ae: 85 c0 test %eax,%eax - 2b0: 7e 13 jle 2c5 - 2b2: 01 d0 add %edx,%eax - dst = vdst; - 2b4: 89 d7 mov %edx,%edi - 2b6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 2bd: 8d 76 00 lea 0x0(%esi),%esi - *dst++ = *src++; - 2c0: a4 movsb %ds:(%esi),%es:(%edi) - while (n-- > 0) { - 2c1: 39 f8 cmp %edi,%eax - 2c3: 75 fb jne 2c0 - } - return vdst; -} - 2c5: 5e pop %esi - 2c6: 89 d0 mov %edx,%eax - 2c8: 5f pop %edi - 2c9: 5d pop %ebp - 2ca: c3 ret - -000002cb : -name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 2cb: b8 01 00 00 00 mov $0x1,%eax - 2d0: cd 40 int $0x40 - 2d2: c3 ret - -000002d3 : -SYSCALL(exit) - 2d3: b8 02 00 00 00 mov $0x2,%eax - 2d8: cd 40 int $0x40 - 2da: c3 ret - -000002db : -SYSCALL(wait) - 2db: b8 03 00 00 00 mov $0x3,%eax - 2e0: cd 40 int $0x40 - 2e2: c3 ret - -000002e3 : -SYSCALL(pipe) - 2e3: b8 04 00 00 00 mov $0x4,%eax - 2e8: cd 40 int $0x40 - 2ea: c3 ret - -000002eb : -SYSCALL(read) - 2eb: b8 05 00 00 00 mov $0x5,%eax - 2f0: cd 40 int $0x40 - 2f2: c3 ret - -000002f3 : -SYSCALL(kill) - 2f3: b8 06 00 00 00 mov $0x6,%eax - 2f8: cd 40 int $0x40 - 2fa: c3 ret - -000002fb : -SYSCALL(exec) - 2fb: b8 07 00 00 00 mov $0x7,%eax - 300: cd 40 int $0x40 - 302: c3 ret - -00000303 : -SYSCALL(fstat) - 303: b8 08 00 00 00 mov $0x8,%eax - 308: cd 40 int $0x40 - 30a: c3 ret - -0000030b : -SYSCALL(chdir) - 30b: b8 09 00 00 00 mov $0x9,%eax - 310: cd 40 int $0x40 - 312: c3 ret - -00000313 : -SYSCALL(dup) - 313: b8 0a 00 00 00 mov $0xa,%eax - 318: cd 40 int $0x40 - 31a: c3 ret - -0000031b : -SYSCALL(getpid) - 31b: b8 0b 00 00 00 mov $0xb,%eax - 320: cd 40 int $0x40 - 322: c3 ret - -00000323 : -SYSCALL(sbrk) - 323: b8 0c 00 00 00 mov $0xc,%eax - 328: cd 40 int $0x40 - 32a: c3 ret - -0000032b : -SYSCALL(sleep) - 32b: b8 0d 00 00 00 mov $0xd,%eax - 330: cd 40 int $0x40 - 332: c3 ret - -00000333 : -SYSCALL(uptime) - 333: b8 0e 00 00 00 mov $0xe,%eax - 338: cd 40 int $0x40 - 33a: c3 ret - -0000033b : -SYSCALL(open) - 33b: b8 0f 00 00 00 mov $0xf,%eax - 340: cd 40 int $0x40 - 342: c3 ret - -00000343 : -SYSCALL(write) - 343: b8 10 00 00 00 mov $0x10,%eax - 348: cd 40 int $0x40 - 34a: c3 ret - -0000034b : -SYSCALL(mknod) - 34b: b8 11 00 00 00 mov $0x11,%eax - 350: cd 40 int $0x40 - 352: c3 ret - -00000353 : -SYSCALL(unlink) - 353: b8 12 00 00 00 mov $0x12,%eax - 358: cd 40 int $0x40 - 35a: c3 ret - -0000035b : -SYSCALL(link) - 35b: b8 13 00 00 00 mov $0x13,%eax - 360: cd 40 int $0x40 - 362: c3 ret - -00000363 : -SYSCALL(mkdir) - 363: b8 14 00 00 00 mov $0x14,%eax - 368: cd 40 int $0x40 - 36a: c3 ret - -0000036b : -SYSCALL(close) - 36b: b8 15 00 00 00 mov $0x15,%eax - 370: cd 40 int $0x40 - 372: c3 ret - -00000373 : -SYSCALL(getch) - 373: b8 16 00 00 00 mov $0x16,%eax - 378: cd 40 int $0x40 - 37a: c3 ret - -0000037b : -SYSCALL(greeting) - 37b: b8 17 00 00 00 mov $0x17,%eax - 380: cd 40 int $0x40 - 382: c3 ret - -00000383 : -SYSCALL(shutdown) - 383: b8 18 00 00 00 mov $0x18,%eax - 388: cd 40 int $0x40 - 38a: c3 ret - 38b: 66 90 xchg %ax,%ax - 38d: 66 90 xchg %ax,%ax - 38f: 90 nop - -00000390 : - -static void putc(int fd, char c) { - write(fd, &c, 1); -} - -static void printint(int fd, int xx, int base, int sgn) { - 390: 55 push %ebp - 391: 89 e5 mov %esp,%ebp - 393: 57 push %edi - 394: 56 push %esi - 395: 53 push %ebx - 396: 83 ec 3c sub $0x3c,%esp - 399: 89 4d c4 mov %ecx,-0x3c(%ebp) - uint x; - - neg = 0; - if (sgn && xx < 0) { - neg = 1; - x = -xx; - 39c: 89 d1 mov %edx,%ecx -static void printint(int fd, int xx, int base, int sgn) { - 39e: 89 45 b8 mov %eax,-0x48(%ebp) - if (sgn && xx < 0) { - 3a1: 85 d2 test %edx,%edx - 3a3: 0f 89 7f 00 00 00 jns 428 - 3a9: f6 45 08 01 testb $0x1,0x8(%ebp) - 3ad: 74 79 je 428 - neg = 1; - 3af: c7 45 bc 01 00 00 00 movl $0x1,-0x44(%ebp) - x = -xx; - 3b6: f7 d9 neg %ecx - } - else { - x = xx; - } - - i = 0; - 3b8: 31 db xor %ebx,%ebx - 3ba: 8d 75 d7 lea -0x29(%ebp),%esi - 3bd: 8d 76 00 lea 0x0(%esi),%esi - do { - buf[i++] = digits[x % base]; - 3c0: 89 c8 mov %ecx,%eax - 3c2: 31 d2 xor %edx,%edx - 3c4: 89 cf mov %ecx,%edi - 3c6: f7 75 c4 divl -0x3c(%ebp) - 3c9: 0f b6 92 fc 07 00 00 movzbl 0x7fc(%edx),%edx - 3d0: 89 45 c0 mov %eax,-0x40(%ebp) - 3d3: 89 d8 mov %ebx,%eax - 3d5: 8d 5b 01 lea 0x1(%ebx),%ebx - } - while ((x /= base) != 0); - 3d8: 8b 4d c0 mov -0x40(%ebp),%ecx - buf[i++] = digits[x % base]; - 3db: 88 14 1e mov %dl,(%esi,%ebx,1) - while ((x /= base) != 0); - 3de: 39 7d c4 cmp %edi,-0x3c(%ebp) - 3e1: 76 dd jbe 3c0 - if (neg) { - 3e3: 8b 4d bc mov -0x44(%ebp),%ecx - 3e6: 85 c9 test %ecx,%ecx - 3e8: 74 0c je 3f6 - buf[i++] = '-'; - 3ea: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) - buf[i++] = digits[x % base]; - 3ef: 89 d8 mov %ebx,%eax - buf[i++] = '-'; - 3f1: ba 2d 00 00 00 mov $0x2d,%edx - } - - while (--i >= 0) { - 3f6: 8b 7d b8 mov -0x48(%ebp),%edi - 3f9: 8d 5c 05 d7 lea -0x29(%ebp,%eax,1),%ebx - 3fd: eb 07 jmp 406 - 3ff: 90 nop - putc(fd, buf[i]); - 400: 0f b6 13 movzbl (%ebx),%edx - 403: 83 eb 01 sub $0x1,%ebx - write(fd, &c, 1); - 406: 83 ec 04 sub $0x4,%esp - 409: 88 55 d7 mov %dl,-0x29(%ebp) - 40c: 6a 01 push $0x1 - 40e: 56 push %esi - 40f: 57 push %edi - 410: e8 2e ff ff ff call 343 - while (--i >= 0) { - 415: 83 c4 10 add $0x10,%esp - 418: 39 de cmp %ebx,%esi - 41a: 75 e4 jne 400 - } -} - 41c: 8d 65 f4 lea -0xc(%ebp),%esp - 41f: 5b pop %ebx - 420: 5e pop %esi - 421: 5f pop %edi - 422: 5d pop %ebp - 423: c3 ret - 424: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - neg = 0; - 428: c7 45 bc 00 00 00 00 movl $0x0,-0x44(%ebp) - 42f: eb 87 jmp 3b8 - 431: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 438: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 43f: 90 nop - -00000440 : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void printf(int fd, const char *fmt, ...) { - 440: 55 push %ebp - 441: 89 e5 mov %esp,%ebp - 443: 57 push %edi - 444: 56 push %esi - 445: 53 push %ebx - 446: 83 ec 2c sub $0x2c,%esp - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for (i = 0; fmt[i]; i++) { - 449: 8b 5d 0c mov 0xc(%ebp),%ebx -void printf(int fd, const char *fmt, ...) { - 44c: 8b 75 08 mov 0x8(%ebp),%esi - for (i = 0; fmt[i]; i++) { - 44f: 0f b6 13 movzbl (%ebx),%edx - 452: 84 d2 test %dl,%dl - 454: 74 6a je 4c0 - ap = (uint*)(void*)&fmt + 1; - 456: 8d 45 10 lea 0x10(%ebp),%eax - 459: 83 c3 01 add $0x1,%ebx - write(fd, &c, 1); - 45c: 8d 7d e7 lea -0x19(%ebp),%edi - state = 0; - 45f: 31 c9 xor %ecx,%ecx - ap = (uint*)(void*)&fmt + 1; - 461: 89 45 d0 mov %eax,-0x30(%ebp) - 464: eb 36 jmp 49c - 466: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 46d: 8d 76 00 lea 0x0(%esi),%esi - 470: 89 4d d4 mov %ecx,-0x2c(%ebp) - c = fmt[i] & 0xff; - if (state == 0) { - if (c == '%') { - state = '%'; - 473: b9 25 00 00 00 mov $0x25,%ecx - if (c == '%') { - 478: 83 f8 25 cmp $0x25,%eax - 47b: 74 15 je 492 - write(fd, &c, 1); - 47d: 83 ec 04 sub $0x4,%esp - 480: 88 55 e7 mov %dl,-0x19(%ebp) - 483: 6a 01 push $0x1 - 485: 57 push %edi - 486: 56 push %esi - 487: e8 b7 fe ff ff call 343 - 48c: 8b 4d d4 mov -0x2c(%ebp),%ecx - } - else { - putc(fd, c); - 48f: 83 c4 10 add $0x10,%esp - for (i = 0; fmt[i]; i++) { - 492: 0f b6 13 movzbl (%ebx),%edx - 495: 83 c3 01 add $0x1,%ebx - 498: 84 d2 test %dl,%dl - 49a: 74 24 je 4c0 - c = fmt[i] & 0xff; - 49c: 0f b6 c2 movzbl %dl,%eax - if (state == 0) { - 49f: 85 c9 test %ecx,%ecx - 4a1: 74 cd je 470 - } - } - else if (state == '%') { - 4a3: 83 f9 25 cmp $0x25,%ecx - 4a6: 75 ea jne 492 - if (c == 'd') { - 4a8: 83 f8 25 cmp $0x25,%eax - 4ab: 0f 84 07 01 00 00 je 5b8 - 4b1: 83 e8 63 sub $0x63,%eax - 4b4: 83 f8 15 cmp $0x15,%eax - 4b7: 77 17 ja 4d0 - 4b9: ff 24 85 a4 07 00 00 jmp *0x7a4(,%eax,4) - putc(fd, c); - } - state = 0; - } - } -} - 4c0: 8d 65 f4 lea -0xc(%ebp),%esp - 4c3: 5b pop %ebx - 4c4: 5e pop %esi - 4c5: 5f pop %edi - 4c6: 5d pop %ebp - 4c7: c3 ret - 4c8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 4cf: 90 nop - write(fd, &c, 1); - 4d0: 83 ec 04 sub $0x4,%esp - 4d3: 88 55 d4 mov %dl,-0x2c(%ebp) - 4d6: 6a 01 push $0x1 - 4d8: 57 push %edi - 4d9: 56 push %esi - 4da: c6 45 e7 25 movb $0x25,-0x19(%ebp) - 4de: e8 60 fe ff ff call 343 - putc(fd, c); - 4e3: 0f b6 55 d4 movzbl -0x2c(%ebp),%edx - write(fd, &c, 1); - 4e7: 83 c4 0c add $0xc,%esp - 4ea: 88 55 e7 mov %dl,-0x19(%ebp) - 4ed: 6a 01 push $0x1 - 4ef: 57 push %edi - 4f0: 56 push %esi - 4f1: e8 4d fe ff ff call 343 - putc(fd, c); - 4f6: 83 c4 10 add $0x10,%esp - state = 0; - 4f9: 31 c9 xor %ecx,%ecx - 4fb: eb 95 jmp 492 - 4fd: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 16, 0); - 500: 83 ec 0c sub $0xc,%esp - 503: b9 10 00 00 00 mov $0x10,%ecx - 508: 6a 00 push $0x0 - 50a: 8b 45 d0 mov -0x30(%ebp),%eax - 50d: 8b 10 mov (%eax),%edx - 50f: 89 f0 mov %esi,%eax - 511: e8 7a fe ff ff call 390 - ap++; - 516: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 51a: 83 c4 10 add $0x10,%esp - state = 0; - 51d: 31 c9 xor %ecx,%ecx - 51f: e9 6e ff ff ff jmp 492 - 524: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - s = (char*)*ap; - 528: 8b 45 d0 mov -0x30(%ebp),%eax - 52b: 8b 10 mov (%eax),%edx - ap++; - 52d: 83 c0 04 add $0x4,%eax - 530: 89 45 d0 mov %eax,-0x30(%ebp) - if (s == 0) { - 533: 85 d2 test %edx,%edx - 535: 0f 84 8d 00 00 00 je 5c8 - while (*s != 0) { - 53b: 0f b6 02 movzbl (%edx),%eax - state = 0; - 53e: 31 c9 xor %ecx,%ecx - while (*s != 0) { - 540: 84 c0 test %al,%al - 542: 0f 84 4a ff ff ff je 492 - 548: 89 5d d4 mov %ebx,-0x2c(%ebp) - 54b: 89 d3 mov %edx,%ebx - 54d: 8d 76 00 lea 0x0(%esi),%esi - write(fd, &c, 1); - 550: 83 ec 04 sub $0x4,%esp - s++; - 553: 83 c3 01 add $0x1,%ebx - 556: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 559: 6a 01 push $0x1 - 55b: 57 push %edi - 55c: 56 push %esi - 55d: e8 e1 fd ff ff call 343 - while (*s != 0) { - 562: 0f b6 03 movzbl (%ebx),%eax - 565: 83 c4 10 add $0x10,%esp - 568: 84 c0 test %al,%al - 56a: 75 e4 jne 550 - state = 0; - 56c: 8b 5d d4 mov -0x2c(%ebp),%ebx - 56f: 31 c9 xor %ecx,%ecx - 571: e9 1c ff ff ff jmp 492 - 576: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 57d: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 10, 1); - 580: 83 ec 0c sub $0xc,%esp - 583: b9 0a 00 00 00 mov $0xa,%ecx - 588: 6a 01 push $0x1 - 58a: e9 7b ff ff ff jmp 50a - 58f: 90 nop - putc(fd, *ap); - 590: 8b 45 d0 mov -0x30(%ebp),%eax - write(fd, &c, 1); - 593: 83 ec 04 sub $0x4,%esp - putc(fd, *ap); - 596: 8b 00 mov (%eax),%eax - write(fd, &c, 1); - 598: 6a 01 push $0x1 - 59a: 57 push %edi - 59b: 56 push %esi - putc(fd, *ap); - 59c: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 59f: e8 9f fd ff ff call 343 - ap++; - 5a4: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 5a8: 83 c4 10 add $0x10,%esp - state = 0; - 5ab: 31 c9 xor %ecx,%ecx - 5ad: e9 e0 fe ff ff jmp 492 - 5b2: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - putc(fd, c); - 5b8: 88 55 e7 mov %dl,-0x19(%ebp) - write(fd, &c, 1); - 5bb: 83 ec 04 sub $0x4,%esp - 5be: e9 2a ff ff ff jmp 4ed - 5c3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 5c7: 90 nop - s = "(null)"; - 5c8: ba 9b 07 00 00 mov $0x79b,%edx - while (*s != 0) { - 5cd: 89 5d d4 mov %ebx,-0x2c(%ebp) - 5d0: b8 28 00 00 00 mov $0x28,%eax - 5d5: 89 d3 mov %edx,%ebx - 5d7: e9 74 ff ff ff jmp 550 - 5dc: 66 90 xchg %ax,%ax - 5de: 66 90 xchg %ax,%ax - -000005e0 : -typedef union header Header; - -static Header base; -static Header *freep; - -void free(void *ap) { - 5e0: 55 push %ebp - Header *bp, *p; - - bp = (Header*)ap - 1; - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 5e1: a1 b4 0a 00 00 mov 0xab4,%eax -void free(void *ap) { - 5e6: 89 e5 mov %esp,%ebp - 5e8: 57 push %edi - 5e9: 56 push %esi - 5ea: 53 push %ebx - 5eb: 8b 5d 08 mov 0x8(%ebp),%ebx - bp = (Header*)ap - 1; - 5ee: 8d 4b f8 lea -0x8(%ebx),%ecx - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 5f1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 5f8: 89 c2 mov %eax,%edx - 5fa: 8b 00 mov (%eax),%eax - 5fc: 39 ca cmp %ecx,%edx - 5fe: 73 30 jae 630 - 600: 39 c1 cmp %eax,%ecx - 602: 72 04 jb 608 - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 604: 39 c2 cmp %eax,%edx - 606: 72 f0 jb 5f8 - break; - } - } - if (bp + bp->s.size == p->s.ptr) { - 608: 8b 73 fc mov -0x4(%ebx),%esi - 60b: 8d 3c f1 lea (%ecx,%esi,8),%edi - 60e: 39 f8 cmp %edi,%eax - 610: 74 30 je 642 - bp->s.size += p->s.ptr->s.size; - bp->s.ptr = p->s.ptr->s.ptr; - 612: 89 43 f8 mov %eax,-0x8(%ebx) - } - else { - bp->s.ptr = p->s.ptr; - } - if (p + p->s.size == bp) { - 615: 8b 42 04 mov 0x4(%edx),%eax - 618: 8d 34 c2 lea (%edx,%eax,8),%esi - 61b: 39 f1 cmp %esi,%ecx - 61d: 74 3a je 659 - p->s.size += bp->s.size; - p->s.ptr = bp->s.ptr; - 61f: 89 0a mov %ecx,(%edx) - } - else { - p->s.ptr = bp; - } - freep = p; -} - 621: 5b pop %ebx - freep = p; - 622: 89 15 b4 0a 00 00 mov %edx,0xab4 -} - 628: 5e pop %esi - 629: 5f pop %edi - 62a: 5d pop %ebp - 62b: c3 ret - 62c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 630: 39 c2 cmp %eax,%edx - 632: 72 c4 jb 5f8 - 634: 39 c1 cmp %eax,%ecx - 636: 73 c0 jae 5f8 - if (bp + bp->s.size == p->s.ptr) { - 638: 8b 73 fc mov -0x4(%ebx),%esi - 63b: 8d 3c f1 lea (%ecx,%esi,8),%edi - 63e: 39 f8 cmp %edi,%eax - 640: 75 d0 jne 612 - bp->s.size += p->s.ptr->s.size; - 642: 03 70 04 add 0x4(%eax),%esi - 645: 89 73 fc mov %esi,-0x4(%ebx) - bp->s.ptr = p->s.ptr->s.ptr; - 648: 8b 02 mov (%edx),%eax - 64a: 8b 00 mov (%eax),%eax - 64c: 89 43 f8 mov %eax,-0x8(%ebx) - if (p + p->s.size == bp) { - 64f: 8b 42 04 mov 0x4(%edx),%eax - 652: 8d 34 c2 lea (%edx,%eax,8),%esi - 655: 39 f1 cmp %esi,%ecx - 657: 75 c6 jne 61f - p->s.size += bp->s.size; - 659: 03 43 fc add -0x4(%ebx),%eax - freep = p; - 65c: 89 15 b4 0a 00 00 mov %edx,0xab4 - p->s.size += bp->s.size; - 662: 89 42 04 mov %eax,0x4(%edx) - p->s.ptr = bp->s.ptr; - 665: 8b 4b f8 mov -0x8(%ebx),%ecx - 668: 89 0a mov %ecx,(%edx) -} - 66a: 5b pop %ebx - 66b: 5e pop %esi - 66c: 5f pop %edi - 66d: 5d pop %ebp - 66e: c3 ret - 66f: 90 nop - -00000670 : - hp->s.size = nu; - free((void*)(hp + 1)); - return freep; -} - -void* malloc(uint nbytes) { - 670: 55 push %ebp - 671: 89 e5 mov %esp,%ebp - 673: 57 push %edi - 674: 56 push %esi - 675: 53 push %ebx - 676: 83 ec 1c sub $0x1c,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 679: 8b 45 08 mov 0x8(%ebp),%eax - if ((prevp = freep) == 0) { - 67c: 8b 3d b4 0a 00 00 mov 0xab4,%edi - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 682: 8d 70 07 lea 0x7(%eax),%esi - 685: c1 ee 03 shr $0x3,%esi - 688: 83 c6 01 add $0x1,%esi - if ((prevp = freep) == 0) { - 68b: 85 ff test %edi,%edi - 68d: 0f 84 9d 00 00 00 je 730 - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 693: 8b 17 mov (%edi),%edx - if (p->s.size >= nunits) { - 695: 8b 4a 04 mov 0x4(%edx),%ecx - 698: 39 f1 cmp %esi,%ecx - 69a: 73 6a jae 706 - 69c: bb 00 10 00 00 mov $0x1000,%ebx - 6a1: 39 de cmp %ebx,%esi - 6a3: 0f 43 de cmovae %esi,%ebx - p = sbrk(nu * sizeof(Header)); - 6a6: 8d 04 dd 00 00 00 00 lea 0x0(,%ebx,8),%eax - 6ad: 89 45 e4 mov %eax,-0x1c(%ebp) - 6b0: eb 17 jmp 6c9 - 6b2: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 6b8: 8b 02 mov (%edx),%eax - if (p->s.size >= nunits) { - 6ba: 8b 48 04 mov 0x4(%eax),%ecx - 6bd: 39 f1 cmp %esi,%ecx - 6bf: 73 4f jae 710 - p->s.size = nunits; - } - freep = prevp; - return (void*)(p + 1); - } - if (p == freep) { - 6c1: 8b 3d b4 0a 00 00 mov 0xab4,%edi - 6c7: 89 c2 mov %eax,%edx - 6c9: 39 d7 cmp %edx,%edi - 6cb: 75 eb jne 6b8 - p = sbrk(nu * sizeof(Header)); - 6cd: 83 ec 0c sub $0xc,%esp - 6d0: ff 75 e4 push -0x1c(%ebp) - 6d3: e8 4b fc ff ff call 323 - if (p == (char*)-1) { - 6d8: 83 c4 10 add $0x10,%esp - 6db: 83 f8 ff cmp $0xffffffff,%eax - 6de: 74 1c je 6fc - hp->s.size = nu; - 6e0: 89 58 04 mov %ebx,0x4(%eax) - free((void*)(hp + 1)); - 6e3: 83 ec 0c sub $0xc,%esp - 6e6: 83 c0 08 add $0x8,%eax - 6e9: 50 push %eax - 6ea: e8 f1 fe ff ff call 5e0 - return freep; - 6ef: 8b 15 b4 0a 00 00 mov 0xab4,%edx - if ((p = morecore(nunits)) == 0) { - 6f5: 83 c4 10 add $0x10,%esp - 6f8: 85 d2 test %edx,%edx - 6fa: 75 bc jne 6b8 - return 0; - } - } - } -} - 6fc: 8d 65 f4 lea -0xc(%ebp),%esp - return 0; - 6ff: 31 c0 xor %eax,%eax -} - 701: 5b pop %ebx - 702: 5e pop %esi - 703: 5f pop %edi - 704: 5d pop %ebp - 705: c3 ret - if (p->s.size >= nunits) { - 706: 89 d0 mov %edx,%eax - 708: 89 fa mov %edi,%edx - 70a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - if (p->s.size == nunits) { - 710: 39 ce cmp %ecx,%esi - 712: 74 4c je 760 - p->s.size -= nunits; - 714: 29 f1 sub %esi,%ecx - 716: 89 48 04 mov %ecx,0x4(%eax) - p += p->s.size; - 719: 8d 04 c8 lea (%eax,%ecx,8),%eax - p->s.size = nunits; - 71c: 89 70 04 mov %esi,0x4(%eax) - freep = prevp; - 71f: 89 15 b4 0a 00 00 mov %edx,0xab4 -} - 725: 8d 65 f4 lea -0xc(%ebp),%esp - return (void*)(p + 1); - 728: 83 c0 08 add $0x8,%eax -} - 72b: 5b pop %ebx - 72c: 5e pop %esi - 72d: 5f pop %edi - 72e: 5d pop %ebp - 72f: c3 ret - base.s.ptr = freep = prevp = &base; - 730: c7 05 b4 0a 00 00 b8 movl $0xab8,0xab4 - 737: 0a 00 00 - base.s.size = 0; - 73a: bf b8 0a 00 00 mov $0xab8,%edi - base.s.ptr = freep = prevp = &base; - 73f: c7 05 b8 0a 00 00 b8 movl $0xab8,0xab8 - 746: 0a 00 00 - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 749: 89 fa mov %edi,%edx - base.s.size = 0; - 74b: c7 05 bc 0a 00 00 00 movl $0x0,0xabc - 752: 00 00 00 - if (p->s.size >= nunits) { - 755: e9 42 ff ff ff jmp 69c - 75a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - prevp->s.ptr = p->s.ptr; - 760: 8b 08 mov (%eax),%ecx - 762: 89 0a mov %ecx,(%edx) - 764: eb b9 jmp 71f diff --git a/mkdir.d b/mkdir.d deleted file mode 100644 index 0c77808..0000000 --- a/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/mkdir.o b/mkdir.o deleted file mode 100644 index e93daa9890fdaf9e69164838865615047c7c0395..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3460 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 diff --git a/mp.d b/mp.d deleted file mode 100644 index 0714441..0000000 --- a/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/mp.o b/mp.o deleted file mode 100644 index b92affdac7471f87fcf4aafd9d512e4b7aac5fa7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11516 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 diff --git a/pipe.d b/pipe.d deleted file mode 100644 index 3d0eac9..0000000 --- a/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 spinlock.h sleeplock.h file.h diff --git a/pipe.o b/pipe.o deleted file mode 100644 index d5dd9774981d42645c5d3bb42bb11f4903ba7458..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11028 zcma)C3v?9MdA@gM?(9mtdP^WcfP_Ijf`kMDgDuQUvUwR4WI%qBm3CLGkyh({0H$`p z7GTS=urN*&5+6g8xN#FZB~AP&?OHtc?DWl-{1AcozcuJCZcC<0K3VH^wOZ~%(tvm>$J+kihaRDe46iTukBv(D^-3s=TRJq^cIa_9j1gVndq^i5l7bNXTC4s%*DnC}j6Ep7hEq3`dn zy)b`dt(>K6K0>3CXWHDB`<>~7&&y@EmS&5Gb;_%Cq}*$)U6ZEv7O!@sKr@D3*Gm#M zXSm|LzFwkAB~mfrgoIE+Iw)04I)s!{r;#+<8QUXD4gqEL5*#OUSrs{fAE2=%ML1a1 zYbmh;bu9R1NbKsHD3QTW(q;h;PBFcvI4Y6Mioiz@wZ*o+0+Cz?C)+O6YgOJuXE%iT z7LL`E$_YDAcDpM?&`R}WgdHp#023C0z3>b=lefXV;5-gf=w2!cmIG=uU0U!C=&7WG zwFR%hW*TW{PADU$lalj8(Nv$PC2ci?Qld^v7ZfB=+zf5o6pHNb6IWv)ZSJZ3j%7P9gnN2#lR0Osm%1&ojD?q*knbT*6_%Sm5nsKa5rb#%-Fv||g z>)`JUXr@qJg|;}U5dFh2YZlHOT2m@3X_nSZxm-cBj5e!;*+SuDwWeB5rCClhldYcg zBH`=~twOXKE0#zJXOH%&mDjPHy}F#4RxGktICpAhjuqu5`%0rOGKv_g{*&VFsS5&^&*&`cXN!nsG6wpP}&&U-bp-ohk1gPPtb zBUBvJ%q9#?IEOUdAs16|STkF!C=~Z;`Ud$$D(=_JHY*OrkfyujUMe2Y%uQA=6vLXn zMP5V2gPOU`>WgNDGoqP~$XnRhBbw>9Ab&`cQTcUxjA|w>9L{!)GnFg#l(K@)akhIQ zQ+8-GK*)`dD5uKB>E&42j8JL<7j4k$MKa}9hM-8vawJoMie`A6lz&B+U_l?4&&rQd zQ=pkA~M&ushrFb=jd}bC>!WFxAHZ3 zgsoH}D%3n(e5rhjnh)vXE3Ir?sQDA?;9o5{4%MJrR3m>wt46(0YvotTEYSWlTXwx058a+ zZV^XoMPs{#TWsdxFmsk@#_@8N>YPD&J2hn!_QNF%5=^<)Z1n1^40S@&AwNk?m1efc z2gpp&%nkB$WF~56n|z7Us&$?&`8+j~3U5MyTZF^0hdDF`G|efp)FK##>v7=KTZ_ZO zS%cwfAr`&zBiAeai>OWeF2CiRAo7&ExwaPKbsJwol-35m-qu1gA6X&kQD3qE*9 z8PBNwkj@l^yAkiuL$uXqg(qRQ?}YCw3VBZ6^S5LAAw)R%g3r6WRf_6oIYyGzuYjG# zg<5zksOfLhkgO==<3#&!$!nkT0TdbMRpvYtKLN@|?+;>ZDG{H-R#`_yWd~I8nY6Ej zK^S{kQp6kS#e3Fb>{SWTtJ~2H<~Hp1AK=6R*j1>ipTs;6og{`qaIE$*5Nv?`MMH@4 zBz(8%dQjL!F!Is50$tCRn(_5)nZv`2z{gaW1SvLIT3U?*oF~pOPK8&);Qewqami1GJ*u6@g z*(+wU6bF{S2iiA)(3!I!m~g^z5IWD_7-GU{5S%6Z4Pzt9e+S1lb_= z;HSYn1Y(5DC&94Bk7F0J8DJ?W8K(36f*$bN`Lhsy8oPGpZTCs+bLcGW8j!DZK#hhF zb_()WDBAB6M?i29+gz_)-NNB2o%=c{Il+}rBhqv-stc)A) zvhq<~HXHd2c3sn}AkLBDP~QXbHgn_`U<+6;jxMZzw=Ds**dS!i9wQalt} z5Cq2y?6u-nYGF z>Kx>#D_mDm6xs#P!bZ7b5;E5XDK48msdWqD3j&x%IbZ(j*3fts`<>J z^IRIGs^w3Fp1_9PD<`pM6a6@K6WCx}sT#$l<6c+MIti~JWpY+=MaZ5$Wjf0!McXDX z*1er##*AxJ4JH61o{DYS3 z)fJ{KWDRO*LBU#%ePJ(lg{DN;NqEk zX~bIXGp`Y`{NPBda6Q5!3aGKoIj>FxtfP)|B5*QbWrNPiz-i5&4xAyMw={-9V;DAu zLB})X>5XOmqWeA9YC7S3&wbyOoyOTYZ;vYG7*$6Va~xG~lD||PH0rQX2lXcu#Qe4W z35PL1;S8zZ(OcZ3j$3mAMqeJ|{77f5BQ~yV&T;!mji>E@C63#iv(_UJInE>YahtUq zx1ZMh)Ani2doKCfIv%uW{h&2s(R#!>OCBG%#x|#8RI$C;wX*i-G60ZkP$nAM*n@_=*RWVm%KZ=HW&jqCDKr!yP>E{woghpf>2WiOXx1RBnaZ;Fdk9 z3YNPYl=`YFaHR@10xsvIdyOiHD*13+EpnTbs;I00Q9PXD+NPffP>#Z`Tyn%t#kG4e}ZySr48yZ0!y zquR18t|r5-m3BpFAm^&gJ#kdwbx29O@LqHR?v{JETA)!X7HYMssUB!9?kVG{fV*{M(!B4oI^^!>Aha_x@v;Z-;ti$o*ceKB!u+m20}H?@oQ>sN2NakEGy z2cj{tW$UI*t5$Dp7ny7%8xxtG1LLBo$9b`eP!U z+1)JSiN07*-#{iNBB?|V^6<0Xo^*miV!hE=rbk30*@(z7SU-}bwTr-qnUBzqV7#3G+)5vgcwN7iST_{1`wX!csNsCmc2 z7Lh}qw69q#P!&diTx_;4UMiC8Rw9|}7o8j1+dI~6x=svm7$TRn;$e*qiN3V(yBkV=+!rGY<>d&$J$%nGCUY)7H-RHh+xGO(N+{ zI>(@Mq+^&KEDKZ^OGdb^4?f7mQM75jih^a zE>A33x}>(Dw>R2d+prl%@#H{5cP`PFO(Z=glZAD*0joNa!5n(Rf&N6cL9fe()Btm) zePfKU0qx7ida?sXm`cQ;jb!dj_Uud#BnNVthFo$_A{lMS@)XHHsXNoq(-+C?^t}@U z=v>dvSTxrcON(qI!}f8VrxHm$^Liqdarto#i2ghEtnuI(CX$J)He{>xxtQvWCek9= z)0gn(N^5W0eEsTm?P8a=bQkpF<7H$)CcdNd&P+#opm#welZjdlW?Y2QDUHJT} zZ>@R}#_K|DJ~`fh9(LjTTzj8=*cnvTDeZMm`>hIz7ML8sz7qNP+MKsveb^p! ztn2eRHikO$^oEdNp69TihabNJhay+-;r6#|Xf|{P^@cIXu5&Ze0{oKp+i!S4@x{T*@pg(`~=d+`~ zG5%Jc0g}JvGM>+j=gmCQpPzXAjrKX80h0du95%1 z@c%p27hYsKMcNaumGR?m~Vo?D-1Rnyuo17-~of922UD1W$;CVuNr*A;5!C? zXVAjA!t-V-5&35mQPYPEE;ZO{aGk;H4Q?UA|7L?xgZ&0~8{BVjh=@E78~!Q7KTAa3 zGX}qH@E;7mVenrJ{)~vc7YzQ!;2#aT$U%LH!D@puh}h>E9{--vdD{%GBVz9~{C0!4 z5D_nCFllg)!29{Z&2Y{NB;tY!c+_gCs?5TWC97O~kNf4d@owZWAJ+YPQa$Y&4Q-C&SE`7mxR z&;n9UJZO+V;*x*YplHn8*^g&$U^eaHPM^X(xlzAAHR?Ck#%}!V-ZPZ*xLxP1saPUHNC(Erb_2{!auh@BhlaQV(} z)Nx;9Ft0#CL44TuH$U$R2*!^iSc{)w5Rl{GI`zk)*BE$z3*tHJB-W6>`SJ9#g)am? zf#c4<}yxj~epkX?g zjXLgU4Eph&f*r35{^r}g00C)#dxHyd+~(_Ehm5p81^*1YT3-n{$HDD2?BmC~wjRG8 zLdNl;MfvfLj|H)KA1|#ZA>=bDmlxx4ei&<98^oj2%(rRCx%nkvd0b+bLf)Tg3-93D F{U56r*|q=x diff --git a/printf.d b/printf.d deleted file mode 100644 index ddd3a8d..0000000 --- a/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/printf.o b/printf.o deleted file mode 100644 index 940bfcda1807fc785188621c97252a03e6a2e472..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7136 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 = (struct context*)sp; memset(p->context, 0, sizeof *p->context); p->context->eip = (uint)forkret; - + p->consoleIndex = 0; + return p; } @@ -141,6 +142,9 @@ void userinit(void) { safestrcpy(p->name, "initcode", sizeof(p->name)); p->cwd = namei("/"); + p->consoleIndex = 0; + safestrcpy(p->title, "Shell (Root)", sizeof(p->title)); + // this assignment to p->state lets other cores // run this process. the acquire forces the above // writes to be visible, and the lock is also needed @@ -215,6 +219,7 @@ int fork(void) { acquire(&ptable.lock); np->state = RUNNABLE; + np->consoleIndex = curproc->consoleIndex; release(&ptable.lock); @@ -255,12 +260,18 @@ void exit(void) { for (p = ptable.proc; p < &ptable.proc[NPROC]; p++) { if (p->parent == curproc) { p->parent = initproc; + p->consoleIndex = 0; if (p->state == ZOMBIE) { wakeup1(initproc); } } } + if (curproc->consoleIndex != 0 && curproc->consoleIndex == getcurrentconsoleindex()) + { + closeconsole(curproc->consoleIndex); + } + // Jump into the scheduler, never to return. curproc->state = ZOMBIE; sched(); diff --git a/proc.d b/proc.d deleted file mode 100644 index 9396fef..0000000 --- a/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/proc.h b/proc.h index 124590e..ab10b54 100644 --- a/proc.h +++ b/proc.h @@ -48,6 +48,8 @@ struct proc { struct file *ofile[NOFILE]; // Open files struct inode *cwd; // Current directory char name[16]; // Process name (debugging) + uint consoleIndex; + char title[20]; }; // Process memory is laid out contiguously, low addresses first: diff --git a/proc.o b/proc.o deleted file mode 100644 index 23afe49ac5eb7285243c06924b9ec0cf9db5a9e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24408 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 diff --git a/rm.asm b/rm.asm deleted file mode 100644 index 1ed1103..0000000 --- a/rm.asm +++ /dev/null @@ -1,1190 +0,0 @@ - -_rm: file format elf32-i386 - - -Disassembly of section .text: - -00000000
    : -#include "types.h" -#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 push -0x4(%ecx) - a: 55 push %ebp - b: 89 e5 mov %esp,%ebp - d: 57 push %edi - e: bf 01 00 00 00 mov $0x1,%edi - 13: 56 push %esi - 14: 53 push %ebx - 15: 51 push %ecx - 16: 83 ec 08 sub $0x8,%esp - 19: 8b 59 04 mov 0x4(%ecx),%ebx - 1c: 8b 31 mov (%ecx),%esi - 1e: 83 c3 04 add $0x4,%ebx - int i; - - if (argc < 2) { - 21: 83 fe 01 cmp $0x1,%esi - 24: 7e 3e jle 64 - 26: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 2d: 8d 76 00 lea 0x0(%esi),%esi - printf(2, "Usage: rm files...\n"); - exit(); - } - - for (i = 1; i < argc; i++) { - if (unlink(argv[i]) < 0) { - 30: 83 ec 0c sub $0xc,%esp - 33: ff 33 push (%ebx) - 35: e8 19 03 00 00 call 353 - 3a: 83 c4 10 add $0x10,%esp - 3d: 85 c0 test %eax,%eax - 3f: 78 0f js 50 - for (i = 1; i < argc; i++) { - 41: 83 c7 01 add $0x1,%edi - 44: 83 c3 04 add $0x4,%ebx - 47: 39 fe cmp %edi,%esi - 49: 75 e5 jne 30 - printf(2, "rm: %s failed to delete\n", argv[i]); - break; - } - } - - exit(); - 4b: e8 83 02 00 00 call 2d3 - printf(2, "rm: %s failed to delete\n", argv[i]); - 50: 50 push %eax - 51: ff 33 push (%ebx) - 53: 68 7c 07 00 00 push $0x77c - 58: 6a 02 push $0x2 - 5a: e8 e1 03 00 00 call 440 - break; - 5f: 83 c4 10 add $0x10,%esp - 62: eb e7 jmp 4b - printf(2, "Usage: rm files...\n"); - 64: 52 push %edx - 65: 52 push %edx - 66: 68 68 07 00 00 push $0x768 - 6b: 6a 02 push $0x2 - 6d: e8 ce 03 00 00 call 440 - exit(); - 72: e8 5c 02 00 00 call 2d3 - 77: 66 90 xchg %ax,%ax - 79: 66 90 xchg %ax,%ax - 7b: 66 90 xchg %ax,%ax - 7d: 66 90 xchg %ax,%ax - 7f: 90 nop - -00000080 : -#include "stat.h" -#include "fcntl.h" -#include "user.h" -#include "x86.h" - -char*strcpy(char *s, const char *t) { - 80: 55 push %ebp - char *os; - - os = s; - while ((*s++ = *t++) != 0) { - 81: 31 c0 xor %eax,%eax -char*strcpy(char *s, const char *t) { - 83: 89 e5 mov %esp,%ebp - 85: 53 push %ebx - 86: 8b 4d 08 mov 0x8(%ebp),%ecx - 89: 8b 5d 0c mov 0xc(%ebp),%ebx - 8c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - while ((*s++ = *t++) != 0) { - 90: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 94: 88 14 01 mov %dl,(%ecx,%eax,1) - 97: 83 c0 01 add $0x1,%eax - 9a: 84 d2 test %dl,%dl - 9c: 75 f2 jne 90 - ; - } - return os; -} - 9e: 8b 5d fc mov -0x4(%ebp),%ebx - a1: 89 c8 mov %ecx,%eax - a3: c9 leave - a4: c3 ret - a5: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - ac: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -000000b0 : - -int strcmp(const char *p, const char *q) { - b0: 55 push %ebp - b1: 89 e5 mov %esp,%ebp - b3: 53 push %ebx - b4: 8b 55 08 mov 0x8(%ebp),%edx - b7: 8b 4d 0c mov 0xc(%ebp),%ecx - while (*p && *p == *q) { - ba: 0f b6 02 movzbl (%edx),%eax - bd: 84 c0 test %al,%al - bf: 75 17 jne d8 - c1: eb 3a jmp fd - c3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - c7: 90 nop - c8: 0f b6 42 01 movzbl 0x1(%edx),%eax - p++, q++; - cc: 83 c2 01 add $0x1,%edx - cf: 8d 59 01 lea 0x1(%ecx),%ebx - while (*p && *p == *q) { - d2: 84 c0 test %al,%al - d4: 74 1a je f0 - p++, q++; - d6: 89 d9 mov %ebx,%ecx - while (*p && *p == *q) { - d8: 0f b6 19 movzbl (%ecx),%ebx - db: 38 c3 cmp %al,%bl - dd: 74 e9 je c8 - } - return (uchar) * p - (uchar) * q; - df: 29 d8 sub %ebx,%eax -} - e1: 8b 5d fc mov -0x4(%ebp),%ebx - e4: c9 leave - e5: c3 ret - e6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - ed: 8d 76 00 lea 0x0(%esi),%esi - return (uchar) * p - (uchar) * q; - f0: 0f b6 59 01 movzbl 0x1(%ecx),%ebx - f4: 31 c0 xor %eax,%eax - f6: 29 d8 sub %ebx,%eax -} - f8: 8b 5d fc mov -0x4(%ebp),%ebx - fb: c9 leave - fc: c3 ret - return (uchar) * p - (uchar) * q; - fd: 0f b6 19 movzbl (%ecx),%ebx - 100: 31 c0 xor %eax,%eax - 102: eb db jmp df - 104: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 10b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 10f: 90 nop - -00000110 : - -uint strlen(const char *s) { - 110: 55 push %ebp - 111: 89 e5 mov %esp,%ebp - 113: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - for (n = 0; s[n]; n++) { - 116: 80 3a 00 cmpb $0x0,(%edx) - 119: 74 15 je 130 - 11b: 31 c0 xor %eax,%eax - 11d: 8d 76 00 lea 0x0(%esi),%esi - 120: 83 c0 01 add $0x1,%eax - 123: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - 127: 89 c1 mov %eax,%ecx - 129: 75 f5 jne 120 - ; - } - return n; -} - 12b: 89 c8 mov %ecx,%eax - 12d: 5d pop %ebp - 12e: c3 ret - 12f: 90 nop - for (n = 0; s[n]; n++) { - 130: 31 c9 xor %ecx,%ecx -} - 132: 5d pop %ebp - 133: 89 c8 mov %ecx,%eax - 135: c3 ret - 136: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 13d: 8d 76 00 lea 0x0(%esi),%esi - -00000140 : - -void* memset(void *dst, int c, uint n) { - 140: 55 push %ebp - 141: 89 e5 mov %esp,%ebp - 143: 57 push %edi - 144: 8b 55 08 mov 0x8(%ebp),%edx - "d" (port), "0" (addr), "1" (cnt) : - "cc"); -} - -static inline void stosb(void *addr, int data, int cnt) { - asm volatile ("cld; rep stosb" : - 147: 8b 4d 10 mov 0x10(%ebp),%ecx - 14a: 8b 45 0c mov 0xc(%ebp),%eax - 14d: 89 d7 mov %edx,%edi - 14f: fc cld - 150: f3 aa rep stos %al,%es:(%edi) - stosb(dst, c, n); - return dst; -} - 152: 8b 7d fc mov -0x4(%ebp),%edi - 155: 89 d0 mov %edx,%eax - 157: c9 leave - 158: c3 ret - 159: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -00000160 : - -char* strchr(const char *s, char c) { - 160: 55 push %ebp - 161: 89 e5 mov %esp,%ebp - 163: 8b 45 08 mov 0x8(%ebp),%eax - 166: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx - for (; *s; s++) { - 16a: 0f b6 10 movzbl (%eax),%edx - 16d: 84 d2 test %dl,%dl - 16f: 75 12 jne 183 - 171: eb 1d jmp 190 - 173: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 177: 90 nop - 178: 0f b6 50 01 movzbl 0x1(%eax),%edx - 17c: 83 c0 01 add $0x1,%eax - 17f: 84 d2 test %dl,%dl - 181: 74 0d je 190 - if (*s == c) { - 183: 38 d1 cmp %dl,%cl - 185: 75 f1 jne 178 - return (char*)s; - } - } - return 0; -} - 187: 5d pop %ebp - 188: c3 ret - 189: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - return 0; - 190: 31 c0 xor %eax,%eax -} - 192: 5d pop %ebp - 193: c3 ret - 194: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 19b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 19f: 90 nop - -000001a0 : - -char* gets(char *buf, int max) { - 1a0: 55 push %ebp - 1a1: 89 e5 mov %esp,%ebp - 1a3: 57 push %edi - 1a4: 56 push %esi - int i, cc; - char c; - - for (i = 0; i + 1 < max;) { - cc = read(0, &c, 1); - 1a5: 8d 7d e7 lea -0x19(%ebp),%edi -char* gets(char *buf, int max) { - 1a8: 53 push %ebx - for (i = 0; i + 1 < max;) { - 1a9: 31 db xor %ebx,%ebx -char* gets(char *buf, int max) { - 1ab: 83 ec 1c sub $0x1c,%esp - for (i = 0; i + 1 < max;) { - 1ae: eb 27 jmp 1d7 - cc = read(0, &c, 1); - 1b0: 83 ec 04 sub $0x4,%esp - 1b3: 6a 01 push $0x1 - 1b5: 57 push %edi - 1b6: 6a 00 push $0x0 - 1b8: e8 2e 01 00 00 call 2eb - if (cc < 1) { - 1bd: 83 c4 10 add $0x10,%esp - 1c0: 85 c0 test %eax,%eax - 1c2: 7e 1d jle 1e1 - break; - } - buf[i++] = c; - 1c4: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 1c8: 8b 55 08 mov 0x8(%ebp),%edx - 1cb: 88 44 1a ff mov %al,-0x1(%edx,%ebx,1) - if (c == '\n' || c == '\r') { - 1cf: 3c 0a cmp $0xa,%al - 1d1: 74 1d je 1f0 - 1d3: 3c 0d cmp $0xd,%al - 1d5: 74 19 je 1f0 - for (i = 0; i + 1 < max;) { - 1d7: 89 de mov %ebx,%esi - 1d9: 83 c3 01 add $0x1,%ebx - 1dc: 3b 5d 0c cmp 0xc(%ebp),%ebx - 1df: 7c cf jl 1b0 - break; - } - } - buf[i] = '\0'; - 1e1: 8b 45 08 mov 0x8(%ebp),%eax - 1e4: c6 04 30 00 movb $0x0,(%eax,%esi,1) - return buf; -} - 1e8: 8d 65 f4 lea -0xc(%ebp),%esp - 1eb: 5b pop %ebx - 1ec: 5e pop %esi - 1ed: 5f pop %edi - 1ee: 5d pop %ebp - 1ef: c3 ret - buf[i] = '\0'; - 1f0: 8b 45 08 mov 0x8(%ebp),%eax - 1f3: 89 de mov %ebx,%esi - 1f5: c6 04 30 00 movb $0x0,(%eax,%esi,1) -} - 1f9: 8d 65 f4 lea -0xc(%ebp),%esp - 1fc: 5b pop %ebx - 1fd: 5e pop %esi - 1fe: 5f pop %edi - 1ff: 5d pop %ebp - 200: c3 ret - 201: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 208: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 20f: 90 nop - -00000210 : - -int stat(const char *n, struct stat *st) { - 210: 55 push %ebp - 211: 89 e5 mov %esp,%ebp - 213: 56 push %esi - 214: 53 push %ebx - int fd; - int r; - - fd = open(n, O_RDONLY); - 215: 83 ec 08 sub $0x8,%esp - 218: 6a 00 push $0x0 - 21a: ff 75 08 push 0x8(%ebp) - 21d: e8 19 01 00 00 call 33b - if (fd < 0) { - 222: 83 c4 10 add $0x10,%esp - 225: 85 c0 test %eax,%eax - 227: 78 27 js 250 - return -1; - } - r = fstat(fd, st); - 229: 83 ec 08 sub $0x8,%esp - 22c: ff 75 0c push 0xc(%ebp) - 22f: 89 c3 mov %eax,%ebx - 231: 50 push %eax - 232: e8 cc 00 00 00 call 303 - close(fd); - 237: 89 1c 24 mov %ebx,(%esp) - r = fstat(fd, st); - 23a: 89 c6 mov %eax,%esi - close(fd); - 23c: e8 2a 01 00 00 call 36b - return r; - 241: 83 c4 10 add $0x10,%esp -} - 244: 8d 65 f8 lea -0x8(%ebp),%esp - 247: 89 f0 mov %esi,%eax - 249: 5b pop %ebx - 24a: 5e pop %esi - 24b: 5d pop %ebp - 24c: c3 ret - 24d: 8d 76 00 lea 0x0(%esi),%esi - return -1; - 250: be ff ff ff ff mov $0xffffffff,%esi - 255: eb ed jmp 244 - 257: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 25e: 66 90 xchg %ax,%ax - -00000260 : - -int atoi(const char *s) { - 260: 55 push %ebp - 261: 89 e5 mov %esp,%ebp - 263: 53 push %ebx - 264: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - n = 0; - while ('0' <= *s && *s <= '9') { - 267: 0f be 02 movsbl (%edx),%eax - 26a: 8d 48 d0 lea -0x30(%eax),%ecx - 26d: 80 f9 09 cmp $0x9,%cl - n = 0; - 270: b9 00 00 00 00 mov $0x0,%ecx - while ('0' <= *s && *s <= '9') { - 275: 77 1e ja 295 - 277: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 27e: 66 90 xchg %ax,%ax - n = n * 10 + *s++ - '0'; - 280: 83 c2 01 add $0x1,%edx - 283: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 286: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx - while ('0' <= *s && *s <= '9') { - 28a: 0f be 02 movsbl (%edx),%eax - 28d: 8d 58 d0 lea -0x30(%eax),%ebx - 290: 80 fb 09 cmp $0x9,%bl - 293: 76 eb jbe 280 - } - return n; -} - 295: 8b 5d fc mov -0x4(%ebp),%ebx - 298: 89 c8 mov %ecx,%eax - 29a: c9 leave - 29b: c3 ret - 29c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -000002a0 : - -void* memmove(void *vdst, const void *vsrc, int n) { - 2a0: 55 push %ebp - 2a1: 89 e5 mov %esp,%ebp - 2a3: 57 push %edi - 2a4: 8b 45 10 mov 0x10(%ebp),%eax - 2a7: 8b 55 08 mov 0x8(%ebp),%edx - 2aa: 56 push %esi - 2ab: 8b 75 0c mov 0xc(%ebp),%esi - char *dst; - const char *src; - - dst = vdst; - src = vsrc; - while (n-- > 0) { - 2ae: 85 c0 test %eax,%eax - 2b0: 7e 13 jle 2c5 - 2b2: 01 d0 add %edx,%eax - dst = vdst; - 2b4: 89 d7 mov %edx,%edi - 2b6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 2bd: 8d 76 00 lea 0x0(%esi),%esi - *dst++ = *src++; - 2c0: a4 movsb %ds:(%esi),%es:(%edi) - while (n-- > 0) { - 2c1: 39 f8 cmp %edi,%eax - 2c3: 75 fb jne 2c0 - } - return vdst; -} - 2c5: 5e pop %esi - 2c6: 89 d0 mov %edx,%eax - 2c8: 5f pop %edi - 2c9: 5d pop %ebp - 2ca: c3 ret - -000002cb : -name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 2cb: b8 01 00 00 00 mov $0x1,%eax - 2d0: cd 40 int $0x40 - 2d2: c3 ret - -000002d3 : -SYSCALL(exit) - 2d3: b8 02 00 00 00 mov $0x2,%eax - 2d8: cd 40 int $0x40 - 2da: c3 ret - -000002db : -SYSCALL(wait) - 2db: b8 03 00 00 00 mov $0x3,%eax - 2e0: cd 40 int $0x40 - 2e2: c3 ret - -000002e3 : -SYSCALL(pipe) - 2e3: b8 04 00 00 00 mov $0x4,%eax - 2e8: cd 40 int $0x40 - 2ea: c3 ret - -000002eb : -SYSCALL(read) - 2eb: b8 05 00 00 00 mov $0x5,%eax - 2f0: cd 40 int $0x40 - 2f2: c3 ret - -000002f3 : -SYSCALL(kill) - 2f3: b8 06 00 00 00 mov $0x6,%eax - 2f8: cd 40 int $0x40 - 2fa: c3 ret - -000002fb : -SYSCALL(exec) - 2fb: b8 07 00 00 00 mov $0x7,%eax - 300: cd 40 int $0x40 - 302: c3 ret - -00000303 : -SYSCALL(fstat) - 303: b8 08 00 00 00 mov $0x8,%eax - 308: cd 40 int $0x40 - 30a: c3 ret - -0000030b : -SYSCALL(chdir) - 30b: b8 09 00 00 00 mov $0x9,%eax - 310: cd 40 int $0x40 - 312: c3 ret - -00000313 : -SYSCALL(dup) - 313: b8 0a 00 00 00 mov $0xa,%eax - 318: cd 40 int $0x40 - 31a: c3 ret - -0000031b : -SYSCALL(getpid) - 31b: b8 0b 00 00 00 mov $0xb,%eax - 320: cd 40 int $0x40 - 322: c3 ret - -00000323 : -SYSCALL(sbrk) - 323: b8 0c 00 00 00 mov $0xc,%eax - 328: cd 40 int $0x40 - 32a: c3 ret - -0000032b : -SYSCALL(sleep) - 32b: b8 0d 00 00 00 mov $0xd,%eax - 330: cd 40 int $0x40 - 332: c3 ret - -00000333 : -SYSCALL(uptime) - 333: b8 0e 00 00 00 mov $0xe,%eax - 338: cd 40 int $0x40 - 33a: c3 ret - -0000033b : -SYSCALL(open) - 33b: b8 0f 00 00 00 mov $0xf,%eax - 340: cd 40 int $0x40 - 342: c3 ret - -00000343 : -SYSCALL(write) - 343: b8 10 00 00 00 mov $0x10,%eax - 348: cd 40 int $0x40 - 34a: c3 ret - -0000034b : -SYSCALL(mknod) - 34b: b8 11 00 00 00 mov $0x11,%eax - 350: cd 40 int $0x40 - 352: c3 ret - -00000353 : -SYSCALL(unlink) - 353: b8 12 00 00 00 mov $0x12,%eax - 358: cd 40 int $0x40 - 35a: c3 ret - -0000035b : -SYSCALL(link) - 35b: b8 13 00 00 00 mov $0x13,%eax - 360: cd 40 int $0x40 - 362: c3 ret - -00000363 : -SYSCALL(mkdir) - 363: b8 14 00 00 00 mov $0x14,%eax - 368: cd 40 int $0x40 - 36a: c3 ret - -0000036b : -SYSCALL(close) - 36b: b8 15 00 00 00 mov $0x15,%eax - 370: cd 40 int $0x40 - 372: c3 ret - -00000373 : -SYSCALL(getch) - 373: b8 16 00 00 00 mov $0x16,%eax - 378: cd 40 int $0x40 - 37a: c3 ret - -0000037b : -SYSCALL(greeting) - 37b: b8 17 00 00 00 mov $0x17,%eax - 380: cd 40 int $0x40 - 382: c3 ret - -00000383 : -SYSCALL(shutdown) - 383: b8 18 00 00 00 mov $0x18,%eax - 388: cd 40 int $0x40 - 38a: c3 ret - 38b: 66 90 xchg %ax,%ax - 38d: 66 90 xchg %ax,%ax - 38f: 90 nop - -00000390 : - -static void putc(int fd, char c) { - write(fd, &c, 1); -} - -static void printint(int fd, int xx, int base, int sgn) { - 390: 55 push %ebp - 391: 89 e5 mov %esp,%ebp - 393: 57 push %edi - 394: 56 push %esi - 395: 53 push %ebx - 396: 83 ec 3c sub $0x3c,%esp - 399: 89 4d c4 mov %ecx,-0x3c(%ebp) - uint x; - - neg = 0; - if (sgn && xx < 0) { - neg = 1; - x = -xx; - 39c: 89 d1 mov %edx,%ecx -static void printint(int fd, int xx, int base, int sgn) { - 39e: 89 45 b8 mov %eax,-0x48(%ebp) - if (sgn && xx < 0) { - 3a1: 85 d2 test %edx,%edx - 3a3: 0f 89 7f 00 00 00 jns 428 - 3a9: f6 45 08 01 testb $0x1,0x8(%ebp) - 3ad: 74 79 je 428 - neg = 1; - 3af: c7 45 bc 01 00 00 00 movl $0x1,-0x44(%ebp) - x = -xx; - 3b6: f7 d9 neg %ecx - } - else { - x = xx; - } - - i = 0; - 3b8: 31 db xor %ebx,%ebx - 3ba: 8d 75 d7 lea -0x29(%ebp),%esi - 3bd: 8d 76 00 lea 0x0(%esi),%esi - do { - buf[i++] = digits[x % base]; - 3c0: 89 c8 mov %ecx,%eax - 3c2: 31 d2 xor %edx,%edx - 3c4: 89 cf mov %ecx,%edi - 3c6: f7 75 c4 divl -0x3c(%ebp) - 3c9: 0f b6 92 f4 07 00 00 movzbl 0x7f4(%edx),%edx - 3d0: 89 45 c0 mov %eax,-0x40(%ebp) - 3d3: 89 d8 mov %ebx,%eax - 3d5: 8d 5b 01 lea 0x1(%ebx),%ebx - } - while ((x /= base) != 0); - 3d8: 8b 4d c0 mov -0x40(%ebp),%ecx - buf[i++] = digits[x % base]; - 3db: 88 14 1e mov %dl,(%esi,%ebx,1) - while ((x /= base) != 0); - 3de: 39 7d c4 cmp %edi,-0x3c(%ebp) - 3e1: 76 dd jbe 3c0 - if (neg) { - 3e3: 8b 4d bc mov -0x44(%ebp),%ecx - 3e6: 85 c9 test %ecx,%ecx - 3e8: 74 0c je 3f6 - buf[i++] = '-'; - 3ea: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) - buf[i++] = digits[x % base]; - 3ef: 89 d8 mov %ebx,%eax - buf[i++] = '-'; - 3f1: ba 2d 00 00 00 mov $0x2d,%edx - } - - while (--i >= 0) { - 3f6: 8b 7d b8 mov -0x48(%ebp),%edi - 3f9: 8d 5c 05 d7 lea -0x29(%ebp,%eax,1),%ebx - 3fd: eb 07 jmp 406 - 3ff: 90 nop - putc(fd, buf[i]); - 400: 0f b6 13 movzbl (%ebx),%edx - 403: 83 eb 01 sub $0x1,%ebx - write(fd, &c, 1); - 406: 83 ec 04 sub $0x4,%esp - 409: 88 55 d7 mov %dl,-0x29(%ebp) - 40c: 6a 01 push $0x1 - 40e: 56 push %esi - 40f: 57 push %edi - 410: e8 2e ff ff ff call 343 - while (--i >= 0) { - 415: 83 c4 10 add $0x10,%esp - 418: 39 de cmp %ebx,%esi - 41a: 75 e4 jne 400 - } -} - 41c: 8d 65 f4 lea -0xc(%ebp),%esp - 41f: 5b pop %ebx - 420: 5e pop %esi - 421: 5f pop %edi - 422: 5d pop %ebp - 423: c3 ret - 424: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - neg = 0; - 428: c7 45 bc 00 00 00 00 movl $0x0,-0x44(%ebp) - 42f: eb 87 jmp 3b8 - 431: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 438: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 43f: 90 nop - -00000440 : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void printf(int fd, const char *fmt, ...) { - 440: 55 push %ebp - 441: 89 e5 mov %esp,%ebp - 443: 57 push %edi - 444: 56 push %esi - 445: 53 push %ebx - 446: 83 ec 2c sub $0x2c,%esp - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for (i = 0; fmt[i]; i++) { - 449: 8b 5d 0c mov 0xc(%ebp),%ebx -void printf(int fd, const char *fmt, ...) { - 44c: 8b 75 08 mov 0x8(%ebp),%esi - for (i = 0; fmt[i]; i++) { - 44f: 0f b6 13 movzbl (%ebx),%edx - 452: 84 d2 test %dl,%dl - 454: 74 6a je 4c0 - ap = (uint*)(void*)&fmt + 1; - 456: 8d 45 10 lea 0x10(%ebp),%eax - 459: 83 c3 01 add $0x1,%ebx - write(fd, &c, 1); - 45c: 8d 7d e7 lea -0x19(%ebp),%edi - state = 0; - 45f: 31 c9 xor %ecx,%ecx - ap = (uint*)(void*)&fmt + 1; - 461: 89 45 d0 mov %eax,-0x30(%ebp) - 464: eb 36 jmp 49c - 466: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 46d: 8d 76 00 lea 0x0(%esi),%esi - 470: 89 4d d4 mov %ecx,-0x2c(%ebp) - c = fmt[i] & 0xff; - if (state == 0) { - if (c == '%') { - state = '%'; - 473: b9 25 00 00 00 mov $0x25,%ecx - if (c == '%') { - 478: 83 f8 25 cmp $0x25,%eax - 47b: 74 15 je 492 - write(fd, &c, 1); - 47d: 83 ec 04 sub $0x4,%esp - 480: 88 55 e7 mov %dl,-0x19(%ebp) - 483: 6a 01 push $0x1 - 485: 57 push %edi - 486: 56 push %esi - 487: e8 b7 fe ff ff call 343 - 48c: 8b 4d d4 mov -0x2c(%ebp),%ecx - } - else { - putc(fd, c); - 48f: 83 c4 10 add $0x10,%esp - for (i = 0; fmt[i]; i++) { - 492: 0f b6 13 movzbl (%ebx),%edx - 495: 83 c3 01 add $0x1,%ebx - 498: 84 d2 test %dl,%dl - 49a: 74 24 je 4c0 - c = fmt[i] & 0xff; - 49c: 0f b6 c2 movzbl %dl,%eax - if (state == 0) { - 49f: 85 c9 test %ecx,%ecx - 4a1: 74 cd je 470 - } - } - else if (state == '%') { - 4a3: 83 f9 25 cmp $0x25,%ecx - 4a6: 75 ea jne 492 - if (c == 'd') { - 4a8: 83 f8 25 cmp $0x25,%eax - 4ab: 0f 84 07 01 00 00 je 5b8 - 4b1: 83 e8 63 sub $0x63,%eax - 4b4: 83 f8 15 cmp $0x15,%eax - 4b7: 77 17 ja 4d0 - 4b9: ff 24 85 9c 07 00 00 jmp *0x79c(,%eax,4) - putc(fd, c); - } - state = 0; - } - } -} - 4c0: 8d 65 f4 lea -0xc(%ebp),%esp - 4c3: 5b pop %ebx - 4c4: 5e pop %esi - 4c5: 5f pop %edi - 4c6: 5d pop %ebp - 4c7: c3 ret - 4c8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 4cf: 90 nop - write(fd, &c, 1); - 4d0: 83 ec 04 sub $0x4,%esp - 4d3: 88 55 d4 mov %dl,-0x2c(%ebp) - 4d6: 6a 01 push $0x1 - 4d8: 57 push %edi - 4d9: 56 push %esi - 4da: c6 45 e7 25 movb $0x25,-0x19(%ebp) - 4de: e8 60 fe ff ff call 343 - putc(fd, c); - 4e3: 0f b6 55 d4 movzbl -0x2c(%ebp),%edx - write(fd, &c, 1); - 4e7: 83 c4 0c add $0xc,%esp - 4ea: 88 55 e7 mov %dl,-0x19(%ebp) - 4ed: 6a 01 push $0x1 - 4ef: 57 push %edi - 4f0: 56 push %esi - 4f1: e8 4d fe ff ff call 343 - putc(fd, c); - 4f6: 83 c4 10 add $0x10,%esp - state = 0; - 4f9: 31 c9 xor %ecx,%ecx - 4fb: eb 95 jmp 492 - 4fd: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 16, 0); - 500: 83 ec 0c sub $0xc,%esp - 503: b9 10 00 00 00 mov $0x10,%ecx - 508: 6a 00 push $0x0 - 50a: 8b 45 d0 mov -0x30(%ebp),%eax - 50d: 8b 10 mov (%eax),%edx - 50f: 89 f0 mov %esi,%eax - 511: e8 7a fe ff ff call 390 - ap++; - 516: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 51a: 83 c4 10 add $0x10,%esp - state = 0; - 51d: 31 c9 xor %ecx,%ecx - 51f: e9 6e ff ff ff jmp 492 - 524: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - s = (char*)*ap; - 528: 8b 45 d0 mov -0x30(%ebp),%eax - 52b: 8b 10 mov (%eax),%edx - ap++; - 52d: 83 c0 04 add $0x4,%eax - 530: 89 45 d0 mov %eax,-0x30(%ebp) - if (s == 0) { - 533: 85 d2 test %edx,%edx - 535: 0f 84 8d 00 00 00 je 5c8 - while (*s != 0) { - 53b: 0f b6 02 movzbl (%edx),%eax - state = 0; - 53e: 31 c9 xor %ecx,%ecx - while (*s != 0) { - 540: 84 c0 test %al,%al - 542: 0f 84 4a ff ff ff je 492 - 548: 89 5d d4 mov %ebx,-0x2c(%ebp) - 54b: 89 d3 mov %edx,%ebx - 54d: 8d 76 00 lea 0x0(%esi),%esi - write(fd, &c, 1); - 550: 83 ec 04 sub $0x4,%esp - s++; - 553: 83 c3 01 add $0x1,%ebx - 556: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 559: 6a 01 push $0x1 - 55b: 57 push %edi - 55c: 56 push %esi - 55d: e8 e1 fd ff ff call 343 - while (*s != 0) { - 562: 0f b6 03 movzbl (%ebx),%eax - 565: 83 c4 10 add $0x10,%esp - 568: 84 c0 test %al,%al - 56a: 75 e4 jne 550 - state = 0; - 56c: 8b 5d d4 mov -0x2c(%ebp),%ebx - 56f: 31 c9 xor %ecx,%ecx - 571: e9 1c ff ff ff jmp 492 - 576: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 57d: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 10, 1); - 580: 83 ec 0c sub $0xc,%esp - 583: b9 0a 00 00 00 mov $0xa,%ecx - 588: 6a 01 push $0x1 - 58a: e9 7b ff ff ff jmp 50a - 58f: 90 nop - putc(fd, *ap); - 590: 8b 45 d0 mov -0x30(%ebp),%eax - write(fd, &c, 1); - 593: 83 ec 04 sub $0x4,%esp - putc(fd, *ap); - 596: 8b 00 mov (%eax),%eax - write(fd, &c, 1); - 598: 6a 01 push $0x1 - 59a: 57 push %edi - 59b: 56 push %esi - putc(fd, *ap); - 59c: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 59f: e8 9f fd ff ff call 343 - ap++; - 5a4: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 5a8: 83 c4 10 add $0x10,%esp - state = 0; - 5ab: 31 c9 xor %ecx,%ecx - 5ad: e9 e0 fe ff ff jmp 492 - 5b2: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - putc(fd, c); - 5b8: 88 55 e7 mov %dl,-0x19(%ebp) - write(fd, &c, 1); - 5bb: 83 ec 04 sub $0x4,%esp - 5be: e9 2a ff ff ff jmp 4ed - 5c3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 5c7: 90 nop - s = "(null)"; - 5c8: ba 95 07 00 00 mov $0x795,%edx - while (*s != 0) { - 5cd: 89 5d d4 mov %ebx,-0x2c(%ebp) - 5d0: b8 28 00 00 00 mov $0x28,%eax - 5d5: 89 d3 mov %edx,%ebx - 5d7: e9 74 ff ff ff jmp 550 - 5dc: 66 90 xchg %ax,%ax - 5de: 66 90 xchg %ax,%ax - -000005e0 : -typedef union header Header; - -static Header base; -static Header *freep; - -void free(void *ap) { - 5e0: 55 push %ebp - Header *bp, *p; - - bp = (Header*)ap - 1; - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 5e1: a1 ac 0a 00 00 mov 0xaac,%eax -void free(void *ap) { - 5e6: 89 e5 mov %esp,%ebp - 5e8: 57 push %edi - 5e9: 56 push %esi - 5ea: 53 push %ebx - 5eb: 8b 5d 08 mov 0x8(%ebp),%ebx - bp = (Header*)ap - 1; - 5ee: 8d 4b f8 lea -0x8(%ebx),%ecx - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 5f1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 5f8: 89 c2 mov %eax,%edx - 5fa: 8b 00 mov (%eax),%eax - 5fc: 39 ca cmp %ecx,%edx - 5fe: 73 30 jae 630 - 600: 39 c1 cmp %eax,%ecx - 602: 72 04 jb 608 - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 604: 39 c2 cmp %eax,%edx - 606: 72 f0 jb 5f8 - break; - } - } - if (bp + bp->s.size == p->s.ptr) { - 608: 8b 73 fc mov -0x4(%ebx),%esi - 60b: 8d 3c f1 lea (%ecx,%esi,8),%edi - 60e: 39 f8 cmp %edi,%eax - 610: 74 30 je 642 - bp->s.size += p->s.ptr->s.size; - bp->s.ptr = p->s.ptr->s.ptr; - 612: 89 43 f8 mov %eax,-0x8(%ebx) - } - else { - bp->s.ptr = p->s.ptr; - } - if (p + p->s.size == bp) { - 615: 8b 42 04 mov 0x4(%edx),%eax - 618: 8d 34 c2 lea (%edx,%eax,8),%esi - 61b: 39 f1 cmp %esi,%ecx - 61d: 74 3a je 659 - p->s.size += bp->s.size; - p->s.ptr = bp->s.ptr; - 61f: 89 0a mov %ecx,(%edx) - } - else { - p->s.ptr = bp; - } - freep = p; -} - 621: 5b pop %ebx - freep = p; - 622: 89 15 ac 0a 00 00 mov %edx,0xaac -} - 628: 5e pop %esi - 629: 5f pop %edi - 62a: 5d pop %ebp - 62b: c3 ret - 62c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 630: 39 c2 cmp %eax,%edx - 632: 72 c4 jb 5f8 - 634: 39 c1 cmp %eax,%ecx - 636: 73 c0 jae 5f8 - if (bp + bp->s.size == p->s.ptr) { - 638: 8b 73 fc mov -0x4(%ebx),%esi - 63b: 8d 3c f1 lea (%ecx,%esi,8),%edi - 63e: 39 f8 cmp %edi,%eax - 640: 75 d0 jne 612 - bp->s.size += p->s.ptr->s.size; - 642: 03 70 04 add 0x4(%eax),%esi - 645: 89 73 fc mov %esi,-0x4(%ebx) - bp->s.ptr = p->s.ptr->s.ptr; - 648: 8b 02 mov (%edx),%eax - 64a: 8b 00 mov (%eax),%eax - 64c: 89 43 f8 mov %eax,-0x8(%ebx) - if (p + p->s.size == bp) { - 64f: 8b 42 04 mov 0x4(%edx),%eax - 652: 8d 34 c2 lea (%edx,%eax,8),%esi - 655: 39 f1 cmp %esi,%ecx - 657: 75 c6 jne 61f - p->s.size += bp->s.size; - 659: 03 43 fc add -0x4(%ebx),%eax - freep = p; - 65c: 89 15 ac 0a 00 00 mov %edx,0xaac - p->s.size += bp->s.size; - 662: 89 42 04 mov %eax,0x4(%edx) - p->s.ptr = bp->s.ptr; - 665: 8b 4b f8 mov -0x8(%ebx),%ecx - 668: 89 0a mov %ecx,(%edx) -} - 66a: 5b pop %ebx - 66b: 5e pop %esi - 66c: 5f pop %edi - 66d: 5d pop %ebp - 66e: c3 ret - 66f: 90 nop - -00000670 : - hp->s.size = nu; - free((void*)(hp + 1)); - return freep; -} - -void* malloc(uint nbytes) { - 670: 55 push %ebp - 671: 89 e5 mov %esp,%ebp - 673: 57 push %edi - 674: 56 push %esi - 675: 53 push %ebx - 676: 83 ec 1c sub $0x1c,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 679: 8b 45 08 mov 0x8(%ebp),%eax - if ((prevp = freep) == 0) { - 67c: 8b 3d ac 0a 00 00 mov 0xaac,%edi - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 682: 8d 70 07 lea 0x7(%eax),%esi - 685: c1 ee 03 shr $0x3,%esi - 688: 83 c6 01 add $0x1,%esi - if ((prevp = freep) == 0) { - 68b: 85 ff test %edi,%edi - 68d: 0f 84 9d 00 00 00 je 730 - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 693: 8b 17 mov (%edi),%edx - if (p->s.size >= nunits) { - 695: 8b 4a 04 mov 0x4(%edx),%ecx - 698: 39 f1 cmp %esi,%ecx - 69a: 73 6a jae 706 - 69c: bb 00 10 00 00 mov $0x1000,%ebx - 6a1: 39 de cmp %ebx,%esi - 6a3: 0f 43 de cmovae %esi,%ebx - p = sbrk(nu * sizeof(Header)); - 6a6: 8d 04 dd 00 00 00 00 lea 0x0(,%ebx,8),%eax - 6ad: 89 45 e4 mov %eax,-0x1c(%ebp) - 6b0: eb 17 jmp 6c9 - 6b2: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 6b8: 8b 02 mov (%edx),%eax - if (p->s.size >= nunits) { - 6ba: 8b 48 04 mov 0x4(%eax),%ecx - 6bd: 39 f1 cmp %esi,%ecx - 6bf: 73 4f jae 710 - p->s.size = nunits; - } - freep = prevp; - return (void*)(p + 1); - } - if (p == freep) { - 6c1: 8b 3d ac 0a 00 00 mov 0xaac,%edi - 6c7: 89 c2 mov %eax,%edx - 6c9: 39 d7 cmp %edx,%edi - 6cb: 75 eb jne 6b8 - p = sbrk(nu * sizeof(Header)); - 6cd: 83 ec 0c sub $0xc,%esp - 6d0: ff 75 e4 push -0x1c(%ebp) - 6d3: e8 4b fc ff ff call 323 - if (p == (char*)-1) { - 6d8: 83 c4 10 add $0x10,%esp - 6db: 83 f8 ff cmp $0xffffffff,%eax - 6de: 74 1c je 6fc - hp->s.size = nu; - 6e0: 89 58 04 mov %ebx,0x4(%eax) - free((void*)(hp + 1)); - 6e3: 83 ec 0c sub $0xc,%esp - 6e6: 83 c0 08 add $0x8,%eax - 6e9: 50 push %eax - 6ea: e8 f1 fe ff ff call 5e0 - return freep; - 6ef: 8b 15 ac 0a 00 00 mov 0xaac,%edx - if ((p = morecore(nunits)) == 0) { - 6f5: 83 c4 10 add $0x10,%esp - 6f8: 85 d2 test %edx,%edx - 6fa: 75 bc jne 6b8 - return 0; - } - } - } -} - 6fc: 8d 65 f4 lea -0xc(%ebp),%esp - return 0; - 6ff: 31 c0 xor %eax,%eax -} - 701: 5b pop %ebx - 702: 5e pop %esi - 703: 5f pop %edi - 704: 5d pop %ebp - 705: c3 ret - if (p->s.size >= nunits) { - 706: 89 d0 mov %edx,%eax - 708: 89 fa mov %edi,%edx - 70a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - if (p->s.size == nunits) { - 710: 39 ce cmp %ecx,%esi - 712: 74 4c je 760 - p->s.size -= nunits; - 714: 29 f1 sub %esi,%ecx - 716: 89 48 04 mov %ecx,0x4(%eax) - p += p->s.size; - 719: 8d 04 c8 lea (%eax,%ecx,8),%eax - p->s.size = nunits; - 71c: 89 70 04 mov %esi,0x4(%eax) - freep = prevp; - 71f: 89 15 ac 0a 00 00 mov %edx,0xaac -} - 725: 8d 65 f4 lea -0xc(%ebp),%esp - return (void*)(p + 1); - 728: 83 c0 08 add $0x8,%eax -} - 72b: 5b pop %ebx - 72c: 5e pop %esi - 72d: 5f pop %edi - 72e: 5d pop %ebp - 72f: c3 ret - base.s.ptr = freep = prevp = &base; - 730: c7 05 ac 0a 00 00 b0 movl $0xab0,0xaac - 737: 0a 00 00 - base.s.size = 0; - 73a: bf b0 0a 00 00 mov $0xab0,%edi - base.s.ptr = freep = prevp = &base; - 73f: c7 05 b0 0a 00 00 b0 movl $0xab0,0xab0 - 746: 0a 00 00 - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 749: 89 fa mov %edi,%edx - base.s.size = 0; - 74b: c7 05 b4 0a 00 00 00 movl $0x0,0xab4 - 752: 00 00 00 - if (p->s.size >= nunits) { - 755: e9 42 ff ff ff jmp 69c - 75a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - prevp->s.ptr = p->s.ptr; - 760: 8b 08 mov (%eax),%ecx - 762: 89 0a mov %ecx,(%edx) - 764: eb b9 jmp 71f diff --git a/rm.d b/rm.d deleted file mode 100644 index ba50b6b..0000000 --- a/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/rm.o b/rm.o deleted file mode 100644 index 956828c4abc35741d773f7eb862a4e05061e799b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3452 zcma)8OKe^i^HBMv zbH4xa{r`E~bI#1IrbNq&#bq(HLI_z%Ud2f63gO#t{ef}pL>T{Q$+j^(`+85l{ z8e2biw?4F9K6m>EN0@N?s%*V8zJ2mfA8c=LZ@pQ4<)_!DwtiuO^~i_$UFE&BeX_F~ z)UViv^yjyhmpjbXF6G~cfjqHX`n?CyeN1WS#;Itr+!1P)J@P)mD$gp*n?rWV^`bbF zkzH`vRqsi_Dw@Mi+$-oTt8^4lZlN39ixj)0Xk!)Xhf80F-(jB0smS;Qbjwp5XmX9_ zx28d!_?wDMl5D>&le^%vy!{OAfs0d~io`07l5hrX0nKK&NaYf`4Jw@5O)7~|I0i%F z?m;n^Qx)s5R4V5x&LoJ>%1hR*8BEcWMSwdcmHS+3-n4c9#|XF8$P^Sah&oQ!_tY@-(|ovhxm!r$*c3c{97cL#3&U<%?eV6>qfkwl`6-yzy^)b7H%8 zDfMQEXFTskZ{qS@Z`8T*`QO?&^j03HQ9H)9Yo8=J?_`n@~E3d z@xVwku(Nv5je<0a+XH967iIPJBLKfh2rwz8JT zS*~}q-pG~NczJ%_KXK{-?H0aa6zhd$v2K>F1LLmyDo)1<_;}(d>Xcm=w`8&E*||JX z9kKJ9&rUh{MyXn|^XpZ|&a(k^N6&+1#Ff8p8=dGBPVvC@iebdn86Nr^(LV^<bsewH<3aC4z^C4bLu~VK(#Kc^FjK74UODS+K&^#s{w7G`00%vZYD5G2G}uL7GBT9 zZv|N({#u%fpY&;v+3*`M!>&&b96^%h8v{=(T+7?5QM}$quF`|GwIsY+jCT9YZj@#$ zi5i-f1aUju;Y#B6f6(vh5vtY z05sl3bKXz=TbjA2_h}xtl=8oLM-k&0{V1OLe&EfcQCP38v_Z#l*&fqq=C=WxchZQu zYcL)~!|_$$pRqegco@iEZoVGs=MwlFnpqQ6c?*qyrHmN$Q*adP&EZb{4nEd{I;{6) z=q3lMIJU^!RJ52_AGXmMdKbK>G>2ef{L@w(_wN{tYvi~%-otUXpqm`1GLH?fQPE;z zw_q3Rx%fDy9-g0Jy>CJ{IV`b^dib|A6cc*`o?^Y-sK@Wk`SF!C`}{rVCI_m7sK>b& zF|qH$QLHzIV#nZPJ: -#include "types.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 push -0x4(%ecx) - a: 55 push %ebp - b: 89 e5 mov %esp,%ebp - d: 57 push %edi - e: 56 push %esi - f: 53 push %ebx - 10: 51 push %ecx - 11: 83 ec 08 sub $0x8,%esp - 14: 8b 31 mov (%ecx),%esi - 16: 8b 79 04 mov 0x4(%ecx),%edi - //int consoles = 0; - int pid; - //char* comment = ""; - - for (int i = 1; i < argc; i++) { - 19: 83 fe 01 cmp $0x1,%esi - 1c: 7e 24 jle 42 - 1e: bb 01 00 00 00 mov $0x1,%ebx - 23: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 27: 90 nop - if (strcmp(argv[i], "-c") == 0) { - 28: 83 ec 08 sub $0x8,%esp - 2b: 68 78 07 00 00 push $0x778 - 30: ff 34 9f push (%edi,%ebx,4) - for (int i = 1; i < argc; i++) { - 33: 83 c3 01 add $0x1,%ebx - if (strcmp(argv[i], "-c") == 0) { - 36: e8 85 00 00 00 call c0 - for (int i = 1; i < argc; i++) { - 3b: 83 c4 10 add $0x10,%esp - 3e: 39 de cmp %ebx,%esi - 40: 75 e6 jne 28 - - } - } - - pid = fork(); - 42: e8 94 02 00 00 call 2db - if (pid < 0) { - 47: 85 c0 test %eax,%eax - 49: 78 27 js 72 - printf(1, "screen: fork failed\n"); - } - if (pid == 0) { - 4b: 74 05 je 52 - exec("sh", argv); - printf(1, "screen: exec sh failed\n"); - } - exit(); - 4d: e8 91 02 00 00 call 2e3 - exec("sh", argv); - 52: 50 push %eax - 53: 50 push %eax - 54: 57 push %edi - 55: 68 90 07 00 00 push $0x790 - 5a: e8 ac 02 00 00 call 30b - printf(1, "screen: exec sh failed\n"); - 5f: 5a pop %edx - 60: 59 pop %ecx - 61: 68 93 07 00 00 push $0x793 - 66: 6a 01 push $0x1 - 68: e8 e3 03 00 00 call 450 - 6d: 83 c4 10 add $0x10,%esp - 70: eb db jmp 4d - printf(1, "screen: fork failed\n"); - 72: 53 push %ebx - 73: 53 push %ebx - 74: 68 7b 07 00 00 push $0x77b - 79: 6a 01 push $0x1 - 7b: e8 d0 03 00 00 call 450 - 80: 83 c4 10 add $0x10,%esp - 83: eb c8 jmp 4d - 85: 66 90 xchg %ax,%ax - 87: 66 90 xchg %ax,%ax - 89: 66 90 xchg %ax,%ax - 8b: 66 90 xchg %ax,%ax - 8d: 66 90 xchg %ax,%ax - 8f: 90 nop - -00000090 : -#include "stat.h" -#include "fcntl.h" -#include "user.h" -#include "x86.h" - -char*strcpy(char *s, const char *t) { - 90: 55 push %ebp - char *os; - - os = s; - while ((*s++ = *t++) != 0) { - 91: 31 c0 xor %eax,%eax -char*strcpy(char *s, const char *t) { - 93: 89 e5 mov %esp,%ebp - 95: 53 push %ebx - 96: 8b 4d 08 mov 0x8(%ebp),%ecx - 99: 8b 5d 0c mov 0xc(%ebp),%ebx - 9c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - while ((*s++ = *t++) != 0) { - a0: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - a4: 88 14 01 mov %dl,(%ecx,%eax,1) - a7: 83 c0 01 add $0x1,%eax - aa: 84 d2 test %dl,%dl - ac: 75 f2 jne a0 - ; - } - return os; -} - ae: 8b 5d fc mov -0x4(%ebp),%ebx - b1: 89 c8 mov %ecx,%eax - b3: c9 leave - b4: c3 ret - b5: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - bc: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -000000c0 : - -int strcmp(const char *p, const char *q) { - c0: 55 push %ebp - c1: 89 e5 mov %esp,%ebp - c3: 53 push %ebx - c4: 8b 55 08 mov 0x8(%ebp),%edx - c7: 8b 4d 0c mov 0xc(%ebp),%ecx - while (*p && *p == *q) { - ca: 0f b6 02 movzbl (%edx),%eax - cd: 84 c0 test %al,%al - cf: 75 17 jne e8 - d1: eb 3a jmp 10d - d3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - d7: 90 nop - d8: 0f b6 42 01 movzbl 0x1(%edx),%eax - p++, q++; - dc: 83 c2 01 add $0x1,%edx - df: 8d 59 01 lea 0x1(%ecx),%ebx - while (*p && *p == *q) { - e2: 84 c0 test %al,%al - e4: 74 1a je 100 - p++, q++; - e6: 89 d9 mov %ebx,%ecx - while (*p && *p == *q) { - e8: 0f b6 19 movzbl (%ecx),%ebx - eb: 38 c3 cmp %al,%bl - ed: 74 e9 je d8 - } - return (uchar) * p - (uchar) * q; - ef: 29 d8 sub %ebx,%eax -} - f1: 8b 5d fc mov -0x4(%ebp),%ebx - f4: c9 leave - f5: c3 ret - f6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - fd: 8d 76 00 lea 0x0(%esi),%esi - return (uchar) * p - (uchar) * q; - 100: 0f b6 59 01 movzbl 0x1(%ecx),%ebx - 104: 31 c0 xor %eax,%eax - 106: 29 d8 sub %ebx,%eax -} - 108: 8b 5d fc mov -0x4(%ebp),%ebx - 10b: c9 leave - 10c: c3 ret - return (uchar) * p - (uchar) * q; - 10d: 0f b6 19 movzbl (%ecx),%ebx - 110: 31 c0 xor %eax,%eax - 112: eb db jmp ef - 114: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 11b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 11f: 90 nop - -00000120 : - -uint strlen(const char *s) { - 120: 55 push %ebp - 121: 89 e5 mov %esp,%ebp - 123: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - for (n = 0; s[n]; n++) { - 126: 80 3a 00 cmpb $0x0,(%edx) - 129: 74 15 je 140 - 12b: 31 c0 xor %eax,%eax - 12d: 8d 76 00 lea 0x0(%esi),%esi - 130: 83 c0 01 add $0x1,%eax - 133: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - 137: 89 c1 mov %eax,%ecx - 139: 75 f5 jne 130 - ; - } - return n; -} - 13b: 89 c8 mov %ecx,%eax - 13d: 5d pop %ebp - 13e: c3 ret - 13f: 90 nop - for (n = 0; s[n]; n++) { - 140: 31 c9 xor %ecx,%ecx -} - 142: 5d pop %ebp - 143: 89 c8 mov %ecx,%eax - 145: c3 ret - 146: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 14d: 8d 76 00 lea 0x0(%esi),%esi - -00000150 : - -void* memset(void *dst, int c, uint n) { - 150: 55 push %ebp - 151: 89 e5 mov %esp,%ebp - 153: 57 push %edi - 154: 8b 55 08 mov 0x8(%ebp),%edx - "d" (port), "0" (addr), "1" (cnt) : - "cc"); -} - -static inline void stosb(void *addr, int data, int cnt) { - asm volatile ("cld; rep stosb" : - 157: 8b 4d 10 mov 0x10(%ebp),%ecx - 15a: 8b 45 0c mov 0xc(%ebp),%eax - 15d: 89 d7 mov %edx,%edi - 15f: fc cld - 160: f3 aa rep stos %al,%es:(%edi) - stosb(dst, c, n); - return dst; -} - 162: 8b 7d fc mov -0x4(%ebp),%edi - 165: 89 d0 mov %edx,%eax - 167: c9 leave - 168: c3 ret - 169: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -00000170 : - -char* strchr(const char *s, char c) { - 170: 55 push %ebp - 171: 89 e5 mov %esp,%ebp - 173: 8b 45 08 mov 0x8(%ebp),%eax - 176: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx - for (; *s; s++) { - 17a: 0f b6 10 movzbl (%eax),%edx - 17d: 84 d2 test %dl,%dl - 17f: 75 12 jne 193 - 181: eb 1d jmp 1a0 - 183: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 187: 90 nop - 188: 0f b6 50 01 movzbl 0x1(%eax),%edx - 18c: 83 c0 01 add $0x1,%eax - 18f: 84 d2 test %dl,%dl - 191: 74 0d je 1a0 - if (*s == c) { - 193: 38 d1 cmp %dl,%cl - 195: 75 f1 jne 188 - return (char*)s; - } - } - return 0; -} - 197: 5d pop %ebp - 198: c3 ret - 199: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - return 0; - 1a0: 31 c0 xor %eax,%eax -} - 1a2: 5d pop %ebp - 1a3: c3 ret - 1a4: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 1ab: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 1af: 90 nop - -000001b0 : - -char* gets(char *buf, int max) { - 1b0: 55 push %ebp - 1b1: 89 e5 mov %esp,%ebp - 1b3: 57 push %edi - 1b4: 56 push %esi - int i, cc; - char c; - - for (i = 0; i + 1 < max;) { - cc = read(0, &c, 1); - 1b5: 8d 7d e7 lea -0x19(%ebp),%edi -char* gets(char *buf, int max) { - 1b8: 53 push %ebx - for (i = 0; i + 1 < max;) { - 1b9: 31 db xor %ebx,%ebx -char* gets(char *buf, int max) { - 1bb: 83 ec 1c sub $0x1c,%esp - for (i = 0; i + 1 < max;) { - 1be: eb 27 jmp 1e7 - cc = read(0, &c, 1); - 1c0: 83 ec 04 sub $0x4,%esp - 1c3: 6a 01 push $0x1 - 1c5: 57 push %edi - 1c6: 6a 00 push $0x0 - 1c8: e8 2e 01 00 00 call 2fb - if (cc < 1) { - 1cd: 83 c4 10 add $0x10,%esp - 1d0: 85 c0 test %eax,%eax - 1d2: 7e 1d jle 1f1 - break; - } - buf[i++] = c; - 1d4: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 1d8: 8b 55 08 mov 0x8(%ebp),%edx - 1db: 88 44 1a ff mov %al,-0x1(%edx,%ebx,1) - if (c == '\n' || c == '\r') { - 1df: 3c 0a cmp $0xa,%al - 1e1: 74 1d je 200 - 1e3: 3c 0d cmp $0xd,%al - 1e5: 74 19 je 200 - for (i = 0; i + 1 < max;) { - 1e7: 89 de mov %ebx,%esi - 1e9: 83 c3 01 add $0x1,%ebx - 1ec: 3b 5d 0c cmp 0xc(%ebp),%ebx - 1ef: 7c cf jl 1c0 - break; - } - } - buf[i] = '\0'; - 1f1: 8b 45 08 mov 0x8(%ebp),%eax - 1f4: c6 04 30 00 movb $0x0,(%eax,%esi,1) - return buf; -} - 1f8: 8d 65 f4 lea -0xc(%ebp),%esp - 1fb: 5b pop %ebx - 1fc: 5e pop %esi - 1fd: 5f pop %edi - 1fe: 5d pop %ebp - 1ff: c3 ret - buf[i] = '\0'; - 200: 8b 45 08 mov 0x8(%ebp),%eax - 203: 89 de mov %ebx,%esi - 205: c6 04 30 00 movb $0x0,(%eax,%esi,1) -} - 209: 8d 65 f4 lea -0xc(%ebp),%esp - 20c: 5b pop %ebx - 20d: 5e pop %esi - 20e: 5f pop %edi - 20f: 5d pop %ebp - 210: c3 ret - 211: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 218: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 21f: 90 nop - -00000220 : - -int stat(const char *n, struct stat *st) { - 220: 55 push %ebp - 221: 89 e5 mov %esp,%ebp - 223: 56 push %esi - 224: 53 push %ebx - int fd; - int r; - - fd = open(n, O_RDONLY); - 225: 83 ec 08 sub $0x8,%esp - 228: 6a 00 push $0x0 - 22a: ff 75 08 push 0x8(%ebp) - 22d: e8 19 01 00 00 call 34b - if (fd < 0) { - 232: 83 c4 10 add $0x10,%esp - 235: 85 c0 test %eax,%eax - 237: 78 27 js 260 - return -1; - } - r = fstat(fd, st); - 239: 83 ec 08 sub $0x8,%esp - 23c: ff 75 0c push 0xc(%ebp) - 23f: 89 c3 mov %eax,%ebx - 241: 50 push %eax - 242: e8 cc 00 00 00 call 313 - close(fd); - 247: 89 1c 24 mov %ebx,(%esp) - r = fstat(fd, st); - 24a: 89 c6 mov %eax,%esi - close(fd); - 24c: e8 2a 01 00 00 call 37b - return r; - 251: 83 c4 10 add $0x10,%esp -} - 254: 8d 65 f8 lea -0x8(%ebp),%esp - 257: 89 f0 mov %esi,%eax - 259: 5b pop %ebx - 25a: 5e pop %esi - 25b: 5d pop %ebp - 25c: c3 ret - 25d: 8d 76 00 lea 0x0(%esi),%esi - return -1; - 260: be ff ff ff ff mov $0xffffffff,%esi - 265: eb ed jmp 254 - 267: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 26e: 66 90 xchg %ax,%ax - -00000270 : - -int atoi(const char *s) { - 270: 55 push %ebp - 271: 89 e5 mov %esp,%ebp - 273: 53 push %ebx - 274: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - n = 0; - while ('0' <= *s && *s <= '9') { - 277: 0f be 02 movsbl (%edx),%eax - 27a: 8d 48 d0 lea -0x30(%eax),%ecx - 27d: 80 f9 09 cmp $0x9,%cl - n = 0; - 280: b9 00 00 00 00 mov $0x0,%ecx - while ('0' <= *s && *s <= '9') { - 285: 77 1e ja 2a5 - 287: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 28e: 66 90 xchg %ax,%ax - n = n * 10 + *s++ - '0'; - 290: 83 c2 01 add $0x1,%edx - 293: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 296: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx - while ('0' <= *s && *s <= '9') { - 29a: 0f be 02 movsbl (%edx),%eax - 29d: 8d 58 d0 lea -0x30(%eax),%ebx - 2a0: 80 fb 09 cmp $0x9,%bl - 2a3: 76 eb jbe 290 - } - return n; -} - 2a5: 8b 5d fc mov -0x4(%ebp),%ebx - 2a8: 89 c8 mov %ecx,%eax - 2aa: c9 leave - 2ab: c3 ret - 2ac: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -000002b0 : - -void* memmove(void *vdst, const void *vsrc, int n) { - 2b0: 55 push %ebp - 2b1: 89 e5 mov %esp,%ebp - 2b3: 57 push %edi - 2b4: 8b 45 10 mov 0x10(%ebp),%eax - 2b7: 8b 55 08 mov 0x8(%ebp),%edx - 2ba: 56 push %esi - 2bb: 8b 75 0c mov 0xc(%ebp),%esi - char *dst; - const char *src; - - dst = vdst; - src = vsrc; - while (n-- > 0) { - 2be: 85 c0 test %eax,%eax - 2c0: 7e 13 jle 2d5 - 2c2: 01 d0 add %edx,%eax - dst = vdst; - 2c4: 89 d7 mov %edx,%edi - 2c6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 2cd: 8d 76 00 lea 0x0(%esi),%esi - *dst++ = *src++; - 2d0: a4 movsb %ds:(%esi),%es:(%edi) - while (n-- > 0) { - 2d1: 39 f8 cmp %edi,%eax - 2d3: 75 fb jne 2d0 - } - return vdst; -} - 2d5: 5e pop %esi - 2d6: 89 d0 mov %edx,%eax - 2d8: 5f pop %edi - 2d9: 5d pop %ebp - 2da: c3 ret - -000002db : -name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 2db: b8 01 00 00 00 mov $0x1,%eax - 2e0: cd 40 int $0x40 - 2e2: c3 ret - -000002e3 : -SYSCALL(exit) - 2e3: b8 02 00 00 00 mov $0x2,%eax - 2e8: cd 40 int $0x40 - 2ea: c3 ret - -000002eb : -SYSCALL(wait) - 2eb: b8 03 00 00 00 mov $0x3,%eax - 2f0: cd 40 int $0x40 - 2f2: c3 ret - -000002f3 : -SYSCALL(pipe) - 2f3: b8 04 00 00 00 mov $0x4,%eax - 2f8: cd 40 int $0x40 - 2fa: c3 ret - -000002fb : -SYSCALL(read) - 2fb: b8 05 00 00 00 mov $0x5,%eax - 300: cd 40 int $0x40 - 302: c3 ret - -00000303 : -SYSCALL(kill) - 303: b8 06 00 00 00 mov $0x6,%eax - 308: cd 40 int $0x40 - 30a: c3 ret - -0000030b : -SYSCALL(exec) - 30b: b8 07 00 00 00 mov $0x7,%eax - 310: cd 40 int $0x40 - 312: c3 ret - -00000313 : -SYSCALL(fstat) - 313: b8 08 00 00 00 mov $0x8,%eax - 318: cd 40 int $0x40 - 31a: c3 ret - -0000031b : -SYSCALL(chdir) - 31b: b8 09 00 00 00 mov $0x9,%eax - 320: cd 40 int $0x40 - 322: c3 ret - -00000323 : -SYSCALL(dup) - 323: b8 0a 00 00 00 mov $0xa,%eax - 328: cd 40 int $0x40 - 32a: c3 ret - -0000032b : -SYSCALL(getpid) - 32b: b8 0b 00 00 00 mov $0xb,%eax - 330: cd 40 int $0x40 - 332: c3 ret - -00000333 : -SYSCALL(sbrk) - 333: b8 0c 00 00 00 mov $0xc,%eax - 338: cd 40 int $0x40 - 33a: c3 ret - -0000033b : -SYSCALL(sleep) - 33b: b8 0d 00 00 00 mov $0xd,%eax - 340: cd 40 int $0x40 - 342: c3 ret - -00000343 : -SYSCALL(uptime) - 343: b8 0e 00 00 00 mov $0xe,%eax - 348: cd 40 int $0x40 - 34a: c3 ret - -0000034b : -SYSCALL(open) - 34b: b8 0f 00 00 00 mov $0xf,%eax - 350: cd 40 int $0x40 - 352: c3 ret - -00000353 : -SYSCALL(write) - 353: b8 10 00 00 00 mov $0x10,%eax - 358: cd 40 int $0x40 - 35a: c3 ret - -0000035b : -SYSCALL(mknod) - 35b: b8 11 00 00 00 mov $0x11,%eax - 360: cd 40 int $0x40 - 362: c3 ret - -00000363 : -SYSCALL(unlink) - 363: b8 12 00 00 00 mov $0x12,%eax - 368: cd 40 int $0x40 - 36a: c3 ret - -0000036b : -SYSCALL(link) - 36b: b8 13 00 00 00 mov $0x13,%eax - 370: cd 40 int $0x40 - 372: c3 ret - -00000373 : -SYSCALL(mkdir) - 373: b8 14 00 00 00 mov $0x14,%eax - 378: cd 40 int $0x40 - 37a: c3 ret - -0000037b : -SYSCALL(close) - 37b: b8 15 00 00 00 mov $0x15,%eax - 380: cd 40 int $0x40 - 382: c3 ret - -00000383 : -SYSCALL(getch) - 383: b8 16 00 00 00 mov $0x16,%eax - 388: cd 40 int $0x40 - 38a: c3 ret - -0000038b : -SYSCALL(greeting) - 38b: b8 17 00 00 00 mov $0x17,%eax - 390: cd 40 int $0x40 - 392: c3 ret - -00000393 : -SYSCALL(shutdown) - 393: b8 18 00 00 00 mov $0x18,%eax - 398: cd 40 int $0x40 - 39a: c3 ret - 39b: 66 90 xchg %ax,%ax - 39d: 66 90 xchg %ax,%ax - 39f: 90 nop - -000003a0 : - -static void putc(int fd, char c) { - write(fd, &c, 1); -} - -static void printint(int fd, int xx, int base, int sgn) { - 3a0: 55 push %ebp - 3a1: 89 e5 mov %esp,%ebp - 3a3: 57 push %edi - 3a4: 56 push %esi - 3a5: 53 push %ebx - 3a6: 83 ec 3c sub $0x3c,%esp - 3a9: 89 4d c4 mov %ecx,-0x3c(%ebp) - uint x; - - neg = 0; - if (sgn && xx < 0) { - neg = 1; - x = -xx; - 3ac: 89 d1 mov %edx,%ecx -static void printint(int fd, int xx, int base, int sgn) { - 3ae: 89 45 b8 mov %eax,-0x48(%ebp) - if (sgn && xx < 0) { - 3b1: 85 d2 test %edx,%edx - 3b3: 0f 89 7f 00 00 00 jns 438 - 3b9: f6 45 08 01 testb $0x1,0x8(%ebp) - 3bd: 74 79 je 438 - neg = 1; - 3bf: c7 45 bc 01 00 00 00 movl $0x1,-0x44(%ebp) - x = -xx; - 3c6: f7 d9 neg %ecx - } - else { - x = xx; - } - - i = 0; - 3c8: 31 db xor %ebx,%ebx - 3ca: 8d 75 d7 lea -0x29(%ebp),%esi - 3cd: 8d 76 00 lea 0x0(%esi),%esi - do { - buf[i++] = digits[x % base]; - 3d0: 89 c8 mov %ecx,%eax - 3d2: 31 d2 xor %edx,%edx - 3d4: 89 cf mov %ecx,%edi - 3d6: f7 75 c4 divl -0x3c(%ebp) - 3d9: 0f b6 92 0c 08 00 00 movzbl 0x80c(%edx),%edx - 3e0: 89 45 c0 mov %eax,-0x40(%ebp) - 3e3: 89 d8 mov %ebx,%eax - 3e5: 8d 5b 01 lea 0x1(%ebx),%ebx - } - while ((x /= base) != 0); - 3e8: 8b 4d c0 mov -0x40(%ebp),%ecx - buf[i++] = digits[x % base]; - 3eb: 88 14 1e mov %dl,(%esi,%ebx,1) - while ((x /= base) != 0); - 3ee: 39 7d c4 cmp %edi,-0x3c(%ebp) - 3f1: 76 dd jbe 3d0 - if (neg) { - 3f3: 8b 4d bc mov -0x44(%ebp),%ecx - 3f6: 85 c9 test %ecx,%ecx - 3f8: 74 0c je 406 - buf[i++] = '-'; - 3fa: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) - buf[i++] = digits[x % base]; - 3ff: 89 d8 mov %ebx,%eax - buf[i++] = '-'; - 401: ba 2d 00 00 00 mov $0x2d,%edx - } - - while (--i >= 0) { - 406: 8b 7d b8 mov -0x48(%ebp),%edi - 409: 8d 5c 05 d7 lea -0x29(%ebp,%eax,1),%ebx - 40d: eb 07 jmp 416 - 40f: 90 nop - putc(fd, buf[i]); - 410: 0f b6 13 movzbl (%ebx),%edx - 413: 83 eb 01 sub $0x1,%ebx - write(fd, &c, 1); - 416: 83 ec 04 sub $0x4,%esp - 419: 88 55 d7 mov %dl,-0x29(%ebp) - 41c: 6a 01 push $0x1 - 41e: 56 push %esi - 41f: 57 push %edi - 420: e8 2e ff ff ff call 353 - while (--i >= 0) { - 425: 83 c4 10 add $0x10,%esp - 428: 39 de cmp %ebx,%esi - 42a: 75 e4 jne 410 - } -} - 42c: 8d 65 f4 lea -0xc(%ebp),%esp - 42f: 5b pop %ebx - 430: 5e pop %esi - 431: 5f pop %edi - 432: 5d pop %ebp - 433: c3 ret - 434: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - neg = 0; - 438: c7 45 bc 00 00 00 00 movl $0x0,-0x44(%ebp) - 43f: eb 87 jmp 3c8 - 441: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 448: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 44f: 90 nop - -00000450 : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void printf(int fd, const char *fmt, ...) { - 450: 55 push %ebp - 451: 89 e5 mov %esp,%ebp - 453: 57 push %edi - 454: 56 push %esi - 455: 53 push %ebx - 456: 83 ec 2c sub $0x2c,%esp - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for (i = 0; fmt[i]; i++) { - 459: 8b 5d 0c mov 0xc(%ebp),%ebx -void printf(int fd, const char *fmt, ...) { - 45c: 8b 75 08 mov 0x8(%ebp),%esi - for (i = 0; fmt[i]; i++) { - 45f: 0f b6 13 movzbl (%ebx),%edx - 462: 84 d2 test %dl,%dl - 464: 74 6a je 4d0 - ap = (uint*)(void*)&fmt + 1; - 466: 8d 45 10 lea 0x10(%ebp),%eax - 469: 83 c3 01 add $0x1,%ebx - write(fd, &c, 1); - 46c: 8d 7d e7 lea -0x19(%ebp),%edi - state = 0; - 46f: 31 c9 xor %ecx,%ecx - ap = (uint*)(void*)&fmt + 1; - 471: 89 45 d0 mov %eax,-0x30(%ebp) - 474: eb 36 jmp 4ac - 476: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 47d: 8d 76 00 lea 0x0(%esi),%esi - 480: 89 4d d4 mov %ecx,-0x2c(%ebp) - c = fmt[i] & 0xff; - if (state == 0) { - if (c == '%') { - state = '%'; - 483: b9 25 00 00 00 mov $0x25,%ecx - if (c == '%') { - 488: 83 f8 25 cmp $0x25,%eax - 48b: 74 15 je 4a2 - write(fd, &c, 1); - 48d: 83 ec 04 sub $0x4,%esp - 490: 88 55 e7 mov %dl,-0x19(%ebp) - 493: 6a 01 push $0x1 - 495: 57 push %edi - 496: 56 push %esi - 497: e8 b7 fe ff ff call 353 - 49c: 8b 4d d4 mov -0x2c(%ebp),%ecx - } - else { - putc(fd, c); - 49f: 83 c4 10 add $0x10,%esp - for (i = 0; fmt[i]; i++) { - 4a2: 0f b6 13 movzbl (%ebx),%edx - 4a5: 83 c3 01 add $0x1,%ebx - 4a8: 84 d2 test %dl,%dl - 4aa: 74 24 je 4d0 - c = fmt[i] & 0xff; - 4ac: 0f b6 c2 movzbl %dl,%eax - if (state == 0) { - 4af: 85 c9 test %ecx,%ecx - 4b1: 74 cd je 480 - } - } - else if (state == '%') { - 4b3: 83 f9 25 cmp $0x25,%ecx - 4b6: 75 ea jne 4a2 - if (c == 'd') { - 4b8: 83 f8 25 cmp $0x25,%eax - 4bb: 0f 84 07 01 00 00 je 5c8 - 4c1: 83 e8 63 sub $0x63,%eax - 4c4: 83 f8 15 cmp $0x15,%eax - 4c7: 77 17 ja 4e0 - 4c9: ff 24 85 b4 07 00 00 jmp *0x7b4(,%eax,4) - putc(fd, c); - } - state = 0; - } - } -} - 4d0: 8d 65 f4 lea -0xc(%ebp),%esp - 4d3: 5b pop %ebx - 4d4: 5e pop %esi - 4d5: 5f pop %edi - 4d6: 5d pop %ebp - 4d7: c3 ret - 4d8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 4df: 90 nop - write(fd, &c, 1); - 4e0: 83 ec 04 sub $0x4,%esp - 4e3: 88 55 d4 mov %dl,-0x2c(%ebp) - 4e6: 6a 01 push $0x1 - 4e8: 57 push %edi - 4e9: 56 push %esi - 4ea: c6 45 e7 25 movb $0x25,-0x19(%ebp) - 4ee: e8 60 fe ff ff call 353 - putc(fd, c); - 4f3: 0f b6 55 d4 movzbl -0x2c(%ebp),%edx - write(fd, &c, 1); - 4f7: 83 c4 0c add $0xc,%esp - 4fa: 88 55 e7 mov %dl,-0x19(%ebp) - 4fd: 6a 01 push $0x1 - 4ff: 57 push %edi - 500: 56 push %esi - 501: e8 4d fe ff ff call 353 - putc(fd, c); - 506: 83 c4 10 add $0x10,%esp - state = 0; - 509: 31 c9 xor %ecx,%ecx - 50b: eb 95 jmp 4a2 - 50d: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 16, 0); - 510: 83 ec 0c sub $0xc,%esp - 513: b9 10 00 00 00 mov $0x10,%ecx - 518: 6a 00 push $0x0 - 51a: 8b 45 d0 mov -0x30(%ebp),%eax - 51d: 8b 10 mov (%eax),%edx - 51f: 89 f0 mov %esi,%eax - 521: e8 7a fe ff ff call 3a0 - ap++; - 526: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 52a: 83 c4 10 add $0x10,%esp - state = 0; - 52d: 31 c9 xor %ecx,%ecx - 52f: e9 6e ff ff ff jmp 4a2 - 534: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - s = (char*)*ap; - 538: 8b 45 d0 mov -0x30(%ebp),%eax - 53b: 8b 10 mov (%eax),%edx - ap++; - 53d: 83 c0 04 add $0x4,%eax - 540: 89 45 d0 mov %eax,-0x30(%ebp) - if (s == 0) { - 543: 85 d2 test %edx,%edx - 545: 0f 84 8d 00 00 00 je 5d8 - while (*s != 0) { - 54b: 0f b6 02 movzbl (%edx),%eax - state = 0; - 54e: 31 c9 xor %ecx,%ecx - while (*s != 0) { - 550: 84 c0 test %al,%al - 552: 0f 84 4a ff ff ff je 4a2 - 558: 89 5d d4 mov %ebx,-0x2c(%ebp) - 55b: 89 d3 mov %edx,%ebx - 55d: 8d 76 00 lea 0x0(%esi),%esi - write(fd, &c, 1); - 560: 83 ec 04 sub $0x4,%esp - s++; - 563: 83 c3 01 add $0x1,%ebx - 566: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 569: 6a 01 push $0x1 - 56b: 57 push %edi - 56c: 56 push %esi - 56d: e8 e1 fd ff ff call 353 - while (*s != 0) { - 572: 0f b6 03 movzbl (%ebx),%eax - 575: 83 c4 10 add $0x10,%esp - 578: 84 c0 test %al,%al - 57a: 75 e4 jne 560 - state = 0; - 57c: 8b 5d d4 mov -0x2c(%ebp),%ebx - 57f: 31 c9 xor %ecx,%ecx - 581: e9 1c ff ff ff jmp 4a2 - 586: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 58d: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 10, 1); - 590: 83 ec 0c sub $0xc,%esp - 593: b9 0a 00 00 00 mov $0xa,%ecx - 598: 6a 01 push $0x1 - 59a: e9 7b ff ff ff jmp 51a - 59f: 90 nop - putc(fd, *ap); - 5a0: 8b 45 d0 mov -0x30(%ebp),%eax - write(fd, &c, 1); - 5a3: 83 ec 04 sub $0x4,%esp - putc(fd, *ap); - 5a6: 8b 00 mov (%eax),%eax - write(fd, &c, 1); - 5a8: 6a 01 push $0x1 - 5aa: 57 push %edi - 5ab: 56 push %esi - putc(fd, *ap); - 5ac: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 5af: e8 9f fd ff ff call 353 - ap++; - 5b4: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 5b8: 83 c4 10 add $0x10,%esp - state = 0; - 5bb: 31 c9 xor %ecx,%ecx - 5bd: e9 e0 fe ff ff jmp 4a2 - 5c2: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - putc(fd, c); - 5c8: 88 55 e7 mov %dl,-0x19(%ebp) - write(fd, &c, 1); - 5cb: 83 ec 04 sub $0x4,%esp - 5ce: e9 2a ff ff ff jmp 4fd - 5d3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 5d7: 90 nop - s = "(null)"; - 5d8: ba ab 07 00 00 mov $0x7ab,%edx - while (*s != 0) { - 5dd: 89 5d d4 mov %ebx,-0x2c(%ebp) - 5e0: b8 28 00 00 00 mov $0x28,%eax - 5e5: 89 d3 mov %edx,%ebx - 5e7: e9 74 ff ff ff jmp 560 - 5ec: 66 90 xchg %ax,%ax - 5ee: 66 90 xchg %ax,%ax - -000005f0 : -typedef union header Header; - -static Header base; -static Header *freep; - -void free(void *ap) { - 5f0: 55 push %ebp - Header *bp, *p; - - bp = (Header*)ap - 1; - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 5f1: a1 c0 0a 00 00 mov 0xac0,%eax -void free(void *ap) { - 5f6: 89 e5 mov %esp,%ebp - 5f8: 57 push %edi - 5f9: 56 push %esi - 5fa: 53 push %ebx - 5fb: 8b 5d 08 mov 0x8(%ebp),%ebx - bp = (Header*)ap - 1; - 5fe: 8d 4b f8 lea -0x8(%ebx),%ecx - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 601: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 608: 89 c2 mov %eax,%edx - 60a: 8b 00 mov (%eax),%eax - 60c: 39 ca cmp %ecx,%edx - 60e: 73 30 jae 640 - 610: 39 c1 cmp %eax,%ecx - 612: 72 04 jb 618 - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 614: 39 c2 cmp %eax,%edx - 616: 72 f0 jb 608 - break; - } - } - if (bp + bp->s.size == p->s.ptr) { - 618: 8b 73 fc mov -0x4(%ebx),%esi - 61b: 8d 3c f1 lea (%ecx,%esi,8),%edi - 61e: 39 f8 cmp %edi,%eax - 620: 74 30 je 652 - bp->s.size += p->s.ptr->s.size; - bp->s.ptr = p->s.ptr->s.ptr; - 622: 89 43 f8 mov %eax,-0x8(%ebx) - } - else { - bp->s.ptr = p->s.ptr; - } - if (p + p->s.size == bp) { - 625: 8b 42 04 mov 0x4(%edx),%eax - 628: 8d 34 c2 lea (%edx,%eax,8),%esi - 62b: 39 f1 cmp %esi,%ecx - 62d: 74 3a je 669 - p->s.size += bp->s.size; - p->s.ptr = bp->s.ptr; - 62f: 89 0a mov %ecx,(%edx) - } - else { - p->s.ptr = bp; - } - freep = p; -} - 631: 5b pop %ebx - freep = p; - 632: 89 15 c0 0a 00 00 mov %edx,0xac0 -} - 638: 5e pop %esi - 639: 5f pop %edi - 63a: 5d pop %ebp - 63b: c3 ret - 63c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 640: 39 c2 cmp %eax,%edx - 642: 72 c4 jb 608 - 644: 39 c1 cmp %eax,%ecx - 646: 73 c0 jae 608 - if (bp + bp->s.size == p->s.ptr) { - 648: 8b 73 fc mov -0x4(%ebx),%esi - 64b: 8d 3c f1 lea (%ecx,%esi,8),%edi - 64e: 39 f8 cmp %edi,%eax - 650: 75 d0 jne 622 - bp->s.size += p->s.ptr->s.size; - 652: 03 70 04 add 0x4(%eax),%esi - 655: 89 73 fc mov %esi,-0x4(%ebx) - bp->s.ptr = p->s.ptr->s.ptr; - 658: 8b 02 mov (%edx),%eax - 65a: 8b 00 mov (%eax),%eax - 65c: 89 43 f8 mov %eax,-0x8(%ebx) - if (p + p->s.size == bp) { - 65f: 8b 42 04 mov 0x4(%edx),%eax - 662: 8d 34 c2 lea (%edx,%eax,8),%esi - 665: 39 f1 cmp %esi,%ecx - 667: 75 c6 jne 62f - p->s.size += bp->s.size; - 669: 03 43 fc add -0x4(%ebx),%eax - freep = p; - 66c: 89 15 c0 0a 00 00 mov %edx,0xac0 - p->s.size += bp->s.size; - 672: 89 42 04 mov %eax,0x4(%edx) - p->s.ptr = bp->s.ptr; - 675: 8b 4b f8 mov -0x8(%ebx),%ecx - 678: 89 0a mov %ecx,(%edx) -} - 67a: 5b pop %ebx - 67b: 5e pop %esi - 67c: 5f pop %edi - 67d: 5d pop %ebp - 67e: c3 ret - 67f: 90 nop - -00000680 : - hp->s.size = nu; - free((void*)(hp + 1)); - return freep; -} - -void* malloc(uint nbytes) { - 680: 55 push %ebp - 681: 89 e5 mov %esp,%ebp - 683: 57 push %edi - 684: 56 push %esi - 685: 53 push %ebx - 686: 83 ec 1c sub $0x1c,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 689: 8b 45 08 mov 0x8(%ebp),%eax - if ((prevp = freep) == 0) { - 68c: 8b 3d c0 0a 00 00 mov 0xac0,%edi - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 692: 8d 70 07 lea 0x7(%eax),%esi - 695: c1 ee 03 shr $0x3,%esi - 698: 83 c6 01 add $0x1,%esi - if ((prevp = freep) == 0) { - 69b: 85 ff test %edi,%edi - 69d: 0f 84 9d 00 00 00 je 740 - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 6a3: 8b 17 mov (%edi),%edx - if (p->s.size >= nunits) { - 6a5: 8b 4a 04 mov 0x4(%edx),%ecx - 6a8: 39 f1 cmp %esi,%ecx - 6aa: 73 6a jae 716 - 6ac: bb 00 10 00 00 mov $0x1000,%ebx - 6b1: 39 de cmp %ebx,%esi - 6b3: 0f 43 de cmovae %esi,%ebx - p = sbrk(nu * sizeof(Header)); - 6b6: 8d 04 dd 00 00 00 00 lea 0x0(,%ebx,8),%eax - 6bd: 89 45 e4 mov %eax,-0x1c(%ebp) - 6c0: eb 17 jmp 6d9 - 6c2: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 6c8: 8b 02 mov (%edx),%eax - if (p->s.size >= nunits) { - 6ca: 8b 48 04 mov 0x4(%eax),%ecx - 6cd: 39 f1 cmp %esi,%ecx - 6cf: 73 4f jae 720 - p->s.size = nunits; - } - freep = prevp; - return (void*)(p + 1); - } - if (p == freep) { - 6d1: 8b 3d c0 0a 00 00 mov 0xac0,%edi - 6d7: 89 c2 mov %eax,%edx - 6d9: 39 d7 cmp %edx,%edi - 6db: 75 eb jne 6c8 - p = sbrk(nu * sizeof(Header)); - 6dd: 83 ec 0c sub $0xc,%esp - 6e0: ff 75 e4 push -0x1c(%ebp) - 6e3: e8 4b fc ff ff call 333 - if (p == (char*)-1) { - 6e8: 83 c4 10 add $0x10,%esp - 6eb: 83 f8 ff cmp $0xffffffff,%eax - 6ee: 74 1c je 70c - hp->s.size = nu; - 6f0: 89 58 04 mov %ebx,0x4(%eax) - free((void*)(hp + 1)); - 6f3: 83 ec 0c sub $0xc,%esp - 6f6: 83 c0 08 add $0x8,%eax - 6f9: 50 push %eax - 6fa: e8 f1 fe ff ff call 5f0 - return freep; - 6ff: 8b 15 c0 0a 00 00 mov 0xac0,%edx - if ((p = morecore(nunits)) == 0) { - 705: 83 c4 10 add $0x10,%esp - 708: 85 d2 test %edx,%edx - 70a: 75 bc jne 6c8 - return 0; - } - } - } -} - 70c: 8d 65 f4 lea -0xc(%ebp),%esp - return 0; - 70f: 31 c0 xor %eax,%eax -} - 711: 5b pop %ebx - 712: 5e pop %esi - 713: 5f pop %edi - 714: 5d pop %ebp - 715: c3 ret - if (p->s.size >= nunits) { - 716: 89 d0 mov %edx,%eax - 718: 89 fa mov %edi,%edx - 71a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - if (p->s.size == nunits) { - 720: 39 ce cmp %ecx,%esi - 722: 74 4c je 770 - p->s.size -= nunits; - 724: 29 f1 sub %esi,%ecx - 726: 89 48 04 mov %ecx,0x4(%eax) - p += p->s.size; - 729: 8d 04 c8 lea (%eax,%ecx,8),%eax - p->s.size = nunits; - 72c: 89 70 04 mov %esi,0x4(%eax) - freep = prevp; - 72f: 89 15 c0 0a 00 00 mov %edx,0xac0 -} - 735: 8d 65 f4 lea -0xc(%ebp),%esp - return (void*)(p + 1); - 738: 83 c0 08 add $0x8,%eax -} - 73b: 5b pop %ebx - 73c: 5e pop %esi - 73d: 5f pop %edi - 73e: 5d pop %ebp - 73f: c3 ret - base.s.ptr = freep = prevp = &base; - 740: c7 05 c0 0a 00 00 c4 movl $0xac4,0xac0 - 747: 0a 00 00 - base.s.size = 0; - 74a: bf c4 0a 00 00 mov $0xac4,%edi - base.s.ptr = freep = prevp = &base; - 74f: c7 05 c4 0a 00 00 c4 movl $0xac4,0xac4 - 756: 0a 00 00 - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 759: 89 fa mov %edi,%edx - base.s.size = 0; - 75b: c7 05 c8 0a 00 00 00 movl $0x0,0xac8 - 762: 00 00 00 - if (p->s.size >= nunits) { - 765: e9 42 ff ff ff jmp 6ac - 76a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - prevp->s.ptr = p->s.ptr; - 770: 8b 08 mov (%eax),%ecx - 772: 89 0a mov %ecx,(%edx) - 774: eb b9 jmp 72f diff --git a/screen.c b/screen.c index e8feaa8..6675d49 100644 --- a/screen.c +++ b/screen.c @@ -5,20 +5,27 @@ int main(int argc, char *argv[]) { //int consoles = 0; int pid; //char* comment = ""; - + for (int i = 1; i < argc; i++) { if (strcmp(argv[i], "-c") == 0) { } } - pid = fork(); + pid = fork(); if (pid < 0) { printf(1, "screen: fork failed\n"); } if (pid == 0) { - exec("sh", argv); - printf(1, "screen: exec sh failed\n"); + if (screen() != 0) + { + exec("sh", argv); + printf(1, "screen: exec sh failed\n"); + } + else + { + printf(1, "screen: failed to create a new console\n"); + } } exit(); } \ No newline at end of file diff --git a/screen.d b/screen.d deleted file mode 100644 index 38dc977..0000000 --- a/screen.d +++ /dev/null @@ -1 +0,0 @@ -screen.o: screen.c /usr/include/stdc-predef.h types.h user.h diff --git a/screen.o b/screen.o deleted file mode 100644 index f5d851cb2daea103727345f50b1e0061083e3f9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3788 zcma)9ZERat89wKJ#i{e*H0#o|j5YFeHU7dXf;Y?de$N6&x1_#Q{;Mh@=t+L3Ap=(TuO=H~g?3 ztnU#?t*Z|us+4_&Xape0P z`jzyk_yW{525ryZ-ujXJ$u!!z1a)W40WXN^~T=2FvFinsd3t^cLg10>P0$|W_ z!ze{2&@dHMG^x5x>YO?{TYCEtw}-q#TlN4%>xlOy@RCuI+>me*!0=vlmaEdc6X2)m z@dGsFr8+T^Lk8(6Cs@QSnqMDXAUGoouwE6pDdlv4GhxypG_Mt|3vZAfCA53d#;Bix zs~3tv75f+z52IP!m^aXb#elDnc@iDf)*3oGS`BnBlKHG=Fb7vGjYIQ@cv0R2V;>RO z>_@Wp2sU6;WTzZj-J*P8(jGZAWi4h;PPxY>m&Q*|N*KI(VP{TFNvN|+MkVqaoM>y82j^j*Q z&!M{|AyCaT;6^*blgmyvi|*e0<#H$9vP|r>Rl4m=FUS>VVbM-*-gXwx$rbSd1X|3} zHyp2pA==GU)P2Q}&g3~UK!;mWd`;VDfG7w59vLQJN}Lv$L-H7SOCGXD?T5gr!xxvx zxrc?ThTiA8ckFZbNOwZIhrQvC{@tCp;*Na69rSLy!=7~W-*Sh~K)USaN8#h8uIuf0 zv#_|{({4uLqZ;Sj!BtOsKg)c`b$^YRoQ3x)Sye_S{)K#@ zT3s*a3y;HTBWf1P?XaGPQAfaVVI?j2_0UhksM=9B8(~`5i2X)TXf-jjAU4i^*)>f`1%W<`JA;@iTxl86(%Mi2Y zjR2&4_b$12F6t8KC!n5#dI##M=v%?PmUyD~0WH+~^Tc6Yz_GNawEdIRW1?j(hm_YmPXtC91dd|Kn<8k-t#X#A?iuWNi$ z`ipjMGDgrQ#J6JPZ z8f>PbxbCOED3+5%6yqiZdX|bMh(WzbA1M4dZMQm_^`P9Yu7%M?6S0c-%jGzDzTaAJ zR_bArG9_|ouh@^O!46d%RsYAW9!7yljENYQ>NO=-nhh2oQH)Rzi>S#3Rp&ZG1+_I* zK(X-ukN9SAB%LoKu=5+W7fTyy3XMFsl=NPH{KWBYzn`BvKlt(dNz8Xbah;B1u|1%X z_kz?yV?8j$dqP@7!*dX4(MWIM?JNWN69vyqRWr`(2{h(4^iMF)_9+beDD?gL=GBAk zJlkYp=88eGU`Zf%#Iflrx{ZOOv`y~$lS>vQ_^!vpwzY;DO@1!A< z?>A78H+02ZM6EEkzd|OD<5%=4_&uU|0@p$M6I%azUxUE?;(G5yGwbco1-1AF^6@VV j>tI&: - return -1; - } - return 0; -} - -int main(void) { - 0: 8d 4c 24 04 lea 0x4(%esp),%ecx - 4: 83 e4 f0 and $0xfffffff0,%esp - 7: ff 71 fc push -0x4(%ecx) - a: 55 push %ebp - b: 89 e5 mov %esp,%ebp - d: 51 push %ecx - e: 83 ec 04 sub $0x4,%esp - static char buf[100]; - int fd; - - // Ensure that three file descriptors are open. - while ((fd = open("console", O_RDWR)) >= 0) { - 11: eb 0e jmp 21 - 13: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 17: 90 nop - if (fd >= 3) { - 18: 83 f8 02 cmp $0x2,%eax - 1b: 0f 8f 01 01 00 00 jg 122 - while ((fd = open("console", O_RDWR)) >= 0) { - 21: 83 ec 08 sub $0x8,%esp - 24: 6a 02 push $0x2 - 26: 68 89 13 00 00 push $0x1389 - 2b: e8 8b 0e 00 00 call ebb - 30: 83 c4 10 add $0x10,%esp - 33: 85 c0 test %eax,%eax - 35: 79 e1 jns 18 - 37: eb 33 jmp 6c - 39: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - // Read and run input commands. - while (getcmd(buf, sizeof(buf)) >= 0) { - if (buf[0] == 'e' && buf[1] == 'x' && buf[2] == 'i' && buf[3] == 't') { - exit(); - } - if (buf[0] == 'c' && buf[1] == 'd' && buf[2] == ' ') { - 40: 3c 63 cmp $0x63,%al - 42: 75 0d jne 51 - 44: 80 3d 21 1a 00 00 64 cmpb $0x64,0x1a21 - 4b: 0f 84 7f 00 00 00 je d0 -} - -int fork1(void) { - int pid; - - pid = fork(); - 51: e8 f5 0d 00 00 call e4b - if (pid == -1) { - 56: 83 f8 ff cmp $0xffffffff,%eax - 59: 0f 84 e9 00 00 00 je 148 - if (fork1() == 0) { - 5f: 85 c0 test %eax,%eax - 61: 0f 84 cc 00 00 00 je 133 - wait(); - 67: e8 ef 0d 00 00 call e5b - printf(2, "$ "); - 6c: 83 ec 08 sub $0x8,%esp - 6f: 68 e8 12 00 00 push $0x12e8 - 74: 6a 02 push $0x2 - 76: e8 45 0f 00 00 call fc0 - memset(buf, 0, nbuf); - 7b: 83 c4 0c add $0xc,%esp - 7e: 6a 64 push $0x64 - 80: 6a 00 push $0x0 - 82: 68 20 1a 00 00 push $0x1a20 - 87: e8 34 0c 00 00 call cc0 - gets(buf, nbuf); - 8c: 58 pop %eax - 8d: 5a pop %edx - 8e: 6a 64 push $0x64 - 90: 68 20 1a 00 00 push $0x1a20 - 95: e8 86 0c 00 00 call d20 - if (buf[0] == 0) { // EOF - 9a: 0f b6 05 20 1a 00 00 movzbl 0x1a20,%eax - a1: 83 c4 10 add $0x10,%esp - a4: 84 c0 test %al,%al - a6: 74 1f je c7 - if (buf[0] == 'e' && buf[1] == 'x' && buf[2] == 'i' && buf[3] == 't') { - a8: 3c 65 cmp $0x65,%al - aa: 75 94 jne 40 - ac: 80 3d 21 1a 00 00 78 cmpb $0x78,0x1a21 - b3: 75 9c jne 51 - b5: 80 3d 22 1a 00 00 69 cmpb $0x69,0x1a22 - bc: 75 93 jne 51 - be: 80 3d 23 1a 00 00 74 cmpb $0x74,0x1a23 - c5: 75 8a jne 51 - exit(); - c7: e8 87 0d 00 00 call e53 - cc: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - if (buf[0] == 'c' && buf[1] == 'd' && buf[2] == ' ') { - d0: 80 3d 22 1a 00 00 20 cmpb $0x20,0x1a22 - d7: 0f 85 74 ff ff ff jne 51 - buf[strlen(buf) - 1] = 0; // chop \n - dd: 83 ec 0c sub $0xc,%esp - e0: 68 20 1a 00 00 push $0x1a20 - e5: e8 a6 0b 00 00 call c90 - if (chdir(buf + 3) < 0) { - ea: c7 04 24 23 1a 00 00 movl $0x1a23,(%esp) - buf[strlen(buf) - 1] = 0; // chop \n - f1: c6 80 1f 1a 00 00 00 movb $0x0,0x1a1f(%eax) - if (chdir(buf + 3) < 0) { - f8: e8 8e 0d 00 00 call e8b - fd: 83 c4 10 add $0x10,%esp - 100: 85 c0 test %eax,%eax - 102: 0f 89 64 ff ff ff jns 6c - printf(2, "cannot cd %s\n", buf + 3); - 108: 51 push %ecx - 109: 68 23 1a 00 00 push $0x1a23 - 10e: 68 91 13 00 00 push $0x1391 - 113: 6a 02 push $0x2 - 115: e8 a6 0e 00 00 call fc0 - 11a: 83 c4 10 add $0x10,%esp - 11d: e9 4a ff ff ff jmp 6c - close(fd); - 122: 83 ec 0c sub $0xc,%esp - 125: 50 push %eax - 126: e8 c0 0d 00 00 call eeb - break; - 12b: 83 c4 10 add $0x10,%esp - 12e: e9 39 ff ff ff jmp 6c - runcmd(parsecmd(buf)); - 133: 83 ec 0c sub $0xc,%esp - 136: 68 20 1a 00 00 push $0x1a20 - 13b: e8 50 0a 00 00 call b90 - 140: 89 04 24 mov %eax,(%esp) - 143: e8 98 00 00 00 call 1e0 - panic("fork"); - 148: 83 ec 0c sub $0xc,%esp - 14b: 68 eb 12 00 00 push $0x12eb - 150: e8 4b 00 00 00 call 1a0 - 155: 66 90 xchg %ax,%ax - 157: 66 90 xchg %ax,%ax - 159: 66 90 xchg %ax,%ax - 15b: 66 90 xchg %ax,%ax - 15d: 66 90 xchg %ax,%ax - 15f: 90 nop - -00000160 : -int getcmd(char *buf, int nbuf) { - 160: 55 push %ebp - 161: 89 e5 mov %esp,%ebp - 163: 56 push %esi - 164: 53 push %ebx - 165: 8b 75 0c mov 0xc(%ebp),%esi - 168: 8b 5d 08 mov 0x8(%ebp),%ebx - printf(2, "$ "); - 16b: 83 ec 08 sub $0x8,%esp - 16e: 68 e8 12 00 00 push $0x12e8 - 173: 6a 02 push $0x2 - 175: e8 46 0e 00 00 call fc0 - memset(buf, 0, nbuf); - 17a: 83 c4 0c add $0xc,%esp - 17d: 56 push %esi - 17e: 6a 00 push $0x0 - 180: 53 push %ebx - 181: e8 3a 0b 00 00 call cc0 - gets(buf, nbuf); - 186: 58 pop %eax - 187: 5a pop %edx - 188: 56 push %esi - 189: 53 push %ebx - 18a: e8 91 0b 00 00 call d20 - if (buf[0] == 0) { // EOF - 18f: 83 c4 10 add $0x10,%esp - 192: 80 3b 01 cmpb $0x1,(%ebx) - 195: 19 c0 sbb %eax,%eax -} - 197: 8d 65 f8 lea -0x8(%ebp),%esp - 19a: 5b pop %ebx - 19b: 5e pop %esi - 19c: 5d pop %ebp - 19d: c3 ret - 19e: 66 90 xchg %ax,%ax - -000001a0 : -void panic(char *s) { - 1a0: 55 push %ebp - 1a1: 89 e5 mov %esp,%ebp - 1a3: 83 ec 0c sub $0xc,%esp - printf(2, "%s\n", s); - 1a6: ff 75 08 push 0x8(%ebp) - 1a9: 68 85 13 00 00 push $0x1385 - 1ae: 6a 02 push $0x2 - 1b0: e8 0b 0e 00 00 call fc0 - exit(); - 1b5: e8 99 0c 00 00 call e53 - 1ba: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -000001c0 : -int fork1(void) { - 1c0: 55 push %ebp - 1c1: 89 e5 mov %esp,%ebp - 1c3: 83 ec 08 sub $0x8,%esp - pid = fork(); - 1c6: e8 80 0c 00 00 call e4b - if (pid == -1) { - 1cb: 83 f8 ff cmp $0xffffffff,%eax - 1ce: 74 02 je 1d2 - } - return pid; -} - 1d0: c9 leave - 1d1: c3 ret - panic("fork"); - 1d2: 83 ec 0c sub $0xc,%esp - 1d5: 68 eb 12 00 00 push $0x12eb - 1da: e8 c1 ff ff ff call 1a0 - 1df: 90 nop - -000001e0 : -void runcmd(struct cmd *cmd) { - 1e0: 55 push %ebp - 1e1: 89 e5 mov %esp,%ebp - 1e3: 53 push %ebx - 1e4: 83 ec 14 sub $0x14,%esp - 1e7: 8b 5d 08 mov 0x8(%ebp),%ebx - if (cmd == 0) { - 1ea: 85 db test %ebx,%ebx - 1ec: 74 42 je 230 - switch (cmd->type) { - 1ee: 83 3b 05 cmpl $0x5,(%ebx) - 1f1: 0f 87 e3 00 00 00 ja 2da - 1f7: 8b 03 mov (%ebx),%eax - 1f9: ff 24 85 a0 13 00 00 jmp *0x13a0(,%eax,4) - if (ecmd->argv[0] == 0) { - 200: 8b 43 04 mov 0x4(%ebx),%eax - 203: 85 c0 test %eax,%eax - 205: 74 29 je 230 - exec(ecmd->argv[0], ecmd->argv); - 207: 8d 53 04 lea 0x4(%ebx),%edx - 20a: 51 push %ecx - 20b: 51 push %ecx - 20c: 52 push %edx - 20d: 50 push %eax - 20e: e8 68 0c 00 00 call e7b - printf(2, "exec %s failed\n", ecmd->argv[0]); - 213: 83 c4 0c add $0xc,%esp - 216: ff 73 04 push 0x4(%ebx) - 219: 68 f7 12 00 00 push $0x12f7 - 21e: 6a 02 push $0x2 - 220: e8 9b 0d 00 00 call fc0 - break; - 225: 83 c4 10 add $0x10,%esp - 228: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 22f: 90 nop - exit(); - 230: e8 1e 0c 00 00 call e53 - if (fork1() == 0) { - 235: e8 86 ff ff ff call 1c0 - 23a: 85 c0 test %eax,%eax - 23c: 75 f2 jne 230 - 23e: e9 8c 00 00 00 jmp 2cf - if (pipe(p) < 0) { - 243: 83 ec 0c sub $0xc,%esp - 246: 8d 45 f0 lea -0x10(%ebp),%eax - 249: 50 push %eax - 24a: e8 14 0c 00 00 call e63 - 24f: 83 c4 10 add $0x10,%esp - 252: 85 c0 test %eax,%eax - 254: 0f 88 a2 00 00 00 js 2fc - if (fork1() == 0) { - 25a: e8 61 ff ff ff call 1c0 - 25f: 85 c0 test %eax,%eax - 261: 0f 84 a2 00 00 00 je 309 - if (fork1() == 0) { - 267: e8 54 ff ff ff call 1c0 - 26c: 85 c0 test %eax,%eax - 26e: 0f 84 c3 00 00 00 je 337 - close(p[0]); - 274: 83 ec 0c sub $0xc,%esp - 277: ff 75 f0 push -0x10(%ebp) - 27a: e8 6c 0c 00 00 call eeb - close(p[1]); - 27f: 58 pop %eax - 280: ff 75 f4 push -0xc(%ebp) - 283: e8 63 0c 00 00 call eeb - wait(); - 288: e8 ce 0b 00 00 call e5b - wait(); - 28d: e8 c9 0b 00 00 call e5b - break; - 292: 83 c4 10 add $0x10,%esp - 295: eb 99 jmp 230 - if (fork1() == 0) { - 297: e8 24 ff ff ff call 1c0 - 29c: 85 c0 test %eax,%eax - 29e: 74 2f je 2cf - wait(); - 2a0: e8 b6 0b 00 00 call e5b - runcmd(lcmd->right); - 2a5: 83 ec 0c sub $0xc,%esp - 2a8: ff 73 08 push 0x8(%ebx) - 2ab: e8 30 ff ff ff call 1e0 - close(rcmd->fd); - 2b0: 83 ec 0c sub $0xc,%esp - 2b3: ff 73 14 push 0x14(%ebx) - 2b6: e8 30 0c 00 00 call eeb - if (open(rcmd->file, rcmd->mode) < 0) { - 2bb: 58 pop %eax - 2bc: 5a pop %edx - 2bd: ff 73 10 push 0x10(%ebx) - 2c0: ff 73 08 push 0x8(%ebx) - 2c3: e8 f3 0b 00 00 call ebb - 2c8: 83 c4 10 add $0x10,%esp - 2cb: 85 c0 test %eax,%eax - 2cd: 78 18 js 2e7 - runcmd(bcmd->cmd); - 2cf: 83 ec 0c sub $0xc,%esp - 2d2: ff 73 04 push 0x4(%ebx) - 2d5: e8 06 ff ff ff call 1e0 - panic("runcmd"); - 2da: 83 ec 0c sub $0xc,%esp - 2dd: 68 f0 12 00 00 push $0x12f0 - 2e2: e8 b9 fe ff ff call 1a0 - printf(2, "open %s failed\n", rcmd->file); - 2e7: 51 push %ecx - 2e8: ff 73 08 push 0x8(%ebx) - 2eb: 68 07 13 00 00 push $0x1307 - 2f0: 6a 02 push $0x2 - 2f2: e8 c9 0c 00 00 call fc0 - exit(); - 2f7: e8 57 0b 00 00 call e53 - panic("pipe"); - 2fc: 83 ec 0c sub $0xc,%esp - 2ff: 68 17 13 00 00 push $0x1317 - 304: e8 97 fe ff ff call 1a0 - close(1); - 309: 83 ec 0c sub $0xc,%esp - 30c: 6a 01 push $0x1 - 30e: e8 d8 0b 00 00 call eeb - dup(p[1]); - 313: 58 pop %eax - 314: ff 75 f4 push -0xc(%ebp) - 317: e8 77 0b 00 00 call e93 - close(p[0]); - 31c: 58 pop %eax - 31d: ff 75 f0 push -0x10(%ebp) - 320: e8 c6 0b 00 00 call eeb - close(p[1]); - 325: 58 pop %eax - 326: ff 75 f4 push -0xc(%ebp) - 329: e8 bd 0b 00 00 call eeb - runcmd(pcmd->left); - 32e: 5a pop %edx - 32f: ff 73 04 push 0x4(%ebx) - 332: e8 a9 fe ff ff call 1e0 - close(0); - 337: 83 ec 0c sub $0xc,%esp - 33a: 6a 00 push $0x0 - 33c: e8 aa 0b 00 00 call eeb - dup(p[0]); - 341: 5a pop %edx - 342: ff 75 f0 push -0x10(%ebp) - 345: e8 49 0b 00 00 call e93 - close(p[0]); - 34a: 59 pop %ecx - 34b: ff 75 f0 push -0x10(%ebp) - 34e: e8 98 0b 00 00 call eeb - close(p[1]); - 353: 58 pop %eax - 354: ff 75 f4 push -0xc(%ebp) - 357: e8 8f 0b 00 00 call eeb - runcmd(pcmd->right); - 35c: 58 pop %eax - 35d: ff 73 08 push 0x8(%ebx) - 360: e8 7b fe ff ff call 1e0 - 365: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 36c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000370 : - - -// Constructors - -struct cmd* execcmd(void) { - 370: 55 push %ebp - 371: 89 e5 mov %esp,%ebp - 373: 53 push %ebx - 374: 83 ec 10 sub $0x10,%esp - struct execcmd *cmd; - - cmd = malloc(sizeof(*cmd)); - 377: 6a 54 push $0x54 - 379: e8 72 0e 00 00 call 11f0 - memset(cmd, 0, sizeof(*cmd)); - 37e: 83 c4 0c add $0xc,%esp - 381: 6a 54 push $0x54 - cmd = malloc(sizeof(*cmd)); - 383: 89 c3 mov %eax,%ebx - memset(cmd, 0, sizeof(*cmd)); - 385: 6a 00 push $0x0 - 387: 50 push %eax - 388: e8 33 09 00 00 call cc0 - cmd->type = EXEC; - 38d: c7 03 01 00 00 00 movl $0x1,(%ebx) - return (struct cmd*)cmd; -} - 393: 89 d8 mov %ebx,%eax - 395: 8b 5d fc mov -0x4(%ebp),%ebx - 398: c9 leave - 399: c3 ret - 39a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -000003a0 : - -struct cmd* redircmd(struct cmd *subcmd, char *file, char *efile, int mode, int fd) { - 3a0: 55 push %ebp - 3a1: 89 e5 mov %esp,%ebp - 3a3: 53 push %ebx - 3a4: 83 ec 10 sub $0x10,%esp - struct redircmd *cmd; - - cmd = malloc(sizeof(*cmd)); - 3a7: 6a 18 push $0x18 - 3a9: e8 42 0e 00 00 call 11f0 - memset(cmd, 0, sizeof(*cmd)); - 3ae: 83 c4 0c add $0xc,%esp - 3b1: 6a 18 push $0x18 - cmd = malloc(sizeof(*cmd)); - 3b3: 89 c3 mov %eax,%ebx - memset(cmd, 0, sizeof(*cmd)); - 3b5: 6a 00 push $0x0 - 3b7: 50 push %eax - 3b8: e8 03 09 00 00 call cc0 - cmd->type = REDIR; - cmd->cmd = subcmd; - 3bd: 8b 45 08 mov 0x8(%ebp),%eax - cmd->type = REDIR; - 3c0: c7 03 02 00 00 00 movl $0x2,(%ebx) - cmd->cmd = subcmd; - 3c6: 89 43 04 mov %eax,0x4(%ebx) - cmd->file = file; - 3c9: 8b 45 0c mov 0xc(%ebp),%eax - 3cc: 89 43 08 mov %eax,0x8(%ebx) - cmd->efile = efile; - 3cf: 8b 45 10 mov 0x10(%ebp),%eax - 3d2: 89 43 0c mov %eax,0xc(%ebx) - cmd->mode = mode; - 3d5: 8b 45 14 mov 0x14(%ebp),%eax - 3d8: 89 43 10 mov %eax,0x10(%ebx) - cmd->fd = fd; - 3db: 8b 45 18 mov 0x18(%ebp),%eax - 3de: 89 43 14 mov %eax,0x14(%ebx) - return (struct cmd*)cmd; -} - 3e1: 89 d8 mov %ebx,%eax - 3e3: 8b 5d fc mov -0x4(%ebp),%ebx - 3e6: c9 leave - 3e7: c3 ret - 3e8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 3ef: 90 nop - -000003f0 : - -struct cmd* pipecmd(struct cmd *left, struct cmd *right) { - 3f0: 55 push %ebp - 3f1: 89 e5 mov %esp,%ebp - 3f3: 53 push %ebx - 3f4: 83 ec 10 sub $0x10,%esp - struct pipecmd *cmd; - - cmd = malloc(sizeof(*cmd)); - 3f7: 6a 0c push $0xc - 3f9: e8 f2 0d 00 00 call 11f0 - memset(cmd, 0, sizeof(*cmd)); - 3fe: 83 c4 0c add $0xc,%esp - 401: 6a 0c push $0xc - cmd = malloc(sizeof(*cmd)); - 403: 89 c3 mov %eax,%ebx - memset(cmd, 0, sizeof(*cmd)); - 405: 6a 00 push $0x0 - 407: 50 push %eax - 408: e8 b3 08 00 00 call cc0 - cmd->type = PIPE; - cmd->left = left; - 40d: 8b 45 08 mov 0x8(%ebp),%eax - cmd->type = PIPE; - 410: c7 03 03 00 00 00 movl $0x3,(%ebx) - cmd->left = left; - 416: 89 43 04 mov %eax,0x4(%ebx) - cmd->right = right; - 419: 8b 45 0c mov 0xc(%ebp),%eax - 41c: 89 43 08 mov %eax,0x8(%ebx) - return (struct cmd*)cmd; -} - 41f: 89 d8 mov %ebx,%eax - 421: 8b 5d fc mov -0x4(%ebp),%ebx - 424: c9 leave - 425: c3 ret - 426: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 42d: 8d 76 00 lea 0x0(%esi),%esi - -00000430 : - -struct cmd* listcmd(struct cmd *left, struct cmd *right) { - 430: 55 push %ebp - 431: 89 e5 mov %esp,%ebp - 433: 53 push %ebx - 434: 83 ec 10 sub $0x10,%esp - struct listcmd *cmd; - - cmd = malloc(sizeof(*cmd)); - 437: 6a 0c push $0xc - 439: e8 b2 0d 00 00 call 11f0 - memset(cmd, 0, sizeof(*cmd)); - 43e: 83 c4 0c add $0xc,%esp - 441: 6a 0c push $0xc - cmd = malloc(sizeof(*cmd)); - 443: 89 c3 mov %eax,%ebx - memset(cmd, 0, sizeof(*cmd)); - 445: 6a 00 push $0x0 - 447: 50 push %eax - 448: e8 73 08 00 00 call cc0 - cmd->type = LIST; - cmd->left = left; - 44d: 8b 45 08 mov 0x8(%ebp),%eax - cmd->type = LIST; - 450: c7 03 04 00 00 00 movl $0x4,(%ebx) - cmd->left = left; - 456: 89 43 04 mov %eax,0x4(%ebx) - cmd->right = right; - 459: 8b 45 0c mov 0xc(%ebp),%eax - 45c: 89 43 08 mov %eax,0x8(%ebx) - return (struct cmd*)cmd; -} - 45f: 89 d8 mov %ebx,%eax - 461: 8b 5d fc mov -0x4(%ebp),%ebx - 464: c9 leave - 465: c3 ret - 466: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 46d: 8d 76 00 lea 0x0(%esi),%esi - -00000470 : - -struct cmd* backcmd(struct cmd *subcmd) { - 470: 55 push %ebp - 471: 89 e5 mov %esp,%ebp - 473: 53 push %ebx - 474: 83 ec 10 sub $0x10,%esp - struct backcmd *cmd; - - cmd = malloc(sizeof(*cmd)); - 477: 6a 08 push $0x8 - 479: e8 72 0d 00 00 call 11f0 - memset(cmd, 0, sizeof(*cmd)); - 47e: 83 c4 0c add $0xc,%esp - 481: 6a 08 push $0x8 - cmd = malloc(sizeof(*cmd)); - 483: 89 c3 mov %eax,%ebx - memset(cmd, 0, sizeof(*cmd)); - 485: 6a 00 push $0x0 - 487: 50 push %eax - 488: e8 33 08 00 00 call cc0 - cmd->type = BACK; - cmd->cmd = subcmd; - 48d: 8b 45 08 mov 0x8(%ebp),%eax - cmd->type = BACK; - 490: c7 03 05 00 00 00 movl $0x5,(%ebx) - cmd->cmd = subcmd; - 496: 89 43 04 mov %eax,0x4(%ebx) - return (struct cmd*)cmd; -} - 499: 89 d8 mov %ebx,%eax - 49b: 8b 5d fc mov -0x4(%ebp),%ebx - 49e: c9 leave - 49f: c3 ret - -000004a0 : -// Parsing - -char whitespace[] = " \t\r\n\v"; -char symbols[] = "<|>&;()"; - -int gettoken(char **ps, char *es, char **q, char **eq) { - 4a0: 55 push %ebp - 4a1: 89 e5 mov %esp,%ebp - 4a3: 57 push %edi - 4a4: 56 push %esi - 4a5: 53 push %ebx - 4a6: 83 ec 0c sub $0xc,%esp - char *s; - int ret; - - s = *ps; - 4a9: 8b 45 08 mov 0x8(%ebp),%eax -int gettoken(char **ps, char *es, char **q, char **eq) { - 4ac: 8b 5d 0c mov 0xc(%ebp),%ebx - 4af: 8b 75 10 mov 0x10(%ebp),%esi - s = *ps; - 4b2: 8b 38 mov (%eax),%edi - while (s < es && strchr(whitespace, *s)) { - 4b4: 39 df cmp %ebx,%edi - 4b6: 72 0f jb 4c7 - 4b8: eb 25 jmp 4df - 4ba: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - s++; - 4c0: 83 c7 01 add $0x1,%edi - while (s < es && strchr(whitespace, *s)) { - 4c3: 39 fb cmp %edi,%ebx - 4c5: 74 18 je 4df - 4c7: 0f be 07 movsbl (%edi),%eax - 4ca: 83 ec 08 sub $0x8,%esp - 4cd: 50 push %eax - 4ce: 68 0c 1a 00 00 push $0x1a0c - 4d3: e8 08 08 00 00 call ce0 - 4d8: 83 c4 10 add $0x10,%esp - 4db: 85 c0 test %eax,%eax - 4dd: 75 e1 jne 4c0 - } - if (q) { - 4df: 85 f6 test %esi,%esi - 4e1: 74 02 je 4e5 - *q = s; - 4e3: 89 3e mov %edi,(%esi) - } - ret = *s; - 4e5: 0f b6 07 movzbl (%edi),%eax - switch (*s) { - 4e8: 3c 3c cmp $0x3c,%al - 4ea: 0f 8f d0 00 00 00 jg 5c0 - 4f0: 3c 3a cmp $0x3a,%al - 4f2: 0f 8f b4 00 00 00 jg 5ac - 4f8: 84 c0 test %al,%al - 4fa: 75 44 jne 540 - 4fc: 31 f6 xor %esi,%esi - while (s < es && !strchr(whitespace, *s) && !strchr(symbols, *s)) { - s++; - } - break; - } - if (eq) { - 4fe: 8b 55 14 mov 0x14(%ebp),%edx - 501: 85 d2 test %edx,%edx - 503: 74 05 je 50a - *eq = s; - 505: 8b 45 14 mov 0x14(%ebp),%eax - 508: 89 38 mov %edi,(%eax) - } - - while (s < es && strchr(whitespace, *s)) { - 50a: 39 df cmp %ebx,%edi - 50c: 72 09 jb 517 - 50e: eb 1f jmp 52f - s++; - 510: 83 c7 01 add $0x1,%edi - while (s < es && strchr(whitespace, *s)) { - 513: 39 fb cmp %edi,%ebx - 515: 74 18 je 52f - 517: 0f be 07 movsbl (%edi),%eax - 51a: 83 ec 08 sub $0x8,%esp - 51d: 50 push %eax - 51e: 68 0c 1a 00 00 push $0x1a0c - 523: e8 b8 07 00 00 call ce0 - 528: 83 c4 10 add $0x10,%esp - 52b: 85 c0 test %eax,%eax - 52d: 75 e1 jne 510 - } - *ps = s; - 52f: 8b 45 08 mov 0x8(%ebp),%eax - 532: 89 38 mov %edi,(%eax) - return ret; -} - 534: 8d 65 f4 lea -0xc(%ebp),%esp - 537: 89 f0 mov %esi,%eax - 539: 5b pop %ebx - 53a: 5e pop %esi - 53b: 5f pop %edi - 53c: 5d pop %ebp - 53d: c3 ret - 53e: 66 90 xchg %ax,%ax - switch (*s) { - 540: 79 5e jns 5a0 - while (s < es && !strchr(whitespace, *s) && !strchr(symbols, *s)) { - 542: 39 fb cmp %edi,%ebx - 544: 77 34 ja 57a - if (eq) { - 546: 8b 45 14 mov 0x14(%ebp),%eax - 549: be 61 00 00 00 mov $0x61,%esi - 54e: 85 c0 test %eax,%eax - 550: 75 b3 jne 505 - 552: eb db jmp 52f - 554: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - while (s < es && !strchr(whitespace, *s) && !strchr(symbols, *s)) { - 558: 0f be 07 movsbl (%edi),%eax - 55b: 83 ec 08 sub $0x8,%esp - 55e: 50 push %eax - 55f: 68 04 1a 00 00 push $0x1a04 - 564: e8 77 07 00 00 call ce0 - 569: 83 c4 10 add $0x10,%esp - 56c: 85 c0 test %eax,%eax - 56e: 75 22 jne 592 - s++; - 570: 83 c7 01 add $0x1,%edi - while (s < es && !strchr(whitespace, *s) && !strchr(symbols, *s)) { - 573: 39 fb cmp %edi,%ebx - 575: 74 cf je 546 - 577: 0f b6 07 movzbl (%edi),%eax - 57a: 83 ec 08 sub $0x8,%esp - 57d: 0f be f0 movsbl %al,%esi - 580: 56 push %esi - 581: 68 0c 1a 00 00 push $0x1a0c - 586: e8 55 07 00 00 call ce0 - 58b: 83 c4 10 add $0x10,%esp - 58e: 85 c0 test %eax,%eax - 590: 74 c6 je 558 - ret = 'a'; - 592: be 61 00 00 00 mov $0x61,%esi - 597: e9 62 ff ff ff jmp 4fe - 59c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - switch (*s) { - 5a0: 3c 26 cmp $0x26,%al - 5a2: 74 08 je 5ac - 5a4: 8d 48 d8 lea -0x28(%eax),%ecx - 5a7: 80 f9 01 cmp $0x1,%cl - 5aa: 77 96 ja 542 - ret = *s; - 5ac: 0f be f0 movsbl %al,%esi - s++; - 5af: 83 c7 01 add $0x1,%edi - break; - 5b2: e9 47 ff ff ff jmp 4fe - 5b7: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 5be: 66 90 xchg %ax,%ax - switch (*s) { - 5c0: 3c 3e cmp $0x3e,%al - 5c2: 75 1c jne 5e0 - if (*s == '>') { - 5c4: 80 7f 01 3e cmpb $0x3e,0x1(%edi) - s++; - 5c8: 8d 47 01 lea 0x1(%edi),%eax - if (*s == '>') { - 5cb: 74 1c je 5e9 - s++; - 5cd: 89 c7 mov %eax,%edi - 5cf: be 3e 00 00 00 mov $0x3e,%esi - 5d4: e9 25 ff ff ff jmp 4fe - 5d9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - switch (*s) { - 5e0: 3c 7c cmp $0x7c,%al - 5e2: 74 c8 je 5ac - 5e4: e9 59 ff ff ff jmp 542 - s++; - 5e9: 83 c7 02 add $0x2,%edi - ret = '+'; - 5ec: be 2b 00 00 00 mov $0x2b,%esi - 5f1: e9 08 ff ff ff jmp 4fe - 5f6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 5fd: 8d 76 00 lea 0x0(%esi),%esi - -00000600 : - -int peek(char **ps, char *es, char *toks) { - 600: 55 push %ebp - 601: 89 e5 mov %esp,%ebp - 603: 57 push %edi - 604: 56 push %esi - 605: 53 push %ebx - 606: 83 ec 0c sub $0xc,%esp - 609: 8b 7d 08 mov 0x8(%ebp),%edi - 60c: 8b 75 0c mov 0xc(%ebp),%esi - char *s; - - s = *ps; - 60f: 8b 1f mov (%edi),%ebx - while (s < es && strchr(whitespace, *s)) { - 611: 39 f3 cmp %esi,%ebx - 613: 72 12 jb 627 - 615: eb 28 jmp 63f - 617: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 61e: 66 90 xchg %ax,%ax - s++; - 620: 83 c3 01 add $0x1,%ebx - while (s < es && strchr(whitespace, *s)) { - 623: 39 de cmp %ebx,%esi - 625: 74 18 je 63f - 627: 0f be 03 movsbl (%ebx),%eax - 62a: 83 ec 08 sub $0x8,%esp - 62d: 50 push %eax - 62e: 68 0c 1a 00 00 push $0x1a0c - 633: e8 a8 06 00 00 call ce0 - 638: 83 c4 10 add $0x10,%esp - 63b: 85 c0 test %eax,%eax - 63d: 75 e1 jne 620 - } - *ps = s; - 63f: 89 1f mov %ebx,(%edi) - return *s && strchr(toks, *s); - 641: 0f be 03 movsbl (%ebx),%eax - 644: 31 d2 xor %edx,%edx - 646: 84 c0 test %al,%al - 648: 75 0e jne 658 -} - 64a: 8d 65 f4 lea -0xc(%ebp),%esp - 64d: 89 d0 mov %edx,%eax - 64f: 5b pop %ebx - 650: 5e pop %esi - 651: 5f pop %edi - 652: 5d pop %ebp - 653: c3 ret - 654: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - return *s && strchr(toks, *s); - 658: 83 ec 08 sub $0x8,%esp - 65b: 50 push %eax - 65c: ff 75 10 push 0x10(%ebp) - 65f: e8 7c 06 00 00 call ce0 - 664: 83 c4 10 add $0x10,%esp - 667: 31 d2 xor %edx,%edx - 669: 85 c0 test %eax,%eax - 66b: 0f 95 c2 setne %dl -} - 66e: 8d 65 f4 lea -0xc(%ebp),%esp - 671: 5b pop %ebx - 672: 89 d0 mov %edx,%eax - 674: 5e pop %esi - 675: 5f pop %edi - 676: 5d pop %ebp - 677: c3 ret - 678: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 67f: 90 nop - -00000680 : - cmd = pipecmd(cmd, parsepipe(ps, es)); - } - return cmd; -} - -struct cmd* parseredirs(struct cmd *cmd, char **ps, char *es) { - 680: 55 push %ebp - 681: 89 e5 mov %esp,%ebp - 683: 57 push %edi - 684: 56 push %esi - 685: 53 push %ebx - 686: 83 ec 2c sub $0x2c,%esp - 689: 8b 75 0c mov 0xc(%ebp),%esi - 68c: 8b 5d 10 mov 0x10(%ebp),%ebx - int tok; - char *q, *eq; - - while (peek(ps, es, "<>")) { - 68f: 90 nop - 690: 83 ec 04 sub $0x4,%esp - 693: 68 39 13 00 00 push $0x1339 - 698: 53 push %ebx - 699: 56 push %esi - 69a: e8 61 ff ff ff call 600 - 69f: 83 c4 10 add $0x10,%esp - 6a2: 85 c0 test %eax,%eax - 6a4: 0f 84 f6 00 00 00 je 7a0 - tok = gettoken(ps, es, 0, 0); - 6aa: 6a 00 push $0x0 - 6ac: 6a 00 push $0x0 - 6ae: 53 push %ebx - 6af: 56 push %esi - 6b0: e8 eb fd ff ff call 4a0 - 6b5: 89 c7 mov %eax,%edi - if (gettoken(ps, es, &q, &eq) != 'a') { - 6b7: 8d 45 e4 lea -0x1c(%ebp),%eax - 6ba: 50 push %eax - 6bb: 8d 45 e0 lea -0x20(%ebp),%eax - 6be: 50 push %eax - 6bf: 53 push %ebx - 6c0: 56 push %esi - 6c1: e8 da fd ff ff call 4a0 - 6c6: 83 c4 20 add $0x20,%esp - 6c9: 83 f8 61 cmp $0x61,%eax - 6cc: 0f 85 d9 00 00 00 jne 7ab - panic("missing file for redirection"); - } - switch (tok) { - 6d2: 83 ff 3c cmp $0x3c,%edi - 6d5: 74 69 je 740 - 6d7: 83 ff 3e cmp $0x3e,%edi - 6da: 74 05 je 6e1 - 6dc: 83 ff 2b cmp $0x2b,%edi - 6df: 75 af jne 690 - cmd = malloc(sizeof(*cmd)); - 6e1: 83 ec 0c sub $0xc,%esp - break; - case '>': - cmd = redircmd(cmd, q, eq, O_WRONLY | O_CREATE, 1); - break; - case '+': // >> - cmd = redircmd(cmd, q, eq, O_WRONLY | O_CREATE, 1); - 6e4: 8b 55 e4 mov -0x1c(%ebp),%edx - 6e7: 8b 4d e0 mov -0x20(%ebp),%ecx - cmd = malloc(sizeof(*cmd)); - 6ea: 6a 18 push $0x18 - cmd = redircmd(cmd, q, eq, O_WRONLY | O_CREATE, 1); - 6ec: 89 55 d0 mov %edx,-0x30(%ebp) - 6ef: 89 4d d4 mov %ecx,-0x2c(%ebp) - cmd = malloc(sizeof(*cmd)); - 6f2: e8 f9 0a 00 00 call 11f0 - memset(cmd, 0, sizeof(*cmd)); - 6f7: 83 c4 0c add $0xc,%esp - 6fa: 6a 18 push $0x18 - cmd = malloc(sizeof(*cmd)); - 6fc: 89 c7 mov %eax,%edi - memset(cmd, 0, sizeof(*cmd)); - 6fe: 6a 00 push $0x0 - 700: 50 push %eax - 701: e8 ba 05 00 00 call cc0 - cmd->type = REDIR; - 706: c7 07 02 00 00 00 movl $0x2,(%edi) - cmd->cmd = subcmd; - 70c: 8b 45 08 mov 0x8(%ebp),%eax - break; - 70f: 83 c4 10 add $0x10,%esp - cmd->cmd = subcmd; - 712: 89 47 04 mov %eax,0x4(%edi) - cmd->file = file; - 715: 8b 4d d4 mov -0x2c(%ebp),%ecx - 718: 89 4f 08 mov %ecx,0x8(%edi) - cmd->efile = efile; - 71b: 8b 55 d0 mov -0x30(%ebp),%edx - cmd->mode = mode; - 71e: c7 47 10 01 02 00 00 movl $0x201,0x10(%edi) - cmd->efile = efile; - 725: 89 57 0c mov %edx,0xc(%edi) - cmd->fd = fd; - 728: c7 47 14 01 00 00 00 movl $0x1,0x14(%edi) - break; - 72f: 89 7d 08 mov %edi,0x8(%ebp) - 732: e9 59 ff ff ff jmp 690 - 737: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 73e: 66 90 xchg %ax,%ax - cmd = malloc(sizeof(*cmd)); - 740: 83 ec 0c sub $0xc,%esp - cmd = redircmd(cmd, q, eq, O_RDONLY, 0); - 743: 8b 55 e4 mov -0x1c(%ebp),%edx - 746: 8b 4d e0 mov -0x20(%ebp),%ecx - cmd = malloc(sizeof(*cmd)); - 749: 6a 18 push $0x18 - cmd = redircmd(cmd, q, eq, O_RDONLY, 0); - 74b: 89 55 d0 mov %edx,-0x30(%ebp) - 74e: 89 4d d4 mov %ecx,-0x2c(%ebp) - cmd = malloc(sizeof(*cmd)); - 751: e8 9a 0a 00 00 call 11f0 - memset(cmd, 0, sizeof(*cmd)); - 756: 83 c4 0c add $0xc,%esp - 759: 6a 18 push $0x18 - cmd = malloc(sizeof(*cmd)); - 75b: 89 c7 mov %eax,%edi - memset(cmd, 0, sizeof(*cmd)); - 75d: 6a 00 push $0x0 - 75f: 50 push %eax - 760: e8 5b 05 00 00 call cc0 - cmd->cmd = subcmd; - 765: 8b 45 08 mov 0x8(%ebp),%eax - cmd->file = file; - 768: 8b 4d d4 mov -0x2c(%ebp),%ecx - break; - 76b: 89 7d 08 mov %edi,0x8(%ebp) - cmd->efile = efile; - 76e: 8b 55 d0 mov -0x30(%ebp),%edx - cmd->type = REDIR; - 771: c7 07 02 00 00 00 movl $0x2,(%edi) - break; - 777: 83 c4 10 add $0x10,%esp - cmd->cmd = subcmd; - 77a: 89 47 04 mov %eax,0x4(%edi) - cmd->file = file; - 77d: 89 4f 08 mov %ecx,0x8(%edi) - cmd->efile = efile; - 780: 89 57 0c mov %edx,0xc(%edi) - cmd->mode = mode; - 783: c7 47 10 00 00 00 00 movl $0x0,0x10(%edi) - cmd->fd = fd; - 78a: c7 47 14 00 00 00 00 movl $0x0,0x14(%edi) - break; - 791: e9 fa fe ff ff jmp 690 - 796: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 79d: 8d 76 00 lea 0x0(%esi),%esi - } - } - return cmd; -} - 7a0: 8b 45 08 mov 0x8(%ebp),%eax - 7a3: 8d 65 f4 lea -0xc(%ebp),%esp - 7a6: 5b pop %ebx - 7a7: 5e pop %esi - 7a8: 5f pop %edi - 7a9: 5d pop %ebp - 7aa: c3 ret - panic("missing file for redirection"); - 7ab: 83 ec 0c sub $0xc,%esp - 7ae: 68 1c 13 00 00 push $0x131c - 7b3: e8 e8 f9 ff ff call 1a0 - 7b8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 7bf: 90 nop - -000007c0 : - gettoken(ps, es, 0, 0); - cmd = parseredirs(cmd, ps, es); - return cmd; -} - -struct cmd* parseexec(char **ps, char *es) { - 7c0: 55 push %ebp - 7c1: 89 e5 mov %esp,%ebp - 7c3: 57 push %edi - 7c4: 56 push %esi - 7c5: 53 push %ebx - 7c6: 83 ec 30 sub $0x30,%esp - 7c9: 8b 75 08 mov 0x8(%ebp),%esi - 7cc: 8b 7d 0c mov 0xc(%ebp),%edi - char *q, *eq; - int tok, argc; - struct execcmd *cmd; - struct cmd *ret; - - if (peek(ps, es, "(")) { - 7cf: 68 3c 13 00 00 push $0x133c - 7d4: 57 push %edi - 7d5: 56 push %esi - 7d6: e8 25 fe ff ff call 600 - 7db: 83 c4 10 add $0x10,%esp - 7de: 85 c0 test %eax,%eax - 7e0: 0f 85 aa 00 00 00 jne 890 - cmd = malloc(sizeof(*cmd)); - 7e6: 83 ec 0c sub $0xc,%esp - 7e9: 89 c3 mov %eax,%ebx - 7eb: 6a 54 push $0x54 - 7ed: e8 fe 09 00 00 call 11f0 - memset(cmd, 0, sizeof(*cmd)); - 7f2: 83 c4 0c add $0xc,%esp - 7f5: 6a 54 push $0x54 - 7f7: 6a 00 push $0x0 - 7f9: 50 push %eax - 7fa: 89 45 d0 mov %eax,-0x30(%ebp) - 7fd: e8 be 04 00 00 call cc0 - cmd->type = EXEC; - 802: 8b 45 d0 mov -0x30(%ebp),%eax - - ret = execcmd(); - cmd = (struct execcmd*)ret; - - argc = 0; - ret = parseredirs(ret, ps, es); - 805: 83 c4 0c add $0xc,%esp - cmd->type = EXEC; - 808: c7 00 01 00 00 00 movl $0x1,(%eax) - ret = parseredirs(ret, ps, es); - 80e: 57 push %edi - 80f: 56 push %esi - 810: 50 push %eax - 811: e8 6a fe ff ff call 680 - while (!peek(ps, es, "|)&;")) { - 816: 83 c4 10 add $0x10,%esp - ret = parseredirs(ret, ps, es); - 819: 89 45 d4 mov %eax,-0x2c(%ebp) - while (!peek(ps, es, "|)&;")) { - 81c: eb 15 jmp 833 - 81e: 66 90 xchg %ax,%ax - cmd->eargv[argc] = eq; - argc++; - if (argc >= MAXARGS) { - panic("too many args"); - } - ret = parseredirs(ret, ps, es); - 820: 83 ec 04 sub $0x4,%esp - 823: 57 push %edi - 824: 56 push %esi - 825: ff 75 d4 push -0x2c(%ebp) - 828: e8 53 fe ff ff call 680 - 82d: 83 c4 10 add $0x10,%esp - 830: 89 45 d4 mov %eax,-0x2c(%ebp) - while (!peek(ps, es, "|)&;")) { - 833: 83 ec 04 sub $0x4,%esp - 836: 68 53 13 00 00 push $0x1353 - 83b: 57 push %edi - 83c: 56 push %esi - 83d: e8 be fd ff ff call 600 - 842: 83 c4 10 add $0x10,%esp - 845: 85 c0 test %eax,%eax - 847: 75 5f jne 8a8 - if ((tok = gettoken(ps, es, &q, &eq)) == 0) { - 849: 8d 45 e4 lea -0x1c(%ebp),%eax - 84c: 50 push %eax - 84d: 8d 45 e0 lea -0x20(%ebp),%eax - 850: 50 push %eax - 851: 57 push %edi - 852: 56 push %esi - 853: e8 48 fc ff ff call 4a0 - 858: 83 c4 10 add $0x10,%esp - 85b: 85 c0 test %eax,%eax - 85d: 74 49 je 8a8 - if (tok != 'a') { - 85f: 83 f8 61 cmp $0x61,%eax - 862: 75 62 jne 8c6 - cmd->argv[argc] = q; - 864: 8b 45 e0 mov -0x20(%ebp),%eax - 867: 8b 55 d0 mov -0x30(%ebp),%edx - 86a: 89 44 9a 04 mov %eax,0x4(%edx,%ebx,4) - cmd->eargv[argc] = eq; - 86e: 8b 45 e4 mov -0x1c(%ebp),%eax - 871: 89 44 9a 2c mov %eax,0x2c(%edx,%ebx,4) - argc++; - 875: 83 c3 01 add $0x1,%ebx - if (argc >= MAXARGS) { - 878: 83 fb 0a cmp $0xa,%ebx - 87b: 75 a3 jne 820 - panic("too many args"); - 87d: 83 ec 0c sub $0xc,%esp - 880: 68 45 13 00 00 push $0x1345 - 885: e8 16 f9 ff ff call 1a0 - 88a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - return parseblock(ps, es); - 890: 89 7d 0c mov %edi,0xc(%ebp) - 893: 89 75 08 mov %esi,0x8(%ebp) - } - cmd->argv[argc] = 0; - cmd->eargv[argc] = 0; - return ret; -} - 896: 8d 65 f4 lea -0xc(%ebp),%esp - 899: 5b pop %ebx - 89a: 5e pop %esi - 89b: 5f pop %edi - 89c: 5d pop %ebp - return parseblock(ps, es); - 89d: e9 ae 01 00 00 jmp a50 - 8a2: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - cmd->argv[argc] = 0; - 8a8: 8b 45 d0 mov -0x30(%ebp),%eax - 8ab: c7 44 98 04 00 00 00 movl $0x0,0x4(%eax,%ebx,4) - 8b2: 00 - cmd->eargv[argc] = 0; - 8b3: c7 44 98 2c 00 00 00 movl $0x0,0x2c(%eax,%ebx,4) - 8ba: 00 -} - 8bb: 8b 45 d4 mov -0x2c(%ebp),%eax - 8be: 8d 65 f4 lea -0xc(%ebp),%esp - 8c1: 5b pop %ebx - 8c2: 5e pop %esi - 8c3: 5f pop %edi - 8c4: 5d pop %ebp - 8c5: c3 ret - panic("syntax"); - 8c6: 83 ec 0c sub $0xc,%esp - 8c9: 68 3e 13 00 00 push $0x133e - 8ce: e8 cd f8 ff ff call 1a0 - 8d3: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 8da: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -000008e0 : -struct cmd* parsepipe(char **ps, char *es) { - 8e0: 55 push %ebp - 8e1: 89 e5 mov %esp,%ebp - 8e3: 57 push %edi - 8e4: 56 push %esi - 8e5: 53 push %ebx - 8e6: 83 ec 14 sub $0x14,%esp - 8e9: 8b 75 08 mov 0x8(%ebp),%esi - 8ec: 8b 7d 0c mov 0xc(%ebp),%edi - cmd = parseexec(ps, es); - 8ef: 57 push %edi - 8f0: 56 push %esi - 8f1: e8 ca fe ff ff call 7c0 - if (peek(ps, es, "|")) { - 8f6: 83 c4 0c add $0xc,%esp - 8f9: 68 58 13 00 00 push $0x1358 - cmd = parseexec(ps, es); - 8fe: 89 c3 mov %eax,%ebx - if (peek(ps, es, "|")) { - 900: 57 push %edi - 901: 56 push %esi - 902: e8 f9 fc ff ff call 600 - 907: 83 c4 10 add $0x10,%esp - 90a: 85 c0 test %eax,%eax - 90c: 75 12 jne 920 -} - 90e: 8d 65 f4 lea -0xc(%ebp),%esp - 911: 89 d8 mov %ebx,%eax - 913: 5b pop %ebx - 914: 5e pop %esi - 915: 5f pop %edi - 916: 5d pop %ebp - 917: c3 ret - 918: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 91f: 90 nop - gettoken(ps, es, 0, 0); - 920: 6a 00 push $0x0 - 922: 6a 00 push $0x0 - 924: 57 push %edi - 925: 56 push %esi - 926: e8 75 fb ff ff call 4a0 - cmd = pipecmd(cmd, parsepipe(ps, es)); - 92b: 58 pop %eax - 92c: 5a pop %edx - 92d: 57 push %edi - 92e: 56 push %esi - 92f: e8 ac ff ff ff call 8e0 - cmd = malloc(sizeof(*cmd)); - 934: c7 04 24 0c 00 00 00 movl $0xc,(%esp) - cmd = pipecmd(cmd, parsepipe(ps, es)); - 93b: 89 c7 mov %eax,%edi - cmd = malloc(sizeof(*cmd)); - 93d: e8 ae 08 00 00 call 11f0 - memset(cmd, 0, sizeof(*cmd)); - 942: 83 c4 0c add $0xc,%esp - 945: 6a 0c push $0xc - cmd = malloc(sizeof(*cmd)); - 947: 89 c6 mov %eax,%esi - memset(cmd, 0, sizeof(*cmd)); - 949: 6a 00 push $0x0 - 94b: 50 push %eax - 94c: e8 6f 03 00 00 call cc0 - cmd->left = left; - 951: 89 5e 04 mov %ebx,0x4(%esi) - cmd->right = right; - 954: 83 c4 10 add $0x10,%esp - 957: 89 f3 mov %esi,%ebx - cmd->type = PIPE; - 959: c7 06 03 00 00 00 movl $0x3,(%esi) -} - 95f: 89 d8 mov %ebx,%eax - cmd->right = right; - 961: 89 7e 08 mov %edi,0x8(%esi) -} - 964: 8d 65 f4 lea -0xc(%ebp),%esp - 967: 5b pop %ebx - 968: 5e pop %esi - 969: 5f pop %edi - 96a: 5d pop %ebp - 96b: c3 ret - 96c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000970 : -struct cmd* parseline(char **ps, char *es) { - 970: 55 push %ebp - 971: 89 e5 mov %esp,%ebp - 973: 57 push %edi - 974: 56 push %esi - 975: 53 push %ebx - 976: 83 ec 24 sub $0x24,%esp - 979: 8b 75 08 mov 0x8(%ebp),%esi - 97c: 8b 7d 0c mov 0xc(%ebp),%edi - cmd = parsepipe(ps, es); - 97f: 57 push %edi - 980: 56 push %esi - 981: e8 5a ff ff ff call 8e0 - while (peek(ps, es, "&")) { - 986: 83 c4 10 add $0x10,%esp - cmd = parsepipe(ps, es); - 989: 89 c3 mov %eax,%ebx - while (peek(ps, es, "&")) { - 98b: eb 3b jmp 9c8 - 98d: 8d 76 00 lea 0x0(%esi),%esi - gettoken(ps, es, 0, 0); - 990: 6a 00 push $0x0 - 992: 6a 00 push $0x0 - 994: 57 push %edi - 995: 56 push %esi - 996: e8 05 fb ff ff call 4a0 - cmd = malloc(sizeof(*cmd)); - 99b: c7 04 24 08 00 00 00 movl $0x8,(%esp) - 9a2: e8 49 08 00 00 call 11f0 - memset(cmd, 0, sizeof(*cmd)); - 9a7: 83 c4 0c add $0xc,%esp - 9aa: 6a 08 push $0x8 - 9ac: 6a 00 push $0x0 - 9ae: 50 push %eax - 9af: 89 45 e4 mov %eax,-0x1c(%ebp) - 9b2: e8 09 03 00 00 call cc0 - cmd->type = BACK; - 9b7: 8b 55 e4 mov -0x1c(%ebp),%edx - cmd->cmd = subcmd; - 9ba: 83 c4 10 add $0x10,%esp - cmd->type = BACK; - 9bd: c7 02 05 00 00 00 movl $0x5,(%edx) - cmd->cmd = subcmd; - 9c3: 89 5a 04 mov %ebx,0x4(%edx) - 9c6: 89 d3 mov %edx,%ebx - while (peek(ps, es, "&")) { - 9c8: 83 ec 04 sub $0x4,%esp - 9cb: 68 5a 13 00 00 push $0x135a - 9d0: 57 push %edi - 9d1: 56 push %esi - 9d2: e8 29 fc ff ff call 600 - 9d7: 83 c4 10 add $0x10,%esp - 9da: 85 c0 test %eax,%eax - 9dc: 75 b2 jne 990 - if (peek(ps, es, ";")) { - 9de: 83 ec 04 sub $0x4,%esp - 9e1: 68 56 13 00 00 push $0x1356 - 9e6: 57 push %edi - 9e7: 56 push %esi - 9e8: e8 13 fc ff ff call 600 - 9ed: 83 c4 10 add $0x10,%esp - 9f0: 85 c0 test %eax,%eax - 9f2: 75 0c jne a00 -} - 9f4: 8d 65 f4 lea -0xc(%ebp),%esp - 9f7: 89 d8 mov %ebx,%eax - 9f9: 5b pop %ebx - 9fa: 5e pop %esi - 9fb: 5f pop %edi - 9fc: 5d pop %ebp - 9fd: c3 ret - 9fe: 66 90 xchg %ax,%ax - gettoken(ps, es, 0, 0); - a00: 6a 00 push $0x0 - a02: 6a 00 push $0x0 - a04: 57 push %edi - a05: 56 push %esi - a06: e8 95 fa ff ff call 4a0 - cmd = listcmd(cmd, parseline(ps, es)); - a0b: 58 pop %eax - a0c: 5a pop %edx - a0d: 57 push %edi - a0e: 56 push %esi - a0f: e8 5c ff ff ff call 970 - cmd = malloc(sizeof(*cmd)); - a14: c7 04 24 0c 00 00 00 movl $0xc,(%esp) - cmd = listcmd(cmd, parseline(ps, es)); - a1b: 89 c7 mov %eax,%edi - cmd = malloc(sizeof(*cmd)); - a1d: e8 ce 07 00 00 call 11f0 - memset(cmd, 0, sizeof(*cmd)); - a22: 83 c4 0c add $0xc,%esp - a25: 6a 0c push $0xc - cmd = malloc(sizeof(*cmd)); - a27: 89 c6 mov %eax,%esi - memset(cmd, 0, sizeof(*cmd)); - a29: 6a 00 push $0x0 - a2b: 50 push %eax - a2c: e8 8f 02 00 00 call cc0 - cmd->left = left; - a31: 89 5e 04 mov %ebx,0x4(%esi) - cmd->right = right; - a34: 83 c4 10 add $0x10,%esp - a37: 89 f3 mov %esi,%ebx - cmd->type = LIST; - a39: c7 06 04 00 00 00 movl $0x4,(%esi) -} - a3f: 89 d8 mov %ebx,%eax - cmd->right = right; - a41: 89 7e 08 mov %edi,0x8(%esi) -} - a44: 8d 65 f4 lea -0xc(%ebp),%esp - a47: 5b pop %ebx - a48: 5e pop %esi - a49: 5f pop %edi - a4a: 5d pop %ebp - a4b: c3 ret - a4c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000a50 : -struct cmd* parseblock(char **ps, char *es) { - a50: 55 push %ebp - a51: 89 e5 mov %esp,%ebp - a53: 57 push %edi - a54: 56 push %esi - a55: 53 push %ebx - a56: 83 ec 10 sub $0x10,%esp - a59: 8b 5d 08 mov 0x8(%ebp),%ebx - a5c: 8b 75 0c mov 0xc(%ebp),%esi - if (!peek(ps, es, "(")) { - a5f: 68 3c 13 00 00 push $0x133c - a64: 56 push %esi - a65: 53 push %ebx - a66: e8 95 fb ff ff call 600 - a6b: 83 c4 10 add $0x10,%esp - a6e: 85 c0 test %eax,%eax - a70: 74 4a je abc - gettoken(ps, es, 0, 0); - a72: 6a 00 push $0x0 - a74: 6a 00 push $0x0 - a76: 56 push %esi - a77: 53 push %ebx - a78: e8 23 fa ff ff call 4a0 - cmd = parseline(ps, es); - a7d: 58 pop %eax - a7e: 5a pop %edx - a7f: 56 push %esi - a80: 53 push %ebx - a81: e8 ea fe ff ff call 970 - if (!peek(ps, es, ")")) { - a86: 83 c4 0c add $0xc,%esp - a89: 68 78 13 00 00 push $0x1378 - cmd = parseline(ps, es); - a8e: 89 c7 mov %eax,%edi - if (!peek(ps, es, ")")) { - a90: 56 push %esi - a91: 53 push %ebx - a92: e8 69 fb ff ff call 600 - a97: 83 c4 10 add $0x10,%esp - a9a: 85 c0 test %eax,%eax - a9c: 74 2b je ac9 - gettoken(ps, es, 0, 0); - a9e: 6a 00 push $0x0 - aa0: 6a 00 push $0x0 - aa2: 56 push %esi - aa3: 53 push %ebx - aa4: e8 f7 f9 ff ff call 4a0 - cmd = parseredirs(cmd, ps, es); - aa9: 83 c4 0c add $0xc,%esp - aac: 56 push %esi - aad: 53 push %ebx - aae: 57 push %edi - aaf: e8 cc fb ff ff call 680 -} - ab4: 8d 65 f4 lea -0xc(%ebp),%esp - ab7: 5b pop %ebx - ab8: 5e pop %esi - ab9: 5f pop %edi - aba: 5d pop %ebp - abb: c3 ret - panic("parseblock"); - abc: 83 ec 0c sub $0xc,%esp - abf: 68 5c 13 00 00 push $0x135c - ac4: e8 d7 f6 ff ff call 1a0 - panic("syntax - missing )"); - ac9: 83 ec 0c sub $0xc,%esp - acc: 68 67 13 00 00 push $0x1367 - ad1: e8 ca f6 ff ff call 1a0 - ad6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - add: 8d 76 00 lea 0x0(%esi),%esi - -00000ae0 : - -// NUL-terminate all the counted strings. -struct cmd* nulterminate(struct cmd *cmd) { - ae0: 55 push %ebp - ae1: 89 e5 mov %esp,%ebp - ae3: 53 push %ebx - ae4: 83 ec 04 sub $0x4,%esp - ae7: 8b 5d 08 mov 0x8(%ebp),%ebx - struct execcmd *ecmd; - struct listcmd *lcmd; - struct pipecmd *pcmd; - struct redircmd *rcmd; - - if (cmd == 0) { - aea: 85 db test %ebx,%ebx - aec: 0f 84 8e 00 00 00 je b80 - return 0; - } - - switch (cmd->type) { - af2: 83 3b 05 cmpl $0x5,(%ebx) - af5: 77 61 ja b58 - af7: 8b 03 mov (%ebx),%eax - af9: ff 24 85 b8 13 00 00 jmp *0x13b8(,%eax,4) - nulterminate(pcmd->right); - break; - - case LIST: - lcmd = (struct listcmd*)cmd; - nulterminate(lcmd->left); - b00: 83 ec 0c sub $0xc,%esp - b03: ff 73 04 push 0x4(%ebx) - b06: e8 d5 ff ff ff call ae0 - nulterminate(lcmd->right); - b0b: 58 pop %eax - b0c: ff 73 08 push 0x8(%ebx) - b0f: e8 cc ff ff ff call ae0 - break; - b14: 83 c4 10 add $0x10,%esp - b17: 89 d8 mov %ebx,%eax - bcmd = (struct backcmd*)cmd; - nulterminate(bcmd->cmd); - break; - } - return cmd; -} - b19: 8b 5d fc mov -0x4(%ebp),%ebx - b1c: c9 leave - b1d: c3 ret - b1e: 66 90 xchg %ax,%ax - nulterminate(bcmd->cmd); - b20: 83 ec 0c sub $0xc,%esp - b23: ff 73 04 push 0x4(%ebx) - b26: e8 b5 ff ff ff call ae0 - break; - b2b: 89 d8 mov %ebx,%eax - b2d: 83 c4 10 add $0x10,%esp -} - b30: 8b 5d fc mov -0x4(%ebp),%ebx - b33: c9 leave - b34: c3 ret - b35: 8d 76 00 lea 0x0(%esi),%esi - for (i = 0; ecmd->argv[i]; i++) { - b38: 8b 4b 04 mov 0x4(%ebx),%ecx - b3b: 8d 43 08 lea 0x8(%ebx),%eax - b3e: 85 c9 test %ecx,%ecx - b40: 74 16 je b58 - b42: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - *ecmd->eargv[i] = 0; - b48: 8b 50 24 mov 0x24(%eax),%edx - for (i = 0; ecmd->argv[i]; i++) { - b4b: 83 c0 04 add $0x4,%eax - *ecmd->eargv[i] = 0; - b4e: c6 02 00 movb $0x0,(%edx) - for (i = 0; ecmd->argv[i]; i++) { - b51: 8b 50 fc mov -0x4(%eax),%edx - b54: 85 d2 test %edx,%edx - b56: 75 f0 jne b48 - switch (cmd->type) { - b58: 89 d8 mov %ebx,%eax -} - b5a: 8b 5d fc mov -0x4(%ebp),%ebx - b5d: c9 leave - b5e: c3 ret - b5f: 90 nop - nulterminate(rcmd->cmd); - b60: 83 ec 0c sub $0xc,%esp - b63: ff 73 04 push 0x4(%ebx) - b66: e8 75 ff ff ff call ae0 - *rcmd->efile = 0; - b6b: 8b 43 0c mov 0xc(%ebx),%eax - break; - b6e: 83 c4 10 add $0x10,%esp - *rcmd->efile = 0; - b71: c6 00 00 movb $0x0,(%eax) - break; - b74: 89 d8 mov %ebx,%eax -} - b76: 8b 5d fc mov -0x4(%ebp),%ebx - b79: c9 leave - b7a: c3 ret - b7b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - b7f: 90 nop - return 0; - b80: 31 c0 xor %eax,%eax - b82: eb 95 jmp b19 - b84: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - b8b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - b8f: 90 nop - -00000b90 : -struct cmd* parsecmd(char *s) { - b90: 55 push %ebp - b91: 89 e5 mov %esp,%ebp - b93: 57 push %edi - b94: 56 push %esi - cmd = parseline(&s, es); - b95: 8d 7d 08 lea 0x8(%ebp),%edi -struct cmd* parsecmd(char *s) { - b98: 53 push %ebx - b99: 83 ec 18 sub $0x18,%esp - es = s + strlen(s); - b9c: 8b 5d 08 mov 0x8(%ebp),%ebx - b9f: 53 push %ebx - ba0: e8 eb 00 00 00 call c90 - cmd = parseline(&s, es); - ba5: 59 pop %ecx - ba6: 5e pop %esi - es = s + strlen(s); - ba7: 01 c3 add %eax,%ebx - cmd = parseline(&s, es); - ba9: 53 push %ebx - baa: 57 push %edi - bab: e8 c0 fd ff ff call 970 - peek(&s, es, ""); - bb0: 83 c4 0c add $0xc,%esp - bb3: 68 06 13 00 00 push $0x1306 - cmd = parseline(&s, es); - bb8: 89 c6 mov %eax,%esi - peek(&s, es, ""); - bba: 53 push %ebx - bbb: 57 push %edi - bbc: e8 3f fa ff ff call 600 - if (s != es) { - bc1: 8b 45 08 mov 0x8(%ebp),%eax - bc4: 83 c4 10 add $0x10,%esp - bc7: 39 d8 cmp %ebx,%eax - bc9: 75 13 jne bde - nulterminate(cmd); - bcb: 83 ec 0c sub $0xc,%esp - bce: 56 push %esi - bcf: e8 0c ff ff ff call ae0 -} - bd4: 8d 65 f4 lea -0xc(%ebp),%esp - bd7: 89 f0 mov %esi,%eax - bd9: 5b pop %ebx - bda: 5e pop %esi - bdb: 5f pop %edi - bdc: 5d pop %ebp - bdd: c3 ret - printf(2, "leftovers: %s\n", s); - bde: 52 push %edx - bdf: 50 push %eax - be0: 68 7a 13 00 00 push $0x137a - be5: 6a 02 push $0x2 - be7: e8 d4 03 00 00 call fc0 - panic("syntax"); - bec: c7 04 24 3e 13 00 00 movl $0x133e,(%esp) - bf3: e8 a8 f5 ff ff call 1a0 - bf8: 66 90 xchg %ax,%ax - bfa: 66 90 xchg %ax,%ax - bfc: 66 90 xchg %ax,%ax - bfe: 66 90 xchg %ax,%ax - -00000c00 : -#include "stat.h" -#include "fcntl.h" -#include "user.h" -#include "x86.h" - -char*strcpy(char *s, const char *t) { - c00: 55 push %ebp - char *os; - - os = s; - while ((*s++ = *t++) != 0) { - c01: 31 c0 xor %eax,%eax -char*strcpy(char *s, const char *t) { - c03: 89 e5 mov %esp,%ebp - c05: 53 push %ebx - c06: 8b 4d 08 mov 0x8(%ebp),%ecx - c09: 8b 5d 0c mov 0xc(%ebp),%ebx - c0c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - while ((*s++ = *t++) != 0) { - c10: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - c14: 88 14 01 mov %dl,(%ecx,%eax,1) - c17: 83 c0 01 add $0x1,%eax - c1a: 84 d2 test %dl,%dl - c1c: 75 f2 jne c10 - ; - } - return os; -} - c1e: 8b 5d fc mov -0x4(%ebp),%ebx - c21: 89 c8 mov %ecx,%eax - c23: c9 leave - c24: c3 ret - c25: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - c2c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000c30 : - -int strcmp(const char *p, const char *q) { - c30: 55 push %ebp - c31: 89 e5 mov %esp,%ebp - c33: 53 push %ebx - c34: 8b 55 08 mov 0x8(%ebp),%edx - c37: 8b 4d 0c mov 0xc(%ebp),%ecx - while (*p && *p == *q) { - c3a: 0f b6 02 movzbl (%edx),%eax - c3d: 84 c0 test %al,%al - c3f: 75 17 jne c58 - c41: eb 3a jmp c7d - c43: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - c47: 90 nop - c48: 0f b6 42 01 movzbl 0x1(%edx),%eax - p++, q++; - c4c: 83 c2 01 add $0x1,%edx - c4f: 8d 59 01 lea 0x1(%ecx),%ebx - while (*p && *p == *q) { - c52: 84 c0 test %al,%al - c54: 74 1a je c70 - p++, q++; - c56: 89 d9 mov %ebx,%ecx - while (*p && *p == *q) { - c58: 0f b6 19 movzbl (%ecx),%ebx - c5b: 38 c3 cmp %al,%bl - c5d: 74 e9 je c48 - } - return (uchar) * p - (uchar) * q; - c5f: 29 d8 sub %ebx,%eax -} - c61: 8b 5d fc mov -0x4(%ebp),%ebx - c64: c9 leave - c65: c3 ret - c66: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - c6d: 8d 76 00 lea 0x0(%esi),%esi - return (uchar) * p - (uchar) * q; - c70: 0f b6 59 01 movzbl 0x1(%ecx),%ebx - c74: 31 c0 xor %eax,%eax - c76: 29 d8 sub %ebx,%eax -} - c78: 8b 5d fc mov -0x4(%ebp),%ebx - c7b: c9 leave - c7c: c3 ret - return (uchar) * p - (uchar) * q; - c7d: 0f b6 19 movzbl (%ecx),%ebx - c80: 31 c0 xor %eax,%eax - c82: eb db jmp c5f - c84: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - c8b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - c8f: 90 nop - -00000c90 : - -uint strlen(const char *s) { - c90: 55 push %ebp - c91: 89 e5 mov %esp,%ebp - c93: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - for (n = 0; s[n]; n++) { - c96: 80 3a 00 cmpb $0x0,(%edx) - c99: 74 15 je cb0 - c9b: 31 c0 xor %eax,%eax - c9d: 8d 76 00 lea 0x0(%esi),%esi - ca0: 83 c0 01 add $0x1,%eax - ca3: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - ca7: 89 c1 mov %eax,%ecx - ca9: 75 f5 jne ca0 - ; - } - return n; -} - cab: 89 c8 mov %ecx,%eax - cad: 5d pop %ebp - cae: c3 ret - caf: 90 nop - for (n = 0; s[n]; n++) { - cb0: 31 c9 xor %ecx,%ecx -} - cb2: 5d pop %ebp - cb3: 89 c8 mov %ecx,%eax - cb5: c3 ret - cb6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - cbd: 8d 76 00 lea 0x0(%esi),%esi - -00000cc0 : - -void* memset(void *dst, int c, uint n) { - cc0: 55 push %ebp - cc1: 89 e5 mov %esp,%ebp - cc3: 57 push %edi - cc4: 8b 55 08 mov 0x8(%ebp),%edx - "d" (port), "0" (addr), "1" (cnt) : - "cc"); -} - -static inline void stosb(void *addr, int data, int cnt) { - asm volatile ("cld; rep stosb" : - cc7: 8b 4d 10 mov 0x10(%ebp),%ecx - cca: 8b 45 0c mov 0xc(%ebp),%eax - ccd: 89 d7 mov %edx,%edi - ccf: fc cld - cd0: f3 aa rep stos %al,%es:(%edi) - stosb(dst, c, n); - return dst; -} - cd2: 8b 7d fc mov -0x4(%ebp),%edi - cd5: 89 d0 mov %edx,%eax - cd7: c9 leave - cd8: c3 ret - cd9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -00000ce0 : - -char* strchr(const char *s, char c) { - ce0: 55 push %ebp - ce1: 89 e5 mov %esp,%ebp - ce3: 8b 45 08 mov 0x8(%ebp),%eax - ce6: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx - for (; *s; s++) { - cea: 0f b6 10 movzbl (%eax),%edx - ced: 84 d2 test %dl,%dl - cef: 75 12 jne d03 - cf1: eb 1d jmp d10 - cf3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - cf7: 90 nop - cf8: 0f b6 50 01 movzbl 0x1(%eax),%edx - cfc: 83 c0 01 add $0x1,%eax - cff: 84 d2 test %dl,%dl - d01: 74 0d je d10 - if (*s == c) { - d03: 38 d1 cmp %dl,%cl - d05: 75 f1 jne cf8 - return (char*)s; - } - } - return 0; -} - d07: 5d pop %ebp - d08: c3 ret - d09: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - return 0; - d10: 31 c0 xor %eax,%eax -} - d12: 5d pop %ebp - d13: c3 ret - d14: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - d1b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - d1f: 90 nop - -00000d20 : - -char* gets(char *buf, int max) { - d20: 55 push %ebp - d21: 89 e5 mov %esp,%ebp - d23: 57 push %edi - d24: 56 push %esi - int i, cc; - char c; - - for (i = 0; i + 1 < max;) { - cc = read(0, &c, 1); - d25: 8d 7d e7 lea -0x19(%ebp),%edi -char* gets(char *buf, int max) { - d28: 53 push %ebx - for (i = 0; i + 1 < max;) { - d29: 31 db xor %ebx,%ebx -char* gets(char *buf, int max) { - d2b: 83 ec 1c sub $0x1c,%esp - for (i = 0; i + 1 < max;) { - d2e: eb 27 jmp d57 - cc = read(0, &c, 1); - d30: 83 ec 04 sub $0x4,%esp - d33: 6a 01 push $0x1 - d35: 57 push %edi - d36: 6a 00 push $0x0 - d38: e8 2e 01 00 00 call e6b - if (cc < 1) { - d3d: 83 c4 10 add $0x10,%esp - d40: 85 c0 test %eax,%eax - d42: 7e 1d jle d61 - break; - } - buf[i++] = c; - d44: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - d48: 8b 55 08 mov 0x8(%ebp),%edx - d4b: 88 44 1a ff mov %al,-0x1(%edx,%ebx,1) - if (c == '\n' || c == '\r') { - d4f: 3c 0a cmp $0xa,%al - d51: 74 1d je d70 - d53: 3c 0d cmp $0xd,%al - d55: 74 19 je d70 - for (i = 0; i + 1 < max;) { - d57: 89 de mov %ebx,%esi - d59: 83 c3 01 add $0x1,%ebx - d5c: 3b 5d 0c cmp 0xc(%ebp),%ebx - d5f: 7c cf jl d30 - break; - } - } - buf[i] = '\0'; - d61: 8b 45 08 mov 0x8(%ebp),%eax - d64: c6 04 30 00 movb $0x0,(%eax,%esi,1) - return buf; -} - d68: 8d 65 f4 lea -0xc(%ebp),%esp - d6b: 5b pop %ebx - d6c: 5e pop %esi - d6d: 5f pop %edi - d6e: 5d pop %ebp - d6f: c3 ret - buf[i] = '\0'; - d70: 8b 45 08 mov 0x8(%ebp),%eax - d73: 89 de mov %ebx,%esi - d75: c6 04 30 00 movb $0x0,(%eax,%esi,1) -} - d79: 8d 65 f4 lea -0xc(%ebp),%esp - d7c: 5b pop %ebx - d7d: 5e pop %esi - d7e: 5f pop %edi - d7f: 5d pop %ebp - d80: c3 ret - d81: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - d88: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - d8f: 90 nop - -00000d90 : - -int stat(const char *n, struct stat *st) { - d90: 55 push %ebp - d91: 89 e5 mov %esp,%ebp - d93: 56 push %esi - d94: 53 push %ebx - int fd; - int r; - - fd = open(n, O_RDONLY); - d95: 83 ec 08 sub $0x8,%esp - d98: 6a 00 push $0x0 - d9a: ff 75 08 push 0x8(%ebp) - d9d: e8 19 01 00 00 call ebb - if (fd < 0) { - da2: 83 c4 10 add $0x10,%esp - da5: 85 c0 test %eax,%eax - da7: 78 27 js dd0 - return -1; - } - r = fstat(fd, st); - da9: 83 ec 08 sub $0x8,%esp - dac: ff 75 0c push 0xc(%ebp) - daf: 89 c3 mov %eax,%ebx - db1: 50 push %eax - db2: e8 cc 00 00 00 call e83 - close(fd); - db7: 89 1c 24 mov %ebx,(%esp) - r = fstat(fd, st); - dba: 89 c6 mov %eax,%esi - close(fd); - dbc: e8 2a 01 00 00 call eeb - return r; - dc1: 83 c4 10 add $0x10,%esp -} - dc4: 8d 65 f8 lea -0x8(%ebp),%esp - dc7: 89 f0 mov %esi,%eax - dc9: 5b pop %ebx - dca: 5e pop %esi - dcb: 5d pop %ebp - dcc: c3 ret - dcd: 8d 76 00 lea 0x0(%esi),%esi - return -1; - dd0: be ff ff ff ff mov $0xffffffff,%esi - dd5: eb ed jmp dc4 - dd7: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - dde: 66 90 xchg %ax,%ax - -00000de0 : - -int atoi(const char *s) { - de0: 55 push %ebp - de1: 89 e5 mov %esp,%ebp - de3: 53 push %ebx - de4: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - n = 0; - while ('0' <= *s && *s <= '9') { - de7: 0f be 02 movsbl (%edx),%eax - dea: 8d 48 d0 lea -0x30(%eax),%ecx - ded: 80 f9 09 cmp $0x9,%cl - n = 0; - df0: b9 00 00 00 00 mov $0x0,%ecx - while ('0' <= *s && *s <= '9') { - df5: 77 1e ja e15 - df7: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - dfe: 66 90 xchg %ax,%ax - n = n * 10 + *s++ - '0'; - e00: 83 c2 01 add $0x1,%edx - e03: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - e06: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx - while ('0' <= *s && *s <= '9') { - e0a: 0f be 02 movsbl (%edx),%eax - e0d: 8d 58 d0 lea -0x30(%eax),%ebx - e10: 80 fb 09 cmp $0x9,%bl - e13: 76 eb jbe e00 - } - return n; -} - e15: 8b 5d fc mov -0x4(%ebp),%ebx - e18: 89 c8 mov %ecx,%eax - e1a: c9 leave - e1b: c3 ret - e1c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000e20 : - -void* memmove(void *vdst, const void *vsrc, int n) { - e20: 55 push %ebp - e21: 89 e5 mov %esp,%ebp - e23: 57 push %edi - e24: 8b 45 10 mov 0x10(%ebp),%eax - e27: 8b 55 08 mov 0x8(%ebp),%edx - e2a: 56 push %esi - e2b: 8b 75 0c mov 0xc(%ebp),%esi - char *dst; - const char *src; - - dst = vdst; - src = vsrc; - while (n-- > 0) { - e2e: 85 c0 test %eax,%eax - e30: 7e 13 jle e45 - e32: 01 d0 add %edx,%eax - dst = vdst; - e34: 89 d7 mov %edx,%edi - e36: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - e3d: 8d 76 00 lea 0x0(%esi),%esi - *dst++ = *src++; - e40: a4 movsb %ds:(%esi),%es:(%edi) - while (n-- > 0) { - e41: 39 f8 cmp %edi,%eax - e43: 75 fb jne e40 - } - return vdst; -} - e45: 5e pop %esi - e46: 89 d0 mov %edx,%eax - e48: 5f pop %edi - e49: 5d pop %ebp - e4a: c3 ret - -00000e4b : -name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - e4b: b8 01 00 00 00 mov $0x1,%eax - e50: cd 40 int $0x40 - e52: c3 ret - -00000e53 : -SYSCALL(exit) - e53: b8 02 00 00 00 mov $0x2,%eax - e58: cd 40 int $0x40 - e5a: c3 ret - -00000e5b : -SYSCALL(wait) - e5b: b8 03 00 00 00 mov $0x3,%eax - e60: cd 40 int $0x40 - e62: c3 ret - -00000e63 : -SYSCALL(pipe) - e63: b8 04 00 00 00 mov $0x4,%eax - e68: cd 40 int $0x40 - e6a: c3 ret - -00000e6b : -SYSCALL(read) - e6b: b8 05 00 00 00 mov $0x5,%eax - e70: cd 40 int $0x40 - e72: c3 ret - -00000e73 : -SYSCALL(kill) - e73: b8 06 00 00 00 mov $0x6,%eax - e78: cd 40 int $0x40 - e7a: c3 ret - -00000e7b : -SYSCALL(exec) - e7b: b8 07 00 00 00 mov $0x7,%eax - e80: cd 40 int $0x40 - e82: c3 ret - -00000e83 : -SYSCALL(fstat) - e83: b8 08 00 00 00 mov $0x8,%eax - e88: cd 40 int $0x40 - e8a: c3 ret - -00000e8b : -SYSCALL(chdir) - e8b: b8 09 00 00 00 mov $0x9,%eax - e90: cd 40 int $0x40 - e92: c3 ret - -00000e93 : -SYSCALL(dup) - e93: b8 0a 00 00 00 mov $0xa,%eax - e98: cd 40 int $0x40 - e9a: c3 ret - -00000e9b : -SYSCALL(getpid) - e9b: b8 0b 00 00 00 mov $0xb,%eax - ea0: cd 40 int $0x40 - ea2: c3 ret - -00000ea3 : -SYSCALL(sbrk) - ea3: b8 0c 00 00 00 mov $0xc,%eax - ea8: cd 40 int $0x40 - eaa: c3 ret - -00000eab : -SYSCALL(sleep) - eab: b8 0d 00 00 00 mov $0xd,%eax - eb0: cd 40 int $0x40 - eb2: c3 ret - -00000eb3 : -SYSCALL(uptime) - eb3: b8 0e 00 00 00 mov $0xe,%eax - eb8: cd 40 int $0x40 - eba: c3 ret - -00000ebb : -SYSCALL(open) - ebb: b8 0f 00 00 00 mov $0xf,%eax - ec0: cd 40 int $0x40 - ec2: c3 ret - -00000ec3 : -SYSCALL(write) - ec3: b8 10 00 00 00 mov $0x10,%eax - ec8: cd 40 int $0x40 - eca: c3 ret - -00000ecb : -SYSCALL(mknod) - ecb: b8 11 00 00 00 mov $0x11,%eax - ed0: cd 40 int $0x40 - ed2: c3 ret - -00000ed3 : -SYSCALL(unlink) - ed3: b8 12 00 00 00 mov $0x12,%eax - ed8: cd 40 int $0x40 - eda: c3 ret - -00000edb : -SYSCALL(link) - edb: b8 13 00 00 00 mov $0x13,%eax - ee0: cd 40 int $0x40 - ee2: c3 ret - -00000ee3 : -SYSCALL(mkdir) - ee3: b8 14 00 00 00 mov $0x14,%eax - ee8: cd 40 int $0x40 - eea: c3 ret - -00000eeb : -SYSCALL(close) - eeb: b8 15 00 00 00 mov $0x15,%eax - ef0: cd 40 int $0x40 - ef2: c3 ret - -00000ef3 : -SYSCALL(getch) - ef3: b8 16 00 00 00 mov $0x16,%eax - ef8: cd 40 int $0x40 - efa: c3 ret - -00000efb : -SYSCALL(greeting) - efb: b8 17 00 00 00 mov $0x17,%eax - f00: cd 40 int $0x40 - f02: c3 ret - -00000f03 : -SYSCALL(shutdown) - f03: b8 18 00 00 00 mov $0x18,%eax - f08: cd 40 int $0x40 - f0a: c3 ret - f0b: 66 90 xchg %ax,%ax - f0d: 66 90 xchg %ax,%ax - f0f: 90 nop - -00000f10 : - -static void putc(int fd, char c) { - write(fd, &c, 1); -} - -static void printint(int fd, int xx, int base, int sgn) { - f10: 55 push %ebp - f11: 89 e5 mov %esp,%ebp - f13: 57 push %edi - f14: 56 push %esi - f15: 53 push %ebx - f16: 83 ec 3c sub $0x3c,%esp - f19: 89 4d c4 mov %ecx,-0x3c(%ebp) - uint x; - - neg = 0; - if (sgn && xx < 0) { - neg = 1; - x = -xx; - f1c: 89 d1 mov %edx,%ecx -static void printint(int fd, int xx, int base, int sgn) { - f1e: 89 45 b8 mov %eax,-0x48(%ebp) - if (sgn && xx < 0) { - f21: 85 d2 test %edx,%edx - f23: 0f 89 7f 00 00 00 jns fa8 - f29: f6 45 08 01 testb $0x1,0x8(%ebp) - f2d: 74 79 je fa8 - neg = 1; - f2f: c7 45 bc 01 00 00 00 movl $0x1,-0x44(%ebp) - x = -xx; - f36: f7 d9 neg %ecx - } - else { - x = xx; - } - - i = 0; - f38: 31 db xor %ebx,%ebx - f3a: 8d 75 d7 lea -0x29(%ebp),%esi - f3d: 8d 76 00 lea 0x0(%esi),%esi - do { - buf[i++] = digits[x % base]; - f40: 89 c8 mov %ecx,%eax - f42: 31 d2 xor %edx,%edx - f44: 89 cf mov %ecx,%edi - f46: f7 75 c4 divl -0x3c(%ebp) - f49: 0f b6 92 30 14 00 00 movzbl 0x1430(%edx),%edx - f50: 89 45 c0 mov %eax,-0x40(%ebp) - f53: 89 d8 mov %ebx,%eax - f55: 8d 5b 01 lea 0x1(%ebx),%ebx - } - while ((x /= base) != 0); - f58: 8b 4d c0 mov -0x40(%ebp),%ecx - buf[i++] = digits[x % base]; - f5b: 88 14 1e mov %dl,(%esi,%ebx,1) - while ((x /= base) != 0); - f5e: 39 7d c4 cmp %edi,-0x3c(%ebp) - f61: 76 dd jbe f40 - if (neg) { - f63: 8b 4d bc mov -0x44(%ebp),%ecx - f66: 85 c9 test %ecx,%ecx - f68: 74 0c je f76 - buf[i++] = '-'; - f6a: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) - buf[i++] = digits[x % base]; - f6f: 89 d8 mov %ebx,%eax - buf[i++] = '-'; - f71: ba 2d 00 00 00 mov $0x2d,%edx - } - - while (--i >= 0) { - f76: 8b 7d b8 mov -0x48(%ebp),%edi - f79: 8d 5c 05 d7 lea -0x29(%ebp,%eax,1),%ebx - f7d: eb 07 jmp f86 - f7f: 90 nop - putc(fd, buf[i]); - f80: 0f b6 13 movzbl (%ebx),%edx - f83: 83 eb 01 sub $0x1,%ebx - write(fd, &c, 1); - f86: 83 ec 04 sub $0x4,%esp - f89: 88 55 d7 mov %dl,-0x29(%ebp) - f8c: 6a 01 push $0x1 - f8e: 56 push %esi - f8f: 57 push %edi - f90: e8 2e ff ff ff call ec3 - while (--i >= 0) { - f95: 83 c4 10 add $0x10,%esp - f98: 39 de cmp %ebx,%esi - f9a: 75 e4 jne f80 - } -} - f9c: 8d 65 f4 lea -0xc(%ebp),%esp - f9f: 5b pop %ebx - fa0: 5e pop %esi - fa1: 5f pop %edi - fa2: 5d pop %ebp - fa3: c3 ret - fa4: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - neg = 0; - fa8: c7 45 bc 00 00 00 00 movl $0x0,-0x44(%ebp) - faf: eb 87 jmp f38 - fb1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - fb8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - fbf: 90 nop - -00000fc0 : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void printf(int fd, const char *fmt, ...) { - fc0: 55 push %ebp - fc1: 89 e5 mov %esp,%ebp - fc3: 57 push %edi - fc4: 56 push %esi - fc5: 53 push %ebx - fc6: 83 ec 2c sub $0x2c,%esp - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for (i = 0; fmt[i]; i++) { - fc9: 8b 5d 0c mov 0xc(%ebp),%ebx -void printf(int fd, const char *fmt, ...) { - fcc: 8b 75 08 mov 0x8(%ebp),%esi - for (i = 0; fmt[i]; i++) { - fcf: 0f b6 13 movzbl (%ebx),%edx - fd2: 84 d2 test %dl,%dl - fd4: 74 6a je 1040 - ap = (uint*)(void*)&fmt + 1; - fd6: 8d 45 10 lea 0x10(%ebp),%eax - fd9: 83 c3 01 add $0x1,%ebx - write(fd, &c, 1); - fdc: 8d 7d e7 lea -0x19(%ebp),%edi - state = 0; - fdf: 31 c9 xor %ecx,%ecx - ap = (uint*)(void*)&fmt + 1; - fe1: 89 45 d0 mov %eax,-0x30(%ebp) - fe4: eb 36 jmp 101c - fe6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - fed: 8d 76 00 lea 0x0(%esi),%esi - ff0: 89 4d d4 mov %ecx,-0x2c(%ebp) - c = fmt[i] & 0xff; - if (state == 0) { - if (c == '%') { - state = '%'; - ff3: b9 25 00 00 00 mov $0x25,%ecx - if (c == '%') { - ff8: 83 f8 25 cmp $0x25,%eax - ffb: 74 15 je 1012 - write(fd, &c, 1); - ffd: 83 ec 04 sub $0x4,%esp - 1000: 88 55 e7 mov %dl,-0x19(%ebp) - 1003: 6a 01 push $0x1 - 1005: 57 push %edi - 1006: 56 push %esi - 1007: e8 b7 fe ff ff call ec3 - 100c: 8b 4d d4 mov -0x2c(%ebp),%ecx - } - else { - putc(fd, c); - 100f: 83 c4 10 add $0x10,%esp - for (i = 0; fmt[i]; i++) { - 1012: 0f b6 13 movzbl (%ebx),%edx - 1015: 83 c3 01 add $0x1,%ebx - 1018: 84 d2 test %dl,%dl - 101a: 74 24 je 1040 - c = fmt[i] & 0xff; - 101c: 0f b6 c2 movzbl %dl,%eax - if (state == 0) { - 101f: 85 c9 test %ecx,%ecx - 1021: 74 cd je ff0 - } - } - else if (state == '%') { - 1023: 83 f9 25 cmp $0x25,%ecx - 1026: 75 ea jne 1012 - if (c == 'd') { - 1028: 83 f8 25 cmp $0x25,%eax - 102b: 0f 84 07 01 00 00 je 1138 - 1031: 83 e8 63 sub $0x63,%eax - 1034: 83 f8 15 cmp $0x15,%eax - 1037: 77 17 ja 1050 - 1039: ff 24 85 d8 13 00 00 jmp *0x13d8(,%eax,4) - putc(fd, c); - } - state = 0; - } - } -} - 1040: 8d 65 f4 lea -0xc(%ebp),%esp - 1043: 5b pop %ebx - 1044: 5e pop %esi - 1045: 5f pop %edi - 1046: 5d pop %ebp - 1047: c3 ret - 1048: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 104f: 90 nop - write(fd, &c, 1); - 1050: 83 ec 04 sub $0x4,%esp - 1053: 88 55 d4 mov %dl,-0x2c(%ebp) - 1056: 6a 01 push $0x1 - 1058: 57 push %edi - 1059: 56 push %esi - 105a: c6 45 e7 25 movb $0x25,-0x19(%ebp) - 105e: e8 60 fe ff ff call ec3 - putc(fd, c); - 1063: 0f b6 55 d4 movzbl -0x2c(%ebp),%edx - write(fd, &c, 1); - 1067: 83 c4 0c add $0xc,%esp - 106a: 88 55 e7 mov %dl,-0x19(%ebp) - 106d: 6a 01 push $0x1 - 106f: 57 push %edi - 1070: 56 push %esi - 1071: e8 4d fe ff ff call ec3 - putc(fd, c); - 1076: 83 c4 10 add $0x10,%esp - state = 0; - 1079: 31 c9 xor %ecx,%ecx - 107b: eb 95 jmp 1012 - 107d: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 16, 0); - 1080: 83 ec 0c sub $0xc,%esp - 1083: b9 10 00 00 00 mov $0x10,%ecx - 1088: 6a 00 push $0x0 - 108a: 8b 45 d0 mov -0x30(%ebp),%eax - 108d: 8b 10 mov (%eax),%edx - 108f: 89 f0 mov %esi,%eax - 1091: e8 7a fe ff ff call f10 - ap++; - 1096: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 109a: 83 c4 10 add $0x10,%esp - state = 0; - 109d: 31 c9 xor %ecx,%ecx - 109f: e9 6e ff ff ff jmp 1012 - 10a4: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - s = (char*)*ap; - 10a8: 8b 45 d0 mov -0x30(%ebp),%eax - 10ab: 8b 10 mov (%eax),%edx - ap++; - 10ad: 83 c0 04 add $0x4,%eax - 10b0: 89 45 d0 mov %eax,-0x30(%ebp) - if (s == 0) { - 10b3: 85 d2 test %edx,%edx - 10b5: 0f 84 8d 00 00 00 je 1148 - while (*s != 0) { - 10bb: 0f b6 02 movzbl (%edx),%eax - state = 0; - 10be: 31 c9 xor %ecx,%ecx - while (*s != 0) { - 10c0: 84 c0 test %al,%al - 10c2: 0f 84 4a ff ff ff je 1012 - 10c8: 89 5d d4 mov %ebx,-0x2c(%ebp) - 10cb: 89 d3 mov %edx,%ebx - 10cd: 8d 76 00 lea 0x0(%esi),%esi - write(fd, &c, 1); - 10d0: 83 ec 04 sub $0x4,%esp - s++; - 10d3: 83 c3 01 add $0x1,%ebx - 10d6: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 10d9: 6a 01 push $0x1 - 10db: 57 push %edi - 10dc: 56 push %esi - 10dd: e8 e1 fd ff ff call ec3 - while (*s != 0) { - 10e2: 0f b6 03 movzbl (%ebx),%eax - 10e5: 83 c4 10 add $0x10,%esp - 10e8: 84 c0 test %al,%al - 10ea: 75 e4 jne 10d0 - state = 0; - 10ec: 8b 5d d4 mov -0x2c(%ebp),%ebx - 10ef: 31 c9 xor %ecx,%ecx - 10f1: e9 1c ff ff ff jmp 1012 - 10f6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 10fd: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 10, 1); - 1100: 83 ec 0c sub $0xc,%esp - 1103: b9 0a 00 00 00 mov $0xa,%ecx - 1108: 6a 01 push $0x1 - 110a: e9 7b ff ff ff jmp 108a - 110f: 90 nop - putc(fd, *ap); - 1110: 8b 45 d0 mov -0x30(%ebp),%eax - write(fd, &c, 1); - 1113: 83 ec 04 sub $0x4,%esp - putc(fd, *ap); - 1116: 8b 00 mov (%eax),%eax - write(fd, &c, 1); - 1118: 6a 01 push $0x1 - 111a: 57 push %edi - 111b: 56 push %esi - putc(fd, *ap); - 111c: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 111f: e8 9f fd ff ff call ec3 - ap++; - 1124: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 1128: 83 c4 10 add $0x10,%esp - state = 0; - 112b: 31 c9 xor %ecx,%ecx - 112d: e9 e0 fe ff ff jmp 1012 - 1132: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - putc(fd, c); - 1138: 88 55 e7 mov %dl,-0x19(%ebp) - write(fd, &c, 1); - 113b: 83 ec 04 sub $0x4,%esp - 113e: e9 2a ff ff ff jmp 106d - 1143: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 1147: 90 nop - s = "(null)"; - 1148: ba d0 13 00 00 mov $0x13d0,%edx - while (*s != 0) { - 114d: 89 5d d4 mov %ebx,-0x2c(%ebp) - 1150: b8 28 00 00 00 mov $0x28,%eax - 1155: 89 d3 mov %edx,%ebx - 1157: e9 74 ff ff ff jmp 10d0 - 115c: 66 90 xchg %ax,%ax - 115e: 66 90 xchg %ax,%ax - -00001160 : -typedef union header Header; - -static Header base; -static Header *freep; - -void free(void *ap) { - 1160: 55 push %ebp - Header *bp, *p; - - bp = (Header*)ap - 1; - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 1161: a1 84 1a 00 00 mov 0x1a84,%eax -void free(void *ap) { - 1166: 89 e5 mov %esp,%ebp - 1168: 57 push %edi - 1169: 56 push %esi - 116a: 53 push %ebx - 116b: 8b 5d 08 mov 0x8(%ebp),%ebx - bp = (Header*)ap - 1; - 116e: 8d 4b f8 lea -0x8(%ebx),%ecx - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 1171: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 1178: 89 c2 mov %eax,%edx - 117a: 8b 00 mov (%eax),%eax - 117c: 39 ca cmp %ecx,%edx - 117e: 73 30 jae 11b0 - 1180: 39 c1 cmp %eax,%ecx - 1182: 72 04 jb 1188 - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 1184: 39 c2 cmp %eax,%edx - 1186: 72 f0 jb 1178 - break; - } - } - if (bp + bp->s.size == p->s.ptr) { - 1188: 8b 73 fc mov -0x4(%ebx),%esi - 118b: 8d 3c f1 lea (%ecx,%esi,8),%edi - 118e: 39 f8 cmp %edi,%eax - 1190: 74 30 je 11c2 - bp->s.size += p->s.ptr->s.size; - bp->s.ptr = p->s.ptr->s.ptr; - 1192: 89 43 f8 mov %eax,-0x8(%ebx) - } - else { - bp->s.ptr = p->s.ptr; - } - if (p + p->s.size == bp) { - 1195: 8b 42 04 mov 0x4(%edx),%eax - 1198: 8d 34 c2 lea (%edx,%eax,8),%esi - 119b: 39 f1 cmp %esi,%ecx - 119d: 74 3a je 11d9 - p->s.size += bp->s.size; - p->s.ptr = bp->s.ptr; - 119f: 89 0a mov %ecx,(%edx) - } - else { - p->s.ptr = bp; - } - freep = p; -} - 11a1: 5b pop %ebx - freep = p; - 11a2: 89 15 84 1a 00 00 mov %edx,0x1a84 -} - 11a8: 5e pop %esi - 11a9: 5f pop %edi - 11aa: 5d pop %ebp - 11ab: c3 ret - 11ac: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 11b0: 39 c2 cmp %eax,%edx - 11b2: 72 c4 jb 1178 - 11b4: 39 c1 cmp %eax,%ecx - 11b6: 73 c0 jae 1178 - if (bp + bp->s.size == p->s.ptr) { - 11b8: 8b 73 fc mov -0x4(%ebx),%esi - 11bb: 8d 3c f1 lea (%ecx,%esi,8),%edi - 11be: 39 f8 cmp %edi,%eax - 11c0: 75 d0 jne 1192 - bp->s.size += p->s.ptr->s.size; - 11c2: 03 70 04 add 0x4(%eax),%esi - 11c5: 89 73 fc mov %esi,-0x4(%ebx) - bp->s.ptr = p->s.ptr->s.ptr; - 11c8: 8b 02 mov (%edx),%eax - 11ca: 8b 00 mov (%eax),%eax - 11cc: 89 43 f8 mov %eax,-0x8(%ebx) - if (p + p->s.size == bp) { - 11cf: 8b 42 04 mov 0x4(%edx),%eax - 11d2: 8d 34 c2 lea (%edx,%eax,8),%esi - 11d5: 39 f1 cmp %esi,%ecx - 11d7: 75 c6 jne 119f - p->s.size += bp->s.size; - 11d9: 03 43 fc add -0x4(%ebx),%eax - freep = p; - 11dc: 89 15 84 1a 00 00 mov %edx,0x1a84 - p->s.size += bp->s.size; - 11e2: 89 42 04 mov %eax,0x4(%edx) - p->s.ptr = bp->s.ptr; - 11e5: 8b 4b f8 mov -0x8(%ebx),%ecx - 11e8: 89 0a mov %ecx,(%edx) -} - 11ea: 5b pop %ebx - 11eb: 5e pop %esi - 11ec: 5f pop %edi - 11ed: 5d pop %ebp - 11ee: c3 ret - 11ef: 90 nop - -000011f0 : - hp->s.size = nu; - free((void*)(hp + 1)); - return freep; -} - -void* malloc(uint nbytes) { - 11f0: 55 push %ebp - 11f1: 89 e5 mov %esp,%ebp - 11f3: 57 push %edi - 11f4: 56 push %esi - 11f5: 53 push %ebx - 11f6: 83 ec 1c sub $0x1c,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 11f9: 8b 45 08 mov 0x8(%ebp),%eax - if ((prevp = freep) == 0) { - 11fc: 8b 3d 84 1a 00 00 mov 0x1a84,%edi - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 1202: 8d 70 07 lea 0x7(%eax),%esi - 1205: c1 ee 03 shr $0x3,%esi - 1208: 83 c6 01 add $0x1,%esi - if ((prevp = freep) == 0) { - 120b: 85 ff test %edi,%edi - 120d: 0f 84 9d 00 00 00 je 12b0 - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 1213: 8b 17 mov (%edi),%edx - if (p->s.size >= nunits) { - 1215: 8b 4a 04 mov 0x4(%edx),%ecx - 1218: 39 f1 cmp %esi,%ecx - 121a: 73 6a jae 1286 - 121c: bb 00 10 00 00 mov $0x1000,%ebx - 1221: 39 de cmp %ebx,%esi - 1223: 0f 43 de cmovae %esi,%ebx - p = sbrk(nu * sizeof(Header)); - 1226: 8d 04 dd 00 00 00 00 lea 0x0(,%ebx,8),%eax - 122d: 89 45 e4 mov %eax,-0x1c(%ebp) - 1230: eb 17 jmp 1249 - 1232: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 1238: 8b 02 mov (%edx),%eax - if (p->s.size >= nunits) { - 123a: 8b 48 04 mov 0x4(%eax),%ecx - 123d: 39 f1 cmp %esi,%ecx - 123f: 73 4f jae 1290 - p->s.size = nunits; - } - freep = prevp; - return (void*)(p + 1); - } - if (p == freep) { - 1241: 8b 3d 84 1a 00 00 mov 0x1a84,%edi - 1247: 89 c2 mov %eax,%edx - 1249: 39 d7 cmp %edx,%edi - 124b: 75 eb jne 1238 - p = sbrk(nu * sizeof(Header)); - 124d: 83 ec 0c sub $0xc,%esp - 1250: ff 75 e4 push -0x1c(%ebp) - 1253: e8 4b fc ff ff call ea3 - if (p == (char*)-1) { - 1258: 83 c4 10 add $0x10,%esp - 125b: 83 f8 ff cmp $0xffffffff,%eax - 125e: 74 1c je 127c - hp->s.size = nu; - 1260: 89 58 04 mov %ebx,0x4(%eax) - free((void*)(hp + 1)); - 1263: 83 ec 0c sub $0xc,%esp - 1266: 83 c0 08 add $0x8,%eax - 1269: 50 push %eax - 126a: e8 f1 fe ff ff call 1160 - return freep; - 126f: 8b 15 84 1a 00 00 mov 0x1a84,%edx - if ((p = morecore(nunits)) == 0) { - 1275: 83 c4 10 add $0x10,%esp - 1278: 85 d2 test %edx,%edx - 127a: 75 bc jne 1238 - return 0; - } - } - } -} - 127c: 8d 65 f4 lea -0xc(%ebp),%esp - return 0; - 127f: 31 c0 xor %eax,%eax -} - 1281: 5b pop %ebx - 1282: 5e pop %esi - 1283: 5f pop %edi - 1284: 5d pop %ebp - 1285: c3 ret - if (p->s.size >= nunits) { - 1286: 89 d0 mov %edx,%eax - 1288: 89 fa mov %edi,%edx - 128a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - if (p->s.size == nunits) { - 1290: 39 ce cmp %ecx,%esi - 1292: 74 4c je 12e0 - p->s.size -= nunits; - 1294: 29 f1 sub %esi,%ecx - 1296: 89 48 04 mov %ecx,0x4(%eax) - p += p->s.size; - 1299: 8d 04 c8 lea (%eax,%ecx,8),%eax - p->s.size = nunits; - 129c: 89 70 04 mov %esi,0x4(%eax) - freep = prevp; - 129f: 89 15 84 1a 00 00 mov %edx,0x1a84 -} - 12a5: 8d 65 f4 lea -0xc(%ebp),%esp - return (void*)(p + 1); - 12a8: 83 c0 08 add $0x8,%eax -} - 12ab: 5b pop %ebx - 12ac: 5e pop %esi - 12ad: 5f pop %edi - 12ae: 5d pop %ebp - 12af: c3 ret - base.s.ptr = freep = prevp = &base; - 12b0: c7 05 84 1a 00 00 88 movl $0x1a88,0x1a84 - 12b7: 1a 00 00 - base.s.size = 0; - 12ba: bf 88 1a 00 00 mov $0x1a88,%edi - base.s.ptr = freep = prevp = &base; - 12bf: c7 05 88 1a 00 00 88 movl $0x1a88,0x1a88 - 12c6: 1a 00 00 - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 12c9: 89 fa mov %edi,%edx - base.s.size = 0; - 12cb: c7 05 8c 1a 00 00 00 movl $0x0,0x1a8c - 12d2: 00 00 00 - if (p->s.size >= nunits) { - 12d5: e9 42 ff ff ff jmp 121c - 12da: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - prevp->s.ptr = p->s.ptr; - 12e0: 8b 08 mov (%eax),%ecx - 12e2: 89 0a mov %ecx,(%edx) - 12e4: eb b9 jmp 129f diff --git a/sh.c b/sh.c index 1e76d7b..f9e2301 100644 --- a/sh.c +++ b/sh.c @@ -147,6 +147,7 @@ int main(void) { static char buf[100]; int fd; + printf(1, "SH PID: %d\n", getpid()); // Ensure that three file descriptors are open. while ((fd = open("console", O_RDWR)) >= 0) { if (fd >= 3) { diff --git a/sh.d b/sh.d deleted file mode 100644 index 51ddf2d..0000000 --- a/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/sh.o b/sh.o deleted file mode 100644 index 1a9669f7d62dfd9a5e52430740bfe6bdf1fea0f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23344 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 diff --git a/sh.sym b/sh.sym deleted file mode 100644 index fb947b6..0000000 --- a/sh.sym +++ /dev/null @@ -1,69 +0,0 @@ -00000000 sh.c -00001a20 buf.0 -00000000 ulib.c -00000000 printf.c -00000f10 printint -00001430 digits.0 -00000000 umalloc.c -00001a84 freep -00001a88 base -00000c00 strcpy -00000fc0 printf -00000efb greeting -00000e20 memmove -00000ecb mknod -00000370 execcmd -00000d20 gets -00000e9b getpid -000008e0 parsepipe -00000b90 parsecmd -00000470 backcmd -00000600 peek -00000680 parseredirs -000004a0 gettoken -000011f0 malloc -00000eab sleep -00001a0c whitespace -000001c0 fork1 -00000ae0 nulterminate -00000e63 pipe -00000ef3 getch -00000160 getcmd -00000ec3 write -00000e83 fstat -00000e73 kill -00000e8b chdir -00000970 parseline -000001e0 runcmd -00000a50 parseblock -00000e7b exec -00000e5b wait -00001a04 symbols -00000e6b read -000007c0 parseexec -00000ed3 unlink -000001a0 panic -00000e4b fork -00000ea3 sbrk -00000eb3 uptime -00001a12 __bss_start -00000cc0 memset -00000000 main -00000c30 strcmp -00000f03 shutdown -00000e93 dup -000003f0 pipecmd -000003a0 redircmd -00000d90 stat -00001a12 _edata -00001a90 _end -00000edb link -00000e53 exit -00000de0 atoi -00000c90 strlen -00000ebb open -00000ce0 strchr -00000ee3 mkdir -00000eeb close -00000430 listcmd -00001160 free diff --git a/shutdown.asm b/shutdown.asm deleted file mode 100644 index 29fb272..0000000 --- a/shutdown.asm +++ /dev/null @@ -1,1198 +0,0 @@ - -_shutdown: file format elf32-i386 - - -Disassembly of section .text: - -00000000
    : -#include "types.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 push -0x4(%ecx) - a: 55 push %ebp - b: 89 e5 mov %esp,%ebp - d: 57 push %edi - e: 56 push %esi - f: 53 push %ebx - 10: 51 push %ecx - 11: 83 ec 18 sub $0x18,%esp - 14: 8b 01 mov (%ecx),%eax - 16: 8b 71 04 mov 0x4(%ecx),%esi - 19: 89 45 e4 mov %eax,-0x1c(%ebp) - int restart = 0; - - for (int i = 1; i < argc; i++) { - 1c: 83 f8 01 cmp $0x1,%eax - 1f: 7e 58 jle 79 - 21: bb 01 00 00 00 mov $0x1,%ebx - int restart = 0; - 26: 31 ff xor %edi,%edi - 28: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 2f: 90 nop - if (strcmp(argv[i], "-r") == 0) { - 30: 83 ec 08 sub $0x8,%esp - 33: 68 78 07 00 00 push $0x778 - 38: ff 34 9e push (%esi,%ebx,4) - 3b: e8 80 00 00 00 call c0 - 40: 83 c4 10 add $0x10,%esp - restart = 1; - 43: 85 c0 test %eax,%eax - 45: b8 01 00 00 00 mov $0x1,%eax - 4a: 0f 44 f8 cmove %eax,%edi - for (int i = 1; i < argc; i++) { - 4d: 83 c3 01 add $0x1,%ebx - 50: 39 5d e4 cmp %ebx,-0x1c(%ebp) - 53: 75 db jne 30 - } - } - - switch(restart) { - 55: 83 ff 01 cmp $0x1,%edi - 58: 75 1f jne 79 - case 0: - printf(1, "Shutting Down...\n"); - break; - case 1: - printf(1, "Restarting...\n"); - 5a: 50 push %eax - 5b: 50 push %eax - 5c: 68 8d 07 00 00 push $0x78d - 61: 6a 01 push $0x1 - 63: e8 e8 03 00 00 call 450 - break; - 68: 83 c4 10 add $0x10,%esp - } - - shutdown(restart); - 6b: 83 ec 0c sub $0xc,%esp - 6e: 57 push %edi - 6f: e8 1f 03 00 00 call 393 - exit(); - 74: e8 6a 02 00 00 call 2e3 - printf(1, "Shutting Down...\n"); - 79: 52 push %edx - break; - 7a: 31 ff xor %edi,%edi - printf(1, "Shutting Down...\n"); - 7c: 52 push %edx - 7d: 68 7b 07 00 00 push $0x77b - 82: 6a 01 push $0x1 - 84: e8 c7 03 00 00 call 450 - break; - 89: 83 c4 10 add $0x10,%esp - 8c: eb dd jmp 6b - 8e: 66 90 xchg %ax,%ax - -00000090 : -#include "stat.h" -#include "fcntl.h" -#include "user.h" -#include "x86.h" - -char*strcpy(char *s, const char *t) { - 90: 55 push %ebp - char *os; - - os = s; - while ((*s++ = *t++) != 0) { - 91: 31 c0 xor %eax,%eax -char*strcpy(char *s, const char *t) { - 93: 89 e5 mov %esp,%ebp - 95: 53 push %ebx - 96: 8b 4d 08 mov 0x8(%ebp),%ecx - 99: 8b 5d 0c mov 0xc(%ebp),%ebx - 9c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - while ((*s++ = *t++) != 0) { - a0: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - a4: 88 14 01 mov %dl,(%ecx,%eax,1) - a7: 83 c0 01 add $0x1,%eax - aa: 84 d2 test %dl,%dl - ac: 75 f2 jne a0 - ; - } - return os; -} - ae: 8b 5d fc mov -0x4(%ebp),%ebx - b1: 89 c8 mov %ecx,%eax - b3: c9 leave - b4: c3 ret - b5: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - bc: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -000000c0 : - -int strcmp(const char *p, const char *q) { - c0: 55 push %ebp - c1: 89 e5 mov %esp,%ebp - c3: 53 push %ebx - c4: 8b 55 08 mov 0x8(%ebp),%edx - c7: 8b 4d 0c mov 0xc(%ebp),%ecx - while (*p && *p == *q) { - ca: 0f b6 02 movzbl (%edx),%eax - cd: 84 c0 test %al,%al - cf: 75 17 jne e8 - d1: eb 3a jmp 10d - d3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - d7: 90 nop - d8: 0f b6 42 01 movzbl 0x1(%edx),%eax - p++, q++; - dc: 83 c2 01 add $0x1,%edx - df: 8d 59 01 lea 0x1(%ecx),%ebx - while (*p && *p == *q) { - e2: 84 c0 test %al,%al - e4: 74 1a je 100 - p++, q++; - e6: 89 d9 mov %ebx,%ecx - while (*p && *p == *q) { - e8: 0f b6 19 movzbl (%ecx),%ebx - eb: 38 c3 cmp %al,%bl - ed: 74 e9 je d8 - } - return (uchar) * p - (uchar) * q; - ef: 29 d8 sub %ebx,%eax -} - f1: 8b 5d fc mov -0x4(%ebp),%ebx - f4: c9 leave - f5: c3 ret - f6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - fd: 8d 76 00 lea 0x0(%esi),%esi - return (uchar) * p - (uchar) * q; - 100: 0f b6 59 01 movzbl 0x1(%ecx),%ebx - 104: 31 c0 xor %eax,%eax - 106: 29 d8 sub %ebx,%eax -} - 108: 8b 5d fc mov -0x4(%ebp),%ebx - 10b: c9 leave - 10c: c3 ret - return (uchar) * p - (uchar) * q; - 10d: 0f b6 19 movzbl (%ecx),%ebx - 110: 31 c0 xor %eax,%eax - 112: eb db jmp ef - 114: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 11b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 11f: 90 nop - -00000120 : - -uint strlen(const char *s) { - 120: 55 push %ebp - 121: 89 e5 mov %esp,%ebp - 123: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - for (n = 0; s[n]; n++) { - 126: 80 3a 00 cmpb $0x0,(%edx) - 129: 74 15 je 140 - 12b: 31 c0 xor %eax,%eax - 12d: 8d 76 00 lea 0x0(%esi),%esi - 130: 83 c0 01 add $0x1,%eax - 133: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - 137: 89 c1 mov %eax,%ecx - 139: 75 f5 jne 130 - ; - } - return n; -} - 13b: 89 c8 mov %ecx,%eax - 13d: 5d pop %ebp - 13e: c3 ret - 13f: 90 nop - for (n = 0; s[n]; n++) { - 140: 31 c9 xor %ecx,%ecx -} - 142: 5d pop %ebp - 143: 89 c8 mov %ecx,%eax - 145: c3 ret - 146: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 14d: 8d 76 00 lea 0x0(%esi),%esi - -00000150 : - -void* memset(void *dst, int c, uint n) { - 150: 55 push %ebp - 151: 89 e5 mov %esp,%ebp - 153: 57 push %edi - 154: 8b 55 08 mov 0x8(%ebp),%edx - "d" (port), "0" (addr), "1" (cnt) : - "cc"); -} - -static inline void stosb(void *addr, int data, int cnt) { - asm volatile ("cld; rep stosb" : - 157: 8b 4d 10 mov 0x10(%ebp),%ecx - 15a: 8b 45 0c mov 0xc(%ebp),%eax - 15d: 89 d7 mov %edx,%edi - 15f: fc cld - 160: f3 aa rep stos %al,%es:(%edi) - stosb(dst, c, n); - return dst; -} - 162: 8b 7d fc mov -0x4(%ebp),%edi - 165: 89 d0 mov %edx,%eax - 167: c9 leave - 168: c3 ret - 169: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -00000170 : - -char* strchr(const char *s, char c) { - 170: 55 push %ebp - 171: 89 e5 mov %esp,%ebp - 173: 8b 45 08 mov 0x8(%ebp),%eax - 176: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx - for (; *s; s++) { - 17a: 0f b6 10 movzbl (%eax),%edx - 17d: 84 d2 test %dl,%dl - 17f: 75 12 jne 193 - 181: eb 1d jmp 1a0 - 183: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 187: 90 nop - 188: 0f b6 50 01 movzbl 0x1(%eax),%edx - 18c: 83 c0 01 add $0x1,%eax - 18f: 84 d2 test %dl,%dl - 191: 74 0d je 1a0 - if (*s == c) { - 193: 38 d1 cmp %dl,%cl - 195: 75 f1 jne 188 - return (char*)s; - } - } - return 0; -} - 197: 5d pop %ebp - 198: c3 ret - 199: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - return 0; - 1a0: 31 c0 xor %eax,%eax -} - 1a2: 5d pop %ebp - 1a3: c3 ret - 1a4: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 1ab: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 1af: 90 nop - -000001b0 : - -char* gets(char *buf, int max) { - 1b0: 55 push %ebp - 1b1: 89 e5 mov %esp,%ebp - 1b3: 57 push %edi - 1b4: 56 push %esi - int i, cc; - char c; - - for (i = 0; i + 1 < max;) { - cc = read(0, &c, 1); - 1b5: 8d 7d e7 lea -0x19(%ebp),%edi -char* gets(char *buf, int max) { - 1b8: 53 push %ebx - for (i = 0; i + 1 < max;) { - 1b9: 31 db xor %ebx,%ebx -char* gets(char *buf, int max) { - 1bb: 83 ec 1c sub $0x1c,%esp - for (i = 0; i + 1 < max;) { - 1be: eb 27 jmp 1e7 - cc = read(0, &c, 1); - 1c0: 83 ec 04 sub $0x4,%esp - 1c3: 6a 01 push $0x1 - 1c5: 57 push %edi - 1c6: 6a 00 push $0x0 - 1c8: e8 2e 01 00 00 call 2fb - if (cc < 1) { - 1cd: 83 c4 10 add $0x10,%esp - 1d0: 85 c0 test %eax,%eax - 1d2: 7e 1d jle 1f1 - break; - } - buf[i++] = c; - 1d4: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 1d8: 8b 55 08 mov 0x8(%ebp),%edx - 1db: 88 44 1a ff mov %al,-0x1(%edx,%ebx,1) - if (c == '\n' || c == '\r') { - 1df: 3c 0a cmp $0xa,%al - 1e1: 74 1d je 200 - 1e3: 3c 0d cmp $0xd,%al - 1e5: 74 19 je 200 - for (i = 0; i + 1 < max;) { - 1e7: 89 de mov %ebx,%esi - 1e9: 83 c3 01 add $0x1,%ebx - 1ec: 3b 5d 0c cmp 0xc(%ebp),%ebx - 1ef: 7c cf jl 1c0 - break; - } - } - buf[i] = '\0'; - 1f1: 8b 45 08 mov 0x8(%ebp),%eax - 1f4: c6 04 30 00 movb $0x0,(%eax,%esi,1) - return buf; -} - 1f8: 8d 65 f4 lea -0xc(%ebp),%esp - 1fb: 5b pop %ebx - 1fc: 5e pop %esi - 1fd: 5f pop %edi - 1fe: 5d pop %ebp - 1ff: c3 ret - buf[i] = '\0'; - 200: 8b 45 08 mov 0x8(%ebp),%eax - 203: 89 de mov %ebx,%esi - 205: c6 04 30 00 movb $0x0,(%eax,%esi,1) -} - 209: 8d 65 f4 lea -0xc(%ebp),%esp - 20c: 5b pop %ebx - 20d: 5e pop %esi - 20e: 5f pop %edi - 20f: 5d pop %ebp - 210: c3 ret - 211: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 218: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 21f: 90 nop - -00000220 : - -int stat(const char *n, struct stat *st) { - 220: 55 push %ebp - 221: 89 e5 mov %esp,%ebp - 223: 56 push %esi - 224: 53 push %ebx - int fd; - int r; - - fd = open(n, O_RDONLY); - 225: 83 ec 08 sub $0x8,%esp - 228: 6a 00 push $0x0 - 22a: ff 75 08 push 0x8(%ebp) - 22d: e8 19 01 00 00 call 34b - if (fd < 0) { - 232: 83 c4 10 add $0x10,%esp - 235: 85 c0 test %eax,%eax - 237: 78 27 js 260 - return -1; - } - r = fstat(fd, st); - 239: 83 ec 08 sub $0x8,%esp - 23c: ff 75 0c push 0xc(%ebp) - 23f: 89 c3 mov %eax,%ebx - 241: 50 push %eax - 242: e8 cc 00 00 00 call 313 - close(fd); - 247: 89 1c 24 mov %ebx,(%esp) - r = fstat(fd, st); - 24a: 89 c6 mov %eax,%esi - close(fd); - 24c: e8 2a 01 00 00 call 37b - return r; - 251: 83 c4 10 add $0x10,%esp -} - 254: 8d 65 f8 lea -0x8(%ebp),%esp - 257: 89 f0 mov %esi,%eax - 259: 5b pop %ebx - 25a: 5e pop %esi - 25b: 5d pop %ebp - 25c: c3 ret - 25d: 8d 76 00 lea 0x0(%esi),%esi - return -1; - 260: be ff ff ff ff mov $0xffffffff,%esi - 265: eb ed jmp 254 - 267: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 26e: 66 90 xchg %ax,%ax - -00000270 : - -int atoi(const char *s) { - 270: 55 push %ebp - 271: 89 e5 mov %esp,%ebp - 273: 53 push %ebx - 274: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - n = 0; - while ('0' <= *s && *s <= '9') { - 277: 0f be 02 movsbl (%edx),%eax - 27a: 8d 48 d0 lea -0x30(%eax),%ecx - 27d: 80 f9 09 cmp $0x9,%cl - n = 0; - 280: b9 00 00 00 00 mov $0x0,%ecx - while ('0' <= *s && *s <= '9') { - 285: 77 1e ja 2a5 - 287: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 28e: 66 90 xchg %ax,%ax - n = n * 10 + *s++ - '0'; - 290: 83 c2 01 add $0x1,%edx - 293: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 296: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx - while ('0' <= *s && *s <= '9') { - 29a: 0f be 02 movsbl (%edx),%eax - 29d: 8d 58 d0 lea -0x30(%eax),%ebx - 2a0: 80 fb 09 cmp $0x9,%bl - 2a3: 76 eb jbe 290 - } - return n; -} - 2a5: 8b 5d fc mov -0x4(%ebp),%ebx - 2a8: 89 c8 mov %ecx,%eax - 2aa: c9 leave - 2ab: c3 ret - 2ac: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -000002b0 : - -void* memmove(void *vdst, const void *vsrc, int n) { - 2b0: 55 push %ebp - 2b1: 89 e5 mov %esp,%ebp - 2b3: 57 push %edi - 2b4: 8b 45 10 mov 0x10(%ebp),%eax - 2b7: 8b 55 08 mov 0x8(%ebp),%edx - 2ba: 56 push %esi - 2bb: 8b 75 0c mov 0xc(%ebp),%esi - char *dst; - const char *src; - - dst = vdst; - src = vsrc; - while (n-- > 0) { - 2be: 85 c0 test %eax,%eax - 2c0: 7e 13 jle 2d5 - 2c2: 01 d0 add %edx,%eax - dst = vdst; - 2c4: 89 d7 mov %edx,%edi - 2c6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 2cd: 8d 76 00 lea 0x0(%esi),%esi - *dst++ = *src++; - 2d0: a4 movsb %ds:(%esi),%es:(%edi) - while (n-- > 0) { - 2d1: 39 f8 cmp %edi,%eax - 2d3: 75 fb jne 2d0 - } - return vdst; -} - 2d5: 5e pop %esi - 2d6: 89 d0 mov %edx,%eax - 2d8: 5f pop %edi - 2d9: 5d pop %ebp - 2da: c3 ret - -000002db : -name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 2db: b8 01 00 00 00 mov $0x1,%eax - 2e0: cd 40 int $0x40 - 2e2: c3 ret - -000002e3 : -SYSCALL(exit) - 2e3: b8 02 00 00 00 mov $0x2,%eax - 2e8: cd 40 int $0x40 - 2ea: c3 ret - -000002eb : -SYSCALL(wait) - 2eb: b8 03 00 00 00 mov $0x3,%eax - 2f0: cd 40 int $0x40 - 2f2: c3 ret - -000002f3 : -SYSCALL(pipe) - 2f3: b8 04 00 00 00 mov $0x4,%eax - 2f8: cd 40 int $0x40 - 2fa: c3 ret - -000002fb : -SYSCALL(read) - 2fb: b8 05 00 00 00 mov $0x5,%eax - 300: cd 40 int $0x40 - 302: c3 ret - -00000303 : -SYSCALL(kill) - 303: b8 06 00 00 00 mov $0x6,%eax - 308: cd 40 int $0x40 - 30a: c3 ret - -0000030b : -SYSCALL(exec) - 30b: b8 07 00 00 00 mov $0x7,%eax - 310: cd 40 int $0x40 - 312: c3 ret - -00000313 : -SYSCALL(fstat) - 313: b8 08 00 00 00 mov $0x8,%eax - 318: cd 40 int $0x40 - 31a: c3 ret - -0000031b : -SYSCALL(chdir) - 31b: b8 09 00 00 00 mov $0x9,%eax - 320: cd 40 int $0x40 - 322: c3 ret - -00000323 : -SYSCALL(dup) - 323: b8 0a 00 00 00 mov $0xa,%eax - 328: cd 40 int $0x40 - 32a: c3 ret - -0000032b : -SYSCALL(getpid) - 32b: b8 0b 00 00 00 mov $0xb,%eax - 330: cd 40 int $0x40 - 332: c3 ret - -00000333 : -SYSCALL(sbrk) - 333: b8 0c 00 00 00 mov $0xc,%eax - 338: cd 40 int $0x40 - 33a: c3 ret - -0000033b : -SYSCALL(sleep) - 33b: b8 0d 00 00 00 mov $0xd,%eax - 340: cd 40 int $0x40 - 342: c3 ret - -00000343 : -SYSCALL(uptime) - 343: b8 0e 00 00 00 mov $0xe,%eax - 348: cd 40 int $0x40 - 34a: c3 ret - -0000034b : -SYSCALL(open) - 34b: b8 0f 00 00 00 mov $0xf,%eax - 350: cd 40 int $0x40 - 352: c3 ret - -00000353 : -SYSCALL(write) - 353: b8 10 00 00 00 mov $0x10,%eax - 358: cd 40 int $0x40 - 35a: c3 ret - -0000035b : -SYSCALL(mknod) - 35b: b8 11 00 00 00 mov $0x11,%eax - 360: cd 40 int $0x40 - 362: c3 ret - -00000363 : -SYSCALL(unlink) - 363: b8 12 00 00 00 mov $0x12,%eax - 368: cd 40 int $0x40 - 36a: c3 ret - -0000036b : -SYSCALL(link) - 36b: b8 13 00 00 00 mov $0x13,%eax - 370: cd 40 int $0x40 - 372: c3 ret - -00000373 : -SYSCALL(mkdir) - 373: b8 14 00 00 00 mov $0x14,%eax - 378: cd 40 int $0x40 - 37a: c3 ret - -0000037b : -SYSCALL(close) - 37b: b8 15 00 00 00 mov $0x15,%eax - 380: cd 40 int $0x40 - 382: c3 ret - -00000383 : -SYSCALL(getch) - 383: b8 16 00 00 00 mov $0x16,%eax - 388: cd 40 int $0x40 - 38a: c3 ret - -0000038b : -SYSCALL(greeting) - 38b: b8 17 00 00 00 mov $0x17,%eax - 390: cd 40 int $0x40 - 392: c3 ret - -00000393 : -SYSCALL(shutdown) - 393: b8 18 00 00 00 mov $0x18,%eax - 398: cd 40 int $0x40 - 39a: c3 ret - 39b: 66 90 xchg %ax,%ax - 39d: 66 90 xchg %ax,%ax - 39f: 90 nop - -000003a0 : - -static void putc(int fd, char c) { - write(fd, &c, 1); -} - -static void printint(int fd, int xx, int base, int sgn) { - 3a0: 55 push %ebp - 3a1: 89 e5 mov %esp,%ebp - 3a3: 57 push %edi - 3a4: 56 push %esi - 3a5: 53 push %ebx - 3a6: 83 ec 3c sub $0x3c,%esp - 3a9: 89 4d c4 mov %ecx,-0x3c(%ebp) - uint x; - - neg = 0; - if (sgn && xx < 0) { - neg = 1; - x = -xx; - 3ac: 89 d1 mov %edx,%ecx -static void printint(int fd, int xx, int base, int sgn) { - 3ae: 89 45 b8 mov %eax,-0x48(%ebp) - if (sgn && xx < 0) { - 3b1: 85 d2 test %edx,%edx - 3b3: 0f 89 7f 00 00 00 jns 438 - 3b9: f6 45 08 01 testb $0x1,0x8(%ebp) - 3bd: 74 79 je 438 - neg = 1; - 3bf: c7 45 bc 01 00 00 00 movl $0x1,-0x44(%ebp) - x = -xx; - 3c6: f7 d9 neg %ecx - } - else { - x = xx; - } - - i = 0; - 3c8: 31 db xor %ebx,%ebx - 3ca: 8d 75 d7 lea -0x29(%ebp),%esi - 3cd: 8d 76 00 lea 0x0(%esi),%esi - do { - buf[i++] = digits[x % base]; - 3d0: 89 c8 mov %ecx,%eax - 3d2: 31 d2 xor %edx,%edx - 3d4: 89 cf mov %ecx,%edi - 3d6: f7 75 c4 divl -0x3c(%ebp) - 3d9: 0f b6 92 fc 07 00 00 movzbl 0x7fc(%edx),%edx - 3e0: 89 45 c0 mov %eax,-0x40(%ebp) - 3e3: 89 d8 mov %ebx,%eax - 3e5: 8d 5b 01 lea 0x1(%ebx),%ebx - } - while ((x /= base) != 0); - 3e8: 8b 4d c0 mov -0x40(%ebp),%ecx - buf[i++] = digits[x % base]; - 3eb: 88 14 1e mov %dl,(%esi,%ebx,1) - while ((x /= base) != 0); - 3ee: 39 7d c4 cmp %edi,-0x3c(%ebp) - 3f1: 76 dd jbe 3d0 - if (neg) { - 3f3: 8b 4d bc mov -0x44(%ebp),%ecx - 3f6: 85 c9 test %ecx,%ecx - 3f8: 74 0c je 406 - buf[i++] = '-'; - 3fa: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) - buf[i++] = digits[x % base]; - 3ff: 89 d8 mov %ebx,%eax - buf[i++] = '-'; - 401: ba 2d 00 00 00 mov $0x2d,%edx - } - - while (--i >= 0) { - 406: 8b 7d b8 mov -0x48(%ebp),%edi - 409: 8d 5c 05 d7 lea -0x29(%ebp,%eax,1),%ebx - 40d: eb 07 jmp 416 - 40f: 90 nop - putc(fd, buf[i]); - 410: 0f b6 13 movzbl (%ebx),%edx - 413: 83 eb 01 sub $0x1,%ebx - write(fd, &c, 1); - 416: 83 ec 04 sub $0x4,%esp - 419: 88 55 d7 mov %dl,-0x29(%ebp) - 41c: 6a 01 push $0x1 - 41e: 56 push %esi - 41f: 57 push %edi - 420: e8 2e ff ff ff call 353 - while (--i >= 0) { - 425: 83 c4 10 add $0x10,%esp - 428: 39 de cmp %ebx,%esi - 42a: 75 e4 jne 410 - } -} - 42c: 8d 65 f4 lea -0xc(%ebp),%esp - 42f: 5b pop %ebx - 430: 5e pop %esi - 431: 5f pop %edi - 432: 5d pop %ebp - 433: c3 ret - 434: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - neg = 0; - 438: c7 45 bc 00 00 00 00 movl $0x0,-0x44(%ebp) - 43f: eb 87 jmp 3c8 - 441: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 448: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 44f: 90 nop - -00000450 : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void printf(int fd, const char *fmt, ...) { - 450: 55 push %ebp - 451: 89 e5 mov %esp,%ebp - 453: 57 push %edi - 454: 56 push %esi - 455: 53 push %ebx - 456: 83 ec 2c sub $0x2c,%esp - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for (i = 0; fmt[i]; i++) { - 459: 8b 5d 0c mov 0xc(%ebp),%ebx -void printf(int fd, const char *fmt, ...) { - 45c: 8b 75 08 mov 0x8(%ebp),%esi - for (i = 0; fmt[i]; i++) { - 45f: 0f b6 13 movzbl (%ebx),%edx - 462: 84 d2 test %dl,%dl - 464: 74 6a je 4d0 - ap = (uint*)(void*)&fmt + 1; - 466: 8d 45 10 lea 0x10(%ebp),%eax - 469: 83 c3 01 add $0x1,%ebx - write(fd, &c, 1); - 46c: 8d 7d e7 lea -0x19(%ebp),%edi - state = 0; - 46f: 31 c9 xor %ecx,%ecx - ap = (uint*)(void*)&fmt + 1; - 471: 89 45 d0 mov %eax,-0x30(%ebp) - 474: eb 36 jmp 4ac - 476: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 47d: 8d 76 00 lea 0x0(%esi),%esi - 480: 89 4d d4 mov %ecx,-0x2c(%ebp) - c = fmt[i] & 0xff; - if (state == 0) { - if (c == '%') { - state = '%'; - 483: b9 25 00 00 00 mov $0x25,%ecx - if (c == '%') { - 488: 83 f8 25 cmp $0x25,%eax - 48b: 74 15 je 4a2 - write(fd, &c, 1); - 48d: 83 ec 04 sub $0x4,%esp - 490: 88 55 e7 mov %dl,-0x19(%ebp) - 493: 6a 01 push $0x1 - 495: 57 push %edi - 496: 56 push %esi - 497: e8 b7 fe ff ff call 353 - 49c: 8b 4d d4 mov -0x2c(%ebp),%ecx - } - else { - putc(fd, c); - 49f: 83 c4 10 add $0x10,%esp - for (i = 0; fmt[i]; i++) { - 4a2: 0f b6 13 movzbl (%ebx),%edx - 4a5: 83 c3 01 add $0x1,%ebx - 4a8: 84 d2 test %dl,%dl - 4aa: 74 24 je 4d0 - c = fmt[i] & 0xff; - 4ac: 0f b6 c2 movzbl %dl,%eax - if (state == 0) { - 4af: 85 c9 test %ecx,%ecx - 4b1: 74 cd je 480 - } - } - else if (state == '%') { - 4b3: 83 f9 25 cmp $0x25,%ecx - 4b6: 75 ea jne 4a2 - if (c == 'd') { - 4b8: 83 f8 25 cmp $0x25,%eax - 4bb: 0f 84 07 01 00 00 je 5c8 - 4c1: 83 e8 63 sub $0x63,%eax - 4c4: 83 f8 15 cmp $0x15,%eax - 4c7: 77 17 ja 4e0 - 4c9: ff 24 85 a4 07 00 00 jmp *0x7a4(,%eax,4) - putc(fd, c); - } - state = 0; - } - } -} - 4d0: 8d 65 f4 lea -0xc(%ebp),%esp - 4d3: 5b pop %ebx - 4d4: 5e pop %esi - 4d5: 5f pop %edi - 4d6: 5d pop %ebp - 4d7: c3 ret - 4d8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 4df: 90 nop - write(fd, &c, 1); - 4e0: 83 ec 04 sub $0x4,%esp - 4e3: 88 55 d4 mov %dl,-0x2c(%ebp) - 4e6: 6a 01 push $0x1 - 4e8: 57 push %edi - 4e9: 56 push %esi - 4ea: c6 45 e7 25 movb $0x25,-0x19(%ebp) - 4ee: e8 60 fe ff ff call 353 - putc(fd, c); - 4f3: 0f b6 55 d4 movzbl -0x2c(%ebp),%edx - write(fd, &c, 1); - 4f7: 83 c4 0c add $0xc,%esp - 4fa: 88 55 e7 mov %dl,-0x19(%ebp) - 4fd: 6a 01 push $0x1 - 4ff: 57 push %edi - 500: 56 push %esi - 501: e8 4d fe ff ff call 353 - putc(fd, c); - 506: 83 c4 10 add $0x10,%esp - state = 0; - 509: 31 c9 xor %ecx,%ecx - 50b: eb 95 jmp 4a2 - 50d: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 16, 0); - 510: 83 ec 0c sub $0xc,%esp - 513: b9 10 00 00 00 mov $0x10,%ecx - 518: 6a 00 push $0x0 - 51a: 8b 45 d0 mov -0x30(%ebp),%eax - 51d: 8b 10 mov (%eax),%edx - 51f: 89 f0 mov %esi,%eax - 521: e8 7a fe ff ff call 3a0 - ap++; - 526: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 52a: 83 c4 10 add $0x10,%esp - state = 0; - 52d: 31 c9 xor %ecx,%ecx - 52f: e9 6e ff ff ff jmp 4a2 - 534: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - s = (char*)*ap; - 538: 8b 45 d0 mov -0x30(%ebp),%eax - 53b: 8b 10 mov (%eax),%edx - ap++; - 53d: 83 c0 04 add $0x4,%eax - 540: 89 45 d0 mov %eax,-0x30(%ebp) - if (s == 0) { - 543: 85 d2 test %edx,%edx - 545: 0f 84 8d 00 00 00 je 5d8 - while (*s != 0) { - 54b: 0f b6 02 movzbl (%edx),%eax - state = 0; - 54e: 31 c9 xor %ecx,%ecx - while (*s != 0) { - 550: 84 c0 test %al,%al - 552: 0f 84 4a ff ff ff je 4a2 - 558: 89 5d d4 mov %ebx,-0x2c(%ebp) - 55b: 89 d3 mov %edx,%ebx - 55d: 8d 76 00 lea 0x0(%esi),%esi - write(fd, &c, 1); - 560: 83 ec 04 sub $0x4,%esp - s++; - 563: 83 c3 01 add $0x1,%ebx - 566: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 569: 6a 01 push $0x1 - 56b: 57 push %edi - 56c: 56 push %esi - 56d: e8 e1 fd ff ff call 353 - while (*s != 0) { - 572: 0f b6 03 movzbl (%ebx),%eax - 575: 83 c4 10 add $0x10,%esp - 578: 84 c0 test %al,%al - 57a: 75 e4 jne 560 - state = 0; - 57c: 8b 5d d4 mov -0x2c(%ebp),%ebx - 57f: 31 c9 xor %ecx,%ecx - 581: e9 1c ff ff ff jmp 4a2 - 586: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 58d: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 10, 1); - 590: 83 ec 0c sub $0xc,%esp - 593: b9 0a 00 00 00 mov $0xa,%ecx - 598: 6a 01 push $0x1 - 59a: e9 7b ff ff ff jmp 51a - 59f: 90 nop - putc(fd, *ap); - 5a0: 8b 45 d0 mov -0x30(%ebp),%eax - write(fd, &c, 1); - 5a3: 83 ec 04 sub $0x4,%esp - putc(fd, *ap); - 5a6: 8b 00 mov (%eax),%eax - write(fd, &c, 1); - 5a8: 6a 01 push $0x1 - 5aa: 57 push %edi - 5ab: 56 push %esi - putc(fd, *ap); - 5ac: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 5af: e8 9f fd ff ff call 353 - ap++; - 5b4: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 5b8: 83 c4 10 add $0x10,%esp - state = 0; - 5bb: 31 c9 xor %ecx,%ecx - 5bd: e9 e0 fe ff ff jmp 4a2 - 5c2: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - putc(fd, c); - 5c8: 88 55 e7 mov %dl,-0x19(%ebp) - write(fd, &c, 1); - 5cb: 83 ec 04 sub $0x4,%esp - 5ce: e9 2a ff ff ff jmp 4fd - 5d3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 5d7: 90 nop - s = "(null)"; - 5d8: ba 9c 07 00 00 mov $0x79c,%edx - while (*s != 0) { - 5dd: 89 5d d4 mov %ebx,-0x2c(%ebp) - 5e0: b8 28 00 00 00 mov $0x28,%eax - 5e5: 89 d3 mov %edx,%ebx - 5e7: e9 74 ff ff ff jmp 560 - 5ec: 66 90 xchg %ax,%ax - 5ee: 66 90 xchg %ax,%ax - -000005f0 : -typedef union header Header; - -static Header base; -static Header *freep; - -void free(void *ap) { - 5f0: 55 push %ebp - Header *bp, *p; - - bp = (Header*)ap - 1; - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 5f1: a1 b0 0a 00 00 mov 0xab0,%eax -void free(void *ap) { - 5f6: 89 e5 mov %esp,%ebp - 5f8: 57 push %edi - 5f9: 56 push %esi - 5fa: 53 push %ebx - 5fb: 8b 5d 08 mov 0x8(%ebp),%ebx - bp = (Header*)ap - 1; - 5fe: 8d 4b f8 lea -0x8(%ebx),%ecx - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 601: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 608: 89 c2 mov %eax,%edx - 60a: 8b 00 mov (%eax),%eax - 60c: 39 ca cmp %ecx,%edx - 60e: 73 30 jae 640 - 610: 39 c1 cmp %eax,%ecx - 612: 72 04 jb 618 - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 614: 39 c2 cmp %eax,%edx - 616: 72 f0 jb 608 - break; - } - } - if (bp + bp->s.size == p->s.ptr) { - 618: 8b 73 fc mov -0x4(%ebx),%esi - 61b: 8d 3c f1 lea (%ecx,%esi,8),%edi - 61e: 39 f8 cmp %edi,%eax - 620: 74 30 je 652 - bp->s.size += p->s.ptr->s.size; - bp->s.ptr = p->s.ptr->s.ptr; - 622: 89 43 f8 mov %eax,-0x8(%ebx) - } - else { - bp->s.ptr = p->s.ptr; - } - if (p + p->s.size == bp) { - 625: 8b 42 04 mov 0x4(%edx),%eax - 628: 8d 34 c2 lea (%edx,%eax,8),%esi - 62b: 39 f1 cmp %esi,%ecx - 62d: 74 3a je 669 - p->s.size += bp->s.size; - p->s.ptr = bp->s.ptr; - 62f: 89 0a mov %ecx,(%edx) - } - else { - p->s.ptr = bp; - } - freep = p; -} - 631: 5b pop %ebx - freep = p; - 632: 89 15 b0 0a 00 00 mov %edx,0xab0 -} - 638: 5e pop %esi - 639: 5f pop %edi - 63a: 5d pop %ebp - 63b: c3 ret - 63c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 640: 39 c2 cmp %eax,%edx - 642: 72 c4 jb 608 - 644: 39 c1 cmp %eax,%ecx - 646: 73 c0 jae 608 - if (bp + bp->s.size == p->s.ptr) { - 648: 8b 73 fc mov -0x4(%ebx),%esi - 64b: 8d 3c f1 lea (%ecx,%esi,8),%edi - 64e: 39 f8 cmp %edi,%eax - 650: 75 d0 jne 622 - bp->s.size += p->s.ptr->s.size; - 652: 03 70 04 add 0x4(%eax),%esi - 655: 89 73 fc mov %esi,-0x4(%ebx) - bp->s.ptr = p->s.ptr->s.ptr; - 658: 8b 02 mov (%edx),%eax - 65a: 8b 00 mov (%eax),%eax - 65c: 89 43 f8 mov %eax,-0x8(%ebx) - if (p + p->s.size == bp) { - 65f: 8b 42 04 mov 0x4(%edx),%eax - 662: 8d 34 c2 lea (%edx,%eax,8),%esi - 665: 39 f1 cmp %esi,%ecx - 667: 75 c6 jne 62f - p->s.size += bp->s.size; - 669: 03 43 fc add -0x4(%ebx),%eax - freep = p; - 66c: 89 15 b0 0a 00 00 mov %edx,0xab0 - p->s.size += bp->s.size; - 672: 89 42 04 mov %eax,0x4(%edx) - p->s.ptr = bp->s.ptr; - 675: 8b 4b f8 mov -0x8(%ebx),%ecx - 678: 89 0a mov %ecx,(%edx) -} - 67a: 5b pop %ebx - 67b: 5e pop %esi - 67c: 5f pop %edi - 67d: 5d pop %ebp - 67e: c3 ret - 67f: 90 nop - -00000680 : - hp->s.size = nu; - free((void*)(hp + 1)); - return freep; -} - -void* malloc(uint nbytes) { - 680: 55 push %ebp - 681: 89 e5 mov %esp,%ebp - 683: 57 push %edi - 684: 56 push %esi - 685: 53 push %ebx - 686: 83 ec 1c sub $0x1c,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 689: 8b 45 08 mov 0x8(%ebp),%eax - if ((prevp = freep) == 0) { - 68c: 8b 3d b0 0a 00 00 mov 0xab0,%edi - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 692: 8d 70 07 lea 0x7(%eax),%esi - 695: c1 ee 03 shr $0x3,%esi - 698: 83 c6 01 add $0x1,%esi - if ((prevp = freep) == 0) { - 69b: 85 ff test %edi,%edi - 69d: 0f 84 9d 00 00 00 je 740 - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 6a3: 8b 17 mov (%edi),%edx - if (p->s.size >= nunits) { - 6a5: 8b 4a 04 mov 0x4(%edx),%ecx - 6a8: 39 f1 cmp %esi,%ecx - 6aa: 73 6a jae 716 - 6ac: bb 00 10 00 00 mov $0x1000,%ebx - 6b1: 39 de cmp %ebx,%esi - 6b3: 0f 43 de cmovae %esi,%ebx - p = sbrk(nu * sizeof(Header)); - 6b6: 8d 04 dd 00 00 00 00 lea 0x0(,%ebx,8),%eax - 6bd: 89 45 e4 mov %eax,-0x1c(%ebp) - 6c0: eb 17 jmp 6d9 - 6c2: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 6c8: 8b 02 mov (%edx),%eax - if (p->s.size >= nunits) { - 6ca: 8b 48 04 mov 0x4(%eax),%ecx - 6cd: 39 f1 cmp %esi,%ecx - 6cf: 73 4f jae 720 - p->s.size = nunits; - } - freep = prevp; - return (void*)(p + 1); - } - if (p == freep) { - 6d1: 8b 3d b0 0a 00 00 mov 0xab0,%edi - 6d7: 89 c2 mov %eax,%edx - 6d9: 39 d7 cmp %edx,%edi - 6db: 75 eb jne 6c8 - p = sbrk(nu * sizeof(Header)); - 6dd: 83 ec 0c sub $0xc,%esp - 6e0: ff 75 e4 push -0x1c(%ebp) - 6e3: e8 4b fc ff ff call 333 - if (p == (char*)-1) { - 6e8: 83 c4 10 add $0x10,%esp - 6eb: 83 f8 ff cmp $0xffffffff,%eax - 6ee: 74 1c je 70c - hp->s.size = nu; - 6f0: 89 58 04 mov %ebx,0x4(%eax) - free((void*)(hp + 1)); - 6f3: 83 ec 0c sub $0xc,%esp - 6f6: 83 c0 08 add $0x8,%eax - 6f9: 50 push %eax - 6fa: e8 f1 fe ff ff call 5f0 - return freep; - 6ff: 8b 15 b0 0a 00 00 mov 0xab0,%edx - if ((p = morecore(nunits)) == 0) { - 705: 83 c4 10 add $0x10,%esp - 708: 85 d2 test %edx,%edx - 70a: 75 bc jne 6c8 - return 0; - } - } - } -} - 70c: 8d 65 f4 lea -0xc(%ebp),%esp - return 0; - 70f: 31 c0 xor %eax,%eax -} - 711: 5b pop %ebx - 712: 5e pop %esi - 713: 5f pop %edi - 714: 5d pop %ebp - 715: c3 ret - if (p->s.size >= nunits) { - 716: 89 d0 mov %edx,%eax - 718: 89 fa mov %edi,%edx - 71a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - if (p->s.size == nunits) { - 720: 39 ce cmp %ecx,%esi - 722: 74 4c je 770 - p->s.size -= nunits; - 724: 29 f1 sub %esi,%ecx - 726: 89 48 04 mov %ecx,0x4(%eax) - p += p->s.size; - 729: 8d 04 c8 lea (%eax,%ecx,8),%eax - p->s.size = nunits; - 72c: 89 70 04 mov %esi,0x4(%eax) - freep = prevp; - 72f: 89 15 b0 0a 00 00 mov %edx,0xab0 -} - 735: 8d 65 f4 lea -0xc(%ebp),%esp - return (void*)(p + 1); - 738: 83 c0 08 add $0x8,%eax -} - 73b: 5b pop %ebx - 73c: 5e pop %esi - 73d: 5f pop %edi - 73e: 5d pop %ebp - 73f: c3 ret - base.s.ptr = freep = prevp = &base; - 740: c7 05 b0 0a 00 00 b4 movl $0xab4,0xab0 - 747: 0a 00 00 - base.s.size = 0; - 74a: bf b4 0a 00 00 mov $0xab4,%edi - base.s.ptr = freep = prevp = &base; - 74f: c7 05 b4 0a 00 00 b4 movl $0xab4,0xab4 - 756: 0a 00 00 - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 759: 89 fa mov %edi,%edx - base.s.size = 0; - 75b: c7 05 b8 0a 00 00 00 movl $0x0,0xab8 - 762: 00 00 00 - if (p->s.size >= nunits) { - 765: e9 42 ff ff ff jmp 6ac - 76a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - prevp->s.ptr = p->s.ptr; - 770: 8b 08 mov (%eax),%ecx - 772: 89 0a mov %ecx,(%edx) - 774: eb b9 jmp 72f diff --git a/shutdown.d b/shutdown.d deleted file mode 100644 index a21cde4..0000000 --- a/shutdown.d +++ /dev/null @@ -1 +0,0 @@ -shutdown.o: shutdown.c /usr/include/stdc-predef.h types.h user.h diff --git a/shutdown.o b/shutdown.o deleted file mode 100644 index 9cdb23ec8e9c1ffe4169342aba63fc14de424f56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3692 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 diff --git a/spinlock.d b/spinlock.d deleted file mode 100644 index 9f70952..0000000 --- a/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/spinlock.o b/spinlock.o deleted file mode 100644 index 432e5bca406862caf52dfd331fe8988f59952ddf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10580 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 diff --git a/stressfs.asm b/stressfs.asm deleted file mode 100644 index 82e475b..0000000 --- a/stressfs.asm +++ /dev/null @@ -1,1276 +0,0 @@ - -_stressfs: file format elf32-i386 - - -Disassembly of section .text: - -00000000
    : -#include "stat.h" -#include "user.h" -#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 - int fd, i; - char path[] = "stressfs0"; - 7: b8 30 00 00 00 mov $0x30,%eax -int main(int argc, char *argv[]) { - c: ff 71 fc push -0x4(%ecx) - f: 55 push %ebp - 10: 89 e5 mov %esp,%ebp - 12: 57 push %edi - 13: 56 push %esi - char data[512]; - - printf(1, "stressfs starting\n"); - memset(data, 'a', sizeof(data)); - 14: 8d b5 e8 fd ff ff lea -0x218(%ebp),%esi -int main(int argc, char *argv[]) { - 1a: 53 push %ebx - - for (i = 0; i < 4; i++) { - 1b: 31 db xor %ebx,%ebx -int main(int argc, char *argv[]) { - 1d: 51 push %ecx - 1e: 81 ec 20 02 00 00 sub $0x220,%esp - char path[] = "stressfs0"; - 24: 66 89 85 e6 fd ff ff mov %ax,-0x21a(%ebp) - printf(1, "stressfs starting\n"); - 2b: 68 28 08 00 00 push $0x828 - 30: 6a 01 push $0x1 - char path[] = "stressfs0"; - 32: c7 85 de fd ff ff 73 movl $0x65727473,-0x222(%ebp) - 39: 74 72 65 - 3c: c7 85 e2 fd ff ff 73 movl $0x73667373,-0x21e(%ebp) - 43: 73 66 73 - printf(1, "stressfs starting\n"); - 46: e8 b5 04 00 00 call 500 - memset(data, 'a', sizeof(data)); - 4b: 83 c4 0c add $0xc,%esp - 4e: 68 00 02 00 00 push $0x200 - 53: 6a 61 push $0x61 - 55: 56 push %esi - 56: e8 a5 01 00 00 call 200 - 5b: 83 c4 10 add $0x10,%esp - if (fork() > 0) { - 5e: e8 28 03 00 00 call 38b - 63: 85 c0 test %eax,%eax - 65: 0f 8f bf 00 00 00 jg 12a - for (i = 0; i < 4; i++) { - 6b: 83 c3 01 add $0x1,%ebx - 6e: 83 fb 04 cmp $0x4,%ebx - 71: 75 eb jne 5e - 73: bf 04 00 00 00 mov $0x4,%edi - break; - } - } - - printf(1, "write %d\n", i); - 78: 83 ec 04 sub $0x4,%esp - 7b: 53 push %ebx - - path[8] += i; - fd = open(path, O_CREATE | O_RDWR); - 7c: bb 14 00 00 00 mov $0x14,%ebx - printf(1, "write %d\n", i); - 81: 68 3b 08 00 00 push $0x83b - 86: 6a 01 push $0x1 - 88: e8 73 04 00 00 call 500 - path[8] += i; - 8d: 89 f8 mov %edi,%eax - fd = open(path, O_CREATE | O_RDWR); - 8f: 5f pop %edi - path[8] += i; - 90: 00 85 e6 fd ff ff add %al,-0x21a(%ebp) - fd = open(path, O_CREATE | O_RDWR); - 96: 58 pop %eax - 97: 8d 85 de fd ff ff lea -0x222(%ebp),%eax - 9d: 68 02 02 00 00 push $0x202 - a2: 50 push %eax - a3: e8 53 03 00 00 call 3fb - a8: 83 c4 10 add $0x10,%esp - ab: 89 c7 mov %eax,%edi - for (i = 0; i < 20; i++) { - ad: 8d 76 00 lea 0x0(%esi),%esi -// printf(fd, "%d\n", i); - write(fd, data, sizeof(data)); - b0: 83 ec 04 sub $0x4,%esp - b3: 68 00 02 00 00 push $0x200 - b8: 56 push %esi - b9: 57 push %edi - ba: e8 44 03 00 00 call 403 - for (i = 0; i < 20; i++) { - bf: 83 c4 10 add $0x10,%esp - c2: 83 eb 01 sub $0x1,%ebx - c5: 75 e9 jne b0 - } - close(fd); - c7: 83 ec 0c sub $0xc,%esp - ca: 57 push %edi - cb: e8 5b 03 00 00 call 42b - - printf(1, "read\n"); - d0: 58 pop %eax - d1: 5a pop %edx - d2: 68 45 08 00 00 push $0x845 - d7: 6a 01 push $0x1 - d9: e8 22 04 00 00 call 500 - - fd = open(path, O_RDONLY); - de: 8d 85 de fd ff ff lea -0x222(%ebp),%eax - e4: 59 pop %ecx - e5: 5b pop %ebx - e6: 6a 00 push $0x0 - e8: bb 14 00 00 00 mov $0x14,%ebx - ed: 50 push %eax - ee: e8 08 03 00 00 call 3fb - f3: 83 c4 10 add $0x10,%esp - f6: 89 c7 mov %eax,%edi - for (i = 0; i < 20; i++) { - f8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - ff: 90 nop - read(fd, data, sizeof(data)); - 100: 83 ec 04 sub $0x4,%esp - 103: 68 00 02 00 00 push $0x200 - 108: 56 push %esi - 109: 57 push %edi - 10a: e8 9c 02 00 00 call 3ab - for (i = 0; i < 20; i++) { - 10f: 83 c4 10 add $0x10,%esp - 112: 83 eb 01 sub $0x1,%ebx - 115: 75 e9 jne 100 - } - close(fd); - 117: 83 ec 0c sub $0xc,%esp - 11a: 57 push %edi - 11b: e8 0b 03 00 00 call 42b - - wait(); - 120: e8 76 02 00 00 call 39b - - exit(); - 125: e8 69 02 00 00 call 393 - path[8] += i; - 12a: 89 df mov %ebx,%edi - 12c: e9 47 ff ff ff jmp 78 - 131: 66 90 xchg %ax,%ax - 133: 66 90 xchg %ax,%ax - 135: 66 90 xchg %ax,%ax - 137: 66 90 xchg %ax,%ax - 139: 66 90 xchg %ax,%ax - 13b: 66 90 xchg %ax,%ax - 13d: 66 90 xchg %ax,%ax - 13f: 90 nop - -00000140 : -#include "stat.h" -#include "fcntl.h" -#include "user.h" -#include "x86.h" - -char*strcpy(char *s, const char *t) { - 140: 55 push %ebp - char *os; - - os = s; - while ((*s++ = *t++) != 0) { - 141: 31 c0 xor %eax,%eax -char*strcpy(char *s, const char *t) { - 143: 89 e5 mov %esp,%ebp - 145: 53 push %ebx - 146: 8b 4d 08 mov 0x8(%ebp),%ecx - 149: 8b 5d 0c mov 0xc(%ebp),%ebx - 14c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - while ((*s++ = *t++) != 0) { - 150: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 154: 88 14 01 mov %dl,(%ecx,%eax,1) - 157: 83 c0 01 add $0x1,%eax - 15a: 84 d2 test %dl,%dl - 15c: 75 f2 jne 150 - ; - } - return os; -} - 15e: 8b 5d fc mov -0x4(%ebp),%ebx - 161: 89 c8 mov %ecx,%eax - 163: c9 leave - 164: c3 ret - 165: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 16c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000170 : - -int strcmp(const char *p, const char *q) { - 170: 55 push %ebp - 171: 89 e5 mov %esp,%ebp - 173: 53 push %ebx - 174: 8b 55 08 mov 0x8(%ebp),%edx - 177: 8b 4d 0c mov 0xc(%ebp),%ecx - while (*p && *p == *q) { - 17a: 0f b6 02 movzbl (%edx),%eax - 17d: 84 c0 test %al,%al - 17f: 75 17 jne 198 - 181: eb 3a jmp 1bd - 183: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 187: 90 nop - 188: 0f b6 42 01 movzbl 0x1(%edx),%eax - p++, q++; - 18c: 83 c2 01 add $0x1,%edx - 18f: 8d 59 01 lea 0x1(%ecx),%ebx - while (*p && *p == *q) { - 192: 84 c0 test %al,%al - 194: 74 1a je 1b0 - p++, q++; - 196: 89 d9 mov %ebx,%ecx - while (*p && *p == *q) { - 198: 0f b6 19 movzbl (%ecx),%ebx - 19b: 38 c3 cmp %al,%bl - 19d: 74 e9 je 188 - } - return (uchar) * p - (uchar) * q; - 19f: 29 d8 sub %ebx,%eax -} - 1a1: 8b 5d fc mov -0x4(%ebp),%ebx - 1a4: c9 leave - 1a5: c3 ret - 1a6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 1ad: 8d 76 00 lea 0x0(%esi),%esi - return (uchar) * p - (uchar) * q; - 1b0: 0f b6 59 01 movzbl 0x1(%ecx),%ebx - 1b4: 31 c0 xor %eax,%eax - 1b6: 29 d8 sub %ebx,%eax -} - 1b8: 8b 5d fc mov -0x4(%ebp),%ebx - 1bb: c9 leave - 1bc: c3 ret - return (uchar) * p - (uchar) * q; - 1bd: 0f b6 19 movzbl (%ecx),%ebx - 1c0: 31 c0 xor %eax,%eax - 1c2: eb db jmp 19f - 1c4: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 1cb: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 1cf: 90 nop - -000001d0 : - -uint strlen(const char *s) { - 1d0: 55 push %ebp - 1d1: 89 e5 mov %esp,%ebp - 1d3: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - for (n = 0; s[n]; n++) { - 1d6: 80 3a 00 cmpb $0x0,(%edx) - 1d9: 74 15 je 1f0 - 1db: 31 c0 xor %eax,%eax - 1dd: 8d 76 00 lea 0x0(%esi),%esi - 1e0: 83 c0 01 add $0x1,%eax - 1e3: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - 1e7: 89 c1 mov %eax,%ecx - 1e9: 75 f5 jne 1e0 - ; - } - return n; -} - 1eb: 89 c8 mov %ecx,%eax - 1ed: 5d pop %ebp - 1ee: c3 ret - 1ef: 90 nop - for (n = 0; s[n]; n++) { - 1f0: 31 c9 xor %ecx,%ecx -} - 1f2: 5d pop %ebp - 1f3: 89 c8 mov %ecx,%eax - 1f5: c3 ret - 1f6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 1fd: 8d 76 00 lea 0x0(%esi),%esi - -00000200 : - -void* memset(void *dst, int c, uint n) { - 200: 55 push %ebp - 201: 89 e5 mov %esp,%ebp - 203: 57 push %edi - 204: 8b 55 08 mov 0x8(%ebp),%edx - "d" (port), "0" (addr), "1" (cnt) : - "cc"); -} - -static inline void stosb(void *addr, int data, int cnt) { - asm volatile ("cld; rep stosb" : - 207: 8b 4d 10 mov 0x10(%ebp),%ecx - 20a: 8b 45 0c mov 0xc(%ebp),%eax - 20d: 89 d7 mov %edx,%edi - 20f: fc cld - 210: f3 aa rep stos %al,%es:(%edi) - stosb(dst, c, n); - return dst; -} - 212: 8b 7d fc mov -0x4(%ebp),%edi - 215: 89 d0 mov %edx,%eax - 217: c9 leave - 218: c3 ret - 219: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -00000220 : - -char* strchr(const char *s, char c) { - 220: 55 push %ebp - 221: 89 e5 mov %esp,%ebp - 223: 8b 45 08 mov 0x8(%ebp),%eax - 226: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx - for (; *s; s++) { - 22a: 0f b6 10 movzbl (%eax),%edx - 22d: 84 d2 test %dl,%dl - 22f: 75 12 jne 243 - 231: eb 1d jmp 250 - 233: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 237: 90 nop - 238: 0f b6 50 01 movzbl 0x1(%eax),%edx - 23c: 83 c0 01 add $0x1,%eax - 23f: 84 d2 test %dl,%dl - 241: 74 0d je 250 - if (*s == c) { - 243: 38 d1 cmp %dl,%cl - 245: 75 f1 jne 238 - return (char*)s; - } - } - return 0; -} - 247: 5d pop %ebp - 248: c3 ret - 249: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - return 0; - 250: 31 c0 xor %eax,%eax -} - 252: 5d pop %ebp - 253: c3 ret - 254: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 25b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 25f: 90 nop - -00000260 : - -char* gets(char *buf, int max) { - 260: 55 push %ebp - 261: 89 e5 mov %esp,%ebp - 263: 57 push %edi - 264: 56 push %esi - int i, cc; - char c; - - for (i = 0; i + 1 < max;) { - cc = read(0, &c, 1); - 265: 8d 7d e7 lea -0x19(%ebp),%edi -char* gets(char *buf, int max) { - 268: 53 push %ebx - for (i = 0; i + 1 < max;) { - 269: 31 db xor %ebx,%ebx -char* gets(char *buf, int max) { - 26b: 83 ec 1c sub $0x1c,%esp - for (i = 0; i + 1 < max;) { - 26e: eb 27 jmp 297 - cc = read(0, &c, 1); - 270: 83 ec 04 sub $0x4,%esp - 273: 6a 01 push $0x1 - 275: 57 push %edi - 276: 6a 00 push $0x0 - 278: e8 2e 01 00 00 call 3ab - if (cc < 1) { - 27d: 83 c4 10 add $0x10,%esp - 280: 85 c0 test %eax,%eax - 282: 7e 1d jle 2a1 - break; - } - buf[i++] = c; - 284: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 288: 8b 55 08 mov 0x8(%ebp),%edx - 28b: 88 44 1a ff mov %al,-0x1(%edx,%ebx,1) - if (c == '\n' || c == '\r') { - 28f: 3c 0a cmp $0xa,%al - 291: 74 1d je 2b0 - 293: 3c 0d cmp $0xd,%al - 295: 74 19 je 2b0 - for (i = 0; i + 1 < max;) { - 297: 89 de mov %ebx,%esi - 299: 83 c3 01 add $0x1,%ebx - 29c: 3b 5d 0c cmp 0xc(%ebp),%ebx - 29f: 7c cf jl 270 - break; - } - } - buf[i] = '\0'; - 2a1: 8b 45 08 mov 0x8(%ebp),%eax - 2a4: c6 04 30 00 movb $0x0,(%eax,%esi,1) - return buf; -} - 2a8: 8d 65 f4 lea -0xc(%ebp),%esp - 2ab: 5b pop %ebx - 2ac: 5e pop %esi - 2ad: 5f pop %edi - 2ae: 5d pop %ebp - 2af: c3 ret - buf[i] = '\0'; - 2b0: 8b 45 08 mov 0x8(%ebp),%eax - 2b3: 89 de mov %ebx,%esi - 2b5: c6 04 30 00 movb $0x0,(%eax,%esi,1) -} - 2b9: 8d 65 f4 lea -0xc(%ebp),%esp - 2bc: 5b pop %ebx - 2bd: 5e pop %esi - 2be: 5f pop %edi - 2bf: 5d pop %ebp - 2c0: c3 ret - 2c1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 2c8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 2cf: 90 nop - -000002d0 : - -int stat(const char *n, struct stat *st) { - 2d0: 55 push %ebp - 2d1: 89 e5 mov %esp,%ebp - 2d3: 56 push %esi - 2d4: 53 push %ebx - int fd; - int r; - - fd = open(n, O_RDONLY); - 2d5: 83 ec 08 sub $0x8,%esp - 2d8: 6a 00 push $0x0 - 2da: ff 75 08 push 0x8(%ebp) - 2dd: e8 19 01 00 00 call 3fb - if (fd < 0) { - 2e2: 83 c4 10 add $0x10,%esp - 2e5: 85 c0 test %eax,%eax - 2e7: 78 27 js 310 - return -1; - } - r = fstat(fd, st); - 2e9: 83 ec 08 sub $0x8,%esp - 2ec: ff 75 0c push 0xc(%ebp) - 2ef: 89 c3 mov %eax,%ebx - 2f1: 50 push %eax - 2f2: e8 cc 00 00 00 call 3c3 - close(fd); - 2f7: 89 1c 24 mov %ebx,(%esp) - r = fstat(fd, st); - 2fa: 89 c6 mov %eax,%esi - close(fd); - 2fc: e8 2a 01 00 00 call 42b - return r; - 301: 83 c4 10 add $0x10,%esp -} - 304: 8d 65 f8 lea -0x8(%ebp),%esp - 307: 89 f0 mov %esi,%eax - 309: 5b pop %ebx - 30a: 5e pop %esi - 30b: 5d pop %ebp - 30c: c3 ret - 30d: 8d 76 00 lea 0x0(%esi),%esi - return -1; - 310: be ff ff ff ff mov $0xffffffff,%esi - 315: eb ed jmp 304 - 317: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 31e: 66 90 xchg %ax,%ax - -00000320 : - -int atoi(const char *s) { - 320: 55 push %ebp - 321: 89 e5 mov %esp,%ebp - 323: 53 push %ebx - 324: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - n = 0; - while ('0' <= *s && *s <= '9') { - 327: 0f be 02 movsbl (%edx),%eax - 32a: 8d 48 d0 lea -0x30(%eax),%ecx - 32d: 80 f9 09 cmp $0x9,%cl - n = 0; - 330: b9 00 00 00 00 mov $0x0,%ecx - while ('0' <= *s && *s <= '9') { - 335: 77 1e ja 355 - 337: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 33e: 66 90 xchg %ax,%ax - n = n * 10 + *s++ - '0'; - 340: 83 c2 01 add $0x1,%edx - 343: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 346: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx - while ('0' <= *s && *s <= '9') { - 34a: 0f be 02 movsbl (%edx),%eax - 34d: 8d 58 d0 lea -0x30(%eax),%ebx - 350: 80 fb 09 cmp $0x9,%bl - 353: 76 eb jbe 340 - } - return n; -} - 355: 8b 5d fc mov -0x4(%ebp),%ebx - 358: 89 c8 mov %ecx,%eax - 35a: c9 leave - 35b: c3 ret - 35c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000360 : - -void* memmove(void *vdst, const void *vsrc, int n) { - 360: 55 push %ebp - 361: 89 e5 mov %esp,%ebp - 363: 57 push %edi - 364: 8b 45 10 mov 0x10(%ebp),%eax - 367: 8b 55 08 mov 0x8(%ebp),%edx - 36a: 56 push %esi - 36b: 8b 75 0c mov 0xc(%ebp),%esi - char *dst; - const char *src; - - dst = vdst; - src = vsrc; - while (n-- > 0) { - 36e: 85 c0 test %eax,%eax - 370: 7e 13 jle 385 - 372: 01 d0 add %edx,%eax - dst = vdst; - 374: 89 d7 mov %edx,%edi - 376: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 37d: 8d 76 00 lea 0x0(%esi),%esi - *dst++ = *src++; - 380: a4 movsb %ds:(%esi),%es:(%edi) - while (n-- > 0) { - 381: 39 f8 cmp %edi,%eax - 383: 75 fb jne 380 - } - return vdst; -} - 385: 5e pop %esi - 386: 89 d0 mov %edx,%eax - 388: 5f pop %edi - 389: 5d pop %ebp - 38a: c3 ret - -0000038b : -name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 38b: b8 01 00 00 00 mov $0x1,%eax - 390: cd 40 int $0x40 - 392: c3 ret - -00000393 : -SYSCALL(exit) - 393: b8 02 00 00 00 mov $0x2,%eax - 398: cd 40 int $0x40 - 39a: c3 ret - -0000039b : -SYSCALL(wait) - 39b: b8 03 00 00 00 mov $0x3,%eax - 3a0: cd 40 int $0x40 - 3a2: c3 ret - -000003a3 : -SYSCALL(pipe) - 3a3: b8 04 00 00 00 mov $0x4,%eax - 3a8: cd 40 int $0x40 - 3aa: c3 ret - -000003ab : -SYSCALL(read) - 3ab: b8 05 00 00 00 mov $0x5,%eax - 3b0: cd 40 int $0x40 - 3b2: c3 ret - -000003b3 : -SYSCALL(kill) - 3b3: b8 06 00 00 00 mov $0x6,%eax - 3b8: cd 40 int $0x40 - 3ba: c3 ret - -000003bb : -SYSCALL(exec) - 3bb: b8 07 00 00 00 mov $0x7,%eax - 3c0: cd 40 int $0x40 - 3c2: c3 ret - -000003c3 : -SYSCALL(fstat) - 3c3: b8 08 00 00 00 mov $0x8,%eax - 3c8: cd 40 int $0x40 - 3ca: c3 ret - -000003cb : -SYSCALL(chdir) - 3cb: b8 09 00 00 00 mov $0x9,%eax - 3d0: cd 40 int $0x40 - 3d2: c3 ret - -000003d3 : -SYSCALL(dup) - 3d3: b8 0a 00 00 00 mov $0xa,%eax - 3d8: cd 40 int $0x40 - 3da: c3 ret - -000003db : -SYSCALL(getpid) - 3db: b8 0b 00 00 00 mov $0xb,%eax - 3e0: cd 40 int $0x40 - 3e2: c3 ret - -000003e3 : -SYSCALL(sbrk) - 3e3: b8 0c 00 00 00 mov $0xc,%eax - 3e8: cd 40 int $0x40 - 3ea: c3 ret - -000003eb : -SYSCALL(sleep) - 3eb: b8 0d 00 00 00 mov $0xd,%eax - 3f0: cd 40 int $0x40 - 3f2: c3 ret - -000003f3 : -SYSCALL(uptime) - 3f3: b8 0e 00 00 00 mov $0xe,%eax - 3f8: cd 40 int $0x40 - 3fa: c3 ret - -000003fb : -SYSCALL(open) - 3fb: b8 0f 00 00 00 mov $0xf,%eax - 400: cd 40 int $0x40 - 402: c3 ret - -00000403 : -SYSCALL(write) - 403: b8 10 00 00 00 mov $0x10,%eax - 408: cd 40 int $0x40 - 40a: c3 ret - -0000040b : -SYSCALL(mknod) - 40b: b8 11 00 00 00 mov $0x11,%eax - 410: cd 40 int $0x40 - 412: c3 ret - -00000413 : -SYSCALL(unlink) - 413: b8 12 00 00 00 mov $0x12,%eax - 418: cd 40 int $0x40 - 41a: c3 ret - -0000041b : -SYSCALL(link) - 41b: b8 13 00 00 00 mov $0x13,%eax - 420: cd 40 int $0x40 - 422: c3 ret - -00000423 : -SYSCALL(mkdir) - 423: b8 14 00 00 00 mov $0x14,%eax - 428: cd 40 int $0x40 - 42a: c3 ret - -0000042b : -SYSCALL(close) - 42b: b8 15 00 00 00 mov $0x15,%eax - 430: cd 40 int $0x40 - 432: c3 ret - -00000433 : -SYSCALL(getch) - 433: b8 16 00 00 00 mov $0x16,%eax - 438: cd 40 int $0x40 - 43a: c3 ret - -0000043b : -SYSCALL(greeting) - 43b: b8 17 00 00 00 mov $0x17,%eax - 440: cd 40 int $0x40 - 442: c3 ret - -00000443 : -SYSCALL(shutdown) - 443: b8 18 00 00 00 mov $0x18,%eax - 448: cd 40 int $0x40 - 44a: c3 ret - 44b: 66 90 xchg %ax,%ax - 44d: 66 90 xchg %ax,%ax - 44f: 90 nop - -00000450 : - -static void putc(int fd, char c) { - write(fd, &c, 1); -} - -static void printint(int fd, int xx, int base, int sgn) { - 450: 55 push %ebp - 451: 89 e5 mov %esp,%ebp - 453: 57 push %edi - 454: 56 push %esi - 455: 53 push %ebx - 456: 83 ec 3c sub $0x3c,%esp - 459: 89 4d c4 mov %ecx,-0x3c(%ebp) - uint x; - - neg = 0; - if (sgn && xx < 0) { - neg = 1; - x = -xx; - 45c: 89 d1 mov %edx,%ecx -static void printint(int fd, int xx, int base, int sgn) { - 45e: 89 45 b8 mov %eax,-0x48(%ebp) - if (sgn && xx < 0) { - 461: 85 d2 test %edx,%edx - 463: 0f 89 7f 00 00 00 jns 4e8 - 469: f6 45 08 01 testb $0x1,0x8(%ebp) - 46d: 74 79 je 4e8 - neg = 1; - 46f: c7 45 bc 01 00 00 00 movl $0x1,-0x44(%ebp) - x = -xx; - 476: f7 d9 neg %ecx - } - else { - x = xx; - } - - i = 0; - 478: 31 db xor %ebx,%ebx - 47a: 8d 75 d7 lea -0x29(%ebp),%esi - 47d: 8d 76 00 lea 0x0(%esi),%esi - do { - buf[i++] = digits[x % base]; - 480: 89 c8 mov %ecx,%eax - 482: 31 d2 xor %edx,%edx - 484: 89 cf mov %ecx,%edi - 486: f7 75 c4 divl -0x3c(%ebp) - 489: 0f b6 92 ac 08 00 00 movzbl 0x8ac(%edx),%edx - 490: 89 45 c0 mov %eax,-0x40(%ebp) - 493: 89 d8 mov %ebx,%eax - 495: 8d 5b 01 lea 0x1(%ebx),%ebx - } - while ((x /= base) != 0); - 498: 8b 4d c0 mov -0x40(%ebp),%ecx - buf[i++] = digits[x % base]; - 49b: 88 14 1e mov %dl,(%esi,%ebx,1) - while ((x /= base) != 0); - 49e: 39 7d c4 cmp %edi,-0x3c(%ebp) - 4a1: 76 dd jbe 480 - if (neg) { - 4a3: 8b 4d bc mov -0x44(%ebp),%ecx - 4a6: 85 c9 test %ecx,%ecx - 4a8: 74 0c je 4b6 - buf[i++] = '-'; - 4aa: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) - buf[i++] = digits[x % base]; - 4af: 89 d8 mov %ebx,%eax - buf[i++] = '-'; - 4b1: ba 2d 00 00 00 mov $0x2d,%edx - } - - while (--i >= 0) { - 4b6: 8b 7d b8 mov -0x48(%ebp),%edi - 4b9: 8d 5c 05 d7 lea -0x29(%ebp,%eax,1),%ebx - 4bd: eb 07 jmp 4c6 - 4bf: 90 nop - putc(fd, buf[i]); - 4c0: 0f b6 13 movzbl (%ebx),%edx - 4c3: 83 eb 01 sub $0x1,%ebx - write(fd, &c, 1); - 4c6: 83 ec 04 sub $0x4,%esp - 4c9: 88 55 d7 mov %dl,-0x29(%ebp) - 4cc: 6a 01 push $0x1 - 4ce: 56 push %esi - 4cf: 57 push %edi - 4d0: e8 2e ff ff ff call 403 - while (--i >= 0) { - 4d5: 83 c4 10 add $0x10,%esp - 4d8: 39 de cmp %ebx,%esi - 4da: 75 e4 jne 4c0 - } -} - 4dc: 8d 65 f4 lea -0xc(%ebp),%esp - 4df: 5b pop %ebx - 4e0: 5e pop %esi - 4e1: 5f pop %edi - 4e2: 5d pop %ebp - 4e3: c3 ret - 4e4: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - neg = 0; - 4e8: c7 45 bc 00 00 00 00 movl $0x0,-0x44(%ebp) - 4ef: eb 87 jmp 478 - 4f1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 4f8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 4ff: 90 nop - -00000500 : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void printf(int fd, const char *fmt, ...) { - 500: 55 push %ebp - 501: 89 e5 mov %esp,%ebp - 503: 57 push %edi - 504: 56 push %esi - 505: 53 push %ebx - 506: 83 ec 2c sub $0x2c,%esp - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for (i = 0; fmt[i]; i++) { - 509: 8b 5d 0c mov 0xc(%ebp),%ebx -void printf(int fd, const char *fmt, ...) { - 50c: 8b 75 08 mov 0x8(%ebp),%esi - for (i = 0; fmt[i]; i++) { - 50f: 0f b6 13 movzbl (%ebx),%edx - 512: 84 d2 test %dl,%dl - 514: 74 6a je 580 - ap = (uint*)(void*)&fmt + 1; - 516: 8d 45 10 lea 0x10(%ebp),%eax - 519: 83 c3 01 add $0x1,%ebx - write(fd, &c, 1); - 51c: 8d 7d e7 lea -0x19(%ebp),%edi - state = 0; - 51f: 31 c9 xor %ecx,%ecx - ap = (uint*)(void*)&fmt + 1; - 521: 89 45 d0 mov %eax,-0x30(%ebp) - 524: eb 36 jmp 55c - 526: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 52d: 8d 76 00 lea 0x0(%esi),%esi - 530: 89 4d d4 mov %ecx,-0x2c(%ebp) - c = fmt[i] & 0xff; - if (state == 0) { - if (c == '%') { - state = '%'; - 533: b9 25 00 00 00 mov $0x25,%ecx - if (c == '%') { - 538: 83 f8 25 cmp $0x25,%eax - 53b: 74 15 je 552 - write(fd, &c, 1); - 53d: 83 ec 04 sub $0x4,%esp - 540: 88 55 e7 mov %dl,-0x19(%ebp) - 543: 6a 01 push $0x1 - 545: 57 push %edi - 546: 56 push %esi - 547: e8 b7 fe ff ff call 403 - 54c: 8b 4d d4 mov -0x2c(%ebp),%ecx - } - else { - putc(fd, c); - 54f: 83 c4 10 add $0x10,%esp - for (i = 0; fmt[i]; i++) { - 552: 0f b6 13 movzbl (%ebx),%edx - 555: 83 c3 01 add $0x1,%ebx - 558: 84 d2 test %dl,%dl - 55a: 74 24 je 580 - c = fmt[i] & 0xff; - 55c: 0f b6 c2 movzbl %dl,%eax - if (state == 0) { - 55f: 85 c9 test %ecx,%ecx - 561: 74 cd je 530 - } - } - else if (state == '%') { - 563: 83 f9 25 cmp $0x25,%ecx - 566: 75 ea jne 552 - if (c == 'd') { - 568: 83 f8 25 cmp $0x25,%eax - 56b: 0f 84 07 01 00 00 je 678 - 571: 83 e8 63 sub $0x63,%eax - 574: 83 f8 15 cmp $0x15,%eax - 577: 77 17 ja 590 - 579: ff 24 85 54 08 00 00 jmp *0x854(,%eax,4) - putc(fd, c); - } - state = 0; - } - } -} - 580: 8d 65 f4 lea -0xc(%ebp),%esp - 583: 5b pop %ebx - 584: 5e pop %esi - 585: 5f pop %edi - 586: 5d pop %ebp - 587: c3 ret - 588: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 58f: 90 nop - write(fd, &c, 1); - 590: 83 ec 04 sub $0x4,%esp - 593: 88 55 d4 mov %dl,-0x2c(%ebp) - 596: 6a 01 push $0x1 - 598: 57 push %edi - 599: 56 push %esi - 59a: c6 45 e7 25 movb $0x25,-0x19(%ebp) - 59e: e8 60 fe ff ff call 403 - putc(fd, c); - 5a3: 0f b6 55 d4 movzbl -0x2c(%ebp),%edx - write(fd, &c, 1); - 5a7: 83 c4 0c add $0xc,%esp - 5aa: 88 55 e7 mov %dl,-0x19(%ebp) - 5ad: 6a 01 push $0x1 - 5af: 57 push %edi - 5b0: 56 push %esi - 5b1: e8 4d fe ff ff call 403 - putc(fd, c); - 5b6: 83 c4 10 add $0x10,%esp - state = 0; - 5b9: 31 c9 xor %ecx,%ecx - 5bb: eb 95 jmp 552 - 5bd: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 16, 0); - 5c0: 83 ec 0c sub $0xc,%esp - 5c3: b9 10 00 00 00 mov $0x10,%ecx - 5c8: 6a 00 push $0x0 - 5ca: 8b 45 d0 mov -0x30(%ebp),%eax - 5cd: 8b 10 mov (%eax),%edx - 5cf: 89 f0 mov %esi,%eax - 5d1: e8 7a fe ff ff call 450 - ap++; - 5d6: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 5da: 83 c4 10 add $0x10,%esp - state = 0; - 5dd: 31 c9 xor %ecx,%ecx - 5df: e9 6e ff ff ff jmp 552 - 5e4: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - s = (char*)*ap; - 5e8: 8b 45 d0 mov -0x30(%ebp),%eax - 5eb: 8b 10 mov (%eax),%edx - ap++; - 5ed: 83 c0 04 add $0x4,%eax - 5f0: 89 45 d0 mov %eax,-0x30(%ebp) - if (s == 0) { - 5f3: 85 d2 test %edx,%edx - 5f5: 0f 84 8d 00 00 00 je 688 - while (*s != 0) { - 5fb: 0f b6 02 movzbl (%edx),%eax - state = 0; - 5fe: 31 c9 xor %ecx,%ecx - while (*s != 0) { - 600: 84 c0 test %al,%al - 602: 0f 84 4a ff ff ff je 552 - 608: 89 5d d4 mov %ebx,-0x2c(%ebp) - 60b: 89 d3 mov %edx,%ebx - 60d: 8d 76 00 lea 0x0(%esi),%esi - write(fd, &c, 1); - 610: 83 ec 04 sub $0x4,%esp - s++; - 613: 83 c3 01 add $0x1,%ebx - 616: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 619: 6a 01 push $0x1 - 61b: 57 push %edi - 61c: 56 push %esi - 61d: e8 e1 fd ff ff call 403 - while (*s != 0) { - 622: 0f b6 03 movzbl (%ebx),%eax - 625: 83 c4 10 add $0x10,%esp - 628: 84 c0 test %al,%al - 62a: 75 e4 jne 610 - state = 0; - 62c: 8b 5d d4 mov -0x2c(%ebp),%ebx - 62f: 31 c9 xor %ecx,%ecx - 631: e9 1c ff ff ff jmp 552 - 636: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 63d: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 10, 1); - 640: 83 ec 0c sub $0xc,%esp - 643: b9 0a 00 00 00 mov $0xa,%ecx - 648: 6a 01 push $0x1 - 64a: e9 7b ff ff ff jmp 5ca - 64f: 90 nop - putc(fd, *ap); - 650: 8b 45 d0 mov -0x30(%ebp),%eax - write(fd, &c, 1); - 653: 83 ec 04 sub $0x4,%esp - putc(fd, *ap); - 656: 8b 00 mov (%eax),%eax - write(fd, &c, 1); - 658: 6a 01 push $0x1 - 65a: 57 push %edi - 65b: 56 push %esi - putc(fd, *ap); - 65c: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 65f: e8 9f fd ff ff call 403 - ap++; - 664: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 668: 83 c4 10 add $0x10,%esp - state = 0; - 66b: 31 c9 xor %ecx,%ecx - 66d: e9 e0 fe ff ff jmp 552 - 672: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - putc(fd, c); - 678: 88 55 e7 mov %dl,-0x19(%ebp) - write(fd, &c, 1); - 67b: 83 ec 04 sub $0x4,%esp - 67e: e9 2a ff ff ff jmp 5ad - 683: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 687: 90 nop - s = "(null)"; - 688: ba 4b 08 00 00 mov $0x84b,%edx - while (*s != 0) { - 68d: 89 5d d4 mov %ebx,-0x2c(%ebp) - 690: b8 28 00 00 00 mov $0x28,%eax - 695: 89 d3 mov %edx,%ebx - 697: e9 74 ff ff ff jmp 610 - 69c: 66 90 xchg %ax,%ax - 69e: 66 90 xchg %ax,%ax - -000006a0 : -typedef union header Header; - -static Header base; -static Header *freep; - -void free(void *ap) { - 6a0: 55 push %ebp - Header *bp, *p; - - bp = (Header*)ap - 1; - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 6a1: a1 64 0b 00 00 mov 0xb64,%eax -void free(void *ap) { - 6a6: 89 e5 mov %esp,%ebp - 6a8: 57 push %edi - 6a9: 56 push %esi - 6aa: 53 push %ebx - 6ab: 8b 5d 08 mov 0x8(%ebp),%ebx - bp = (Header*)ap - 1; - 6ae: 8d 4b f8 lea -0x8(%ebx),%ecx - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 6b1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 6b8: 89 c2 mov %eax,%edx - 6ba: 8b 00 mov (%eax),%eax - 6bc: 39 ca cmp %ecx,%edx - 6be: 73 30 jae 6f0 - 6c0: 39 c1 cmp %eax,%ecx - 6c2: 72 04 jb 6c8 - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 6c4: 39 c2 cmp %eax,%edx - 6c6: 72 f0 jb 6b8 - break; - } - } - if (bp + bp->s.size == p->s.ptr) { - 6c8: 8b 73 fc mov -0x4(%ebx),%esi - 6cb: 8d 3c f1 lea (%ecx,%esi,8),%edi - 6ce: 39 f8 cmp %edi,%eax - 6d0: 74 30 je 702 - bp->s.size += p->s.ptr->s.size; - bp->s.ptr = p->s.ptr->s.ptr; - 6d2: 89 43 f8 mov %eax,-0x8(%ebx) - } - else { - bp->s.ptr = p->s.ptr; - } - if (p + p->s.size == bp) { - 6d5: 8b 42 04 mov 0x4(%edx),%eax - 6d8: 8d 34 c2 lea (%edx,%eax,8),%esi - 6db: 39 f1 cmp %esi,%ecx - 6dd: 74 3a je 719 - p->s.size += bp->s.size; - p->s.ptr = bp->s.ptr; - 6df: 89 0a mov %ecx,(%edx) - } - else { - p->s.ptr = bp; - } - freep = p; -} - 6e1: 5b pop %ebx - freep = p; - 6e2: 89 15 64 0b 00 00 mov %edx,0xb64 -} - 6e8: 5e pop %esi - 6e9: 5f pop %edi - 6ea: 5d pop %ebp - 6eb: c3 ret - 6ec: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 6f0: 39 c2 cmp %eax,%edx - 6f2: 72 c4 jb 6b8 - 6f4: 39 c1 cmp %eax,%ecx - 6f6: 73 c0 jae 6b8 - if (bp + bp->s.size == p->s.ptr) { - 6f8: 8b 73 fc mov -0x4(%ebx),%esi - 6fb: 8d 3c f1 lea (%ecx,%esi,8),%edi - 6fe: 39 f8 cmp %edi,%eax - 700: 75 d0 jne 6d2 - bp->s.size += p->s.ptr->s.size; - 702: 03 70 04 add 0x4(%eax),%esi - 705: 89 73 fc mov %esi,-0x4(%ebx) - bp->s.ptr = p->s.ptr->s.ptr; - 708: 8b 02 mov (%edx),%eax - 70a: 8b 00 mov (%eax),%eax - 70c: 89 43 f8 mov %eax,-0x8(%ebx) - if (p + p->s.size == bp) { - 70f: 8b 42 04 mov 0x4(%edx),%eax - 712: 8d 34 c2 lea (%edx,%eax,8),%esi - 715: 39 f1 cmp %esi,%ecx - 717: 75 c6 jne 6df - p->s.size += bp->s.size; - 719: 03 43 fc add -0x4(%ebx),%eax - freep = p; - 71c: 89 15 64 0b 00 00 mov %edx,0xb64 - p->s.size += bp->s.size; - 722: 89 42 04 mov %eax,0x4(%edx) - p->s.ptr = bp->s.ptr; - 725: 8b 4b f8 mov -0x8(%ebx),%ecx - 728: 89 0a mov %ecx,(%edx) -} - 72a: 5b pop %ebx - 72b: 5e pop %esi - 72c: 5f pop %edi - 72d: 5d pop %ebp - 72e: c3 ret - 72f: 90 nop - -00000730 : - hp->s.size = nu; - free((void*)(hp + 1)); - return freep; -} - -void* malloc(uint nbytes) { - 730: 55 push %ebp - 731: 89 e5 mov %esp,%ebp - 733: 57 push %edi - 734: 56 push %esi - 735: 53 push %ebx - 736: 83 ec 1c sub $0x1c,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 739: 8b 45 08 mov 0x8(%ebp),%eax - if ((prevp = freep) == 0) { - 73c: 8b 3d 64 0b 00 00 mov 0xb64,%edi - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 742: 8d 70 07 lea 0x7(%eax),%esi - 745: c1 ee 03 shr $0x3,%esi - 748: 83 c6 01 add $0x1,%esi - if ((prevp = freep) == 0) { - 74b: 85 ff test %edi,%edi - 74d: 0f 84 9d 00 00 00 je 7f0 - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 753: 8b 17 mov (%edi),%edx - if (p->s.size >= nunits) { - 755: 8b 4a 04 mov 0x4(%edx),%ecx - 758: 39 f1 cmp %esi,%ecx - 75a: 73 6a jae 7c6 - 75c: bb 00 10 00 00 mov $0x1000,%ebx - 761: 39 de cmp %ebx,%esi - 763: 0f 43 de cmovae %esi,%ebx - p = sbrk(nu * sizeof(Header)); - 766: 8d 04 dd 00 00 00 00 lea 0x0(,%ebx,8),%eax - 76d: 89 45 e4 mov %eax,-0x1c(%ebp) - 770: eb 17 jmp 789 - 772: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 778: 8b 02 mov (%edx),%eax - if (p->s.size >= nunits) { - 77a: 8b 48 04 mov 0x4(%eax),%ecx - 77d: 39 f1 cmp %esi,%ecx - 77f: 73 4f jae 7d0 - p->s.size = nunits; - } - freep = prevp; - return (void*)(p + 1); - } - if (p == freep) { - 781: 8b 3d 64 0b 00 00 mov 0xb64,%edi - 787: 89 c2 mov %eax,%edx - 789: 39 d7 cmp %edx,%edi - 78b: 75 eb jne 778 - p = sbrk(nu * sizeof(Header)); - 78d: 83 ec 0c sub $0xc,%esp - 790: ff 75 e4 push -0x1c(%ebp) - 793: e8 4b fc ff ff call 3e3 - if (p == (char*)-1) { - 798: 83 c4 10 add $0x10,%esp - 79b: 83 f8 ff cmp $0xffffffff,%eax - 79e: 74 1c je 7bc - hp->s.size = nu; - 7a0: 89 58 04 mov %ebx,0x4(%eax) - free((void*)(hp + 1)); - 7a3: 83 ec 0c sub $0xc,%esp - 7a6: 83 c0 08 add $0x8,%eax - 7a9: 50 push %eax - 7aa: e8 f1 fe ff ff call 6a0 - return freep; - 7af: 8b 15 64 0b 00 00 mov 0xb64,%edx - if ((p = morecore(nunits)) == 0) { - 7b5: 83 c4 10 add $0x10,%esp - 7b8: 85 d2 test %edx,%edx - 7ba: 75 bc jne 778 - return 0; - } - } - } -} - 7bc: 8d 65 f4 lea -0xc(%ebp),%esp - return 0; - 7bf: 31 c0 xor %eax,%eax -} - 7c1: 5b pop %ebx - 7c2: 5e pop %esi - 7c3: 5f pop %edi - 7c4: 5d pop %ebp - 7c5: c3 ret - if (p->s.size >= nunits) { - 7c6: 89 d0 mov %edx,%eax - 7c8: 89 fa mov %edi,%edx - 7ca: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - if (p->s.size == nunits) { - 7d0: 39 ce cmp %ecx,%esi - 7d2: 74 4c je 820 - p->s.size -= nunits; - 7d4: 29 f1 sub %esi,%ecx - 7d6: 89 48 04 mov %ecx,0x4(%eax) - p += p->s.size; - 7d9: 8d 04 c8 lea (%eax,%ecx,8),%eax - p->s.size = nunits; - 7dc: 89 70 04 mov %esi,0x4(%eax) - freep = prevp; - 7df: 89 15 64 0b 00 00 mov %edx,0xb64 -} - 7e5: 8d 65 f4 lea -0xc(%ebp),%esp - return (void*)(p + 1); - 7e8: 83 c0 08 add $0x8,%eax -} - 7eb: 5b pop %ebx - 7ec: 5e pop %esi - 7ed: 5f pop %edi - 7ee: 5d pop %ebp - 7ef: c3 ret - base.s.ptr = freep = prevp = &base; - 7f0: c7 05 64 0b 00 00 68 movl $0xb68,0xb64 - 7f7: 0b 00 00 - base.s.size = 0; - 7fa: bf 68 0b 00 00 mov $0xb68,%edi - base.s.ptr = freep = prevp = &base; - 7ff: c7 05 68 0b 00 00 68 movl $0xb68,0xb68 - 806: 0b 00 00 - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 809: 89 fa mov %edi,%edx - base.s.size = 0; - 80b: c7 05 6c 0b 00 00 00 movl $0x0,0xb6c - 812: 00 00 00 - if (p->s.size >= nunits) { - 815: e9 42 ff ff ff jmp 75c - 81a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - prevp->s.ptr = p->s.ptr; - 820: 8b 08 mov (%eax),%ecx - 822: 89 0a mov %ecx,(%edx) - 824: eb b9 jmp 7df diff --git a/stressfs.d b/stressfs.d deleted file mode 100644 index 7d5de54..0000000 --- a/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/stressfs.o b/stressfs.o deleted file mode 100644 index 7aeaa35d8eeeba18e0e208a54931d997d7f49168..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4784 zcma)AYmAgv89wK`%wA?MvpW=67PGTl7Al?DodwYX1yZ2Py%b#7(wcR4_S>0(-I-;+ zZ(zC9UN*!MB?>V{6A6DB)0kA#1gmL(pwR?>G-=VKnl{0tMMEu7>m@dUx<1dDb7nu* z7<`j+p7(a%_k8C*^X#_Wk4Y(oAt`JzD+w{xQnjp6uu^o2MZyotp6`$O2|vh`gF-Ra zC{C0MftOf5+9=9i26c_j?_TCi-~8)O`=FUQc6adH9}XQn|KnSq&deN0zxTxRw-c5S zW9QEP5sEw;9g)}0-hjXy*Ur9A4w-JZ{9DS%2Msz?>`*CS3ZU=xkBY7xqK8ow|jTth$?&Wc@n?%Uus;)Nu>N0LsW`AvF!c((IzLBJN&5Bo1vI zIi~?!qf&kwqNGmNIML!bk29Qdc*Qsf=U-qOl=4lZlr>Jc*P(1xpVFe7ZqrFsj4#}$ zQAL&`u(CRzLR?YDtc#$VO)u40#@0Y-EsONiruxT7ZKBA<`7Tw*=!D?^Tu- zI$IaSylqNcL{mFdO(=C^qoRTK)hMf|D2QgtIg~vp^*hn1{UJ25D>qKp^NZpelyvK~ zwF?rvYCQ$!4vLjU^)Z?AsFdktFu$gTYm`H0y^ZQSWNx5RK7R+Jd|DCg1WgGr%7>#f zK@BG`14g(jkly7~KER5dna_35AQn(oYhnh@(iJabhZbzAGB4@XyY?1*pZkZ^HZMYP*tt4K=BdUU&07mUstVb`zgmg~FQ9**vaTMK^j z=mLxpvcir0C^!2z?;b_SEv;Yjuc_#2*`Mbf!pIy79QX zG!onCHg0s69(3Io-KF-aF}Gm?nf0=irynRujrKvS%{f(HvdRr?HAT2lDXXINFw<-oW_c!?9t?8xfFQWprnCkn;UWRMvd_k0*}t)pFbJmcq0>q4n0Ml(T1REmBfSM){`*?guf{Cue#Bx*Wd zHR>fGCcFvX3&cdGP*g7hQBk%GM&lmuu~PY{P@yvATvkk$;WnnjvIVrq#bhSPi|lyG z_i9g%R95s(c%y|(uRk_?;H1B=T*~!kd>`+U39lIR-^XfRFbET3E527wJxut0?a1FYYgVm!IvZlNE+YUb zFPkIt+%QCYuMvQhKQ~8SH%HzyM-I=iT9JC0=|!s6pxUj~wOd_je8-9tT(D{nKZKYP z#}!X93lE1w#AYFei5RjMwEdj6zeH>m;te7?{U#9u!wZCQ-ldEn7sr=^Tb&w`km{aY*Bc#-he4 zjo;PyLyfBci1#-w-__WOelpK$jT?zJo={qTT4RogHGWj%l*Tg}xo2qqy2cAc#J#NX z6(ZukrtzxAUunFq@m-A{XuPfQpBn$Iu?};=crlF~8Zq=ruWmQkaU3X_+mnxTu0ys{ z^8s8!8S|mm2{5hYwHnuJ+(v|d0%!q6%0D@QlNT72tC%-j;7tW0rHdzCZAoOh3^ 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 diff --git a/swtch.o b/swtch.o deleted file mode 100644 index 29c6b7d7944f9b2158d89ffce3c8dc7313e2e58c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1204 zcma)5%Wl&^6uncYr95g99uiV3WJ4)PAO`{q7DyEF5~3iaP>`T)WD_@y)TGE`pk2YX zYL_he3VwkNAJ9)=!9TF!oUt!)Ho%qc+;d-N#&^aa?=L+t#)yg$Pez`|%0!X5;mjpD zF23yDo3HIXpPycCzj(PD>>hO1Uax+;jRH^3Vm0QMKZDh=g3E~gkiXf8+6B|3WAu)g z$4|mAJm0*AHJmVLIER8_yV{>4oGzMV8g>C{KADEpryAyj@%&l;f`4+-Rm@>6d!5fk zdx`Z3%|Y7j$4$H5Y46x)*;cO^Tbo)tNQZe#9zIA6FSTt=S5Bct&|j?tpMUdB(A_6#jPpWjX!l-BiO7+Nop-5KO@ z0-I-r-B6UL+qp#DIFBVttd%HBH=}Nvyz6x~`@^*A_lN6SD0R6wNwV~PH5+H~u$O|M zC;&fB^M5jnGG4e&kZ-Mecg#^jC^1Ij@&T$Bd1TK5BqZI>w)t@{l?=v`p| diff --git a/syscall.d b/syscall.d deleted file mode 100644 index 07012da..0000000 --- a/syscall.d +++ /dev/null @@ -1,2 +0,0 @@ -syscall.o: syscall.c /usr/include/stdc-predef.h types.h defs.h param.h \ - memlayout.h mmu.h proc.h x86.h syscall.h syscalltable.h diff --git a/syscall.h b/syscall.h deleted file mode 100644 index e4f4d88..0000000 --- a/syscall.h +++ /dev/null @@ -1,27 +0,0 @@ -// Generated by gensyscalls.pl. Do not edit. -// To change syscall numbers or add new syscalls, edit gensyscalls.pl - -#define SYS_fork 1 -#define SYS_exit 2 -#define SYS_wait 3 -#define SYS_pipe 4 -#define SYS_read 5 -#define SYS_kill 6 -#define SYS_exec 7 -#define SYS_fstat 8 -#define SYS_chdir 9 -#define SYS_dup 10 -#define SYS_getpid 11 -#define SYS_sbrk 12 -#define SYS_sleep 13 -#define SYS_uptime 14 -#define SYS_open 15 -#define SYS_write 16 -#define SYS_mknod 17 -#define SYS_unlink 18 -#define SYS_link 19 -#define SYS_mkdir 20 -#define SYS_close 21 -#define SYS_getch 22 -#define SYS_greeting 23 -#define SYS_shutdown 24 diff --git a/syscall.o b/syscall.o deleted file mode 100644 index e01843645459833d1876c7383d392e0a6bca5f7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10428 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 + cprintf("Current Parent PID: %d\n", myproc()->parent->pid); + cprintf("Process Console: %d\n", myproc()->consoleIndex); return 0; } @@ -119,4 +123,25 @@ int sys_shutdown(void) outw(0x604, 0x2000); } return 0; +} + +int sys_screen(void) +{ + struct proc *curproc = myproc(); + int result = 0; + int consoleindex = -1; + if ((consoleindex = newconsole()) != 0) + { + curproc->consoleIndex = consoleindex; + switchtoconsole(consoleindex); + wakeup(myproc()->chan); + result = 1; + } + return result; +} + +int sys_cls(void) +{ + clearscreen(); + return 0; } \ No newline at end of file diff --git a/sysproc.d b/sysproc.d deleted file mode 100644 index 2f26f0c..0000000 --- a/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/sysproc.o b/sysproc.o deleted file mode 100644 index 8b5cda2ebba2ccac41f06e08d911457b326a2baf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8552 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 b(Si5lJ0x`RQot}=VfPB!ecLkvdUpR0#19+s diff --git a/trap.d b/trap.d deleted file mode 100644 index c48ab89..0000000 --- a/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/trap.o b/trap.o deleted file mode 100644 index c76deb1b794a9ad075bdc1d74ede8b02605131c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11100 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 diff --git a/uart.d b/uart.d deleted file mode 100644 index d156629..0000000 --- a/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 sleeplock.h fs.h file.h mmu.h proc.h x86.h diff --git a/uart.o b/uart.o deleted file mode 100644 index 27f864cd31f1558b8d6658ed17732652aa893af7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7184 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 Fe*iPaHO2q{ diff --git a/umalloc.d b/umalloc.d deleted file mode 100644 index cc1d152..0000000 --- a/umalloc.d +++ /dev/null @@ -1,2 +0,0 @@ -umalloc.o: umalloc.c /usr/include/stdc-predef.h types.h stat.h user.h \ - param.h diff --git a/umalloc.o b/umalloc.o deleted file mode 100644 index 2041a138ce9d058a46888d3279fc5d702e1cbaf4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5272 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 Kw|ym`ulH}wt?R}B diff --git a/user.h b/user.h index 6de561d..94da047 100644 --- a/user.h +++ b/user.h @@ -26,6 +26,8 @@ int uptime(void); int getch(void); int greeting(void); int shutdown(int restart); +int screen(void); +int cls(void); // ulib.c int stat(const char*, struct stat*); diff --git a/usertests.asm b/usertests.asm deleted file mode 100644 index 3570653..0000000 --- a/usertests.asm +++ /dev/null @@ -1,6618 +0,0 @@ - -_usertests: file format elf32-i386 - - -Disassembly of section .text: - -00000000
    : -unsigned int rand() { - randstate = randstate * 1664525 + 1013904223; - return randstate; -} - -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 push -0x4(%ecx) - a: 55 push %ebp - b: 89 e5 mov %esp,%ebp - d: 51 push %ecx - e: 83 ec 0c sub $0xc,%esp - printf(1, "usertests starting\n"); - 11: 68 56 4d 00 00 push $0x4d56 - 16: 6a 01 push $0x1 - 18: e8 23 3a 00 00 call 3a40 - - if (open("usertests.ran", 0) >= 0) { - 1d: 59 pop %ecx - 1e: 58 pop %eax - 1f: 6a 00 push $0x0 - 21: 68 6a 4d 00 00 push $0x4d6a - 26: e8 10 39 00 00 call 393b - 2b: 83 c4 10 add $0x10,%esp - 2e: 85 c0 test %eax,%eax - 30: 78 13 js 45 - printf(1, "already ran user tests -- rebuild fs.img\n"); - 32: 52 push %edx - 33: 52 push %edx - 34: 68 d4 54 00 00 push $0x54d4 - 39: 6a 01 push $0x1 - 3b: e8 00 3a 00 00 call 3a40 - exit(); - 40: e8 8e 38 00 00 call 38d3 - } - close(open("usertests.ran", O_CREATE)); - 45: 50 push %eax - 46: 50 push %eax - 47: 68 00 02 00 00 push $0x200 - 4c: 68 6a 4d 00 00 push $0x4d6a - 51: e8 e5 38 00 00 call 393b - 56: 89 04 24 mov %eax,(%esp) - 59: e8 0d 39 00 00 call 396b - - argptest(); - 5e: e8 8d 35 00 00 call 35f0 - createdelete(); - 63: e8 b8 11 00 00 call 1220 - linkunlink(); - 68: e8 73 1a 00 00 call 1ae0 - concreate(); - 6d: e8 6e 17 00 00 call 17e0 - fourfiles(); - 72: e8 a9 0f 00 00 call 1020 - sharedfd(); - 77: e8 e4 0d 00 00 call e60 - - bigargtest(); - 7c: e8 2f 32 00 00 call 32b0 - bigwrite(); - 81: e8 7a 23 00 00 call 2400 - bigargtest(); - 86: e8 25 32 00 00 call 32b0 - bsstest(); - 8b: e8 b0 31 00 00 call 3240 - sbrktest(); - 90: e8 ab 2c 00 00 call 2d40 - validatetest(); - 95: e8 f6 30 00 00 call 3190 - - opentest(); - 9a: e8 61 03 00 00 call 400 - writetest(); - 9f: e8 ec 03 00 00 call 490 - writetest1(); - a4: e8 c7 05 00 00 call 670 - createtest(); - a9: e8 92 07 00 00 call 840 - - openiputtest(); - ae: e8 4d 02 00 00 call 300 - exitiputtest(); - b3: e8 48 01 00 00 call 200 - iputtest(); - b8: e8 63 00 00 00 call 120 - - mem(); - bd: e8 ce 0c 00 00 call d90 - pipe1(); - c2: e8 59 09 00 00 call a20 - preempt(); - c7: e8 e4 0a 00 00 call bb0 - exitwait(); - cc: e8 3f 0c 00 00 call d10 - - rmdot(); - d1: e8 1a 27 00 00 call 27f0 - fourteen(); - d6: e8 d5 25 00 00 call 26b0 - bigfile(); - db: e8 00 24 00 00 call 24e0 - subdir(); - e0: e8 3b 1c 00 00 call 1d20 - linktest(); - e5: e8 e6 14 00 00 call 15d0 - unlinkread(); - ea: e8 51 13 00 00 call 1440 - dirfile(); - ef: e8 7c 28 00 00 call 2970 - iref(); - f4: e8 77 2a 00 00 call 2b70 - forktest(); - f9: e8 92 2b 00 00 call 2c90 - bigdir(); // slow - fe: e8 ed 1a 00 00 call 1bf0 - - uio(); - 103: e8 78 34 00 00 call 3580 - - exectest(); - 108: e8 c3 08 00 00 call 9d0 - - exit(); - 10d: e8 c1 37 00 00 call 38d3 - 112: 66 90 xchg %ax,%ax - 114: 66 90 xchg %ax,%ax - 116: 66 90 xchg %ax,%ax - 118: 66 90 xchg %ax,%ax - 11a: 66 90 xchg %ax,%ax - 11c: 66 90 xchg %ax,%ax - 11e: 66 90 xchg %ax,%ax - -00000120 : -void iputtest(void) { - 120: 55 push %ebp - 121: 89 e5 mov %esp,%ebp - 123: 83 ec 10 sub $0x10,%esp - printf(stdout, "iput test\n"); - 126: 68 fc 3d 00 00 push $0x3dfc - 12b: ff 35 58 5e 00 00 push 0x5e58 - 131: e8 0a 39 00 00 call 3a40 - if (mkdir("iputdir") < 0) { - 136: c7 04 24 8f 3d 00 00 movl $0x3d8f,(%esp) - 13d: e8 21 38 00 00 call 3963 - 142: 83 c4 10 add $0x10,%esp - 145: 85 c0 test %eax,%eax - 147: 78 58 js 1a1 - if (chdir("iputdir") < 0) { - 149: 83 ec 0c sub $0xc,%esp - 14c: 68 8f 3d 00 00 push $0x3d8f - 151: e8 b5 37 00 00 call 390b - 156: 83 c4 10 add $0x10,%esp - 159: 85 c0 test %eax,%eax - 15b: 0f 88 85 00 00 00 js 1e6 - if (unlink("../iputdir") < 0) { - 161: 83 ec 0c sub $0xc,%esp - 164: 68 8c 3d 00 00 push $0x3d8c - 169: e8 e5 37 00 00 call 3953 - 16e: 83 c4 10 add $0x10,%esp - 171: 85 c0 test %eax,%eax - 173: 78 5a js 1cf - if (chdir("/") < 0) { - 175: 83 ec 0c sub $0xc,%esp - 178: 68 b1 3d 00 00 push $0x3db1 - 17d: e8 89 37 00 00 call 390b - 182: 83 c4 10 add $0x10,%esp - 185: 85 c0 test %eax,%eax - 187: 78 2f js 1b8 - printf(stdout, "iput test ok\n"); - 189: 83 ec 08 sub $0x8,%esp - 18c: 68 34 3e 00 00 push $0x3e34 - 191: ff 35 58 5e 00 00 push 0x5e58 - 197: e8 a4 38 00 00 call 3a40 -} - 19c: 83 c4 10 add $0x10,%esp - 19f: c9 leave - 1a0: c3 ret - printf(stdout, "mkdir failed\n"); - 1a1: 50 push %eax - 1a2: 50 push %eax - 1a3: 68 68 3d 00 00 push $0x3d68 - 1a8: ff 35 58 5e 00 00 push 0x5e58 - 1ae: e8 8d 38 00 00 call 3a40 - exit(); - 1b3: e8 1b 37 00 00 call 38d3 - printf(stdout, "chdir / failed\n"); - 1b8: 50 push %eax - 1b9: 50 push %eax - 1ba: 68 b3 3d 00 00 push $0x3db3 - 1bf: ff 35 58 5e 00 00 push 0x5e58 - 1c5: e8 76 38 00 00 call 3a40 - exit(); - 1ca: e8 04 37 00 00 call 38d3 - printf(stdout, "unlink ../iputdir failed\n"); - 1cf: 52 push %edx - 1d0: 52 push %edx - 1d1: 68 97 3d 00 00 push $0x3d97 - 1d6: ff 35 58 5e 00 00 push 0x5e58 - 1dc: e8 5f 38 00 00 call 3a40 - exit(); - 1e1: e8 ed 36 00 00 call 38d3 - printf(stdout, "chdir iputdir failed\n"); - 1e6: 51 push %ecx - 1e7: 51 push %ecx - 1e8: 68 76 3d 00 00 push $0x3d76 - 1ed: ff 35 58 5e 00 00 push 0x5e58 - 1f3: e8 48 38 00 00 call 3a40 - exit(); - 1f8: e8 d6 36 00 00 call 38d3 - 1fd: 8d 76 00 lea 0x0(%esi),%esi - -00000200 : -void exitiputtest(void) { - 200: 55 push %ebp - 201: 89 e5 mov %esp,%ebp - 203: 83 ec 10 sub $0x10,%esp - printf(stdout, "exitiput test\n"); - 206: 68 c3 3d 00 00 push $0x3dc3 - 20b: ff 35 58 5e 00 00 push 0x5e58 - 211: e8 2a 38 00 00 call 3a40 - pid = fork(); - 216: e8 b0 36 00 00 call 38cb - if (pid < 0) { - 21b: 83 c4 10 add $0x10,%esp - 21e: 85 c0 test %eax,%eax - 220: 0f 88 8a 00 00 00 js 2b0 - if (pid == 0) { - 226: 75 50 jne 278 - if (mkdir("iputdir") < 0) { - 228: 83 ec 0c sub $0xc,%esp - 22b: 68 8f 3d 00 00 push $0x3d8f - 230: e8 2e 37 00 00 call 3963 - 235: 83 c4 10 add $0x10,%esp - 238: 85 c0 test %eax,%eax - 23a: 0f 88 87 00 00 00 js 2c7 - if (chdir("iputdir") < 0) { - 240: 83 ec 0c sub $0xc,%esp - 243: 68 8f 3d 00 00 push $0x3d8f - 248: e8 be 36 00 00 call 390b - 24d: 83 c4 10 add $0x10,%esp - 250: 85 c0 test %eax,%eax - 252: 0f 88 86 00 00 00 js 2de - if (unlink("../iputdir") < 0) { - 258: 83 ec 0c sub $0xc,%esp - 25b: 68 8c 3d 00 00 push $0x3d8c - 260: e8 ee 36 00 00 call 3953 - 265: 83 c4 10 add $0x10,%esp - 268: 85 c0 test %eax,%eax - 26a: 78 2c js 298 - exit(); - 26c: e8 62 36 00 00 call 38d3 - 271: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - wait(); - 278: e8 5e 36 00 00 call 38db - printf(stdout, "exitiput test ok\n"); - 27d: 83 ec 08 sub $0x8,%esp - 280: 68 e6 3d 00 00 push $0x3de6 - 285: ff 35 58 5e 00 00 push 0x5e58 - 28b: e8 b0 37 00 00 call 3a40 -} - 290: 83 c4 10 add $0x10,%esp - 293: c9 leave - 294: c3 ret - 295: 8d 76 00 lea 0x0(%esi),%esi - printf(stdout, "unlink ../iputdir failed\n"); - 298: 83 ec 08 sub $0x8,%esp - 29b: 68 97 3d 00 00 push $0x3d97 - 2a0: ff 35 58 5e 00 00 push 0x5e58 - 2a6: e8 95 37 00 00 call 3a40 - exit(); - 2ab: e8 23 36 00 00 call 38d3 - printf(stdout, "fork failed\n"); - 2b0: 51 push %ecx - 2b1: 51 push %ecx - 2b2: 68 a9 4c 00 00 push $0x4ca9 - 2b7: ff 35 58 5e 00 00 push 0x5e58 - 2bd: e8 7e 37 00 00 call 3a40 - exit(); - 2c2: e8 0c 36 00 00 call 38d3 - printf(stdout, "mkdir failed\n"); - 2c7: 52 push %edx - 2c8: 52 push %edx - 2c9: 68 68 3d 00 00 push $0x3d68 - 2ce: ff 35 58 5e 00 00 push 0x5e58 - 2d4: e8 67 37 00 00 call 3a40 - exit(); - 2d9: e8 f5 35 00 00 call 38d3 - printf(stdout, "child chdir failed\n"); - 2de: 50 push %eax - 2df: 50 push %eax - 2e0: 68 d2 3d 00 00 push $0x3dd2 - 2e5: ff 35 58 5e 00 00 push 0x5e58 - 2eb: e8 50 37 00 00 call 3a40 - exit(); - 2f0: e8 de 35 00 00 call 38d3 - 2f5: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 2fc: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000300 : -void openiputtest(void) { - 300: 55 push %ebp - 301: 89 e5 mov %esp,%ebp - 303: 83 ec 10 sub $0x10,%esp - printf(stdout, "openiput test\n"); - 306: 68 f8 3d 00 00 push $0x3df8 - 30b: ff 35 58 5e 00 00 push 0x5e58 - 311: e8 2a 37 00 00 call 3a40 - if (mkdir("oidir") < 0) { - 316: c7 04 24 07 3e 00 00 movl $0x3e07,(%esp) - 31d: e8 41 36 00 00 call 3963 - 322: 83 c4 10 add $0x10,%esp - 325: 85 c0 test %eax,%eax - 327: 0f 88 9f 00 00 00 js 3cc - pid = fork(); - 32d: e8 99 35 00 00 call 38cb - if (pid < 0) { - 332: 85 c0 test %eax,%eax - 334: 78 7f js 3b5 - if (pid == 0) { - 336: 75 38 jne 370 - int fd = open("oidir", O_RDWR); - 338: 83 ec 08 sub $0x8,%esp - 33b: 6a 02 push $0x2 - 33d: 68 07 3e 00 00 push $0x3e07 - 342: e8 f4 35 00 00 call 393b - if (fd >= 0) { - 347: 83 c4 10 add $0x10,%esp - 34a: 85 c0 test %eax,%eax - 34c: 78 62 js 3b0 - printf(stdout, "open directory for write succeeded\n"); - 34e: 83 ec 08 sub $0x8,%esp - 351: 68 8c 4d 00 00 push $0x4d8c - 356: ff 35 58 5e 00 00 push 0x5e58 - 35c: e8 df 36 00 00 call 3a40 - exit(); - 361: e8 6d 35 00 00 call 38d3 - 366: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 36d: 8d 76 00 lea 0x0(%esi),%esi - sleep(1); - 370: 83 ec 0c sub $0xc,%esp - 373: 6a 01 push $0x1 - 375: e8 b1 35 00 00 call 392b - if (unlink("oidir") != 0) { - 37a: c7 04 24 07 3e 00 00 movl $0x3e07,(%esp) - 381: e8 cd 35 00 00 call 3953 - 386: 83 c4 10 add $0x10,%esp - 389: 85 c0 test %eax,%eax - 38b: 75 56 jne 3e3 - wait(); - 38d: e8 49 35 00 00 call 38db - printf(stdout, "openiput test ok\n"); - 392: 83 ec 08 sub $0x8,%esp - 395: 68 30 3e 00 00 push $0x3e30 - 39a: ff 35 58 5e 00 00 push 0x5e58 - 3a0: e8 9b 36 00 00 call 3a40 -} - 3a5: 83 c4 10 add $0x10,%esp - 3a8: c9 leave - 3a9: c3 ret - 3aa: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - exit(); - 3b0: e8 1e 35 00 00 call 38d3 - printf(stdout, "fork failed\n"); - 3b5: 52 push %edx - 3b6: 52 push %edx - 3b7: 68 a9 4c 00 00 push $0x4ca9 - 3bc: ff 35 58 5e 00 00 push 0x5e58 - 3c2: e8 79 36 00 00 call 3a40 - exit(); - 3c7: e8 07 35 00 00 call 38d3 - printf(stdout, "mkdir oidir failed\n"); - 3cc: 51 push %ecx - 3cd: 51 push %ecx - 3ce: 68 0d 3e 00 00 push $0x3e0d - 3d3: ff 35 58 5e 00 00 push 0x5e58 - 3d9: e8 62 36 00 00 call 3a40 - exit(); - 3de: e8 f0 34 00 00 call 38d3 - printf(stdout, "unlink failed\n"); - 3e3: 50 push %eax - 3e4: 50 push %eax - 3e5: 68 21 3e 00 00 push $0x3e21 - 3ea: ff 35 58 5e 00 00 push 0x5e58 - 3f0: e8 4b 36 00 00 call 3a40 - exit(); - 3f5: e8 d9 34 00 00 call 38d3 - 3fa: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -00000400 : -void opentest(void) { - 400: 55 push %ebp - 401: 89 e5 mov %esp,%ebp - 403: 83 ec 10 sub $0x10,%esp - printf(stdout, "open test\n"); - 406: 68 42 3e 00 00 push $0x3e42 - 40b: ff 35 58 5e 00 00 push 0x5e58 - 411: e8 2a 36 00 00 call 3a40 - fd = open("echo", 0); - 416: 58 pop %eax - 417: 5a pop %edx - 418: 6a 00 push $0x0 - 41a: 68 4d 3e 00 00 push $0x3e4d - 41f: e8 17 35 00 00 call 393b - if (fd < 0) { - 424: 83 c4 10 add $0x10,%esp - 427: 85 c0 test %eax,%eax - 429: 78 36 js 461 - close(fd); - 42b: 83 ec 0c sub $0xc,%esp - 42e: 50 push %eax - 42f: e8 37 35 00 00 call 396b - fd = open("doesnotexist", 0); - 434: 5a pop %edx - 435: 59 pop %ecx - 436: 6a 00 push $0x0 - 438: 68 65 3e 00 00 push $0x3e65 - 43d: e8 f9 34 00 00 call 393b - if (fd >= 0) { - 442: 83 c4 10 add $0x10,%esp - 445: 85 c0 test %eax,%eax - 447: 79 2f jns 478 - printf(stdout, "open test ok\n"); - 449: 83 ec 08 sub $0x8,%esp - 44c: 68 90 3e 00 00 push $0x3e90 - 451: ff 35 58 5e 00 00 push 0x5e58 - 457: e8 e4 35 00 00 call 3a40 -} - 45c: 83 c4 10 add $0x10,%esp - 45f: c9 leave - 460: c3 ret - printf(stdout, "open echo failed!\n"); - 461: 50 push %eax - 462: 50 push %eax - 463: 68 52 3e 00 00 push $0x3e52 - 468: ff 35 58 5e 00 00 push 0x5e58 - 46e: e8 cd 35 00 00 call 3a40 - exit(); - 473: e8 5b 34 00 00 call 38d3 - printf(stdout, "open doesnotexist succeeded!\n"); - 478: 50 push %eax - 479: 50 push %eax - 47a: 68 72 3e 00 00 push $0x3e72 - 47f: ff 35 58 5e 00 00 push 0x5e58 - 485: e8 b6 35 00 00 call 3a40 - exit(); - 48a: e8 44 34 00 00 call 38d3 - 48f: 90 nop - -00000490 : -void writetest(void) { - 490: 55 push %ebp - 491: 89 e5 mov %esp,%ebp - 493: 56 push %esi - 494: 53 push %ebx - printf(stdout, "small file test\n"); - 495: 83 ec 08 sub $0x8,%esp - 498: 68 9e 3e 00 00 push $0x3e9e - 49d: ff 35 58 5e 00 00 push 0x5e58 - 4a3: e8 98 35 00 00 call 3a40 - fd = open("small", O_CREATE | O_RDWR); - 4a8: 58 pop %eax - 4a9: 5a pop %edx - 4aa: 68 02 02 00 00 push $0x202 - 4af: 68 af 3e 00 00 push $0x3eaf - 4b4: e8 82 34 00 00 call 393b - if (fd >= 0) { - 4b9: 83 c4 10 add $0x10,%esp - 4bc: 85 c0 test %eax,%eax - 4be: 0f 88 88 01 00 00 js 64c - printf(stdout, "creat small succeeded; ok\n"); - 4c4: 83 ec 08 sub $0x8,%esp - 4c7: 89 c6 mov %eax,%esi - for (i = 0; i < 100; i++) { - 4c9: 31 db xor %ebx,%ebx - printf(stdout, "creat small succeeded; ok\n"); - 4cb: 68 b5 3e 00 00 push $0x3eb5 - 4d0: ff 35 58 5e 00 00 push 0x5e58 - 4d6: e8 65 35 00 00 call 3a40 - 4db: 83 c4 10 add $0x10,%esp - 4de: 66 90 xchg %ax,%ax - if (write(fd, "aaaaaaaaaa", 10) != 10) { - 4e0: 83 ec 04 sub $0x4,%esp - 4e3: 6a 0a push $0xa - 4e5: 68 ec 3e 00 00 push $0x3eec - 4ea: 56 push %esi - 4eb: e8 53 34 00 00 call 3943 - 4f0: 83 c4 10 add $0x10,%esp - 4f3: 83 f8 0a cmp $0xa,%eax - 4f6: 0f 85 d9 00 00 00 jne 5d5 - if (write(fd, "bbbbbbbbbb", 10) != 10) { - 4fc: 83 ec 04 sub $0x4,%esp - 4ff: 6a 0a push $0xa - 501: 68 f7 3e 00 00 push $0x3ef7 - 506: 56 push %esi - 507: e8 37 34 00 00 call 3943 - 50c: 83 c4 10 add $0x10,%esp - 50f: 83 f8 0a cmp $0xa,%eax - 512: 0f 85 d6 00 00 00 jne 5ee - for (i = 0; i < 100; i++) { - 518: 83 c3 01 add $0x1,%ebx - 51b: 83 fb 64 cmp $0x64,%ebx - 51e: 75 c0 jne 4e0 - printf(stdout, "writes ok\n"); - 520: 83 ec 08 sub $0x8,%esp - 523: 68 02 3f 00 00 push $0x3f02 - 528: ff 35 58 5e 00 00 push 0x5e58 - 52e: e8 0d 35 00 00 call 3a40 - close(fd); - 533: 89 34 24 mov %esi,(%esp) - 536: e8 30 34 00 00 call 396b - fd = open("small", O_RDONLY); - 53b: 5b pop %ebx - 53c: 5e pop %esi - 53d: 6a 00 push $0x0 - 53f: 68 af 3e 00 00 push $0x3eaf - 544: e8 f2 33 00 00 call 393b - if (fd >= 0) { - 549: 83 c4 10 add $0x10,%esp - fd = open("small", O_RDONLY); - 54c: 89 c3 mov %eax,%ebx - if (fd >= 0) { - 54e: 85 c0 test %eax,%eax - 550: 0f 88 b1 00 00 00 js 607 - printf(stdout, "open small succeeded ok\n"); - 556: 83 ec 08 sub $0x8,%esp - 559: 68 0d 3f 00 00 push $0x3f0d - 55e: ff 35 58 5e 00 00 push 0x5e58 - 564: e8 d7 34 00 00 call 3a40 - i = read(fd, buf, 2000); - 569: 83 c4 0c add $0xc,%esp - 56c: 68 d0 07 00 00 push $0x7d0 - 571: 68 a0 85 00 00 push $0x85a0 - 576: 53 push %ebx - 577: e8 6f 33 00 00 call 38eb - if (i == 2000) { - 57c: 83 c4 10 add $0x10,%esp - 57f: 3d d0 07 00 00 cmp $0x7d0,%eax - 584: 0f 85 94 00 00 00 jne 61e - printf(stdout, "read succeeded ok\n"); - 58a: 83 ec 08 sub $0x8,%esp - 58d: 68 41 3f 00 00 push $0x3f41 - 592: ff 35 58 5e 00 00 push 0x5e58 - 598: e8 a3 34 00 00 call 3a40 - close(fd); - 59d: 89 1c 24 mov %ebx,(%esp) - 5a0: e8 c6 33 00 00 call 396b - if (unlink("small") < 0) { - 5a5: c7 04 24 af 3e 00 00 movl $0x3eaf,(%esp) - 5ac: e8 a2 33 00 00 call 3953 - 5b1: 83 c4 10 add $0x10,%esp - 5b4: 85 c0 test %eax,%eax - 5b6: 78 7d js 635 - printf(stdout, "small file test ok\n"); - 5b8: 83 ec 08 sub $0x8,%esp - 5bb: 68 69 3f 00 00 push $0x3f69 - 5c0: ff 35 58 5e 00 00 push 0x5e58 - 5c6: e8 75 34 00 00 call 3a40 -} - 5cb: 83 c4 10 add $0x10,%esp - 5ce: 8d 65 f8 lea -0x8(%ebp),%esp - 5d1: 5b pop %ebx - 5d2: 5e pop %esi - 5d3: 5d pop %ebp - 5d4: c3 ret - printf(stdout, "error: write aa %d new file failed\n", i); - 5d5: 83 ec 04 sub $0x4,%esp - 5d8: 53 push %ebx - 5d9: 68 b0 4d 00 00 push $0x4db0 - 5de: ff 35 58 5e 00 00 push 0x5e58 - 5e4: e8 57 34 00 00 call 3a40 - exit(); - 5e9: e8 e5 32 00 00 call 38d3 - printf(stdout, "error: write bb %d new file failed\n", i); - 5ee: 83 ec 04 sub $0x4,%esp - 5f1: 53 push %ebx - 5f2: 68 d4 4d 00 00 push $0x4dd4 - 5f7: ff 35 58 5e 00 00 push 0x5e58 - 5fd: e8 3e 34 00 00 call 3a40 - exit(); - 602: e8 cc 32 00 00 call 38d3 - printf(stdout, "error: open small failed!\n"); - 607: 51 push %ecx - 608: 51 push %ecx - 609: 68 26 3f 00 00 push $0x3f26 - 60e: ff 35 58 5e 00 00 push 0x5e58 - 614: e8 27 34 00 00 call 3a40 - exit(); - 619: e8 b5 32 00 00 call 38d3 - printf(stdout, "read failed\n"); - 61e: 52 push %edx - 61f: 52 push %edx - 620: 68 6d 42 00 00 push $0x426d - 625: ff 35 58 5e 00 00 push 0x5e58 - 62b: e8 10 34 00 00 call 3a40 - exit(); - 630: e8 9e 32 00 00 call 38d3 - printf(stdout, "unlink small failed\n"); - 635: 50 push %eax - 636: 50 push %eax - 637: 68 54 3f 00 00 push $0x3f54 - 63c: ff 35 58 5e 00 00 push 0x5e58 - 642: e8 f9 33 00 00 call 3a40 - exit(); - 647: e8 87 32 00 00 call 38d3 - printf(stdout, "error: creat small failed!\n"); - 64c: 50 push %eax - 64d: 50 push %eax - 64e: 68 d0 3e 00 00 push $0x3ed0 - 653: ff 35 58 5e 00 00 push 0x5e58 - 659: e8 e2 33 00 00 call 3a40 - exit(); - 65e: e8 70 32 00 00 call 38d3 - 663: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 66a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -00000670 : -void writetest1(void) { - 670: 55 push %ebp - 671: 89 e5 mov %esp,%ebp - 673: 56 push %esi - 674: 53 push %ebx - printf(stdout, "big files test\n"); - 675: 83 ec 08 sub $0x8,%esp - 678: 68 7d 3f 00 00 push $0x3f7d - 67d: ff 35 58 5e 00 00 push 0x5e58 - 683: e8 b8 33 00 00 call 3a40 - fd = open("big", O_CREATE | O_RDWR); - 688: 58 pop %eax - 689: 5a pop %edx - 68a: 68 02 02 00 00 push $0x202 - 68f: 68 f7 3f 00 00 push $0x3ff7 - 694: e8 a2 32 00 00 call 393b - if (fd < 0) { - 699: 83 c4 10 add $0x10,%esp - 69c: 85 c0 test %eax,%eax - 69e: 0f 88 61 01 00 00 js 805 - 6a4: 89 c6 mov %eax,%esi - for (i = 0; i < MAXFILE; i++) { - 6a6: 31 db xor %ebx,%ebx - 6a8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 6af: 90 nop - if (write(fd, buf, 512) != 512) { - 6b0: 83 ec 04 sub $0x4,%esp - ((int*)buf)[0] = i; - 6b3: 89 1d a0 85 00 00 mov %ebx,0x85a0 - if (write(fd, buf, 512) != 512) { - 6b9: 68 00 02 00 00 push $0x200 - 6be: 68 a0 85 00 00 push $0x85a0 - 6c3: 56 push %esi - 6c4: e8 7a 32 00 00 call 3943 - 6c9: 83 c4 10 add $0x10,%esp - 6cc: 3d 00 02 00 00 cmp $0x200,%eax - 6d1: 0f 85 b3 00 00 00 jne 78a - for (i = 0; i < MAXFILE; i++) { - 6d7: 83 c3 01 add $0x1,%ebx - 6da: 81 fb 8c 00 00 00 cmp $0x8c,%ebx - 6e0: 75 ce jne 6b0 - close(fd); - 6e2: 83 ec 0c sub $0xc,%esp - 6e5: 56 push %esi - 6e6: e8 80 32 00 00 call 396b - fd = open("big", O_RDONLY); - 6eb: 5b pop %ebx - 6ec: 5e pop %esi - 6ed: 6a 00 push $0x0 - 6ef: 68 f7 3f 00 00 push $0x3ff7 - 6f4: e8 42 32 00 00 call 393b - if (fd < 0) { - 6f9: 83 c4 10 add $0x10,%esp - fd = open("big", O_RDONLY); - 6fc: 89 c3 mov %eax,%ebx - if (fd < 0) { - 6fe: 85 c0 test %eax,%eax - 700: 0f 88 e8 00 00 00 js 7ee - n = 0; - 706: 31 f6 xor %esi,%esi - 708: eb 1d jmp 727 - 70a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - else if (i != 512) { - 710: 3d 00 02 00 00 cmp $0x200,%eax - 715: 0f 85 9f 00 00 00 jne 7ba - if (((int*)buf)[0] != n) { - 71b: a1 a0 85 00 00 mov 0x85a0,%eax - 720: 39 f0 cmp %esi,%eax - 722: 75 7f jne 7a3 - n++; - 724: 83 c6 01 add $0x1,%esi - i = read(fd, buf, 512); - 727: 83 ec 04 sub $0x4,%esp - 72a: 68 00 02 00 00 push $0x200 - 72f: 68 a0 85 00 00 push $0x85a0 - 734: 53 push %ebx - 735: e8 b1 31 00 00 call 38eb - if (i == 0) { - 73a: 83 c4 10 add $0x10,%esp - 73d: 85 c0 test %eax,%eax - 73f: 75 cf jne 710 - if (n == MAXFILE - 1) { - 741: 81 fe 8b 00 00 00 cmp $0x8b,%esi - 747: 0f 84 86 00 00 00 je 7d3 - close(fd); - 74d: 83 ec 0c sub $0xc,%esp - 750: 53 push %ebx - 751: e8 15 32 00 00 call 396b - if (unlink("big") < 0) { - 756: c7 04 24 f7 3f 00 00 movl $0x3ff7,(%esp) - 75d: e8 f1 31 00 00 call 3953 - 762: 83 c4 10 add $0x10,%esp - 765: 85 c0 test %eax,%eax - 767: 0f 88 af 00 00 00 js 81c - printf(stdout, "big files ok\n"); - 76d: 83 ec 08 sub $0x8,%esp - 770: 68 1e 40 00 00 push $0x401e - 775: ff 35 58 5e 00 00 push 0x5e58 - 77b: e8 c0 32 00 00 call 3a40 -} - 780: 83 c4 10 add $0x10,%esp - 783: 8d 65 f8 lea -0x8(%ebp),%esp - 786: 5b pop %ebx - 787: 5e pop %esi - 788: 5d pop %ebp - 789: c3 ret - printf(stdout, "error: write big file failed\n", i); - 78a: 83 ec 04 sub $0x4,%esp - 78d: 53 push %ebx - 78e: 68 a7 3f 00 00 push $0x3fa7 - 793: ff 35 58 5e 00 00 push 0x5e58 - 799: e8 a2 32 00 00 call 3a40 - exit(); - 79e: e8 30 31 00 00 call 38d3 - printf(stdout, "read content of block %d is %d\n", - 7a3: 50 push %eax - 7a4: 56 push %esi - 7a5: 68 f8 4d 00 00 push $0x4df8 - 7aa: ff 35 58 5e 00 00 push 0x5e58 - 7b0: e8 8b 32 00 00 call 3a40 - exit(); - 7b5: e8 19 31 00 00 call 38d3 - printf(stdout, "read failed %d\n", i); - 7ba: 83 ec 04 sub $0x4,%esp - 7bd: 50 push %eax - 7be: 68 fb 3f 00 00 push $0x3ffb - 7c3: ff 35 58 5e 00 00 push 0x5e58 - 7c9: e8 72 32 00 00 call 3a40 - exit(); - 7ce: e8 00 31 00 00 call 38d3 - printf(stdout, "read only %d blocks from big", n); - 7d3: 52 push %edx - 7d4: 68 8b 00 00 00 push $0x8b - 7d9: 68 de 3f 00 00 push $0x3fde - 7de: ff 35 58 5e 00 00 push 0x5e58 - 7e4: e8 57 32 00 00 call 3a40 - exit(); - 7e9: e8 e5 30 00 00 call 38d3 - printf(stdout, "error: open big failed!\n"); - 7ee: 51 push %ecx - 7ef: 51 push %ecx - 7f0: 68 c5 3f 00 00 push $0x3fc5 - 7f5: ff 35 58 5e 00 00 push 0x5e58 - 7fb: e8 40 32 00 00 call 3a40 - exit(); - 800: e8 ce 30 00 00 call 38d3 - printf(stdout, "error: creat big failed!\n"); - 805: 50 push %eax - 806: 50 push %eax - 807: 68 8d 3f 00 00 push $0x3f8d - 80c: ff 35 58 5e 00 00 push 0x5e58 - 812: e8 29 32 00 00 call 3a40 - exit(); - 817: e8 b7 30 00 00 call 38d3 - printf(stdout, "unlink big failed\n"); - 81c: 50 push %eax - 81d: 50 push %eax - 81e: 68 0b 40 00 00 push $0x400b - 823: ff 35 58 5e 00 00 push 0x5e58 - 829: e8 12 32 00 00 call 3a40 - exit(); - 82e: e8 a0 30 00 00 call 38d3 - 833: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 83a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -00000840 : -void createtest(void) { - 840: 55 push %ebp - 841: 89 e5 mov %esp,%ebp - 843: 53 push %ebx - name[2] = '\0'; - 844: bb 30 00 00 00 mov $0x30,%ebx -void createtest(void) { - 849: 83 ec 0c sub $0xc,%esp - printf(stdout, "many creates, followed by unlink test\n"); - 84c: 68 18 4e 00 00 push $0x4e18 - 851: ff 35 58 5e 00 00 push 0x5e58 - 857: e8 e4 31 00 00 call 3a40 - name[0] = 'a'; - 85c: c6 05 90 85 00 00 61 movb $0x61,0x8590 - name[2] = '\0'; - 863: 83 c4 10 add $0x10,%esp - 866: c6 05 92 85 00 00 00 movb $0x0,0x8592 - for (i = 0; i < 52; i++) { - 86d: 8d 76 00 lea 0x0(%esi),%esi - fd = open(name, O_CREATE | O_RDWR); - 870: 83 ec 08 sub $0x8,%esp - name[1] = '0' + i; - 873: 88 1d 91 85 00 00 mov %bl,0x8591 - for (i = 0; i < 52; i++) { - 879: 83 c3 01 add $0x1,%ebx - fd = open(name, O_CREATE | O_RDWR); - 87c: 68 02 02 00 00 push $0x202 - 881: 68 90 85 00 00 push $0x8590 - 886: e8 b0 30 00 00 call 393b - close(fd); - 88b: 89 04 24 mov %eax,(%esp) - 88e: e8 d8 30 00 00 call 396b - for (i = 0; i < 52; i++) { - 893: 83 c4 10 add $0x10,%esp - 896: 80 fb 64 cmp $0x64,%bl - 899: 75 d5 jne 870 - name[0] = 'a'; - 89b: c6 05 90 85 00 00 61 movb $0x61,0x8590 - name[2] = '\0'; - 8a2: bb 30 00 00 00 mov $0x30,%ebx - 8a7: c6 05 92 85 00 00 00 movb $0x0,0x8592 - for (i = 0; i < 52; i++) { - 8ae: 66 90 xchg %ax,%ax - unlink(name); - 8b0: 83 ec 0c sub $0xc,%esp - name[1] = '0' + i; - 8b3: 88 1d 91 85 00 00 mov %bl,0x8591 - for (i = 0; i < 52; i++) { - 8b9: 83 c3 01 add $0x1,%ebx - unlink(name); - 8bc: 68 90 85 00 00 push $0x8590 - 8c1: e8 8d 30 00 00 call 3953 - for (i = 0; i < 52; i++) { - 8c6: 83 c4 10 add $0x10,%esp - 8c9: 80 fb 64 cmp $0x64,%bl - 8cc: 75 e2 jne 8b0 - printf(stdout, "many creates, followed by unlink; ok\n"); - 8ce: 83 ec 08 sub $0x8,%esp - 8d1: 68 40 4e 00 00 push $0x4e40 - 8d6: ff 35 58 5e 00 00 push 0x5e58 - 8dc: e8 5f 31 00 00 call 3a40 -} - 8e1: 8b 5d fc mov -0x4(%ebp),%ebx - 8e4: 83 c4 10 add $0x10,%esp - 8e7: c9 leave - 8e8: c3 ret - 8e9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -000008f0 : -void dirtest(void){ - 8f0: 55 push %ebp - 8f1: 89 e5 mov %esp,%ebp - 8f3: 83 ec 10 sub $0x10,%esp - printf(stdout, "mkdir test\n"); - 8f6: 68 2c 40 00 00 push $0x402c - 8fb: ff 35 58 5e 00 00 push 0x5e58 - 901: e8 3a 31 00 00 call 3a40 - if (mkdir("dir0") < 0) { - 906: c7 04 24 38 40 00 00 movl $0x4038,(%esp) - 90d: e8 51 30 00 00 call 3963 - 912: 83 c4 10 add $0x10,%esp - 915: 85 c0 test %eax,%eax - 917: 78 58 js 971 - if (chdir("dir0") < 0) { - 919: 83 ec 0c sub $0xc,%esp - 91c: 68 38 40 00 00 push $0x4038 - 921: e8 e5 2f 00 00 call 390b - 926: 83 c4 10 add $0x10,%esp - 929: 85 c0 test %eax,%eax - 92b: 0f 88 85 00 00 00 js 9b6 - if (chdir("..") < 0) { - 931: 83 ec 0c sub $0xc,%esp - 934: 68 dd 45 00 00 push $0x45dd - 939: e8 cd 2f 00 00 call 390b - 93e: 83 c4 10 add $0x10,%esp - 941: 85 c0 test %eax,%eax - 943: 78 5a js 99f - if (unlink("dir0") < 0) { - 945: 83 ec 0c sub $0xc,%esp - 948: 68 38 40 00 00 push $0x4038 - 94d: e8 01 30 00 00 call 3953 - 952: 83 c4 10 add $0x10,%esp - 955: 85 c0 test %eax,%eax - 957: 78 2f js 988 - printf(stdout, "mkdir test ok\n"); - 959: 83 ec 08 sub $0x8,%esp - 95c: 68 75 40 00 00 push $0x4075 - 961: ff 35 58 5e 00 00 push 0x5e58 - 967: e8 d4 30 00 00 call 3a40 -} - 96c: 83 c4 10 add $0x10,%esp - 96f: c9 leave - 970: c3 ret - printf(stdout, "mkdir failed\n"); - 971: 50 push %eax - 972: 50 push %eax - 973: 68 68 3d 00 00 push $0x3d68 - 978: ff 35 58 5e 00 00 push 0x5e58 - 97e: e8 bd 30 00 00 call 3a40 - exit(); - 983: e8 4b 2f 00 00 call 38d3 - printf(stdout, "unlink dir0 failed\n"); - 988: 50 push %eax - 989: 50 push %eax - 98a: 68 61 40 00 00 push $0x4061 - 98f: ff 35 58 5e 00 00 push 0x5e58 - 995: e8 a6 30 00 00 call 3a40 - exit(); - 99a: e8 34 2f 00 00 call 38d3 - printf(stdout, "chdir .. failed\n"); - 99f: 52 push %edx - 9a0: 52 push %edx - 9a1: 68 50 40 00 00 push $0x4050 - 9a6: ff 35 58 5e 00 00 push 0x5e58 - 9ac: e8 8f 30 00 00 call 3a40 - exit(); - 9b1: e8 1d 2f 00 00 call 38d3 - printf(stdout, "chdir dir0 failed\n"); - 9b6: 51 push %ecx - 9b7: 51 push %ecx - 9b8: 68 3d 40 00 00 push $0x403d - 9bd: ff 35 58 5e 00 00 push 0x5e58 - 9c3: e8 78 30 00 00 call 3a40 - exit(); - 9c8: e8 06 2f 00 00 call 38d3 - 9cd: 8d 76 00 lea 0x0(%esi),%esi - -000009d0 : -void exectest(void) { - 9d0: 55 push %ebp - 9d1: 89 e5 mov %esp,%ebp - 9d3: 83 ec 10 sub $0x10,%esp - printf(stdout, "exec test\n"); - 9d6: 68 84 40 00 00 push $0x4084 - 9db: ff 35 58 5e 00 00 push 0x5e58 - 9e1: e8 5a 30 00 00 call 3a40 - if (exec("echo", echoargv) < 0) { - 9e6: 5a pop %edx - 9e7: 59 pop %ecx - 9e8: 68 5c 5e 00 00 push $0x5e5c - 9ed: 68 4d 3e 00 00 push $0x3e4d - 9f2: e8 04 2f 00 00 call 38fb - 9f7: 83 c4 10 add $0x10,%esp - 9fa: 85 c0 test %eax,%eax - 9fc: 78 02 js a00 -} - 9fe: c9 leave - 9ff: c3 ret - printf(stdout, "exec echo failed\n"); - a00: 50 push %eax - a01: 50 push %eax - a02: 68 8f 40 00 00 push $0x408f - a07: ff 35 58 5e 00 00 push 0x5e58 - a0d: e8 2e 30 00 00 call 3a40 - exit(); - a12: e8 bc 2e 00 00 call 38d3 - a17: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - a1e: 66 90 xchg %ax,%ax - -00000a20 : -void pipe1(void) { - a20: 55 push %ebp - a21: 89 e5 mov %esp,%ebp - a23: 57 push %edi - a24: 56 push %esi - if (pipe(fds) != 0) { - a25: 8d 45 e0 lea -0x20(%ebp),%eax -void pipe1(void) { - a28: 53 push %ebx - a29: 83 ec 38 sub $0x38,%esp - if (pipe(fds) != 0) { - a2c: 50 push %eax - a2d: e8 b1 2e 00 00 call 38e3 - a32: 83 c4 10 add $0x10,%esp - a35: 85 c0 test %eax,%eax - a37: 0f 85 34 01 00 00 jne b71 - pid = fork(); - a3d: e8 89 2e 00 00 call 38cb - if (pid == 0) { - a42: 85 c0 test %eax,%eax - a44: 0f 84 85 00 00 00 je acf - else if (pid > 0) { - a4a: 0f 8e 34 01 00 00 jle b84 - close(fds[1]); - a50: 83 ec 0c sub $0xc,%esp - a53: ff 75 e4 push -0x1c(%ebp) - seq = 0; - a56: 31 db xor %ebx,%ebx - cc = 1; - a58: be 01 00 00 00 mov $0x1,%esi - close(fds[1]); - a5d: e8 09 2f 00 00 call 396b - total = 0; - a62: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp) - while ((n = read(fds[0], buf, cc)) > 0) { - a69: 83 c4 10 add $0x10,%esp - a6c: 83 ec 04 sub $0x4,%esp - a6f: 56 push %esi - a70: 68 a0 85 00 00 push $0x85a0 - a75: ff 75 e0 push -0x20(%ebp) - a78: e8 6e 2e 00 00 call 38eb - a7d: 83 c4 10 add $0x10,%esp - a80: 89 c7 mov %eax,%edi - a82: 85 c0 test %eax,%eax - a84: 0f 8e a3 00 00 00 jle b2d - a8a: 8d 0c 1f lea (%edi,%ebx,1),%ecx - for (i = 0; i < n; i++) { - a8d: 31 c0 xor %eax,%eax - a8f: 90 nop - if ((buf[i] & 0xff) != (seq++ & 0xff)) { - a90: 89 da mov %ebx,%edx - a92: 83 c3 01 add $0x1,%ebx - a95: 38 90 a0 85 00 00 cmp %dl,0x85a0(%eax) - a9b: 75 18 jne ab5 - for (i = 0; i < n; i++) { - a9d: 83 c0 01 add $0x1,%eax - aa0: 39 d9 cmp %ebx,%ecx - aa2: 75 ec jne a90 - cc = cc * 2; - aa4: 01 f6 add %esi,%esi - aa6: b8 00 20 00 00 mov $0x2000,%eax - total += n; - aab: 01 7d d4 add %edi,-0x2c(%ebp) - aae: 39 c6 cmp %eax,%esi - ab0: 0f 4f f0 cmovg %eax,%esi - ab3: eb b7 jmp a6c - printf(1, "pipe1 oops 2\n"); - ab5: 83 ec 08 sub $0x8,%esp - ab8: 68 be 40 00 00 push $0x40be - abd: 6a 01 push $0x1 - abf: e8 7c 2f 00 00 call 3a40 - ac4: 83 c4 10 add $0x10,%esp -} - ac7: 8d 65 f4 lea -0xc(%ebp),%esp - aca: 5b pop %ebx - acb: 5e pop %esi - acc: 5f pop %edi - acd: 5d pop %ebp - ace: c3 ret - close(fds[0]); - acf: 83 ec 0c sub $0xc,%esp - ad2: ff 75 e0 push -0x20(%ebp) - seq = 0; - ad5: 31 db xor %ebx,%ebx - close(fds[0]); - ad7: e8 8f 2e 00 00 call 396b - adc: 83 c4 10 add $0x10,%esp - for (i = 0; i < 1033; i++) { - adf: 31 c0 xor %eax,%eax - ae1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - buf[i] = seq++; - ae8: 8d 14 18 lea (%eax,%ebx,1),%edx - for (i = 0; i < 1033; i++) { - aeb: 83 c0 01 add $0x1,%eax - buf[i] = seq++; - aee: 88 90 9f 85 00 00 mov %dl,0x859f(%eax) - for (i = 0; i < 1033; i++) { - af4: 3d 09 04 00 00 cmp $0x409,%eax - af9: 75 ed jne ae8 - if (write(fds[1], buf, 1033) != 1033) { - afb: 83 ec 04 sub $0x4,%esp - buf[i] = seq++; - afe: 81 c3 09 04 00 00 add $0x409,%ebx - if (write(fds[1], buf, 1033) != 1033) { - b04: 68 09 04 00 00 push $0x409 - b09: 68 a0 85 00 00 push $0x85a0 - b0e: ff 75 e4 push -0x1c(%ebp) - b11: e8 2d 2e 00 00 call 3943 - b16: 83 c4 10 add $0x10,%esp - b19: 3d 09 04 00 00 cmp $0x409,%eax - b1e: 75 77 jne b97 - for (n = 0; n < 5; n++) { - b20: 81 fb 2d 14 00 00 cmp $0x142d,%ebx - b26: 75 b7 jne adf - exit(); - b28: e8 a6 2d 00 00 call 38d3 - if (total != 5 * 1033) { - b2d: 81 7d d4 2d 14 00 00 cmpl $0x142d,-0x2c(%ebp) - b34: 75 26 jne b5c - close(fds[0]); - b36: 83 ec 0c sub $0xc,%esp - b39: ff 75 e0 push -0x20(%ebp) - b3c: e8 2a 2e 00 00 call 396b - wait(); - b41: e8 95 2d 00 00 call 38db - printf(1, "pipe1 ok\n"); - b46: 5a pop %edx - b47: 59 pop %ecx - b48: 68 e3 40 00 00 push $0x40e3 - b4d: 6a 01 push $0x1 - b4f: e8 ec 2e 00 00 call 3a40 - b54: 83 c4 10 add $0x10,%esp - b57: e9 6b ff ff ff jmp ac7 - printf(1, "pipe1 oops 3 total %d\n", total); - b5c: 53 push %ebx - b5d: ff 75 d4 push -0x2c(%ebp) - b60: 68 cc 40 00 00 push $0x40cc - b65: 6a 01 push $0x1 - b67: e8 d4 2e 00 00 call 3a40 - exit(); - b6c: e8 62 2d 00 00 call 38d3 - printf(1, "pipe() failed\n"); - b71: 57 push %edi - b72: 57 push %edi - b73: 68 a1 40 00 00 push $0x40a1 - b78: 6a 01 push $0x1 - b7a: e8 c1 2e 00 00 call 3a40 - exit(); - b7f: e8 4f 2d 00 00 call 38d3 - printf(1, "fork() failed\n"); - b84: 50 push %eax - b85: 50 push %eax - b86: 68 ed 40 00 00 push $0x40ed - b8b: 6a 01 push $0x1 - b8d: e8 ae 2e 00 00 call 3a40 - exit(); - b92: e8 3c 2d 00 00 call 38d3 - printf(1, "pipe1 oops 1\n"); - b97: 56 push %esi - b98: 56 push %esi - b99: 68 b0 40 00 00 push $0x40b0 - b9e: 6a 01 push $0x1 - ba0: e8 9b 2e 00 00 call 3a40 - exit(); - ba5: e8 29 2d 00 00 call 38d3 - baa: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -00000bb0 : -void preempt(void) { - bb0: 55 push %ebp - bb1: 89 e5 mov %esp,%ebp - bb3: 57 push %edi - bb4: 56 push %esi - bb5: 53 push %ebx - bb6: 83 ec 24 sub $0x24,%esp - printf(1, "preempt: "); - bb9: 68 fc 40 00 00 push $0x40fc - bbe: 6a 01 push $0x1 - bc0: e8 7b 2e 00 00 call 3a40 - pid1 = fork(); - bc5: e8 01 2d 00 00 call 38cb - if (pid1 == 0) { - bca: 83 c4 10 add $0x10,%esp - bcd: 85 c0 test %eax,%eax - bcf: 75 07 jne bd8 - for (;;) { - bd1: eb fe jmp bd1 - bd3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - bd7: 90 nop - bd8: 89 c3 mov %eax,%ebx - pid2 = fork(); - bda: e8 ec 2c 00 00 call 38cb - bdf: 89 c6 mov %eax,%esi - if (pid2 == 0) { - be1: 85 c0 test %eax,%eax - be3: 75 0b jne bf0 - for (;;) { - be5: eb fe jmp be5 - be7: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - bee: 66 90 xchg %ax,%ax - pipe(pfds); - bf0: 83 ec 0c sub $0xc,%esp - bf3: 8d 45 e0 lea -0x20(%ebp),%eax - bf6: 50 push %eax - bf7: e8 e7 2c 00 00 call 38e3 - pid3 = fork(); - bfc: e8 ca 2c 00 00 call 38cb - if (pid3 == 0) { - c01: 83 c4 10 add $0x10,%esp - pid3 = fork(); - c04: 89 c7 mov %eax,%edi - if (pid3 == 0) { - c06: 85 c0 test %eax,%eax - c08: 75 3e jne c48 - close(pfds[0]); - c0a: 83 ec 0c sub $0xc,%esp - c0d: ff 75 e0 push -0x20(%ebp) - c10: e8 56 2d 00 00 call 396b - if (write(pfds[1], "x", 1) != 1) { - c15: 83 c4 0c add $0xc,%esp - c18: 6a 01 push $0x1 - c1a: 68 c1 46 00 00 push $0x46c1 - c1f: ff 75 e4 push -0x1c(%ebp) - c22: e8 1c 2d 00 00 call 3943 - c27: 83 c4 10 add $0x10,%esp - c2a: 83 f8 01 cmp $0x1,%eax - c2d: 0f 85 b8 00 00 00 jne ceb - close(pfds[1]); - c33: 83 ec 0c sub $0xc,%esp - c36: ff 75 e4 push -0x1c(%ebp) - c39: e8 2d 2d 00 00 call 396b - c3e: 83 c4 10 add $0x10,%esp - for (;;) { - c41: eb fe jmp c41 - c43: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - c47: 90 nop - close(pfds[1]); - c48: 83 ec 0c sub $0xc,%esp - c4b: ff 75 e4 push -0x1c(%ebp) - c4e: e8 18 2d 00 00 call 396b - if (read(pfds[0], buf, sizeof(buf)) != 1) { - c53: 83 c4 0c add $0xc,%esp - c56: 68 00 20 00 00 push $0x2000 - c5b: 68 a0 85 00 00 push $0x85a0 - c60: ff 75 e0 push -0x20(%ebp) - c63: e8 83 2c 00 00 call 38eb - c68: 83 c4 10 add $0x10,%esp - c6b: 83 f8 01 cmp $0x1,%eax - c6e: 75 67 jne cd7 - close(pfds[0]); - c70: 83 ec 0c sub $0xc,%esp - c73: ff 75 e0 push -0x20(%ebp) - c76: e8 f0 2c 00 00 call 396b - printf(1, "kill... "); - c7b: 58 pop %eax - c7c: 5a pop %edx - c7d: 68 2d 41 00 00 push $0x412d - c82: 6a 01 push $0x1 - c84: e8 b7 2d 00 00 call 3a40 - kill(pid1); - c89: 89 1c 24 mov %ebx,(%esp) - c8c: e8 62 2c 00 00 call 38f3 - kill(pid2); - c91: 89 34 24 mov %esi,(%esp) - c94: e8 5a 2c 00 00 call 38f3 - kill(pid3); - c99: 89 3c 24 mov %edi,(%esp) - c9c: e8 52 2c 00 00 call 38f3 - printf(1, "wait... "); - ca1: 59 pop %ecx - ca2: 5b pop %ebx - ca3: 68 36 41 00 00 push $0x4136 - ca8: 6a 01 push $0x1 - caa: e8 91 2d 00 00 call 3a40 - wait(); - caf: e8 27 2c 00 00 call 38db - wait(); - cb4: e8 22 2c 00 00 call 38db - wait(); - cb9: e8 1d 2c 00 00 call 38db - printf(1, "preempt ok\n"); - cbe: 5e pop %esi - cbf: 5f pop %edi - cc0: 68 3f 41 00 00 push $0x413f - cc5: 6a 01 push $0x1 - cc7: e8 74 2d 00 00 call 3a40 - ccc: 83 c4 10 add $0x10,%esp -} - ccf: 8d 65 f4 lea -0xc(%ebp),%esp - cd2: 5b pop %ebx - cd3: 5e pop %esi - cd4: 5f pop %edi - cd5: 5d pop %ebp - cd6: c3 ret - printf(1, "preempt read error"); - cd7: 83 ec 08 sub $0x8,%esp - cda: 68 1a 41 00 00 push $0x411a - cdf: 6a 01 push $0x1 - ce1: e8 5a 2d 00 00 call 3a40 - ce6: 83 c4 10 add $0x10,%esp - ce9: eb e4 jmp ccf - printf(1, "preempt write error"); - ceb: 83 ec 08 sub $0x8,%esp - cee: 68 06 41 00 00 push $0x4106 - cf3: 6a 01 push $0x1 - cf5: e8 46 2d 00 00 call 3a40 - cfa: 83 c4 10 add $0x10,%esp - cfd: e9 31 ff ff ff jmp c33 - d02: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - d09: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -00000d10 : -void exitwait(void) { - d10: 55 push %ebp - d11: 89 e5 mov %esp,%ebp - d13: 56 push %esi - d14: be 64 00 00 00 mov $0x64,%esi - d19: 53 push %ebx - d1a: eb 14 jmp d30 - d1c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - if (pid) { - d20: 74 68 je d8a - if (wait() != pid) { - d22: e8 b4 2b 00 00 call 38db - d27: 39 d8 cmp %ebx,%eax - d29: 75 2d jne d58 - for (i = 0; i < 100; i++) { - d2b: 83 ee 01 sub $0x1,%esi - d2e: 74 41 je d71 - pid = fork(); - d30: e8 96 2b 00 00 call 38cb - d35: 89 c3 mov %eax,%ebx - if (pid < 0) { - d37: 85 c0 test %eax,%eax - d39: 79 e5 jns d20 - printf(1, "fork failed\n"); - d3b: 83 ec 08 sub $0x8,%esp - d3e: 68 a9 4c 00 00 push $0x4ca9 - d43: 6a 01 push $0x1 - d45: e8 f6 2c 00 00 call 3a40 - return; - d4a: 83 c4 10 add $0x10,%esp -} - d4d: 8d 65 f8 lea -0x8(%ebp),%esp - d50: 5b pop %ebx - d51: 5e pop %esi - d52: 5d pop %ebp - d53: c3 ret - d54: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - printf(1, "wait wrong pid\n"); - d58: 83 ec 08 sub $0x8,%esp - d5b: 68 4b 41 00 00 push $0x414b - d60: 6a 01 push $0x1 - d62: e8 d9 2c 00 00 call 3a40 - return; - d67: 83 c4 10 add $0x10,%esp -} - d6a: 8d 65 f8 lea -0x8(%ebp),%esp - d6d: 5b pop %ebx - d6e: 5e pop %esi - d6f: 5d pop %ebp - d70: c3 ret - printf(1, "exitwait ok\n"); - d71: 83 ec 08 sub $0x8,%esp - d74: 68 5b 41 00 00 push $0x415b - d79: 6a 01 push $0x1 - d7b: e8 c0 2c 00 00 call 3a40 - d80: 83 c4 10 add $0x10,%esp -} - d83: 8d 65 f8 lea -0x8(%ebp),%esp - d86: 5b pop %ebx - d87: 5e pop %esi - d88: 5d pop %ebp - d89: c3 ret - exit(); - d8a: e8 44 2b 00 00 call 38d3 - d8f: 90 nop - -00000d90 : -void mem(void) { - d90: 55 push %ebp - d91: 89 e5 mov %esp,%ebp - d93: 56 push %esi - d94: 31 f6 xor %esi,%esi - d96: 53 push %ebx - printf(1, "mem test\n"); - d97: 83 ec 08 sub $0x8,%esp - d9a: 68 68 41 00 00 push $0x4168 - d9f: 6a 01 push $0x1 - da1: e8 9a 2c 00 00 call 3a40 - ppid = getpid(); - da6: e8 70 2b 00 00 call 391b - dab: 89 c3 mov %eax,%ebx - if ((pid = fork()) == 0) { - dad: e8 19 2b 00 00 call 38cb - db2: 83 c4 10 add $0x10,%esp - db5: 85 c0 test %eax,%eax - db7: 74 0b je dc4 - db9: e9 8a 00 00 00 jmp e48 - dbe: 66 90 xchg %ax,%ax - *(char**)m2 = m1; - dc0: 89 30 mov %esi,(%eax) - dc2: 89 c6 mov %eax,%esi - while ((m2 = malloc(10001)) != 0) { - dc4: 83 ec 0c sub $0xc,%esp - dc7: 68 11 27 00 00 push $0x2711 - dcc: e8 9f 2e 00 00 call 3c70 - dd1: 83 c4 10 add $0x10,%esp - dd4: 85 c0 test %eax,%eax - dd6: 75 e8 jne dc0 - while (m1) { - dd8: 85 f6 test %esi,%esi - dda: 74 18 je df4 - ddc: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - m2 = *(char**)m1; - de0: 89 f0 mov %esi,%eax - free(m1); - de2: 83 ec 0c sub $0xc,%esp - m2 = *(char**)m1; - de5: 8b 36 mov (%esi),%esi - free(m1); - de7: 50 push %eax - de8: e8 f3 2d 00 00 call 3be0 - while (m1) { - ded: 83 c4 10 add $0x10,%esp - df0: 85 f6 test %esi,%esi - df2: 75 ec jne de0 - m1 = malloc(1024 * 20); - df4: 83 ec 0c sub $0xc,%esp - df7: 68 00 50 00 00 push $0x5000 - dfc: e8 6f 2e 00 00 call 3c70 - if (m1 == 0) { - e01: 83 c4 10 add $0x10,%esp - e04: 85 c0 test %eax,%eax - e06: 74 20 je e28 - free(m1); - e08: 83 ec 0c sub $0xc,%esp - e0b: 50 push %eax - e0c: e8 cf 2d 00 00 call 3be0 - printf(1, "mem ok\n"); - e11: 58 pop %eax - e12: 5a pop %edx - e13: 68 8c 41 00 00 push $0x418c - e18: 6a 01 push $0x1 - e1a: e8 21 2c 00 00 call 3a40 - exit(); - e1f: e8 af 2a 00 00 call 38d3 - e24: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - printf(1, "couldn't allocate mem?!!\n"); - e28: 83 ec 08 sub $0x8,%esp - e2b: 68 72 41 00 00 push $0x4172 - e30: 6a 01 push $0x1 - e32: e8 09 2c 00 00 call 3a40 - kill(ppid); - e37: 89 1c 24 mov %ebx,(%esp) - e3a: e8 b4 2a 00 00 call 38f3 - exit(); - e3f: e8 8f 2a 00 00 call 38d3 - e44: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi -} - e48: 8d 65 f8 lea -0x8(%ebp),%esp - e4b: 5b pop %ebx - e4c: 5e pop %esi - e4d: 5d pop %ebp - wait(); - e4e: e9 88 2a 00 00 jmp 38db - e53: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - e5a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -00000e60 : -void sharedfd(void) { - e60: 55 push %ebp - e61: 89 e5 mov %esp,%ebp - e63: 57 push %edi - e64: 56 push %esi - e65: 53 push %ebx - e66: 83 ec 34 sub $0x34,%esp - printf(1, "sharedfd test\n"); - e69: 68 94 41 00 00 push $0x4194 - e6e: 6a 01 push $0x1 - e70: e8 cb 2b 00 00 call 3a40 - unlink("sharedfd"); - e75: c7 04 24 a3 41 00 00 movl $0x41a3,(%esp) - e7c: e8 d2 2a 00 00 call 3953 - fd = open("sharedfd", O_CREATE | O_RDWR); - e81: 5b pop %ebx - e82: 5e pop %esi - e83: 68 02 02 00 00 push $0x202 - e88: 68 a3 41 00 00 push $0x41a3 - e8d: e8 a9 2a 00 00 call 393b - if (fd < 0) { - e92: 83 c4 10 add $0x10,%esp - e95: 85 c0 test %eax,%eax - e97: 0f 88 2a 01 00 00 js fc7 - e9d: 89 c7 mov %eax,%edi - memset(buf, pid == 0 ? 'c' : 'p', sizeof(buf)); - e9f: 8d 75 de lea -0x22(%ebp),%esi - ea2: bb e8 03 00 00 mov $0x3e8,%ebx - pid = fork(); - ea7: e8 1f 2a 00 00 call 38cb - memset(buf, pid == 0 ? 'c' : 'p', sizeof(buf)); - eac: 83 f8 01 cmp $0x1,%eax - pid = fork(); - eaf: 89 45 d4 mov %eax,-0x2c(%ebp) - memset(buf, pid == 0 ? 'c' : 'p', sizeof(buf)); - eb2: 19 c0 sbb %eax,%eax - eb4: 83 ec 04 sub $0x4,%esp - eb7: 83 e0 f3 and $0xfffffff3,%eax - eba: 6a 0a push $0xa - ebc: 83 c0 70 add $0x70,%eax - ebf: 50 push %eax - ec0: 56 push %esi - ec1: e8 7a 28 00 00 call 3740 - ec6: 83 c4 10 add $0x10,%esp - ec9: eb 0a jmp ed5 - ecb: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - ecf: 90 nop - for (i = 0; i < 1000; i++) { - ed0: 83 eb 01 sub $0x1,%ebx - ed3: 74 26 je efb - if (write(fd, buf, sizeof(buf)) != sizeof(buf)) { - ed5: 83 ec 04 sub $0x4,%esp - ed8: 6a 0a push $0xa - eda: 56 push %esi - edb: 57 push %edi - edc: e8 62 2a 00 00 call 3943 - ee1: 83 c4 10 add $0x10,%esp - ee4: 83 f8 0a cmp $0xa,%eax - ee7: 74 e7 je ed0 - printf(1, "fstests: write sharedfd failed\n"); - ee9: 83 ec 08 sub $0x8,%esp - eec: 68 94 4e 00 00 push $0x4e94 - ef1: 6a 01 push $0x1 - ef3: e8 48 2b 00 00 call 3a40 - break; - ef8: 83 c4 10 add $0x10,%esp - if (pid == 0) { - efb: 8b 4d d4 mov -0x2c(%ebp),%ecx - efe: 85 c9 test %ecx,%ecx - f00: 0f 84 f5 00 00 00 je ffb - wait(); - f06: e8 d0 29 00 00 call 38db - close(fd); - f0b: 83 ec 0c sub $0xc,%esp - nc = np = 0; - f0e: 31 db xor %ebx,%ebx - close(fd); - f10: 57 push %edi - f11: 8d 7d e8 lea -0x18(%ebp),%edi - f14: e8 52 2a 00 00 call 396b - fd = open("sharedfd", 0); - f19: 58 pop %eax - f1a: 5a pop %edx - f1b: 6a 00 push $0x0 - f1d: 68 a3 41 00 00 push $0x41a3 - f22: e8 14 2a 00 00 call 393b - if (fd < 0) { - f27: 83 c4 10 add $0x10,%esp - nc = np = 0; - f2a: 31 d2 xor %edx,%edx - fd = open("sharedfd", 0); - f2c: 89 45 d0 mov %eax,-0x30(%ebp) - if (fd < 0) { - f2f: 85 c0 test %eax,%eax - f31: 0f 88 aa 00 00 00 js fe1 - f37: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - f3e: 66 90 xchg %ax,%ax - while ((n = read(fd, buf, sizeof(buf))) > 0) { - f40: 83 ec 04 sub $0x4,%esp - f43: 89 55 d4 mov %edx,-0x2c(%ebp) - f46: 6a 0a push $0xa - f48: 56 push %esi - f49: ff 75 d0 push -0x30(%ebp) - f4c: e8 9a 29 00 00 call 38eb - f51: 83 c4 10 add $0x10,%esp - f54: 85 c0 test %eax,%eax - f56: 7e 28 jle f80 - f58: 8b 55 d4 mov -0x2c(%ebp),%edx - f5b: 89 f0 mov %esi,%eax - f5d: eb 13 jmp f72 - f5f: 90 nop - np++; - f60: 80 f9 70 cmp $0x70,%cl - f63: 0f 94 c1 sete %cl - f66: 0f b6 c9 movzbl %cl,%ecx - f69: 01 cb add %ecx,%ebx - for (i = 0; i < sizeof(buf); i++) { - f6b: 83 c0 01 add $0x1,%eax - f6e: 39 f8 cmp %edi,%eax - f70: 74 ce je f40 - if (buf[i] == 'c') { - f72: 0f b6 08 movzbl (%eax),%ecx - f75: 80 f9 63 cmp $0x63,%cl - f78: 75 e6 jne f60 - nc++; - f7a: 83 c2 01 add $0x1,%edx - if (buf[i] == 'p') { - f7d: eb ec jmp f6b - f7f: 90 nop - close(fd); - f80: 83 ec 0c sub $0xc,%esp - f83: ff 75 d0 push -0x30(%ebp) - f86: e8 e0 29 00 00 call 396b - unlink("sharedfd"); - f8b: c7 04 24 a3 41 00 00 movl $0x41a3,(%esp) - f92: e8 bc 29 00 00 call 3953 - if (nc == 10000 && np == 10000) { - f97: 8b 55 d4 mov -0x2c(%ebp),%edx - f9a: 83 c4 10 add $0x10,%esp - f9d: 81 fa 10 27 00 00 cmp $0x2710,%edx - fa3: 75 5b jne 1000 - fa5: 81 fb 10 27 00 00 cmp $0x2710,%ebx - fab: 75 53 jne 1000 - printf(1, "sharedfd ok\n"); - fad: 83 ec 08 sub $0x8,%esp - fb0: 68 ac 41 00 00 push $0x41ac - fb5: 6a 01 push $0x1 - fb7: e8 84 2a 00 00 call 3a40 - fbc: 83 c4 10 add $0x10,%esp -} - fbf: 8d 65 f4 lea -0xc(%ebp),%esp - fc2: 5b pop %ebx - fc3: 5e pop %esi - fc4: 5f pop %edi - fc5: 5d pop %ebp - fc6: c3 ret - printf(1, "fstests: cannot open sharedfd for writing"); - fc7: 83 ec 08 sub $0x8,%esp - fca: 68 68 4e 00 00 push $0x4e68 - fcf: 6a 01 push $0x1 - fd1: e8 6a 2a 00 00 call 3a40 - return; - fd6: 83 c4 10 add $0x10,%esp -} - fd9: 8d 65 f4 lea -0xc(%ebp),%esp - fdc: 5b pop %ebx - fdd: 5e pop %esi - fde: 5f pop %edi - fdf: 5d pop %ebp - fe0: c3 ret - printf(1, "fstests: cannot open sharedfd for reading\n"); - fe1: 83 ec 08 sub $0x8,%esp - fe4: 68 b4 4e 00 00 push $0x4eb4 - fe9: 6a 01 push $0x1 - feb: e8 50 2a 00 00 call 3a40 - return; - ff0: 83 c4 10 add $0x10,%esp -} - ff3: 8d 65 f4 lea -0xc(%ebp),%esp - ff6: 5b pop %ebx - ff7: 5e pop %esi - ff8: 5f pop %edi - ff9: 5d pop %ebp - ffa: c3 ret - exit(); - ffb: e8 d3 28 00 00 call 38d3 - printf(1, "sharedfd oops %d %d\n", nc, np); - 1000: 53 push %ebx - 1001: 52 push %edx - 1002: 68 b9 41 00 00 push $0x41b9 - 1007: 6a 01 push $0x1 - 1009: e8 32 2a 00 00 call 3a40 - exit(); - 100e: e8 c0 28 00 00 call 38d3 - 1013: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 101a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -00001020 : -void fourfiles(void) { - 1020: 55 push %ebp - 1021: 89 e5 mov %esp,%ebp - 1023: 57 push %edi - 1024: 56 push %esi - printf(1, "fourfiles test\n"); - 1025: be ce 41 00 00 mov $0x41ce,%esi -void fourfiles(void) { - 102a: 53 push %ebx - for (pi = 0; pi < 4; pi++) { - 102b: 31 db xor %ebx,%ebx -void fourfiles(void) { - 102d: 83 ec 34 sub $0x34,%esp - char *names[] = { "f0", "f1", "f2", "f3" }; - 1030: c7 45 d8 ce 41 00 00 movl $0x41ce,-0x28(%ebp) - printf(1, "fourfiles test\n"); - 1037: 68 d4 41 00 00 push $0x41d4 - 103c: 6a 01 push $0x1 - char *names[] = { "f0", "f1", "f2", "f3" }; - 103e: c7 45 dc 17 43 00 00 movl $0x4317,-0x24(%ebp) - 1045: c7 45 e0 1b 43 00 00 movl $0x431b,-0x20(%ebp) - 104c: c7 45 e4 d1 41 00 00 movl $0x41d1,-0x1c(%ebp) - printf(1, "fourfiles test\n"); - 1053: e8 e8 29 00 00 call 3a40 - 1058: 83 c4 10 add $0x10,%esp - unlink(fname); - 105b: 83 ec 0c sub $0xc,%esp - 105e: 56 push %esi - 105f: e8 ef 28 00 00 call 3953 - pid = fork(); - 1064: e8 62 28 00 00 call 38cb - if (pid < 0) { - 1069: 83 c4 10 add $0x10,%esp - 106c: 85 c0 test %eax,%eax - 106e: 0f 88 64 01 00 00 js 11d8 - if (pid == 0) { - 1074: 0f 84 e9 00 00 00 je 1163 - for (pi = 0; pi < 4; pi++) { - 107a: 83 c3 01 add $0x1,%ebx - 107d: 83 fb 04 cmp $0x4,%ebx - 1080: 74 06 je 1088 - fname = names[pi]; - 1082: 8b 74 9d d8 mov -0x28(%ebp,%ebx,4),%esi - 1086: eb d3 jmp 105b - wait(); - 1088: e8 4e 28 00 00 call 38db - for (i = 0; i < 2; i++) { - 108d: 31 f6 xor %esi,%esi - wait(); - 108f: e8 47 28 00 00 call 38db - 1094: e8 42 28 00 00 call 38db - 1099: e8 3d 28 00 00 call 38db - fname = names[i]; - 109e: 8b 44 b5 d8 mov -0x28(%ebp,%esi,4),%eax - fd = open(fname, 0); - 10a2: 83 ec 08 sub $0x8,%esp - total = 0; - 10a5: 31 db xor %ebx,%ebx - fd = open(fname, 0); - 10a7: 6a 00 push $0x0 - 10a9: 50 push %eax - fname = names[i]; - 10aa: 89 45 d0 mov %eax,-0x30(%ebp) - fd = open(fname, 0); - 10ad: e8 89 28 00 00 call 393b - while ((n = read(fd, buf, sizeof(buf))) > 0) { - 10b2: 83 c4 10 add $0x10,%esp - fd = open(fname, 0); - 10b5: 89 45 d4 mov %eax,-0x2c(%ebp) - while ((n = read(fd, buf, sizeof(buf))) > 0) { - 10b8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 10bf: 90 nop - 10c0: 83 ec 04 sub $0x4,%esp - 10c3: 68 00 20 00 00 push $0x2000 - 10c8: 68 a0 85 00 00 push $0x85a0 - 10cd: ff 75 d4 push -0x2c(%ebp) - 10d0: e8 16 28 00 00 call 38eb - 10d5: 83 c4 10 add $0x10,%esp - 10d8: 89 c7 mov %eax,%edi - 10da: 85 c0 test %eax,%eax - 10dc: 7e 20 jle 10fe - for (j = 0; j < n; j++) { - 10de: 31 c0 xor %eax,%eax - if (buf[j] != '0' + i) { - 10e0: 83 fe 01 cmp $0x1,%esi - 10e3: 0f be 88 a0 85 00 00 movsbl 0x85a0(%eax),%ecx - 10ea: 19 d2 sbb %edx,%edx - 10ec: 83 c2 31 add $0x31,%edx - 10ef: 39 d1 cmp %edx,%ecx - 10f1: 75 5c jne 114f - for (j = 0; j < n; j++) { - 10f3: 83 c0 01 add $0x1,%eax - 10f6: 39 c7 cmp %eax,%edi - 10f8: 75 e6 jne 10e0 - total += n; - 10fa: 01 fb add %edi,%ebx - 10fc: eb c2 jmp 10c0 - close(fd); - 10fe: 83 ec 0c sub $0xc,%esp - 1101: ff 75 d4 push -0x2c(%ebp) - 1104: e8 62 28 00 00 call 396b - if (total != 12 * 500) { - 1109: 83 c4 10 add $0x10,%esp - 110c: 81 fb 70 17 00 00 cmp $0x1770,%ebx - 1112: 0f 85 d4 00 00 00 jne 11ec - unlink(fname); - 1118: 83 ec 0c sub $0xc,%esp - 111b: ff 75 d0 push -0x30(%ebp) - 111e: e8 30 28 00 00 call 3953 - for (i = 0; i < 2; i++) { - 1123: 83 c4 10 add $0x10,%esp - 1126: 83 fe 01 cmp $0x1,%esi - 1129: 75 1a jne 1145 - printf(1, "fourfiles ok\n"); - 112b: 83 ec 08 sub $0x8,%esp - 112e: 68 12 42 00 00 push $0x4212 - 1133: 6a 01 push $0x1 - 1135: e8 06 29 00 00 call 3a40 -} - 113a: 83 c4 10 add $0x10,%esp - 113d: 8d 65 f4 lea -0xc(%ebp),%esp - 1140: 5b pop %ebx - 1141: 5e pop %esi - 1142: 5f pop %edi - 1143: 5d pop %ebp - 1144: c3 ret - 1145: be 01 00 00 00 mov $0x1,%esi - 114a: e9 4f ff ff ff jmp 109e - printf(1, "wrong char\n"); - 114f: 83 ec 08 sub $0x8,%esp - 1152: 68 f5 41 00 00 push $0x41f5 - 1157: 6a 01 push $0x1 - 1159: e8 e2 28 00 00 call 3a40 - exit(); - 115e: e8 70 27 00 00 call 38d3 - fd = open(fname, O_CREATE | O_RDWR); - 1163: 83 ec 08 sub $0x8,%esp - 1166: 68 02 02 00 00 push $0x202 - 116b: 56 push %esi - 116c: e8 ca 27 00 00 call 393b - if (fd < 0) { - 1171: 83 c4 10 add $0x10,%esp - fd = open(fname, O_CREATE | O_RDWR); - 1174: 89 c6 mov %eax,%esi - if (fd < 0) { - 1176: 85 c0 test %eax,%eax - 1178: 78 45 js 11bf - memset(buf, '0' + pi, 512); - 117a: 83 ec 04 sub $0x4,%esp - 117d: 83 c3 30 add $0x30,%ebx - 1180: 68 00 02 00 00 push $0x200 - 1185: 53 push %ebx - 1186: bb 0c 00 00 00 mov $0xc,%ebx - 118b: 68 a0 85 00 00 push $0x85a0 - 1190: e8 ab 25 00 00 call 3740 - 1195: 83 c4 10 add $0x10,%esp - if ((n = write(fd, buf, 500)) != 500) { - 1198: 83 ec 04 sub $0x4,%esp - 119b: 68 f4 01 00 00 push $0x1f4 - 11a0: 68 a0 85 00 00 push $0x85a0 - 11a5: 56 push %esi - 11a6: e8 98 27 00 00 call 3943 - 11ab: 83 c4 10 add $0x10,%esp - 11ae: 3d f4 01 00 00 cmp $0x1f4,%eax - 11b3: 75 4a jne 11ff - for (i = 0; i < 12; i++) { - 11b5: 83 eb 01 sub $0x1,%ebx - 11b8: 75 de jne 1198 - exit(); - 11ba: e8 14 27 00 00 call 38d3 - printf(1, "create failed\n"); - 11bf: 51 push %ecx - 11c0: 51 push %ecx - 11c1: 68 6f 44 00 00 push $0x446f - 11c6: 6a 01 push $0x1 - 11c8: e8 73 28 00 00 call 3a40 - exit(); - 11cd: e8 01 27 00 00 call 38d3 - 11d2: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - printf(1, "fork failed\n"); - 11d8: 83 ec 08 sub $0x8,%esp - 11db: 68 a9 4c 00 00 push $0x4ca9 - 11e0: 6a 01 push $0x1 - 11e2: e8 59 28 00 00 call 3a40 - exit(); - 11e7: e8 e7 26 00 00 call 38d3 - printf(1, "wrong length %d\n", total); - 11ec: 50 push %eax - 11ed: 53 push %ebx - 11ee: 68 01 42 00 00 push $0x4201 - 11f3: 6a 01 push $0x1 - 11f5: e8 46 28 00 00 call 3a40 - exit(); - 11fa: e8 d4 26 00 00 call 38d3 - printf(1, "write failed %d\n", n); - 11ff: 52 push %edx - 1200: 50 push %eax - 1201: 68 e4 41 00 00 push $0x41e4 - 1206: 6a 01 push $0x1 - 1208: e8 33 28 00 00 call 3a40 - exit(); - 120d: e8 c1 26 00 00 call 38d3 - 1212: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 1219: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -00001220 : -void createdelete(void) { - 1220: 55 push %ebp - 1221: 89 e5 mov %esp,%ebp - 1223: 57 push %edi - 1224: 56 push %esi - 1225: 53 push %ebx - for (pi = 0; pi < 4; pi++) { - 1226: 31 db xor %ebx,%ebx -void createdelete(void) { - 1228: 83 ec 44 sub $0x44,%esp - printf(1, "createdelete test\n"); - 122b: 68 20 42 00 00 push $0x4220 - 1230: 6a 01 push $0x1 - 1232: e8 09 28 00 00 call 3a40 - 1237: 83 c4 10 add $0x10,%esp - pid = fork(); - 123a: e8 8c 26 00 00 call 38cb - if (pid < 0) { - 123f: 85 c0 test %eax,%eax - 1241: 0f 88 c3 01 00 00 js 140a - if (pid == 0) { - 1247: 0f 84 13 01 00 00 je 1360 - for (pi = 0; pi < 4; pi++) { - 124d: 83 c3 01 add $0x1,%ebx - 1250: 83 fb 04 cmp $0x4,%ebx - 1253: 75 e5 jne 123a - wait(); - 1255: e8 81 26 00 00 call 38db - for (i = 0; i < N; i++) { - 125a: 31 f6 xor %esi,%esi - 125c: 8d 7d c8 lea -0x38(%ebp),%edi - wait(); - 125f: e8 77 26 00 00 call 38db - 1264: e8 72 26 00 00 call 38db - 1269: e8 6d 26 00 00 call 38db - name[0] = name[1] = name[2] = 0; - 126e: c6 45 ca 00 movb $0x0,-0x36(%ebp) - for (i = 0; i < N; i++) { - 1272: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - if ((i == 0 || i >= N / 2) && fd < 0) { - 1278: 85 f6 test %esi,%esi - 127a: 8d 46 30 lea 0x30(%esi),%eax - 127d: 0f 94 c3 sete %bl - 1280: 83 fe 09 cmp $0x9,%esi - 1283: 88 45 c7 mov %al,-0x39(%ebp) - 1286: 0f 9f c0 setg %al - 1289: 09 c3 or %eax,%ebx - else if ((i >= 1 && i < N / 2) && fd >= 0) { - 128b: 8d 46 ff lea -0x1(%esi),%eax - 128e: 89 45 c0 mov %eax,-0x40(%ebp) - if ((i == 0 || i >= N / 2) && fd < 0) { - 1291: 88 5d c6 mov %bl,-0x3a(%ebp) - 1294: bb 70 00 00 00 mov $0x70,%ebx - fd = open(name, 0); - 1299: 83 ec 08 sub $0x8,%esp - name[1] = '0' + i; - 129c: 0f b6 45 c7 movzbl -0x39(%ebp),%eax - name[0] = 'p' + pi; - 12a0: 88 5d c8 mov %bl,-0x38(%ebp) - fd = open(name, 0); - 12a3: 6a 00 push $0x0 - 12a5: 57 push %edi - name[1] = '0' + i; - 12a6: 88 45 c9 mov %al,-0x37(%ebp) - fd = open(name, 0); - 12a9: e8 8d 26 00 00 call 393b - if ((i == 0 || i >= N / 2) && fd < 0) { - 12ae: 83 c4 10 add $0x10,%esp - 12b1: 80 7d c6 00 cmpb $0x0,-0x3a(%ebp) - 12b5: 0f 84 85 00 00 00 je 1340 - 12bb: 85 c0 test %eax,%eax - 12bd: 0f 88 32 01 00 00 js 13f5 - else if ((i >= 1 && i < N / 2) && fd >= 0) { - 12c3: 83 7d c0 08 cmpl $0x8,-0x40(%ebp) - 12c7: 76 7b jbe 1344 - close(fd); - 12c9: 83 ec 0c sub $0xc,%esp - 12cc: 50 push %eax - 12cd: e8 99 26 00 00 call 396b - 12d2: 83 c4 10 add $0x10,%esp - for (pi = 0; pi < 4; pi++) { - 12d5: 83 c3 01 add $0x1,%ebx - 12d8: 80 fb 74 cmp $0x74,%bl - 12db: 75 bc jne 1299 - for (i = 0; i < N; i++) { - 12dd: 83 c6 01 add $0x1,%esi - 12e0: 83 fe 14 cmp $0x14,%esi - 12e3: 75 93 jne 1278 - 12e5: be 70 00 00 00 mov $0x70,%esi - 12ea: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - for (pi = 0; pi < 4; pi++) { - 12f0: 8d 46 c0 lea -0x40(%esi),%eax - name[0] = 'p' + i; - 12f3: bb 04 00 00 00 mov $0x4,%ebx - 12f8: 88 45 c7 mov %al,-0x39(%ebp) - unlink(name); - 12fb: 83 ec 0c sub $0xc,%esp - name[0] = 'p' + i; - 12fe: 89 f0 mov %esi,%eax - unlink(name); - 1300: 57 push %edi - name[0] = 'p' + i; - 1301: 88 45 c8 mov %al,-0x38(%ebp) - name[1] = '0' + i; - 1304: 0f b6 45 c7 movzbl -0x39(%ebp),%eax - 1308: 88 45 c9 mov %al,-0x37(%ebp) - unlink(name); - 130b: e8 43 26 00 00 call 3953 - for (pi = 0; pi < 4; pi++) { - 1310: 83 c4 10 add $0x10,%esp - 1313: 83 eb 01 sub $0x1,%ebx - 1316: 75 e3 jne 12fb - for (i = 0; i < N; i++) { - 1318: 83 c6 01 add $0x1,%esi - 131b: 89 f0 mov %esi,%eax - 131d: 3c 84 cmp $0x84,%al - 131f: 75 cf jne 12f0 - printf(1, "createdelete ok\n"); - 1321: 83 ec 08 sub $0x8,%esp - 1324: 68 33 42 00 00 push $0x4233 - 1329: 6a 01 push $0x1 - 132b: e8 10 27 00 00 call 3a40 -} - 1330: 8d 65 f4 lea -0xc(%ebp),%esp - 1333: 5b pop %ebx - 1334: 5e pop %esi - 1335: 5f pop %edi - 1336: 5d pop %ebp - 1337: c3 ret - 1338: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 133f: 90 nop - else if ((i >= 1 && i < N / 2) && fd >= 0) { - 1340: 85 c0 test %eax,%eax - 1342: 78 91 js 12d5 - printf(1, "oops createdelete %s did exist\n", name); - 1344: 50 push %eax - 1345: 57 push %edi - 1346: 68 04 4f 00 00 push $0x4f04 - 134b: 6a 01 push $0x1 - 134d: e8 ee 26 00 00 call 3a40 - exit(); - 1352: e8 7c 25 00 00 call 38d3 - 1357: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 135e: 66 90 xchg %ax,%ax - name[0] = 'p' + pi; - 1360: 83 c3 70 add $0x70,%ebx - name[2] = '\0'; - 1363: c6 45 ca 00 movb $0x0,-0x36(%ebp) - 1367: be 01 00 00 00 mov $0x1,%esi - 136c: 8d 7d c8 lea -0x38(%ebp),%edi - name[0] = 'p' + pi; - 136f: 88 5d c8 mov %bl,-0x38(%ebp) - name[2] = '\0'; - 1372: 31 db xor %ebx,%ebx - 1374: eb 15 jmp 138b - 1376: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 137d: 8d 76 00 lea 0x0(%esi),%esi - for (i = 0; i < N; i++) { - 1380: 83 fe 14 cmp $0x14,%esi - 1383: 74 6b je 13f0 - 1385: 83 c3 01 add $0x1,%ebx - 1388: 83 c6 01 add $0x1,%esi - fd = open(name, O_CREATE | O_RDWR); - 138b: 83 ec 08 sub $0x8,%esp - name[1] = '0' + i; - 138e: 8d 43 30 lea 0x30(%ebx),%eax - fd = open(name, O_CREATE | O_RDWR); - 1391: 68 02 02 00 00 push $0x202 - 1396: 57 push %edi - name[1] = '0' + i; - 1397: 88 45 c9 mov %al,-0x37(%ebp) - fd = open(name, O_CREATE | O_RDWR); - 139a: e8 9c 25 00 00 call 393b - if (fd < 0) { - 139f: 83 c4 10 add $0x10,%esp - 13a2: 85 c0 test %eax,%eax - 13a4: 78 78 js 141e - close(fd); - 13a6: 83 ec 0c sub $0xc,%esp - 13a9: 50 push %eax - 13aa: e8 bc 25 00 00 call 396b - if (i > 0 && (i % 2) == 0) { - 13af: 83 c4 10 add $0x10,%esp - 13b2: 85 db test %ebx,%ebx - 13b4: 74 cf je 1385 - 13b6: f6 c3 01 test $0x1,%bl - 13b9: 75 c5 jne 1380 - if (unlink(name) < 0) { - 13bb: 83 ec 0c sub $0xc,%esp - name[1] = '0' + (i / 2); - 13be: 89 d8 mov %ebx,%eax - if (unlink(name) < 0) { - 13c0: 57 push %edi - name[1] = '0' + (i / 2); - 13c1: d1 f8 sar %eax - 13c3: 83 c0 30 add $0x30,%eax - 13c6: 88 45 c9 mov %al,-0x37(%ebp) - if (unlink(name) < 0) { - 13c9: e8 85 25 00 00 call 3953 - 13ce: 83 c4 10 add $0x10,%esp - 13d1: 85 c0 test %eax,%eax - 13d3: 79 ab jns 1380 - printf(1, "unlink failed\n"); - 13d5: 52 push %edx - 13d6: 52 push %edx - 13d7: 68 21 3e 00 00 push $0x3e21 - 13dc: 6a 01 push $0x1 - 13de: e8 5d 26 00 00 call 3a40 - exit(); - 13e3: e8 eb 24 00 00 call 38d3 - 13e8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 13ef: 90 nop - exit(); - 13f0: e8 de 24 00 00 call 38d3 - printf(1, "oops createdelete %s didn't exist\n", name); - 13f5: 83 ec 04 sub $0x4,%esp - 13f8: 57 push %edi - 13f9: 68 e0 4e 00 00 push $0x4ee0 - 13fe: 6a 01 push $0x1 - 1400: e8 3b 26 00 00 call 3a40 - exit(); - 1405: e8 c9 24 00 00 call 38d3 - printf(1, "fork failed\n"); - 140a: 83 ec 08 sub $0x8,%esp - 140d: 68 a9 4c 00 00 push $0x4ca9 - 1412: 6a 01 push $0x1 - 1414: e8 27 26 00 00 call 3a40 - exit(); - 1419: e8 b5 24 00 00 call 38d3 - printf(1, "create failed\n"); - 141e: 83 ec 08 sub $0x8,%esp - 1421: 68 6f 44 00 00 push $0x446f - 1426: 6a 01 push $0x1 - 1428: e8 13 26 00 00 call 3a40 - exit(); - 142d: e8 a1 24 00 00 call 38d3 - 1432: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 1439: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -00001440 : -void unlinkread(void) { - 1440: 55 push %ebp - 1441: 89 e5 mov %esp,%ebp - 1443: 56 push %esi - 1444: 53 push %ebx - printf(1, "unlinkread test\n"); - 1445: 83 ec 08 sub $0x8,%esp - 1448: 68 44 42 00 00 push $0x4244 - 144d: 6a 01 push $0x1 - 144f: e8 ec 25 00 00 call 3a40 - fd = open("unlinkread", O_CREATE | O_RDWR); - 1454: 5b pop %ebx - 1455: 5e pop %esi - 1456: 68 02 02 00 00 push $0x202 - 145b: 68 55 42 00 00 push $0x4255 - 1460: e8 d6 24 00 00 call 393b - if (fd < 0) { - 1465: 83 c4 10 add $0x10,%esp - 1468: 85 c0 test %eax,%eax - 146a: 0f 88 e6 00 00 00 js 1556 - write(fd, "hello", 5); - 1470: 83 ec 04 sub $0x4,%esp - 1473: 89 c3 mov %eax,%ebx - 1475: 6a 05 push $0x5 - 1477: 68 7a 42 00 00 push $0x427a - 147c: 50 push %eax - 147d: e8 c1 24 00 00 call 3943 - close(fd); - 1482: 89 1c 24 mov %ebx,(%esp) - 1485: e8 e1 24 00 00 call 396b - fd = open("unlinkread", O_RDWR); - 148a: 58 pop %eax - 148b: 5a pop %edx - 148c: 6a 02 push $0x2 - 148e: 68 55 42 00 00 push $0x4255 - 1493: e8 a3 24 00 00 call 393b - if (fd < 0) { - 1498: 83 c4 10 add $0x10,%esp - fd = open("unlinkread", O_RDWR); - 149b: 89 c3 mov %eax,%ebx - if (fd < 0) { - 149d: 85 c0 test %eax,%eax - 149f: 0f 88 10 01 00 00 js 15b5 - if (unlink("unlinkread") != 0) { - 14a5: 83 ec 0c sub $0xc,%esp - 14a8: 68 55 42 00 00 push $0x4255 - 14ad: e8 a1 24 00 00 call 3953 - 14b2: 83 c4 10 add $0x10,%esp - 14b5: 85 c0 test %eax,%eax - 14b7: 0f 85 e5 00 00 00 jne 15a2 - fd1 = open("unlinkread", O_CREATE | O_RDWR); - 14bd: 83 ec 08 sub $0x8,%esp - 14c0: 68 02 02 00 00 push $0x202 - 14c5: 68 55 42 00 00 push $0x4255 - 14ca: e8 6c 24 00 00 call 393b - write(fd1, "yyy", 3); - 14cf: 83 c4 0c add $0xc,%esp - 14d2: 6a 03 push $0x3 - fd1 = open("unlinkread", O_CREATE | O_RDWR); - 14d4: 89 c6 mov %eax,%esi - write(fd1, "yyy", 3); - 14d6: 68 b2 42 00 00 push $0x42b2 - 14db: 50 push %eax - 14dc: e8 62 24 00 00 call 3943 - close(fd1); - 14e1: 89 34 24 mov %esi,(%esp) - 14e4: e8 82 24 00 00 call 396b - if (read(fd, buf, sizeof(buf)) != 5) { - 14e9: 83 c4 0c add $0xc,%esp - 14ec: 68 00 20 00 00 push $0x2000 - 14f1: 68 a0 85 00 00 push $0x85a0 - 14f6: 53 push %ebx - 14f7: e8 ef 23 00 00 call 38eb - 14fc: 83 c4 10 add $0x10,%esp - 14ff: 83 f8 05 cmp $0x5,%eax - 1502: 0f 85 87 00 00 00 jne 158f - if (buf[0] != 'h') { - 1508: 80 3d a0 85 00 00 68 cmpb $0x68,0x85a0 - 150f: 75 6b jne 157c - if (write(fd, buf, 10) != 10) { - 1511: 83 ec 04 sub $0x4,%esp - 1514: 6a 0a push $0xa - 1516: 68 a0 85 00 00 push $0x85a0 - 151b: 53 push %ebx - 151c: e8 22 24 00 00 call 3943 - 1521: 83 c4 10 add $0x10,%esp - 1524: 83 f8 0a cmp $0xa,%eax - 1527: 75 40 jne 1569 - close(fd); - 1529: 83 ec 0c sub $0xc,%esp - 152c: 53 push %ebx - 152d: e8 39 24 00 00 call 396b - unlink("unlinkread"); - 1532: c7 04 24 55 42 00 00 movl $0x4255,(%esp) - 1539: e8 15 24 00 00 call 3953 - printf(1, "unlinkread ok\n"); - 153e: 58 pop %eax - 153f: 5a pop %edx - 1540: 68 fd 42 00 00 push $0x42fd - 1545: 6a 01 push $0x1 - 1547: e8 f4 24 00 00 call 3a40 -} - 154c: 83 c4 10 add $0x10,%esp - 154f: 8d 65 f8 lea -0x8(%ebp),%esp - 1552: 5b pop %ebx - 1553: 5e pop %esi - 1554: 5d pop %ebp - 1555: c3 ret - printf(1, "create unlinkread failed\n"); - 1556: 51 push %ecx - 1557: 51 push %ecx - 1558: 68 60 42 00 00 push $0x4260 - 155d: 6a 01 push $0x1 - 155f: e8 dc 24 00 00 call 3a40 - exit(); - 1564: e8 6a 23 00 00 call 38d3 - printf(1, "unlinkread write failed\n"); - 1569: 51 push %ecx - 156a: 51 push %ecx - 156b: 68 e4 42 00 00 push $0x42e4 - 1570: 6a 01 push $0x1 - 1572: e8 c9 24 00 00 call 3a40 - exit(); - 1577: e8 57 23 00 00 call 38d3 - printf(1, "unlinkread wrong data\n"); - 157c: 53 push %ebx - 157d: 53 push %ebx - 157e: 68 cd 42 00 00 push $0x42cd - 1583: 6a 01 push $0x1 - 1585: e8 b6 24 00 00 call 3a40 - exit(); - 158a: e8 44 23 00 00 call 38d3 - printf(1, "unlinkread read failed"); - 158f: 56 push %esi - 1590: 56 push %esi - 1591: 68 b6 42 00 00 push $0x42b6 - 1596: 6a 01 push $0x1 - 1598: e8 a3 24 00 00 call 3a40 - exit(); - 159d: e8 31 23 00 00 call 38d3 - printf(1, "unlink unlinkread failed\n"); - 15a2: 50 push %eax - 15a3: 50 push %eax - 15a4: 68 98 42 00 00 push $0x4298 - 15a9: 6a 01 push $0x1 - 15ab: e8 90 24 00 00 call 3a40 - exit(); - 15b0: e8 1e 23 00 00 call 38d3 - printf(1, "open unlinkread failed\n"); - 15b5: 50 push %eax - 15b6: 50 push %eax - 15b7: 68 80 42 00 00 push $0x4280 - 15bc: 6a 01 push $0x1 - 15be: e8 7d 24 00 00 call 3a40 - exit(); - 15c3: e8 0b 23 00 00 call 38d3 - 15c8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 15cf: 90 nop - -000015d0 : -void linktest(void) { - 15d0: 55 push %ebp - 15d1: 89 e5 mov %esp,%ebp - 15d3: 53 push %ebx - 15d4: 83 ec 0c sub $0xc,%esp - printf(1, "linktest\n"); - 15d7: 68 0c 43 00 00 push $0x430c - 15dc: 6a 01 push $0x1 - 15de: e8 5d 24 00 00 call 3a40 - unlink("lf1"); - 15e3: c7 04 24 16 43 00 00 movl $0x4316,(%esp) - 15ea: e8 64 23 00 00 call 3953 - unlink("lf2"); - 15ef: c7 04 24 1a 43 00 00 movl $0x431a,(%esp) - 15f6: e8 58 23 00 00 call 3953 - fd = open("lf1", O_CREATE | O_RDWR); - 15fb: 58 pop %eax - 15fc: 5a pop %edx - 15fd: 68 02 02 00 00 push $0x202 - 1602: 68 16 43 00 00 push $0x4316 - 1607: e8 2f 23 00 00 call 393b - if (fd < 0) { - 160c: 83 c4 10 add $0x10,%esp - 160f: 85 c0 test %eax,%eax - 1611: 0f 88 1e 01 00 00 js 1735 - if (write(fd, "hello", 5) != 5) { - 1617: 83 ec 04 sub $0x4,%esp - 161a: 89 c3 mov %eax,%ebx - 161c: 6a 05 push $0x5 - 161e: 68 7a 42 00 00 push $0x427a - 1623: 50 push %eax - 1624: e8 1a 23 00 00 call 3943 - 1629: 83 c4 10 add $0x10,%esp - 162c: 83 f8 05 cmp $0x5,%eax - 162f: 0f 85 98 01 00 00 jne 17cd - close(fd); - 1635: 83 ec 0c sub $0xc,%esp - 1638: 53 push %ebx - 1639: e8 2d 23 00 00 call 396b - if (link("lf1", "lf2") < 0) { - 163e: 5b pop %ebx - 163f: 58 pop %eax - 1640: 68 1a 43 00 00 push $0x431a - 1645: 68 16 43 00 00 push $0x4316 - 164a: e8 0c 23 00 00 call 395b - 164f: 83 c4 10 add $0x10,%esp - 1652: 85 c0 test %eax,%eax - 1654: 0f 88 60 01 00 00 js 17ba - unlink("lf1"); - 165a: 83 ec 0c sub $0xc,%esp - 165d: 68 16 43 00 00 push $0x4316 - 1662: e8 ec 22 00 00 call 3953 - if (open("lf1", 0) >= 0) { - 1667: 58 pop %eax - 1668: 5a pop %edx - 1669: 6a 00 push $0x0 - 166b: 68 16 43 00 00 push $0x4316 - 1670: e8 c6 22 00 00 call 393b - 1675: 83 c4 10 add $0x10,%esp - 1678: 85 c0 test %eax,%eax - 167a: 0f 89 27 01 00 00 jns 17a7 - fd = open("lf2", 0); - 1680: 83 ec 08 sub $0x8,%esp - 1683: 6a 00 push $0x0 - 1685: 68 1a 43 00 00 push $0x431a - 168a: e8 ac 22 00 00 call 393b - if (fd < 0) { - 168f: 83 c4 10 add $0x10,%esp - fd = open("lf2", 0); - 1692: 89 c3 mov %eax,%ebx - if (fd < 0) { - 1694: 85 c0 test %eax,%eax - 1696: 0f 88 f8 00 00 00 js 1794 - if (read(fd, buf, sizeof(buf)) != 5) { - 169c: 83 ec 04 sub $0x4,%esp - 169f: 68 00 20 00 00 push $0x2000 - 16a4: 68 a0 85 00 00 push $0x85a0 - 16a9: 50 push %eax - 16aa: e8 3c 22 00 00 call 38eb - 16af: 83 c4 10 add $0x10,%esp - 16b2: 83 f8 05 cmp $0x5,%eax - 16b5: 0f 85 c6 00 00 00 jne 1781 - close(fd); - 16bb: 83 ec 0c sub $0xc,%esp - 16be: 53 push %ebx - 16bf: e8 a7 22 00 00 call 396b - if (link("lf2", "lf2") >= 0) { - 16c4: 58 pop %eax - 16c5: 5a pop %edx - 16c6: 68 1a 43 00 00 push $0x431a - 16cb: 68 1a 43 00 00 push $0x431a - 16d0: e8 86 22 00 00 call 395b - 16d5: 83 c4 10 add $0x10,%esp - 16d8: 85 c0 test %eax,%eax - 16da: 0f 89 8e 00 00 00 jns 176e - unlink("lf2"); - 16e0: 83 ec 0c sub $0xc,%esp - 16e3: 68 1a 43 00 00 push $0x431a - 16e8: e8 66 22 00 00 call 3953 - if (link("lf2", "lf1") >= 0) { - 16ed: 59 pop %ecx - 16ee: 5b pop %ebx - 16ef: 68 16 43 00 00 push $0x4316 - 16f4: 68 1a 43 00 00 push $0x431a - 16f9: e8 5d 22 00 00 call 395b - 16fe: 83 c4 10 add $0x10,%esp - 1701: 85 c0 test %eax,%eax - 1703: 79 56 jns 175b - if (link(".", "lf1") >= 0) { - 1705: 83 ec 08 sub $0x8,%esp - 1708: 68 16 43 00 00 push $0x4316 - 170d: 68 de 45 00 00 push $0x45de - 1712: e8 44 22 00 00 call 395b - 1717: 83 c4 10 add $0x10,%esp - 171a: 85 c0 test %eax,%eax - 171c: 79 2a jns 1748 - printf(1, "linktest ok\n"); - 171e: 83 ec 08 sub $0x8,%esp - 1721: 68 b4 43 00 00 push $0x43b4 - 1726: 6a 01 push $0x1 - 1728: e8 13 23 00 00 call 3a40 -} - 172d: 8b 5d fc mov -0x4(%ebp),%ebx - 1730: 83 c4 10 add $0x10,%esp - 1733: c9 leave - 1734: c3 ret - printf(1, "create lf1 failed\n"); - 1735: 50 push %eax - 1736: 50 push %eax - 1737: 68 1e 43 00 00 push $0x431e - 173c: 6a 01 push $0x1 - 173e: e8 fd 22 00 00 call 3a40 - exit(); - 1743: e8 8b 21 00 00 call 38d3 - printf(1, "link . lf1 succeeded! oops\n"); - 1748: 50 push %eax - 1749: 50 push %eax - 174a: 68 98 43 00 00 push $0x4398 - 174f: 6a 01 push $0x1 - 1751: e8 ea 22 00 00 call 3a40 - exit(); - 1756: e8 78 21 00 00 call 38d3 - printf(1, "link non-existant succeeded! oops\n"); - 175b: 52 push %edx - 175c: 52 push %edx - 175d: 68 4c 4f 00 00 push $0x4f4c - 1762: 6a 01 push $0x1 - 1764: e8 d7 22 00 00 call 3a40 - exit(); - 1769: e8 65 21 00 00 call 38d3 - printf(1, "link lf2 lf2 succeeded! oops\n"); - 176e: 50 push %eax - 176f: 50 push %eax - 1770: 68 7a 43 00 00 push $0x437a - 1775: 6a 01 push $0x1 - 1777: e8 c4 22 00 00 call 3a40 - exit(); - 177c: e8 52 21 00 00 call 38d3 - printf(1, "read lf2 failed\n"); - 1781: 51 push %ecx - 1782: 51 push %ecx - 1783: 68 69 43 00 00 push $0x4369 - 1788: 6a 01 push $0x1 - 178a: e8 b1 22 00 00 call 3a40 - exit(); - 178f: e8 3f 21 00 00 call 38d3 - printf(1, "open lf2 failed\n"); - 1794: 53 push %ebx - 1795: 53 push %ebx - 1796: 68 58 43 00 00 push $0x4358 - 179b: 6a 01 push $0x1 - 179d: e8 9e 22 00 00 call 3a40 - exit(); - 17a2: e8 2c 21 00 00 call 38d3 - printf(1, "unlinked lf1 but it is still there!\n"); - 17a7: 50 push %eax - 17a8: 50 push %eax - 17a9: 68 24 4f 00 00 push $0x4f24 - 17ae: 6a 01 push $0x1 - 17b0: e8 8b 22 00 00 call 3a40 - exit(); - 17b5: e8 19 21 00 00 call 38d3 - printf(1, "link lf1 lf2 failed\n"); - 17ba: 51 push %ecx - 17bb: 51 push %ecx - 17bc: 68 43 43 00 00 push $0x4343 - 17c1: 6a 01 push $0x1 - 17c3: e8 78 22 00 00 call 3a40 - exit(); - 17c8: e8 06 21 00 00 call 38d3 - printf(1, "write lf1 failed\n"); - 17cd: 50 push %eax - 17ce: 50 push %eax - 17cf: 68 31 43 00 00 push $0x4331 - 17d4: 6a 01 push $0x1 - 17d6: e8 65 22 00 00 call 3a40 - exit(); - 17db: e8 f3 20 00 00 call 38d3 - -000017e0 : -void concreate(void) { - 17e0: 55 push %ebp - 17e1: 89 e5 mov %esp,%ebp - 17e3: 57 push %edi - 17e4: 56 push %esi - for (i = 0; i < 40; i++) { - 17e5: 31 f6 xor %esi,%esi -void concreate(void) { - 17e7: 53 push %ebx - 17e8: 8d 5d ad lea -0x53(%ebp),%ebx - 17eb: 83 ec 64 sub $0x64,%esp - printf(1, "concreate test\n"); - 17ee: 68 c1 43 00 00 push $0x43c1 - 17f3: 6a 01 push $0x1 - 17f5: e8 46 22 00 00 call 3a40 - file[0] = 'C'; - 17fa: c6 45 ad 43 movb $0x43,-0x53(%ebp) - file[2] = '\0'; - 17fe: 83 c4 10 add $0x10,%esp - 1801: c6 45 af 00 movb $0x0,-0x51(%ebp) - for (i = 0; i < 40; i++) { - 1805: eb 4c jmp 1853 - 1807: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 180e: 66 90 xchg %ax,%ax - 1810: 69 c6 ab aa aa aa imul $0xaaaaaaab,%esi,%eax - if (pid && (i % 3) == 1) { - 1816: 3d ab aa aa aa cmp $0xaaaaaaab,%eax - 181b: 0f 83 af 00 00 00 jae 18d0 - fd = open(file, O_CREATE | O_RDWR); - 1821: 83 ec 08 sub $0x8,%esp - 1824: 68 02 02 00 00 push $0x202 - 1829: 53 push %ebx - 182a: e8 0c 21 00 00 call 393b - if (fd < 0) { - 182f: 83 c4 10 add $0x10,%esp - 1832: 85 c0 test %eax,%eax - 1834: 78 5f js 1895 - close(fd); - 1836: 83 ec 0c sub $0xc,%esp - for (i = 0; i < 40; i++) { - 1839: 83 c6 01 add $0x1,%esi - close(fd); - 183c: 50 push %eax - 183d: e8 29 21 00 00 call 396b - 1842: 83 c4 10 add $0x10,%esp - wait(); - 1845: e8 91 20 00 00 call 38db - for (i = 0; i < 40; i++) { - 184a: 83 fe 28 cmp $0x28,%esi - 184d: 0f 84 9f 00 00 00 je 18f2 - unlink(file); - 1853: 83 ec 0c sub $0xc,%esp - file[1] = '0' + i; - 1856: 8d 46 30 lea 0x30(%esi),%eax - unlink(file); - 1859: 53 push %ebx - file[1] = '0' + i; - 185a: 88 45 ae mov %al,-0x52(%ebp) - unlink(file); - 185d: e8 f1 20 00 00 call 3953 - pid = fork(); - 1862: e8 64 20 00 00 call 38cb - if (pid && (i % 3) == 1) { - 1867: 83 c4 10 add $0x10,%esp - 186a: 85 c0 test %eax,%eax - 186c: 75 a2 jne 1810 - link("C0", file); - 186e: 69 f6 cd cc cc cc imul $0xcccccccd,%esi,%esi - else if (pid == 0 && (i % 5) == 1) { - 1874: 81 fe cd cc cc cc cmp $0xcccccccd,%esi - 187a: 73 34 jae 18b0 - fd = open(file, O_CREATE | O_RDWR); - 187c: 83 ec 08 sub $0x8,%esp - 187f: 68 02 02 00 00 push $0x202 - 1884: 53 push %ebx - 1885: e8 b1 20 00 00 call 393b - if (fd < 0) { - 188a: 83 c4 10 add $0x10,%esp - 188d: 85 c0 test %eax,%eax - 188f: 0f 89 39 02 00 00 jns 1ace - printf(1, "concreate create %s failed\n", file); - 1895: 83 ec 04 sub $0x4,%esp - 1898: 53 push %ebx - 1899: 68 d4 43 00 00 push $0x43d4 - 189e: 6a 01 push $0x1 - 18a0: e8 9b 21 00 00 call 3a40 - exit(); - 18a5: e8 29 20 00 00 call 38d3 - 18aa: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - link("C0", file); - 18b0: 83 ec 08 sub $0x8,%esp - 18b3: 53 push %ebx - 18b4: 68 d1 43 00 00 push $0x43d1 - 18b9: e8 9d 20 00 00 call 395b - 18be: 83 c4 10 add $0x10,%esp - exit(); - 18c1: e8 0d 20 00 00 call 38d3 - 18c6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 18cd: 8d 76 00 lea 0x0(%esi),%esi - link("C0", file); - 18d0: 83 ec 08 sub $0x8,%esp - for (i = 0; i < 40; i++) { - 18d3: 83 c6 01 add $0x1,%esi - link("C0", file); - 18d6: 53 push %ebx - 18d7: 68 d1 43 00 00 push $0x43d1 - 18dc: e8 7a 20 00 00 call 395b - 18e1: 83 c4 10 add $0x10,%esp - wait(); - 18e4: e8 f2 1f 00 00 call 38db - for (i = 0; i < 40; i++) { - 18e9: 83 fe 28 cmp $0x28,%esi - 18ec: 0f 85 61 ff ff ff jne 1853 - memset(fa, 0, sizeof(fa)); - 18f2: 83 ec 04 sub $0x4,%esp - 18f5: 8d 45 c0 lea -0x40(%ebp),%eax - 18f8: 6a 28 push $0x28 - 18fa: 6a 00 push $0x0 - 18fc: 50 push %eax - 18fd: e8 3e 1e 00 00 call 3740 - fd = open(".", 0); - 1902: 5e pop %esi - 1903: 5f pop %edi - 1904: 6a 00 push $0x0 - 1906: 68 de 45 00 00 push $0x45de - 190b: 8d 7d b0 lea -0x50(%ebp),%edi - 190e: e8 28 20 00 00 call 393b - n = 0; - 1913: c7 45 a4 00 00 00 00 movl $0x0,-0x5c(%ebp) - while (read(fd, &de, sizeof(de)) > 0) { - 191a: 83 c4 10 add $0x10,%esp - fd = open(".", 0); - 191d: 89 c6 mov %eax,%esi - while (read(fd, &de, sizeof(de)) > 0) { - 191f: 90 nop - 1920: 83 ec 04 sub $0x4,%esp - 1923: 6a 10 push $0x10 - 1925: 57 push %edi - 1926: 56 push %esi - 1927: e8 bf 1f 00 00 call 38eb - 192c: 83 c4 10 add $0x10,%esp - 192f: 85 c0 test %eax,%eax - 1931: 7e 3d jle 1970 - if (de.inum == 0) { - 1933: 66 83 7d b0 00 cmpw $0x0,-0x50(%ebp) - 1938: 74 e6 je 1920 - if (de.name[0] == 'C' && de.name[2] == '\0') { - 193a: 80 7d b2 43 cmpb $0x43,-0x4e(%ebp) - 193e: 75 e0 jne 1920 - 1940: 80 7d b4 00 cmpb $0x0,-0x4c(%ebp) - 1944: 75 da jne 1920 - i = de.name[1] - '0'; - 1946: 0f be 45 b3 movsbl -0x4d(%ebp),%eax - 194a: 83 e8 30 sub $0x30,%eax - if (i < 0 || i >= sizeof(fa)) { - 194d: 83 f8 27 cmp $0x27,%eax - 1950: 0f 87 60 01 00 00 ja 1ab6 - if (fa[i]) { - 1956: 80 7c 05 c0 00 cmpb $0x0,-0x40(%ebp,%eax,1) - 195b: 0f 85 3d 01 00 00 jne 1a9e - n++; - 1961: 83 45 a4 01 addl $0x1,-0x5c(%ebp) - fa[i] = 1; - 1965: c6 44 05 c0 01 movb $0x1,-0x40(%ebp,%eax,1) - n++; - 196a: eb b4 jmp 1920 - 196c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - close(fd); - 1970: 83 ec 0c sub $0xc,%esp - 1973: 56 push %esi - 1974: e8 f2 1f 00 00 call 396b - if (n != 40) { - 1979: 83 c4 10 add $0x10,%esp - 197c: 83 7d a4 28 cmpl $0x28,-0x5c(%ebp) - 1980: 0f 85 05 01 00 00 jne 1a8b - for (i = 0; i < 40; i++) { - 1986: 31 f6 xor %esi,%esi - 1988: eb 4c jmp 19d6 - 198a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - ((i % 3) == 1 && pid != 0)) { - 1990: 85 ff test %edi,%edi - 1992: 74 05 je 1999 - 1994: 83 f8 01 cmp $0x1,%eax - 1997: 74 6c je 1a05 - unlink(file); - 1999: 83 ec 0c sub $0xc,%esp - 199c: 53 push %ebx - 199d: e8 b1 1f 00 00 call 3953 - unlink(file); - 19a2: 89 1c 24 mov %ebx,(%esp) - 19a5: e8 a9 1f 00 00 call 3953 - unlink(file); - 19aa: 89 1c 24 mov %ebx,(%esp) - 19ad: e8 a1 1f 00 00 call 3953 - unlink(file); - 19b2: 89 1c 24 mov %ebx,(%esp) - 19b5: e8 99 1f 00 00 call 3953 - 19ba: 83 c4 10 add $0x10,%esp - if (pid == 0) { - 19bd: 85 ff test %edi,%edi - 19bf: 0f 84 fc fe ff ff je 18c1 - wait(); - 19c5: e8 11 1f 00 00 call 38db - for (i = 0; i < 40; i++) { - 19ca: 83 c6 01 add $0x1,%esi - 19cd: 83 fe 28 cmp $0x28,%esi - 19d0: 0f 84 8a 00 00 00 je 1a60 - file[1] = '0' + i; - 19d6: 8d 46 30 lea 0x30(%esi),%eax - 19d9: 88 45 ae mov %al,-0x52(%ebp) - pid = fork(); - 19dc: e8 ea 1e 00 00 call 38cb - 19e1: 89 c7 mov %eax,%edi - if (pid < 0) { - 19e3: 85 c0 test %eax,%eax - 19e5: 0f 88 8c 00 00 00 js 1a77 - if (((i % 3) == 0 && pid == 0) || - 19eb: b8 ab aa aa aa mov $0xaaaaaaab,%eax - 19f0: f7 e6 mul %esi - 19f2: 89 d0 mov %edx,%eax - 19f4: 83 e2 fe and $0xfffffffe,%edx - 19f7: d1 e8 shr %eax - 19f9: 01 c2 add %eax,%edx - 19fb: 89 f0 mov %esi,%eax - 19fd: 29 d0 sub %edx,%eax - 19ff: 89 c1 mov %eax,%ecx - 1a01: 09 f9 or %edi,%ecx - 1a03: 75 8b jne 1990 - close(open(file, 0)); - 1a05: 83 ec 08 sub $0x8,%esp - 1a08: 6a 00 push $0x0 - 1a0a: 53 push %ebx - 1a0b: e8 2b 1f 00 00 call 393b - 1a10: 89 04 24 mov %eax,(%esp) - 1a13: e8 53 1f 00 00 call 396b - close(open(file, 0)); - 1a18: 58 pop %eax - 1a19: 5a pop %edx - 1a1a: 6a 00 push $0x0 - 1a1c: 53 push %ebx - 1a1d: e8 19 1f 00 00 call 393b - 1a22: 89 04 24 mov %eax,(%esp) - 1a25: e8 41 1f 00 00 call 396b - close(open(file, 0)); - 1a2a: 59 pop %ecx - 1a2b: 58 pop %eax - 1a2c: 6a 00 push $0x0 - 1a2e: 53 push %ebx - 1a2f: e8 07 1f 00 00 call 393b - 1a34: 89 04 24 mov %eax,(%esp) - 1a37: e8 2f 1f 00 00 call 396b - close(open(file, 0)); - 1a3c: 58 pop %eax - 1a3d: 5a pop %edx - 1a3e: 6a 00 push $0x0 - 1a40: 53 push %ebx - 1a41: e8 f5 1e 00 00 call 393b - 1a46: 89 04 24 mov %eax,(%esp) - 1a49: e8 1d 1f 00 00 call 396b - 1a4e: 83 c4 10 add $0x10,%esp - 1a51: e9 67 ff ff ff jmp 19bd - 1a56: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 1a5d: 8d 76 00 lea 0x0(%esi),%esi - printf(1, "concreate ok\n"); - 1a60: 83 ec 08 sub $0x8,%esp - 1a63: 68 26 44 00 00 push $0x4426 - 1a68: 6a 01 push $0x1 - 1a6a: e8 d1 1f 00 00 call 3a40 -} - 1a6f: 8d 65 f4 lea -0xc(%ebp),%esp - 1a72: 5b pop %ebx - 1a73: 5e pop %esi - 1a74: 5f pop %edi - 1a75: 5d pop %ebp - 1a76: c3 ret - printf(1, "fork failed\n"); - 1a77: 83 ec 08 sub $0x8,%esp - 1a7a: 68 a9 4c 00 00 push $0x4ca9 - 1a7f: 6a 01 push $0x1 - 1a81: e8 ba 1f 00 00 call 3a40 - exit(); - 1a86: e8 48 1e 00 00 call 38d3 - printf(1, "concreate not enough files in directory listing\n"); - 1a8b: 51 push %ecx - 1a8c: 51 push %ecx - 1a8d: 68 70 4f 00 00 push $0x4f70 - 1a92: 6a 01 push $0x1 - 1a94: e8 a7 1f 00 00 call 3a40 - exit(); - 1a99: e8 35 1e 00 00 call 38d3 - printf(1, "concreate duplicate file %s\n", de.name); - 1a9e: 83 ec 04 sub $0x4,%esp - 1aa1: 8d 45 b2 lea -0x4e(%ebp),%eax - 1aa4: 50 push %eax - 1aa5: 68 09 44 00 00 push $0x4409 - 1aaa: 6a 01 push $0x1 - 1aac: e8 8f 1f 00 00 call 3a40 - exit(); - 1ab1: e8 1d 1e 00 00 call 38d3 - printf(1, "concreate weird file %s\n", de.name); - 1ab6: 83 ec 04 sub $0x4,%esp - 1ab9: 8d 45 b2 lea -0x4e(%ebp),%eax - 1abc: 50 push %eax - 1abd: 68 f0 43 00 00 push $0x43f0 - 1ac2: 6a 01 push $0x1 - 1ac4: e8 77 1f 00 00 call 3a40 - exit(); - 1ac9: e8 05 1e 00 00 call 38d3 - close(fd); - 1ace: 83 ec 0c sub $0xc,%esp - 1ad1: 50 push %eax - 1ad2: e8 94 1e 00 00 call 396b - 1ad7: 83 c4 10 add $0x10,%esp - 1ada: e9 e2 fd ff ff jmp 18c1 - 1adf: 90 nop - -00001ae0 : -void linkunlink() { - 1ae0: 55 push %ebp - 1ae1: 89 e5 mov %esp,%ebp - 1ae3: 57 push %edi - 1ae4: 56 push %esi - 1ae5: 53 push %ebx - 1ae6: 83 ec 24 sub $0x24,%esp - printf(1, "linkunlink test\n"); - 1ae9: 68 34 44 00 00 push $0x4434 - 1aee: 6a 01 push $0x1 - 1af0: e8 4b 1f 00 00 call 3a40 - unlink("x"); - 1af5: c7 04 24 c1 46 00 00 movl $0x46c1,(%esp) - 1afc: e8 52 1e 00 00 call 3953 - pid = fork(); - 1b01: e8 c5 1d 00 00 call 38cb - if (pid < 0) { - 1b06: 83 c4 10 add $0x10,%esp - pid = fork(); - 1b09: 89 45 e4 mov %eax,-0x1c(%ebp) - if (pid < 0) { - 1b0c: 85 c0 test %eax,%eax - 1b0e: 0f 88 b6 00 00 00 js 1bca - unsigned int x = (pid ? 1 : 97); - 1b14: 83 7d e4 01 cmpl $0x1,-0x1c(%ebp) - 1b18: bb 64 00 00 00 mov $0x64,%ebx - if ((x % 3) == 0) { - 1b1d: be ab aa aa aa mov $0xaaaaaaab,%esi - unsigned int x = (pid ? 1 : 97); - 1b22: 19 ff sbb %edi,%edi - 1b24: 83 e7 60 and $0x60,%edi - 1b27: 83 c7 01 add $0x1,%edi - 1b2a: eb 1e jmp 1b4a - 1b2c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - else if ((x % 3) == 1) { - 1b30: 83 f8 01 cmp $0x1,%eax - 1b33: 74 7b je 1bb0 - unlink("x"); - 1b35: 83 ec 0c sub $0xc,%esp - 1b38: 68 c1 46 00 00 push $0x46c1 - 1b3d: e8 11 1e 00 00 call 3953 - 1b42: 83 c4 10 add $0x10,%esp - for (i = 0; i < 100; i++) { - 1b45: 83 eb 01 sub $0x1,%ebx - 1b48: 74 41 je 1b8b - x = x * 1103515245 + 12345; - 1b4a: 69 cf 6d 4e c6 41 imul $0x41c64e6d,%edi,%ecx - 1b50: 8d b9 39 30 00 00 lea 0x3039(%ecx),%edi - if ((x % 3) == 0) { - 1b56: 89 f8 mov %edi,%eax - 1b58: f7 e6 mul %esi - 1b5a: 89 d0 mov %edx,%eax - 1b5c: 83 e2 fe and $0xfffffffe,%edx - 1b5f: d1 e8 shr %eax - 1b61: 01 c2 add %eax,%edx - 1b63: 89 f8 mov %edi,%eax - 1b65: 29 d0 sub %edx,%eax - 1b67: 75 c7 jne 1b30 - close(open("x", O_RDWR | O_CREATE)); - 1b69: 83 ec 08 sub $0x8,%esp - 1b6c: 68 02 02 00 00 push $0x202 - 1b71: 68 c1 46 00 00 push $0x46c1 - 1b76: e8 c0 1d 00 00 call 393b - 1b7b: 89 04 24 mov %eax,(%esp) - 1b7e: e8 e8 1d 00 00 call 396b - 1b83: 83 c4 10 add $0x10,%esp - for (i = 0; i < 100; i++) { - 1b86: 83 eb 01 sub $0x1,%ebx - 1b89: 75 bf jne 1b4a - if (pid) { - 1b8b: 8b 45 e4 mov -0x1c(%ebp),%eax - 1b8e: 85 c0 test %eax,%eax - 1b90: 74 4b je 1bdd - wait(); - 1b92: e8 44 1d 00 00 call 38db - printf(1, "linkunlink ok\n"); - 1b97: 83 ec 08 sub $0x8,%esp - 1b9a: 68 49 44 00 00 push $0x4449 - 1b9f: 6a 01 push $0x1 - 1ba1: e8 9a 1e 00 00 call 3a40 -} - 1ba6: 8d 65 f4 lea -0xc(%ebp),%esp - 1ba9: 5b pop %ebx - 1baa: 5e pop %esi - 1bab: 5f pop %edi - 1bac: 5d pop %ebp - 1bad: c3 ret - 1bae: 66 90 xchg %ax,%ax - link("cat", "x"); - 1bb0: 83 ec 08 sub $0x8,%esp - 1bb3: 68 c1 46 00 00 push $0x46c1 - 1bb8: 68 45 44 00 00 push $0x4445 - 1bbd: e8 99 1d 00 00 call 395b - 1bc2: 83 c4 10 add $0x10,%esp - 1bc5: e9 7b ff ff ff jmp 1b45 - printf(1, "fork failed\n"); - 1bca: 52 push %edx - 1bcb: 52 push %edx - 1bcc: 68 a9 4c 00 00 push $0x4ca9 - 1bd1: 6a 01 push $0x1 - 1bd3: e8 68 1e 00 00 call 3a40 - exit(); - 1bd8: e8 f6 1c 00 00 call 38d3 - exit(); - 1bdd: e8 f1 1c 00 00 call 38d3 - 1be2: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 1be9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -00001bf0 : -void bigdir(void) { - 1bf0: 55 push %ebp - 1bf1: 89 e5 mov %esp,%ebp - 1bf3: 57 push %edi - 1bf4: 56 push %esi - 1bf5: 53 push %ebx - 1bf6: 83 ec 24 sub $0x24,%esp - printf(1, "bigdir test\n"); - 1bf9: 68 58 44 00 00 push $0x4458 - 1bfe: 6a 01 push $0x1 - 1c00: e8 3b 1e 00 00 call 3a40 - unlink("bd"); - 1c05: c7 04 24 65 44 00 00 movl $0x4465,(%esp) - 1c0c: e8 42 1d 00 00 call 3953 - fd = open("bd", O_CREATE); - 1c11: 5a pop %edx - 1c12: 59 pop %ecx - 1c13: 68 00 02 00 00 push $0x200 - 1c18: 68 65 44 00 00 push $0x4465 - 1c1d: e8 19 1d 00 00 call 393b - if (fd < 0) { - 1c22: 83 c4 10 add $0x10,%esp - 1c25: 85 c0 test %eax,%eax - 1c27: 0f 88 de 00 00 00 js 1d0b - close(fd); - 1c2d: 83 ec 0c sub $0xc,%esp - for (i = 0; i < 500; i++) { - 1c30: 31 f6 xor %esi,%esi - 1c32: 8d 7d de lea -0x22(%ebp),%edi - close(fd); - 1c35: 50 push %eax - 1c36: e8 30 1d 00 00 call 396b - 1c3b: 83 c4 10 add $0x10,%esp - 1c3e: 66 90 xchg %ax,%ax - name[1] = '0' + (i / 64); - 1c40: 89 f0 mov %esi,%eax - if (link("bd", name) != 0) { - 1c42: 83 ec 08 sub $0x8,%esp - name[0] = 'x'; - 1c45: c6 45 de 78 movb $0x78,-0x22(%ebp) - name[1] = '0' + (i / 64); - 1c49: c1 f8 06 sar $0x6,%eax - if (link("bd", name) != 0) { - 1c4c: 57 push %edi - name[1] = '0' + (i / 64); - 1c4d: 83 c0 30 add $0x30,%eax - if (link("bd", name) != 0) { - 1c50: 68 65 44 00 00 push $0x4465 - name[1] = '0' + (i / 64); - 1c55: 88 45 df mov %al,-0x21(%ebp) - name[2] = '0' + (i % 64); - 1c58: 89 f0 mov %esi,%eax - 1c5a: 83 e0 3f and $0x3f,%eax - name[3] = '\0'; - 1c5d: c6 45 e1 00 movb $0x0,-0x1f(%ebp) - name[2] = '0' + (i % 64); - 1c61: 83 c0 30 add $0x30,%eax - 1c64: 88 45 e0 mov %al,-0x20(%ebp) - if (link("bd", name) != 0) { - 1c67: e8 ef 1c 00 00 call 395b - 1c6c: 83 c4 10 add $0x10,%esp - 1c6f: 89 c3 mov %eax,%ebx - 1c71: 85 c0 test %eax,%eax - 1c73: 75 6e jne 1ce3 - for (i = 0; i < 500; i++) { - 1c75: 83 c6 01 add $0x1,%esi - 1c78: 81 fe f4 01 00 00 cmp $0x1f4,%esi - 1c7e: 75 c0 jne 1c40 - unlink("bd"); - 1c80: 83 ec 0c sub $0xc,%esp - 1c83: 68 65 44 00 00 push $0x4465 - 1c88: e8 c6 1c 00 00 call 3953 - 1c8d: 83 c4 10 add $0x10,%esp - name[1] = '0' + (i / 64); - 1c90: 89 d8 mov %ebx,%eax - if (unlink(name) != 0) { - 1c92: 83 ec 0c sub $0xc,%esp - name[0] = 'x'; - 1c95: c6 45 de 78 movb $0x78,-0x22(%ebp) - name[1] = '0' + (i / 64); - 1c99: c1 f8 06 sar $0x6,%eax - if (unlink(name) != 0) { - 1c9c: 57 push %edi - name[1] = '0' + (i / 64); - 1c9d: 83 c0 30 add $0x30,%eax - name[3] = '\0'; - 1ca0: c6 45 e1 00 movb $0x0,-0x1f(%ebp) - name[1] = '0' + (i / 64); - 1ca4: 88 45 df mov %al,-0x21(%ebp) - name[2] = '0' + (i % 64); - 1ca7: 89 d8 mov %ebx,%eax - 1ca9: 83 e0 3f and $0x3f,%eax - 1cac: 83 c0 30 add $0x30,%eax - 1caf: 88 45 e0 mov %al,-0x20(%ebp) - if (unlink(name) != 0) { - 1cb2: e8 9c 1c 00 00 call 3953 - 1cb7: 83 c4 10 add $0x10,%esp - 1cba: 85 c0 test %eax,%eax - 1cbc: 75 39 jne 1cf7 - for (i = 0; i < 500; i++) { - 1cbe: 83 c3 01 add $0x1,%ebx - 1cc1: 81 fb f4 01 00 00 cmp $0x1f4,%ebx - 1cc7: 75 c7 jne 1c90 - printf(1, "bigdir ok\n"); - 1cc9: 83 ec 08 sub $0x8,%esp - 1ccc: 68 a7 44 00 00 push $0x44a7 - 1cd1: 6a 01 push $0x1 - 1cd3: e8 68 1d 00 00 call 3a40 - 1cd8: 83 c4 10 add $0x10,%esp -} - 1cdb: 8d 65 f4 lea -0xc(%ebp),%esp - 1cde: 5b pop %ebx - 1cdf: 5e pop %esi - 1ce0: 5f pop %edi - 1ce1: 5d pop %ebp - 1ce2: c3 ret - printf(1, "bigdir link failed\n"); - 1ce3: 83 ec 08 sub $0x8,%esp - 1ce6: 68 7e 44 00 00 push $0x447e - 1ceb: 6a 01 push $0x1 - 1ced: e8 4e 1d 00 00 call 3a40 - exit(); - 1cf2: e8 dc 1b 00 00 call 38d3 - printf(1, "bigdir unlink failed"); - 1cf7: 83 ec 08 sub $0x8,%esp - 1cfa: 68 92 44 00 00 push $0x4492 - 1cff: 6a 01 push $0x1 - 1d01: e8 3a 1d 00 00 call 3a40 - exit(); - 1d06: e8 c8 1b 00 00 call 38d3 - printf(1, "bigdir create failed\n"); - 1d0b: 50 push %eax - 1d0c: 50 push %eax - 1d0d: 68 68 44 00 00 push $0x4468 - 1d12: 6a 01 push $0x1 - 1d14: e8 27 1d 00 00 call 3a40 - exit(); - 1d19: e8 b5 1b 00 00 call 38d3 - 1d1e: 66 90 xchg %ax,%ax - -00001d20 : -void subdir(void) { - 1d20: 55 push %ebp - 1d21: 89 e5 mov %esp,%ebp - 1d23: 53 push %ebx - 1d24: 83 ec 0c sub $0xc,%esp - printf(1, "subdir test\n"); - 1d27: 68 b2 44 00 00 push $0x44b2 - 1d2c: 6a 01 push $0x1 - 1d2e: e8 0d 1d 00 00 call 3a40 - unlink("ff"); - 1d33: c7 04 24 3b 45 00 00 movl $0x453b,(%esp) - 1d3a: e8 14 1c 00 00 call 3953 - if (mkdir("dd") != 0) { - 1d3f: c7 04 24 d8 45 00 00 movl $0x45d8,(%esp) - 1d46: e8 18 1c 00 00 call 3963 - 1d4b: 83 c4 10 add $0x10,%esp - 1d4e: 85 c0 test %eax,%eax - 1d50: 0f 85 b3 05 00 00 jne 2309 - fd = open("dd/ff", O_CREATE | O_RDWR); - 1d56: 83 ec 08 sub $0x8,%esp - 1d59: 68 02 02 00 00 push $0x202 - 1d5e: 68 11 45 00 00 push $0x4511 - 1d63: e8 d3 1b 00 00 call 393b - if (fd < 0) { - 1d68: 83 c4 10 add $0x10,%esp - fd = open("dd/ff", O_CREATE | O_RDWR); - 1d6b: 89 c3 mov %eax,%ebx - if (fd < 0) { - 1d6d: 85 c0 test %eax,%eax - 1d6f: 0f 88 81 05 00 00 js 22f6 - write(fd, "ff", 2); - 1d75: 83 ec 04 sub $0x4,%esp - 1d78: 6a 02 push $0x2 - 1d7a: 68 3b 45 00 00 push $0x453b - 1d7f: 50 push %eax - 1d80: e8 be 1b 00 00 call 3943 - close(fd); - 1d85: 89 1c 24 mov %ebx,(%esp) - 1d88: e8 de 1b 00 00 call 396b - if (unlink("dd") >= 0) { - 1d8d: c7 04 24 d8 45 00 00 movl $0x45d8,(%esp) - 1d94: e8 ba 1b 00 00 call 3953 - 1d99: 83 c4 10 add $0x10,%esp - 1d9c: 85 c0 test %eax,%eax - 1d9e: 0f 89 3f 05 00 00 jns 22e3 - if (mkdir("/dd/dd") != 0) { - 1da4: 83 ec 0c sub $0xc,%esp - 1da7: 68 ec 44 00 00 push $0x44ec - 1dac: e8 b2 1b 00 00 call 3963 - 1db1: 83 c4 10 add $0x10,%esp - 1db4: 85 c0 test %eax,%eax - 1db6: 0f 85 14 05 00 00 jne 22d0 - fd = open("dd/dd/ff", O_CREATE | O_RDWR); - 1dbc: 83 ec 08 sub $0x8,%esp - 1dbf: 68 02 02 00 00 push $0x202 - 1dc4: 68 0e 45 00 00 push $0x450e - 1dc9: e8 6d 1b 00 00 call 393b - if (fd < 0) { - 1dce: 83 c4 10 add $0x10,%esp - fd = open("dd/dd/ff", O_CREATE | O_RDWR); - 1dd1: 89 c3 mov %eax,%ebx - if (fd < 0) { - 1dd3: 85 c0 test %eax,%eax - 1dd5: 0f 88 24 04 00 00 js 21ff - write(fd, "FF", 2); - 1ddb: 83 ec 04 sub $0x4,%esp - 1dde: 6a 02 push $0x2 - 1de0: 68 2f 45 00 00 push $0x452f - 1de5: 50 push %eax - 1de6: e8 58 1b 00 00 call 3943 - close(fd); - 1deb: 89 1c 24 mov %ebx,(%esp) - 1dee: e8 78 1b 00 00 call 396b - fd = open("dd/dd/../ff", 0); - 1df3: 58 pop %eax - 1df4: 5a pop %edx - 1df5: 6a 00 push $0x0 - 1df7: 68 32 45 00 00 push $0x4532 - 1dfc: e8 3a 1b 00 00 call 393b - if (fd < 0) { - 1e01: 83 c4 10 add $0x10,%esp - fd = open("dd/dd/../ff", 0); - 1e04: 89 c3 mov %eax,%ebx - if (fd < 0) { - 1e06: 85 c0 test %eax,%eax - 1e08: 0f 88 de 03 00 00 js 21ec - cc = read(fd, buf, sizeof(buf)); - 1e0e: 83 ec 04 sub $0x4,%esp - 1e11: 68 00 20 00 00 push $0x2000 - 1e16: 68 a0 85 00 00 push $0x85a0 - 1e1b: 50 push %eax - 1e1c: e8 ca 1a 00 00 call 38eb - if (cc != 2 || buf[0] != 'f') { - 1e21: 83 c4 10 add $0x10,%esp - 1e24: 83 f8 02 cmp $0x2,%eax - 1e27: 0f 85 3a 03 00 00 jne 2167 - 1e2d: 80 3d a0 85 00 00 66 cmpb $0x66,0x85a0 - 1e34: 0f 85 2d 03 00 00 jne 2167 - close(fd); - 1e3a: 83 ec 0c sub $0xc,%esp - 1e3d: 53 push %ebx - 1e3e: e8 28 1b 00 00 call 396b - if (link("dd/dd/ff", "dd/dd/ffff") != 0) { - 1e43: 59 pop %ecx - 1e44: 5b pop %ebx - 1e45: 68 72 45 00 00 push $0x4572 - 1e4a: 68 0e 45 00 00 push $0x450e - 1e4f: e8 07 1b 00 00 call 395b - 1e54: 83 c4 10 add $0x10,%esp - 1e57: 85 c0 test %eax,%eax - 1e59: 0f 85 c6 03 00 00 jne 2225 - if (unlink("dd/dd/ff") != 0) { - 1e5f: 83 ec 0c sub $0xc,%esp - 1e62: 68 0e 45 00 00 push $0x450e - 1e67: e8 e7 1a 00 00 call 3953 - 1e6c: 83 c4 10 add $0x10,%esp - 1e6f: 85 c0 test %eax,%eax - 1e71: 0f 85 16 03 00 00 jne 218d - if (open("dd/dd/ff", O_RDONLY) >= 0) { - 1e77: 83 ec 08 sub $0x8,%esp - 1e7a: 6a 00 push $0x0 - 1e7c: 68 0e 45 00 00 push $0x450e - 1e81: e8 b5 1a 00 00 call 393b - 1e86: 83 c4 10 add $0x10,%esp - 1e89: 85 c0 test %eax,%eax - 1e8b: 0f 89 2c 04 00 00 jns 22bd - if (chdir("dd") != 0) { - 1e91: 83 ec 0c sub $0xc,%esp - 1e94: 68 d8 45 00 00 push $0x45d8 - 1e99: e8 6d 1a 00 00 call 390b - 1e9e: 83 c4 10 add $0x10,%esp - 1ea1: 85 c0 test %eax,%eax - 1ea3: 0f 85 01 04 00 00 jne 22aa - if (chdir("dd/../../dd") != 0) { - 1ea9: 83 ec 0c sub $0xc,%esp - 1eac: 68 a6 45 00 00 push $0x45a6 - 1eb1: e8 55 1a 00 00 call 390b - 1eb6: 83 c4 10 add $0x10,%esp - 1eb9: 85 c0 test %eax,%eax - 1ebb: 0f 85 b9 02 00 00 jne 217a - if (chdir("dd/../../../dd") != 0) { - 1ec1: 83 ec 0c sub $0xc,%esp - 1ec4: 68 cc 45 00 00 push $0x45cc - 1ec9: e8 3d 1a 00 00 call 390b - 1ece: 83 c4 10 add $0x10,%esp - 1ed1: 85 c0 test %eax,%eax - 1ed3: 0f 85 a1 02 00 00 jne 217a - if (chdir("./..") != 0) { - 1ed9: 83 ec 0c sub $0xc,%esp - 1edc: 68 db 45 00 00 push $0x45db - 1ee1: e8 25 1a 00 00 call 390b - 1ee6: 83 c4 10 add $0x10,%esp - 1ee9: 85 c0 test %eax,%eax - 1eeb: 0f 85 21 03 00 00 jne 2212 - fd = open("dd/dd/ffff", 0); - 1ef1: 83 ec 08 sub $0x8,%esp - 1ef4: 6a 00 push $0x0 - 1ef6: 68 72 45 00 00 push $0x4572 - 1efb: e8 3b 1a 00 00 call 393b - if (fd < 0) { - 1f00: 83 c4 10 add $0x10,%esp - fd = open("dd/dd/ffff", 0); - 1f03: 89 c3 mov %eax,%ebx - if (fd < 0) { - 1f05: 85 c0 test %eax,%eax - 1f07: 0f 88 e0 04 00 00 js 23ed - if (read(fd, buf, sizeof(buf)) != 2) { - 1f0d: 83 ec 04 sub $0x4,%esp - 1f10: 68 00 20 00 00 push $0x2000 - 1f15: 68 a0 85 00 00 push $0x85a0 - 1f1a: 50 push %eax - 1f1b: e8 cb 19 00 00 call 38eb - 1f20: 83 c4 10 add $0x10,%esp - 1f23: 83 f8 02 cmp $0x2,%eax - 1f26: 0f 85 ae 04 00 00 jne 23da - close(fd); - 1f2c: 83 ec 0c sub $0xc,%esp - 1f2f: 53 push %ebx - 1f30: e8 36 1a 00 00 call 396b - if (open("dd/dd/ff", O_RDONLY) >= 0) { - 1f35: 58 pop %eax - 1f36: 5a pop %edx - 1f37: 6a 00 push $0x0 - 1f39: 68 0e 45 00 00 push $0x450e - 1f3e: e8 f8 19 00 00 call 393b - 1f43: 83 c4 10 add $0x10,%esp - 1f46: 85 c0 test %eax,%eax - 1f48: 0f 89 65 02 00 00 jns 21b3 - if (open("dd/ff/ff", O_CREATE | O_RDWR) >= 0) { - 1f4e: 83 ec 08 sub $0x8,%esp - 1f51: 68 02 02 00 00 push $0x202 - 1f56: 68 26 46 00 00 push $0x4626 - 1f5b: e8 db 19 00 00 call 393b - 1f60: 83 c4 10 add $0x10,%esp - 1f63: 85 c0 test %eax,%eax - 1f65: 0f 89 35 02 00 00 jns 21a0 - if (open("dd/xx/ff", O_CREATE | O_RDWR) >= 0) { - 1f6b: 83 ec 08 sub $0x8,%esp - 1f6e: 68 02 02 00 00 push $0x202 - 1f73: 68 4b 46 00 00 push $0x464b - 1f78: e8 be 19 00 00 call 393b - 1f7d: 83 c4 10 add $0x10,%esp - 1f80: 85 c0 test %eax,%eax - 1f82: 0f 89 0f 03 00 00 jns 2297 - if (open("dd", O_CREATE) >= 0) { - 1f88: 83 ec 08 sub $0x8,%esp - 1f8b: 68 00 02 00 00 push $0x200 - 1f90: 68 d8 45 00 00 push $0x45d8 - 1f95: e8 a1 19 00 00 call 393b - 1f9a: 83 c4 10 add $0x10,%esp - 1f9d: 85 c0 test %eax,%eax - 1f9f: 0f 89 df 02 00 00 jns 2284 - if (open("dd", O_RDWR) >= 0) { - 1fa5: 83 ec 08 sub $0x8,%esp - 1fa8: 6a 02 push $0x2 - 1faa: 68 d8 45 00 00 push $0x45d8 - 1faf: e8 87 19 00 00 call 393b - 1fb4: 83 c4 10 add $0x10,%esp - 1fb7: 85 c0 test %eax,%eax - 1fb9: 0f 89 b2 02 00 00 jns 2271 - if (open("dd", O_WRONLY) >= 0) { - 1fbf: 83 ec 08 sub $0x8,%esp - 1fc2: 6a 01 push $0x1 - 1fc4: 68 d8 45 00 00 push $0x45d8 - 1fc9: e8 6d 19 00 00 call 393b - 1fce: 83 c4 10 add $0x10,%esp - 1fd1: 85 c0 test %eax,%eax - 1fd3: 0f 89 85 02 00 00 jns 225e - if (link("dd/ff/ff", "dd/dd/xx") == 0) { - 1fd9: 83 ec 08 sub $0x8,%esp - 1fdc: 68 ba 46 00 00 push $0x46ba - 1fe1: 68 26 46 00 00 push $0x4626 - 1fe6: e8 70 19 00 00 call 395b - 1feb: 83 c4 10 add $0x10,%esp - 1fee: 85 c0 test %eax,%eax - 1ff0: 0f 84 55 02 00 00 je 224b - if (link("dd/xx/ff", "dd/dd/xx") == 0) { - 1ff6: 83 ec 08 sub $0x8,%esp - 1ff9: 68 ba 46 00 00 push $0x46ba - 1ffe: 68 4b 46 00 00 push $0x464b - 2003: e8 53 19 00 00 call 395b - 2008: 83 c4 10 add $0x10,%esp - 200b: 85 c0 test %eax,%eax - 200d: 0f 84 25 02 00 00 je 2238 - if (link("dd/ff", "dd/dd/ffff") == 0) { - 2013: 83 ec 08 sub $0x8,%esp - 2016: 68 72 45 00 00 push $0x4572 - 201b: 68 11 45 00 00 push $0x4511 - 2020: e8 36 19 00 00 call 395b - 2025: 83 c4 10 add $0x10,%esp - 2028: 85 c0 test %eax,%eax - 202a: 0f 84 a9 01 00 00 je 21d9 - if (mkdir("dd/ff/ff") == 0) { - 2030: 83 ec 0c sub $0xc,%esp - 2033: 68 26 46 00 00 push $0x4626 - 2038: e8 26 19 00 00 call 3963 - 203d: 83 c4 10 add $0x10,%esp - 2040: 85 c0 test %eax,%eax - 2042: 0f 84 7e 01 00 00 je 21c6 - if (mkdir("dd/xx/ff") == 0) { - 2048: 83 ec 0c sub $0xc,%esp - 204b: 68 4b 46 00 00 push $0x464b - 2050: e8 0e 19 00 00 call 3963 - 2055: 83 c4 10 add $0x10,%esp - 2058: 85 c0 test %eax,%eax - 205a: 0f 84 67 03 00 00 je 23c7 - if (mkdir("dd/dd/ffff") == 0) { - 2060: 83 ec 0c sub $0xc,%esp - 2063: 68 72 45 00 00 push $0x4572 - 2068: e8 f6 18 00 00 call 3963 - 206d: 83 c4 10 add $0x10,%esp - 2070: 85 c0 test %eax,%eax - 2072: 0f 84 3c 03 00 00 je 23b4 - if (unlink("dd/xx/ff") == 0) { - 2078: 83 ec 0c sub $0xc,%esp - 207b: 68 4b 46 00 00 push $0x464b - 2080: e8 ce 18 00 00 call 3953 - 2085: 83 c4 10 add $0x10,%esp - 2088: 85 c0 test %eax,%eax - 208a: 0f 84 11 03 00 00 je 23a1 - if (unlink("dd/ff/ff") == 0) { - 2090: 83 ec 0c sub $0xc,%esp - 2093: 68 26 46 00 00 push $0x4626 - 2098: e8 b6 18 00 00 call 3953 - 209d: 83 c4 10 add $0x10,%esp - 20a0: 85 c0 test %eax,%eax - 20a2: 0f 84 e6 02 00 00 je 238e - if (chdir("dd/ff") == 0) { - 20a8: 83 ec 0c sub $0xc,%esp - 20ab: 68 11 45 00 00 push $0x4511 - 20b0: e8 56 18 00 00 call 390b - 20b5: 83 c4 10 add $0x10,%esp - 20b8: 85 c0 test %eax,%eax - 20ba: 0f 84 bb 02 00 00 je 237b - if (chdir("dd/xx") == 0) { - 20c0: 83 ec 0c sub $0xc,%esp - 20c3: 68 bd 46 00 00 push $0x46bd - 20c8: e8 3e 18 00 00 call 390b - 20cd: 83 c4 10 add $0x10,%esp - 20d0: 85 c0 test %eax,%eax - 20d2: 0f 84 90 02 00 00 je 2368 - if (unlink("dd/dd/ffff") != 0) { - 20d8: 83 ec 0c sub $0xc,%esp - 20db: 68 72 45 00 00 push $0x4572 - 20e0: e8 6e 18 00 00 call 3953 - 20e5: 83 c4 10 add $0x10,%esp - 20e8: 85 c0 test %eax,%eax - 20ea: 0f 85 9d 00 00 00 jne 218d - if (unlink("dd/ff") != 0) { - 20f0: 83 ec 0c sub $0xc,%esp - 20f3: 68 11 45 00 00 push $0x4511 - 20f8: e8 56 18 00 00 call 3953 - 20fd: 83 c4 10 add $0x10,%esp - 2100: 85 c0 test %eax,%eax - 2102: 0f 85 4d 02 00 00 jne 2355 - if (unlink("dd") == 0) { - 2108: 83 ec 0c sub $0xc,%esp - 210b: 68 d8 45 00 00 push $0x45d8 - 2110: e8 3e 18 00 00 call 3953 - 2115: 83 c4 10 add $0x10,%esp - 2118: 85 c0 test %eax,%eax - 211a: 0f 84 22 02 00 00 je 2342 - if (unlink("dd/dd") < 0) { - 2120: 83 ec 0c sub $0xc,%esp - 2123: 68 ed 44 00 00 push $0x44ed - 2128: e8 26 18 00 00 call 3953 - 212d: 83 c4 10 add $0x10,%esp - 2130: 85 c0 test %eax,%eax - 2132: 0f 88 f7 01 00 00 js 232f - if (unlink("dd") < 0) { - 2138: 83 ec 0c sub $0xc,%esp - 213b: 68 d8 45 00 00 push $0x45d8 - 2140: e8 0e 18 00 00 call 3953 - 2145: 83 c4 10 add $0x10,%esp - 2148: 85 c0 test %eax,%eax - 214a: 0f 88 cc 01 00 00 js 231c - printf(1, "subdir ok\n"); - 2150: 83 ec 08 sub $0x8,%esp - 2153: 68 ba 47 00 00 push $0x47ba - 2158: 6a 01 push $0x1 - 215a: e8 e1 18 00 00 call 3a40 -} - 215f: 8b 5d fc mov -0x4(%ebp),%ebx - 2162: 83 c4 10 add $0x10,%esp - 2165: c9 leave - 2166: c3 ret - printf(1, "dd/dd/../ff wrong content\n"); - 2167: 50 push %eax - 2168: 50 push %eax - 2169: 68 57 45 00 00 push $0x4557 - 216e: 6a 01 push $0x1 - 2170: e8 cb 18 00 00 call 3a40 - exit(); - 2175: e8 59 17 00 00 call 38d3 - printf(1, "chdir dd/../../dd failed\n"); - 217a: 50 push %eax - 217b: 50 push %eax - 217c: 68 b2 45 00 00 push $0x45b2 - 2181: 6a 01 push $0x1 - 2183: e8 b8 18 00 00 call 3a40 - exit(); - 2188: e8 46 17 00 00 call 38d3 - printf(1, "unlink dd/dd/ff failed\n"); - 218d: 50 push %eax - 218e: 50 push %eax - 218f: 68 7d 45 00 00 push $0x457d - 2194: 6a 01 push $0x1 - 2196: e8 a5 18 00 00 call 3a40 - exit(); - 219b: e8 33 17 00 00 call 38d3 - printf(1, "create dd/ff/ff succeeded!\n"); - 21a0: 51 push %ecx - 21a1: 51 push %ecx - 21a2: 68 2f 46 00 00 push $0x462f - 21a7: 6a 01 push $0x1 - 21a9: e8 92 18 00 00 call 3a40 - exit(); - 21ae: e8 20 17 00 00 call 38d3 - printf(1, "open (unlinked) dd/dd/ff succeeded!\n"); - 21b3: 53 push %ebx - 21b4: 53 push %ebx - 21b5: 68 14 50 00 00 push $0x5014 - 21ba: 6a 01 push $0x1 - 21bc: e8 7f 18 00 00 call 3a40 - exit(); - 21c1: e8 0d 17 00 00 call 38d3 - printf(1, "mkdir dd/ff/ff succeeded!\n"); - 21c6: 51 push %ecx - 21c7: 51 push %ecx - 21c8: 68 c3 46 00 00 push $0x46c3 - 21cd: 6a 01 push $0x1 - 21cf: e8 6c 18 00 00 call 3a40 - exit(); - 21d4: e8 fa 16 00 00 call 38d3 - printf(1, "link dd/ff dd/dd/ffff succeeded!\n"); - 21d9: 53 push %ebx - 21da: 53 push %ebx - 21db: 68 84 50 00 00 push $0x5084 - 21e0: 6a 01 push $0x1 - 21e2: e8 59 18 00 00 call 3a40 - exit(); - 21e7: e8 e7 16 00 00 call 38d3 - printf(1, "open dd/dd/../ff failed\n"); - 21ec: 50 push %eax - 21ed: 50 push %eax - 21ee: 68 3e 45 00 00 push $0x453e - 21f3: 6a 01 push $0x1 - 21f5: e8 46 18 00 00 call 3a40 - exit(); - 21fa: e8 d4 16 00 00 call 38d3 - printf(1, "create dd/dd/ff failed\n"); - 21ff: 51 push %ecx - 2200: 51 push %ecx - 2201: 68 17 45 00 00 push $0x4517 - 2206: 6a 01 push $0x1 - 2208: e8 33 18 00 00 call 3a40 - exit(); - 220d: e8 c1 16 00 00 call 38d3 - printf(1, "chdir ./.. failed\n"); - 2212: 50 push %eax - 2213: 50 push %eax - 2214: 68 e0 45 00 00 push $0x45e0 - 2219: 6a 01 push $0x1 - 221b: e8 20 18 00 00 call 3a40 - exit(); - 2220: e8 ae 16 00 00 call 38d3 - printf(1, "link dd/dd/ff dd/dd/ffff failed\n"); - 2225: 52 push %edx - 2226: 52 push %edx - 2227: 68 cc 4f 00 00 push $0x4fcc - 222c: 6a 01 push $0x1 - 222e: e8 0d 18 00 00 call 3a40 - exit(); - 2233: e8 9b 16 00 00 call 38d3 - printf(1, "link dd/xx/ff dd/dd/xx succeeded!\n"); - 2238: 50 push %eax - 2239: 50 push %eax - 223a: 68 60 50 00 00 push $0x5060 - 223f: 6a 01 push $0x1 - 2241: e8 fa 17 00 00 call 3a40 - exit(); - 2246: e8 88 16 00 00 call 38d3 - printf(1, "link dd/ff/ff dd/dd/xx succeeded!\n"); - 224b: 50 push %eax - 224c: 50 push %eax - 224d: 68 3c 50 00 00 push $0x503c - 2252: 6a 01 push $0x1 - 2254: e8 e7 17 00 00 call 3a40 - exit(); - 2259: e8 75 16 00 00 call 38d3 - printf(1, "open dd wronly succeeded!\n"); - 225e: 50 push %eax - 225f: 50 push %eax - 2260: 68 9f 46 00 00 push $0x469f - 2265: 6a 01 push $0x1 - 2267: e8 d4 17 00 00 call 3a40 - exit(); - 226c: e8 62 16 00 00 call 38d3 - printf(1, "open dd rdwr succeeded!\n"); - 2271: 50 push %eax - 2272: 50 push %eax - 2273: 68 86 46 00 00 push $0x4686 - 2278: 6a 01 push $0x1 - 227a: e8 c1 17 00 00 call 3a40 - exit(); - 227f: e8 4f 16 00 00 call 38d3 - printf(1, "create dd succeeded!\n"); - 2284: 50 push %eax - 2285: 50 push %eax - 2286: 68 70 46 00 00 push $0x4670 - 228b: 6a 01 push $0x1 - 228d: e8 ae 17 00 00 call 3a40 - exit(); - 2292: e8 3c 16 00 00 call 38d3 - printf(1, "create dd/xx/ff succeeded!\n"); - 2297: 52 push %edx - 2298: 52 push %edx - 2299: 68 54 46 00 00 push $0x4654 - 229e: 6a 01 push $0x1 - 22a0: e8 9b 17 00 00 call 3a40 - exit(); - 22a5: e8 29 16 00 00 call 38d3 - printf(1, "chdir dd failed\n"); - 22aa: 50 push %eax - 22ab: 50 push %eax - 22ac: 68 95 45 00 00 push $0x4595 - 22b1: 6a 01 push $0x1 - 22b3: e8 88 17 00 00 call 3a40 - exit(); - 22b8: e8 16 16 00 00 call 38d3 - printf(1, "open (unlinked) dd/dd/ff succeeded\n"); - 22bd: 50 push %eax - 22be: 50 push %eax - 22bf: 68 f0 4f 00 00 push $0x4ff0 - 22c4: 6a 01 push $0x1 - 22c6: e8 75 17 00 00 call 3a40 - exit(); - 22cb: e8 03 16 00 00 call 38d3 - printf(1, "subdir mkdir dd/dd failed\n"); - 22d0: 53 push %ebx - 22d1: 53 push %ebx - 22d2: 68 f3 44 00 00 push $0x44f3 - 22d7: 6a 01 push $0x1 - 22d9: e8 62 17 00 00 call 3a40 - exit(); - 22de: e8 f0 15 00 00 call 38d3 - printf(1, "unlink dd (non-empty dir) succeeded!\n"); - 22e3: 50 push %eax - 22e4: 50 push %eax - 22e5: 68 a4 4f 00 00 push $0x4fa4 - 22ea: 6a 01 push $0x1 - 22ec: e8 4f 17 00 00 call 3a40 - exit(); - 22f1: e8 dd 15 00 00 call 38d3 - printf(1, "create dd/ff failed\n"); - 22f6: 50 push %eax - 22f7: 50 push %eax - 22f8: 68 d7 44 00 00 push $0x44d7 - 22fd: 6a 01 push $0x1 - 22ff: e8 3c 17 00 00 call 3a40 - exit(); - 2304: e8 ca 15 00 00 call 38d3 - printf(1, "subdir mkdir dd failed\n"); - 2309: 50 push %eax - 230a: 50 push %eax - 230b: 68 bf 44 00 00 push $0x44bf - 2310: 6a 01 push $0x1 - 2312: e8 29 17 00 00 call 3a40 - exit(); - 2317: e8 b7 15 00 00 call 38d3 - printf(1, "unlink dd failed\n"); - 231c: 50 push %eax - 231d: 50 push %eax - 231e: 68 a8 47 00 00 push $0x47a8 - 2323: 6a 01 push $0x1 - 2325: e8 16 17 00 00 call 3a40 - exit(); - 232a: e8 a4 15 00 00 call 38d3 - printf(1, "unlink dd/dd failed\n"); - 232f: 52 push %edx - 2330: 52 push %edx - 2331: 68 93 47 00 00 push $0x4793 - 2336: 6a 01 push $0x1 - 2338: e8 03 17 00 00 call 3a40 - exit(); - 233d: e8 91 15 00 00 call 38d3 - printf(1, "unlink non-empty dd succeeded!\n"); - 2342: 51 push %ecx - 2343: 51 push %ecx - 2344: 68 a8 50 00 00 push $0x50a8 - 2349: 6a 01 push $0x1 - 234b: e8 f0 16 00 00 call 3a40 - exit(); - 2350: e8 7e 15 00 00 call 38d3 - printf(1, "unlink dd/ff failed\n"); - 2355: 53 push %ebx - 2356: 53 push %ebx - 2357: 68 7e 47 00 00 push $0x477e - 235c: 6a 01 push $0x1 - 235e: e8 dd 16 00 00 call 3a40 - exit(); - 2363: e8 6b 15 00 00 call 38d3 - printf(1, "chdir dd/xx succeeded!\n"); - 2368: 50 push %eax - 2369: 50 push %eax - 236a: 68 66 47 00 00 push $0x4766 - 236f: 6a 01 push $0x1 - 2371: e8 ca 16 00 00 call 3a40 - exit(); - 2376: e8 58 15 00 00 call 38d3 - printf(1, "chdir dd/ff succeeded!\n"); - 237b: 50 push %eax - 237c: 50 push %eax - 237d: 68 4e 47 00 00 push $0x474e - 2382: 6a 01 push $0x1 - 2384: e8 b7 16 00 00 call 3a40 - exit(); - 2389: e8 45 15 00 00 call 38d3 - printf(1, "unlink dd/ff/ff succeeded!\n"); - 238e: 50 push %eax - 238f: 50 push %eax - 2390: 68 32 47 00 00 push $0x4732 - 2395: 6a 01 push $0x1 - 2397: e8 a4 16 00 00 call 3a40 - exit(); - 239c: e8 32 15 00 00 call 38d3 - printf(1, "unlink dd/xx/ff succeeded!\n"); - 23a1: 50 push %eax - 23a2: 50 push %eax - 23a3: 68 16 47 00 00 push $0x4716 - 23a8: 6a 01 push $0x1 - 23aa: e8 91 16 00 00 call 3a40 - exit(); - 23af: e8 1f 15 00 00 call 38d3 - printf(1, "mkdir dd/dd/ffff succeeded!\n"); - 23b4: 50 push %eax - 23b5: 50 push %eax - 23b6: 68 f9 46 00 00 push $0x46f9 - 23bb: 6a 01 push $0x1 - 23bd: e8 7e 16 00 00 call 3a40 - exit(); - 23c2: e8 0c 15 00 00 call 38d3 - printf(1, "mkdir dd/xx/ff succeeded!\n"); - 23c7: 52 push %edx - 23c8: 52 push %edx - 23c9: 68 de 46 00 00 push $0x46de - 23ce: 6a 01 push $0x1 - 23d0: e8 6b 16 00 00 call 3a40 - exit(); - 23d5: e8 f9 14 00 00 call 38d3 - printf(1, "read dd/dd/ffff wrong len\n"); - 23da: 51 push %ecx - 23db: 51 push %ecx - 23dc: 68 0b 46 00 00 push $0x460b - 23e1: 6a 01 push $0x1 - 23e3: e8 58 16 00 00 call 3a40 - exit(); - 23e8: e8 e6 14 00 00 call 38d3 - printf(1, "open dd/dd/ffff failed\n"); - 23ed: 53 push %ebx - 23ee: 53 push %ebx - 23ef: 68 f3 45 00 00 push $0x45f3 - 23f4: 6a 01 push $0x1 - 23f6: e8 45 16 00 00 call 3a40 - exit(); - 23fb: e8 d3 14 00 00 call 38d3 - -00002400 : -void bigwrite(void) { - 2400: 55 push %ebp - 2401: 89 e5 mov %esp,%ebp - 2403: 56 push %esi - 2404: 53 push %ebx - for (sz = 499; sz < 12 * 512; sz += 471) { - 2405: bb f3 01 00 00 mov $0x1f3,%ebx - printf(1, "bigwrite test\n"); - 240a: 83 ec 08 sub $0x8,%esp - 240d: 68 c5 47 00 00 push $0x47c5 - 2412: 6a 01 push $0x1 - 2414: e8 27 16 00 00 call 3a40 - unlink("bigwrite"); - 2419: c7 04 24 d4 47 00 00 movl $0x47d4,(%esp) - 2420: e8 2e 15 00 00 call 3953 - 2425: 83 c4 10 add $0x10,%esp - 2428: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 242f: 90 nop - fd = open("bigwrite", O_CREATE | O_RDWR); - 2430: 83 ec 08 sub $0x8,%esp - 2433: 68 02 02 00 00 push $0x202 - 2438: 68 d4 47 00 00 push $0x47d4 - 243d: e8 f9 14 00 00 call 393b - if (fd < 0) { - 2442: 83 c4 10 add $0x10,%esp - fd = open("bigwrite", O_CREATE | O_RDWR); - 2445: 89 c6 mov %eax,%esi - if (fd < 0) { - 2447: 85 c0 test %eax,%eax - 2449: 78 7e js 24c9 - int cc = write(fd, buf, sz); - 244b: 83 ec 04 sub $0x4,%esp - 244e: 53 push %ebx - 244f: 68 a0 85 00 00 push $0x85a0 - 2454: 50 push %eax - 2455: e8 e9 14 00 00 call 3943 - if (cc != sz) { - 245a: 83 c4 10 add $0x10,%esp - 245d: 39 d8 cmp %ebx,%eax - 245f: 75 55 jne 24b6 - int cc = write(fd, buf, sz); - 2461: 83 ec 04 sub $0x4,%esp - 2464: 53 push %ebx - 2465: 68 a0 85 00 00 push $0x85a0 - 246a: 56 push %esi - 246b: e8 d3 14 00 00 call 3943 - if (cc != sz) { - 2470: 83 c4 10 add $0x10,%esp - 2473: 39 d8 cmp %ebx,%eax - 2475: 75 3f jne 24b6 - close(fd); - 2477: 83 ec 0c sub $0xc,%esp - for (sz = 499; sz < 12 * 512; sz += 471) { - 247a: 81 c3 d7 01 00 00 add $0x1d7,%ebx - close(fd); - 2480: 56 push %esi - 2481: e8 e5 14 00 00 call 396b - unlink("bigwrite"); - 2486: c7 04 24 d4 47 00 00 movl $0x47d4,(%esp) - 248d: e8 c1 14 00 00 call 3953 - for (sz = 499; sz < 12 * 512; sz += 471) { - 2492: 83 c4 10 add $0x10,%esp - 2495: 81 fb 07 18 00 00 cmp $0x1807,%ebx - 249b: 75 93 jne 2430 - printf(1, "bigwrite ok\n"); - 249d: 83 ec 08 sub $0x8,%esp - 24a0: 68 07 48 00 00 push $0x4807 - 24a5: 6a 01 push $0x1 - 24a7: e8 94 15 00 00 call 3a40 -} - 24ac: 83 c4 10 add $0x10,%esp - 24af: 8d 65 f8 lea -0x8(%ebp),%esp - 24b2: 5b pop %ebx - 24b3: 5e pop %esi - 24b4: 5d pop %ebp - 24b5: c3 ret - printf(1, "write(%d) ret %d\n", sz, cc); - 24b6: 50 push %eax - 24b7: 53 push %ebx - 24b8: 68 f5 47 00 00 push $0x47f5 - 24bd: 6a 01 push $0x1 - 24bf: e8 7c 15 00 00 call 3a40 - exit(); - 24c4: e8 0a 14 00 00 call 38d3 - printf(1, "cannot create bigwrite\n"); - 24c9: 83 ec 08 sub $0x8,%esp - 24cc: 68 dd 47 00 00 push $0x47dd - 24d1: 6a 01 push $0x1 - 24d3: e8 68 15 00 00 call 3a40 - exit(); - 24d8: e8 f6 13 00 00 call 38d3 - 24dd: 8d 76 00 lea 0x0(%esi),%esi - -000024e0 : -void bigfile(void) { - 24e0: 55 push %ebp - 24e1: 89 e5 mov %esp,%ebp - 24e3: 57 push %edi - 24e4: 56 push %esi - 24e5: 53 push %ebx - 24e6: 83 ec 14 sub $0x14,%esp - printf(1, "bigfile test\n"); - 24e9: 68 14 48 00 00 push $0x4814 - 24ee: 6a 01 push $0x1 - 24f0: e8 4b 15 00 00 call 3a40 - unlink("bigfile"); - 24f5: c7 04 24 30 48 00 00 movl $0x4830,(%esp) - 24fc: e8 52 14 00 00 call 3953 - fd = open("bigfile", O_CREATE | O_RDWR); - 2501: 58 pop %eax - 2502: 5a pop %edx - 2503: 68 02 02 00 00 push $0x202 - 2508: 68 30 48 00 00 push $0x4830 - 250d: e8 29 14 00 00 call 393b - if (fd < 0) { - 2512: 83 c4 10 add $0x10,%esp - 2515: 85 c0 test %eax,%eax - 2517: 0f 88 5e 01 00 00 js 267b - 251d: 89 c6 mov %eax,%esi - for (i = 0; i < 20; i++) { - 251f: 31 db xor %ebx,%ebx - 2521: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - memset(buf, i, 600); - 2528: 83 ec 04 sub $0x4,%esp - 252b: 68 58 02 00 00 push $0x258 - 2530: 53 push %ebx - 2531: 68 a0 85 00 00 push $0x85a0 - 2536: e8 05 12 00 00 call 3740 - if (write(fd, buf, 600) != 600) { - 253b: 83 c4 0c add $0xc,%esp - 253e: 68 58 02 00 00 push $0x258 - 2543: 68 a0 85 00 00 push $0x85a0 - 2548: 56 push %esi - 2549: e8 f5 13 00 00 call 3943 - 254e: 83 c4 10 add $0x10,%esp - 2551: 3d 58 02 00 00 cmp $0x258,%eax - 2556: 0f 85 f8 00 00 00 jne 2654 - for (i = 0; i < 20; i++) { - 255c: 83 c3 01 add $0x1,%ebx - 255f: 83 fb 14 cmp $0x14,%ebx - 2562: 75 c4 jne 2528 - close(fd); - 2564: 83 ec 0c sub $0xc,%esp - 2567: 56 push %esi - 2568: e8 fe 13 00 00 call 396b - fd = open("bigfile", 0); - 256d: 5e pop %esi - 256e: 5f pop %edi - 256f: 6a 00 push $0x0 - 2571: 68 30 48 00 00 push $0x4830 - 2576: e8 c0 13 00 00 call 393b - if (fd < 0) { - 257b: 83 c4 10 add $0x10,%esp - fd = open("bigfile", 0); - 257e: 89 c6 mov %eax,%esi - if (fd < 0) { - 2580: 85 c0 test %eax,%eax - 2582: 0f 88 e0 00 00 00 js 2668 - total = 0; - 2588: 31 db xor %ebx,%ebx - for (i = 0;; i++) { - 258a: 31 ff xor %edi,%edi - 258c: eb 30 jmp 25be - 258e: 66 90 xchg %ax,%ax - if (cc != 300) { - 2590: 3d 2c 01 00 00 cmp $0x12c,%eax - 2595: 0f 85 91 00 00 00 jne 262c - if (buf[0] != i / 2 || buf[299] != i / 2) { - 259b: 89 fa mov %edi,%edx - 259d: 0f be 05 a0 85 00 00 movsbl 0x85a0,%eax - 25a4: d1 fa sar %edx - 25a6: 39 d0 cmp %edx,%eax - 25a8: 75 6e jne 2618 - 25aa: 0f be 15 cb 86 00 00 movsbl 0x86cb,%edx - 25b1: 39 d0 cmp %edx,%eax - 25b3: 75 63 jne 2618 - total += cc; - 25b5: 81 c3 2c 01 00 00 add $0x12c,%ebx - for (i = 0;; i++) { - 25bb: 83 c7 01 add $0x1,%edi - cc = read(fd, buf, 300); - 25be: 83 ec 04 sub $0x4,%esp - 25c1: 68 2c 01 00 00 push $0x12c - 25c6: 68 a0 85 00 00 push $0x85a0 - 25cb: 56 push %esi - 25cc: e8 1a 13 00 00 call 38eb - if (cc < 0) { - 25d1: 83 c4 10 add $0x10,%esp - 25d4: 85 c0 test %eax,%eax - 25d6: 78 68 js 2640 - if (cc == 0) { - 25d8: 75 b6 jne 2590 - close(fd); - 25da: 83 ec 0c sub $0xc,%esp - 25dd: 56 push %esi - 25de: e8 88 13 00 00 call 396b - if (total != 20 * 600) { - 25e3: 83 c4 10 add $0x10,%esp - 25e6: 81 fb e0 2e 00 00 cmp $0x2ee0,%ebx - 25ec: 0f 85 9c 00 00 00 jne 268e - unlink("bigfile"); - 25f2: 83 ec 0c sub $0xc,%esp - 25f5: 68 30 48 00 00 push $0x4830 - 25fa: e8 54 13 00 00 call 3953 - printf(1, "bigfile test ok\n"); - 25ff: 58 pop %eax - 2600: 5a pop %edx - 2601: 68 bf 48 00 00 push $0x48bf - 2606: 6a 01 push $0x1 - 2608: e8 33 14 00 00 call 3a40 -} - 260d: 83 c4 10 add $0x10,%esp - 2610: 8d 65 f4 lea -0xc(%ebp),%esp - 2613: 5b pop %ebx - 2614: 5e pop %esi - 2615: 5f pop %edi - 2616: 5d pop %ebp - 2617: c3 ret - printf(1, "read bigfile wrong data\n"); - 2618: 83 ec 08 sub $0x8,%esp - 261b: 68 8c 48 00 00 push $0x488c - 2620: 6a 01 push $0x1 - 2622: e8 19 14 00 00 call 3a40 - exit(); - 2627: e8 a7 12 00 00 call 38d3 - printf(1, "short read bigfile\n"); - 262c: 83 ec 08 sub $0x8,%esp - 262f: 68 78 48 00 00 push $0x4878 - 2634: 6a 01 push $0x1 - 2636: e8 05 14 00 00 call 3a40 - exit(); - 263b: e8 93 12 00 00 call 38d3 - printf(1, "read bigfile failed\n"); - 2640: 83 ec 08 sub $0x8,%esp - 2643: 68 63 48 00 00 push $0x4863 - 2648: 6a 01 push $0x1 - 264a: e8 f1 13 00 00 call 3a40 - exit(); - 264f: e8 7f 12 00 00 call 38d3 - printf(1, "write bigfile failed\n"); - 2654: 83 ec 08 sub $0x8,%esp - 2657: 68 38 48 00 00 push $0x4838 - 265c: 6a 01 push $0x1 - 265e: e8 dd 13 00 00 call 3a40 - exit(); - 2663: e8 6b 12 00 00 call 38d3 - printf(1, "cannot open bigfile\n"); - 2668: 53 push %ebx - 2669: 53 push %ebx - 266a: 68 4e 48 00 00 push $0x484e - 266f: 6a 01 push $0x1 - 2671: e8 ca 13 00 00 call 3a40 - exit(); - 2676: e8 58 12 00 00 call 38d3 - printf(1, "cannot create bigfile"); - 267b: 50 push %eax - 267c: 50 push %eax - 267d: 68 22 48 00 00 push $0x4822 - 2682: 6a 01 push $0x1 - 2684: e8 b7 13 00 00 call 3a40 - exit(); - 2689: e8 45 12 00 00 call 38d3 - printf(1, "read bigfile wrong total\n"); - 268e: 51 push %ecx - 268f: 51 push %ecx - 2690: 68 a5 48 00 00 push $0x48a5 - 2695: 6a 01 push $0x1 - 2697: e8 a4 13 00 00 call 3a40 - exit(); - 269c: e8 32 12 00 00 call 38d3 - 26a1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 26a8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 26af: 90 nop - -000026b0 : -void fourteen(void) { - 26b0: 55 push %ebp - 26b1: 89 e5 mov %esp,%ebp - 26b3: 83 ec 10 sub $0x10,%esp - printf(1, "fourteen test\n"); - 26b6: 68 d0 48 00 00 push $0x48d0 - 26bb: 6a 01 push $0x1 - 26bd: e8 7e 13 00 00 call 3a40 - if (mkdir("12345678901234") != 0) { - 26c2: c7 04 24 0b 49 00 00 movl $0x490b,(%esp) - 26c9: e8 95 12 00 00 call 3963 - 26ce: 83 c4 10 add $0x10,%esp - 26d1: 85 c0 test %eax,%eax - 26d3: 0f 85 97 00 00 00 jne 2770 - if (mkdir("12345678901234/123456789012345") != 0) { - 26d9: 83 ec 0c sub $0xc,%esp - 26dc: 68 c8 50 00 00 push $0x50c8 - 26e1: e8 7d 12 00 00 call 3963 - 26e6: 83 c4 10 add $0x10,%esp - 26e9: 85 c0 test %eax,%eax - 26eb: 0f 85 de 00 00 00 jne 27cf - fd = open("123456789012345/123456789012345/123456789012345", O_CREATE); - 26f1: 83 ec 08 sub $0x8,%esp - 26f4: 68 00 02 00 00 push $0x200 - 26f9: 68 18 51 00 00 push $0x5118 - 26fe: e8 38 12 00 00 call 393b - if (fd < 0) { - 2703: 83 c4 10 add $0x10,%esp - 2706: 85 c0 test %eax,%eax - 2708: 0f 88 ae 00 00 00 js 27bc - close(fd); - 270e: 83 ec 0c sub $0xc,%esp - 2711: 50 push %eax - 2712: e8 54 12 00 00 call 396b - fd = open("12345678901234/12345678901234/12345678901234", 0); - 2717: 58 pop %eax - 2718: 5a pop %edx - 2719: 6a 00 push $0x0 - 271b: 68 88 51 00 00 push $0x5188 - 2720: e8 16 12 00 00 call 393b - if (fd < 0) { - 2725: 83 c4 10 add $0x10,%esp - 2728: 85 c0 test %eax,%eax - 272a: 78 7d js 27a9 - close(fd); - 272c: 83 ec 0c sub $0xc,%esp - 272f: 50 push %eax - 2730: e8 36 12 00 00 call 396b - if (mkdir("12345678901234/12345678901234") == 0) { - 2735: c7 04 24 fc 48 00 00 movl $0x48fc,(%esp) - 273c: e8 22 12 00 00 call 3963 - 2741: 83 c4 10 add $0x10,%esp - 2744: 85 c0 test %eax,%eax - 2746: 74 4e je 2796 - if (mkdir("123456789012345/12345678901234") == 0) { - 2748: 83 ec 0c sub $0xc,%esp - 274b: 68 24 52 00 00 push $0x5224 - 2750: e8 0e 12 00 00 call 3963 - 2755: 83 c4 10 add $0x10,%esp - 2758: 85 c0 test %eax,%eax - 275a: 74 27 je 2783 - printf(1, "fourteen ok\n"); - 275c: 83 ec 08 sub $0x8,%esp - 275f: 68 1a 49 00 00 push $0x491a - 2764: 6a 01 push $0x1 - 2766: e8 d5 12 00 00 call 3a40 -} - 276b: 83 c4 10 add $0x10,%esp - 276e: c9 leave - 276f: c3 ret - printf(1, "mkdir 12345678901234 failed\n"); - 2770: 50 push %eax - 2771: 50 push %eax - 2772: 68 df 48 00 00 push $0x48df - 2777: 6a 01 push $0x1 - 2779: e8 c2 12 00 00 call 3a40 - exit(); - 277e: e8 50 11 00 00 call 38d3 - printf(1, "mkdir 12345678901234/123456789012345 succeeded!\n"); - 2783: 50 push %eax - 2784: 50 push %eax - 2785: 68 44 52 00 00 push $0x5244 - 278a: 6a 01 push $0x1 - 278c: e8 af 12 00 00 call 3a40 - exit(); - 2791: e8 3d 11 00 00 call 38d3 - printf(1, "mkdir 12345678901234/12345678901234 succeeded!\n"); - 2796: 52 push %edx - 2797: 52 push %edx - 2798: 68 f4 51 00 00 push $0x51f4 - 279d: 6a 01 push $0x1 - 279f: e8 9c 12 00 00 call 3a40 - exit(); - 27a4: e8 2a 11 00 00 call 38d3 - printf(1, "open 12345678901234/12345678901234/12345678901234 failed\n"); - 27a9: 51 push %ecx - 27aa: 51 push %ecx - 27ab: 68 b8 51 00 00 push $0x51b8 - 27b0: 6a 01 push $0x1 - 27b2: e8 89 12 00 00 call 3a40 - exit(); - 27b7: e8 17 11 00 00 call 38d3 - printf(1, "create 123456789012345/123456789012345/123456789012345 failed\n"); - 27bc: 51 push %ecx - 27bd: 51 push %ecx - 27be: 68 48 51 00 00 push $0x5148 - 27c3: 6a 01 push $0x1 - 27c5: e8 76 12 00 00 call 3a40 - exit(); - 27ca: e8 04 11 00 00 call 38d3 - printf(1, "mkdir 12345678901234/123456789012345 failed\n"); - 27cf: 50 push %eax - 27d0: 50 push %eax - 27d1: 68 e8 50 00 00 push $0x50e8 - 27d6: 6a 01 push $0x1 - 27d8: e8 63 12 00 00 call 3a40 - exit(); - 27dd: e8 f1 10 00 00 call 38d3 - 27e2: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 27e9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -000027f0 : -void rmdot(void) { - 27f0: 55 push %ebp - 27f1: 89 e5 mov %esp,%ebp - 27f3: 83 ec 10 sub $0x10,%esp - printf(1, "rmdot test\n"); - 27f6: 68 27 49 00 00 push $0x4927 - 27fb: 6a 01 push $0x1 - 27fd: e8 3e 12 00 00 call 3a40 - if (mkdir("dots") != 0) { - 2802: c7 04 24 33 49 00 00 movl $0x4933,(%esp) - 2809: e8 55 11 00 00 call 3963 - 280e: 83 c4 10 add $0x10,%esp - 2811: 85 c0 test %eax,%eax - 2813: 0f 85 b0 00 00 00 jne 28c9 - if (chdir("dots") != 0) { - 2819: 83 ec 0c sub $0xc,%esp - 281c: 68 33 49 00 00 push $0x4933 - 2821: e8 e5 10 00 00 call 390b - 2826: 83 c4 10 add $0x10,%esp - 2829: 85 c0 test %eax,%eax - 282b: 0f 85 1d 01 00 00 jne 294e - if (unlink(".") == 0) { - 2831: 83 ec 0c sub $0xc,%esp - 2834: 68 de 45 00 00 push $0x45de - 2839: e8 15 11 00 00 call 3953 - 283e: 83 c4 10 add $0x10,%esp - 2841: 85 c0 test %eax,%eax - 2843: 0f 84 f2 00 00 00 je 293b - if (unlink("..") == 0) { - 2849: 83 ec 0c sub $0xc,%esp - 284c: 68 dd 45 00 00 push $0x45dd - 2851: e8 fd 10 00 00 call 3953 - 2856: 83 c4 10 add $0x10,%esp - 2859: 85 c0 test %eax,%eax - 285b: 0f 84 c7 00 00 00 je 2928 - if (chdir("/") != 0) { - 2861: 83 ec 0c sub $0xc,%esp - 2864: 68 b1 3d 00 00 push $0x3db1 - 2869: e8 9d 10 00 00 call 390b - 286e: 83 c4 10 add $0x10,%esp - 2871: 85 c0 test %eax,%eax - 2873: 0f 85 9c 00 00 00 jne 2915 - if (unlink("dots/.") == 0) { - 2879: 83 ec 0c sub $0xc,%esp - 287c: 68 7b 49 00 00 push $0x497b - 2881: e8 cd 10 00 00 call 3953 - 2886: 83 c4 10 add $0x10,%esp - 2889: 85 c0 test %eax,%eax - 288b: 74 75 je 2902 - if (unlink("dots/..") == 0) { - 288d: 83 ec 0c sub $0xc,%esp - 2890: 68 99 49 00 00 push $0x4999 - 2895: e8 b9 10 00 00 call 3953 - 289a: 83 c4 10 add $0x10,%esp - 289d: 85 c0 test %eax,%eax - 289f: 74 4e je 28ef - if (unlink("dots") != 0) { - 28a1: 83 ec 0c sub $0xc,%esp - 28a4: 68 33 49 00 00 push $0x4933 - 28a9: e8 a5 10 00 00 call 3953 - 28ae: 83 c4 10 add $0x10,%esp - 28b1: 85 c0 test %eax,%eax - 28b3: 75 27 jne 28dc - printf(1, "rmdot ok\n"); - 28b5: 83 ec 08 sub $0x8,%esp - 28b8: 68 ce 49 00 00 push $0x49ce - 28bd: 6a 01 push $0x1 - 28bf: e8 7c 11 00 00 call 3a40 -} - 28c4: 83 c4 10 add $0x10,%esp - 28c7: c9 leave - 28c8: c3 ret - printf(1, "mkdir dots failed\n"); - 28c9: 50 push %eax - 28ca: 50 push %eax - 28cb: 68 38 49 00 00 push $0x4938 - 28d0: 6a 01 push $0x1 - 28d2: e8 69 11 00 00 call 3a40 - exit(); - 28d7: e8 f7 0f 00 00 call 38d3 - printf(1, "unlink dots failed!\n"); - 28dc: 50 push %eax - 28dd: 50 push %eax - 28de: 68 b9 49 00 00 push $0x49b9 - 28e3: 6a 01 push $0x1 - 28e5: e8 56 11 00 00 call 3a40 - exit(); - 28ea: e8 e4 0f 00 00 call 38d3 - printf(1, "unlink dots/.. worked!\n"); - 28ef: 52 push %edx - 28f0: 52 push %edx - 28f1: 68 a1 49 00 00 push $0x49a1 - 28f6: 6a 01 push $0x1 - 28f8: e8 43 11 00 00 call 3a40 - exit(); - 28fd: e8 d1 0f 00 00 call 38d3 - printf(1, "unlink dots/. worked!\n"); - 2902: 51 push %ecx - 2903: 51 push %ecx - 2904: 68 82 49 00 00 push $0x4982 - 2909: 6a 01 push $0x1 - 290b: e8 30 11 00 00 call 3a40 - exit(); - 2910: e8 be 0f 00 00 call 38d3 - printf(1, "chdir / failed\n"); - 2915: 50 push %eax - 2916: 50 push %eax - 2917: 68 b3 3d 00 00 push $0x3db3 - 291c: 6a 01 push $0x1 - 291e: e8 1d 11 00 00 call 3a40 - exit(); - 2923: e8 ab 0f 00 00 call 38d3 - printf(1, "rm .. worked!\n"); - 2928: 50 push %eax - 2929: 50 push %eax - 292a: 68 6c 49 00 00 push $0x496c - 292f: 6a 01 push $0x1 - 2931: e8 0a 11 00 00 call 3a40 - exit(); - 2936: e8 98 0f 00 00 call 38d3 - printf(1, "rm . worked!\n"); - 293b: 50 push %eax - 293c: 50 push %eax - 293d: 68 5e 49 00 00 push $0x495e - 2942: 6a 01 push $0x1 - 2944: e8 f7 10 00 00 call 3a40 - exit(); - 2949: e8 85 0f 00 00 call 38d3 - printf(1, "chdir dots failed\n"); - 294e: 50 push %eax - 294f: 50 push %eax - 2950: 68 4b 49 00 00 push $0x494b - 2955: 6a 01 push $0x1 - 2957: e8 e4 10 00 00 call 3a40 - exit(); - 295c: e8 72 0f 00 00 call 38d3 - 2961: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 2968: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 296f: 90 nop - -00002970 : -void dirfile(void) { - 2970: 55 push %ebp - 2971: 89 e5 mov %esp,%ebp - 2973: 53 push %ebx - 2974: 83 ec 0c sub $0xc,%esp - printf(1, "dir vs file\n"); - 2977: 68 d8 49 00 00 push $0x49d8 - 297c: 6a 01 push $0x1 - 297e: e8 bd 10 00 00 call 3a40 - fd = open("dirfile", O_CREATE); - 2983: 5b pop %ebx - 2984: 58 pop %eax - 2985: 68 00 02 00 00 push $0x200 - 298a: 68 e5 49 00 00 push $0x49e5 - 298f: e8 a7 0f 00 00 call 393b - if (fd < 0) { - 2994: 83 c4 10 add $0x10,%esp - 2997: 85 c0 test %eax,%eax - 2999: 0f 88 43 01 00 00 js 2ae2 - close(fd); - 299f: 83 ec 0c sub $0xc,%esp - 29a2: 50 push %eax - 29a3: e8 c3 0f 00 00 call 396b - if (chdir("dirfile") == 0) { - 29a8: c7 04 24 e5 49 00 00 movl $0x49e5,(%esp) - 29af: e8 57 0f 00 00 call 390b - 29b4: 83 c4 10 add $0x10,%esp - 29b7: 85 c0 test %eax,%eax - 29b9: 0f 84 10 01 00 00 je 2acf - fd = open("dirfile/xx", 0); - 29bf: 83 ec 08 sub $0x8,%esp - 29c2: 6a 00 push $0x0 - 29c4: 68 1e 4a 00 00 push $0x4a1e - 29c9: e8 6d 0f 00 00 call 393b - if (fd >= 0) { - 29ce: 83 c4 10 add $0x10,%esp - 29d1: 85 c0 test %eax,%eax - 29d3: 0f 89 e3 00 00 00 jns 2abc - fd = open("dirfile/xx", O_CREATE); - 29d9: 83 ec 08 sub $0x8,%esp - 29dc: 68 00 02 00 00 push $0x200 - 29e1: 68 1e 4a 00 00 push $0x4a1e - 29e6: e8 50 0f 00 00 call 393b - if (fd >= 0) { - 29eb: 83 c4 10 add $0x10,%esp - 29ee: 85 c0 test %eax,%eax - 29f0: 0f 89 c6 00 00 00 jns 2abc - if (mkdir("dirfile/xx") == 0) { - 29f6: 83 ec 0c sub $0xc,%esp - 29f9: 68 1e 4a 00 00 push $0x4a1e - 29fe: e8 60 0f 00 00 call 3963 - 2a03: 83 c4 10 add $0x10,%esp - 2a06: 85 c0 test %eax,%eax - 2a08: 0f 84 46 01 00 00 je 2b54 - if (unlink("dirfile/xx") == 0) { - 2a0e: 83 ec 0c sub $0xc,%esp - 2a11: 68 1e 4a 00 00 push $0x4a1e - 2a16: e8 38 0f 00 00 call 3953 - 2a1b: 83 c4 10 add $0x10,%esp - 2a1e: 85 c0 test %eax,%eax - 2a20: 0f 84 1b 01 00 00 je 2b41 - if (link("README", "dirfile/xx") == 0) { - 2a26: 83 ec 08 sub $0x8,%esp - 2a29: 68 1e 4a 00 00 push $0x4a1e - 2a2e: 68 82 4a 00 00 push $0x4a82 - 2a33: e8 23 0f 00 00 call 395b - 2a38: 83 c4 10 add $0x10,%esp - 2a3b: 85 c0 test %eax,%eax - 2a3d: 0f 84 eb 00 00 00 je 2b2e - if (unlink("dirfile") != 0) { - 2a43: 83 ec 0c sub $0xc,%esp - 2a46: 68 e5 49 00 00 push $0x49e5 - 2a4b: e8 03 0f 00 00 call 3953 - 2a50: 83 c4 10 add $0x10,%esp - 2a53: 85 c0 test %eax,%eax - 2a55: 0f 85 c0 00 00 00 jne 2b1b - fd = open(".", O_RDWR); - 2a5b: 83 ec 08 sub $0x8,%esp - 2a5e: 6a 02 push $0x2 - 2a60: 68 de 45 00 00 push $0x45de - 2a65: e8 d1 0e 00 00 call 393b - if (fd >= 0) { - 2a6a: 83 c4 10 add $0x10,%esp - 2a6d: 85 c0 test %eax,%eax - 2a6f: 0f 89 93 00 00 00 jns 2b08 - fd = open(".", 0); - 2a75: 83 ec 08 sub $0x8,%esp - 2a78: 6a 00 push $0x0 - 2a7a: 68 de 45 00 00 push $0x45de - 2a7f: e8 b7 0e 00 00 call 393b - if (write(fd, "x", 1) > 0) { - 2a84: 83 c4 0c add $0xc,%esp - 2a87: 6a 01 push $0x1 - fd = open(".", 0); - 2a89: 89 c3 mov %eax,%ebx - if (write(fd, "x", 1) > 0) { - 2a8b: 68 c1 46 00 00 push $0x46c1 - 2a90: 50 push %eax - 2a91: e8 ad 0e 00 00 call 3943 - 2a96: 83 c4 10 add $0x10,%esp - 2a99: 85 c0 test %eax,%eax - 2a9b: 7f 58 jg 2af5 - close(fd); - 2a9d: 83 ec 0c sub $0xc,%esp - 2aa0: 53 push %ebx - 2aa1: e8 c5 0e 00 00 call 396b - printf(1, "dir vs file OK\n"); - 2aa6: 58 pop %eax - 2aa7: 5a pop %edx - 2aa8: 68 b5 4a 00 00 push $0x4ab5 - 2aad: 6a 01 push $0x1 - 2aaf: e8 8c 0f 00 00 call 3a40 -} - 2ab4: 8b 5d fc mov -0x4(%ebp),%ebx - 2ab7: 83 c4 10 add $0x10,%esp - 2aba: c9 leave - 2abb: c3 ret - printf(1, "create dirfile/xx succeeded!\n"); - 2abc: 50 push %eax - 2abd: 50 push %eax - 2abe: 68 29 4a 00 00 push $0x4a29 - 2ac3: 6a 01 push $0x1 - 2ac5: e8 76 0f 00 00 call 3a40 - exit(); - 2aca: e8 04 0e 00 00 call 38d3 - printf(1, "chdir dirfile succeeded!\n"); - 2acf: 52 push %edx - 2ad0: 52 push %edx - 2ad1: 68 04 4a 00 00 push $0x4a04 - 2ad6: 6a 01 push $0x1 - 2ad8: e8 63 0f 00 00 call 3a40 - exit(); - 2add: e8 f1 0d 00 00 call 38d3 - printf(1, "create dirfile failed\n"); - 2ae2: 51 push %ecx - 2ae3: 51 push %ecx - 2ae4: 68 ed 49 00 00 push $0x49ed - 2ae9: 6a 01 push $0x1 - 2aeb: e8 50 0f 00 00 call 3a40 - exit(); - 2af0: e8 de 0d 00 00 call 38d3 - printf(1, "write . succeeded!\n"); - 2af5: 51 push %ecx - 2af6: 51 push %ecx - 2af7: 68 a1 4a 00 00 push $0x4aa1 - 2afc: 6a 01 push $0x1 - 2afe: e8 3d 0f 00 00 call 3a40 - exit(); - 2b03: e8 cb 0d 00 00 call 38d3 - printf(1, "open . for writing succeeded!\n"); - 2b08: 53 push %ebx - 2b09: 53 push %ebx - 2b0a: 68 98 52 00 00 push $0x5298 - 2b0f: 6a 01 push $0x1 - 2b11: e8 2a 0f 00 00 call 3a40 - exit(); - 2b16: e8 b8 0d 00 00 call 38d3 - printf(1, "unlink dirfile failed!\n"); - 2b1b: 50 push %eax - 2b1c: 50 push %eax - 2b1d: 68 89 4a 00 00 push $0x4a89 - 2b22: 6a 01 push $0x1 - 2b24: e8 17 0f 00 00 call 3a40 - exit(); - 2b29: e8 a5 0d 00 00 call 38d3 - printf(1, "link to dirfile/xx succeeded!\n"); - 2b2e: 50 push %eax - 2b2f: 50 push %eax - 2b30: 68 78 52 00 00 push $0x5278 - 2b35: 6a 01 push $0x1 - 2b37: e8 04 0f 00 00 call 3a40 - exit(); - 2b3c: e8 92 0d 00 00 call 38d3 - printf(1, "unlink dirfile/xx succeeded!\n"); - 2b41: 50 push %eax - 2b42: 50 push %eax - 2b43: 68 64 4a 00 00 push $0x4a64 - 2b48: 6a 01 push $0x1 - 2b4a: e8 f1 0e 00 00 call 3a40 - exit(); - 2b4f: e8 7f 0d 00 00 call 38d3 - printf(1, "mkdir dirfile/xx succeeded!\n"); - 2b54: 50 push %eax - 2b55: 50 push %eax - 2b56: 68 47 4a 00 00 push $0x4a47 - 2b5b: 6a 01 push $0x1 - 2b5d: e8 de 0e 00 00 call 3a40 - exit(); - 2b62: e8 6c 0d 00 00 call 38d3 - 2b67: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 2b6e: 66 90 xchg %ax,%ax - -00002b70 : -void iref(void) { - 2b70: 55 push %ebp - 2b71: 89 e5 mov %esp,%ebp - 2b73: 53 push %ebx - printf(1, "empty file name\n"); - 2b74: bb 33 00 00 00 mov $0x33,%ebx -void iref(void) { - 2b79: 83 ec 0c sub $0xc,%esp - printf(1, "empty file name\n"); - 2b7c: 68 c5 4a 00 00 push $0x4ac5 - 2b81: 6a 01 push $0x1 - 2b83: e8 b8 0e 00 00 call 3a40 - 2b88: 83 c4 10 add $0x10,%esp - 2b8b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 2b8f: 90 nop - if (mkdir("irefd") != 0) { - 2b90: 83 ec 0c sub $0xc,%esp - 2b93: 68 d6 4a 00 00 push $0x4ad6 - 2b98: e8 c6 0d 00 00 call 3963 - 2b9d: 83 c4 10 add $0x10,%esp - 2ba0: 85 c0 test %eax,%eax - 2ba2: 0f 85 bb 00 00 00 jne 2c63 - if (chdir("irefd") != 0) { - 2ba8: 83 ec 0c sub $0xc,%esp - 2bab: 68 d6 4a 00 00 push $0x4ad6 - 2bb0: e8 56 0d 00 00 call 390b - 2bb5: 83 c4 10 add $0x10,%esp - 2bb8: 85 c0 test %eax,%eax - 2bba: 0f 85 b7 00 00 00 jne 2c77 - mkdir(""); - 2bc0: 83 ec 0c sub $0xc,%esp - 2bc3: 68 8b 41 00 00 push $0x418b - 2bc8: e8 96 0d 00 00 call 3963 - link("README", ""); - 2bcd: 59 pop %ecx - 2bce: 58 pop %eax - 2bcf: 68 8b 41 00 00 push $0x418b - 2bd4: 68 82 4a 00 00 push $0x4a82 - 2bd9: e8 7d 0d 00 00 call 395b - fd = open("", O_CREATE); - 2bde: 58 pop %eax - 2bdf: 5a pop %edx - 2be0: 68 00 02 00 00 push $0x200 - 2be5: 68 8b 41 00 00 push $0x418b - 2bea: e8 4c 0d 00 00 call 393b - if (fd >= 0) { - 2bef: 83 c4 10 add $0x10,%esp - 2bf2: 85 c0 test %eax,%eax - 2bf4: 78 0c js 2c02 - close(fd); - 2bf6: 83 ec 0c sub $0xc,%esp - 2bf9: 50 push %eax - 2bfa: e8 6c 0d 00 00 call 396b - 2bff: 83 c4 10 add $0x10,%esp - fd = open("xx", O_CREATE); - 2c02: 83 ec 08 sub $0x8,%esp - 2c05: 68 00 02 00 00 push $0x200 - 2c0a: 68 c0 46 00 00 push $0x46c0 - 2c0f: e8 27 0d 00 00 call 393b - if (fd >= 0) { - 2c14: 83 c4 10 add $0x10,%esp - 2c17: 85 c0 test %eax,%eax - 2c19: 78 0c js 2c27 - close(fd); - 2c1b: 83 ec 0c sub $0xc,%esp - 2c1e: 50 push %eax - 2c1f: e8 47 0d 00 00 call 396b - 2c24: 83 c4 10 add $0x10,%esp - unlink("xx"); - 2c27: 83 ec 0c sub $0xc,%esp - 2c2a: 68 c0 46 00 00 push $0x46c0 - 2c2f: e8 1f 0d 00 00 call 3953 - for (i = 0; i < 50 + 1; i++) { - 2c34: 83 c4 10 add $0x10,%esp - 2c37: 83 eb 01 sub $0x1,%ebx - 2c3a: 0f 85 50 ff ff ff jne 2b90 - chdir("/"); - 2c40: 83 ec 0c sub $0xc,%esp - 2c43: 68 b1 3d 00 00 push $0x3db1 - 2c48: e8 be 0c 00 00 call 390b - printf(1, "empty file name OK\n"); - 2c4d: 58 pop %eax - 2c4e: 5a pop %edx - 2c4f: 68 04 4b 00 00 push $0x4b04 - 2c54: 6a 01 push $0x1 - 2c56: e8 e5 0d 00 00 call 3a40 -} - 2c5b: 8b 5d fc mov -0x4(%ebp),%ebx - 2c5e: 83 c4 10 add $0x10,%esp - 2c61: c9 leave - 2c62: c3 ret - printf(1, "mkdir irefd failed\n"); - 2c63: 83 ec 08 sub $0x8,%esp - 2c66: 68 dc 4a 00 00 push $0x4adc - 2c6b: 6a 01 push $0x1 - 2c6d: e8 ce 0d 00 00 call 3a40 - exit(); - 2c72: e8 5c 0c 00 00 call 38d3 - printf(1, "chdir irefd failed\n"); - 2c77: 83 ec 08 sub $0x8,%esp - 2c7a: 68 f0 4a 00 00 push $0x4af0 - 2c7f: 6a 01 push $0x1 - 2c81: e8 ba 0d 00 00 call 3a40 - exit(); - 2c86: e8 48 0c 00 00 call 38d3 - 2c8b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 2c8f: 90 nop - -00002c90 : -void forktest(void) { - 2c90: 55 push %ebp - 2c91: 89 e5 mov %esp,%ebp - 2c93: 53 push %ebx - for (n = 0; n < 1000; n++) { - 2c94: 31 db xor %ebx,%ebx -void forktest(void) { - 2c96: 83 ec 0c sub $0xc,%esp - printf(1, "fork test\n"); - 2c99: 68 18 4b 00 00 push $0x4b18 - 2c9e: 6a 01 push $0x1 - 2ca0: e8 9b 0d 00 00 call 3a40 - 2ca5: 83 c4 10 add $0x10,%esp - 2ca8: eb 13 jmp 2cbd - 2caa: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - if (pid == 0) { - 2cb0: 74 4a je 2cfc - for (n = 0; n < 1000; n++) { - 2cb2: 83 c3 01 add $0x1,%ebx - 2cb5: 81 fb e8 03 00 00 cmp $0x3e8,%ebx - 2cbb: 74 6b je 2d28 - pid = fork(); - 2cbd: e8 09 0c 00 00 call 38cb - if (pid < 0) { - 2cc2: 85 c0 test %eax,%eax - 2cc4: 79 ea jns 2cb0 - for (; n > 0; n--) { - 2cc6: 85 db test %ebx,%ebx - 2cc8: 74 14 je 2cde - 2cca: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - if (wait() < 0) { - 2cd0: e8 06 0c 00 00 call 38db - 2cd5: 85 c0 test %eax,%eax - 2cd7: 78 28 js 2d01 - for (; n > 0; n--) { - 2cd9: 83 eb 01 sub $0x1,%ebx - 2cdc: 75 f2 jne 2cd0 - if (wait() != -1) { - 2cde: e8 f8 0b 00 00 call 38db - 2ce3: 83 f8 ff cmp $0xffffffff,%eax - 2ce6: 75 2d jne 2d15 - printf(1, "fork test OK\n"); - 2ce8: 83 ec 08 sub $0x8,%esp - 2ceb: 68 4a 4b 00 00 push $0x4b4a - 2cf0: 6a 01 push $0x1 - 2cf2: e8 49 0d 00 00 call 3a40 -} - 2cf7: 8b 5d fc mov -0x4(%ebp),%ebx - 2cfa: c9 leave - 2cfb: c3 ret - exit(); - 2cfc: e8 d2 0b 00 00 call 38d3 - printf(1, "wait stopped early\n"); - 2d01: 83 ec 08 sub $0x8,%esp - 2d04: 68 23 4b 00 00 push $0x4b23 - 2d09: 6a 01 push $0x1 - 2d0b: e8 30 0d 00 00 call 3a40 - exit(); - 2d10: e8 be 0b 00 00 call 38d3 - printf(1, "wait got too many\n"); - 2d15: 52 push %edx - 2d16: 52 push %edx - 2d17: 68 37 4b 00 00 push $0x4b37 - 2d1c: 6a 01 push $0x1 - 2d1e: e8 1d 0d 00 00 call 3a40 - exit(); - 2d23: e8 ab 0b 00 00 call 38d3 - printf(1, "fork claimed to work 1000 times!\n"); - 2d28: 50 push %eax - 2d29: 50 push %eax - 2d2a: 68 b8 52 00 00 push $0x52b8 - 2d2f: 6a 01 push $0x1 - 2d31: e8 0a 0d 00 00 call 3a40 - exit(); - 2d36: e8 98 0b 00 00 call 38d3 - 2d3b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 2d3f: 90 nop - -00002d40 : -void sbrktest(void) { - 2d40: 55 push %ebp - 2d41: 89 e5 mov %esp,%ebp - 2d43: 57 push %edi - 2d44: 56 push %esi - for (i = 0; i < 5000; i++) { - 2d45: 31 f6 xor %esi,%esi -void sbrktest(void) { - 2d47: 53 push %ebx - 2d48: 83 ec 64 sub $0x64,%esp - printf(stdout, "sbrk test\n"); - 2d4b: 68 58 4b 00 00 push $0x4b58 - 2d50: ff 35 58 5e 00 00 push 0x5e58 - 2d56: e8 e5 0c 00 00 call 3a40 - oldbrk = sbrk(0); - 2d5b: c7 04 24 00 00 00 00 movl $0x0,(%esp) - 2d62: e8 bc 0b 00 00 call 3923 - a = sbrk(0); - 2d67: c7 04 24 00 00 00 00 movl $0x0,(%esp) - oldbrk = sbrk(0); - 2d6e: 89 45 a4 mov %eax,-0x5c(%ebp) - a = sbrk(0); - 2d71: e8 ad 0b 00 00 call 3923 - 2d76: 83 c4 10 add $0x10,%esp - 2d79: 89 c3 mov %eax,%ebx - for (i = 0; i < 5000; i++) { - 2d7b: eb 05 jmp 2d82 - 2d7d: 8d 76 00 lea 0x0(%esi),%esi - a = b + 1; - 2d80: 89 c3 mov %eax,%ebx - b = sbrk(1); - 2d82: 83 ec 0c sub $0xc,%esp - 2d85: 6a 01 push $0x1 - 2d87: e8 97 0b 00 00 call 3923 - if (b != a) { - 2d8c: 83 c4 10 add $0x10,%esp - 2d8f: 39 d8 cmp %ebx,%eax - 2d91: 0f 85 9c 02 00 00 jne 3033 - for (i = 0; i < 5000; i++) { - 2d97: 83 c6 01 add $0x1,%esi - *b = 1; - 2d9a: c6 03 01 movb $0x1,(%ebx) - a = b + 1; - 2d9d: 8d 43 01 lea 0x1(%ebx),%eax - for (i = 0; i < 5000; i++) { - 2da0: 81 fe 88 13 00 00 cmp $0x1388,%esi - 2da6: 75 d8 jne 2d80 - pid = fork(); - 2da8: e8 1e 0b 00 00 call 38cb - 2dad: 89 c6 mov %eax,%esi - if (pid < 0) { - 2daf: 85 c0 test %eax,%eax - 2db1: 0f 88 02 03 00 00 js 30b9 - c = sbrk(1); - 2db7: 83 ec 0c sub $0xc,%esp - if (c != a + 1) { - 2dba: 83 c3 02 add $0x2,%ebx - c = sbrk(1); - 2dbd: 6a 01 push $0x1 - 2dbf: e8 5f 0b 00 00 call 3923 - c = sbrk(1); - 2dc4: c7 04 24 01 00 00 00 movl $0x1,(%esp) - 2dcb: e8 53 0b 00 00 call 3923 - if (c != a + 1) { - 2dd0: 83 c4 10 add $0x10,%esp - 2dd3: 39 c3 cmp %eax,%ebx - 2dd5: 0f 85 3b 03 00 00 jne 3116 - if (pid == 0) { - 2ddb: 85 f6 test %esi,%esi - 2ddd: 0f 84 2e 03 00 00 je 3111 - wait(); - 2de3: e8 f3 0a 00 00 call 38db - a = sbrk(0); - 2de8: 83 ec 0c sub $0xc,%esp - 2deb: 6a 00 push $0x0 - 2ded: e8 31 0b 00 00 call 3923 - 2df2: 89 c3 mov %eax,%ebx - amt = (BIG) -(uint)a; - 2df4: b8 00 00 40 06 mov $0x6400000,%eax - 2df9: 29 d8 sub %ebx,%eax - p = sbrk(amt); - 2dfb: 89 04 24 mov %eax,(%esp) - 2dfe: e8 20 0b 00 00 call 3923 - if (p != a) { - 2e03: 83 c4 10 add $0x10,%esp - 2e06: 39 c3 cmp %eax,%ebx - 2e08: 0f 85 94 02 00 00 jne 30a2 - a = sbrk(0); - 2e0e: 83 ec 0c sub $0xc,%esp - *lastaddr = 99; - 2e11: c6 05 ff ff 3f 06 63 movb $0x63,0x63fffff - a = sbrk(0); - 2e18: 6a 00 push $0x0 - 2e1a: e8 04 0b 00 00 call 3923 - c = sbrk(-4096); - 2e1f: c7 04 24 00 f0 ff ff movl $0xfffff000,(%esp) - a = sbrk(0); - 2e26: 89 c3 mov %eax,%ebx - c = sbrk(-4096); - 2e28: e8 f6 0a 00 00 call 3923 - if (c == (char*)0xffffffff) { - 2e2d: 83 c4 10 add $0x10,%esp - 2e30: 83 f8 ff cmp $0xffffffff,%eax - 2e33: 0f 84 22 03 00 00 je 315b - c = sbrk(0); - 2e39: 83 ec 0c sub $0xc,%esp - 2e3c: 6a 00 push $0x0 - 2e3e: e8 e0 0a 00 00 call 3923 - if (c != a - 4096) { - 2e43: 8d 93 00 f0 ff ff lea -0x1000(%ebx),%edx - 2e49: 83 c4 10 add $0x10,%esp - 2e4c: 39 d0 cmp %edx,%eax - 2e4e: 0f 85 f0 02 00 00 jne 3144 - a = sbrk(0); - 2e54: 83 ec 0c sub $0xc,%esp - 2e57: 6a 00 push $0x0 - 2e59: e8 c5 0a 00 00 call 3923 - c = sbrk(4096); - 2e5e: c7 04 24 00 10 00 00 movl $0x1000,(%esp) - a = sbrk(0); - 2e65: 89 c3 mov %eax,%ebx - c = sbrk(4096); - 2e67: e8 b7 0a 00 00 call 3923 - if (c != a || sbrk(0) != a + 4096) { - 2e6c: 83 c4 10 add $0x10,%esp - c = sbrk(4096); - 2e6f: 89 c6 mov %eax,%esi - if (c != a || sbrk(0) != a + 4096) { - 2e71: 39 c3 cmp %eax,%ebx - 2e73: 0f 85 b4 02 00 00 jne 312d - 2e79: 83 ec 0c sub $0xc,%esp - 2e7c: 6a 00 push $0x0 - 2e7e: e8 a0 0a 00 00 call 3923 - 2e83: 8d 93 00 10 00 00 lea 0x1000(%ebx),%edx - 2e89: 83 c4 10 add $0x10,%esp - 2e8c: 39 c2 cmp %eax,%edx - 2e8e: 0f 85 99 02 00 00 jne 312d - if (*lastaddr == 99) { - 2e94: 80 3d ff ff 3f 06 63 cmpb $0x63,0x63fffff - 2e9b: 0f 84 2f 02 00 00 je 30d0 - a = sbrk(0); - 2ea1: 83 ec 0c sub $0xc,%esp - 2ea4: 6a 00 push $0x0 - 2ea6: e8 78 0a 00 00 call 3923 - c = sbrk(-(sbrk(0) - oldbrk)); - 2eab: c7 04 24 00 00 00 00 movl $0x0,(%esp) - a = sbrk(0); - 2eb2: 89 c3 mov %eax,%ebx - c = sbrk(-(sbrk(0) - oldbrk)); - 2eb4: e8 6a 0a 00 00 call 3923 - 2eb9: 89 c2 mov %eax,%edx - 2ebb: 8b 45 a4 mov -0x5c(%ebp),%eax - 2ebe: 29 d0 sub %edx,%eax - 2ec0: 89 04 24 mov %eax,(%esp) - 2ec3: e8 5b 0a 00 00 call 3923 - if (c != a) { - 2ec8: 83 c4 10 add $0x10,%esp - 2ecb: 39 c3 cmp %eax,%ebx - 2ecd: 0f 85 b8 01 00 00 jne 308b - for (a = (char*)(KERNBASE); a < (char*) (KERNBASE + 2000000); a += 50000) { - 2ed3: bb 00 00 00 80 mov $0x80000000,%ebx - 2ed8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 2edf: 90 nop - ppid = getpid(); - 2ee0: e8 36 0a 00 00 call 391b - 2ee5: 89 c6 mov %eax,%esi - pid = fork(); - 2ee7: e8 df 09 00 00 call 38cb - if (pid < 0) { - 2eec: 85 c0 test %eax,%eax - 2eee: 0f 88 5d 01 00 00 js 3051 - if (pid == 0) { - 2ef4: 0f 84 6f 01 00 00 je 3069 - wait(); - 2efa: e8 dc 09 00 00 call 38db - for (a = (char*)(KERNBASE); a < (char*) (KERNBASE + 2000000); a += 50000) { - 2eff: 81 c3 50 c3 00 00 add $0xc350,%ebx - 2f05: 81 fb 80 84 1e 80 cmp $0x801e8480,%ebx - 2f0b: 75 d3 jne 2ee0 - if (pipe(fds) != 0) { - 2f0d: 83 ec 0c sub $0xc,%esp - 2f10: 8d 45 b8 lea -0x48(%ebp),%eax - 2f13: 50 push %eax - 2f14: e8 ca 09 00 00 call 38e3 - 2f19: 83 c4 10 add $0x10,%esp - 2f1c: 85 c0 test %eax,%eax - 2f1e: 0f 85 da 01 00 00 jne 30fe - 2f24: 8d 5d c0 lea -0x40(%ebp),%ebx - 2f27: 8d 75 e8 lea -0x18(%ebp),%esi - 2f2a: 89 df mov %ebx,%edi - 2f2c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - if ((pids[i] = fork()) == 0) { - 2f30: e8 96 09 00 00 call 38cb - 2f35: 89 07 mov %eax,(%edi) - 2f37: 85 c0 test %eax,%eax - 2f39: 0f 84 91 00 00 00 je 2fd0 - if (pids[i] != -1) { - 2f3f: 83 f8 ff cmp $0xffffffff,%eax - 2f42: 74 14 je 2f58 - read(fds[0], &scratch, 1); - 2f44: 83 ec 04 sub $0x4,%esp - 2f47: 8d 45 b7 lea -0x49(%ebp),%eax - 2f4a: 6a 01 push $0x1 - 2f4c: 50 push %eax - 2f4d: ff 75 b8 push -0x48(%ebp) - 2f50: e8 96 09 00 00 call 38eb - 2f55: 83 c4 10 add $0x10,%esp - for (i = 0; i < sizeof(pids) / sizeof(pids[0]); i++) { - 2f58: 83 c7 04 add $0x4,%edi - 2f5b: 39 f7 cmp %esi,%edi - 2f5d: 75 d1 jne 2f30 - c = sbrk(4096); - 2f5f: 83 ec 0c sub $0xc,%esp - 2f62: 68 00 10 00 00 push $0x1000 - 2f67: e8 b7 09 00 00 call 3923 - 2f6c: 83 c4 10 add $0x10,%esp - 2f6f: 89 c7 mov %eax,%edi - for (i = 0; i < sizeof(pids) / sizeof(pids[0]); i++) { - 2f71: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - if (pids[i] == -1) { - 2f78: 8b 03 mov (%ebx),%eax - 2f7a: 83 f8 ff cmp $0xffffffff,%eax - 2f7d: 74 11 je 2f90 - kill(pids[i]); - 2f7f: 83 ec 0c sub $0xc,%esp - 2f82: 50 push %eax - 2f83: e8 6b 09 00 00 call 38f3 - wait(); - 2f88: e8 4e 09 00 00 call 38db - 2f8d: 83 c4 10 add $0x10,%esp - for (i = 0; i < sizeof(pids) / sizeof(pids[0]); i++) { - 2f90: 83 c3 04 add $0x4,%ebx - 2f93: 39 de cmp %ebx,%esi - 2f95: 75 e1 jne 2f78 - if (c == (char*)0xffffffff) { - 2f97: 83 ff ff cmp $0xffffffff,%edi - 2f9a: 0f 84 47 01 00 00 je 30e7 - if (sbrk(0) > oldbrk) { - 2fa0: 83 ec 0c sub $0xc,%esp - 2fa3: 6a 00 push $0x0 - 2fa5: e8 79 09 00 00 call 3923 - 2faa: 83 c4 10 add $0x10,%esp - 2fad: 39 45 a4 cmp %eax,-0x5c(%ebp) - 2fb0: 72 60 jb 3012 - printf(stdout, "sbrk test OK\n"); - 2fb2: 83 ec 08 sub $0x8,%esp - 2fb5: 68 00 4c 00 00 push $0x4c00 - 2fba: ff 35 58 5e 00 00 push 0x5e58 - 2fc0: e8 7b 0a 00 00 call 3a40 -} - 2fc5: 83 c4 10 add $0x10,%esp - 2fc8: 8d 65 f4 lea -0xc(%ebp),%esp - 2fcb: 5b pop %ebx - 2fcc: 5e pop %esi - 2fcd: 5f pop %edi - 2fce: 5d pop %ebp - 2fcf: c3 ret - sbrk(BIG - (uint)sbrk(0)); - 2fd0: 83 ec 0c sub $0xc,%esp - 2fd3: 6a 00 push $0x0 - 2fd5: e8 49 09 00 00 call 3923 - 2fda: 89 c2 mov %eax,%edx - 2fdc: b8 00 00 40 06 mov $0x6400000,%eax - 2fe1: 29 d0 sub %edx,%eax - 2fe3: 89 04 24 mov %eax,(%esp) - 2fe6: e8 38 09 00 00 call 3923 - write(fds[1], "x", 1); - 2feb: 83 c4 0c add $0xc,%esp - 2fee: 6a 01 push $0x1 - 2ff0: 68 c1 46 00 00 push $0x46c1 - 2ff5: ff 75 bc push -0x44(%ebp) - 2ff8: e8 46 09 00 00 call 3943 - 2ffd: 83 c4 10 add $0x10,%esp - for (;;) { sleep(1000); - 3000: 83 ec 0c sub $0xc,%esp - 3003: 68 e8 03 00 00 push $0x3e8 - 3008: e8 1e 09 00 00 call 392b - 300d: 83 c4 10 add $0x10,%esp - 3010: eb ee jmp 3000 - sbrk(-(sbrk(0) - oldbrk)); - 3012: 83 ec 0c sub $0xc,%esp - 3015: 6a 00 push $0x0 - 3017: e8 07 09 00 00 call 3923 - 301c: 89 c2 mov %eax,%edx - 301e: 8b 45 a4 mov -0x5c(%ebp),%eax - 3021: 29 d0 sub %edx,%eax - 3023: 89 04 24 mov %eax,(%esp) - 3026: e8 f8 08 00 00 call 3923 - 302b: 83 c4 10 add $0x10,%esp - 302e: e9 7f ff ff ff jmp 2fb2 - printf(stdout, "sbrk test failed %d %x %x\n", i, a, b); - 3033: 83 ec 0c sub $0xc,%esp - 3036: 50 push %eax - 3037: 53 push %ebx - 3038: 56 push %esi - 3039: 68 63 4b 00 00 push $0x4b63 - 303e: ff 35 58 5e 00 00 push 0x5e58 - 3044: e8 f7 09 00 00 call 3a40 - exit(); - 3049: 83 c4 20 add $0x20,%esp - 304c: e8 82 08 00 00 call 38d3 - printf(stdout, "fork failed\n"); - 3051: 83 ec 08 sub $0x8,%esp - 3054: 68 a9 4c 00 00 push $0x4ca9 - 3059: ff 35 58 5e 00 00 push 0x5e58 - 305f: e8 dc 09 00 00 call 3a40 - exit(); - 3064: e8 6a 08 00 00 call 38d3 - printf(stdout, "oops could read %x = %x\n", a, *a); - 3069: 0f be 03 movsbl (%ebx),%eax - 306c: 50 push %eax - 306d: 53 push %ebx - 306e: 68 cc 4b 00 00 push $0x4bcc - 3073: ff 35 58 5e 00 00 push 0x5e58 - 3079: e8 c2 09 00 00 call 3a40 - kill(ppid); - 307e: 89 34 24 mov %esi,(%esp) - 3081: e8 6d 08 00 00 call 38f3 - exit(); - 3086: e8 48 08 00 00 call 38d3 - printf(stdout, "sbrk downsize failed, a %x c %x\n", a, c); - 308b: 50 push %eax - 308c: 53 push %ebx - 308d: 68 ac 53 00 00 push $0x53ac - 3092: ff 35 58 5e 00 00 push 0x5e58 - 3098: e8 a3 09 00 00 call 3a40 - exit(); - 309d: e8 31 08 00 00 call 38d3 - printf(stdout, "sbrk test failed to grow big address space; enough phys mem?\n"); - 30a2: 56 push %esi - 30a3: 56 push %esi - 30a4: 68 dc 52 00 00 push $0x52dc - 30a9: ff 35 58 5e 00 00 push 0x5e58 - 30af: e8 8c 09 00 00 call 3a40 - exit(); - 30b4: e8 1a 08 00 00 call 38d3 - printf(stdout, "sbrk test fork failed\n"); - 30b9: 50 push %eax - 30ba: 50 push %eax - 30bb: 68 7e 4b 00 00 push $0x4b7e - 30c0: ff 35 58 5e 00 00 push 0x5e58 - 30c6: e8 75 09 00 00 call 3a40 - exit(); - 30cb: e8 03 08 00 00 call 38d3 - printf(stdout, "sbrk de-allocation didn't really deallocate\n"); - 30d0: 51 push %ecx - 30d1: 51 push %ecx - 30d2: 68 7c 53 00 00 push $0x537c - 30d7: ff 35 58 5e 00 00 push 0x5e58 - 30dd: e8 5e 09 00 00 call 3a40 - exit(); - 30e2: e8 ec 07 00 00 call 38d3 - printf(stdout, "failed sbrk leaked memory\n"); - 30e7: 50 push %eax - 30e8: 50 push %eax - 30e9: 68 e5 4b 00 00 push $0x4be5 - 30ee: ff 35 58 5e 00 00 push 0x5e58 - 30f4: e8 47 09 00 00 call 3a40 - exit(); - 30f9: e8 d5 07 00 00 call 38d3 - printf(1, "pipe() failed\n"); - 30fe: 52 push %edx - 30ff: 52 push %edx - 3100: 68 a1 40 00 00 push $0x40a1 - 3105: 6a 01 push $0x1 - 3107: e8 34 09 00 00 call 3a40 - exit(); - 310c: e8 c2 07 00 00 call 38d3 - exit(); - 3111: e8 bd 07 00 00 call 38d3 - printf(stdout, "sbrk test failed post-fork\n"); - 3116: 57 push %edi - 3117: 57 push %edi - 3118: 68 95 4b 00 00 push $0x4b95 - 311d: ff 35 58 5e 00 00 push 0x5e58 - 3123: e8 18 09 00 00 call 3a40 - exit(); - 3128: e8 a6 07 00 00 call 38d3 - printf(stdout, "sbrk re-allocation failed, a %x c %x\n", a, c); - 312d: 56 push %esi - 312e: 53 push %ebx - 312f: 68 54 53 00 00 push $0x5354 - 3134: ff 35 58 5e 00 00 push 0x5e58 - 313a: e8 01 09 00 00 call 3a40 - exit(); - 313f: e8 8f 07 00 00 call 38d3 - printf(stdout, "sbrk deallocation produced wrong address, a %x c %x\n", a, c); - 3144: 50 push %eax - 3145: 53 push %ebx - 3146: 68 1c 53 00 00 push $0x531c - 314b: ff 35 58 5e 00 00 push 0x5e58 - 3151: e8 ea 08 00 00 call 3a40 - exit(); - 3156: e8 78 07 00 00 call 38d3 - printf(stdout, "sbrk could not deallocate\n"); - 315b: 53 push %ebx - 315c: 53 push %ebx - 315d: 68 b1 4b 00 00 push $0x4bb1 - 3162: ff 35 58 5e 00 00 push 0x5e58 - 3168: e8 d3 08 00 00 call 3a40 - exit(); - 316d: e8 61 07 00 00 call 38d3 - 3172: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 3179: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -00003180 : -} - 3180: c3 ret - 3181: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 3188: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 318f: 90 nop - -00003190 : -void validatetest(void) { - 3190: 55 push %ebp - 3191: 89 e5 mov %esp,%ebp - 3193: 56 push %esi - for (p = 0; p <= (uint)hi; p += 4096) { - 3194: 31 f6 xor %esi,%esi -void validatetest(void) { - 3196: 53 push %ebx - printf(stdout, "validate test\n"); - 3197: 83 ec 08 sub $0x8,%esp - 319a: 68 0e 4c 00 00 push $0x4c0e - 319f: ff 35 58 5e 00 00 push 0x5e58 - 31a5: e8 96 08 00 00 call 3a40 - 31aa: 83 c4 10 add $0x10,%esp - 31ad: 8d 76 00 lea 0x0(%esi),%esi - if ((pid = fork()) == 0) { - 31b0: e8 16 07 00 00 call 38cb - 31b5: 89 c3 mov %eax,%ebx - 31b7: 85 c0 test %eax,%eax - 31b9: 74 63 je 321e - sleep(0); - 31bb: 83 ec 0c sub $0xc,%esp - 31be: 6a 00 push $0x0 - 31c0: e8 66 07 00 00 call 392b - sleep(0); - 31c5: c7 04 24 00 00 00 00 movl $0x0,(%esp) - 31cc: e8 5a 07 00 00 call 392b - kill(pid); - 31d1: 89 1c 24 mov %ebx,(%esp) - 31d4: e8 1a 07 00 00 call 38f3 - wait(); - 31d9: e8 fd 06 00 00 call 38db - if (link("nosuchfile", (char*)p) != -1) { - 31de: 58 pop %eax - 31df: 5a pop %edx - 31e0: 56 push %esi - 31e1: 68 1d 4c 00 00 push $0x4c1d - 31e6: e8 70 07 00 00 call 395b - 31eb: 83 c4 10 add $0x10,%esp - 31ee: 83 f8 ff cmp $0xffffffff,%eax - 31f1: 75 30 jne 3223 - for (p = 0; p <= (uint)hi; p += 4096) { - 31f3: 81 c6 00 10 00 00 add $0x1000,%esi - 31f9: 81 fe 00 40 11 00 cmp $0x114000,%esi - 31ff: 75 af jne 31b0 - printf(stdout, "validate ok\n"); - 3201: 83 ec 08 sub $0x8,%esp - 3204: 68 41 4c 00 00 push $0x4c41 - 3209: ff 35 58 5e 00 00 push 0x5e58 - 320f: e8 2c 08 00 00 call 3a40 -} - 3214: 83 c4 10 add $0x10,%esp - 3217: 8d 65 f8 lea -0x8(%ebp),%esp - 321a: 5b pop %ebx - 321b: 5e pop %esi - 321c: 5d pop %ebp - 321d: c3 ret - exit(); - 321e: e8 b0 06 00 00 call 38d3 - printf(stdout, "link should not succeed\n"); - 3223: 83 ec 08 sub $0x8,%esp - 3226: 68 28 4c 00 00 push $0x4c28 - 322b: ff 35 58 5e 00 00 push 0x5e58 - 3231: e8 0a 08 00 00 call 3a40 - exit(); - 3236: e8 98 06 00 00 call 38d3 - 323b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 323f: 90 nop - -00003240 : -void bsstest(void) { - 3240: 55 push %ebp - 3241: 89 e5 mov %esp,%ebp - 3243: 83 ec 10 sub $0x10,%esp - printf(stdout, "bss test\n"); - 3246: 68 4e 4c 00 00 push $0x4c4e - 324b: ff 35 58 5e 00 00 push 0x5e58 - 3251: e8 ea 07 00 00 call 3a40 - 3256: 83 c4 10 add $0x10,%esp - for (i = 0; i < sizeof(uninit); i++) { - 3259: 31 c0 xor %eax,%eax - 325b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 325f: 90 nop - if (uninit[i] != '\0') { - 3260: 80 b8 80 5e 00 00 00 cmpb $0x0,0x5e80(%eax) - 3267: 75 22 jne 328b - for (i = 0; i < sizeof(uninit); i++) { - 3269: 83 c0 01 add $0x1,%eax - 326c: 3d 10 27 00 00 cmp $0x2710,%eax - 3271: 75 ed jne 3260 - printf(stdout, "bss test ok\n"); - 3273: 83 ec 08 sub $0x8,%esp - 3276: 68 69 4c 00 00 push $0x4c69 - 327b: ff 35 58 5e 00 00 push 0x5e58 - 3281: e8 ba 07 00 00 call 3a40 -} - 3286: 83 c4 10 add $0x10,%esp - 3289: c9 leave - 328a: c3 ret - printf(stdout, "bss test failed\n"); - 328b: 83 ec 08 sub $0x8,%esp - 328e: 68 58 4c 00 00 push $0x4c58 - 3293: ff 35 58 5e 00 00 push 0x5e58 - 3299: e8 a2 07 00 00 call 3a40 - exit(); - 329e: e8 30 06 00 00 call 38d3 - 32a3: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 32aa: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -000032b0 : -void bigargtest(void) { - 32b0: 55 push %ebp - 32b1: 89 e5 mov %esp,%ebp - 32b3: 83 ec 14 sub $0x14,%esp - unlink("bigarg-ok"); - 32b6: 68 76 4c 00 00 push $0x4c76 - 32bb: e8 93 06 00 00 call 3953 - pid = fork(); - 32c0: e8 06 06 00 00 call 38cb - if (pid == 0) { - 32c5: 83 c4 10 add $0x10,%esp - 32c8: 85 c0 test %eax,%eax - 32ca: 74 44 je 3310 - else if (pid < 0) { - 32cc: 0f 88 c5 00 00 00 js 3397 - wait(); - 32d2: e8 04 06 00 00 call 38db - fd = open("bigarg-ok", 0); - 32d7: 83 ec 08 sub $0x8,%esp - 32da: 6a 00 push $0x0 - 32dc: 68 76 4c 00 00 push $0x4c76 - 32e1: e8 55 06 00 00 call 393b - if (fd < 0) { - 32e6: 83 c4 10 add $0x10,%esp - 32e9: 85 c0 test %eax,%eax - 32eb: 0f 88 8f 00 00 00 js 3380 - close(fd); - 32f1: 83 ec 0c sub $0xc,%esp - 32f4: 50 push %eax - 32f5: e8 71 06 00 00 call 396b - unlink("bigarg-ok"); - 32fa: c7 04 24 76 4c 00 00 movl $0x4c76,(%esp) - 3301: e8 4d 06 00 00 call 3953 -} - 3306: 83 c4 10 add $0x10,%esp - 3309: c9 leave - 330a: c3 ret - 330b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 330f: 90 nop - args[i] = "bigargs test: failed\n "; - 3310: c7 04 85 a0 a5 00 00 movl $0x53d0,0xa5a0(,%eax,4) - 3317: d0 53 00 00 - for (i = 0; i < MAXARG - 1; i++) { - 331b: 83 c0 01 add $0x1,%eax - 331e: 83 f8 1f cmp $0x1f,%eax - 3321: 75 ed jne 3310 - printf(stdout, "bigarg test\n"); - 3323: 51 push %ecx - 3324: 51 push %ecx - 3325: 68 80 4c 00 00 push $0x4c80 - 332a: ff 35 58 5e 00 00 push 0x5e58 - args[MAXARG - 1] = 0; - 3330: c7 05 1c a6 00 00 00 movl $0x0,0xa61c - 3337: 00 00 00 - printf(stdout, "bigarg test\n"); - 333a: e8 01 07 00 00 call 3a40 - exec("echo", args); - 333f: 58 pop %eax - 3340: 5a pop %edx - 3341: 68 a0 a5 00 00 push $0xa5a0 - 3346: 68 4d 3e 00 00 push $0x3e4d - 334b: e8 ab 05 00 00 call 38fb - printf(stdout, "bigarg test ok\n"); - 3350: 59 pop %ecx - 3351: 58 pop %eax - 3352: 68 8d 4c 00 00 push $0x4c8d - 3357: ff 35 58 5e 00 00 push 0x5e58 - 335d: e8 de 06 00 00 call 3a40 - fd = open("bigarg-ok", O_CREATE); - 3362: 58 pop %eax - 3363: 5a pop %edx - 3364: 68 00 02 00 00 push $0x200 - 3369: 68 76 4c 00 00 push $0x4c76 - 336e: e8 c8 05 00 00 call 393b - close(fd); - 3373: 89 04 24 mov %eax,(%esp) - 3376: e8 f0 05 00 00 call 396b - exit(); - 337b: e8 53 05 00 00 call 38d3 - printf(stdout, "bigarg test failed!\n"); - 3380: 50 push %eax - 3381: 50 push %eax - 3382: 68 b6 4c 00 00 push $0x4cb6 - 3387: ff 35 58 5e 00 00 push 0x5e58 - 338d: e8 ae 06 00 00 call 3a40 - exit(); - 3392: e8 3c 05 00 00 call 38d3 - printf(stdout, "bigargtest: fork failed\n"); - 3397: 52 push %edx - 3398: 52 push %edx - 3399: 68 9d 4c 00 00 push $0x4c9d - 339e: ff 35 58 5e 00 00 push 0x5e58 - 33a4: e8 97 06 00 00 call 3a40 - exit(); - 33a9: e8 25 05 00 00 call 38d3 - 33ae: 66 90 xchg %ax,%ax - -000033b0 : -void fsfull() { - 33b0: 55 push %ebp - 33b1: 89 e5 mov %esp,%ebp - 33b3: 57 push %edi - 33b4: 56 push %esi - for (nfiles = 0;; nfiles++) { - 33b5: 31 f6 xor %esi,%esi -void fsfull() { - 33b7: 53 push %ebx - 33b8: 83 ec 54 sub $0x54,%esp - printf(1, "fsfull test\n"); - 33bb: 68 cb 4c 00 00 push $0x4ccb - 33c0: 6a 01 push $0x1 - 33c2: e8 79 06 00 00 call 3a40 - 33c7: 83 c4 10 add $0x10,%esp - 33ca: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - name[1] = '0' + nfiles / 1000; - 33d0: b8 d3 4d 62 10 mov $0x10624dd3,%eax - name[3] = '0' + (nfiles % 100) / 10; - 33d5: b9 cd cc cc cc mov $0xcccccccd,%ecx - printf(1, "writing %s\n", name); - 33da: 83 ec 04 sub $0x4,%esp - name[0] = 'f'; - 33dd: c6 45 a8 66 movb $0x66,-0x58(%ebp) - name[1] = '0' + nfiles / 1000; - 33e1: f7 e6 mul %esi - name[5] = '\0'; - 33e3: c6 45 ad 00 movb $0x0,-0x53(%ebp) - name[1] = '0' + nfiles / 1000; - 33e7: c1 ea 06 shr $0x6,%edx - 33ea: 8d 42 30 lea 0x30(%edx),%eax - 33ed: 88 45 a9 mov %al,-0x57(%ebp) - name[2] = '0' + (nfiles % 1000) / 100; - 33f0: 69 c2 e8 03 00 00 imul $0x3e8,%edx,%eax - 33f6: 89 f2 mov %esi,%edx - 33f8: 29 c2 sub %eax,%edx - 33fa: b8 1f 85 eb 51 mov $0x51eb851f,%eax - 33ff: f7 e2 mul %edx - name[3] = '0' + (nfiles % 100) / 10; - 3401: b8 1f 85 eb 51 mov $0x51eb851f,%eax - name[2] = '0' + (nfiles % 1000) / 100; - 3406: c1 ea 05 shr $0x5,%edx - 3409: 83 c2 30 add $0x30,%edx - 340c: 88 55 aa mov %dl,-0x56(%ebp) - name[3] = '0' + (nfiles % 100) / 10; - 340f: f7 e6 mul %esi - 3411: c1 ea 05 shr $0x5,%edx - 3414: 6b c2 64 imul $0x64,%edx,%eax - 3417: 89 f2 mov %esi,%edx - 3419: 29 c2 sub %eax,%edx - 341b: 89 d0 mov %edx,%eax - 341d: f7 e1 mul %ecx - name[4] = '0' + (nfiles % 10); - 341f: 89 f0 mov %esi,%eax - name[3] = '0' + (nfiles % 100) / 10; - 3421: c1 ea 03 shr $0x3,%edx - 3424: 83 c2 30 add $0x30,%edx - 3427: 88 55 ab mov %dl,-0x55(%ebp) - name[4] = '0' + (nfiles % 10); - 342a: f7 e1 mul %ecx - 342c: 89 f0 mov %esi,%eax - 342e: c1 ea 03 shr $0x3,%edx - 3431: 8d 14 92 lea (%edx,%edx,4),%edx - 3434: 01 d2 add %edx,%edx - 3436: 29 d0 sub %edx,%eax - 3438: 83 c0 30 add $0x30,%eax - 343b: 88 45 ac mov %al,-0x54(%ebp) - printf(1, "writing %s\n", name); - 343e: 8d 45 a8 lea -0x58(%ebp),%eax - 3441: 50 push %eax - 3442: 68 d8 4c 00 00 push $0x4cd8 - 3447: 6a 01 push $0x1 - 3449: e8 f2 05 00 00 call 3a40 - int fd = open(name, O_CREATE | O_RDWR); - 344e: 58 pop %eax - 344f: 8d 45 a8 lea -0x58(%ebp),%eax - 3452: 5a pop %edx - 3453: 68 02 02 00 00 push $0x202 - 3458: 50 push %eax - 3459: e8 dd 04 00 00 call 393b - if (fd < 0) { - 345e: 83 c4 10 add $0x10,%esp - int fd = open(name, O_CREATE | O_RDWR); - 3461: 89 c7 mov %eax,%edi - if (fd < 0) { - 3463: 85 c0 test %eax,%eax - 3465: 78 4f js 34b6 - int total = 0; - 3467: 31 db xor %ebx,%ebx - 3469: eb 07 jmp 3472 - 346b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 346f: 90 nop - total += cc; - 3470: 01 c3 add %eax,%ebx - int cc = write(fd, buf, 512); - 3472: 83 ec 04 sub $0x4,%esp - 3475: 68 00 02 00 00 push $0x200 - 347a: 68 a0 85 00 00 push $0x85a0 - 347f: 57 push %edi - 3480: e8 be 04 00 00 call 3943 - if (cc < 512) { - 3485: 83 c4 10 add $0x10,%esp - 3488: 3d ff 01 00 00 cmp $0x1ff,%eax - 348d: 7f e1 jg 3470 - printf(1, "wrote %d bytes\n", total); - 348f: 83 ec 04 sub $0x4,%esp - 3492: 53 push %ebx - 3493: 68 f4 4c 00 00 push $0x4cf4 - 3498: 6a 01 push $0x1 - 349a: e8 a1 05 00 00 call 3a40 - close(fd); - 349f: 89 3c 24 mov %edi,(%esp) - 34a2: e8 c4 04 00 00 call 396b - if (total == 0) { - 34a7: 83 c4 10 add $0x10,%esp - 34aa: 85 db test %ebx,%ebx - 34ac: 74 1e je 34cc - for (nfiles = 0;; nfiles++) { - 34ae: 83 c6 01 add $0x1,%esi - 34b1: e9 1a ff ff ff jmp 33d0 - printf(1, "open %s failed\n", name); - 34b6: 83 ec 04 sub $0x4,%esp - 34b9: 8d 45 a8 lea -0x58(%ebp),%eax - 34bc: 50 push %eax - 34bd: 68 e4 4c 00 00 push $0x4ce4 - 34c2: 6a 01 push $0x1 - 34c4: e8 77 05 00 00 call 3a40 - break; - 34c9: 83 c4 10 add $0x10,%esp - name[1] = '0' + nfiles / 1000; - 34cc: bf d3 4d 62 10 mov $0x10624dd3,%edi - name[2] = '0' + (nfiles % 1000) / 100; - 34d1: bb 1f 85 eb 51 mov $0x51eb851f,%ebx - 34d6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 34dd: 8d 76 00 lea 0x0(%esi),%esi - name[1] = '0' + nfiles / 1000; - 34e0: 89 f0 mov %esi,%eax - unlink(name); - 34e2: 83 ec 0c sub $0xc,%esp - name[0] = 'f'; - 34e5: c6 45 a8 66 movb $0x66,-0x58(%ebp) - name[1] = '0' + nfiles / 1000; - 34e9: f7 e7 mul %edi - name[5] = '\0'; - 34eb: c6 45 ad 00 movb $0x0,-0x53(%ebp) - name[1] = '0' + nfiles / 1000; - 34ef: c1 ea 06 shr $0x6,%edx - 34f2: 8d 42 30 lea 0x30(%edx),%eax - 34f5: 88 45 a9 mov %al,-0x57(%ebp) - name[2] = '0' + (nfiles % 1000) / 100; - 34f8: 69 c2 e8 03 00 00 imul $0x3e8,%edx,%eax - 34fe: 89 f2 mov %esi,%edx - 3500: 29 c2 sub %eax,%edx - 3502: 89 d0 mov %edx,%eax - 3504: f7 e3 mul %ebx - name[3] = '0' + (nfiles % 100) / 10; - 3506: 89 f0 mov %esi,%eax - name[2] = '0' + (nfiles % 1000) / 100; - 3508: c1 ea 05 shr $0x5,%edx - 350b: 83 c2 30 add $0x30,%edx - 350e: 88 55 aa mov %dl,-0x56(%ebp) - name[3] = '0' + (nfiles % 100) / 10; - 3511: f7 e3 mul %ebx - 3513: c1 ea 05 shr $0x5,%edx - 3516: 6b ca 64 imul $0x64,%edx,%ecx - 3519: 89 f2 mov %esi,%edx - 351b: 29 ca sub %ecx,%edx - 351d: b9 cd cc cc cc mov $0xcccccccd,%ecx - 3522: 89 d0 mov %edx,%eax - 3524: f7 e1 mul %ecx - name[4] = '0' + (nfiles % 10); - 3526: 89 f0 mov %esi,%eax - name[3] = '0' + (nfiles % 100) / 10; - 3528: c1 ea 03 shr $0x3,%edx - 352b: 83 c2 30 add $0x30,%edx - 352e: 88 55 ab mov %dl,-0x55(%ebp) - name[4] = '0' + (nfiles % 10); - 3531: f7 e1 mul %ecx - 3533: 89 f0 mov %esi,%eax - nfiles--; - 3535: 83 ee 01 sub $0x1,%esi - name[4] = '0' + (nfiles % 10); - 3538: c1 ea 03 shr $0x3,%edx - 353b: 8d 14 92 lea (%edx,%edx,4),%edx - 353e: 01 d2 add %edx,%edx - 3540: 29 d0 sub %edx,%eax - 3542: 83 c0 30 add $0x30,%eax - 3545: 88 45 ac mov %al,-0x54(%ebp) - unlink(name); - 3548: 8d 45 a8 lea -0x58(%ebp),%eax - 354b: 50 push %eax - 354c: e8 02 04 00 00 call 3953 - while (nfiles >= 0) { - 3551: 83 c4 10 add $0x10,%esp - 3554: 83 fe ff cmp $0xffffffff,%esi - 3557: 75 87 jne 34e0 - printf(1, "fsfull test finished\n"); - 3559: 83 ec 08 sub $0x8,%esp - 355c: 68 04 4d 00 00 push $0x4d04 - 3561: 6a 01 push $0x1 - 3563: e8 d8 04 00 00 call 3a40 -} - 3568: 83 c4 10 add $0x10,%esp - 356b: 8d 65 f4 lea -0xc(%ebp),%esp - 356e: 5b pop %ebx - 356f: 5e pop %esi - 3570: 5f pop %edi - 3571: 5d pop %ebp - 3572: c3 ret - 3573: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 357a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - -00003580 : -void uio() { - 3580: 55 push %ebp - 3581: 89 e5 mov %esp,%ebp - 3583: 83 ec 10 sub $0x10,%esp - printf(1, "uio test\n"); - 3586: 68 1a 4d 00 00 push $0x4d1a - 358b: 6a 01 push $0x1 - 358d: e8 ae 04 00 00 call 3a40 - pid = fork(); - 3592: e8 34 03 00 00 call 38cb - if (pid == 0) { - 3597: 83 c4 10 add $0x10,%esp - 359a: 85 c0 test %eax,%eax - 359c: 74 1b je 35b9 - else if (pid < 0) { - 359e: 78 3d js 35dd - wait(); - 35a0: e8 36 03 00 00 call 38db - printf(1, "uio test done\n"); - 35a5: 83 ec 08 sub $0x8,%esp - 35a8: 68 24 4d 00 00 push $0x4d24 - 35ad: 6a 01 push $0x1 - 35af: e8 8c 04 00 00 call 3a40 -} - 35b4: 83 c4 10 add $0x10,%esp - 35b7: c9 leave - 35b8: c3 ret - asm volatile ("outb %0,%1" : : "a" (val), "d" (port)); - 35b9: b8 09 00 00 00 mov $0x9,%eax - 35be: ba 70 00 00 00 mov $0x70,%edx - 35c3: ee out %al,(%dx) - asm volatile ("inb %1,%0" : "=a" (val) : "d" (port)); - 35c4: ba 71 00 00 00 mov $0x71,%edx - 35c9: ec in (%dx),%al - printf(1, "uio: uio succeeded; test FAILED\n"); - 35ca: 52 push %edx - 35cb: 52 push %edx - 35cc: 68 b0 54 00 00 push $0x54b0 - 35d1: 6a 01 push $0x1 - 35d3: e8 68 04 00 00 call 3a40 - exit(); - 35d8: e8 f6 02 00 00 call 38d3 - printf(1, "fork failed\n"); - 35dd: 50 push %eax - 35de: 50 push %eax - 35df: 68 a9 4c 00 00 push $0x4ca9 - 35e4: 6a 01 push $0x1 - 35e6: e8 55 04 00 00 call 3a40 - exit(); - 35eb: e8 e3 02 00 00 call 38d3 - -000035f0 : -void argptest(){ - 35f0: 55 push %ebp - 35f1: 89 e5 mov %esp,%ebp - 35f3: 53 push %ebx - 35f4: 83 ec 0c sub $0xc,%esp - fd = open("init", O_RDONLY); - 35f7: 6a 00 push $0x0 - 35f9: 68 33 4d 00 00 push $0x4d33 - 35fe: e8 38 03 00 00 call 393b - if (fd < 0) { - 3603: 83 c4 10 add $0x10,%esp - 3606: 85 c0 test %eax,%eax - 3608: 78 39 js 3643 - read(fd, sbrk(0) - 1, -1); - 360a: 83 ec 0c sub $0xc,%esp - 360d: 89 c3 mov %eax,%ebx - 360f: 6a 00 push $0x0 - 3611: e8 0d 03 00 00 call 3923 - 3616: 83 c4 0c add $0xc,%esp - 3619: 83 e8 01 sub $0x1,%eax - 361c: 6a ff push $0xffffffff - 361e: 50 push %eax - 361f: 53 push %ebx - 3620: e8 c6 02 00 00 call 38eb - close(fd); - 3625: 89 1c 24 mov %ebx,(%esp) - 3628: e8 3e 03 00 00 call 396b - printf(1, "arg test passed\n"); - 362d: 58 pop %eax - 362e: 5a pop %edx - 362f: 68 45 4d 00 00 push $0x4d45 - 3634: 6a 01 push $0x1 - 3636: e8 05 04 00 00 call 3a40 -} - 363b: 8b 5d fc mov -0x4(%ebp),%ebx - 363e: 83 c4 10 add $0x10,%esp - 3641: c9 leave - 3642: c3 ret - printf(2, "open failed\n"); - 3643: 51 push %ecx - 3644: 51 push %ecx - 3645: 68 38 4d 00 00 push $0x4d38 - 364a: 6a 02 push $0x2 - 364c: e8 ef 03 00 00 call 3a40 - exit(); - 3651: e8 7d 02 00 00 call 38d3 - 3656: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 365d: 8d 76 00 lea 0x0(%esi),%esi - -00003660 : - randstate = randstate * 1664525 + 1013904223; - 3660: 69 05 54 5e 00 00 0d imul $0x19660d,0x5e54,%eax - 3667: 66 19 00 - 366a: 05 5f f3 6e 3c add $0x3c6ef35f,%eax - 366f: a3 54 5e 00 00 mov %eax,0x5e54 -} - 3674: c3 ret - 3675: 66 90 xchg %ax,%ax - 3677: 66 90 xchg %ax,%ax - 3679: 66 90 xchg %ax,%ax - 367b: 66 90 xchg %ax,%ax - 367d: 66 90 xchg %ax,%ax - 367f: 90 nop - -00003680 : -#include "stat.h" -#include "fcntl.h" -#include "user.h" -#include "x86.h" - -char*strcpy(char *s, const char *t) { - 3680: 55 push %ebp - char *os; - - os = s; - while ((*s++ = *t++) != 0) { - 3681: 31 c0 xor %eax,%eax -char*strcpy(char *s, const char *t) { - 3683: 89 e5 mov %esp,%ebp - 3685: 53 push %ebx - 3686: 8b 4d 08 mov 0x8(%ebp),%ecx - 3689: 8b 5d 0c mov 0xc(%ebp),%ebx - 368c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - while ((*s++ = *t++) != 0) { - 3690: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 3694: 88 14 01 mov %dl,(%ecx,%eax,1) - 3697: 83 c0 01 add $0x1,%eax - 369a: 84 d2 test %dl,%dl - 369c: 75 f2 jne 3690 - ; - } - return os; -} - 369e: 8b 5d fc mov -0x4(%ebp),%ebx - 36a1: 89 c8 mov %ecx,%eax - 36a3: c9 leave - 36a4: c3 ret - 36a5: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 36ac: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -000036b0 : - -int strcmp(const char *p, const char *q) { - 36b0: 55 push %ebp - 36b1: 89 e5 mov %esp,%ebp - 36b3: 53 push %ebx - 36b4: 8b 55 08 mov 0x8(%ebp),%edx - 36b7: 8b 4d 0c mov 0xc(%ebp),%ecx - while (*p && *p == *q) { - 36ba: 0f b6 02 movzbl (%edx),%eax - 36bd: 84 c0 test %al,%al - 36bf: 75 17 jne 36d8 - 36c1: eb 3a jmp 36fd - 36c3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 36c7: 90 nop - 36c8: 0f b6 42 01 movzbl 0x1(%edx),%eax - p++, q++; - 36cc: 83 c2 01 add $0x1,%edx - 36cf: 8d 59 01 lea 0x1(%ecx),%ebx - while (*p && *p == *q) { - 36d2: 84 c0 test %al,%al - 36d4: 74 1a je 36f0 - p++, q++; - 36d6: 89 d9 mov %ebx,%ecx - while (*p && *p == *q) { - 36d8: 0f b6 19 movzbl (%ecx),%ebx - 36db: 38 c3 cmp %al,%bl - 36dd: 74 e9 je 36c8 - } - return (uchar) * p - (uchar) * q; - 36df: 29 d8 sub %ebx,%eax -} - 36e1: 8b 5d fc mov -0x4(%ebp),%ebx - 36e4: c9 leave - 36e5: c3 ret - 36e6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 36ed: 8d 76 00 lea 0x0(%esi),%esi - return (uchar) * p - (uchar) * q; - 36f0: 0f b6 59 01 movzbl 0x1(%ecx),%ebx - 36f4: 31 c0 xor %eax,%eax - 36f6: 29 d8 sub %ebx,%eax -} - 36f8: 8b 5d fc mov -0x4(%ebp),%ebx - 36fb: c9 leave - 36fc: c3 ret - return (uchar) * p - (uchar) * q; - 36fd: 0f b6 19 movzbl (%ecx),%ebx - 3700: 31 c0 xor %eax,%eax - 3702: eb db jmp 36df - 3704: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 370b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 370f: 90 nop - -00003710 : - -uint strlen(const char *s) { - 3710: 55 push %ebp - 3711: 89 e5 mov %esp,%ebp - 3713: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - for (n = 0; s[n]; n++) { - 3716: 80 3a 00 cmpb $0x0,(%edx) - 3719: 74 15 je 3730 - 371b: 31 c0 xor %eax,%eax - 371d: 8d 76 00 lea 0x0(%esi),%esi - 3720: 83 c0 01 add $0x1,%eax - 3723: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - 3727: 89 c1 mov %eax,%ecx - 3729: 75 f5 jne 3720 - ; - } - return n; -} - 372b: 89 c8 mov %ecx,%eax - 372d: 5d pop %ebp - 372e: c3 ret - 372f: 90 nop - for (n = 0; s[n]; n++) { - 3730: 31 c9 xor %ecx,%ecx -} - 3732: 5d pop %ebp - 3733: 89 c8 mov %ecx,%eax - 3735: c3 ret - 3736: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 373d: 8d 76 00 lea 0x0(%esi),%esi - -00003740 : - -void* memset(void *dst, int c, uint n) { - 3740: 55 push %ebp - 3741: 89 e5 mov %esp,%ebp - 3743: 57 push %edi - 3744: 8b 55 08 mov 0x8(%ebp),%edx - "d" (port), "0" (addr), "1" (cnt) : - "cc"); -} - -static inline void stosb(void *addr, int data, int cnt) { - asm volatile ("cld; rep stosb" : - 3747: 8b 4d 10 mov 0x10(%ebp),%ecx - 374a: 8b 45 0c mov 0xc(%ebp),%eax - 374d: 89 d7 mov %edx,%edi - 374f: fc cld - 3750: f3 aa rep stos %al,%es:(%edi) - stosb(dst, c, n); - return dst; -} - 3752: 8b 7d fc mov -0x4(%ebp),%edi - 3755: 89 d0 mov %edx,%eax - 3757: c9 leave - 3758: c3 ret - 3759: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -00003760 : - -char* strchr(const char *s, char c) { - 3760: 55 push %ebp - 3761: 89 e5 mov %esp,%ebp - 3763: 8b 45 08 mov 0x8(%ebp),%eax - 3766: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx - for (; *s; s++) { - 376a: 0f b6 10 movzbl (%eax),%edx - 376d: 84 d2 test %dl,%dl - 376f: 75 12 jne 3783 - 3771: eb 1d jmp 3790 - 3773: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 3777: 90 nop - 3778: 0f b6 50 01 movzbl 0x1(%eax),%edx - 377c: 83 c0 01 add $0x1,%eax - 377f: 84 d2 test %dl,%dl - 3781: 74 0d je 3790 - if (*s == c) { - 3783: 38 d1 cmp %dl,%cl - 3785: 75 f1 jne 3778 - return (char*)s; - } - } - return 0; -} - 3787: 5d pop %ebp - 3788: c3 ret - 3789: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - return 0; - 3790: 31 c0 xor %eax,%eax -} - 3792: 5d pop %ebp - 3793: c3 ret - 3794: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 379b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 379f: 90 nop - -000037a0 : - -char* gets(char *buf, int max) { - 37a0: 55 push %ebp - 37a1: 89 e5 mov %esp,%ebp - 37a3: 57 push %edi - 37a4: 56 push %esi - int i, cc; - char c; - - for (i = 0; i + 1 < max;) { - cc = read(0, &c, 1); - 37a5: 8d 7d e7 lea -0x19(%ebp),%edi -char* gets(char *buf, int max) { - 37a8: 53 push %ebx - for (i = 0; i + 1 < max;) { - 37a9: 31 db xor %ebx,%ebx -char* gets(char *buf, int max) { - 37ab: 83 ec 1c sub $0x1c,%esp - for (i = 0; i + 1 < max;) { - 37ae: eb 27 jmp 37d7 - cc = read(0, &c, 1); - 37b0: 83 ec 04 sub $0x4,%esp - 37b3: 6a 01 push $0x1 - 37b5: 57 push %edi - 37b6: 6a 00 push $0x0 - 37b8: e8 2e 01 00 00 call 38eb - if (cc < 1) { - 37bd: 83 c4 10 add $0x10,%esp - 37c0: 85 c0 test %eax,%eax - 37c2: 7e 1d jle 37e1 - break; - } - buf[i++] = c; - 37c4: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 37c8: 8b 55 08 mov 0x8(%ebp),%edx - 37cb: 88 44 1a ff mov %al,-0x1(%edx,%ebx,1) - if (c == '\n' || c == '\r') { - 37cf: 3c 0a cmp $0xa,%al - 37d1: 74 1d je 37f0 - 37d3: 3c 0d cmp $0xd,%al - 37d5: 74 19 je 37f0 - for (i = 0; i + 1 < max;) { - 37d7: 89 de mov %ebx,%esi - 37d9: 83 c3 01 add $0x1,%ebx - 37dc: 3b 5d 0c cmp 0xc(%ebp),%ebx - 37df: 7c cf jl 37b0 - break; - } - } - buf[i] = '\0'; - 37e1: 8b 45 08 mov 0x8(%ebp),%eax - 37e4: c6 04 30 00 movb $0x0,(%eax,%esi,1) - return buf; -} - 37e8: 8d 65 f4 lea -0xc(%ebp),%esp - 37eb: 5b pop %ebx - 37ec: 5e pop %esi - 37ed: 5f pop %edi - 37ee: 5d pop %ebp - 37ef: c3 ret - buf[i] = '\0'; - 37f0: 8b 45 08 mov 0x8(%ebp),%eax - 37f3: 89 de mov %ebx,%esi - 37f5: c6 04 30 00 movb $0x0,(%eax,%esi,1) -} - 37f9: 8d 65 f4 lea -0xc(%ebp),%esp - 37fc: 5b pop %ebx - 37fd: 5e pop %esi - 37fe: 5f pop %edi - 37ff: 5d pop %ebp - 3800: c3 ret - 3801: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 3808: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 380f: 90 nop - -00003810 : - -int stat(const char *n, struct stat *st) { - 3810: 55 push %ebp - 3811: 89 e5 mov %esp,%ebp - 3813: 56 push %esi - 3814: 53 push %ebx - int fd; - int r; - - fd = open(n, O_RDONLY); - 3815: 83 ec 08 sub $0x8,%esp - 3818: 6a 00 push $0x0 - 381a: ff 75 08 push 0x8(%ebp) - 381d: e8 19 01 00 00 call 393b - if (fd < 0) { - 3822: 83 c4 10 add $0x10,%esp - 3825: 85 c0 test %eax,%eax - 3827: 78 27 js 3850 - return -1; - } - r = fstat(fd, st); - 3829: 83 ec 08 sub $0x8,%esp - 382c: ff 75 0c push 0xc(%ebp) - 382f: 89 c3 mov %eax,%ebx - 3831: 50 push %eax - 3832: e8 cc 00 00 00 call 3903 - close(fd); - 3837: 89 1c 24 mov %ebx,(%esp) - r = fstat(fd, st); - 383a: 89 c6 mov %eax,%esi - close(fd); - 383c: e8 2a 01 00 00 call 396b - return r; - 3841: 83 c4 10 add $0x10,%esp -} - 3844: 8d 65 f8 lea -0x8(%ebp),%esp - 3847: 89 f0 mov %esi,%eax - 3849: 5b pop %ebx - 384a: 5e pop %esi - 384b: 5d pop %ebp - 384c: c3 ret - 384d: 8d 76 00 lea 0x0(%esi),%esi - return -1; - 3850: be ff ff ff ff mov $0xffffffff,%esi - 3855: eb ed jmp 3844 - 3857: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 385e: 66 90 xchg %ax,%ax - -00003860 : - -int atoi(const char *s) { - 3860: 55 push %ebp - 3861: 89 e5 mov %esp,%ebp - 3863: 53 push %ebx - 3864: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - n = 0; - while ('0' <= *s && *s <= '9') { - 3867: 0f be 02 movsbl (%edx),%eax - 386a: 8d 48 d0 lea -0x30(%eax),%ecx - 386d: 80 f9 09 cmp $0x9,%cl - n = 0; - 3870: b9 00 00 00 00 mov $0x0,%ecx - while ('0' <= *s && *s <= '9') { - 3875: 77 1e ja 3895 - 3877: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 387e: 66 90 xchg %ax,%ax - n = n * 10 + *s++ - '0'; - 3880: 83 c2 01 add $0x1,%edx - 3883: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 3886: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx - while ('0' <= *s && *s <= '9') { - 388a: 0f be 02 movsbl (%edx),%eax - 388d: 8d 58 d0 lea -0x30(%eax),%ebx - 3890: 80 fb 09 cmp $0x9,%bl - 3893: 76 eb jbe 3880 - } - return n; -} - 3895: 8b 5d fc mov -0x4(%ebp),%ebx - 3898: 89 c8 mov %ecx,%eax - 389a: c9 leave - 389b: c3 ret - 389c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -000038a0 : - -void* memmove(void *vdst, const void *vsrc, int n) { - 38a0: 55 push %ebp - 38a1: 89 e5 mov %esp,%ebp - 38a3: 57 push %edi - 38a4: 8b 45 10 mov 0x10(%ebp),%eax - 38a7: 8b 55 08 mov 0x8(%ebp),%edx - 38aa: 56 push %esi - 38ab: 8b 75 0c mov 0xc(%ebp),%esi - char *dst; - const char *src; - - dst = vdst; - src = vsrc; - while (n-- > 0) { - 38ae: 85 c0 test %eax,%eax - 38b0: 7e 13 jle 38c5 - 38b2: 01 d0 add %edx,%eax - dst = vdst; - 38b4: 89 d7 mov %edx,%edi - 38b6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 38bd: 8d 76 00 lea 0x0(%esi),%esi - *dst++ = *src++; - 38c0: a4 movsb %ds:(%esi),%es:(%edi) - while (n-- > 0) { - 38c1: 39 f8 cmp %edi,%eax - 38c3: 75 fb jne 38c0 - } - return vdst; -} - 38c5: 5e pop %esi - 38c6: 89 d0 mov %edx,%eax - 38c8: 5f pop %edi - 38c9: 5d pop %ebp - 38ca: c3 ret - -000038cb : -name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 38cb: b8 01 00 00 00 mov $0x1,%eax - 38d0: cd 40 int $0x40 - 38d2: c3 ret - -000038d3 : -SYSCALL(exit) - 38d3: b8 02 00 00 00 mov $0x2,%eax - 38d8: cd 40 int $0x40 - 38da: c3 ret - -000038db : -SYSCALL(wait) - 38db: b8 03 00 00 00 mov $0x3,%eax - 38e0: cd 40 int $0x40 - 38e2: c3 ret - -000038e3 : -SYSCALL(pipe) - 38e3: b8 04 00 00 00 mov $0x4,%eax - 38e8: cd 40 int $0x40 - 38ea: c3 ret - -000038eb : -SYSCALL(read) - 38eb: b8 05 00 00 00 mov $0x5,%eax - 38f0: cd 40 int $0x40 - 38f2: c3 ret - -000038f3 : -SYSCALL(kill) - 38f3: b8 06 00 00 00 mov $0x6,%eax - 38f8: cd 40 int $0x40 - 38fa: c3 ret - -000038fb : -SYSCALL(exec) - 38fb: b8 07 00 00 00 mov $0x7,%eax - 3900: cd 40 int $0x40 - 3902: c3 ret - -00003903 : -SYSCALL(fstat) - 3903: b8 08 00 00 00 mov $0x8,%eax - 3908: cd 40 int $0x40 - 390a: c3 ret - -0000390b : -SYSCALL(chdir) - 390b: b8 09 00 00 00 mov $0x9,%eax - 3910: cd 40 int $0x40 - 3912: c3 ret - -00003913 : -SYSCALL(dup) - 3913: b8 0a 00 00 00 mov $0xa,%eax - 3918: cd 40 int $0x40 - 391a: c3 ret - -0000391b : -SYSCALL(getpid) - 391b: b8 0b 00 00 00 mov $0xb,%eax - 3920: cd 40 int $0x40 - 3922: c3 ret - -00003923 : -SYSCALL(sbrk) - 3923: b8 0c 00 00 00 mov $0xc,%eax - 3928: cd 40 int $0x40 - 392a: c3 ret - -0000392b : -SYSCALL(sleep) - 392b: b8 0d 00 00 00 mov $0xd,%eax - 3930: cd 40 int $0x40 - 3932: c3 ret - -00003933 : -SYSCALL(uptime) - 3933: b8 0e 00 00 00 mov $0xe,%eax - 3938: cd 40 int $0x40 - 393a: c3 ret - -0000393b : -SYSCALL(open) - 393b: b8 0f 00 00 00 mov $0xf,%eax - 3940: cd 40 int $0x40 - 3942: c3 ret - -00003943 : -SYSCALL(write) - 3943: b8 10 00 00 00 mov $0x10,%eax - 3948: cd 40 int $0x40 - 394a: c3 ret - -0000394b : -SYSCALL(mknod) - 394b: b8 11 00 00 00 mov $0x11,%eax - 3950: cd 40 int $0x40 - 3952: c3 ret - -00003953 : -SYSCALL(unlink) - 3953: b8 12 00 00 00 mov $0x12,%eax - 3958: cd 40 int $0x40 - 395a: c3 ret - -0000395b : -SYSCALL(link) - 395b: b8 13 00 00 00 mov $0x13,%eax - 3960: cd 40 int $0x40 - 3962: c3 ret - -00003963 : -SYSCALL(mkdir) - 3963: b8 14 00 00 00 mov $0x14,%eax - 3968: cd 40 int $0x40 - 396a: c3 ret - -0000396b : -SYSCALL(close) - 396b: b8 15 00 00 00 mov $0x15,%eax - 3970: cd 40 int $0x40 - 3972: c3 ret - -00003973 : -SYSCALL(getch) - 3973: b8 16 00 00 00 mov $0x16,%eax - 3978: cd 40 int $0x40 - 397a: c3 ret - -0000397b : -SYSCALL(greeting) - 397b: b8 17 00 00 00 mov $0x17,%eax - 3980: cd 40 int $0x40 - 3982: c3 ret - -00003983 : -SYSCALL(shutdown) - 3983: b8 18 00 00 00 mov $0x18,%eax - 3988: cd 40 int $0x40 - 398a: c3 ret - 398b: 66 90 xchg %ax,%ax - 398d: 66 90 xchg %ax,%ax - 398f: 90 nop - -00003990 : - -static void putc(int fd, char c) { - write(fd, &c, 1); -} - -static void printint(int fd, int xx, int base, int sgn) { - 3990: 55 push %ebp - 3991: 89 e5 mov %esp,%ebp - 3993: 57 push %edi - 3994: 56 push %esi - 3995: 53 push %ebx - 3996: 83 ec 3c sub $0x3c,%esp - 3999: 89 4d c4 mov %ecx,-0x3c(%ebp) - uint x; - - neg = 0; - if (sgn && xx < 0) { - neg = 1; - x = -xx; - 399c: 89 d1 mov %edx,%ecx -static void printint(int fd, int xx, int base, int sgn) { - 399e: 89 45 b8 mov %eax,-0x48(%ebp) - if (sgn && xx < 0) { - 39a1: 85 d2 test %edx,%edx - 39a3: 0f 89 7f 00 00 00 jns 3a28 - 39a9: f6 45 08 01 testb $0x1,0x8(%ebp) - 39ad: 74 79 je 3a28 - neg = 1; - 39af: c7 45 bc 01 00 00 00 movl $0x1,-0x44(%ebp) - x = -xx; - 39b6: f7 d9 neg %ecx - } - else { - x = xx; - } - - i = 0; - 39b8: 31 db xor %ebx,%ebx - 39ba: 8d 75 d7 lea -0x29(%ebp),%esi - 39bd: 8d 76 00 lea 0x0(%esi),%esi - do { - buf[i++] = digits[x % base]; - 39c0: 89 c8 mov %ecx,%eax - 39c2: 31 d2 xor %edx,%edx - 39c4: 89 cf mov %ecx,%edi - 39c6: f7 75 c4 divl -0x3c(%ebp) - 39c9: 0f b6 92 60 55 00 00 movzbl 0x5560(%edx),%edx - 39d0: 89 45 c0 mov %eax,-0x40(%ebp) - 39d3: 89 d8 mov %ebx,%eax - 39d5: 8d 5b 01 lea 0x1(%ebx),%ebx - } - while ((x /= base) != 0); - 39d8: 8b 4d c0 mov -0x40(%ebp),%ecx - buf[i++] = digits[x % base]; - 39db: 88 14 1e mov %dl,(%esi,%ebx,1) - while ((x /= base) != 0); - 39de: 39 7d c4 cmp %edi,-0x3c(%ebp) - 39e1: 76 dd jbe 39c0 - if (neg) { - 39e3: 8b 4d bc mov -0x44(%ebp),%ecx - 39e6: 85 c9 test %ecx,%ecx - 39e8: 74 0c je 39f6 - buf[i++] = '-'; - 39ea: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) - buf[i++] = digits[x % base]; - 39ef: 89 d8 mov %ebx,%eax - buf[i++] = '-'; - 39f1: ba 2d 00 00 00 mov $0x2d,%edx - } - - while (--i >= 0) { - 39f6: 8b 7d b8 mov -0x48(%ebp),%edi - 39f9: 8d 5c 05 d7 lea -0x29(%ebp,%eax,1),%ebx - 39fd: eb 07 jmp 3a06 - 39ff: 90 nop - putc(fd, buf[i]); - 3a00: 0f b6 13 movzbl (%ebx),%edx - 3a03: 83 eb 01 sub $0x1,%ebx - write(fd, &c, 1); - 3a06: 83 ec 04 sub $0x4,%esp - 3a09: 88 55 d7 mov %dl,-0x29(%ebp) - 3a0c: 6a 01 push $0x1 - 3a0e: 56 push %esi - 3a0f: 57 push %edi - 3a10: e8 2e ff ff ff call 3943 - while (--i >= 0) { - 3a15: 83 c4 10 add $0x10,%esp - 3a18: 39 de cmp %ebx,%esi - 3a1a: 75 e4 jne 3a00 - } -} - 3a1c: 8d 65 f4 lea -0xc(%ebp),%esp - 3a1f: 5b pop %ebx - 3a20: 5e pop %esi - 3a21: 5f pop %edi - 3a22: 5d pop %ebp - 3a23: c3 ret - 3a24: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - neg = 0; - 3a28: c7 45 bc 00 00 00 00 movl $0x0,-0x44(%ebp) - 3a2f: eb 87 jmp 39b8 - 3a31: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 3a38: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 3a3f: 90 nop - -00003a40 : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void printf(int fd, const char *fmt, ...) { - 3a40: 55 push %ebp - 3a41: 89 e5 mov %esp,%ebp - 3a43: 57 push %edi - 3a44: 56 push %esi - 3a45: 53 push %ebx - 3a46: 83 ec 2c sub $0x2c,%esp - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for (i = 0; fmt[i]; i++) { - 3a49: 8b 5d 0c mov 0xc(%ebp),%ebx -void printf(int fd, const char *fmt, ...) { - 3a4c: 8b 75 08 mov 0x8(%ebp),%esi - for (i = 0; fmt[i]; i++) { - 3a4f: 0f b6 13 movzbl (%ebx),%edx - 3a52: 84 d2 test %dl,%dl - 3a54: 74 6a je 3ac0 - ap = (uint*)(void*)&fmt + 1; - 3a56: 8d 45 10 lea 0x10(%ebp),%eax - 3a59: 83 c3 01 add $0x1,%ebx - write(fd, &c, 1); - 3a5c: 8d 7d e7 lea -0x19(%ebp),%edi - state = 0; - 3a5f: 31 c9 xor %ecx,%ecx - ap = (uint*)(void*)&fmt + 1; - 3a61: 89 45 d0 mov %eax,-0x30(%ebp) - 3a64: eb 36 jmp 3a9c - 3a66: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 3a6d: 8d 76 00 lea 0x0(%esi),%esi - 3a70: 89 4d d4 mov %ecx,-0x2c(%ebp) - c = fmt[i] & 0xff; - if (state == 0) { - if (c == '%') { - state = '%'; - 3a73: b9 25 00 00 00 mov $0x25,%ecx - if (c == '%') { - 3a78: 83 f8 25 cmp $0x25,%eax - 3a7b: 74 15 je 3a92 - write(fd, &c, 1); - 3a7d: 83 ec 04 sub $0x4,%esp - 3a80: 88 55 e7 mov %dl,-0x19(%ebp) - 3a83: 6a 01 push $0x1 - 3a85: 57 push %edi - 3a86: 56 push %esi - 3a87: e8 b7 fe ff ff call 3943 - 3a8c: 8b 4d d4 mov -0x2c(%ebp),%ecx - } - else { - putc(fd, c); - 3a8f: 83 c4 10 add $0x10,%esp - for (i = 0; fmt[i]; i++) { - 3a92: 0f b6 13 movzbl (%ebx),%edx - 3a95: 83 c3 01 add $0x1,%ebx - 3a98: 84 d2 test %dl,%dl - 3a9a: 74 24 je 3ac0 - c = fmt[i] & 0xff; - 3a9c: 0f b6 c2 movzbl %dl,%eax - if (state == 0) { - 3a9f: 85 c9 test %ecx,%ecx - 3aa1: 74 cd je 3a70 - } - } - else if (state == '%') { - 3aa3: 83 f9 25 cmp $0x25,%ecx - 3aa6: 75 ea jne 3a92 - if (c == 'd') { - 3aa8: 83 f8 25 cmp $0x25,%eax - 3aab: 0f 84 07 01 00 00 je 3bb8 - 3ab1: 83 e8 63 sub $0x63,%eax - 3ab4: 83 f8 15 cmp $0x15,%eax - 3ab7: 77 17 ja 3ad0 - 3ab9: ff 24 85 08 55 00 00 jmp *0x5508(,%eax,4) - putc(fd, c); - } - state = 0; - } - } -} - 3ac0: 8d 65 f4 lea -0xc(%ebp),%esp - 3ac3: 5b pop %ebx - 3ac4: 5e pop %esi - 3ac5: 5f pop %edi - 3ac6: 5d pop %ebp - 3ac7: c3 ret - 3ac8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 3acf: 90 nop - write(fd, &c, 1); - 3ad0: 83 ec 04 sub $0x4,%esp - 3ad3: 88 55 d4 mov %dl,-0x2c(%ebp) - 3ad6: 6a 01 push $0x1 - 3ad8: 57 push %edi - 3ad9: 56 push %esi - 3ada: c6 45 e7 25 movb $0x25,-0x19(%ebp) - 3ade: e8 60 fe ff ff call 3943 - putc(fd, c); - 3ae3: 0f b6 55 d4 movzbl -0x2c(%ebp),%edx - write(fd, &c, 1); - 3ae7: 83 c4 0c add $0xc,%esp - 3aea: 88 55 e7 mov %dl,-0x19(%ebp) - 3aed: 6a 01 push $0x1 - 3aef: 57 push %edi - 3af0: 56 push %esi - 3af1: e8 4d fe ff ff call 3943 - putc(fd, c); - 3af6: 83 c4 10 add $0x10,%esp - state = 0; - 3af9: 31 c9 xor %ecx,%ecx - 3afb: eb 95 jmp 3a92 - 3afd: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 16, 0); - 3b00: 83 ec 0c sub $0xc,%esp - 3b03: b9 10 00 00 00 mov $0x10,%ecx - 3b08: 6a 00 push $0x0 - 3b0a: 8b 45 d0 mov -0x30(%ebp),%eax - 3b0d: 8b 10 mov (%eax),%edx - 3b0f: 89 f0 mov %esi,%eax - 3b11: e8 7a fe ff ff call 3990 - ap++; - 3b16: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 3b1a: 83 c4 10 add $0x10,%esp - state = 0; - 3b1d: 31 c9 xor %ecx,%ecx - 3b1f: e9 6e ff ff ff jmp 3a92 - 3b24: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - s = (char*)*ap; - 3b28: 8b 45 d0 mov -0x30(%ebp),%eax - 3b2b: 8b 10 mov (%eax),%edx - ap++; - 3b2d: 83 c0 04 add $0x4,%eax - 3b30: 89 45 d0 mov %eax,-0x30(%ebp) - if (s == 0) { - 3b33: 85 d2 test %edx,%edx - 3b35: 0f 84 8d 00 00 00 je 3bc8 - while (*s != 0) { - 3b3b: 0f b6 02 movzbl (%edx),%eax - state = 0; - 3b3e: 31 c9 xor %ecx,%ecx - while (*s != 0) { - 3b40: 84 c0 test %al,%al - 3b42: 0f 84 4a ff ff ff je 3a92 - 3b48: 89 5d d4 mov %ebx,-0x2c(%ebp) - 3b4b: 89 d3 mov %edx,%ebx - 3b4d: 8d 76 00 lea 0x0(%esi),%esi - write(fd, &c, 1); - 3b50: 83 ec 04 sub $0x4,%esp - s++; - 3b53: 83 c3 01 add $0x1,%ebx - 3b56: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 3b59: 6a 01 push $0x1 - 3b5b: 57 push %edi - 3b5c: 56 push %esi - 3b5d: e8 e1 fd ff ff call 3943 - while (*s != 0) { - 3b62: 0f b6 03 movzbl (%ebx),%eax - 3b65: 83 c4 10 add $0x10,%esp - 3b68: 84 c0 test %al,%al - 3b6a: 75 e4 jne 3b50 - state = 0; - 3b6c: 8b 5d d4 mov -0x2c(%ebp),%ebx - 3b6f: 31 c9 xor %ecx,%ecx - 3b71: e9 1c ff ff ff jmp 3a92 - 3b76: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 3b7d: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 10, 1); - 3b80: 83 ec 0c sub $0xc,%esp - 3b83: b9 0a 00 00 00 mov $0xa,%ecx - 3b88: 6a 01 push $0x1 - 3b8a: e9 7b ff ff ff jmp 3b0a - 3b8f: 90 nop - putc(fd, *ap); - 3b90: 8b 45 d0 mov -0x30(%ebp),%eax - write(fd, &c, 1); - 3b93: 83 ec 04 sub $0x4,%esp - putc(fd, *ap); - 3b96: 8b 00 mov (%eax),%eax - write(fd, &c, 1); - 3b98: 6a 01 push $0x1 - 3b9a: 57 push %edi - 3b9b: 56 push %esi - putc(fd, *ap); - 3b9c: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 3b9f: e8 9f fd ff ff call 3943 - ap++; - 3ba4: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 3ba8: 83 c4 10 add $0x10,%esp - state = 0; - 3bab: 31 c9 xor %ecx,%ecx - 3bad: e9 e0 fe ff ff jmp 3a92 - 3bb2: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - putc(fd, c); - 3bb8: 88 55 e7 mov %dl,-0x19(%ebp) - write(fd, &c, 1); - 3bbb: 83 ec 04 sub $0x4,%esp - 3bbe: e9 2a ff ff ff jmp 3aed - 3bc3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 3bc7: 90 nop - s = "(null)"; - 3bc8: ba fe 54 00 00 mov $0x54fe,%edx - while (*s != 0) { - 3bcd: 89 5d d4 mov %ebx,-0x2c(%ebp) - 3bd0: b8 28 00 00 00 mov $0x28,%eax - 3bd5: 89 d3 mov %edx,%ebx - 3bd7: e9 74 ff ff ff jmp 3b50 - 3bdc: 66 90 xchg %ax,%ax - 3bde: 66 90 xchg %ax,%ax - -00003be0 : -typedef union header Header; - -static Header base; -static Header *freep; - -void free(void *ap) { - 3be0: 55 push %ebp - Header *bp, *p; - - bp = (Header*)ap - 1; - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 3be1: a1 20 a6 00 00 mov 0xa620,%eax -void free(void *ap) { - 3be6: 89 e5 mov %esp,%ebp - 3be8: 57 push %edi - 3be9: 56 push %esi - 3bea: 53 push %ebx - 3beb: 8b 5d 08 mov 0x8(%ebp),%ebx - bp = (Header*)ap - 1; - 3bee: 8d 4b f8 lea -0x8(%ebx),%ecx - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 3bf1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 3bf8: 89 c2 mov %eax,%edx - 3bfa: 8b 00 mov (%eax),%eax - 3bfc: 39 ca cmp %ecx,%edx - 3bfe: 73 30 jae 3c30 - 3c00: 39 c1 cmp %eax,%ecx - 3c02: 72 04 jb 3c08 - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 3c04: 39 c2 cmp %eax,%edx - 3c06: 72 f0 jb 3bf8 - break; - } - } - if (bp + bp->s.size == p->s.ptr) { - 3c08: 8b 73 fc mov -0x4(%ebx),%esi - 3c0b: 8d 3c f1 lea (%ecx,%esi,8),%edi - 3c0e: 39 f8 cmp %edi,%eax - 3c10: 74 30 je 3c42 - bp->s.size += p->s.ptr->s.size; - bp->s.ptr = p->s.ptr->s.ptr; - 3c12: 89 43 f8 mov %eax,-0x8(%ebx) - } - else { - bp->s.ptr = p->s.ptr; - } - if (p + p->s.size == bp) { - 3c15: 8b 42 04 mov 0x4(%edx),%eax - 3c18: 8d 34 c2 lea (%edx,%eax,8),%esi - 3c1b: 39 f1 cmp %esi,%ecx - 3c1d: 74 3a je 3c59 - p->s.size += bp->s.size; - p->s.ptr = bp->s.ptr; - 3c1f: 89 0a mov %ecx,(%edx) - } - else { - p->s.ptr = bp; - } - freep = p; -} - 3c21: 5b pop %ebx - freep = p; - 3c22: 89 15 20 a6 00 00 mov %edx,0xa620 -} - 3c28: 5e pop %esi - 3c29: 5f pop %edi - 3c2a: 5d pop %ebp - 3c2b: c3 ret - 3c2c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 3c30: 39 c2 cmp %eax,%edx - 3c32: 72 c4 jb 3bf8 - 3c34: 39 c1 cmp %eax,%ecx - 3c36: 73 c0 jae 3bf8 - if (bp + bp->s.size == p->s.ptr) { - 3c38: 8b 73 fc mov -0x4(%ebx),%esi - 3c3b: 8d 3c f1 lea (%ecx,%esi,8),%edi - 3c3e: 39 f8 cmp %edi,%eax - 3c40: 75 d0 jne 3c12 - bp->s.size += p->s.ptr->s.size; - 3c42: 03 70 04 add 0x4(%eax),%esi - 3c45: 89 73 fc mov %esi,-0x4(%ebx) - bp->s.ptr = p->s.ptr->s.ptr; - 3c48: 8b 02 mov (%edx),%eax - 3c4a: 8b 00 mov (%eax),%eax - 3c4c: 89 43 f8 mov %eax,-0x8(%ebx) - if (p + p->s.size == bp) { - 3c4f: 8b 42 04 mov 0x4(%edx),%eax - 3c52: 8d 34 c2 lea (%edx,%eax,8),%esi - 3c55: 39 f1 cmp %esi,%ecx - 3c57: 75 c6 jne 3c1f - p->s.size += bp->s.size; - 3c59: 03 43 fc add -0x4(%ebx),%eax - freep = p; - 3c5c: 89 15 20 a6 00 00 mov %edx,0xa620 - p->s.size += bp->s.size; - 3c62: 89 42 04 mov %eax,0x4(%edx) - p->s.ptr = bp->s.ptr; - 3c65: 8b 4b f8 mov -0x8(%ebx),%ecx - 3c68: 89 0a mov %ecx,(%edx) -} - 3c6a: 5b pop %ebx - 3c6b: 5e pop %esi - 3c6c: 5f pop %edi - 3c6d: 5d pop %ebp - 3c6e: c3 ret - 3c6f: 90 nop - -00003c70 : - hp->s.size = nu; - free((void*)(hp + 1)); - return freep; -} - -void* malloc(uint nbytes) { - 3c70: 55 push %ebp - 3c71: 89 e5 mov %esp,%ebp - 3c73: 57 push %edi - 3c74: 56 push %esi - 3c75: 53 push %ebx - 3c76: 83 ec 1c sub $0x1c,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 3c79: 8b 45 08 mov 0x8(%ebp),%eax - if ((prevp = freep) == 0) { - 3c7c: 8b 3d 20 a6 00 00 mov 0xa620,%edi - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 3c82: 8d 70 07 lea 0x7(%eax),%esi - 3c85: c1 ee 03 shr $0x3,%esi - 3c88: 83 c6 01 add $0x1,%esi - if ((prevp = freep) == 0) { - 3c8b: 85 ff test %edi,%edi - 3c8d: 0f 84 9d 00 00 00 je 3d30 - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 3c93: 8b 17 mov (%edi),%edx - if (p->s.size >= nunits) { - 3c95: 8b 4a 04 mov 0x4(%edx),%ecx - 3c98: 39 f1 cmp %esi,%ecx - 3c9a: 73 6a jae 3d06 - 3c9c: bb 00 10 00 00 mov $0x1000,%ebx - 3ca1: 39 de cmp %ebx,%esi - 3ca3: 0f 43 de cmovae %esi,%ebx - p = sbrk(nu * sizeof(Header)); - 3ca6: 8d 04 dd 00 00 00 00 lea 0x0(,%ebx,8),%eax - 3cad: 89 45 e4 mov %eax,-0x1c(%ebp) - 3cb0: eb 17 jmp 3cc9 - 3cb2: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 3cb8: 8b 02 mov (%edx),%eax - if (p->s.size >= nunits) { - 3cba: 8b 48 04 mov 0x4(%eax),%ecx - 3cbd: 39 f1 cmp %esi,%ecx - 3cbf: 73 4f jae 3d10 - p->s.size = nunits; - } - freep = prevp; - return (void*)(p + 1); - } - if (p == freep) { - 3cc1: 8b 3d 20 a6 00 00 mov 0xa620,%edi - 3cc7: 89 c2 mov %eax,%edx - 3cc9: 39 d7 cmp %edx,%edi - 3ccb: 75 eb jne 3cb8 - p = sbrk(nu * sizeof(Header)); - 3ccd: 83 ec 0c sub $0xc,%esp - 3cd0: ff 75 e4 push -0x1c(%ebp) - 3cd3: e8 4b fc ff ff call 3923 - if (p == (char*)-1) { - 3cd8: 83 c4 10 add $0x10,%esp - 3cdb: 83 f8 ff cmp $0xffffffff,%eax - 3cde: 74 1c je 3cfc - hp->s.size = nu; - 3ce0: 89 58 04 mov %ebx,0x4(%eax) - free((void*)(hp + 1)); - 3ce3: 83 ec 0c sub $0xc,%esp - 3ce6: 83 c0 08 add $0x8,%eax - 3ce9: 50 push %eax - 3cea: e8 f1 fe ff ff call 3be0 - return freep; - 3cef: 8b 15 20 a6 00 00 mov 0xa620,%edx - if ((p = morecore(nunits)) == 0) { - 3cf5: 83 c4 10 add $0x10,%esp - 3cf8: 85 d2 test %edx,%edx - 3cfa: 75 bc jne 3cb8 - return 0; - } - } - } -} - 3cfc: 8d 65 f4 lea -0xc(%ebp),%esp - return 0; - 3cff: 31 c0 xor %eax,%eax -} - 3d01: 5b pop %ebx - 3d02: 5e pop %esi - 3d03: 5f pop %edi - 3d04: 5d pop %ebp - 3d05: c3 ret - if (p->s.size >= nunits) { - 3d06: 89 d0 mov %edx,%eax - 3d08: 89 fa mov %edi,%edx - 3d0a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - if (p->s.size == nunits) { - 3d10: 39 ce cmp %ecx,%esi - 3d12: 74 4c je 3d60 - p->s.size -= nunits; - 3d14: 29 f1 sub %esi,%ecx - 3d16: 89 48 04 mov %ecx,0x4(%eax) - p += p->s.size; - 3d19: 8d 04 c8 lea (%eax,%ecx,8),%eax - p->s.size = nunits; - 3d1c: 89 70 04 mov %esi,0x4(%eax) - freep = prevp; - 3d1f: 89 15 20 a6 00 00 mov %edx,0xa620 -} - 3d25: 8d 65 f4 lea -0xc(%ebp),%esp - return (void*)(p + 1); - 3d28: 83 c0 08 add $0x8,%eax -} - 3d2b: 5b pop %ebx - 3d2c: 5e pop %esi - 3d2d: 5f pop %edi - 3d2e: 5d pop %ebp - 3d2f: c3 ret - base.s.ptr = freep = prevp = &base; - 3d30: c7 05 20 a6 00 00 24 movl $0xa624,0xa620 - 3d37: a6 00 00 - base.s.size = 0; - 3d3a: bf 24 a6 00 00 mov $0xa624,%edi - base.s.ptr = freep = prevp = &base; - 3d3f: c7 05 24 a6 00 00 24 movl $0xa624,0xa624 - 3d46: a6 00 00 - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 3d49: 89 fa mov %edi,%edx - base.s.size = 0; - 3d4b: c7 05 28 a6 00 00 00 movl $0x0,0xa628 - 3d52: 00 00 00 - if (p->s.size >= nunits) { - 3d55: e9 42 ff ff ff jmp 3c9c - 3d5a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - prevp->s.ptr = p->s.ptr; - 3d60: 8b 08 mov (%eax),%ecx - 3d62: 89 0a mov %ecx,(%edx) - 3d64: eb b9 jmp 3d1f diff --git a/usertests.d b/usertests.d deleted file mode 100644 index a4933d3..0000000 --- a/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/usertests.o b/usertests.o deleted file mode 100644 index 0abd7178f76572f51f3a9fb902c8391e07dd7ba5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73980 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
      KzhdiGst`mhlkUWSghy|X{ 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 OxIKJOKk=lKiTeu|P2F?= diff --git a/vectors.S b/vectors.S deleted file mode 100644 index 9e4041a..0000000 --- a/vectors.S +++ /dev/null @@ -1,1537 +0,0 @@ -# generated by vectors.pl - do not edit -# handlers -.globl alltraps -.globl vector0 -vector0: - pushl $0 - pushl $0 - jmp alltraps -.globl vector1 -vector1: - pushl $0 - pushl $1 - jmp alltraps -.globl vector2 -vector2: - pushl $0 - pushl $2 - jmp alltraps -.globl vector3 -vector3: - pushl $0 - pushl $3 - jmp alltraps -.globl vector4 -vector4: - pushl $0 - pushl $4 - jmp alltraps -.globl vector5 -vector5: - pushl $0 - pushl $5 - jmp alltraps -.globl vector6 -vector6: - pushl $0 - pushl $6 - jmp alltraps -.globl vector7 -vector7: - pushl $0 - pushl $7 - jmp alltraps -.globl vector8 -vector8: - pushl $8 - jmp alltraps -.globl vector9 -vector9: - pushl $0 - pushl $9 - jmp alltraps -.globl vector10 -vector10: - pushl $10 - jmp alltraps -.globl vector11 -vector11: - pushl $11 - jmp alltraps -.globl vector12 -vector12: - pushl $12 - jmp alltraps -.globl vector13 -vector13: - pushl $13 - jmp alltraps -.globl vector14 -vector14: - pushl $14 - jmp alltraps -.globl vector15 -vector15: - pushl $0 - pushl $15 - jmp alltraps -.globl vector16 -vector16: - pushl $0 - pushl $16 - jmp alltraps -.globl vector17 -vector17: - pushl $17 - jmp alltraps -.globl vector18 -vector18: - pushl $0 - pushl $18 - jmp alltraps -.globl vector19 -vector19: - pushl $0 - pushl $19 - jmp alltraps -.globl vector20 -vector20: - pushl $0 - pushl $20 - jmp alltraps -.globl vector21 -vector21: - pushl $0 - pushl $21 - jmp alltraps -.globl vector22 -vector22: - pushl $0 - pushl $22 - jmp alltraps -.globl vector23 -vector23: - pushl $0 - pushl $23 - jmp alltraps -.globl vector24 -vector24: - pushl $0 - pushl $24 - jmp alltraps -.globl vector25 -vector25: - pushl $0 - pushl $25 - jmp alltraps -.globl vector26 -vector26: - pushl $0 - pushl $26 - jmp alltraps -.globl vector27 -vector27: - pushl $0 - pushl $27 - jmp alltraps -.globl vector28 -vector28: - pushl $0 - pushl $28 - jmp alltraps -.globl vector29 -vector29: - pushl $0 - pushl $29 - jmp alltraps -.globl vector30 -vector30: - pushl $0 - pushl $30 - jmp alltraps -.globl vector31 -vector31: - pushl $0 - pushl $31 - jmp alltraps -.globl vector32 -vector32: - pushl $0 - pushl $32 - jmp alltraps -.globl vector33 -vector33: - pushl $0 - pushl $33 - jmp alltraps -.globl vector34 -vector34: - pushl $0 - pushl $34 - jmp alltraps -.globl vector35 -vector35: - pushl $0 - pushl $35 - jmp alltraps -.globl vector36 -vector36: - pushl $0 - pushl $36 - jmp alltraps -.globl vector37 -vector37: - pushl $0 - pushl $37 - jmp alltraps -.globl vector38 -vector38: - pushl $0 - pushl $38 - jmp alltraps -.globl vector39 -vector39: - pushl $0 - pushl $39 - jmp alltraps -.globl vector40 -vector40: - pushl $0 - pushl $40 - jmp alltraps -.globl vector41 -vector41: - pushl $0 - pushl $41 - jmp alltraps -.globl vector42 -vector42: - pushl $0 - pushl $42 - jmp alltraps -.globl vector43 -vector43: - pushl $0 - pushl $43 - jmp alltraps -.globl vector44 -vector44: - pushl $0 - pushl $44 - jmp alltraps -.globl vector45 -vector45: - pushl $0 - pushl $45 - jmp alltraps -.globl vector46 -vector46: - pushl $0 - pushl $46 - jmp alltraps -.globl vector47 -vector47: - pushl $0 - pushl $47 - jmp alltraps -.globl vector48 -vector48: - pushl $0 - pushl $48 - jmp alltraps -.globl vector49 -vector49: - pushl $0 - pushl $49 - jmp alltraps -.globl vector50 -vector50: - pushl $0 - pushl $50 - jmp alltraps -.globl vector51 -vector51: - pushl $0 - pushl $51 - jmp alltraps -.globl vector52 -vector52: - pushl $0 - pushl $52 - jmp alltraps -.globl vector53 -vector53: - pushl $0 - pushl $53 - jmp alltraps -.globl vector54 -vector54: - pushl $0 - pushl $54 - jmp alltraps -.globl vector55 -vector55: - pushl $0 - pushl $55 - jmp alltraps -.globl vector56 -vector56: - pushl $0 - pushl $56 - jmp alltraps -.globl vector57 -vector57: - pushl $0 - pushl $57 - jmp alltraps -.globl vector58 -vector58: - pushl $0 - pushl $58 - jmp alltraps -.globl vector59 -vector59: - pushl $0 - pushl $59 - jmp alltraps -.globl vector60 -vector60: - pushl $0 - pushl $60 - jmp alltraps -.globl vector61 -vector61: - pushl $0 - pushl $61 - jmp alltraps -.globl vector62 -vector62: - pushl $0 - pushl $62 - jmp alltraps -.globl vector63 -vector63: - pushl $0 - pushl $63 - jmp alltraps -.globl vector64 -vector64: - pushl $0 - pushl $64 - jmp alltraps -.globl vector65 -vector65: - pushl $0 - pushl $65 - jmp alltraps -.globl vector66 -vector66: - pushl $0 - pushl $66 - jmp alltraps -.globl vector67 -vector67: - pushl $0 - pushl $67 - jmp alltraps -.globl vector68 -vector68: - pushl $0 - pushl $68 - jmp alltraps -.globl vector69 -vector69: - pushl $0 - pushl $69 - jmp alltraps -.globl vector70 -vector70: - pushl $0 - pushl $70 - jmp alltraps -.globl vector71 -vector71: - pushl $0 - pushl $71 - jmp alltraps -.globl vector72 -vector72: - pushl $0 - pushl $72 - jmp alltraps -.globl vector73 -vector73: - pushl $0 - pushl $73 - jmp alltraps -.globl vector74 -vector74: - pushl $0 - pushl $74 - jmp alltraps -.globl vector75 -vector75: - pushl $0 - pushl $75 - jmp alltraps -.globl vector76 -vector76: - pushl $0 - pushl $76 - jmp alltraps -.globl vector77 -vector77: - pushl $0 - pushl $77 - jmp alltraps -.globl vector78 -vector78: - pushl $0 - pushl $78 - jmp alltraps -.globl vector79 -vector79: - pushl $0 - pushl $79 - jmp alltraps -.globl vector80 -vector80: - pushl $0 - pushl $80 - jmp alltraps -.globl vector81 -vector81: - pushl $0 - pushl $81 - jmp alltraps -.globl vector82 -vector82: - pushl $0 - pushl $82 - jmp alltraps -.globl vector83 -vector83: - pushl $0 - pushl $83 - jmp alltraps -.globl vector84 -vector84: - pushl $0 - pushl $84 - jmp alltraps -.globl vector85 -vector85: - pushl $0 - pushl $85 - jmp alltraps -.globl vector86 -vector86: - pushl $0 - pushl $86 - jmp alltraps -.globl vector87 -vector87: - pushl $0 - pushl $87 - jmp alltraps -.globl vector88 -vector88: - pushl $0 - pushl $88 - jmp alltraps -.globl vector89 -vector89: - pushl $0 - pushl $89 - jmp alltraps -.globl vector90 -vector90: - pushl $0 - pushl $90 - jmp alltraps -.globl vector91 -vector91: - pushl $0 - pushl $91 - jmp alltraps -.globl vector92 -vector92: - pushl $0 - pushl $92 - jmp alltraps -.globl vector93 -vector93: - pushl $0 - pushl $93 - jmp alltraps -.globl vector94 -vector94: - pushl $0 - pushl $94 - jmp alltraps -.globl vector95 -vector95: - pushl $0 - pushl $95 - jmp alltraps -.globl vector96 -vector96: - pushl $0 - pushl $96 - jmp alltraps -.globl vector97 -vector97: - pushl $0 - pushl $97 - jmp alltraps -.globl vector98 -vector98: - pushl $0 - pushl $98 - jmp alltraps -.globl vector99 -vector99: - pushl $0 - pushl $99 - jmp alltraps -.globl vector100 -vector100: - pushl $0 - pushl $100 - jmp alltraps -.globl vector101 -vector101: - pushl $0 - pushl $101 - jmp alltraps -.globl vector102 -vector102: - pushl $0 - pushl $102 - jmp alltraps -.globl vector103 -vector103: - pushl $0 - pushl $103 - jmp alltraps -.globl vector104 -vector104: - pushl $0 - pushl $104 - jmp alltraps -.globl vector105 -vector105: - pushl $0 - pushl $105 - jmp alltraps -.globl vector106 -vector106: - pushl $0 - pushl $106 - jmp alltraps -.globl vector107 -vector107: - pushl $0 - pushl $107 - jmp alltraps -.globl vector108 -vector108: - pushl $0 - pushl $108 - jmp alltraps -.globl vector109 -vector109: - pushl $0 - pushl $109 - jmp alltraps -.globl vector110 -vector110: - pushl $0 - pushl $110 - jmp alltraps -.globl vector111 -vector111: - pushl $0 - pushl $111 - jmp alltraps -.globl vector112 -vector112: - pushl $0 - pushl $112 - jmp alltraps -.globl vector113 -vector113: - pushl $0 - pushl $113 - jmp alltraps -.globl vector114 -vector114: - pushl $0 - pushl $114 - jmp alltraps -.globl vector115 -vector115: - pushl $0 - pushl $115 - jmp alltraps -.globl vector116 -vector116: - pushl $0 - pushl $116 - jmp alltraps -.globl vector117 -vector117: - pushl $0 - pushl $117 - jmp alltraps -.globl vector118 -vector118: - pushl $0 - pushl $118 - jmp alltraps -.globl vector119 -vector119: - pushl $0 - pushl $119 - jmp alltraps -.globl vector120 -vector120: - pushl $0 - pushl $120 - jmp alltraps -.globl vector121 -vector121: - pushl $0 - pushl $121 - jmp alltraps -.globl vector122 -vector122: - pushl $0 - pushl $122 - jmp alltraps -.globl vector123 -vector123: - pushl $0 - pushl $123 - jmp alltraps -.globl vector124 -vector124: - pushl $0 - pushl $124 - jmp alltraps -.globl vector125 -vector125: - pushl $0 - pushl $125 - jmp alltraps -.globl vector126 -vector126: - pushl $0 - pushl $126 - jmp alltraps -.globl vector127 -vector127: - pushl $0 - pushl $127 - jmp alltraps -.globl vector128 -vector128: - pushl $0 - pushl $128 - jmp alltraps -.globl vector129 -vector129: - pushl $0 - pushl $129 - jmp alltraps -.globl vector130 -vector130: - pushl $0 - pushl $130 - jmp alltraps -.globl vector131 -vector131: - pushl $0 - pushl $131 - jmp alltraps -.globl vector132 -vector132: - pushl $0 - pushl $132 - jmp alltraps -.globl vector133 -vector133: - pushl $0 - pushl $133 - jmp alltraps -.globl vector134 -vector134: - pushl $0 - pushl $134 - jmp alltraps -.globl vector135 -vector135: - pushl $0 - pushl $135 - jmp alltraps -.globl vector136 -vector136: - pushl $0 - pushl $136 - jmp alltraps -.globl vector137 -vector137: - pushl $0 - pushl $137 - jmp alltraps -.globl vector138 -vector138: - pushl $0 - pushl $138 - jmp alltraps -.globl vector139 -vector139: - pushl $0 - pushl $139 - jmp alltraps -.globl vector140 -vector140: - pushl $0 - pushl $140 - jmp alltraps -.globl vector141 -vector141: - pushl $0 - pushl $141 - jmp alltraps -.globl vector142 -vector142: - pushl $0 - pushl $142 - jmp alltraps -.globl vector143 -vector143: - pushl $0 - pushl $143 - jmp alltraps -.globl vector144 -vector144: - pushl $0 - pushl $144 - jmp alltraps -.globl vector145 -vector145: - pushl $0 - pushl $145 - jmp alltraps -.globl vector146 -vector146: - pushl $0 - pushl $146 - jmp alltraps -.globl vector147 -vector147: - pushl $0 - pushl $147 - jmp alltraps -.globl vector148 -vector148: - pushl $0 - pushl $148 - jmp alltraps -.globl vector149 -vector149: - pushl $0 - pushl $149 - jmp alltraps -.globl vector150 -vector150: - pushl $0 - pushl $150 - jmp alltraps -.globl vector151 -vector151: - pushl $0 - pushl $151 - jmp alltraps -.globl vector152 -vector152: - pushl $0 - pushl $152 - jmp alltraps -.globl vector153 -vector153: - pushl $0 - pushl $153 - jmp alltraps -.globl vector154 -vector154: - pushl $0 - pushl $154 - jmp alltraps -.globl vector155 -vector155: - pushl $0 - pushl $155 - jmp alltraps -.globl vector156 -vector156: - pushl $0 - pushl $156 - jmp alltraps -.globl vector157 -vector157: - pushl $0 - pushl $157 - jmp alltraps -.globl vector158 -vector158: - pushl $0 - pushl $158 - jmp alltraps -.globl vector159 -vector159: - pushl $0 - pushl $159 - jmp alltraps -.globl vector160 -vector160: - pushl $0 - pushl $160 - jmp alltraps -.globl vector161 -vector161: - pushl $0 - pushl $161 - jmp alltraps -.globl vector162 -vector162: - pushl $0 - pushl $162 - jmp alltraps -.globl vector163 -vector163: - pushl $0 - pushl $163 - jmp alltraps -.globl vector164 -vector164: - pushl $0 - pushl $164 - jmp alltraps -.globl vector165 -vector165: - pushl $0 - pushl $165 - jmp alltraps -.globl vector166 -vector166: - pushl $0 - pushl $166 - jmp alltraps -.globl vector167 -vector167: - pushl $0 - pushl $167 - jmp alltraps -.globl vector168 -vector168: - pushl $0 - pushl $168 - jmp alltraps -.globl vector169 -vector169: - pushl $0 - pushl $169 - jmp alltraps -.globl vector170 -vector170: - pushl $0 - pushl $170 - jmp alltraps -.globl vector171 -vector171: - pushl $0 - pushl $171 - jmp alltraps -.globl vector172 -vector172: - pushl $0 - pushl $172 - jmp alltraps -.globl vector173 -vector173: - pushl $0 - pushl $173 - jmp alltraps -.globl vector174 -vector174: - pushl $0 - pushl $174 - jmp alltraps -.globl vector175 -vector175: - pushl $0 - pushl $175 - jmp alltraps -.globl vector176 -vector176: - pushl $0 - pushl $176 - jmp alltraps -.globl vector177 -vector177: - pushl $0 - pushl $177 - jmp alltraps -.globl vector178 -vector178: - pushl $0 - pushl $178 - jmp alltraps -.globl vector179 -vector179: - pushl $0 - pushl $179 - jmp alltraps -.globl vector180 -vector180: - pushl $0 - pushl $180 - jmp alltraps -.globl vector181 -vector181: - pushl $0 - pushl $181 - jmp alltraps -.globl vector182 -vector182: - pushl $0 - pushl $182 - jmp alltraps -.globl vector183 -vector183: - pushl $0 - pushl $183 - jmp alltraps -.globl vector184 -vector184: - pushl $0 - pushl $184 - jmp alltraps -.globl vector185 -vector185: - pushl $0 - pushl $185 - jmp alltraps -.globl vector186 -vector186: - pushl $0 - pushl $186 - jmp alltraps -.globl vector187 -vector187: - pushl $0 - pushl $187 - jmp alltraps -.globl vector188 -vector188: - pushl $0 - pushl $188 - jmp alltraps -.globl vector189 -vector189: - pushl $0 - pushl $189 - jmp alltraps -.globl vector190 -vector190: - pushl $0 - pushl $190 - jmp alltraps -.globl vector191 -vector191: - pushl $0 - pushl $191 - jmp alltraps -.globl vector192 -vector192: - pushl $0 - pushl $192 - jmp alltraps -.globl vector193 -vector193: - pushl $0 - pushl $193 - jmp alltraps -.globl vector194 -vector194: - pushl $0 - pushl $194 - jmp alltraps -.globl vector195 -vector195: - pushl $0 - pushl $195 - jmp alltraps -.globl vector196 -vector196: - pushl $0 - pushl $196 - jmp alltraps -.globl vector197 -vector197: - pushl $0 - pushl $197 - jmp alltraps -.globl vector198 -vector198: - pushl $0 - pushl $198 - jmp alltraps -.globl vector199 -vector199: - pushl $0 - pushl $199 - jmp alltraps -.globl vector200 -vector200: - pushl $0 - pushl $200 - jmp alltraps -.globl vector201 -vector201: - pushl $0 - pushl $201 - jmp alltraps -.globl vector202 -vector202: - pushl $0 - pushl $202 - jmp alltraps -.globl vector203 -vector203: - pushl $0 - pushl $203 - jmp alltraps -.globl vector204 -vector204: - pushl $0 - pushl $204 - jmp alltraps -.globl vector205 -vector205: - pushl $0 - pushl $205 - jmp alltraps -.globl vector206 -vector206: - pushl $0 - pushl $206 - jmp alltraps -.globl vector207 -vector207: - pushl $0 - pushl $207 - jmp alltraps -.globl vector208 -vector208: - pushl $0 - pushl $208 - jmp alltraps -.globl vector209 -vector209: - pushl $0 - pushl $209 - jmp alltraps -.globl vector210 -vector210: - pushl $0 - pushl $210 - jmp alltraps -.globl vector211 -vector211: - pushl $0 - pushl $211 - jmp alltraps -.globl vector212 -vector212: - pushl $0 - pushl $212 - jmp alltraps -.globl vector213 -vector213: - pushl $0 - pushl $213 - jmp alltraps -.globl vector214 -vector214: - pushl $0 - pushl $214 - jmp alltraps -.globl vector215 -vector215: - pushl $0 - pushl $215 - jmp alltraps -.globl vector216 -vector216: - pushl $0 - pushl $216 - jmp alltraps -.globl vector217 -vector217: - pushl $0 - pushl $217 - jmp alltraps -.globl vector218 -vector218: - pushl $0 - pushl $218 - jmp alltraps -.globl vector219 -vector219: - pushl $0 - pushl $219 - jmp alltraps -.globl vector220 -vector220: - pushl $0 - pushl $220 - jmp alltraps -.globl vector221 -vector221: - pushl $0 - pushl $221 - jmp alltraps -.globl vector222 -vector222: - pushl $0 - pushl $222 - jmp alltraps -.globl vector223 -vector223: - pushl $0 - pushl $223 - jmp alltraps -.globl vector224 -vector224: - pushl $0 - pushl $224 - jmp alltraps -.globl vector225 -vector225: - pushl $0 - pushl $225 - jmp alltraps -.globl vector226 -vector226: - pushl $0 - pushl $226 - jmp alltraps -.globl vector227 -vector227: - pushl $0 - pushl $227 - jmp alltraps -.globl vector228 -vector228: - pushl $0 - pushl $228 - jmp alltraps -.globl vector229 -vector229: - pushl $0 - pushl $229 - jmp alltraps -.globl vector230 -vector230: - pushl $0 - pushl $230 - jmp alltraps -.globl vector231 -vector231: - pushl $0 - pushl $231 - jmp alltraps -.globl vector232 -vector232: - pushl $0 - pushl $232 - jmp alltraps -.globl vector233 -vector233: - pushl $0 - pushl $233 - jmp alltraps -.globl vector234 -vector234: - pushl $0 - pushl $234 - jmp alltraps -.globl vector235 -vector235: - pushl $0 - pushl $235 - jmp alltraps -.globl vector236 -vector236: - pushl $0 - pushl $236 - jmp alltraps -.globl vector237 -vector237: - pushl $0 - pushl $237 - jmp alltraps -.globl vector238 -vector238: - pushl $0 - pushl $238 - jmp alltraps -.globl vector239 -vector239: - pushl $0 - pushl $239 - jmp alltraps -.globl vector240 -vector240: - pushl $0 - pushl $240 - jmp alltraps -.globl vector241 -vector241: - pushl $0 - pushl $241 - jmp alltraps -.globl vector242 -vector242: - pushl $0 - pushl $242 - jmp alltraps -.globl vector243 -vector243: - pushl $0 - pushl $243 - jmp alltraps -.globl vector244 -vector244: - pushl $0 - pushl $244 - jmp alltraps -.globl vector245 -vector245: - pushl $0 - pushl $245 - jmp alltraps -.globl vector246 -vector246: - pushl $0 - pushl $246 - jmp alltraps -.globl vector247 -vector247: - pushl $0 - pushl $247 - jmp alltraps -.globl vector248 -vector248: - pushl $0 - pushl $248 - jmp alltraps -.globl vector249 -vector249: - pushl $0 - pushl $249 - jmp alltraps -.globl vector250 -vector250: - pushl $0 - pushl $250 - jmp alltraps -.globl vector251 -vector251: - pushl $0 - pushl $251 - jmp alltraps -.globl vector252 -vector252: - pushl $0 - pushl $252 - jmp alltraps -.globl vector253 -vector253: - pushl $0 - pushl $253 - jmp alltraps -.globl vector254 -vector254: - pushl $0 - pushl $254 - jmp alltraps -.globl vector255 -vector255: - pushl $0 - pushl $255 - jmp alltraps - -# vector table -.data -.globl vectors -vectors: - .long vector0 - .long vector1 - .long vector2 - .long vector3 - .long vector4 - .long vector5 - .long vector6 - .long vector7 - .long vector8 - .long vector9 - .long vector10 - .long vector11 - .long vector12 - .long vector13 - .long vector14 - .long vector15 - .long vector16 - .long vector17 - .long vector18 - .long vector19 - .long vector20 - .long vector21 - .long vector22 - .long vector23 - .long vector24 - .long vector25 - .long vector26 - .long vector27 - .long vector28 - .long vector29 - .long vector30 - .long vector31 - .long vector32 - .long vector33 - .long vector34 - .long vector35 - .long vector36 - .long vector37 - .long vector38 - .long vector39 - .long vector40 - .long vector41 - .long vector42 - .long vector43 - .long vector44 - .long vector45 - .long vector46 - .long vector47 - .long vector48 - .long vector49 - .long vector50 - .long vector51 - .long vector52 - .long vector53 - .long vector54 - .long vector55 - .long vector56 - .long vector57 - .long vector58 - .long vector59 - .long vector60 - .long vector61 - .long vector62 - .long vector63 - .long vector64 - .long vector65 - .long vector66 - .long vector67 - .long vector68 - .long vector69 - .long vector70 - .long vector71 - .long vector72 - .long vector73 - .long vector74 - .long vector75 - .long vector76 - .long vector77 - .long vector78 - .long vector79 - .long vector80 - .long vector81 - .long vector82 - .long vector83 - .long vector84 - .long vector85 - .long vector86 - .long vector87 - .long vector88 - .long vector89 - .long vector90 - .long vector91 - .long vector92 - .long vector93 - .long vector94 - .long vector95 - .long vector96 - .long vector97 - .long vector98 - .long vector99 - .long vector100 - .long vector101 - .long vector102 - .long vector103 - .long vector104 - .long vector105 - .long vector106 - .long vector107 - .long vector108 - .long vector109 - .long vector110 - .long vector111 - .long vector112 - .long vector113 - .long vector114 - .long vector115 - .long vector116 - .long vector117 - .long vector118 - .long vector119 - .long vector120 - .long vector121 - .long vector122 - .long vector123 - .long vector124 - .long vector125 - .long vector126 - .long vector127 - .long vector128 - .long vector129 - .long vector130 - .long vector131 - .long vector132 - .long vector133 - .long vector134 - .long vector135 - .long vector136 - .long vector137 - .long vector138 - .long vector139 - .long vector140 - .long vector141 - .long vector142 - .long vector143 - .long vector144 - .long vector145 - .long vector146 - .long vector147 - .long vector148 - .long vector149 - .long vector150 - .long vector151 - .long vector152 - .long vector153 - .long vector154 - .long vector155 - .long vector156 - .long vector157 - .long vector158 - .long vector159 - .long vector160 - .long vector161 - .long vector162 - .long vector163 - .long vector164 - .long vector165 - .long vector166 - .long vector167 - .long vector168 - .long vector169 - .long vector170 - .long vector171 - .long vector172 - .long vector173 - .long vector174 - .long vector175 - .long vector176 - .long vector177 - .long vector178 - .long vector179 - .long vector180 - .long vector181 - .long vector182 - .long vector183 - .long vector184 - .long vector185 - .long vector186 - .long vector187 - .long vector188 - .long vector189 - .long vector190 - .long vector191 - .long vector192 - .long vector193 - .long vector194 - .long vector195 - .long vector196 - .long vector197 - .long vector198 - .long vector199 - .long vector200 - .long vector201 - .long vector202 - .long vector203 - .long vector204 - .long vector205 - .long vector206 - .long vector207 - .long vector208 - .long vector209 - .long vector210 - .long vector211 - .long vector212 - .long vector213 - .long vector214 - .long vector215 - .long vector216 - .long vector217 - .long vector218 - .long vector219 - .long vector220 - .long vector221 - .long vector222 - .long vector223 - .long vector224 - .long vector225 - .long vector226 - .long vector227 - .long vector228 - .long vector229 - .long vector230 - .long vector231 - .long vector232 - .long vector233 - .long vector234 - .long vector235 - .long vector236 - .long vector237 - .long vector238 - .long vector239 - .long vector240 - .long vector241 - .long vector242 - .long vector243 - .long vector244 - .long vector245 - .long vector246 - .long vector247 - .long vector248 - .long vector249 - .long vector250 - .long vector251 - .long vector252 - .long vector253 - .long vector254 - .long vector255 diff --git a/vectors.o b/vectors.o deleted file mode 100644 index 6e18ee30c99fa49953445011fcfbf4505e60f47e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 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 NI>_xqyWc1G{{gRP6u$rf diff --git a/wc.asm b/wc.asm deleted file mode 100644 index 542f766..0000000 --- a/wc.asm +++ /dev/null @@ -1,1307 +0,0 @@ - -_wc: file format elf32-i386 - - -Disassembly of section .text: - -00000000
      : - exit(); - } - printf(1, "%d %d %d %s\n", l, w, c, name); -} - -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 push -0x4(%ecx) - a: 55 push %ebp - b: 89 e5 mov %esp,%ebp - d: 57 push %edi - e: 56 push %esi - f: be 01 00 00 00 mov $0x1,%esi - 14: 53 push %ebx - 15: 51 push %ecx - 16: 83 ec 18 sub $0x18,%esp - 19: 8b 01 mov (%ecx),%eax - 1b: 8b 59 04 mov 0x4(%ecx),%ebx - 1e: 89 45 e4 mov %eax,-0x1c(%ebp) - 21: 83 c3 04 add $0x4,%ebx - int fd, i; - - if (argc <= 1) { - 24: 83 f8 01 cmp $0x1,%eax - 27: 7e 56 jle 7f - 29: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - wc(0, ""); - exit(); - } - - for (i = 1; i < argc; i++) { - if ((fd = open(argv[i], 0)) < 0) { - 30: 83 ec 08 sub $0x8,%esp - 33: 6a 00 push $0x0 - 35: ff 33 push (%ebx) - 37: e8 ff 03 00 00 call 43b - 3c: 83 c4 10 add $0x10,%esp - 3f: 89 c7 mov %eax,%edi - 41: 85 c0 test %eax,%eax - 43: 78 26 js 6b - printf(1, "wc: cannot open %s\n", argv[i]); - exit(); - } - wc(fd, argv[i]); - 45: 83 ec 08 sub $0x8,%esp - 48: ff 33 push (%ebx) - for (i = 1; i < argc; i++) { - 4a: 83 c6 01 add $0x1,%esi - 4d: 83 c3 04 add $0x4,%ebx - wc(fd, argv[i]); - 50: 50 push %eax - 51: e8 4a 00 00 00 call a0 - close(fd); - 56: 89 3c 24 mov %edi,(%esp) - 59: e8 0d 04 00 00 call 46b - for (i = 1; i < argc; i++) { - 5e: 83 c4 10 add $0x10,%esp - 61: 39 75 e4 cmp %esi,-0x1c(%ebp) - 64: 75 ca jne 30 - } - exit(); - 66: e8 68 03 00 00 call 3d3 - printf(1, "wc: cannot open %s\n", argv[i]); - 6b: 50 push %eax - 6c: ff 33 push (%ebx) - 6e: 68 8b 08 00 00 push $0x88b - 73: 6a 01 push $0x1 - 75: e8 c6 04 00 00 call 540 - exit(); - 7a: e8 54 03 00 00 call 3d3 - wc(0, ""); - 7f: 52 push %edx - 80: 52 push %edx - 81: 68 7d 08 00 00 push $0x87d - 86: 6a 00 push $0x0 - 88: e8 13 00 00 00 call a0 - exit(); - 8d: e8 41 03 00 00 call 3d3 - 92: 66 90 xchg %ax,%ax - 94: 66 90 xchg %ax,%ax - 96: 66 90 xchg %ax,%ax - 98: 66 90 xchg %ax,%ax - 9a: 66 90 xchg %ax,%ax - 9c: 66 90 xchg %ax,%ax - 9e: 66 90 xchg %ax,%ax - -000000a0 : -void wc(int fd, char *name) { - a0: 55 push %ebp - a1: 89 e5 mov %esp,%ebp - a3: 57 push %edi - a4: 56 push %esi - a5: 53 push %ebx - l = w = c = 0; - a6: 31 db xor %ebx,%ebx -void wc(int fd, char *name) { - a8: 83 ec 1c sub $0x1c,%esp - inword = 0; - ab: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) - l = w = c = 0; - b2: c7 45 dc 00 00 00 00 movl $0x0,-0x24(%ebp) - b9: c7 45 e0 00 00 00 00 movl $0x0,-0x20(%ebp) - while ((n = read(fd, buf, sizeof(buf))) > 0) { - c0: 83 ec 04 sub $0x4,%esp - c3: 68 00 02 00 00 push $0x200 - c8: 68 00 0c 00 00 push $0xc00 - cd: ff 75 08 push 0x8(%ebp) - d0: e8 16 03 00 00 call 3eb - d5: 83 c4 10 add $0x10,%esp - d8: 89 c6 mov %eax,%esi - da: 85 c0 test %eax,%eax - dc: 7e 62 jle 140 - for (i = 0; i < n; i++) { - de: 31 ff xor %edi,%edi - e0: eb 14 jmp f6 - e2: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - inword = 0; - e8: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) - for (i = 0; i < n; i++) { - ef: 83 c7 01 add $0x1,%edi - f2: 39 fe cmp %edi,%esi - f4: 74 42 je 138 - if (buf[i] == '\n') { - f6: 0f be 87 00 0c 00 00 movsbl 0xc00(%edi),%eax - l++; - fd: 31 c9 xor %ecx,%ecx - ff: 3c 0a cmp $0xa,%al - 101: 0f 94 c1 sete %cl - if (strchr(" \r\t\n\v", buf[i])) { - 104: 83 ec 08 sub $0x8,%esp - 107: 50 push %eax - l++; - 108: 01 cb add %ecx,%ebx - if (strchr(" \r\t\n\v", buf[i])) { - 10a: 68 68 08 00 00 push $0x868 - 10f: e8 4c 01 00 00 call 260 - 114: 83 c4 10 add $0x10,%esp - 117: 85 c0 test %eax,%eax - 119: 75 cd jne e8 - else if (!inword) { - 11b: 8b 55 e4 mov -0x1c(%ebp),%edx - 11e: 85 d2 test %edx,%edx - 120: 75 cd jne ef - for (i = 0; i < n; i++) { - 122: 83 c7 01 add $0x1,%edi - w++; - 125: 83 45 e0 01 addl $0x1,-0x20(%ebp) - inword = 1; - 129: c7 45 e4 01 00 00 00 movl $0x1,-0x1c(%ebp) - for (i = 0; i < n; i++) { - 130: 39 fe cmp %edi,%esi - 132: 75 c2 jne f6 - 134: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - c++; - 138: 01 75 dc add %esi,-0x24(%ebp) - 13b: eb 83 jmp c0 - 13d: 8d 76 00 lea 0x0(%esi),%esi - if (n < 0) { - 140: 75 24 jne 166 - printf(1, "%d %d %d %s\n", l, w, c, name); - 142: 83 ec 08 sub $0x8,%esp - 145: ff 75 0c push 0xc(%ebp) - 148: ff 75 dc push -0x24(%ebp) - 14b: ff 75 e0 push -0x20(%ebp) - 14e: 53 push %ebx - 14f: 68 7e 08 00 00 push $0x87e - 154: 6a 01 push $0x1 - 156: e8 e5 03 00 00 call 540 -} - 15b: 83 c4 20 add $0x20,%esp - 15e: 8d 65 f4 lea -0xc(%ebp),%esp - 161: 5b pop %ebx - 162: 5e pop %esi - 163: 5f pop %edi - 164: 5d pop %ebp - 165: c3 ret - printf(1, "wc: read error\n"); - 166: 50 push %eax - 167: 50 push %eax - 168: 68 6e 08 00 00 push $0x86e - 16d: 6a 01 push $0x1 - 16f: e8 cc 03 00 00 call 540 - exit(); - 174: e8 5a 02 00 00 call 3d3 - 179: 66 90 xchg %ax,%ax - 17b: 66 90 xchg %ax,%ax - 17d: 66 90 xchg %ax,%ax - 17f: 90 nop - -00000180 : -#include "stat.h" -#include "fcntl.h" -#include "user.h" -#include "x86.h" - -char*strcpy(char *s, const char *t) { - 180: 55 push %ebp - char *os; - - os = s; - while ((*s++ = *t++) != 0) { - 181: 31 c0 xor %eax,%eax -char*strcpy(char *s, const char *t) { - 183: 89 e5 mov %esp,%ebp - 185: 53 push %ebx - 186: 8b 4d 08 mov 0x8(%ebp),%ecx - 189: 8b 5d 0c mov 0xc(%ebp),%ebx - 18c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - while ((*s++ = *t++) != 0) { - 190: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 194: 88 14 01 mov %dl,(%ecx,%eax,1) - 197: 83 c0 01 add $0x1,%eax - 19a: 84 d2 test %dl,%dl - 19c: 75 f2 jne 190 - ; - } - return os; -} - 19e: 8b 5d fc mov -0x4(%ebp),%ebx - 1a1: 89 c8 mov %ecx,%eax - 1a3: c9 leave - 1a4: c3 ret - 1a5: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 1ac: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -000001b0 : - -int strcmp(const char *p, const char *q) { - 1b0: 55 push %ebp - 1b1: 89 e5 mov %esp,%ebp - 1b3: 53 push %ebx - 1b4: 8b 55 08 mov 0x8(%ebp),%edx - 1b7: 8b 4d 0c mov 0xc(%ebp),%ecx - while (*p && *p == *q) { - 1ba: 0f b6 02 movzbl (%edx),%eax - 1bd: 84 c0 test %al,%al - 1bf: 75 17 jne 1d8 - 1c1: eb 3a jmp 1fd - 1c3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 1c7: 90 nop - 1c8: 0f b6 42 01 movzbl 0x1(%edx),%eax - p++, q++; - 1cc: 83 c2 01 add $0x1,%edx - 1cf: 8d 59 01 lea 0x1(%ecx),%ebx - while (*p && *p == *q) { - 1d2: 84 c0 test %al,%al - 1d4: 74 1a je 1f0 - p++, q++; - 1d6: 89 d9 mov %ebx,%ecx - while (*p && *p == *q) { - 1d8: 0f b6 19 movzbl (%ecx),%ebx - 1db: 38 c3 cmp %al,%bl - 1dd: 74 e9 je 1c8 - } - return (uchar) * p - (uchar) * q; - 1df: 29 d8 sub %ebx,%eax -} - 1e1: 8b 5d fc mov -0x4(%ebp),%ebx - 1e4: c9 leave - 1e5: c3 ret - 1e6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 1ed: 8d 76 00 lea 0x0(%esi),%esi - return (uchar) * p - (uchar) * q; - 1f0: 0f b6 59 01 movzbl 0x1(%ecx),%ebx - 1f4: 31 c0 xor %eax,%eax - 1f6: 29 d8 sub %ebx,%eax -} - 1f8: 8b 5d fc mov -0x4(%ebp),%ebx - 1fb: c9 leave - 1fc: c3 ret - return (uchar) * p - (uchar) * q; - 1fd: 0f b6 19 movzbl (%ecx),%ebx - 200: 31 c0 xor %eax,%eax - 202: eb db jmp 1df - 204: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 20b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 20f: 90 nop - -00000210 : - -uint strlen(const char *s) { - 210: 55 push %ebp - 211: 89 e5 mov %esp,%ebp - 213: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - for (n = 0; s[n]; n++) { - 216: 80 3a 00 cmpb $0x0,(%edx) - 219: 74 15 je 230 - 21b: 31 c0 xor %eax,%eax - 21d: 8d 76 00 lea 0x0(%esi),%esi - 220: 83 c0 01 add $0x1,%eax - 223: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - 227: 89 c1 mov %eax,%ecx - 229: 75 f5 jne 220 - ; - } - return n; -} - 22b: 89 c8 mov %ecx,%eax - 22d: 5d pop %ebp - 22e: c3 ret - 22f: 90 nop - for (n = 0; s[n]; n++) { - 230: 31 c9 xor %ecx,%ecx -} - 232: 5d pop %ebp - 233: 89 c8 mov %ecx,%eax - 235: c3 ret - 236: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 23d: 8d 76 00 lea 0x0(%esi),%esi - -00000240 : - -void* memset(void *dst, int c, uint n) { - 240: 55 push %ebp - 241: 89 e5 mov %esp,%ebp - 243: 57 push %edi - 244: 8b 55 08 mov 0x8(%ebp),%edx - "d" (port), "0" (addr), "1" (cnt) : - "cc"); -} - -static inline void stosb(void *addr, int data, int cnt) { - asm volatile ("cld; rep stosb" : - 247: 8b 4d 10 mov 0x10(%ebp),%ecx - 24a: 8b 45 0c mov 0xc(%ebp),%eax - 24d: 89 d7 mov %edx,%edi - 24f: fc cld - 250: f3 aa rep stos %al,%es:(%edi) - stosb(dst, c, n); - return dst; -} - 252: 8b 7d fc mov -0x4(%ebp),%edi - 255: 89 d0 mov %edx,%eax - 257: c9 leave - 258: c3 ret - 259: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -00000260 : - -char* strchr(const char *s, char c) { - 260: 55 push %ebp - 261: 89 e5 mov %esp,%ebp - 263: 8b 45 08 mov 0x8(%ebp),%eax - 266: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx - for (; *s; s++) { - 26a: 0f b6 10 movzbl (%eax),%edx - 26d: 84 d2 test %dl,%dl - 26f: 75 12 jne 283 - 271: eb 1d jmp 290 - 273: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 277: 90 nop - 278: 0f b6 50 01 movzbl 0x1(%eax),%edx - 27c: 83 c0 01 add $0x1,%eax - 27f: 84 d2 test %dl,%dl - 281: 74 0d je 290 - if (*s == c) { - 283: 38 d1 cmp %dl,%cl - 285: 75 f1 jne 278 - return (char*)s; - } - } - return 0; -} - 287: 5d pop %ebp - 288: c3 ret - 289: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - return 0; - 290: 31 c0 xor %eax,%eax -} - 292: 5d pop %ebp - 293: c3 ret - 294: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 29b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 29f: 90 nop - -000002a0 : - -char* gets(char *buf, int max) { - 2a0: 55 push %ebp - 2a1: 89 e5 mov %esp,%ebp - 2a3: 57 push %edi - 2a4: 56 push %esi - int i, cc; - char c; - - for (i = 0; i + 1 < max;) { - cc = read(0, &c, 1); - 2a5: 8d 7d e7 lea -0x19(%ebp),%edi -char* gets(char *buf, int max) { - 2a8: 53 push %ebx - for (i = 0; i + 1 < max;) { - 2a9: 31 db xor %ebx,%ebx -char* gets(char *buf, int max) { - 2ab: 83 ec 1c sub $0x1c,%esp - for (i = 0; i + 1 < max;) { - 2ae: eb 27 jmp 2d7 - cc = read(0, &c, 1); - 2b0: 83 ec 04 sub $0x4,%esp - 2b3: 6a 01 push $0x1 - 2b5: 57 push %edi - 2b6: 6a 00 push $0x0 - 2b8: e8 2e 01 00 00 call 3eb - if (cc < 1) { - 2bd: 83 c4 10 add $0x10,%esp - 2c0: 85 c0 test %eax,%eax - 2c2: 7e 1d jle 2e1 - break; - } - buf[i++] = c; - 2c4: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 2c8: 8b 55 08 mov 0x8(%ebp),%edx - 2cb: 88 44 1a ff mov %al,-0x1(%edx,%ebx,1) - if (c == '\n' || c == '\r') { - 2cf: 3c 0a cmp $0xa,%al - 2d1: 74 1d je 2f0 - 2d3: 3c 0d cmp $0xd,%al - 2d5: 74 19 je 2f0 - for (i = 0; i + 1 < max;) { - 2d7: 89 de mov %ebx,%esi - 2d9: 83 c3 01 add $0x1,%ebx - 2dc: 3b 5d 0c cmp 0xc(%ebp),%ebx - 2df: 7c cf jl 2b0 - break; - } - } - buf[i] = '\0'; - 2e1: 8b 45 08 mov 0x8(%ebp),%eax - 2e4: c6 04 30 00 movb $0x0,(%eax,%esi,1) - return buf; -} - 2e8: 8d 65 f4 lea -0xc(%ebp),%esp - 2eb: 5b pop %ebx - 2ec: 5e pop %esi - 2ed: 5f pop %edi - 2ee: 5d pop %ebp - 2ef: c3 ret - buf[i] = '\0'; - 2f0: 8b 45 08 mov 0x8(%ebp),%eax - 2f3: 89 de mov %ebx,%esi - 2f5: c6 04 30 00 movb $0x0,(%eax,%esi,1) -} - 2f9: 8d 65 f4 lea -0xc(%ebp),%esp - 2fc: 5b pop %ebx - 2fd: 5e pop %esi - 2fe: 5f pop %edi - 2ff: 5d pop %ebp - 300: c3 ret - 301: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 308: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 30f: 90 nop - -00000310 : - -int stat(const char *n, struct stat *st) { - 310: 55 push %ebp - 311: 89 e5 mov %esp,%ebp - 313: 56 push %esi - 314: 53 push %ebx - int fd; - int r; - - fd = open(n, O_RDONLY); - 315: 83 ec 08 sub $0x8,%esp - 318: 6a 00 push $0x0 - 31a: ff 75 08 push 0x8(%ebp) - 31d: e8 19 01 00 00 call 43b - if (fd < 0) { - 322: 83 c4 10 add $0x10,%esp - 325: 85 c0 test %eax,%eax - 327: 78 27 js 350 - return -1; - } - r = fstat(fd, st); - 329: 83 ec 08 sub $0x8,%esp - 32c: ff 75 0c push 0xc(%ebp) - 32f: 89 c3 mov %eax,%ebx - 331: 50 push %eax - 332: e8 cc 00 00 00 call 403 - close(fd); - 337: 89 1c 24 mov %ebx,(%esp) - r = fstat(fd, st); - 33a: 89 c6 mov %eax,%esi - close(fd); - 33c: e8 2a 01 00 00 call 46b - return r; - 341: 83 c4 10 add $0x10,%esp -} - 344: 8d 65 f8 lea -0x8(%ebp),%esp - 347: 89 f0 mov %esi,%eax - 349: 5b pop %ebx - 34a: 5e pop %esi - 34b: 5d pop %ebp - 34c: c3 ret - 34d: 8d 76 00 lea 0x0(%esi),%esi - return -1; - 350: be ff ff ff ff mov $0xffffffff,%esi - 355: eb ed jmp 344 - 357: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 35e: 66 90 xchg %ax,%ax - -00000360 : - -int atoi(const char *s) { - 360: 55 push %ebp - 361: 89 e5 mov %esp,%ebp - 363: 53 push %ebx - 364: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - n = 0; - while ('0' <= *s && *s <= '9') { - 367: 0f be 02 movsbl (%edx),%eax - 36a: 8d 48 d0 lea -0x30(%eax),%ecx - 36d: 80 f9 09 cmp $0x9,%cl - n = 0; - 370: b9 00 00 00 00 mov $0x0,%ecx - while ('0' <= *s && *s <= '9') { - 375: 77 1e ja 395 - 377: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 37e: 66 90 xchg %ax,%ax - n = n * 10 + *s++ - '0'; - 380: 83 c2 01 add $0x1,%edx - 383: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 386: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx - while ('0' <= *s && *s <= '9') { - 38a: 0f be 02 movsbl (%edx),%eax - 38d: 8d 58 d0 lea -0x30(%eax),%ebx - 390: 80 fb 09 cmp $0x9,%bl - 393: 76 eb jbe 380 - } - return n; -} - 395: 8b 5d fc mov -0x4(%ebp),%ebx - 398: 89 c8 mov %ecx,%eax - 39a: c9 leave - 39b: c3 ret - 39c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -000003a0 : - -void* memmove(void *vdst, const void *vsrc, int n) { - 3a0: 55 push %ebp - 3a1: 89 e5 mov %esp,%ebp - 3a3: 57 push %edi - 3a4: 8b 45 10 mov 0x10(%ebp),%eax - 3a7: 8b 55 08 mov 0x8(%ebp),%edx - 3aa: 56 push %esi - 3ab: 8b 75 0c mov 0xc(%ebp),%esi - char *dst; - const char *src; - - dst = vdst; - src = vsrc; - while (n-- > 0) { - 3ae: 85 c0 test %eax,%eax - 3b0: 7e 13 jle 3c5 - 3b2: 01 d0 add %edx,%eax - dst = vdst; - 3b4: 89 d7 mov %edx,%edi - 3b6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 3bd: 8d 76 00 lea 0x0(%esi),%esi - *dst++ = *src++; - 3c0: a4 movsb %ds:(%esi),%es:(%edi) - while (n-- > 0) { - 3c1: 39 f8 cmp %edi,%eax - 3c3: 75 fb jne 3c0 - } - return vdst; -} - 3c5: 5e pop %esi - 3c6: 89 d0 mov %edx,%eax - 3c8: 5f pop %edi - 3c9: 5d pop %ebp - 3ca: c3 ret - -000003cb : -name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 3cb: b8 01 00 00 00 mov $0x1,%eax - 3d0: cd 40 int $0x40 - 3d2: c3 ret - -000003d3 : -SYSCALL(exit) - 3d3: b8 02 00 00 00 mov $0x2,%eax - 3d8: cd 40 int $0x40 - 3da: c3 ret - -000003db : -SYSCALL(wait) - 3db: b8 03 00 00 00 mov $0x3,%eax - 3e0: cd 40 int $0x40 - 3e2: c3 ret - -000003e3 : -SYSCALL(pipe) - 3e3: b8 04 00 00 00 mov $0x4,%eax - 3e8: cd 40 int $0x40 - 3ea: c3 ret - -000003eb : -SYSCALL(read) - 3eb: b8 05 00 00 00 mov $0x5,%eax - 3f0: cd 40 int $0x40 - 3f2: c3 ret - -000003f3 : -SYSCALL(kill) - 3f3: b8 06 00 00 00 mov $0x6,%eax - 3f8: cd 40 int $0x40 - 3fa: c3 ret - -000003fb : -SYSCALL(exec) - 3fb: b8 07 00 00 00 mov $0x7,%eax - 400: cd 40 int $0x40 - 402: c3 ret - -00000403 : -SYSCALL(fstat) - 403: b8 08 00 00 00 mov $0x8,%eax - 408: cd 40 int $0x40 - 40a: c3 ret - -0000040b : -SYSCALL(chdir) - 40b: b8 09 00 00 00 mov $0x9,%eax - 410: cd 40 int $0x40 - 412: c3 ret - -00000413 : -SYSCALL(dup) - 413: b8 0a 00 00 00 mov $0xa,%eax - 418: cd 40 int $0x40 - 41a: c3 ret - -0000041b : -SYSCALL(getpid) - 41b: b8 0b 00 00 00 mov $0xb,%eax - 420: cd 40 int $0x40 - 422: c3 ret - -00000423 : -SYSCALL(sbrk) - 423: b8 0c 00 00 00 mov $0xc,%eax - 428: cd 40 int $0x40 - 42a: c3 ret - -0000042b : -SYSCALL(sleep) - 42b: b8 0d 00 00 00 mov $0xd,%eax - 430: cd 40 int $0x40 - 432: c3 ret - -00000433 : -SYSCALL(uptime) - 433: b8 0e 00 00 00 mov $0xe,%eax - 438: cd 40 int $0x40 - 43a: c3 ret - -0000043b : -SYSCALL(open) - 43b: b8 0f 00 00 00 mov $0xf,%eax - 440: cd 40 int $0x40 - 442: c3 ret - -00000443 : -SYSCALL(write) - 443: b8 10 00 00 00 mov $0x10,%eax - 448: cd 40 int $0x40 - 44a: c3 ret - -0000044b : -SYSCALL(mknod) - 44b: b8 11 00 00 00 mov $0x11,%eax - 450: cd 40 int $0x40 - 452: c3 ret - -00000453 : -SYSCALL(unlink) - 453: b8 12 00 00 00 mov $0x12,%eax - 458: cd 40 int $0x40 - 45a: c3 ret - -0000045b : -SYSCALL(link) - 45b: b8 13 00 00 00 mov $0x13,%eax - 460: cd 40 int $0x40 - 462: c3 ret - -00000463 : -SYSCALL(mkdir) - 463: b8 14 00 00 00 mov $0x14,%eax - 468: cd 40 int $0x40 - 46a: c3 ret - -0000046b : -SYSCALL(close) - 46b: b8 15 00 00 00 mov $0x15,%eax - 470: cd 40 int $0x40 - 472: c3 ret - -00000473 : -SYSCALL(getch) - 473: b8 16 00 00 00 mov $0x16,%eax - 478: cd 40 int $0x40 - 47a: c3 ret - -0000047b : -SYSCALL(greeting) - 47b: b8 17 00 00 00 mov $0x17,%eax - 480: cd 40 int $0x40 - 482: c3 ret - -00000483 : -SYSCALL(shutdown) - 483: b8 18 00 00 00 mov $0x18,%eax - 488: cd 40 int $0x40 - 48a: c3 ret - 48b: 66 90 xchg %ax,%ax - 48d: 66 90 xchg %ax,%ax - 48f: 90 nop - -00000490 : - -static void putc(int fd, char c) { - write(fd, &c, 1); -} - -static void printint(int fd, int xx, int base, int sgn) { - 490: 55 push %ebp - 491: 89 e5 mov %esp,%ebp - 493: 57 push %edi - 494: 56 push %esi - 495: 53 push %ebx - 496: 83 ec 3c sub $0x3c,%esp - 499: 89 4d c4 mov %ecx,-0x3c(%ebp) - uint x; - - neg = 0; - if (sgn && xx < 0) { - neg = 1; - x = -xx; - 49c: 89 d1 mov %edx,%ecx -static void printint(int fd, int xx, int base, int sgn) { - 49e: 89 45 b8 mov %eax,-0x48(%ebp) - if (sgn && xx < 0) { - 4a1: 85 d2 test %edx,%edx - 4a3: 0f 89 7f 00 00 00 jns 528 - 4a9: f6 45 08 01 testb $0x1,0x8(%ebp) - 4ad: 74 79 je 528 - neg = 1; - 4af: c7 45 bc 01 00 00 00 movl $0x1,-0x44(%ebp) - x = -xx; - 4b6: f7 d9 neg %ecx - } - else { - x = xx; - } - - i = 0; - 4b8: 31 db xor %ebx,%ebx - 4ba: 8d 75 d7 lea -0x29(%ebp),%esi - 4bd: 8d 76 00 lea 0x0(%esi),%esi - do { - buf[i++] = digits[x % base]; - 4c0: 89 c8 mov %ecx,%eax - 4c2: 31 d2 xor %edx,%edx - 4c4: 89 cf mov %ecx,%edi - 4c6: f7 75 c4 divl -0x3c(%ebp) - 4c9: 0f b6 92 00 09 00 00 movzbl 0x900(%edx),%edx - 4d0: 89 45 c0 mov %eax,-0x40(%ebp) - 4d3: 89 d8 mov %ebx,%eax - 4d5: 8d 5b 01 lea 0x1(%ebx),%ebx - } - while ((x /= base) != 0); - 4d8: 8b 4d c0 mov -0x40(%ebp),%ecx - buf[i++] = digits[x % base]; - 4db: 88 14 1e mov %dl,(%esi,%ebx,1) - while ((x /= base) != 0); - 4de: 39 7d c4 cmp %edi,-0x3c(%ebp) - 4e1: 76 dd jbe 4c0 - if (neg) { - 4e3: 8b 4d bc mov -0x44(%ebp),%ecx - 4e6: 85 c9 test %ecx,%ecx - 4e8: 74 0c je 4f6 - buf[i++] = '-'; - 4ea: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) - buf[i++] = digits[x % base]; - 4ef: 89 d8 mov %ebx,%eax - buf[i++] = '-'; - 4f1: ba 2d 00 00 00 mov $0x2d,%edx - } - - while (--i >= 0) { - 4f6: 8b 7d b8 mov -0x48(%ebp),%edi - 4f9: 8d 5c 05 d7 lea -0x29(%ebp,%eax,1),%ebx - 4fd: eb 07 jmp 506 - 4ff: 90 nop - putc(fd, buf[i]); - 500: 0f b6 13 movzbl (%ebx),%edx - 503: 83 eb 01 sub $0x1,%ebx - write(fd, &c, 1); - 506: 83 ec 04 sub $0x4,%esp - 509: 88 55 d7 mov %dl,-0x29(%ebp) - 50c: 6a 01 push $0x1 - 50e: 56 push %esi - 50f: 57 push %edi - 510: e8 2e ff ff ff call 443 - while (--i >= 0) { - 515: 83 c4 10 add $0x10,%esp - 518: 39 de cmp %ebx,%esi - 51a: 75 e4 jne 500 - } -} - 51c: 8d 65 f4 lea -0xc(%ebp),%esp - 51f: 5b pop %ebx - 520: 5e pop %esi - 521: 5f pop %edi - 522: 5d pop %ebp - 523: c3 ret - 524: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - neg = 0; - 528: c7 45 bc 00 00 00 00 movl $0x0,-0x44(%ebp) - 52f: eb 87 jmp 4b8 - 531: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 538: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 53f: 90 nop - -00000540 : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void printf(int fd, const char *fmt, ...) { - 540: 55 push %ebp - 541: 89 e5 mov %esp,%ebp - 543: 57 push %edi - 544: 56 push %esi - 545: 53 push %ebx - 546: 83 ec 2c sub $0x2c,%esp - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for (i = 0; fmt[i]; i++) { - 549: 8b 5d 0c mov 0xc(%ebp),%ebx -void printf(int fd, const char *fmt, ...) { - 54c: 8b 75 08 mov 0x8(%ebp),%esi - for (i = 0; fmt[i]; i++) { - 54f: 0f b6 13 movzbl (%ebx),%edx - 552: 84 d2 test %dl,%dl - 554: 74 6a je 5c0 - ap = (uint*)(void*)&fmt + 1; - 556: 8d 45 10 lea 0x10(%ebp),%eax - 559: 83 c3 01 add $0x1,%ebx - write(fd, &c, 1); - 55c: 8d 7d e7 lea -0x19(%ebp),%edi - state = 0; - 55f: 31 c9 xor %ecx,%ecx - ap = (uint*)(void*)&fmt + 1; - 561: 89 45 d0 mov %eax,-0x30(%ebp) - 564: eb 36 jmp 59c - 566: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 56d: 8d 76 00 lea 0x0(%esi),%esi - 570: 89 4d d4 mov %ecx,-0x2c(%ebp) - c = fmt[i] & 0xff; - if (state == 0) { - if (c == '%') { - state = '%'; - 573: b9 25 00 00 00 mov $0x25,%ecx - if (c == '%') { - 578: 83 f8 25 cmp $0x25,%eax - 57b: 74 15 je 592 - write(fd, &c, 1); - 57d: 83 ec 04 sub $0x4,%esp - 580: 88 55 e7 mov %dl,-0x19(%ebp) - 583: 6a 01 push $0x1 - 585: 57 push %edi - 586: 56 push %esi - 587: e8 b7 fe ff ff call 443 - 58c: 8b 4d d4 mov -0x2c(%ebp),%ecx - } - else { - putc(fd, c); - 58f: 83 c4 10 add $0x10,%esp - for (i = 0; fmt[i]; i++) { - 592: 0f b6 13 movzbl (%ebx),%edx - 595: 83 c3 01 add $0x1,%ebx - 598: 84 d2 test %dl,%dl - 59a: 74 24 je 5c0 - c = fmt[i] & 0xff; - 59c: 0f b6 c2 movzbl %dl,%eax - if (state == 0) { - 59f: 85 c9 test %ecx,%ecx - 5a1: 74 cd je 570 - } - } - else if (state == '%') { - 5a3: 83 f9 25 cmp $0x25,%ecx - 5a6: 75 ea jne 592 - if (c == 'd') { - 5a8: 83 f8 25 cmp $0x25,%eax - 5ab: 0f 84 07 01 00 00 je 6b8 - 5b1: 83 e8 63 sub $0x63,%eax - 5b4: 83 f8 15 cmp $0x15,%eax - 5b7: 77 17 ja 5d0 - 5b9: ff 24 85 a8 08 00 00 jmp *0x8a8(,%eax,4) - putc(fd, c); - } - state = 0; - } - } -} - 5c0: 8d 65 f4 lea -0xc(%ebp),%esp - 5c3: 5b pop %ebx - 5c4: 5e pop %esi - 5c5: 5f pop %edi - 5c6: 5d pop %ebp - 5c7: c3 ret - 5c8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 5cf: 90 nop - write(fd, &c, 1); - 5d0: 83 ec 04 sub $0x4,%esp - 5d3: 88 55 d4 mov %dl,-0x2c(%ebp) - 5d6: 6a 01 push $0x1 - 5d8: 57 push %edi - 5d9: 56 push %esi - 5da: c6 45 e7 25 movb $0x25,-0x19(%ebp) - 5de: e8 60 fe ff ff call 443 - putc(fd, c); - 5e3: 0f b6 55 d4 movzbl -0x2c(%ebp),%edx - write(fd, &c, 1); - 5e7: 83 c4 0c add $0xc,%esp - 5ea: 88 55 e7 mov %dl,-0x19(%ebp) - 5ed: 6a 01 push $0x1 - 5ef: 57 push %edi - 5f0: 56 push %esi - 5f1: e8 4d fe ff ff call 443 - putc(fd, c); - 5f6: 83 c4 10 add $0x10,%esp - state = 0; - 5f9: 31 c9 xor %ecx,%ecx - 5fb: eb 95 jmp 592 - 5fd: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 16, 0); - 600: 83 ec 0c sub $0xc,%esp - 603: b9 10 00 00 00 mov $0x10,%ecx - 608: 6a 00 push $0x0 - 60a: 8b 45 d0 mov -0x30(%ebp),%eax - 60d: 8b 10 mov (%eax),%edx - 60f: 89 f0 mov %esi,%eax - 611: e8 7a fe ff ff call 490 - ap++; - 616: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 61a: 83 c4 10 add $0x10,%esp - state = 0; - 61d: 31 c9 xor %ecx,%ecx - 61f: e9 6e ff ff ff jmp 592 - 624: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - s = (char*)*ap; - 628: 8b 45 d0 mov -0x30(%ebp),%eax - 62b: 8b 10 mov (%eax),%edx - ap++; - 62d: 83 c0 04 add $0x4,%eax - 630: 89 45 d0 mov %eax,-0x30(%ebp) - if (s == 0) { - 633: 85 d2 test %edx,%edx - 635: 0f 84 8d 00 00 00 je 6c8 - while (*s != 0) { - 63b: 0f b6 02 movzbl (%edx),%eax - state = 0; - 63e: 31 c9 xor %ecx,%ecx - while (*s != 0) { - 640: 84 c0 test %al,%al - 642: 0f 84 4a ff ff ff je 592 - 648: 89 5d d4 mov %ebx,-0x2c(%ebp) - 64b: 89 d3 mov %edx,%ebx - 64d: 8d 76 00 lea 0x0(%esi),%esi - write(fd, &c, 1); - 650: 83 ec 04 sub $0x4,%esp - s++; - 653: 83 c3 01 add $0x1,%ebx - 656: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 659: 6a 01 push $0x1 - 65b: 57 push %edi - 65c: 56 push %esi - 65d: e8 e1 fd ff ff call 443 - while (*s != 0) { - 662: 0f b6 03 movzbl (%ebx),%eax - 665: 83 c4 10 add $0x10,%esp - 668: 84 c0 test %al,%al - 66a: 75 e4 jne 650 - state = 0; - 66c: 8b 5d d4 mov -0x2c(%ebp),%ebx - 66f: 31 c9 xor %ecx,%ecx - 671: e9 1c ff ff ff jmp 592 - 676: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 67d: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 10, 1); - 680: 83 ec 0c sub $0xc,%esp - 683: b9 0a 00 00 00 mov $0xa,%ecx - 688: 6a 01 push $0x1 - 68a: e9 7b ff ff ff jmp 60a - 68f: 90 nop - putc(fd, *ap); - 690: 8b 45 d0 mov -0x30(%ebp),%eax - write(fd, &c, 1); - 693: 83 ec 04 sub $0x4,%esp - putc(fd, *ap); - 696: 8b 00 mov (%eax),%eax - write(fd, &c, 1); - 698: 6a 01 push $0x1 - 69a: 57 push %edi - 69b: 56 push %esi - putc(fd, *ap); - 69c: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 69f: e8 9f fd ff ff call 443 - ap++; - 6a4: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 6a8: 83 c4 10 add $0x10,%esp - state = 0; - 6ab: 31 c9 xor %ecx,%ecx - 6ad: e9 e0 fe ff ff jmp 592 - 6b2: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - putc(fd, c); - 6b8: 88 55 e7 mov %dl,-0x19(%ebp) - write(fd, &c, 1); - 6bb: 83 ec 04 sub $0x4,%esp - 6be: e9 2a ff ff ff jmp 5ed - 6c3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 6c7: 90 nop - s = "(null)"; - 6c8: ba 9f 08 00 00 mov $0x89f,%edx - while (*s != 0) { - 6cd: 89 5d d4 mov %ebx,-0x2c(%ebp) - 6d0: b8 28 00 00 00 mov $0x28,%eax - 6d5: 89 d3 mov %edx,%ebx - 6d7: e9 74 ff ff ff jmp 650 - 6dc: 66 90 xchg %ax,%ax - 6de: 66 90 xchg %ax,%ax - -000006e0 : -typedef union header Header; - -static Header base; -static Header *freep; - -void free(void *ap) { - 6e0: 55 push %ebp - Header *bp, *p; - - bp = (Header*)ap - 1; - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 6e1: a1 00 0e 00 00 mov 0xe00,%eax -void free(void *ap) { - 6e6: 89 e5 mov %esp,%ebp - 6e8: 57 push %edi - 6e9: 56 push %esi - 6ea: 53 push %ebx - 6eb: 8b 5d 08 mov 0x8(%ebp),%ebx - bp = (Header*)ap - 1; - 6ee: 8d 4b f8 lea -0x8(%ebx),%ecx - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 6f1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 6f8: 89 c2 mov %eax,%edx - 6fa: 8b 00 mov (%eax),%eax - 6fc: 39 ca cmp %ecx,%edx - 6fe: 73 30 jae 730 - 700: 39 c1 cmp %eax,%ecx - 702: 72 04 jb 708 - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 704: 39 c2 cmp %eax,%edx - 706: 72 f0 jb 6f8 - break; - } - } - if (bp + bp->s.size == p->s.ptr) { - 708: 8b 73 fc mov -0x4(%ebx),%esi - 70b: 8d 3c f1 lea (%ecx,%esi,8),%edi - 70e: 39 f8 cmp %edi,%eax - 710: 74 30 je 742 - bp->s.size += p->s.ptr->s.size; - bp->s.ptr = p->s.ptr->s.ptr; - 712: 89 43 f8 mov %eax,-0x8(%ebx) - } - else { - bp->s.ptr = p->s.ptr; - } - if (p + p->s.size == bp) { - 715: 8b 42 04 mov 0x4(%edx),%eax - 718: 8d 34 c2 lea (%edx,%eax,8),%esi - 71b: 39 f1 cmp %esi,%ecx - 71d: 74 3a je 759 - p->s.size += bp->s.size; - p->s.ptr = bp->s.ptr; - 71f: 89 0a mov %ecx,(%edx) - } - else { - p->s.ptr = bp; - } - freep = p; -} - 721: 5b pop %ebx - freep = p; - 722: 89 15 00 0e 00 00 mov %edx,0xe00 -} - 728: 5e pop %esi - 729: 5f pop %edi - 72a: 5d pop %ebp - 72b: c3 ret - 72c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 730: 39 c2 cmp %eax,%edx - 732: 72 c4 jb 6f8 - 734: 39 c1 cmp %eax,%ecx - 736: 73 c0 jae 6f8 - if (bp + bp->s.size == p->s.ptr) { - 738: 8b 73 fc mov -0x4(%ebx),%esi - 73b: 8d 3c f1 lea (%ecx,%esi,8),%edi - 73e: 39 f8 cmp %edi,%eax - 740: 75 d0 jne 712 - bp->s.size += p->s.ptr->s.size; - 742: 03 70 04 add 0x4(%eax),%esi - 745: 89 73 fc mov %esi,-0x4(%ebx) - bp->s.ptr = p->s.ptr->s.ptr; - 748: 8b 02 mov (%edx),%eax - 74a: 8b 00 mov (%eax),%eax - 74c: 89 43 f8 mov %eax,-0x8(%ebx) - if (p + p->s.size == bp) { - 74f: 8b 42 04 mov 0x4(%edx),%eax - 752: 8d 34 c2 lea (%edx,%eax,8),%esi - 755: 39 f1 cmp %esi,%ecx - 757: 75 c6 jne 71f - p->s.size += bp->s.size; - 759: 03 43 fc add -0x4(%ebx),%eax - freep = p; - 75c: 89 15 00 0e 00 00 mov %edx,0xe00 - p->s.size += bp->s.size; - 762: 89 42 04 mov %eax,0x4(%edx) - p->s.ptr = bp->s.ptr; - 765: 8b 4b f8 mov -0x8(%ebx),%ecx - 768: 89 0a mov %ecx,(%edx) -} - 76a: 5b pop %ebx - 76b: 5e pop %esi - 76c: 5f pop %edi - 76d: 5d pop %ebp - 76e: c3 ret - 76f: 90 nop - -00000770 : - hp->s.size = nu; - free((void*)(hp + 1)); - return freep; -} - -void* malloc(uint nbytes) { - 770: 55 push %ebp - 771: 89 e5 mov %esp,%ebp - 773: 57 push %edi - 774: 56 push %esi - 775: 53 push %ebx - 776: 83 ec 1c sub $0x1c,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 779: 8b 45 08 mov 0x8(%ebp),%eax - if ((prevp = freep) == 0) { - 77c: 8b 3d 00 0e 00 00 mov 0xe00,%edi - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 782: 8d 70 07 lea 0x7(%eax),%esi - 785: c1 ee 03 shr $0x3,%esi - 788: 83 c6 01 add $0x1,%esi - if ((prevp = freep) == 0) { - 78b: 85 ff test %edi,%edi - 78d: 0f 84 9d 00 00 00 je 830 - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 793: 8b 17 mov (%edi),%edx - if (p->s.size >= nunits) { - 795: 8b 4a 04 mov 0x4(%edx),%ecx - 798: 39 f1 cmp %esi,%ecx - 79a: 73 6a jae 806 - 79c: bb 00 10 00 00 mov $0x1000,%ebx - 7a1: 39 de cmp %ebx,%esi - 7a3: 0f 43 de cmovae %esi,%ebx - p = sbrk(nu * sizeof(Header)); - 7a6: 8d 04 dd 00 00 00 00 lea 0x0(,%ebx,8),%eax - 7ad: 89 45 e4 mov %eax,-0x1c(%ebp) - 7b0: eb 17 jmp 7c9 - 7b2: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 7b8: 8b 02 mov (%edx),%eax - if (p->s.size >= nunits) { - 7ba: 8b 48 04 mov 0x4(%eax),%ecx - 7bd: 39 f1 cmp %esi,%ecx - 7bf: 73 4f jae 810 - p->s.size = nunits; - } - freep = prevp; - return (void*)(p + 1); - } - if (p == freep) { - 7c1: 8b 3d 00 0e 00 00 mov 0xe00,%edi - 7c7: 89 c2 mov %eax,%edx - 7c9: 39 d7 cmp %edx,%edi - 7cb: 75 eb jne 7b8 - p = sbrk(nu * sizeof(Header)); - 7cd: 83 ec 0c sub $0xc,%esp - 7d0: ff 75 e4 push -0x1c(%ebp) - 7d3: e8 4b fc ff ff call 423 - if (p == (char*)-1) { - 7d8: 83 c4 10 add $0x10,%esp - 7db: 83 f8 ff cmp $0xffffffff,%eax - 7de: 74 1c je 7fc - hp->s.size = nu; - 7e0: 89 58 04 mov %ebx,0x4(%eax) - free((void*)(hp + 1)); - 7e3: 83 ec 0c sub $0xc,%esp - 7e6: 83 c0 08 add $0x8,%eax - 7e9: 50 push %eax - 7ea: e8 f1 fe ff ff call 6e0 - return freep; - 7ef: 8b 15 00 0e 00 00 mov 0xe00,%edx - if ((p = morecore(nunits)) == 0) { - 7f5: 83 c4 10 add $0x10,%esp - 7f8: 85 d2 test %edx,%edx - 7fa: 75 bc jne 7b8 - return 0; - } - } - } -} - 7fc: 8d 65 f4 lea -0xc(%ebp),%esp - return 0; - 7ff: 31 c0 xor %eax,%eax -} - 801: 5b pop %ebx - 802: 5e pop %esi - 803: 5f pop %edi - 804: 5d pop %ebp - 805: c3 ret - if (p->s.size >= nunits) { - 806: 89 d0 mov %edx,%eax - 808: 89 fa mov %edi,%edx - 80a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - if (p->s.size == nunits) { - 810: 39 ce cmp %ecx,%esi - 812: 74 4c je 860 - p->s.size -= nunits; - 814: 29 f1 sub %esi,%ecx - 816: 89 48 04 mov %ecx,0x4(%eax) - p += p->s.size; - 819: 8d 04 c8 lea (%eax,%ecx,8),%eax - p->s.size = nunits; - 81c: 89 70 04 mov %esi,0x4(%eax) - freep = prevp; - 81f: 89 15 00 0e 00 00 mov %edx,0xe00 -} - 825: 8d 65 f4 lea -0xc(%ebp),%esp - return (void*)(p + 1); - 828: 83 c0 08 add $0x8,%eax -} - 82b: 5b pop %ebx - 82c: 5e pop %esi - 82d: 5f pop %edi - 82e: 5d pop %ebp - 82f: c3 ret - base.s.ptr = freep = prevp = &base; - 830: c7 05 00 0e 00 00 04 movl $0xe04,0xe00 - 837: 0e 00 00 - base.s.size = 0; - 83a: bf 04 0e 00 00 mov $0xe04,%edi - base.s.ptr = freep = prevp = &base; - 83f: c7 05 04 0e 00 00 04 movl $0xe04,0xe04 - 846: 0e 00 00 - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 849: 89 fa mov %edi,%edx - base.s.size = 0; - 84b: c7 05 08 0e 00 00 00 movl $0x0,0xe08 - 852: 00 00 00 - if (p->s.size >= nunits) { - 855: e9 42 ff ff ff jmp 79c - 85a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - prevp->s.ptr = p->s.ptr; - 860: 8b 08 mov (%eax),%ecx - 862: 89 0a mov %ecx,(%edx) - 864: eb b9 jmp 81f diff --git a/wc.d b/wc.d deleted file mode 100644 index 6adc498..0000000 --- a/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/wc.o b/wc.o deleted file mode 100644 index 006f57abf3f4af09613b27d90911a88aa0baf3ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5500 zcma)Adu&_P9X`kR9>fwl|KB!o5;b)j#dP#nieOcOiU_a<$5 z6vZlCXfr{DrfGuppN&b=Hl}F;#u(~=wy+7Qn>J0=*wjCYHi>E*3{7mS$iDB~a}tMX z+KzJ0_j{k;dEfX*&)s)QDTOUkIAV?yqNO3wtkZD4Xc5<1Q;oZ(KG?H+NBi$ems`&D zT%zb)&-(#fB$O_@!y+WaFqs)Y@~0~^Gc%>P>!;2hJ^e&~`^<+;(=StHoJ;5AhR?jN zx;Ktd*#2%uRo!zxD_xHC$zSLQ*8S*d|Gne8E*<@q{~laQJr^YcFz*eY`EO2pD~0sm z|FASYF8o$_&-m3d{`)ij#T~;}!{%XW!o;UDpWOf8{s-Rb>l+TwDYO(@ z8{>scY9O8|6!L{Cv0@-@{)$yXYtyM*F7L(jW0_oh1%;+e-`(n#F8y`pkt=$p-e8V9 z?kQbfcw8R8*PZIQRC>!TeJY>WJ^iDVbV0Tcib?n)M^r@xNZeSZm6OO zDZ4VVN^@#GxJp-LbDpTW424LTnC`=B-!U*g=MS?ja*)>WVst~aHx^p(O4kDHyH*j6-WGLgu~U-r_GYJc%(h3iCgsmlo1u+-0w5NVJrYGYAn$+b&%EohMS2wG`^MzC$9?2R!>bSaWp zt+1*qbv89Rn`n^C?aiTu*o#S_6VO8Te@r%aVDHqK#Ed-1svZua0jWhXgYyk~V-2z~ zylLTKoqkLwZ8~B%P1-uL(S)Tl5cR=L}4 zy~!Cra>~7Fx8B~=o4(F4qI*W3l_4+Uo|PAD5A^50aYZ*mcW-kh;J@wuAUFdAU2Fup zB7%-1Y4nqRQi6O^PDwB)os2O&i$rSS0>pmly z=U$WNK9lF(|K`*cdUmJ#g7(>IeD)fjoxICJA@+kZud7LPvCo~9&&W{wDbwXX8ah-W zsp_|?h2K<*M92-n!BY!Jb*P%HG1UaaMqf3ItHv#=Cfuey>%XBI!xQQ%=o-R)Of3pK z<1lk7JJiChnnMh!YQrU^!cNVkiojBZ*C-i|l)QLSRfb!_GW=Uy8&ay3CTnLIjABh{ zWw`Dxq!xJzW~WsQuGO!pScj^HpH6X`YSFku#ezh&xKqo90-bYsGEgGq)2hZfychj_ zpemh1dxKv2$O}JL%ns!;193iuMX!(^E{M@oHYc*ViF{!|w3kSYWK+d#ZYU7uN3&jHuz=nZV|nD3DOlrF`aoi=koPiaFK>in*$lL) z;-MVU&*$=fG2!PXvblkTm+BwM6rn77^h=MVio@1Bo6m{#NWPd6slrfN@WV(Hhw}w5 zK5tUS3g~{2Hsd05FpF8zHk_}CbTTbgk7fq4snx~7{W}g7`wID?)v01JQ!I{Va^9N% zq16F&;}6E{4HJiJ}V$0G9D zYS;ZTPRJJ^YtfqEbrqepk)xrm8r6NwdCD!R(Cbxib)M}!*LemGol(&S+q;duKB0G1 zOVL}eLcZv#uL${%)rUj=!OeA!KNhZcLO$Qc&les}TU_zcjHQY5zr@MoiYY5jaLvq0 z9DygTtTjAg~a%;}2_GTuy$xK=8y9+yW0uFV?D z1M9WToPazY%-KRdKFbC6D-6&1Y(#JT?6igUyxMFbA8aLj74dsB*onbeG`ml4Jbf

      UyBBpCQu{!uJ z4q>AW8GRnexZ~sz=TRe{H1a9(@cW99b0sAvoAW8LjEzJrAHO__*AQW}jEF_hSzqCvgC!2i?m ziKAGV?@*+|YlRjbw8f8yJaLlH&cE zPv=MZ%7`TXXU`<@Bq#JU7j%^w-ml+J4F3NsOJIg&nY|k~fxduh3y!-k{N)5kRcz9n z5TD|_bDo<~>Cfrrx#t~79@m8~&1A}oWp9Lx_SP;=1=h}%xFPhN0D6t#X~+A@7P_%^ z8|2<%c?iOj0jXO%j@!YNk7ElqogD{#?KpOUW?Wl726L<|KdZY32IcX-hIr?p4x8uMOneF#jnGZNtj|o z^DLLgdlm6`E;$aKOFNFQgSI{(#Sam${8u%r`zmzh@y;V2*MRXr&c^#bXzK$~yoY$a zZ*8&UcOWQ_cM(C_AY(i{VYBgG15F?5Sk}R*%LV~YlJ$&1Yd4PjaXVzTSUbLvq^;dM zu;YDXi?#a$1f*^G1a{@c>hzlgh22WD<4+y7aGqKIj9Nb4`ue%~<9%$`gK=#vkYWsr o-v=SzSR7Gp2Ui`-o;9%IG?e_&!xoz#=d#=`4(BV@2x#s84H%#EIRF3v diff --git a/wc.sym b/wc.sym deleted file mode 100644 index 11f6258..0000000 --- a/wc.sym +++ /dev/null @@ -1,50 +0,0 @@ -00000000 wc.c -00000000 ulib.c -00000000 printf.c -00000490 printint -00000900 digits.0 -00000000 umalloc.c -00000e00 freep -00000e04 base -00000180 strcpy -00000540 printf -0000047b greeting -000003a0 memmove -0000044b mknod -000002a0 gets -0000041b getpid -00000770 malloc -0000042b sleep -000003e3 pipe -00000473 getch -00000443 write -00000403 fstat -000003f3 kill -0000040b chdir -000003fb exec -000003db wait -000003eb read -00000453 unlink -000000a0 wc -000003cb fork -00000423 sbrk -00000433 uptime -00000be8 __bss_start -00000240 memset -00000000 main -000001b0 strcmp -00000483 shutdown -00000413 dup -00000c00 buf -00000310 stat -00000be8 _edata -00000e0c _end -0000045b link -000003d3 exit -00000360 atoi -00000210 strlen -0000043b open -00000260 strchr -00000463 mkdir -0000046b close -000006e0 free diff --git a/zombie.asm b/zombie.asm deleted file mode 100644 index 3b916c8..0000000 --- a/zombie.asm +++ /dev/null @@ -1,1145 +0,0 @@ - -_zombie: file format elf32-i386 - - -Disassembly of section .text: - -00000000

      : - -#include "types.h" -#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 push -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 65 02 00 00 call 27b - 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 b7 02 00 00 call 2db - 24: 83 c4 10 add $0x10,%esp - } - exit(); - 27: e8 57 02 00 00 call 283 - 2c: 66 90 xchg %ax,%ax - 2e: 66 90 xchg %ax,%ax - -00000030 : -#include "stat.h" -#include "fcntl.h" -#include "user.h" -#include "x86.h" - -char*strcpy(char *s, const char *t) { - 30: 55 push %ebp - char *os; - - os = s; - while ((*s++ = *t++) != 0) { - 31: 31 c0 xor %eax,%eax -char*strcpy(char *s, const char *t) { - 33: 89 e5 mov %esp,%ebp - 35: 53 push %ebx - 36: 8b 4d 08 mov 0x8(%ebp),%ecx - 39: 8b 5d 0c mov 0xc(%ebp),%ebx - 3c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - while ((*s++ = *t++) != 0) { - 40: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 44: 88 14 01 mov %dl,(%ecx,%eax,1) - 47: 83 c0 01 add $0x1,%eax - 4a: 84 d2 test %dl,%dl - 4c: 75 f2 jne 40 - ; - } - return os; -} - 4e: 8b 5d fc mov -0x4(%ebp),%ebx - 51: 89 c8 mov %ecx,%eax - 53: c9 leave - 54: c3 ret - 55: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 5c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000060 : - -int strcmp(const char *p, const char *q) { - 60: 55 push %ebp - 61: 89 e5 mov %esp,%ebp - 63: 53 push %ebx - 64: 8b 55 08 mov 0x8(%ebp),%edx - 67: 8b 4d 0c mov 0xc(%ebp),%ecx - while (*p && *p == *q) { - 6a: 0f b6 02 movzbl (%edx),%eax - 6d: 84 c0 test %al,%al - 6f: 75 17 jne 88 - 71: eb 3a jmp ad - 73: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 77: 90 nop - 78: 0f b6 42 01 movzbl 0x1(%edx),%eax - p++, q++; - 7c: 83 c2 01 add $0x1,%edx - 7f: 8d 59 01 lea 0x1(%ecx),%ebx - while (*p && *p == *q) { - 82: 84 c0 test %al,%al - 84: 74 1a je a0 - p++, q++; - 86: 89 d9 mov %ebx,%ecx - while (*p && *p == *q) { - 88: 0f b6 19 movzbl (%ecx),%ebx - 8b: 38 c3 cmp %al,%bl - 8d: 74 e9 je 78 - } - return (uchar) * p - (uchar) * q; - 8f: 29 d8 sub %ebx,%eax -} - 91: 8b 5d fc mov -0x4(%ebp),%ebx - 94: c9 leave - 95: c3 ret - 96: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 9d: 8d 76 00 lea 0x0(%esi),%esi - return (uchar) * p - (uchar) * q; - a0: 0f b6 59 01 movzbl 0x1(%ecx),%ebx - a4: 31 c0 xor %eax,%eax - a6: 29 d8 sub %ebx,%eax -} - a8: 8b 5d fc mov -0x4(%ebp),%ebx - ab: c9 leave - ac: c3 ret - return (uchar) * p - (uchar) * q; - ad: 0f b6 19 movzbl (%ecx),%ebx - b0: 31 c0 xor %eax,%eax - b2: eb db jmp 8f - b4: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - bb: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - bf: 90 nop - -000000c0 : - -uint strlen(const char *s) { - c0: 55 push %ebp - c1: 89 e5 mov %esp,%ebp - c3: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - for (n = 0; s[n]; n++) { - c6: 80 3a 00 cmpb $0x0,(%edx) - c9: 74 15 je e0 - cb: 31 c0 xor %eax,%eax - cd: 8d 76 00 lea 0x0(%esi),%esi - d0: 83 c0 01 add $0x1,%eax - d3: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - d7: 89 c1 mov %eax,%ecx - d9: 75 f5 jne d0 - ; - } - return n; -} - db: 89 c8 mov %ecx,%eax - dd: 5d pop %ebp - de: c3 ret - df: 90 nop - for (n = 0; s[n]; n++) { - e0: 31 c9 xor %ecx,%ecx -} - e2: 5d pop %ebp - e3: 89 c8 mov %ecx,%eax - e5: c3 ret - e6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - ed: 8d 76 00 lea 0x0(%esi),%esi - -000000f0 : - -void* memset(void *dst, int c, uint n) { - f0: 55 push %ebp - f1: 89 e5 mov %esp,%ebp - f3: 57 push %edi - f4: 8b 55 08 mov 0x8(%ebp),%edx - "d" (port), "0" (addr), "1" (cnt) : - "cc"); -} - -static inline void stosb(void *addr, int data, int cnt) { - asm volatile ("cld; rep stosb" : - f7: 8b 4d 10 mov 0x10(%ebp),%ecx - fa: 8b 45 0c mov 0xc(%ebp),%eax - fd: 89 d7 mov %edx,%edi - ff: fc cld - 100: f3 aa rep stos %al,%es:(%edi) - stosb(dst, c, n); - return dst; -} - 102: 8b 7d fc mov -0x4(%ebp),%edi - 105: 89 d0 mov %edx,%eax - 107: c9 leave - 108: c3 ret - 109: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - -00000110 : - -char* strchr(const char *s, char c) { - 110: 55 push %ebp - 111: 89 e5 mov %esp,%ebp - 113: 8b 45 08 mov 0x8(%ebp),%eax - 116: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx - for (; *s; s++) { - 11a: 0f b6 10 movzbl (%eax),%edx - 11d: 84 d2 test %dl,%dl - 11f: 75 12 jne 133 - 121: eb 1d jmp 140 - 123: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 127: 90 nop - 128: 0f b6 50 01 movzbl 0x1(%eax),%edx - 12c: 83 c0 01 add $0x1,%eax - 12f: 84 d2 test %dl,%dl - 131: 74 0d je 140 - if (*s == c) { - 133: 38 d1 cmp %dl,%cl - 135: 75 f1 jne 128 - return (char*)s; - } - } - return 0; -} - 137: 5d pop %ebp - 138: c3 ret - 139: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - return 0; - 140: 31 c0 xor %eax,%eax -} - 142: 5d pop %ebp - 143: c3 ret - 144: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 14b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 14f: 90 nop - -00000150 : - -char* gets(char *buf, int max) { - 150: 55 push %ebp - 151: 89 e5 mov %esp,%ebp - 153: 57 push %edi - 154: 56 push %esi - int i, cc; - char c; - - for (i = 0; i + 1 < max;) { - cc = read(0, &c, 1); - 155: 8d 7d e7 lea -0x19(%ebp),%edi -char* gets(char *buf, int max) { - 158: 53 push %ebx - for (i = 0; i + 1 < max;) { - 159: 31 db xor %ebx,%ebx -char* gets(char *buf, int max) { - 15b: 83 ec 1c sub $0x1c,%esp - for (i = 0; i + 1 < max;) { - 15e: eb 27 jmp 187 - cc = read(0, &c, 1); - 160: 83 ec 04 sub $0x4,%esp - 163: 6a 01 push $0x1 - 165: 57 push %edi - 166: 6a 00 push $0x0 - 168: e8 2e 01 00 00 call 29b - if (cc < 1) { - 16d: 83 c4 10 add $0x10,%esp - 170: 85 c0 test %eax,%eax - 172: 7e 1d jle 191 - break; - } - buf[i++] = c; - 174: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 178: 8b 55 08 mov 0x8(%ebp),%edx - 17b: 88 44 1a ff mov %al,-0x1(%edx,%ebx,1) - if (c == '\n' || c == '\r') { - 17f: 3c 0a cmp $0xa,%al - 181: 74 1d je 1a0 - 183: 3c 0d cmp $0xd,%al - 185: 74 19 je 1a0 - for (i = 0; i + 1 < max;) { - 187: 89 de mov %ebx,%esi - 189: 83 c3 01 add $0x1,%ebx - 18c: 3b 5d 0c cmp 0xc(%ebp),%ebx - 18f: 7c cf jl 160 - break; - } - } - buf[i] = '\0'; - 191: 8b 45 08 mov 0x8(%ebp),%eax - 194: c6 04 30 00 movb $0x0,(%eax,%esi,1) - return buf; -} - 198: 8d 65 f4 lea -0xc(%ebp),%esp - 19b: 5b pop %ebx - 19c: 5e pop %esi - 19d: 5f pop %edi - 19e: 5d pop %ebp - 19f: c3 ret - buf[i] = '\0'; - 1a0: 8b 45 08 mov 0x8(%ebp),%eax - 1a3: 89 de mov %ebx,%esi - 1a5: c6 04 30 00 movb $0x0,(%eax,%esi,1) -} - 1a9: 8d 65 f4 lea -0xc(%ebp),%esp - 1ac: 5b pop %ebx - 1ad: 5e pop %esi - 1ae: 5f pop %edi - 1af: 5d pop %ebp - 1b0: c3 ret - 1b1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 1b8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 1bf: 90 nop - -000001c0 : - -int stat(const char *n, struct stat *st) { - 1c0: 55 push %ebp - 1c1: 89 e5 mov %esp,%ebp - 1c3: 56 push %esi - 1c4: 53 push %ebx - int fd; - int r; - - fd = open(n, O_RDONLY); - 1c5: 83 ec 08 sub $0x8,%esp - 1c8: 6a 00 push $0x0 - 1ca: ff 75 08 push 0x8(%ebp) - 1cd: e8 19 01 00 00 call 2eb - if (fd < 0) { - 1d2: 83 c4 10 add $0x10,%esp - 1d5: 85 c0 test %eax,%eax - 1d7: 78 27 js 200 - return -1; - } - r = fstat(fd, st); - 1d9: 83 ec 08 sub $0x8,%esp - 1dc: ff 75 0c push 0xc(%ebp) - 1df: 89 c3 mov %eax,%ebx - 1e1: 50 push %eax - 1e2: e8 cc 00 00 00 call 2b3 - close(fd); - 1e7: 89 1c 24 mov %ebx,(%esp) - r = fstat(fd, st); - 1ea: 89 c6 mov %eax,%esi - close(fd); - 1ec: e8 2a 01 00 00 call 31b - return r; - 1f1: 83 c4 10 add $0x10,%esp -} - 1f4: 8d 65 f8 lea -0x8(%ebp),%esp - 1f7: 89 f0 mov %esi,%eax - 1f9: 5b pop %ebx - 1fa: 5e pop %esi - 1fb: 5d pop %ebp - 1fc: c3 ret - 1fd: 8d 76 00 lea 0x0(%esi),%esi - return -1; - 200: be ff ff ff ff mov $0xffffffff,%esi - 205: eb ed jmp 1f4 - 207: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 20e: 66 90 xchg %ax,%ax - -00000210 : - -int atoi(const char *s) { - 210: 55 push %ebp - 211: 89 e5 mov %esp,%ebp - 213: 53 push %ebx - 214: 8b 55 08 mov 0x8(%ebp),%edx - int n; - - n = 0; - while ('0' <= *s && *s <= '9') { - 217: 0f be 02 movsbl (%edx),%eax - 21a: 8d 48 d0 lea -0x30(%eax),%ecx - 21d: 80 f9 09 cmp $0x9,%cl - n = 0; - 220: b9 00 00 00 00 mov $0x0,%ecx - while ('0' <= *s && *s <= '9') { - 225: 77 1e ja 245 - 227: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 22e: 66 90 xchg %ax,%ax - n = n * 10 + *s++ - '0'; - 230: 83 c2 01 add $0x1,%edx - 233: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 236: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx - while ('0' <= *s && *s <= '9') { - 23a: 0f be 02 movsbl (%edx),%eax - 23d: 8d 58 d0 lea -0x30(%eax),%ebx - 240: 80 fb 09 cmp $0x9,%bl - 243: 76 eb jbe 230 - } - return n; -} - 245: 8b 5d fc mov -0x4(%ebp),%ebx - 248: 89 c8 mov %ecx,%eax - 24a: c9 leave - 24b: c3 ret - 24c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - -00000250 : - -void* memmove(void *vdst, const void *vsrc, int n) { - 250: 55 push %ebp - 251: 89 e5 mov %esp,%ebp - 253: 57 push %edi - 254: 8b 45 10 mov 0x10(%ebp),%eax - 257: 8b 55 08 mov 0x8(%ebp),%edx - 25a: 56 push %esi - 25b: 8b 75 0c mov 0xc(%ebp),%esi - char *dst; - const char *src; - - dst = vdst; - src = vsrc; - while (n-- > 0) { - 25e: 85 c0 test %eax,%eax - 260: 7e 13 jle 275 - 262: 01 d0 add %edx,%eax - dst = vdst; - 264: 89 d7 mov %edx,%edi - 266: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 26d: 8d 76 00 lea 0x0(%esi),%esi - *dst++ = *src++; - 270: a4 movsb %ds:(%esi),%es:(%edi) - while (n-- > 0) { - 271: 39 f8 cmp %edi,%eax - 273: 75 fb jne 270 - } - return vdst; -} - 275: 5e pop %esi - 276: 89 d0 mov %edx,%eax - 278: 5f pop %edi - 279: 5d pop %ebp - 27a: c3 ret - -0000027b : -name: \ - movl $SYS_ ## name, %eax; \ - int $T_SYSCALL; \ - ret - -SYSCALL(fork) - 27b: b8 01 00 00 00 mov $0x1,%eax - 280: cd 40 int $0x40 - 282: c3 ret - -00000283 : -SYSCALL(exit) - 283: b8 02 00 00 00 mov $0x2,%eax - 288: cd 40 int $0x40 - 28a: c3 ret - -0000028b : -SYSCALL(wait) - 28b: b8 03 00 00 00 mov $0x3,%eax - 290: cd 40 int $0x40 - 292: c3 ret - -00000293 : -SYSCALL(pipe) - 293: b8 04 00 00 00 mov $0x4,%eax - 298: cd 40 int $0x40 - 29a: c3 ret - -0000029b : -SYSCALL(read) - 29b: b8 05 00 00 00 mov $0x5,%eax - 2a0: cd 40 int $0x40 - 2a2: c3 ret - -000002a3 : -SYSCALL(kill) - 2a3: b8 06 00 00 00 mov $0x6,%eax - 2a8: cd 40 int $0x40 - 2aa: c3 ret - -000002ab : -SYSCALL(exec) - 2ab: b8 07 00 00 00 mov $0x7,%eax - 2b0: cd 40 int $0x40 - 2b2: c3 ret - -000002b3 : -SYSCALL(fstat) - 2b3: b8 08 00 00 00 mov $0x8,%eax - 2b8: cd 40 int $0x40 - 2ba: c3 ret - -000002bb : -SYSCALL(chdir) - 2bb: b8 09 00 00 00 mov $0x9,%eax - 2c0: cd 40 int $0x40 - 2c2: c3 ret - -000002c3 : -SYSCALL(dup) - 2c3: b8 0a 00 00 00 mov $0xa,%eax - 2c8: cd 40 int $0x40 - 2ca: c3 ret - -000002cb : -SYSCALL(getpid) - 2cb: b8 0b 00 00 00 mov $0xb,%eax - 2d0: cd 40 int $0x40 - 2d2: c3 ret - -000002d3 : -SYSCALL(sbrk) - 2d3: b8 0c 00 00 00 mov $0xc,%eax - 2d8: cd 40 int $0x40 - 2da: c3 ret - -000002db : -SYSCALL(sleep) - 2db: b8 0d 00 00 00 mov $0xd,%eax - 2e0: cd 40 int $0x40 - 2e2: c3 ret - -000002e3 : -SYSCALL(uptime) - 2e3: b8 0e 00 00 00 mov $0xe,%eax - 2e8: cd 40 int $0x40 - 2ea: c3 ret - -000002eb : -SYSCALL(open) - 2eb: b8 0f 00 00 00 mov $0xf,%eax - 2f0: cd 40 int $0x40 - 2f2: c3 ret - -000002f3 : -SYSCALL(write) - 2f3: b8 10 00 00 00 mov $0x10,%eax - 2f8: cd 40 int $0x40 - 2fa: c3 ret - -000002fb : -SYSCALL(mknod) - 2fb: b8 11 00 00 00 mov $0x11,%eax - 300: cd 40 int $0x40 - 302: c3 ret - -00000303 : -SYSCALL(unlink) - 303: b8 12 00 00 00 mov $0x12,%eax - 308: cd 40 int $0x40 - 30a: c3 ret - -0000030b : -SYSCALL(link) - 30b: b8 13 00 00 00 mov $0x13,%eax - 310: cd 40 int $0x40 - 312: c3 ret - -00000313 : -SYSCALL(mkdir) - 313: b8 14 00 00 00 mov $0x14,%eax - 318: cd 40 int $0x40 - 31a: c3 ret - -0000031b : -SYSCALL(close) - 31b: b8 15 00 00 00 mov $0x15,%eax - 320: cd 40 int $0x40 - 322: c3 ret - -00000323 : -SYSCALL(getch) - 323: b8 16 00 00 00 mov $0x16,%eax - 328: cd 40 int $0x40 - 32a: c3 ret - -0000032b : -SYSCALL(greeting) - 32b: b8 17 00 00 00 mov $0x17,%eax - 330: cd 40 int $0x40 - 332: c3 ret - -00000333 : -SYSCALL(shutdown) - 333: b8 18 00 00 00 mov $0x18,%eax - 338: cd 40 int $0x40 - 33a: c3 ret - 33b: 66 90 xchg %ax,%ax - 33d: 66 90 xchg %ax,%ax - 33f: 90 nop - -00000340 : - -static void putc(int fd, char c) { - write(fd, &c, 1); -} - -static void printint(int fd, int xx, int base, int sgn) { - 340: 55 push %ebp - 341: 89 e5 mov %esp,%ebp - 343: 57 push %edi - 344: 56 push %esi - 345: 53 push %ebx - 346: 83 ec 3c sub $0x3c,%esp - 349: 89 4d c4 mov %ecx,-0x3c(%ebp) - uint x; - - neg = 0; - if (sgn && xx < 0) { - neg = 1; - x = -xx; - 34c: 89 d1 mov %edx,%ecx -static void printint(int fd, int xx, int base, int sgn) { - 34e: 89 45 b8 mov %eax,-0x48(%ebp) - if (sgn && xx < 0) { - 351: 85 d2 test %edx,%edx - 353: 0f 89 7f 00 00 00 jns 3d8 - 359: f6 45 08 01 testb $0x1,0x8(%ebp) - 35d: 74 79 je 3d8 - neg = 1; - 35f: c7 45 bc 01 00 00 00 movl $0x1,-0x44(%ebp) - x = -xx; - 366: f7 d9 neg %ecx - } - else { - x = xx; - } - - i = 0; - 368: 31 db xor %ebx,%ebx - 36a: 8d 75 d7 lea -0x29(%ebp),%esi - 36d: 8d 76 00 lea 0x0(%esi),%esi - do { - buf[i++] = digits[x % base]; - 370: 89 c8 mov %ecx,%eax - 372: 31 d2 xor %edx,%edx - 374: 89 cf mov %ecx,%edi - 376: f7 75 c4 divl -0x3c(%ebp) - 379: 0f b6 92 78 07 00 00 movzbl 0x778(%edx),%edx - 380: 89 45 c0 mov %eax,-0x40(%ebp) - 383: 89 d8 mov %ebx,%eax - 385: 8d 5b 01 lea 0x1(%ebx),%ebx - } - while ((x /= base) != 0); - 388: 8b 4d c0 mov -0x40(%ebp),%ecx - buf[i++] = digits[x % base]; - 38b: 88 14 1e mov %dl,(%esi,%ebx,1) - while ((x /= base) != 0); - 38e: 39 7d c4 cmp %edi,-0x3c(%ebp) - 391: 76 dd jbe 370 - if (neg) { - 393: 8b 4d bc mov -0x44(%ebp),%ecx - 396: 85 c9 test %ecx,%ecx - 398: 74 0c je 3a6 - buf[i++] = '-'; - 39a: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) - buf[i++] = digits[x % base]; - 39f: 89 d8 mov %ebx,%eax - buf[i++] = '-'; - 3a1: ba 2d 00 00 00 mov $0x2d,%edx - } - - while (--i >= 0) { - 3a6: 8b 7d b8 mov -0x48(%ebp),%edi - 3a9: 8d 5c 05 d7 lea -0x29(%ebp,%eax,1),%ebx - 3ad: eb 07 jmp 3b6 - 3af: 90 nop - putc(fd, buf[i]); - 3b0: 0f b6 13 movzbl (%ebx),%edx - 3b3: 83 eb 01 sub $0x1,%ebx - write(fd, &c, 1); - 3b6: 83 ec 04 sub $0x4,%esp - 3b9: 88 55 d7 mov %dl,-0x29(%ebp) - 3bc: 6a 01 push $0x1 - 3be: 56 push %esi - 3bf: 57 push %edi - 3c0: e8 2e ff ff ff call 2f3 - while (--i >= 0) { - 3c5: 83 c4 10 add $0x10,%esp - 3c8: 39 de cmp %ebx,%esi - 3ca: 75 e4 jne 3b0 - } -} - 3cc: 8d 65 f4 lea -0xc(%ebp),%esp - 3cf: 5b pop %ebx - 3d0: 5e pop %esi - 3d1: 5f pop %edi - 3d2: 5d pop %ebp - 3d3: c3 ret - 3d4: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - neg = 0; - 3d8: c7 45 bc 00 00 00 00 movl $0x0,-0x44(%ebp) - 3df: eb 87 jmp 368 - 3e1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 3e8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 3ef: 90 nop - -000003f0 : - -// Print to the given fd. Only understands %d, %x, %p, %s. -void printf(int fd, const char *fmt, ...) { - 3f0: 55 push %ebp - 3f1: 89 e5 mov %esp,%ebp - 3f3: 57 push %edi - 3f4: 56 push %esi - 3f5: 53 push %ebx - 3f6: 83 ec 2c sub $0x2c,%esp - int c, i, state; - uint *ap; - - state = 0; - ap = (uint*)(void*)&fmt + 1; - for (i = 0; fmt[i]; i++) { - 3f9: 8b 5d 0c mov 0xc(%ebp),%ebx -void printf(int fd, const char *fmt, ...) { - 3fc: 8b 75 08 mov 0x8(%ebp),%esi - for (i = 0; fmt[i]; i++) { - 3ff: 0f b6 13 movzbl (%ebx),%edx - 402: 84 d2 test %dl,%dl - 404: 74 6a je 470 - ap = (uint*)(void*)&fmt + 1; - 406: 8d 45 10 lea 0x10(%ebp),%eax - 409: 83 c3 01 add $0x1,%ebx - write(fd, &c, 1); - 40c: 8d 7d e7 lea -0x19(%ebp),%edi - state = 0; - 40f: 31 c9 xor %ecx,%ecx - ap = (uint*)(void*)&fmt + 1; - 411: 89 45 d0 mov %eax,-0x30(%ebp) - 414: eb 36 jmp 44c - 416: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 41d: 8d 76 00 lea 0x0(%esi),%esi - 420: 89 4d d4 mov %ecx,-0x2c(%ebp) - c = fmt[i] & 0xff; - if (state == 0) { - if (c == '%') { - state = '%'; - 423: b9 25 00 00 00 mov $0x25,%ecx - if (c == '%') { - 428: 83 f8 25 cmp $0x25,%eax - 42b: 74 15 je 442 - write(fd, &c, 1); - 42d: 83 ec 04 sub $0x4,%esp - 430: 88 55 e7 mov %dl,-0x19(%ebp) - 433: 6a 01 push $0x1 - 435: 57 push %edi - 436: 56 push %esi - 437: e8 b7 fe ff ff call 2f3 - 43c: 8b 4d d4 mov -0x2c(%ebp),%ecx - } - else { - putc(fd, c); - 43f: 83 c4 10 add $0x10,%esp - for (i = 0; fmt[i]; i++) { - 442: 0f b6 13 movzbl (%ebx),%edx - 445: 83 c3 01 add $0x1,%ebx - 448: 84 d2 test %dl,%dl - 44a: 74 24 je 470 - c = fmt[i] & 0xff; - 44c: 0f b6 c2 movzbl %dl,%eax - if (state == 0) { - 44f: 85 c9 test %ecx,%ecx - 451: 74 cd je 420 - } - } - else if (state == '%') { - 453: 83 f9 25 cmp $0x25,%ecx - 456: 75 ea jne 442 - if (c == 'd') { - 458: 83 f8 25 cmp $0x25,%eax - 45b: 0f 84 07 01 00 00 je 568 - 461: 83 e8 63 sub $0x63,%eax - 464: 83 f8 15 cmp $0x15,%eax - 467: 77 17 ja 480 - 469: ff 24 85 20 07 00 00 jmp *0x720(,%eax,4) - putc(fd, c); - } - state = 0; - } - } -} - 470: 8d 65 f4 lea -0xc(%ebp),%esp - 473: 5b pop %ebx - 474: 5e pop %esi - 475: 5f pop %edi - 476: 5d pop %ebp - 477: c3 ret - 478: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 47f: 90 nop - write(fd, &c, 1); - 480: 83 ec 04 sub $0x4,%esp - 483: 88 55 d4 mov %dl,-0x2c(%ebp) - 486: 6a 01 push $0x1 - 488: 57 push %edi - 489: 56 push %esi - 48a: c6 45 e7 25 movb $0x25,-0x19(%ebp) - 48e: e8 60 fe ff ff call 2f3 - putc(fd, c); - 493: 0f b6 55 d4 movzbl -0x2c(%ebp),%edx - write(fd, &c, 1); - 497: 83 c4 0c add $0xc,%esp - 49a: 88 55 e7 mov %dl,-0x19(%ebp) - 49d: 6a 01 push $0x1 - 49f: 57 push %edi - 4a0: 56 push %esi - 4a1: e8 4d fe ff ff call 2f3 - putc(fd, c); - 4a6: 83 c4 10 add $0x10,%esp - state = 0; - 4a9: 31 c9 xor %ecx,%ecx - 4ab: eb 95 jmp 442 - 4ad: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 16, 0); - 4b0: 83 ec 0c sub $0xc,%esp - 4b3: b9 10 00 00 00 mov $0x10,%ecx - 4b8: 6a 00 push $0x0 - 4ba: 8b 45 d0 mov -0x30(%ebp),%eax - 4bd: 8b 10 mov (%eax),%edx - 4bf: 89 f0 mov %esi,%eax - 4c1: e8 7a fe ff ff call 340 - ap++; - 4c6: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 4ca: 83 c4 10 add $0x10,%esp - state = 0; - 4cd: 31 c9 xor %ecx,%ecx - 4cf: e9 6e ff ff ff jmp 442 - 4d4: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - s = (char*)*ap; - 4d8: 8b 45 d0 mov -0x30(%ebp),%eax - 4db: 8b 10 mov (%eax),%edx - ap++; - 4dd: 83 c0 04 add $0x4,%eax - 4e0: 89 45 d0 mov %eax,-0x30(%ebp) - if (s == 0) { - 4e3: 85 d2 test %edx,%edx - 4e5: 0f 84 8d 00 00 00 je 578 - while (*s != 0) { - 4eb: 0f b6 02 movzbl (%edx),%eax - state = 0; - 4ee: 31 c9 xor %ecx,%ecx - while (*s != 0) { - 4f0: 84 c0 test %al,%al - 4f2: 0f 84 4a ff ff ff je 442 - 4f8: 89 5d d4 mov %ebx,-0x2c(%ebp) - 4fb: 89 d3 mov %edx,%ebx - 4fd: 8d 76 00 lea 0x0(%esi),%esi - write(fd, &c, 1); - 500: 83 ec 04 sub $0x4,%esp - s++; - 503: 83 c3 01 add $0x1,%ebx - 506: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 509: 6a 01 push $0x1 - 50b: 57 push %edi - 50c: 56 push %esi - 50d: e8 e1 fd ff ff call 2f3 - while (*s != 0) { - 512: 0f b6 03 movzbl (%ebx),%eax - 515: 83 c4 10 add $0x10,%esp - 518: 84 c0 test %al,%al - 51a: 75 e4 jne 500 - state = 0; - 51c: 8b 5d d4 mov -0x2c(%ebp),%ebx - 51f: 31 c9 xor %ecx,%ecx - 521: e9 1c ff ff ff jmp 442 - 526: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 52d: 8d 76 00 lea 0x0(%esi),%esi - printint(fd, *ap, 10, 1); - 530: 83 ec 0c sub $0xc,%esp - 533: b9 0a 00 00 00 mov $0xa,%ecx - 538: 6a 01 push $0x1 - 53a: e9 7b ff ff ff jmp 4ba - 53f: 90 nop - putc(fd, *ap); - 540: 8b 45 d0 mov -0x30(%ebp),%eax - write(fd, &c, 1); - 543: 83 ec 04 sub $0x4,%esp - putc(fd, *ap); - 546: 8b 00 mov (%eax),%eax - write(fd, &c, 1); - 548: 6a 01 push $0x1 - 54a: 57 push %edi - 54b: 56 push %esi - putc(fd, *ap); - 54c: 88 45 e7 mov %al,-0x19(%ebp) - write(fd, &c, 1); - 54f: e8 9f fd ff ff call 2f3 - ap++; - 554: 83 45 d0 04 addl $0x4,-0x30(%ebp) - 558: 83 c4 10 add $0x10,%esp - state = 0; - 55b: 31 c9 xor %ecx,%ecx - 55d: e9 e0 fe ff ff jmp 442 - 562: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - putc(fd, c); - 568: 88 55 e7 mov %dl,-0x19(%ebp) - write(fd, &c, 1); - 56b: 83 ec 04 sub $0x4,%esp - 56e: e9 2a ff ff ff jmp 49d - 573: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - 577: 90 nop - s = "(null)"; - 578: ba 18 07 00 00 mov $0x718,%edx - while (*s != 0) { - 57d: 89 5d d4 mov %ebx,-0x2c(%ebp) - 580: b8 28 00 00 00 mov $0x28,%eax - 585: 89 d3 mov %edx,%ebx - 587: e9 74 ff ff ff jmp 500 - 58c: 66 90 xchg %ax,%ax - 58e: 66 90 xchg %ax,%ax - -00000590 : -typedef union header Header; - -static Header base; -static Header *freep; - -void free(void *ap) { - 590: 55 push %ebp - Header *bp, *p; - - bp = (Header*)ap - 1; - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 591: a1 20 0a 00 00 mov 0xa20,%eax -void free(void *ap) { - 596: 89 e5 mov %esp,%ebp - 598: 57 push %edi - 599: 56 push %esi - 59a: 53 push %ebx - 59b: 8b 5d 08 mov 0x8(%ebp),%ebx - bp = (Header*)ap - 1; - 59e: 8d 4b f8 lea -0x8(%ebx),%ecx - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) { - 5a1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi - 5a8: 89 c2 mov %eax,%edx - 5aa: 8b 00 mov (%eax),%eax - 5ac: 39 ca cmp %ecx,%edx - 5ae: 73 30 jae 5e0 - 5b0: 39 c1 cmp %eax,%ecx - 5b2: 72 04 jb 5b8 - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 5b4: 39 c2 cmp %eax,%edx - 5b6: 72 f0 jb 5a8 - break; - } - } - if (bp + bp->s.size == p->s.ptr) { - 5b8: 8b 73 fc mov -0x4(%ebx),%esi - 5bb: 8d 3c f1 lea (%ecx,%esi,8),%edi - 5be: 39 f8 cmp %edi,%eax - 5c0: 74 30 je 5f2 - bp->s.size += p->s.ptr->s.size; - bp->s.ptr = p->s.ptr->s.ptr; - 5c2: 89 43 f8 mov %eax,-0x8(%ebx) - } - else { - bp->s.ptr = p->s.ptr; - } - if (p + p->s.size == bp) { - 5c5: 8b 42 04 mov 0x4(%edx),%eax - 5c8: 8d 34 c2 lea (%edx,%eax,8),%esi - 5cb: 39 f1 cmp %esi,%ecx - 5cd: 74 3a je 609 - p->s.size += bp->s.size; - p->s.ptr = bp->s.ptr; - 5cf: 89 0a mov %ecx,(%edx) - } - else { - p->s.ptr = bp; - } - freep = p; -} - 5d1: 5b pop %ebx - freep = p; - 5d2: 89 15 20 0a 00 00 mov %edx,0xa20 -} - 5d8: 5e pop %esi - 5d9: 5f pop %edi - 5da: 5d pop %ebp - 5db: c3 ret - 5dc: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) { - 5e0: 39 c2 cmp %eax,%edx - 5e2: 72 c4 jb 5a8 - 5e4: 39 c1 cmp %eax,%ecx - 5e6: 73 c0 jae 5a8 - if (bp + bp->s.size == p->s.ptr) { - 5e8: 8b 73 fc mov -0x4(%ebx),%esi - 5eb: 8d 3c f1 lea (%ecx,%esi,8),%edi - 5ee: 39 f8 cmp %edi,%eax - 5f0: 75 d0 jne 5c2 - bp->s.size += p->s.ptr->s.size; - 5f2: 03 70 04 add 0x4(%eax),%esi - 5f5: 89 73 fc mov %esi,-0x4(%ebx) - bp->s.ptr = p->s.ptr->s.ptr; - 5f8: 8b 02 mov (%edx),%eax - 5fa: 8b 00 mov (%eax),%eax - 5fc: 89 43 f8 mov %eax,-0x8(%ebx) - if (p + p->s.size == bp) { - 5ff: 8b 42 04 mov 0x4(%edx),%eax - 602: 8d 34 c2 lea (%edx,%eax,8),%esi - 605: 39 f1 cmp %esi,%ecx - 607: 75 c6 jne 5cf - p->s.size += bp->s.size; - 609: 03 43 fc add -0x4(%ebx),%eax - freep = p; - 60c: 89 15 20 0a 00 00 mov %edx,0xa20 - p->s.size += bp->s.size; - 612: 89 42 04 mov %eax,0x4(%edx) - p->s.ptr = bp->s.ptr; - 615: 8b 4b f8 mov -0x8(%ebx),%ecx - 618: 89 0a mov %ecx,(%edx) -} - 61a: 5b pop %ebx - 61b: 5e pop %esi - 61c: 5f pop %edi - 61d: 5d pop %ebp - 61e: c3 ret - 61f: 90 nop - -00000620 : - hp->s.size = nu; - free((void*)(hp + 1)); - return freep; -} - -void* malloc(uint nbytes) { - 620: 55 push %ebp - 621: 89 e5 mov %esp,%ebp - 623: 57 push %edi - 624: 56 push %esi - 625: 53 push %ebx - 626: 83 ec 1c sub $0x1c,%esp - Header *p, *prevp; - uint nunits; - - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 629: 8b 45 08 mov 0x8(%ebp),%eax - if ((prevp = freep) == 0) { - 62c: 8b 3d 20 0a 00 00 mov 0xa20,%edi - nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1; - 632: 8d 70 07 lea 0x7(%eax),%esi - 635: c1 ee 03 shr $0x3,%esi - 638: 83 c6 01 add $0x1,%esi - if ((prevp = freep) == 0) { - 63b: 85 ff test %edi,%edi - 63d: 0f 84 9d 00 00 00 je 6e0 - base.s.ptr = freep = prevp = &base; - base.s.size = 0; - } - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 643: 8b 17 mov (%edi),%edx - if (p->s.size >= nunits) { - 645: 8b 4a 04 mov 0x4(%edx),%ecx - 648: 39 f1 cmp %esi,%ecx - 64a: 73 6a jae 6b6 - 64c: bb 00 10 00 00 mov $0x1000,%ebx - 651: 39 de cmp %ebx,%esi - 653: 0f 43 de cmovae %esi,%ebx - p = sbrk(nu * sizeof(Header)); - 656: 8d 04 dd 00 00 00 00 lea 0x0(,%ebx,8),%eax - 65d: 89 45 e4 mov %eax,-0x1c(%ebp) - 660: eb 17 jmp 679 - 662: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 668: 8b 02 mov (%edx),%eax - if (p->s.size >= nunits) { - 66a: 8b 48 04 mov 0x4(%eax),%ecx - 66d: 39 f1 cmp %esi,%ecx - 66f: 73 4f jae 6c0 - p->s.size = nunits; - } - freep = prevp; - return (void*)(p + 1); - } - if (p == freep) { - 671: 8b 3d 20 0a 00 00 mov 0xa20,%edi - 677: 89 c2 mov %eax,%edx - 679: 39 d7 cmp %edx,%edi - 67b: 75 eb jne 668 - p = sbrk(nu * sizeof(Header)); - 67d: 83 ec 0c sub $0xc,%esp - 680: ff 75 e4 push -0x1c(%ebp) - 683: e8 4b fc ff ff call 2d3 - if (p == (char*)-1) { - 688: 83 c4 10 add $0x10,%esp - 68b: 83 f8 ff cmp $0xffffffff,%eax - 68e: 74 1c je 6ac - hp->s.size = nu; - 690: 89 58 04 mov %ebx,0x4(%eax) - free((void*)(hp + 1)); - 693: 83 ec 0c sub $0xc,%esp - 696: 83 c0 08 add $0x8,%eax - 699: 50 push %eax - 69a: e8 f1 fe ff ff call 590 - return freep; - 69f: 8b 15 20 0a 00 00 mov 0xa20,%edx - if ((p = morecore(nunits)) == 0) { - 6a5: 83 c4 10 add $0x10,%esp - 6a8: 85 d2 test %edx,%edx - 6aa: 75 bc jne 668 - return 0; - } - } - } -} - 6ac: 8d 65 f4 lea -0xc(%ebp),%esp - return 0; - 6af: 31 c0 xor %eax,%eax -} - 6b1: 5b pop %ebx - 6b2: 5e pop %esi - 6b3: 5f pop %edi - 6b4: 5d pop %ebp - 6b5: c3 ret - if (p->s.size >= nunits) { - 6b6: 89 d0 mov %edx,%eax - 6b8: 89 fa mov %edi,%edx - 6ba: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - if (p->s.size == nunits) { - 6c0: 39 ce cmp %ecx,%esi - 6c2: 74 4c je 710 - p->s.size -= nunits; - 6c4: 29 f1 sub %esi,%ecx - 6c6: 89 48 04 mov %ecx,0x4(%eax) - p += p->s.size; - 6c9: 8d 04 c8 lea (%eax,%ecx,8),%eax - p->s.size = nunits; - 6cc: 89 70 04 mov %esi,0x4(%eax) - freep = prevp; - 6cf: 89 15 20 0a 00 00 mov %edx,0xa20 -} - 6d5: 8d 65 f4 lea -0xc(%ebp),%esp - return (void*)(p + 1); - 6d8: 83 c0 08 add $0x8,%eax -} - 6db: 5b pop %ebx - 6dc: 5e pop %esi - 6dd: 5f pop %edi - 6de: 5d pop %ebp - 6df: c3 ret - base.s.ptr = freep = prevp = &base; - 6e0: c7 05 20 0a 00 00 24 movl $0xa24,0xa20 - 6e7: 0a 00 00 - base.s.size = 0; - 6ea: bf 24 0a 00 00 mov $0xa24,%edi - base.s.ptr = freep = prevp = &base; - 6ef: c7 05 24 0a 00 00 24 movl $0xa24,0xa24 - 6f6: 0a 00 00 - for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) { - 6f9: 89 fa mov %edi,%edx - base.s.size = 0; - 6fb: c7 05 28 0a 00 00 00 movl $0x0,0xa28 - 702: 00 00 00 - if (p->s.size >= nunits) { - 705: e9 42 ff ff ff jmp 64c - 70a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi - prevp->s.ptr = p->s.ptr; - 710: 8b 08 mov (%eax),%ecx - 712: 89 0a mov %ecx,(%edx) - 714: eb b9 jmp 6cf diff --git a/zombie.d b/zombie.d deleted file mode 100644 index c3e36f5..0000000 --- a/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/zombie.o b/zombie.o deleted file mode 100644 index db656c227ee3ad2275017fc1c25a284015dab977..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2708 zcma)7O=uid9Di?TC)v1Zl1*xxm}*vuG?nh8NlU7=t!Znm(Ne#N3W{-dGua)xI}_(a zlTzD5km^AZJQP91lLrraQ1I%ZAgG`RJu9N%p$7$T4aDE?&3nnDQ0O1t{Qe)m_kUmi z_vZ5HvyVwBg%K$%v1JMIOIH>-q+mh}i`|B*@V&F+#kD{G*?4_@{@uTxS-W2RdwpYL zBBS~4}>}0`y09LVR z`#~b?LFk1p`y`<22K8a3pNHB_rzq{9*H+%1ekLd>ow5CB^5eoT06P@M@tLQ>z#JOF zkpq}rQPWCTmm?k-vHFgbA1*&s-a9fk zbVZIF9l`V*x!r$sL?T(YE#?5Fn|rZK&&^#baUXzrET)l*o&N&5NA%EI#QjOuctwh>OHJYrOKSTG(GJcIJ8f@ zh1kh+gvble3VE?4M|+FKcX04k_*hI7RX~sSN-;NJ7gBMe-%2m)Yo8JHmo;OgDE{3r zI?>7%WM*&AUhfI+H6OmBkNi(3lhtHl{g+$!=UoP0ru97ozh+(*Q+_YuK6pz*NA z;~JmP_`Jrp#ubfgMBKagHD1;DsYdRsw6Zmlr{)Dz<6}PDAI@t^L7EQKH|-L2On?~Q!a zjohH==@c0$3Yu*{PPX~le&CrTn1xa4UQl);?C=5!C&2x6@P^dXz08L4S_|sJV^y~; zqhPY8O{Hf4xUKG{-tW~sY`KzK@%WBn+fmDz+={2_0u(duEOefk5ml=&=<7k7MWghh z#)g4+qVf4><9H|0%v_-g*3;)yw3ry{FQ0E5`96S;`8XGok3Rs@2ddZw<0C3sOzc(I zMrY_t7*#4-OzdUY`EkF-xLhO0rQeJjLpOb(il1QMC%Gvm7Q&OycMbWt56s6`#pJsJ z-SmMf{(!MSMT?2?zUA}%h<;mxBUUV+bu z;e7!Ib;J7#ynG!P-Zz?O`u}DMOgqS<{D4NCSDW%Xct