From c5454a45683fd2d0cc045d003f3173afc87794a6 Mon Sep 17 00:00:00 2001 From: kimdohyung Date: Wed, 12 Jun 2024 14:46:46 +0900 Subject: [PATCH 1/2] Update test --- .DS_Store | Bin 0 -> 10244 bytes .gitignore | 127 - docker-compose.yml | 9 + src/.DS_Store | Bin 0 -> 6148 bytes src/.gdbinit.tmpl | 27 + src/.gitignore | 127 - src/.vscode/settings.json | 5 + src/.vscode/tasks.json | 28 + src/LICENSE | 24 + src/Makefile | 294 + src/README | 48 + src/bio.d | 2 + src/bio.o | Bin 0 -> 6744 bytes src/bootasm.d | 1 + src/bootasm.o | Bin 0 -> 1704 bytes src/bootblock | Bin 512 -> 512 bytes src/bootblock.asm | 272 +- src/bootblock.o | Bin 0 -> 5664 bytes src/bootblockother.o | Bin 0 -> 1264 bytes src/bootmain.d | 1 + src/bootmain.o | Bin 0 -> 6760 bytes src/console.d | 3 + src/console.o | Bin 0 -> 17660 bytes src/entry.o | Bin 0 -> 1420 bytes src/entryother.d | 1 + src/entryother.o | Bin 0 -> 1656 bytes src/exec.d | 2 + src/exec.o | Bin 0 -> 9092 bytes src/file.d | 2 + src/file.o | Bin 0 -> 9360 bytes src/fs.d | 2 + src/fs.img | Bin 512000 -> 512000 bytes src/fs.o | Bin 0 -> 26012 bytes src/ide.d | 2 + src/ide.o | Bin 0 -> 12904 bytes src/initcode.d | 1 + src/initcode.o | Bin 0 -> 1484 bytes src/initcode.out | Bin 0 -> 1108 bytes src/ioapic.d | 1 + src/ioapic.o | Bin 0 -> 4964 bytes src/kalloc.d | 2 + src/kalloc.o | Bin 0 -> 5652 bytes src/kbd.d | 1 + src/kbd.o | Bin 0 -> 5812 bytes src/kernel | Bin 219832 -> 201964 bytes src/kernel.asm | 20351 ++++++++++++++++++------------------ src/kernel.sym | 990 +- src/lapic.d | 2 + src/lapic.o | Bin 0 -> 10180 bytes src/log.d | 2 + src/log.o | Bin 0 -> 9912 bytes src/main.d | 2 + src/main.o | Bin 0 -> 17160 bytes src/mkfs | Bin 22240 -> 21480 bytes src/mp.d | 2 + src/mp.o | Bin 0 -> 11232 bytes src/picirq.d | 1 + src/picirq.o | Bin 0 -> 2624 bytes src/pipe.d | 2 + src/pipe.o | Bin 0 -> 9764 bytes src/printf.d | 1 + src/printf.o | Bin 0 -> 7104 bytes src/proc.d | 2 + src/proc.o | Bin 0 -> 21920 bytes src/slab.d | 3 + src/slab.o | Bin 0 -> 19144 bytes src/slabtest.c | 2 - src/slabtest.d | 2 + src/slabtest.o | Bin 0 -> 14040 bytes src/sleeplock.d | 2 + src/sleeplock.o | Bin 0 -> 7200 bytes src/spinlock.d | 2 + src/spinlock.o | Bin 0 -> 9256 bytes src/string.d | 1 + src/string.o | Bin 0 -> 7056 bytes src/swtch.o | Bin 0 -> 1192 bytes src/syscall.d | 2 + src/syscall.o | Bin 0 -> 8528 bytes src/sysfile.d | 2 + src/sysfile.o | Bin 0 -> 21236 bytes src/sysproc.d | 2 + src/sysproc.o | Bin 0 -> 6944 bytes src/sysslab.d | 2 + src/sysslab.o | Bin 0 -> 2236 bytes src/trap.d | 2 + src/trap.o | Bin 0 -> 10712 bytes src/trapasm.o | Bin 0 -> 1316 bytes src/uart.d | 2 + src/uart.o | Bin 0 -> 6356 bytes src/ulib.d | 2 + src/ulib.o | Bin 0 -> 6708 bytes src/umalloc.d | 2 + src/umalloc.o | Bin 0 -> 4988 bytes src/user/_cat | Bin 15632 -> 14644 bytes src/user/_echo | Bin 14748 -> 13792 bytes src/user/_forktest | Bin 15532 -> 14584 bytes src/user/_grep | Bin 17496 -> 16480 bytes src/user/_init | Bin 15356 -> 14404 bytes src/user/_kill | Bin 14792 -> 13844 bytes src/user/_ln | Bin 14656 -> 13776 bytes src/user/_ls | Bin 17032 -> 16084 bytes src/user/_mkdir | Bin 14916 -> 13908 bytes src/user/_ps | Bin 14548 -> 13608 bytes src/user/_rm | Bin 14896 -> 13888 bytes src/user/_sh | Bin 25584 -> 24616 bytes src/user/_slabtest | Bin 14492 -> 13444 bytes src/user/_stressfs | Bin 15632 -> 14712 bytes src/user/_usertests | Bin 63772 -> 59696 bytes src/user/_wc | Bin 16228 -> 15172 bytes src/user/_zombie | Bin 14476 -> 13472 bytes src/user/cat.asm | 1458 ++- src/user/cat.d | 1 + src/user/cat.o | Bin 0 -> 4280 bytes src/user/cat.sym | 100 +- src/user/echo.asm | 1334 ++- src/user/echo.d | 1 + src/user/echo.o | Bin 0 -> 3044 bytes src/user/echo.sym | 96 +- src/user/forktest.asm | 1437 ++- src/user/forktest.d | 2 + src/user/forktest.o | Bin 0 -> 4296 bytes src/user/forktest.sym | 100 +- src/user/grep.asm | 1809 ++-- src/user/grep.d | 1 + src/user/grep.o | Bin 0 -> 6720 bytes src/user/grep.sym | 106 +- src/user/init.asm | 1415 ++- src/user/init.d | 2 + src/user/init.o | Bin 0 -> 4064 bytes src/user/init.sym | 99 +- src/user/kill.asm | 1345 ++- src/user/kill.d | 1 + src/user/kill.o | Bin 0 -> 3168 bytes src/user/kill.sym | 96 +- src/user/ln.asm | 1345 ++- src/user/ln.d | 1 + src/user/ln.o | Bin 0 -> 3056 bytes src/user/ln.sym | 96 +- src/user/ls.asm | 1751 ++-- src/user/ls.d | 2 + src/user/ls.o | Bin 0 -> 6384 bytes src/user/ls.sym | 102 +- src/user/mkdir.asm | 1365 ++- src/user/mkdir.d | 2 + src/user/mkdir.o | Bin 0 -> 3204 bytes src/user/mkdir.sym | 96 +- src/user/ps.asm | 1309 ++- src/user/ps.d | 1 + src/user/ps.o | Bin 0 -> 2836 bytes src/user/ps.sym | 96 +- src/user/rm.asm | 1365 ++- src/user/rm.d | 1 + src/user/rm.o | Bin 0 -> 3188 bytes src/user/rm.sym | 96 +- src/user/sh.asm | 3157 +++--- src/user/sh.d | 1 + src/user/sh.o | Bin 0 -> 18232 bytes src/user/sh.sym | 139 +- src/user/slabtest.asm | 1293 ++- src/user/slabtest.d | 2 + src/user/slabtest.o | Bin 0 -> 2472 bytes src/user/slabtest.sym | 96 +- src/user/stressfs.asm | 1447 ++- src/user/stressfs.d | 2 + src/user/stressfs.o | Bin 0 -> 4424 bytes src/user/stressfs.sym | 96 +- src/user/usertests.asm | 9134 ++++++++-------- src/user/usertests.d | 2 + src/user/usertests.o | Bin 0 -> 70100 bytes src/user/usertests.sym | 187 +- src/user/wc.asm | 1527 ++- src/user/wc.d | 1 + src/user/wc.o | Bin 0 -> 4908 bytes src/user/wc.sym | 98 +- src/user/zombie.asm | 1315 ++- src/user/zombie.d | 2 + src/user/zombie.o | Bin 0 -> 2508 bytes src/user/zombie.sym | 96 +- src/usys.o | Bin 0 -> 1836 bytes src/vectors.o | Bin 0 -> 16372 bytes src/vm.d | 2 + src/vm.o | Bin 0 -> 19648 bytes src/xv6.img | Bin 5120000 -> 5120000 bytes 183 files changed, 28601 insertions(+), 29392 deletions(-) create mode 100644 .DS_Store delete mode 100644 .gitignore create mode 100644 docker-compose.yml create mode 100644 src/.DS_Store create mode 100644 src/.gdbinit.tmpl delete mode 100644 src/.gitignore create mode 100644 src/.vscode/settings.json create mode 100644 src/.vscode/tasks.json create mode 100644 src/LICENSE create mode 100644 src/Makefile create mode 100644 src/README create mode 100644 src/bio.d create mode 100644 src/bio.o create mode 100644 src/bootasm.d create mode 100644 src/bootasm.o create mode 100755 src/bootblock.o create mode 100755 src/bootblockother.o create mode 100644 src/bootmain.d create mode 100644 src/bootmain.o create mode 100644 src/console.d create mode 100644 src/console.o create mode 100644 src/entry.o create mode 100644 src/entryother.d create mode 100644 src/entryother.o create mode 100644 src/exec.d create mode 100644 src/exec.o create mode 100644 src/file.d create mode 100644 src/file.o create mode 100644 src/fs.d create mode 100644 src/fs.o create mode 100644 src/ide.d create mode 100644 src/ide.o create mode 100644 src/initcode.d create mode 100644 src/initcode.o create mode 100755 src/initcode.out create mode 100644 src/ioapic.d create mode 100644 src/ioapic.o create mode 100644 src/kalloc.d create mode 100644 src/kalloc.o create mode 100644 src/kbd.d create mode 100644 src/kbd.o create mode 100644 src/lapic.d create mode 100644 src/lapic.o create mode 100644 src/log.d create mode 100644 src/log.o create mode 100644 src/main.d create mode 100644 src/main.o create mode 100644 src/mp.d create mode 100644 src/mp.o create mode 100644 src/picirq.d create mode 100644 src/picirq.o create mode 100644 src/pipe.d create mode 100644 src/pipe.o create mode 100644 src/printf.d create mode 100644 src/printf.o create mode 100644 src/proc.d create mode 100644 src/proc.o create mode 100644 src/slab.d create mode 100644 src/slab.o create mode 100644 src/slabtest.d create mode 100644 src/slabtest.o create mode 100644 src/sleeplock.d create mode 100644 src/sleeplock.o create mode 100644 src/spinlock.d create mode 100644 src/spinlock.o create mode 100644 src/string.d create mode 100644 src/string.o create mode 100644 src/swtch.o create mode 100644 src/syscall.d create mode 100644 src/syscall.o create mode 100644 src/sysfile.d create mode 100644 src/sysfile.o create mode 100644 src/sysproc.d create mode 100644 src/sysproc.o create mode 100644 src/sysslab.d create mode 100644 src/sysslab.o create mode 100644 src/trap.d create mode 100644 src/trap.o create mode 100644 src/trapasm.o create mode 100644 src/uart.d create mode 100644 src/uart.o create mode 100644 src/ulib.d create mode 100644 src/ulib.o create mode 100644 src/umalloc.d create mode 100644 src/umalloc.o create mode 100644 src/user/cat.d create mode 100644 src/user/cat.o create mode 100644 src/user/echo.d create mode 100644 src/user/echo.o create mode 100644 src/user/forktest.d create mode 100644 src/user/forktest.o create mode 100644 src/user/grep.d create mode 100644 src/user/grep.o create mode 100644 src/user/init.d create mode 100644 src/user/init.o create mode 100644 src/user/kill.d create mode 100644 src/user/kill.o create mode 100644 src/user/ln.d create mode 100644 src/user/ln.o create mode 100644 src/user/ls.d create mode 100644 src/user/ls.o create mode 100644 src/user/mkdir.d create mode 100644 src/user/mkdir.o create mode 100644 src/user/ps.d create mode 100644 src/user/ps.o create mode 100644 src/user/rm.d create mode 100644 src/user/rm.o create mode 100644 src/user/sh.d create mode 100644 src/user/sh.o create mode 100644 src/user/slabtest.d create mode 100644 src/user/slabtest.o create mode 100644 src/user/stressfs.d create mode 100644 src/user/stressfs.o create mode 100644 src/user/usertests.d create mode 100644 src/user/usertests.o create mode 100644 src/user/wc.d create mode 100644 src/user/wc.o create mode 100644 src/user/zombie.d create mode 100644 src/user/zombie.o create mode 100644 src/usys.o create mode 100644 src/vectors.o create mode 100644 src/vm.d create mode 100644 src/vm.o diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..3f52cc9edfec1371caaf261add7325a74d977dd6 GIT binary patch literal 10244 zcmeHMX^a#_6t1s#fo>V07iKv|mK_)sg%y`mP?6c$MOXoM-GeF${o z5nc6{8sim-F=FB`Azq15;}uObDw^mI#RKD!7&XRtB^nbGfB34aXOCI%hZ66%@{)_uPc_}*X67PCHPGJo{>Jv(5To?l!0E~K*Z2@@yDljOf8%jdUjd;wsVu10>Wj0omw)bn@7*b z%oW1>2)tOF&nK!{oRMJ2AUQou1WlyZT%{(t5{o z+>Dhsw)VNE-a4S=OuMhsH?H(s&8v(aby`W)7DL}YB5K<+Ky~6Hf}pweu3^|gdrdob zc!uBEqfYg5u47rvj%WI&V|R@z?b_y%og00lztP^|P>%(&ank^==4~-tkLWo4&MwV$ zHM`Hq?77_1vWC@UXB^*m`a8{>V~deb4Vopk*)@2RskPq=W2Vv@iga(3dhM6?$F##)?8?>`uqMVJA$u zK?iJjS*{X%F@;CD@Dp2Jp({%kqxOM=UDlE z+v`y)a+;OPTbggwSr*^DNLIRIj@pw;iaNVJ$MtFFrN&0>e`?+{S`2E`EEo;cv^Q>N zQy!TzbI!ao7M{C&^_tAZmt1;;#|p7{Y(_`H^vtYfv=5rPzq3p8a)zx_T+mGcjqRH| zOv6t*DyZ=8+LZ6E(5Lis~tCyC}L6s!L+aWK~z%gNoGz>PDrb zAmRlfjK?mNmCl^g-%o?~glui1PF4@g+j+;EG|z7uFzn)x)+W};a<{irbB(4!itUOT zjk3%?2bXh|b-L+0ZZPYOa}$X!-c+5g8+thDM027=R^K8W)wByHMUxc4h@etVr4QW~ zKr5AAC?GZ*cm%dgrE7(lM;TRYDQjSxSTC)Xd)Y1QZgxL=oW0CmVehby*%$0<_7eaJ z6EG2z5l0oOk;FVKr0C-uEXDBl;%q*X{B_Yl$IK$ z7O6w(6+<6(rEb9&Q%R%Th%1GWtMtgRU8#EghQ>=a{(oHQs0g&<6l5p4N3B{@Hw-<2 z)FL=XgFe9d81D#h9$=vqqvT?z&8do2x053nSC+bF(Ph<1+%e@Ny!O2Lv1)Y!xr$)V zTtMtZaudNWs;RD4CGt+e)-I`zsb%DQN}#)hohUwVb?AlwDLsEDM=TJvGC9 zNPnMxCOW3Hr$STa4!x7*gk{@@em%ylXwbG;~Bh!m+>kN<2AgFxA7r9$5;5F1jCz) z=oJ({j$pVXsu^1`;{JULl!+lE`5nNz64K*oz57K?u0=ip}Z_fC&HwHjb$Q z?0zBK&s&f5DN8>h5pyu80(IL_!}WWjwLvqW8Ti{6;NNZJ^AHLCk&mSMvDhKzT;AVB`C5uX7#dHVS#+|VKFTZS3}CD%rAVCT;>Z8 z6XmK@Ovp6q5D8snblpuqq81EF6w1v^!ag~ChmI5r{Zv$%p-P}q@(78Ly> NAZXB?X5f!9@B_o#$v^-A literal 0 HcmV?d00001 diff --git a/src/.gdbinit.tmpl b/src/.gdbinit.tmpl new file mode 100644 index 0000000..f71681a --- /dev/null +++ b/src/.gdbinit.tmpl @@ -0,0 +1,27 @@ +set $lastcs = -1 + +define hook-stop + # There doesn't seem to be a good way to detect if we're in 16- or + # 32-bit mode, but in 32-bit mode we always run with CS == 8 in the + # kernel and CS == 35 in user space + if $cs == 8 || $cs == 35 + if $lastcs != 8 && $lastcs != 35 + set architecture i386 + end + x/i $pc + else + if $lastcs == -1 || $lastcs == 8 || $lastcs == 35 + set architecture i8086 + end + # Translate the segment:offset into a physical address + printf "[%4x:%4x] ", $cs, $eip + x/i $cs*16+$eip + end + set $lastcs = $cs +end + +echo + target remote localhost:1234\n +target remote localhost:1234 + +echo + symbol-file kernel\n +symbol-file kernel diff --git a/src/.gitignore b/src/.gitignore deleted file mode 100644 index c1d206d..0000000 --- a/src/.gitignore +++ /dev/null @@ -1,127 +0,0 @@ -# Created by https://www.toptal.com/developers/gitignore/api/c,cmake,macos,visualstudiocode -# Edit at https://www.toptal.com/developers/gitignore?templates=c,cmake,macos,visualstudiocode - -### C ### -# Prerequisites -*.d - -# Object files -*.o -*.ko -*.obj -*.elf - -# Linker output -*.ilk -*.map -*.exp - -# Precompiled Headers -*.gch -*.pch - -# Libraries -*.lib -*.a -*.la -*.lo - -# Shared objects (inc. Windows DLLs) -*.dll -*.so -*.so.* -*.dylib - -# Executables -*.exe -*.out -*.app -*.i*86 -*.x86_64 -*.hex - -# Debug files -*.dSYM/ -*.su -*.idb -*.pdb - -# Kernel Module Compile Results -*.mod* -*.cmd -.tmp_versions/ -modules.order -Module.symvers -Mkfile.old -dkms.conf - -### CMake ### -CMakeLists.txt.user -CMakeCache.txt -CMakeFiles -CMakeScripts -Testing -Makefile -cmake_install.cmake -install_manifest.txt -compile_commands.json -CTestTestfile.cmake -_deps - -### CMake Patch ### -# External projects -*-prefix/ - -### macOS ### -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -### macOS Patch ### -# iCloud generated files -*.icloud - -### VisualStudioCode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -!.vscode/*.code-snippets - -# Local History for Visual Studio Code -.history/ - -# Built Visual Studio Code Extensions -*.vsix - -### VisualStudioCode Patch ### -# Ignore all local history of files -.history -.ionide - -# End of https://www.toptal.com/developers/gitignore/api/c,cmake,macos,visualstudiocode \ No newline at end of file diff --git a/src/.vscode/settings.json b/src/.vscode/settings.json new file mode 100644 index 0000000..c7775be --- /dev/null +++ b/src/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "slab.h": "c" + } +} \ No newline at end of file diff --git a/src/.vscode/tasks.json b/src/.vscode/tasks.json new file mode 100644 index 0000000..08d9005 --- /dev/null +++ b/src/.vscode/tasks.json @@ -0,0 +1,28 @@ +{ + "tasks": [ + { + "type": "cppbuild", + "label": "C/C++: gcc build active file", + "command": "/usr/bin/gcc", + "args": [ + "-fdiagnostics-color=always", + "-g", + "${file}", + "-o", + "${fileDirname}/${fileBasenameNoExtension}" + ], + "options": { + "cwd": "${fileDirname}" + }, + "problemMatcher": [ + "$gcc" + ], + "group": { + "kind": "build", + "isDefault": true + }, + "detail": "Task generated by Debugger." + } + ], + "version": "2.0.0" +} \ No newline at end of file diff --git a/src/LICENSE b/src/LICENSE new file mode 100644 index 0000000..422c0cc --- /dev/null +++ b/src/LICENSE @@ -0,0 +1,24 @@ +The xv6 software is: + +Copyright (c) 2006-2018 Frans Kaashoek, Robert Morris, Russ Cox, + Massachusetts Institute of Technology + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 0000000..afdded3 --- /dev/null +++ b/src/Makefile @@ -0,0 +1,294 @@ +OBJS = \ + bio.o\ + console.o\ + exec.o\ + file.o\ + fs.o\ + ide.o\ + ioapic.o\ + kalloc.o\ + kbd.o\ + lapic.o\ + log.o\ + main.o\ + mp.o\ + picirq.o\ + pipe.o\ + proc.o\ + sleeplock.o\ + spinlock.o\ + string.o\ + swtch.o\ + syscall.o\ + sysfile.o\ + sysproc.o\ + trapasm.o\ + trap.o\ + uart.o\ + vectors.o\ + vm.o\ + slab.o\ + slabtest.o\ + sysslab.o\ + +# Cross-compiling (e.g., on Mac OS X) +# TOOLPREFIX = i386-jos-elf + +# Using native tools (e.g., on X86 Linux) +#TOOLPREFIX = + +# Try to infer the correct TOOLPREFIX if not set +ifndef TOOLPREFIX +TOOLPREFIX := $(shell if i386-jos-elf-objdump -i 2>&1 | grep '^elf32-i386$$' >/dev/null 2>&1; \ + then echo 'i386-jos-elf-'; \ + elif objdump -i 2>&1 | grep 'elf32-i386' >/dev/null 2>&1; \ + then echo ''; \ + else echo "***" 1>&2; \ + echo "*** Error: Couldn't find an i386-*-elf version of GCC/binutils." 1>&2; \ + echo "*** Is the directory with i386-jos-elf-gcc in your PATH?" 1>&2; \ + echo "*** If your i386-*-elf toolchain is installed with a command" 1>&2; \ + echo "*** prefix other than 'i386-jos-elf-', set your TOOLPREFIX" 1>&2; \ + echo "*** environment variable to that prefix and run 'make' again." 1>&2; \ + echo "*** To turn off this error, run 'gmake TOOLPREFIX= ...'." 1>&2; \ + echo "***" 1>&2; exit 1; fi) +endif + +# If the makefile can't find QEMU, specify its path here +# QEMU = qemu-system-i386 + +# Try to infer the correct QEMU +ifndef QEMU +QEMU = $(shell if which qemu > /dev/null; \ + then echo qemu; exit; \ + elif which qemu-system-i386 > /dev/null; \ + then echo qemu-system-i386; exit; \ + elif which qemu-system-x86_64 > /dev/null; \ + then echo qemu-system-x86_64; exit; \ + else \ + qemu=/Applications/Q.app/Contents/MacOS/i386-softmmu.app/Contents/MacOS/i386-softmmu; \ + if test -x $$qemu; then echo $$qemu; exit; fi; fi; \ + echo "***" 1>&2; \ + echo "*** Error: Couldn't find a working QEMU executable." 1>&2; \ + echo "*** Is the directory containing the qemu binary in your PATH" 1>&2; \ + echo "*** or have you tried setting the QEMU variable in Makefile?" 1>&2; \ + echo "***" 1>&2; exit 1) +endif + +CC = $(TOOLPREFIX)gcc +AS = $(TOOLPREFIX)gas +LD = $(TOOLPREFIX)ld +OBJCOPY = $(TOOLPREFIX)objcopy +OBJDUMP = $(TOOLPREFIX)objdump +CFLAGS = -fno-pic -static -fno-builtin -fno-strict-aliasing -O1 -Wall -MD -ggdb -m32 -Werror -fno-omit-frame-pointer +#CFLAGS = -fno-pic -static -fno-builtin -fno-strict-aliasing -O2 -Wall -MD -ggdb -m32 -Werror -fno-omit-frame-pointer +CFLAGS += $(shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1 && echo -fno-stack-protector) +CFLAGS += -I. +ASFLAGS = -m32 -gdwarf-2 -Wa,-divide +# FreeBSD ld wants ``elf_i386_fbsd'' +LDFLAGS += -m $(shell $(LD) -V | grep elf_i386 2>/dev/null | head -n 1) + +# Disable PIE when possible (for Ubuntu 16.10 toolchain) +ifneq ($(shell $(CC) -dumpspecs 2>/dev/null | grep -e '[^f]no-pie'),) +CFLAGS += -fno-pie -no-pie +endif +ifneq ($(shell $(CC) -dumpspecs 2>/dev/null | grep -e '[^f]nopie'),) +CFLAGS += -fno-pie -nopie +endif + +xv6.img: bootblock kernel + dd if=/dev/zero of=xv6.img count=10000 + dd if=bootblock of=xv6.img conv=notrunc + dd if=kernel of=xv6.img seek=1 conv=notrunc + +xv6memfs.img: bootblock kernelmemfs + dd if=/dev/zero of=xv6memfs.img count=10000 + dd if=bootblock of=xv6memfs.img conv=notrunc + dd if=kernelmemfs of=xv6memfs.img seek=1 conv=notrunc + +bootblock: bootasm.S bootmain.c + $(CC) $(CFLAGS) -fno-pic -O -nostdinc -I. -c bootmain.c + $(CC) $(CFLAGS) -fno-pic -nostdinc -I. -c bootasm.S + $(LD) $(LDFLAGS) -N -e start -Ttext 0x7C00 -o bootblock.o bootasm.o bootmain.o + $(OBJDUMP) -S bootblock.o > bootblock.asm + $(OBJCOPY) -S -O binary -j .text bootblock.o bootblock + ./sign.pl bootblock + +entryother: entryother.S + $(CC) $(CFLAGS) -fno-pic -nostdinc -I. -c entryother.S + $(LD) $(LDFLAGS) -N -e start -Ttext 0x7000 -o bootblockother.o entryother.o + $(OBJCOPY) -S -O binary -j .text bootblockother.o entryother + $(OBJDUMP) -S bootblockother.o > entryother.asm + +initcode: initcode.S + $(CC) $(CFLAGS) -nostdinc -I. -c initcode.S + $(LD) $(LDFLAGS) -N -e start -Ttext 0 -o initcode.out initcode.o + $(OBJCOPY) -S -O binary initcode.out initcode + $(OBJDUMP) -S initcode.o > initcode.asm + +kernel: $(OBJS) entry.o entryother initcode kernel.ld + $(LD) $(LDFLAGS) -T kernel.ld -o kernel entry.o $(OBJS) -b binary initcode entryother + $(OBJDUMP) -S kernel > kernel.asm + $(OBJDUMP) -t kernel | sed '1,/SYMBOL TABLE/d; s/ .* / /; /^$$/d' > kernel.sym + +# kernelmemfs is a copy of kernel that maintains the +# disk image in memory instead of writing to a disk. +# This is not so useful for testing persistent storage or +# exploring disk buffering implementations, but it is +# great for testing the kernel on real hardware without +# needing a scratch disk. +MEMFSOBJS = $(filter-out ide.o,$(OBJS)) memide.o +kernelmemfs: $(MEMFSOBJS) entry.o entryother initcode kernel.ld fs.img + $(LD) $(LDFLAGS) -T kernel.ld -o kernelmemfs entry.o $(MEMFSOBJS) -b binary initcode entryother fs.img + $(OBJDUMP) -S kernelmemfs > kernelmemfs.asm + $(OBJDUMP) -t kernelmemfs | sed '1,/SYMBOL TABLE/d; s/ .* / /; /^$$/d' > kernelmemfs.sym + +tags: $(OBJS) entryother.S _init + etags *.S *.c + +vectors.S: vectors.pl + ./vectors.pl > vectors.S + +ULIB = ulib.o usys.o printf.o umalloc.o + +_%: %.o $(ULIB) + $(LD) $(LDFLAGS) -N -e main -Ttext 0 -o $@ $^ + $(OBJDUMP) -S $@ > $*.asm + $(OBJDUMP) -t $@ | sed '1,/SYMBOL TABLE/d; s/ .* / /; /^$$/d' > $*.sym + +_forktest: forktest.o $(ULIB) + # forktest has less library code linked in - needs to be small + # in order to be able to max out the proc table. + $(LD) $(LDFLAGS) -N -e main -Ttext 0 -o _forktest forktest.o ulib.o usys.o + $(OBJDUMP) -S _forktest > forktest.asm + +mkfs: mkfs.c fs.h + gcc -Werror -Wall -o mkfs mkfs.c + +# Prevent deletion of intermediate files, e.g. cat.o, after first build, so +# that disk image changes after first build are persistent until clean. More +# details: +# http://www.gnu.org/software/make/manual/html_node/Chained-Rules.html +.PRECIOUS: %.o + +U=user +UPROGS=\ + $U/_cat\ + $U/_echo\ + $U/_forktest\ + $U/_grep\ + $U/_init\ + $U/_kill\ + $U/_ln\ + $U/_ls\ + $U/_mkdir\ + $U/_rm\ + $U/_sh\ + $U/_stressfs\ + $U/_usertests\ + $U/_wc\ + $U/_zombie\ + $U/_slabtest\ + $U/_ps\ + +fs.img: mkfs README $(UPROGS) + ./mkfs fs.img README $(UPROGS) + +-include *.d + +clean: + rm -f *.tex *.dvi *.idx *.aux *.log *.ind *.ilg \ + *.o *.d *.asm *.sym vectors.S bootblock entryother \ + initcode initcode.out kernel xv6.img fs.img kernelmemfs \ + xv6memfs.img mkfs .gdbinit \ + $(UPROGS) $(U)/*.o $(U)/*.d $(U)/*.asm $(U)/*.sym + +# make a printout +FILES = $(shell grep -v '^\#' runoff.list) +PRINT = runoff.list runoff.spec README toc.hdr toc.ftr $(FILES) + +xv6.pdf: $(PRINT) + ./runoff + ls -l xv6.pdf + +print: xv6.pdf + +# run in emulators + +bochs : fs.img xv6.img + if [ ! -e .bochsrc ]; then ln -s dot-bochsrc .bochsrc; fi + bochs -q + +# try to generate a unique GDB port +GDBPORT = $(shell expr `id -u` % 5000 + 25000) +# QEMU's gdb stub command line changed in 0.11 +QEMUGDB = $(shell if $(QEMU) -help | grep -q '^-gdb'; \ + then echo "-gdb tcp::$(GDBPORT)"; \ + else echo "-s -p $(GDBPORT)"; fi) +ifndef CPUS +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) + +qemu: fs.img xv6.img + $(QEMU) -serial mon:stdio $(QEMUOPTS) + +qemu-memfs: xv6memfs.img + $(QEMU) -drive file=xv6memfs.img,index=0,media=disk,format=raw -smp $(CPUS) -m 256 + +qemu-nox: fs.img xv6.img + $(QEMU) -nographic $(QEMUOPTS) + +.gdbinit: .gdbinit.tmpl + sed "s/localhost:1234/localhost:$(GDBPORT)/" < $^ > $@ + +qemu-gdb: fs.img xv6.img .gdbinit + @echo "*** Now run 'gdb'." 1>&2 + $(QEMU) -serial mon:stdio $(QEMUOPTS) -S $(QEMUGDB) + +qemu-nox-gdb: fs.img xv6.img .gdbinit + @echo "*** Now run 'gdb'." 1>&2 + $(QEMU) -nographic $(QEMUOPTS) -S $(QEMUGDB) + +# CUT HERE +# prepare dist for students +# after running make dist, probably want to +# rename it to rev0 or rev1 or so on and then +# check in that version. + +EXTRA=\ + mkfs.c ulib.c user.h cat.c echo.c forktest.c grep.c kill.c\ + ln.c ls.c mkdir.c rm.c stressfs.c usertests.c wc.c zombie.c\ + printf.c umalloc.c\ + README dot-bochsrc *.pl toc.* runoff runoff1 runoff.list\ + .gdbinit.tmpl gdbutil\ + +dist: + rm -rf dist + mkdir dist + for i in $(FILES); \ + do \ + grep -v PAGEBREAK $$i >dist/$$i; \ + done + sed '/CUT HERE/,$$d' Makefile >dist/Makefile + echo >dist/runoff.spec + cp $(EXTRA) dist + +dist-test: + rm -rf dist + make dist + rm -rf dist-test + mkdir dist-test + cp dist/* dist-test + cd dist-test; $(MAKE) print + cd dist-test; $(MAKE) bochs || true + cd dist-test; $(MAKE) qemu + +# update this rule (change rev#) when it is time to +# make a new revision. +tar: + rm -rf /tmp/xv6 + mkdir -p /tmp/xv6 + cp dist/* dist/.gdbinit.tmpl /tmp/xv6 + (cd /tmp; tar cf - xv6) | gzip >xv6-rev10.tar.gz # the next one will be 10 (9/17) + +.PHONY: dist-test dist diff --git a/src/README b/src/README new file mode 100644 index 0000000..842f487 --- /dev/null +++ b/src/README @@ -0,0 +1,48 @@ +xv6 is a re-implementation of Dennis Ritchie's and Ken Thompson's Unix +Version 6 (v6). xv6 loosely follows the structure and style of v6, +but is implemented for a modern x86-based multiprocessor using ANSI C. + +ACKNOWLEDGMENTS + +xv6 is inspired by John Lions's Commentary on UNIX 6th Edition (Peer +to Peer Communications; ISBN: 1-57398-013-7; 1st edition (June 14, +2000)). See also https://pdos.csail.mit.edu/6.828/, which +provides pointers to on-line resources for v6. + +xv6 borrows code from the following sources: + JOS (asm.h, elf.h, mmu.h, bootasm.S, ide.c, console.c, and others) + Plan 9 (entryother.S, mp.h, mp.c, lapic.c) + FreeBSD (ioapic.c) + NetBSD (console.c) + +The following people have made contributions: Russ Cox (context switching, +locking), Cliff Frey (MP), Xiao Yu (MP), Nickolai Zeldovich, and Austin +Clements. + +We are also grateful for the bug reports and patches contributed by Silas +Boyd-Wickizer, Anton Burtsev, Cody Cutler, Mike CAT, Tej Chajed, eyalz800, +Nelson Elhage, Saar Ettinger, Alice Ferrazzi, Nathaniel Filardo, Peter +Froehlich, Yakir Goaron,Shivam Handa, Bryan Henry, Jim Huang, Alexander +Kapshuk, Anders Kaseorg, kehao95, Wolfgang Keller, Eddie Kohler, Austin +Liew, Imbar Marinescu, Yandong Mao, Matan Shabtay, Hitoshi Mitake, Carmi +Merimovich, Mark Morrissey, mtasm, Joel Nider, Greg Price, Ayan Shafqat, +Eldar Sehayek, Yongming Shen, Cam Tenny, tyfkda, Rafael Ubal, Warren +Toomey, Stephen Tu, Pablo Ventura, Xi Wang, Keiichi Watanabe, Nicolas +Wolovick, wxdao, Grant Wu, Jindong Zhang, Icenowy Zheng, and Zou Chang Wei. + +The code in the files that constitute xv6 is +Copyright 2006-2018 Frans Kaashoek, Robert Morris, and Russ Cox. + +ERROR REPORTS + +We switched our focus to xv6 on RISC-V; see the mit-pdos/xv6-riscv.git +repository on github.com. + +BUILDING AND RUNNING XV6 + +To build xv6 on an x86 ELF machine (like Linux or FreeBSD), run +"make". On non-x86 or non-ELF machines (like OS X, even on x86), you +will need to install a cross-compiler gcc suite capable of producing +x86 ELF binaries (see https://pdos.csail.mit.edu/6.828/). +Then run "make TOOLPREFIX=i386-jos-elf-". Now install the QEMU PC +simulator and run "make qemu". \ No newline at end of file diff --git a/src/bio.d b/src/bio.d new file mode 100644 index 0000000..b4bbd30 --- /dev/null +++ b/src/bio.d @@ -0,0 +1,2 @@ +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/src/bio.o b/src/bio.o new file mode 100644 index 0000000000000000000000000000000000000000..b38357bdc0847747f8fd4204554071f1aceb2791 GIT binary patch literal 6744 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 literal 0 HcmV?d00001 diff --git a/src/bootasm.d b/src/bootasm.d new file mode 100644 index 0000000..3b3dc19 --- /dev/null +++ b/src/bootasm.d @@ -0,0 +1 @@ +bootasm.o: bootasm.S asm.h memlayout.h mmu.h diff --git a/src/bootasm.o b/src/bootasm.o new file mode 100644 index 0000000000000000000000000000000000000000..4347d69663b17109977fb3f03726153969d7db97 GIT binary patch literal 1704 zcma)6OKTHR6h4!&KHDU$cD{5{N-*m!xcF>b3W^dhPAU;)_^ybNStRF+v~K^9iGCQ4*=T`|ypC=&OIu z$WC!rk`hL^DI|k-6vs1kwydP`D!Siu1dG$ zVVDNDpsgd2==^)UjeV@7W*5o?E4dbmhSjH}sd^jnrSY*|BAhRg88XzuKd z9Ber&GclPPwQ@tTKIE}x7UmtRTBw%&s^wLtrLeHz+unS7Ttg`)79*HZb82^4Xg8RJ zjr#^h*4=LGO_=eX_&~g)g>E?j4mwf;h8_gc3EHamMBNhg&Ym-x-VZ#f>4U&|O>aT~6IZR18C2V{n3$DLrtHvF#J9;Y&5}g- z+23?1p5xoup>#%ptdxp=(eb9m^X-a1oE7ipY?;Q;5KMC3hDlNg@5DfkNAet`(I#>U zG8PxPLmmD;$~_YFLdkhho{aoFrGcR$R191+Um4@NC|gDLNAh4Kw^Jf0Nr`=u_HNJn zb^+3_gmOlqiZhq?okd^LMccO}UGO|f(^zy0)zZ}5Y}tXUiKh^!`)AAUg7VviLdChI zd+mx{E;&dTCSdIUQZIW4^DHF(5A^pM{U(Ap&-XS4CVj;t=bOQJgLv-a{01W3ge1KT zMRR2>(orz?|7#!nQ89o)z7j!1$~OdE@2?YyQ?Ri=zE0KO7%*eFpR^AOdsajr`C25E z{WOe+l%n~r0_$~0P?xz`m*-P;^T5ojr~su?DUiy?n^TzXMJOqPh?tX92J3Z;sGEe1 zb@8N|bsqpTpE~a|D2JgdqEB)7-wHi-7{37~!2BL~4(4Y~b!ULGjG$8l5iu8u-;Tb| Mhw?b^gp1nu3moLUmjD0& literal 0 HcmV?d00001 diff --git a/src/bootblock b/src/bootblock index ed06193455a5cb20711ad1d70eaae99ea92fc28c..202d24f41c5021ffb1d5598ef20f059dc68fa671 100755 GIT binary patch delta 116 zcmZo*X<(V)$@pQSmx;u#?~Du#Z<-$*uyH8;aX7T|X?SpVEYFLl6X&@}%=`cUe|Ig% z&ISeshFu?k>i&GrjgF5!Jc&`4F@3TgqqI0keOPew8-Xl_3e!1VfzB4i~ylH-Lz{a8U$6=62Xy?=L;OZ@C7y}qxCNE|5WC~pc0R6l-V*mgE diff --git a/src/bootblock.asm b/src/bootblock.asm index 0062ca4..ee41e37 100644 --- a/src/bootblock.asm +++ b/src/bootblock.asm @@ -60,7 +60,7 @@ seta20.2: # effective memory map doesn't change during the transition. lgdt gdtdesc 7c1d: 0f 01 16 lgdtl (%esi) - 7c20: 78 7c js 7c9e + 7c20: 78 7c js 7c9e movl %cr0, %eax 7c22: 0f 20 c0 mov %cr0,%eax orl $CR0_PE, %eax @@ -100,7 +100,7 @@ start32: movl $start, %esp 7c43: bc 00 7c 00 00 mov $0x7c00,%esp call bootmain - 7c48: e8 fc 00 00 00 call 7d49 + 7c48: e8 f0 00 00 00 call 7d3d # If bootmain returns (it shouldn't), trigger a Bochs # breakpoint if running under Bochs, then loop. @@ -138,224 +138,218 @@ spin: ... 00007c7e : - entry(); -} - -void -waitdisk(void) -{ - 7c7e: f3 0f 1e fb endbr32 static inline uchar inb(ushort port) { uchar data; asm volatile("in %1,%0" : "=a" (data) : "d" (port)); - 7c82: ba f7 01 00 00 mov $0x1f7,%edx - 7c87: ec in (%dx),%al + 7c7e: ba f7 01 00 00 mov $0x1f7,%edx + 7c83: ec in (%dx),%al + +void +waitdisk(void) +{ // Wait for disk ready. while((inb(0x1F7) & 0xC0) != 0x40) - 7c88: 83 e0 c0 and $0xffffffc0,%eax - 7c8b: 3c 40 cmp $0x40,%al - 7c8d: 75 f8 jne 7c87 + 7c84: 83 e0 c0 and $0xffffffc0,%eax + 7c87: 3c 40 cmp $0x40,%al + 7c89: 75 f8 jne 7c83 ; } - 7c8f: c3 ret + 7c8b: c3 ret -00007c90 : +00007c8c : // Read a single sector at offset into dst. void readsect(void *dst, uint offset) { - 7c90: f3 0f 1e fb endbr32 - 7c94: 55 push %ebp - 7c95: 89 e5 mov %esp,%ebp - 7c97: 57 push %edi - 7c98: 53 push %ebx - 7c99: 8b 5d 0c mov 0xc(%ebp),%ebx + 7c8c: 55 push %ebp + 7c8d: 89 e5 mov %esp,%ebp + 7c8f: 57 push %edi + 7c90: 53 push %ebx + 7c91: 8b 5d 0c mov 0xc(%ebp),%ebx // Issue command. waitdisk(); - 7c9c: e8 dd ff ff ff call 7c7e + 7c94: e8 e5 ff ff ff call 7c7e } static inline void outb(ushort port, uchar data) { asm volatile("out %0,%1" : : "a" (data), "d" (port)); - 7ca1: b8 01 00 00 00 mov $0x1,%eax - 7ca6: ba f2 01 00 00 mov $0x1f2,%edx + 7c99: b8 01 00 00 00 mov $0x1,%eax + 7c9e: ba f2 01 00 00 mov $0x1f2,%edx + 7ca3: ee out %al,(%dx) + 7ca4: ba f3 01 00 00 mov $0x1f3,%edx + 7ca9: 89 d8 mov %ebx,%eax 7cab: ee out %al,(%dx) - 7cac: ba f3 01 00 00 mov $0x1f3,%edx - 7cb1: 89 d8 mov %ebx,%eax - 7cb3: ee out %al,(%dx) outb(0x1F2, 1); // count = 1 outb(0x1F3, offset); outb(0x1F4, offset >> 8); - 7cb4: 89 d8 mov %ebx,%eax - 7cb6: c1 e8 08 shr $0x8,%eax - 7cb9: ba f4 01 00 00 mov $0x1f4,%edx - 7cbe: ee out %al,(%dx) + 7cac: 89 d8 mov %ebx,%eax + 7cae: c1 e8 08 shr $0x8,%eax + 7cb1: ba f4 01 00 00 mov $0x1f4,%edx + 7cb6: ee out %al,(%dx) outb(0x1F5, offset >> 16); - 7cbf: 89 d8 mov %ebx,%eax - 7cc1: c1 e8 10 shr $0x10,%eax - 7cc4: ba f5 01 00 00 mov $0x1f5,%edx - 7cc9: ee out %al,(%dx) + 7cb7: 89 d8 mov %ebx,%eax + 7cb9: c1 e8 10 shr $0x10,%eax + 7cbc: ba f5 01 00 00 mov $0x1f5,%edx + 7cc1: ee out %al,(%dx) outb(0x1F6, (offset >> 24) | 0xE0); - 7cca: 89 d8 mov %ebx,%eax - 7ccc: c1 e8 18 shr $0x18,%eax - 7ccf: 83 c8 e0 or $0xffffffe0,%eax - 7cd2: ba f6 01 00 00 mov $0x1f6,%edx - 7cd7: ee out %al,(%dx) - 7cd8: b8 20 00 00 00 mov $0x20,%eax - 7cdd: ba f7 01 00 00 mov $0x1f7,%edx - 7ce2: ee out %al,(%dx) + 7cc2: 89 d8 mov %ebx,%eax + 7cc4: c1 e8 18 shr $0x18,%eax + 7cc7: 83 c8 e0 or $0xffffffe0,%eax + 7cca: ba f6 01 00 00 mov $0x1f6,%edx + 7ccf: ee out %al,(%dx) + 7cd0: b8 20 00 00 00 mov $0x20,%eax + 7cd5: ba f7 01 00 00 mov $0x1f7,%edx + 7cda: ee out %al,(%dx) outb(0x1F7, 0x20); // cmd 0x20 - read sectors // Read data. waitdisk(); - 7ce3: e8 96 ff ff ff call 7c7e + 7cdb: e8 9e ff ff ff call 7c7e asm volatile("cld; rep insl" : - 7ce8: 8b 7d 08 mov 0x8(%ebp),%edi - 7ceb: b9 80 00 00 00 mov $0x80,%ecx - 7cf0: ba f0 01 00 00 mov $0x1f0,%edx - 7cf5: fc cld - 7cf6: f3 6d rep insl (%dx),%es:(%edi) + 7ce0: 8b 7d 08 mov 0x8(%ebp),%edi + 7ce3: b9 80 00 00 00 mov $0x80,%ecx + 7ce8: ba f0 01 00 00 mov $0x1f0,%edx + 7ced: fc cld + 7cee: f3 6d rep insl (%dx),%es:(%edi) insl(0x1F0, dst, SECTSIZE/4); } - 7cf8: 5b pop %ebx - 7cf9: 5f pop %edi - 7cfa: 5d pop %ebp - 7cfb: c3 ret + 7cf0: 5b pop %ebx + 7cf1: 5f pop %edi + 7cf2: 5d pop %ebp + 7cf3: c3 ret -00007cfc : +00007cf4 : // Read 'count' bytes at 'offset' from kernel into physical address 'pa'. // Might copy more than asked. void readseg(uchar* pa, uint count, uint offset) { - 7cfc: f3 0f 1e fb endbr32 - 7d00: 55 push %ebp - 7d01: 89 e5 mov %esp,%ebp - 7d03: 57 push %edi - 7d04: 56 push %esi - 7d05: 53 push %ebx - 7d06: 83 ec 0c sub $0xc,%esp - 7d09: 8b 5d 08 mov 0x8(%ebp),%ebx - 7d0c: 8b 75 10 mov 0x10(%ebp),%esi + 7cf4: 55 push %ebp + 7cf5: 89 e5 mov %esp,%ebp + 7cf7: 57 push %edi + 7cf8: 56 push %esi + 7cf9: 53 push %ebx + 7cfa: 83 ec 0c sub $0xc,%esp + 7cfd: 8b 5d 08 mov 0x8(%ebp),%ebx + 7d00: 8b 75 10 mov 0x10(%ebp),%esi uchar* epa; epa = pa + count; - 7d0f: 89 df mov %ebx,%edi - 7d11: 03 7d 0c add 0xc(%ebp),%edi + 7d03: 89 df mov %ebx,%edi + 7d05: 03 7d 0c add 0xc(%ebp),%edi // Round down to sector boundary. pa -= offset % SECTSIZE; - 7d14: 89 f0 mov %esi,%eax - 7d16: 25 ff 01 00 00 and $0x1ff,%eax - 7d1b: 29 c3 sub %eax,%ebx + 7d08: 89 f0 mov %esi,%eax + 7d0a: 25 ff 01 00 00 and $0x1ff,%eax + 7d0f: 29 c3 sub %eax,%ebx // Translate from bytes to sectors; kernel starts at sector 1. offset = (offset / SECTSIZE) + 1; - 7d1d: c1 ee 09 shr $0x9,%esi - 7d20: 83 c6 01 add $0x1,%esi + 7d11: c1 ee 09 shr $0x9,%esi + 7d14: 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++) - 7d23: 39 df cmp %ebx,%edi - 7d25: 76 1a jbe 7d41 + 7d17: 39 df cmp %ebx,%edi + 7d19: 76 1a jbe 7d35 readsect(pa, offset); - 7d27: 83 ec 08 sub $0x8,%esp - 7d2a: 56 push %esi - 7d2b: 53 push %ebx - 7d2c: e8 5f ff ff ff call 7c90 + 7d1b: 83 ec 08 sub $0x8,%esp + 7d1e: 56 push %esi + 7d1f: 53 push %ebx + 7d20: e8 67 ff ff ff call 7c8c for(; pa < epa; pa += SECTSIZE, offset++) - 7d31: 81 c3 00 02 00 00 add $0x200,%ebx - 7d37: 83 c6 01 add $0x1,%esi - 7d3a: 83 c4 10 add $0x10,%esp - 7d3d: 39 df cmp %ebx,%edi - 7d3f: 77 e6 ja 7d27 + 7d25: 81 c3 00 02 00 00 add $0x200,%ebx + 7d2b: 83 c6 01 add $0x1,%esi + 7d2e: 83 c4 10 add $0x10,%esp + 7d31: 39 df cmp %ebx,%edi + 7d33: 77 e6 ja 7d1b } - 7d41: 8d 65 f4 lea -0xc(%ebp),%esp - 7d44: 5b pop %ebx - 7d45: 5e pop %esi - 7d46: 5f pop %edi - 7d47: 5d pop %ebp - 7d48: c3 ret - -00007d49 : + 7d35: 8d 65 f4 lea -0xc(%ebp),%esp + 7d38: 5b pop %ebx + 7d39: 5e pop %esi + 7d3a: 5f pop %edi + 7d3b: 5d pop %ebp + 7d3c: c3 ret + +00007d3d : { - 7d49: f3 0f 1e fb endbr32 - 7d4d: 55 push %ebp - 7d4e: 89 e5 mov %esp,%ebp - 7d50: 57 push %edi - 7d51: 56 push %esi - 7d52: 53 push %ebx - 7d53: 83 ec 10 sub $0x10,%esp + 7d3d: 55 push %ebp + 7d3e: 89 e5 mov %esp,%ebp + 7d40: 57 push %edi + 7d41: 56 push %esi + 7d42: 53 push %ebx + 7d43: 83 ec 10 sub $0x10,%esp readseg((uchar*)elf, 4096, 0); - 7d56: 6a 00 push $0x0 - 7d58: 68 00 10 00 00 push $0x1000 - 7d5d: 68 00 00 01 00 push $0x10000 - 7d62: e8 95 ff ff ff call 7cfc + 7d46: 6a 00 push $0x0 + 7d48: 68 00 10 00 00 push $0x1000 + 7d4d: 68 00 00 01 00 push $0x10000 + 7d52: e8 9d ff ff ff call 7cf4 if(elf->magic != ELF_MAGIC) - 7d67: 83 c4 10 add $0x10,%esp - 7d6a: 81 3d 00 00 01 00 7f cmpl $0x464c457f,0x10000 - 7d71: 45 4c 46 - 7d74: 75 21 jne 7d97 + 7d57: 83 c4 10 add $0x10,%esp + 7d5a: 81 3d 00 00 01 00 7f cmpl $0x464c457f,0x10000 + 7d61: 45 4c 46 + 7d64: 75 21 jne 7d87 ph = (struct proghdr*)((uchar*)elf + elf->phoff); - 7d76: a1 1c 00 01 00 mov 0x1001c,%eax - 7d7b: 8d 98 00 00 01 00 lea 0x10000(%eax),%ebx + 7d66: a1 1c 00 01 00 mov 0x1001c,%eax + 7d6b: 8d 98 00 00 01 00 lea 0x10000(%eax),%ebx eph = ph + elf->phnum; - 7d81: 0f b7 35 2c 00 01 00 movzwl 0x1002c,%esi - 7d88: c1 e6 05 shl $0x5,%esi - 7d8b: 01 de add %ebx,%esi + 7d71: 0f b7 35 2c 00 01 00 movzwl 0x1002c,%esi + 7d78: c1 e6 05 shl $0x5,%esi + 7d7b: 01 de add %ebx,%esi for(; ph < eph; ph++){ - 7d8d: 39 f3 cmp %esi,%ebx - 7d8f: 72 15 jb 7da6 + 7d7d: 39 f3 cmp %esi,%ebx + 7d7f: 72 15 jb 7d96 entry(); - 7d91: ff 15 18 00 01 00 call *0x10018 + 7d81: ff 15 18 00 01 00 call *0x10018 } - 7d97: 8d 65 f4 lea -0xc(%ebp),%esp - 7d9a: 5b pop %ebx - 7d9b: 5e pop %esi - 7d9c: 5f pop %edi - 7d9d: 5d pop %ebp - 7d9e: c3 ret + 7d87: 8d 65 f4 lea -0xc(%ebp),%esp + 7d8a: 5b pop %ebx + 7d8b: 5e pop %esi + 7d8c: 5f pop %edi + 7d8d: 5d pop %ebp + 7d8e: c3 ret for(; ph < eph; ph++){ - 7d9f: 83 c3 20 add $0x20,%ebx - 7da2: 39 de cmp %ebx,%esi - 7da4: 76 eb jbe 7d91 + 7d8f: 83 c3 20 add $0x20,%ebx + 7d92: 39 de cmp %ebx,%esi + 7d94: 76 eb jbe 7d81 pa = (uchar*)ph->paddr; - 7da6: 8b 7b 0c mov 0xc(%ebx),%edi + 7d96: 8b 7b 0c mov 0xc(%ebx),%edi readseg(pa, ph->filesz, ph->off); - 7da9: 83 ec 04 sub $0x4,%esp - 7dac: ff 73 04 pushl 0x4(%ebx) - 7daf: ff 73 10 pushl 0x10(%ebx) - 7db2: 57 push %edi - 7db3: e8 44 ff ff ff call 7cfc + 7d99: 83 ec 04 sub $0x4,%esp + 7d9c: ff 73 04 push 0x4(%ebx) + 7d9f: ff 73 10 push 0x10(%ebx) + 7da2: 57 push %edi + 7da3: e8 4c ff ff ff call 7cf4 if(ph->memsz > ph->filesz) - 7db8: 8b 4b 14 mov 0x14(%ebx),%ecx - 7dbb: 8b 43 10 mov 0x10(%ebx),%eax - 7dbe: 83 c4 10 add $0x10,%esp - 7dc1: 39 c1 cmp %eax,%ecx - 7dc3: 76 da jbe 7d9f + 7da8: 8b 4b 14 mov 0x14(%ebx),%ecx + 7dab: 8b 43 10 mov 0x10(%ebx),%eax + 7dae: 83 c4 10 add $0x10,%esp + 7db1: 39 c1 cmp %eax,%ecx + 7db3: 76 da jbe 7d8f stosb(pa + ph->filesz, 0, ph->memsz - ph->filesz); - 7dc5: 01 c7 add %eax,%edi - 7dc7: 29 c1 sub %eax,%ecx + 7db5: 01 c7 add %eax,%edi + 7db7: 29 c1 sub %eax,%ecx } static inline void stosb(void *addr, int data, int cnt) { asm volatile("cld; rep stosb" : - 7dc9: b8 00 00 00 00 mov $0x0,%eax - 7dce: fc cld - 7dcf: f3 aa rep stos %al,%es:(%edi) + 7db9: b8 00 00 00 00 mov $0x0,%eax + 7dbe: fc cld + 7dbf: f3 aa rep stos %al,%es:(%edi) "=D" (addr), "=c" (cnt) : "0" (addr), "1" (cnt), "a" (data) : "memory", "cc"); } - 7dd1: eb cc jmp 7d9f + 7dc1: eb cc jmp 7d8f diff --git a/src/bootblock.o b/src/bootblock.o new file mode 100755 index 0000000000000000000000000000000000000000..457d787117542aad71906299a3adc06da7274b1b GIT binary patch literal 5664 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 QC)>^NF!ua}*VQ@wAMB*HJOBUy literal 0 HcmV?d00001 diff --git a/src/bootblockother.o b/src/bootblockother.o new file mode 100755 index 0000000000000000000000000000000000000000..091fcf54a63661c12e73679092a17b4305a2a12c GIT binary patch literal 1264 zcma)6O=}ZT6uocKXjPg?{b+@Xowfu;Fw-_&R52}Gs9?lRRmdt#nwcihPU6f&?8-vB zs8NErbRqgLvJ7tQt}eUGvgo1+E=0w6?wffqts5`gk8|#MAM>? zpdKWrlcrGMbcou$_JMBnwszC{WbecGI*~rPk3mC%#3n|)%=`w|zwiSQ`j+$JqjTtV zdM)Sh>z~(HPFlZ@^mdPAezQlTw8p!mOK^<~xih3_zmh_jfG0`tw!`O^0(k;Mpe{4L zDTXOMIxNoWiPTsslRB3KYr&J4^cpLK_>~&s!~@|d#^oHE7}s=d7%a&^NsSjsTohBL zY37Rg!qQFwRl%Ie=NF0#`Ql==TF9G)X>9_t*lyr$)Pt(+WtYjU*4J&bS#G*P)AYR+ zy8Gafv9xT=W^?oZHjfPD^^cm|T|^Dgw|)xswmdN=1&tu`+X_v{gQ&&u6dK_PvqI1n z#8%W#1Luz6o4~JP{p-Md5^Sue*naD@S_vw)ze0Xsc|mTL{6@`Xl1inr@0TP^CA(q; z7Lr>b%K97YfmKEhyf9Z)71+-L%2w=hbG2l7mb+^E3f5ewu4=1X_Uxw$t<_vx)tE?? zOk;U3-1vXQF=+U#`EKy@^1b1^qD+2x02A=|JLv%%aAkv0F^wG8F~}%UtamF`b2|gw zc`hPTbKC<~HMed6*pY^l>OGEXUZ3q98vN-iV;#E{Wu@B%$(Kl((s2&&W!O0Y@gC(V l_z5_lOFF{QF9?We2ZI)66$YM%jc-?6_X)ZuvJ(cS`wLMowQ2wW literal 0 HcmV?d00001 diff --git a/src/bootmain.d b/src/bootmain.d new file mode 100644 index 0000000..b32eaf5 --- /dev/null +++ b/src/bootmain.d @@ -0,0 +1 @@ +bootmain.o: bootmain.c types.h elf.h x86.h memlayout.h diff --git a/src/bootmain.o b/src/bootmain.o new file mode 100644 index 0000000000000000000000000000000000000000..29ffe4d92210f7b2c5a0ccd675b170bd5aea993f GIT binary patch literal 6760 zcma)A3vg7`89wJeHk;i|vSjmwKz0!@2-y%oG!T?WP@`5f5TeycH=9j%YqA^n5d^WI z@c~k5GcYPs9j$ey)2dT#t0MR)MYMJtN2g=Q*QnF_V5&tFU$wOK`_4T#1p1hs*>k@C z|IYva=bZnZd+)isX~l)-NGXL|q%g&CO^BDPoSyj#8br0I5_`Ua#m6J>{-$+F;p_dK zTi@?mwXHjF@aVB)$9B_q&u3^4?Ky&W>uZO$zP9h6chBdfCBg{!RG4kod7s!!>M*FIM+Prn+pWe~vufnyz_xDhwnA|0JLYwPt%s){gT>7K`wkV4 zJSSV;8J;-uv3JcX73BK;!Vm)V$g{zgch-HdJ@NVFSB?u5{H{ofpg@BaD-Rf6znI!4 zWTg=KaUI0%cakW3{Pfv?eIMBJ?Up0i%43x^?9&lP_J>>E9{y07KH`<{G%7UZ6RzSEfNzZViA)kP}F4w2$te|(8xJxd{)s@ zB;H12EG1zST|weTG-d}0=_Oxs1kHR;4I;<@nj-HE5TZ0O&?mgbiv9+AvF{ADL21Fn zr{r>ZKN!C(v$dyW-E6UG<(g3#*SM3)ie*}bUcYu+c_e3?GD9!ZsiAhS9 zw}P%yqF2^Jo~-16d<^mwB?sk7$n{FDP}2@8xki?Nk0`lL_{%ZK%3(0=sPe9VK&=>x z3Ar*z5nDwBP|HGSR@O4Br=Zr8@{pQNidmh9YA4`%iI0vKLOlo7`Y9R%ds29~NdN6< zT1(Mj2V%INnaDzKE-z$jkg_oNUAyngQ z*jx)?J*rS1%A1WBb?Ke1$IZ~Vd6dTwAbcNHcsWLtG?%%|eBL$R1@#W{9N<0(_o6!H zEf9=}XqKB_y5X^5Yj-Y8Xr*oa0{ywPBkf%BK#!INq^trbUHeB$E zF4yBtXs@%29^65HMioV62-X8Zvf(9bznvaUpbtYkglbHK!oBo0m0Bn!u9A8PT1@N% zaIol3K~!6Qri0g1l%mSJJ_B8|2yXb{9%Hk>XPgJE6mfXZ)smdJ3QR4uYE+a-+$pkL za+%D%yz2qXypH#!tSF}pPS`_9Q5kv|+9`0WN5xJ8RYPh4)VZjW8)#eQdkoyU(D}Hq zvEQoIe(Qv`3e~$8-Df~hH}lM*JE0nHqKSd)MxF996k!}dyB=x*RangF4oDX7T?)c; z85`b{^`1vz8~7pgSsy|&x!Y%zaJQPR6sySw7NjjR!+zK$>R8GP06sv#&x3*cj zFk&t8xA@ybXJYdhwrCC+)sHW$hM%o^4W}2YJx^RGH(|@$^M&bM7?Dngw)T_>f5d7> zchO|o9O{s}m-#2ia?hm^d6~Z}VoLOQ$9g)e9o|p6xJnIVB3`715q#5x-+z|h#9s18 z<=M5IBu9(LQ)?M>NzH~@ItHSWU7R7i!pWsh8S(T*f~9rIIb+e2X(O&uQr8)hr^wJo?;onj5|ka+Z3JLFy|S1HaK zej1czJuRP+Mjl~Ntl?eYyw)!Hq?BtE1@cz;l$2f8Q}Su)9TlEY%QN*JLcLUj%6g;BZUigNWV4(Nj{)KmHZ~s2YF_3% zX`2<6;W0aKbh0P&Ipi^;ms$o)Ae$GVpF+i06Hzu})@Gx$<*;YE2Zo*-FQcQmhCw|K zGSp0|m`=sqK;|@uSxp8*R%ymG*Ie4i{#j1{s^k5NG0je=f40-#q5G>n=4@$C;fzgl zb*l=|=$Krh236CTBb}MGDe5zfE6qjHbFrHB`xSPP5-zucKu;bkX|^jM`dT3_wFA<| z#GnM>qFY#`O27V%60@2jC$Z*NxgWHR}|SSl?N>3nv*SQks> zdsDfqgzD^#f|>%zTt1uby+#aSLITGP_T|?PB}Ar>?-7Hscrukv0Q*yMJ$Ao1_oB}5^5!$b z&CSvI(K+G9!FhAh2WIvkI6LoYh6Kr+?G$Z^V4r~C0bkI=`9IhGlRGew#D7^B77wY^3a@S6M{2my)x5sWiN9Z3j!l?%ShEIqqHU5N%G`&j1bY~zW(F>g)_WZV# zP|AtLI3{W2my*QWWGWG9Ih6>zc^dfwqTZ%aeT_orCpP(SYfNa|sBw$Nof_}e_@Kt! z8lTnpvc|VG9@O}`My814@r#ByQ{#M%7ijF#7}uE5c&)};H15>6i-`6Al86)kV;cAB z{sUTnLE}rBe@*LeY5YjzCmQ)56XTkwoUfONIz#I%T0cwU#YBw1T4T4yn8vG!s6!fW z(EQCBZ_~I#+LX z)tDqA-XIb4*{J!=8gJ9ML*p(Y?C;a~BoX60r|}hypJ@D>MhkPL9X`MmPSiMEW4p%H z8Zi|iu~xnp)Ov|{e$3X`tZ{+HMH-iAJfDbphJiTdi1`|?(6~jTi00N0;`Is4XC35G zK}p%fKs2AYCNHAuoD=QIwNEnGEmG90qAPztxn#Q>xisMP6dfz*fN+j2+g9H}#f0laK z;c+3DYZm5c{D%hnSonVsQZJUEvdqT6v<<)tRNCMYtLOc6t>dz(!v9mo7gwDH5?g_{ zuqyw}j`MMSXh^#l_J>>CKAsWA&u=y6w*-^o{AljZZwX}A2cmcb3va;QaEse_5eQdi zpMl`p#}TgBbCTU{crS+Opo?qAcjfr`?Ziu(`M505is{#Xv6j$iLvSZ^2{*UR&V zn`g##V?h*kLA-Z>Fc(OrvIC`JxqB3 literal 0 HcmV?d00001 diff --git a/src/console.d b/src/console.d new file mode 100644 index 0000000..7b5564c --- /dev/null +++ b/src/console.d @@ -0,0 +1,3 @@ +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/src/console.o b/src/console.o new file mode 100644 index 0000000000000000000000000000000000000000..9b62423fda14c51bbf0f8f0db2273277f9374ebb GIT binary patch literal 17660 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 literal 0 HcmV?d00001 diff --git a/src/entry.o b/src/entry.o new file mode 100644 index 0000000000000000000000000000000000000000..9f5f0711cc951c33222845f2c86313dda7ad7cc6 GIT binary patch literal 1420 zcma)5&1(}u6n~R#Yt=L#RYa-i5~x&#P4NS~q^984K~yXrdTH2g)+Cs0bTbhPf&u>l z{|yg_=FOW|H}Bq3N{NLMNB(Fcc_;B) zF>FmrQk2~LcPmtX-GBJC=uTdLDite}4={|1l`lniydpR=I9KtKG<`^Jz)B2L4L>6H^1yUnb zmeN95Ei0$6QdlhX=Xl>kGvSULKA=y_Gj>PvGrccCTZRV>88Lu5ugL}x)Xyejs*7AO_GBr`kNx!n ze(4Rnx)b#Ky3r2(W*AFjp#4}U4M^6ft!5_{n0KE@&+kM`aRQ`J{(15vA|Clsk&EPb zkOgwg3TsnytSzx0Px(o5T$k@a?xx)A!^7Bk@dkT6?FZmGPI%i&aoF{A_(F@<^tCTu zFc^qOV>1kftwy&Kg;~85J?*HkF`ffnBdmzeN&^Zbztgj9|o9_Cl=Nhz+h$i zzJXi{DOfA91InH|!nvF$o{LePp8E_k^YPxqA{6%Cf<8+~F~vHJV`v2s-<1&~2Y70IVky7vhUDZi5(*)X7l8M-rl@_T{ zf`}`3?)(8Rx{~0kyLREC%Pd@oF1m3cD#q`dnH#4l=m%%ccOLiLbMC##gDcmsDy2k2 zNmzbcBHLjvGUlo?(jhVVHe9dm)atcuLv^i*5wF{;o61Pk?N4!J9T0mXCSHQQAyRA9 zJ{s}H>SoMHG+upaHk(Fb2a6&~)CyKT8TbKT^Y~YMkYBYQzq5DkjYiep{rvNpx4THQ z3HEZ!)6ci0TNdCjA??y8gV31bdo)7D{vjZ}?kFME8!|#2@XBd^q&>uM_=M_DrBb6a z>CEJM1}u{rPN&Cb#?v#G^7%|Ul^F{4p-L*hv}mO&*-Fu=q{^i^v5HP^7k@~R6w6Aab`jH<` zP-Dn*z8?1V1wYOS6x!kyDHxoeb-SrCPLHp9eZ7wwpBOdrBw1cwbj&QYQ}T3Pvy!!t zbgcW1By*-?N-|q6OOnot#GK=#T3VH>& z_J85df@ID@@b?{jZ~7H-cD|1Z2=NAwbO<^M;poic`3?BC|92s8VF$rn;w*&u|H@-O zdJU*s&m!@mW9%i^-v{&;hmZa7<>~$=z`2I`L_ZAnqQMyDrmwYs3Qo?Z!5m^565O{9 z1L^GK{Bg#QW&HUp9ce?EnA( literal 0 HcmV?d00001 diff --git a/src/exec.d b/src/exec.d new file mode 100644 index 0000000..0400275 --- /dev/null +++ b/src/exec.d @@ -0,0 +1,2 @@ +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/src/exec.o b/src/exec.o new file mode 100644 index 0000000000000000000000000000000000000000..1ef4de491762ef83181d2b1a528d033c00f9327e GIT binary patch literal 9092 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 literal 0 HcmV?d00001 diff --git a/src/file.d b/src/file.d new file mode 100644 index 0000000..fea73d1 --- /dev/null +++ b/src/file.d @@ -0,0 +1,2 @@ +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/src/file.o b/src/file.o new file mode 100644 index 0000000000000000000000000000000000000000..4c7d28b1d40a559de7f7119203a85f37ee1aa6cf GIT binary patch literal 9360 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%0D#zD@Nt9RPJTWJseECP9ltBPS|Q(JqYzSF@FRdx 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 literal 512000 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%0Acg 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 M{~ZT){?F(8f7FSGi~s-t literal 0 HcmV?d00001 diff --git a/src/ide.d b/src/ide.d new file mode 100644 index 0000000..21155b9 --- /dev/null +++ b/src/ide.d @@ -0,0 +1,2 @@ +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/src/ide.o b/src/ide.o new file mode 100644 index 0000000000000000000000000000000000000000..5645630e203c86abf21e8a39f1e59ec29385ca75 GIT binary patch literal 12904 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 literal 0 HcmV?d00001 diff --git a/src/initcode.d b/src/initcode.d new file mode 100644 index 0000000..ab1af4d --- /dev/null +++ b/src/initcode.d @@ -0,0 +1 @@ +initcode.o: initcode.S syscall.h traps.h diff --git a/src/initcode.o b/src/initcode.o new file mode 100644 index 0000000000000000000000000000000000000000..5613787465645489482a4ec936d678f0a6099855 GIT binary patch literal 1484 zcma)5yKWOf6usk(Aq4rAAV37+6-tx{&~6A6p)&=KB0@+3DXx;;c(IL=wX|MGp#nMz z3Q9hLf-*lr#b@vVDQGxncCNhwBskLDbMM^e%Bm_(OozG1CwhsekgCkdEin50tk+2F0D;oB%_^o{X;fNR zl_Igqdg3jZZa3_1cEiddg2Tb+C{dnX0hSbm+Pzbr7GP7-L^MoR@hu;lv@5V&XZ>^{f9gLW^ivyQ~%05VGhP) zEMVju6g@MJ%~6+}x3mqr;>rBfL&cMY-|Xpj?7Ansq!~P^;TC6Ta+)aXAKO!u3kjN%wat71+r$f;zJ+hh2vsX z?92UW-+kzs169r-m#8?Xk2j|}T}>E16$jQNQb@V)2lQ=X zjeYqJweNfAtf%|kfUyo+L7xgrOtFi_udo^rzEsv@efHElgDUe#;`>mr7Qweuj{A(b KkJeLsH0~Gaz;-|Y literal 0 HcmV?d00001 diff --git a/src/initcode.out b/src/initcode.out new file mode 100755 index 0000000000000000000000000000000000000000..85d61418320483daebf30f5e4c5c2ce3ed164d69 GIT binary patch literal 1108 zcmaJ=&2G~`5T11s0R_^eMQ|umjZ{QMkzKVtaOj~N_z{Y@6p(U?>}E-VT1T~=s+{N} z^Z_{ZG5P>pd*>ZEaRP}0eBauWSV3Z>+4;Vi+1c@U_w)143uBC^cv2H(J8*vSipY-m z@UP2FS#a^Ux&ih{sn=lZ(BT@F`&d58C7oA$mn?I&_x)!$N=CWJIinQX;t1|6g!NQ> zfQA?s)V|z-=%mwFT4dhTW}h=q(|cEgy{gHrSVNI6kuBB%UPsB+SwSdHLp@|7_pi3bvpA z8?0>P5mlLf3!HWN@#hvS$5x1O?dXiy^IZg%H4MH2taECCKbqsg9Dgv~E5dx4_BNI% z9h^8W_7p#-*Nd~Pm*r6kZ2M6j!6bc=Ap3NbM=@-k7Ivs8x2L%TeH%{(y(o>6fz6bT zk`H6WQ5>iCMA_jev5HYhA>BAWt#tf<$XRfnylNEQO`Q$7-Ym|5c`9cBz7p8$CEkRs z=3Ri#{>?15JD2wr{0>w_YrKX-F=OAL9fDFc_8y#==Tp`|)(hxX#;8$gHLnBb?5-3! tnp-|!w|@xdInWI#-w5Z@DtQf7bL-_ZM%XaOVI3 literal 0 HcmV?d00001 diff --git a/src/ioapic.d b/src/ioapic.d new file mode 100644 index 0000000..997e68a --- /dev/null +++ b/src/ioapic.d @@ -0,0 +1 @@ +ioapic.o: ioapic.c /usr/include/stdc-predef.h types.h defs.h traps.h diff --git a/src/ioapic.o b/src/ioapic.o new file mode 100644 index 0000000000000000000000000000000000000000..f1c844fe4a9756238b8c58f72261390b7eabfc22 GIT binary patch literal 4964 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 literal 0 HcmV?d00001 diff --git a/src/kalloc.d b/src/kalloc.d new file mode 100644 index 0000000..512c5db --- /dev/null +++ b/src/kalloc.d @@ -0,0 +1,2 @@ +kalloc.o: kalloc.c /usr/include/stdc-predef.h types.h defs.h param.h \ + memlayout.h mmu.h spinlock.h diff --git a/src/kalloc.o b/src/kalloc.o new file mode 100644 index 0000000000000000000000000000000000000000..6563b4867b5f5a524517424357a08ccbd9389238 GIT binary patch literal 5652 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 K*NqX-*!>%0Ofh-@ literal 0 HcmV?d00001 diff --git a/src/kbd.d b/src/kbd.d new file mode 100644 index 0000000..92532ba --- /dev/null +++ b/src/kbd.d @@ -0,0 +1 @@ +kbd.o: kbd.c /usr/include/stdc-predef.h types.h x86.h defs.h kbd.h diff --git a/src/kbd.o b/src/kbd.o new file mode 100644 index 0000000000000000000000000000000000000000..347fe2d4376310479e75f558f3874362baa19692 GIT binary patch literal 5812 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%0A{QYC#ugQVgzoW6ICQ(6DKM)m`0fsl_I4mbE0~I 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%0A({ALaH*_8t&O9X*80eYwZ32d=!akZ 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 bb2Zj#&ClS&a&$(%xkUkIvB`v|$@l*N10(f% literal 219832 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

vUv)$@#3{4IwW_ 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 KpA!N*x&H%W9_#x6 diff --git a/src/kernel.asm b/src/kernel.asm index 791755d..f5b45de 100644 --- a/src/kernel.asm +++ b/src/kernel.asm @@ -37,14 +37,14 @@ entry: # Set up the stack pointer. movl $(stack + KSTACKSIZE), %esp -80100028: bc e0 e1 10 80 mov $0x8010e1e0,%esp +80100028: bc 60 79 11 80 mov $0x80117960,%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 60 2b 10 80 mov $0x80102b60,%eax +8010002d: b8 4b 2a 10 80 mov $0x80102a4b,%eax jmp *%eax 80100032: ff e0 jmp *%eax @@ -55,16079 +55,15842 @@ entry: void binit(void) { -80100034: f3 0f 1e fb endbr32 -80100038: 55 push %ebp -80100039: 89 e5 mov %esp,%ebp -8010003b: 53 push %ebx -8010003c: 83 ec 0c sub $0xc,%esp +80100034: 55 push %ebp +80100035: 89 e5 mov %esp,%ebp +80100037: 53 push %ebx +80100038: 83 ec 0c sub $0xc,%esp struct buf *b; initlock(&bcache.lock, "bcache"); -8010003f: 68 80 78 10 80 push $0x80107880 -80100044: 68 e0 e1 10 80 push $0x8010e1e0 -80100049: e8 ef 3c 00 00 call 80103d3d +8010003b: 68 a0 75 10 80 push $0x801075a0 +80100040: 68 20 b5 10 80 push $0x8010b520 +80100045: e8 6e 3b 00 00 call 80103bb8 //PAGEBREAK! // Create linked list of buffers bcache.head.prev = &bcache.head; -8010004e: c7 05 2c 29 11 80 dc movl $0x801128dc,0x8011292c -80100055: 28 11 80 +8010004a: c7 05 6c fc 10 80 1c movl $0x8010fc1c,0x8010fc6c +80100051: fc 10 80 bcache.head.next = &bcache.head; -80100058: c7 05 30 29 11 80 dc movl $0x801128dc,0x80112930 -8010005f: 28 11 80 -80100062: 83 c4 10 add $0x10,%esp +80100054: c7 05 70 fc 10 80 1c movl $0x8010fc1c,0x8010fc70 +8010005b: fc 10 80 +8010005e: 83 c4 10 add $0x10,%esp for(b = bcache.buf; b < bcache.buf+NBUF; b++){ -80100065: bb 14 e2 10 80 mov $0x8010e214,%ebx +80100061: bb 54 b5 10 80 mov $0x8010b554,%ebx b->next = bcache.head.next; -8010006a: a1 30 29 11 80 mov 0x80112930,%eax -8010006f: 89 43 54 mov %eax,0x54(%ebx) +80100066: a1 70 fc 10 80 mov 0x8010fc70,%eax +8010006b: 89 43 54 mov %eax,0x54(%ebx) b->prev = &bcache.head; -80100072: c7 43 50 dc 28 11 80 movl $0x801128dc,0x50(%ebx) +8010006e: c7 43 50 1c fc 10 80 movl $0x8010fc1c,0x50(%ebx) initsleeplock(&b->lock, "buffer"); -80100079: 83 ec 08 sub $0x8,%esp -8010007c: 68 87 78 10 80 push $0x80107887 -80100081: 8d 43 0c lea 0xc(%ebx),%eax -80100084: 50 push %eax -80100085: e8 99 3b 00 00 call 80103c23 +80100075: 83 ec 08 sub $0x8,%esp +80100078: 68 a7 75 10 80 push $0x801075a7 +8010007d: 8d 43 0c lea 0xc(%ebx),%eax +80100080: 50 push %eax +80100081: e8 28 3a 00 00 call 80103aae bcache.head.next->prev = b; -8010008a: a1 30 29 11 80 mov 0x80112930,%eax -8010008f: 89 58 50 mov %ebx,0x50(%eax) +80100086: a1 70 fc 10 80 mov 0x8010fc70,%eax +8010008b: 89 58 50 mov %ebx,0x50(%eax) bcache.head.next = b; -80100092: 89 1d 30 29 11 80 mov %ebx,0x80112930 +8010008e: 89 1d 70 fc 10 80 mov %ebx,0x8010fc70 for(b = bcache.buf; b < bcache.buf+NBUF; b++){ -80100098: 81 c3 5c 02 00 00 add $0x25c,%ebx -8010009e: 83 c4 10 add $0x10,%esp -801000a1: 81 fb dc 28 11 80 cmp $0x801128dc,%ebx -801000a7: 75 c1 jne 8010006a +80100094: 81 c3 5c 02 00 00 add $0x25c,%ebx +8010009a: 83 c4 10 add $0x10,%esp +8010009d: 81 fb 1c fc 10 80 cmp $0x8010fc1c,%ebx +801000a3: 75 c1 jne 80100066 } } -801000a9: 8b 5d fc mov -0x4(%ebp),%ebx -801000ac: c9 leave -801000ad: c3 ret +801000a5: 8b 5d fc mov -0x4(%ebp),%ebx +801000a8: c9 leave +801000a9: c3 ret -801000ae : +801000aa : } // Return a locked buf with the contents of the indicated block. struct buf* bread(uint dev, uint blockno) { -801000ae: f3 0f 1e fb endbr32 -801000b2: 55 push %ebp -801000b3: 89 e5 mov %esp,%ebp -801000b5: 57 push %edi -801000b6: 56 push %esi -801000b7: 53 push %ebx -801000b8: 83 ec 18 sub $0x18,%esp -801000bb: 8b 7d 08 mov 0x8(%ebp),%edi -801000be: 8b 75 0c mov 0xc(%ebp),%esi +801000aa: 55 push %ebp +801000ab: 89 e5 mov %esp,%ebp +801000ad: 57 push %edi +801000ae: 56 push %esi +801000af: 53 push %ebx +801000b0: 83 ec 18 sub $0x18,%esp +801000b3: 8b 75 08 mov 0x8(%ebp),%esi +801000b6: 8b 7d 0c mov 0xc(%ebp),%edi acquire(&bcache.lock); -801000c1: 68 e0 e1 10 80 push $0x8010e1e0 -801000c6: e8 ce 3d 00 00 call 80103e99 +801000b9: 68 20 b5 10 80 push $0x8010b520 +801000be: e8 3e 3c 00 00 call 80103d01 for(b = bcache.head.next; b != &bcache.head; b = b->next){ -801000cb: 8b 1d 30 29 11 80 mov 0x80112930,%ebx -801000d1: 83 c4 10 add $0x10,%esp -801000d4: 81 fb dc 28 11 80 cmp $0x801128dc,%ebx -801000da: 75 26 jne 80100102 +801000c3: 8b 1d 70 fc 10 80 mov 0x8010fc70,%ebx +801000c9: 83 c4 10 add $0x10,%esp +801000cc: 81 fb 1c fc 10 80 cmp $0x8010fc1c,%ebx +801000d2: 75 26 jne 801000fa for(b = bcache.head.prev; b != &bcache.head; b = b->prev){ -801000dc: 8b 1d 2c 29 11 80 mov 0x8011292c,%ebx -801000e2: 81 fb dc 28 11 80 cmp $0x801128dc,%ebx -801000e8: 75 4e jne 80100138 +801000d4: 8b 1d 6c fc 10 80 mov 0x8010fc6c,%ebx +801000da: 81 fb 1c fc 10 80 cmp $0x8010fc1c,%ebx +801000e0: 75 4e jne 80100130 panic("bget: no buffers"); -801000ea: 83 ec 0c sub $0xc,%esp -801000ed: 68 8e 78 10 80 push $0x8010788e -801000f2: e8 61 02 00 00 call 80100358 +801000e2: 83 ec 0c sub $0xc,%esp +801000e5: 68 ae 75 10 80 push $0x801075ae +801000ea: e8 51 02 00 00 call 80100340 for(b = bcache.head.next; b != &bcache.head; b = b->next){ -801000f7: 8b 5b 54 mov 0x54(%ebx),%ebx -801000fa: 81 fb dc 28 11 80 cmp $0x801128dc,%ebx -80100100: 74 da je 801000dc +801000ef: 8b 5b 54 mov 0x54(%ebx),%ebx +801000f2: 81 fb 1c fc 10 80 cmp $0x8010fc1c,%ebx +801000f8: 74 da je 801000d4 if(b->dev == dev && b->blockno == blockno){ -80100102: 3b 7b 04 cmp 0x4(%ebx),%edi -80100105: 75 f0 jne 801000f7 -80100107: 3b 73 08 cmp 0x8(%ebx),%esi -8010010a: 75 eb jne 801000f7 +801000fa: 3b 73 04 cmp 0x4(%ebx),%esi +801000fd: 75 f0 jne 801000ef +801000ff: 3b 7b 08 cmp 0x8(%ebx),%edi +80100102: 75 eb jne 801000ef b->refcnt++; -8010010c: 83 43 4c 01 addl $0x1,0x4c(%ebx) +80100104: 83 43 4c 01 addl $0x1,0x4c(%ebx) release(&bcache.lock); -80100110: 83 ec 0c sub $0xc,%esp -80100113: 68 e0 e1 10 80 push $0x8010e1e0 -80100118: e8 e7 3d 00 00 call 80103f04 +80100108: 83 ec 0c sub $0xc,%esp +8010010b: 68 20 b5 10 80 push $0x8010b520 +80100110: e8 53 3c 00 00 call 80103d68 acquiresleep(&b->lock); -8010011d: 8d 43 0c lea 0xc(%ebx),%eax -80100120: 89 04 24 mov %eax,(%esp) -80100123: e8 32 3b 00 00 call 80103c5a +80100115: 8d 43 0c lea 0xc(%ebx),%eax +80100118: 89 04 24 mov %eax,(%esp) +8010011b: e8 c1 39 00 00 call 80103ae1 return b; -80100128: 83 c4 10 add $0x10,%esp -8010012b: eb 44 jmp 80100171 +80100120: 83 c4 10 add $0x10,%esp +80100123: eb 44 jmp 80100169 for(b = bcache.head.prev; b != &bcache.head; b = b->prev){ -8010012d: 8b 5b 50 mov 0x50(%ebx),%ebx -80100130: 81 fb dc 28 11 80 cmp $0x801128dc,%ebx -80100136: 74 b2 je 801000ea +80100125: 8b 5b 50 mov 0x50(%ebx),%ebx +80100128: 81 fb 1c fc 10 80 cmp $0x8010fc1c,%ebx +8010012e: 74 b2 je 801000e2 if(b->refcnt == 0 && (b->flags & B_DIRTY) == 0) { -80100138: 83 7b 4c 00 cmpl $0x0,0x4c(%ebx) -8010013c: 75 ef jne 8010012d -8010013e: f6 03 04 testb $0x4,(%ebx) -80100141: 75 ea jne 8010012d +80100130: 83 7b 4c 00 cmpl $0x0,0x4c(%ebx) +80100134: 75 ef jne 80100125 +80100136: f6 03 04 testb $0x4,(%ebx) +80100139: 75 ea jne 80100125 b->dev = dev; -80100143: 89 7b 04 mov %edi,0x4(%ebx) +8010013b: 89 73 04 mov %esi,0x4(%ebx) b->blockno = blockno; -80100146: 89 73 08 mov %esi,0x8(%ebx) +8010013e: 89 7b 08 mov %edi,0x8(%ebx) b->flags = 0; -80100149: c7 03 00 00 00 00 movl $0x0,(%ebx) +80100141: c7 03 00 00 00 00 movl $0x0,(%ebx) b->refcnt = 1; -8010014f: c7 43 4c 01 00 00 00 movl $0x1,0x4c(%ebx) +80100147: c7 43 4c 01 00 00 00 movl $0x1,0x4c(%ebx) release(&bcache.lock); -80100156: 83 ec 0c sub $0xc,%esp -80100159: 68 e0 e1 10 80 push $0x8010e1e0 -8010015e: e8 a1 3d 00 00 call 80103f04 +8010014e: 83 ec 0c sub $0xc,%esp +80100151: 68 20 b5 10 80 push $0x8010b520 +80100156: e8 0d 3c 00 00 call 80103d68 acquiresleep(&b->lock); -80100163: 8d 43 0c lea 0xc(%ebx),%eax -80100166: 89 04 24 mov %eax,(%esp) -80100169: e8 ec 3a 00 00 call 80103c5a +8010015b: 8d 43 0c lea 0xc(%ebx),%eax +8010015e: 89 04 24 mov %eax,(%esp) +80100161: e8 7b 39 00 00 call 80103ae1 return b; -8010016e: 83 c4 10 add $0x10,%esp +80100166: 83 c4 10 add $0x10,%esp struct buf *b; b = bget(dev, blockno); if((b->flags & B_VALID) == 0) { -80100171: f6 03 02 testb $0x2,(%ebx) -80100174: 74 0a je 80100180 +80100169: f6 03 02 testb $0x2,(%ebx) +8010016c: 74 0a je 80100178 iderw(b); } return b; } -80100176: 89 d8 mov %ebx,%eax -80100178: 8d 65 f4 lea -0xc(%ebp),%esp -8010017b: 5b pop %ebx -8010017c: 5e pop %esi -8010017d: 5f pop %edi -8010017e: 5d pop %ebp -8010017f: c3 ret +8010016e: 89 d8 mov %ebx,%eax +80100170: 8d 65 f4 lea -0xc(%ebp),%esp +80100173: 5b pop %ebx +80100174: 5e pop %esi +80100175: 5f pop %edi +80100176: 5d pop %ebp +80100177: c3 ret iderw(b); -80100180: 83 ec 0c sub $0xc,%esp -80100183: 53 push %ebx -80100184: e8 6e 1d 00 00 call 80101ef7 -80100189: 83 c4 10 add $0x10,%esp +80100178: 83 ec 0c sub $0xc,%esp +8010017b: 53 push %ebx +8010017c: e8 c3 1c 00 00 call 80101e44 +80100181: 83 c4 10 add $0x10,%esp return b; -8010018c: eb e8 jmp 80100176 +80100184: eb e8 jmp 8010016e -8010018e : +80100186 : // Write b's contents to disk. Must be locked. void bwrite(struct buf *b) { -8010018e: f3 0f 1e fb endbr32 -80100192: 55 push %ebp -80100193: 89 e5 mov %esp,%ebp -80100195: 53 push %ebx -80100196: 83 ec 10 sub $0x10,%esp -80100199: 8b 5d 08 mov 0x8(%ebp),%ebx +80100186: 55 push %ebp +80100187: 89 e5 mov %esp,%ebp +80100189: 53 push %ebx +8010018a: 83 ec 10 sub $0x10,%esp +8010018d: 8b 5d 08 mov 0x8(%ebp),%ebx if(!holdingsleep(&b->lock)) -8010019c: 8d 43 0c lea 0xc(%ebx),%eax -8010019f: 50 push %eax -801001a0: e8 4a 3b 00 00 call 80103cef -801001a5: 83 c4 10 add $0x10,%esp -801001a8: 85 c0 test %eax,%eax -801001aa: 74 14 je 801001c0 +80100190: 8d 43 0c lea 0xc(%ebx),%eax +80100193: 50 push %eax +80100194: e8 d5 39 00 00 call 80103b6e +80100199: 83 c4 10 add $0x10,%esp +8010019c: 85 c0 test %eax,%eax +8010019e: 74 14 je 801001b4 panic("bwrite"); b->flags |= B_DIRTY; -801001ac: 83 0b 04 orl $0x4,(%ebx) +801001a0: 83 0b 04 orl $0x4,(%ebx) iderw(b); -801001af: 83 ec 0c sub $0xc,%esp -801001b2: 53 push %ebx -801001b3: e8 3f 1d 00 00 call 80101ef7 -} -801001b8: 83 c4 10 add $0x10,%esp -801001bb: 8b 5d fc mov -0x4(%ebp),%ebx -801001be: c9 leave -801001bf: c3 ret +801001a3: 83 ec 0c sub $0xc,%esp +801001a6: 53 push %ebx +801001a7: e8 98 1c 00 00 call 80101e44 +} +801001ac: 83 c4 10 add $0x10,%esp +801001af: 8b 5d fc mov -0x4(%ebp),%ebx +801001b2: c9 leave +801001b3: c3 ret panic("bwrite"); -801001c0: 83 ec 0c sub $0xc,%esp -801001c3: 68 9f 78 10 80 push $0x8010789f -801001c8: e8 8b 01 00 00 call 80100358 +801001b4: 83 ec 0c sub $0xc,%esp +801001b7: 68 bf 75 10 80 push $0x801075bf +801001bc: e8 7f 01 00 00 call 80100340 -801001cd : +801001c1 : // Release a locked buffer. // Move to the head of the MRU list. void brelse(struct buf *b) { -801001cd: f3 0f 1e fb endbr32 -801001d1: 55 push %ebp -801001d2: 89 e5 mov %esp,%ebp -801001d4: 56 push %esi -801001d5: 53 push %ebx -801001d6: 8b 5d 08 mov 0x8(%ebp),%ebx +801001c1: 55 push %ebp +801001c2: 89 e5 mov %esp,%ebp +801001c4: 56 push %esi +801001c5: 53 push %ebx +801001c6: 8b 5d 08 mov 0x8(%ebp),%ebx if(!holdingsleep(&b->lock)) -801001d9: 8d 73 0c lea 0xc(%ebx),%esi -801001dc: 83 ec 0c sub $0xc,%esp -801001df: 56 push %esi -801001e0: e8 0a 3b 00 00 call 80103cef -801001e5: 83 c4 10 add $0x10,%esp -801001e8: 85 c0 test %eax,%eax -801001ea: 74 6b je 80100257 +801001c9: 8d 73 0c lea 0xc(%ebx),%esi +801001cc: 83 ec 0c sub $0xc,%esp +801001cf: 56 push %esi +801001d0: e8 99 39 00 00 call 80103b6e +801001d5: 83 c4 10 add $0x10,%esp +801001d8: 85 c0 test %eax,%eax +801001da: 74 6b je 80100247 panic("brelse"); releasesleep(&b->lock); -801001ec: 83 ec 0c sub $0xc,%esp -801001ef: 56 push %esi -801001f0: e8 bb 3a 00 00 call 80103cb0 +801001dc: 83 ec 0c sub $0xc,%esp +801001df: 56 push %esi +801001e0: e8 4e 39 00 00 call 80103b33 acquire(&bcache.lock); -801001f5: c7 04 24 e0 e1 10 80 movl $0x8010e1e0,(%esp) -801001fc: e8 98 3c 00 00 call 80103e99 +801001e5: c7 04 24 20 b5 10 80 movl $0x8010b520,(%esp) +801001ec: e8 10 3b 00 00 call 80103d01 b->refcnt--; -80100201: 8b 43 4c mov 0x4c(%ebx),%eax -80100204: 83 e8 01 sub $0x1,%eax -80100207: 89 43 4c mov %eax,0x4c(%ebx) +801001f1: 8b 43 4c mov 0x4c(%ebx),%eax +801001f4: 83 e8 01 sub $0x1,%eax +801001f7: 89 43 4c mov %eax,0x4c(%ebx) if (b->refcnt == 0) { -8010020a: 83 c4 10 add $0x10,%esp -8010020d: 85 c0 test %eax,%eax -8010020f: 75 2f jne 80100240 +801001fa: 83 c4 10 add $0x10,%esp +801001fd: 85 c0 test %eax,%eax +801001ff: 75 2f jne 80100230 // no one is waiting for it. b->next->prev = b->prev; -80100211: 8b 43 54 mov 0x54(%ebx),%eax -80100214: 8b 53 50 mov 0x50(%ebx),%edx -80100217: 89 50 50 mov %edx,0x50(%eax) +80100201: 8b 43 54 mov 0x54(%ebx),%eax +80100204: 8b 53 50 mov 0x50(%ebx),%edx +80100207: 89 50 50 mov %edx,0x50(%eax) b->prev->next = b->next; -8010021a: 8b 43 50 mov 0x50(%ebx),%eax -8010021d: 8b 53 54 mov 0x54(%ebx),%edx -80100220: 89 50 54 mov %edx,0x54(%eax) +8010020a: 8b 43 50 mov 0x50(%ebx),%eax +8010020d: 8b 53 54 mov 0x54(%ebx),%edx +80100210: 89 50 54 mov %edx,0x54(%eax) b->next = bcache.head.next; -80100223: a1 30 29 11 80 mov 0x80112930,%eax -80100228: 89 43 54 mov %eax,0x54(%ebx) +80100213: a1 70 fc 10 80 mov 0x8010fc70,%eax +80100218: 89 43 54 mov %eax,0x54(%ebx) b->prev = &bcache.head; -8010022b: c7 43 50 dc 28 11 80 movl $0x801128dc,0x50(%ebx) +8010021b: c7 43 50 1c fc 10 80 movl $0x8010fc1c,0x50(%ebx) bcache.head.next->prev = b; -80100232: a1 30 29 11 80 mov 0x80112930,%eax -80100237: 89 58 50 mov %ebx,0x50(%eax) +80100222: a1 70 fc 10 80 mov 0x8010fc70,%eax +80100227: 89 58 50 mov %ebx,0x50(%eax) bcache.head.next = b; -8010023a: 89 1d 30 29 11 80 mov %ebx,0x80112930 +8010022a: 89 1d 70 fc 10 80 mov %ebx,0x8010fc70 } release(&bcache.lock); -80100240: 83 ec 0c sub $0xc,%esp -80100243: 68 e0 e1 10 80 push $0x8010e1e0 -80100248: e8 b7 3c 00 00 call 80103f04 -} -8010024d: 83 c4 10 add $0x10,%esp -80100250: 8d 65 f8 lea -0x8(%ebp),%esp -80100253: 5b pop %ebx -80100254: 5e pop %esi -80100255: 5d pop %ebp -80100256: c3 ret +80100230: 83 ec 0c sub $0xc,%esp +80100233: 68 20 b5 10 80 push $0x8010b520 +80100238: e8 2b 3b 00 00 call 80103d68 +} +8010023d: 83 c4 10 add $0x10,%esp +80100240: 8d 65 f8 lea -0x8(%ebp),%esp +80100243: 5b pop %ebx +80100244: 5e pop %esi +80100245: 5d pop %ebp +80100246: c3 ret panic("brelse"); -80100257: 83 ec 0c sub $0xc,%esp -8010025a: 68 a6 78 10 80 push $0x801078a6 -8010025f: e8 f4 00 00 00 call 80100358 +80100247: 83 ec 0c sub $0xc,%esp +8010024a: 68 c6 75 10 80 push $0x801075c6 +8010024f: e8 ec 00 00 00 call 80100340 -80100264 : +80100254 : } } int consoleread(struct inode *ip, char *dst, int n) { -80100264: f3 0f 1e fb endbr32 -80100268: 55 push %ebp -80100269: 89 e5 mov %esp,%ebp -8010026b: 57 push %edi -8010026c: 56 push %esi -8010026d: 53 push %ebx -8010026e: 83 ec 28 sub $0x28,%esp -80100271: 8b 75 10 mov 0x10(%ebp),%esi +80100254: 55 push %ebp +80100255: 89 e5 mov %esp,%ebp +80100257: 57 push %edi +80100258: 56 push %esi +80100259: 53 push %ebx +8010025a: 83 ec 28 sub $0x28,%esp +8010025d: 8b 7d 0c mov 0xc(%ebp),%edi +80100260: 8b 75 10 mov 0x10(%ebp),%esi uint target; int c; iunlock(ip); -80100274: ff 75 08 pushl 0x8(%ebp) -80100277: e8 76 13 00 00 call 801015f2 +80100263: ff 75 08 push 0x8(%ebp) +80100266: e8 0a 13 00 00 call 80101575 target = n; -8010027c: 89 75 e4 mov %esi,-0x1c(%ebp) +8010026b: 89 75 e4 mov %esi,-0x1c(%ebp) acquire(&cons.lock); -8010027f: c7 04 24 20 b5 10 80 movl $0x8010b520,(%esp) -80100286: e8 0e 3c 00 00 call 80103e99 +8010026e: c7 04 24 20 ff 10 80 movl $0x8010ff20,(%esp) +80100275: e8 87 3a 00 00 call 80103d01 while(n > 0){ -8010028b: 83 c4 10 add $0x10,%esp +8010027a: 83 c4 10 add $0x10,%esp while(input.r == input.w){ -8010028e: bb 40 2b 11 80 mov $0x80112b40,%ebx +8010027d: bb 80 fe 10 80 mov $0x8010fe80,%ebx while(n > 0){ -80100293: 85 f6 test %esi,%esi -80100295: 7e 6a jle 80100301 +80100282: 85 f6 test %esi,%esi +80100284: 7e 64 jle 801002ea while(input.r == input.w){ -80100297: 8b 8b 80 00 00 00 mov 0x80(%ebx),%ecx -8010029d: 3b 8b 84 00 00 00 cmp 0x84(%ebx),%ecx -801002a3: 75 2e jne 801002d3 +80100286: 8b 83 80 00 00 00 mov 0x80(%ebx),%eax +8010028c: 3b 83 84 00 00 00 cmp 0x84(%ebx),%eax +80100292: 75 2e jne 801002c2 if(myproc()->killed){ -801002a5: e8 40 31 00 00 call 801033ea -801002aa: 83 78 24 00 cmpl $0x0,0x24(%eax) -801002ae: 75 73 jne 80100323 +80100294: e8 17 30 00 00 call 801032b0 +80100299: 83 78 24 00 cmpl $0x0,0x24(%eax) +8010029d: 75 6d jne 8010030c release(&cons.lock); ilock(ip); return -1; } sleep(&input.r, &cons.lock); -801002b0: 83 ec 08 sub $0x8,%esp -801002b3: 68 20 b5 10 80 push $0x8010b520 -801002b8: 68 c0 2b 11 80 push $0x80112bc0 -801002bd: e8 f2 35 00 00 call 801038b4 +8010029f: 83 ec 08 sub $0x8,%esp +801002a2: 68 20 ff 10 80 push $0x8010ff20 +801002a7: 68 00 ff 10 80 push $0x8010ff00 +801002ac: e8 a8 34 00 00 call 80103759 while(input.r == input.w){ -801002c2: 8b 8b 80 00 00 00 mov 0x80(%ebx),%ecx -801002c8: 83 c4 10 add $0x10,%esp -801002cb: 3b 8b 84 00 00 00 cmp 0x84(%ebx),%ecx -801002d1: 74 d2 je 801002a5 +801002b1: 8b 83 80 00 00 00 mov 0x80(%ebx),%eax +801002b7: 83 c4 10 add $0x10,%esp +801002ba: 3b 83 84 00 00 00 cmp 0x84(%ebx),%eax +801002c0: 74 d2 je 80100294 } c = input.buf[input.r++ % INPUT_BUF]; -801002d3: 8d 41 01 lea 0x1(%ecx),%eax -801002d6: 89 83 80 00 00 00 mov %eax,0x80(%ebx) -801002dc: 89 c8 mov %ecx,%eax -801002de: 83 e0 7f and $0x7f,%eax -801002e1: 0f b6 04 03 movzbl (%ebx,%eax,1),%eax -801002e5: 0f be d0 movsbl %al,%edx +801002c2: 8d 50 01 lea 0x1(%eax),%edx +801002c5: 89 93 80 00 00 00 mov %edx,0x80(%ebx) +801002cb: 89 c2 mov %eax,%edx +801002cd: 83 e2 7f and $0x7f,%edx +801002d0: 0f b6 14 13 movzbl (%ebx,%edx,1),%edx +801002d4: 0f be ca movsbl %dl,%ecx if(c == C('D')){ // EOF -801002e8: 3c 04 cmp $0x4,%al -801002ea: 74 5f je 8010034b +801002d7: 80 fa 04 cmp $0x4,%dl +801002da: 74 58 je 80100334 // caller gets a 0-byte result. input.r--; } break; } *dst++ = c; -801002ec: 8b 7d e4 mov -0x1c(%ebp),%edi -801002ef: 03 7d 0c add 0xc(%ebp),%edi -801002f2: 89 f1 mov %esi,%ecx -801002f4: f7 d9 neg %ecx -801002f6: 88 04 0f mov %al,(%edi,%ecx,1) +801002dc: 83 c7 01 add $0x1,%edi +801002df: 88 57 ff mov %dl,-0x1(%edi) --n; -801002f9: 83 ee 01 sub $0x1,%esi +801002e2: 83 ee 01 sub $0x1,%esi if(c == '\n') -801002fc: 83 fa 0a cmp $0xa,%edx -801002ff: 75 92 jne 80100293 +801002e5: 83 f9 0a cmp $0xa,%ecx +801002e8: 75 98 jne 80100282 break; } release(&cons.lock); -80100301: 83 ec 0c sub $0xc,%esp -80100304: 68 20 b5 10 80 push $0x8010b520 -80100309: e8 f6 3b 00 00 call 80103f04 +801002ea: 83 ec 0c sub $0xc,%esp +801002ed: 68 20 ff 10 80 push $0x8010ff20 +801002f2: e8 71 3a 00 00 call 80103d68 ilock(ip); -8010030e: 83 c4 04 add $0x4,%esp -80100311: ff 75 08 pushl 0x8(%ebp) -80100314: e8 13 12 00 00 call 8010152c +801002f7: 83 c4 04 add $0x4,%esp +801002fa: ff 75 08 push 0x8(%ebp) +801002fd: e8 b1 11 00 00 call 801014b3 return target - n; -80100319: 8b 45 e4 mov -0x1c(%ebp),%eax -8010031c: 29 f0 sub %esi,%eax -8010031e: 83 c4 10 add $0x10,%esp -80100321: eb 20 jmp 80100343 +80100302: 8b 45 e4 mov -0x1c(%ebp),%eax +80100305: 29 f0 sub %esi,%eax +80100307: 83 c4 10 add $0x10,%esp +8010030a: eb 20 jmp 8010032c release(&cons.lock); -80100323: 83 ec 0c sub $0xc,%esp -80100326: 68 20 b5 10 80 push $0x8010b520 -8010032b: e8 d4 3b 00 00 call 80103f04 +8010030c: 83 ec 0c sub $0xc,%esp +8010030f: 68 20 ff 10 80 push $0x8010ff20 +80100314: e8 4f 3a 00 00 call 80103d68 ilock(ip); -80100330: 83 c4 04 add $0x4,%esp -80100333: ff 75 08 pushl 0x8(%ebp) -80100336: e8 f1 11 00 00 call 8010152c +80100319: 83 c4 04 add $0x4,%esp +8010031c: ff 75 08 push 0x8(%ebp) +8010031f: e8 8f 11 00 00 call 801014b3 return -1; -8010033b: 83 c4 10 add $0x10,%esp -8010033e: b8 ff ff ff ff mov $0xffffffff,%eax -} -80100343: 8d 65 f4 lea -0xc(%ebp),%esp -80100346: 5b pop %ebx -80100347: 5e pop %esi -80100348: 5f pop %edi -80100349: 5d pop %ebp -8010034a: c3 ret +80100324: 83 c4 10 add $0x10,%esp +80100327: b8 ff ff ff ff mov $0xffffffff,%eax +} +8010032c: 8d 65 f4 lea -0xc(%ebp),%esp +8010032f: 5b pop %ebx +80100330: 5e pop %esi +80100331: 5f pop %edi +80100332: 5d pop %ebp +80100333: c3 ret if(n < target){ -8010034b: 3b 75 e4 cmp -0x1c(%ebp),%esi -8010034e: 73 b1 jae 80100301 +80100334: 3b 75 e4 cmp -0x1c(%ebp),%esi +80100337: 73 b1 jae 801002ea input.r--; -80100350: 89 0d c0 2b 11 80 mov %ecx,0x80112bc0 -80100356: eb a9 jmp 80100301 +80100339: a3 00 ff 10 80 mov %eax,0x8010ff00 +8010033e: eb aa jmp 801002ea -80100358 : +80100340 : { -80100358: f3 0f 1e fb endbr32 -8010035c: 55 push %ebp -8010035d: 89 e5 mov %esp,%ebp -8010035f: 56 push %esi -80100360: 53 push %ebx -80100361: 83 ec 30 sub $0x30,%esp +80100340: 55 push %ebp +80100341: 89 e5 mov %esp,%ebp +80100343: 56 push %esi +80100344: 53 push %ebx +80100345: 83 ec 30 sub $0x30,%esp } static inline void cli(void) { asm volatile("cli"); -80100364: fa cli +80100348: fa cli cons.locking = 0; -80100365: c7 05 54 b5 10 80 00 movl $0x0,0x8010b554 -8010036c: 00 00 00 +80100349: c7 05 54 ff 10 80 00 movl $0x0,0x8010ff54 +80100350: 00 00 00 cprintf("lapicid %d: panic: ", lapicid()); -8010036f: e8 90 21 00 00 call 80102504 -80100374: 83 ec 08 sub $0x8,%esp -80100377: 50 push %eax -80100378: 68 ad 78 10 80 push $0x801078ad -8010037d: e8 aa 02 00 00 call 8010062c +80100353: e8 c2 20 00 00 call 8010241a +80100358: 83 ec 08 sub $0x8,%esp +8010035b: 50 push %eax +8010035c: 68 cd 75 10 80 push $0x801075cd +80100361: e8 9b 02 00 00 call 80100601 cprintf(s); -80100382: 83 c4 04 add $0x4,%esp -80100385: ff 75 08 pushl 0x8(%ebp) -80100388: e8 9f 02 00 00 call 8010062c +80100366: 83 c4 04 add $0x4,%esp +80100369: ff 75 08 push 0x8(%ebp) +8010036c: e8 90 02 00 00 call 80100601 cprintf("\n"); -8010038d: c7 04 24 1f 82 10 80 movl $0x8010821f,(%esp) -80100394: e8 93 02 00 00 call 8010062c +80100371: c7 04 24 3f 7f 10 80 movl $0x80107f3f,(%esp) +80100378: e8 84 02 00 00 call 80100601 getcallerpcs(&s, pcs); -80100399: 83 c4 08 add $0x8,%esp -8010039c: 8d 5d d0 lea -0x30(%ebp),%ebx -8010039f: 53 push %ebx -801003a0: 8d 45 08 lea 0x8(%ebp),%eax -801003a3: 50 push %eax -801003a4: e8 b3 39 00 00 call 80103d5c +8010037d: 83 c4 08 add $0x8,%esp +80100380: 8d 5d d0 lea -0x30(%ebp),%ebx +80100383: 53 push %ebx +80100384: 8d 45 08 lea 0x8(%ebp),%eax +80100387: 50 push %eax +80100388: e8 46 38 00 00 call 80103bd3 for(i=0; i<10; i++) -801003a9: 8d 75 f8 lea -0x8(%ebp),%esi -801003ac: 83 c4 10 add $0x10,%esp +8010038d: 8d 75 f8 lea -0x8(%ebp),%esi +80100390: 83 c4 10 add $0x10,%esp cprintf(" %p", pcs[i]); -801003af: 83 ec 08 sub $0x8,%esp -801003b2: ff 33 pushl (%ebx) -801003b4: 68 77 7e 10 80 push $0x80107e77 -801003b9: e8 6e 02 00 00 call 8010062c +80100393: 83 ec 08 sub $0x8,%esp +80100396: ff 33 push (%ebx) +80100398: 68 97 7b 10 80 push $0x80107b97 +8010039d: e8 5f 02 00 00 call 80100601 for(i=0; i<10; i++) -801003be: 83 c3 04 add $0x4,%ebx -801003c1: 83 c4 10 add $0x10,%esp -801003c4: 39 f3 cmp %esi,%ebx -801003c6: 75 e7 jne 801003af +801003a2: 83 c3 04 add $0x4,%ebx +801003a5: 83 c4 10 add $0x10,%esp +801003a8: 39 f3 cmp %esi,%ebx +801003aa: 75 e7 jne 80100393 panicked = 1; // freeze other CPU -801003c8: c7 05 58 b5 10 80 01 movl $0x1,0x8010b558 -801003cf: 00 00 00 +801003ac: c7 05 58 ff 10 80 01 movl $0x1,0x8010ff58 +801003b3: 00 00 00 for(;;) -801003d2: eb fe jmp 801003d2 +801003b6: eb fe jmp 801003b6 -801003d4 : +801003b8 : if(panicked){ -801003d4: 83 3d 58 b5 10 80 00 cmpl $0x0,0x8010b558 -801003db: 74 03 je 801003e0 -801003dd: fa cli +801003b8: 83 3d 58 ff 10 80 00 cmpl $0x0,0x8010ff58 +801003bf: 74 03 je 801003c4 +801003c1: fa cli for(;;) -801003de: eb fe jmp 801003de -{ -801003e0: 55 push %ebp -801003e1: 89 e5 mov %esp,%ebp -801003e3: 57 push %edi -801003e4: 56 push %esi -801003e5: 53 push %ebx -801003e6: 83 ec 0c sub $0xc,%esp -801003e9: 89 c6 mov %eax,%esi +801003c2: eb fe jmp 801003c2 +{ +801003c4: 55 push %ebp +801003c5: 89 e5 mov %esp,%ebp +801003c7: 57 push %edi +801003c8: 56 push %esi +801003c9: 53 push %ebx +801003ca: 83 ec 0c sub $0xc,%esp +801003cd: 89 c3 mov %eax,%ebx if(c == BACKSPACE){ -801003eb: 3d 00 01 00 00 cmp $0x100,%eax -801003f0: 0f 84 b2 00 00 00 je 801004a8 +801003cf: 3d 00 01 00 00 cmp $0x100,%eax +801003d4: 0f 84 ae 00 00 00 je 80100488 uartputc(c); -801003f6: 83 ec 0c sub $0xc,%esp -801003f9: 50 push %eax -801003fa: e8 71 4f 00 00 call 80105370 -801003ff: 83 c4 10 add $0x10,%esp +801003da: 83 ec 0c sub $0xc,%esp +801003dd: 50 push %eax +801003de: e8 4a 4d 00 00 call 8010512d +801003e3: 83 c4 10 add $0x10,%esp asm volatile("out %0,%1" : : "a" (data), "d" (port)); -80100402: bb d4 03 00 00 mov $0x3d4,%ebx -80100407: b8 0e 00 00 00 mov $0xe,%eax -8010040c: 89 da mov %ebx,%edx -8010040e: ee out %al,(%dx) +801003e6: bf d4 03 00 00 mov $0x3d4,%edi +801003eb: b8 0e 00 00 00 mov $0xe,%eax +801003f0: 89 fa mov %edi,%edx +801003f2: ee out %al,(%dx) asm volatile("in %1,%0" : "=a" (data) : "d" (port)); -8010040f: b9 d5 03 00 00 mov $0x3d5,%ecx -80100414: 89 ca mov %ecx,%edx -80100416: ec in (%dx),%al +801003f3: be d5 03 00 00 mov $0x3d5,%esi +801003f8: 89 f2 mov %esi,%edx +801003fa: ec in (%dx),%al pos = inb(CRTPORT+1) << 8; -80100417: 0f b6 c0 movzbl %al,%eax -8010041a: c1 e0 08 shl $0x8,%eax -8010041d: 89 c7 mov %eax,%edi +801003fb: 0f b6 c8 movzbl %al,%ecx +801003fe: c1 e1 08 shl $0x8,%ecx asm volatile("out %0,%1" : : "a" (data), "d" (port)); -8010041f: b8 0f 00 00 00 mov $0xf,%eax -80100424: 89 da mov %ebx,%edx -80100426: ee out %al,(%dx) +80100401: b8 0f 00 00 00 mov $0xf,%eax +80100406: 89 fa mov %edi,%edx +80100408: ee out %al,(%dx) asm volatile("in %1,%0" : "=a" (data) : "d" (port)); -80100427: 89 ca mov %ecx,%edx -80100429: ec in (%dx),%al +80100409: 89 f2 mov %esi,%edx +8010040b: ec in (%dx),%al pos |= inb(CRTPORT+1); -8010042a: 0f b6 d8 movzbl %al,%ebx -8010042d: 09 fb or %edi,%ebx +8010040c: 0f b6 c0 movzbl %al,%eax +8010040f: 09 c8 or %ecx,%eax if(c == '\n') -8010042f: 83 fe 0a cmp $0xa,%esi -80100432: 0f 84 9a 00 00 00 je 801004d2 +80100411: 83 fb 0a cmp $0xa,%ebx +80100414: 0f 84 98 00 00 00 je 801004b2 else if(c == BACKSPACE){ -80100438: 81 fe 00 01 00 00 cmp $0x100,%esi -8010043e: 0f 84 aa 00 00 00 je 801004ee +8010041a: 81 fb 00 01 00 00 cmp $0x100,%ebx +80100420: 0f 84 a4 00 00 00 je 801004ca crt[pos++] = (c&0xff) | 0x0700; // black on white -80100444: 89 f0 mov %esi,%eax -80100446: 0f b6 c0 movzbl %al,%eax -80100449: 80 cc 07 or $0x7,%ah -8010044c: 66 89 84 1b 00 80 0b mov %ax,-0x7ff48000(%ebx,%ebx,1) -80100453: 80 -80100454: 8d 5b 01 lea 0x1(%ebx),%ebx +80100426: 8d 70 01 lea 0x1(%eax),%esi +80100429: 0f b6 db movzbl %bl,%ebx +8010042c: 80 cf 07 or $0x7,%bh +8010042f: 66 89 9c 00 00 80 0b mov %bx,-0x7ff48000(%eax,%eax,1) +80100436: 80 if(pos < 0 || pos > 25*80) -80100457: 81 fb d0 07 00 00 cmp $0x7d0,%ebx -8010045d: 0f 87 9a 00 00 00 ja 801004fd +80100437: 81 fe d0 07 00 00 cmp $0x7d0,%esi +8010043d: 0f 87 94 00 00 00 ja 801004d7 if((pos/80) >= 24){ // Scroll up. -80100463: 81 fb 7f 07 00 00 cmp $0x77f,%ebx -80100469: 0f 8f 9b 00 00 00 jg 8010050a +80100443: 81 fe 7f 07 00 00 cmp $0x77f,%esi +80100449: 0f 8f 95 00 00 00 jg 801004e4 asm volatile("out %0,%1" : : "a" (data), "d" (port)); -8010046f: be d4 03 00 00 mov $0x3d4,%esi -80100474: b8 0e 00 00 00 mov $0xe,%eax -80100479: 89 f2 mov %esi,%edx -8010047b: ee out %al,(%dx) +8010044f: bb d4 03 00 00 mov $0x3d4,%ebx +80100454: b8 0e 00 00 00 mov $0xe,%eax +80100459: 89 da mov %ebx,%edx +8010045b: ee out %al,(%dx) outb(CRTPORT+1, pos>>8); -8010047c: 89 d8 mov %ebx,%eax -8010047e: c1 f8 08 sar $0x8,%eax -80100481: b9 d5 03 00 00 mov $0x3d5,%ecx -80100486: 89 ca mov %ecx,%edx -80100488: ee out %al,(%dx) -80100489: b8 0f 00 00 00 mov $0xf,%eax -8010048e: 89 f2 mov %esi,%edx -80100490: ee out %al,(%dx) -80100491: 89 d8 mov %ebx,%eax -80100493: 89 ca mov %ecx,%edx -80100495: ee out %al,(%dx) +8010045c: 89 f0 mov %esi,%eax +8010045e: c1 f8 08 sar $0x8,%eax +80100461: b9 d5 03 00 00 mov $0x3d5,%ecx +80100466: 89 ca mov %ecx,%edx +80100468: ee out %al,(%dx) +80100469: b8 0f 00 00 00 mov $0xf,%eax +8010046e: 89 da mov %ebx,%edx +80100470: ee out %al,(%dx) +80100471: 89 f0 mov %esi,%eax +80100473: 89 ca mov %ecx,%edx +80100475: ee out %al,(%dx) crt[pos] = ' ' | 0x0700; -80100496: 66 c7 84 1b 00 80 0b movw $0x720,-0x7ff48000(%ebx,%ebx,1) -8010049d: 80 20 07 -} -801004a0: 8d 65 f4 lea -0xc(%ebp),%esp -801004a3: 5b pop %ebx -801004a4: 5e pop %esi -801004a5: 5f pop %edi -801004a6: 5d pop %ebp -801004a7: c3 ret +80100476: 66 c7 84 36 00 80 0b movw $0x720,-0x7ff48000(%esi,%esi,1) +8010047d: 80 20 07 +} +80100480: 8d 65 f4 lea -0xc(%ebp),%esp +80100483: 5b pop %ebx +80100484: 5e pop %esi +80100485: 5f pop %edi +80100486: 5d pop %ebp +80100487: c3 ret uartputc('\b'); uartputc(' '); uartputc('\b'); -801004a8: 83 ec 0c sub $0xc,%esp -801004ab: 6a 08 push $0x8 -801004ad: e8 be 4e 00 00 call 80105370 -801004b2: c7 04 24 20 00 00 00 movl $0x20,(%esp) -801004b9: e8 b2 4e 00 00 call 80105370 -801004be: c7 04 24 08 00 00 00 movl $0x8,(%esp) -801004c5: e8 a6 4e 00 00 call 80105370 -801004ca: 83 c4 10 add $0x10,%esp -801004cd: e9 30 ff ff ff jmp 80100402 +80100488: 83 ec 0c sub $0xc,%esp +8010048b: 6a 08 push $0x8 +8010048d: e8 9b 4c 00 00 call 8010512d +80100492: c7 04 24 20 00 00 00 movl $0x20,(%esp) +80100499: e8 8f 4c 00 00 call 8010512d +8010049e: c7 04 24 08 00 00 00 movl $0x8,(%esp) +801004a5: e8 83 4c 00 00 call 8010512d +801004aa: 83 c4 10 add $0x10,%esp +801004ad: e9 34 ff ff ff jmp 801003e6 pos += 80 - pos%80; -801004d2: ba 67 66 66 66 mov $0x66666667,%edx -801004d7: 89 d8 mov %ebx,%eax -801004d9: f7 ea imul %edx -801004db: 89 d0 mov %edx,%eax -801004dd: c1 f8 05 sar $0x5,%eax -801004e0: 8d 04 80 lea (%eax,%eax,4),%eax -801004e3: c1 e0 04 shl $0x4,%eax -801004e6: 8d 58 50 lea 0x50(%eax),%ebx -801004e9: e9 69 ff ff ff jmp 80100457 +801004b2: ba 67 66 66 66 mov $0x66666667,%edx +801004b7: f7 ea imul %edx +801004b9: c1 fa 05 sar $0x5,%edx +801004bc: 8d 04 92 lea (%edx,%edx,4),%eax +801004bf: c1 e0 04 shl $0x4,%eax +801004c2: 8d 70 50 lea 0x50(%eax),%esi +801004c5: e9 6d ff ff ff jmp 80100437 if(pos > 0) --pos; -801004ee: 85 db test %ebx,%ebx -801004f0: 0f 9f c0 setg %al -801004f3: 0f b6 c0 movzbl %al,%eax -801004f6: 29 c3 sub %eax,%ebx -801004f8: e9 5a ff ff ff jmp 80100457 +801004ca: 83 f8 01 cmp $0x1,%eax +801004cd: 83 d0 ff adc $0xffffffff,%eax +801004d0: 89 c6 mov %eax,%esi +801004d2: e9 60 ff ff ff jmp 80100437 panic("pos under/overflow"); -801004fd: 83 ec 0c sub $0xc,%esp -80100500: 68 c1 78 10 80 push $0x801078c1 -80100505: e8 4e fe ff ff call 80100358 +801004d7: 83 ec 0c sub $0xc,%esp +801004da: 68 e1 75 10 80 push $0x801075e1 +801004df: e8 5c fe ff ff call 80100340 memmove(crt, crt+80, sizeof(crt[0])*23*80); -8010050a: 83 ec 04 sub $0x4,%esp -8010050d: 68 60 0e 00 00 push $0xe60 -80100512: 68 a0 80 0b 80 push $0x800b80a0 -80100517: 68 00 80 0b 80 push $0x800b8000 -8010051c: e8 bb 3a 00 00 call 80103fdc +801004e4: 83 ec 04 sub $0x4,%esp +801004e7: 68 60 0e 00 00 push $0xe60 +801004ec: 68 a0 80 0b 80 push $0x800b80a0 +801004f1: 68 00 80 0b 80 push $0x800b8000 +801004f6: e8 39 39 00 00 call 80103e34 pos -= 80; -80100521: 83 eb 50 sub $0x50,%ebx +801004fb: 83 ee 50 sub $0x50,%esi memset(crt+pos, 0, sizeof(crt[0])*(24*80 - pos)); -80100524: 83 c4 0c add $0xc,%esp -80100527: b8 80 07 00 00 mov $0x780,%eax -8010052c: 29 d8 sub %ebx,%eax -8010052e: 01 c0 add %eax,%eax -80100530: 50 push %eax -80100531: 6a 00 push $0x0 -80100533: 8d 84 1b 00 80 0b 80 lea -0x7ff48000(%ebx,%ebx,1),%eax -8010053a: 50 push %eax -8010053b: e8 0f 3a 00 00 call 80103f4f -80100540: 83 c4 10 add $0x10,%esp -80100543: e9 27 ff ff ff jmp 8010046f - -80100548 : -{ -80100548: 55 push %ebp -80100549: 89 e5 mov %esp,%ebp -8010054b: 57 push %edi -8010054c: 56 push %esi -8010054d: 53 push %ebx -8010054e: 83 ec 2c sub $0x2c,%esp -80100551: 89 d6 mov %edx,%esi +801004fe: 83 c4 0c add $0xc,%esp +80100501: b8 80 07 00 00 mov $0x780,%eax +80100506: 29 f0 sub %esi,%eax +80100508: 01 c0 add %eax,%eax +8010050a: 50 push %eax +8010050b: 6a 00 push $0x0 +8010050d: 8d 84 36 00 80 0b 80 lea -0x7ff48000(%esi,%esi,1),%eax +80100514: 50 push %eax +80100515: e8 95 38 00 00 call 80103daf +8010051a: 83 c4 10 add $0x10,%esp +8010051d: e9 2d ff ff ff jmp 8010044f + +80100522 : +{ +80100522: 55 push %ebp +80100523: 89 e5 mov %esp,%ebp +80100525: 57 push %edi +80100526: 56 push %esi +80100527: 53 push %ebx +80100528: 83 ec 2c sub $0x2c,%esp +8010052b: 89 d6 mov %edx,%esi if(sign && (sign = xx < 0)) -80100553: 85 c9 test %ecx,%ecx -80100555: 74 04 je 8010055b -80100557: 85 c0 test %eax,%eax -80100559: 78 61 js 801005bc +8010052d: 85 c9 test %ecx,%ecx +8010052f: 74 04 je 80100535 +80100531: 85 c0 test %eax,%eax +80100533: 78 61 js 80100596 x = xx; -8010055b: 89 c1 mov %eax,%ecx -8010055d: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp) +80100535: 89 c1 mov %eax,%ecx +80100537: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp) i = 0; -80100564: bb 00 00 00 00 mov $0x0,%ebx +8010053e: bb 00 00 00 00 mov $0x0,%ebx buf[i++] = digits[x % base]; -80100569: 89 df mov %ebx,%edi -8010056b: 83 c3 01 add $0x1,%ebx -8010056e: 89 c8 mov %ecx,%eax -80100570: ba 00 00 00 00 mov $0x0,%edx -80100575: f7 f6 div %esi -80100577: 0f b6 92 ec 78 10 80 movzbl -0x7fef8714(%edx),%edx -8010057e: 88 54 1d d7 mov %dl,-0x29(%ebp,%ebx,1) +80100543: 89 df mov %ebx,%edi +80100545: 83 c3 01 add $0x1,%ebx +80100548: 89 c8 mov %ecx,%eax +8010054a: ba 00 00 00 00 mov $0x0,%edx +8010054f: f7 f6 div %esi +80100551: 0f b6 92 0c 76 10 80 movzbl -0x7fef89f4(%edx),%edx +80100558: 88 54 1d d7 mov %dl,-0x29(%ebp,%ebx,1) }while((x /= base) != 0); -80100582: 89 ca mov %ecx,%edx -80100584: 89 c1 mov %eax,%ecx -80100586: 39 d6 cmp %edx,%esi -80100588: 76 df jbe 80100569 +8010055c: 89 ca mov %ecx,%edx +8010055e: 89 c1 mov %eax,%ecx +80100560: 39 d6 cmp %edx,%esi +80100562: 76 df jbe 80100543 if(sign) -8010058a: 83 7d d4 00 cmpl $0x0,-0x2c(%ebp) -8010058e: 74 08 je 80100598 +80100564: 83 7d d4 00 cmpl $0x0,-0x2c(%ebp) +80100568: 74 08 je 80100572 buf[i++] = '-'; -80100590: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) -80100595: 8d 5f 02 lea 0x2(%edi),%ebx +8010056a: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) +8010056f: 8d 5f 02 lea 0x2(%edi),%ebx while(--i >= 0) -80100598: 85 db test %ebx,%ebx -8010059a: 7e 18 jle 801005b4 -8010059c: 8d 5c 1d d7 lea -0x29(%ebp,%ebx,1),%ebx -801005a0: 8d 75 d8 lea -0x28(%ebp),%esi +80100572: 85 db test %ebx,%ebx +80100574: 7e 18 jle 8010058e +80100576: 8d 75 d8 lea -0x28(%ebp),%esi +80100579: 8d 5c 1d d7 lea -0x29(%ebp,%ebx,1),%ebx consputc(buf[i]); -801005a3: 0f be 03 movsbl (%ebx),%eax -801005a6: e8 29 fe ff ff call 801003d4 +8010057d: 0f be 03 movsbl (%ebx),%eax +80100580: e8 33 fe ff ff call 801003b8 while(--i >= 0) -801005ab: 89 d8 mov %ebx,%eax -801005ad: 83 eb 01 sub $0x1,%ebx -801005b0: 39 f0 cmp %esi,%eax -801005b2: 75 ef jne 801005a3 -} -801005b4: 83 c4 2c add $0x2c,%esp -801005b7: 5b pop %ebx -801005b8: 5e pop %esi -801005b9: 5f pop %edi -801005ba: 5d pop %ebp -801005bb: c3 ret +80100585: 89 d8 mov %ebx,%eax +80100587: 83 eb 01 sub $0x1,%ebx +8010058a: 39 f0 cmp %esi,%eax +8010058c: 75 ef jne 8010057d +} +8010058e: 83 c4 2c add $0x2c,%esp +80100591: 5b pop %ebx +80100592: 5e pop %esi +80100593: 5f pop %edi +80100594: 5d pop %ebp +80100595: c3 ret x = -xx; -801005bc: f7 d8 neg %eax -801005be: 89 c1 mov %eax,%ecx +80100596: f7 d8 neg %eax +80100598: 89 c1 mov %eax,%ecx if(sign && (sign = xx < 0)) -801005c0: c7 45 d4 01 00 00 00 movl $0x1,-0x2c(%ebp) +8010059a: c7 45 d4 01 00 00 00 movl $0x1,-0x2c(%ebp) x = -xx; -801005c7: eb 9b jmp 80100564 +801005a1: eb 9b jmp 8010053e -801005c9 : +801005a3 : int consolewrite(struct inode *ip, char *buf, int n) { -801005c9: f3 0f 1e fb endbr32 -801005cd: 55 push %ebp -801005ce: 89 e5 mov %esp,%ebp -801005d0: 57 push %edi -801005d1: 56 push %esi -801005d2: 53 push %ebx -801005d3: 83 ec 18 sub $0x18,%esp -801005d6: 8b 75 0c mov 0xc(%ebp),%esi -801005d9: 8b 7d 10 mov 0x10(%ebp),%edi +801005a3: 55 push %ebp +801005a4: 89 e5 mov %esp,%ebp +801005a6: 57 push %edi +801005a7: 56 push %esi +801005a8: 53 push %ebx +801005a9: 83 ec 18 sub $0x18,%esp +801005ac: 8b 7d 08 mov 0x8(%ebp),%edi +801005af: 8b 75 0c mov 0xc(%ebp),%esi int i; iunlock(ip); -801005dc: ff 75 08 pushl 0x8(%ebp) -801005df: e8 0e 10 00 00 call 801015f2 +801005b2: 57 push %edi +801005b3: e8 bd 0f 00 00 call 80101575 acquire(&cons.lock); -801005e4: c7 04 24 20 b5 10 80 movl $0x8010b520,(%esp) -801005eb: e8 a9 38 00 00 call 80103e99 +801005b8: c7 04 24 20 ff 10 80 movl $0x8010ff20,(%esp) +801005bf: e8 3d 37 00 00 call 80103d01 for(i = 0; i < n; i++) -801005f0: 83 c4 10 add $0x10,%esp -801005f3: 85 ff test %edi,%edi -801005f5: 7e 13 jle 8010060a -801005f7: 89 f3 mov %esi,%ebx -801005f9: 01 fe add %edi,%esi +801005c4: 83 c4 10 add $0x10,%esp +801005c7: 83 7d 10 00 cmpl $0x0,0x10(%ebp) +801005cb: 7e 14 jle 801005e1 +801005cd: 89 f3 mov %esi,%ebx +801005cf: 03 75 10 add 0x10(%ebp),%esi consputc(buf[i] & 0xff); -801005fb: 0f b6 03 movzbl (%ebx),%eax -801005fe: e8 d1 fd ff ff call 801003d4 +801005d2: 0f b6 03 movzbl (%ebx),%eax +801005d5: e8 de fd ff ff call 801003b8 for(i = 0; i < n; i++) -80100603: 83 c3 01 add $0x1,%ebx -80100606: 39 f3 cmp %esi,%ebx -80100608: 75 f1 jne 801005fb +801005da: 83 c3 01 add $0x1,%ebx +801005dd: 39 f3 cmp %esi,%ebx +801005df: 75 f1 jne 801005d2 release(&cons.lock); -8010060a: 83 ec 0c sub $0xc,%esp -8010060d: 68 20 b5 10 80 push $0x8010b520 -80100612: e8 ed 38 00 00 call 80103f04 +801005e1: 83 ec 0c sub $0xc,%esp +801005e4: 68 20 ff 10 80 push $0x8010ff20 +801005e9: e8 7a 37 00 00 call 80103d68 ilock(ip); -80100617: 83 c4 04 add $0x4,%esp -8010061a: ff 75 08 pushl 0x8(%ebp) -8010061d: e8 0a 0f 00 00 call 8010152c +801005ee: 89 3c 24 mov %edi,(%esp) +801005f1: e8 bd 0e 00 00 call 801014b3 return n; } -80100622: 89 f8 mov %edi,%eax -80100624: 8d 65 f4 lea -0xc(%ebp),%esp -80100627: 5b pop %ebx -80100628: 5e pop %esi -80100629: 5f pop %edi -8010062a: 5d pop %ebp -8010062b: c3 ret - -8010062c : -{ -8010062c: f3 0f 1e fb endbr32 -80100630: 55 push %ebp -80100631: 89 e5 mov %esp,%ebp -80100633: 57 push %edi -80100634: 56 push %esi -80100635: 53 push %ebx -80100636: 83 ec 1c sub $0x1c,%esp +801005f6: 8b 45 10 mov 0x10(%ebp),%eax +801005f9: 8d 65 f4 lea -0xc(%ebp),%esp +801005fc: 5b pop %ebx +801005fd: 5e pop %esi +801005fe: 5f pop %edi +801005ff: 5d pop %ebp +80100600: c3 ret + +80100601 : +{ +80100601: 55 push %ebp +80100602: 89 e5 mov %esp,%ebp +80100604: 57 push %edi +80100605: 56 push %esi +80100606: 53 push %ebx +80100607: 83 ec 1c sub $0x1c,%esp locking = cons.locking; -80100639: a1 54 b5 10 80 mov 0x8010b554,%eax -8010063e: 89 45 dc mov %eax,-0x24(%ebp) +8010060a: a1 54 ff 10 80 mov 0x8010ff54,%eax +8010060f: 89 45 dc mov %eax,-0x24(%ebp) if(locking) -80100641: 85 c0 test %eax,%eax -80100643: 75 2b jne 80100670 +80100612: 85 c0 test %eax,%eax +80100614: 75 2b jne 80100641 if (fmt == 0) -80100645: 8b 7d 08 mov 0x8(%ebp),%edi -80100648: 85 ff test %edi,%edi -8010064a: 74 36 je 80100682 +80100616: 8b 7d 08 mov 0x8(%ebp),%edi +80100619: 85 ff test %edi,%edi +8010061b: 74 36 je 80100653 for(i = 0; (c = fmt[i] & 0xff) != 0; i++){ -8010064c: 0f b6 07 movzbl (%edi),%eax +8010061d: 0f b6 07 movzbl (%edi),%eax argp = (uint*)(void*)(&fmt + 1); -8010064f: 8d 4d 0c lea 0xc(%ebp),%ecx -80100652: 89 4d e4 mov %ecx,-0x1c(%ebp) +80100620: 8d 4d 0c lea 0xc(%ebp),%ecx +80100623: 89 4d e4 mov %ecx,-0x1c(%ebp) for(i = 0; (c = fmt[i] & 0xff) != 0; i++){ -80100655: bb 00 00 00 00 mov $0x0,%ebx -8010065a: 85 c0 test %eax,%eax -8010065c: 75 41 jne 8010069f +80100626: bb 00 00 00 00 mov $0x0,%ebx +8010062b: 85 c0 test %eax,%eax +8010062d: 75 41 jne 80100670 if(locking) -8010065e: 83 7d dc 00 cmpl $0x0,-0x24(%ebp) -80100662: 0f 85 0e 01 00 00 jne 80100776 -} -80100668: 8d 65 f4 lea -0xc(%ebp),%esp -8010066b: 5b pop %ebx -8010066c: 5e pop %esi -8010066d: 5f pop %edi -8010066e: 5d pop %ebp -8010066f: c3 ret +8010062f: 83 7d dc 00 cmpl $0x0,-0x24(%ebp) +80100633: 0f 85 0e 01 00 00 jne 80100747 +} +80100639: 8d 65 f4 lea -0xc(%ebp),%esp +8010063c: 5b pop %ebx +8010063d: 5e pop %esi +8010063e: 5f pop %edi +8010063f: 5d pop %ebp +80100640: c3 ret acquire(&cons.lock); -80100670: 83 ec 0c sub $0xc,%esp -80100673: 68 20 b5 10 80 push $0x8010b520 -80100678: e8 1c 38 00 00 call 80103e99 -8010067d: 83 c4 10 add $0x10,%esp -80100680: eb c3 jmp 80100645 +80100641: 83 ec 0c sub $0xc,%esp +80100644: 68 20 ff 10 80 push $0x8010ff20 +80100649: e8 b3 36 00 00 call 80103d01 +8010064e: 83 c4 10 add $0x10,%esp +80100651: eb c3 jmp 80100616 panic("null fmt"); -80100682: 83 ec 0c sub $0xc,%esp -80100685: 68 db 78 10 80 push $0x801078db -8010068a: e8 c9 fc ff ff call 80100358 +80100653: 83 ec 0c sub $0xc,%esp +80100656: 68 fb 75 10 80 push $0x801075fb +8010065b: e8 e0 fc ff ff call 80100340 consputc(c); -8010068f: e8 40 fd ff ff call 801003d4 +80100660: e8 53 fd ff ff call 801003b8 for(i = 0; (c = fmt[i] & 0xff) != 0; i++){ -80100694: 83 c3 01 add $0x1,%ebx -80100697: 0f b6 04 1f movzbl (%edi,%ebx,1),%eax -8010069b: 85 c0 test %eax,%eax -8010069d: 74 bf je 8010065e +80100665: 83 c3 01 add $0x1,%ebx +80100668: 0f b6 04 1f movzbl (%edi,%ebx,1),%eax +8010066c: 85 c0 test %eax,%eax +8010066e: 74 bf je 8010062f if(c != '%'){ -8010069f: 83 f8 25 cmp $0x25,%eax -801006a2: 75 eb jne 8010068f +80100670: 83 f8 25 cmp $0x25,%eax +80100673: 75 eb jne 80100660 c = fmt[++i] & 0xff; -801006a4: 83 c3 01 add $0x1,%ebx -801006a7: 0f b6 34 1f movzbl (%edi,%ebx,1),%esi +80100675: 83 c3 01 add $0x1,%ebx +80100678: 0f b6 34 1f movzbl (%edi,%ebx,1),%esi if(c == 0) -801006ab: 85 f6 test %esi,%esi -801006ad: 74 af je 8010065e +8010067c: 85 f6 test %esi,%esi +8010067e: 74 af je 8010062f switch(c){ -801006af: 83 fe 70 cmp $0x70,%esi -801006b2: 74 3a je 801006ee -801006b4: 7f 2e jg 801006e4 -801006b6: 83 fe 25 cmp $0x25,%esi -801006b9: 0f 84 92 00 00 00 je 80100751 -801006bf: 83 fe 64 cmp $0x64,%esi -801006c2: 0f 85 98 00 00 00 jne 80100760 +80100680: 83 fe 70 cmp $0x70,%esi +80100683: 74 3a je 801006bf +80100685: 7f 2e jg 801006b5 +80100687: 83 fe 25 cmp $0x25,%esi +8010068a: 0f 84 92 00 00 00 je 80100722 +80100690: 83 fe 64 cmp $0x64,%esi +80100693: 0f 85 98 00 00 00 jne 80100731 printint(*argp++, 10, 1); -801006c8: 8b 45 e4 mov -0x1c(%ebp),%eax -801006cb: 8d 70 04 lea 0x4(%eax),%esi -801006ce: b9 01 00 00 00 mov $0x1,%ecx -801006d3: ba 0a 00 00 00 mov $0xa,%edx -801006d8: 8b 00 mov (%eax),%eax -801006da: e8 69 fe ff ff call 80100548 -801006df: 89 75 e4 mov %esi,-0x1c(%ebp) +80100699: 8b 45 e4 mov -0x1c(%ebp),%eax +8010069c: 8d 70 04 lea 0x4(%eax),%esi +8010069f: b9 01 00 00 00 mov $0x1,%ecx +801006a4: ba 0a 00 00 00 mov $0xa,%edx +801006a9: 8b 00 mov (%eax),%eax +801006ab: e8 72 fe ff ff call 80100522 +801006b0: 89 75 e4 mov %esi,-0x1c(%ebp) break; -801006e2: eb b0 jmp 80100694 +801006b3: eb b0 jmp 80100665 switch(c){ -801006e4: 83 fe 73 cmp $0x73,%esi -801006e7: 74 21 je 8010070a -801006e9: 83 fe 78 cmp $0x78,%esi -801006ec: 75 72 jne 80100760 +801006b5: 83 fe 73 cmp $0x73,%esi +801006b8: 74 21 je 801006db +801006ba: 83 fe 78 cmp $0x78,%esi +801006bd: 75 72 jne 80100731 printint(*argp++, 16, 0); -801006ee: 8b 45 e4 mov -0x1c(%ebp),%eax -801006f1: 8d 70 04 lea 0x4(%eax),%esi -801006f4: b9 00 00 00 00 mov $0x0,%ecx -801006f9: ba 10 00 00 00 mov $0x10,%edx -801006fe: 8b 00 mov (%eax),%eax -80100700: e8 43 fe ff ff call 80100548 -80100705: 89 75 e4 mov %esi,-0x1c(%ebp) +801006bf: 8b 45 e4 mov -0x1c(%ebp),%eax +801006c2: 8d 70 04 lea 0x4(%eax),%esi +801006c5: b9 00 00 00 00 mov $0x0,%ecx +801006ca: ba 10 00 00 00 mov $0x10,%edx +801006cf: 8b 00 mov (%eax),%eax +801006d1: e8 4c fe ff ff call 80100522 +801006d6: 89 75 e4 mov %esi,-0x1c(%ebp) break; -80100708: eb 8a jmp 80100694 +801006d9: eb 8a jmp 80100665 if((s = (char*)*argp++) == 0) -8010070a: 8b 45 e4 mov -0x1c(%ebp),%eax -8010070d: 8d 50 04 lea 0x4(%eax),%edx -80100710: 89 55 e0 mov %edx,-0x20(%ebp) -80100713: 8b 00 mov (%eax),%eax -80100715: 85 c0 test %eax,%eax -80100717: 74 11 je 8010072a -80100719: 89 c6 mov %eax,%esi +801006db: 8b 45 e4 mov -0x1c(%ebp),%eax +801006de: 8d 50 04 lea 0x4(%eax),%edx +801006e1: 89 55 e0 mov %edx,-0x20(%ebp) +801006e4: 8b 00 mov (%eax),%eax +801006e6: 85 c0 test %eax,%eax +801006e8: 74 11 je 801006fb +801006ea: 89 c6 mov %eax,%esi for(; *s; s++) -8010071b: 0f b6 00 movzbl (%eax),%eax +801006ec: 0f b6 00 movzbl (%eax),%eax if((s = (char*)*argp++) == 0) -8010071e: 89 55 e4 mov %edx,-0x1c(%ebp) +801006ef: 89 55 e4 mov %edx,-0x1c(%ebp) for(; *s; s++) -80100721: 84 c0 test %al,%al -80100723: 75 0f jne 80100734 -80100725: e9 6a ff ff ff jmp 80100694 +801006f2: 84 c0 test %al,%al +801006f4: 75 0f jne 80100705 +801006f6: e9 6a ff ff ff jmp 80100665 s = "(null)"; -8010072a: be d4 78 10 80 mov $0x801078d4,%esi +801006fb: be f4 75 10 80 mov $0x801075f4,%esi for(; *s; s++) -8010072f: b8 28 00 00 00 mov $0x28,%eax +80100700: b8 28 00 00 00 mov $0x28,%eax consputc(*s); -80100734: 0f be c0 movsbl %al,%eax -80100737: e8 98 fc ff ff call 801003d4 +80100705: 0f be c0 movsbl %al,%eax +80100708: e8 ab fc ff ff call 801003b8 for(; *s; s++) -8010073c: 83 c6 01 add $0x1,%esi -8010073f: 0f b6 06 movzbl (%esi),%eax -80100742: 84 c0 test %al,%al -80100744: 75 ee jne 80100734 +8010070d: 83 c6 01 add $0x1,%esi +80100710: 0f b6 06 movzbl (%esi),%eax +80100713: 84 c0 test %al,%al +80100715: 75 ee jne 80100705 if((s = (char*)*argp++) == 0) -80100746: 8b 45 e0 mov -0x20(%ebp),%eax -80100749: 89 45 e4 mov %eax,-0x1c(%ebp) -8010074c: e9 43 ff ff ff jmp 80100694 +80100717: 8b 45 e0 mov -0x20(%ebp),%eax +8010071a: 89 45 e4 mov %eax,-0x1c(%ebp) +8010071d: e9 43 ff ff ff jmp 80100665 consputc('%'); -80100751: b8 25 00 00 00 mov $0x25,%eax -80100756: e8 79 fc ff ff call 801003d4 +80100722: b8 25 00 00 00 mov $0x25,%eax +80100727: e8 8c fc ff ff call 801003b8 break; -8010075b: e9 34 ff ff ff jmp 80100694 +8010072c: e9 34 ff ff ff jmp 80100665 consputc('%'); -80100760: b8 25 00 00 00 mov $0x25,%eax -80100765: e8 6a fc ff ff call 801003d4 +80100731: b8 25 00 00 00 mov $0x25,%eax +80100736: e8 7d fc ff ff call 801003b8 consputc(c); -8010076a: 89 f0 mov %esi,%eax -8010076c: e8 63 fc ff ff call 801003d4 +8010073b: 89 f0 mov %esi,%eax +8010073d: e8 76 fc ff ff call 801003b8 break; -80100771: e9 1e ff ff ff jmp 80100694 +80100742: e9 1e ff ff ff jmp 80100665 release(&cons.lock); -80100776: 83 ec 0c sub $0xc,%esp -80100779: 68 20 b5 10 80 push $0x8010b520 -8010077e: e8 81 37 00 00 call 80103f04 -80100783: 83 c4 10 add $0x10,%esp -} -80100786: e9 dd fe ff ff jmp 80100668 - -8010078b : -{ -8010078b: f3 0f 1e fb endbr32 -8010078f: 55 push %ebp -80100790: 89 e5 mov %esp,%ebp -80100792: 57 push %edi -80100793: 56 push %esi -80100794: 53 push %ebx -80100795: 83 ec 28 sub $0x28,%esp -80100798: 8b 7d 08 mov 0x8(%ebp),%edi +80100747: 83 ec 0c sub $0xc,%esp +8010074a: 68 20 ff 10 80 push $0x8010ff20 +8010074f: e8 14 36 00 00 call 80103d68 +80100754: 83 c4 10 add $0x10,%esp +} +80100757: e9 dd fe ff ff jmp 80100639 + +8010075c : +{ +8010075c: 55 push %ebp +8010075d: 89 e5 mov %esp,%ebp +8010075f: 57 push %edi +80100760: 56 push %esi +80100761: 53 push %ebx +80100762: 83 ec 28 sub $0x28,%esp +80100765: 8b 7d 08 mov 0x8(%ebp),%edi acquire(&cons.lock); -8010079b: 68 20 b5 10 80 push $0x8010b520 -801007a0: e8 f4 36 00 00 call 80103e99 +80100768: 68 20 ff 10 80 push $0x8010ff20 +8010076d: e8 8f 35 00 00 call 80103d01 while((c = getc()) >= 0){ -801007a5: 83 c4 10 add $0x10,%esp +80100772: 83 c4 10 add $0x10,%esp int c, doprocdump = 0; -801007a8: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) +80100775: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) while(input.e != input.w && -801007af: bb 40 2b 11 80 mov $0x80112b40,%ebx +8010077c: bb 80 fe 10 80 mov $0x8010fe80,%ebx while((c = getc()) >= 0){ -801007b4: eb 19 jmp 801007cf +80100781: eb 19 jmp 8010079c switch(c){ -801007b6: 83 fe 08 cmp $0x8,%esi -801007b9: 0f 84 cf 00 00 00 je 8010088e -801007bf: 83 fe 10 cmp $0x10,%esi -801007c2: 0f 85 f0 00 00 00 jne 801008b8 -801007c8: c7 45 e4 01 00 00 00 movl $0x1,-0x1c(%ebp) +80100783: 83 fe 08 cmp $0x8,%esi +80100786: 0f 84 cf 00 00 00 je 8010085b +8010078c: 83 fe 10 cmp $0x10,%esi +8010078f: 0f 85 f0 00 00 00 jne 80100885 +80100795: c7 45 e4 01 00 00 00 movl $0x1,-0x1c(%ebp) while((c = getc()) >= 0){ -801007cf: ff d7 call *%edi -801007d1: 89 c6 mov %eax,%esi -801007d3: 85 c0 test %eax,%eax -801007d5: 0f 88 ea 00 00 00 js 801008c5 +8010079c: ff d7 call *%edi +8010079e: 89 c6 mov %eax,%esi +801007a0: 85 c0 test %eax,%eax +801007a2: 0f 88 ea 00 00 00 js 80100892 switch(c){ -801007db: 83 fe 15 cmp $0x15,%esi -801007de: 74 67 je 80100847 -801007e0: 7e d4 jle 801007b6 -801007e2: 83 fe 7f cmp $0x7f,%esi -801007e5: 0f 84 a3 00 00 00 je 8010088e +801007a8: 83 fe 15 cmp $0x15,%esi +801007ab: 74 67 je 80100814 +801007ad: 7e d4 jle 80100783 +801007af: 83 fe 7f cmp $0x7f,%esi +801007b2: 0f 84 a3 00 00 00 je 8010085b if(c != 0 && input.e-input.r < INPUT_BUF){ -801007eb: 8b 83 88 00 00 00 mov 0x88(%ebx),%eax -801007f1: 89 c2 mov %eax,%edx -801007f3: 2b 93 80 00 00 00 sub 0x80(%ebx),%edx -801007f9: 83 fa 7f cmp $0x7f,%edx -801007fc: 77 d1 ja 801007cf +801007b8: 8b 83 88 00 00 00 mov 0x88(%ebx),%eax +801007be: 89 c2 mov %eax,%edx +801007c0: 2b 93 80 00 00 00 sub 0x80(%ebx),%edx +801007c6: 83 fa 7f cmp $0x7f,%edx +801007c9: 77 d1 ja 8010079c c = (c == '\r') ? '\n' : c; -801007fe: 83 fe 0d cmp $0xd,%esi -80100801: 0f 84 e3 00 00 00 je 801008ea +801007cb: 83 fe 0d cmp $0xd,%esi +801007ce: 0f 84 e3 00 00 00 je 801008b7 input.buf[input.e++ % INPUT_BUF] = c; -80100807: 8d 50 01 lea 0x1(%eax),%edx -8010080a: 89 93 88 00 00 00 mov %edx,0x88(%ebx) -80100810: 83 e0 7f and $0x7f,%eax -80100813: 89 f1 mov %esi,%ecx -80100815: 88 0c 03 mov %cl,(%ebx,%eax,1) +801007d4: 8d 50 01 lea 0x1(%eax),%edx +801007d7: 89 93 88 00 00 00 mov %edx,0x88(%ebx) +801007dd: 83 e0 7f and $0x7f,%eax +801007e0: 89 f1 mov %esi,%ecx +801007e2: 88 0c 03 mov %cl,(%ebx,%eax,1) consputc(c); -80100818: 89 f0 mov %esi,%eax -8010081a: e8 b5 fb ff ff call 801003d4 +801007e5: 89 f0 mov %esi,%eax +801007e7: e8 cc fb ff ff call 801003b8 if(c == '\n' || c == C('D') || input.e == input.r+INPUT_BUF){ -8010081f: 83 fe 0a cmp $0xa,%esi -80100822: 0f 84 dc 00 00 00 je 80100904 -80100828: 83 fe 04 cmp $0x4,%esi -8010082b: 0f 84 d3 00 00 00 je 80100904 -80100831: 8b 83 80 00 00 00 mov 0x80(%ebx),%eax -80100837: 83 e8 80 sub $0xffffff80,%eax -8010083a: 39 83 88 00 00 00 cmp %eax,0x88(%ebx) -80100840: 75 8d jne 801007cf -80100842: e9 bd 00 00 00 jmp 80100904 +801007ec: 83 fe 0a cmp $0xa,%esi +801007ef: 0f 84 dc 00 00 00 je 801008d1 +801007f5: 83 fe 04 cmp $0x4,%esi +801007f8: 0f 84 d3 00 00 00 je 801008d1 +801007fe: 8b 83 80 00 00 00 mov 0x80(%ebx),%eax +80100804: 83 e8 80 sub $0xffffff80,%eax +80100807: 39 83 88 00 00 00 cmp %eax,0x88(%ebx) +8010080d: 75 8d jne 8010079c +8010080f: e9 bd 00 00 00 jmp 801008d1 while(input.e != input.w && -80100847: 8b 83 88 00 00 00 mov 0x88(%ebx),%eax -8010084d: 3b 83 84 00 00 00 cmp 0x84(%ebx),%eax -80100853: 0f 84 76 ff ff ff je 801007cf +80100814: 8b 83 88 00 00 00 mov 0x88(%ebx),%eax +8010081a: 3b 83 84 00 00 00 cmp 0x84(%ebx),%eax +80100820: 0f 84 76 ff ff ff je 8010079c input.buf[(input.e-1) % INPUT_BUF] != '\n'){ -80100859: 83 e8 01 sub $0x1,%eax -8010085c: 89 c2 mov %eax,%edx -8010085e: 83 e2 7f and $0x7f,%edx +80100826: 83 e8 01 sub $0x1,%eax +80100829: 89 c2 mov %eax,%edx +8010082b: 83 e2 7f and $0x7f,%edx while(input.e != input.w && -80100861: 80 3c 13 0a cmpb $0xa,(%ebx,%edx,1) -80100865: 0f 84 64 ff ff ff je 801007cf +8010082e: 80 3c 13 0a cmpb $0xa,(%ebx,%edx,1) +80100832: 0f 84 64 ff ff ff je 8010079c input.e--; -8010086b: 89 83 88 00 00 00 mov %eax,0x88(%ebx) +80100838: 89 83 88 00 00 00 mov %eax,0x88(%ebx) consputc(BACKSPACE); -80100871: b8 00 01 00 00 mov $0x100,%eax -80100876: e8 59 fb ff ff call 801003d4 +8010083e: b8 00 01 00 00 mov $0x100,%eax +80100843: e8 70 fb ff ff call 801003b8 while(input.e != input.w && -8010087b: 8b 83 88 00 00 00 mov 0x88(%ebx),%eax -80100881: 3b 83 84 00 00 00 cmp 0x84(%ebx),%eax -80100887: 75 d0 jne 80100859 -80100889: e9 41 ff ff ff jmp 801007cf +80100848: 8b 83 88 00 00 00 mov 0x88(%ebx),%eax +8010084e: 3b 83 84 00 00 00 cmp 0x84(%ebx),%eax +80100854: 75 d0 jne 80100826 +80100856: e9 41 ff ff ff jmp 8010079c if(input.e != input.w){ -8010088e: 8b 83 88 00 00 00 mov 0x88(%ebx),%eax -80100894: 3b 83 84 00 00 00 cmp 0x84(%ebx),%eax -8010089a: 0f 84 2f ff ff ff je 801007cf +8010085b: 8b 83 88 00 00 00 mov 0x88(%ebx),%eax +80100861: 3b 83 84 00 00 00 cmp 0x84(%ebx),%eax +80100867: 0f 84 2f ff ff ff je 8010079c input.e--; -801008a0: 83 e8 01 sub $0x1,%eax -801008a3: 89 83 88 00 00 00 mov %eax,0x88(%ebx) +8010086d: 83 e8 01 sub $0x1,%eax +80100870: 89 83 88 00 00 00 mov %eax,0x88(%ebx) consputc(BACKSPACE); -801008a9: b8 00 01 00 00 mov $0x100,%eax -801008ae: e8 21 fb ff ff call 801003d4 -801008b3: e9 17 ff ff ff jmp 801007cf +80100876: b8 00 01 00 00 mov $0x100,%eax +8010087b: e8 38 fb ff ff call 801003b8 +80100880: e9 17 ff ff ff jmp 8010079c if(c != 0 && input.e-input.r < INPUT_BUF){ -801008b8: 85 f6 test %esi,%esi -801008ba: 0f 84 0f ff ff ff je 801007cf -801008c0: e9 26 ff ff ff jmp 801007eb +80100885: 85 f6 test %esi,%esi +80100887: 0f 84 0f ff ff ff je 8010079c +8010088d: e9 26 ff ff ff jmp 801007b8 release(&cons.lock); -801008c5: 83 ec 0c sub $0xc,%esp -801008c8: 68 20 b5 10 80 push $0x8010b520 -801008cd: e8 32 36 00 00 call 80103f04 +80100892: 83 ec 0c sub $0xc,%esp +80100895: 68 20 ff 10 80 push $0x8010ff20 +8010089a: e8 c9 34 00 00 call 80103d68 if(doprocdump) { -801008d2: 83 c4 10 add $0x10,%esp -801008d5: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp) -801008d9: 75 08 jne 801008e3 -} -801008db: 8d 65 f4 lea -0xc(%ebp),%esp -801008de: 5b pop %ebx -801008df: 5e pop %esi -801008e0: 5f pop %edi -801008e1: 5d pop %ebp -801008e2: c3 ret +8010089f: 83 c4 10 add $0x10,%esp +801008a2: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp) +801008a6: 75 08 jne 801008b0 +} +801008a8: 8d 65 f4 lea -0xc(%ebp),%esp +801008ab: 5b pop %ebx +801008ac: 5e pop %esi +801008ad: 5f pop %edi +801008ae: 5d pop %ebp +801008af: c3 ret procdump(); // now call procdump() wo. cons.lock held -801008e3: e8 f7 31 00 00 call 80103adf +801008b0: e8 bf 30 00 00 call 80103974 } -801008e8: eb f1 jmp 801008db +801008b5: eb f1 jmp 801008a8 input.buf[input.e++ % INPUT_BUF] = c; -801008ea: 8d 50 01 lea 0x1(%eax),%edx -801008ed: 89 93 88 00 00 00 mov %edx,0x88(%ebx) -801008f3: 83 e0 7f and $0x7f,%eax -801008f6: c6 04 03 0a movb $0xa,(%ebx,%eax,1) +801008b7: 8d 50 01 lea 0x1(%eax),%edx +801008ba: 89 93 88 00 00 00 mov %edx,0x88(%ebx) +801008c0: 83 e0 7f and $0x7f,%eax +801008c3: c6 04 03 0a movb $0xa,(%ebx,%eax,1) consputc(c); -801008fa: b8 0a 00 00 00 mov $0xa,%eax -801008ff: e8 d0 fa ff ff call 801003d4 +801008c7: b8 0a 00 00 00 mov $0xa,%eax +801008cc: e8 e7 fa ff ff call 801003b8 input.w = input.e; -80100904: 8b 83 88 00 00 00 mov 0x88(%ebx),%eax -8010090a: 89 83 84 00 00 00 mov %eax,0x84(%ebx) +801008d1: 8b 83 88 00 00 00 mov 0x88(%ebx),%eax +801008d7: 89 83 84 00 00 00 mov %eax,0x84(%ebx) wakeup(&input.r); -80100910: 83 ec 0c sub $0xc,%esp -80100913: 68 c0 2b 11 80 push $0x80112bc0 -80100918: e8 1d 31 00 00 call 80103a3a -8010091d: 83 c4 10 add $0x10,%esp -80100920: e9 aa fe ff ff jmp 801007cf +801008dd: 83 ec 0c sub $0xc,%esp +801008e0: 68 00 ff 10 80 push $0x8010ff00 +801008e5: e8 ed 2f 00 00 call 801038d7 +801008ea: 83 c4 10 add $0x10,%esp +801008ed: e9 aa fe ff ff jmp 8010079c -80100925 : +801008f2 : void consoleinit(void) { -80100925: f3 0f 1e fb endbr32 -80100929: 55 push %ebp -8010092a: 89 e5 mov %esp,%ebp -8010092c: 83 ec 10 sub $0x10,%esp +801008f2: 55 push %ebp +801008f3: 89 e5 mov %esp,%ebp +801008f5: 83 ec 10 sub $0x10,%esp initlock(&cons.lock, "console"); -8010092f: 68 e4 78 10 80 push $0x801078e4 -80100934: 68 20 b5 10 80 push $0x8010b520 -80100939: e8 ff 33 00 00 call 80103d3d +801008f8: 68 04 76 10 80 push $0x80107604 +801008fd: 68 20 ff 10 80 push $0x8010ff20 +80100902: e8 b1 32 00 00 call 80103bb8 devsw[CONSOLE].write = consolewrite; -8010093e: c7 05 8c 35 11 80 c9 movl $0x801005c9,0x8011358c -80100945: 05 10 80 +80100907: c7 05 0c 09 11 80 a3 movl $0x801005a3,0x8011090c +8010090e: 05 10 80 devsw[CONSOLE].read = consoleread; -80100948: c7 05 88 35 11 80 64 movl $0x80100264,0x80113588 -8010094f: 02 10 80 +80100911: c7 05 08 09 11 80 54 movl $0x80100254,0x80110908 +80100918: 02 10 80 cons.locking = 1; -80100952: c7 05 54 b5 10 80 01 movl $0x1,0x8010b554 -80100959: 00 00 00 +8010091b: c7 05 54 ff 10 80 01 movl $0x1,0x8010ff54 +80100922: 00 00 00 ioapicenable(IRQ_KBD, 0); -8010095c: 83 c4 08 add $0x8,%esp -8010095f: 6a 00 push $0x0 -80100961: 6a 01 push $0x1 -80100963: e8 1c 17 00 00 call 80102084 +80100925: 83 c4 08 add $0x8,%esp +80100928: 6a 00 push $0x0 +8010092a: 6a 01 push $0x1 +8010092c: e8 98 16 00 00 call 80101fc9 } -80100968: 83 c4 10 add $0x10,%esp -8010096b: c9 leave -8010096c: c3 ret +80100931: 83 c4 10 add $0x10,%esp +80100934: c9 leave +80100935: c3 ret -8010096d : +80100936 : #include "x86.h" #include "elf.h" int exec(char *path, char **argv) { -8010096d: f3 0f 1e fb endbr32 -80100971: 55 push %ebp -80100972: 89 e5 mov %esp,%ebp -80100974: 57 push %edi -80100975: 56 push %esi -80100976: 53 push %ebx -80100977: 81 ec 0c 01 00 00 sub $0x10c,%esp +80100936: 55 push %ebp +80100937: 89 e5 mov %esp,%ebp +80100939: 57 push %edi +8010093a: 56 push %esi +8010093b: 53 push %ebx +8010093c: 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(); -8010097d: e8 68 2a 00 00 call 801033ea -80100982: 89 85 ec fe ff ff mov %eax,-0x114(%ebp) +80100942: e8 69 29 00 00 call 801032b0 +80100947: 89 85 ec fe ff ff mov %eax,-0x114(%ebp) begin_op(); -80100988: e8 f3 1e 00 00 call 80102880 +8010094d: e8 2c 1e 00 00 call 8010277e if((ip = namei(path)) == 0){ -8010098d: 83 ec 0c sub $0xc,%esp -80100990: ff 75 08 pushl 0x8(%ebp) -80100993: e8 4c 13 00 00 call 80101ce4 -80100998: 83 c4 10 add $0x10,%esp -8010099b: 85 c0 test %eax,%eax -8010099d: 74 4e je 801009ed -8010099f: 89 c3 mov %eax,%ebx +80100952: 83 ec 0c sub $0xc,%esp +80100955: ff 75 08 push 0x8(%ebp) +80100958: e8 e4 12 00 00 call 80101c41 +8010095d: 83 c4 10 add $0x10,%esp +80100960: 85 c0 test %eax,%eax +80100962: 74 4e je 801009b2 +80100964: 89 c3 mov %eax,%ebx end_op(); cprintf("exec: fail\n"); return -1; } ilock(ip); -801009a1: 83 ec 0c sub $0xc,%esp -801009a4: 50 push %eax -801009a5: e8 82 0b 00 00 call 8010152c +80100966: 83 ec 0c sub $0xc,%esp +80100969: 50 push %eax +8010096a: e8 44 0b 00 00 call 801014b3 pgdir = 0; // Check ELF header if(readi(ip, (char*)&elf, 0, sizeof(elf)) != sizeof(elf)) -801009aa: 6a 34 push $0x34 -801009ac: 6a 00 push $0x0 -801009ae: 8d 85 24 ff ff ff lea -0xdc(%ebp),%eax -801009b4: 50 push %eax -801009b5: 53 push %ebx -801009b6: e8 19 0e 00 00 call 801017d4 -801009bb: 83 c4 20 add $0x20,%esp -801009be: 83 f8 34 cmp $0x34,%eax -801009c1: 75 0c jne 801009cf +8010096f: 6a 34 push $0x34 +80100971: 6a 00 push $0x0 +80100973: 8d 85 24 ff ff ff lea -0xdc(%ebp),%eax +80100979: 50 push %eax +8010097a: 53 push %ebx +8010097b: e8 c7 0d 00 00 call 80101747 +80100980: 83 c4 20 add $0x20,%esp +80100983: 83 f8 34 cmp $0x34,%eax +80100986: 75 0c jne 80100994 goto bad; if(elf.magic != ELF_MAGIC) -801009c3: 81 bd 24 ff ff ff 7f cmpl $0x464c457f,-0xdc(%ebp) -801009ca: 45 4c 46 -801009cd: 74 3a je 80100a09 +80100988: 81 bd 24 ff ff ff 7f cmpl $0x464c457f,-0xdc(%ebp) +8010098f: 45 4c 46 +80100992: 74 3a je 801009ce bad: if(pgdir) freevm(pgdir); if(ip){ iunlockput(ip); -801009cf: 83 ec 0c sub $0xc,%esp -801009d2: 53 push %ebx -801009d3: e8 a9 0d 00 00 call 80101781 +80100994: 83 ec 0c sub $0xc,%esp +80100997: 53 push %ebx +80100998: e8 5f 0d 00 00 call 801016fc end_op(); -801009d8: e8 22 1f 00 00 call 801028ff -801009dd: 83 c4 10 add $0x10,%esp +8010099d: e8 57 1e 00 00 call 801027f9 +801009a2: 83 c4 10 add $0x10,%esp } return -1; -801009e0: b8 ff ff ff ff mov $0xffffffff,%eax -} -801009e5: 8d 65 f4 lea -0xc(%ebp),%esp -801009e8: 5b pop %ebx -801009e9: 5e pop %esi -801009ea: 5f pop %edi -801009eb: 5d pop %ebp -801009ec: c3 ret +801009a5: b8 ff ff ff ff mov $0xffffffff,%eax +} +801009aa: 8d 65 f4 lea -0xc(%ebp),%esp +801009ad: 5b pop %ebx +801009ae: 5e pop %esi +801009af: 5f pop %edi +801009b0: 5d pop %ebp +801009b1: c3 ret end_op(); -801009ed: e8 0d 1f 00 00 call 801028ff +801009b2: e8 42 1e 00 00 call 801027f9 cprintf("exec: fail\n"); -801009f2: 83 ec 0c sub $0xc,%esp -801009f5: 68 fd 78 10 80 push $0x801078fd -801009fa: e8 2d fc ff ff call 8010062c +801009b7: 83 ec 0c sub $0xc,%esp +801009ba: 68 1d 76 10 80 push $0x8010761d +801009bf: e8 3d fc ff ff call 80100601 return -1; -801009ff: 83 c4 10 add $0x10,%esp -80100a02: b8 ff ff ff ff mov $0xffffffff,%eax -80100a07: eb dc jmp 801009e5 +801009c4: 83 c4 10 add $0x10,%esp +801009c7: b8 ff ff ff ff mov $0xffffffff,%eax +801009cc: eb dc jmp 801009aa if((pgdir = setupkvm()) == 0) -80100a09: e8 f0 5a 00 00 call 801064fe -80100a0e: 89 c7 mov %eax,%edi -80100a10: 85 c0 test %eax,%eax -80100a12: 74 bb je 801009cf +801009ce: e8 be 58 00 00 call 80106291 +801009d3: 89 c7 mov %eax,%edi +801009d5: 85 c0 test %eax,%eax +801009d7: 74 bb je 80100994 for(i=0, off=elf.phoff; i +801009d9: 8b 85 40 ff ff ff mov -0xc0(%ebp),%eax +801009df: 66 83 bd 50 ff ff ff cmpw $0x0,-0xb0(%ebp) +801009e6: 00 +801009e7: 0f 84 c3 00 00 00 je 80100ab0 sz = 0; -80100a28: c7 85 f0 fe ff ff 00 movl $0x0,-0x110(%ebp) -80100a2f: 00 00 00 +801009ed: c7 85 f0 fe ff ff 00 movl $0x0,-0x110(%ebp) +801009f4: 00 00 00 for(i=0, off=elf.phoff; i -80100a39: 83 c6 01 add $0x1,%esi -80100a3c: 8b 85 f4 fe ff ff mov -0x10c(%ebp),%eax -80100a42: 83 c0 20 add $0x20,%eax -80100a45: 0f b7 95 50 ff ff ff movzwl -0xb0(%ebp),%edx -80100a4c: 39 f2 cmp %esi,%edx -80100a4e: 0f 8e a1 00 00 00 jle 80100af5 +801009f7: be 00 00 00 00 mov $0x0,%esi +801009fc: eb 1b jmp 80100a19 +801009fe: 83 c6 01 add $0x1,%esi +80100a01: 8b 85 f4 fe ff ff mov -0x10c(%ebp),%eax +80100a07: 83 c0 20 add $0x20,%eax +80100a0a: 0f b7 95 50 ff ff ff movzwl -0xb0(%ebp),%edx +80100a11: 39 f2 cmp %esi,%edx +80100a13: 0f 8e a1 00 00 00 jle 80100aba if(readi(ip, (char*)&ph, off, sizeof(ph)) != sizeof(ph)) -80100a54: 89 85 f4 fe ff ff mov %eax,-0x10c(%ebp) -80100a5a: 6a 20 push $0x20 -80100a5c: 50 push %eax -80100a5d: 8d 85 04 ff ff ff lea -0xfc(%ebp),%eax -80100a63: 50 push %eax -80100a64: 53 push %ebx -80100a65: e8 6a 0d 00 00 call 801017d4 -80100a6a: 83 c4 10 add $0x10,%esp -80100a6d: 83 f8 20 cmp $0x20,%eax -80100a70: 0f 85 c0 00 00 00 jne 80100b36 +80100a19: 89 85 f4 fe ff ff mov %eax,-0x10c(%ebp) +80100a1f: 6a 20 push $0x20 +80100a21: 50 push %eax +80100a22: 8d 85 04 ff ff ff lea -0xfc(%ebp),%eax +80100a28: 50 push %eax +80100a29: 53 push %ebx +80100a2a: e8 18 0d 00 00 call 80101747 +80100a2f: 83 c4 10 add $0x10,%esp +80100a32: 83 f8 20 cmp $0x20,%eax +80100a35: 0f 85 c0 00 00 00 jne 80100afb if(ph.type != ELF_PROG_LOAD) -80100a76: 83 bd 04 ff ff ff 01 cmpl $0x1,-0xfc(%ebp) -80100a7d: 75 ba jne 80100a39 +80100a3b: 83 bd 04 ff ff ff 01 cmpl $0x1,-0xfc(%ebp) +80100a42: 75 ba jne 801009fe if(ph.memsz < ph.filesz) -80100a7f: 8b 85 18 ff ff ff mov -0xe8(%ebp),%eax -80100a85: 3b 85 14 ff ff ff cmp -0xec(%ebp),%eax -80100a8b: 0f 82 a5 00 00 00 jb 80100b36 +80100a44: 8b 85 18 ff ff ff mov -0xe8(%ebp),%eax +80100a4a: 3b 85 14 ff ff ff cmp -0xec(%ebp),%eax +80100a50: 0f 82 a5 00 00 00 jb 80100afb if(ph.vaddr + ph.memsz < ph.vaddr) -80100a91: 03 85 0c ff ff ff add -0xf4(%ebp),%eax -80100a97: 0f 82 99 00 00 00 jb 80100b36 +80100a56: 03 85 0c ff ff ff add -0xf4(%ebp),%eax +80100a5c: 0f 82 99 00 00 00 jb 80100afb if((sz = allocuvm(pgdir, sz, ph.vaddr + ph.memsz)) == 0) -80100a9d: 83 ec 04 sub $0x4,%esp -80100aa0: 50 push %eax -80100aa1: ff b5 f0 fe ff ff pushl -0x110(%ebp) -80100aa7: 57 push %edi -80100aa8: e8 e8 58 00 00 call 80106395 -80100aad: 89 85 f0 fe ff ff mov %eax,-0x110(%ebp) -80100ab3: 83 c4 10 add $0x10,%esp -80100ab6: 85 c0 test %eax,%eax -80100ab8: 74 7c je 80100b36 +80100a62: 83 ec 04 sub $0x4,%esp +80100a65: 50 push %eax +80100a66: ff b5 f0 fe ff ff push -0x110(%ebp) +80100a6c: 57 push %edi +80100a6d: e8 be 56 00 00 call 80106130 +80100a72: 89 85 f0 fe ff ff mov %eax,-0x110(%ebp) +80100a78: 83 c4 10 add $0x10,%esp +80100a7b: 85 c0 test %eax,%eax +80100a7d: 74 7c je 80100afb if(ph.vaddr % PGSIZE != 0) -80100aba: 8b 85 0c ff ff ff mov -0xf4(%ebp),%eax -80100ac0: a9 ff 0f 00 00 test $0xfff,%eax -80100ac5: 75 6f jne 80100b36 +80100a7f: 8b 85 0c ff ff ff mov -0xf4(%ebp),%eax +80100a85: a9 ff 0f 00 00 test $0xfff,%eax +80100a8a: 75 6f jne 80100afb if(loaduvm(pgdir, (char*)ph.vaddr, ip, ph.off, ph.filesz) < 0) -80100ac7: 83 ec 0c sub $0xc,%esp -80100aca: ff b5 14 ff ff ff pushl -0xec(%ebp) -80100ad0: ff b5 08 ff ff ff pushl -0xf8(%ebp) -80100ad6: 53 push %ebx -80100ad7: 50 push %eax -80100ad8: 57 push %edi -80100ad9: e8 74 57 00 00 call 80106252 -80100ade: 83 c4 20 add $0x20,%esp -80100ae1: 85 c0 test %eax,%eax -80100ae3: 0f 89 50 ff ff ff jns 80100a39 -80100ae9: eb 4b jmp 80100b36 +80100a8c: 83 ec 0c sub $0xc,%esp +80100a8f: ff b5 14 ff ff ff push -0xec(%ebp) +80100a95: ff b5 08 ff ff ff push -0xf8(%ebp) +80100a9b: 53 push %ebx +80100a9c: 50 push %eax +80100a9d: 57 push %edi +80100a9e: e8 53 55 00 00 call 80105ff6 +80100aa3: 83 c4 20 add $0x20,%esp +80100aa6: 85 c0 test %eax,%eax +80100aa8: 0f 89 50 ff ff ff jns 801009fe +80100aae: eb 4b jmp 80100afb sz = 0; -80100aeb: c7 85 f0 fe ff ff 00 movl $0x0,-0x110(%ebp) -80100af2: 00 00 00 +80100ab0: c7 85 f0 fe ff ff 00 movl $0x0,-0x110(%ebp) +80100ab7: 00 00 00 iunlockput(ip); -80100af5: 83 ec 0c sub $0xc,%esp -80100af8: 53 push %ebx -80100af9: e8 83 0c 00 00 call 80101781 +80100aba: 83 ec 0c sub $0xc,%esp +80100abd: 53 push %ebx +80100abe: e8 39 0c 00 00 call 801016fc end_op(); -80100afe: e8 fc 1d 00 00 call 801028ff +80100ac3: e8 31 1d 00 00 call 801027f9 sz = PGROUNDUP(sz); -80100b03: 8b 85 f0 fe ff ff mov -0x110(%ebp),%eax -80100b09: 05 ff 0f 00 00 add $0xfff,%eax -80100b0e: 25 00 f0 ff ff and $0xfffff000,%eax +80100ac8: 8b 85 f0 fe ff ff mov -0x110(%ebp),%eax +80100ace: 05 ff 0f 00 00 add $0xfff,%eax +80100ad3: 25 00 f0 ff ff and $0xfffff000,%eax if((sz = allocuvm(pgdir, sz, sz + 2*PGSIZE)) == 0) -80100b13: 83 c4 0c add $0xc,%esp -80100b16: 8d 90 00 20 00 00 lea 0x2000(%eax),%edx -80100b1c: 52 push %edx -80100b1d: 50 push %eax -80100b1e: 57 push %edi -80100b1f: e8 71 58 00 00 call 80106395 -80100b24: 89 85 f4 fe ff ff mov %eax,-0x10c(%ebp) -80100b2a: 83 c4 10 add $0x10,%esp +80100ad8: 83 c4 0c add $0xc,%esp +80100adb: 8d 90 00 20 00 00 lea 0x2000(%eax),%edx +80100ae1: 52 push %edx +80100ae2: 50 push %eax +80100ae3: 57 push %edi +80100ae4: e8 47 56 00 00 call 80106130 +80100ae9: 89 85 f4 fe ff ff mov %eax,-0x10c(%ebp) +80100aef: 83 c4 10 add $0x10,%esp ip = 0; -80100b2d: bb 00 00 00 00 mov $0x0,%ebx +80100af2: bb 00 00 00 00 mov $0x0,%ebx if((sz = allocuvm(pgdir, sz, sz + 2*PGSIZE)) == 0) -80100b32: 85 c0 test %eax,%eax -80100b34: 75 1e jne 80100b54 +80100af7: 85 c0 test %eax,%eax +80100af9: 75 1e jne 80100b19 freevm(pgdir); -80100b36: 83 ec 0c sub $0xc,%esp -80100b39: 57 push %edi -80100b3a: e8 48 59 00 00 call 80106487 +80100afb: 83 ec 0c sub $0xc,%esp +80100afe: 57 push %edi +80100aff: e8 1a 57 00 00 call 8010621e if(ip){ -80100b3f: 83 c4 10 add $0x10,%esp -80100b42: 85 db test %ebx,%ebx -80100b44: 0f 85 85 fe ff ff jne 801009cf +80100b04: 83 c4 10 add $0x10,%esp +80100b07: 85 db test %ebx,%ebx +80100b09: 0f 85 85 fe ff ff jne 80100994 return -1; -80100b4a: b8 ff ff ff ff mov $0xffffffff,%eax -80100b4f: e9 91 fe ff ff jmp 801009e5 +80100b0f: b8 ff ff ff ff mov $0xffffffff,%eax +80100b14: e9 91 fe ff ff jmp 801009aa clearpteu(pgdir, (char*)(sz - 2*PGSIZE)); -80100b54: 83 ec 08 sub $0x8,%esp -80100b57: 89 c3 mov %eax,%ebx -80100b59: 8d 80 00 e0 ff ff lea -0x2000(%eax),%eax -80100b5f: 50 push %eax -80100b60: 57 push %edi -80100b61: e8 25 5a 00 00 call 8010658b +80100b19: 83 ec 08 sub $0x8,%esp +80100b1c: 89 c3 mov %eax,%ebx +80100b1e: 8d 80 00 e0 ff ff lea -0x2000(%eax),%eax +80100b24: 50 push %eax +80100b25: 57 push %edi +80100b26: e8 eb 57 00 00 call 80106316 for(argc = 0; argv[argc]; argc++) { -80100b66: 8b 45 0c mov 0xc(%ebp),%eax -80100b69: 8b 00 mov (%eax),%eax -80100b6b: 83 c4 10 add $0x10,%esp -80100b6e: be 00 00 00 00 mov $0x0,%esi -80100b73: 85 c0 test %eax,%eax -80100b75: 74 5f je 80100bd6 +80100b2b: 8b 45 0c mov 0xc(%ebp),%eax +80100b2e: 8b 00 mov (%eax),%eax +80100b30: 83 c4 10 add $0x10,%esp +80100b33: be 00 00 00 00 mov $0x0,%esi +80100b38: 85 c0 test %eax,%eax +80100b3a: 74 5e je 80100b9a sp = (sp - (strlen(argv[argc]) + 1)) & ~3; -80100b77: 83 ec 0c sub $0xc,%esp -80100b7a: 50 push %eax -80100b7b: e8 9f 35 00 00 call 8010411f -80100b80: f7 d0 not %eax -80100b82: 01 d8 add %ebx,%eax -80100b84: 83 e0 fc and $0xfffffffc,%eax -80100b87: 89 c3 mov %eax,%ebx +80100b3c: 83 ec 0c sub $0xc,%esp +80100b3f: 50 push %eax +80100b40: e8 20 34 00 00 call 80103f65 +80100b45: 29 c3 sub %eax,%ebx +80100b47: 83 eb 01 sub $0x1,%ebx +80100b4a: 83 e3 fc and $0xfffffffc,%ebx if(copyout(pgdir, sp, argv[argc], strlen(argv[argc]) + 1) < 0) -80100b89: 83 c4 04 add $0x4,%esp -80100b8c: 8b 45 0c mov 0xc(%ebp),%eax -80100b8f: ff 34 b0 pushl (%eax,%esi,4) -80100b92: e8 88 35 00 00 call 8010411f -80100b97: 83 c0 01 add $0x1,%eax -80100b9a: 50 push %eax -80100b9b: 8b 45 0c mov 0xc(%ebp),%eax -80100b9e: ff 34 b0 pushl (%eax,%esi,4) -80100ba1: 53 push %ebx -80100ba2: 57 push %edi -80100ba3: e8 3a 5b 00 00 call 801066e2 -80100ba8: 83 c4 20 add $0x20,%esp -80100bab: 85 c0 test %eax,%eax -80100bad: 0f 88 f0 00 00 00 js 80100ca3 +80100b4d: 83 c4 04 add $0x4,%esp +80100b50: 8b 45 0c mov 0xc(%ebp),%eax +80100b53: ff 34 b0 push (%eax,%esi,4) +80100b56: e8 0a 34 00 00 call 80103f65 +80100b5b: 83 c0 01 add $0x1,%eax +80100b5e: 50 push %eax +80100b5f: 8b 45 0c mov 0xc(%ebp),%eax +80100b62: ff 34 b0 push (%eax,%esi,4) +80100b65: 53 push %ebx +80100b66: 57 push %edi +80100b67: e8 f5 58 00 00 call 80106461 +80100b6c: 83 c4 20 add $0x20,%esp +80100b6f: 85 c0 test %eax,%eax +80100b71: 0f 88 f0 00 00 00 js 80100c67 ustack[3+argc] = sp; -80100bb3: 89 9c b5 64 ff ff ff mov %ebx,-0x9c(%ebp,%esi,4) +80100b77: 89 9c b5 64 ff ff ff mov %ebx,-0x9c(%ebp,%esi,4) for(argc = 0; argv[argc]; argc++) { -80100bba: 83 c6 01 add $0x1,%esi -80100bbd: 8b 45 0c mov 0xc(%ebp),%eax -80100bc0: 8b 04 b0 mov (%eax,%esi,4),%eax -80100bc3: 85 c0 test %eax,%eax -80100bc5: 74 15 je 80100bdc +80100b7e: 83 c6 01 add $0x1,%esi +80100b81: 8b 45 0c mov 0xc(%ebp),%eax +80100b84: 8b 04 b0 mov (%eax,%esi,4),%eax +80100b87: 85 c0 test %eax,%eax +80100b89: 74 15 je 80100ba0 if(argc >= MAXARG) -80100bc7: 83 fe 20 cmp $0x20,%esi -80100bca: 75 ab jne 80100b77 +80100b8b: 83 fe 20 cmp $0x20,%esi +80100b8e: 75 ac jne 80100b3c ip = 0; -80100bcc: bb 00 00 00 00 mov $0x0,%ebx -80100bd1: e9 60 ff ff ff jmp 80100b36 +80100b90: bb 00 00 00 00 mov $0x0,%ebx +80100b95: e9 61 ff ff ff jmp 80100afb sp = sz; -80100bd6: 8b 9d f4 fe ff ff mov -0x10c(%ebp),%ebx +80100b9a: 8b 9d f4 fe ff ff mov -0x10c(%ebp),%ebx ustack[3+argc] = 0; -80100bdc: c7 84 b5 64 ff ff ff movl $0x0,-0x9c(%ebp,%esi,4) -80100be3: 00 00 00 00 +80100ba0: c7 84 b5 64 ff ff ff movl $0x0,-0x9c(%ebp,%esi,4) +80100ba7: 00 00 00 00 ustack[0] = 0xffffffff; // fake return PC -80100be7: c7 85 58 ff ff ff ff movl $0xffffffff,-0xa8(%ebp) -80100bee: ff ff ff +80100bab: c7 85 58 ff ff ff ff movl $0xffffffff,-0xa8(%ebp) +80100bb2: ff ff ff ustack[1] = argc; -80100bf1: 89 b5 5c ff ff ff mov %esi,-0xa4(%ebp) +80100bb5: 89 b5 5c ff ff ff mov %esi,-0xa4(%ebp) ustack[2] = sp - (argc+1)*4; // argv pointer -80100bf7: 8d 04 b5 04 00 00 00 lea 0x4(,%esi,4),%eax -80100bfe: 89 da mov %ebx,%edx -80100c00: 29 c2 sub %eax,%edx -80100c02: 89 95 60 ff ff ff mov %edx,-0xa0(%ebp) +80100bbb: 8d 04 b5 04 00 00 00 lea 0x4(,%esi,4),%eax +80100bc2: 89 da mov %ebx,%edx +80100bc4: 29 c2 sub %eax,%edx +80100bc6: 89 95 60 ff ff ff mov %edx,-0xa0(%ebp) sp -= (3+argc+1) * 4; -80100c08: 83 c0 0c add $0xc,%eax -80100c0b: 89 de mov %ebx,%esi -80100c0d: 29 c6 sub %eax,%esi +80100bcc: 83 c0 0c add $0xc,%eax +80100bcf: 89 de mov %ebx,%esi +80100bd1: 29 c6 sub %eax,%esi if(copyout(pgdir, sp, ustack, (3+argc+1)*4) < 0) -80100c0f: 50 push %eax -80100c10: 8d 85 58 ff ff ff lea -0xa8(%ebp),%eax -80100c16: 50 push %eax -80100c17: 56 push %esi -80100c18: 57 push %edi -80100c19: e8 c4 5a 00 00 call 801066e2 -80100c1e: 83 c4 10 add $0x10,%esp -80100c21: 85 c0 test %eax,%eax -80100c23: 0f 88 84 00 00 00 js 80100cad +80100bd3: 50 push %eax +80100bd4: 8d 85 58 ff ff ff lea -0xa8(%ebp),%eax +80100bda: 50 push %eax +80100bdb: 56 push %esi +80100bdc: 57 push %edi +80100bdd: e8 7f 58 00 00 call 80106461 +80100be2: 83 c4 10 add $0x10,%esp +80100be5: 85 c0 test %eax,%eax +80100be7: 0f 88 84 00 00 00 js 80100c71 for(last=s=path; *s; s++) -80100c29: 8b 45 08 mov 0x8(%ebp),%eax -80100c2c: 0f b6 10 movzbl (%eax),%edx -80100c2f: 84 d2 test %dl,%dl -80100c31: 74 1a je 80100c4d -80100c33: 83 c0 01 add $0x1,%eax -80100c36: 8b 4d 08 mov 0x8(%ebp),%ecx +80100bed: 8b 45 08 mov 0x8(%ebp),%eax +80100bf0: 0f b6 10 movzbl (%eax),%edx +80100bf3: 84 d2 test %dl,%dl +80100bf5: 74 1a je 80100c11 +80100bf7: 83 c0 01 add $0x1,%eax +80100bfa: 8b 4d 08 mov 0x8(%ebp),%ecx last = s+1; -80100c39: 80 fa 2f cmp $0x2f,%dl -80100c3c: 0f 44 c8 cmove %eax,%ecx +80100bfd: 80 fa 2f cmp $0x2f,%dl +80100c00: 0f 44 c8 cmove %eax,%ecx for(last=s=path; *s; s++) -80100c3f: 83 c0 01 add $0x1,%eax -80100c42: 0f b6 50 ff movzbl -0x1(%eax),%edx -80100c46: 84 d2 test %dl,%dl -80100c48: 75 ef jne 80100c39 -80100c4a: 89 4d 08 mov %ecx,0x8(%ebp) +80100c03: 83 c0 01 add $0x1,%eax +80100c06: 0f b6 50 ff movzbl -0x1(%eax),%edx +80100c0a: 84 d2 test %dl,%dl +80100c0c: 75 ef jne 80100bfd +80100c0e: 89 4d 08 mov %ecx,0x8(%ebp) safestrcpy(curproc->name, last, sizeof(curproc->name)); -80100c4d: 83 ec 04 sub $0x4,%esp -80100c50: 6a 10 push $0x10 -80100c52: ff 75 08 pushl 0x8(%ebp) -80100c55: 8b 9d ec fe ff ff mov -0x114(%ebp),%ebx -80100c5b: 8d 43 6c lea 0x6c(%ebx),%eax -80100c5e: 50 push %eax -80100c5f: e8 81 34 00 00 call 801040e5 +80100c11: 83 ec 04 sub $0x4,%esp +80100c14: 6a 10 push $0x10 +80100c16: ff 75 08 push 0x8(%ebp) +80100c19: 8b 9d ec fe ff ff mov -0x114(%ebp),%ebx +80100c1f: 8d 43 6c lea 0x6c(%ebx),%eax +80100c22: 50 push %eax +80100c23: e8 07 33 00 00 call 80103f2f oldpgdir = curproc->pgdir; -80100c64: 89 d9 mov %ebx,%ecx -80100c66: 8b 5b 04 mov 0x4(%ebx),%ebx +80100c28: 89 d9 mov %ebx,%ecx +80100c2a: 8b 5b 04 mov 0x4(%ebx),%ebx curproc->pgdir = pgdir; -80100c69: 89 79 04 mov %edi,0x4(%ecx) +80100c2d: 89 79 04 mov %edi,0x4(%ecx) curproc->sz = sz; -80100c6c: 8b bd f4 fe ff ff mov -0x10c(%ebp),%edi -80100c72: 89 39 mov %edi,(%ecx) +80100c30: 8b bd f4 fe ff ff mov -0x10c(%ebp),%edi +80100c36: 89 39 mov %edi,(%ecx) curproc->tf->eip = elf.entry; // main -80100c74: 8b 41 18 mov 0x18(%ecx),%eax -80100c77: 8b 95 3c ff ff ff mov -0xc4(%ebp),%edx -80100c7d: 89 50 38 mov %edx,0x38(%eax) +80100c38: 8b 41 18 mov 0x18(%ecx),%eax +80100c3b: 8b 95 3c ff ff ff mov -0xc4(%ebp),%edx +80100c41: 89 50 38 mov %edx,0x38(%eax) curproc->tf->esp = sp; -80100c80: 8b 41 18 mov 0x18(%ecx),%eax -80100c83: 89 70 44 mov %esi,0x44(%eax) +80100c44: 8b 41 18 mov 0x18(%ecx),%eax +80100c47: 89 70 44 mov %esi,0x44(%eax) switchuvm(curproc); -80100c86: 89 0c 24 mov %ecx,(%esp) -80100c89: e8 55 54 00 00 call 801060e3 +80100c4a: 89 0c 24 mov %ecx,(%esp) +80100c4d: e8 3d 52 00 00 call 80105e8f freevm(oldpgdir); -80100c8e: 89 1c 24 mov %ebx,(%esp) -80100c91: e8 f1 57 00 00 call 80106487 +80100c52: 89 1c 24 mov %ebx,(%esp) +80100c55: e8 c4 55 00 00 call 8010621e return 0; -80100c96: 83 c4 10 add $0x10,%esp -80100c99: b8 00 00 00 00 mov $0x0,%eax -80100c9e: e9 42 fd ff ff jmp 801009e5 +80100c5a: 83 c4 10 add $0x10,%esp +80100c5d: b8 00 00 00 00 mov $0x0,%eax +80100c62: e9 43 fd ff ff jmp 801009aa ip = 0; -80100ca3: bb 00 00 00 00 mov $0x0,%ebx -80100ca8: e9 89 fe ff ff jmp 80100b36 -80100cad: bb 00 00 00 00 mov $0x0,%ebx -80100cb2: e9 7f fe ff ff jmp 80100b36 +80100c67: bb 00 00 00 00 mov $0x0,%ebx +80100c6c: e9 8a fe ff ff jmp 80100afb +80100c71: bb 00 00 00 00 mov $0x0,%ebx +80100c76: e9 80 fe ff ff jmp 80100afb -80100cb7 : +80100c7b : struct file file[NFILE]; } ftable; void fileinit(void) { -80100cb7: f3 0f 1e fb endbr32 -80100cbb: 55 push %ebp -80100cbc: 89 e5 mov %esp,%ebp -80100cbe: 83 ec 10 sub $0x10,%esp +80100c7b: 55 push %ebp +80100c7c: 89 e5 mov %esp,%ebp +80100c7e: 83 ec 10 sub $0x10,%esp initlock(&ftable.lock, "ftable"); -80100cc1: 68 09 79 10 80 push $0x80107909 -80100cc6: 68 e0 2b 11 80 push $0x80112be0 -80100ccb: e8 6d 30 00 00 call 80103d3d +80100c81: 68 29 76 10 80 push $0x80107629 +80100c86: 68 60 ff 10 80 push $0x8010ff60 +80100c8b: e8 28 2f 00 00 call 80103bb8 } -80100cd0: 83 c4 10 add $0x10,%esp -80100cd3: c9 leave -80100cd4: c3 ret +80100c90: 83 c4 10 add $0x10,%esp +80100c93: c9 leave +80100c94: c3 ret -80100cd5 : +80100c95 : // Allocate a file structure. struct file* filealloc(void) { -80100cd5: f3 0f 1e fb endbr32 -80100cd9: 55 push %ebp -80100cda: 89 e5 mov %esp,%ebp -80100cdc: 53 push %ebx -80100cdd: 83 ec 10 sub $0x10,%esp +80100c95: 55 push %ebp +80100c96: 89 e5 mov %esp,%ebp +80100c98: 53 push %ebx +80100c99: 83 ec 10 sub $0x10,%esp struct file *f; acquire(&ftable.lock); -80100ce0: 68 e0 2b 11 80 push $0x80112be0 -80100ce5: e8 af 31 00 00 call 80103e99 -80100cea: 83 c4 10 add $0x10,%esp +80100c9c: 68 60 ff 10 80 push $0x8010ff60 +80100ca1: e8 5b 30 00 00 call 80103d01 +80100ca6: 83 c4 10 add $0x10,%esp for(f = ftable.file; f < ftable.file + NFILE; f++){ -80100ced: bb 14 2c 11 80 mov $0x80112c14,%ebx +80100ca9: bb 94 ff 10 80 mov $0x8010ff94,%ebx if(f->ref == 0){ -80100cf2: 83 7b 04 00 cmpl $0x0,0x4(%ebx) -80100cf6: 74 22 je 80100d1a +80100cae: 83 7b 04 00 cmpl $0x0,0x4(%ebx) +80100cb2: 74 22 je 80100cd6 for(f = ftable.file; f < ftable.file + NFILE; f++){ -80100cf8: 83 c3 18 add $0x18,%ebx -80100cfb: 81 fb 74 35 11 80 cmp $0x80113574,%ebx -80100d01: 75 ef jne 80100cf2 +80100cb4: 83 c3 18 add $0x18,%ebx +80100cb7: 81 fb f4 08 11 80 cmp $0x801108f4,%ebx +80100cbd: 75 ef jne 80100cae f->ref = 1; release(&ftable.lock); return f; } } release(&ftable.lock); -80100d03: 83 ec 0c sub $0xc,%esp -80100d06: 68 e0 2b 11 80 push $0x80112be0 -80100d0b: e8 f4 31 00 00 call 80103f04 +80100cbf: 83 ec 0c sub $0xc,%esp +80100cc2: 68 60 ff 10 80 push $0x8010ff60 +80100cc7: e8 9c 30 00 00 call 80103d68 return 0; -80100d10: 83 c4 10 add $0x10,%esp -80100d13: bb 00 00 00 00 mov $0x0,%ebx -80100d18: eb 17 jmp 80100d31 +80100ccc: 83 c4 10 add $0x10,%esp +80100ccf: bb 00 00 00 00 mov $0x0,%ebx +80100cd4: eb 17 jmp 80100ced f->ref = 1; -80100d1a: c7 43 04 01 00 00 00 movl $0x1,0x4(%ebx) +80100cd6: c7 43 04 01 00 00 00 movl $0x1,0x4(%ebx) release(&ftable.lock); -80100d21: 83 ec 0c sub $0xc,%esp -80100d24: 68 e0 2b 11 80 push $0x80112be0 -80100d29: e8 d6 31 00 00 call 80103f04 +80100cdd: 83 ec 0c sub $0xc,%esp +80100ce0: 68 60 ff 10 80 push $0x8010ff60 +80100ce5: e8 7e 30 00 00 call 80103d68 return f; -80100d2e: 83 c4 10 add $0x10,%esp +80100cea: 83 c4 10 add $0x10,%esp } -80100d31: 89 d8 mov %ebx,%eax -80100d33: 8b 5d fc mov -0x4(%ebp),%ebx -80100d36: c9 leave -80100d37: c3 ret +80100ced: 89 d8 mov %ebx,%eax +80100cef: 8b 5d fc mov -0x4(%ebp),%ebx +80100cf2: c9 leave +80100cf3: c3 ret -80100d38 : +80100cf4 : // Increment ref count for file f. struct file* filedup(struct file *f) { -80100d38: f3 0f 1e fb endbr32 -80100d3c: 55 push %ebp -80100d3d: 89 e5 mov %esp,%ebp -80100d3f: 53 push %ebx -80100d40: 83 ec 10 sub $0x10,%esp -80100d43: 8b 5d 08 mov 0x8(%ebp),%ebx +80100cf4: 55 push %ebp +80100cf5: 89 e5 mov %esp,%ebp +80100cf7: 53 push %ebx +80100cf8: 83 ec 10 sub $0x10,%esp +80100cfb: 8b 5d 08 mov 0x8(%ebp),%ebx acquire(&ftable.lock); -80100d46: 68 e0 2b 11 80 push $0x80112be0 -80100d4b: e8 49 31 00 00 call 80103e99 +80100cfe: 68 60 ff 10 80 push $0x8010ff60 +80100d03: e8 f9 2f 00 00 call 80103d01 if(f->ref < 1) -80100d50: 8b 43 04 mov 0x4(%ebx),%eax -80100d53: 83 c4 10 add $0x10,%esp -80100d56: 85 c0 test %eax,%eax -80100d58: 7e 1a jle 80100d74 +80100d08: 8b 43 04 mov 0x4(%ebx),%eax +80100d0b: 83 c4 10 add $0x10,%esp +80100d0e: 85 c0 test %eax,%eax +80100d10: 7e 1a jle 80100d2c panic("filedup"); f->ref++; -80100d5a: 83 c0 01 add $0x1,%eax -80100d5d: 89 43 04 mov %eax,0x4(%ebx) +80100d12: 83 c0 01 add $0x1,%eax +80100d15: 89 43 04 mov %eax,0x4(%ebx) release(&ftable.lock); -80100d60: 83 ec 0c sub $0xc,%esp -80100d63: 68 e0 2b 11 80 push $0x80112be0 -80100d68: e8 97 31 00 00 call 80103f04 +80100d18: 83 ec 0c sub $0xc,%esp +80100d1b: 68 60 ff 10 80 push $0x8010ff60 +80100d20: e8 43 30 00 00 call 80103d68 return f; } -80100d6d: 89 d8 mov %ebx,%eax -80100d6f: 8b 5d fc mov -0x4(%ebp),%ebx -80100d72: c9 leave -80100d73: c3 ret +80100d25: 89 d8 mov %ebx,%eax +80100d27: 8b 5d fc mov -0x4(%ebp),%ebx +80100d2a: c9 leave +80100d2b: c3 ret panic("filedup"); -80100d74: 83 ec 0c sub $0xc,%esp -80100d77: 68 10 79 10 80 push $0x80107910 -80100d7c: e8 d7 f5 ff ff call 80100358 +80100d2c: 83 ec 0c sub $0xc,%esp +80100d2f: 68 30 76 10 80 push $0x80107630 +80100d34: e8 07 f6 ff ff call 80100340 -80100d81 : +80100d39 : // Close file f. (Decrement ref count, close when reaches 0.) void fileclose(struct file *f) { -80100d81: f3 0f 1e fb endbr32 -80100d85: 55 push %ebp -80100d86: 89 e5 mov %esp,%ebp -80100d88: 57 push %edi -80100d89: 56 push %esi -80100d8a: 53 push %ebx -80100d8b: 83 ec 28 sub $0x28,%esp -80100d8e: 8b 5d 08 mov 0x8(%ebp),%ebx +80100d39: 55 push %ebp +80100d3a: 89 e5 mov %esp,%ebp +80100d3c: 57 push %edi +80100d3d: 56 push %esi +80100d3e: 53 push %ebx +80100d3f: 83 ec 28 sub $0x28,%esp +80100d42: 8b 5d 08 mov 0x8(%ebp),%ebx struct file ff; acquire(&ftable.lock); -80100d91: 68 e0 2b 11 80 push $0x80112be0 -80100d96: e8 fe 30 00 00 call 80103e99 +80100d45: 68 60 ff 10 80 push $0x8010ff60 +80100d4a: e8 b2 2f 00 00 call 80103d01 if(f->ref < 1) -80100d9b: 8b 43 04 mov 0x4(%ebx),%eax -80100d9e: 83 c4 10 add $0x10,%esp -80100da1: 85 c0 test %eax,%eax -80100da3: 7e 5d jle 80100e02 +80100d4f: 8b 43 04 mov 0x4(%ebx),%eax +80100d52: 83 c4 10 add $0x10,%esp +80100d55: 85 c0 test %eax,%eax +80100d57: 7e 5d jle 80100db6 panic("fileclose"); if(--f->ref > 0){ -80100da5: 83 e8 01 sub $0x1,%eax -80100da8: 89 43 04 mov %eax,0x4(%ebx) -80100dab: 85 c0 test %eax,%eax -80100dad: 7f 60 jg 80100e0f +80100d59: 83 e8 01 sub $0x1,%eax +80100d5c: 89 43 04 mov %eax,0x4(%ebx) +80100d5f: 85 c0 test %eax,%eax +80100d61: 7f 60 jg 80100dc3 release(&ftable.lock); return; } ff = *f; -80100daf: 8b 33 mov (%ebx),%esi -80100db1: 0f b6 43 09 movzbl 0x9(%ebx),%eax -80100db5: 88 45 e7 mov %al,-0x19(%ebp) -80100db8: 8b 7b 0c mov 0xc(%ebx),%edi -80100dbb: 8b 43 10 mov 0x10(%ebx),%eax -80100dbe: 89 45 e0 mov %eax,-0x20(%ebp) +80100d63: 8b 33 mov (%ebx),%esi +80100d65: 0f b6 43 09 movzbl 0x9(%ebx),%eax +80100d69: 88 45 e7 mov %al,-0x19(%ebp) +80100d6c: 8b 7b 0c mov 0xc(%ebx),%edi +80100d6f: 8b 43 10 mov 0x10(%ebx),%eax +80100d72: 89 45 e0 mov %eax,-0x20(%ebp) f->ref = 0; -80100dc1: c7 43 04 00 00 00 00 movl $0x0,0x4(%ebx) +80100d75: c7 43 04 00 00 00 00 movl $0x0,0x4(%ebx) f->type = FD_NONE; -80100dc8: c7 03 00 00 00 00 movl $0x0,(%ebx) +80100d7c: c7 03 00 00 00 00 movl $0x0,(%ebx) release(&ftable.lock); -80100dce: 83 ec 0c sub $0xc,%esp -80100dd1: 68 e0 2b 11 80 push $0x80112be0 -80100dd6: e8 29 31 00 00 call 80103f04 +80100d82: 83 ec 0c sub $0xc,%esp +80100d85: 68 60 ff 10 80 push $0x8010ff60 +80100d8a: e8 d9 2f 00 00 call 80103d68 if(ff.type == FD_PIPE) -80100ddb: 83 c4 10 add $0x10,%esp -80100dde: 83 fe 01 cmp $0x1,%esi -80100de1: 74 44 je 80100e27 +80100d8f: 83 c4 10 add $0x10,%esp +80100d92: 83 fe 01 cmp $0x1,%esi +80100d95: 74 44 je 80100ddb pipeclose(ff.pipe, ff.writable); else if(ff.type == FD_INODE){ -80100de3: 83 fe 02 cmp $0x2,%esi -80100de6: 75 37 jne 80100e1f +80100d97: 83 fe 02 cmp $0x2,%esi +80100d9a: 75 37 jne 80100dd3 begin_op(); -80100de8: e8 93 1a 00 00 call 80102880 +80100d9c: e8 dd 19 00 00 call 8010277e iput(ff.ip); -80100ded: 83 ec 0c sub $0xc,%esp -80100df0: ff 75 e0 pushl -0x20(%ebp) -80100df3: e8 43 08 00 00 call 8010163b +80100da1: 83 ec 0c sub $0xc,%esp +80100da4: ff 75 e0 push -0x20(%ebp) +80100da7: e8 0e 08 00 00 call 801015ba end_op(); -80100df8: e8 02 1b 00 00 call 801028ff -80100dfd: 83 c4 10 add $0x10,%esp -80100e00: eb 1d jmp 80100e1f +80100dac: e8 48 1a 00 00 call 801027f9 +80100db1: 83 c4 10 add $0x10,%esp +80100db4: eb 1d jmp 80100dd3 panic("fileclose"); -80100e02: 83 ec 0c sub $0xc,%esp -80100e05: 68 18 79 10 80 push $0x80107918 -80100e0a: e8 49 f5 ff ff call 80100358 +80100db6: 83 ec 0c sub $0xc,%esp +80100db9: 68 38 76 10 80 push $0x80107638 +80100dbe: e8 7d f5 ff ff call 80100340 release(&ftable.lock); -80100e0f: 83 ec 0c sub $0xc,%esp -80100e12: 68 e0 2b 11 80 push $0x80112be0 -80100e17: e8 e8 30 00 00 call 80103f04 -80100e1c: 83 c4 10 add $0x10,%esp +80100dc3: 83 ec 0c sub $0xc,%esp +80100dc6: 68 60 ff 10 80 push $0x8010ff60 +80100dcb: e8 98 2f 00 00 call 80103d68 +80100dd0: 83 c4 10 add $0x10,%esp } } -80100e1f: 8d 65 f4 lea -0xc(%ebp),%esp -80100e22: 5b pop %ebx -80100e23: 5e pop %esi -80100e24: 5f pop %edi -80100e25: 5d pop %ebp -80100e26: c3 ret +80100dd3: 8d 65 f4 lea -0xc(%ebp),%esp +80100dd6: 5b pop %ebx +80100dd7: 5e pop %esi +80100dd8: 5f pop %edi +80100dd9: 5d pop %ebp +80100dda: c3 ret pipeclose(ff.pipe, ff.writable); -80100e27: 83 ec 08 sub $0x8,%esp -80100e2a: 0f be 45 e7 movsbl -0x19(%ebp),%eax -80100e2e: 50 push %eax -80100e2f: 57 push %edi -80100e30: e8 80 21 00 00 call 80102fb5 -80100e35: 83 c4 10 add $0x10,%esp -80100e38: eb e5 jmp 80100e1f +80100ddb: 83 ec 08 sub $0x8,%esp +80100dde: 0f be 45 e7 movsbl -0x19(%ebp),%eax +80100de2: 50 push %eax +80100de3: 57 push %edi +80100de4: e8 b4 20 00 00 call 80102e9d +80100de9: 83 c4 10 add $0x10,%esp +80100dec: eb e5 jmp 80100dd3 -80100e3a : +80100dee : // Get metadata about file f. int filestat(struct file *f, struct stat *st) { -80100e3a: f3 0f 1e fb endbr32 -80100e3e: 55 push %ebp -80100e3f: 89 e5 mov %esp,%ebp -80100e41: 53 push %ebx -80100e42: 83 ec 04 sub $0x4,%esp -80100e45: 8b 5d 08 mov 0x8(%ebp),%ebx +80100dee: 55 push %ebp +80100def: 89 e5 mov %esp,%ebp +80100df1: 53 push %ebx +80100df2: 83 ec 04 sub $0x4,%esp +80100df5: 8b 5d 08 mov 0x8(%ebp),%ebx if(f->type == FD_INODE){ -80100e48: 83 3b 02 cmpl $0x2,(%ebx) -80100e4b: 75 31 jne 80100e7e +80100df8: 83 3b 02 cmpl $0x2,(%ebx) +80100dfb: 75 31 jne 80100e2e ilock(f->ip); -80100e4d: 83 ec 0c sub $0xc,%esp -80100e50: ff 73 10 pushl 0x10(%ebx) -80100e53: e8 d4 06 00 00 call 8010152c +80100dfd: 83 ec 0c sub $0xc,%esp +80100e00: ff 73 10 push 0x10(%ebx) +80100e03: e8 ab 06 00 00 call 801014b3 stati(f->ip, st); -80100e58: 83 c4 08 add $0x8,%esp -80100e5b: ff 75 0c pushl 0xc(%ebp) -80100e5e: ff 73 10 pushl 0x10(%ebx) -80100e61: e8 3f 09 00 00 call 801017a5 +80100e08: 83 c4 08 add $0x8,%esp +80100e0b: ff 75 0c push 0xc(%ebp) +80100e0e: ff 73 10 push 0x10(%ebx) +80100e11: e8 06 09 00 00 call 8010171c iunlock(f->ip); -80100e66: 83 c4 04 add $0x4,%esp -80100e69: ff 73 10 pushl 0x10(%ebx) -80100e6c: e8 81 07 00 00 call 801015f2 +80100e16: 83 c4 04 add $0x4,%esp +80100e19: ff 73 10 push 0x10(%ebx) +80100e1c: e8 54 07 00 00 call 80101575 return 0; -80100e71: 83 c4 10 add $0x10,%esp -80100e74: b8 00 00 00 00 mov $0x0,%eax +80100e21: 83 c4 10 add $0x10,%esp +80100e24: b8 00 00 00 00 mov $0x0,%eax } return -1; } -80100e79: 8b 5d fc mov -0x4(%ebp),%ebx -80100e7c: c9 leave -80100e7d: c3 ret +80100e29: 8b 5d fc mov -0x4(%ebp),%ebx +80100e2c: c9 leave +80100e2d: c3 ret return -1; -80100e7e: b8 ff ff ff ff mov $0xffffffff,%eax -80100e83: eb f4 jmp 80100e79 +80100e2e: b8 ff ff ff ff mov $0xffffffff,%eax +80100e33: eb f4 jmp 80100e29 -80100e85 : +80100e35 : // Read from file f. int fileread(struct file *f, char *addr, int n) { -80100e85: f3 0f 1e fb endbr32 -80100e89: 55 push %ebp -80100e8a: 89 e5 mov %esp,%ebp -80100e8c: 56 push %esi -80100e8d: 53 push %ebx -80100e8e: 8b 5d 08 mov 0x8(%ebp),%ebx +80100e35: 55 push %ebp +80100e36: 89 e5 mov %esp,%ebp +80100e38: 56 push %esi +80100e39: 53 push %ebx +80100e3a: 8b 5d 08 mov 0x8(%ebp),%ebx int r; if(f->readable == 0) -80100e91: 80 7b 08 00 cmpb $0x0,0x8(%ebx) -80100e95: 74 70 je 80100f07 +80100e3d: 80 7b 08 00 cmpb $0x0,0x8(%ebx) +80100e41: 74 70 je 80100eb3 return -1; if(f->type == FD_PIPE) -80100e97: 8b 03 mov (%ebx),%eax -80100e99: 83 f8 01 cmp $0x1,%eax -80100e9c: 74 44 je 80100ee2 +80100e43: 8b 03 mov (%ebx),%eax +80100e45: 83 f8 01 cmp $0x1,%eax +80100e48: 74 44 je 80100e8e return piperead(f->pipe, addr, n); if(f->type == FD_INODE){ -80100e9e: 83 f8 02 cmp $0x2,%eax -80100ea1: 75 57 jne 80100efa +80100e4a: 83 f8 02 cmp $0x2,%eax +80100e4d: 75 57 jne 80100ea6 ilock(f->ip); -80100ea3: 83 ec 0c sub $0xc,%esp -80100ea6: ff 73 10 pushl 0x10(%ebx) -80100ea9: e8 7e 06 00 00 call 8010152c +80100e4f: 83 ec 0c sub $0xc,%esp +80100e52: ff 73 10 push 0x10(%ebx) +80100e55: e8 59 06 00 00 call 801014b3 if((r = readi(f->ip, addr, f->off, n)) > 0) -80100eae: ff 75 10 pushl 0x10(%ebp) -80100eb1: ff 73 14 pushl 0x14(%ebx) -80100eb4: ff 75 0c pushl 0xc(%ebp) -80100eb7: ff 73 10 pushl 0x10(%ebx) -80100eba: e8 15 09 00 00 call 801017d4 -80100ebf: 89 c6 mov %eax,%esi -80100ec1: 83 c4 20 add $0x20,%esp -80100ec4: 85 c0 test %eax,%eax -80100ec6: 7e 03 jle 80100ecb +80100e5a: ff 75 10 push 0x10(%ebp) +80100e5d: ff 73 14 push 0x14(%ebx) +80100e60: ff 75 0c push 0xc(%ebp) +80100e63: ff 73 10 push 0x10(%ebx) +80100e66: e8 dc 08 00 00 call 80101747 +80100e6b: 89 c6 mov %eax,%esi +80100e6d: 83 c4 20 add $0x20,%esp +80100e70: 85 c0 test %eax,%eax +80100e72: 7e 03 jle 80100e77 f->off += r; -80100ec8: 01 43 14 add %eax,0x14(%ebx) +80100e74: 01 43 14 add %eax,0x14(%ebx) iunlock(f->ip); -80100ecb: 83 ec 0c sub $0xc,%esp -80100ece: ff 73 10 pushl 0x10(%ebx) -80100ed1: e8 1c 07 00 00 call 801015f2 +80100e77: 83 ec 0c sub $0xc,%esp +80100e7a: ff 73 10 push 0x10(%ebx) +80100e7d: e8 f3 06 00 00 call 80101575 return r; -80100ed6: 83 c4 10 add $0x10,%esp +80100e82: 83 c4 10 add $0x10,%esp } panic("fileread"); } -80100ed9: 89 f0 mov %esi,%eax -80100edb: 8d 65 f8 lea -0x8(%ebp),%esp -80100ede: 5b pop %ebx -80100edf: 5e pop %esi -80100ee0: 5d pop %ebp -80100ee1: c3 ret +80100e85: 89 f0 mov %esi,%eax +80100e87: 8d 65 f8 lea -0x8(%ebp),%esp +80100e8a: 5b pop %ebx +80100e8b: 5e pop %esi +80100e8c: 5d pop %ebp +80100e8d: c3 ret return piperead(f->pipe, addr, n); -80100ee2: 83 ec 04 sub $0x4,%esp -80100ee5: ff 75 10 pushl 0x10(%ebp) -80100ee8: ff 75 0c pushl 0xc(%ebp) -80100eeb: ff 73 0c pushl 0xc(%ebx) -80100eee: e8 42 22 00 00 call 80103135 -80100ef3: 89 c6 mov %eax,%esi -80100ef5: 83 c4 10 add $0x10,%esp -80100ef8: eb df jmp 80100ed9 +80100e8e: 83 ec 04 sub $0x4,%esp +80100e91: ff 75 10 push 0x10(%ebp) +80100e94: ff 75 0c push 0xc(%ebp) +80100e97: ff 73 0c push 0xc(%ebx) +80100e9a: e8 71 21 00 00 call 80103010 +80100e9f: 89 c6 mov %eax,%esi +80100ea1: 83 c4 10 add $0x10,%esp +80100ea4: eb df jmp 80100e85 panic("fileread"); -80100efa: 83 ec 0c sub $0xc,%esp -80100efd: 68 22 79 10 80 push $0x80107922 -80100f02: e8 51 f4 ff ff call 80100358 +80100ea6: 83 ec 0c sub $0xc,%esp +80100ea9: 68 42 76 10 80 push $0x80107642 +80100eae: e8 8d f4 ff ff call 80100340 return -1; -80100f07: be ff ff ff ff mov $0xffffffff,%esi -80100f0c: eb cb jmp 80100ed9 +80100eb3: be ff ff ff ff mov $0xffffffff,%esi +80100eb8: eb cb jmp 80100e85 -80100f0e : +80100eba : //PAGEBREAK! // Write to file f. int filewrite(struct file *f, char *addr, int n) { -80100f0e: f3 0f 1e fb endbr32 -80100f12: 55 push %ebp -80100f13: 89 e5 mov %esp,%ebp -80100f15: 57 push %edi -80100f16: 56 push %esi -80100f17: 53 push %ebx -80100f18: 83 ec 1c sub $0x1c,%esp -80100f1b: 8b 7d 08 mov 0x8(%ebp),%edi +80100eba: 55 push %ebp +80100ebb: 89 e5 mov %esp,%ebp +80100ebd: 57 push %edi +80100ebe: 56 push %esi +80100ebf: 53 push %ebx +80100ec0: 83 ec 1c sub $0x1c,%esp +80100ec3: 8b 7d 08 mov 0x8(%ebp),%edi int r; if(f->writable == 0) -80100f1e: 80 7f 09 00 cmpb $0x0,0x9(%edi) -80100f22: 0f 84 ea 00 00 00 je 80101012 +80100ec6: 80 7f 09 00 cmpb $0x0,0x9(%edi) +80100eca: 0f 84 ef 00 00 00 je 80100fbf return -1; if(f->type == FD_PIPE) -80100f28: 8b 07 mov (%edi),%eax -80100f2a: 83 f8 01 cmp $0x1,%eax -80100f2d: 74 1a je 80100f49 +80100ed0: 8b 07 mov (%edi),%eax +80100ed2: 83 f8 01 cmp $0x1,%eax +80100ed5: 74 1c je 80100ef3 return pipewrite(f->pipe, addr, n); if(f->type == FD_INODE){ -80100f2f: 83 f8 02 cmp $0x2,%eax -80100f32: 0f 85 cd 00 00 00 jne 80101005 +80100ed7: 83 f8 02 cmp $0x2,%eax +80100eda: 0f 85 d2 00 00 00 jne 80100fb2 // 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){ -80100f38: 83 7d 10 00 cmpl $0x0,0x10(%ebp) -80100f3c: 0f 8e aa 00 00 00 jle 80100fec +80100ee0: 83 7d 10 00 cmpl $0x0,0x10(%ebp) +80100ee4: 0f 8e bf 00 00 00 jle 80100fa9 int i = 0; -80100f42: bb 00 00 00 00 mov $0x0,%ebx -80100f47: eb 3c jmp 80100f85 +80100eea: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) +80100ef1: eb 3e jmp 80100f31 return pipewrite(f->pipe, addr, n); -80100f49: 83 ec 04 sub $0x4,%esp -80100f4c: ff 75 10 pushl 0x10(%ebp) -80100f4f: ff 75 0c pushl 0xc(%ebp) -80100f52: ff 77 0c pushl 0xc(%edi) -80100f55: e8 eb 20 00 00 call 80103045 -80100f5a: 83 c4 10 add $0x10,%esp -80100f5d: e9 9b 00 00 00 jmp 80100ffd +80100ef3: 83 ec 04 sub $0x4,%esp +80100ef6: ff 75 10 push 0x10(%ebp) +80100ef9: ff 75 0c push 0xc(%ebp) +80100efc: ff 77 0c push 0xc(%edi) +80100eff: e8 25 20 00 00 call 80102f29 +80100f04: 83 c4 10 add $0x10,%esp +80100f07: e9 88 00 00 00 jmp 80100f94 + n1 = max; begin_op(); ilock(f->ip); if ((r = writei(f->ip, addr + i, f->off, n1)) > 0) f->off += r; +80100f0c: 01 47 14 add %eax,0x14(%edi) iunlock(f->ip); -80100f62: 83 ec 0c sub $0xc,%esp -80100f65: ff 77 10 pushl 0x10(%edi) -80100f68: e8 85 06 00 00 call 801015f2 +80100f0f: 83 ec 0c sub $0xc,%esp +80100f12: ff 77 10 push 0x10(%edi) +80100f15: e8 5b 06 00 00 call 80101575 end_op(); -80100f6d: e8 8d 19 00 00 call 801028ff +80100f1a: e8 da 18 00 00 call 801027f9 +80100f1f: 83 c4 10 add $0x10,%esp if(r < 0) -80100f72: 83 c4 10 add $0x10,%esp -80100f75: 85 f6 test %esi,%esi -80100f77: 78 78 js 80100ff1 break; if(r != n1) -80100f79: 39 75 e4 cmp %esi,-0x1c(%ebp) -80100f7c: 75 61 jne 80100fdf +80100f22: 39 de cmp %ebx,%esi +80100f24: 75 76 jne 80100f9c panic("short filewrite"); i += r; -80100f7e: 01 f3 add %esi,%ebx +80100f26: 01 5d e4 add %ebx,-0x1c(%ebp) +80100f29: 8b 45 e4 mov -0x1c(%ebp),%eax while(i < n){ -80100f80: 39 5d 10 cmp %ebx,0x10(%ebp) -80100f83: 7e 6c jle 80100ff1 +80100f2c: 39 45 10 cmp %eax,0x10(%ebp) +80100f2f: 7e 54 jle 80100f85 int n1 = n - i; -80100f85: 8b 45 10 mov 0x10(%ebp),%eax -80100f88: 29 d8 sub %ebx,%eax - if(n1 > max) -80100f8a: 3d 00 06 00 00 cmp $0x600,%eax -80100f8f: ba 00 06 00 00 mov $0x600,%edx -80100f94: 0f 4f c2 cmovg %edx,%eax -80100f97: 89 c6 mov %eax,%esi -80100f99: 89 45 e4 mov %eax,-0x1c(%ebp) +80100f31: 8b 75 10 mov 0x10(%ebp),%esi +80100f34: 8b 5d e4 mov -0x1c(%ebp),%ebx +80100f37: 29 de sub %ebx,%esi +80100f39: b8 00 06 00 00 mov $0x600,%eax +80100f3e: 39 c6 cmp %eax,%esi +80100f40: 0f 4f f0 cmovg %eax,%esi begin_op(); -80100f9c: e8 df 18 00 00 call 80102880 +80100f43: e8 36 18 00 00 call 8010277e ilock(f->ip); -80100fa1: 83 ec 0c sub $0xc,%esp -80100fa4: ff 77 10 pushl 0x10(%edi) -80100fa7: e8 80 05 00 00 call 8010152c +80100f48: 83 ec 0c sub $0xc,%esp +80100f4b: ff 77 10 push 0x10(%edi) +80100f4e: e8 60 05 00 00 call 801014b3 if ((r = writei(f->ip, addr + i, f->off, n1)) > 0) -80100fac: 56 push %esi -80100fad: ff 77 14 pushl 0x14(%edi) -80100fb0: 89 d8 mov %ebx,%eax -80100fb2: 03 45 0c add 0xc(%ebp),%eax -80100fb5: 50 push %eax -80100fb6: ff 77 10 pushl 0x10(%edi) -80100fb9: e8 16 09 00 00 call 801018d4 -80100fbe: 89 c6 mov %eax,%esi -80100fc0: 83 c4 20 add $0x20,%esp -80100fc3: 85 c0 test %eax,%eax -80100fc5: 7e 9b jle 80100f62 - f->off += r; -80100fc7: 01 47 14 add %eax,0x14(%edi) +80100f53: 56 push %esi +80100f54: ff 77 14 push 0x14(%edi) +80100f57: 89 d8 mov %ebx,%eax +80100f59: 03 45 0c add 0xc(%ebp),%eax +80100f5c: 50 push %eax +80100f5d: ff 77 10 push 0x10(%edi) +80100f60: e8 de 08 00 00 call 80101843 +80100f65: 89 c3 mov %eax,%ebx +80100f67: 83 c4 20 add $0x20,%esp +80100f6a: 85 c0 test %eax,%eax +80100f6c: 7f 9e jg 80100f0c iunlock(f->ip); -80100fca: 83 ec 0c sub $0xc,%esp -80100fcd: ff 77 10 pushl 0x10(%edi) -80100fd0: e8 1d 06 00 00 call 801015f2 +80100f6e: 83 ec 0c sub $0xc,%esp +80100f71: ff 77 10 push 0x10(%edi) +80100f74: e8 fc 05 00 00 call 80101575 end_op(); -80100fd5: e8 25 19 00 00 call 801028ff -80100fda: 83 c4 10 add $0x10,%esp -80100fdd: eb 9a jmp 80100f79 - panic("short filewrite"); -80100fdf: 83 ec 0c sub $0xc,%esp -80100fe2: 68 2b 79 10 80 push $0x8010792b -80100fe7: e8 6c f3 ff ff call 80100358 - int i = 0; -80100fec: bb 00 00 00 00 mov $0x0,%ebx +80100f79: e8 7b 18 00 00 call 801027f9 + if(r < 0) +80100f7e: 83 c4 10 add $0x10,%esp +80100f81: 85 db test %ebx,%ebx +80100f83: 79 9d jns 80100f22 } return i == n ? n : -1; -80100ff1: 39 5d 10 cmp %ebx,0x10(%ebp) -80100ff4: b8 ff ff ff ff mov $0xffffffff,%eax -80100ff9: 0f 44 45 10 cmove 0x10(%ebp),%eax +80100f85: 8b 45 e4 mov -0x1c(%ebp),%eax +80100f88: 39 45 10 cmp %eax,0x10(%ebp) +80100f8b: b8 ff ff ff ff mov $0xffffffff,%eax +80100f90: 0f 44 45 10 cmove 0x10(%ebp),%eax } panic("filewrite"); } -80100ffd: 8d 65 f4 lea -0xc(%ebp),%esp -80101000: 5b pop %ebx -80101001: 5e pop %esi -80101002: 5f pop %edi -80101003: 5d pop %ebp -80101004: c3 ret +80100f94: 8d 65 f4 lea -0xc(%ebp),%esp +80100f97: 5b pop %ebx +80100f98: 5e pop %esi +80100f99: 5f pop %edi +80100f9a: 5d pop %ebp +80100f9b: c3 ret + panic("short filewrite"); +80100f9c: 83 ec 0c sub $0xc,%esp +80100f9f: 68 4b 76 10 80 push $0x8010764b +80100fa4: e8 97 f3 ff ff call 80100340 + int i = 0; +80100fa9: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) +80100fb0: eb d3 jmp 80100f85 panic("filewrite"); -80101005: 83 ec 0c sub $0xc,%esp -80101008: 68 31 79 10 80 push $0x80107931 -8010100d: e8 46 f3 ff ff call 80100358 +80100fb2: 83 ec 0c sub $0xc,%esp +80100fb5: 68 51 76 10 80 push $0x80107651 +80100fba: e8 81 f3 ff ff call 80100340 return -1; -80101012: b8 ff ff ff ff mov $0xffffffff,%eax -80101017: eb e4 jmp 80100ffd +80100fbf: b8 ff ff ff ff mov $0xffffffff,%eax +80100fc4: eb ce jmp 80100f94 -80101019 : +80100fc6 : } // Free a disk block. static void bfree(int dev, uint b) { -80101019: 55 push %ebp -8010101a: 89 e5 mov %esp,%ebp -8010101c: 56 push %esi -8010101d: 53 push %ebx -8010101e: 89 c1 mov %eax,%ecx -80101020: 89 d3 mov %edx,%ebx +80100fc6: 55 push %ebp +80100fc7: 89 e5 mov %esp,%ebp +80100fc9: 56 push %esi +80100fca: 53 push %ebx +80100fcb: 89 c1 mov %eax,%ecx +80100fcd: 89 d3 mov %edx,%ebx struct buf *bp; int bi, m; bp = bread(dev, BBLOCK(b, sb)); -80101022: 83 ec 08 sub $0x8,%esp -80101025: 89 d0 mov %edx,%eax -80101027: c1 e8 0c shr $0xc,%eax -8010102a: 03 05 f8 35 11 80 add 0x801135f8,%eax -80101030: 50 push %eax -80101031: 51 push %ecx -80101032: e8 77 f0 ff ff call 801000ae -80101037: 89 c6 mov %eax,%esi +80100fcf: 83 ec 08 sub $0x8,%esp +80100fd2: 89 d0 mov %edx,%eax +80100fd4: c1 e8 0c shr $0xc,%eax +80100fd7: 03 05 cc 25 11 80 add 0x801125cc,%eax +80100fdd: 50 push %eax +80100fde: 51 push %ecx +80100fdf: e8 c6 f0 ff ff call 801000aa +80100fe4: 89 c6 mov %eax,%esi bi = b % BPB; m = 1 << (bi % 8); -80101039: 89 d9 mov %ebx,%ecx -8010103b: 83 e1 07 and $0x7,%ecx -8010103e: b8 01 00 00 00 mov $0x1,%eax -80101043: d3 e0 shl %cl,%eax +80100fe6: 89 d9 mov %ebx,%ecx +80100fe8: 83 e1 07 and $0x7,%ecx +80100feb: b8 01 00 00 00 mov $0x1,%eax +80100ff0: d3 e0 shl %cl,%eax bi = b % BPB; -80101045: 81 e3 ff 0f 00 00 and $0xfff,%ebx +80100ff2: 81 e3 ff 0f 00 00 and $0xfff,%ebx if((bp->data[bi/8] & m) == 0) -8010104b: 83 c4 10 add $0x10,%esp -8010104e: c1 fb 03 sar $0x3,%ebx -80101051: 0f b6 54 1e 5c movzbl 0x5c(%esi,%ebx,1),%edx -80101056: 0f b6 ca movzbl %dl,%ecx -80101059: 85 c1 test %eax,%ecx -8010105b: 74 23 je 80101080 +80100ff8: 83 c4 10 add $0x10,%esp +80100ffb: c1 fb 03 sar $0x3,%ebx +80100ffe: 0f b6 54 1e 5c movzbl 0x5c(%esi,%ebx,1),%edx +80101003: 0f b6 ca movzbl %dl,%ecx +80101006: 85 c1 test %eax,%ecx +80101008: 74 23 je 8010102d panic("freeing free block"); bp->data[bi/8] &= ~m; -8010105d: f7 d0 not %eax -8010105f: 21 d0 and %edx,%eax -80101061: 88 44 1e 5c mov %al,0x5c(%esi,%ebx,1) +8010100a: f7 d0 not %eax +8010100c: 21 d0 and %edx,%eax +8010100e: 88 44 1e 5c mov %al,0x5c(%esi,%ebx,1) log_write(bp); -80101065: 83 ec 0c sub $0xc,%esp -80101068: 56 push %esi -80101069: e8 d7 19 00 00 call 80102a45 +80101012: 83 ec 0c sub $0xc,%esp +80101015: 56 push %esi +80101016: e8 20 19 00 00 call 8010293b brelse(bp); -8010106e: 89 34 24 mov %esi,(%esp) -80101071: e8 57 f1 ff ff call 801001cd -} -80101076: 83 c4 10 add $0x10,%esp -80101079: 8d 65 f8 lea -0x8(%ebp),%esp -8010107c: 5b pop %ebx -8010107d: 5e pop %esi -8010107e: 5d pop %ebp -8010107f: c3 ret +8010101b: 89 34 24 mov %esi,(%esp) +8010101e: e8 9e f1 ff ff call 801001c1 +} +80101023: 83 c4 10 add $0x10,%esp +80101026: 8d 65 f8 lea -0x8(%ebp),%esp +80101029: 5b pop %ebx +8010102a: 5e pop %esi +8010102b: 5d pop %ebp +8010102c: c3 ret panic("freeing free block"); -80101080: 83 ec 0c sub $0xc,%esp -80101083: 68 3b 79 10 80 push $0x8010793b -80101088: e8 cb f2 ff ff call 80100358 - -8010108d : -{ -8010108d: 55 push %ebp -8010108e: 89 e5 mov %esp,%ebp -80101090: 57 push %edi -80101091: 56 push %esi -80101092: 53 push %ebx -80101093: 83 ec 1c sub $0x1c,%esp -80101096: 89 45 d8 mov %eax,-0x28(%ebp) +8010102d: 83 ec 0c sub $0xc,%esp +80101030: 68 5b 76 10 80 push $0x8010765b +80101035: e8 06 f3 ff ff call 80100340 + +8010103a : +{ +8010103a: 55 push %ebp +8010103b: 89 e5 mov %esp,%ebp +8010103d: 57 push %edi +8010103e: 56 push %esi +8010103f: 53 push %ebx +80101040: 83 ec 1c sub $0x1c,%esp +80101043: 89 45 d8 mov %eax,-0x28(%ebp) for(b = 0; b < sb.size; b += BPB){ -80101099: 83 3d e0 35 11 80 00 cmpl $0x0,0x801135e0 -801010a0: 0f 84 ab 00 00 00 je 80101151 -801010a6: c7 45 dc 00 00 00 00 movl $0x0,-0x24(%ebp) -801010ad: eb 22 jmp 801010d1 +80101046: 83 3d b4 25 11 80 00 cmpl $0x0,0x801125b4 +8010104d: 0f 84 9c 00 00 00 je 801010ef +80101053: c7 45 dc 00 00 00 00 movl $0x0,-0x24(%ebp) +8010105a: eb 20 jmp 8010107c brelse(bp); -801010af: 83 ec 0c sub $0xc,%esp -801010b2: 56 push %esi -801010b3: e8 15 f1 ff ff call 801001cd +8010105c: 83 ec 0c sub $0xc,%esp +8010105f: ff 75 e4 push -0x1c(%ebp) +80101062: e8 5a f1 ff ff call 801001c1 for(b = 0; b < sb.size; b += BPB){ -801010b8: 81 45 dc 00 10 00 00 addl $0x1000,-0x24(%ebp) -801010bf: 8b 45 dc mov -0x24(%ebp),%eax -801010c2: 83 c4 10 add $0x10,%esp -801010c5: 39 05 e0 35 11 80 cmp %eax,0x801135e0 -801010cb: 0f 86 80 00 00 00 jbe 80101151 +80101067: 81 45 dc 00 10 00 00 addl $0x1000,-0x24(%ebp) +8010106e: 8b 45 dc mov -0x24(%ebp),%eax +80101071: 83 c4 10 add $0x10,%esp +80101074: 39 05 b4 25 11 80 cmp %eax,0x801125b4 +8010107a: 76 73 jbe 801010ef bp = bread(dev, BBLOCK(b, sb)); -801010d1: 83 ec 08 sub $0x8,%esp -801010d4: 8b 5d dc mov -0x24(%ebp),%ebx -801010d7: 8d 83 ff 0f 00 00 lea 0xfff(%ebx),%eax -801010dd: 85 db test %ebx,%ebx -801010df: 0f 49 c3 cmovns %ebx,%eax -801010e2: c1 f8 0c sar $0xc,%eax -801010e5: 03 05 f8 35 11 80 add 0x801135f8,%eax -801010eb: 50 push %eax -801010ec: ff 75 d8 pushl -0x28(%ebp) -801010ef: e8 ba ef ff ff call 801000ae -801010f4: 89 c6 mov %eax,%esi +8010107c: 83 ec 08 sub $0x8,%esp +8010107f: 8b 75 dc mov -0x24(%ebp),%esi +80101082: 8d 86 ff 0f 00 00 lea 0xfff(%esi),%eax +80101088: 85 f6 test %esi,%esi +8010108a: 0f 49 c6 cmovns %esi,%eax +8010108d: c1 f8 0c sar $0xc,%eax +80101090: 03 05 cc 25 11 80 add 0x801125cc,%eax +80101096: 50 push %eax +80101097: ff 75 d8 push -0x28(%ebp) +8010109a: e8 0b f0 ff ff call 801000aa +8010109f: 89 45 e4 mov %eax,-0x1c(%ebp) for(bi = 0; bi < BPB && b + bi < sb.size; bi++){ -801010f6: a1 e0 35 11 80 mov 0x801135e0,%eax -801010fb: 89 45 e4 mov %eax,-0x1c(%ebp) -801010fe: 83 c4 10 add $0x10,%esp -80101101: bf 00 00 00 00 mov $0x0,%edi -80101106: 39 5d e4 cmp %ebx,-0x1c(%ebp) -80101109: 76 a4 jbe 801010af +801010a2: a1 b4 25 11 80 mov 0x801125b4,%eax +801010a7: 89 45 e0 mov %eax,-0x20(%ebp) +801010aa: 83 c4 10 add $0x10,%esp +801010ad: b8 00 00 00 00 mov $0x0,%eax +801010b2: 39 75 e0 cmp %esi,-0x20(%ebp) +801010b5: 76 a5 jbe 8010105c m = 1 << (bi % 8); -8010110b: 89 f8 mov %edi,%eax -8010110d: c1 f8 1f sar $0x1f,%eax -80101110: c1 e8 1d shr $0x1d,%eax -80101113: 8d 0c 07 lea (%edi,%eax,1),%ecx -80101116: 83 e1 07 and $0x7,%ecx -80101119: 29 c1 sub %eax,%ecx -8010111b: b8 01 00 00 00 mov $0x1,%eax -80101120: d3 e0 shl %cl,%eax -80101122: 89 c1 mov %eax,%ecx +801010b7: 89 c1 mov %eax,%ecx +801010b9: 83 e1 07 and $0x7,%ecx +801010bc: bb 01 00 00 00 mov $0x1,%ebx +801010c1: d3 e3 shl %cl,%ebx if((bp->data[bi/8] & m) == 0){ // Is block free? -80101124: 8d 47 07 lea 0x7(%edi),%eax -80101127: 85 ff test %edi,%edi -80101129: 0f 49 c7 cmovns %edi,%eax -8010112c: c1 f8 03 sar $0x3,%eax -8010112f: 89 45 e0 mov %eax,-0x20(%ebp) -80101132: 0f b6 54 06 5c movzbl 0x5c(%esi,%eax,1),%edx -80101137: 0f b6 c2 movzbl %dl,%eax -8010113a: 85 c8 test %ecx,%eax -8010113c: 74 20 je 8010115e +801010c3: 8d 50 07 lea 0x7(%eax),%edx +801010c6: 85 c0 test %eax,%eax +801010c8: 0f 49 d0 cmovns %eax,%edx +801010cb: c1 fa 03 sar $0x3,%edx +801010ce: 8b 7d e4 mov -0x1c(%ebp),%edi +801010d1: 0f b6 4c 17 5c movzbl 0x5c(%edi,%edx,1),%ecx +801010d6: 0f b6 f9 movzbl %cl,%edi +801010d9: 85 df test %ebx,%edi +801010db: 74 1f je 801010fc for(bi = 0; bi < BPB && b + bi < sb.size; bi++){ -8010113e: 83 c7 01 add $0x1,%edi -80101141: 83 c3 01 add $0x1,%ebx -80101144: 81 ff 00 10 00 00 cmp $0x1000,%edi -8010114a: 75 ba jne 80101106 -8010114c: e9 5e ff ff ff jmp 801010af +801010dd: 83 c0 01 add $0x1,%eax +801010e0: 83 c6 01 add $0x1,%esi +801010e3: 3d 00 10 00 00 cmp $0x1000,%eax +801010e8: 75 c8 jne 801010b2 +801010ea: e9 6d ff ff ff jmp 8010105c panic("balloc: out of blocks"); -80101151: 83 ec 0c sub $0xc,%esp -80101154: 68 4e 79 10 80 push $0x8010794e -80101159: e8 fa f1 ff ff call 80100358 +801010ef: 83 ec 0c sub $0xc,%esp +801010f2: 68 6e 76 10 80 push $0x8010766e +801010f7: e8 44 f2 ff ff call 80100340 bp->data[bi/8] |= m; // Mark block in use. -8010115e: 09 ca or %ecx,%edx -80101160: 8b 45 e0 mov -0x20(%ebp),%eax -80101163: 88 54 06 5c mov %dl,0x5c(%esi,%eax,1) +801010fc: 09 d9 or %ebx,%ecx +801010fe: 8b 5d e4 mov -0x1c(%ebp),%ebx +80101101: 88 4c 13 5c mov %cl,0x5c(%ebx,%edx,1) log_write(bp); -80101167: 83 ec 0c sub $0xc,%esp -8010116a: 56 push %esi -8010116b: e8 d5 18 00 00 call 80102a45 +80101105: 83 ec 0c sub $0xc,%esp +80101108: 53 push %ebx +80101109: e8 2d 18 00 00 call 8010293b brelse(bp); -80101170: 89 34 24 mov %esi,(%esp) -80101173: e8 55 f0 ff ff call 801001cd +8010110e: 89 1c 24 mov %ebx,(%esp) +80101111: e8 ab f0 ff ff call 801001c1 bp = bread(dev, bno); -80101178: 83 c4 08 add $0x8,%esp -8010117b: 53 push %ebx -8010117c: ff 75 d8 pushl -0x28(%ebp) -8010117f: e8 2a ef ff ff call 801000ae -80101184: 89 c6 mov %eax,%esi +80101116: 83 c4 08 add $0x8,%esp +80101119: 56 push %esi +8010111a: ff 75 d8 push -0x28(%ebp) +8010111d: e8 88 ef ff ff call 801000aa +80101122: 89 c3 mov %eax,%ebx memset(bp->data, 0, BSIZE); -80101186: 83 c4 0c add $0xc,%esp -80101189: 68 00 02 00 00 push $0x200 -8010118e: 6a 00 push $0x0 -80101190: 8d 40 5c lea 0x5c(%eax),%eax -80101193: 50 push %eax -80101194: e8 b6 2d 00 00 call 80103f4f +80101124: 83 c4 0c add $0xc,%esp +80101127: 68 00 02 00 00 push $0x200 +8010112c: 6a 00 push $0x0 +8010112e: 8d 40 5c lea 0x5c(%eax),%eax +80101131: 50 push %eax +80101132: e8 78 2c 00 00 call 80103daf log_write(bp); -80101199: 89 34 24 mov %esi,(%esp) -8010119c: e8 a4 18 00 00 call 80102a45 +80101137: 89 1c 24 mov %ebx,(%esp) +8010113a: e8 fc 17 00 00 call 8010293b brelse(bp); -801011a1: 89 34 24 mov %esi,(%esp) -801011a4: e8 24 f0 ff ff call 801001cd +8010113f: 89 1c 24 mov %ebx,(%esp) +80101142: e8 7a f0 ff ff call 801001c1 } -801011a9: 89 d8 mov %ebx,%eax -801011ab: 8d 65 f4 lea -0xc(%ebp),%esp -801011ae: 5b pop %ebx -801011af: 5e pop %esi -801011b0: 5f pop %edi -801011b1: 5d pop %ebp -801011b2: c3 ret +80101147: 89 f0 mov %esi,%eax +80101149: 8d 65 f4 lea -0xc(%ebp),%esp +8010114c: 5b pop %ebx +8010114d: 5e pop %esi +8010114e: 5f pop %edi +8010114f: 5d pop %ebp +80101150: c3 ret -801011b3 : +80101151 : // 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) { -801011b3: 55 push %ebp -801011b4: 89 e5 mov %esp,%ebp -801011b6: 57 push %edi -801011b7: 56 push %esi -801011b8: 53 push %ebx -801011b9: 83 ec 1c sub $0x1c,%esp -801011bc: 89 c3 mov %eax,%ebx +80101151: 55 push %ebp +80101152: 89 e5 mov %esp,%ebp +80101154: 57 push %edi +80101155: 56 push %esi +80101156: 53 push %ebx +80101157: 83 ec 1c sub $0x1c,%esp +8010115a: 89 c3 mov %eax,%ebx +8010115c: 89 d7 mov %edx,%edi uint addr, *a; struct buf *bp; if(bn < NDIRECT){ -801011be: 83 fa 0b cmp $0xb,%edx -801011c1: 76 49 jbe 8010120c +8010115e: 83 fa 0b cmp $0xb,%edx +80101161: 76 45 jbe 801011a8 if((addr = ip->addrs[bn]) == 0) ip->addrs[bn] = addr = balloc(ip->dev); return addr; } bn -= NDIRECT; -801011c3: 8d 72 f4 lea -0xc(%edx),%esi +80101163: 8d 72 f4 lea -0xc(%edx),%esi if(bn < NINDIRECT){ -801011c6: 83 fe 7f cmp $0x7f,%esi -801011c9: 0f 87 80 00 00 00 ja 8010124f +80101166: 83 fe 7f cmp $0x7f,%esi +80101169: 77 7f ja 801011ea // Load indirect block, allocating if necessary. if((addr = ip->addrs[NDIRECT]) == 0) -801011cf: 8b 80 8c 00 00 00 mov 0x8c(%eax),%eax -801011d5: 85 c0 test %eax,%eax -801011d7: 74 4b je 80101224 +8010116b: 8b 80 8c 00 00 00 mov 0x8c(%eax),%eax +80101171: 85 c0 test %eax,%eax +80101173: 74 4a je 801011bf ip->addrs[NDIRECT] = addr = balloc(ip->dev); bp = bread(ip->dev, addr); -801011d9: 83 ec 08 sub $0x8,%esp -801011dc: 50 push %eax -801011dd: ff 33 pushl (%ebx) -801011df: e8 ca ee ff ff call 801000ae -801011e4: 89 c7 mov %eax,%edi +80101175: 83 ec 08 sub $0x8,%esp +80101178: 50 push %eax +80101179: ff 33 push (%ebx) +8010117b: e8 2a ef ff ff call 801000aa +80101180: 89 c7 mov %eax,%edi a = (uint*)bp->data; if((addr = a[bn]) == 0){ -801011e6: 8d 44 b0 5c lea 0x5c(%eax,%esi,4),%eax -801011ea: 89 45 e4 mov %eax,-0x1c(%ebp) -801011ed: 8b 30 mov (%eax),%esi -801011ef: 83 c4 10 add $0x10,%esp -801011f2: 85 f6 test %esi,%esi -801011f4: 74 3d je 80101233 +80101182: 8d 44 b0 5c lea 0x5c(%eax,%esi,4),%eax +80101186: 89 45 e4 mov %eax,-0x1c(%ebp) +80101189: 8b 30 mov (%eax),%esi +8010118b: 83 c4 10 add $0x10,%esp +8010118e: 85 f6 test %esi,%esi +80101190: 74 3c je 801011ce a[bn] = addr = balloc(ip->dev); log_write(bp); } brelse(bp); -801011f6: 83 ec 0c sub $0xc,%esp -801011f9: 57 push %edi -801011fa: e8 ce ef ff ff call 801001cd +80101192: 83 ec 0c sub $0xc,%esp +80101195: 57 push %edi +80101196: e8 26 f0 ff ff call 801001c1 return addr; -801011ff: 83 c4 10 add $0x10,%esp +8010119b: 83 c4 10 add $0x10,%esp } panic("bmap: out of range"); } -80101202: 89 f0 mov %esi,%eax -80101204: 8d 65 f4 lea -0xc(%ebp),%esp -80101207: 5b pop %ebx -80101208: 5e pop %esi -80101209: 5f pop %edi -8010120a: 5d pop %ebp -8010120b: c3 ret +8010119e: 89 f0 mov %esi,%eax +801011a0: 8d 65 f4 lea -0xc(%ebp),%esp +801011a3: 5b pop %ebx +801011a4: 5e pop %esi +801011a5: 5f pop %edi +801011a6: 5d pop %ebp +801011a7: c3 ret if((addr = ip->addrs[bn]) == 0) -8010120c: 8d 3c 90 lea (%eax,%edx,4),%edi -8010120f: 8b 77 5c mov 0x5c(%edi),%esi -80101212: 85 f6 test %esi,%esi -80101214: 75 ec jne 80101202 +801011a8: 8b 74 90 5c mov 0x5c(%eax,%edx,4),%esi +801011ac: 85 f6 test %esi,%esi +801011ae: 75 ee jne 8010119e ip->addrs[bn] = addr = balloc(ip->dev); -80101216: 8b 00 mov (%eax),%eax -80101218: e8 70 fe ff ff call 8010108d -8010121d: 89 c6 mov %eax,%esi -8010121f: 89 47 5c mov %eax,0x5c(%edi) -80101222: eb de jmp 80101202 +801011b0: 8b 00 mov (%eax),%eax +801011b2: e8 83 fe ff ff call 8010103a +801011b7: 89 c6 mov %eax,%esi +801011b9: 89 44 bb 5c mov %eax,0x5c(%ebx,%edi,4) +801011bd: eb df jmp 8010119e ip->addrs[NDIRECT] = addr = balloc(ip->dev); -80101224: 8b 03 mov (%ebx),%eax -80101226: e8 62 fe ff ff call 8010108d -8010122b: 89 83 8c 00 00 00 mov %eax,0x8c(%ebx) -80101231: eb a6 jmp 801011d9 +801011bf: 8b 03 mov (%ebx),%eax +801011c1: e8 74 fe ff ff call 8010103a +801011c6: 89 83 8c 00 00 00 mov %eax,0x8c(%ebx) +801011cc: eb a7 jmp 80101175 a[bn] = addr = balloc(ip->dev); -80101233: 8b 03 mov (%ebx),%eax -80101235: e8 53 fe ff ff call 8010108d -8010123a: 89 c6 mov %eax,%esi -8010123c: 8b 45 e4 mov -0x1c(%ebp),%eax -8010123f: 89 30 mov %esi,(%eax) +801011ce: 8b 03 mov (%ebx),%eax +801011d0: e8 65 fe ff ff call 8010103a +801011d5: 89 c6 mov %eax,%esi +801011d7: 8b 45 e4 mov -0x1c(%ebp),%eax +801011da: 89 30 mov %esi,(%eax) log_write(bp); -80101241: 83 ec 0c sub $0xc,%esp -80101244: 57 push %edi -80101245: e8 fb 17 00 00 call 80102a45 -8010124a: 83 c4 10 add $0x10,%esp -8010124d: eb a7 jmp 801011f6 +801011dc: 83 ec 0c sub $0xc,%esp +801011df: 57 push %edi +801011e0: e8 56 17 00 00 call 8010293b +801011e5: 83 c4 10 add $0x10,%esp +801011e8: eb a8 jmp 80101192 panic("bmap: out of range"); -8010124f: 83 ec 0c sub $0xc,%esp -80101252: 68 64 79 10 80 push $0x80107964 -80101257: e8 fc f0 ff ff call 80100358 - -8010125c : -{ -8010125c: 55 push %ebp -8010125d: 89 e5 mov %esp,%ebp -8010125f: 57 push %edi -80101260: 56 push %esi -80101261: 53 push %ebx -80101262: 83 ec 28 sub $0x28,%esp -80101265: 89 c7 mov %eax,%edi -80101267: 89 55 e4 mov %edx,-0x1c(%ebp) +801011ea: 83 ec 0c sub $0xc,%esp +801011ed: 68 84 76 10 80 push $0x80107684 +801011f2: e8 49 f1 ff ff call 80100340 + +801011f7 : +{ +801011f7: 55 push %ebp +801011f8: 89 e5 mov %esp,%ebp +801011fa: 57 push %edi +801011fb: 56 push %esi +801011fc: 53 push %ebx +801011fd: 83 ec 28 sub $0x28,%esp +80101200: 89 c7 mov %eax,%edi +80101202: 89 55 e4 mov %edx,-0x1c(%ebp) acquire(&icache.lock); -8010126a: 68 00 36 11 80 push $0x80113600 -8010126f: e8 25 2c 00 00 call 80103e99 -80101274: 83 c4 10 add $0x10,%esp +80101205: 68 60 09 11 80 push $0x80110960 +8010120a: e8 f2 2a 00 00 call 80103d01 +8010120f: 83 c4 10 add $0x10,%esp empty = 0; -80101277: be 00 00 00 00 mov $0x0,%esi +80101212: be 00 00 00 00 mov $0x0,%esi for(ip = &icache.inode[0]; ip < &icache.inode[NINODE]; ip++){ -8010127c: bb 34 36 11 80 mov $0x80113634,%ebx -80101281: eb 13 jmp 80101296 +80101217: bb 94 09 11 80 mov $0x80110994,%ebx +8010121c: eb 13 jmp 80101231 if(empty == 0 && ip->ref == 0) // Remember empty slot. -80101283: 09 f0 or %esi,%eax -80101285: 0f 44 f3 cmove %ebx,%esi +8010121e: 09 f0 or %esi,%eax +80101220: 0f 44 f3 cmove %ebx,%esi for(ip = &icache.inode[0]; ip < &icache.inode[NINODE]; ip++){ -80101288: 81 c3 90 00 00 00 add $0x90,%ebx -8010128e: 81 fb 54 52 11 80 cmp $0x80115254,%ebx -80101294: 74 2d je 801012c3 +80101223: 81 c3 90 00 00 00 add $0x90,%ebx +80101229: 81 fb b4 25 11 80 cmp $0x801125b4,%ebx +8010122f: 74 2d je 8010125e if(ip->ref > 0 && ip->dev == dev && ip->inum == inum){ -80101296: 8b 43 08 mov 0x8(%ebx),%eax -80101299: 85 c0 test %eax,%eax -8010129b: 7e e6 jle 80101283 -8010129d: 39 3b cmp %edi,(%ebx) -8010129f: 75 e7 jne 80101288 -801012a1: 8b 4d e4 mov -0x1c(%ebp),%ecx -801012a4: 39 4b 04 cmp %ecx,0x4(%ebx) -801012a7: 75 df jne 80101288 +80101231: 8b 43 08 mov 0x8(%ebx),%eax +80101234: 85 c0 test %eax,%eax +80101236: 7e e6 jle 8010121e +80101238: 39 3b cmp %edi,(%ebx) +8010123a: 75 e7 jne 80101223 +8010123c: 8b 4d e4 mov -0x1c(%ebp),%ecx +8010123f: 39 4b 04 cmp %ecx,0x4(%ebx) +80101242: 75 df jne 80101223 ip->ref++; -801012a9: 83 c0 01 add $0x1,%eax -801012ac: 89 43 08 mov %eax,0x8(%ebx) +80101244: 83 c0 01 add $0x1,%eax +80101247: 89 43 08 mov %eax,0x8(%ebx) release(&icache.lock); -801012af: 83 ec 0c sub $0xc,%esp -801012b2: 68 00 36 11 80 push $0x80113600 -801012b7: e8 48 2c 00 00 call 80103f04 +8010124a: 83 ec 0c sub $0xc,%esp +8010124d: 68 60 09 11 80 push $0x80110960 +80101252: e8 11 2b 00 00 call 80103d68 return ip; -801012bc: 83 c4 10 add $0x10,%esp -801012bf: 89 de mov %ebx,%esi -801012c1: eb 2a jmp 801012ed +80101257: 83 c4 10 add $0x10,%esp +8010125a: 89 de mov %ebx,%esi +8010125c: eb 2a jmp 80101288 if(empty == 0) -801012c3: 85 f6 test %esi,%esi -801012c5: 74 30 je 801012f7 +8010125e: 85 f6 test %esi,%esi +80101260: 74 30 je 80101292 ip->dev = dev; -801012c7: 89 3e mov %edi,(%esi) +80101262: 89 3e mov %edi,(%esi) ip->inum = inum; -801012c9: 8b 45 e4 mov -0x1c(%ebp),%eax -801012cc: 89 46 04 mov %eax,0x4(%esi) +80101264: 8b 45 e4 mov -0x1c(%ebp),%eax +80101267: 89 46 04 mov %eax,0x4(%esi) ip->ref = 1; -801012cf: c7 46 08 01 00 00 00 movl $0x1,0x8(%esi) +8010126a: c7 46 08 01 00 00 00 movl $0x1,0x8(%esi) ip->valid = 0; -801012d6: c7 46 4c 00 00 00 00 movl $0x0,0x4c(%esi) +80101271: c7 46 4c 00 00 00 00 movl $0x0,0x4c(%esi) release(&icache.lock); -801012dd: 83 ec 0c sub $0xc,%esp -801012e0: 68 00 36 11 80 push $0x80113600 -801012e5: e8 1a 2c 00 00 call 80103f04 +80101278: 83 ec 0c sub $0xc,%esp +8010127b: 68 60 09 11 80 push $0x80110960 +80101280: e8 e3 2a 00 00 call 80103d68 return ip; -801012ea: 83 c4 10 add $0x10,%esp -} -801012ed: 89 f0 mov %esi,%eax -801012ef: 8d 65 f4 lea -0xc(%ebp),%esp -801012f2: 5b pop %ebx -801012f3: 5e pop %esi -801012f4: 5f pop %edi -801012f5: 5d pop %ebp -801012f6: c3 ret +80101285: 83 c4 10 add $0x10,%esp +} +80101288: 89 f0 mov %esi,%eax +8010128a: 8d 65 f4 lea -0xc(%ebp),%esp +8010128d: 5b pop %ebx +8010128e: 5e pop %esi +8010128f: 5f pop %edi +80101290: 5d pop %ebp +80101291: c3 ret panic("iget: no inodes"); -801012f7: 83 ec 0c sub $0xc,%esp -801012fa: 68 77 79 10 80 push $0x80107977 -801012ff: e8 54 f0 ff ff call 80100358 +80101292: 83 ec 0c sub $0xc,%esp +80101295: 68 97 76 10 80 push $0x80107697 +8010129a: e8 a1 f0 ff ff call 80100340 -80101304 : +8010129f : { -80101304: f3 0f 1e fb endbr32 -80101308: 55 push %ebp -80101309: 89 e5 mov %esp,%ebp -8010130b: 53 push %ebx -8010130c: 83 ec 0c sub $0xc,%esp +8010129f: 55 push %ebp +801012a0: 89 e5 mov %esp,%ebp +801012a2: 53 push %ebx +801012a3: 83 ec 0c sub $0xc,%esp bp = bread(dev, 1); -8010130f: 6a 01 push $0x1 -80101311: ff 75 08 pushl 0x8(%ebp) -80101314: e8 95 ed ff ff call 801000ae -80101319: 89 c3 mov %eax,%ebx +801012a6: 6a 01 push $0x1 +801012a8: ff 75 08 push 0x8(%ebp) +801012ab: e8 fa ed ff ff call 801000aa +801012b0: 89 c3 mov %eax,%ebx memmove(sb, bp->data, sizeof(*sb)); -8010131b: 83 c4 0c add $0xc,%esp -8010131e: 6a 1c push $0x1c -80101320: 8d 40 5c lea 0x5c(%eax),%eax -80101323: 50 push %eax -80101324: ff 75 0c pushl 0xc(%ebp) -80101327: e8 b0 2c 00 00 call 80103fdc +801012b2: 83 c4 0c add $0xc,%esp +801012b5: 6a 1c push $0x1c +801012b7: 8d 40 5c lea 0x5c(%eax),%eax +801012ba: 50 push %eax +801012bb: ff 75 0c push 0xc(%ebp) +801012be: e8 71 2b 00 00 call 80103e34 brelse(bp); -8010132c: 89 1c 24 mov %ebx,(%esp) -8010132f: e8 99 ee ff ff call 801001cd +801012c3: 89 1c 24 mov %ebx,(%esp) +801012c6: e8 f6 ee ff ff call 801001c1 } -80101334: 83 c4 10 add $0x10,%esp -80101337: 8b 5d fc mov -0x4(%ebp),%ebx -8010133a: c9 leave -8010133b: c3 ret +801012cb: 83 c4 10 add $0x10,%esp +801012ce: 8b 5d fc mov -0x4(%ebp),%ebx +801012d1: c9 leave +801012d2: c3 ret -8010133c : +801012d3 : { -8010133c: f3 0f 1e fb endbr32 -80101340: 55 push %ebp -80101341: 89 e5 mov %esp,%ebp -80101343: 56 push %esi -80101344: 53 push %ebx +801012d3: 55 push %ebp +801012d4: 89 e5 mov %esp,%ebp +801012d6: 56 push %esi +801012d7: 53 push %ebx initlock(&icache.lock, "icache"); -80101345: 83 ec 08 sub $0x8,%esp -80101348: 68 87 79 10 80 push $0x80107987 -8010134d: 68 00 36 11 80 push $0x80113600 -80101352: e8 e6 29 00 00 call 80103d3d +801012d8: 83 ec 08 sub $0x8,%esp +801012db: 68 a7 76 10 80 push $0x801076a7 +801012e0: 68 60 09 11 80 push $0x80110960 +801012e5: e8 ce 28 00 00 call 80103bb8 for(i = 0; i < NINODE; i++) { -80101357: bb 40 36 11 80 mov $0x80113640,%ebx -8010135c: be 60 52 11 80 mov $0x80115260,%esi -80101361: 83 c4 10 add $0x10,%esp +801012ea: bb a0 09 11 80 mov $0x801109a0,%ebx +801012ef: be c0 25 11 80 mov $0x801125c0,%esi +801012f4: 83 c4 10 add $0x10,%esp initsleeplock(&icache.inode[i].lock, "inode"); -80101364: 83 ec 08 sub $0x8,%esp -80101367: 68 8e 79 10 80 push $0x8010798e -8010136c: 53 push %ebx -8010136d: e8 b1 28 00 00 call 80103c23 +801012f7: 83 ec 08 sub $0x8,%esp +801012fa: 68 ae 76 10 80 push $0x801076ae +801012ff: 53 push %ebx +80101300: e8 a9 27 00 00 call 80103aae for(i = 0; i < NINODE; i++) { -80101372: 81 c3 90 00 00 00 add $0x90,%ebx -80101378: 83 c4 10 add $0x10,%esp -8010137b: 39 f3 cmp %esi,%ebx -8010137d: 75 e5 jne 80101364 +80101305: 81 c3 90 00 00 00 add $0x90,%ebx +8010130b: 83 c4 10 add $0x10,%esp +8010130e: 39 f3 cmp %esi,%ebx +80101310: 75 e5 jne 801012f7 readsb(dev, &sb); -8010137f: 83 ec 08 sub $0x8,%esp -80101382: 68 e0 35 11 80 push $0x801135e0 -80101387: ff 75 08 pushl 0x8(%ebp) -8010138a: e8 75 ff ff ff call 80101304 +80101312: 83 ec 08 sub $0x8,%esp +80101315: 68 b4 25 11 80 push $0x801125b4 +8010131a: ff 75 08 push 0x8(%ebp) +8010131d: e8 7d ff ff ff call 8010129f cprintf("sb: size %d nblocks %d ninodes %d nlog %d logstart %d\ -8010138f: ff 35 f8 35 11 80 pushl 0x801135f8 -80101395: ff 35 f4 35 11 80 pushl 0x801135f4 -8010139b: ff 35 f0 35 11 80 pushl 0x801135f0 -801013a1: ff 35 ec 35 11 80 pushl 0x801135ec -801013a7: ff 35 e8 35 11 80 pushl 0x801135e8 -801013ad: ff 35 e4 35 11 80 pushl 0x801135e4 -801013b3: ff 35 e0 35 11 80 pushl 0x801135e0 -801013b9: 68 f4 79 10 80 push $0x801079f4 -801013be: e8 69 f2 ff ff call 8010062c -} -801013c3: 83 c4 30 add $0x30,%esp -801013c6: 8d 65 f8 lea -0x8(%ebp),%esp -801013c9: 5b pop %ebx -801013ca: 5e pop %esi -801013cb: 5d pop %ebp -801013cc: c3 ret - -801013cd : -{ -801013cd: f3 0f 1e fb endbr32 -801013d1: 55 push %ebp -801013d2: 89 e5 mov %esp,%ebp -801013d4: 57 push %edi -801013d5: 56 push %esi -801013d6: 53 push %ebx -801013d7: 83 ec 1c sub $0x1c,%esp -801013da: 8b 45 0c mov 0xc(%ebp),%eax -801013dd: 89 45 e0 mov %eax,-0x20(%ebp) +80101322: ff 35 cc 25 11 80 push 0x801125cc +80101328: ff 35 c8 25 11 80 push 0x801125c8 +8010132e: ff 35 c4 25 11 80 push 0x801125c4 +80101334: ff 35 c0 25 11 80 push 0x801125c0 +8010133a: ff 35 bc 25 11 80 push 0x801125bc +80101340: ff 35 b8 25 11 80 push 0x801125b8 +80101346: ff 35 b4 25 11 80 push 0x801125b4 +8010134c: 68 14 77 10 80 push $0x80107714 +80101351: e8 ab f2 ff ff call 80100601 +} +80101356: 83 c4 30 add $0x30,%esp +80101359: 8d 65 f8 lea -0x8(%ebp),%esp +8010135c: 5b pop %ebx +8010135d: 5e pop %esi +8010135e: 5d pop %ebp +8010135f: c3 ret + +80101360 : +{ +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 +80101369: 8b 45 0c mov 0xc(%ebp),%eax +8010136c: 89 45 e0 mov %eax,-0x20(%ebp) for(inum = 1; inum < sb.ninodes; inum++){ -801013e0: 83 3d e8 35 11 80 01 cmpl $0x1,0x801135e8 -801013e7: 76 4d jbe 80101436 -801013e9: bb 01 00 00 00 mov $0x1,%ebx -801013ee: 89 5d e4 mov %ebx,-0x1c(%ebp) +8010136f: 83 3d bc 25 11 80 01 cmpl $0x1,0x801125bc +80101376: 76 4d jbe 801013c5 +80101378: bb 01 00 00 00 mov $0x1,%ebx +8010137d: 89 5d e4 mov %ebx,-0x1c(%ebp) bp = bread(dev, IBLOCK(inum, sb)); -801013f1: 83 ec 08 sub $0x8,%esp -801013f4: 89 d8 mov %ebx,%eax -801013f6: c1 e8 03 shr $0x3,%eax -801013f9: 03 05 f4 35 11 80 add 0x801135f4,%eax -801013ff: 50 push %eax -80101400: ff 75 08 pushl 0x8(%ebp) -80101403: e8 a6 ec ff ff call 801000ae -80101408: 89 c6 mov %eax,%esi +80101380: 83 ec 08 sub $0x8,%esp +80101383: 89 d8 mov %ebx,%eax +80101385: c1 e8 03 shr $0x3,%eax +80101388: 03 05 c8 25 11 80 add 0x801125c8,%eax +8010138e: 50 push %eax +8010138f: ff 75 08 push 0x8(%ebp) +80101392: e8 13 ed ff ff call 801000aa +80101397: 89 c6 mov %eax,%esi dip = (struct dinode*)bp->data + inum%IPB; -8010140a: 89 d8 mov %ebx,%eax -8010140c: 83 e0 07 and $0x7,%eax -8010140f: c1 e0 06 shl $0x6,%eax -80101412: 8d 7c 06 5c lea 0x5c(%esi,%eax,1),%edi +80101399: 89 d8 mov %ebx,%eax +8010139b: 83 e0 07 and $0x7,%eax +8010139e: c1 e0 06 shl $0x6,%eax +801013a1: 8d 7c 06 5c lea 0x5c(%esi,%eax,1),%edi if(dip->type == 0){ // a free inode -80101416: 83 c4 10 add $0x10,%esp -80101419: 66 83 3f 00 cmpw $0x0,(%edi) -8010141d: 74 24 je 80101443 +801013a5: 83 c4 10 add $0x10,%esp +801013a8: 66 83 3f 00 cmpw $0x0,(%edi) +801013ac: 74 24 je 801013d2 brelse(bp); -8010141f: 83 ec 0c sub $0xc,%esp -80101422: 56 push %esi -80101423: e8 a5 ed ff ff call 801001cd +801013ae: 83 ec 0c sub $0xc,%esp +801013b1: 56 push %esi +801013b2: e8 0a ee ff ff call 801001c1 for(inum = 1; inum < sb.ninodes; inum++){ -80101428: 83 c3 01 add $0x1,%ebx -8010142b: 83 c4 10 add $0x10,%esp -8010142e: 39 1d e8 35 11 80 cmp %ebx,0x801135e8 -80101434: 77 b8 ja 801013ee +801013b7: 83 c3 01 add $0x1,%ebx +801013ba: 83 c4 10 add $0x10,%esp +801013bd: 39 1d bc 25 11 80 cmp %ebx,0x801125bc +801013c3: 77 b8 ja 8010137d panic("ialloc: no inodes"); -80101436: 83 ec 0c sub $0xc,%esp -80101439: 68 94 79 10 80 push $0x80107994 -8010143e: e8 15 ef ff ff call 80100358 +801013c5: 83 ec 0c sub $0xc,%esp +801013c8: 68 b4 76 10 80 push $0x801076b4 +801013cd: e8 6e ef ff ff call 80100340 memset(dip, 0, sizeof(*dip)); -80101443: 83 ec 04 sub $0x4,%esp -80101446: 6a 40 push $0x40 -80101448: 6a 00 push $0x0 -8010144a: 57 push %edi -8010144b: e8 ff 2a 00 00 call 80103f4f +801013d2: 83 ec 04 sub $0x4,%esp +801013d5: 6a 40 push $0x40 +801013d7: 6a 00 push $0x0 +801013d9: 57 push %edi +801013da: e8 d0 29 00 00 call 80103daf dip->type = type; -80101450: 0f b7 45 e0 movzwl -0x20(%ebp),%eax -80101454: 66 89 07 mov %ax,(%edi) +801013df: 0f b7 45 e0 movzwl -0x20(%ebp),%eax +801013e3: 66 89 07 mov %ax,(%edi) log_write(bp); // mark it allocated on the disk -80101457: 89 34 24 mov %esi,(%esp) -8010145a: e8 e6 15 00 00 call 80102a45 +801013e6: 89 34 24 mov %esi,(%esp) +801013e9: e8 4d 15 00 00 call 8010293b brelse(bp); -8010145f: 89 34 24 mov %esi,(%esp) -80101462: e8 66 ed ff ff call 801001cd +801013ee: 89 34 24 mov %esi,(%esp) +801013f1: e8 cb ed ff ff call 801001c1 return iget(dev, inum); -80101467: 8b 55 e4 mov -0x1c(%ebp),%edx -8010146a: 8b 45 08 mov 0x8(%ebp),%eax -8010146d: e8 ea fd ff ff call 8010125c -} -80101472: 8d 65 f4 lea -0xc(%ebp),%esp -80101475: 5b pop %ebx -80101476: 5e pop %esi -80101477: 5f pop %edi -80101478: 5d pop %ebp -80101479: c3 ret - -8010147a : -{ -8010147a: f3 0f 1e fb endbr32 -8010147e: 55 push %ebp -8010147f: 89 e5 mov %esp,%ebp -80101481: 56 push %esi -80101482: 53 push %ebx -80101483: 8b 5d 08 mov 0x8(%ebp),%ebx +801013f6: 8b 55 e4 mov -0x1c(%ebp),%edx +801013f9: 8b 45 08 mov 0x8(%ebp),%eax +801013fc: e8 f6 fd ff ff call 801011f7 +} +80101401: 8d 65 f4 lea -0xc(%ebp),%esp +80101404: 5b pop %ebx +80101405: 5e pop %esi +80101406: 5f pop %edi +80101407: 5d pop %ebp +80101408: c3 ret + +80101409 : +{ +80101409: 55 push %ebp +8010140a: 89 e5 mov %esp,%ebp +8010140c: 56 push %esi +8010140d: 53 push %ebx +8010140e: 8b 5d 08 mov 0x8(%ebp),%ebx bp = bread(ip->dev, IBLOCK(ip->inum, sb)); -80101486: 83 ec 08 sub $0x8,%esp -80101489: 8b 43 04 mov 0x4(%ebx),%eax -8010148c: c1 e8 03 shr $0x3,%eax -8010148f: 03 05 f4 35 11 80 add 0x801135f4,%eax -80101495: 50 push %eax -80101496: ff 33 pushl (%ebx) -80101498: e8 11 ec ff ff call 801000ae -8010149d: 89 c6 mov %eax,%esi +80101411: 83 ec 08 sub $0x8,%esp +80101414: 8b 43 04 mov 0x4(%ebx),%eax +80101417: c1 e8 03 shr $0x3,%eax +8010141a: 03 05 c8 25 11 80 add 0x801125c8,%eax +80101420: 50 push %eax +80101421: ff 33 push (%ebx) +80101423: e8 82 ec ff ff call 801000aa +80101428: 89 c6 mov %eax,%esi dip = (struct dinode*)bp->data + ip->inum%IPB; -8010149f: 8b 43 04 mov 0x4(%ebx),%eax -801014a2: 83 e0 07 and $0x7,%eax -801014a5: c1 e0 06 shl $0x6,%eax -801014a8: 8d 44 06 5c lea 0x5c(%esi,%eax,1),%eax +8010142a: 8b 43 04 mov 0x4(%ebx),%eax +8010142d: 83 e0 07 and $0x7,%eax +80101430: c1 e0 06 shl $0x6,%eax +80101433: 8d 44 06 5c lea 0x5c(%esi,%eax,1),%eax dip->type = ip->type; -801014ac: 0f b7 53 50 movzwl 0x50(%ebx),%edx -801014b0: 66 89 10 mov %dx,(%eax) +80101437: 0f b7 53 50 movzwl 0x50(%ebx),%edx +8010143b: 66 89 10 mov %dx,(%eax) dip->major = ip->major; -801014b3: 0f b7 53 52 movzwl 0x52(%ebx),%edx -801014b7: 66 89 50 02 mov %dx,0x2(%eax) +8010143e: 0f b7 53 52 movzwl 0x52(%ebx),%edx +80101442: 66 89 50 02 mov %dx,0x2(%eax) dip->minor = ip->minor; -801014bb: 0f b7 53 54 movzwl 0x54(%ebx),%edx -801014bf: 66 89 50 04 mov %dx,0x4(%eax) +80101446: 0f b7 53 54 movzwl 0x54(%ebx),%edx +8010144a: 66 89 50 04 mov %dx,0x4(%eax) dip->nlink = ip->nlink; -801014c3: 0f b7 53 56 movzwl 0x56(%ebx),%edx -801014c7: 66 89 50 06 mov %dx,0x6(%eax) +8010144e: 0f b7 53 56 movzwl 0x56(%ebx),%edx +80101452: 66 89 50 06 mov %dx,0x6(%eax) dip->size = ip->size; -801014cb: 8b 53 58 mov 0x58(%ebx),%edx -801014ce: 89 50 08 mov %edx,0x8(%eax) +80101456: 8b 53 58 mov 0x58(%ebx),%edx +80101459: 89 50 08 mov %edx,0x8(%eax) memmove(dip->addrs, ip->addrs, sizeof(ip->addrs)); -801014d1: 83 c4 0c add $0xc,%esp -801014d4: 6a 34 push $0x34 -801014d6: 83 c3 5c add $0x5c,%ebx -801014d9: 53 push %ebx -801014da: 83 c0 0c add $0xc,%eax -801014dd: 50 push %eax -801014de: e8 f9 2a 00 00 call 80103fdc +8010145c: 83 c4 0c add $0xc,%esp +8010145f: 6a 34 push $0x34 +80101461: 83 c3 5c add $0x5c,%ebx +80101464: 53 push %ebx +80101465: 83 c0 0c add $0xc,%eax +80101468: 50 push %eax +80101469: e8 c6 29 00 00 call 80103e34 log_write(bp); -801014e3: 89 34 24 mov %esi,(%esp) -801014e6: e8 5a 15 00 00 call 80102a45 +8010146e: 89 34 24 mov %esi,(%esp) +80101471: e8 c5 14 00 00 call 8010293b brelse(bp); -801014eb: 89 34 24 mov %esi,(%esp) -801014ee: e8 da ec ff ff call 801001cd -} -801014f3: 83 c4 10 add $0x10,%esp -801014f6: 8d 65 f8 lea -0x8(%ebp),%esp -801014f9: 5b pop %ebx -801014fa: 5e pop %esi -801014fb: 5d pop %ebp -801014fc: c3 ret - -801014fd : -{ -801014fd: f3 0f 1e fb endbr32 -80101501: 55 push %ebp -80101502: 89 e5 mov %esp,%ebp -80101504: 53 push %ebx -80101505: 83 ec 10 sub $0x10,%esp -80101508: 8b 5d 08 mov 0x8(%ebp),%ebx +80101476: 89 34 24 mov %esi,(%esp) +80101479: e8 43 ed ff ff call 801001c1 +} +8010147e: 83 c4 10 add $0x10,%esp +80101481: 8d 65 f8 lea -0x8(%ebp),%esp +80101484: 5b pop %ebx +80101485: 5e pop %esi +80101486: 5d pop %ebp +80101487: c3 ret + +80101488 : +{ +80101488: 55 push %ebp +80101489: 89 e5 mov %esp,%ebp +8010148b: 53 push %ebx +8010148c: 83 ec 10 sub $0x10,%esp +8010148f: 8b 5d 08 mov 0x8(%ebp),%ebx acquire(&icache.lock); -8010150b: 68 00 36 11 80 push $0x80113600 -80101510: e8 84 29 00 00 call 80103e99 +80101492: 68 60 09 11 80 push $0x80110960 +80101497: e8 65 28 00 00 call 80103d01 ip->ref++; -80101515: 83 43 08 01 addl $0x1,0x8(%ebx) +8010149c: 83 43 08 01 addl $0x1,0x8(%ebx) release(&icache.lock); -80101519: c7 04 24 00 36 11 80 movl $0x80113600,(%esp) -80101520: e8 df 29 00 00 call 80103f04 -} -80101525: 89 d8 mov %ebx,%eax -80101527: 8b 5d fc mov -0x4(%ebp),%ebx -8010152a: c9 leave -8010152b: c3 ret - -8010152c : -{ -8010152c: f3 0f 1e fb endbr32 -80101530: 55 push %ebp -80101531: 89 e5 mov %esp,%ebp -80101533: 56 push %esi -80101534: 53 push %ebx -80101535: 8b 5d 08 mov 0x8(%ebp),%ebx +801014a0: c7 04 24 60 09 11 80 movl $0x80110960,(%esp) +801014a7: e8 bc 28 00 00 call 80103d68 +} +801014ac: 89 d8 mov %ebx,%eax +801014ae: 8b 5d fc mov -0x4(%ebp),%ebx +801014b1: c9 leave +801014b2: c3 ret + +801014b3 : +{ +801014b3: 55 push %ebp +801014b4: 89 e5 mov %esp,%ebp +801014b6: 56 push %esi +801014b7: 53 push %ebx +801014b8: 8b 5d 08 mov 0x8(%ebp),%ebx if(ip == 0 || ip->ref < 1) -80101538: 85 db test %ebx,%ebx -8010153a: 74 22 je 8010155e -8010153c: 83 7b 08 00 cmpl $0x0,0x8(%ebx) -80101540: 7e 1c jle 8010155e +801014bb: 85 db test %ebx,%ebx +801014bd: 74 22 je 801014e1 +801014bf: 83 7b 08 00 cmpl $0x0,0x8(%ebx) +801014c3: 7e 1c jle 801014e1 acquiresleep(&ip->lock); -80101542: 83 ec 0c sub $0xc,%esp -80101545: 8d 43 0c lea 0xc(%ebx),%eax -80101548: 50 push %eax -80101549: e8 0c 27 00 00 call 80103c5a +801014c5: 83 ec 0c sub $0xc,%esp +801014c8: 8d 43 0c lea 0xc(%ebx),%eax +801014cb: 50 push %eax +801014cc: e8 10 26 00 00 call 80103ae1 if(ip->valid == 0){ -8010154e: 83 c4 10 add $0x10,%esp -80101551: 83 7b 4c 00 cmpl $0x0,0x4c(%ebx) -80101555: 74 14 je 8010156b -} -80101557: 8d 65 f8 lea -0x8(%ebp),%esp -8010155a: 5b pop %ebx -8010155b: 5e pop %esi -8010155c: 5d pop %ebp -8010155d: c3 ret +801014d1: 83 c4 10 add $0x10,%esp +801014d4: 83 7b 4c 00 cmpl $0x0,0x4c(%ebx) +801014d8: 74 14 je 801014ee +} +801014da: 8d 65 f8 lea -0x8(%ebp),%esp +801014dd: 5b pop %ebx +801014de: 5e pop %esi +801014df: 5d pop %ebp +801014e0: c3 ret panic("ilock"); -8010155e: 83 ec 0c sub $0xc,%esp -80101561: 68 a6 79 10 80 push $0x801079a6 -80101566: e8 ed ed ff ff call 80100358 +801014e1: 83 ec 0c sub $0xc,%esp +801014e4: 68 c6 76 10 80 push $0x801076c6 +801014e9: e8 52 ee ff ff call 80100340 bp = bread(ip->dev, IBLOCK(ip->inum, sb)); -8010156b: 83 ec 08 sub $0x8,%esp -8010156e: 8b 43 04 mov 0x4(%ebx),%eax -80101571: c1 e8 03 shr $0x3,%eax -80101574: 03 05 f4 35 11 80 add 0x801135f4,%eax -8010157a: 50 push %eax -8010157b: ff 33 pushl (%ebx) -8010157d: e8 2c eb ff ff call 801000ae -80101582: 89 c6 mov %eax,%esi +801014ee: 83 ec 08 sub $0x8,%esp +801014f1: 8b 43 04 mov 0x4(%ebx),%eax +801014f4: c1 e8 03 shr $0x3,%eax +801014f7: 03 05 c8 25 11 80 add 0x801125c8,%eax +801014fd: 50 push %eax +801014fe: ff 33 push (%ebx) +80101500: e8 a5 eb ff ff call 801000aa +80101505: 89 c6 mov %eax,%esi dip = (struct dinode*)bp->data + ip->inum%IPB; -80101584: 8b 43 04 mov 0x4(%ebx),%eax -80101587: 83 e0 07 and $0x7,%eax -8010158a: c1 e0 06 shl $0x6,%eax -8010158d: 8d 44 06 5c lea 0x5c(%esi,%eax,1),%eax +80101507: 8b 43 04 mov 0x4(%ebx),%eax +8010150a: 83 e0 07 and $0x7,%eax +8010150d: c1 e0 06 shl $0x6,%eax +80101510: 8d 44 06 5c lea 0x5c(%esi,%eax,1),%eax ip->type = dip->type; -80101591: 0f b7 10 movzwl (%eax),%edx -80101594: 66 89 53 50 mov %dx,0x50(%ebx) +80101514: 0f b7 10 movzwl (%eax),%edx +80101517: 66 89 53 50 mov %dx,0x50(%ebx) ip->major = dip->major; -80101598: 0f b7 50 02 movzwl 0x2(%eax),%edx -8010159c: 66 89 53 52 mov %dx,0x52(%ebx) +8010151b: 0f b7 50 02 movzwl 0x2(%eax),%edx +8010151f: 66 89 53 52 mov %dx,0x52(%ebx) ip->minor = dip->minor; -801015a0: 0f b7 50 04 movzwl 0x4(%eax),%edx -801015a4: 66 89 53 54 mov %dx,0x54(%ebx) +80101523: 0f b7 50 04 movzwl 0x4(%eax),%edx +80101527: 66 89 53 54 mov %dx,0x54(%ebx) ip->nlink = dip->nlink; -801015a8: 0f b7 50 06 movzwl 0x6(%eax),%edx -801015ac: 66 89 53 56 mov %dx,0x56(%ebx) +8010152b: 0f b7 50 06 movzwl 0x6(%eax),%edx +8010152f: 66 89 53 56 mov %dx,0x56(%ebx) ip->size = dip->size; -801015b0: 8b 50 08 mov 0x8(%eax),%edx -801015b3: 89 53 58 mov %edx,0x58(%ebx) +80101533: 8b 50 08 mov 0x8(%eax),%edx +80101536: 89 53 58 mov %edx,0x58(%ebx) memmove(ip->addrs, dip->addrs, sizeof(ip->addrs)); -801015b6: 83 c4 0c add $0xc,%esp -801015b9: 6a 34 push $0x34 -801015bb: 83 c0 0c add $0xc,%eax -801015be: 50 push %eax -801015bf: 8d 43 5c lea 0x5c(%ebx),%eax -801015c2: 50 push %eax -801015c3: e8 14 2a 00 00 call 80103fdc +80101539: 83 c4 0c add $0xc,%esp +8010153c: 6a 34 push $0x34 +8010153e: 83 c0 0c add $0xc,%eax +80101541: 50 push %eax +80101542: 8d 43 5c lea 0x5c(%ebx),%eax +80101545: 50 push %eax +80101546: e8 e9 28 00 00 call 80103e34 brelse(bp); -801015c8: 89 34 24 mov %esi,(%esp) -801015cb: e8 fd eb ff ff call 801001cd +8010154b: 89 34 24 mov %esi,(%esp) +8010154e: e8 6e ec ff ff call 801001c1 ip->valid = 1; -801015d0: c7 43 4c 01 00 00 00 movl $0x1,0x4c(%ebx) +80101553: c7 43 4c 01 00 00 00 movl $0x1,0x4c(%ebx) if(ip->type == 0) -801015d7: 83 c4 10 add $0x10,%esp -801015da: 66 83 7b 50 00 cmpw $0x0,0x50(%ebx) -801015df: 0f 85 72 ff ff ff jne 80101557 +8010155a: 83 c4 10 add $0x10,%esp +8010155d: 66 83 7b 50 00 cmpw $0x0,0x50(%ebx) +80101562: 0f 85 72 ff ff ff jne 801014da panic("ilock: no type"); -801015e5: 83 ec 0c sub $0xc,%esp -801015e8: 68 ac 79 10 80 push $0x801079ac -801015ed: e8 66 ed ff ff call 80100358 - -801015f2 : -{ -801015f2: f3 0f 1e fb endbr32 -801015f6: 55 push %ebp -801015f7: 89 e5 mov %esp,%ebp -801015f9: 56 push %esi -801015fa: 53 push %ebx -801015fb: 8b 5d 08 mov 0x8(%ebp),%ebx +80101568: 83 ec 0c sub $0xc,%esp +8010156b: 68 cc 76 10 80 push $0x801076cc +80101570: e8 cb ed ff ff call 80100340 + +80101575 : +{ +80101575: 55 push %ebp +80101576: 89 e5 mov %esp,%ebp +80101578: 56 push %esi +80101579: 53 push %ebx +8010157a: 8b 5d 08 mov 0x8(%ebp),%ebx if(ip == 0 || !holdingsleep(&ip->lock) || ip->ref < 1) -801015fe: 85 db test %ebx,%ebx -80101600: 74 2c je 8010162e -80101602: 8d 73 0c lea 0xc(%ebx),%esi -80101605: 83 ec 0c sub $0xc,%esp -80101608: 56 push %esi -80101609: e8 e1 26 00 00 call 80103cef -8010160e: 83 c4 10 add $0x10,%esp -80101611: 85 c0 test %eax,%eax -80101613: 74 19 je 8010162e -80101615: 83 7b 08 00 cmpl $0x0,0x8(%ebx) -80101619: 7e 13 jle 8010162e +8010157d: 85 db test %ebx,%ebx +8010157f: 74 2c je 801015ad +80101581: 8d 73 0c lea 0xc(%ebx),%esi +80101584: 83 ec 0c sub $0xc,%esp +80101587: 56 push %esi +80101588: e8 e1 25 00 00 call 80103b6e +8010158d: 83 c4 10 add $0x10,%esp +80101590: 85 c0 test %eax,%eax +80101592: 74 19 je 801015ad +80101594: 83 7b 08 00 cmpl $0x0,0x8(%ebx) +80101598: 7e 13 jle 801015ad releasesleep(&ip->lock); -8010161b: 83 ec 0c sub $0xc,%esp -8010161e: 56 push %esi -8010161f: e8 8c 26 00 00 call 80103cb0 -} -80101624: 83 c4 10 add $0x10,%esp -80101627: 8d 65 f8 lea -0x8(%ebp),%esp -8010162a: 5b pop %ebx -8010162b: 5e pop %esi -8010162c: 5d pop %ebp -8010162d: c3 ret +8010159a: 83 ec 0c sub $0xc,%esp +8010159d: 56 push %esi +8010159e: e8 90 25 00 00 call 80103b33 +} +801015a3: 83 c4 10 add $0x10,%esp +801015a6: 8d 65 f8 lea -0x8(%ebp),%esp +801015a9: 5b pop %ebx +801015aa: 5e pop %esi +801015ab: 5d pop %ebp +801015ac: c3 ret panic("iunlock"); -8010162e: 83 ec 0c sub $0xc,%esp -80101631: 68 bb 79 10 80 push $0x801079bb -80101636: e8 1d ed ff ff call 80100358 - -8010163b : -{ -8010163b: f3 0f 1e fb endbr32 -8010163f: 55 push %ebp -80101640: 89 e5 mov %esp,%ebp -80101642: 57 push %edi -80101643: 56 push %esi -80101644: 53 push %ebx -80101645: 83 ec 28 sub $0x28,%esp -80101648: 8b 5d 08 mov 0x8(%ebp),%ebx +801015ad: 83 ec 0c sub $0xc,%esp +801015b0: 68 db 76 10 80 push $0x801076db +801015b5: e8 86 ed ff ff call 80100340 + +801015ba : +{ +801015ba: 55 push %ebp +801015bb: 89 e5 mov %esp,%ebp +801015bd: 57 push %edi +801015be: 56 push %esi +801015bf: 53 push %ebx +801015c0: 83 ec 28 sub $0x28,%esp +801015c3: 8b 5d 08 mov 0x8(%ebp),%ebx acquiresleep(&ip->lock); -8010164b: 8d 73 0c lea 0xc(%ebx),%esi -8010164e: 56 push %esi -8010164f: e8 06 26 00 00 call 80103c5a +801015c6: 8d 73 0c lea 0xc(%ebx),%esi +801015c9: 56 push %esi +801015ca: e8 12 25 00 00 call 80103ae1 if(ip->valid && ip->nlink == 0){ -80101654: 83 c4 10 add $0x10,%esp -80101657: 83 7b 4c 00 cmpl $0x0,0x4c(%ebx) -8010165b: 74 07 je 80101664 -8010165d: 66 83 7b 56 00 cmpw $0x0,0x56(%ebx) -80101662: 74 30 je 80101694 +801015cf: 83 c4 10 add $0x10,%esp +801015d2: 83 7b 4c 00 cmpl $0x0,0x4c(%ebx) +801015d6: 74 07 je 801015df +801015d8: 66 83 7b 56 00 cmpw $0x0,0x56(%ebx) +801015dd: 74 30 je 8010160f releasesleep(&ip->lock); -80101664: 83 ec 0c sub $0xc,%esp -80101667: 56 push %esi -80101668: e8 43 26 00 00 call 80103cb0 +801015df: 83 ec 0c sub $0xc,%esp +801015e2: 56 push %esi +801015e3: e8 4b 25 00 00 call 80103b33 acquire(&icache.lock); -8010166d: c7 04 24 00 36 11 80 movl $0x80113600,(%esp) -80101674: e8 20 28 00 00 call 80103e99 +801015e8: c7 04 24 60 09 11 80 movl $0x80110960,(%esp) +801015ef: e8 0d 27 00 00 call 80103d01 ip->ref--; -80101679: 83 6b 08 01 subl $0x1,0x8(%ebx) +801015f4: 83 6b 08 01 subl $0x1,0x8(%ebx) release(&icache.lock); -8010167d: c7 04 24 00 36 11 80 movl $0x80113600,(%esp) -80101684: e8 7b 28 00 00 call 80103f04 -} -80101689: 83 c4 10 add $0x10,%esp -8010168c: 8d 65 f4 lea -0xc(%ebp),%esp -8010168f: 5b pop %ebx -80101690: 5e pop %esi -80101691: 5f pop %edi -80101692: 5d pop %ebp -80101693: c3 ret +801015f8: c7 04 24 60 09 11 80 movl $0x80110960,(%esp) +801015ff: e8 64 27 00 00 call 80103d68 +} +80101604: 83 c4 10 add $0x10,%esp +80101607: 8d 65 f4 lea -0xc(%ebp),%esp +8010160a: 5b pop %ebx +8010160b: 5e pop %esi +8010160c: 5f pop %edi +8010160d: 5d pop %ebp +8010160e: c3 ret acquire(&icache.lock); -80101694: 83 ec 0c sub $0xc,%esp -80101697: 68 00 36 11 80 push $0x80113600 -8010169c: e8 f8 27 00 00 call 80103e99 +8010160f: 83 ec 0c sub $0xc,%esp +80101612: 68 60 09 11 80 push $0x80110960 +80101617: e8 e5 26 00 00 call 80103d01 int r = ip->ref; -801016a1: 8b 7b 08 mov 0x8(%ebx),%edi +8010161c: 8b 7b 08 mov 0x8(%ebx),%edi release(&icache.lock); -801016a4: c7 04 24 00 36 11 80 movl $0x80113600,(%esp) -801016ab: e8 54 28 00 00 call 80103f04 +8010161f: c7 04 24 60 09 11 80 movl $0x80110960,(%esp) +80101626: e8 3d 27 00 00 call 80103d68 if(r == 1){ -801016b0: 83 c4 10 add $0x10,%esp -801016b3: 83 ff 01 cmp $0x1,%edi -801016b6: 75 ac jne 80101664 -801016b8: 8d 7b 5c lea 0x5c(%ebx),%edi -801016bb: 8d 83 8c 00 00 00 lea 0x8c(%ebx),%eax -801016c1: 89 75 e4 mov %esi,-0x1c(%ebp) -801016c4: 89 c6 mov %eax,%esi -801016c6: eb 07 jmp 801016cf +8010162b: 83 c4 10 add $0x10,%esp +8010162e: 83 ff 01 cmp $0x1,%edi +80101631: 75 ac jne 801015df +80101633: 8d 7b 5c lea 0x5c(%ebx),%edi +80101636: 8d 83 8c 00 00 00 lea 0x8c(%ebx),%eax +8010163c: 89 75 e4 mov %esi,-0x1c(%ebp) +8010163f: 89 c6 mov %eax,%esi +80101641: eb 07 jmp 8010164a { int i, j; struct buf *bp; uint *a; for(i = 0; i < NDIRECT; i++){ -801016c8: 83 c7 04 add $0x4,%edi -801016cb: 39 f7 cmp %esi,%edi -801016cd: 74 15 je 801016e4 +80101643: 83 c7 04 add $0x4,%edi +80101646: 39 f7 cmp %esi,%edi +80101648: 74 15 je 8010165f if(ip->addrs[i]){ -801016cf: 8b 17 mov (%edi),%edx -801016d1: 85 d2 test %edx,%edx -801016d3: 74 f3 je 801016c8 +8010164a: 8b 17 mov (%edi),%edx +8010164c: 85 d2 test %edx,%edx +8010164e: 74 f3 je 80101643 bfree(ip->dev, ip->addrs[i]); -801016d5: 8b 03 mov (%ebx),%eax -801016d7: e8 3d f9 ff ff call 80101019 +80101650: 8b 03 mov (%ebx),%eax +80101652: e8 6f f9 ff ff call 80100fc6 ip->addrs[i] = 0; -801016dc: c7 07 00 00 00 00 movl $0x0,(%edi) -801016e2: eb e4 jmp 801016c8 -801016e4: 8b 75 e4 mov -0x1c(%ebp),%esi +80101657: c7 07 00 00 00 00 movl $0x0,(%edi) +8010165d: eb e4 jmp 80101643 } } if(ip->addrs[NDIRECT]){ -801016e7: 8b 83 8c 00 00 00 mov 0x8c(%ebx),%eax -801016ed: 85 c0 test %eax,%eax -801016ef: 75 2d jne 8010171e +8010165f: 8b 75 e4 mov -0x1c(%ebp),%esi +80101662: 8b 83 8c 00 00 00 mov 0x8c(%ebx),%eax +80101668: 85 c0 test %eax,%eax +8010166a: 75 2d jne 80101699 brelse(bp); bfree(ip->dev, ip->addrs[NDIRECT]); ip->addrs[NDIRECT] = 0; } ip->size = 0; -801016f1: c7 43 58 00 00 00 00 movl $0x0,0x58(%ebx) +8010166c: c7 43 58 00 00 00 00 movl $0x0,0x58(%ebx) iupdate(ip); -801016f8: 83 ec 0c sub $0xc,%esp -801016fb: 53 push %ebx -801016fc: e8 79 fd ff ff call 8010147a +80101673: 83 ec 0c sub $0xc,%esp +80101676: 53 push %ebx +80101677: e8 8d fd ff ff call 80101409 ip->type = 0; -80101701: 66 c7 43 50 00 00 movw $0x0,0x50(%ebx) +8010167c: 66 c7 43 50 00 00 movw $0x0,0x50(%ebx) iupdate(ip); -80101707: 89 1c 24 mov %ebx,(%esp) -8010170a: e8 6b fd ff ff call 8010147a +80101682: 89 1c 24 mov %ebx,(%esp) +80101685: e8 7f fd ff ff call 80101409 ip->valid = 0; -8010170f: c7 43 4c 00 00 00 00 movl $0x0,0x4c(%ebx) -80101716: 83 c4 10 add $0x10,%esp -80101719: e9 46 ff ff ff jmp 80101664 +8010168a: c7 43 4c 00 00 00 00 movl $0x0,0x4c(%ebx) +80101691: 83 c4 10 add $0x10,%esp +80101694: e9 46 ff ff ff jmp 801015df bp = bread(ip->dev, ip->addrs[NDIRECT]); -8010171e: 83 ec 08 sub $0x8,%esp -80101721: 50 push %eax -80101722: ff 33 pushl (%ebx) -80101724: e8 85 e9 ff ff call 801000ae -80101729: 89 45 e4 mov %eax,-0x1c(%ebp) +80101699: 83 ec 08 sub $0x8,%esp +8010169c: 50 push %eax +8010169d: ff 33 push (%ebx) +8010169f: e8 06 ea ff ff call 801000aa +801016a4: 89 45 e4 mov %eax,-0x1c(%ebp) for(j = 0; j < NINDIRECT; j++){ -8010172c: 8d 78 5c lea 0x5c(%eax),%edi -8010172f: 05 5c 02 00 00 add $0x25c,%eax -80101734: 83 c4 10 add $0x10,%esp -80101737: 89 75 e0 mov %esi,-0x20(%ebp) -8010173a: 89 c6 mov %eax,%esi -8010173c: eb 0e jmp 8010174c - bfree(ip->dev, a[j]); -8010173e: 8b 03 mov (%ebx),%eax -80101740: e8 d4 f8 ff ff call 80101019 - for(j = 0; j < NINDIRECT; j++){ -80101745: 83 c7 04 add $0x4,%edi -80101748: 39 f7 cmp %esi,%edi -8010174a: 74 08 je 80101754 +801016a7: 8d 78 5c lea 0x5c(%eax),%edi +801016aa: 05 5c 02 00 00 add $0x25c,%eax +801016af: 83 c4 10 add $0x10,%esp +801016b2: 89 75 e0 mov %esi,-0x20(%ebp) +801016b5: 89 c6 mov %eax,%esi +801016b7: eb 07 jmp 801016c0 +801016b9: 83 c7 04 add $0x4,%edi +801016bc: 39 f7 cmp %esi,%edi +801016be: 74 0f je 801016cf if(a[j]) -8010174c: 8b 17 mov (%edi),%edx -8010174e: 85 d2 test %edx,%edx -80101750: 74 f3 je 80101745 -80101752: eb ea jmp 8010173e -80101754: 8b 75 e0 mov -0x20(%ebp),%esi +801016c0: 8b 17 mov (%edi),%edx +801016c2: 85 d2 test %edx,%edx +801016c4: 74 f3 je 801016b9 + bfree(ip->dev, a[j]); +801016c6: 8b 03 mov (%ebx),%eax +801016c8: e8 f9 f8 ff ff call 80100fc6 +801016cd: eb ea jmp 801016b9 brelse(bp); -80101757: 83 ec 0c sub $0xc,%esp -8010175a: ff 75 e4 pushl -0x1c(%ebp) -8010175d: e8 6b ea ff ff call 801001cd +801016cf: 8b 75 e0 mov -0x20(%ebp),%esi +801016d2: 83 ec 0c sub $0xc,%esp +801016d5: ff 75 e4 push -0x1c(%ebp) +801016d8: e8 e4 ea ff ff call 801001c1 bfree(ip->dev, ip->addrs[NDIRECT]); -80101762: 8b 93 8c 00 00 00 mov 0x8c(%ebx),%edx -80101768: 8b 03 mov (%ebx),%eax -8010176a: e8 aa f8 ff ff call 80101019 +801016dd: 8b 93 8c 00 00 00 mov 0x8c(%ebx),%edx +801016e3: 8b 03 mov (%ebx),%eax +801016e5: e8 dc f8 ff ff call 80100fc6 ip->addrs[NDIRECT] = 0; -8010176f: c7 83 8c 00 00 00 00 movl $0x0,0x8c(%ebx) -80101776: 00 00 00 -80101779: 83 c4 10 add $0x10,%esp -8010177c: e9 70 ff ff ff jmp 801016f1 - -80101781 : -{ -80101781: f3 0f 1e fb endbr32 -80101785: 55 push %ebp -80101786: 89 e5 mov %esp,%ebp -80101788: 53 push %ebx -80101789: 83 ec 10 sub $0x10,%esp -8010178c: 8b 5d 08 mov 0x8(%ebp),%ebx +801016ea: c7 83 8c 00 00 00 00 movl $0x0,0x8c(%ebx) +801016f1: 00 00 00 +801016f4: 83 c4 10 add $0x10,%esp +801016f7: e9 70 ff ff ff jmp 8010166c + +801016fc : +{ +801016fc: 55 push %ebp +801016fd: 89 e5 mov %esp,%ebp +801016ff: 53 push %ebx +80101700: 83 ec 10 sub $0x10,%esp +80101703: 8b 5d 08 mov 0x8(%ebp),%ebx iunlock(ip); -8010178f: 53 push %ebx -80101790: e8 5d fe ff ff call 801015f2 +80101706: 53 push %ebx +80101707: e8 69 fe ff ff call 80101575 iput(ip); -80101795: 89 1c 24 mov %ebx,(%esp) -80101798: e8 9e fe ff ff call 8010163b +8010170c: 89 1c 24 mov %ebx,(%esp) +8010170f: e8 a6 fe ff ff call 801015ba } -8010179d: 83 c4 10 add $0x10,%esp -801017a0: 8b 5d fc mov -0x4(%ebp),%ebx -801017a3: c9 leave -801017a4: c3 ret +80101714: 83 c4 10 add $0x10,%esp +80101717: 8b 5d fc mov -0x4(%ebp),%ebx +8010171a: c9 leave +8010171b: c3 ret -801017a5 : +8010171c : // Copy stat information from inode. // Caller must hold ip->lock. void stati(struct inode *ip, struct stat *st) { -801017a5: f3 0f 1e fb endbr32 -801017a9: 55 push %ebp -801017aa: 89 e5 mov %esp,%ebp -801017ac: 8b 55 08 mov 0x8(%ebp),%edx -801017af: 8b 45 0c mov 0xc(%ebp),%eax +8010171c: 55 push %ebp +8010171d: 89 e5 mov %esp,%ebp +8010171f: 8b 55 08 mov 0x8(%ebp),%edx +80101722: 8b 45 0c mov 0xc(%ebp),%eax st->dev = ip->dev; -801017b2: 8b 0a mov (%edx),%ecx -801017b4: 89 48 04 mov %ecx,0x4(%eax) +80101725: 8b 0a mov (%edx),%ecx +80101727: 89 48 04 mov %ecx,0x4(%eax) st->ino = ip->inum; -801017b7: 8b 4a 04 mov 0x4(%edx),%ecx -801017ba: 89 48 08 mov %ecx,0x8(%eax) +8010172a: 8b 4a 04 mov 0x4(%edx),%ecx +8010172d: 89 48 08 mov %ecx,0x8(%eax) st->type = ip->type; -801017bd: 0f b7 4a 50 movzwl 0x50(%edx),%ecx -801017c1: 66 89 08 mov %cx,(%eax) +80101730: 0f b7 4a 50 movzwl 0x50(%edx),%ecx +80101734: 66 89 08 mov %cx,(%eax) st->nlink = ip->nlink; -801017c4: 0f b7 4a 56 movzwl 0x56(%edx),%ecx -801017c8: 66 89 48 0c mov %cx,0xc(%eax) +80101737: 0f b7 4a 56 movzwl 0x56(%edx),%ecx +8010173b: 66 89 48 0c mov %cx,0xc(%eax) st->size = ip->size; -801017cc: 8b 52 58 mov 0x58(%edx),%edx -801017cf: 89 50 10 mov %edx,0x10(%eax) +8010173f: 8b 52 58 mov 0x58(%edx),%edx +80101742: 89 50 10 mov %edx,0x10(%eax) } -801017d2: 5d pop %ebp -801017d3: c3 ret +80101745: 5d pop %ebp +80101746: c3 ret -801017d4 : +80101747 : //PAGEBREAK! // Read data from inode. // Caller must hold ip->lock. int readi(struct inode *ip, char *dst, uint off, uint n) { -801017d4: f3 0f 1e fb endbr32 -801017d8: 55 push %ebp -801017d9: 89 e5 mov %esp,%ebp -801017db: 57 push %edi -801017dc: 56 push %esi -801017dd: 53 push %ebx -801017de: 83 ec 1c sub $0x1c,%esp -801017e1: 8b 75 10 mov 0x10(%ebp),%esi +80101747: 55 push %ebp +80101748: 89 e5 mov %esp,%ebp +8010174a: 57 push %edi +8010174b: 56 push %esi +8010174c: 53 push %ebx +8010174d: 83 ec 1c sub $0x1c,%esp +80101750: 8b 7d 10 mov 0x10(%ebp),%edi uint tot, m; struct buf *bp; if(ip->type == T_DEV){ -801017e4: 8b 45 08 mov 0x8(%ebp),%eax -801017e7: 66 83 78 50 03 cmpw $0x3,0x50(%eax) -801017ec: 0f 84 9d 00 00 00 je 8010188f +80101753: 8b 45 08 mov 0x8(%ebp),%eax +80101756: 66 83 78 50 03 cmpw $0x3,0x50(%eax) +8010175b: 0f 84 9d 00 00 00 je 801017fe if(ip->major < 0 || ip->major >= NDEV || !devsw[ip->major].read) return -1; return devsw[ip->major].read(ip, dst, n); } if(off > ip->size || off + n < off) -801017f2: 8b 45 08 mov 0x8(%ebp),%eax -801017f5: 8b 40 58 mov 0x58(%eax),%eax -801017f8: 39 f0 cmp %esi,%eax -801017fa: 0f 82 c6 00 00 00 jb 801018c6 -80101800: 89 f2 mov %esi,%edx -80101802: 03 55 14 add 0x14(%ebp),%edx -80101805: 0f 82 c2 00 00 00 jb 801018cd +80101761: 8b 45 08 mov 0x8(%ebp),%eax +80101764: 8b 40 58 mov 0x58(%eax),%eax +80101767: 39 f8 cmp %edi,%eax +80101769: 0f 82 c6 00 00 00 jb 80101835 +8010176f: 89 fa mov %edi,%edx +80101771: 03 55 14 add 0x14(%ebp),%edx +80101774: 0f 82 c2 00 00 00 jb 8010183c return -1; if(off + n > ip->size) n = ip->size - off; -8010180b: 89 c1 mov %eax,%ecx -8010180d: 29 f1 sub %esi,%ecx -8010180f: 39 d0 cmp %edx,%eax -80101811: 0f 43 4d 14 cmovae 0x14(%ebp),%ecx -80101815: 89 4d 14 mov %ecx,0x14(%ebp) +8010177a: 89 c1 mov %eax,%ecx +8010177c: 29 f9 sub %edi,%ecx +8010177e: 39 d0 cmp %edx,%eax +80101780: 0f 43 4d 14 cmovae 0x14(%ebp),%ecx +80101784: 89 4d 14 mov %ecx,0x14(%ebp) for(tot=0; tot -8010181c: bf 00 00 00 00 mov $0x0,%edi +80101787: 85 c9 test %ecx,%ecx +80101789: 74 68 je 801017f3 +8010178b: be 00 00 00 00 mov $0x0,%esi bp = bread(ip->dev, bmap(ip, off/BSIZE)); -80101821: 89 f2 mov %esi,%edx -80101823: c1 ea 09 shr $0x9,%edx -80101826: 8b 45 08 mov 0x8(%ebp),%eax -80101829: e8 85 f9 ff ff call 801011b3 -8010182e: 83 ec 08 sub $0x8,%esp -80101831: 50 push %eax -80101832: 8b 45 08 mov 0x8(%ebp),%eax -80101835: ff 30 pushl (%eax) -80101837: e8 72 e8 ff ff call 801000ae -8010183c: 89 c1 mov %eax,%ecx +80101790: 89 fa mov %edi,%edx +80101792: c1 ea 09 shr $0x9,%edx +80101795: 8b 45 08 mov 0x8(%ebp),%eax +80101798: e8 b4 f9 ff ff call 80101151 +8010179d: 83 ec 08 sub $0x8,%esp +801017a0: 50 push %eax +801017a1: 8b 45 08 mov 0x8(%ebp),%eax +801017a4: ff 30 push (%eax) +801017a6: e8 ff e8 ff ff call 801000aa +801017ab: 89 c1 mov %eax,%ecx m = min(n - tot, BSIZE - off%BSIZE); -8010183e: 89 f0 mov %esi,%eax -80101840: 25 ff 01 00 00 and $0x1ff,%eax -80101845: bb 00 02 00 00 mov $0x200,%ebx -8010184a: 29 c3 sub %eax,%ebx -8010184c: 8b 55 14 mov 0x14(%ebp),%edx -8010184f: 29 fa sub %edi,%edx -80101851: 83 c4 0c add $0xc,%esp -80101854: 39 d3 cmp %edx,%ebx -80101856: 0f 47 da cmova %edx,%ebx +801017ad: 89 f8 mov %edi,%eax +801017af: 25 ff 01 00 00 and $0x1ff,%eax +801017b4: bb 00 02 00 00 mov $0x200,%ebx +801017b9: 29 c3 sub %eax,%ebx +801017bb: 8b 55 14 mov 0x14(%ebp),%edx +801017be: 29 f2 sub %esi,%edx +801017c0: 39 d3 cmp %edx,%ebx +801017c2: 0f 47 da cmova %edx,%ebx memmove(dst, bp->data + off%BSIZE, m); -80101859: 53 push %ebx -8010185a: 89 4d e4 mov %ecx,-0x1c(%ebp) -8010185d: 8d 44 01 5c lea 0x5c(%ecx,%eax,1),%eax -80101861: 50 push %eax -80101862: ff 75 0c pushl 0xc(%ebp) -80101865: e8 72 27 00 00 call 80103fdc +801017c5: 83 c4 0c add $0xc,%esp +801017c8: 53 push %ebx +801017c9: 89 4d e4 mov %ecx,-0x1c(%ebp) +801017cc: 8d 44 01 5c lea 0x5c(%ecx,%eax,1),%eax +801017d0: 50 push %eax +801017d1: ff 75 0c push 0xc(%ebp) +801017d4: e8 5b 26 00 00 call 80103e34 brelse(bp); -8010186a: 83 c4 04 add $0x4,%esp -8010186d: ff 75 e4 pushl -0x1c(%ebp) -80101870: e8 58 e9 ff ff call 801001cd +801017d9: 83 c4 04 add $0x4,%esp +801017dc: ff 75 e4 push -0x1c(%ebp) +801017df: e8 dd e9 ff ff call 801001c1 for(tot=0; tot +801017e4: 01 de add %ebx,%esi +801017e6: 01 df add %ebx,%edi +801017e8: 01 5d 0c add %ebx,0xc(%ebp) +801017eb: 83 c4 10 add $0x10,%esp +801017ee: 39 75 14 cmp %esi,0x14(%ebp) +801017f1: 77 9d ja 80101790 } return n; -80101884: 8b 45 14 mov 0x14(%ebp),%eax -} -80101887: 8d 65 f4 lea -0xc(%ebp),%esp -8010188a: 5b pop %ebx -8010188b: 5e pop %esi -8010188c: 5f pop %edi -8010188d: 5d pop %ebp -8010188e: c3 ret +801017f3: 8b 45 14 mov 0x14(%ebp),%eax +} +801017f6: 8d 65 f4 lea -0xc(%ebp),%esp +801017f9: 5b pop %ebx +801017fa: 5e pop %esi +801017fb: 5f pop %edi +801017fc: 5d pop %ebp +801017fd: c3 ret if(ip->major < 0 || ip->major >= NDEV || !devsw[ip->major].read) -8010188f: 0f b7 40 52 movzwl 0x52(%eax),%eax -80101893: 66 83 f8 09 cmp $0x9,%ax -80101897: 77 1f ja 801018b8 -80101899: 98 cwtl -8010189a: 8b 04 c5 80 35 11 80 mov -0x7feeca80(,%eax,8),%eax -801018a1: 85 c0 test %eax,%eax -801018a3: 74 1a je 801018bf +801017fe: 0f b7 40 52 movzwl 0x52(%eax),%eax +80101802: 66 83 f8 09 cmp $0x9,%ax +80101806: 77 1f ja 80101827 +80101808: 98 cwtl +80101809: 8b 04 c5 00 09 11 80 mov -0x7feef700(,%eax,8),%eax +80101810: 85 c0 test %eax,%eax +80101812: 74 1a je 8010182e return devsw[ip->major].read(ip, dst, n); -801018a5: 83 ec 04 sub $0x4,%esp -801018a8: ff 75 14 pushl 0x14(%ebp) -801018ab: ff 75 0c pushl 0xc(%ebp) -801018ae: ff 75 08 pushl 0x8(%ebp) -801018b1: ff d0 call *%eax -801018b3: 83 c4 10 add $0x10,%esp -801018b6: eb cf jmp 80101887 +80101814: 83 ec 04 sub $0x4,%esp +80101817: ff 75 14 push 0x14(%ebp) +8010181a: ff 75 0c push 0xc(%ebp) +8010181d: ff 75 08 push 0x8(%ebp) +80101820: ff d0 call *%eax +80101822: 83 c4 10 add $0x10,%esp +80101825: eb cf jmp 801017f6 return -1; -801018b8: b8 ff ff ff ff mov $0xffffffff,%eax -801018bd: eb c8 jmp 80101887 -801018bf: b8 ff ff ff ff mov $0xffffffff,%eax -801018c4: eb c1 jmp 80101887 +80101827: b8 ff ff ff ff mov $0xffffffff,%eax +8010182c: eb c8 jmp 801017f6 +8010182e: b8 ff ff ff ff mov $0xffffffff,%eax +80101833: eb c1 jmp 801017f6 return -1; -801018c6: b8 ff ff ff ff mov $0xffffffff,%eax -801018cb: eb ba jmp 80101887 -801018cd: b8 ff ff ff ff mov $0xffffffff,%eax -801018d2: eb b3 jmp 80101887 +80101835: b8 ff ff ff ff mov $0xffffffff,%eax +8010183a: eb ba jmp 801017f6 +8010183c: b8 ff ff ff ff mov $0xffffffff,%eax +80101841: eb b3 jmp 801017f6 -801018d4 : +80101843 : // PAGEBREAK! // Write data to inode. // Caller must hold ip->lock. int writei(struct inode *ip, char *src, uint off, uint n) { -801018d4: f3 0f 1e fb endbr32 -801018d8: 55 push %ebp -801018d9: 89 e5 mov %esp,%ebp -801018db: 57 push %edi -801018dc: 56 push %esi -801018dd: 53 push %ebx -801018de: 83 ec 1c sub $0x1c,%esp -801018e1: 8b 7d 10 mov 0x10(%ebp),%edi +80101843: 55 push %ebp +80101844: 89 e5 mov %esp,%ebp +80101846: 57 push %edi +80101847: 56 push %esi +80101848: 53 push %ebx +80101849: 83 ec 1c sub $0x1c,%esp +8010184c: 8b 7d 10 mov 0x10(%ebp),%edi uint tot, m; struct buf *bp; if(ip->type == T_DEV){ -801018e4: 8b 45 08 mov 0x8(%ebp),%eax -801018e7: 66 83 78 50 03 cmpw $0x3,0x50(%eax) -801018ec: 0f 84 b0 00 00 00 je 801019a2 +8010184f: 8b 45 08 mov 0x8(%ebp),%eax +80101852: 66 83 78 50 03 cmpw $0x3,0x50(%eax) +80101857: 0f 84 ae 00 00 00 je 8010190b if(ip->major < 0 || ip->major >= NDEV || !devsw[ip->major].write) return -1; return devsw[ip->major].write(ip, src, n); } if(off > ip->size || off + n < off) -801018f2: 8b 45 08 mov 0x8(%ebp),%eax -801018f5: 39 78 58 cmp %edi,0x58(%eax) -801018f8: 0f 82 ef 00 00 00 jb 801019ed -801018fe: 89 f8 mov %edi,%eax -80101900: 03 45 14 add 0x14(%ebp),%eax +8010185d: 8b 45 08 mov 0x8(%ebp),%eax +80101860: 39 78 58 cmp %edi,0x58(%eax) +80101863: 0f 82 ed 00 00 00 jb 80101956 +80101869: 89 f8 mov %edi,%eax +8010186b: 03 45 14 add 0x14(%ebp),%eax return -1; if(off + n > MAXFILE*BSIZE) -80101903: 3d 00 18 01 00 cmp $0x11800,%eax -80101908: 0f 87 e6 00 00 00 ja 801019f4 -8010190e: 39 f8 cmp %edi,%eax -80101910: 0f 82 de 00 00 00 jb 801019f4 +8010186e: 3d 00 18 01 00 cmp $0x11800,%eax +80101873: 0f 87 e4 00 00 00 ja 8010195d +80101879: 39 f8 cmp %edi,%eax +8010187b: 0f 82 dc 00 00 00 jb 8010195d return -1; for(tot=0; tot -8010191c: be 00 00 00 00 mov $0x0,%esi +80101881: 83 7d 14 00 cmpl $0x0,0x14(%ebp) +80101885: 74 79 je 80101900 +80101887: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) bp = bread(ip->dev, bmap(ip, off/BSIZE)); -80101921: 89 fa mov %edi,%edx -80101923: c1 ea 09 shr $0x9,%edx -80101926: 8b 45 08 mov 0x8(%ebp),%eax -80101929: e8 85 f8 ff ff call 801011b3 -8010192e: 83 ec 08 sub $0x8,%esp -80101931: 50 push %eax -80101932: 8b 45 08 mov 0x8(%ebp),%eax -80101935: ff 30 pushl (%eax) -80101937: e8 72 e7 ff ff call 801000ae -8010193c: 89 c1 mov %eax,%ecx +8010188e: 89 fa mov %edi,%edx +80101890: c1 ea 09 shr $0x9,%edx +80101893: 8b 45 08 mov 0x8(%ebp),%eax +80101896: e8 b6 f8 ff ff call 80101151 +8010189b: 83 ec 08 sub $0x8,%esp +8010189e: 50 push %eax +8010189f: 8b 45 08 mov 0x8(%ebp),%eax +801018a2: ff 30 push (%eax) +801018a4: e8 01 e8 ff ff call 801000aa +801018a9: 89 c6 mov %eax,%esi m = min(n - tot, BSIZE - off%BSIZE); -8010193e: 89 f8 mov %edi,%eax -80101940: 25 ff 01 00 00 and $0x1ff,%eax -80101945: bb 00 02 00 00 mov $0x200,%ebx -8010194a: 29 c3 sub %eax,%ebx -8010194c: 8b 55 14 mov 0x14(%ebp),%edx -8010194f: 29 f2 sub %esi,%edx -80101951: 83 c4 0c add $0xc,%esp -80101954: 39 d3 cmp %edx,%ebx -80101956: 0f 47 da cmova %edx,%ebx +801018ab: 89 f8 mov %edi,%eax +801018ad: 25 ff 01 00 00 and $0x1ff,%eax +801018b2: bb 00 02 00 00 mov $0x200,%ebx +801018b7: 29 c3 sub %eax,%ebx +801018b9: 8b 55 14 mov 0x14(%ebp),%edx +801018bc: 2b 55 e4 sub -0x1c(%ebp),%edx +801018bf: 39 d3 cmp %edx,%ebx +801018c1: 0f 47 da cmova %edx,%ebx memmove(bp->data + off%BSIZE, src, m); -80101959: 53 push %ebx -8010195a: ff 75 0c pushl 0xc(%ebp) -8010195d: 89 4d e4 mov %ecx,-0x1c(%ebp) -80101960: 8d 44 01 5c lea 0x5c(%ecx,%eax,1),%eax -80101964: 50 push %eax -80101965: e8 72 26 00 00 call 80103fdc +801018c4: 83 c4 0c add $0xc,%esp +801018c7: 53 push %ebx +801018c8: ff 75 0c push 0xc(%ebp) +801018cb: 8d 44 06 5c lea 0x5c(%esi,%eax,1),%eax +801018cf: 50 push %eax +801018d0: e8 5f 25 00 00 call 80103e34 log_write(bp); -8010196a: 83 c4 04 add $0x4,%esp -8010196d: ff 75 e4 pushl -0x1c(%ebp) -80101970: e8 d0 10 00 00 call 80102a45 +801018d5: 89 34 24 mov %esi,(%esp) +801018d8: e8 5e 10 00 00 call 8010293b brelse(bp); -80101975: 83 c4 04 add $0x4,%esp -80101978: ff 75 e4 pushl -0x1c(%ebp) -8010197b: e8 4d e8 ff ff call 801001cd +801018dd: 89 34 24 mov %esi,(%esp) +801018e0: e8 dc e8 ff ff call 801001c1 for(tot=0; tot +801018e5: 01 5d e4 add %ebx,-0x1c(%ebp) +801018e8: 8b 45 e4 mov -0x1c(%ebp),%eax +801018eb: 01 df add %ebx,%edi +801018ed: 01 5d 0c add %ebx,0xc(%ebp) +801018f0: 83 c4 10 add $0x10,%esp +801018f3: 39 45 14 cmp %eax,0x14(%ebp) +801018f6: 77 96 ja 8010188e } if(n > 0 && off > ip->size){ -8010198f: 8b 45 08 mov 0x8(%ebp),%eax -80101992: 39 78 58 cmp %edi,0x58(%eax) -80101995: 72 34 jb 801019cb +801018f8: 8b 45 08 mov 0x8(%ebp),%eax +801018fb: 39 78 58 cmp %edi,0x58(%eax) +801018fe: 72 34 jb 80101934 ip->size = off; iupdate(ip); } return n; -80101997: 8b 45 14 mov 0x14(%ebp),%eax -} -8010199a: 8d 65 f4 lea -0xc(%ebp),%esp -8010199d: 5b pop %ebx -8010199e: 5e pop %esi -8010199f: 5f pop %edi -801019a0: 5d pop %ebp -801019a1: c3 ret +80101900: 8b 45 14 mov 0x14(%ebp),%eax +} +80101903: 8d 65 f4 lea -0xc(%ebp),%esp +80101906: 5b pop %ebx +80101907: 5e pop %esi +80101908: 5f pop %edi +80101909: 5d pop %ebp +8010190a: c3 ret if(ip->major < 0 || ip->major >= NDEV || !devsw[ip->major].write) -801019a2: 0f b7 40 52 movzwl 0x52(%eax),%eax -801019a6: 66 83 f8 09 cmp $0x9,%ax -801019aa: 77 33 ja 801019df -801019ac: 98 cwtl -801019ad: 8b 04 c5 84 35 11 80 mov -0x7feeca7c(,%eax,8),%eax -801019b4: 85 c0 test %eax,%eax -801019b6: 74 2e je 801019e6 +8010190b: 0f b7 40 52 movzwl 0x52(%eax),%eax +8010190f: 66 83 f8 09 cmp $0x9,%ax +80101913: 77 33 ja 80101948 +80101915: 98 cwtl +80101916: 8b 04 c5 04 09 11 80 mov -0x7feef6fc(,%eax,8),%eax +8010191d: 85 c0 test %eax,%eax +8010191f: 74 2e je 8010194f return devsw[ip->major].write(ip, src, n); -801019b8: 83 ec 04 sub $0x4,%esp -801019bb: ff 75 14 pushl 0x14(%ebp) -801019be: ff 75 0c pushl 0xc(%ebp) -801019c1: ff 75 08 pushl 0x8(%ebp) -801019c4: ff d0 call *%eax -801019c6: 83 c4 10 add $0x10,%esp -801019c9: eb cf jmp 8010199a +80101921: 83 ec 04 sub $0x4,%esp +80101924: ff 75 14 push 0x14(%ebp) +80101927: ff 75 0c push 0xc(%ebp) +8010192a: ff 75 08 push 0x8(%ebp) +8010192d: ff d0 call *%eax +8010192f: 83 c4 10 add $0x10,%esp +80101932: eb cf jmp 80101903 ip->size = off; -801019cb: 8b 45 08 mov 0x8(%ebp),%eax -801019ce: 89 78 58 mov %edi,0x58(%eax) +80101934: 8b 45 08 mov 0x8(%ebp),%eax +80101937: 89 78 58 mov %edi,0x58(%eax) iupdate(ip); -801019d1: 83 ec 0c sub $0xc,%esp -801019d4: 50 push %eax -801019d5: e8 a0 fa ff ff call 8010147a -801019da: 83 c4 10 add $0x10,%esp -801019dd: eb b8 jmp 80101997 +8010193a: 83 ec 0c sub $0xc,%esp +8010193d: 50 push %eax +8010193e: e8 c6 fa ff ff call 80101409 +80101943: 83 c4 10 add $0x10,%esp +80101946: eb b8 jmp 80101900 return -1; -801019df: b8 ff ff ff ff mov $0xffffffff,%eax -801019e4: eb b4 jmp 8010199a -801019e6: b8 ff ff ff ff mov $0xffffffff,%eax -801019eb: eb ad jmp 8010199a +80101948: b8 ff ff ff ff mov $0xffffffff,%eax +8010194d: eb b4 jmp 80101903 +8010194f: b8 ff ff ff ff mov $0xffffffff,%eax +80101954: eb ad jmp 80101903 return -1; -801019ed: b8 ff ff ff ff mov $0xffffffff,%eax -801019f2: eb a6 jmp 8010199a +80101956: b8 ff ff ff ff mov $0xffffffff,%eax +8010195b: eb a6 jmp 80101903 return -1; -801019f4: b8 ff ff ff ff mov $0xffffffff,%eax -801019f9: eb 9f jmp 8010199a +8010195d: b8 ff ff ff ff mov $0xffffffff,%eax +80101962: eb 9f jmp 80101903 -801019fb : +80101964 : //PAGEBREAK! // Directories int namecmp(const char *s, const char *t) { -801019fb: f3 0f 1e fb endbr32 -801019ff: 55 push %ebp -80101a00: 89 e5 mov %esp,%ebp -80101a02: 83 ec 0c sub $0xc,%esp +80101964: 55 push %ebp +80101965: 89 e5 mov %esp,%ebp +80101967: 83 ec 0c sub $0xc,%esp return strncmp(s, t, DIRSIZ); -80101a05: 6a 0e push $0xe -80101a07: ff 75 0c pushl 0xc(%ebp) -80101a0a: ff 75 08 pushl 0x8(%ebp) -80101a0d: e8 39 26 00 00 call 8010404b +8010196a: 6a 0e push $0xe +8010196c: ff 75 0c push 0xc(%ebp) +8010196f: ff 75 08 push 0x8(%ebp) +80101972: e8 24 25 00 00 call 80103e9b } -80101a12: c9 leave -80101a13: c3 ret +80101977: c9 leave +80101978: c3 ret -80101a14 : +80101979 : // 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) { -80101a14: f3 0f 1e fb endbr32 -80101a18: 55 push %ebp -80101a19: 89 e5 mov %esp,%ebp -80101a1b: 57 push %edi -80101a1c: 56 push %esi -80101a1d: 53 push %ebx -80101a1e: 83 ec 1c sub $0x1c,%esp -80101a21: 8b 75 08 mov 0x8(%ebp),%esi +80101979: 55 push %ebp +8010197a: 89 e5 mov %esp,%ebp +8010197c: 57 push %edi +8010197d: 56 push %esi +8010197e: 53 push %ebx +8010197f: 83 ec 1c sub $0x1c,%esp +80101982: 8b 75 08 mov 0x8(%ebp),%esi uint off, inum; struct dirent de; if(dp->type != T_DIR) -80101a24: 66 83 7e 50 01 cmpw $0x1,0x50(%esi) -80101a29: 75 15 jne 80101a40 +80101985: 66 83 7e 50 01 cmpw $0x1,0x50(%esi) +8010198a: 75 15 jne 801019a1 panic("dirlookup not DIR"); for(off = 0; off < dp->size; off += sizeof(de)){ -80101a2b: bb 00 00 00 00 mov $0x0,%ebx +8010198c: bb 00 00 00 00 mov $0x0,%ebx if(readi(dp, (char*)&de, off, sizeof(de)) != sizeof(de)) -80101a30: 8d 7d d8 lea -0x28(%ebp),%edi +80101991: 8d 7d d8 lea -0x28(%ebp),%edi inum = de.inum; return iget(dp->dev, inum); } } return 0; -80101a33: b8 00 00 00 00 mov $0x0,%eax +80101994: b8 00 00 00 00 mov $0x0,%eax for(off = 0; off < dp->size; off += sizeof(de)){ -80101a38: 83 7e 58 00 cmpl $0x0,0x58(%esi) -80101a3c: 75 24 jne 80101a62 -80101a3e: eb 6e jmp 80101aae +80101999: 83 7e 58 00 cmpl $0x0,0x58(%esi) +8010199d: 75 24 jne 801019c3 +8010199f: eb 6e jmp 80101a0f panic("dirlookup not DIR"); -80101a40: 83 ec 0c sub $0xc,%esp -80101a43: 68 c3 79 10 80 push $0x801079c3 -80101a48: e8 0b e9 ff ff call 80100358 +801019a1: 83 ec 0c sub $0xc,%esp +801019a4: 68 e3 76 10 80 push $0x801076e3 +801019a9: e8 92 e9 ff ff call 80100340 panic("dirlookup read"); -80101a4d: 83 ec 0c sub $0xc,%esp -80101a50: 68 d5 79 10 80 push $0x801079d5 -80101a55: e8 fe e8 ff ff call 80100358 +801019ae: 83 ec 0c sub $0xc,%esp +801019b1: 68 f5 76 10 80 push $0x801076f5 +801019b6: e8 85 e9 ff ff call 80100340 for(off = 0; off < dp->size; off += sizeof(de)){ -80101a5a: 83 c3 10 add $0x10,%ebx -80101a5d: 39 5e 58 cmp %ebx,0x58(%esi) -80101a60: 76 47 jbe 80101aa9 +801019bb: 83 c3 10 add $0x10,%ebx +801019be: 39 5e 58 cmp %ebx,0x58(%esi) +801019c1: 76 47 jbe 80101a0a if(readi(dp, (char*)&de, off, sizeof(de)) != sizeof(de)) -80101a62: 6a 10 push $0x10 -80101a64: 53 push %ebx -80101a65: 57 push %edi -80101a66: 56 push %esi -80101a67: e8 68 fd ff ff call 801017d4 -80101a6c: 83 c4 10 add $0x10,%esp -80101a6f: 83 f8 10 cmp $0x10,%eax -80101a72: 75 d9 jne 80101a4d +801019c3: 6a 10 push $0x10 +801019c5: 53 push %ebx +801019c6: 57 push %edi +801019c7: 56 push %esi +801019c8: e8 7a fd ff ff call 80101747 +801019cd: 83 c4 10 add $0x10,%esp +801019d0: 83 f8 10 cmp $0x10,%eax +801019d3: 75 d9 jne 801019ae if(de.inum == 0) -80101a74: 66 83 7d d8 00 cmpw $0x0,-0x28(%ebp) -80101a79: 74 df je 80101a5a +801019d5: 66 83 7d d8 00 cmpw $0x0,-0x28(%ebp) +801019da: 74 df je 801019bb if(namecmp(name, de.name) == 0){ -80101a7b: 83 ec 08 sub $0x8,%esp -80101a7e: 8d 45 da lea -0x26(%ebp),%eax -80101a81: 50 push %eax -80101a82: ff 75 0c pushl 0xc(%ebp) -80101a85: e8 71 ff ff ff call 801019fb -80101a8a: 83 c4 10 add $0x10,%esp -80101a8d: 85 c0 test %eax,%eax -80101a8f: 75 c9 jne 80101a5a +801019dc: 83 ec 08 sub $0x8,%esp +801019df: 8d 45 da lea -0x26(%ebp),%eax +801019e2: 50 push %eax +801019e3: ff 75 0c push 0xc(%ebp) +801019e6: e8 79 ff ff ff call 80101964 +801019eb: 83 c4 10 add $0x10,%esp +801019ee: 85 c0 test %eax,%eax +801019f0: 75 c9 jne 801019bb if(poff) -80101a91: 83 7d 10 00 cmpl $0x0,0x10(%ebp) -80101a95: 74 05 je 80101a9c +801019f2: 83 7d 10 00 cmpl $0x0,0x10(%ebp) +801019f6: 74 05 je 801019fd *poff = off; -80101a97: 8b 45 10 mov 0x10(%ebp),%eax -80101a9a: 89 18 mov %ebx,(%eax) +801019f8: 8b 45 10 mov 0x10(%ebp),%eax +801019fb: 89 18 mov %ebx,(%eax) inum = de.inum; -80101a9c: 0f b7 55 d8 movzwl -0x28(%ebp),%edx +801019fd: 0f b7 55 d8 movzwl -0x28(%ebp),%edx return iget(dp->dev, inum); -80101aa0: 8b 06 mov (%esi),%eax -80101aa2: e8 b5 f7 ff ff call 8010125c -80101aa7: eb 05 jmp 80101aae +80101a01: 8b 06 mov (%esi),%eax +80101a03: e8 ef f7 ff ff call 801011f7 +80101a08: eb 05 jmp 80101a0f return 0; -80101aa9: b8 00 00 00 00 mov $0x0,%eax +80101a0a: b8 00 00 00 00 mov $0x0,%eax } -80101aae: 8d 65 f4 lea -0xc(%ebp),%esp -80101ab1: 5b pop %ebx -80101ab2: 5e pop %esi -80101ab3: 5f pop %edi -80101ab4: 5d pop %ebp -80101ab5: c3 ret +80101a0f: 8d 65 f4 lea -0xc(%ebp),%esp +80101a12: 5b pop %ebx +80101a13: 5e pop %esi +80101a14: 5f pop %edi +80101a15: 5d pop %ebp +80101a16: c3 ret -80101ab6 : +80101a17 : // 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) { -80101ab6: 55 push %ebp -80101ab7: 89 e5 mov %esp,%ebp -80101ab9: 57 push %edi -80101aba: 56 push %esi -80101abb: 53 push %ebx -80101abc: 83 ec 1c sub $0x1c,%esp -80101abf: 89 c3 mov %eax,%ebx -80101ac1: 89 55 dc mov %edx,-0x24(%ebp) -80101ac4: 89 4d e4 mov %ecx,-0x1c(%ebp) +80101a17: 55 push %ebp +80101a18: 89 e5 mov %esp,%ebp +80101a1a: 57 push %edi +80101a1b: 56 push %esi +80101a1c: 53 push %ebx +80101a1d: 83 ec 1c sub $0x1c,%esp +80101a20: 89 c3 mov %eax,%ebx +80101a22: 89 55 dc mov %edx,-0x24(%ebp) +80101a25: 89 4d e4 mov %ecx,-0x1c(%ebp) struct inode *ip, *next; if(*path == '/') -80101ac7: 80 38 2f cmpb $0x2f,(%eax) -80101aca: 74 1a je 80101ae6 +80101a28: 80 38 2f cmpb $0x2f,(%eax) +80101a2b: 74 1a je 80101a47 ip = iget(ROOTDEV, ROOTINO); else ip = idup(myproc()->cwd); -80101acc: e8 19 19 00 00 call 801033ea -80101ad1: 83 ec 0c sub $0xc,%esp -80101ad4: ff 70 68 pushl 0x68(%eax) -80101ad7: e8 21 fa ff ff call 801014fd -80101adc: 89 c7 mov %eax,%edi -80101ade: 83 c4 10 add $0x10,%esp -80101ae1: e9 c2 00 00 00 jmp 80101ba8 +80101a2d: e8 7e 18 00 00 call 801032b0 +80101a32: 83 ec 0c sub $0xc,%esp +80101a35: ff 70 68 push 0x68(%eax) +80101a38: e8 4b fa ff ff call 80101488 +80101a3d: 89 c7 mov %eax,%edi +80101a3f: 83 c4 10 add $0x10,%esp +80101a42: e9 c2 00 00 00 jmp 80101b09 ip = iget(ROOTDEV, ROOTINO); -80101ae6: ba 01 00 00 00 mov $0x1,%edx -80101aeb: b8 01 00 00 00 mov $0x1,%eax -80101af0: e8 67 f7 ff ff call 8010125c -80101af5: 89 c7 mov %eax,%edi -80101af7: e9 ac 00 00 00 jmp 80101ba8 +80101a47: ba 01 00 00 00 mov $0x1,%edx +80101a4c: b8 01 00 00 00 mov $0x1,%eax +80101a51: e8 a1 f7 ff ff call 801011f7 +80101a56: 89 c7 mov %eax,%edi +80101a58: e9 ac 00 00 00 jmp 80101b09 while((path = skipelem(path, name)) != 0){ ilock(ip); if(ip->type != T_DIR){ iunlockput(ip); -80101afc: 83 ec 0c sub $0xc,%esp -80101aff: 57 push %edi -80101b00: e8 7c fc ff ff call 80101781 +80101a5d: 83 ec 0c sub $0xc,%esp +80101a60: 57 push %edi +80101a61: e8 96 fc ff ff call 801016fc return 0; -80101b05: 83 c4 10 add $0x10,%esp -80101b08: bf 00 00 00 00 mov $0x0,%edi +80101a66: 83 c4 10 add $0x10,%esp +80101a69: bf 00 00 00 00 mov $0x0,%edi if(nameiparent){ iput(ip); return 0; } return ip; } -80101b0d: 89 f8 mov %edi,%eax -80101b0f: 8d 65 f4 lea -0xc(%ebp),%esp -80101b12: 5b pop %ebx -80101b13: 5e pop %esi -80101b14: 5f pop %edi -80101b15: 5d pop %ebp -80101b16: c3 ret +80101a6e: 89 f8 mov %edi,%eax +80101a70: 8d 65 f4 lea -0xc(%ebp),%esp +80101a73: 5b pop %ebx +80101a74: 5e pop %esi +80101a75: 5f pop %edi +80101a76: 5d pop %ebp +80101a77: c3 ret iunlock(ip); -80101b17: 83 ec 0c sub $0xc,%esp -80101b1a: 57 push %edi -80101b1b: e8 d2 fa ff ff call 801015f2 +80101a78: 83 ec 0c sub $0xc,%esp +80101a7b: 57 push %edi +80101a7c: e8 f4 fa ff ff call 80101575 return ip; -80101b20: 83 c4 10 add $0x10,%esp -80101b23: eb e8 jmp 80101b0d +80101a81: 83 c4 10 add $0x10,%esp +80101a84: eb e8 jmp 80101a6e iunlockput(ip); -80101b25: 83 ec 0c sub $0xc,%esp -80101b28: 57 push %edi -80101b29: e8 53 fc ff ff call 80101781 +80101a86: 83 ec 0c sub $0xc,%esp +80101a89: 57 push %edi +80101a8a: e8 6d fc ff ff call 801016fc return 0; -80101b2e: 83 c4 10 add $0x10,%esp -80101b31: 89 f7 mov %esi,%edi -80101b33: eb d8 jmp 80101b0d +80101a8f: 83 c4 10 add $0x10,%esp +80101a92: 89 f7 mov %esi,%edi +80101a94: eb d8 jmp 80101a6e len = path - s; -80101b35: 89 f0 mov %esi,%eax -80101b37: 29 d8 sub %ebx,%eax -80101b39: 89 45 e0 mov %eax,-0x20(%ebp) +80101a96: 89 f0 mov %esi,%eax +80101a98: 29 d8 sub %ebx,%eax +80101a9a: 89 45 e0 mov %eax,-0x20(%ebp) if(len >= DIRSIZ) -80101b3c: 83 f8 0d cmp $0xd,%eax -80101b3f: 0f 8e a5 00 00 00 jle 80101bea +80101a9d: 83 f8 0d cmp $0xd,%eax +80101aa0: 0f 8e a5 00 00 00 jle 80101b4b memmove(name, s, DIRSIZ); -80101b45: 83 ec 04 sub $0x4,%esp -80101b48: 6a 0e push $0xe -80101b4a: 53 push %ebx -80101b4b: ff 75 e4 pushl -0x1c(%ebp) -80101b4e: e8 89 24 00 00 call 80103fdc -80101b53: 83 c4 10 add $0x10,%esp +80101aa6: 83 ec 04 sub $0x4,%esp +80101aa9: 6a 0e push $0xe +80101aab: 53 push %ebx +80101aac: ff 75 e4 push -0x1c(%ebp) +80101aaf: e8 80 23 00 00 call 80103e34 +80101ab4: 83 c4 10 add $0x10,%esp path++; -80101b56: 89 f3 mov %esi,%ebx +80101ab7: 89 f3 mov %esi,%ebx while(*path == '/') -80101b58: 80 3b 2f cmpb $0x2f,(%ebx) -80101b5b: 75 08 jne 80101b65 +80101ab9: 80 3b 2f cmpb $0x2f,(%ebx) +80101abc: 75 08 jne 80101ac6 path++; -80101b5d: 83 c3 01 add $0x1,%ebx +80101abe: 83 c3 01 add $0x1,%ebx while(*path == '/') -80101b60: 80 3b 2f cmpb $0x2f,(%ebx) -80101b63: 74 f8 je 80101b5d +80101ac1: 80 3b 2f cmpb $0x2f,(%ebx) +80101ac4: 74 f8 je 80101abe ilock(ip); -80101b65: 83 ec 0c sub $0xc,%esp -80101b68: 57 push %edi -80101b69: e8 be f9 ff ff call 8010152c +80101ac6: 83 ec 0c sub $0xc,%esp +80101ac9: 57 push %edi +80101aca: e8 e4 f9 ff ff call 801014b3 if(ip->type != T_DIR){ -80101b6e: 83 c4 10 add $0x10,%esp -80101b71: 66 83 7f 50 01 cmpw $0x1,0x50(%edi) -80101b76: 75 84 jne 80101afc +80101acf: 83 c4 10 add $0x10,%esp +80101ad2: 66 83 7f 50 01 cmpw $0x1,0x50(%edi) +80101ad7: 75 84 jne 80101a5d if(nameiparent && *path == '\0'){ -80101b78: 83 7d dc 00 cmpl $0x0,-0x24(%ebp) -80101b7c: 74 05 je 80101b83 -80101b7e: 80 3b 00 cmpb $0x0,(%ebx) -80101b81: 74 94 je 80101b17 +80101ad9: 83 7d dc 00 cmpl $0x0,-0x24(%ebp) +80101add: 74 05 je 80101ae4 +80101adf: 80 3b 00 cmpb $0x0,(%ebx) +80101ae2: 74 94 je 80101a78 if((next = dirlookup(ip, name, 0)) == 0){ -80101b83: 83 ec 04 sub $0x4,%esp -80101b86: 6a 00 push $0x0 -80101b88: ff 75 e4 pushl -0x1c(%ebp) -80101b8b: 57 push %edi -80101b8c: e8 83 fe ff ff call 80101a14 -80101b91: 89 c6 mov %eax,%esi -80101b93: 83 c4 10 add $0x10,%esp -80101b96: 85 c0 test %eax,%eax -80101b98: 74 8b je 80101b25 +80101ae4: 83 ec 04 sub $0x4,%esp +80101ae7: 6a 00 push $0x0 +80101ae9: ff 75 e4 push -0x1c(%ebp) +80101aec: 57 push %edi +80101aed: e8 87 fe ff ff call 80101979 +80101af2: 89 c6 mov %eax,%esi +80101af4: 83 c4 10 add $0x10,%esp +80101af7: 85 c0 test %eax,%eax +80101af9: 74 8b je 80101a86 iunlockput(ip); -80101b9a: 83 ec 0c sub $0xc,%esp -80101b9d: 57 push %edi -80101b9e: e8 de fb ff ff call 80101781 -80101ba3: 83 c4 10 add $0x10,%esp +80101afb: 83 ec 0c sub $0xc,%esp +80101afe: 57 push %edi +80101aff: e8 f8 fb ff ff call 801016fc +80101b04: 83 c4 10 add $0x10,%esp ip = next; -80101ba6: 89 f7 mov %esi,%edi +80101b07: 89 f7 mov %esi,%edi while(*path == '/') -80101ba8: 0f b6 03 movzbl (%ebx),%eax -80101bab: 3c 2f cmp $0x2f,%al -80101bad: 75 0a jne 80101bb9 +80101b09: 0f b6 03 movzbl (%ebx),%eax +80101b0c: 3c 2f cmp $0x2f,%al +80101b0e: 75 0a jne 80101b1a path++; -80101baf: 83 c3 01 add $0x1,%ebx +80101b10: 83 c3 01 add $0x1,%ebx while(*path == '/') -80101bb2: 0f b6 03 movzbl (%ebx),%eax -80101bb5: 3c 2f cmp $0x2f,%al -80101bb7: 74 f6 je 80101baf +80101b13: 0f b6 03 movzbl (%ebx),%eax +80101b16: 3c 2f cmp $0x2f,%al +80101b18: 74 f6 je 80101b10 if(*path == 0) -80101bb9: 84 c0 test %al,%al -80101bbb: 74 4e je 80101c0b +80101b1a: 84 c0 test %al,%al +80101b1c: 74 4e je 80101b6c while(*path != '/' && *path != 0) -80101bbd: 0f b6 03 movzbl (%ebx),%eax -80101bc0: 3c 2f cmp $0x2f,%al -80101bc2: 74 1d je 80101be1 -80101bc4: 84 c0 test %al,%al -80101bc6: 74 19 je 80101be1 -80101bc8: 89 de mov %ebx,%esi +80101b1e: 0f b6 03 movzbl (%ebx),%eax +80101b21: 3c 2f cmp $0x2f,%al +80101b23: 74 1d je 80101b42 +80101b25: 84 c0 test %al,%al +80101b27: 74 19 je 80101b42 +80101b29: 89 de mov %ebx,%esi path++; -80101bca: 83 c6 01 add $0x1,%esi +80101b2b: 83 c6 01 add $0x1,%esi while(*path != '/' && *path != 0) -80101bcd: 0f b6 06 movzbl (%esi),%eax -80101bd0: 3c 2f cmp $0x2f,%al -80101bd2: 0f 84 5d ff ff ff je 80101b35 -80101bd8: 84 c0 test %al,%al -80101bda: 75 ee jne 80101bca -80101bdc: e9 54 ff ff ff jmp 80101b35 -80101be1: 89 de mov %ebx,%esi +80101b2e: 0f b6 06 movzbl (%esi),%eax +80101b31: 3c 2f cmp $0x2f,%al +80101b33: 0f 84 5d ff ff ff je 80101a96 +80101b39: 84 c0 test %al,%al +80101b3b: 75 ee jne 80101b2b +80101b3d: e9 54 ff ff ff jmp 80101a96 +80101b42: 89 de mov %ebx,%esi len = path - s; -80101be3: c7 45 e0 00 00 00 00 movl $0x0,-0x20(%ebp) +80101b44: c7 45 e0 00 00 00 00 movl $0x0,-0x20(%ebp) memmove(name, s, len); -80101bea: 83 ec 04 sub $0x4,%esp -80101bed: ff 75 e0 pushl -0x20(%ebp) -80101bf0: 53 push %ebx -80101bf1: 8b 5d e4 mov -0x1c(%ebp),%ebx -80101bf4: 53 push %ebx -80101bf5: e8 e2 23 00 00 call 80103fdc +80101b4b: 83 ec 04 sub $0x4,%esp +80101b4e: ff 75 e0 push -0x20(%ebp) +80101b51: 53 push %ebx +80101b52: 8b 5d e4 mov -0x1c(%ebp),%ebx +80101b55: 53 push %ebx +80101b56: e8 d9 22 00 00 call 80103e34 name[len] = 0; -80101bfa: 8b 4d e0 mov -0x20(%ebp),%ecx -80101bfd: c6 04 0b 00 movb $0x0,(%ebx,%ecx,1) -80101c01: 83 c4 10 add $0x10,%esp -80101c04: 89 f3 mov %esi,%ebx -80101c06: e9 4d ff ff ff jmp 80101b58 +80101b5b: 8b 4d e0 mov -0x20(%ebp),%ecx +80101b5e: c6 04 0b 00 movb $0x0,(%ebx,%ecx,1) +80101b62: 83 c4 10 add $0x10,%esp +80101b65: 89 f3 mov %esi,%ebx +80101b67: e9 4d ff ff ff jmp 80101ab9 if(nameiparent){ -80101c0b: 83 7d dc 00 cmpl $0x0,-0x24(%ebp) -80101c0f: 0f 84 f8 fe ff ff je 80101b0d +80101b6c: 83 7d dc 00 cmpl $0x0,-0x24(%ebp) +80101b70: 0f 84 f8 fe ff ff je 80101a6e iput(ip); -80101c15: 83 ec 0c sub $0xc,%esp -80101c18: 57 push %edi -80101c19: e8 1d fa ff ff call 8010163b +80101b76: 83 ec 0c sub $0xc,%esp +80101b79: 57 push %edi +80101b7a: e8 3b fa ff ff call 801015ba return 0; -80101c1e: 83 c4 10 add $0x10,%esp -80101c21: bf 00 00 00 00 mov $0x0,%edi -80101c26: e9 e2 fe ff ff jmp 80101b0d - -80101c2b : -{ -80101c2b: f3 0f 1e fb endbr32 -80101c2f: 55 push %ebp -80101c30: 89 e5 mov %esp,%ebp -80101c32: 57 push %edi -80101c33: 56 push %esi -80101c34: 53 push %ebx -80101c35: 83 ec 20 sub $0x20,%esp -80101c38: 8b 75 08 mov 0x8(%ebp),%esi +80101b7f: 83 c4 10 add $0x10,%esp +80101b82: bf 00 00 00 00 mov $0x0,%edi +80101b87: e9 e2 fe ff ff jmp 80101a6e + +80101b8c : +{ +80101b8c: 55 push %ebp +80101b8d: 89 e5 mov %esp,%ebp +80101b8f: 57 push %edi +80101b90: 56 push %esi +80101b91: 53 push %ebx +80101b92: 83 ec 20 sub $0x20,%esp +80101b95: 8b 75 08 mov 0x8(%ebp),%esi if((ip = dirlookup(dp, name, 0)) != 0){ -80101c3b: 6a 00 push $0x0 -80101c3d: ff 75 0c pushl 0xc(%ebp) -80101c40: 56 push %esi -80101c41: e8 ce fd ff ff call 80101a14 -80101c46: 83 c4 10 add $0x10,%esp -80101c49: 85 c0 test %eax,%eax -80101c4b: 75 6a jne 80101cb7 +80101b98: 6a 00 push $0x0 +80101b9a: ff 75 0c push 0xc(%ebp) +80101b9d: 56 push %esi +80101b9e: e8 d6 fd ff ff call 80101979 +80101ba3: 83 c4 10 add $0x10,%esp +80101ba6: 85 c0 test %eax,%eax +80101ba8: 75 6a jne 80101c14 for(off = 0; off < dp->size; off += sizeof(de)){ -80101c4d: 8b 5e 58 mov 0x58(%esi),%ebx -80101c50: 85 db test %ebx,%ebx -80101c52: 74 29 je 80101c7d -80101c54: bb 00 00 00 00 mov $0x0,%ebx +80101baa: 8b 5e 58 mov 0x58(%esi),%ebx +80101bad: 85 db test %ebx,%ebx +80101baf: 74 29 je 80101bda +80101bb1: bb 00 00 00 00 mov $0x0,%ebx if(readi(dp, (char*)&de, off, sizeof(de)) != sizeof(de)) -80101c59: 8d 7d d8 lea -0x28(%ebp),%edi -80101c5c: 6a 10 push $0x10 -80101c5e: 53 push %ebx -80101c5f: 57 push %edi -80101c60: 56 push %esi -80101c61: e8 6e fb ff ff call 801017d4 -80101c66: 83 c4 10 add $0x10,%esp -80101c69: 83 f8 10 cmp $0x10,%eax -80101c6c: 75 5c jne 80101cca +80101bb6: 8d 7d d8 lea -0x28(%ebp),%edi +80101bb9: 6a 10 push $0x10 +80101bbb: 53 push %ebx +80101bbc: 57 push %edi +80101bbd: 56 push %esi +80101bbe: e8 84 fb ff ff call 80101747 +80101bc3: 83 c4 10 add $0x10,%esp +80101bc6: 83 f8 10 cmp $0x10,%eax +80101bc9: 75 5c jne 80101c27 if(de.inum == 0) -80101c6e: 66 83 7d d8 00 cmpw $0x0,-0x28(%ebp) -80101c73: 74 08 je 80101c7d +80101bcb: 66 83 7d d8 00 cmpw $0x0,-0x28(%ebp) +80101bd0: 74 08 je 80101bda for(off = 0; off < dp->size; off += sizeof(de)){ -80101c75: 83 c3 10 add $0x10,%ebx -80101c78: 3b 5e 58 cmp 0x58(%esi),%ebx -80101c7b: 72 df jb 80101c5c +80101bd2: 83 c3 10 add $0x10,%ebx +80101bd5: 3b 5e 58 cmp 0x58(%esi),%ebx +80101bd8: 72 df jb 80101bb9 strncpy(de.name, name, DIRSIZ); -80101c7d: 83 ec 04 sub $0x4,%esp -80101c80: 6a 0e push $0xe -80101c82: ff 75 0c pushl 0xc(%ebp) -80101c85: 8d 7d d8 lea -0x28(%ebp),%edi -80101c88: 8d 45 da lea -0x26(%ebp),%eax -80101c8b: 50 push %eax -80101c8c: e8 02 24 00 00 call 80104093 +80101bda: 83 ec 04 sub $0x4,%esp +80101bdd: 6a 0e push $0xe +80101bdf: ff 75 0c push 0xc(%ebp) +80101be2: 8d 7d d8 lea -0x28(%ebp),%edi +80101be5: 8d 45 da lea -0x26(%ebp),%eax +80101be8: 50 push %eax +80101be9: e8 f3 22 00 00 call 80103ee1 de.inum = inum; -80101c91: 8b 45 10 mov 0x10(%ebp),%eax -80101c94: 66 89 45 d8 mov %ax,-0x28(%ebp) +80101bee: 8b 45 10 mov 0x10(%ebp),%eax +80101bf1: 66 89 45 d8 mov %ax,-0x28(%ebp) if(writei(dp, (char*)&de, off, sizeof(de)) != sizeof(de)) -80101c98: 6a 10 push $0x10 -80101c9a: 53 push %ebx -80101c9b: 57 push %edi -80101c9c: 56 push %esi -80101c9d: e8 32 fc ff ff call 801018d4 -80101ca2: 83 c4 20 add $0x20,%esp -80101ca5: 83 f8 10 cmp $0x10,%eax -80101ca8: 75 2d jne 80101cd7 +80101bf5: 6a 10 push $0x10 +80101bf7: 53 push %ebx +80101bf8: 57 push %edi +80101bf9: 56 push %esi +80101bfa: e8 44 fc ff ff call 80101843 +80101bff: 83 c4 20 add $0x20,%esp +80101c02: 83 f8 10 cmp $0x10,%eax +80101c05: 75 2d jne 80101c34 return 0; -80101caa: b8 00 00 00 00 mov $0x0,%eax -} -80101caf: 8d 65 f4 lea -0xc(%ebp),%esp -80101cb2: 5b pop %ebx -80101cb3: 5e pop %esi -80101cb4: 5f pop %edi -80101cb5: 5d pop %ebp -80101cb6: c3 ret +80101c07: b8 00 00 00 00 mov $0x0,%eax +} +80101c0c: 8d 65 f4 lea -0xc(%ebp),%esp +80101c0f: 5b pop %ebx +80101c10: 5e pop %esi +80101c11: 5f pop %edi +80101c12: 5d pop %ebp +80101c13: c3 ret iput(ip); -80101cb7: 83 ec 0c sub $0xc,%esp -80101cba: 50 push %eax -80101cbb: e8 7b f9 ff ff call 8010163b +80101c14: 83 ec 0c sub $0xc,%esp +80101c17: 50 push %eax +80101c18: e8 9d f9 ff ff call 801015ba return -1; -80101cc0: 83 c4 10 add $0x10,%esp -80101cc3: b8 ff ff ff ff mov $0xffffffff,%eax -80101cc8: eb e5 jmp 80101caf +80101c1d: 83 c4 10 add $0x10,%esp +80101c20: b8 ff ff ff ff mov $0xffffffff,%eax +80101c25: eb e5 jmp 80101c0c panic("dirlink read"); -80101cca: 83 ec 0c sub $0xc,%esp -80101ccd: 68 e4 79 10 80 push $0x801079e4 -80101cd2: e8 81 e6 ff ff call 80100358 +80101c27: 83 ec 0c sub $0xc,%esp +80101c2a: 68 04 77 10 80 push $0x80107704 +80101c2f: e8 0c e7 ff ff call 80100340 panic("dirlink"); -80101cd7: 83 ec 0c sub $0xc,%esp -80101cda: 68 06 80 10 80 push $0x80108006 -80101cdf: e8 74 e6 ff ff call 80100358 +80101c34: 83 ec 0c sub $0xc,%esp +80101c37: 68 26 7d 10 80 push $0x80107d26 +80101c3c: e8 ff e6 ff ff call 80100340 -80101ce4 : +80101c41 : struct inode* namei(char *path) { -80101ce4: f3 0f 1e fb endbr32 -80101ce8: 55 push %ebp -80101ce9: 89 e5 mov %esp,%ebp -80101ceb: 83 ec 18 sub $0x18,%esp +80101c41: 55 push %ebp +80101c42: 89 e5 mov %esp,%ebp +80101c44: 83 ec 18 sub $0x18,%esp char name[DIRSIZ]; return namex(path, 0, name); -80101cee: 8d 4d ea lea -0x16(%ebp),%ecx -80101cf1: ba 00 00 00 00 mov $0x0,%edx -80101cf6: 8b 45 08 mov 0x8(%ebp),%eax -80101cf9: e8 b8 fd ff ff call 80101ab6 +80101c47: 8d 4d ea lea -0x16(%ebp),%ecx +80101c4a: ba 00 00 00 00 mov $0x0,%edx +80101c4f: 8b 45 08 mov 0x8(%ebp),%eax +80101c52: e8 c0 fd ff ff call 80101a17 } -80101cfe: c9 leave -80101cff: c3 ret +80101c57: c9 leave +80101c58: c3 ret -80101d00 : +80101c59 : struct inode* nameiparent(char *path, char *name) { -80101d00: f3 0f 1e fb endbr32 -80101d04: 55 push %ebp -80101d05: 89 e5 mov %esp,%ebp -80101d07: 83 ec 08 sub $0x8,%esp +80101c59: 55 push %ebp +80101c5a: 89 e5 mov %esp,%ebp +80101c5c: 83 ec 08 sub $0x8,%esp return namex(path, 1, name); -80101d0a: 8b 4d 0c mov 0xc(%ebp),%ecx -80101d0d: ba 01 00 00 00 mov $0x1,%edx -80101d12: 8b 45 08 mov 0x8(%ebp),%eax -80101d15: e8 9c fd ff ff call 80101ab6 +80101c5f: 8b 4d 0c mov 0xc(%ebp),%ecx +80101c62: ba 01 00 00 00 mov $0x1,%edx +80101c67: 8b 45 08 mov 0x8(%ebp),%eax +80101c6a: e8 a8 fd ff ff call 80101a17 } -80101d1a: c9 leave -80101d1b: c3 ret +80101c6f: c9 leave +80101c70: c3 ret -80101d1c : +80101c71 : } // Start the request for b. Caller must hold idelock. static void idestart(struct buf *b) { -80101d1c: 55 push %ebp -80101d1d: 89 e5 mov %esp,%ebp -80101d1f: 56 push %esi -80101d20: 53 push %ebx +80101c71: 55 push %ebp +80101c72: 89 e5 mov %esp,%ebp +80101c74: 56 push %esi +80101c75: 53 push %ebx if(b == 0) -80101d21: 85 c0 test %eax,%eax -80101d23: 0f 84 8b 00 00 00 je 80101db4 -80101d29: 89 c1 mov %eax,%ecx +80101c76: 85 c0 test %eax,%eax +80101c78: 0f 84 8b 00 00 00 je 80101d09 +80101c7e: 89 c1 mov %eax,%ecx panic("idestart"); if(b->blockno >= FSSIZE) -80101d2b: 8b 70 08 mov 0x8(%eax),%esi -80101d2e: 81 fe e7 03 00 00 cmp $0x3e7,%esi -80101d34: 0f 87 87 00 00 00 ja 80101dc1 +80101c80: 8b 58 08 mov 0x8(%eax),%ebx +80101c83: 81 fb e7 03 00 00 cmp $0x3e7,%ebx +80101c89: 0f 87 87 00 00 00 ja 80101d16 asm volatile("in %1,%0" : "=a" (data) : "d" (port)); -80101d3a: ba f7 01 00 00 mov $0x1f7,%edx -80101d3f: ec in (%dx),%al +80101c8f: ba f7 01 00 00 mov $0x1f7,%edx +80101c94: ec in (%dx),%al while(((r = inb(0x1f7)) & (IDE_BSY|IDE_DRDY)) != IDE_DRDY) -80101d40: 83 e0 c0 and $0xffffffc0,%eax -80101d43: 3c 40 cmp $0x40,%al -80101d45: 75 f8 jne 80101d3f +80101c95: 83 e0 c0 and $0xffffffc0,%eax +80101c98: 3c 40 cmp $0x40,%al +80101c9a: 75 f8 jne 80101c94 asm volatile("out %0,%1" : : "a" (data), "d" (port)); -80101d47: bb 00 00 00 00 mov $0x0,%ebx -80101d4c: ba f6 03 00 00 mov $0x3f6,%edx -80101d51: 89 d8 mov %ebx,%eax -80101d53: ee out %al,(%dx) -80101d54: b8 01 00 00 00 mov $0x1,%eax -80101d59: ba f2 01 00 00 mov $0x1f2,%edx -80101d5e: ee out %al,(%dx) -80101d5f: ba f3 01 00 00 mov $0x1f3,%edx -80101d64: 89 f0 mov %esi,%eax -80101d66: ee out %al,(%dx) +80101c9c: be 00 00 00 00 mov $0x0,%esi +80101ca1: ba f6 03 00 00 mov $0x3f6,%edx +80101ca6: 89 f0 mov %esi,%eax +80101ca8: ee out %al,(%dx) +80101ca9: b8 01 00 00 00 mov $0x1,%eax +80101cae: ba f2 01 00 00 mov $0x1f2,%edx +80101cb3: ee out %al,(%dx) +80101cb4: ba f3 01 00 00 mov $0x1f3,%edx +80101cb9: 89 d8 mov %ebx,%eax +80101cbb: 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); -80101d67: 89 f0 mov %esi,%eax -80101d69: c1 f8 08 sar $0x8,%eax -80101d6c: ba f4 01 00 00 mov $0x1f4,%edx -80101d71: ee out %al,(%dx) -80101d72: ba f5 01 00 00 mov $0x1f5,%edx -80101d77: 89 d8 mov %ebx,%eax -80101d79: ee out %al,(%dx) +80101cbc: 89 d8 mov %ebx,%eax +80101cbe: c1 f8 08 sar $0x8,%eax +80101cc1: ba f4 01 00 00 mov $0x1f4,%edx +80101cc6: ee out %al,(%dx) +80101cc7: ba f5 01 00 00 mov $0x1f5,%edx +80101ccc: 89 f0 mov %esi,%eax +80101cce: ee out %al,(%dx) outb(0x1f5, (sector >> 16) & 0xff); outb(0x1f6, 0xe0 | ((b->dev&1)<<4) | ((sector>>24)&0x0f)); -80101d7a: 0f b6 41 04 movzbl 0x4(%ecx),%eax -80101d7e: c1 e0 04 shl $0x4,%eax -80101d81: 83 e0 10 and $0x10,%eax -80101d84: 83 c8 e0 or $0xffffffe0,%eax -80101d87: ba f6 01 00 00 mov $0x1f6,%edx -80101d8c: ee out %al,(%dx) +80101ccf: 0f b6 41 04 movzbl 0x4(%ecx),%eax +80101cd3: c1 e0 04 shl $0x4,%eax +80101cd6: 83 e0 10 and $0x10,%eax +80101cd9: 83 c8 e0 or $0xffffffe0,%eax +80101cdc: ba f6 01 00 00 mov $0x1f6,%edx +80101ce1: ee out %al,(%dx) if(b->flags & B_DIRTY){ -80101d8d: f6 01 04 testb $0x4,(%ecx) -80101d90: 74 3c je 80101dce -80101d92: b8 30 00 00 00 mov $0x30,%eax -80101d97: ba f7 01 00 00 mov $0x1f7,%edx -80101d9c: ee out %al,(%dx) +80101ce2: f6 01 04 testb $0x4,(%ecx) +80101ce5: 74 3c je 80101d23 +80101ce7: b8 30 00 00 00 mov $0x30,%eax +80101cec: ba f7 01 00 00 mov $0x1f7,%edx +80101cf1: ee out %al,(%dx) outb(0x1f7, write_cmd); outsl(0x1f0, b->data, BSIZE/4); -80101d9d: 8d 71 5c lea 0x5c(%ecx),%esi +80101cf2: 8d 71 5c lea 0x5c(%ecx),%esi asm volatile("cld; rep outsl" : -80101da0: b9 80 00 00 00 mov $0x80,%ecx -80101da5: ba f0 01 00 00 mov $0x1f0,%edx -80101daa: fc cld -80101dab: f3 6f rep outsl %ds:(%esi),(%dx) +80101cf5: b9 80 00 00 00 mov $0x80,%ecx +80101cfa: ba f0 01 00 00 mov $0x1f0,%edx +80101cff: fc cld +80101d00: f3 6f rep outsl %ds:(%esi),(%dx) } else { outb(0x1f7, read_cmd); } } -80101dad: 8d 65 f8 lea -0x8(%ebp),%esp -80101db0: 5b pop %ebx -80101db1: 5e pop %esi -80101db2: 5d pop %ebp -80101db3: c3 ret +80101d02: 8d 65 f8 lea -0x8(%ebp),%esp +80101d05: 5b pop %ebx +80101d06: 5e pop %esi +80101d07: 5d pop %ebp +80101d08: c3 ret panic("idestart"); -80101db4: 83 ec 0c sub $0xc,%esp -80101db7: 68 47 7a 10 80 push $0x80107a47 -80101dbc: e8 97 e5 ff ff call 80100358 +80101d09: 83 ec 0c sub $0xc,%esp +80101d0c: 68 67 77 10 80 push $0x80107767 +80101d11: e8 2a e6 ff ff call 80100340 panic("incorrect blockno"); -80101dc1: 83 ec 0c sub $0xc,%esp -80101dc4: 68 50 7a 10 80 push $0x80107a50 -80101dc9: e8 8a e5 ff ff call 80100358 +80101d16: 83 ec 0c sub $0xc,%esp +80101d19: 68 70 77 10 80 push $0x80107770 +80101d1e: e8 1d e6 ff ff call 80100340 asm volatile("out %0,%1" : : "a" (data), "d" (port)); -80101dce: b8 20 00 00 00 mov $0x20,%eax -80101dd3: ba f7 01 00 00 mov $0x1f7,%edx -80101dd8: ee out %al,(%dx) +80101d23: b8 20 00 00 00 mov $0x20,%eax +80101d28: ba f7 01 00 00 mov $0x1f7,%edx +80101d2d: ee out %al,(%dx) } -80101dd9: eb d2 jmp 80101dad +80101d2e: eb d2 jmp 80101d02 -80101ddb : +80101d30 : { -80101ddb: f3 0f 1e fb endbr32 -80101ddf: 55 push %ebp -80101de0: 89 e5 mov %esp,%ebp -80101de2: 83 ec 10 sub $0x10,%esp +80101d30: 55 push %ebp +80101d31: 89 e5 mov %esp,%ebp +80101d33: 83 ec 10 sub $0x10,%esp initlock(&idelock, "ide"); -80101de5: 68 62 7a 10 80 push $0x80107a62 -80101dea: 68 80 b5 10 80 push $0x8010b580 -80101def: e8 49 1f 00 00 call 80103d3d +80101d36: 68 82 77 10 80 push $0x80107782 +80101d3b: 68 00 26 11 80 push $0x80112600 +80101d40: e8 73 1e 00 00 call 80103bb8 ioapicenable(IRQ_IDE, ncpu - 1); -80101df4: 83 c4 08 add $0x8,%esp -80101df7: a1 20 59 11 80 mov 0x80115920,%eax -80101dfc: 83 e8 01 sub $0x1,%eax -80101dff: 50 push %eax -80101e00: 6a 0e push $0xe -80101e02: e8 7d 02 00 00 call 80102084 +80101d45: 83 c4 08 add $0x8,%esp +80101d48: a1 84 27 11 80 mov 0x80112784,%eax +80101d4d: 83 e8 01 sub $0x1,%eax +80101d50: 50 push %eax +80101d51: 6a 0e push $0xe +80101d53: e8 71 02 00 00 call 80101fc9 while(((r = inb(0x1f7)) & (IDE_BSY|IDE_DRDY)) != IDE_DRDY) -80101e07: 83 c4 10 add $0x10,%esp +80101d58: 83 c4 10 add $0x10,%esp asm volatile("in %1,%0" : "=a" (data) : "d" (port)); -80101e0a: ba f7 01 00 00 mov $0x1f7,%edx -80101e0f: ec in (%dx),%al -80101e10: 83 e0 c0 and $0xffffffc0,%eax -80101e13: 3c 40 cmp $0x40,%al -80101e15: 75 f8 jne 80101e0f +80101d5b: ba f7 01 00 00 mov $0x1f7,%edx +80101d60: ec in (%dx),%al +80101d61: 83 e0 c0 and $0xffffffc0,%eax +80101d64: 3c 40 cmp $0x40,%al +80101d66: 75 f8 jne 80101d60 asm volatile("out %0,%1" : : "a" (data), "d" (port)); -80101e17: b8 f0 ff ff ff mov $0xfffffff0,%eax -80101e1c: ba f6 01 00 00 mov $0x1f6,%edx -80101e21: ee out %al,(%dx) +80101d68: b8 f0 ff ff ff mov $0xfffffff0,%eax +80101d6d: ba f6 01 00 00 mov $0x1f6,%edx +80101d72: ee out %al,(%dx) asm volatile("in %1,%0" : "=a" (data) : "d" (port)); -80101e22: ba f7 01 00 00 mov $0x1f7,%edx -80101e27: ec in (%dx),%al +80101d73: ba f7 01 00 00 mov $0x1f7,%edx +80101d78: ec in (%dx),%al if(inb(0x1f7) != 0){ -80101e28: 84 c0 test %al,%al -80101e2a: 75 11 jne 80101e3d -80101e2c: b9 e7 03 00 00 mov $0x3e7,%ecx -80101e31: ec in (%dx),%al -80101e32: 84 c0 test %al,%al -80101e34: 75 07 jne 80101e3d +80101d79: 84 c0 test %al,%al +80101d7b: 75 11 jne 80101d8e +80101d7d: b9 e7 03 00 00 mov $0x3e7,%ecx +80101d82: ec in (%dx),%al +80101d83: 84 c0 test %al,%al +80101d85: 75 07 jne 80101d8e for(i=0; i<1000; i++){ -80101e36: 83 e9 01 sub $0x1,%ecx -80101e39: 75 f6 jne 80101e31 -80101e3b: eb 0a jmp 80101e47 +80101d87: 83 e9 01 sub $0x1,%ecx +80101d8a: 75 f6 jne 80101d82 +80101d8c: eb 0a jmp 80101d98 havedisk1 = 1; -80101e3d: c7 05 60 b5 10 80 01 movl $0x1,0x8010b560 -80101e44: 00 00 00 +80101d8e: c7 05 e0 25 11 80 01 movl $0x1,0x801125e0 +80101d95: 00 00 00 asm volatile("out %0,%1" : : "a" (data), "d" (port)); -80101e47: b8 e0 ff ff ff mov $0xffffffe0,%eax -80101e4c: ba f6 01 00 00 mov $0x1f6,%edx -80101e51: ee out %al,(%dx) +80101d98: b8 e0 ff ff ff mov $0xffffffe0,%eax +80101d9d: ba f6 01 00 00 mov $0x1f6,%edx +80101da2: ee out %al,(%dx) } -80101e52: c9 leave -80101e53: c3 ret +80101da3: c9 leave +80101da4: c3 ret -80101e54 : +80101da5 : // Interrupt handler. void ideintr(void) { -80101e54: f3 0f 1e fb endbr32 -80101e58: 55 push %ebp -80101e59: 89 e5 mov %esp,%ebp -80101e5b: 57 push %edi -80101e5c: 53 push %ebx +80101da5: 55 push %ebp +80101da6: 89 e5 mov %esp,%ebp +80101da8: 57 push %edi +80101da9: 53 push %ebx struct buf *b; // First queued buffer is the active request. acquire(&idelock); -80101e5d: 83 ec 0c sub $0xc,%esp -80101e60: 68 80 b5 10 80 push $0x8010b580 -80101e65: e8 2f 20 00 00 call 80103e99 +80101daa: 83 ec 0c sub $0xc,%esp +80101dad: 68 00 26 11 80 push $0x80112600 +80101db2: e8 4a 1f 00 00 call 80103d01 if((b = idequeue) == 0){ -80101e6a: 8b 1d 64 b5 10 80 mov 0x8010b564,%ebx -80101e70: 83 c4 10 add $0x10,%esp -80101e73: 85 db test %ebx,%ebx -80101e75: 74 48 je 80101ebf +80101db7: 8b 1d e4 25 11 80 mov 0x801125e4,%ebx +80101dbd: 83 c4 10 add $0x10,%esp +80101dc0: 85 db test %ebx,%ebx +80101dc2: 74 48 je 80101e0c release(&idelock); return; } idequeue = b->qnext; -80101e77: 8b 43 58 mov 0x58(%ebx),%eax -80101e7a: a3 64 b5 10 80 mov %eax,0x8010b564 +80101dc4: 8b 43 58 mov 0x58(%ebx),%eax +80101dc7: a3 e4 25 11 80 mov %eax,0x801125e4 // Read data if needed. if(!(b->flags & B_DIRTY) && idewait(1) >= 0) -80101e7f: f6 03 04 testb $0x4,(%ebx) -80101e82: 74 4d je 80101ed1 +80101dcc: f6 03 04 testb $0x4,(%ebx) +80101dcf: 74 4d je 80101e1e insl(0x1f0, b->data, BSIZE/4); // Wake process waiting for this buf. b->flags |= B_VALID; b->flags &= ~B_DIRTY; -80101e84: 8b 03 mov (%ebx),%eax -80101e86: 83 e0 fb and $0xfffffffb,%eax -80101e89: 83 c8 02 or $0x2,%eax -80101e8c: 89 03 mov %eax,(%ebx) +80101dd1: 8b 03 mov (%ebx),%eax +80101dd3: 83 e0 fb and $0xfffffffb,%eax +80101dd6: 83 c8 02 or $0x2,%eax +80101dd9: 89 03 mov %eax,(%ebx) wakeup(b); -80101e8e: 83 ec 0c sub $0xc,%esp -80101e91: 53 push %ebx -80101e92: e8 a3 1b 00 00 call 80103a3a +80101ddb: 83 ec 0c sub $0xc,%esp +80101dde: 53 push %ebx +80101ddf: e8 f3 1a 00 00 call 801038d7 // Start disk on next buf in queue. if(idequeue != 0) -80101e97: a1 64 b5 10 80 mov 0x8010b564,%eax -80101e9c: 83 c4 10 add $0x10,%esp -80101e9f: 85 c0 test %eax,%eax -80101ea1: 74 05 je 80101ea8 +80101de4: a1 e4 25 11 80 mov 0x801125e4,%eax +80101de9: 83 c4 10 add $0x10,%esp +80101dec: 85 c0 test %eax,%eax +80101dee: 74 05 je 80101df5 idestart(idequeue); -80101ea3: e8 74 fe ff ff call 80101d1c +80101df0: e8 7c fe ff ff call 80101c71 release(&idelock); -80101ea8: 83 ec 0c sub $0xc,%esp -80101eab: 68 80 b5 10 80 push $0x8010b580 -80101eb0: e8 4f 20 00 00 call 80103f04 -80101eb5: 83 c4 10 add $0x10,%esp -} -80101eb8: 8d 65 f8 lea -0x8(%ebp),%esp -80101ebb: 5b pop %ebx -80101ebc: 5f pop %edi -80101ebd: 5d pop %ebp -80101ebe: c3 ret +80101df5: 83 ec 0c sub $0xc,%esp +80101df8: 68 00 26 11 80 push $0x80112600 +80101dfd: e8 66 1f 00 00 call 80103d68 +80101e02: 83 c4 10 add $0x10,%esp +} +80101e05: 8d 65 f8 lea -0x8(%ebp),%esp +80101e08: 5b pop %ebx +80101e09: 5f pop %edi +80101e0a: 5d pop %ebp +80101e0b: c3 ret release(&idelock); -80101ebf: 83 ec 0c sub $0xc,%esp -80101ec2: 68 80 b5 10 80 push $0x8010b580 -80101ec7: e8 38 20 00 00 call 80103f04 +80101e0c: 83 ec 0c sub $0xc,%esp +80101e0f: 68 00 26 11 80 push $0x80112600 +80101e14: e8 4f 1f 00 00 call 80103d68 return; -80101ecc: 83 c4 10 add $0x10,%esp -80101ecf: eb e7 jmp 80101eb8 +80101e19: 83 c4 10 add $0x10,%esp +80101e1c: eb e7 jmp 80101e05 asm volatile("in %1,%0" : "=a" (data) : "d" (port)); -80101ed1: ba f7 01 00 00 mov $0x1f7,%edx -80101ed6: ec in (%dx),%al -80101ed7: 89 c1 mov %eax,%ecx +80101e1e: ba f7 01 00 00 mov $0x1f7,%edx +80101e23: ec in (%dx),%al while(((r = inb(0x1f7)) & (IDE_BSY|IDE_DRDY)) != IDE_DRDY) -80101ed9: 83 e0 c0 and $0xffffffc0,%eax -80101edc: 3c 40 cmp $0x40,%al -80101ede: 75 f6 jne 80101ed6 +80101e24: 89 c1 mov %eax,%ecx +80101e26: 83 e1 c0 and $0xffffffc0,%ecx +80101e29: 80 f9 40 cmp $0x40,%cl +80101e2c: 75 f5 jne 80101e23 if(!(b->flags & B_DIRTY) && idewait(1) >= 0) -80101ee0: f6 c1 21 test $0x21,%cl -80101ee3: 75 9f jne 80101e84 +80101e2e: a8 21 test $0x21,%al +80101e30: 75 9f jne 80101dd1 insl(0x1f0, b->data, BSIZE/4); -80101ee5: 8d 7b 5c lea 0x5c(%ebx),%edi +80101e32: 8d 7b 5c lea 0x5c(%ebx),%edi asm volatile("cld; rep insl" : -80101ee8: b9 80 00 00 00 mov $0x80,%ecx -80101eed: ba f0 01 00 00 mov $0x1f0,%edx -80101ef2: fc cld -80101ef3: f3 6d rep insl (%dx),%es:(%edi) +80101e35: b9 80 00 00 00 mov $0x80,%ecx +80101e3a: ba f0 01 00 00 mov $0x1f0,%edx +80101e3f: fc cld +80101e40: f3 6d rep insl (%dx),%es:(%edi) } -80101ef5: eb 8d jmp 80101e84 +80101e42: eb 8d jmp 80101dd1 -80101ef7 : +80101e44 : // 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) { -80101ef7: f3 0f 1e fb endbr32 -80101efb: 55 push %ebp -80101efc: 89 e5 mov %esp,%ebp -80101efe: 53 push %ebx -80101eff: 83 ec 10 sub $0x10,%esp -80101f02: 8b 5d 08 mov 0x8(%ebp),%ebx +80101e44: 55 push %ebp +80101e45: 89 e5 mov %esp,%ebp +80101e47: 53 push %ebx +80101e48: 83 ec 10 sub $0x10,%esp +80101e4b: 8b 5d 08 mov 0x8(%ebp),%ebx struct buf **pp; if(!holdingsleep(&b->lock)) -80101f05: 8d 43 0c lea 0xc(%ebx),%eax -80101f08: 50 push %eax -80101f09: e8 e1 1d 00 00 call 80103cef -80101f0e: 83 c4 10 add $0x10,%esp -80101f11: 85 c0 test %eax,%eax -80101f13: 0f 84 91 00 00 00 je 80101faa +80101e4e: 8d 43 0c lea 0xc(%ebx),%eax +80101e51: 50 push %eax +80101e52: e8 17 1d 00 00 call 80103b6e +80101e57: 83 c4 10 add $0x10,%esp +80101e5a: 85 c0 test %eax,%eax +80101e5c: 0f 84 91 00 00 00 je 80101ef3 panic("iderw: buf not locked"); if((b->flags & (B_VALID|B_DIRTY)) == B_VALID) -80101f19: 8b 03 mov (%ebx),%eax -80101f1b: 83 e0 06 and $0x6,%eax -80101f1e: 83 f8 02 cmp $0x2,%eax -80101f21: 0f 84 90 00 00 00 je 80101fb7 +80101e62: 8b 03 mov (%ebx),%eax +80101e64: 83 e0 06 and $0x6,%eax +80101e67: 83 f8 02 cmp $0x2,%eax +80101e6a: 0f 84 90 00 00 00 je 80101f00 panic("iderw: nothing to do"); if(b->dev != 0 && !havedisk1) -80101f27: 83 7b 04 00 cmpl $0x0,0x4(%ebx) -80101f2b: 74 0d je 80101f3a -80101f2d: 83 3d 60 b5 10 80 00 cmpl $0x0,0x8010b560 -80101f34: 0f 84 8a 00 00 00 je 80101fc4 +80101e70: 83 7b 04 00 cmpl $0x0,0x4(%ebx) +80101e74: 74 0d je 80101e83 +80101e76: 83 3d e0 25 11 80 00 cmpl $0x0,0x801125e0 +80101e7d: 0f 84 8a 00 00 00 je 80101f0d panic("iderw: ide disk 1 not present"); acquire(&idelock); //DOC:acquire-lock -80101f3a: 83 ec 0c sub $0xc,%esp -80101f3d: 68 80 b5 10 80 push $0x8010b580 -80101f42: e8 52 1f 00 00 call 80103e99 +80101e83: 83 ec 0c sub $0xc,%esp +80101e86: 68 00 26 11 80 push $0x80112600 +80101e8b: e8 71 1e 00 00 call 80103d01 // Append b to idequeue. b->qnext = 0; -80101f47: c7 43 58 00 00 00 00 movl $0x0,0x58(%ebx) +80101e90: c7 43 58 00 00 00 00 movl $0x0,0x58(%ebx) for(pp=&idequeue; *pp; pp=&(*pp)->qnext) //DOC:insert-queue -80101f4e: a1 64 b5 10 80 mov 0x8010b564,%eax -80101f53: 83 c4 10 add $0x10,%esp -80101f56: 85 c0 test %eax,%eax -80101f58: 74 77 je 80101fd1 -80101f5a: 89 c2 mov %eax,%edx -80101f5c: 8b 40 58 mov 0x58(%eax),%eax -80101f5f: 85 c0 test %eax,%eax -80101f61: 75 f7 jne 80101f5a -80101f63: 83 c2 58 add $0x58,%edx +80101e97: a1 e4 25 11 80 mov 0x801125e4,%eax +80101e9c: 83 c4 10 add $0x10,%esp +80101e9f: 85 c0 test %eax,%eax +80101ea1: 74 77 je 80101f1a +80101ea3: 89 c2 mov %eax,%edx +80101ea5: 8b 40 58 mov 0x58(%eax),%eax +80101ea8: 85 c0 test %eax,%eax +80101eaa: 75 f7 jne 80101ea3 +80101eac: 83 c2 58 add $0x58,%edx ; *pp = b; -80101f66: 89 1a mov %ebx,(%edx) +80101eaf: 89 1a mov %ebx,(%edx) // Start disk if necessary. if(idequeue == b) -80101f68: 39 1d 64 b5 10 80 cmp %ebx,0x8010b564 -80101f6e: 74 68 je 80101fd8 +80101eb1: 39 1d e4 25 11 80 cmp %ebx,0x801125e4 +80101eb7: 74 68 je 80101f21 idestart(b); // Wait for request to finish. while((b->flags & (B_VALID|B_DIRTY)) != B_VALID){ -80101f70: 8b 03 mov (%ebx),%eax -80101f72: 83 e0 06 and $0x6,%eax -80101f75: 83 f8 02 cmp $0x2,%eax -80101f78: 74 1b je 80101f95 +80101eb9: 8b 03 mov (%ebx),%eax +80101ebb: 83 e0 06 and $0x6,%eax +80101ebe: 83 f8 02 cmp $0x2,%eax +80101ec1: 74 1b je 80101ede sleep(b, &idelock); -80101f7a: 83 ec 08 sub $0x8,%esp -80101f7d: 68 80 b5 10 80 push $0x8010b580 -80101f82: 53 push %ebx -80101f83: e8 2c 19 00 00 call 801038b4 +80101ec3: 83 ec 08 sub $0x8,%esp +80101ec6: 68 00 26 11 80 push $0x80112600 +80101ecb: 53 push %ebx +80101ecc: e8 88 18 00 00 call 80103759 while((b->flags & (B_VALID|B_DIRTY)) != B_VALID){ -80101f88: 8b 03 mov (%ebx),%eax -80101f8a: 83 e0 06 and $0x6,%eax -80101f8d: 83 c4 10 add $0x10,%esp -80101f90: 83 f8 02 cmp $0x2,%eax -80101f93: 75 e5 jne 80101f7a +80101ed1: 8b 03 mov (%ebx),%eax +80101ed3: 83 e0 06 and $0x6,%eax +80101ed6: 83 c4 10 add $0x10,%esp +80101ed9: 83 f8 02 cmp $0x2,%eax +80101edc: 75 e5 jne 80101ec3 } release(&idelock); -80101f95: 83 ec 0c sub $0xc,%esp -80101f98: 68 80 b5 10 80 push $0x8010b580 -80101f9d: e8 62 1f 00 00 call 80103f04 -} -80101fa2: 83 c4 10 add $0x10,%esp -80101fa5: 8b 5d fc mov -0x4(%ebp),%ebx -80101fa8: c9 leave -80101fa9: c3 ret +80101ede: 83 ec 0c sub $0xc,%esp +80101ee1: 68 00 26 11 80 push $0x80112600 +80101ee6: e8 7d 1e 00 00 call 80103d68 +} +80101eeb: 83 c4 10 add $0x10,%esp +80101eee: 8b 5d fc mov -0x4(%ebp),%ebx +80101ef1: c9 leave +80101ef2: c3 ret panic("iderw: buf not locked"); -80101faa: 83 ec 0c sub $0xc,%esp -80101fad: 68 66 7a 10 80 push $0x80107a66 -80101fb2: e8 a1 e3 ff ff call 80100358 +80101ef3: 83 ec 0c sub $0xc,%esp +80101ef6: 68 86 77 10 80 push $0x80107786 +80101efb: e8 40 e4 ff ff call 80100340 panic("iderw: nothing to do"); -80101fb7: 83 ec 0c sub $0xc,%esp -80101fba: 68 7c 7a 10 80 push $0x80107a7c -80101fbf: e8 94 e3 ff ff call 80100358 +80101f00: 83 ec 0c sub $0xc,%esp +80101f03: 68 9c 77 10 80 push $0x8010779c +80101f08: e8 33 e4 ff ff call 80100340 panic("iderw: ide disk 1 not present"); -80101fc4: 83 ec 0c sub $0xc,%esp -80101fc7: 68 91 7a 10 80 push $0x80107a91 -80101fcc: e8 87 e3 ff ff call 80100358 +80101f0d: 83 ec 0c sub $0xc,%esp +80101f10: 68 b1 77 10 80 push $0x801077b1 +80101f15: e8 26 e4 ff ff call 80100340 for(pp=&idequeue; *pp; pp=&(*pp)->qnext) //DOC:insert-queue -80101fd1: ba 64 b5 10 80 mov $0x8010b564,%edx -80101fd6: eb 8e jmp 80101f66 +80101f1a: ba e4 25 11 80 mov $0x801125e4,%edx +80101f1f: eb 8e jmp 80101eaf idestart(b); -80101fd8: 89 d8 mov %ebx,%eax -80101fda: e8 3d fd ff ff call 80101d1c -80101fdf: eb 8f jmp 80101f70 +80101f21: 89 d8 mov %ebx,%eax +80101f23: e8 49 fd ff ff call 80101c71 +80101f28: eb 8f jmp 80101eb9 -80101fe1 : +80101f2a : ioapic->data = data; } void ioapicinit(void) { -80101fe1: f3 0f 1e fb endbr32 -80101fe5: 55 push %ebp -80101fe6: 89 e5 mov %esp,%ebp -80101fe8: 56 push %esi -80101fe9: 53 push %ebx +80101f2a: 55 push %ebp +80101f2b: 89 e5 mov %esp,%ebp +80101f2d: 56 push %esi +80101f2e: 53 push %ebx int i, id, maxintr; ioapic = (volatile struct ioapic*)IOAPIC; -80101fea: c7 05 54 52 11 80 00 movl $0xfec00000,0x80115254 -80101ff1: 00 c0 fe +80101f2f: c7 05 34 26 11 80 00 movl $0xfec00000,0x80112634 +80101f36: 00 c0 fe ioapic->reg = reg; -80101ff4: c7 05 00 00 c0 fe 01 movl $0x1,0xfec00000 -80101ffb: 00 00 00 +80101f39: c7 05 00 00 c0 fe 01 movl $0x1,0xfec00000 +80101f40: 00 00 00 return ioapic->data; -80101ffe: a1 54 52 11 80 mov 0x80115254,%eax -80102003: 8b 58 10 mov 0x10(%eax),%ebx +80101f43: a1 34 26 11 80 mov 0x80112634,%eax +80101f48: 8b 58 10 mov 0x10(%eax),%ebx maxintr = (ioapicread(REG_VER) >> 16) & 0xFF; -80102006: c1 eb 10 shr $0x10,%ebx -80102009: 0f b6 db movzbl %bl,%ebx +80101f4b: c1 eb 10 shr $0x10,%ebx +80101f4e: 0f b6 db movzbl %bl,%ebx ioapic->reg = reg; -8010200c: c7 00 00 00 00 00 movl $0x0,(%eax) +80101f51: c7 00 00 00 00 00 movl $0x0,(%eax) return ioapic->data; -80102012: a1 54 52 11 80 mov 0x80115254,%eax -80102017: 8b 40 10 mov 0x10(%eax),%eax +80101f57: a1 34 26 11 80 mov 0x80112634,%eax +80101f5c: 8b 40 10 mov 0x10(%eax),%eax id = ioapicread(REG_ID) >> 24; if(id != ioapicid) -8010201a: 0f b6 15 80 53 11 80 movzbl 0x80115380,%edx +80101f5f: 0f b6 15 80 27 11 80 movzbl 0x80112780,%edx id = ioapicread(REG_ID) >> 24; -80102021: c1 e8 18 shr $0x18,%eax +80101f66: c1 e8 18 shr $0x18,%eax if(id != ioapicid) -80102024: 39 c2 cmp %eax,%edx -80102026: 75 4a jne 80102072 +80101f69: 39 c2 cmp %eax,%edx +80101f6b: 75 4a jne 80101fb7 cprintf("ioapicinit: id isn't equal to ioapicid; not a MP\n"); // Mark all interrupts edge-triggered, active high, disabled, // and not routed to any CPUs. for(i = 0; i <= maxintr; i++){ -80102028: 8d 74 1b 12 lea 0x12(%ebx,%ebx,1),%esi +80101f6d: 8d 74 1b 12 lea 0x12(%ebx,%ebx,1),%esi { -8010202c: b8 10 00 00 00 mov $0x10,%eax -80102031: ba 20 00 00 00 mov $0x20,%edx +80101f71: b8 10 00 00 00 mov $0x10,%eax +80101f76: ba 20 00 00 00 mov $0x20,%edx ioapicwrite(REG_TABLE+2*i, INT_DISABLED | (T_IRQ0 + i)); -80102036: 89 d3 mov %edx,%ebx -80102038: 81 cb 00 00 01 00 or $0x10000,%ebx +80101f7b: 89 d3 mov %edx,%ebx +80101f7d: 81 cb 00 00 01 00 or $0x10000,%ebx ioapic->reg = reg; -8010203e: 8b 0d 54 52 11 80 mov 0x80115254,%ecx -80102044: 89 01 mov %eax,(%ecx) +80101f83: 8b 0d 34 26 11 80 mov 0x80112634,%ecx +80101f89: 89 01 mov %eax,(%ecx) ioapic->data = data; -80102046: 8b 0d 54 52 11 80 mov 0x80115254,%ecx -8010204c: 89 59 10 mov %ebx,0x10(%ecx) +80101f8b: 8b 0d 34 26 11 80 mov 0x80112634,%ecx +80101f91: 89 59 10 mov %ebx,0x10(%ecx) ioapic->reg = reg; -8010204f: 8d 58 01 lea 0x1(%eax),%ebx -80102052: 89 19 mov %ebx,(%ecx) +80101f94: 8d 58 01 lea 0x1(%eax),%ebx +80101f97: 89 19 mov %ebx,(%ecx) ioapic->data = data; -80102054: 8b 0d 54 52 11 80 mov 0x80115254,%ecx -8010205a: c7 41 10 00 00 00 00 movl $0x0,0x10(%ecx) +80101f99: 8b 0d 34 26 11 80 mov 0x80112634,%ecx +80101f9f: c7 41 10 00 00 00 00 movl $0x0,0x10(%ecx) for(i = 0; i <= maxintr; i++){ -80102061: 83 c2 01 add $0x1,%edx -80102064: 83 c0 02 add $0x2,%eax -80102067: 39 f0 cmp %esi,%eax -80102069: 75 cb jne 80102036 +80101fa6: 83 c2 01 add $0x1,%edx +80101fa9: 83 c0 02 add $0x2,%eax +80101fac: 39 f0 cmp %esi,%eax +80101fae: 75 cb jne 80101f7b ioapicwrite(REG_TABLE+2*i+1, 0); } } -8010206b: 8d 65 f8 lea -0x8(%ebp),%esp -8010206e: 5b pop %ebx -8010206f: 5e pop %esi -80102070: 5d pop %ebp -80102071: c3 ret +80101fb0: 8d 65 f8 lea -0x8(%ebp),%esp +80101fb3: 5b pop %ebx +80101fb4: 5e pop %esi +80101fb5: 5d pop %ebp +80101fb6: c3 ret cprintf("ioapicinit: id isn't equal to ioapicid; not a MP\n"); -80102072: 83 ec 0c sub $0xc,%esp -80102075: 68 b0 7a 10 80 push $0x80107ab0 -8010207a: e8 ad e5 ff ff call 8010062c -8010207f: 83 c4 10 add $0x10,%esp -80102082: eb a4 jmp 80102028 +80101fb7: 83 ec 0c sub $0xc,%esp +80101fba: 68 d0 77 10 80 push $0x801077d0 +80101fbf: e8 3d e6 ff ff call 80100601 +80101fc4: 83 c4 10 add $0x10,%esp +80101fc7: eb a4 jmp 80101f6d -80102084 : +80101fc9 : void ioapicenable(int irq, int cpunum) { -80102084: f3 0f 1e fb endbr32 -80102088: 55 push %ebp -80102089: 89 e5 mov %esp,%ebp -8010208b: 8b 45 08 mov 0x8(%ebp),%eax +80101fc9: 55 push %ebp +80101fca: 89 e5 mov %esp,%ebp +80101fcc: 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); -8010208e: 8d 50 20 lea 0x20(%eax),%edx -80102091: 8d 44 00 10 lea 0x10(%eax,%eax,1),%eax +80101fcf: 8d 50 20 lea 0x20(%eax),%edx +80101fd2: 8d 44 00 10 lea 0x10(%eax,%eax,1),%eax ioapic->reg = reg; -80102095: 8b 0d 54 52 11 80 mov 0x80115254,%ecx -8010209b: 89 01 mov %eax,(%ecx) +80101fd6: 8b 0d 34 26 11 80 mov 0x80112634,%ecx +80101fdc: 89 01 mov %eax,(%ecx) ioapic->data = data; -8010209d: 8b 0d 54 52 11 80 mov 0x80115254,%ecx -801020a3: 89 51 10 mov %edx,0x10(%ecx) +80101fde: 8b 0d 34 26 11 80 mov 0x80112634,%ecx +80101fe4: 89 51 10 mov %edx,0x10(%ecx) ioapicwrite(REG_TABLE+2*irq+1, cpunum << 24); -801020a6: 8b 55 0c mov 0xc(%ebp),%edx -801020a9: c1 e2 18 shl $0x18,%edx -801020ac: 83 c0 01 add $0x1,%eax +80101fe7: 8b 55 0c mov 0xc(%ebp),%edx +80101fea: c1 e2 18 shl $0x18,%edx +80101fed: 83 c0 01 add $0x1,%eax ioapic->reg = reg; -801020af: 89 01 mov %eax,(%ecx) +80101ff0: 89 01 mov %eax,(%ecx) ioapic->data = data; -801020b1: a1 54 52 11 80 mov 0x80115254,%eax -801020b6: 89 50 10 mov %edx,0x10(%eax) +80101ff2: a1 34 26 11 80 mov 0x80112634,%eax +80101ff7: 89 50 10 mov %edx,0x10(%eax) } -801020b9: 5d pop %ebp -801020ba: c3 ret +80101ffa: 5d pop %ebp +80101ffb: c3 ret -801020bb : +80101ffc : // 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) { -801020bb: f3 0f 1e fb endbr32 -801020bf: 55 push %ebp -801020c0: 89 e5 mov %esp,%ebp -801020c2: 53 push %ebx -801020c3: 83 ec 04 sub $0x4,%esp -801020c6: 8b 5d 08 mov 0x8(%ebp),%ebx +80101ffc: 55 push %ebp +80101ffd: 89 e5 mov %esp,%ebp +80101fff: 53 push %ebx +80102000: 83 ec 04 sub $0x4,%esp +80102003: 8b 5d 08 mov 0x8(%ebp),%ebx struct run *r; if((uint)v % PGSIZE || v < end || V2P(v) >= PHYSTOP) -801020c9: 81 fb 3c 79 11 80 cmp $0x8011793c,%ebx -801020cf: 0f 92 c0 setb %al -801020d2: 89 d9 mov %ebx,%ecx -801020d4: 81 e1 ff 0f 00 00 and $0xfff,%ecx -801020da: 75 49 jne 80102125 -801020dc: 84 c0 test %al,%al -801020de: 75 45 jne 80102125 -801020e0: 8d 93 00 00 00 80 lea -0x80000000(%ebx),%edx -801020e6: 81 fa ff ff ff 0d cmp $0xdffffff,%edx -801020ec: 77 37 ja 80102125 +80102006: 81 fb 60 79 11 80 cmp $0x80117960,%ebx +8010200c: 0f 92 c0 setb %al +8010200f: 89 d9 mov %ebx,%ecx +80102011: 81 e1 ff 0f 00 00 and $0xfff,%ecx +80102017: 75 49 jne 80102062 +80102019: 84 c0 test %al,%al +8010201b: 75 45 jne 80102062 +8010201d: 8d 93 00 00 00 80 lea -0x80000000(%ebx),%edx +80102023: 81 fa ff ff ff 0d cmp $0xdffffff,%edx +80102029: 77 37 ja 80102062 cprintf("%d %d %d\n",(uint)v%PGSIZE ,v=PHYSTOP); panic("kfree"); } // Fill with junk to catch dangling refs. memset(v, 1, PGSIZE); // garbage value -801020ee: 83 ec 04 sub $0x4,%esp -801020f1: 68 00 10 00 00 push $0x1000 -801020f6: 6a 01 push $0x1 -801020f8: 53 push %ebx -801020f9: e8 51 1e 00 00 call 80103f4f +8010202b: 83 ec 04 sub $0x4,%esp +8010202e: 68 00 10 00 00 push $0x1000 +80102033: 6a 01 push $0x1 +80102035: 53 push %ebx +80102036: e8 74 1d 00 00 call 80103daf if(kmem.use_lock) -801020fe: 83 c4 10 add $0x10,%esp -80102101: 83 3d 94 52 11 80 00 cmpl $0x0,0x80115294 -80102108: 75 49 jne 80102153 +8010203b: 83 c4 10 add $0x10,%esp +8010203e: 83 3d 74 26 11 80 00 cmpl $0x0,0x80112674 +80102045: 75 49 jne 80102090 acquire(&kmem.lock); r = (struct run*)v; r->next = kmem.freelist; -8010210a: a1 98 52 11 80 mov 0x80115298,%eax -8010210f: 89 03 mov %eax,(%ebx) +80102047: a1 78 26 11 80 mov 0x80112678,%eax +8010204c: 89 03 mov %eax,(%ebx) kmem.freelist = r; -80102111: 89 1d 98 52 11 80 mov %ebx,0x80115298 +8010204e: 89 1d 78 26 11 80 mov %ebx,0x80112678 if(kmem.use_lock) -80102117: 83 3d 94 52 11 80 00 cmpl $0x0,0x80115294 -8010211e: 75 45 jne 80102165 +80102054: 83 3d 74 26 11 80 00 cmpl $0x0,0x80112674 +8010205b: 75 45 jne 801020a2 release(&kmem.lock); } -80102120: 8b 5d fc mov -0x4(%ebp),%ebx -80102123: c9 leave -80102124: c3 ret +8010205d: 8b 5d fc mov -0x4(%ebp),%ebx +80102060: c9 leave +80102061: c3 ret cprintf("%d %d %d\n",(uint)v%PGSIZE ,v=PHYSTOP); -80102125: 81 c3 00 00 00 80 add $0x80000000,%ebx -8010212b: 81 fb ff ff ff 0d cmp $0xdffffff,%ebx -80102131: 0f 97 c2 seta %dl -80102134: 0f b6 d2 movzbl %dl,%edx -80102137: 52 push %edx -80102138: 0f b6 c0 movzbl %al,%eax -8010213b: 50 push %eax -8010213c: 51 push %ecx -8010213d: 68 e2 7a 10 80 push $0x80107ae2 -80102142: e8 e5 e4 ff ff call 8010062c +80102062: 81 c3 00 00 00 80 add $0x80000000,%ebx +80102068: 81 fb ff ff ff 0d cmp $0xdffffff,%ebx +8010206e: 0f 97 c2 seta %dl +80102071: 0f b6 d2 movzbl %dl,%edx +80102074: 52 push %edx +80102075: 0f b6 c0 movzbl %al,%eax +80102078: 50 push %eax +80102079: 51 push %ecx +8010207a: 68 02 78 10 80 push $0x80107802 +8010207f: e8 7d e5 ff ff call 80100601 panic("kfree"); -80102147: c7 04 24 ec 7a 10 80 movl $0x80107aec,(%esp) -8010214e: e8 05 e2 ff ff call 80100358 +80102084: c7 04 24 0c 78 10 80 movl $0x8010780c,(%esp) +8010208b: e8 b0 e2 ff ff call 80100340 acquire(&kmem.lock); -80102153: 83 ec 0c sub $0xc,%esp -80102156: 68 60 52 11 80 push $0x80115260 -8010215b: e8 39 1d 00 00 call 80103e99 -80102160: 83 c4 10 add $0x10,%esp -80102163: eb a5 jmp 8010210a +80102090: 83 ec 0c sub $0xc,%esp +80102093: 68 40 26 11 80 push $0x80112640 +80102098: e8 64 1c 00 00 call 80103d01 +8010209d: 83 c4 10 add $0x10,%esp +801020a0: eb a5 jmp 80102047 release(&kmem.lock); -80102165: 83 ec 0c sub $0xc,%esp -80102168: 68 60 52 11 80 push $0x80115260 -8010216d: e8 92 1d 00 00 call 80103f04 -80102172: 83 c4 10 add $0x10,%esp +801020a2: 83 ec 0c sub $0xc,%esp +801020a5: 68 40 26 11 80 push $0x80112640 +801020aa: e8 b9 1c 00 00 call 80103d68 +801020af: 83 c4 10 add $0x10,%esp } -80102175: eb a9 jmp 80102120 +801020b2: eb a9 jmp 8010205d -80102177 : +801020b4 : { -80102177: f3 0f 1e fb endbr32 -8010217b: 55 push %ebp -8010217c: 89 e5 mov %esp,%ebp -8010217e: 56 push %esi -8010217f: 53 push %ebx -80102180: 8b 75 0c mov 0xc(%ebp),%esi +801020b4: 55 push %ebp +801020b5: 89 e5 mov %esp,%ebp +801020b7: 56 push %esi +801020b8: 53 push %ebx +801020b9: 8b 75 0c mov 0xc(%ebp),%esi p = (char*)PGROUNDUP((uint)vstart); -80102183: 8b 45 08 mov 0x8(%ebp),%eax -80102186: 8d 98 ff 0f 00 00 lea 0xfff(%eax),%ebx -8010218c: 81 e3 00 f0 ff ff and $0xfffff000,%ebx +801020bc: 8b 45 08 mov 0x8(%ebp),%eax +801020bf: 8d 98 ff 0f 00 00 lea 0xfff(%eax),%ebx +801020c5: 81 e3 00 f0 ff ff and $0xfffff000,%ebx for(; p + PGSIZE <= (char*)vend; p += PGSIZE) -80102192: 81 c3 00 10 00 00 add $0x1000,%ebx -80102198: 39 de cmp %ebx,%esi -8010219a: 72 1c jb 801021b8 +801020cb: 81 c3 00 10 00 00 add $0x1000,%ebx +801020d1: 39 de cmp %ebx,%esi +801020d3: 72 1c jb 801020f1 kfree(p); -8010219c: 83 ec 0c sub $0xc,%esp -8010219f: 8d 83 00 f0 ff ff lea -0x1000(%ebx),%eax -801021a5: 50 push %eax -801021a6: e8 10 ff ff ff call 801020bb +801020d5: 83 ec 0c sub $0xc,%esp +801020d8: 8d 83 00 f0 ff ff lea -0x1000(%ebx),%eax +801020de: 50 push %eax +801020df: e8 18 ff ff ff call 80101ffc for(; p + PGSIZE <= (char*)vend; p += PGSIZE) -801021ab: 81 c3 00 10 00 00 add $0x1000,%ebx -801021b1: 83 c4 10 add $0x10,%esp -801021b4: 39 f3 cmp %esi,%ebx -801021b6: 76 e4 jbe 8010219c -} -801021b8: 8d 65 f8 lea -0x8(%ebp),%esp -801021bb: 5b pop %ebx -801021bc: 5e pop %esi -801021bd: 5d pop %ebp -801021be: c3 ret - -801021bf : -{ -801021bf: f3 0f 1e fb endbr32 -801021c3: 55 push %ebp -801021c4: 89 e5 mov %esp,%ebp -801021c6: 83 ec 10 sub $0x10,%esp +801020e4: 81 c3 00 10 00 00 add $0x1000,%ebx +801020ea: 83 c4 10 add $0x10,%esp +801020ed: 39 f3 cmp %esi,%ebx +801020ef: 76 e4 jbe 801020d5 +} +801020f1: 8d 65 f8 lea -0x8(%ebp),%esp +801020f4: 5b pop %ebx +801020f5: 5e pop %esi +801020f6: 5d pop %ebp +801020f7: c3 ret + +801020f8 : +{ +801020f8: 55 push %ebp +801020f9: 89 e5 mov %esp,%ebp +801020fb: 83 ec 10 sub $0x10,%esp initlock(&kmem.lock, "kmem"); -801021c9: 68 f2 7a 10 80 push $0x80107af2 -801021ce: 68 60 52 11 80 push $0x80115260 -801021d3: e8 65 1b 00 00 call 80103d3d +801020fe: 68 12 78 10 80 push $0x80107812 +80102103: 68 40 26 11 80 push $0x80112640 +80102108: e8 ab 1a 00 00 call 80103bb8 kmem.use_lock = 0; -801021d8: c7 05 94 52 11 80 00 movl $0x0,0x80115294 -801021df: 00 00 00 +8010210d: c7 05 74 26 11 80 00 movl $0x0,0x80112674 +80102114: 00 00 00 freerange(vstart, vend); -801021e2: 83 c4 08 add $0x8,%esp -801021e5: ff 75 0c pushl 0xc(%ebp) -801021e8: ff 75 08 pushl 0x8(%ebp) -801021eb: e8 87 ff ff ff call 80102177 +80102117: 83 c4 08 add $0x8,%esp +8010211a: ff 75 0c push 0xc(%ebp) +8010211d: ff 75 08 push 0x8(%ebp) +80102120: e8 8f ff ff ff call 801020b4 } -801021f0: 83 c4 10 add $0x10,%esp -801021f3: c9 leave -801021f4: c3 ret +80102125: 83 c4 10 add $0x10,%esp +80102128: c9 leave +80102129: c3 ret -801021f5 : +8010212a : { -801021f5: f3 0f 1e fb endbr32 -801021f9: 55 push %ebp -801021fa: 89 e5 mov %esp,%ebp -801021fc: 83 ec 10 sub $0x10,%esp +8010212a: 55 push %ebp +8010212b: 89 e5 mov %esp,%ebp +8010212d: 83 ec 10 sub $0x10,%esp freerange(vstart, vend); -801021ff: ff 75 0c pushl 0xc(%ebp) -80102202: ff 75 08 pushl 0x8(%ebp) -80102205: e8 6d ff ff ff call 80102177 +80102130: ff 75 0c push 0xc(%ebp) +80102133: ff 75 08 push 0x8(%ebp) +80102136: e8 79 ff ff ff call 801020b4 kmem.use_lock = 1; -8010220a: c7 05 94 52 11 80 01 movl $0x1,0x80115294 -80102211: 00 00 00 +8010213b: c7 05 74 26 11 80 01 movl $0x1,0x80112674 +80102142: 00 00 00 } -80102214: 83 c4 10 add $0x10,%esp -80102217: c9 leave -80102218: c3 ret +80102145: 83 c4 10 add $0x10,%esp +80102148: c9 leave +80102149: c3 ret -80102219 : +8010214a : // Allocate one 4096-byte page of physical memory. // Returns a pointer that the kernel can use. // Returns 0 if the memory cannot be allocated. char* kalloc(void) { -80102219: f3 0f 1e fb endbr32 -8010221d: 55 push %ebp -8010221e: 89 e5 mov %esp,%ebp -80102220: 53 push %ebx -80102221: 83 ec 04 sub $0x4,%esp +8010214a: 55 push %ebp +8010214b: 89 e5 mov %esp,%ebp +8010214d: 53 push %ebx +8010214e: 83 ec 04 sub $0x4,%esp struct run *r; if(kmem.use_lock) -80102224: 83 3d 94 52 11 80 00 cmpl $0x0,0x80115294 -8010222b: 75 21 jne 8010224e +80102151: 83 3d 74 26 11 80 00 cmpl $0x0,0x80112674 +80102158: 75 21 jne 8010217b acquire(&kmem.lock); r = kmem.freelist; -8010222d: 8b 1d 98 52 11 80 mov 0x80115298,%ebx +8010215a: 8b 1d 78 26 11 80 mov 0x80112678,%ebx if(r) -80102233: 85 db test %ebx,%ebx -80102235: 74 10 je 80102247 +80102160: 85 db test %ebx,%ebx +80102162: 74 10 je 80102174 kmem.freelist = r->next; // first element of linked list changed -80102237: 8b 03 mov (%ebx),%eax -80102239: a3 98 52 11 80 mov %eax,0x80115298 +80102164: 8b 03 mov (%ebx),%eax +80102166: a3 78 26 11 80 mov %eax,0x80112678 if(kmem.use_lock) -8010223e: 83 3d 94 52 11 80 00 cmpl $0x0,0x80115294 -80102245: 75 23 jne 8010226a +8010216b: 83 3d 74 26 11 80 00 cmpl $0x0,0x80112674 +80102172: 75 23 jne 80102197 release(&kmem.lock); return (char*)r; } -80102247: 89 d8 mov %ebx,%eax -80102249: 8b 5d fc mov -0x4(%ebp),%ebx -8010224c: c9 leave -8010224d: c3 ret +80102174: 89 d8 mov %ebx,%eax +80102176: 8b 5d fc mov -0x4(%ebp),%ebx +80102179: c9 leave +8010217a: c3 ret acquire(&kmem.lock); -8010224e: 83 ec 0c sub $0xc,%esp -80102251: 68 60 52 11 80 push $0x80115260 -80102256: e8 3e 1c 00 00 call 80103e99 +8010217b: 83 ec 0c sub $0xc,%esp +8010217e: 68 40 26 11 80 push $0x80112640 +80102183: e8 79 1b 00 00 call 80103d01 r = kmem.freelist; -8010225b: 8b 1d 98 52 11 80 mov 0x80115298,%ebx +80102188: 8b 1d 78 26 11 80 mov 0x80112678,%ebx if(r) -80102261: 83 c4 10 add $0x10,%esp -80102264: 85 db test %ebx,%ebx -80102266: 75 cf jne 80102237 -80102268: eb d4 jmp 8010223e +8010218e: 83 c4 10 add $0x10,%esp +80102191: 85 db test %ebx,%ebx +80102193: 75 cf jne 80102164 +80102195: eb d4 jmp 8010216b release(&kmem.lock); -8010226a: 83 ec 0c sub $0xc,%esp -8010226d: 68 60 52 11 80 push $0x80115260 -80102272: e8 8d 1c 00 00 call 80103f04 -80102277: 83 c4 10 add $0x10,%esp +80102197: 83 ec 0c sub $0xc,%esp +8010219a: 68 40 26 11 80 push $0x80112640 +8010219f: e8 c4 1b 00 00 call 80103d68 +801021a4: 83 c4 10 add $0x10,%esp return (char*)r; -8010227a: eb cb jmp 80102247 - -8010227c : -#include "defs.h" -#include "kbd.h" +801021a7: eb cb jmp 80102174 -int -kbdgetc(void) -{ -8010227c: f3 0f 1e fb endbr32 +801021a9 : asm volatile("in %1,%0" : "=a" (data) : "d" (port)); -80102280: ba 64 00 00 00 mov $0x64,%edx -80102285: ec in (%dx),%al +801021a9: ba 64 00 00 00 mov $0x64,%edx +801021ae: ec in (%dx),%al normalmap, shiftmap, ctlmap, ctlmap }; uint st, data, c; st = inb(KBSTATP); if((st & KBS_DIB) == 0) -80102286: a8 01 test $0x1,%al -80102288: 0f 84 b7 00 00 00 je 80102345 -8010228e: ba 60 00 00 00 mov $0x60,%edx -80102293: ec in (%dx),%al +801021af: a8 01 test $0x1,%al +801021b1: 0f 84 ad 00 00 00 je 80102264 +801021b7: ba 60 00 00 00 mov $0x60,%edx +801021bc: ec in (%dx),%al return -1; data = inb(KBDATAP); -80102294: 0f b6 d0 movzbl %al,%edx +801021bd: 0f b6 c8 movzbl %al,%ecx if(data == 0xE0){ -80102297: 3c e0 cmp $0xe0,%al -80102299: 74 5b je 801022f6 +801021c0: 3c e0 cmp $0xe0,%al +801021c2: 74 5b je 8010221f shift |= E0ESC; return 0; } else if(data & 0x80){ -8010229b: 84 c0 test %al,%al -8010229d: 78 64 js 80102303 +801021c4: 84 c0 test %al,%al +801021c6: 78 64 js 8010222c // Key released data = (shift & E0ESC ? data : data & 0x7F); shift &= ~(shiftcode[data] | E0ESC); return 0; } else if(shift & E0ESC){ -8010229f: 8b 0d b4 b5 10 80 mov 0x8010b5b4,%ecx -801022a5: f6 c1 40 test $0x40,%cl -801022a8: 74 0f je 801022b9 +801021c8: 8b 15 7c 26 11 80 mov 0x8011267c,%edx +801021ce: f6 c2 40 test $0x40,%dl +801021d1: 74 0f je 801021e2 // Last character was an E0 escape; or with 0x80 data |= 0x80; -801022aa: 83 c8 80 or $0xffffff80,%eax -801022ad: 0f b6 d0 movzbl %al,%edx +801021d3: 83 c8 80 or $0xffffff80,%eax +801021d6: 0f b6 c8 movzbl %al,%ecx shift &= ~E0ESC; -801022b0: 83 e1 bf and $0xffffffbf,%ecx -801022b3: 89 0d b4 b5 10 80 mov %ecx,0x8010b5b4 +801021d9: 83 e2 bf and $0xffffffbf,%edx +801021dc: 89 15 7c 26 11 80 mov %edx,0x8011267c } shift |= shiftcode[data]; -801022b9: 0f b6 8a 20 7c 10 80 movzbl -0x7fef83e0(%edx),%ecx -801022c0: 0b 0d b4 b5 10 80 or 0x8010b5b4,%ecx +801021e2: 0f b6 91 40 79 10 80 movzbl -0x7fef86c0(%ecx),%edx +801021e9: 0b 15 7c 26 11 80 or 0x8011267c,%edx shift ^= togglecode[data]; -801022c6: 0f b6 82 20 7b 10 80 movzbl -0x7fef84e0(%edx),%eax -801022cd: 31 c1 xor %eax,%ecx -801022cf: 89 0d b4 b5 10 80 mov %ecx,0x8010b5b4 +801021ef: 0f b6 81 40 78 10 80 movzbl -0x7fef87c0(%ecx),%eax +801021f6: 31 c2 xor %eax,%edx +801021f8: 89 15 7c 26 11 80 mov %edx,0x8011267c c = charcode[shift & (CTL | SHIFT)][data]; -801022d5: 89 c8 mov %ecx,%eax -801022d7: 83 e0 03 and $0x3,%eax -801022da: 8b 04 85 00 7b 10 80 mov -0x7fef8500(,%eax,4),%eax -801022e1: 0f b6 04 10 movzbl (%eax,%edx,1),%eax +801021fe: 89 d0 mov %edx,%eax +80102200: 83 e0 03 and $0x3,%eax +80102203: 8b 04 85 20 78 10 80 mov -0x7fef87e0(,%eax,4),%eax +8010220a: 0f b6 04 08 movzbl (%eax,%ecx,1),%eax if(shift & CAPSLOCK){ -801022e5: f6 c1 08 test $0x8,%cl -801022e8: 74 61 je 8010234b +8010220e: f6 c2 08 test $0x8,%dl +80102211: 74 56 je 80102269 if('a' <= c && c <= 'z') -801022ea: 8d 50 9f lea -0x61(%eax),%edx -801022ed: 83 fa 19 cmp $0x19,%edx -801022f0: 77 46 ja 80102338 +80102213: 8d 50 9f lea -0x61(%eax),%edx +80102216: 83 fa 19 cmp $0x19,%edx +80102219: 77 3c ja 80102257 c += 'A' - 'a'; -801022f2: 83 e8 20 sub $0x20,%eax -801022f5: c3 ret +8010221b: 83 e8 20 sub $0x20,%eax +8010221e: c3 ret shift |= E0ESC; -801022f6: 83 0d b4 b5 10 80 40 orl $0x40,0x8010b5b4 +8010221f: 83 0d 7c 26 11 80 40 orl $0x40,0x8011267c return 0; -801022fd: b8 00 00 00 00 mov $0x0,%eax -80102302: c3 ret -{ -80102303: 55 push %ebp -80102304: 89 e5 mov %esp,%ebp -80102306: 53 push %ebx +80102226: b8 00 00 00 00 mov $0x0,%eax +8010222b: c3 ret data = (shift & E0ESC ? data : data & 0x7F); -80102307: 8b 0d b4 b5 10 80 mov 0x8010b5b4,%ecx -8010230d: 89 cb mov %ecx,%ebx -8010230f: 83 e3 40 and $0x40,%ebx -80102312: 83 e0 7f and $0x7f,%eax -80102315: 85 db test %ebx,%ebx -80102317: 0f 44 d0 cmove %eax,%edx +8010222c: 8b 15 7c 26 11 80 mov 0x8011267c,%edx +80102232: 83 e0 7f and $0x7f,%eax +80102235: f6 c2 40 test $0x40,%dl +80102238: 0f 44 c8 cmove %eax,%ecx shift &= ~(shiftcode[data] | E0ESC); -8010231a: 0f b6 82 20 7c 10 80 movzbl -0x7fef83e0(%edx),%eax -80102321: 83 c8 40 or $0x40,%eax -80102324: 0f b6 c0 movzbl %al,%eax -80102327: f7 d0 not %eax -80102329: 21 c8 and %ecx,%eax -8010232b: a3 b4 b5 10 80 mov %eax,0x8010b5b4 +8010223b: 0f b6 81 40 79 10 80 movzbl -0x7fef86c0(%ecx),%eax +80102242: 83 c8 40 or $0x40,%eax +80102245: 0f b6 c0 movzbl %al,%eax +80102248: f7 d0 not %eax +8010224a: 21 d0 and %edx,%eax +8010224c: a3 7c 26 11 80 mov %eax,0x8011267c return 0; -80102330: b8 00 00 00 00 mov $0x0,%eax +80102251: b8 00 00 00 00 mov $0x0,%eax +80102256: c3 ret else if('A' <= c && c <= 'Z') +80102257: 8d 48 bf lea -0x41(%eax),%ecx c += 'a' - 'A'; +8010225a: 8d 50 20 lea 0x20(%eax),%edx +8010225d: 83 f9 1a cmp $0x1a,%ecx +80102260: 0f 42 c2 cmovb %edx,%eax } return c; -} -80102335: 5b pop %ebx -80102336: 5d pop %ebp -80102337: c3 ret - else if('A' <= c && c <= 'Z') -80102338: 8d 48 bf lea -0x41(%eax),%ecx - c += 'a' - 'A'; -8010233b: 8d 50 20 lea 0x20(%eax),%edx -8010233e: 83 f9 1a cmp $0x1a,%ecx -80102341: 0f 42 c2 cmovb %edx,%eax - return c; -80102344: c3 ret +80102263: c3 ret return -1; -80102345: b8 ff ff ff ff mov $0xffffffff,%eax -8010234a: c3 ret +80102264: b8 ff ff ff ff mov $0xffffffff,%eax } -8010234b: c3 ret +80102269: c3 ret -8010234c : +8010226a : void kbdintr(void) { -8010234c: f3 0f 1e fb endbr32 -80102350: 55 push %ebp -80102351: 89 e5 mov %esp,%ebp -80102353: 83 ec 14 sub $0x14,%esp +8010226a: 55 push %ebp +8010226b: 89 e5 mov %esp,%ebp +8010226d: 83 ec 14 sub $0x14,%esp consoleintr(kbdgetc); -80102356: 68 7c 22 10 80 push $0x8010227c -8010235b: e8 2b e4 ff ff call 8010078b +80102270: 68 a9 21 10 80 push $0x801021a9 +80102275: e8 e2 e4 ff ff call 8010075c } -80102360: 83 c4 10 add $0x10,%esp -80102363: c9 leave -80102364: c3 ret +8010227a: 83 c4 10 add $0x10,%esp +8010227d: c9 leave +8010227e: c3 ret -80102365 : +8010227f : //PAGEBREAK! static void lapicw(int index, int value) { lapic[index] = value; -80102365: 8b 0d 9c 52 11 80 mov 0x8011529c,%ecx -8010236b: 8d 04 81 lea (%ecx,%eax,4),%eax -8010236e: 89 10 mov %edx,(%eax) +8010227f: 8b 0d 80 26 11 80 mov 0x80112680,%ecx +80102285: 8d 04 81 lea (%ecx,%eax,4),%eax +80102288: 89 10 mov %edx,(%eax) lapic[ID]; // wait for write to finish, by reading -80102370: a1 9c 52 11 80 mov 0x8011529c,%eax -80102375: 8b 40 20 mov 0x20(%eax),%eax +8010228a: a1 80 26 11 80 mov 0x80112680,%eax +8010228f: 8b 40 20 mov 0x20(%eax),%eax } -80102378: c3 ret +80102292: c3 ret -80102379 : +80102293 : return inb(CMOS_RETURN); } static void fill_rtcdate(struct rtcdate *r) { -80102379: 55 push %ebp -8010237a: 89 e5 mov %esp,%ebp -8010237c: 56 push %esi -8010237d: 53 push %ebx -8010237e: 89 c3 mov %eax,%ebx +80102293: 55 push %ebp +80102294: 89 e5 mov %esp,%ebp +80102296: 56 push %esi +80102297: 53 push %ebx +80102298: 89 c1 mov %eax,%ecx asm volatile("out %0,%1" : : "a" (data), "d" (port)); -80102380: be 70 00 00 00 mov $0x70,%esi -80102385: b8 00 00 00 00 mov $0x0,%eax -8010238a: 89 f2 mov %esi,%edx -8010238c: ee out %al,(%dx) +8010229a: be 70 00 00 00 mov $0x70,%esi +8010229f: b8 00 00 00 00 mov $0x0,%eax +801022a4: 89 f2 mov %esi,%edx +801022a6: ee out %al,(%dx) asm volatile("in %1,%0" : "=a" (data) : "d" (port)); -8010238d: b9 71 00 00 00 mov $0x71,%ecx -80102392: 89 ca mov %ecx,%edx -80102394: ec in (%dx),%al +801022a7: bb 71 00 00 00 mov $0x71,%ebx +801022ac: 89 da mov %ebx,%edx +801022ae: ec in (%dx),%al return inb(CMOS_RETURN); -80102395: 0f b6 c0 movzbl %al,%eax -80102398: 89 03 mov %eax,(%ebx) +801022af: 0f b6 c0 movzbl %al,%eax +801022b2: 89 01 mov %eax,(%ecx) asm volatile("out %0,%1" : : "a" (data), "d" (port)); -8010239a: b8 02 00 00 00 mov $0x2,%eax -8010239f: 89 f2 mov %esi,%edx -801023a1: ee out %al,(%dx) +801022b4: b8 02 00 00 00 mov $0x2,%eax +801022b9: 89 f2 mov %esi,%edx +801022bb: ee out %al,(%dx) asm volatile("in %1,%0" : "=a" (data) : "d" (port)); -801023a2: 89 ca mov %ecx,%edx -801023a4: ec in (%dx),%al -801023a5: 0f b6 c0 movzbl %al,%eax -801023a8: 89 43 04 mov %eax,0x4(%ebx) +801022bc: 89 da mov %ebx,%edx +801022be: ec in (%dx),%al +801022bf: 0f b6 c0 movzbl %al,%eax +801022c2: 89 41 04 mov %eax,0x4(%ecx) asm volatile("out %0,%1" : : "a" (data), "d" (port)); -801023ab: b8 04 00 00 00 mov $0x4,%eax -801023b0: 89 f2 mov %esi,%edx -801023b2: ee out %al,(%dx) +801022c5: b8 04 00 00 00 mov $0x4,%eax +801022ca: 89 f2 mov %esi,%edx +801022cc: ee out %al,(%dx) asm volatile("in %1,%0" : "=a" (data) : "d" (port)); -801023b3: 89 ca mov %ecx,%edx -801023b5: ec in (%dx),%al -801023b6: 0f b6 c0 movzbl %al,%eax -801023b9: 89 43 08 mov %eax,0x8(%ebx) +801022cd: 89 da mov %ebx,%edx +801022cf: ec in (%dx),%al +801022d0: 0f b6 c0 movzbl %al,%eax +801022d3: 89 41 08 mov %eax,0x8(%ecx) asm volatile("out %0,%1" : : "a" (data), "d" (port)); -801023bc: b8 07 00 00 00 mov $0x7,%eax -801023c1: 89 f2 mov %esi,%edx -801023c3: ee out %al,(%dx) +801022d6: b8 07 00 00 00 mov $0x7,%eax +801022db: 89 f2 mov %esi,%edx +801022dd: ee out %al,(%dx) asm volatile("in %1,%0" : "=a" (data) : "d" (port)); -801023c4: 89 ca mov %ecx,%edx -801023c6: ec in (%dx),%al -801023c7: 0f b6 c0 movzbl %al,%eax -801023ca: 89 43 0c mov %eax,0xc(%ebx) +801022de: 89 da mov %ebx,%edx +801022e0: ec in (%dx),%al +801022e1: 0f b6 c0 movzbl %al,%eax +801022e4: 89 41 0c mov %eax,0xc(%ecx) asm volatile("out %0,%1" : : "a" (data), "d" (port)); -801023cd: b8 08 00 00 00 mov $0x8,%eax -801023d2: 89 f2 mov %esi,%edx -801023d4: ee out %al,(%dx) +801022e7: b8 08 00 00 00 mov $0x8,%eax +801022ec: 89 f2 mov %esi,%edx +801022ee: ee out %al,(%dx) asm volatile("in %1,%0" : "=a" (data) : "d" (port)); -801023d5: 89 ca mov %ecx,%edx -801023d7: ec in (%dx),%al -801023d8: 0f b6 c0 movzbl %al,%eax -801023db: 89 43 10 mov %eax,0x10(%ebx) +801022ef: 89 da mov %ebx,%edx +801022f1: ec in (%dx),%al +801022f2: 0f b6 c0 movzbl %al,%eax +801022f5: 89 41 10 mov %eax,0x10(%ecx) asm volatile("out %0,%1" : : "a" (data), "d" (port)); -801023de: b8 09 00 00 00 mov $0x9,%eax -801023e3: 89 f2 mov %esi,%edx -801023e5: ee out %al,(%dx) +801022f8: b8 09 00 00 00 mov $0x9,%eax +801022fd: 89 f2 mov %esi,%edx +801022ff: ee out %al,(%dx) asm volatile("in %1,%0" : "=a" (data) : "d" (port)); -801023e6: 89 ca mov %ecx,%edx -801023e8: ec in (%dx),%al -801023e9: 0f b6 c0 movzbl %al,%eax -801023ec: 89 43 14 mov %eax,0x14(%ebx) +80102300: 89 da mov %ebx,%edx +80102302: ec in (%dx),%al +80102303: 0f b6 c0 movzbl %al,%eax +80102306: 89 41 14 mov %eax,0x14(%ecx) r->minute = cmos_read(MINS); r->hour = cmos_read(HOURS); r->day = cmos_read(DAY); r->month = cmos_read(MONTH); r->year = cmos_read(YEAR); } -801023ef: 5b pop %ebx -801023f0: 5e pop %esi -801023f1: 5d pop %ebp -801023f2: c3 ret +80102309: 5b pop %ebx +8010230a: 5e pop %esi +8010230b: 5d pop %ebp +8010230c: c3 ret -801023f3 : -{ -801023f3: f3 0f 1e fb endbr32 +8010230d : if(!lapic) -801023f7: 83 3d 9c 52 11 80 00 cmpl $0x0,0x8011529c -801023fe: 0f 84 ff 00 00 00 je 80102503 +8010230d: 83 3d 80 26 11 80 00 cmpl $0x0,0x80112680 +80102314: 0f 84 ff 00 00 00 je 80102419 { -80102404: 55 push %ebp -80102405: 89 e5 mov %esp,%ebp -80102407: 83 ec 08 sub $0x8,%esp +8010231a: 55 push %ebp +8010231b: 89 e5 mov %esp,%ebp +8010231d: 83 ec 08 sub $0x8,%esp lapicw(SVR, ENABLE | (T_IRQ0 + IRQ_SPURIOUS)); -8010240a: ba 3f 01 00 00 mov $0x13f,%edx -8010240f: b8 3c 00 00 00 mov $0x3c,%eax -80102414: e8 4c ff ff ff call 80102365 +80102320: ba 3f 01 00 00 mov $0x13f,%edx +80102325: b8 3c 00 00 00 mov $0x3c,%eax +8010232a: e8 50 ff ff ff call 8010227f lapicw(TDCR, X1); -80102419: ba 0b 00 00 00 mov $0xb,%edx -8010241e: b8 f8 00 00 00 mov $0xf8,%eax -80102423: e8 3d ff ff ff call 80102365 +8010232f: ba 0b 00 00 00 mov $0xb,%edx +80102334: b8 f8 00 00 00 mov $0xf8,%eax +80102339: e8 41 ff ff ff call 8010227f lapicw(TIMER, PERIODIC | (T_IRQ0 + IRQ_TIMER)); -80102428: ba 20 00 02 00 mov $0x20020,%edx -8010242d: b8 c8 00 00 00 mov $0xc8,%eax -80102432: e8 2e ff ff ff call 80102365 +8010233e: ba 20 00 02 00 mov $0x20020,%edx +80102343: b8 c8 00 00 00 mov $0xc8,%eax +80102348: e8 32 ff ff ff call 8010227f lapicw(TICR, 10000000); -80102437: ba 80 96 98 00 mov $0x989680,%edx -8010243c: b8 e0 00 00 00 mov $0xe0,%eax -80102441: e8 1f ff ff ff call 80102365 +8010234d: ba 80 96 98 00 mov $0x989680,%edx +80102352: b8 e0 00 00 00 mov $0xe0,%eax +80102357: e8 23 ff ff ff call 8010227f lapicw(LINT0, MASKED); -80102446: ba 00 00 01 00 mov $0x10000,%edx -8010244b: b8 d4 00 00 00 mov $0xd4,%eax -80102450: e8 10 ff ff ff call 80102365 +8010235c: ba 00 00 01 00 mov $0x10000,%edx +80102361: b8 d4 00 00 00 mov $0xd4,%eax +80102366: e8 14 ff ff ff call 8010227f lapicw(LINT1, MASKED); -80102455: ba 00 00 01 00 mov $0x10000,%edx -8010245a: b8 d8 00 00 00 mov $0xd8,%eax -8010245f: e8 01 ff ff ff call 80102365 +8010236b: ba 00 00 01 00 mov $0x10000,%edx +80102370: b8 d8 00 00 00 mov $0xd8,%eax +80102375: e8 05 ff ff ff call 8010227f if(((lapic[VER]>>16) & 0xFF) >= 4) -80102464: a1 9c 52 11 80 mov 0x8011529c,%eax -80102469: 8b 40 30 mov 0x30(%eax),%eax -8010246c: c1 e8 10 shr $0x10,%eax -8010246f: a8 fc test $0xfc,%al -80102471: 75 7c jne 801024ef +8010237a: a1 80 26 11 80 mov 0x80112680,%eax +8010237f: 8b 40 30 mov 0x30(%eax),%eax +80102382: c1 e8 10 shr $0x10,%eax +80102385: a8 fc test $0xfc,%al +80102387: 75 7c jne 80102405 lapicw(ERROR, T_IRQ0 + IRQ_ERROR); -80102473: ba 33 00 00 00 mov $0x33,%edx -80102478: b8 dc 00 00 00 mov $0xdc,%eax -8010247d: e8 e3 fe ff ff call 80102365 +80102389: ba 33 00 00 00 mov $0x33,%edx +8010238e: b8 dc 00 00 00 mov $0xdc,%eax +80102393: e8 e7 fe ff ff call 8010227f lapicw(ESR, 0); -80102482: ba 00 00 00 00 mov $0x0,%edx -80102487: b8 a0 00 00 00 mov $0xa0,%eax -8010248c: e8 d4 fe ff ff call 80102365 +80102398: ba 00 00 00 00 mov $0x0,%edx +8010239d: b8 a0 00 00 00 mov $0xa0,%eax +801023a2: e8 d8 fe ff ff call 8010227f lapicw(ESR, 0); -80102491: ba 00 00 00 00 mov $0x0,%edx -80102496: b8 a0 00 00 00 mov $0xa0,%eax -8010249b: e8 c5 fe ff ff call 80102365 +801023a7: ba 00 00 00 00 mov $0x0,%edx +801023ac: b8 a0 00 00 00 mov $0xa0,%eax +801023b1: e8 c9 fe ff ff call 8010227f lapicw(EOI, 0); -801024a0: ba 00 00 00 00 mov $0x0,%edx -801024a5: b8 2c 00 00 00 mov $0x2c,%eax -801024aa: e8 b6 fe ff ff call 80102365 +801023b6: ba 00 00 00 00 mov $0x0,%edx +801023bb: b8 2c 00 00 00 mov $0x2c,%eax +801023c0: e8 ba fe ff ff call 8010227f lapicw(ICRHI, 0); -801024af: ba 00 00 00 00 mov $0x0,%edx -801024b4: b8 c4 00 00 00 mov $0xc4,%eax -801024b9: e8 a7 fe ff ff call 80102365 +801023c5: ba 00 00 00 00 mov $0x0,%edx +801023ca: b8 c4 00 00 00 mov $0xc4,%eax +801023cf: e8 ab fe ff ff call 8010227f lapicw(ICRLO, BCAST | INIT | LEVEL); -801024be: ba 00 85 08 00 mov $0x88500,%edx -801024c3: b8 c0 00 00 00 mov $0xc0,%eax -801024c8: e8 98 fe ff ff call 80102365 +801023d4: ba 00 85 08 00 mov $0x88500,%edx +801023d9: b8 c0 00 00 00 mov $0xc0,%eax +801023de: e8 9c fe ff ff call 8010227f while(lapic[ICRLO] & DELIVS) -801024cd: 8b 15 9c 52 11 80 mov 0x8011529c,%edx -801024d3: 8b 82 00 03 00 00 mov 0x300(%edx),%eax -801024d9: f6 c4 10 test $0x10,%ah -801024dc: 75 f5 jne 801024d3 +801023e3: 8b 15 80 26 11 80 mov 0x80112680,%edx +801023e9: 8b 82 00 03 00 00 mov 0x300(%edx),%eax +801023ef: f6 c4 10 test $0x10,%ah +801023f2: 75 f5 jne 801023e9 lapicw(TPR, 0); -801024de: ba 00 00 00 00 mov $0x0,%edx -801024e3: b8 20 00 00 00 mov $0x20,%eax -801024e8: e8 78 fe ff ff call 80102365 +801023f4: ba 00 00 00 00 mov $0x0,%edx +801023f9: b8 20 00 00 00 mov $0x20,%eax +801023fe: e8 7c fe ff ff call 8010227f } -801024ed: c9 leave -801024ee: c3 ret +80102403: c9 leave +80102404: c3 ret lapicw(PCINT, MASKED); -801024ef: ba 00 00 01 00 mov $0x10000,%edx -801024f4: b8 d0 00 00 00 mov $0xd0,%eax -801024f9: e8 67 fe ff ff call 80102365 -801024fe: e9 70 ff ff ff jmp 80102473 -80102503: c3 ret +80102405: ba 00 00 01 00 mov $0x10000,%edx +8010240a: b8 d0 00 00 00 mov $0xd0,%eax +8010240f: e8 6b fe ff ff call 8010227f +80102414: e9 70 ff ff ff jmp 80102389 +80102419: c3 ret -80102504 : -{ -80102504: f3 0f 1e fb endbr32 +8010241a : if (!lapic) -80102508: a1 9c 52 11 80 mov 0x8011529c,%eax -8010250d: 85 c0 test %eax,%eax -8010250f: 74 07 je 80102518 +8010241a: a1 80 26 11 80 mov 0x80112680,%eax +8010241f: 85 c0 test %eax,%eax +80102421: 74 07 je 8010242a return lapic[ID] >> 24; -80102511: 8b 40 20 mov 0x20(%eax),%eax -80102514: c1 e8 18 shr $0x18,%eax -80102517: c3 ret +80102423: 8b 40 20 mov 0x20(%eax),%eax +80102426: c1 e8 18 shr $0x18,%eax +80102429: c3 ret return 0; -80102518: b8 00 00 00 00 mov $0x0,%eax +8010242a: b8 00 00 00 00 mov $0x0,%eax } -8010251d: c3 ret +8010242f: c3 ret -8010251e : -{ -8010251e: f3 0f 1e fb endbr32 +80102430 : if(lapic) -80102522: 83 3d 9c 52 11 80 00 cmpl $0x0,0x8011529c -80102529: 74 17 je 80102542 +80102430: 83 3d 80 26 11 80 00 cmpl $0x0,0x80112680 +80102437: 74 17 je 80102450 { -8010252b: 55 push %ebp -8010252c: 89 e5 mov %esp,%ebp -8010252e: 83 ec 08 sub $0x8,%esp +80102439: 55 push %ebp +8010243a: 89 e5 mov %esp,%ebp +8010243c: 83 ec 08 sub $0x8,%esp lapicw(EOI, 0); -80102531: ba 00 00 00 00 mov $0x0,%edx -80102536: b8 2c 00 00 00 mov $0x2c,%eax -8010253b: e8 25 fe ff ff call 80102365 +8010243f: ba 00 00 00 00 mov $0x0,%edx +80102444: b8 2c 00 00 00 mov $0x2c,%eax +80102449: e8 31 fe ff ff call 8010227f } -80102540: c9 leave -80102541: c3 ret -80102542: c3 ret +8010244e: c9 leave +8010244f: c3 ret +80102450: c3 ret -80102543 : -{ -80102543: f3 0f 1e fb endbr32 +80102451 : } -80102547: c3 ret +80102451: c3 ret -80102548 : +80102452 : { -80102548: f3 0f 1e fb endbr32 -8010254c: 55 push %ebp -8010254d: 89 e5 mov %esp,%ebp -8010254f: 56 push %esi -80102550: 53 push %ebx -80102551: 8b 75 08 mov 0x8(%ebp),%esi -80102554: 8b 5d 0c mov 0xc(%ebp),%ebx +80102452: 55 push %ebp +80102453: 89 e5 mov %esp,%ebp +80102455: 56 push %esi +80102456: 53 push %ebx +80102457: 8b 75 08 mov 0x8(%ebp),%esi +8010245a: 8b 5d 0c mov 0xc(%ebp),%ebx asm volatile("out %0,%1" : : "a" (data), "d" (port)); -80102557: b8 0f 00 00 00 mov $0xf,%eax -8010255c: ba 70 00 00 00 mov $0x70,%edx -80102561: ee out %al,(%dx) -80102562: b8 0a 00 00 00 mov $0xa,%eax -80102567: ba 71 00 00 00 mov $0x71,%edx -8010256c: ee out %al,(%dx) +8010245d: b8 0f 00 00 00 mov $0xf,%eax +80102462: ba 70 00 00 00 mov $0x70,%edx +80102467: ee out %al,(%dx) +80102468: b8 0a 00 00 00 mov $0xa,%eax +8010246d: ba 71 00 00 00 mov $0x71,%edx +80102472: ee out %al,(%dx) wrv[0] = 0; -8010256d: 66 c7 05 67 04 00 80 movw $0x0,0x80000467 -80102574: 00 00 +80102473: 66 c7 05 67 04 00 80 movw $0x0,0x80000467 +8010247a: 00 00 wrv[1] = addr >> 4; -80102576: 89 d8 mov %ebx,%eax -80102578: c1 e8 04 shr $0x4,%eax -8010257b: 66 a3 69 04 00 80 mov %ax,0x80000469 +8010247c: 89 d8 mov %ebx,%eax +8010247e: c1 e8 04 shr $0x4,%eax +80102481: 66 a3 69 04 00 80 mov %ax,0x80000469 lapicw(ICRHI, apicid<<24); -80102581: c1 e6 18 shl $0x18,%esi -80102584: 89 f2 mov %esi,%edx -80102586: b8 c4 00 00 00 mov $0xc4,%eax -8010258b: e8 d5 fd ff ff call 80102365 +80102487: c1 e6 18 shl $0x18,%esi +8010248a: 89 f2 mov %esi,%edx +8010248c: b8 c4 00 00 00 mov $0xc4,%eax +80102491: e8 e9 fd ff ff call 8010227f lapicw(ICRLO, INIT | LEVEL | ASSERT); -80102590: ba 00 c5 00 00 mov $0xc500,%edx -80102595: b8 c0 00 00 00 mov $0xc0,%eax -8010259a: e8 c6 fd ff ff call 80102365 +80102496: ba 00 c5 00 00 mov $0xc500,%edx +8010249b: b8 c0 00 00 00 mov $0xc0,%eax +801024a0: e8 da fd ff ff call 8010227f lapicw(ICRLO, INIT | LEVEL); -8010259f: ba 00 85 00 00 mov $0x8500,%edx -801025a4: b8 c0 00 00 00 mov $0xc0,%eax -801025a9: e8 b7 fd ff ff call 80102365 +801024a5: ba 00 85 00 00 mov $0x8500,%edx +801024aa: b8 c0 00 00 00 mov $0xc0,%eax +801024af: e8 cb fd ff ff call 8010227f lapicw(ICRLO, STARTUP | (addr>>12)); -801025ae: c1 eb 0c shr $0xc,%ebx -801025b1: 80 cf 06 or $0x6,%bh +801024b4: c1 eb 0c shr $0xc,%ebx +801024b7: 80 cf 06 or $0x6,%bh lapicw(ICRHI, apicid<<24); -801025b4: 89 f2 mov %esi,%edx -801025b6: b8 c4 00 00 00 mov $0xc4,%eax -801025bb: e8 a5 fd ff ff call 80102365 +801024ba: 89 f2 mov %esi,%edx +801024bc: b8 c4 00 00 00 mov $0xc4,%eax +801024c1: e8 b9 fd ff ff call 8010227f lapicw(ICRLO, STARTUP | (addr>>12)); -801025c0: 89 da mov %ebx,%edx -801025c2: b8 c0 00 00 00 mov $0xc0,%eax -801025c7: e8 99 fd ff ff call 80102365 +801024c6: 89 da mov %ebx,%edx +801024c8: b8 c0 00 00 00 mov $0xc0,%eax +801024cd: e8 ad fd ff ff call 8010227f lapicw(ICRHI, apicid<<24); -801025cc: 89 f2 mov %esi,%edx -801025ce: b8 c4 00 00 00 mov $0xc4,%eax -801025d3: e8 8d fd ff ff call 80102365 +801024d2: 89 f2 mov %esi,%edx +801024d4: b8 c4 00 00 00 mov $0xc4,%eax +801024d9: e8 a1 fd ff ff call 8010227f lapicw(ICRLO, STARTUP | (addr>>12)); -801025d8: 89 da mov %ebx,%edx -801025da: b8 c0 00 00 00 mov $0xc0,%eax -801025df: e8 81 fd ff ff call 80102365 +801024de: 89 da mov %ebx,%edx +801024e0: b8 c0 00 00 00 mov $0xc0,%eax +801024e5: e8 95 fd ff ff call 8010227f } -801025e4: 5b pop %ebx -801025e5: 5e pop %esi -801025e6: 5d pop %ebp -801025e7: c3 ret +801024ea: 5b pop %ebx +801024eb: 5e pop %esi +801024ec: 5d pop %ebp +801024ed: c3 ret -801025e8 : +801024ee : // qemu seems to use 24-hour GWT and the values are BCD encoded void cmostime(struct rtcdate *r) { -801025e8: f3 0f 1e fb endbr32 -801025ec: 55 push %ebp -801025ed: 89 e5 mov %esp,%ebp -801025ef: 57 push %edi -801025f0: 56 push %esi -801025f1: 53 push %ebx -801025f2: 83 ec 4c sub $0x4c,%esp -801025f5: b8 0b 00 00 00 mov $0xb,%eax -801025fa: ba 70 00 00 00 mov $0x70,%edx -801025ff: ee out %al,(%dx) +801024ee: 55 push %ebp +801024ef: 89 e5 mov %esp,%ebp +801024f1: 57 push %edi +801024f2: 56 push %esi +801024f3: 53 push %ebx +801024f4: 83 ec 4c sub $0x4c,%esp +801024f7: b8 0b 00 00 00 mov $0xb,%eax +801024fc: ba 70 00 00 00 mov $0x70,%edx +80102501: ee out %al,(%dx) asm volatile("in %1,%0" : "=a" (data) : "d" (port)); -80102600: ba 71 00 00 00 mov $0x71,%edx -80102605: ec in (%dx),%al +80102502: ba 71 00 00 00 mov $0x71,%edx +80102507: ec in (%dx),%al struct rtcdate t1, t2; int sb, bcd; sb = cmos_read(CMOS_STATB); bcd = (sb & (1 << 2)) == 0; -80102606: 83 e0 04 and $0x4,%eax -80102609: 88 45 b7 mov %al,-0x49(%ebp) +80102508: 83 e0 04 and $0x4,%eax +8010250b: 88 45 b7 mov %al,-0x49(%ebp) // make sure CMOS doesn't modify time while we read it for(;;) { fill_rtcdate(&t1); -8010260c: 8d 75 d0 lea -0x30(%ebp),%esi +8010250e: 8d 75 d0 lea -0x30(%ebp),%esi asm volatile("out %0,%1" : : "a" (data), "d" (port)); -8010260f: bf 0a 00 00 00 mov $0xa,%edi -80102614: 89 f0 mov %esi,%eax -80102616: e8 5e fd ff ff call 80102379 -8010261b: ba 70 00 00 00 mov $0x70,%edx -80102620: 89 f8 mov %edi,%eax -80102622: ee out %al,(%dx) +80102511: bf 0a 00 00 00 mov $0xa,%edi +80102516: 89 f0 mov %esi,%eax +80102518: e8 76 fd ff ff call 80102293 +8010251d: ba 70 00 00 00 mov $0x70,%edx +80102522: 89 f8 mov %edi,%eax +80102524: ee out %al,(%dx) asm volatile("in %1,%0" : "=a" (data) : "d" (port)); -80102623: ba 71 00 00 00 mov $0x71,%edx -80102628: ec in (%dx),%al +80102525: ba 71 00 00 00 mov $0x71,%edx +8010252a: ec in (%dx),%al if(cmos_read(CMOS_STATA) & CMOS_UIP) -80102629: 84 c0 test %al,%al -8010262b: 78 e7 js 80102614 +8010252b: 84 c0 test %al,%al +8010252d: 78 e7 js 80102516 continue; fill_rtcdate(&t2); -8010262d: 8d 5d b8 lea -0x48(%ebp),%ebx -80102630: 89 d8 mov %ebx,%eax -80102632: e8 42 fd ff ff call 80102379 +8010252f: 8d 5d b8 lea -0x48(%ebp),%ebx +80102532: 89 d8 mov %ebx,%eax +80102534: e8 5a fd ff ff call 80102293 if(memcmp(&t1, &t2, sizeof(t1)) == 0) -80102637: 83 ec 04 sub $0x4,%esp -8010263a: 6a 18 push $0x18 -8010263c: 53 push %ebx -8010263d: 56 push %esi -8010263e: e8 53 19 00 00 call 80103f96 -80102643: 83 c4 10 add $0x10,%esp -80102646: 85 c0 test %eax,%eax -80102648: 75 ca jne 80102614 +80102539: 83 ec 04 sub $0x4,%esp +8010253c: 6a 18 push $0x18 +8010253e: 53 push %ebx +8010253f: 56 push %esi +80102540: e8 ad 18 00 00 call 80103df2 +80102545: 83 c4 10 add $0x10,%esp +80102548: 85 c0 test %eax,%eax +8010254a: 75 ca jne 80102516 break; } // convert if(bcd) { -8010264a: 80 7d b7 00 cmpb $0x0,-0x49(%ebp) -8010264e: 75 78 jne 801026c8 +8010254c: 80 7d b7 00 cmpb $0x0,-0x49(%ebp) +80102550: 75 78 jne 801025ca #define CONV(x) (t1.x = ((t1.x >> 4) * 10) + (t1.x & 0xf)) CONV(second); -80102650: 8b 45 d0 mov -0x30(%ebp),%eax -80102653: 89 c2 mov %eax,%edx -80102655: c1 ea 04 shr $0x4,%edx -80102658: 8d 14 92 lea (%edx,%edx,4),%edx -8010265b: 83 e0 0f and $0xf,%eax -8010265e: 8d 04 50 lea (%eax,%edx,2),%eax -80102661: 89 45 d0 mov %eax,-0x30(%ebp) +80102552: 8b 45 d0 mov -0x30(%ebp),%eax +80102555: 89 c2 mov %eax,%edx +80102557: c1 ea 04 shr $0x4,%edx +8010255a: 8d 14 92 lea (%edx,%edx,4),%edx +8010255d: 83 e0 0f and $0xf,%eax +80102560: 8d 04 50 lea (%eax,%edx,2),%eax +80102563: 89 45 d0 mov %eax,-0x30(%ebp) CONV(minute); -80102664: 8b 45 d4 mov -0x2c(%ebp),%eax -80102667: 89 c2 mov %eax,%edx -80102669: c1 ea 04 shr $0x4,%edx -8010266c: 8d 14 92 lea (%edx,%edx,4),%edx -8010266f: 83 e0 0f and $0xf,%eax -80102672: 8d 04 50 lea (%eax,%edx,2),%eax -80102675: 89 45 d4 mov %eax,-0x2c(%ebp) +80102566: 8b 45 d4 mov -0x2c(%ebp),%eax +80102569: 89 c2 mov %eax,%edx +8010256b: c1 ea 04 shr $0x4,%edx +8010256e: 8d 14 92 lea (%edx,%edx,4),%edx +80102571: 83 e0 0f and $0xf,%eax +80102574: 8d 04 50 lea (%eax,%edx,2),%eax +80102577: 89 45 d4 mov %eax,-0x2c(%ebp) CONV(hour ); -80102678: 8b 45 d8 mov -0x28(%ebp),%eax -8010267b: 89 c2 mov %eax,%edx -8010267d: c1 ea 04 shr $0x4,%edx -80102680: 8d 14 92 lea (%edx,%edx,4),%edx -80102683: 83 e0 0f and $0xf,%eax -80102686: 8d 04 50 lea (%eax,%edx,2),%eax -80102689: 89 45 d8 mov %eax,-0x28(%ebp) +8010257a: 8b 45 d8 mov -0x28(%ebp),%eax +8010257d: 89 c2 mov %eax,%edx +8010257f: c1 ea 04 shr $0x4,%edx +80102582: 8d 14 92 lea (%edx,%edx,4),%edx +80102585: 83 e0 0f and $0xf,%eax +80102588: 8d 04 50 lea (%eax,%edx,2),%eax +8010258b: 89 45 d8 mov %eax,-0x28(%ebp) CONV(day ); -8010268c: 8b 45 dc mov -0x24(%ebp),%eax -8010268f: 89 c2 mov %eax,%edx -80102691: c1 ea 04 shr $0x4,%edx -80102694: 8d 14 92 lea (%edx,%edx,4),%edx -80102697: 83 e0 0f and $0xf,%eax -8010269a: 8d 04 50 lea (%eax,%edx,2),%eax -8010269d: 89 45 dc mov %eax,-0x24(%ebp) +8010258e: 8b 45 dc mov -0x24(%ebp),%eax +80102591: 89 c2 mov %eax,%edx +80102593: c1 ea 04 shr $0x4,%edx +80102596: 8d 14 92 lea (%edx,%edx,4),%edx +80102599: 83 e0 0f and $0xf,%eax +8010259c: 8d 04 50 lea (%eax,%edx,2),%eax +8010259f: 89 45 dc mov %eax,-0x24(%ebp) CONV(month ); -801026a0: 8b 45 e0 mov -0x20(%ebp),%eax -801026a3: 89 c2 mov %eax,%edx -801026a5: c1 ea 04 shr $0x4,%edx -801026a8: 8d 14 92 lea (%edx,%edx,4),%edx -801026ab: 83 e0 0f and $0xf,%eax -801026ae: 8d 04 50 lea (%eax,%edx,2),%eax -801026b1: 89 45 e0 mov %eax,-0x20(%ebp) +801025a2: 8b 45 e0 mov -0x20(%ebp),%eax +801025a5: 89 c2 mov %eax,%edx +801025a7: c1 ea 04 shr $0x4,%edx +801025aa: 8d 14 92 lea (%edx,%edx,4),%edx +801025ad: 83 e0 0f and $0xf,%eax +801025b0: 8d 04 50 lea (%eax,%edx,2),%eax +801025b3: 89 45 e0 mov %eax,-0x20(%ebp) CONV(year ); -801026b4: 8b 45 e4 mov -0x1c(%ebp),%eax -801026b7: 89 c2 mov %eax,%edx -801026b9: c1 ea 04 shr $0x4,%edx -801026bc: 8d 14 92 lea (%edx,%edx,4),%edx -801026bf: 83 e0 0f and $0xf,%eax -801026c2: 8d 04 50 lea (%eax,%edx,2),%eax -801026c5: 89 45 e4 mov %eax,-0x1c(%ebp) +801025b6: 8b 45 e4 mov -0x1c(%ebp),%eax +801025b9: 89 c2 mov %eax,%edx +801025bb: c1 ea 04 shr $0x4,%edx +801025be: 8d 14 92 lea (%edx,%edx,4),%edx +801025c1: 83 e0 0f and $0xf,%eax +801025c4: 8d 04 50 lea (%eax,%edx,2),%eax +801025c7: 89 45 e4 mov %eax,-0x1c(%ebp) #undef CONV } *r = t1; -801026c8: 8b 45 d0 mov -0x30(%ebp),%eax -801026cb: 8b 4d 08 mov 0x8(%ebp),%ecx -801026ce: 89 01 mov %eax,(%ecx) -801026d0: 8b 45 d4 mov -0x2c(%ebp),%eax -801026d3: 89 41 04 mov %eax,0x4(%ecx) -801026d6: 8b 45 d8 mov -0x28(%ebp),%eax -801026d9: 89 41 08 mov %eax,0x8(%ecx) -801026dc: 8b 45 dc mov -0x24(%ebp),%eax -801026df: 89 41 0c mov %eax,0xc(%ecx) -801026e2: 8b 45 e0 mov -0x20(%ebp),%eax -801026e5: 89 41 10 mov %eax,0x10(%ecx) -801026e8: 8b 45 e4 mov -0x1c(%ebp),%eax -801026eb: 89 41 14 mov %eax,0x14(%ecx) +801025ca: 8b 45 d0 mov -0x30(%ebp),%eax +801025cd: 8b 4d 08 mov 0x8(%ebp),%ecx +801025d0: 89 01 mov %eax,(%ecx) +801025d2: 8b 45 d4 mov -0x2c(%ebp),%eax +801025d5: 89 41 04 mov %eax,0x4(%ecx) +801025d8: 8b 45 d8 mov -0x28(%ebp),%eax +801025db: 89 41 08 mov %eax,0x8(%ecx) +801025de: 8b 45 dc mov -0x24(%ebp),%eax +801025e1: 89 41 0c mov %eax,0xc(%ecx) +801025e4: 8b 45 e0 mov -0x20(%ebp),%eax +801025e7: 89 41 10 mov %eax,0x10(%ecx) +801025ea: 8b 45 e4 mov -0x1c(%ebp),%eax +801025ed: 89 41 14 mov %eax,0x14(%ecx) r->year += 2000; -801026ee: 81 41 14 d0 07 00 00 addl $0x7d0,0x14(%ecx) +801025f0: 81 41 14 d0 07 00 00 addl $0x7d0,0x14(%ecx) } -801026f5: 8d 65 f4 lea -0xc(%ebp),%esp -801026f8: 5b pop %ebx -801026f9: 5e pop %esi -801026fa: 5f pop %edi -801026fb: 5d pop %ebp -801026fc: c3 ret +801025f7: 8d 65 f4 lea -0xc(%ebp),%esp +801025fa: 5b pop %ebx +801025fb: 5e pop %esi +801025fc: 5f pop %edi +801025fd: 5d pop %ebp +801025fe: c3 ret -801026fd : +801025ff : static void install_trans(void) { int tail; for (tail = 0; tail < log.lh.n; tail++) { -801026fd: 83 3d e8 52 11 80 00 cmpl $0x0,0x801152e8 -80102704: 0f 8e 84 00 00 00 jle 8010278e -{ -8010270a: 55 push %ebp -8010270b: 89 e5 mov %esp,%ebp -8010270d: 57 push %edi -8010270e: 56 push %esi -8010270f: 53 push %ebx -80102710: 83 ec 1c sub $0x1c,%esp +801025ff: 83 3d e8 26 11 80 00 cmpl $0x0,0x801126e8 +80102606: 0f 8e 84 00 00 00 jle 80102690 +{ +8010260c: 55 push %ebp +8010260d: 89 e5 mov %esp,%ebp +8010260f: 57 push %edi +80102610: 56 push %esi +80102611: 53 push %ebx +80102612: 83 ec 1c sub $0x1c,%esp for (tail = 0; tail < log.lh.n; tail++) { -80102713: be 00 00 00 00 mov $0x0,%esi +80102615: be 00 00 00 00 mov $0x0,%esi struct buf *lbuf = bread(log.dev, log.start+tail+1); // read log block -80102718: bf a0 52 11 80 mov $0x801152a0,%edi -8010271d: 83 ec 08 sub $0x8,%esp -80102720: 89 f0 mov %esi,%eax -80102722: 03 47 34 add 0x34(%edi),%eax -80102725: 83 c0 01 add $0x1,%eax -80102728: 50 push %eax -80102729: ff 77 44 pushl 0x44(%edi) -8010272c: e8 7d d9 ff ff call 801000ae -80102731: 89 45 e4 mov %eax,-0x1c(%ebp) +8010261a: bf a0 26 11 80 mov $0x801126a0,%edi +8010261f: 83 ec 08 sub $0x8,%esp +80102622: 89 f0 mov %esi,%eax +80102624: 03 47 34 add 0x34(%edi),%eax +80102627: 83 c0 01 add $0x1,%eax +8010262a: 50 push %eax +8010262b: ff 77 44 push 0x44(%edi) +8010262e: e8 77 da ff ff call 801000aa +80102633: 89 45 e4 mov %eax,-0x1c(%ebp) struct buf *dbuf = bread(log.dev, log.lh.block[tail]); // read dst -80102734: 83 c4 08 add $0x8,%esp -80102737: ff 34 b5 ec 52 11 80 pushl -0x7feead14(,%esi,4) -8010273e: ff 77 44 pushl 0x44(%edi) -80102741: e8 68 d9 ff ff call 801000ae -80102746: 89 c3 mov %eax,%ebx +80102636: 83 c4 08 add $0x8,%esp +80102639: ff 34 b5 ec 26 11 80 push -0x7feed914(,%esi,4) +80102640: ff 77 44 push 0x44(%edi) +80102643: e8 62 da ff ff call 801000aa +80102648: 89 c3 mov %eax,%ebx memmove(dbuf->data, lbuf->data, BSIZE); // copy block to dst -80102748: 83 c4 0c add $0xc,%esp -8010274b: 68 00 02 00 00 push $0x200 -80102750: 8b 45 e4 mov -0x1c(%ebp),%eax -80102753: 83 c0 5c add $0x5c,%eax -80102756: 50 push %eax -80102757: 8d 43 5c lea 0x5c(%ebx),%eax -8010275a: 50 push %eax -8010275b: e8 7c 18 00 00 call 80103fdc +8010264a: 83 c4 0c add $0xc,%esp +8010264d: 68 00 02 00 00 push $0x200 +80102652: 8b 45 e4 mov -0x1c(%ebp),%eax +80102655: 83 c0 5c add $0x5c,%eax +80102658: 50 push %eax +80102659: 8d 43 5c lea 0x5c(%ebx),%eax +8010265c: 50 push %eax +8010265d: e8 d2 17 00 00 call 80103e34 bwrite(dbuf); // write dst to disk -80102760: 89 1c 24 mov %ebx,(%esp) -80102763: e8 26 da ff ff call 8010018e +80102662: 89 1c 24 mov %ebx,(%esp) +80102665: e8 1c db ff ff call 80100186 brelse(lbuf); -80102768: 83 c4 04 add $0x4,%esp -8010276b: ff 75 e4 pushl -0x1c(%ebp) -8010276e: e8 5a da ff ff call 801001cd +8010266a: 83 c4 04 add $0x4,%esp +8010266d: ff 75 e4 push -0x1c(%ebp) +80102670: e8 4c db ff ff call 801001c1 brelse(dbuf); -80102773: 89 1c 24 mov %ebx,(%esp) -80102776: e8 52 da ff ff call 801001cd +80102675: 89 1c 24 mov %ebx,(%esp) +80102678: e8 44 db ff ff call 801001c1 for (tail = 0; tail < log.lh.n; tail++) { -8010277b: 83 c6 01 add $0x1,%esi -8010277e: 83 c4 10 add $0x10,%esp -80102781: 39 77 48 cmp %esi,0x48(%edi) -80102784: 7f 97 jg 8010271d +8010267d: 83 c6 01 add $0x1,%esi +80102680: 83 c4 10 add $0x10,%esp +80102683: 39 77 48 cmp %esi,0x48(%edi) +80102686: 7f 97 jg 8010261f } } -80102786: 8d 65 f4 lea -0xc(%ebp),%esp -80102789: 5b pop %ebx -8010278a: 5e pop %esi -8010278b: 5f pop %edi -8010278c: 5d pop %ebp -8010278d: c3 ret -8010278e: c3 ret +80102688: 8d 65 f4 lea -0xc(%ebp),%esp +8010268b: 5b pop %ebx +8010268c: 5e pop %esi +8010268d: 5f pop %edi +8010268e: 5d pop %ebp +8010268f: c3 ret +80102690: c3 ret -8010278f : +80102691 : // Write in-memory log header to disk. // This is the true point at which the // current transaction commits. static void write_head(void) { -8010278f: 55 push %ebp -80102790: 89 e5 mov %esp,%ebp -80102792: 53 push %ebx -80102793: 83 ec 0c sub $0xc,%esp +80102691: 55 push %ebp +80102692: 89 e5 mov %esp,%ebp +80102694: 53 push %ebx +80102695: 83 ec 0c sub $0xc,%esp struct buf *buf = bread(log.dev, log.start); -80102796: ff 35 d4 52 11 80 pushl 0x801152d4 -8010279c: ff 35 e4 52 11 80 pushl 0x801152e4 -801027a2: e8 07 d9 ff ff call 801000ae -801027a7: 89 c3 mov %eax,%ebx +80102698: ff 35 d4 26 11 80 push 0x801126d4 +8010269e: ff 35 e4 26 11 80 push 0x801126e4 +801026a4: e8 01 da ff ff call 801000aa +801026a9: 89 c3 mov %eax,%ebx struct logheader *hb = (struct logheader *) (buf->data); int i; hb->n = log.lh.n; -801027a9: 8b 0d e8 52 11 80 mov 0x801152e8,%ecx -801027af: 89 48 5c mov %ecx,0x5c(%eax) +801026ab: 8b 0d e8 26 11 80 mov 0x801126e8,%ecx +801026b1: 89 48 5c mov %ecx,0x5c(%eax) for (i = 0; i < log.lh.n; i++) { -801027b2: 83 c4 10 add $0x10,%esp -801027b5: 85 c9 test %ecx,%ecx -801027b7: 7e 17 jle 801027d0 -801027b9: b8 00 00 00 00 mov $0x0,%eax +801026b4: 83 c4 10 add $0x10,%esp +801026b7: 85 c9 test %ecx,%ecx +801026b9: 7e 17 jle 801026d2 +801026bb: b8 00 00 00 00 mov $0x0,%eax hb->block[i] = log.lh.block[i]; -801027be: 8b 14 85 ec 52 11 80 mov -0x7feead14(,%eax,4),%edx -801027c5: 89 54 83 60 mov %edx,0x60(%ebx,%eax,4) +801026c0: 8b 14 85 ec 26 11 80 mov -0x7feed914(,%eax,4),%edx +801026c7: 89 54 83 60 mov %edx,0x60(%ebx,%eax,4) for (i = 0; i < log.lh.n; i++) { -801027c9: 83 c0 01 add $0x1,%eax -801027cc: 39 c1 cmp %eax,%ecx -801027ce: 75 ee jne 801027be +801026cb: 83 c0 01 add $0x1,%eax +801026ce: 39 c1 cmp %eax,%ecx +801026d0: 75 ee jne 801026c0 } bwrite(buf); -801027d0: 83 ec 0c sub $0xc,%esp -801027d3: 53 push %ebx -801027d4: e8 b5 d9 ff ff call 8010018e +801026d2: 83 ec 0c sub $0xc,%esp +801026d5: 53 push %ebx +801026d6: e8 ab da ff ff call 80100186 brelse(buf); -801027d9: 89 1c 24 mov %ebx,(%esp) -801027dc: e8 ec d9 ff ff call 801001cd -} -801027e1: 83 c4 10 add $0x10,%esp -801027e4: 8b 5d fc mov -0x4(%ebp),%ebx -801027e7: c9 leave -801027e8: c3 ret - -801027e9 : -{ -801027e9: f3 0f 1e fb endbr32 -801027ed: 55 push %ebp -801027ee: 89 e5 mov %esp,%ebp -801027f0: 53 push %ebx -801027f1: 83 ec 2c sub $0x2c,%esp -801027f4: 8b 5d 08 mov 0x8(%ebp),%ebx +801026db: 89 1c 24 mov %ebx,(%esp) +801026de: e8 de da ff ff call 801001c1 +} +801026e3: 83 c4 10 add $0x10,%esp +801026e6: 8b 5d fc mov -0x4(%ebp),%ebx +801026e9: c9 leave +801026ea: c3 ret + +801026eb : +{ +801026eb: 55 push %ebp +801026ec: 89 e5 mov %esp,%ebp +801026ee: 53 push %ebx +801026ef: 83 ec 2c sub $0x2c,%esp +801026f2: 8b 5d 08 mov 0x8(%ebp),%ebx initlock(&log.lock, "log"); -801027f7: 68 20 7d 10 80 push $0x80107d20 -801027fc: 68 a0 52 11 80 push $0x801152a0 -80102801: e8 37 15 00 00 call 80103d3d +801026f5: 68 40 7a 10 80 push $0x80107a40 +801026fa: 68 a0 26 11 80 push $0x801126a0 +801026ff: e8 b4 14 00 00 call 80103bb8 readsb(dev, &sb); -80102806: 83 c4 08 add $0x8,%esp -80102809: 8d 45 dc lea -0x24(%ebp),%eax -8010280c: 50 push %eax -8010280d: 53 push %ebx -8010280e: e8 f1 ea ff ff call 80101304 +80102704: 83 c4 08 add $0x8,%esp +80102707: 8d 45 dc lea -0x24(%ebp),%eax +8010270a: 50 push %eax +8010270b: 53 push %ebx +8010270c: e8 8e eb ff ff call 8010129f log.start = sb.logstart; -80102813: 8b 45 ec mov -0x14(%ebp),%eax -80102816: a3 d4 52 11 80 mov %eax,0x801152d4 +80102711: 8b 45 ec mov -0x14(%ebp),%eax +80102714: a3 d4 26 11 80 mov %eax,0x801126d4 log.size = sb.nlog; -8010281b: 8b 55 e8 mov -0x18(%ebp),%edx -8010281e: 89 15 d8 52 11 80 mov %edx,0x801152d8 +80102719: 8b 55 e8 mov -0x18(%ebp),%edx +8010271c: 89 15 d8 26 11 80 mov %edx,0x801126d8 log.dev = dev; -80102824: 89 1d e4 52 11 80 mov %ebx,0x801152e4 +80102722: 89 1d e4 26 11 80 mov %ebx,0x801126e4 struct buf *buf = bread(log.dev, log.start); -8010282a: 83 c4 08 add $0x8,%esp -8010282d: 50 push %eax -8010282e: 53 push %ebx -8010282f: e8 7a d8 ff ff call 801000ae +80102728: 83 c4 08 add $0x8,%esp +8010272b: 50 push %eax +8010272c: 53 push %ebx +8010272d: e8 78 d9 ff ff call 801000aa log.lh.n = lh->n; -80102834: 8b 48 5c mov 0x5c(%eax),%ecx -80102837: 89 0d e8 52 11 80 mov %ecx,0x801152e8 +80102732: 8b 58 5c mov 0x5c(%eax),%ebx +80102735: 89 1d e8 26 11 80 mov %ebx,0x801126e8 for (i = 0; i < log.lh.n; i++) { -8010283d: 83 c4 10 add $0x10,%esp -80102840: 85 c9 test %ecx,%ecx -80102842: 7e 17 jle 8010285b -80102844: ba 00 00 00 00 mov $0x0,%edx +8010273b: 83 c4 10 add $0x10,%esp +8010273e: 85 db test %ebx,%ebx +80102740: 7e 17 jle 80102759 +80102742: ba 00 00 00 00 mov $0x0,%edx log.lh.block[i] = lh->block[i]; -80102849: 8b 5c 90 60 mov 0x60(%eax,%edx,4),%ebx -8010284d: 89 1c 95 ec 52 11 80 mov %ebx,-0x7feead14(,%edx,4) +80102747: 8b 4c 90 60 mov 0x60(%eax,%edx,4),%ecx +8010274b: 89 0c 95 ec 26 11 80 mov %ecx,-0x7feed914(,%edx,4) for (i = 0; i < log.lh.n; i++) { -80102854: 83 c2 01 add $0x1,%edx -80102857: 39 d1 cmp %edx,%ecx -80102859: 75 ee jne 80102849 +80102752: 83 c2 01 add $0x1,%edx +80102755: 39 d3 cmp %edx,%ebx +80102757: 75 ee jne 80102747 brelse(buf); -8010285b: 83 ec 0c sub $0xc,%esp -8010285e: 50 push %eax -8010285f: e8 69 d9 ff ff call 801001cd +80102759: 83 ec 0c sub $0xc,%esp +8010275c: 50 push %eax +8010275d: e8 5f da ff ff call 801001c1 static void recover_from_log(void) { read_head(); install_trans(); // if committed, copy from log to disk -80102864: e8 94 fe ff ff call 801026fd +80102762: e8 98 fe ff ff call 801025ff log.lh.n = 0; -80102869: c7 05 e8 52 11 80 00 movl $0x0,0x801152e8 -80102870: 00 00 00 +80102767: c7 05 e8 26 11 80 00 movl $0x0,0x801126e8 +8010276e: 00 00 00 write_head(); // clear the log -80102873: e8 17 ff ff ff call 8010278f +80102771: e8 1b ff ff ff call 80102691 } -80102878: 83 c4 10 add $0x10,%esp -8010287b: 8b 5d fc mov -0x4(%ebp),%ebx -8010287e: c9 leave -8010287f: c3 ret +80102776: 83 c4 10 add $0x10,%esp +80102779: 8b 5d fc mov -0x4(%ebp),%ebx +8010277c: c9 leave +8010277d: c3 ret -80102880 : +8010277e : } // called at the start of each FS system call. void begin_op(void) { -80102880: f3 0f 1e fb endbr32 -80102884: 55 push %ebp -80102885: 89 e5 mov %esp,%ebp -80102887: 53 push %ebx -80102888: 83 ec 10 sub $0x10,%esp +8010277e: 55 push %ebp +8010277f: 89 e5 mov %esp,%ebp +80102781: 53 push %ebx +80102782: 83 ec 10 sub $0x10,%esp acquire(&log.lock); -8010288b: 68 a0 52 11 80 push $0x801152a0 -80102890: e8 04 16 00 00 call 80103e99 -80102895: 83 c4 10 add $0x10,%esp +80102785: 68 a0 26 11 80 push $0x801126a0 +8010278a: e8 72 15 00 00 call 80103d01 +8010278f: 83 c4 10 add $0x10,%esp while(1){ if(log.committing){ -80102898: bb a0 52 11 80 mov $0x801152a0,%ebx -8010289d: eb 15 jmp 801028b4 +80102792: bb a0 26 11 80 mov $0x801126a0,%ebx +80102797: eb 15 jmp 801027ae sleep(&log, &log.lock); -8010289f: 83 ec 08 sub $0x8,%esp -801028a2: 68 a0 52 11 80 push $0x801152a0 -801028a7: 68 a0 52 11 80 push $0x801152a0 -801028ac: e8 03 10 00 00 call 801038b4 -801028b1: 83 c4 10 add $0x10,%esp +80102799: 83 ec 08 sub $0x8,%esp +8010279c: 68 a0 26 11 80 push $0x801126a0 +801027a1: 68 a0 26 11 80 push $0x801126a0 +801027a6: e8 ae 0f 00 00 call 80103759 +801027ab: 83 c4 10 add $0x10,%esp if(log.committing){ -801028b4: 83 7b 40 00 cmpl $0x0,0x40(%ebx) -801028b8: 75 e5 jne 8010289f +801027ae: 83 7b 40 00 cmpl $0x0,0x40(%ebx) +801027b2: 75 e5 jne 80102799 } else if(log.lh.n + (log.outstanding+1)*MAXOPBLOCKS > LOGSIZE){ -801028ba: 8b 43 3c mov 0x3c(%ebx),%eax -801028bd: 83 c0 01 add $0x1,%eax -801028c0: 8d 0c 80 lea (%eax,%eax,4),%ecx -801028c3: 8b 53 48 mov 0x48(%ebx),%edx -801028c6: 8d 14 4a lea (%edx,%ecx,2),%edx -801028c9: 83 fa 1e cmp $0x1e,%edx -801028cc: 7e 17 jle 801028e5 +801027b4: 8b 43 3c mov 0x3c(%ebx),%eax +801027b7: 83 c0 01 add $0x1,%eax +801027ba: 8d 0c 80 lea (%eax,%eax,4),%ecx +801027bd: 8b 53 48 mov 0x48(%ebx),%edx +801027c0: 8d 14 4a lea (%edx,%ecx,2),%edx +801027c3: 83 fa 1e cmp $0x1e,%edx +801027c6: 7e 17 jle 801027df // this op might exhaust log space; wait for commit. sleep(&log, &log.lock); -801028ce: 83 ec 08 sub $0x8,%esp -801028d1: 68 a0 52 11 80 push $0x801152a0 -801028d6: 68 a0 52 11 80 push $0x801152a0 -801028db: e8 d4 0f 00 00 call 801038b4 -801028e0: 83 c4 10 add $0x10,%esp -801028e3: eb cf jmp 801028b4 +801027c8: 83 ec 08 sub $0x8,%esp +801027cb: 68 a0 26 11 80 push $0x801126a0 +801027d0: 68 a0 26 11 80 push $0x801126a0 +801027d5: e8 7f 0f 00 00 call 80103759 +801027da: 83 c4 10 add $0x10,%esp +801027dd: eb cf jmp 801027ae } else { log.outstanding += 1; -801028e5: a3 dc 52 11 80 mov %eax,0x801152dc +801027df: a3 dc 26 11 80 mov %eax,0x801126dc release(&log.lock); -801028ea: 83 ec 0c sub $0xc,%esp -801028ed: 68 a0 52 11 80 push $0x801152a0 -801028f2: e8 0d 16 00 00 call 80103f04 +801027e4: 83 ec 0c sub $0xc,%esp +801027e7: 68 a0 26 11 80 push $0x801126a0 +801027ec: e8 77 15 00 00 call 80103d68 break; } } } -801028f7: 83 c4 10 add $0x10,%esp -801028fa: 8b 5d fc mov -0x4(%ebp),%ebx -801028fd: c9 leave -801028fe: c3 ret +801027f1: 83 c4 10 add $0x10,%esp +801027f4: 8b 5d fc mov -0x4(%ebp),%ebx +801027f7: c9 leave +801027f8: c3 ret -801028ff : +801027f9 : // called at the end of each FS system call. // commits if this was the last outstanding operation. void end_op(void) { -801028ff: f3 0f 1e fb endbr32 -80102903: 55 push %ebp -80102904: 89 e5 mov %esp,%ebp -80102906: 57 push %edi -80102907: 56 push %esi -80102908: 53 push %ebx -80102909: 83 ec 28 sub $0x28,%esp +801027f9: 55 push %ebp +801027fa: 89 e5 mov %esp,%ebp +801027fc: 57 push %edi +801027fd: 56 push %esi +801027fe: 53 push %ebx +801027ff: 83 ec 28 sub $0x28,%esp int do_commit = 0; acquire(&log.lock); -8010290c: 68 a0 52 11 80 push $0x801152a0 -80102911: e8 83 15 00 00 call 80103e99 +80102802: 68 a0 26 11 80 push $0x801126a0 +80102807: e8 f5 14 00 00 call 80103d01 log.outstanding -= 1; -80102916: a1 dc 52 11 80 mov 0x801152dc,%eax -8010291b: 8d 58 ff lea -0x1(%eax),%ebx -8010291e: 89 1d dc 52 11 80 mov %ebx,0x801152dc +8010280c: a1 dc 26 11 80 mov 0x801126dc,%eax +80102811: 8d 58 ff lea -0x1(%eax),%ebx +80102814: 89 1d dc 26 11 80 mov %ebx,0x801126dc if(log.committing) -80102924: 83 c4 10 add $0x10,%esp -80102927: 83 3d e0 52 11 80 00 cmpl $0x0,0x801152e0 -8010292e: 75 66 jne 80102996 +8010281a: 83 c4 10 add $0x10,%esp +8010281d: 83 3d e0 26 11 80 00 cmpl $0x0,0x801126e0 +80102824: 75 60 jne 80102886 panic("log.committing"); if(log.outstanding == 0){ -80102930: 85 db test %ebx,%ebx -80102932: 75 6f jne 801029a3 +80102826: 85 db test %ebx,%ebx +80102828: 75 69 jne 80102893 do_commit = 1; log.committing = 1; -80102934: c7 05 e0 52 11 80 01 movl $0x1,0x801152e0 -8010293b: 00 00 00 +8010282a: c7 05 e0 26 11 80 01 movl $0x1,0x801126e0 +80102831: 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); -8010293e: 83 ec 0c sub $0xc,%esp -80102941: 68 a0 52 11 80 push $0x801152a0 -80102946: e8 b9 15 00 00 call 80103f04 +80102834: 83 ec 0c sub $0xc,%esp +80102837: 68 a0 26 11 80 push $0x801126a0 +8010283c: e8 27 15 00 00 call 80103d68 } static void commit() { if (log.lh.n > 0) { -8010294b: 83 c4 10 add $0x10,%esp +80102841: 83 c4 10 add $0x10,%esp struct buf *to = bread(log.dev, log.start+tail+1); // log block -8010294e: bf a0 52 11 80 mov $0x801152a0,%edi +80102844: bf a0 26 11 80 mov $0x801126a0,%edi if (log.lh.n > 0) { -80102953: 83 3d e8 52 11 80 00 cmpl $0x0,0x801152e8 -8010295a: 7f 65 jg 801029c1 +80102849: 83 3d e8 26 11 80 00 cmpl $0x0,0x801126e8 +80102850: 7f 65 jg 801028b7 acquire(&log.lock); -8010295c: 83 ec 0c sub $0xc,%esp -8010295f: 68 a0 52 11 80 push $0x801152a0 -80102964: e8 30 15 00 00 call 80103e99 +80102852: 83 ec 0c sub $0xc,%esp +80102855: 68 a0 26 11 80 push $0x801126a0 +8010285a: e8 a2 14 00 00 call 80103d01 log.committing = 0; -80102969: c7 05 e0 52 11 80 00 movl $0x0,0x801152e0 -80102970: 00 00 00 +8010285f: c7 05 e0 26 11 80 00 movl $0x0,0x801126e0 +80102866: 00 00 00 wakeup(&log); -80102973: c7 04 24 a0 52 11 80 movl $0x801152a0,(%esp) -8010297a: e8 bb 10 00 00 call 80103a3a +80102869: c7 04 24 a0 26 11 80 movl $0x801126a0,(%esp) +80102870: e8 62 10 00 00 call 801038d7 release(&log.lock); -8010297f: c7 04 24 a0 52 11 80 movl $0x801152a0,(%esp) -80102986: e8 79 15 00 00 call 80103f04 -8010298b: 83 c4 10 add $0x10,%esp -} -8010298e: 8d 65 f4 lea -0xc(%ebp),%esp -80102991: 5b pop %ebx -80102992: 5e pop %esi -80102993: 5f pop %edi -80102994: 5d pop %ebp -80102995: c3 ret +80102875: c7 04 24 a0 26 11 80 movl $0x801126a0,(%esp) +8010287c: e8 e7 14 00 00 call 80103d68 +80102881: 83 c4 10 add $0x10,%esp +} +80102884: eb 29 jmp 801028af panic("log.committing"); -80102996: 83 ec 0c sub $0xc,%esp -80102999: 68 24 7d 10 80 push $0x80107d24 -8010299e: e8 b5 d9 ff ff call 80100358 +80102886: 83 ec 0c sub $0xc,%esp +80102889: 68 44 7a 10 80 push $0x80107a44 +8010288e: e8 ad da ff ff call 80100340 wakeup(&log); -801029a3: 83 ec 0c sub $0xc,%esp -801029a6: 68 a0 52 11 80 push $0x801152a0 -801029ab: e8 8a 10 00 00 call 80103a3a +80102893: 83 ec 0c sub $0xc,%esp +80102896: 68 a0 26 11 80 push $0x801126a0 +8010289b: e8 37 10 00 00 call 801038d7 release(&log.lock); -801029b0: c7 04 24 a0 52 11 80 movl $0x801152a0,(%esp) -801029b7: e8 48 15 00 00 call 80103f04 -801029bc: 83 c4 10 add $0x10,%esp -801029bf: eb cd jmp 8010298e +801028a0: c7 04 24 a0 26 11 80 movl $0x801126a0,(%esp) +801028a7: e8 bc 14 00 00 call 80103d68 +801028ac: 83 c4 10 add $0x10,%esp +} +801028af: 8d 65 f4 lea -0xc(%ebp),%esp +801028b2: 5b pop %ebx +801028b3: 5e pop %esi +801028b4: 5f pop %edi +801028b5: 5d pop %ebp +801028b6: c3 ret struct buf *to = bread(log.dev, log.start+tail+1); // log block -801029c1: 83 ec 08 sub $0x8,%esp -801029c4: 89 d8 mov %ebx,%eax -801029c6: 03 47 34 add 0x34(%edi),%eax -801029c9: 83 c0 01 add $0x1,%eax -801029cc: 50 push %eax -801029cd: ff 77 44 pushl 0x44(%edi) -801029d0: e8 d9 d6 ff ff call 801000ae -801029d5: 89 c6 mov %eax,%esi +801028b7: 83 ec 08 sub $0x8,%esp +801028ba: 89 d8 mov %ebx,%eax +801028bc: 03 47 34 add 0x34(%edi),%eax +801028bf: 83 c0 01 add $0x1,%eax +801028c2: 50 push %eax +801028c3: ff 77 44 push 0x44(%edi) +801028c6: e8 df d7 ff ff call 801000aa +801028cb: 89 c6 mov %eax,%esi struct buf *from = bread(log.dev, log.lh.block[tail]); // cache block -801029d7: 83 c4 08 add $0x8,%esp -801029da: ff 34 9d ec 52 11 80 pushl -0x7feead14(,%ebx,4) -801029e1: ff 77 44 pushl 0x44(%edi) -801029e4: e8 c5 d6 ff ff call 801000ae +801028cd: 83 c4 08 add $0x8,%esp +801028d0: ff 34 9d ec 26 11 80 push -0x7feed914(,%ebx,4) +801028d7: ff 77 44 push 0x44(%edi) +801028da: e8 cb d7 ff ff call 801000aa memmove(to->data, from->data, BSIZE); -801029e9: 83 c4 0c add $0xc,%esp -801029ec: 68 00 02 00 00 push $0x200 -801029f1: 89 45 e4 mov %eax,-0x1c(%ebp) -801029f4: 83 c0 5c add $0x5c,%eax -801029f7: 50 push %eax -801029f8: 8d 46 5c lea 0x5c(%esi),%eax -801029fb: 50 push %eax -801029fc: e8 db 15 00 00 call 80103fdc +801028df: 83 c4 0c add $0xc,%esp +801028e2: 68 00 02 00 00 push $0x200 +801028e7: 89 45 e4 mov %eax,-0x1c(%ebp) +801028ea: 83 c0 5c add $0x5c,%eax +801028ed: 50 push %eax +801028ee: 8d 46 5c lea 0x5c(%esi),%eax +801028f1: 50 push %eax +801028f2: e8 3d 15 00 00 call 80103e34 bwrite(to); // write the log -80102a01: 89 34 24 mov %esi,(%esp) -80102a04: e8 85 d7 ff ff call 8010018e +801028f7: 89 34 24 mov %esi,(%esp) +801028fa: e8 87 d8 ff ff call 80100186 brelse(from); -80102a09: 83 c4 04 add $0x4,%esp -80102a0c: ff 75 e4 pushl -0x1c(%ebp) -80102a0f: e8 b9 d7 ff ff call 801001cd +801028ff: 83 c4 04 add $0x4,%esp +80102902: ff 75 e4 push -0x1c(%ebp) +80102905: e8 b7 d8 ff ff call 801001c1 brelse(to); -80102a14: 89 34 24 mov %esi,(%esp) -80102a17: e8 b1 d7 ff ff call 801001cd +8010290a: 89 34 24 mov %esi,(%esp) +8010290d: e8 af d8 ff ff call 801001c1 for (tail = 0; tail < log.lh.n; tail++) { -80102a1c: 83 c3 01 add $0x1,%ebx -80102a1f: 83 c4 10 add $0x10,%esp -80102a22: 3b 5f 48 cmp 0x48(%edi),%ebx -80102a25: 7c 9a jl 801029c1 +80102912: 83 c3 01 add $0x1,%ebx +80102915: 83 c4 10 add $0x10,%esp +80102918: 3b 5f 48 cmp 0x48(%edi),%ebx +8010291b: 7c 9a jl 801028b7 write_log(); // Write modified blocks from cache to log write_head(); // Write header to disk -- the real commit -80102a27: e8 63 fd ff ff call 8010278f +8010291d: e8 6f fd ff ff call 80102691 install_trans(); // Now install writes to home locations -80102a2c: e8 cc fc ff ff call 801026fd +80102922: e8 d8 fc ff ff call 801025ff log.lh.n = 0; -80102a31: c7 05 e8 52 11 80 00 movl $0x0,0x801152e8 -80102a38: 00 00 00 +80102927: c7 05 e8 26 11 80 00 movl $0x0,0x801126e8 +8010292e: 00 00 00 write_head(); // Erase the transaction from the log -80102a3b: e8 4f fd ff ff call 8010278f -80102a40: e9 17 ff ff ff jmp 8010295c +80102931: e8 5b fd ff ff call 80102691 +80102936: e9 17 ff ff ff jmp 80102852 -80102a45 : +8010293b : // modify bp->data[] // log_write(bp) // brelse(bp) void log_write(struct buf *b) { -80102a45: f3 0f 1e fb endbr32 -80102a49: 55 push %ebp -80102a4a: 89 e5 mov %esp,%ebp -80102a4c: 53 push %ebx -80102a4d: 83 ec 04 sub $0x4,%esp -80102a50: 8b 5d 08 mov 0x8(%ebp),%ebx +8010293b: 55 push %ebp +8010293c: 89 e5 mov %esp,%ebp +8010293e: 53 push %ebx +8010293f: 83 ec 04 sub $0x4,%esp +80102942: 8b 5d 08 mov 0x8(%ebp),%ebx int i; if (log.lh.n >= LOGSIZE || log.lh.n >= log.size - 1) -80102a53: 8b 15 e8 52 11 80 mov 0x801152e8,%edx -80102a59: 83 fa 1d cmp $0x1d,%edx -80102a5c: 7f 5c jg 80102aba -80102a5e: a1 d8 52 11 80 mov 0x801152d8,%eax -80102a63: 83 e8 01 sub $0x1,%eax -80102a66: 39 c2 cmp %eax,%edx -80102a68: 7d 50 jge 80102aba +80102945: 8b 15 e8 26 11 80 mov 0x801126e8,%edx +8010294b: 83 fa 1d cmp $0x1d,%edx +8010294e: 7f 5c jg 801029ac +80102950: a1 d8 26 11 80 mov 0x801126d8,%eax +80102955: 83 e8 01 sub $0x1,%eax +80102958: 39 c2 cmp %eax,%edx +8010295a: 7d 50 jge 801029ac panic("too big a transaction"); if (log.outstanding < 1) -80102a6a: 83 3d dc 52 11 80 00 cmpl $0x0,0x801152dc -80102a71: 7e 54 jle 80102ac7 +8010295c: 83 3d dc 26 11 80 00 cmpl $0x0,0x801126dc +80102963: 7e 54 jle 801029b9 panic("log_write outside of trans"); acquire(&log.lock); -80102a73: 83 ec 0c sub $0xc,%esp -80102a76: 68 a0 52 11 80 push $0x801152a0 -80102a7b: e8 19 14 00 00 call 80103e99 +80102965: 83 ec 0c sub $0xc,%esp +80102968: 68 a0 26 11 80 push $0x801126a0 +8010296d: e8 8f 13 00 00 call 80103d01 for (i = 0; i < log.lh.n; i++) { -80102a80: 8b 15 e8 52 11 80 mov 0x801152e8,%edx -80102a86: 83 c4 10 add $0x10,%esp -80102a89: 85 d2 test %edx,%edx -80102a8b: 7e 47 jle 80102ad4 +80102972: 8b 15 e8 26 11 80 mov 0x801126e8,%edx +80102978: 83 c4 10 add $0x10,%esp +8010297b: 85 d2 test %edx,%edx +8010297d: 7e 47 jle 801029c6 if (log.lh.block[i] == b->blockno) // log absorbtion -80102a8d: 8b 4b 08 mov 0x8(%ebx),%ecx +8010297f: 8b 4b 08 mov 0x8(%ebx),%ecx for (i = 0; i < log.lh.n; i++) { -80102a90: b8 00 00 00 00 mov $0x0,%eax +80102982: b8 00 00 00 00 mov $0x0,%eax if (log.lh.block[i] == b->blockno) // log absorbtion -80102a95: 39 0c 85 ec 52 11 80 cmp %ecx,-0x7feead14(,%eax,4) -80102a9c: 74 3b je 80102ad9 +80102987: 39 0c 85 ec 26 11 80 cmp %ecx,-0x7feed914(,%eax,4) +8010298e: 74 3b je 801029cb for (i = 0; i < log.lh.n; i++) { -80102a9e: 83 c0 01 add $0x1,%eax -80102aa1: 39 d0 cmp %edx,%eax -80102aa3: 75 f0 jne 80102a95 +80102990: 83 c0 01 add $0x1,%eax +80102993: 39 d0 cmp %edx,%eax +80102995: 75 f0 jne 80102987 break; } log.lh.block[i] = b->blockno; -80102aa5: 8b 43 08 mov 0x8(%ebx),%eax -80102aa8: 89 04 95 ec 52 11 80 mov %eax,-0x7feead14(,%edx,4) +80102997: 8b 43 08 mov 0x8(%ebx),%eax +8010299a: 89 04 95 ec 26 11 80 mov %eax,-0x7feed914(,%edx,4) if (i == log.lh.n) log.lh.n++; -80102aaf: 83 c2 01 add $0x1,%edx -80102ab2: 89 15 e8 52 11 80 mov %edx,0x801152e8 -80102ab8: eb 2d jmp 80102ae7 +801029a1: 83 c2 01 add $0x1,%edx +801029a4: 89 15 e8 26 11 80 mov %edx,0x801126e8 +801029aa: eb 2d jmp 801029d9 panic("too big a transaction"); -80102aba: 83 ec 0c sub $0xc,%esp -80102abd: 68 33 7d 10 80 push $0x80107d33 -80102ac2: e8 91 d8 ff ff call 80100358 +801029ac: 83 ec 0c sub $0xc,%esp +801029af: 68 53 7a 10 80 push $0x80107a53 +801029b4: e8 87 d9 ff ff call 80100340 panic("log_write outside of trans"); -80102ac7: 83 ec 0c sub $0xc,%esp -80102aca: 68 49 7d 10 80 push $0x80107d49 -80102acf: e8 84 d8 ff ff call 80100358 +801029b9: 83 ec 0c sub $0xc,%esp +801029bc: 68 69 7a 10 80 push $0x80107a69 +801029c1: e8 7a d9 ff ff call 80100340 for (i = 0; i < log.lh.n; i++) { -80102ad4: b8 00 00 00 00 mov $0x0,%eax +801029c6: b8 00 00 00 00 mov $0x0,%eax log.lh.block[i] = b->blockno; -80102ad9: 8b 4b 08 mov 0x8(%ebx),%ecx -80102adc: 89 0c 85 ec 52 11 80 mov %ecx,-0x7feead14(,%eax,4) +801029cb: 8b 4b 08 mov 0x8(%ebx),%ecx +801029ce: 89 0c 85 ec 26 11 80 mov %ecx,-0x7feed914(,%eax,4) if (i == log.lh.n) -80102ae3: 39 c2 cmp %eax,%edx -80102ae5: 74 18 je 80102aff +801029d5: 39 c2 cmp %eax,%edx +801029d7: 74 15 je 801029ee b->flags |= B_DIRTY; // prevent eviction -80102ae7: 83 0b 04 orl $0x4,(%ebx) +801029d9: 83 0b 04 orl $0x4,(%ebx) release(&log.lock); -80102aea: 83 ec 0c sub $0xc,%esp -80102aed: 68 a0 52 11 80 push $0x801152a0 -80102af2: e8 0d 14 00 00 call 80103f04 +801029dc: 83 ec 0c sub $0xc,%esp +801029df: 68 a0 26 11 80 push $0x801126a0 +801029e4: e8 7f 13 00 00 call 80103d68 } -80102af7: 83 c4 10 add $0x10,%esp -80102afa: 8b 5d fc mov -0x4(%ebp),%ebx -80102afd: c9 leave -80102afe: c3 ret -80102aff: 89 c2 mov %eax,%edx -80102b01: eb ac jmp 80102aaf +801029e9: 8b 5d fc mov -0x4(%ebp),%ebx +801029ec: c9 leave +801029ed: c3 ret +801029ee: 89 c2 mov %eax,%edx +801029f0: eb af jmp 801029a1 -80102b03 : +801029f2 : } // Common CPU setup code. static void mpmain(void) { -80102b03: 55 push %ebp -80102b04: 89 e5 mov %esp,%ebp -80102b06: 53 push %ebx -80102b07: 83 ec 04 sub $0x4,%esp +801029f2: 55 push %ebp +801029f3: 89 e5 mov %esp,%ebp +801029f5: 53 push %ebx +801029f6: 83 ec 04 sub $0x4,%esp cprintf("cpu%d: starting %d\n", cpuid(), cpuid()); -80102b0a: e8 bc 08 00 00 call 801033cb -80102b0f: 89 c3 mov %eax,%ebx -80102b11: e8 b5 08 00 00 call 801033cb -80102b16: 83 ec 04 sub $0x4,%esp -80102b19: 53 push %ebx -80102b1a: 50 push %eax -80102b1b: 68 64 7d 10 80 push $0x80107d64 -80102b20: e8 07 db ff ff call 8010062c +801029f9: e8 97 08 00 00 call 80103295 +801029fe: 89 c3 mov %eax,%ebx +80102a00: e8 90 08 00 00 call 80103295 +80102a05: 83 ec 04 sub $0x4,%esp +80102a08: 53 push %ebx +80102a09: 50 push %eax +80102a0a: 68 84 7a 10 80 push $0x80107a84 +80102a0f: e8 ed db ff ff call 80100601 idtinit(); // load idt register -80102b25: e8 d7 25 00 00 call 80105101 +80102a14: e8 b2 24 00 00 call 80104ecb xchg(&(mycpu()->started), 1); // tell startothers() we're up -80102b2a: e8 37 08 00 00 call 80103366 -80102b2f: 89 c2 mov %eax,%edx +80102a19: e8 18 08 00 00 call 80103236 +80102a1e: 89 c2 mov %eax,%edx xchg(volatile uint *addr, uint newval) { uint result; // The + in "+m" denotes a read-modify-write operand. asm volatile("lock; xchgl %0, %1" : -80102b31: b8 01 00 00 00 mov $0x1,%eax -80102b36: f0 87 82 a0 00 00 00 lock xchg %eax,0xa0(%edx) +80102a20: b8 01 00 00 00 mov $0x1,%eax +80102a25: f0 87 82 a0 00 00 00 lock xchg %eax,0xa0(%edx) scheduler(); // start running processes -80102b3d: e8 35 0b 00 00 call 80103677 +80102a2c: e8 fb 0a 00 00 call 8010352c -80102b42 : +80102a31 : { -80102b42: f3 0f 1e fb endbr32 -80102b46: 55 push %ebp -80102b47: 89 e5 mov %esp,%ebp -80102b49: 83 ec 08 sub $0x8,%esp +80102a31: 55 push %ebp +80102a32: 89 e5 mov %esp,%ebp +80102a34: 83 ec 08 sub $0x8,%esp switchkvm(); -80102b4c: e8 80 35 00 00 call 801060d1 +80102a37: e8 45 34 00 00 call 80105e81 seginit(); -80102b51: e8 90 34 00 00 call 80105fe6 +80102a3c: e8 59 33 00 00 call 80105d9a lapicinit(); -80102b56: e8 98 f8 ff ff call 801023f3 +80102a41: e8 c7 f8 ff ff call 8010230d mpmain(); -80102b5b: e8 a3 ff ff ff call 80102b03 - -80102b60

: -{ -80102b60: f3 0f 1e fb endbr32 -80102b64: 8d 4c 24 04 lea 0x4(%esp),%ecx -80102b68: 83 e4 f0 and $0xfffffff0,%esp -80102b6b: ff 71 fc pushl -0x4(%ecx) -80102b6e: 55 push %ebp -80102b6f: 89 e5 mov %esp,%ebp -80102b71: 53 push %ebx -80102b72: 51 push %ecx +80102a46: e8 a7 ff ff ff call 801029f2 + +80102a4b
: +{ +80102a4b: 8d 4c 24 04 lea 0x4(%esp),%ecx +80102a4f: 83 e4 f0 and $0xfffffff0,%esp +80102a52: ff 71 fc push -0x4(%ecx) +80102a55: 55 push %ebp +80102a56: 89 e5 mov %esp,%ebp +80102a58: 53 push %ebx +80102a59: 51 push %ecx kinit1(end, P2V(4*1024*1024)); // phys page allocator -80102b73: 83 ec 08 sub $0x8,%esp -80102b76: 68 00 00 40 80 push $0x80400000 -80102b7b: 68 3c 79 11 80 push $0x8011793c -80102b80: e8 3a f6 ff ff call 801021bf +80102a5a: 83 ec 08 sub $0x8,%esp +80102a5d: 68 00 00 40 80 push $0x80400000 +80102a62: 68 60 79 11 80 push $0x80117960 +80102a67: e8 8c f6 ff ff call 801020f8 kvmalloc(); // kernel page table -80102b85: e8 e6 39 00 00 call 80106570 +80102a6c: e8 8e 38 00 00 call 801062ff mpinit(); // detect other processors -80102b8a: e8 55 01 00 00 call 80102ce4 +80102a71: e8 5d 01 00 00 call 80102bd3 lapicinit(); // interrupt controller -80102b8f: e8 5f f8 ff ff call 801023f3 +80102a76: e8 92 f8 ff ff call 8010230d seginit(); // segment descriptors -80102b94: e8 4d 34 00 00 call 80105fe6 +80102a7b: e8 1a 33 00 00 call 80105d9a picinit(); // disable pic -80102b99: e8 02 03 00 00 call 80102ea0 +80102a80: e8 0b 03 00 00 call 80102d90 ioapicinit(); // another interrupt controller -80102b9e: e8 3e f4 ff ff call 80101fe1 +80102a85: e8 a0 f4 ff ff call 80101f2a consoleinit(); // console hardware -80102ba3: e8 7d dd ff ff call 80100925 +80102a8a: e8 63 de ff ff call 801008f2 uartinit(); // serial port -80102ba8: e8 20 28 00 00 call 801053cd +80102a8f: e8 f2 26 00 00 call 80105186 pinit(); // process table -80102bad: e8 82 07 00 00 call 80103334 +80102a94: e8 6f 07 00 00 call 80103208 tvinit(); // trap vectors -80102bb2: e8 bb 24 00 00 call 80105072 +80102a99: e8 a2 23 00 00 call 80104e40 binit(); // buffer cache -80102bb7: e8 78 d4 ff ff call 80100034 +80102a9e: e8 91 d5 ff ff call 80100034 fileinit(); // file table -80102bbc: e8 f6 e0 ff ff call 80100cb7 +80102aa3: e8 d3 e1 ff ff call 80100c7b ideinit(); // disk -80102bc1: e8 15 f2 ff ff call 80101ddb +80102aa8: e8 83 f2 ff ff call 80101d30 // 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); -80102bc6: 83 c4 0c add $0xc,%esp -80102bc9: 68 8a 00 00 00 push $0x8a -80102bce: 68 8c b4 10 80 push $0x8010b48c -80102bd3: 68 00 70 00 80 push $0x80007000 -80102bd8: e8 ff 13 00 00 call 80103fdc +80102aad: 83 c4 0c add $0xc,%esp +80102ab0: 68 8a 00 00 00 push $0x8a +80102ab5: 68 8c b4 10 80 push $0x8010b48c +80102aba: 68 00 70 00 80 push $0x80007000 +80102abf: e8 70 13 00 00 call 80103e34 for(c = cpus; c < cpus+ncpu; c++){ -80102bdd: 69 05 20 59 11 80 b0 imul $0xb0,0x80115920,%eax -80102be4: 00 00 00 -80102be7: 05 a0 53 11 80 add $0x801153a0,%eax -80102bec: 83 c4 10 add $0x10,%esp -80102bef: 3d a0 53 11 80 cmp $0x801153a0,%eax -80102bf4: 76 6c jbe 80102c62 -80102bf6: bb a0 53 11 80 mov $0x801153a0,%ebx -80102bfb: eb 5a jmp 80102c57 +80102ac4: 69 05 84 27 11 80 b0 imul $0xb0,0x80112784,%eax +80102acb: 00 00 00 +80102ace: 05 a0 27 11 80 add $0x801127a0,%eax +80102ad3: 83 c4 10 add $0x10,%esp +80102ad6: 3d a0 27 11 80 cmp $0x801127a0,%eax +80102adb: 76 6c jbe 80102b49 +80102add: bb a0 27 11 80 mov $0x801127a0,%ebx +80102ae2: eb 19 jmp 80102afd +80102ae4: 81 c3 b0 00 00 00 add $0xb0,%ebx +80102aea: 69 05 84 27 11 80 b0 imul $0xb0,0x80112784,%eax +80102af1: 00 00 00 +80102af4: 05 a0 27 11 80 add $0x801127a0,%eax +80102af9: 39 c3 cmp %eax,%ebx +80102afb: 73 4c jae 80102b49 + if(c == mycpu()) // We've started already. +80102afd: e8 34 07 00 00 call 80103236 +80102b02: 39 c3 cmp %eax,%ebx +80102b04: 74 de je 80102ae4 continue; // 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(); -80102bfd: e8 17 f6 ff ff call 80102219 +80102b06: e8 3f f6 ff ff call 8010214a *(void**)(code-4) = stack + KSTACKSIZE; -80102c02: 05 00 10 00 00 add $0x1000,%eax -80102c07: a3 fc 6f 00 80 mov %eax,0x80006ffc +80102b0b: 05 00 10 00 00 add $0x1000,%eax +80102b10: a3 fc 6f 00 80 mov %eax,0x80006ffc *(void(**)(void))(code-8) = mpenter; -80102c0c: c7 05 f8 6f 00 80 42 movl $0x80102b42,0x80006ff8 -80102c13: 2b 10 80 +80102b15: c7 05 f8 6f 00 80 31 movl $0x80102a31,0x80006ff8 +80102b1c: 2a 10 80 *(int**)(code-12) = (void *) V2P(entrypgdir); -80102c16: c7 05 f4 6f 00 80 00 movl $0x10a000,0x80006ff4 -80102c1d: a0 10 00 +80102b1f: c7 05 f4 6f 00 80 00 movl $0x10a000,0x80006ff4 +80102b26: a0 10 00 lapicstartap(c->apicid, V2P(code)); -80102c20: 83 ec 08 sub $0x8,%esp -80102c23: 68 00 70 00 00 push $0x7000 -80102c28: 0f b6 03 movzbl (%ebx),%eax -80102c2b: 50 push %eax -80102c2c: e8 17 f9 ff ff call 80102548 +80102b29: 83 ec 08 sub $0x8,%esp +80102b2c: 68 00 70 00 00 push $0x7000 +80102b31: 0f b6 03 movzbl (%ebx),%eax +80102b34: 50 push %eax +80102b35: e8 18 f9 ff ff call 80102452 // wait for cpu to finish mpmain() while(c->started == 0) -80102c31: 83 c4 10 add $0x10,%esp -80102c34: 8b 83 a0 00 00 00 mov 0xa0(%ebx),%eax -80102c3a: 85 c0 test %eax,%eax -80102c3c: 74 f6 je 80102c34 - for(c = cpus; c < cpus+ncpu; c++){ -80102c3e: 81 c3 b0 00 00 00 add $0xb0,%ebx -80102c44: 69 05 20 59 11 80 b0 imul $0xb0,0x80115920,%eax -80102c4b: 00 00 00 -80102c4e: 05 a0 53 11 80 add $0x801153a0,%eax -80102c53: 39 c3 cmp %eax,%ebx -80102c55: 73 0b jae 80102c62 - if(c == mycpu()) // We've started already. -80102c57: e8 0a 07 00 00 call 80103366 -80102c5c: 39 c3 cmp %eax,%ebx -80102c5e: 74 de je 80102c3e -80102c60: eb 9b jmp 80102bfd +80102b3a: 83 c4 10 add $0x10,%esp +80102b3d: 8b 83 a0 00 00 00 mov 0xa0(%ebx),%eax +80102b43: 85 c0 test %eax,%eax +80102b45: 74 f6 je 80102b3d +80102b47: eb 9b jmp 80102ae4 kinit2(P2V(4*1024*1024), P2V(PHYSTOP)); // must come after startothers() -80102c62: 83 ec 08 sub $0x8,%esp -80102c65: 68 00 00 00 8e push $0x8e000000 -80102c6a: 68 00 00 40 80 push $0x80400000 -80102c6f: e8 81 f5 ff ff call 801021f5 +80102b49: 83 ec 08 sub $0x8,%esp +80102b4c: 68 00 00 00 8e push $0x8e000000 +80102b51: 68 00 00 40 80 push $0x80400000 +80102b56: e8 cf f5 ff ff call 8010212a slabinit(); -80102c74: e8 c3 3e 00 00 call 80106b3c +80102b5b: e8 13 3d 00 00 call 80106873 userinit(); // first user process -80102c79: e8 94 07 00 00 call 80103412 +80102b60: e8 6e 07 00 00 call 801032d3 mpmain(); // finish this processor's setup -80102c7e: e8 80 fe ff ff call 80102b03 +80102b65: e8 88 fe ff ff call 801029f2 -80102c83 : +80102b6a : } // Look for an MP structure in the len bytes at addr. static struct mp* mpsearch1(uint a, int len) { -80102c83: 55 push %ebp -80102c84: 89 e5 mov %esp,%ebp -80102c86: 57 push %edi -80102c87: 56 push %esi -80102c88: 53 push %ebx -80102c89: 83 ec 0c sub $0xc,%esp +80102b6a: 55 push %ebp +80102b6b: 89 e5 mov %esp,%ebp +80102b6d: 57 push %edi +80102b6e: 56 push %esi +80102b6f: 53 push %ebx +80102b70: 83 ec 0c sub $0xc,%esp uchar *e, *p, *addr; addr = P2V(a); -80102c8c: 8d 98 00 00 00 80 lea -0x80000000(%eax),%ebx +80102b73: 8d b0 00 00 00 80 lea -0x80000000(%eax),%esi e = addr+len; -80102c92: 8d 34 13 lea (%ebx,%edx,1),%esi +80102b79: 8d 3c 16 lea (%esi,%edx,1),%edi for(p = addr; p < e; p += sizeof(struct mp)) -80102c95: 39 f3 cmp %esi,%ebx -80102c97: 72 12 jb 80102cab - if(memcmp(p, "_MP_", 4) == 0 && sum(p, sizeof(struct mp)) == 0) - return (struct mp*)p; - return 0; -80102c99: bb 00 00 00 00 mov $0x0,%ebx -80102c9e: eb 3a jmp 80102cda +80102b7c: 39 fe cmp %edi,%esi +80102b7e: 73 4c jae 80102bcc +80102b80: 8d 98 10 00 00 80 lea -0x7ffffff0(%eax),%ebx +80102b86: eb 0e jmp 80102b96 if(memcmp(p, "_MP_", 4) == 0 && sum(p, sizeof(struct mp)) == 0) -80102ca0: 84 c0 test %al,%al -80102ca2: 74 36 je 80102cda +80102b88: 84 c0 test %al,%al +80102b8a: 74 36 je 80102bc2 for(p = addr; p < e; p += sizeof(struct mp)) -80102ca4: 83 c3 10 add $0x10,%ebx -80102ca7: 39 de cmp %ebx,%esi -80102ca9: 76 2a jbe 80102cd5 +80102b8c: 83 c6 10 add $0x10,%esi +80102b8f: 83 c3 10 add $0x10,%ebx +80102b92: 39 f7 cmp %esi,%edi +80102b94: 76 27 jbe 80102bbd if(memcmp(p, "_MP_", 4) == 0 && sum(p, sizeof(struct mp)) == 0) -80102cab: 83 ec 04 sub $0x4,%esp -80102cae: 6a 04 push $0x4 -80102cb0: 68 78 7d 10 80 push $0x80107d78 -80102cb5: 53 push %ebx -80102cb6: e8 db 12 00 00 call 80103f96 -80102cbb: 83 c4 10 add $0x10,%esp -80102cbe: 85 c0 test %eax,%eax -80102cc0: 75 e2 jne 80102ca4 -80102cc2: 89 da mov %ebx,%edx - for(i=0; i +80102ba6: 83 c4 10 add $0x10,%esp +80102ba9: 85 c0 test %eax,%eax +80102bab: 75 df jne 80102b8c +80102bad: 89 f2 mov %esi,%edx sum += addr[i]; -80102cc7: 0f b6 0a movzbl (%edx),%ecx -80102cca: 01 c8 add %ecx,%eax +80102baf: 0f b6 0a movzbl (%edx),%ecx +80102bb2: 01 c8 add %ecx,%eax for(i=0; i -80102cd3: eb cb jmp 80102ca0 +80102bb4: 83 c2 01 add $0x1,%edx +80102bb7: 39 da cmp %ebx,%edx +80102bb9: 75 f4 jne 80102baf +80102bbb: eb cb jmp 80102b88 + return (struct mp*)p; return 0; -80102cd5: bb 00 00 00 00 mov $0x0,%ebx -} -80102cda: 89 d8 mov %ebx,%eax -80102cdc: 8d 65 f4 lea -0xc(%ebp),%esp -80102cdf: 5b pop %ebx -80102ce0: 5e pop %esi -80102ce1: 5f pop %edi -80102ce2: 5d pop %ebp -80102ce3: c3 ret +80102bbd: be 00 00 00 00 mov $0x0,%esi +} +80102bc2: 89 f0 mov %esi,%eax +80102bc4: 8d 65 f4 lea -0xc(%ebp),%esp +80102bc7: 5b pop %ebx +80102bc8: 5e pop %esi +80102bc9: 5f pop %edi +80102bca: 5d pop %ebp +80102bcb: c3 ret + return 0; +80102bcc: be 00 00 00 00 mov $0x0,%esi +80102bd1: eb ef jmp 80102bc2 -80102ce4 : +80102bd3 : return conf; } void mpinit(void) { -80102ce4: f3 0f 1e fb endbr32 -80102ce8: 55 push %ebp -80102ce9: 89 e5 mov %esp,%ebp -80102ceb: 57 push %edi -80102cec: 56 push %esi -80102ced: 53 push %ebx -80102cee: 83 ec 1c sub $0x1c,%esp +80102bd3: 55 push %ebp +80102bd4: 89 e5 mov %esp,%ebp +80102bd6: 57 push %edi +80102bd7: 56 push %esi +80102bd8: 53 push %ebx +80102bd9: 83 ec 1c sub $0x1c,%esp if((p = ((bda[0x0F]<<8)| bda[0x0E]) << 4)){ -80102cf1: 0f b6 05 0f 04 00 80 movzbl 0x8000040f,%eax -80102cf8: c1 e0 08 shl $0x8,%eax -80102cfb: 0f b6 15 0e 04 00 80 movzbl 0x8000040e,%edx -80102d02: 09 d0 or %edx,%eax -80102d04: c1 e0 04 shl $0x4,%eax -80102d07: 0f 84 c0 00 00 00 je 80102dcd +80102bdc: 0f b6 05 0f 04 00 80 movzbl 0x8000040f,%eax +80102be3: c1 e0 08 shl $0x8,%eax +80102be6: 0f b6 15 0e 04 00 80 movzbl 0x8000040e,%edx +80102bed: 09 d0 or %edx,%eax +80102bef: c1 e0 04 shl $0x4,%eax +80102bf2: 0f 84 c5 00 00 00 je 80102cbd if((mp = mpsearch1(p, 1024))) -80102d0d: ba 00 04 00 00 mov $0x400,%edx -80102d12: e8 6c ff ff ff call 80102c83 -80102d17: 89 45 e0 mov %eax,-0x20(%ebp) -80102d1a: 85 c0 test %eax,%eax -80102d1c: 75 1a jne 80102d38 +80102bf8: ba 00 04 00 00 mov $0x400,%edx +80102bfd: e8 68 ff ff ff call 80102b6a +80102c02: 89 45 e0 mov %eax,-0x20(%ebp) +80102c05: 85 c0 test %eax,%eax +80102c07: 75 1a jne 80102c23 return mpsearch1(0xF0000, 0x10000); -80102d1e: ba 00 00 01 00 mov $0x10000,%edx -80102d23: b8 00 00 0f 00 mov $0xf0000,%eax -80102d28: e8 56 ff ff ff call 80102c83 -80102d2d: 89 45 e0 mov %eax,-0x20(%ebp) +80102c09: ba 00 00 01 00 mov $0x10000,%edx +80102c0e: b8 00 00 0f 00 mov $0xf0000,%eax +80102c13: e8 52 ff ff ff call 80102b6a +80102c18: 89 45 e0 mov %eax,-0x20(%ebp) if((mp = mpsearch()) == 0 || mp->physaddr == 0) -80102d30: 85 c0 test %eax,%eax -80102d32: 0f 84 5b 01 00 00 je 80102e93 -80102d38: 8b 45 e0 mov -0x20(%ebp),%eax -80102d3b: 8b 70 04 mov 0x4(%eax),%esi -80102d3e: 85 f6 test %esi,%esi -80102d40: 0f 84 4d 01 00 00 je 80102e93 +80102c1b: 85 c0 test %eax,%eax +80102c1d: 0f 84 60 01 00 00 je 80102d83 +80102c23: 8b 45 e0 mov -0x20(%ebp),%eax +80102c26: 8b 70 04 mov 0x4(%eax),%esi +80102c29: 85 f6 test %esi,%esi +80102c2b: 0f 84 52 01 00 00 je 80102d83 conf = (struct mpconf*) P2V((uint) mp->physaddr); -80102d46: 8d be 00 00 00 80 lea -0x80000000(%esi),%edi +80102c31: 8d 86 00 00 00 80 lea -0x80000000(%esi),%eax +80102c37: 89 45 e4 mov %eax,-0x1c(%ebp) if(memcmp(conf, "PCMP", 4) != 0) -80102d4c: 83 ec 04 sub $0x4,%esp -80102d4f: 6a 04 push $0x4 -80102d51: 68 7d 7d 10 80 push $0x80107d7d -80102d56: 57 push %edi -80102d57: e8 3a 12 00 00 call 80103f96 -80102d5c: 89 45 e4 mov %eax,-0x1c(%ebp) -80102d5f: 83 c4 10 add $0x10,%esp -80102d62: 85 c0 test %eax,%eax -80102d64: 0f 85 29 01 00 00 jne 80102e93 +80102c3a: 83 ec 04 sub $0x4,%esp +80102c3d: 6a 04 push $0x4 +80102c3f: 68 9d 7a 10 80 push $0x80107a9d +80102c44: 50 push %eax +80102c45: e8 a8 11 00 00 call 80103df2 +80102c4a: 89 c3 mov %eax,%ebx +80102c4c: 83 c4 10 add $0x10,%esp +80102c4f: 85 c0 test %eax,%eax +80102c51: 0f 85 2c 01 00 00 jne 80102d83 if(conf->version != 1 && conf->version != 4) -80102d6a: 0f b6 86 06 00 00 80 movzbl -0x7ffffffa(%esi),%eax -80102d71: 3c 01 cmp $0x1,%al -80102d73: 74 08 je 80102d7d -80102d75: 3c 04 cmp $0x4,%al -80102d77: 0f 85 16 01 00 00 jne 80102e93 +80102c57: 0f b6 86 06 00 00 80 movzbl -0x7ffffffa(%esi),%eax +80102c5e: 3c 01 cmp $0x1,%al +80102c60: 74 08 je 80102c6a +80102c62: 3c 04 cmp $0x4,%al +80102c64: 0f 85 19 01 00 00 jne 80102d83 if(sum((uchar*)conf, conf->length) != 0) -80102d7d: 0f b7 96 04 00 00 80 movzwl -0x7ffffffc(%esi),%edx +80102c6a: 0f b7 96 04 00 00 80 movzwl -0x7ffffffc(%esi),%edx for(i=0; i -80102d89: 89 f0 mov %esi,%eax -80102d8b: 0f b7 d2 movzwl %dx,%edx -80102d8e: 8d 1c 32 lea (%edx,%esi,1),%ebx +80102c71: 66 85 d2 test %dx,%dx +80102c74: 74 22 je 80102c98 +80102c76: 89 f0 mov %esi,%eax +80102c78: 0f b7 d2 movzwl %dx,%edx +80102c7b: 8d 3c 32 lea (%edx,%esi,1),%edi sum = 0; -80102d91: 8b 55 e4 mov -0x1c(%ebp),%edx +80102c7e: 89 da mov %ebx,%edx sum += addr[i]; -80102d94: 0f b6 88 00 00 00 80 movzbl -0x80000000(%eax),%ecx -80102d9b: 01 ca add %ecx,%edx +80102c80: 0f b6 88 00 00 00 80 movzbl -0x80000000(%eax),%ecx +80102c87: 01 ca add %ecx,%edx for(i=0; i +80102c89: 83 c0 01 add $0x1,%eax +80102c8c: 39 f8 cmp %edi,%eax +80102c8e: 75 f0 jne 80102c80 if(sum((uchar*)conf, conf->length) != 0) -80102da4: 84 d2 test %dl,%dl -80102da6: 0f 85 e7 00 00 00 jne 80102e93 +80102c90: 84 d2 test %dl,%dl +80102c92: 0f 85 eb 00 00 00 jne 80102d83 struct mpioapic *ioapic; if((conf = mpconfig(&mp)) == 0) panic("Expect to run on an SMP"); ismp = 1; lapic = (uint*)conf->lapicaddr; -80102dac: 8b 86 24 00 00 80 mov -0x7fffffdc(%esi),%eax -80102db2: a3 9c 52 11 80 mov %eax,0x8011529c +80102c98: 8b 86 24 00 00 80 mov -0x7fffffdc(%esi),%eax +80102c9e: a3 80 26 11 80 mov %eax,0x80112680 for(p=(uchar*)(conf+1), e=(uchar*)conf+conf->length; plength; p +80102cbb: eb 40 jmp 80102cfd p = ((bda[0x14]<<8)|bda[0x13])*1024; -80102dcd: 0f b6 05 14 04 00 80 movzbl 0x80000414,%eax -80102dd4: c1 e0 08 shl $0x8,%eax -80102dd7: 0f b6 15 13 04 00 80 movzbl 0x80000413,%edx -80102dde: 09 d0 or %edx,%eax -80102de0: c1 e0 0a shl $0xa,%eax +80102cbd: 0f b6 05 14 04 00 80 movzbl 0x80000414,%eax +80102cc4: c1 e0 08 shl $0x8,%eax +80102cc7: 0f b6 15 13 04 00 80 movzbl 0x80000413,%edx +80102cce: 09 d0 or %edx,%eax +80102cd0: c1 e0 0a shl $0xa,%eax if((mp = mpsearch1(p-1024, 1024))) -80102de3: 2d 00 04 00 00 sub $0x400,%eax -80102de8: ba 00 04 00 00 mov $0x400,%edx -80102ded: e8 91 fe ff ff call 80102c83 -80102df2: 89 45 e0 mov %eax,-0x20(%ebp) -80102df5: 85 c0 test %eax,%eax -80102df7: 0f 85 3b ff ff ff jne 80102d38 -80102dfd: e9 1c ff ff ff jmp 80102d1e +80102cd3: 2d 00 04 00 00 sub $0x400,%eax +80102cd8: ba 00 04 00 00 mov $0x400,%edx +80102cdd: e8 88 fe ff ff call 80102b6a +80102ce2: 89 45 e0 mov %eax,-0x20(%ebp) +80102ce5: 85 c0 test %eax,%eax +80102ce7: 0f 85 36 ff ff ff jne 80102c23 +80102ced: e9 17 ff ff ff jmp 80102c09 switch(*p){ -80102e02: 83 e9 03 sub $0x3,%ecx -80102e05: 80 f9 01 cmp $0x1,%cl -80102e08: 76 15 jbe 80102e1f -80102e0a: 8b 75 e4 mov -0x1c(%ebp),%esi +80102cf2: 83 e9 03 sub $0x3,%ecx +80102cf5: 80 f9 01 cmp $0x1,%cl +80102cf8: 76 15 jbe 80102d0f +80102cfa: 8b 75 e4 mov -0x1c(%ebp),%esi for(p=(uchar*)(conf+1), e=(uchar*)conf+conf->length; p +80102cfd: 39 d0 cmp %edx,%eax +80102cff: 73 4b jae 80102d4c switch(*p){ -80102e11: 0f b6 08 movzbl (%eax),%ecx -80102e14: 80 f9 02 cmp $0x2,%cl -80102e17: 74 34 je 80102e4d -80102e19: 77 e7 ja 80102e02 -80102e1b: 84 c9 test %cl,%cl -80102e1d: 74 05 je 80102e24 +80102d01: 0f b6 08 movzbl (%eax),%ecx +80102d04: 80 f9 02 cmp $0x2,%cl +80102d07: 74 34 je 80102d3d +80102d09: 77 e7 ja 80102cf2 +80102d0b: 84 c9 test %cl,%cl +80102d0d: 74 05 je 80102d14 p += sizeof(struct mpioapic); continue; case MPBUS: case MPIOINTR: case MPLINTR: p += 8; -80102e1f: 83 c0 08 add $0x8,%eax +80102d0f: 83 c0 08 add $0x8,%eax continue; -80102e22: eb e9 jmp 80102e0d +80102d12: eb e9 jmp 80102cfd if(ncpu < NCPU) { -80102e24: 8b 0d 20 59 11 80 mov 0x80115920,%ecx -80102e2a: 83 f9 07 cmp $0x7,%ecx -80102e2d: 7f 19 jg 80102e48 +80102d14: 8b 0d 84 27 11 80 mov 0x80112784,%ecx +80102d1a: 83 f9 07 cmp $0x7,%ecx +80102d1d: 7f 19 jg 80102d38 cpus[ncpu].apicid = proc->apicid; // apicid may differ from ncpu -80102e2f: 69 f9 b0 00 00 00 imul $0xb0,%ecx,%edi -80102e35: 0f b6 58 01 movzbl 0x1(%eax),%ebx -80102e39: 88 9f a0 53 11 80 mov %bl,-0x7feeac60(%edi) +80102d1f: 69 f9 b0 00 00 00 imul $0xb0,%ecx,%edi +80102d25: 0f b6 58 01 movzbl 0x1(%eax),%ebx +80102d29: 88 9f a0 27 11 80 mov %bl,-0x7feed860(%edi) ncpu++; -80102e3f: 83 c1 01 add $0x1,%ecx -80102e42: 89 0d 20 59 11 80 mov %ecx,0x80115920 +80102d2f: 83 c1 01 add $0x1,%ecx +80102d32: 89 0d 84 27 11 80 mov %ecx,0x80112784 p += sizeof(struct mpproc); -80102e48: 83 c0 14 add $0x14,%eax +80102d38: 83 c0 14 add $0x14,%eax continue; -80102e4b: eb c0 jmp 80102e0d +80102d3b: eb c0 jmp 80102cfd ioapicid = ioapic->apicno; -80102e4d: 0f b6 48 01 movzbl 0x1(%eax),%ecx -80102e51: 88 0d 80 53 11 80 mov %cl,0x80115380 +80102d3d: 0f b6 48 01 movzbl 0x1(%eax),%ecx +80102d41: 88 0d 80 27 11 80 mov %cl,0x80112780 p += sizeof(struct mpioapic); -80102e57: 83 c0 08 add $0x8,%eax +80102d47: 83 c0 08 add $0x8,%eax continue; -80102e5a: eb b1 jmp 80102e0d +80102d4a: eb b1 jmp 80102cfd default: ismp = 0; break; } } if(!ismp) -80102e5c: 85 f6 test %esi,%esi -80102e5e: 74 26 je 80102e86 +80102d4c: 85 f6 test %esi,%esi +80102d4e: 74 26 je 80102d76 panic("Didn't find a suitable machine"); if(mp->imcrp){ -80102e60: 8b 45 e0 mov -0x20(%ebp),%eax -80102e63: 80 78 0c 00 cmpb $0x0,0xc(%eax) -80102e67: 74 15 je 80102e7e +80102d50: 8b 45 e0 mov -0x20(%ebp),%eax +80102d53: 80 78 0c 00 cmpb $0x0,0xc(%eax) +80102d57: 74 15 je 80102d6e asm volatile("out %0,%1" : : "a" (data), "d" (port)); -80102e69: b8 70 00 00 00 mov $0x70,%eax -80102e6e: ba 22 00 00 00 mov $0x22,%edx -80102e73: ee out %al,(%dx) +80102d59: b8 70 00 00 00 mov $0x70,%eax +80102d5e: ba 22 00 00 00 mov $0x22,%edx +80102d63: ee out %al,(%dx) asm volatile("in %1,%0" : "=a" (data) : "d" (port)); -80102e74: ba 23 00 00 00 mov $0x23,%edx -80102e79: ec in (%dx),%al +80102d64: ba 23 00 00 00 mov $0x23,%edx +80102d69: 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. -80102e7a: 83 c8 01 or $0x1,%eax +80102d6a: 83 c8 01 or $0x1,%eax asm volatile("out %0,%1" : : "a" (data), "d" (port)); -80102e7d: ee out %al,(%dx) +80102d6d: ee out %al,(%dx) } } -80102e7e: 8d 65 f4 lea -0xc(%ebp),%esp -80102e81: 5b pop %ebx -80102e82: 5e pop %esi -80102e83: 5f pop %edi -80102e84: 5d pop %ebp -80102e85: c3 ret +80102d6e: 8d 65 f4 lea -0xc(%ebp),%esp +80102d71: 5b pop %ebx +80102d72: 5e pop %esi +80102d73: 5f pop %edi +80102d74: 5d pop %ebp +80102d75: c3 ret panic("Didn't find a suitable machine"); -80102e86: 83 ec 0c sub $0xc,%esp -80102e89: 68 9c 7d 10 80 push $0x80107d9c -80102e8e: e8 c5 d4 ff ff call 80100358 +80102d76: 83 ec 0c sub $0xc,%esp +80102d79: 68 bc 7a 10 80 push $0x80107abc +80102d7e: e8 bd d5 ff ff call 80100340 panic("Expect to run on an SMP"); -80102e93: 83 ec 0c sub $0xc,%esp -80102e96: 68 82 7d 10 80 push $0x80107d82 -80102e9b: e8 b8 d4 ff ff call 80100358 - -80102ea0 : -#define IO_PIC2 0xA0 // Slave (IRQs 8-15) - -// Don't use the 8259A interrupt controllers. Xv6 assumes SMP hardware. -void +80102d83: 83 ec 0c sub $0xc,%esp +80102d86: 68 a2 7a 10 80 push $0x80107aa2 +80102d8b: e8 b0 d5 ff ff call 80100340 + +80102d90 : +80102d90: b8 ff ff ff ff mov $0xffffffff,%eax +80102d95: ba 21 00 00 00 mov $0x21,%edx +80102d9a: ee out %al,(%dx) +80102d9b: ba a1 00 00 00 mov $0xa1,%edx +80102da0: ee out %al,(%dx) picinit(void) { -80102ea0: f3 0f 1e fb endbr32 -80102ea4: b8 ff ff ff ff mov $0xffffffff,%eax -80102ea9: ba 21 00 00 00 mov $0x21,%edx -80102eae: ee out %al,(%dx) -80102eaf: ba a1 00 00 00 mov $0xa1,%edx -80102eb4: ee out %al,(%dx) // mask all interrupts outb(IO_PIC1+1, 0xFF); outb(IO_PIC2+1, 0xFF); } -80102eb5: c3 ret +80102da1: c3 ret -80102eb6 : +80102da2 : int writeopen; // write fd is still open }; int pipealloc(struct file **f0, struct file **f1) { -80102eb6: f3 0f 1e fb endbr32 -80102eba: 55 push %ebp -80102ebb: 89 e5 mov %esp,%ebp -80102ebd: 57 push %edi -80102ebe: 56 push %esi -80102ebf: 53 push %ebx -80102ec0: 83 ec 0c sub $0xc,%esp -80102ec3: 8b 5d 08 mov 0x8(%ebp),%ebx -80102ec6: 8b 75 0c mov 0xc(%ebp),%esi +80102da2: 55 push %ebp +80102da3: 89 e5 mov %esp,%ebp +80102da5: 57 push %edi +80102da6: 56 push %esi +80102da7: 53 push %ebx +80102da8: 83 ec 0c sub $0xc,%esp +80102dab: 8b 5d 08 mov 0x8(%ebp),%ebx +80102dae: 8b 75 0c mov 0xc(%ebp),%esi struct pipe *p; p = 0; *f0 = *f1 = 0; -80102ec9: c7 06 00 00 00 00 movl $0x0,(%esi) -80102ecf: c7 03 00 00 00 00 movl $0x0,(%ebx) +80102db1: c7 06 00 00 00 00 movl $0x0,(%esi) +80102db7: c7 03 00 00 00 00 movl $0x0,(%ebx) if((*f0 = filealloc()) == 0 || (*f1 = filealloc()) == 0) -80102ed5: e8 fb dd ff ff call 80100cd5 -80102eda: 89 03 mov %eax,(%ebx) -80102edc: 85 c0 test %eax,%eax -80102ede: 0f 84 a6 00 00 00 je 80102f8a -80102ee4: e8 ec dd ff ff call 80100cd5 -80102ee9: 89 06 mov %eax,(%esi) -80102eeb: 85 c0 test %eax,%eax -80102eed: 0f 84 85 00 00 00 je 80102f78 +80102dbd: e8 d3 de ff ff call 80100c95 +80102dc2: 89 03 mov %eax,(%ebx) +80102dc4: 85 c0 test %eax,%eax +80102dc6: 0f 84 a6 00 00 00 je 80102e72 +80102dcc: e8 c4 de ff ff call 80100c95 +80102dd1: 89 06 mov %eax,(%esi) +80102dd3: 85 c0 test %eax,%eax +80102dd5: 0f 84 85 00 00 00 je 80102e60 goto bad; if((p = (struct pipe*)kalloc()) == 0) -80102ef3: e8 21 f3 ff ff call 80102219 -80102ef8: 89 c7 mov %eax,%edi -80102efa: 85 c0 test %eax,%eax -80102efc: 74 72 je 80102f70 +80102ddb: e8 6a f3 ff ff call 8010214a +80102de0: 89 c7 mov %eax,%edi +80102de2: 85 c0 test %eax,%eax +80102de4: 74 72 je 80102e58 goto bad; p->readopen = 1; -80102efe: c7 80 3c 02 00 00 01 movl $0x1,0x23c(%eax) -80102f05: 00 00 00 +80102de6: c7 80 3c 02 00 00 01 movl $0x1,0x23c(%eax) +80102ded: 00 00 00 p->writeopen = 1; -80102f08: c7 80 40 02 00 00 01 movl $0x1,0x240(%eax) -80102f0f: 00 00 00 +80102df0: c7 80 40 02 00 00 01 movl $0x1,0x240(%eax) +80102df7: 00 00 00 p->nwrite = 0; -80102f12: c7 80 38 02 00 00 00 movl $0x0,0x238(%eax) -80102f19: 00 00 00 +80102dfa: c7 80 38 02 00 00 00 movl $0x0,0x238(%eax) +80102e01: 00 00 00 p->nread = 0; -80102f1c: c7 80 34 02 00 00 00 movl $0x0,0x234(%eax) -80102f23: 00 00 00 +80102e04: c7 80 34 02 00 00 00 movl $0x0,0x234(%eax) +80102e0b: 00 00 00 initlock(&p->lock, "pipe"); -80102f26: 83 ec 08 sub $0x8,%esp -80102f29: 68 bb 7d 10 80 push $0x80107dbb -80102f2e: 50 push %eax -80102f2f: e8 09 0e 00 00 call 80103d3d +80102e0e: 83 ec 08 sub $0x8,%esp +80102e11: 68 db 7a 10 80 push $0x80107adb +80102e16: 50 push %eax +80102e17: e8 9c 0d 00 00 call 80103bb8 (*f0)->type = FD_PIPE; -80102f34: 8b 03 mov (%ebx),%eax -80102f36: c7 00 01 00 00 00 movl $0x1,(%eax) +80102e1c: 8b 03 mov (%ebx),%eax +80102e1e: c7 00 01 00 00 00 movl $0x1,(%eax) (*f0)->readable = 1; -80102f3c: 8b 03 mov (%ebx),%eax -80102f3e: c6 40 08 01 movb $0x1,0x8(%eax) +80102e24: 8b 03 mov (%ebx),%eax +80102e26: c6 40 08 01 movb $0x1,0x8(%eax) (*f0)->writable = 0; -80102f42: 8b 03 mov (%ebx),%eax -80102f44: c6 40 09 00 movb $0x0,0x9(%eax) +80102e2a: 8b 03 mov (%ebx),%eax +80102e2c: c6 40 09 00 movb $0x0,0x9(%eax) (*f0)->pipe = p; -80102f48: 8b 03 mov (%ebx),%eax -80102f4a: 89 78 0c mov %edi,0xc(%eax) +80102e30: 8b 03 mov (%ebx),%eax +80102e32: 89 78 0c mov %edi,0xc(%eax) (*f1)->type = FD_PIPE; -80102f4d: 8b 06 mov (%esi),%eax -80102f4f: c7 00 01 00 00 00 movl $0x1,(%eax) +80102e35: 8b 06 mov (%esi),%eax +80102e37: c7 00 01 00 00 00 movl $0x1,(%eax) (*f1)->readable = 0; -80102f55: 8b 06 mov (%esi),%eax -80102f57: c6 40 08 00 movb $0x0,0x8(%eax) +80102e3d: 8b 06 mov (%esi),%eax +80102e3f: c6 40 08 00 movb $0x0,0x8(%eax) (*f1)->writable = 1; -80102f5b: 8b 06 mov (%esi),%eax -80102f5d: c6 40 09 01 movb $0x1,0x9(%eax) +80102e43: 8b 06 mov (%esi),%eax +80102e45: c6 40 09 01 movb $0x1,0x9(%eax) (*f1)->pipe = p; -80102f61: 8b 06 mov (%esi),%eax -80102f63: 89 78 0c mov %edi,0xc(%eax) +80102e49: 8b 06 mov (%esi),%eax +80102e4b: 89 78 0c mov %edi,0xc(%eax) return 0; -80102f66: 83 c4 10 add $0x10,%esp -80102f69: b8 00 00 00 00 mov $0x0,%eax -80102f6e: eb 36 jmp 80102fa6 +80102e4e: 83 c4 10 add $0x10,%esp +80102e51: b8 00 00 00 00 mov $0x0,%eax +80102e56: eb 36 jmp 80102e8e //PAGEBREAK: 20 bad: if(p) kfree((char*)p); if(*f0) -80102f70: 8b 03 mov (%ebx),%eax -80102f72: 85 c0 test %eax,%eax -80102f74: 75 08 jne 80102f7e -80102f76: eb 12 jmp 80102f8a -80102f78: 8b 03 mov (%ebx),%eax -80102f7a: 85 c0 test %eax,%eax -80102f7c: 74 30 je 80102fae +80102e58: 8b 03 mov (%ebx),%eax +80102e5a: 85 c0 test %eax,%eax +80102e5c: 75 08 jne 80102e66 +80102e5e: eb 12 jmp 80102e72 +80102e60: 8b 03 mov (%ebx),%eax +80102e62: 85 c0 test %eax,%eax +80102e64: 74 30 je 80102e96 fileclose(*f0); -80102f7e: 83 ec 0c sub $0xc,%esp -80102f81: 50 push %eax -80102f82: e8 fa dd ff ff call 80100d81 -80102f87: 83 c4 10 add $0x10,%esp +80102e66: 83 ec 0c sub $0xc,%esp +80102e69: 50 push %eax +80102e6a: e8 ca de ff ff call 80100d39 +80102e6f: 83 c4 10 add $0x10,%esp if(*f1) -80102f8a: 8b 16 mov (%esi),%edx +80102e72: 8b 16 mov (%esi),%edx fileclose(*f1); return -1; -80102f8c: b8 ff ff ff ff mov $0xffffffff,%eax +80102e74: b8 ff ff ff ff mov $0xffffffff,%eax if(*f1) -80102f91: 85 d2 test %edx,%edx -80102f93: 74 11 je 80102fa6 +80102e79: 85 d2 test %edx,%edx +80102e7b: 74 11 je 80102e8e fileclose(*f1); -80102f95: 83 ec 0c sub $0xc,%esp -80102f98: 52 push %edx -80102f99: e8 e3 dd ff ff call 80100d81 -80102f9e: 83 c4 10 add $0x10,%esp +80102e7d: 83 ec 0c sub $0xc,%esp +80102e80: 52 push %edx +80102e81: e8 b3 de ff ff call 80100d39 +80102e86: 83 c4 10 add $0x10,%esp return -1; -80102fa1: b8 ff ff ff ff mov $0xffffffff,%eax -} -80102fa6: 8d 65 f4 lea -0xc(%ebp),%esp -80102fa9: 5b pop %ebx -80102faa: 5e pop %esi -80102fab: 5f pop %edi -80102fac: 5d pop %ebp -80102fad: c3 ret +80102e89: b8 ff ff ff ff mov $0xffffffff,%eax +} +80102e8e: 8d 65 f4 lea -0xc(%ebp),%esp +80102e91: 5b pop %ebx +80102e92: 5e pop %esi +80102e93: 5f pop %edi +80102e94: 5d pop %ebp +80102e95: c3 ret return -1; -80102fae: b8 ff ff ff ff mov $0xffffffff,%eax -80102fb3: eb f1 jmp 80102fa6 +80102e96: b8 ff ff ff ff mov $0xffffffff,%eax +80102e9b: eb f1 jmp 80102e8e -80102fb5 : +80102e9d : void pipeclose(struct pipe *p, int writable) { -80102fb5: f3 0f 1e fb endbr32 -80102fb9: 55 push %ebp -80102fba: 89 e5 mov %esp,%ebp -80102fbc: 53 push %ebx -80102fbd: 83 ec 10 sub $0x10,%esp -80102fc0: 8b 5d 08 mov 0x8(%ebp),%ebx +80102e9d: 55 push %ebp +80102e9e: 89 e5 mov %esp,%ebp +80102ea0: 53 push %ebx +80102ea1: 83 ec 10 sub $0x10,%esp +80102ea4: 8b 5d 08 mov 0x8(%ebp),%ebx acquire(&p->lock); -80102fc3: 53 push %ebx -80102fc4: e8 d0 0e 00 00 call 80103e99 +80102ea7: 53 push %ebx +80102ea8: e8 54 0e 00 00 call 80103d01 if(writable){ -80102fc9: 83 c4 10 add $0x10,%esp -80102fcc: 83 7d 0c 00 cmpl $0x0,0xc(%ebp) -80102fd0: 74 3f je 80103011 +80102ead: 83 c4 10 add $0x10,%esp +80102eb0: 83 7d 0c 00 cmpl $0x0,0xc(%ebp) +80102eb4: 74 3f je 80102ef5 p->writeopen = 0; -80102fd2: c7 83 40 02 00 00 00 movl $0x0,0x240(%ebx) -80102fd9: 00 00 00 +80102eb6: c7 83 40 02 00 00 00 movl $0x0,0x240(%ebx) +80102ebd: 00 00 00 wakeup(&p->nread); -80102fdc: 83 ec 0c sub $0xc,%esp -80102fdf: 8d 83 34 02 00 00 lea 0x234(%ebx),%eax -80102fe5: 50 push %eax -80102fe6: e8 4f 0a 00 00 call 80103a3a -80102feb: 83 c4 10 add $0x10,%esp +80102ec0: 83 ec 0c sub $0xc,%esp +80102ec3: 8d 83 34 02 00 00 lea 0x234(%ebx),%eax +80102ec9: 50 push %eax +80102eca: e8 08 0a 00 00 call 801038d7 +80102ecf: 83 c4 10 add $0x10,%esp } else { p->readopen = 0; wakeup(&p->nwrite); } if(p->readopen == 0 && p->writeopen == 0){ -80102fee: 83 bb 3c 02 00 00 00 cmpl $0x0,0x23c(%ebx) -80102ff5: 75 09 jne 80103000 -80102ff7: 83 bb 40 02 00 00 00 cmpl $0x0,0x240(%ebx) -80102ffe: 74 2f je 8010302f +80102ed2: 83 bb 3c 02 00 00 00 cmpl $0x0,0x23c(%ebx) +80102ed9: 75 09 jne 80102ee4 +80102edb: 83 bb 40 02 00 00 00 cmpl $0x0,0x240(%ebx) +80102ee2: 74 2f je 80102f13 release(&p->lock); kfree((char*)p); } else release(&p->lock); -80103000: 83 ec 0c sub $0xc,%esp -80103003: 53 push %ebx -80103004: e8 fb 0e 00 00 call 80103f04 -80103009: 83 c4 10 add $0x10,%esp -} -8010300c: 8b 5d fc mov -0x4(%ebp),%ebx -8010300f: c9 leave -80103010: c3 ret +80102ee4: 83 ec 0c sub $0xc,%esp +80102ee7: 53 push %ebx +80102ee8: e8 7b 0e 00 00 call 80103d68 +80102eed: 83 c4 10 add $0x10,%esp +} +80102ef0: 8b 5d fc mov -0x4(%ebp),%ebx +80102ef3: c9 leave +80102ef4: c3 ret p->readopen = 0; -80103011: c7 83 3c 02 00 00 00 movl $0x0,0x23c(%ebx) -80103018: 00 00 00 +80102ef5: c7 83 3c 02 00 00 00 movl $0x0,0x23c(%ebx) +80102efc: 00 00 00 wakeup(&p->nwrite); -8010301b: 83 ec 0c sub $0xc,%esp -8010301e: 8d 83 38 02 00 00 lea 0x238(%ebx),%eax -80103024: 50 push %eax -80103025: e8 10 0a 00 00 call 80103a3a -8010302a: 83 c4 10 add $0x10,%esp -8010302d: eb bf jmp 80102fee +80102eff: 83 ec 0c sub $0xc,%esp +80102f02: 8d 83 38 02 00 00 lea 0x238(%ebx),%eax +80102f08: 50 push %eax +80102f09: e8 c9 09 00 00 call 801038d7 +80102f0e: 83 c4 10 add $0x10,%esp +80102f11: eb bf jmp 80102ed2 release(&p->lock); -8010302f: 83 ec 0c sub $0xc,%esp -80103032: 53 push %ebx -80103033: e8 cc 0e 00 00 call 80103f04 +80102f13: 83 ec 0c sub $0xc,%esp +80102f16: 53 push %ebx +80102f17: e8 4c 0e 00 00 call 80103d68 kfree((char*)p); -80103038: 89 1c 24 mov %ebx,(%esp) -8010303b: e8 7b f0 ff ff call 801020bb -80103040: 83 c4 10 add $0x10,%esp -80103043: eb c7 jmp 8010300c +80102f1c: 89 1c 24 mov %ebx,(%esp) +80102f1f: e8 d8 f0 ff ff call 80101ffc +80102f24: 83 c4 10 add $0x10,%esp +80102f27: eb c7 jmp 80102ef0 -80103045 : +80102f29 : //PAGEBREAK: 40 int pipewrite(struct pipe *p, char *addr, int n) { -80103045: f3 0f 1e fb endbr32 -80103049: 55 push %ebp -8010304a: 89 e5 mov %esp,%ebp -8010304c: 57 push %edi -8010304d: 56 push %esi -8010304e: 53 push %ebx -8010304f: 83 ec 28 sub $0x28,%esp -80103052: 8b 5d 08 mov 0x8(%ebp),%ebx -80103055: 8b 75 0c mov 0xc(%ebp),%esi +80102f29: 55 push %ebp +80102f2a: 89 e5 mov %esp,%ebp +80102f2c: 57 push %edi +80102f2d: 56 push %esi +80102f2e: 53 push %ebx +80102f2f: 83 ec 28 sub $0x28,%esp +80102f32: 8b 5d 08 mov 0x8(%ebp),%ebx +80102f35: 8b 75 0c mov 0xc(%ebp),%esi int i; acquire(&p->lock); -80103058: 89 5d e4 mov %ebx,-0x1c(%ebp) -8010305b: 53 push %ebx -8010305c: e8 38 0e 00 00 call 80103e99 +80102f38: 53 push %ebx +80102f39: e8 c3 0d 00 00 call 80103d01 for(i = 0; i < n; i++){ -80103061: 83 c4 10 add $0x10,%esp -80103064: 83 7d 10 00 cmpl $0x0,0x10(%ebp) -80103068: 0f 8e 8f 00 00 00 jle 801030fd -8010306e: 89 75 e0 mov %esi,-0x20(%ebp) -80103071: 03 75 10 add 0x10(%ebp),%esi -80103074: 89 75 dc mov %esi,-0x24(%ebp) +80102f3e: 83 c4 10 add $0x10,%esp +80102f41: 83 7d 10 00 cmpl $0x0,0x10(%ebp) +80102f45: 0f 8e 8d 00 00 00 jle 80102fd8 +80102f4b: 89 75 e4 mov %esi,-0x1c(%ebp) +80102f4e: 03 75 10 add 0x10(%ebp),%esi +80102f51: 89 75 e0 mov %esi,-0x20(%ebp) while(p->nwrite == p->nread + PIPESIZE){ //DOC: pipewrite-full if(p->readopen == 0 || myproc()->killed){ release(&p->lock); return -1; } wakeup(&p->nread); -80103077: 8d bb 34 02 00 00 lea 0x234(%ebx),%edi +80102f54: 8d bb 34 02 00 00 lea 0x234(%ebx),%edi while(p->nwrite == p->nread + PIPESIZE){ //DOC: pipewrite-full -8010307d: 8b 93 38 02 00 00 mov 0x238(%ebx),%edx -80103083: 8b 83 34 02 00 00 mov 0x234(%ebx),%eax -80103089: 05 00 02 00 00 add $0x200,%eax +80102f5a: 8b 93 38 02 00 00 mov 0x238(%ebx),%edx +80102f60: 8b 83 34 02 00 00 mov 0x234(%ebx),%eax +80102f66: 05 00 02 00 00 add $0x200,%eax sleep(&p->nwrite, &p->lock); //DOC: pipewrite-sleep -8010308e: 8d b3 38 02 00 00 lea 0x238(%ebx),%esi +80102f6b: 8d b3 38 02 00 00 lea 0x238(%ebx),%esi while(p->nwrite == p->nread + PIPESIZE){ //DOC: pipewrite-full -80103094: 39 c2 cmp %eax,%edx -80103096: 75 41 jne 801030d9 +80102f71: 39 c2 cmp %eax,%edx +80102f73: 75 3f jne 80102fb4 if(p->readopen == 0 || myproc()->killed){ -80103098: 83 bb 3c 02 00 00 00 cmpl $0x0,0x23c(%ebx) -8010309f: 74 7b je 8010311c -801030a1: e8 44 03 00 00 call 801033ea -801030a6: 83 78 24 00 cmpl $0x0,0x24(%eax) -801030aa: 75 70 jne 8010311c +80102f75: 83 bb 3c 02 00 00 00 cmpl $0x0,0x23c(%ebx) +80102f7c: 74 79 je 80102ff7 +80102f7e: e8 2d 03 00 00 call 801032b0 +80102f83: 83 78 24 00 cmpl $0x0,0x24(%eax) +80102f87: 75 6e jne 80102ff7 wakeup(&p->nread); -801030ac: 83 ec 0c sub $0xc,%esp -801030af: 57 push %edi -801030b0: e8 85 09 00 00 call 80103a3a +80102f89: 83 ec 0c sub $0xc,%esp +80102f8c: 57 push %edi +80102f8d: e8 45 09 00 00 call 801038d7 sleep(&p->nwrite, &p->lock); //DOC: pipewrite-sleep -801030b5: 83 c4 08 add $0x8,%esp -801030b8: ff 75 e4 pushl -0x1c(%ebp) -801030bb: 56 push %esi -801030bc: e8 f3 07 00 00 call 801038b4 +80102f92: 83 c4 08 add $0x8,%esp +80102f95: 53 push %ebx +80102f96: 56 push %esi +80102f97: e8 bd 07 00 00 call 80103759 while(p->nwrite == p->nread + PIPESIZE){ //DOC: pipewrite-full -801030c1: 8b 93 38 02 00 00 mov 0x238(%ebx),%edx -801030c7: 8b 83 34 02 00 00 mov 0x234(%ebx),%eax -801030cd: 05 00 02 00 00 add $0x200,%eax -801030d2: 83 c4 10 add $0x10,%esp -801030d5: 39 c2 cmp %eax,%edx -801030d7: 74 bf je 80103098 +80102f9c: 8b 93 38 02 00 00 mov 0x238(%ebx),%edx +80102fa2: 8b 83 34 02 00 00 mov 0x234(%ebx),%eax +80102fa8: 05 00 02 00 00 add $0x200,%eax +80102fad: 83 c4 10 add $0x10,%esp +80102fb0: 39 c2 cmp %eax,%edx +80102fb2: 74 c1 je 80102f75 } p->data[p->nwrite++ % PIPESIZE] = addr[i]; -801030d9: 8d 42 01 lea 0x1(%edx),%eax -801030dc: 89 83 38 02 00 00 mov %eax,0x238(%ebx) -801030e2: 8b 4d e0 mov -0x20(%ebp),%ecx -801030e5: 0f b6 01 movzbl (%ecx),%eax -801030e8: 81 e2 ff 01 00 00 and $0x1ff,%edx -801030ee: 88 44 13 34 mov %al,0x34(%ebx,%edx,1) +80102fb4: 8d 42 01 lea 0x1(%edx),%eax +80102fb7: 89 83 38 02 00 00 mov %eax,0x238(%ebx) +80102fbd: 8b 4d e4 mov -0x1c(%ebp),%ecx +80102fc0: 0f b6 01 movzbl (%ecx),%eax +80102fc3: 81 e2 ff 01 00 00 and $0x1ff,%edx +80102fc9: 88 44 13 34 mov %al,0x34(%ebx,%edx,1) for(i = 0; i < n; i++){ -801030f2: 83 c1 01 add $0x1,%ecx -801030f5: 89 4d e0 mov %ecx,-0x20(%ebp) -801030f8: 3b 4d dc cmp -0x24(%ebp),%ecx -801030fb: 75 80 jne 8010307d +80102fcd: 83 c1 01 add $0x1,%ecx +80102fd0: 89 4d e4 mov %ecx,-0x1c(%ebp) +80102fd3: 3b 4d e0 cmp -0x20(%ebp),%ecx +80102fd6: 75 82 jne 80102f5a } wakeup(&p->nread); //DOC: pipewrite-wakeup1 -801030fd: 83 ec 0c sub $0xc,%esp -80103100: 8d 83 34 02 00 00 lea 0x234(%ebx),%eax -80103106: 50 push %eax -80103107: e8 2e 09 00 00 call 80103a3a +80102fd8: 83 ec 0c sub $0xc,%esp +80102fdb: 8d 83 34 02 00 00 lea 0x234(%ebx),%eax +80102fe1: 50 push %eax +80102fe2: e8 f0 08 00 00 call 801038d7 release(&p->lock); -8010310c: 89 1c 24 mov %ebx,(%esp) -8010310f: e8 f0 0d 00 00 call 80103f04 +80102fe7: 89 1c 24 mov %ebx,(%esp) +80102fea: e8 79 0d 00 00 call 80103d68 return n; -80103114: 83 c4 10 add $0x10,%esp -80103117: 8b 45 10 mov 0x10(%ebp),%eax -8010311a: eb 11 jmp 8010312d +80102fef: 83 c4 10 add $0x10,%esp +80102ff2: 8b 45 10 mov 0x10(%ebp),%eax +80102ff5: eb 11 jmp 80103008 release(&p->lock); -8010311c: 83 ec 0c sub $0xc,%esp -8010311f: 53 push %ebx -80103120: e8 df 0d 00 00 call 80103f04 +80102ff7: 83 ec 0c sub $0xc,%esp +80102ffa: 53 push %ebx +80102ffb: e8 68 0d 00 00 call 80103d68 return -1; -80103125: 83 c4 10 add $0x10,%esp -80103128: b8 ff ff ff ff mov $0xffffffff,%eax +80103000: 83 c4 10 add $0x10,%esp +80103003: b8 ff ff ff ff mov $0xffffffff,%eax } -8010312d: 8d 65 f4 lea -0xc(%ebp),%esp -80103130: 5b pop %ebx -80103131: 5e pop %esi -80103132: 5f pop %edi -80103133: 5d pop %ebp -80103134: c3 ret +80103008: 8d 65 f4 lea -0xc(%ebp),%esp +8010300b: 5b pop %ebx +8010300c: 5e pop %esi +8010300d: 5f pop %edi +8010300e: 5d pop %ebp +8010300f: c3 ret -80103135 : +80103010 : int piperead(struct pipe *p, char *addr, int n) { -80103135: f3 0f 1e fb endbr32 -80103139: 55 push %ebp -8010313a: 89 e5 mov %esp,%ebp -8010313c: 57 push %edi -8010313d: 56 push %esi -8010313e: 53 push %ebx -8010313f: 83 ec 18 sub $0x18,%esp -80103142: 8b 5d 08 mov 0x8(%ebp),%ebx +80103010: 55 push %ebp +80103011: 89 e5 mov %esp,%ebp +80103013: 57 push %edi +80103014: 56 push %esi +80103015: 53 push %ebx +80103016: 83 ec 18 sub $0x18,%esp +80103019: 8b 5d 08 mov 0x8(%ebp),%ebx +8010301c: 8b 7d 0c mov 0xc(%ebp),%edi int i; acquire(&p->lock); -80103145: 89 df mov %ebx,%edi -80103147: 53 push %ebx -80103148: e8 4c 0d 00 00 call 80103e99 +8010301f: 53 push %ebx +80103020: e8 dc 0c 00 00 call 80103d01 while(p->nread == p->nwrite && p->writeopen){ //DOC: pipe-empty -8010314d: 83 c4 10 add $0x10,%esp +80103025: 83 c4 10 add $0x10,%esp if(myproc()->killed){ release(&p->lock); return -1; } sleep(&p->nread, &p->lock); //DOC: piperead-sleep -80103150: 8d b3 34 02 00 00 lea 0x234(%ebx),%esi +80103028: 8d b3 34 02 00 00 lea 0x234(%ebx),%esi while(p->nread == p->nwrite && p->writeopen){ //DOC: pipe-empty -80103156: 8b 83 38 02 00 00 mov 0x238(%ebx),%eax -8010315c: 39 83 34 02 00 00 cmp %eax,0x234(%ebx) -80103162: 75 2f jne 80103193 -80103164: 83 bb 40 02 00 00 00 cmpl $0x0,0x240(%ebx) -8010316b: 74 26 je 80103193 +8010302e: 8b 83 38 02 00 00 mov 0x238(%ebx),%eax +80103034: 39 83 34 02 00 00 cmp %eax,0x234(%ebx) +8010303a: 75 2f jne 8010306b +8010303c: 83 bb 40 02 00 00 00 cmpl $0x0,0x240(%ebx) +80103043: 74 26 je 8010306b if(myproc()->killed){ -8010316d: e8 78 02 00 00 call 801033ea -80103172: 83 78 24 00 cmpl $0x0,0x24(%eax) -80103176: 75 79 jne 801031f1 +80103045: e8 66 02 00 00 call 801032b0 +8010304a: 83 78 24 00 cmpl $0x0,0x24(%eax) +8010304e: 75 79 jne 801030c9 sleep(&p->nread, &p->lock); //DOC: piperead-sleep -80103178: 83 ec 08 sub $0x8,%esp -8010317b: 57 push %edi -8010317c: 56 push %esi -8010317d: e8 32 07 00 00 call 801038b4 +80103050: 83 ec 08 sub $0x8,%esp +80103053: 53 push %ebx +80103054: 56 push %esi +80103055: e8 ff 06 00 00 call 80103759 while(p->nread == p->nwrite && p->writeopen){ //DOC: pipe-empty -80103182: 83 c4 10 add $0x10,%esp -80103185: 8b 83 38 02 00 00 mov 0x238(%ebx),%eax -8010318b: 39 83 34 02 00 00 cmp %eax,0x234(%ebx) -80103191: 74 d1 je 80103164 +8010305a: 83 c4 10 add $0x10,%esp +8010305d: 8b 83 38 02 00 00 mov 0x238(%ebx),%eax +80103063: 39 83 34 02 00 00 cmp %eax,0x234(%ebx) +80103069: 74 d1 je 8010303c } for(i = 0; i < n; i++){ //DOC: piperead-copy -80103193: be 00 00 00 00 mov $0x0,%esi -80103198: 83 7d 10 00 cmpl $0x0,0x10(%ebp) -8010319c: 7e 2f jle 801031cd +8010306b: be 00 00 00 00 mov $0x0,%esi +80103070: 83 7d 10 00 cmpl $0x0,0x10(%ebp) +80103074: 7e 2f jle 801030a5 if(p->nread == p->nwrite) -8010319e: 8b 83 34 02 00 00 mov 0x234(%ebx),%eax -801031a4: 3b 83 38 02 00 00 cmp 0x238(%ebx),%eax -801031aa: 74 21 je 801031cd +80103076: 8b 83 34 02 00 00 mov 0x234(%ebx),%eax +8010307c: 3b 83 38 02 00 00 cmp 0x238(%ebx),%eax +80103082: 74 21 je 801030a5 break; addr[i] = p->data[p->nread++ % PIPESIZE]; -801031ac: 8d 50 01 lea 0x1(%eax),%edx -801031af: 89 93 34 02 00 00 mov %edx,0x234(%ebx) -801031b5: 25 ff 01 00 00 and $0x1ff,%eax -801031ba: 0f b6 44 03 34 movzbl 0x34(%ebx,%eax,1),%eax -801031bf: 8b 4d 0c mov 0xc(%ebp),%ecx -801031c2: 88 04 31 mov %al,(%ecx,%esi,1) +80103084: 8d 50 01 lea 0x1(%eax),%edx +80103087: 89 93 34 02 00 00 mov %edx,0x234(%ebx) +8010308d: 25 ff 01 00 00 and $0x1ff,%eax +80103092: 0f b6 44 03 34 movzbl 0x34(%ebx,%eax,1),%eax +80103097: 88 04 37 mov %al,(%edi,%esi,1) for(i = 0; i < n; i++){ //DOC: piperead-copy -801031c5: 83 c6 01 add $0x1,%esi -801031c8: 39 75 10 cmp %esi,0x10(%ebp) -801031cb: 75 d1 jne 8010319e +8010309a: 83 c6 01 add $0x1,%esi +8010309d: 39 75 10 cmp %esi,0x10(%ebp) +801030a0: 75 d4 jne 80103076 +801030a2: 8b 75 10 mov 0x10(%ebp),%esi } wakeup(&p->nwrite); //DOC: piperead-wakeup -801031cd: 83 ec 0c sub $0xc,%esp -801031d0: 8d 83 38 02 00 00 lea 0x238(%ebx),%eax -801031d6: 50 push %eax -801031d7: e8 5e 08 00 00 call 80103a3a +801030a5: 83 ec 0c sub $0xc,%esp +801030a8: 8d 83 38 02 00 00 lea 0x238(%ebx),%eax +801030ae: 50 push %eax +801030af: e8 23 08 00 00 call 801038d7 release(&p->lock); -801031dc: 89 1c 24 mov %ebx,(%esp) -801031df: e8 20 0d 00 00 call 80103f04 +801030b4: 89 1c 24 mov %ebx,(%esp) +801030b7: e8 ac 0c 00 00 call 80103d68 return i; -801031e4: 83 c4 10 add $0x10,%esp -} -801031e7: 89 f0 mov %esi,%eax -801031e9: 8d 65 f4 lea -0xc(%ebp),%esp -801031ec: 5b pop %ebx -801031ed: 5e pop %esi -801031ee: 5f pop %edi -801031ef: 5d pop %ebp -801031f0: c3 ret +801030bc: 83 c4 10 add $0x10,%esp +} +801030bf: 89 f0 mov %esi,%eax +801030c1: 8d 65 f4 lea -0xc(%ebp),%esp +801030c4: 5b pop %ebx +801030c5: 5e pop %esi +801030c6: 5f pop %edi +801030c7: 5d pop %ebp +801030c8: c3 ret release(&p->lock); -801031f1: 83 ec 0c sub $0xc,%esp -801031f4: 53 push %ebx -801031f5: e8 0a 0d 00 00 call 80103f04 +801030c9: 83 ec 0c sub $0xc,%esp +801030cc: 53 push %ebx +801030cd: e8 96 0c 00 00 call 80103d68 return -1; -801031fa: 83 c4 10 add $0x10,%esp -801031fd: be ff ff ff ff mov $0xffffffff,%esi -80103202: eb e3 jmp 801031e7 +801030d2: 83 c4 10 add $0x10,%esp +801030d5: be ff ff ff ff mov $0xffffffff,%esi +801030da: eb e3 jmp 801030bf -80103204 : +801030dc : static void wakeup1(void *chan) { struct proc *p; for(p = ptable.proc; p < &ptable.proc[NPROC]; p++) -80103204: ba 74 59 11 80 mov $0x80115974,%edx -80103209: eb 15 jmp 80103220 +801030dc: ba 54 2d 11 80 mov $0x80112d54,%edx +801030e1: eb 0e jmp 801030f1 +801030e3: 81 c2 84 00 00 00 add $0x84,%edx +801030e9: 81 fa 94 35 11 80 cmp $0x80113594,%edx +801030ef: 74 14 je 80103105 if(p->state == SLEEPING && p->chan == chan) +801030f1: 83 7a 0c 02 cmpl $0x2,0xc(%edx) +801030f5: 75 ec jne 801030e3 +801030f7: 39 42 20 cmp %eax,0x20(%edx) +801030fa: 75 e7 jne 801030e3 p->state = RUNNABLE; -8010320b: c7 42 0c 03 00 00 00 movl $0x3,0xc(%edx) - for(p = ptable.proc; p < &ptable.proc[NPROC]; p++) -80103212: 81 c2 84 00 00 00 add $0x84,%edx -80103218: 81 fa b4 61 11 80 cmp $0x801161b4,%edx -8010321e: 74 0d je 8010322d - if(p->state == SLEEPING && p->chan == chan) -80103220: 83 7a 0c 02 cmpl $0x2,0xc(%edx) -80103224: 75 ec jne 80103212 -80103226: 39 42 20 cmp %eax,0x20(%edx) -80103229: 75 e7 jne 80103212 -8010322b: eb de jmp 8010320b +801030fc: c7 42 0c 03 00 00 00 movl $0x3,0xc(%edx) +80103103: eb de jmp 801030e3 } -8010322d: c3 ret +80103105: c3 ret -8010322e : +80103106 : { -8010322e: 55 push %ebp -8010322f: 89 e5 mov %esp,%ebp -80103231: 53 push %ebx -80103232: 83 ec 10 sub $0x10,%esp +80103106: 55 push %ebp +80103107: 89 e5 mov %esp,%ebp +80103109: 53 push %ebx +8010310a: 83 ec 10 sub $0x10,%esp acquire(&ptable.lock); -80103235: 68 40 59 11 80 push $0x80115940 -8010323a: e8 5a 0c 00 00 call 80103e99 -8010323f: 83 c4 10 add $0x10,%esp +8010310d: 68 20 2d 11 80 push $0x80112d20 +80103112: e8 ea 0b 00 00 call 80103d01 +80103117: 83 c4 10 add $0x10,%esp for(p = ptable.proc; p < &ptable.proc[NPROC]; p++) -80103242: bb 74 59 11 80 mov $0x80115974,%ebx +8010311a: bb 54 2d 11 80 mov $0x80112d54,%ebx if(p->state == UNUSED) -80103247: 83 7b 0c 00 cmpl $0x0,0xc(%ebx) -8010324b: 74 2a je 80103277 +8010311f: 83 7b 0c 00 cmpl $0x0,0xc(%ebx) +80103123: 74 2a je 8010314f for(p = ptable.proc; p < &ptable.proc[NPROC]; p++) -8010324d: 81 c3 84 00 00 00 add $0x84,%ebx -80103253: 81 fb b4 61 11 80 cmp $0x801161b4,%ebx -80103259: 75 ec jne 80103247 +80103125: 81 c3 84 00 00 00 add $0x84,%ebx +8010312b: 81 fb 94 35 11 80 cmp $0x80113594,%ebx +80103131: 75 ec jne 8010311f release(&ptable.lock); -8010325b: 83 ec 0c sub $0xc,%esp -8010325e: 68 40 59 11 80 push $0x80115940 -80103263: e8 9c 0c 00 00 call 80103f04 +80103133: 83 ec 0c sub $0xc,%esp +80103136: 68 20 2d 11 80 push $0x80112d20 +8010313b: e8 28 0c 00 00 call 80103d68 return 0; -80103268: 83 c4 10 add $0x10,%esp -8010326b: bb 00 00 00 00 mov $0x0,%ebx +80103140: 83 c4 10 add $0x10,%esp +80103143: bb 00 00 00 00 mov $0x0,%ebx } -80103270: 89 d8 mov %ebx,%eax -80103272: 8b 5d fc mov -0x4(%ebp),%ebx -80103275: c9 leave -80103276: c3 ret +80103148: 89 d8 mov %ebx,%eax +8010314a: 8b 5d fc mov -0x4(%ebp),%ebx +8010314d: c9 leave +8010314e: c3 ret p->state = EMBRYO; -80103277: c7 43 0c 01 00 00 00 movl $0x1,0xc(%ebx) +8010314f: c7 43 0c 01 00 00 00 movl $0x1,0xc(%ebx) p->pid = nextpid++; -8010327e: a1 04 b0 10 80 mov 0x8010b004,%eax -80103283: 8d 50 01 lea 0x1(%eax),%edx -80103286: 89 15 04 b0 10 80 mov %edx,0x8010b004 -8010328c: 89 43 10 mov %eax,0x10(%ebx) +80103156: a1 04 b0 10 80 mov 0x8010b004,%eax +8010315b: 8d 50 01 lea 0x1(%eax),%edx +8010315e: 89 15 04 b0 10 80 mov %edx,0x8010b004 +80103164: 89 43 10 mov %eax,0x10(%ebx) release(&ptable.lock); -8010328f: 83 ec 0c sub $0xc,%esp -80103292: 68 40 59 11 80 push $0x80115940 -80103297: e8 68 0c 00 00 call 80103f04 +80103167: 83 ec 0c sub $0xc,%esp +8010316a: 68 20 2d 11 80 push $0x80112d20 +8010316f: e8 f4 0b 00 00 call 80103d68 if((p->kstack = kalloc()) == 0){ -8010329c: e8 78 ef ff ff call 80102219 -801032a1: 89 43 08 mov %eax,0x8(%ebx) -801032a4: 83 c4 10 add $0x10,%esp -801032a7: 85 c0 test %eax,%eax -801032a9: 74 37 je 801032e2 +80103174: e8 d1 ef ff ff call 8010214a +80103179: 89 43 08 mov %eax,0x8(%ebx) +8010317c: 83 c4 10 add $0x10,%esp +8010317f: 85 c0 test %eax,%eax +80103181: 74 37 je 801031ba sp -= sizeof *p->tf; -801032ab: 8d 90 b4 0f 00 00 lea 0xfb4(%eax),%edx -801032b1: 89 53 18 mov %edx,0x18(%ebx) +80103183: 8d 90 b4 0f 00 00 lea 0xfb4(%eax),%edx +80103189: 89 53 18 mov %edx,0x18(%ebx) *(uint*)sp = (uint)trapret; -801032b4: c7 80 b0 0f 00 00 67 movl $0x80105067,0xfb0(%eax) -801032bb: 50 10 80 +8010318c: c7 80 b0 0f 00 00 35 movl $0x80104e35,0xfb0(%eax) +80103193: 4e 10 80 sp -= sizeof *p->context; -801032be: 05 9c 0f 00 00 add $0xf9c,%eax +80103196: 05 9c 0f 00 00 add $0xf9c,%eax p->context = (struct context*)sp; -801032c3: 89 43 1c mov %eax,0x1c(%ebx) +8010319b: 89 43 1c mov %eax,0x1c(%ebx) memset(p->context, 0, sizeof *p->context); -801032c6: 83 ec 04 sub $0x4,%esp -801032c9: 6a 14 push $0x14 -801032cb: 6a 00 push $0x0 -801032cd: 50 push %eax -801032ce: e8 7c 0c 00 00 call 80103f4f +8010319e: 83 ec 04 sub $0x4,%esp +801031a1: 6a 14 push $0x14 +801031a3: 6a 00 push $0x0 +801031a5: 50 push %eax +801031a6: e8 04 0c 00 00 call 80103daf p->context->eip = (uint)forkret; -801032d3: 8b 43 1c mov 0x1c(%ebx),%eax -801032d6: c7 40 10 ed 32 10 80 movl $0x801032ed,0x10(%eax) +801031ab: 8b 43 1c mov 0x1c(%ebx),%eax +801031ae: c7 40 10 c5 31 10 80 movl $0x801031c5,0x10(%eax) return p; -801032dd: 83 c4 10 add $0x10,%esp -801032e0: eb 8e jmp 80103270 +801031b5: 83 c4 10 add $0x10,%esp +801031b8: eb 8e jmp 80103148 p->state = UNUSED; -801032e2: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx) +801031ba: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx) return 0; -801032e9: 89 c3 mov %eax,%ebx -801032eb: eb 83 jmp 80103270 +801031c1: 89 c3 mov %eax,%ebx +801031c3: eb 83 jmp 80103148 -801032ed : +801031c5 : { -801032ed: f3 0f 1e fb endbr32 -801032f1: 55 push %ebp -801032f2: 89 e5 mov %esp,%ebp -801032f4: 83 ec 14 sub $0x14,%esp +801031c5: 55 push %ebp +801031c6: 89 e5 mov %esp,%ebp +801031c8: 83 ec 14 sub $0x14,%esp release(&ptable.lock); -801032f7: 68 40 59 11 80 push $0x80115940 -801032fc: e8 03 0c 00 00 call 80103f04 +801031cb: 68 20 2d 11 80 push $0x80112d20 +801031d0: e8 93 0b 00 00 call 80103d68 if (first) { -80103301: 83 c4 10 add $0x10,%esp -80103304: 83 3d 00 b0 10 80 00 cmpl $0x0,0x8010b000 -8010330b: 75 02 jne 8010330f +801031d5: 83 c4 10 add $0x10,%esp +801031d8: 83 3d 00 b0 10 80 00 cmpl $0x0,0x8010b000 +801031df: 75 02 jne 801031e3 } -8010330d: c9 leave -8010330e: c3 ret +801031e1: c9 leave +801031e2: c3 ret first = 0; -8010330f: c7 05 00 b0 10 80 00 movl $0x0,0x8010b000 -80103316: 00 00 00 +801031e3: c7 05 00 b0 10 80 00 movl $0x0,0x8010b000 +801031ea: 00 00 00 iinit(ROOTDEV); -80103319: 83 ec 0c sub $0xc,%esp -8010331c: 6a 01 push $0x1 -8010331e: e8 19 e0 ff ff call 8010133c +801031ed: 83 ec 0c sub $0xc,%esp +801031f0: 6a 01 push $0x1 +801031f2: e8 dc e0 ff ff call 801012d3 initlog(ROOTDEV); -80103323: c7 04 24 01 00 00 00 movl $0x1,(%esp) -8010332a: e8 ba f4 ff ff call 801027e9 -8010332f: 83 c4 10 add $0x10,%esp +801031f7: c7 04 24 01 00 00 00 movl $0x1,(%esp) +801031fe: e8 e8 f4 ff ff call 801026eb +80103203: 83 c4 10 add $0x10,%esp } -80103332: eb d9 jmp 8010330d +80103206: eb d9 jmp 801031e1 -80103334 : +80103208 : { -80103334: f3 0f 1e fb endbr32 -80103338: 55 push %ebp -80103339: 89 e5 mov %esp,%ebp -8010333b: 83 ec 0c sub $0xc,%esp +80103208: 55 push %ebp +80103209: 89 e5 mov %esp,%ebp +8010320b: 83 ec 0c sub $0xc,%esp memset(ptable.proc, 0, sizeof *ptable.proc); -8010333e: 68 84 00 00 00 push $0x84 -80103343: 6a 00 push $0x0 -80103345: 68 74 59 11 80 push $0x80115974 -8010334a: e8 00 0c 00 00 call 80103f4f +8010320e: 68 84 00 00 00 push $0x84 +80103213: 6a 00 push $0x0 +80103215: 68 54 2d 11 80 push $0x80112d54 +8010321a: e8 90 0b 00 00 call 80103daf initlock(&ptable.lock, "ptable"); -8010334f: 83 c4 08 add $0x8,%esp -80103352: 68 c0 7d 10 80 push $0x80107dc0 -80103357: 68 40 59 11 80 push $0x80115940 -8010335c: e8 dc 09 00 00 call 80103d3d -} -80103361: 83 c4 10 add $0x10,%esp -80103364: c9 leave -80103365: c3 ret - -80103366 : -{ -80103366: f3 0f 1e fb endbr32 -8010336a: 55 push %ebp -8010336b: 89 e5 mov %esp,%ebp -8010336d: 56 push %esi -8010336e: 53 push %ebx +8010321f: 83 c4 08 add $0x8,%esp +80103222: 68 e0 7a 10 80 push $0x80107ae0 +80103227: 68 20 2d 11 80 push $0x80112d20 +8010322c: e8 87 09 00 00 call 80103bb8 +} +80103231: 83 c4 10 add $0x10,%esp +80103234: c9 leave +80103235: c3 ret + +80103236 : +{ +80103236: 55 push %ebp +80103237: 89 e5 mov %esp,%ebp +80103239: 56 push %esi +8010323a: 53 push %ebx asm volatile("pushfl; popl %0" : "=r" (eflags)); -8010336f: 9c pushf -80103370: 58 pop %eax +8010323b: 9c pushf +8010323c: 58 pop %eax if(readeflags()&FL_IF) -80103371: f6 c4 02 test $0x2,%ah -80103374: 75 3b jne 801033b1 +8010323d: f6 c4 02 test $0x2,%ah +80103240: 75 39 jne 8010327b apicid = lapicid(); -80103376: e8 89 f1 ff ff call 80102504 -8010337b: 89 c3 mov %eax,%ebx +80103242: e8 d3 f1 ff ff call 8010241a for (i = 0; i < ncpu; ++i) { -8010337d: 8b 35 20 59 11 80 mov 0x80115920,%esi -80103383: 85 f6 test %esi,%esi -80103385: 7e 1d jle 801033a4 -80103387: ba 00 00 00 00 mov $0x0,%edx +80103247: 8b 35 84 27 11 80 mov 0x80112784,%esi +8010324d: 85 f6 test %esi,%esi +8010324f: 7e 1d jle 8010326e +80103251: ba 00 00 00 00 mov $0x0,%edx if (cpus[i].apicid == apicid) -8010338c: 69 ca b0 00 00 00 imul $0xb0,%edx,%ecx -80103392: 0f b6 81 a0 53 11 80 movzbl -0x7feeac60(%ecx),%eax -80103399: 39 d8 cmp %ebx,%eax -8010339b: 74 21 je 801033be +80103256: 69 ca b0 00 00 00 imul $0xb0,%edx,%ecx +8010325c: 0f b6 99 a0 27 11 80 movzbl -0x7feed860(%ecx),%ebx +80103263: 39 c3 cmp %eax,%ebx +80103265: 74 21 je 80103288 for (i = 0; i < ncpu; ++i) { -8010339d: 83 c2 01 add $0x1,%edx -801033a0: 39 f2 cmp %esi,%edx -801033a2: 75 e8 jne 8010338c +80103267: 83 c2 01 add $0x1,%edx +8010326a: 39 f2 cmp %esi,%edx +8010326c: 75 e8 jne 80103256 panic("unknown apicid\n"); -801033a4: 83 ec 0c sub $0xc,%esp -801033a7: 68 c7 7d 10 80 push $0x80107dc7 -801033ac: e8 a7 cf ff ff call 80100358 +8010326e: 83 ec 0c sub $0xc,%esp +80103271: 68 e7 7a 10 80 push $0x80107ae7 +80103276: e8 c5 d0 ff ff call 80100340 panic("mycpu called with interrupts enabled\n"); -801033b1: 83 ec 0c sub $0xc,%esp -801033b4: 68 bc 7e 10 80 push $0x80107ebc -801033b9: e8 9a cf ff ff call 80100358 +8010327b: 83 ec 0c sub $0xc,%esp +8010327e: 68 dc 7b 10 80 push $0x80107bdc +80103283: e8 b8 d0 ff ff call 80100340 return &cpus[i]; -801033be: 8d 81 a0 53 11 80 lea -0x7feeac60(%ecx),%eax +80103288: 8d 81 a0 27 11 80 lea -0x7feed860(%ecx),%eax } -801033c4: 8d 65 f8 lea -0x8(%ebp),%esp -801033c7: 5b pop %ebx -801033c8: 5e pop %esi -801033c9: 5d pop %ebp -801033ca: c3 ret +8010328e: 8d 65 f8 lea -0x8(%ebp),%esp +80103291: 5b pop %ebx +80103292: 5e pop %esi +80103293: 5d pop %ebp +80103294: c3 ret -801033cb : +80103295 : cpuid() { -801033cb: f3 0f 1e fb endbr32 -801033cf: 55 push %ebp -801033d0: 89 e5 mov %esp,%ebp -801033d2: 83 ec 08 sub $0x8,%esp +80103295: 55 push %ebp +80103296: 89 e5 mov %esp,%ebp +80103298: 83 ec 08 sub $0x8,%esp return mycpu()-cpus; -801033d5: e8 8c ff ff ff call 80103366 -801033da: 2d a0 53 11 80 sub $0x801153a0,%eax -801033df: c1 f8 04 sar $0x4,%eax -801033e2: 69 c0 a3 8b 2e ba imul $0xba2e8ba3,%eax,%eax +8010329b: e8 96 ff ff ff call 80103236 +801032a0: 2d a0 27 11 80 sub $0x801127a0,%eax +801032a5: c1 f8 04 sar $0x4,%eax +801032a8: 69 c0 a3 8b 2e ba imul $0xba2e8ba3,%eax,%eax } -801033e8: c9 leave -801033e9: c3 ret +801032ae: c9 leave +801032af: c3 ret -801033ea : +801032b0 : myproc(void) { -801033ea: f3 0f 1e fb endbr32 -801033ee: 55 push %ebp -801033ef: 89 e5 mov %esp,%ebp -801033f1: 53 push %ebx -801033f2: 83 ec 04 sub $0x4,%esp +801032b0: 55 push %ebp +801032b1: 89 e5 mov %esp,%ebp +801032b3: 53 push %ebx +801032b4: 83 ec 04 sub $0x4,%esp pushcli(); -801033f5: e8 c2 09 00 00 call 80103dbc +801032b7: e8 75 09 00 00 call 80103c31 c = mycpu(); -801033fa: e8 67 ff ff ff call 80103366 +801032bc: e8 75 ff ff ff call 80103236 p = c->proc; -801033ff: 8b 98 ac 00 00 00 mov 0xac(%eax),%ebx +801032c1: 8b 98 ac 00 00 00 mov 0xac(%eax),%ebx popcli(); -80103405: e8 f3 09 00 00 call 80103dfd +801032c7: e8 a1 09 00 00 call 80103c6d } -8010340a: 89 d8 mov %ebx,%eax -8010340c: 83 c4 04 add $0x4,%esp -8010340f: 5b pop %ebx -80103410: 5d pop %ebp -80103411: c3 ret +801032cc: 89 d8 mov %ebx,%eax +801032ce: 8b 5d fc mov -0x4(%ebp),%ebx +801032d1: c9 leave +801032d2: c3 ret -80103412 : +801032d3 : { -80103412: f3 0f 1e fb endbr32 -80103416: 55 push %ebp -80103417: 89 e5 mov %esp,%ebp -80103419: 53 push %ebx -8010341a: 83 ec 04 sub $0x4,%esp +801032d3: 55 push %ebp +801032d4: 89 e5 mov %esp,%ebp +801032d6: 53 push %ebx +801032d7: 83 ec 04 sub $0x4,%esp p = allocproc(); -8010341d: e8 0c fe ff ff call 8010322e -80103422: 89 c3 mov %eax,%ebx +801032da: e8 27 fe ff ff call 80103106 +801032df: 89 c3 mov %eax,%ebx initproc = p; -80103424: a3 b8 b5 10 80 mov %eax,0x8010b5b8 +801032e1: a3 94 35 11 80 mov %eax,0x80113594 if((p->pgdir = setupkvm()) == 0) -80103429: e8 d0 30 00 00 call 801064fe -8010342e: 89 43 04 mov %eax,0x4(%ebx) -80103431: 85 c0 test %eax,%eax -80103433: 0f 84 b7 00 00 00 je 801034f0 +801032e6: e8 a6 2f 00 00 call 80106291 +801032eb: 89 43 04 mov %eax,0x4(%ebx) +801032ee: 85 c0 test %eax,%eax +801032f0: 0f 84 b7 00 00 00 je 801033ad inituvm(p->pgdir, _binary_initcode_start, (int)_binary_initcode_size); -80103439: 83 ec 04 sub $0x4,%esp -8010343c: 68 2c 00 00 00 push $0x2c -80103441: 68 60 b4 10 80 push $0x8010b460 -80103446: 50 push %eax -80103447: e8 99 2d 00 00 call 801061e5 +801032f6: 83 ec 04 sub $0x4,%esp +801032f9: 68 2c 00 00 00 push $0x2c +801032fe: 68 60 b4 10 80 push $0x8010b460 +80103303: 50 push %eax +80103304: e8 84 2c 00 00 call 80105f8d p->sz = PGSIZE; -8010344c: c7 03 00 10 00 00 movl $0x1000,(%ebx) +80103309: c7 03 00 10 00 00 movl $0x1000,(%ebx) memset(p->tf, 0, sizeof(*p->tf)); -80103452: 83 c4 0c add $0xc,%esp -80103455: 6a 4c push $0x4c -80103457: 6a 00 push $0x0 -80103459: ff 73 18 pushl 0x18(%ebx) -8010345c: e8 ee 0a 00 00 call 80103f4f +8010330f: 83 c4 0c add $0xc,%esp +80103312: 6a 4c push $0x4c +80103314: 6a 00 push $0x0 +80103316: ff 73 18 push 0x18(%ebx) +80103319: e8 91 0a 00 00 call 80103daf p->tf->cs = (SEG_UCODE << 3) | DPL_USER; -80103461: 8b 43 18 mov 0x18(%ebx),%eax -80103464: 66 c7 40 3c 1b 00 movw $0x1b,0x3c(%eax) +8010331e: 8b 43 18 mov 0x18(%ebx),%eax +80103321: 66 c7 40 3c 1b 00 movw $0x1b,0x3c(%eax) p->tf->ds = (SEG_UDATA << 3) | DPL_USER; -8010346a: 8b 43 18 mov 0x18(%ebx),%eax -8010346d: 66 c7 40 2c 23 00 movw $0x23,0x2c(%eax) +80103327: 8b 43 18 mov 0x18(%ebx),%eax +8010332a: 66 c7 40 2c 23 00 movw $0x23,0x2c(%eax) p->tf->es = p->tf->ds; -80103473: 8b 43 18 mov 0x18(%ebx),%eax -80103476: 0f b7 50 2c movzwl 0x2c(%eax),%edx -8010347a: 66 89 50 28 mov %dx,0x28(%eax) +80103330: 8b 43 18 mov 0x18(%ebx),%eax +80103333: 0f b7 50 2c movzwl 0x2c(%eax),%edx +80103337: 66 89 50 28 mov %dx,0x28(%eax) p->tf->ss = p->tf->ds; -8010347e: 8b 43 18 mov 0x18(%ebx),%eax -80103481: 0f b7 50 2c movzwl 0x2c(%eax),%edx -80103485: 66 89 50 48 mov %dx,0x48(%eax) +8010333b: 8b 43 18 mov 0x18(%ebx),%eax +8010333e: 0f b7 50 2c movzwl 0x2c(%eax),%edx +80103342: 66 89 50 48 mov %dx,0x48(%eax) p->tf->eflags = FL_IF; -80103489: 8b 43 18 mov 0x18(%ebx),%eax -8010348c: c7 40 40 00 02 00 00 movl $0x200,0x40(%eax) +80103346: 8b 43 18 mov 0x18(%ebx),%eax +80103349: c7 40 40 00 02 00 00 movl $0x200,0x40(%eax) p->tf->esp = PGSIZE; -80103493: 8b 43 18 mov 0x18(%ebx),%eax -80103496: c7 40 44 00 10 00 00 movl $0x1000,0x44(%eax) +80103350: 8b 43 18 mov 0x18(%ebx),%eax +80103353: c7 40 44 00 10 00 00 movl $0x1000,0x44(%eax) p->tf->eip = 0; // beginning of initcode.S -8010349d: 8b 43 18 mov 0x18(%ebx),%eax -801034a0: c7 40 38 00 00 00 00 movl $0x0,0x38(%eax) +8010335a: 8b 43 18 mov 0x18(%ebx),%eax +8010335d: c7 40 38 00 00 00 00 movl $0x0,0x38(%eax) safestrcpy(p->name, "initcode", sizeof(p->name)); -801034a7: 83 c4 0c add $0xc,%esp -801034aa: 6a 10 push $0x10 -801034ac: 68 f0 7d 10 80 push $0x80107df0 -801034b1: 8d 43 6c lea 0x6c(%ebx),%eax -801034b4: 50 push %eax -801034b5: e8 2b 0c 00 00 call 801040e5 +80103364: 83 c4 0c add $0xc,%esp +80103367: 6a 10 push $0x10 +80103369: 68 10 7b 10 80 push $0x80107b10 +8010336e: 8d 43 6c lea 0x6c(%ebx),%eax +80103371: 50 push %eax +80103372: e8 b8 0b 00 00 call 80103f2f p->cwd = namei("/"); -801034ba: c7 04 24 f9 7d 10 80 movl $0x80107df9,(%esp) -801034c1: e8 1e e8 ff ff call 80101ce4 -801034c6: 89 43 68 mov %eax,0x68(%ebx) +80103377: c7 04 24 19 7b 10 80 movl $0x80107b19,(%esp) +8010337e: e8 be e8 ff ff call 80101c41 +80103383: 89 43 68 mov %eax,0x68(%ebx) acquire(&ptable.lock); -801034c9: c7 04 24 40 59 11 80 movl $0x80115940,(%esp) -801034d0: e8 c4 09 00 00 call 80103e99 +80103386: c7 04 24 20 2d 11 80 movl $0x80112d20,(%esp) +8010338d: e8 6f 09 00 00 call 80103d01 p->state = RUNNABLE; -801034d5: c7 43 0c 03 00 00 00 movl $0x3,0xc(%ebx) +80103392: c7 43 0c 03 00 00 00 movl $0x3,0xc(%ebx) release(&ptable.lock); -801034dc: c7 04 24 40 59 11 80 movl $0x80115940,(%esp) -801034e3: e8 1c 0a 00 00 call 80103f04 +80103399: c7 04 24 20 2d 11 80 movl $0x80112d20,(%esp) +801033a0: e8 c3 09 00 00 call 80103d68 } -801034e8: 83 c4 10 add $0x10,%esp -801034eb: 8b 5d fc mov -0x4(%ebp),%ebx -801034ee: c9 leave -801034ef: c3 ret +801033a5: 83 c4 10 add $0x10,%esp +801033a8: 8b 5d fc mov -0x4(%ebp),%ebx +801033ab: c9 leave +801033ac: c3 ret panic("userinit: out of memory?"); -801034f0: 83 ec 0c sub $0xc,%esp -801034f3: 68 d7 7d 10 80 push $0x80107dd7 -801034f8: e8 5b ce ff ff call 80100358 - -801034fd : -{ -801034fd: f3 0f 1e fb endbr32 -80103501: 55 push %ebp -80103502: 89 e5 mov %esp,%ebp -80103504: 56 push %esi -80103505: 53 push %ebx -80103506: 8b 75 08 mov 0x8(%ebp),%esi +801033ad: 83 ec 0c sub $0xc,%esp +801033b0: 68 f7 7a 10 80 push $0x80107af7 +801033b5: e8 86 cf ff ff call 80100340 + +801033ba : +{ +801033ba: 55 push %ebp +801033bb: 89 e5 mov %esp,%ebp +801033bd: 56 push %esi +801033be: 53 push %ebx +801033bf: 8b 75 08 mov 0x8(%ebp),%esi struct proc *curproc = myproc(); -80103509: e8 dc fe ff ff call 801033ea -8010350e: 89 c3 mov %eax,%ebx +801033c2: e8 e9 fe ff ff call 801032b0 +801033c7: 89 c3 mov %eax,%ebx sz = curproc->sz; -80103510: 8b 00 mov (%eax),%eax +801033c9: 8b 00 mov (%eax),%eax if(n > 0){ -80103512: 85 f6 test %esi,%esi -80103514: 7f 1c jg 80103532 +801033cb: 85 f6 test %esi,%esi +801033cd: 7f 1c jg 801033eb } else if(n < 0){ -80103516: 78 37 js 8010354f +801033cf: 78 37 js 80103408 curproc->sz = sz; -80103518: 89 03 mov %eax,(%ebx) +801033d1: 89 03 mov %eax,(%ebx) switchuvm(curproc); -8010351a: 83 ec 0c sub $0xc,%esp -8010351d: 53 push %ebx -8010351e: e8 c0 2b 00 00 call 801060e3 +801033d3: 83 ec 0c sub $0xc,%esp +801033d6: 53 push %ebx +801033d7: e8 b3 2a 00 00 call 80105e8f return 0; -80103523: 83 c4 10 add $0x10,%esp -80103526: b8 00 00 00 00 mov $0x0,%eax -} -8010352b: 8d 65 f8 lea -0x8(%ebp),%esp -8010352e: 5b pop %ebx -8010352f: 5e pop %esi -80103530: 5d pop %ebp -80103531: c3 ret +801033dc: 83 c4 10 add $0x10,%esp +801033df: b8 00 00 00 00 mov $0x0,%eax +} +801033e4: 8d 65 f8 lea -0x8(%ebp),%esp +801033e7: 5b pop %ebx +801033e8: 5e pop %esi +801033e9: 5d pop %ebp +801033ea: c3 ret if((sz = allocuvm(curproc->pgdir, sz, sz + n)) == 0) -80103532: 83 ec 04 sub $0x4,%esp -80103535: 01 c6 add %eax,%esi -80103537: 56 push %esi -80103538: 50 push %eax -80103539: ff 73 04 pushl 0x4(%ebx) -8010353c: e8 54 2e 00 00 call 80106395 -80103541: 83 c4 10 add $0x10,%esp -80103544: 85 c0 test %eax,%eax -80103546: 75 d0 jne 80103518 +801033eb: 83 ec 04 sub $0x4,%esp +801033ee: 01 c6 add %eax,%esi +801033f0: 56 push %esi +801033f1: 50 push %eax +801033f2: ff 73 04 push 0x4(%ebx) +801033f5: e8 36 2d 00 00 call 80106130 +801033fa: 83 c4 10 add $0x10,%esp +801033fd: 85 c0 test %eax,%eax +801033ff: 75 d0 jne 801033d1 return -1; -80103548: b8 ff ff ff ff mov $0xffffffff,%eax -8010354d: eb dc jmp 8010352b +80103401: b8 ff ff ff ff mov $0xffffffff,%eax +80103406: eb dc jmp 801033e4 if((sz = deallocuvm(curproc->pgdir, sz, sz + n)) == 0) -8010354f: 83 ec 04 sub $0x4,%esp -80103552: 01 c6 add %eax,%esi -80103554: 56 push %esi -80103555: 50 push %eax -80103556: ff 73 04 pushl 0x4(%ebx) -80103559: e8 a4 2d 00 00 call 80106302 -8010355e: 83 c4 10 add $0x10,%esp -80103561: 85 c0 test %eax,%eax -80103563: 75 b3 jne 80103518 +80103408: 83 ec 04 sub $0x4,%esp +8010340b: 01 c6 add %eax,%esi +8010340d: 56 push %esi +8010340e: 50 push %eax +8010340f: ff 73 04 push 0x4(%ebx) +80103412: e8 8a 2c 00 00 call 801060a1 +80103417: 83 c4 10 add $0x10,%esp +8010341a: 85 c0 test %eax,%eax +8010341c: 75 b3 jne 801033d1 return -1; -80103565: b8 ff ff ff ff mov $0xffffffff,%eax -8010356a: eb bf jmp 8010352b - -8010356c : -{ -8010356c: f3 0f 1e fb endbr32 -80103570: 55 push %ebp -80103571: 89 e5 mov %esp,%ebp -80103573: 57 push %edi -80103574: 56 push %esi -80103575: 53 push %ebx -80103576: 83 ec 1c sub $0x1c,%esp +8010341e: b8 ff ff ff ff mov $0xffffffff,%eax +80103423: eb bf jmp 801033e4 + +80103425 : +{ +80103425: 55 push %ebp +80103426: 89 e5 mov %esp,%ebp +80103428: 57 push %edi +80103429: 56 push %esi +8010342a: 53 push %ebx +8010342b: 83 ec 1c sub $0x1c,%esp struct proc *curproc = myproc(); -80103579: e8 6c fe ff ff call 801033ea -8010357e: 89 c3 mov %eax,%ebx +8010342e: e8 7d fe ff ff call 801032b0 +80103433: 89 c3 mov %eax,%ebx if((np = allocproc()) == 0){ -80103580: e8 a9 fc ff ff call 8010322e -80103585: 89 45 e4 mov %eax,-0x1c(%ebp) -80103588: 85 c0 test %eax,%eax -8010358a: 0f 84 e0 00 00 00 je 80103670 -80103590: 89 c7 mov %eax,%edi +80103435: e8 cc fc ff ff call 80103106 +8010343a: 89 45 e4 mov %eax,-0x1c(%ebp) +8010343d: 85 c0 test %eax,%eax +8010343f: 0f 84 e0 00 00 00 je 80103525 +80103445: 89 c7 mov %eax,%edi if((np->pgdir = copyuvm(curproc->pgdir, curproc->sz)) == 0){ -80103592: 83 ec 08 sub $0x8,%esp -80103595: ff 33 pushl (%ebx) -80103597: ff 73 04 pushl 0x4(%ebx) -8010359a: e8 1c 30 00 00 call 801065bb -8010359f: 89 47 04 mov %eax,0x4(%edi) -801035a2: 83 c4 10 add $0x10,%esp -801035a5: 85 c0 test %eax,%eax -801035a7: 74 2a je 801035d3 +80103447: 83 ec 08 sub $0x8,%esp +8010344a: ff 33 push (%ebx) +8010344c: ff 73 04 push 0x4(%ebx) +8010344f: e8 ee 2e 00 00 call 80106342 +80103454: 89 47 04 mov %eax,0x4(%edi) +80103457: 83 c4 10 add $0x10,%esp +8010345a: 85 c0 test %eax,%eax +8010345c: 74 2a je 80103488 np->sz = curproc->sz; -801035a9: 8b 03 mov (%ebx),%eax -801035ab: 8b 4d e4 mov -0x1c(%ebp),%ecx -801035ae: 89 01 mov %eax,(%ecx) +8010345e: 8b 03 mov (%ebx),%eax +80103460: 8b 4d e4 mov -0x1c(%ebp),%ecx +80103463: 89 01 mov %eax,(%ecx) np->parent = curproc; -801035b0: 89 c8 mov %ecx,%eax -801035b2: 89 59 14 mov %ebx,0x14(%ecx) +80103465: 89 c8 mov %ecx,%eax +80103467: 89 59 14 mov %ebx,0x14(%ecx) *np->tf = *curproc->tf; -801035b5: 8b 73 18 mov 0x18(%ebx),%esi -801035b8: 8b 79 18 mov 0x18(%ecx),%edi -801035bb: b9 13 00 00 00 mov $0x13,%ecx -801035c0: f3 a5 rep movsl %ds:(%esi),%es:(%edi) +8010346a: 8b 73 18 mov 0x18(%ebx),%esi +8010346d: 8b 79 18 mov 0x18(%ecx),%edi +80103470: b9 13 00 00 00 mov $0x13,%ecx +80103475: f3 a5 rep movsl %ds:(%esi),%es:(%edi) np->tf->eax = 0; -801035c2: 8b 40 18 mov 0x18(%eax),%eax -801035c5: c7 40 1c 00 00 00 00 movl $0x0,0x1c(%eax) +80103477: 8b 40 18 mov 0x18(%eax),%eax +8010347a: c7 40 1c 00 00 00 00 movl $0x0,0x1c(%eax) for(i = 0; i < NOFILE; i++) -801035cc: be 00 00 00 00 mov $0x0,%esi -801035d1: eb 41 jmp 80103614 +80103481: be 00 00 00 00 mov $0x0,%esi +80103486: eb 2e jmp 801034b6 kfree(np->kstack); -801035d3: 83 ec 0c sub $0xc,%esp -801035d6: 8b 5d e4 mov -0x1c(%ebp),%ebx -801035d9: ff 73 08 pushl 0x8(%ebx) -801035dc: e8 da ea ff ff call 801020bb +80103488: 83 ec 0c sub $0xc,%esp +8010348b: 8b 5d e4 mov -0x1c(%ebp),%ebx +8010348e: ff 73 08 push 0x8(%ebx) +80103491: e8 66 eb ff ff call 80101ffc np->kstack = 0; -801035e1: c7 43 08 00 00 00 00 movl $0x0,0x8(%ebx) +80103496: c7 43 08 00 00 00 00 movl $0x0,0x8(%ebx) np->state = UNUSED; -801035e8: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx) +8010349d: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx) return -1; -801035ef: 83 c4 10 add $0x10,%esp -801035f2: bb ff ff ff ff mov $0xffffffff,%ebx -801035f7: eb 6d jmp 80103666 - np->ofile[i] = filedup(curproc->ofile[i]); -801035f9: 83 ec 0c sub $0xc,%esp -801035fc: 50 push %eax -801035fd: e8 36 d7 ff ff call 80100d38 -80103602: 8b 55 e4 mov -0x1c(%ebp),%edx -80103605: 89 44 b2 28 mov %eax,0x28(%edx,%esi,4) -80103609: 83 c4 10 add $0x10,%esp +801034a4: 83 c4 10 add $0x10,%esp +801034a7: bb ff ff ff ff mov $0xffffffff,%ebx +801034ac: eb 6d jmp 8010351b for(i = 0; i < NOFILE; i++) -8010360c: 83 c6 01 add $0x1,%esi -8010360f: 83 fe 10 cmp $0x10,%esi -80103612: 74 0a je 8010361e +801034ae: 83 c6 01 add $0x1,%esi +801034b1: 83 fe 10 cmp $0x10,%esi +801034b4: 74 1d je 801034d3 if(curproc->ofile[i]) -80103614: 8b 44 b3 28 mov 0x28(%ebx,%esi,4),%eax -80103618: 85 c0 test %eax,%eax -8010361a: 75 dd jne 801035f9 -8010361c: eb ee jmp 8010360c +801034b6: 8b 44 b3 28 mov 0x28(%ebx,%esi,4),%eax +801034ba: 85 c0 test %eax,%eax +801034bc: 74 f0 je 801034ae + np->ofile[i] = filedup(curproc->ofile[i]); +801034be: 83 ec 0c sub $0xc,%esp +801034c1: 50 push %eax +801034c2: e8 2d d8 ff ff call 80100cf4 +801034c7: 8b 55 e4 mov -0x1c(%ebp),%edx +801034ca: 89 44 b2 28 mov %eax,0x28(%edx,%esi,4) +801034ce: 83 c4 10 add $0x10,%esp +801034d1: eb db jmp 801034ae np->cwd = idup(curproc->cwd); -8010361e: 83 ec 0c sub $0xc,%esp -80103621: ff 73 68 pushl 0x68(%ebx) -80103624: e8 d4 de ff ff call 801014fd -80103629: 8b 7d e4 mov -0x1c(%ebp),%edi -8010362c: 89 47 68 mov %eax,0x68(%edi) +801034d3: 83 ec 0c sub $0xc,%esp +801034d6: ff 73 68 push 0x68(%ebx) +801034d9: e8 aa df ff ff call 80101488 +801034de: 8b 7d e4 mov -0x1c(%ebp),%edi +801034e1: 89 47 68 mov %eax,0x68(%edi) safestrcpy(np->name, curproc->name, sizeof(curproc->name)); -8010362f: 83 c4 0c add $0xc,%esp -80103632: 6a 10 push $0x10 -80103634: 83 c3 6c add $0x6c,%ebx -80103637: 53 push %ebx -80103638: 8d 47 6c lea 0x6c(%edi),%eax -8010363b: 50 push %eax -8010363c: e8 a4 0a 00 00 call 801040e5 +801034e4: 83 c4 0c add $0xc,%esp +801034e7: 6a 10 push $0x10 +801034e9: 83 c3 6c add $0x6c,%ebx +801034ec: 53 push %ebx +801034ed: 8d 47 6c lea 0x6c(%edi),%eax +801034f0: 50 push %eax +801034f1: e8 39 0a 00 00 call 80103f2f pid = np->pid; -80103641: 8b 5f 10 mov 0x10(%edi),%ebx +801034f6: 8b 5f 10 mov 0x10(%edi),%ebx acquire(&ptable.lock); -80103644: c7 04 24 40 59 11 80 movl $0x80115940,(%esp) -8010364b: e8 49 08 00 00 call 80103e99 +801034f9: c7 04 24 20 2d 11 80 movl $0x80112d20,(%esp) +80103500: e8 fc 07 00 00 call 80103d01 np->state = RUNNABLE; -80103650: c7 47 0c 03 00 00 00 movl $0x3,0xc(%edi) +80103505: c7 47 0c 03 00 00 00 movl $0x3,0xc(%edi) release(&ptable.lock); -80103657: c7 04 24 40 59 11 80 movl $0x80115940,(%esp) -8010365e: e8 a1 08 00 00 call 80103f04 +8010350c: c7 04 24 20 2d 11 80 movl $0x80112d20,(%esp) +80103513: e8 50 08 00 00 call 80103d68 return pid; -80103663: 83 c4 10 add $0x10,%esp -} -80103666: 89 d8 mov %ebx,%eax -80103668: 8d 65 f4 lea -0xc(%ebp),%esp -8010366b: 5b pop %ebx -8010366c: 5e pop %esi -8010366d: 5f pop %edi -8010366e: 5d pop %ebp -8010366f: c3 ret +80103518: 83 c4 10 add $0x10,%esp +} +8010351b: 89 d8 mov %ebx,%eax +8010351d: 8d 65 f4 lea -0xc(%ebp),%esp +80103520: 5b pop %ebx +80103521: 5e pop %esi +80103522: 5f pop %edi +80103523: 5d pop %ebp +80103524: c3 ret return -1; -80103670: bb ff ff ff ff mov $0xffffffff,%ebx -80103675: eb ef jmp 80103666 - -80103677 : -{ -80103677: f3 0f 1e fb endbr32 -8010367b: 55 push %ebp -8010367c: 89 e5 mov %esp,%ebp -8010367e: 57 push %edi -8010367f: 56 push %esi -80103680: 53 push %ebx -80103681: 83 ec 0c sub $0xc,%esp +80103525: bb ff ff ff ff mov $0xffffffff,%ebx +8010352a: eb ef jmp 8010351b + +8010352c : +{ +8010352c: 55 push %ebp +8010352d: 89 e5 mov %esp,%ebp +8010352f: 57 push %edi +80103530: 56 push %esi +80103531: 53 push %ebx +80103532: 83 ec 0c sub $0xc,%esp struct cpu *c = mycpu(); -80103684: e8 dd fc ff ff call 80103366 -80103689: 89 c6 mov %eax,%esi +80103535: e8 fc fc ff ff call 80103236 +8010353a: 89 c6 mov %eax,%esi c->proc = 0; -8010368b: c7 80 ac 00 00 00 00 movl $0x0,0xac(%eax) -80103692: 00 00 00 +8010353c: c7 80 ac 00 00 00 00 movl $0x0,0xac(%eax) +80103543: 00 00 00 swtch(&(c->scheduler), p->context); -80103695: 8d 78 04 lea 0x4(%eax),%edi -80103698: eb 5a jmp 801036f4 +80103546: 8d 78 04 lea 0x4(%eax),%edi +80103549: eb 5a jmp 801035a5 for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){ -8010369a: 81 c3 84 00 00 00 add $0x84,%ebx -801036a0: 81 fb b4 61 11 80 cmp $0x801161b4,%ebx -801036a6: 74 3c je 801036e4 +8010354b: 81 c3 84 00 00 00 add $0x84,%ebx +80103551: 81 fb 94 35 11 80 cmp $0x80113594,%ebx +80103557: 74 3c je 80103595 if(p->state != RUNNABLE) -801036a8: 83 7b 0c 03 cmpl $0x3,0xc(%ebx) -801036ac: 75 ec jne 8010369a +80103559: 83 7b 0c 03 cmpl $0x3,0xc(%ebx) +8010355d: 75 ec jne 8010354b c->proc = p; -801036ae: 89 9e ac 00 00 00 mov %ebx,0xac(%esi) +8010355f: 89 9e ac 00 00 00 mov %ebx,0xac(%esi) switchuvm(p); -801036b4: 83 ec 0c sub $0xc,%esp -801036b7: 53 push %ebx -801036b8: e8 26 2a 00 00 call 801060e3 +80103565: 83 ec 0c sub $0xc,%esp +80103568: 53 push %ebx +80103569: e8 21 29 00 00 call 80105e8f p->state = RUNNING; -801036bd: c7 43 0c 04 00 00 00 movl $0x4,0xc(%ebx) +8010356e: c7 43 0c 04 00 00 00 movl $0x4,0xc(%ebx) swtch(&(c->scheduler), p->context); -801036c4: 83 c4 08 add $0x8,%esp -801036c7: ff 73 1c pushl 0x1c(%ebx) -801036ca: 57 push %edi -801036cb: e8 75 0a 00 00 call 80104145 +80103575: 83 c4 08 add $0x8,%esp +80103578: ff 73 1c push 0x1c(%ebx) +8010357b: 57 push %edi +8010357c: e8 06 0a 00 00 call 80103f87 switchkvm(); -801036d0: e8 fc 29 00 00 call 801060d1 +80103581: e8 fb 28 00 00 call 80105e81 c->proc = 0; -801036d5: c7 86 ac 00 00 00 00 movl $0x0,0xac(%esi) -801036dc: 00 00 00 -801036df: 83 c4 10 add $0x10,%esp -801036e2: eb b6 jmp 8010369a +80103586: c7 86 ac 00 00 00 00 movl $0x0,0xac(%esi) +8010358d: 00 00 00 +80103590: 83 c4 10 add $0x10,%esp +80103593: eb b6 jmp 8010354b release(&ptable.lock); -801036e4: 83 ec 0c sub $0xc,%esp -801036e7: 68 40 59 11 80 push $0x80115940 -801036ec: e8 13 08 00 00 call 80103f04 +80103595: 83 ec 0c sub $0xc,%esp +80103598: 68 20 2d 11 80 push $0x80112d20 +8010359d: e8 c6 07 00 00 call 80103d68 sti(); -801036f1: 83 c4 10 add $0x10,%esp +801035a2: 83 c4 10 add $0x10,%esp asm volatile("sti"); -801036f4: fb sti +801035a5: fb sti acquire(&ptable.lock); -801036f5: 83 ec 0c sub $0xc,%esp -801036f8: 68 40 59 11 80 push $0x80115940 -801036fd: e8 97 07 00 00 call 80103e99 -80103702: 83 c4 10 add $0x10,%esp +801035a6: 83 ec 0c sub $0xc,%esp +801035a9: 68 20 2d 11 80 push $0x80112d20 +801035ae: e8 4e 07 00 00 call 80103d01 +801035b3: 83 c4 10 add $0x10,%esp for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){ -80103705: bb 74 59 11 80 mov $0x80115974,%ebx -8010370a: eb 9c jmp 801036a8 +801035b6: bb 54 2d 11 80 mov $0x80112d54,%ebx +801035bb: eb 9c jmp 80103559 -8010370c : +801035bd : { -8010370c: f3 0f 1e fb endbr32 -80103710: 55 push %ebp -80103711: 89 e5 mov %esp,%ebp -80103713: 56 push %esi -80103714: 53 push %ebx +801035bd: 55 push %ebp +801035be: 89 e5 mov %esp,%ebp +801035c0: 56 push %esi +801035c1: 53 push %ebx struct proc *p = myproc(); -80103715: e8 d0 fc ff ff call 801033ea -8010371a: 89 c3 mov %eax,%ebx +801035c2: e8 e9 fc ff ff call 801032b0 +801035c7: 89 c3 mov %eax,%ebx if(!holding(&ptable.lock)) -8010371c: 83 ec 0c sub $0xc,%esp -8010371f: 68 40 59 11 80 push $0x80115940 -80103724: e8 38 07 00 00 call 80103e61 -80103729: 83 c4 10 add $0x10,%esp -8010372c: 85 c0 test %eax,%eax -8010372e: 74 4f je 8010377f +801035c9: 83 ec 0c sub $0xc,%esp +801035cc: 68 20 2d 11 80 push $0x80112d20 +801035d1: e8 f7 06 00 00 call 80103ccd +801035d6: 83 c4 10 add $0x10,%esp +801035d9: 85 c0 test %eax,%eax +801035db: 74 4f je 8010362c if(mycpu()->ncli != 1) -80103730: e8 31 fc ff ff call 80103366 -80103735: 83 b8 a4 00 00 00 01 cmpl $0x1,0xa4(%eax) -8010373c: 75 4e jne 8010378c +801035dd: e8 54 fc ff ff call 80103236 +801035e2: 83 b8 a4 00 00 00 01 cmpl $0x1,0xa4(%eax) +801035e9: 75 4e jne 80103639 if(p->state == RUNNING) -8010373e: 83 7b 0c 04 cmpl $0x4,0xc(%ebx) -80103742: 74 55 je 80103799 +801035eb: 83 7b 0c 04 cmpl $0x4,0xc(%ebx) +801035ef: 74 55 je 80103646 asm volatile("pushfl; popl %0" : "=r" (eflags)); -80103744: 9c pushf -80103745: 58 pop %eax +801035f1: 9c pushf +801035f2: 58 pop %eax if(readeflags()&FL_IF) -80103746: f6 c4 02 test $0x2,%ah -80103749: 75 5b jne 801037a6 +801035f3: f6 c4 02 test $0x2,%ah +801035f6: 75 5b jne 80103653 intena = mycpu()->intena; -8010374b: e8 16 fc ff ff call 80103366 -80103750: 8b b0 a8 00 00 00 mov 0xa8(%eax),%esi +801035f8: e8 39 fc ff ff call 80103236 +801035fd: 8b b0 a8 00 00 00 mov 0xa8(%eax),%esi swtch(&p->context, mycpu()->scheduler); -80103756: e8 0b fc ff ff call 80103366 -8010375b: 83 ec 08 sub $0x8,%esp -8010375e: ff 70 04 pushl 0x4(%eax) -80103761: 83 c3 1c add $0x1c,%ebx -80103764: 53 push %ebx -80103765: e8 db 09 00 00 call 80104145 +80103603: e8 2e fc ff ff call 80103236 +80103608: 83 ec 08 sub $0x8,%esp +8010360b: ff 70 04 push 0x4(%eax) +8010360e: 83 c3 1c add $0x1c,%ebx +80103611: 53 push %ebx +80103612: e8 70 09 00 00 call 80103f87 mycpu()->intena = intena; -8010376a: e8 f7 fb ff ff call 80103366 -8010376f: 89 b0 a8 00 00 00 mov %esi,0xa8(%eax) -} -80103775: 83 c4 10 add $0x10,%esp -80103778: 8d 65 f8 lea -0x8(%ebp),%esp -8010377b: 5b pop %ebx -8010377c: 5e pop %esi -8010377d: 5d pop %ebp -8010377e: c3 ret +80103617: e8 1a fc ff ff call 80103236 +8010361c: 89 b0 a8 00 00 00 mov %esi,0xa8(%eax) +} +80103622: 83 c4 10 add $0x10,%esp +80103625: 8d 65 f8 lea -0x8(%ebp),%esp +80103628: 5b pop %ebx +80103629: 5e pop %esi +8010362a: 5d pop %ebp +8010362b: c3 ret panic("sched ptable.lock"); -8010377f: 83 ec 0c sub $0xc,%esp -80103782: 68 fb 7d 10 80 push $0x80107dfb -80103787: e8 cc cb ff ff call 80100358 +8010362c: 83 ec 0c sub $0xc,%esp +8010362f: 68 1b 7b 10 80 push $0x80107b1b +80103634: e8 07 cd ff ff call 80100340 panic("sched locks"); -8010378c: 83 ec 0c sub $0xc,%esp -8010378f: 68 0d 7e 10 80 push $0x80107e0d -80103794: e8 bf cb ff ff call 80100358 +80103639: 83 ec 0c sub $0xc,%esp +8010363c: 68 2d 7b 10 80 push $0x80107b2d +80103641: e8 fa cc ff ff call 80100340 panic("sched running"); -80103799: 83 ec 0c sub $0xc,%esp -8010379c: 68 19 7e 10 80 push $0x80107e19 -801037a1: e8 b2 cb ff ff call 80100358 +80103646: 83 ec 0c sub $0xc,%esp +80103649: 68 39 7b 10 80 push $0x80107b39 +8010364e: e8 ed cc ff ff call 80100340 panic("sched interruptible"); -801037a6: 83 ec 0c sub $0xc,%esp -801037a9: 68 27 7e 10 80 push $0x80107e27 -801037ae: e8 a5 cb ff ff call 80100358 - -801037b3 : -{ -801037b3: f3 0f 1e fb endbr32 -801037b7: 55 push %ebp -801037b8: 89 e5 mov %esp,%ebp -801037ba: 57 push %edi -801037bb: 56 push %esi -801037bc: 53 push %ebx -801037bd: 83 ec 0c sub $0xc,%esp +80103653: 83 ec 0c sub $0xc,%esp +80103656: 68 47 7b 10 80 push $0x80107b47 +8010365b: e8 e0 cc ff ff call 80100340 + +80103660 : +{ +80103660: 55 push %ebp +80103661: 89 e5 mov %esp,%ebp +80103663: 57 push %edi +80103664: 56 push %esi +80103665: 53 push %ebx +80103666: 83 ec 0c sub $0xc,%esp struct proc *curproc = myproc(); -801037c0: e8 25 fc ff ff call 801033ea -801037c5: 89 c6 mov %eax,%esi +80103669: e8 42 fc ff ff call 801032b0 +8010366e: 89 c6 mov %eax,%esi if(curproc == initproc) -801037c7: 8d 58 28 lea 0x28(%eax),%ebx -801037ca: 8d 78 68 lea 0x68(%eax),%edi -801037cd: 39 05 b8 b5 10 80 cmp %eax,0x8010b5b8 -801037d3: 75 26 jne 801037fb +80103670: 8d 58 28 lea 0x28(%eax),%ebx +80103673: 8d 78 68 lea 0x68(%eax),%edi +80103676: 39 05 94 35 11 80 cmp %eax,0x80113594 +8010367c: 75 14 jne 80103692 panic("init exiting"); -801037d5: 83 ec 0c sub $0xc,%esp -801037d8: 68 3b 7e 10 80 push $0x80107e3b -801037dd: e8 76 cb ff ff call 80100358 - fileclose(curproc->ofile[fd]); -801037e2: 83 ec 0c sub $0xc,%esp -801037e5: 50 push %eax -801037e6: e8 96 d5 ff ff call 80100d81 - curproc->ofile[fd] = 0; -801037eb: c7 03 00 00 00 00 movl $0x0,(%ebx) -801037f1: 83 c4 10 add $0x10,%esp +8010367e: 83 ec 0c sub $0xc,%esp +80103681: 68 5b 7b 10 80 push $0x80107b5b +80103686: e8 b5 cc ff ff call 80100340 for(fd = 0; fd < NOFILE; fd++){ -801037f4: 83 c3 04 add $0x4,%ebx -801037f7: 39 fb cmp %edi,%ebx -801037f9: 74 08 je 80103803 +8010368b: 83 c3 04 add $0x4,%ebx +8010368e: 39 fb cmp %edi,%ebx +80103690: 74 1a je 801036ac if(curproc->ofile[fd]){ -801037fb: 8b 03 mov (%ebx),%eax -801037fd: 85 c0 test %eax,%eax -801037ff: 75 e1 jne 801037e2 -80103801: eb f1 jmp 801037f4 +80103692: 8b 03 mov (%ebx),%eax +80103694: 85 c0 test %eax,%eax +80103696: 74 f3 je 8010368b + fileclose(curproc->ofile[fd]); +80103698: 83 ec 0c sub $0xc,%esp +8010369b: 50 push %eax +8010369c: e8 98 d6 ff ff call 80100d39 + curproc->ofile[fd] = 0; +801036a1: c7 03 00 00 00 00 movl $0x0,(%ebx) +801036a7: 83 c4 10 add $0x10,%esp +801036aa: eb df jmp 8010368b begin_op(); -80103803: e8 78 f0 ff ff call 80102880 +801036ac: e8 cd f0 ff ff call 8010277e iput(curproc->cwd); -80103808: 83 ec 0c sub $0xc,%esp -8010380b: ff 76 68 pushl 0x68(%esi) -8010380e: e8 28 de ff ff call 8010163b +801036b1: 83 ec 0c sub $0xc,%esp +801036b4: ff 76 68 push 0x68(%esi) +801036b7: e8 fe de ff ff call 801015ba end_op(); -80103813: e8 e7 f0 ff ff call 801028ff +801036bc: e8 38 f1 ff ff call 801027f9 curproc->cwd = 0; -80103818: c7 46 68 00 00 00 00 movl $0x0,0x68(%esi) +801036c1: c7 46 68 00 00 00 00 movl $0x0,0x68(%esi) acquire(&ptable.lock); -8010381f: c7 04 24 40 59 11 80 movl $0x80115940,(%esp) -80103826: e8 6e 06 00 00 call 80103e99 +801036c8: c7 04 24 20 2d 11 80 movl $0x80112d20,(%esp) +801036cf: e8 2d 06 00 00 call 80103d01 wakeup1(curproc->parent); -8010382b: 8b 46 14 mov 0x14(%esi),%eax -8010382e: e8 d1 f9 ff ff call 80103204 -80103833: 83 c4 10 add $0x10,%esp +801036d4: 8b 46 14 mov 0x14(%esi),%eax +801036d7: e8 00 fa ff ff call 801030dc +801036dc: 83 c4 10 add $0x10,%esp for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){ -80103836: bb 74 59 11 80 mov $0x80115974,%ebx -8010383b: eb 13 jmp 80103850 - wakeup1(initproc); -8010383d: e8 c2 f9 ff ff call 80103204 - for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){ -80103842: 81 c3 84 00 00 00 add $0x84,%ebx -80103848: 81 fb b4 61 11 80 cmp $0x801161b4,%ebx -8010384e: 74 15 je 80103865 +801036df: bb 54 2d 11 80 mov $0x80112d54,%ebx +801036e4: eb 0e jmp 801036f4 +801036e6: 81 c3 84 00 00 00 add $0x84,%ebx +801036ec: 81 fb 94 35 11 80 cmp $0x80113594,%ebx +801036f2: 74 1a je 8010370e if(p->parent == curproc){ -80103850: 39 73 14 cmp %esi,0x14(%ebx) -80103853: 75 ed jne 80103842 +801036f4: 39 73 14 cmp %esi,0x14(%ebx) +801036f7: 75 ed jne 801036e6 p->parent = initproc; -80103855: a1 b8 b5 10 80 mov 0x8010b5b8,%eax -8010385a: 89 43 14 mov %eax,0x14(%ebx) +801036f9: a1 94 35 11 80 mov 0x80113594,%eax +801036fe: 89 43 14 mov %eax,0x14(%ebx) if(p->state == ZOMBIE) -8010385d: 83 7b 0c 05 cmpl $0x5,0xc(%ebx) -80103861: 75 df jne 80103842 -80103863: eb d8 jmp 8010383d +80103701: 83 7b 0c 05 cmpl $0x5,0xc(%ebx) +80103705: 75 df jne 801036e6 + wakeup1(initproc); +80103707: e8 d0 f9 ff ff call 801030dc +8010370c: eb d8 jmp 801036e6 curproc->state = ZOMBIE; -80103865: c7 46 0c 05 00 00 00 movl $0x5,0xc(%esi) +8010370e: c7 46 0c 05 00 00 00 movl $0x5,0xc(%esi) sched(); -8010386c: e8 9b fe ff ff call 8010370c +80103715: e8 a3 fe ff ff call 801035bd panic("zombie exit"); -80103871: 83 ec 0c sub $0xc,%esp -80103874: 68 48 7e 10 80 push $0x80107e48 -80103879: e8 da ca ff ff call 80100358 +8010371a: 83 ec 0c sub $0xc,%esp +8010371d: 68 68 7b 10 80 push $0x80107b68 +80103722: e8 19 cc ff ff call 80100340 -8010387e : +80103727 : { -8010387e: f3 0f 1e fb endbr32 -80103882: 55 push %ebp -80103883: 89 e5 mov %esp,%ebp -80103885: 83 ec 14 sub $0x14,%esp +80103727: 55 push %ebp +80103728: 89 e5 mov %esp,%ebp +8010372a: 83 ec 14 sub $0x14,%esp acquire(&ptable.lock); //DOC: yieldlock -80103888: 68 40 59 11 80 push $0x80115940 -8010388d: e8 07 06 00 00 call 80103e99 +8010372d: 68 20 2d 11 80 push $0x80112d20 +80103732: e8 ca 05 00 00 call 80103d01 myproc()->state = RUNNABLE; -80103892: e8 53 fb ff ff call 801033ea -80103897: c7 40 0c 03 00 00 00 movl $0x3,0xc(%eax) +80103737: e8 74 fb ff ff call 801032b0 +8010373c: c7 40 0c 03 00 00 00 movl $0x3,0xc(%eax) sched(); -8010389e: e8 69 fe ff ff call 8010370c +80103743: e8 75 fe ff ff call 801035bd release(&ptable.lock); -801038a3: c7 04 24 40 59 11 80 movl $0x80115940,(%esp) -801038aa: e8 55 06 00 00 call 80103f04 +80103748: c7 04 24 20 2d 11 80 movl $0x80112d20,(%esp) +8010374f: e8 14 06 00 00 call 80103d68 } -801038af: 83 c4 10 add $0x10,%esp -801038b2: c9 leave -801038b3: c3 ret +80103754: 83 c4 10 add $0x10,%esp +80103757: c9 leave +80103758: c3 ret -801038b4 : +80103759 : { -801038b4: f3 0f 1e fb endbr32 -801038b8: 55 push %ebp -801038b9: 89 e5 mov %esp,%ebp -801038bb: 56 push %esi -801038bc: 53 push %ebx -801038bd: 8b 75 0c mov 0xc(%ebp),%esi +80103759: 55 push %ebp +8010375a: 89 e5 mov %esp,%ebp +8010375c: 56 push %esi +8010375d: 53 push %ebx +8010375e: 8b 75 0c mov 0xc(%ebp),%esi struct proc *p = myproc(); -801038c0: e8 25 fb ff ff call 801033ea +80103761: e8 4a fb ff ff call 801032b0 if(p == 0) -801038c5: 85 c0 test %eax,%eax -801038c7: 74 5a je 80103923 -801038c9: 89 c3 mov %eax,%ebx +80103766: 85 c0 test %eax,%eax +80103768: 74 5a je 801037c4 +8010376a: 89 c3 mov %eax,%ebx if(lk == 0) -801038cb: 85 f6 test %esi,%esi -801038cd: 74 61 je 80103930 +8010376c: 85 f6 test %esi,%esi +8010376e: 74 61 je 801037d1 if(lk != &ptable.lock){ //DOC: sleeplock0 -801038cf: 81 fe 40 59 11 80 cmp $0x80115940,%esi -801038d5: 74 66 je 8010393d +80103770: 81 fe 20 2d 11 80 cmp $0x80112d20,%esi +80103776: 74 66 je 801037de acquire(&ptable.lock); //DOC: sleeplock1 -801038d7: 83 ec 0c sub $0xc,%esp -801038da: 68 40 59 11 80 push $0x80115940 -801038df: e8 b5 05 00 00 call 80103e99 +80103778: 83 ec 0c sub $0xc,%esp +8010377b: 68 20 2d 11 80 push $0x80112d20 +80103780: e8 7c 05 00 00 call 80103d01 release(lk); -801038e4: 89 34 24 mov %esi,(%esp) -801038e7: e8 18 06 00 00 call 80103f04 +80103785: 89 34 24 mov %esi,(%esp) +80103788: e8 db 05 00 00 call 80103d68 p->chan = chan; -801038ec: 8b 45 08 mov 0x8(%ebp),%eax -801038ef: 89 43 20 mov %eax,0x20(%ebx) +8010378d: 8b 45 08 mov 0x8(%ebp),%eax +80103790: 89 43 20 mov %eax,0x20(%ebx) p->state = SLEEPING; -801038f2: c7 43 0c 02 00 00 00 movl $0x2,0xc(%ebx) +80103793: c7 43 0c 02 00 00 00 movl $0x2,0xc(%ebx) sched(); -801038f9: e8 0e fe ff ff call 8010370c +8010379a: e8 1e fe ff ff call 801035bd p->chan = 0; -801038fe: c7 43 20 00 00 00 00 movl $0x0,0x20(%ebx) +8010379f: c7 43 20 00 00 00 00 movl $0x0,0x20(%ebx) release(&ptable.lock); -80103905: c7 04 24 40 59 11 80 movl $0x80115940,(%esp) -8010390c: e8 f3 05 00 00 call 80103f04 +801037a6: c7 04 24 20 2d 11 80 movl $0x80112d20,(%esp) +801037ad: e8 b6 05 00 00 call 80103d68 acquire(lk); -80103911: 89 34 24 mov %esi,(%esp) -80103914: e8 80 05 00 00 call 80103e99 -80103919: 83 c4 10 add $0x10,%esp -} -8010391c: 8d 65 f8 lea -0x8(%ebp),%esp -8010391f: 5b pop %ebx -80103920: 5e pop %esi -80103921: 5d pop %ebp -80103922: c3 ret +801037b2: 89 34 24 mov %esi,(%esp) +801037b5: e8 47 05 00 00 call 80103d01 +801037ba: 83 c4 10 add $0x10,%esp +} +801037bd: 8d 65 f8 lea -0x8(%ebp),%esp +801037c0: 5b pop %ebx +801037c1: 5e pop %esi +801037c2: 5d pop %ebp +801037c3: c3 ret panic("sleep"); -80103923: 83 ec 0c sub $0xc,%esp -80103926: 68 54 7e 10 80 push $0x80107e54 -8010392b: e8 28 ca ff ff call 80100358 +801037c4: 83 ec 0c sub $0xc,%esp +801037c7: 68 74 7b 10 80 push $0x80107b74 +801037cc: e8 6f cb ff ff call 80100340 panic("sleep without lk"); -80103930: 83 ec 0c sub $0xc,%esp -80103933: 68 5a 7e 10 80 push $0x80107e5a -80103938: e8 1b ca ff ff call 80100358 +801037d1: 83 ec 0c sub $0xc,%esp +801037d4: 68 7a 7b 10 80 push $0x80107b7a +801037d9: e8 62 cb ff ff call 80100340 p->chan = chan; -8010393d: 8b 45 08 mov 0x8(%ebp),%eax -80103940: 89 43 20 mov %eax,0x20(%ebx) +801037de: 8b 45 08 mov 0x8(%ebp),%eax +801037e1: 89 43 20 mov %eax,0x20(%ebx) p->state = SLEEPING; -80103943: c7 43 0c 02 00 00 00 movl $0x2,0xc(%ebx) +801037e4: c7 43 0c 02 00 00 00 movl $0x2,0xc(%ebx) sched(); -8010394a: e8 bd fd ff ff call 8010370c +801037eb: e8 cd fd ff ff call 801035bd p->chan = 0; -8010394f: c7 43 20 00 00 00 00 movl $0x0,0x20(%ebx) +801037f0: c7 43 20 00 00 00 00 movl $0x0,0x20(%ebx) if(lk != &ptable.lock){ //DOC: sleeplock2 -80103956: eb c4 jmp 8010391c +801037f7: eb c4 jmp 801037bd -80103958 : +801037f9 : { -80103958: f3 0f 1e fb endbr32 -8010395c: 55 push %ebp -8010395d: 89 e5 mov %esp,%ebp -8010395f: 57 push %edi -80103960: 56 push %esi -80103961: 53 push %ebx -80103962: 83 ec 0c sub $0xc,%esp +801037f9: 55 push %ebp +801037fa: 89 e5 mov %esp,%ebp +801037fc: 57 push %edi +801037fd: 56 push %esi +801037fe: 53 push %ebx +801037ff: 83 ec 0c sub $0xc,%esp struct proc *curproc = myproc(); -80103965: e8 80 fa ff ff call 801033ea -8010396a: 89 c6 mov %eax,%esi +80103802: e8 a9 fa ff ff call 801032b0 +80103807: 89 c6 mov %eax,%esi acquire(&ptable.lock); -8010396c: 83 ec 0c sub $0xc,%esp -8010396f: 68 40 59 11 80 push $0x80115940 -80103974: e8 20 05 00 00 call 80103e99 -80103979: 83 c4 10 add $0x10,%esp +80103809: 83 ec 0c sub $0xc,%esp +8010380c: 68 20 2d 11 80 push $0x80112d20 +80103811: e8 eb 04 00 00 call 80103d01 +80103816: 83 c4 10 add $0x10,%esp havekids = 1; -8010397c: bf 01 00 00 00 mov $0x1,%edi +80103819: bf 01 00 00 00 mov $0x1,%edi havekids = 0; -80103981: b8 00 00 00 00 mov $0x0,%eax +8010381e: b8 00 00 00 00 mov $0x0,%eax for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){ -80103986: bb 74 59 11 80 mov $0x80115974,%ebx -8010398b: eb 5f jmp 801039ec +80103823: bb 54 2d 11 80 mov $0x80112d54,%ebx +80103828: eb 5f jmp 80103889 pid = p->pid; -8010398d: 8b 73 10 mov 0x10(%ebx),%esi +8010382a: 8b 73 10 mov 0x10(%ebx),%esi kfree(p->kstack); -80103990: 83 ec 0c sub $0xc,%esp -80103993: ff 73 08 pushl 0x8(%ebx) -80103996: e8 20 e7 ff ff call 801020bb +8010382d: 83 ec 0c sub $0xc,%esp +80103830: ff 73 08 push 0x8(%ebx) +80103833: e8 c4 e7 ff ff call 80101ffc p->kstack = 0; -8010399b: c7 43 08 00 00 00 00 movl $0x0,0x8(%ebx) +80103838: c7 43 08 00 00 00 00 movl $0x0,0x8(%ebx) freevm(p->pgdir); -801039a2: 83 c4 04 add $0x4,%esp -801039a5: ff 73 04 pushl 0x4(%ebx) -801039a8: e8 da 2a 00 00 call 80106487 +8010383f: 83 c4 04 add $0x4,%esp +80103842: ff 73 04 push 0x4(%ebx) +80103845: e8 d4 29 00 00 call 8010621e p->pid = 0; -801039ad: c7 43 10 00 00 00 00 movl $0x0,0x10(%ebx) +8010384a: c7 43 10 00 00 00 00 movl $0x0,0x10(%ebx) p->parent = 0; -801039b4: c7 43 14 00 00 00 00 movl $0x0,0x14(%ebx) +80103851: c7 43 14 00 00 00 00 movl $0x0,0x14(%ebx) p->name[0] = 0; -801039bb: c6 43 6c 00 movb $0x0,0x6c(%ebx) +80103858: c6 43 6c 00 movb $0x0,0x6c(%ebx) p->killed = 0; -801039bf: c7 43 24 00 00 00 00 movl $0x0,0x24(%ebx) +8010385c: c7 43 24 00 00 00 00 movl $0x0,0x24(%ebx) p->state = UNUSED; -801039c6: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx) +80103863: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx) release(&ptable.lock); -801039cd: c7 04 24 40 59 11 80 movl $0x80115940,(%esp) -801039d4: e8 2b 05 00 00 call 80103f04 +8010386a: c7 04 24 20 2d 11 80 movl $0x80112d20,(%esp) +80103871: e8 f2 04 00 00 call 80103d68 return pid; -801039d9: 83 c4 10 add $0x10,%esp -801039dc: eb 3c jmp 80103a1a +80103876: 83 c4 10 add $0x10,%esp +80103879: eb 3c jmp 801038b7 for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){ -801039de: 81 c3 84 00 00 00 add $0x84,%ebx -801039e4: 81 fb b4 61 11 80 cmp $0x801161b4,%ebx -801039ea: 74 0f je 801039fb +8010387b: 81 c3 84 00 00 00 add $0x84,%ebx +80103881: 81 fb 94 35 11 80 cmp $0x80113594,%ebx +80103887: 74 0f je 80103898 if(p->parent != curproc) -801039ec: 39 73 14 cmp %esi,0x14(%ebx) -801039ef: 75 ed jne 801039de +80103889: 39 73 14 cmp %esi,0x14(%ebx) +8010388c: 75 ed jne 8010387b if(p->state == ZOMBIE){ -801039f1: 83 7b 0c 05 cmpl $0x5,0xc(%ebx) -801039f5: 74 96 je 8010398d +8010388e: 83 7b 0c 05 cmpl $0x5,0xc(%ebx) +80103892: 74 96 je 8010382a havekids = 1; -801039f7: 89 f8 mov %edi,%eax -801039f9: eb e3 jmp 801039de +80103894: 89 f8 mov %edi,%eax +80103896: eb e3 jmp 8010387b if(!havekids || curproc->killed){ -801039fb: 85 c0 test %eax,%eax -801039fd: 74 06 je 80103a05 -801039ff: 83 7e 24 00 cmpl $0x0,0x24(%esi) -80103a03: 74 1f je 80103a24 +80103898: 85 c0 test %eax,%eax +8010389a: 74 06 je 801038a2 +8010389c: 83 7e 24 00 cmpl $0x0,0x24(%esi) +801038a0: 74 1f je 801038c1 release(&ptable.lock); -80103a05: 83 ec 0c sub $0xc,%esp -80103a08: 68 40 59 11 80 push $0x80115940 -80103a0d: e8 f2 04 00 00 call 80103f04 +801038a2: 83 ec 0c sub $0xc,%esp +801038a5: 68 20 2d 11 80 push $0x80112d20 +801038aa: e8 b9 04 00 00 call 80103d68 return -1; -80103a12: 83 c4 10 add $0x10,%esp -80103a15: be ff ff ff ff mov $0xffffffff,%esi -} -80103a1a: 89 f0 mov %esi,%eax -80103a1c: 8d 65 f4 lea -0xc(%ebp),%esp -80103a1f: 5b pop %ebx -80103a20: 5e pop %esi -80103a21: 5f pop %edi -80103a22: 5d pop %ebp -80103a23: c3 ret +801038af: 83 c4 10 add $0x10,%esp +801038b2: be ff ff ff ff mov $0xffffffff,%esi +} +801038b7: 89 f0 mov %esi,%eax +801038b9: 8d 65 f4 lea -0xc(%ebp),%esp +801038bc: 5b pop %ebx +801038bd: 5e pop %esi +801038be: 5f pop %edi +801038bf: 5d pop %ebp +801038c0: c3 ret sleep(curproc, &ptable.lock); //DOC: wait-sleep -80103a24: 83 ec 08 sub $0x8,%esp -80103a27: 68 40 59 11 80 push $0x80115940 -80103a2c: 56 push %esi -80103a2d: e8 82 fe ff ff call 801038b4 +801038c1: 83 ec 08 sub $0x8,%esp +801038c4: 68 20 2d 11 80 push $0x80112d20 +801038c9: 56 push %esi +801038ca: e8 8a fe ff ff call 80103759 havekids = 0; -80103a32: 83 c4 10 add $0x10,%esp -80103a35: e9 47 ff ff ff jmp 80103981 +801038cf: 83 c4 10 add $0x10,%esp +801038d2: e9 47 ff ff ff jmp 8010381e -80103a3a : +801038d7 : // Wake up all processes sleeping on chan. void wakeup(void *chan) { -80103a3a: f3 0f 1e fb endbr32 -80103a3e: 55 push %ebp -80103a3f: 89 e5 mov %esp,%ebp -80103a41: 83 ec 14 sub $0x14,%esp +801038d7: 55 push %ebp +801038d8: 89 e5 mov %esp,%ebp +801038da: 83 ec 14 sub $0x14,%esp acquire(&ptable.lock); -80103a44: 68 40 59 11 80 push $0x80115940 -80103a49: e8 4b 04 00 00 call 80103e99 +801038dd: 68 20 2d 11 80 push $0x80112d20 +801038e2: e8 1a 04 00 00 call 80103d01 wakeup1(chan); -80103a4e: 8b 45 08 mov 0x8(%ebp),%eax -80103a51: e8 ae f7 ff ff call 80103204 +801038e7: 8b 45 08 mov 0x8(%ebp),%eax +801038ea: e8 ed f7 ff ff call 801030dc release(&ptable.lock); -80103a56: c7 04 24 40 59 11 80 movl $0x80115940,(%esp) -80103a5d: e8 a2 04 00 00 call 80103f04 +801038ef: c7 04 24 20 2d 11 80 movl $0x80112d20,(%esp) +801038f6: e8 6d 04 00 00 call 80103d68 } -80103a62: 83 c4 10 add $0x10,%esp -80103a65: c9 leave -80103a66: c3 ret +801038fb: 83 c4 10 add $0x10,%esp +801038fe: c9 leave +801038ff: c3 ret -80103a67 : +80103900 : // 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) { -80103a67: f3 0f 1e fb endbr32 -80103a6b: 55 push %ebp -80103a6c: 89 e5 mov %esp,%ebp -80103a6e: 53 push %ebx -80103a6f: 83 ec 10 sub $0x10,%esp -80103a72: 8b 5d 08 mov 0x8(%ebp),%ebx +80103900: 55 push %ebp +80103901: 89 e5 mov %esp,%ebp +80103903: 53 push %ebx +80103904: 83 ec 10 sub $0x10,%esp +80103907: 8b 5d 08 mov 0x8(%ebp),%ebx struct proc *p; acquire(&ptable.lock); -80103a75: 68 40 59 11 80 push $0x80115940 -80103a7a: e8 1a 04 00 00 call 80103e99 -80103a7f: 83 c4 10 add $0x10,%esp +8010390a: 68 20 2d 11 80 push $0x80112d20 +8010390f: e8 ed 03 00 00 call 80103d01 +80103914: 83 c4 10 add $0x10,%esp for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){ -80103a82: b8 74 59 11 80 mov $0x80115974,%eax +80103917: b8 54 2d 11 80 mov $0x80112d54,%eax if(p->pid == pid){ -80103a87: 39 58 10 cmp %ebx,0x10(%eax) -80103a8a: 74 26 je 80103ab2 +8010391c: 39 58 10 cmp %ebx,0x10(%eax) +8010391f: 74 26 je 80103947 for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){ -80103a8c: 05 84 00 00 00 add $0x84,%eax -80103a91: 3d b4 61 11 80 cmp $0x801161b4,%eax -80103a96: 75 ef jne 80103a87 +80103921: 05 84 00 00 00 add $0x84,%eax +80103926: 3d 94 35 11 80 cmp $0x80113594,%eax +8010392b: 75 ef jne 8010391c p->state = RUNNABLE; release(&ptable.lock); return 0; } } release(&ptable.lock); -80103a98: 83 ec 0c sub $0xc,%esp -80103a9b: 68 40 59 11 80 push $0x80115940 -80103aa0: e8 5f 04 00 00 call 80103f04 +8010392d: 83 ec 0c sub $0xc,%esp +80103930: 68 20 2d 11 80 push $0x80112d20 +80103935: e8 2e 04 00 00 call 80103d68 return -1; -80103aa5: 83 c4 10 add $0x10,%esp -80103aa8: b8 ff ff ff ff mov $0xffffffff,%eax +8010393a: 83 c4 10 add $0x10,%esp +8010393d: b8 ff ff ff ff mov $0xffffffff,%eax } -80103aad: 8b 5d fc mov -0x4(%ebp),%ebx -80103ab0: c9 leave -80103ab1: c3 ret +80103942: 8b 5d fc mov -0x4(%ebp),%ebx +80103945: c9 leave +80103946: c3 ret p->killed = 1; -80103ab2: c7 40 24 01 00 00 00 movl $0x1,0x24(%eax) +80103947: c7 40 24 01 00 00 00 movl $0x1,0x24(%eax) if(p->state == SLEEPING) -80103ab9: 83 78 0c 02 cmpl $0x2,0xc(%eax) -80103abd: 74 17 je 80103ad6 +8010394e: 83 78 0c 02 cmpl $0x2,0xc(%eax) +80103952: 74 17 je 8010396b release(&ptable.lock); -80103abf: 83 ec 0c sub $0xc,%esp -80103ac2: 68 40 59 11 80 push $0x80115940 -80103ac7: e8 38 04 00 00 call 80103f04 +80103954: 83 ec 0c sub $0xc,%esp +80103957: 68 20 2d 11 80 push $0x80112d20 +8010395c: e8 07 04 00 00 call 80103d68 return 0; -80103acc: 83 c4 10 add $0x10,%esp -80103acf: b8 00 00 00 00 mov $0x0,%eax -80103ad4: eb d7 jmp 80103aad +80103961: 83 c4 10 add $0x10,%esp +80103964: b8 00 00 00 00 mov $0x0,%eax +80103969: eb d7 jmp 80103942 p->state = RUNNABLE; -80103ad6: c7 40 0c 03 00 00 00 movl $0x3,0xc(%eax) -80103add: eb e0 jmp 80103abf +8010396b: c7 40 0c 03 00 00 00 movl $0x3,0xc(%eax) +80103972: eb e0 jmp 80103954 -80103adf : +80103974 : // 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) { -80103adf: f3 0f 1e fb endbr32 -80103ae3: 55 push %ebp -80103ae4: 89 e5 mov %esp,%ebp -80103ae6: 57 push %edi -80103ae7: 56 push %esi -80103ae8: 53 push %ebx -80103ae9: 83 ec 3c sub $0x3c,%esp +80103974: 55 push %ebp +80103975: 89 e5 mov %esp,%ebp +80103977: 57 push %edi +80103978: 56 push %esi +80103979: 53 push %ebx +8010397a: 83 ec 3c sub $0x3c,%esp int i; struct proc *p; char *state; uint pc[10]; for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){ -80103aec: bb e0 59 11 80 mov $0x801159e0,%ebx -80103af1: bf 20 62 11 80 mov $0x80116220,%edi -80103af6: eb 32 jmp 80103b2a +8010397d: bb c0 2d 11 80 mov $0x80112dc0,%ebx +80103982: bf 00 36 11 80 mov $0x80113600,%edi +80103987: eb 32 jmp 801039bb continue; if(p->state >= 0 && p->state < NELEM(states) && states[p->state]) state = states[p->state]; else state = "???"; cprintf("%d %s %s %p", p->pid, state, p->name); -80103af8: 56 push %esi -80103af9: 50 push %eax -80103afa: ff 76 a4 pushl -0x5c(%esi) -80103afd: 68 6f 7e 10 80 push $0x80107e6f -80103b02: e8 25 cb ff ff call 8010062c +80103989: 56 push %esi +8010398a: 52 push %edx +8010398b: ff 76 a4 push -0x5c(%esi) +8010398e: 68 8f 7b 10 80 push $0x80107b8f +80103993: e8 69 cc ff ff call 80100601 //cprintf("%d %s %s", p->pid, state, p->name); if(p->state == SLEEPING){ -80103b07: 83 c4 10 add $0x10,%esp -80103b0a: 83 7e a0 02 cmpl $0x2,-0x60(%esi) -80103b0e: 74 40 je 80103b50 +80103998: 83 c4 10 add $0x10,%esp +8010399b: 83 7e a0 02 cmpl $0x2,-0x60(%esi) +8010399f: 74 40 je 801039e1 getcallerpcs((uint*)p->context->ebp+2, pc); for(i=0; i<10 && pc[i] != 0; i++) cprintf(" %p", pc[i]); } cprintf("\n"); -80103b10: 83 ec 0c sub $0xc,%esp -80103b13: 68 1f 82 10 80 push $0x8010821f -80103b18: e8 0f cb ff ff call 8010062c -80103b1d: 83 c4 10 add $0x10,%esp +801039a1: 83 ec 0c sub $0xc,%esp +801039a4: 68 3f 7f 10 80 push $0x80107f3f +801039a9: e8 53 cc ff ff call 80100601 +801039ae: 83 c4 10 add $0x10,%esp for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){ -80103b20: 81 c3 84 00 00 00 add $0x84,%ebx -80103b26: 39 fb cmp %edi,%ebx -80103b28: 74 65 je 80103b8f +801039b1: 81 c3 84 00 00 00 add $0x84,%ebx +801039b7: 39 fb cmp %edi,%ebx +801039b9: 74 65 je 80103a20 if(p->state == UNUSED) -80103b2a: 89 de mov %ebx,%esi -80103b2c: 8b 53 a0 mov -0x60(%ebx),%edx -80103b2f: 85 d2 test %edx,%edx -80103b31: 74 ed je 80103b20 +801039bb: 89 de mov %ebx,%esi +801039bd: 8b 43 a0 mov -0x60(%ebx),%eax +801039c0: 85 c0 test %eax,%eax +801039c2: 74 ed je 801039b1 state = "???"; -80103b33: b8 6b 7e 10 80 mov $0x80107e6b,%eax +801039c4: ba 8b 7b 10 80 mov $0x80107b8b,%edx if(p->state >= 0 && p->state < NELEM(states) && states[p->state]) -80103b38: 83 fa 05 cmp $0x5,%edx -80103b3b: 77 bb ja 80103af8 -80103b3d: 8b 04 95 fc 7e 10 80 mov -0x7fef8104(,%edx,4),%eax -80103b44: 85 c0 test %eax,%eax +801039c9: 83 f8 05 cmp $0x5,%eax +801039cc: 77 bb ja 80103989 +801039ce: 8b 14 85 1c 7c 10 80 mov -0x7fef83e4(,%eax,4),%edx state = "???"; -80103b46: ba 6b 7e 10 80 mov $0x80107e6b,%edx -80103b4b: 0f 44 c2 cmove %edx,%eax -80103b4e: eb a8 jmp 80103af8 +801039d5: 85 d2 test %edx,%edx +801039d7: b8 8b 7b 10 80 mov $0x80107b8b,%eax +801039dc: 0f 44 d0 cmove %eax,%edx +801039df: eb a8 jmp 80103989 getcallerpcs((uint*)p->context->ebp+2, pc); -80103b50: 83 ec 08 sub $0x8,%esp -80103b53: 8d 45 c0 lea -0x40(%ebp),%eax -80103b56: 50 push %eax -80103b57: 8b 46 b0 mov -0x50(%esi),%eax -80103b5a: 8b 40 0c mov 0xc(%eax),%eax -80103b5d: 83 c0 08 add $0x8,%eax -80103b60: 50 push %eax -80103b61: e8 f6 01 00 00 call 80103d5c +801039e1: 83 ec 08 sub $0x8,%esp +801039e4: 8d 45 c0 lea -0x40(%ebp),%eax +801039e7: 50 push %eax +801039e8: 8b 46 b0 mov -0x50(%esi),%eax +801039eb: 8b 40 0c mov 0xc(%eax),%eax +801039ee: 83 c0 08 add $0x8,%eax +801039f1: 50 push %eax +801039f2: e8 dc 01 00 00 call 80103bd3 for(i=0; i<10 && pc[i] != 0; i++) -80103b66: 8d 75 c0 lea -0x40(%ebp),%esi -80103b69: 83 c4 10 add $0x10,%esp -80103b6c: 8b 06 mov (%esi),%eax -80103b6e: 85 c0 test %eax,%eax -80103b70: 74 9e je 80103b10 +801039f7: 8d 75 c0 lea -0x40(%ebp),%esi +801039fa: 83 c4 10 add $0x10,%esp +801039fd: 8b 06 mov (%esi),%eax +801039ff: 85 c0 test %eax,%eax +80103a01: 74 9e je 801039a1 cprintf(" %p", pc[i]); -80103b72: 83 ec 08 sub $0x8,%esp -80103b75: 50 push %eax -80103b76: 68 77 7e 10 80 push $0x80107e77 -80103b7b: e8 ac ca ff ff call 8010062c +80103a03: 83 ec 08 sub $0x8,%esp +80103a06: 50 push %eax +80103a07: 68 97 7b 10 80 push $0x80107b97 +80103a0c: e8 f0 cb ff ff call 80100601 for(i=0; i<10 && pc[i] != 0; i++) -80103b80: 83 c6 04 add $0x4,%esi -80103b83: 83 c4 10 add $0x10,%esp -80103b86: 8d 45 e8 lea -0x18(%ebp),%eax -80103b89: 39 c6 cmp %eax,%esi -80103b8b: 75 df jne 80103b6c -80103b8d: eb 81 jmp 80103b10 +80103a11: 83 c6 04 add $0x4,%esi +80103a14: 83 c4 10 add $0x10,%esp +80103a17: 8d 45 e8 lea -0x18(%ebp),%eax +80103a1a: 39 c6 cmp %eax,%esi +80103a1c: 75 df jne 801039fd +80103a1e: eb 81 jmp 801039a1 } } -80103b8f: 8d 65 f4 lea -0xc(%ebp),%esp -80103b92: 5b pop %ebx -80103b93: 5e pop %esi -80103b94: 5f pop %edi -80103b95: 5d pop %ebp -80103b96: c3 ret +80103a20: 8d 65 f4 lea -0xc(%ebp),%esp +80103a23: 5b pop %ebx +80103a24: 5e pop %esi +80103a25: 5f pop %edi +80103a26: 5d pop %ebp +80103a27: c3 ret -80103b97 : +80103a28 : void ps(void) { -80103b97: f3 0f 1e fb endbr32 -80103b9b: 55 push %ebp -80103b9c: 89 e5 mov %esp,%ebp -80103b9e: 57 push %edi -80103b9f: 56 push %esi -80103ba0: 53 push %ebx -80103ba1: 83 ec 18 sub $0x18,%esp +80103a28: 55 push %ebp +80103a29: 89 e5 mov %esp,%ebp +80103a2b: 57 push %edi +80103a2c: 56 push %esi +80103a2d: 53 push %ebx +80103a2e: 83 ec 18 sub $0x18,%esp [ZOMBIE] "zombie" }; struct proc *p; char *state, *name; acquire(&ptable.lock); -80103ba4: 68 40 59 11 80 push $0x80115940 -80103ba9: e8 eb 02 00 00 call 80103e99 -80103bae: 83 c4 10 add $0x10,%esp +80103a31: 68 20 2d 11 80 push $0x80112d20 +80103a36: e8 c6 02 00 00 call 80103d01 +80103a3b: 83 c4 10 add $0x10,%esp for( p = ptable.proc; p < &ptable.proc[NPROC]; p++) -80103bb1: bb 74 59 11 80 mov $0x80115974,%ebx +80103a3e: bb 54 2d 11 80 mov $0x80112d54,%ebx { if(p->state >= 0 && p->state < NELEM(states) && states[p->state]) state = states[p->state]; else state = "???"; -80103bb6: bf 6b 7e 10 80 mov $0x80107e6b,%edi -80103bbb: be 7b 7e 10 80 mov $0x80107e7b,%esi -80103bc0: eb 2e jmp 80103bf0 +80103a43: bf 8b 7b 10 80 mov $0x80107b8b,%edi +80103a48: be 9b 7b 10 80 mov $0x80107b9b,%esi +80103a4d: eb 2c jmp 80103a7b if(p->state == UNUSED) -80103bc2: 85 c0 test %eax,%eax -80103bc4: 8d 4b 6c lea 0x6c(%ebx),%ecx -80103bc7: 89 c8 mov %ecx,%eax -80103bc9: 0f 44 c6 cmove %esi,%eax +80103a4f: 8d 43 6c lea 0x6c(%ebx),%eax +80103a52: 85 c9 test %ecx,%ecx +80103a54: 0f 44 c6 cmove %esi,%eax name = "unknown"; else name = p->name; cprintf("%d %s %s %p\n", p->pid, state, name, p); -80103bcc: 83 ec 0c sub $0xc,%esp -80103bcf: 53 push %ebx -80103bd0: 50 push %eax -80103bd1: 52 push %edx -80103bd2: ff 73 10 pushl 0x10(%ebx) -80103bd5: 68 83 7e 10 80 push $0x80107e83 -80103bda: e8 4d ca ff ff call 8010062c +80103a57: 83 ec 0c sub $0xc,%esp +80103a5a: 53 push %ebx +80103a5b: 50 push %eax +80103a5c: 52 push %edx +80103a5d: ff 73 10 push 0x10(%ebx) +80103a60: 68 a3 7b 10 80 push $0x80107ba3 +80103a65: e8 97 cb ff ff call 80100601 for( p = ptable.proc; p < &ptable.proc[NPROC]; p++) -80103bdf: 81 c3 84 00 00 00 add $0x84,%ebx -80103be5: 83 c4 20 add $0x20,%esp -80103be8: 81 fb b4 61 11 80 cmp $0x801161b4,%ebx -80103bee: 74 1b je 80103c0b +80103a6a: 81 c3 84 00 00 00 add $0x84,%ebx +80103a70: 83 c4 20 add $0x20,%esp +80103a73: 81 fb 94 35 11 80 cmp $0x80113594,%ebx +80103a79: 74 1b je 80103a96 if(p->state >= 0 && p->state < NELEM(states) && states[p->state]) -80103bf0: 8b 43 0c mov 0xc(%ebx),%eax +80103a7b: 8b 4b 0c mov 0xc(%ebx),%ecx state = "???"; -80103bf3: ba 6b 7e 10 80 mov $0x80107e6b,%edx +80103a7e: ba 8b 7b 10 80 mov $0x80107b8b,%edx if(p->state >= 0 && p->state < NELEM(states) && states[p->state]) -80103bf8: 83 f8 05 cmp $0x5,%eax -80103bfb: 77 c5 ja 80103bc2 -80103bfd: 8b 14 85 e4 7e 10 80 mov -0x7fef811c(,%eax,4),%edx -80103c04: 85 d2 test %edx,%edx +80103a83: 83 f9 05 cmp $0x5,%ecx +80103a86: 77 c7 ja 80103a4f +80103a88: 8b 14 8d 04 7c 10 80 mov -0x7fef83fc(,%ecx,4),%edx state = "???"; -80103c06: 0f 44 d7 cmove %edi,%edx -80103c09: eb b7 jmp 80103bc2 +80103a8f: 85 d2 test %edx,%edx +80103a91: 0f 44 d7 cmove %edi,%edx +80103a94: eb b9 jmp 80103a4f } release(&ptable.lock); -80103c0b: 83 ec 0c sub $0xc,%esp -80103c0e: 68 40 59 11 80 push $0x80115940 -80103c13: e8 ec 02 00 00 call 80103f04 +80103a96: 83 ec 0c sub $0xc,%esp +80103a99: 68 20 2d 11 80 push $0x80112d20 +80103a9e: e8 c5 02 00 00 call 80103d68 return; -80103c18: 83 c4 10 add $0x10,%esp +80103aa3: 83 c4 10 add $0x10,%esp } -80103c1b: 8d 65 f4 lea -0xc(%ebp),%esp -80103c1e: 5b pop %ebx -80103c1f: 5e pop %esi -80103c20: 5f pop %edi -80103c21: 5d pop %ebp -80103c22: c3 ret +80103aa6: 8d 65 f4 lea -0xc(%ebp),%esp +80103aa9: 5b pop %ebx +80103aaa: 5e pop %esi +80103aab: 5f pop %edi +80103aac: 5d pop %ebp +80103aad: c3 ret -80103c23 : +80103aae : #include "spinlock.h" #include "sleeplock.h" void initsleeplock(struct sleeplock *lk, char *name) { -80103c23: f3 0f 1e fb endbr32 -80103c27: 55 push %ebp -80103c28: 89 e5 mov %esp,%ebp -80103c2a: 53 push %ebx -80103c2b: 83 ec 0c sub $0xc,%esp -80103c2e: 8b 5d 08 mov 0x8(%ebp),%ebx +80103aae: 55 push %ebp +80103aaf: 89 e5 mov %esp,%ebp +80103ab1: 53 push %ebx +80103ab2: 83 ec 0c sub $0xc,%esp +80103ab5: 8b 5d 08 mov 0x8(%ebp),%ebx initlock(&lk->lk, "sleep lock"); -80103c31: 68 14 7f 10 80 push $0x80107f14 -80103c36: 8d 43 04 lea 0x4(%ebx),%eax -80103c39: 50 push %eax -80103c3a: e8 fe 00 00 00 call 80103d3d +80103ab8: 68 34 7c 10 80 push $0x80107c34 +80103abd: 8d 43 04 lea 0x4(%ebx),%eax +80103ac0: 50 push %eax +80103ac1: e8 f2 00 00 00 call 80103bb8 lk->name = name; -80103c3f: 8b 45 0c mov 0xc(%ebp),%eax -80103c42: 89 43 38 mov %eax,0x38(%ebx) +80103ac6: 8b 45 0c mov 0xc(%ebp),%eax +80103ac9: 89 43 38 mov %eax,0x38(%ebx) lk->locked = 0; -80103c45: c7 03 00 00 00 00 movl $0x0,(%ebx) +80103acc: c7 03 00 00 00 00 movl $0x0,(%ebx) lk->pid = 0; -80103c4b: c7 43 3c 00 00 00 00 movl $0x0,0x3c(%ebx) +80103ad2: c7 43 3c 00 00 00 00 movl $0x0,0x3c(%ebx) } -80103c52: 83 c4 10 add $0x10,%esp -80103c55: 8b 5d fc mov -0x4(%ebp),%ebx -80103c58: c9 leave -80103c59: c3 ret +80103ad9: 83 c4 10 add $0x10,%esp +80103adc: 8b 5d fc mov -0x4(%ebp),%ebx +80103adf: c9 leave +80103ae0: c3 ret -80103c5a : +80103ae1 : void acquiresleep(struct sleeplock *lk) { -80103c5a: f3 0f 1e fb endbr32 -80103c5e: 55 push %ebp -80103c5f: 89 e5 mov %esp,%ebp -80103c61: 56 push %esi -80103c62: 53 push %ebx -80103c63: 8b 5d 08 mov 0x8(%ebp),%ebx +80103ae1: 55 push %ebp +80103ae2: 89 e5 mov %esp,%ebp +80103ae4: 56 push %esi +80103ae5: 53 push %ebx +80103ae6: 8b 5d 08 mov 0x8(%ebp),%ebx acquire(&lk->lk); -80103c66: 8d 73 04 lea 0x4(%ebx),%esi -80103c69: 83 ec 0c sub $0xc,%esp -80103c6c: 56 push %esi -80103c6d: e8 27 02 00 00 call 80103e99 +80103ae9: 8d 73 04 lea 0x4(%ebx),%esi +80103aec: 83 ec 0c sub $0xc,%esp +80103aef: 56 push %esi +80103af0: e8 0c 02 00 00 call 80103d01 while (lk->locked) { -80103c72: 83 c4 10 add $0x10,%esp -80103c75: 83 3b 00 cmpl $0x0,(%ebx) -80103c78: 74 12 je 80103c8c +80103af5: 83 c4 10 add $0x10,%esp +80103af8: 83 3b 00 cmpl $0x0,(%ebx) +80103afb: 74 12 je 80103b0f sleep(lk, &lk->lk); -80103c7a: 83 ec 08 sub $0x8,%esp -80103c7d: 56 push %esi -80103c7e: 53 push %ebx -80103c7f: e8 30 fc ff ff call 801038b4 +80103afd: 83 ec 08 sub $0x8,%esp +80103b00: 56 push %esi +80103b01: 53 push %ebx +80103b02: e8 52 fc ff ff call 80103759 while (lk->locked) { -80103c84: 83 c4 10 add $0x10,%esp -80103c87: 83 3b 00 cmpl $0x0,(%ebx) -80103c8a: 75 ee jne 80103c7a +80103b07: 83 c4 10 add $0x10,%esp +80103b0a: 83 3b 00 cmpl $0x0,(%ebx) +80103b0d: 75 ee jne 80103afd } lk->locked = 1; -80103c8c: c7 03 01 00 00 00 movl $0x1,(%ebx) +80103b0f: c7 03 01 00 00 00 movl $0x1,(%ebx) lk->pid = myproc()->pid; -80103c92: e8 53 f7 ff ff call 801033ea -80103c97: 8b 40 10 mov 0x10(%eax),%eax -80103c9a: 89 43 3c mov %eax,0x3c(%ebx) +80103b15: e8 96 f7 ff ff call 801032b0 +80103b1a: 8b 40 10 mov 0x10(%eax),%eax +80103b1d: 89 43 3c mov %eax,0x3c(%ebx) release(&lk->lk); -80103c9d: 83 ec 0c sub $0xc,%esp -80103ca0: 56 push %esi -80103ca1: e8 5e 02 00 00 call 80103f04 +80103b20: 83 ec 0c sub $0xc,%esp +80103b23: 56 push %esi +80103b24: e8 3f 02 00 00 call 80103d68 } -80103ca6: 83 c4 10 add $0x10,%esp -80103ca9: 8d 65 f8 lea -0x8(%ebp),%esp -80103cac: 5b pop %ebx -80103cad: 5e pop %esi -80103cae: 5d pop %ebp -80103caf: c3 ret +80103b29: 83 c4 10 add $0x10,%esp +80103b2c: 8d 65 f8 lea -0x8(%ebp),%esp +80103b2f: 5b pop %ebx +80103b30: 5e pop %esi +80103b31: 5d pop %ebp +80103b32: c3 ret -80103cb0 : +80103b33 : void releasesleep(struct sleeplock *lk) { -80103cb0: f3 0f 1e fb endbr32 -80103cb4: 55 push %ebp -80103cb5: 89 e5 mov %esp,%ebp -80103cb7: 56 push %esi -80103cb8: 53 push %ebx -80103cb9: 8b 5d 08 mov 0x8(%ebp),%ebx +80103b33: 55 push %ebp +80103b34: 89 e5 mov %esp,%ebp +80103b36: 56 push %esi +80103b37: 53 push %ebx +80103b38: 8b 5d 08 mov 0x8(%ebp),%ebx acquire(&lk->lk); -80103cbc: 8d 73 04 lea 0x4(%ebx),%esi -80103cbf: 83 ec 0c sub $0xc,%esp -80103cc2: 56 push %esi -80103cc3: e8 d1 01 00 00 call 80103e99 +80103b3b: 8d 73 04 lea 0x4(%ebx),%esi +80103b3e: 83 ec 0c sub $0xc,%esp +80103b41: 56 push %esi +80103b42: e8 ba 01 00 00 call 80103d01 lk->locked = 0; -80103cc8: c7 03 00 00 00 00 movl $0x0,(%ebx) +80103b47: c7 03 00 00 00 00 movl $0x0,(%ebx) lk->pid = 0; -80103cce: c7 43 3c 00 00 00 00 movl $0x0,0x3c(%ebx) +80103b4d: c7 43 3c 00 00 00 00 movl $0x0,0x3c(%ebx) wakeup(lk); -80103cd5: 89 1c 24 mov %ebx,(%esp) -80103cd8: e8 5d fd ff ff call 80103a3a +80103b54: 89 1c 24 mov %ebx,(%esp) +80103b57: e8 7b fd ff ff call 801038d7 release(&lk->lk); -80103cdd: 89 34 24 mov %esi,(%esp) -80103ce0: e8 1f 02 00 00 call 80103f04 +80103b5c: 89 34 24 mov %esi,(%esp) +80103b5f: e8 04 02 00 00 call 80103d68 } -80103ce5: 83 c4 10 add $0x10,%esp -80103ce8: 8d 65 f8 lea -0x8(%ebp),%esp -80103ceb: 5b pop %ebx -80103cec: 5e pop %esi -80103ced: 5d pop %ebp -80103cee: c3 ret +80103b64: 83 c4 10 add $0x10,%esp +80103b67: 8d 65 f8 lea -0x8(%ebp),%esp +80103b6a: 5b pop %ebx +80103b6b: 5e pop %esi +80103b6c: 5d pop %ebp +80103b6d: c3 ret -80103cef : +80103b6e : int holdingsleep(struct sleeplock *lk) { -80103cef: f3 0f 1e fb endbr32 -80103cf3: 55 push %ebp -80103cf4: 89 e5 mov %esp,%ebp -80103cf6: 57 push %edi -80103cf7: 56 push %esi -80103cf8: 53 push %ebx -80103cf9: 83 ec 18 sub $0x18,%esp -80103cfc: 8b 5d 08 mov 0x8(%ebp),%ebx +80103b6e: 55 push %ebp +80103b6f: 89 e5 mov %esp,%ebp +80103b71: 57 push %edi +80103b72: 56 push %esi +80103b73: 53 push %ebx +80103b74: 83 ec 18 sub $0x18,%esp +80103b77: 8b 5d 08 mov 0x8(%ebp),%ebx int r; acquire(&lk->lk); -80103cff: 8d 73 04 lea 0x4(%ebx),%esi -80103d02: 56 push %esi -80103d03: e8 91 01 00 00 call 80103e99 +80103b7a: 8d 73 04 lea 0x4(%ebx),%esi +80103b7d: 56 push %esi +80103b7e: e8 7e 01 00 00 call 80103d01 r = lk->locked && (lk->pid == myproc()->pid); -80103d08: 83 c4 10 add $0x10,%esp -80103d0b: bf 00 00 00 00 mov $0x0,%edi -80103d10: 83 3b 00 cmpl $0x0,(%ebx) -80103d13: 75 13 jne 80103d28 +80103b83: 83 c4 10 add $0x10,%esp +80103b86: bf 00 00 00 00 mov $0x0,%edi +80103b8b: 83 3b 00 cmpl $0x0,(%ebx) +80103b8e: 75 13 jne 80103ba3 release(&lk->lk); -80103d15: 83 ec 0c sub $0xc,%esp -80103d18: 56 push %esi -80103d19: e8 e6 01 00 00 call 80103f04 +80103b90: 83 ec 0c sub $0xc,%esp +80103b93: 56 push %esi +80103b94: e8 cf 01 00 00 call 80103d68 return r; } -80103d1e: 89 f8 mov %edi,%eax -80103d20: 8d 65 f4 lea -0xc(%ebp),%esp -80103d23: 5b pop %ebx -80103d24: 5e pop %esi -80103d25: 5f pop %edi -80103d26: 5d pop %ebp -80103d27: c3 ret +80103b99: 89 f8 mov %edi,%eax +80103b9b: 8d 65 f4 lea -0xc(%ebp),%esp +80103b9e: 5b pop %ebx +80103b9f: 5e pop %esi +80103ba0: 5f pop %edi +80103ba1: 5d pop %ebp +80103ba2: c3 ret r = lk->locked && (lk->pid == myproc()->pid); -80103d28: 8b 5b 3c mov 0x3c(%ebx),%ebx -80103d2b: e8 ba f6 ff ff call 801033ea -80103d30: 39 58 10 cmp %ebx,0x10(%eax) -80103d33: 0f 94 c0 sete %al -80103d36: 0f b6 c0 movzbl %al,%eax -80103d39: 89 c7 mov %eax,%edi -80103d3b: eb d8 jmp 80103d15 - -80103d3d : +80103ba3: 8b 5b 3c mov 0x3c(%ebx),%ebx +80103ba6: e8 05 f7 ff ff call 801032b0 +80103bab: 39 58 10 cmp %ebx,0x10(%eax) +80103bae: 0f 94 c0 sete %al +80103bb1: 0f b6 c0 movzbl %al,%eax +80103bb4: 89 c7 mov %eax,%edi +80103bb6: eb d8 jmp 80103b90 + +80103bb8 : #include "proc.h" #include "spinlock.h" void initlock(struct spinlock *lk, char *name) { -80103d3d: f3 0f 1e fb endbr32 -80103d41: 55 push %ebp -80103d42: 89 e5 mov %esp,%ebp -80103d44: 8b 45 08 mov 0x8(%ebp),%eax +80103bb8: 55 push %ebp +80103bb9: 89 e5 mov %esp,%ebp +80103bbb: 8b 45 08 mov 0x8(%ebp),%eax lk->name = name; -80103d47: 8b 55 0c mov 0xc(%ebp),%edx -80103d4a: 89 50 04 mov %edx,0x4(%eax) +80103bbe: 8b 55 0c mov 0xc(%ebp),%edx +80103bc1: 89 50 04 mov %edx,0x4(%eax) lk->locked = 0; -80103d4d: c7 00 00 00 00 00 movl $0x0,(%eax) +80103bc4: c7 00 00 00 00 00 movl $0x0,(%eax) lk->cpu = 0; -80103d53: c7 40 08 00 00 00 00 movl $0x0,0x8(%eax) +80103bca: c7 40 08 00 00 00 00 movl $0x0,0x8(%eax) } -80103d5a: 5d pop %ebp -80103d5b: c3 ret +80103bd1: 5d pop %ebp +80103bd2: c3 ret -80103d5c : +80103bd3 : } // Record the current call stack in pcs[] by following the %ebp chain. void getcallerpcs(void *v, uint pcs[]) { -80103d5c: f3 0f 1e fb endbr32 -80103d60: 55 push %ebp -80103d61: 89 e5 mov %esp,%ebp -80103d63: 53 push %ebx -80103d64: 8b 45 08 mov 0x8(%ebp),%eax -80103d67: 8b 4d 0c mov 0xc(%ebp),%ecx +80103bd3: 55 push %ebp +80103bd4: 89 e5 mov %esp,%ebp +80103bd6: 53 push %ebx +80103bd7: 8b 45 08 mov 0x8(%ebp),%eax +80103bda: 8b 4d 0c mov 0xc(%ebp),%ecx uint *ebp; int i; ebp = (uint*)v - 2; for(i = 0; i < 10; i++){ if(ebp == 0 || ebp < (uint*)KERNBASE || ebp == (uint*)0xffffffff) -80103d6a: 8d 90 f8 ff ff 7f lea 0x7ffffff8(%eax),%edx -80103d70: 81 fa fe ff ff 7f cmp $0x7ffffffe,%edx -80103d76: 77 2d ja 80103da5 +80103bdd: 8d 90 f8 ff ff 7f lea 0x7ffffff8(%eax),%edx +80103be3: 81 fa fe ff ff 7f cmp $0x7ffffffe,%edx +80103be9: 77 2d ja 80103c18 break; pcs[i] = ebp[1]; // saved %eip -80103d78: 8b 50 fc mov -0x4(%eax),%edx -80103d7b: 89 11 mov %edx,(%ecx) +80103beb: 8b 50 fc mov -0x4(%eax),%edx +80103bee: 89 11 mov %edx,(%ecx) ebp = (uint*)ebp[0]; // saved %ebp -80103d7d: 8b 50 f8 mov -0x8(%eax),%edx +80103bf0: 8b 50 f8 mov -0x8(%eax),%edx for(i = 0; i < 10; i++){ -80103d80: b8 01 00 00 00 mov $0x1,%eax +80103bf3: b8 01 00 00 00 mov $0x1,%eax if(ebp == 0 || ebp < (uint*)KERNBASE || ebp == (uint*)0xffffffff) -80103d85: 8d 9a 00 00 00 80 lea -0x80000000(%edx),%ebx -80103d8b: 81 fb fe ff ff 7f cmp $0x7ffffffe,%ebx -80103d91: 77 17 ja 80103daa +80103bf8: 8d 9a 00 00 00 80 lea -0x80000000(%edx),%ebx +80103bfe: 81 fb fe ff ff 7f cmp $0x7ffffffe,%ebx +80103c04: 77 17 ja 80103c1d pcs[i] = ebp[1]; // saved %eip -80103d93: 8b 5a 04 mov 0x4(%edx),%ebx -80103d96: 89 1c 81 mov %ebx,(%ecx,%eax,4) +80103c06: 8b 5a 04 mov 0x4(%edx),%ebx +80103c09: 89 1c 81 mov %ebx,(%ecx,%eax,4) ebp = (uint*)ebp[0]; // saved %ebp -80103d99: 8b 12 mov (%edx),%edx +80103c0c: 8b 12 mov (%edx),%edx for(i = 0; i < 10; i++){ -80103d9b: 83 c0 01 add $0x1,%eax -80103d9e: 83 f8 0a cmp $0xa,%eax -80103da1: 75 e2 jne 80103d85 -80103da3: eb 14 jmp 80103db9 -80103da5: b8 00 00 00 00 mov $0x0,%eax +80103c0e: 83 c0 01 add $0x1,%eax +80103c11: 83 f8 0a cmp $0xa,%eax +80103c14: 75 e2 jne 80103bf8 +80103c16: eb 14 jmp 80103c2c +80103c18: b8 00 00 00 00 mov $0x0,%eax } for(; i < 10; i++) pcs[i] = 0; -80103daa: c7 04 81 00 00 00 00 movl $0x0,(%ecx,%eax,4) +80103c1d: c7 04 81 00 00 00 00 movl $0x0,(%ecx,%eax,4) for(; i < 10; i++) -80103db1: 83 c0 01 add $0x1,%eax -80103db4: 83 f8 09 cmp $0x9,%eax -80103db7: 7e f1 jle 80103daa +80103c24: 83 c0 01 add $0x1,%eax +80103c27: 83 f8 09 cmp $0x9,%eax +80103c2a: 7e f1 jle 80103c1d } -80103db9: 5b pop %ebx -80103dba: 5d pop %ebp -80103dbb: c3 ret +80103c2c: 8b 5d fc mov -0x4(%ebp),%ebx +80103c2f: c9 leave +80103c30: c3 ret -80103dbc : +80103c31 : // it takes two popcli to undo two pushcli. Also, if interrupts // are off, then pushcli, popcli leaves them off. void pushcli(void) { -80103dbc: f3 0f 1e fb endbr32 -80103dc0: 55 push %ebp -80103dc1: 89 e5 mov %esp,%ebp -80103dc3: 53 push %ebx -80103dc4: 83 ec 04 sub $0x4,%esp -80103dc7: 9c pushf -80103dc8: 5b pop %ebx +80103c31: 55 push %ebp +80103c32: 89 e5 mov %esp,%ebp +80103c34: 53 push %ebx +80103c35: 83 ec 04 sub $0x4,%esp +80103c38: 9c pushf +80103c39: 5b pop %ebx asm volatile("cli"); -80103dc9: fa cli +80103c3a: fa cli int eflags; eflags = readeflags(); cli(); if(mycpu()->ncli == 0) -80103dca: e8 97 f5 ff ff call 80103366 -80103dcf: 83 b8 a4 00 00 00 00 cmpl $0x0,0xa4(%eax) -80103dd6: 74 12 je 80103dea +80103c3b: e8 f6 f5 ff ff call 80103236 +80103c40: 83 b8 a4 00 00 00 00 cmpl $0x0,0xa4(%eax) +80103c47: 74 11 je 80103c5a mycpu()->intena = eflags & FL_IF; mycpu()->ncli += 1; -80103dd8: e8 89 f5 ff ff call 80103366 -80103ddd: 83 80 a4 00 00 00 01 addl $0x1,0xa4(%eax) +80103c49: e8 e8 f5 ff ff call 80103236 +80103c4e: 83 80 a4 00 00 00 01 addl $0x1,0xa4(%eax) } -80103de4: 83 c4 04 add $0x4,%esp -80103de7: 5b pop %ebx -80103de8: 5d pop %ebp -80103de9: c3 ret +80103c55: 8b 5d fc mov -0x4(%ebp),%ebx +80103c58: c9 leave +80103c59: c3 ret mycpu()->intena = eflags & FL_IF; -80103dea: e8 77 f5 ff ff call 80103366 -80103def: 81 e3 00 02 00 00 and $0x200,%ebx -80103df5: 89 98 a8 00 00 00 mov %ebx,0xa8(%eax) -80103dfb: eb db jmp 80103dd8 +80103c5a: e8 d7 f5 ff ff call 80103236 +80103c5f: 81 e3 00 02 00 00 and $0x200,%ebx +80103c65: 89 98 a8 00 00 00 mov %ebx,0xa8(%eax) +80103c6b: eb dc jmp 80103c49 -80103dfd : +80103c6d : void popcli(void) { -80103dfd: f3 0f 1e fb endbr32 -80103e01: 55 push %ebp -80103e02: 89 e5 mov %esp,%ebp -80103e04: 83 ec 08 sub $0x8,%esp +80103c6d: 55 push %ebp +80103c6e: 89 e5 mov %esp,%ebp +80103c70: 83 ec 08 sub $0x8,%esp asm volatile("pushfl; popl %0" : "=r" (eflags)); -80103e07: 9c pushf -80103e08: 58 pop %eax +80103c73: 9c pushf +80103c74: 58 pop %eax if(readeflags()&FL_IF) -80103e09: f6 c4 02 test $0x2,%ah -80103e0c: 75 28 jne 80103e36 +80103c75: f6 c4 02 test $0x2,%ah +80103c78: 75 28 jne 80103ca2 panic("popcli - interruptible"); if(--mycpu()->ncli < 0) -80103e0e: e8 53 f5 ff ff call 80103366 -80103e13: 8b 88 a4 00 00 00 mov 0xa4(%eax),%ecx -80103e19: 8d 51 ff lea -0x1(%ecx),%edx -80103e1c: 89 90 a4 00 00 00 mov %edx,0xa4(%eax) -80103e22: 85 d2 test %edx,%edx -80103e24: 78 1d js 80103e43 +80103c7a: e8 b7 f5 ff ff call 80103236 +80103c7f: 8b 88 a4 00 00 00 mov 0xa4(%eax),%ecx +80103c85: 8d 51 ff lea -0x1(%ecx),%edx +80103c88: 89 90 a4 00 00 00 mov %edx,0xa4(%eax) +80103c8e: 85 d2 test %edx,%edx +80103c90: 78 1d js 80103caf panic("popcli"); if(mycpu()->ncli == 0 && mycpu()->intena) -80103e26: e8 3b f5 ff ff call 80103366 -80103e2b: 83 b8 a4 00 00 00 00 cmpl $0x0,0xa4(%eax) -80103e32: 74 1c je 80103e50 +80103c92: e8 9f f5 ff ff call 80103236 +80103c97: 83 b8 a4 00 00 00 00 cmpl $0x0,0xa4(%eax) +80103c9e: 74 1c je 80103cbc sti(); } -80103e34: c9 leave -80103e35: c3 ret +80103ca0: c9 leave +80103ca1: c3 ret panic("popcli - interruptible"); -80103e36: 83 ec 0c sub $0xc,%esp -80103e39: 68 1f 7f 10 80 push $0x80107f1f -80103e3e: e8 15 c5 ff ff call 80100358 +80103ca2: 83 ec 0c sub $0xc,%esp +80103ca5: 68 3f 7c 10 80 push $0x80107c3f +80103caa: e8 91 c6 ff ff call 80100340 panic("popcli"); -80103e43: 83 ec 0c sub $0xc,%esp -80103e46: 68 36 7f 10 80 push $0x80107f36 -80103e4b: e8 08 c5 ff ff call 80100358 +80103caf: 83 ec 0c sub $0xc,%esp +80103cb2: 68 56 7c 10 80 push $0x80107c56 +80103cb7: e8 84 c6 ff ff call 80100340 if(mycpu()->ncli == 0 && mycpu()->intena) -80103e50: e8 11 f5 ff ff call 80103366 -80103e55: 83 b8 a8 00 00 00 00 cmpl $0x0,0xa8(%eax) -80103e5c: 74 d6 je 80103e34 +80103cbc: e8 75 f5 ff ff call 80103236 +80103cc1: 83 b8 a8 00 00 00 00 cmpl $0x0,0xa8(%eax) +80103cc8: 74 d6 je 80103ca0 asm volatile("sti"); -80103e5e: fb sti +80103cca: fb sti } -80103e5f: eb d3 jmp 80103e34 +80103ccb: eb d3 jmp 80103ca0 -80103e61 : +80103ccd : { -80103e61: f3 0f 1e fb endbr32 -80103e65: 55 push %ebp -80103e66: 89 e5 mov %esp,%ebp -80103e68: 56 push %esi -80103e69: 53 push %ebx -80103e6a: 8b 75 08 mov 0x8(%ebp),%esi +80103ccd: 55 push %ebp +80103cce: 89 e5 mov %esp,%ebp +80103cd0: 56 push %esi +80103cd1: 53 push %ebx +80103cd2: 8b 75 08 mov 0x8(%ebp),%esi pushcli(); -80103e6d: e8 4a ff ff ff call 80103dbc +80103cd5: e8 57 ff ff ff call 80103c31 r = lock->locked && lock->cpu == mycpu(); -80103e72: bb 00 00 00 00 mov $0x0,%ebx -80103e77: 83 3e 00 cmpl $0x0,(%esi) -80103e7a: 75 0b jne 80103e87 +80103cda: bb 00 00 00 00 mov $0x0,%ebx +80103cdf: 83 3e 00 cmpl $0x0,(%esi) +80103ce2: 75 0b jne 80103cef popcli(); -80103e7c: e8 7c ff ff ff call 80103dfd +80103ce4: e8 84 ff ff ff call 80103c6d } -80103e81: 89 d8 mov %ebx,%eax -80103e83: 5b pop %ebx -80103e84: 5e pop %esi -80103e85: 5d pop %ebp -80103e86: c3 ret +80103ce9: 89 d8 mov %ebx,%eax +80103ceb: 5b pop %ebx +80103cec: 5e pop %esi +80103ced: 5d pop %ebp +80103cee: c3 ret r = lock->locked && lock->cpu == mycpu(); -80103e87: 8b 5e 08 mov 0x8(%esi),%ebx -80103e8a: e8 d7 f4 ff ff call 80103366 -80103e8f: 39 c3 cmp %eax,%ebx -80103e91: 0f 94 c3 sete %bl -80103e94: 0f b6 db movzbl %bl,%ebx -80103e97: eb e3 jmp 80103e7c - -80103e99 : -{ -80103e99: f3 0f 1e fb endbr32 -80103e9d: 55 push %ebp -80103e9e: 89 e5 mov %esp,%ebp -80103ea0: 53 push %ebx -80103ea1: 83 ec 04 sub $0x4,%esp +80103cef: 8b 5e 08 mov 0x8(%esi),%ebx +80103cf2: e8 3f f5 ff ff call 80103236 +80103cf7: 39 c3 cmp %eax,%ebx +80103cf9: 0f 94 c3 sete %bl +80103cfc: 0f b6 db movzbl %bl,%ebx +80103cff: eb e3 jmp 80103ce4 + +80103d01 : +{ +80103d01: 55 push %ebp +80103d02: 89 e5 mov %esp,%ebp +80103d04: 53 push %ebx +80103d05: 83 ec 04 sub $0x4,%esp pushcli(); // disable interrupts to avoid deadlock. -80103ea4: e8 13 ff ff ff call 80103dbc +80103d08: e8 24 ff ff ff call 80103c31 if(holding(lk)) -80103ea9: 83 ec 0c sub $0xc,%esp -80103eac: ff 75 08 pushl 0x8(%ebp) -80103eaf: e8 ad ff ff ff call 80103e61 -80103eb4: 83 c4 10 add $0x10,%esp -80103eb7: 85 c0 test %eax,%eax -80103eb9: 75 3c jne 80103ef7 +80103d0d: 83 ec 0c sub $0xc,%esp +80103d10: ff 75 08 push 0x8(%ebp) +80103d13: e8 b5 ff ff ff call 80103ccd +80103d18: 83 c4 10 add $0x10,%esp +80103d1b: 85 c0 test %eax,%eax +80103d1d: 75 3c jne 80103d5b asm volatile("lock; xchgl %0, %1" : -80103ebb: b9 01 00 00 00 mov $0x1,%ecx +80103d1f: b9 01 00 00 00 mov $0x1,%ecx while(xchg(&lk->locked, 1) != 0) -80103ec0: 8b 55 08 mov 0x8(%ebp),%edx -80103ec3: 89 c8 mov %ecx,%eax -80103ec5: f0 87 02 lock xchg %eax,(%edx) -80103ec8: 85 c0 test %eax,%eax -80103eca: 75 f4 jne 80103ec0 +80103d24: 8b 55 08 mov 0x8(%ebp),%edx +80103d27: 89 c8 mov %ecx,%eax +80103d29: f0 87 02 lock xchg %eax,(%edx) +80103d2c: 85 c0 test %eax,%eax +80103d2e: 75 f4 jne 80103d24 __sync_synchronize(); -80103ecc: f0 83 0c 24 00 lock orl $0x0,(%esp) +80103d30: f0 83 0c 24 00 lock orl $0x0,(%esp) lk->cpu = mycpu(); -80103ed1: 8b 5d 08 mov 0x8(%ebp),%ebx -80103ed4: e8 8d f4 ff ff call 80103366 -80103ed9: 89 43 08 mov %eax,0x8(%ebx) +80103d35: 8b 5d 08 mov 0x8(%ebp),%ebx +80103d38: e8 f9 f4 ff ff call 80103236 +80103d3d: 89 43 08 mov %eax,0x8(%ebx) getcallerpcs(&lk, lk->pcs); -80103edc: 83 ec 08 sub $0x8,%esp -80103edf: 8b 45 08 mov 0x8(%ebp),%eax -80103ee2: 83 c0 0c add $0xc,%eax -80103ee5: 50 push %eax -80103ee6: 8d 45 08 lea 0x8(%ebp),%eax -80103ee9: 50 push %eax -80103eea: e8 6d fe ff ff call 80103d5c -} -80103eef: 83 c4 10 add $0x10,%esp -80103ef2: 8b 5d fc mov -0x4(%ebp),%ebx -80103ef5: c9 leave -80103ef6: c3 ret +80103d40: 83 ec 08 sub $0x8,%esp +80103d43: 8b 45 08 mov 0x8(%ebp),%eax +80103d46: 83 c0 0c add $0xc,%eax +80103d49: 50 push %eax +80103d4a: 8d 45 08 lea 0x8(%ebp),%eax +80103d4d: 50 push %eax +80103d4e: e8 80 fe ff ff call 80103bd3 +} +80103d53: 83 c4 10 add $0x10,%esp +80103d56: 8b 5d fc mov -0x4(%ebp),%ebx +80103d59: c9 leave +80103d5a: c3 ret panic("acquire"); -80103ef7: 83 ec 0c sub $0xc,%esp -80103efa: 68 3d 7f 10 80 push $0x80107f3d -80103eff: e8 54 c4 ff ff call 80100358 - -80103f04 : -{ -80103f04: f3 0f 1e fb endbr32 -80103f08: 55 push %ebp -80103f09: 89 e5 mov %esp,%ebp -80103f0b: 53 push %ebx -80103f0c: 83 ec 10 sub $0x10,%esp -80103f0f: 8b 5d 08 mov 0x8(%ebp),%ebx +80103d5b: 83 ec 0c sub $0xc,%esp +80103d5e: 68 5d 7c 10 80 push $0x80107c5d +80103d63: e8 d8 c5 ff ff call 80100340 + +80103d68 : +{ +80103d68: 55 push %ebp +80103d69: 89 e5 mov %esp,%ebp +80103d6b: 53 push %ebx +80103d6c: 83 ec 10 sub $0x10,%esp +80103d6f: 8b 5d 08 mov 0x8(%ebp),%ebx if(!holding(lk)) -80103f12: 53 push %ebx -80103f13: e8 49 ff ff ff call 80103e61 -80103f18: 83 c4 10 add $0x10,%esp -80103f1b: 85 c0 test %eax,%eax -80103f1d: 74 23 je 80103f42 +80103d72: 53 push %ebx +80103d73: e8 55 ff ff ff call 80103ccd +80103d78: 83 c4 10 add $0x10,%esp +80103d7b: 85 c0 test %eax,%eax +80103d7d: 74 23 je 80103da2 lk->pcs[0] = 0; -80103f1f: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx) +80103d7f: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx) lk->cpu = 0; -80103f26: c7 43 08 00 00 00 00 movl $0x0,0x8(%ebx) +80103d86: c7 43 08 00 00 00 00 movl $0x0,0x8(%ebx) __sync_synchronize(); -80103f2d: f0 83 0c 24 00 lock orl $0x0,(%esp) +80103d8d: f0 83 0c 24 00 lock orl $0x0,(%esp) asm volatile("movl $0, %0" : "+m" (lk->locked) : ); -80103f32: c7 03 00 00 00 00 movl $0x0,(%ebx) +80103d92: c7 03 00 00 00 00 movl $0x0,(%ebx) popcli(); -80103f38: e8 c0 fe ff ff call 80103dfd +80103d98: e8 d0 fe ff ff call 80103c6d } -80103f3d: 8b 5d fc mov -0x4(%ebp),%ebx -80103f40: c9 leave -80103f41: c3 ret +80103d9d: 8b 5d fc mov -0x4(%ebp),%ebx +80103da0: c9 leave +80103da1: c3 ret panic("release"); -80103f42: 83 ec 0c sub $0xc,%esp -80103f45: 68 45 7f 10 80 push $0x80107f45 -80103f4a: e8 09 c4 ff ff call 80100358 +80103da2: 83 ec 0c sub $0xc,%esp +80103da5: 68 65 7c 10 80 push $0x80107c65 +80103daa: e8 91 c5 ff ff call 80100340 -80103f4f : +80103daf : #include "types.h" #include "x86.h" void* memset(void *dst, int c, uint n) { -80103f4f: f3 0f 1e fb endbr32 -80103f53: 55 push %ebp -80103f54: 89 e5 mov %esp,%ebp -80103f56: 57 push %edi -80103f57: 53 push %ebx -80103f58: 8b 55 08 mov 0x8(%ebp),%edx -80103f5b: 8b 45 0c mov 0xc(%ebp),%eax -80103f5e: 8b 4d 10 mov 0x10(%ebp),%ecx +80103daf: 55 push %ebp +80103db0: 89 e5 mov %esp,%ebp +80103db2: 57 push %edi +80103db3: 53 push %ebx +80103db4: 8b 55 08 mov 0x8(%ebp),%edx +80103db7: 8b 45 0c mov 0xc(%ebp),%eax +80103dba: 8b 4d 10 mov 0x10(%ebp),%ecx if ((int)dst%4 == 0 && n%4 == 0){ -80103f61: 89 d7 mov %edx,%edi -80103f63: 09 cf or %ecx,%edi -80103f65: f7 c7 03 00 00 00 test $0x3,%edi -80103f6b: 75 1e jne 80103f8b +80103dbd: 89 d7 mov %edx,%edi +80103dbf: 09 cf or %ecx,%edi +80103dc1: f7 c7 03 00 00 00 test $0x3,%edi +80103dc7: 75 1e jne 80103de7 c &= 0xFF; -80103f6d: 0f b6 f8 movzbl %al,%edi +80103dc9: 0f b6 f8 movzbl %al,%edi stosl(dst, (c<<24)|(c<<16)|(c<<8)|c, n/4); -80103f70: c1 e9 02 shr $0x2,%ecx -80103f73: c1 e0 18 shl $0x18,%eax -80103f76: 89 fb mov %edi,%ebx -80103f78: c1 e3 10 shl $0x10,%ebx -80103f7b: 09 d8 or %ebx,%eax -80103f7d: 09 f8 or %edi,%eax -80103f7f: c1 e7 08 shl $0x8,%edi -80103f82: 09 f8 or %edi,%eax +80103dcc: c1 e9 02 shr $0x2,%ecx +80103dcf: c1 e0 18 shl $0x18,%eax +80103dd2: 89 fb mov %edi,%ebx +80103dd4: c1 e3 10 shl $0x10,%ebx +80103dd7: 09 d8 or %ebx,%eax +80103dd9: 09 f8 or %edi,%eax +80103ddb: c1 e7 08 shl $0x8,%edi +80103dde: 09 f8 or %edi,%eax asm volatile("cld; rep stosl" : -80103f84: 89 d7 mov %edx,%edi -80103f86: fc cld -80103f87: f3 ab rep stos %eax,%es:(%edi) +80103de0: 89 d7 mov %edx,%edi +80103de2: fc cld +80103de3: f3 ab rep stos %eax,%es:(%edi) } -80103f89: eb 05 jmp 80103f90 +80103de5: eb 05 jmp 80103dec asm volatile("cld; rep stosb" : -80103f8b: 89 d7 mov %edx,%edi -80103f8d: fc cld -80103f8e: f3 aa rep stos %al,%es:(%edi) +80103de7: 89 d7 mov %edx,%edi +80103de9: fc cld +80103dea: f3 aa rep stos %al,%es:(%edi) } else stosb(dst, c, n); return dst; } -80103f90: 89 d0 mov %edx,%eax -80103f92: 5b pop %ebx -80103f93: 5f pop %edi -80103f94: 5d pop %ebp -80103f95: c3 ret +80103dec: 89 d0 mov %edx,%eax +80103dee: 5b pop %ebx +80103def: 5f pop %edi +80103df0: 5d pop %ebp +80103df1: c3 ret -80103f96 : +80103df2 : int memcmp(const void *v1, const void *v2, uint n) { -80103f96: f3 0f 1e fb endbr32 -80103f9a: 55 push %ebp -80103f9b: 89 e5 mov %esp,%ebp -80103f9d: 56 push %esi -80103f9e: 53 push %ebx -80103f9f: 8b 45 08 mov 0x8(%ebp),%eax -80103fa2: 8b 55 0c mov 0xc(%ebp),%edx -80103fa5: 8b 75 10 mov 0x10(%ebp),%esi +80103df2: 55 push %ebp +80103df3: 89 e5 mov %esp,%ebp +80103df5: 56 push %esi +80103df6: 53 push %ebx +80103df7: 8b 45 08 mov 0x8(%ebp),%eax +80103dfa: 8b 55 0c mov 0xc(%ebp),%edx +80103dfd: 8b 75 10 mov 0x10(%ebp),%esi const uchar *s1, *s2; s1 = v1; s2 = v2; while(n-- > 0){ -80103fa8: 85 f6 test %esi,%esi -80103faa: 74 29 je 80103fd5 -80103fac: 01 c6 add %eax,%esi +80103e00: 85 f6 test %esi,%esi +80103e02: 74 29 je 80103e2d +80103e04: 01 c6 add %eax,%esi if(*s1 != *s2) -80103fae: 0f b6 08 movzbl (%eax),%ecx -80103fb1: 0f b6 1a movzbl (%edx),%ebx -80103fb4: 38 d9 cmp %bl,%cl -80103fb6: 75 11 jne 80103fc9 +80103e06: 0f b6 08 movzbl (%eax),%ecx +80103e09: 0f b6 1a movzbl (%edx),%ebx +80103e0c: 38 d9 cmp %bl,%cl +80103e0e: 75 11 jne 80103e21 return *s1 - *s2; s1++, s2++; -80103fb8: 83 c0 01 add $0x1,%eax -80103fbb: 83 c2 01 add $0x1,%edx +80103e10: 83 c0 01 add $0x1,%eax +80103e13: 83 c2 01 add $0x1,%edx while(n-- > 0){ -80103fbe: 39 c6 cmp %eax,%esi -80103fc0: 75 ec jne 80103fae +80103e16: 39 c6 cmp %eax,%esi +80103e18: 75 ec jne 80103e06 } return 0; -80103fc2: b8 00 00 00 00 mov $0x0,%eax -80103fc7: eb 08 jmp 80103fd1 +80103e1a: b8 00 00 00 00 mov $0x0,%eax +80103e1f: eb 08 jmp 80103e29 return *s1 - *s2; -80103fc9: 0f b6 c1 movzbl %cl,%eax -80103fcc: 0f b6 db movzbl %bl,%ebx -80103fcf: 29 d8 sub %ebx,%eax -} -80103fd1: 5b pop %ebx -80103fd2: 5e pop %esi -80103fd3: 5d pop %ebp -80103fd4: c3 ret +80103e21: 0f b6 c1 movzbl %cl,%eax +80103e24: 0f b6 db movzbl %bl,%ebx +80103e27: 29 d8 sub %ebx,%eax +} +80103e29: 5b pop %ebx +80103e2a: 5e pop %esi +80103e2b: 5d pop %ebp +80103e2c: c3 ret return 0; -80103fd5: b8 00 00 00 00 mov $0x0,%eax -80103fda: eb f5 jmp 80103fd1 +80103e2d: b8 00 00 00 00 mov $0x0,%eax +80103e32: eb f5 jmp 80103e29 -80103fdc : +80103e34 : void* memmove(void *dst, const void *src, uint n) { -80103fdc: f3 0f 1e fb endbr32 -80103fe0: 55 push %ebp -80103fe1: 89 e5 mov %esp,%ebp -80103fe3: 56 push %esi -80103fe4: 53 push %ebx -80103fe5: 8b 75 08 mov 0x8(%ebp),%esi -80103fe8: 8b 45 0c mov 0xc(%ebp),%eax -80103feb: 8b 4d 10 mov 0x10(%ebp),%ecx +80103e34: 55 push %ebp +80103e35: 89 e5 mov %esp,%ebp +80103e37: 56 push %esi +80103e38: 53 push %ebx +80103e39: 8b 75 08 mov 0x8(%ebp),%esi +80103e3c: 8b 45 0c mov 0xc(%ebp),%eax +80103e3f: 8b 4d 10 mov 0x10(%ebp),%ecx const char *s; char *d; s = src; d = dst; if(s < d && s + n > d){ -80103fee: 39 f0 cmp %esi,%eax -80103ff0: 72 20 jb 80104012 +80103e42: 39 f0 cmp %esi,%eax +80103e44: 72 20 jb 80103e66 s += n; d += n; while(n-- > 0) *--d = *--s; } else while(n-- > 0) -80103ff2: 8d 1c 08 lea (%eax,%ecx,1),%ebx -80103ff5: 89 f2 mov %esi,%edx -80103ff7: 85 c9 test %ecx,%ecx -80103ff9: 74 11 je 8010400c +80103e46: 8d 1c 08 lea (%eax,%ecx,1),%ebx +80103e49: 89 f2 mov %esi,%edx +80103e4b: 85 c9 test %ecx,%ecx +80103e4d: 74 11 je 80103e60 *d++ = *s++; -80103ffb: 83 c0 01 add $0x1,%eax -80103ffe: 83 c2 01 add $0x1,%edx -80104001: 0f b6 48 ff movzbl -0x1(%eax),%ecx -80104005: 88 4a ff mov %cl,-0x1(%edx) +80103e4f: 83 c0 01 add $0x1,%eax +80103e52: 83 c2 01 add $0x1,%edx +80103e55: 0f b6 48 ff movzbl -0x1(%eax),%ecx +80103e59: 88 4a ff mov %cl,-0x1(%edx) while(n-- > 0) -80104008: 39 d8 cmp %ebx,%eax -8010400a: 75 ef jne 80103ffb +80103e5c: 39 d8 cmp %ebx,%eax +80103e5e: 75 ef jne 80103e4f return dst; } -8010400c: 89 f0 mov %esi,%eax -8010400e: 5b pop %ebx -8010400f: 5e pop %esi -80104010: 5d pop %ebp -80104011: c3 ret +80103e60: 89 f0 mov %esi,%eax +80103e62: 5b pop %ebx +80103e63: 5e pop %esi +80103e64: 5d pop %ebp +80103e65: c3 ret if(s < d && s + n > d){ -80104012: 8d 14 08 lea (%eax,%ecx,1),%edx -80104015: 39 d6 cmp %edx,%esi -80104017: 73 d9 jae 80103ff2 +80103e66: 8d 14 08 lea (%eax,%ecx,1),%edx +80103e69: 39 d6 cmp %edx,%esi +80103e6b: 73 d9 jae 80103e46 while(n-- > 0) -80104019: 8d 51 ff lea -0x1(%ecx),%edx -8010401c: 85 c9 test %ecx,%ecx -8010401e: 74 ec je 8010400c +80103e6d: 8d 51 ff lea -0x1(%ecx),%edx +80103e70: 85 c9 test %ecx,%ecx +80103e72: 74 ec je 80103e60 *--d = *--s; -80104020: 0f b6 0c 10 movzbl (%eax,%edx,1),%ecx -80104024: 88 0c 16 mov %cl,(%esi,%edx,1) +80103e74: 0f b6 0c 10 movzbl (%eax,%edx,1),%ecx +80103e78: 88 0c 16 mov %cl,(%esi,%edx,1) while(n-- > 0) -80104027: 83 ea 01 sub $0x1,%edx -8010402a: 83 fa ff cmp $0xffffffff,%edx -8010402d: 75 f1 jne 80104020 -8010402f: eb db jmp 8010400c +80103e7b: 83 ea 01 sub $0x1,%edx +80103e7e: 83 fa ff cmp $0xffffffff,%edx +80103e81: 75 f1 jne 80103e74 +80103e83: eb db jmp 80103e60 -80104031 : +80103e85 : // memcpy exists to placate GCC. Use memmove. void* memcpy(void *dst, const void *src, uint n) { -80104031: f3 0f 1e fb endbr32 -80104035: 55 push %ebp -80104036: 89 e5 mov %esp,%ebp -80104038: 83 ec 0c sub $0xc,%esp +80103e85: 55 push %ebp +80103e86: 89 e5 mov %esp,%ebp +80103e88: 83 ec 0c sub $0xc,%esp return memmove(dst, src, n); -8010403b: ff 75 10 pushl 0x10(%ebp) -8010403e: ff 75 0c pushl 0xc(%ebp) -80104041: ff 75 08 pushl 0x8(%ebp) -80104044: e8 93 ff ff ff call 80103fdc +80103e8b: ff 75 10 push 0x10(%ebp) +80103e8e: ff 75 0c push 0xc(%ebp) +80103e91: ff 75 08 push 0x8(%ebp) +80103e94: e8 9b ff ff ff call 80103e34 } -80104049: c9 leave -8010404a: c3 ret +80103e99: c9 leave +80103e9a: c3 ret -8010404b : +80103e9b : int strncmp(const char *p, const char *q, uint n) { -8010404b: f3 0f 1e fb endbr32 -8010404f: 55 push %ebp -80104050: 89 e5 mov %esp,%ebp -80104052: 53 push %ebx -80104053: 8b 55 08 mov 0x8(%ebp),%edx -80104056: 8b 4d 0c mov 0xc(%ebp),%ecx -80104059: 8b 45 10 mov 0x10(%ebp),%eax +80103e9b: 55 push %ebp +80103e9c: 89 e5 mov %esp,%ebp +80103e9e: 53 push %ebx +80103e9f: 8b 55 08 mov 0x8(%ebp),%edx +80103ea2: 8b 4d 0c mov 0xc(%ebp),%ecx +80103ea5: 8b 45 10 mov 0x10(%ebp),%eax while(n > 0 && *p && *p == *q) -8010405c: 85 c0 test %eax,%eax -8010405e: 74 29 je 80104089 -80104060: 0f b6 1a movzbl (%edx),%ebx -80104063: 84 db test %bl,%bl -80104065: 74 16 je 8010407d -80104067: 3a 19 cmp (%ecx),%bl -80104069: 75 12 jne 8010407d +80103ea8: 85 c0 test %eax,%eax +80103eaa: 74 29 je 80103ed5 +80103eac: 0f b6 1a movzbl (%edx),%ebx +80103eaf: 84 db test %bl,%bl +80103eb1: 74 16 je 80103ec9 +80103eb3: 3a 19 cmp (%ecx),%bl +80103eb5: 75 12 jne 80103ec9 n--, p++, q++; -8010406b: 83 c2 01 add $0x1,%edx -8010406e: 83 c1 01 add $0x1,%ecx +80103eb7: 83 c2 01 add $0x1,%edx +80103eba: 83 c1 01 add $0x1,%ecx while(n > 0 && *p && *p == *q) -80104071: 83 e8 01 sub $0x1,%eax -80104074: 75 ea jne 80104060 +80103ebd: 83 e8 01 sub $0x1,%eax +80103ec0: 75 ea jne 80103eac if(n == 0) return 0; -80104076: b8 00 00 00 00 mov $0x0,%eax -8010407b: eb 0c jmp 80104089 +80103ec2: b8 00 00 00 00 mov $0x0,%eax +80103ec7: eb 0c jmp 80103ed5 if(n == 0) -8010407d: 85 c0 test %eax,%eax -8010407f: 74 0b je 8010408c +80103ec9: 85 c0 test %eax,%eax +80103ecb: 74 0d je 80103eda return (uchar)*p - (uchar)*q; -80104081: 0f b6 02 movzbl (%edx),%eax -80104084: 0f b6 11 movzbl (%ecx),%edx -80104087: 29 d0 sub %edx,%eax +80103ecd: 0f b6 02 movzbl (%edx),%eax +80103ed0: 0f b6 11 movzbl (%ecx),%edx +80103ed3: 29 d0 sub %edx,%eax } -80104089: 5b pop %ebx -8010408a: 5d pop %ebp -8010408b: c3 ret +80103ed5: 8b 5d fc mov -0x4(%ebp),%ebx +80103ed8: c9 leave +80103ed9: c3 ret return 0; -8010408c: b8 00 00 00 00 mov $0x0,%eax -80104091: eb f6 jmp 80104089 +80103eda: b8 00 00 00 00 mov $0x0,%eax +80103edf: eb f4 jmp 80103ed5 -80104093 : +80103ee1 : char* strncpy(char *s, const char *t, int n) { -80104093: f3 0f 1e fb endbr32 -80104097: 55 push %ebp -80104098: 89 e5 mov %esp,%ebp -8010409a: 57 push %edi -8010409b: 56 push %esi -8010409c: 53 push %ebx -8010409d: 8b 75 08 mov 0x8(%ebp),%esi -801040a0: 8b 45 10 mov 0x10(%ebp),%eax +80103ee1: 55 push %ebp +80103ee2: 89 e5 mov %esp,%ebp +80103ee4: 57 push %edi +80103ee5: 56 push %esi +80103ee6: 53 push %ebx +80103ee7: 8b 75 08 mov 0x8(%ebp),%esi +80103eea: 8b 4d 10 mov 0x10(%ebp),%ecx char *os; os = s; while(n-- > 0 && (*s++ = *t++) != 0) -801040a3: 89 f2 mov %esi,%edx -801040a5: 89 c3 mov %eax,%ebx -801040a7: 83 e8 01 sub $0x1,%eax -801040aa: 85 db test %ebx,%ebx -801040ac: 7e 17 jle 801040c5 -801040ae: 83 45 0c 01 addl $0x1,0xc(%ebp) -801040b2: 83 c2 01 add $0x1,%edx -801040b5: 8b 7d 0c mov 0xc(%ebp),%edi -801040b8: 0f b6 7f ff movzbl -0x1(%edi),%edi -801040bc: 89 f9 mov %edi,%ecx -801040be: 88 4a ff mov %cl,-0x1(%edx) -801040c1: 84 c9 test %cl,%cl -801040c3: 75 e0 jne 801040a5 +80103eed: 89 f0 mov %esi,%eax +80103eef: 89 cb mov %ecx,%ebx +80103ef1: 83 e9 01 sub $0x1,%ecx +80103ef4: 85 db test %ebx,%ebx +80103ef6: 7e 17 jle 80103f0f +80103ef8: 83 45 0c 01 addl $0x1,0xc(%ebp) +80103efc: 83 c0 01 add $0x1,%eax +80103eff: 8b 7d 0c mov 0xc(%ebp),%edi +80103f02: 0f b6 7f ff movzbl -0x1(%edi),%edi +80103f06: 89 fa mov %edi,%edx +80103f08: 88 50 ff mov %dl,-0x1(%eax) +80103f0b: 84 d2 test %dl,%dl +80103f0d: 75 e0 jne 80103eef ; while(n-- > 0) -801040c5: 89 d1 mov %edx,%ecx -801040c7: 85 c0 test %eax,%eax -801040c9: 7e 13 jle 801040de +80103f0f: 89 c2 mov %eax,%edx +80103f11: 85 c9 test %ecx,%ecx +80103f13: 7e 13 jle 80103f28 *s++ = 0; -801040cb: 83 c1 01 add $0x1,%ecx -801040ce: c6 41 ff 00 movb $0x0,-0x1(%ecx) +80103f15: 83 c2 01 add $0x1,%edx +80103f18: c6 42 ff 00 movb $0x0,-0x1(%edx) while(n-- > 0) -801040d2: 89 c8 mov %ecx,%eax -801040d4: f7 d0 not %eax -801040d6: 01 d8 add %ebx,%eax -801040d8: 01 d0 add %edx,%eax -801040da: 85 c0 test %eax,%eax -801040dc: 7f ed jg 801040cb +80103f1c: 89 d9 mov %ebx,%ecx +80103f1e: 29 d1 sub %edx,%ecx +80103f20: 8d 4c 08 ff lea -0x1(%eax,%ecx,1),%ecx +80103f24: 85 c9 test %ecx,%ecx +80103f26: 7f ed jg 80103f15 return os; } -801040de: 89 f0 mov %esi,%eax -801040e0: 5b pop %ebx -801040e1: 5e pop %esi -801040e2: 5f pop %edi -801040e3: 5d pop %ebp -801040e4: c3 ret +80103f28: 89 f0 mov %esi,%eax +80103f2a: 5b pop %ebx +80103f2b: 5e pop %esi +80103f2c: 5f pop %edi +80103f2d: 5d pop %ebp +80103f2e: c3 ret -801040e5 : +80103f2f : // Like strncpy but guaranteed to NUL-terminate. char* safestrcpy(char *s, const char *t, int n) { -801040e5: f3 0f 1e fb endbr32 -801040e9: 55 push %ebp -801040ea: 89 e5 mov %esp,%ebp -801040ec: 56 push %esi -801040ed: 53 push %ebx -801040ee: 8b 75 08 mov 0x8(%ebp),%esi -801040f1: 8b 45 0c mov 0xc(%ebp),%eax -801040f4: 8b 55 10 mov 0x10(%ebp),%edx +80103f2f: 55 push %ebp +80103f30: 89 e5 mov %esp,%ebp +80103f32: 56 push %esi +80103f33: 53 push %ebx +80103f34: 8b 75 08 mov 0x8(%ebp),%esi +80103f37: 8b 45 0c mov 0xc(%ebp),%eax +80103f3a: 8b 55 10 mov 0x10(%ebp),%edx char *os; os = s; if(n <= 0) -801040f7: 85 d2 test %edx,%edx -801040f9: 7e 1e jle 80104119 -801040fb: 8d 5c 10 ff lea -0x1(%eax,%edx,1),%ebx -801040ff: 89 f2 mov %esi,%edx +80103f3d: 85 d2 test %edx,%edx +80103f3f: 7e 1e jle 80103f5f +80103f41: 8d 5c 10 ff lea -0x1(%eax,%edx,1),%ebx +80103f45: 89 f2 mov %esi,%edx return os; while(--n > 0 && (*s++ = *t++) != 0) -80104101: 39 d8 cmp %ebx,%eax -80104103: 74 11 je 80104116 -80104105: 83 c0 01 add $0x1,%eax -80104108: 83 c2 01 add $0x1,%edx -8010410b: 0f b6 48 ff movzbl -0x1(%eax),%ecx -8010410f: 88 4a ff mov %cl,-0x1(%edx) -80104112: 84 c9 test %cl,%cl -80104114: 75 eb jne 80104101 +80103f47: 39 d8 cmp %ebx,%eax +80103f49: 74 11 je 80103f5c +80103f4b: 83 c0 01 add $0x1,%eax +80103f4e: 83 c2 01 add $0x1,%edx +80103f51: 0f b6 48 ff movzbl -0x1(%eax),%ecx +80103f55: 88 4a ff mov %cl,-0x1(%edx) +80103f58: 84 c9 test %cl,%cl +80103f5a: 75 eb jne 80103f47 ; *s = 0; -80104116: c6 02 00 movb $0x0,(%edx) +80103f5c: c6 02 00 movb $0x0,(%edx) return os; } -80104119: 89 f0 mov %esi,%eax -8010411b: 5b pop %ebx -8010411c: 5e pop %esi -8010411d: 5d pop %ebp -8010411e: c3 ret +80103f5f: 89 f0 mov %esi,%eax +80103f61: 5b pop %ebx +80103f62: 5e pop %esi +80103f63: 5d pop %ebp +80103f64: c3 ret -8010411f : +80103f65 : int strlen(const char *s) { -8010411f: f3 0f 1e fb endbr32 -80104123: 55 push %ebp -80104124: 89 e5 mov %esp,%ebp -80104126: 8b 55 08 mov 0x8(%ebp),%edx +80103f65: 55 push %ebp +80103f66: 89 e5 mov %esp,%ebp +80103f68: 8b 55 08 mov 0x8(%ebp),%edx int n; for(n = 0; s[n]; n++) -80104129: 80 3a 00 cmpb $0x0,(%edx) -8010412c: 74 10 je 8010413e -8010412e: b8 00 00 00 00 mov $0x0,%eax -80104133: 83 c0 01 add $0x1,%eax -80104136: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) -8010413a: 75 f7 jne 80104133 +80103f6b: 80 3a 00 cmpb $0x0,(%edx) +80103f6e: 74 10 je 80103f80 +80103f70: b8 00 00 00 00 mov $0x0,%eax +80103f75: 83 c0 01 add $0x1,%eax +80103f78: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) +80103f7c: 75 f7 jne 80103f75 ; return n; } -8010413c: 5d pop %ebp -8010413d: c3 ret +80103f7e: 5d pop %ebp +80103f7f: c3 ret for(n = 0; s[n]; n++) -8010413e: b8 00 00 00 00 mov $0x0,%eax +80103f80: b8 00 00 00 00 mov $0x0,%eax return n; -80104143: eb f7 jmp 8010413c +80103f85: eb f7 jmp 80103f7e -80104145 : +80103f87 : # 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 -80104145: 8b 44 24 04 mov 0x4(%esp),%eax +80103f87: 8b 44 24 04 mov 0x4(%esp),%eax movl 8(%esp), %edx -80104149: 8b 54 24 08 mov 0x8(%esp),%edx +80103f8b: 8b 54 24 08 mov 0x8(%esp),%edx # Save old callee-saved registers pushl %ebp -8010414d: 55 push %ebp +80103f8f: 55 push %ebp pushl %ebx -8010414e: 53 push %ebx +80103f90: 53 push %ebx pushl %esi -8010414f: 56 push %esi +80103f91: 56 push %esi pushl %edi -80104150: 57 push %edi +80103f92: 57 push %edi # Switch stacks movl %esp, (%eax) -80104151: 89 20 mov %esp,(%eax) +80103f93: 89 20 mov %esp,(%eax) movl %edx, %esp -80104153: 89 d4 mov %edx,%esp +80103f95: 89 d4 mov %edx,%esp # Load new callee-saved registers popl %edi -80104155: 5f pop %edi +80103f97: 5f pop %edi popl %esi -80104156: 5e pop %esi +80103f98: 5e pop %esi popl %ebx -80104157: 5b pop %ebx +80103f99: 5b pop %ebx popl %ebp -80104158: 5d pop %ebp +80103f9a: 5d pop %ebp ret -80104159: c3 ret +80103f9b: c3 ret -8010415a : +80103f9c : // 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) { -8010415a: f3 0f 1e fb endbr32 -8010415e: 55 push %ebp -8010415f: 89 e5 mov %esp,%ebp -80104161: 53 push %ebx -80104162: 83 ec 04 sub $0x4,%esp -80104165: 8b 5d 08 mov 0x8(%ebp),%ebx +80103f9c: 55 push %ebp +80103f9d: 89 e5 mov %esp,%ebp +80103f9f: 53 push %ebx +80103fa0: 83 ec 04 sub $0x4,%esp +80103fa3: 8b 5d 08 mov 0x8(%ebp),%ebx struct proc *curproc = myproc(); -80104168: e8 7d f2 ff ff call 801033ea +80103fa6: e8 05 f3 ff ff call 801032b0 if(addr >= curproc->sz || addr+4 > curproc->sz) -8010416d: 8b 00 mov (%eax),%eax -8010416f: 39 d8 cmp %ebx,%eax -80104171: 76 19 jbe 8010418c -80104173: 8d 53 04 lea 0x4(%ebx),%edx -80104176: 39 d0 cmp %edx,%eax -80104178: 72 19 jb 80104193 +80103fab: 8b 00 mov (%eax),%eax +80103fad: 39 d8 cmp %ebx,%eax +80103faf: 76 18 jbe 80103fc9 +80103fb1: 8d 53 04 lea 0x4(%ebx),%edx +80103fb4: 39 d0 cmp %edx,%eax +80103fb6: 72 18 jb 80103fd0 return -1; *ip = *(int*)(addr); -8010417a: 8b 13 mov (%ebx),%edx -8010417c: 8b 45 0c mov 0xc(%ebp),%eax -8010417f: 89 10 mov %edx,(%eax) +80103fb8: 8b 13 mov (%ebx),%edx +80103fba: 8b 45 0c mov 0xc(%ebp),%eax +80103fbd: 89 10 mov %edx,(%eax) return 0; -80104181: b8 00 00 00 00 mov $0x0,%eax +80103fbf: b8 00 00 00 00 mov $0x0,%eax } -80104186: 83 c4 04 add $0x4,%esp -80104189: 5b pop %ebx -8010418a: 5d pop %ebp -8010418b: c3 ret +80103fc4: 8b 5d fc mov -0x4(%ebp),%ebx +80103fc7: c9 leave +80103fc8: c3 ret return -1; -8010418c: b8 ff ff ff ff mov $0xffffffff,%eax -80104191: eb f3 jmp 80104186 -80104193: b8 ff ff ff ff mov $0xffffffff,%eax -80104198: eb ec jmp 80104186 +80103fc9: b8 ff ff ff ff mov $0xffffffff,%eax +80103fce: eb f4 jmp 80103fc4 +80103fd0: b8 ff ff ff ff mov $0xffffffff,%eax +80103fd5: eb ed jmp 80103fc4 -8010419a : +80103fd7 : // 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) { -8010419a: f3 0f 1e fb endbr32 -8010419e: 55 push %ebp -8010419f: 89 e5 mov %esp,%ebp -801041a1: 53 push %ebx -801041a2: 83 ec 04 sub $0x4,%esp -801041a5: 8b 5d 08 mov 0x8(%ebp),%ebx +80103fd7: 55 push %ebp +80103fd8: 89 e5 mov %esp,%ebp +80103fda: 53 push %ebx +80103fdb: 83 ec 04 sub $0x4,%esp +80103fde: 8b 5d 08 mov 0x8(%ebp),%ebx char *s, *ep; struct proc *curproc = myproc(); -801041a8: e8 3d f2 ff ff call 801033ea +80103fe1: e8 ca f2 ff ff call 801032b0 if(addr >= curproc->sz) -801041ad: 39 18 cmp %ebx,(%eax) -801041af: 76 28 jbe 801041d9 +80103fe6: 39 18 cmp %ebx,(%eax) +80103fe8: 76 27 jbe 80104011 return -1; *pp = (char*)addr; -801041b1: 8b 55 0c mov 0xc(%ebp),%edx -801041b4: 89 1a mov %ebx,(%edx) +80103fea: 8b 55 0c mov 0xc(%ebp),%edx +80103fed: 89 1a mov %ebx,(%edx) ep = (char*)curproc->sz; -801041b6: 8b 10 mov (%eax),%edx +80103fef: 8b 10 mov (%eax),%edx for(s = *pp; s < ep; s++){ -801041b8: 39 d3 cmp %edx,%ebx -801041ba: 73 24 jae 801041e0 -801041bc: 89 d8 mov %ebx,%eax +80103ff1: 39 d3 cmp %edx,%ebx +80103ff3: 73 23 jae 80104018 +80103ff5: 89 d8 mov %ebx,%eax if(*s == 0) -801041be: 80 38 00 cmpb $0x0,(%eax) -801041c1: 74 0e je 801041d1 +80103ff7: 80 38 00 cmpb $0x0,(%eax) +80103ffa: 74 0e je 8010400a for(s = *pp; s < ep; s++){ -801041c3: 83 c0 01 add $0x1,%eax -801041c6: 39 c2 cmp %eax,%edx -801041c8: 77 f4 ja 801041be +80103ffc: 83 c0 01 add $0x1,%eax +80103fff: 39 c2 cmp %eax,%edx +80104001: 77 f4 ja 80103ff7 return s - *pp; } return -1; -801041ca: b8 ff ff ff ff mov $0xffffffff,%eax -801041cf: eb 02 jmp 801041d3 +80104003: b8 ff ff ff ff mov $0xffffffff,%eax +80104008: eb 02 jmp 8010400c return s - *pp; -801041d1: 29 d8 sub %ebx,%eax +8010400a: 29 d8 sub %ebx,%eax } -801041d3: 83 c4 04 add $0x4,%esp -801041d6: 5b pop %ebx -801041d7: 5d pop %ebp -801041d8: c3 ret +8010400c: 8b 5d fc mov -0x4(%ebp),%ebx +8010400f: c9 leave +80104010: c3 ret return -1; -801041d9: b8 ff ff ff ff mov $0xffffffff,%eax -801041de: eb f3 jmp 801041d3 +80104011: b8 ff ff ff ff mov $0xffffffff,%eax +80104016: eb f4 jmp 8010400c return -1; -801041e0: b8 ff ff ff ff mov $0xffffffff,%eax -801041e5: eb ec jmp 801041d3 +80104018: b8 ff ff ff ff mov $0xffffffff,%eax +8010401d: eb ed jmp 8010400c -801041e7 : +8010401f : // Fetch the nth 32-bit system call argument. int argint(int n, int *ip) { -801041e7: f3 0f 1e fb endbr32 -801041eb: 55 push %ebp -801041ec: 89 e5 mov %esp,%ebp -801041ee: 83 ec 08 sub $0x8,%esp +8010401f: 55 push %ebp +80104020: 89 e5 mov %esp,%ebp +80104022: 83 ec 08 sub $0x8,%esp return fetchint((myproc()->tf->esp) + 4 + 4*n, ip); -801041f1: e8 f4 f1 ff ff call 801033ea -801041f6: 83 ec 08 sub $0x8,%esp -801041f9: ff 75 0c pushl 0xc(%ebp) -801041fc: 8b 40 18 mov 0x18(%eax),%eax -801041ff: 8b 40 44 mov 0x44(%eax),%eax -80104202: 8b 55 08 mov 0x8(%ebp),%edx -80104205: 8d 44 90 04 lea 0x4(%eax,%edx,4),%eax -80104209: 50 push %eax -8010420a: e8 4b ff ff ff call 8010415a -} -8010420f: c9 leave -80104210: c3 ret - -80104211 : +80104025: e8 86 f2 ff ff call 801032b0 +8010402a: 83 ec 08 sub $0x8,%esp +8010402d: ff 75 0c push 0xc(%ebp) +80104030: 8b 40 18 mov 0x18(%eax),%eax +80104033: 8b 40 44 mov 0x44(%eax),%eax +80104036: 8b 55 08 mov 0x8(%ebp),%edx +80104039: 8d 44 90 04 lea 0x4(%eax,%edx,4),%eax +8010403d: 50 push %eax +8010403e: e8 59 ff ff ff call 80103f9c +} +80104043: c9 leave +80104044: c3 ret + +80104045 : // 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) { -80104211: f3 0f 1e fb endbr32 -80104215: 55 push %ebp -80104216: 89 e5 mov %esp,%ebp -80104218: 56 push %esi -80104219: 53 push %ebx -8010421a: 83 ec 10 sub $0x10,%esp -8010421d: 8b 5d 10 mov 0x10(%ebp),%ebx +80104045: 55 push %ebp +80104046: 89 e5 mov %esp,%ebp +80104048: 56 push %esi +80104049: 53 push %ebx +8010404a: 83 ec 10 sub $0x10,%esp +8010404d: 8b 5d 10 mov 0x10(%ebp),%ebx int i; struct proc *curproc = myproc(); -80104220: e8 c5 f1 ff ff call 801033ea -80104225: 89 c6 mov %eax,%esi +80104050: e8 5b f2 ff ff call 801032b0 +80104055: 89 c6 mov %eax,%esi if(argint(n, &i) < 0) -80104227: 83 ec 08 sub $0x8,%esp -8010422a: 8d 45 f4 lea -0xc(%ebp),%eax -8010422d: 50 push %eax -8010422e: ff 75 08 pushl 0x8(%ebp) -80104231: e8 b1 ff ff ff call 801041e7 +80104057: 83 ec 08 sub $0x8,%esp +8010405a: 8d 45 f4 lea -0xc(%ebp),%eax +8010405d: 50 push %eax +8010405e: ff 75 08 push 0x8(%ebp) +80104061: e8 b9 ff ff ff call 8010401f return -1; if(size < 0 || (uint)i >= curproc->sz || (uint)i+size > curproc->sz) -80104236: 83 c4 10 add $0x10,%esp -80104239: 85 db test %ebx,%ebx -8010423b: 78 24 js 80104261 -8010423d: 85 c0 test %eax,%eax -8010423f: 78 20 js 80104261 -80104241: 8b 16 mov (%esi),%edx -80104243: 8b 45 f4 mov -0xc(%ebp),%eax -80104246: 39 c2 cmp %eax,%edx -80104248: 76 1e jbe 80104268 -8010424a: 01 c3 add %eax,%ebx -8010424c: 39 da cmp %ebx,%edx -8010424e: 72 1f jb 8010426f +80104066: 83 c4 10 add $0x10,%esp +80104069: 09 d8 or %ebx,%eax +8010406b: 78 20 js 8010408d +8010406d: 8b 16 mov (%esi),%edx +8010406f: 8b 45 f4 mov -0xc(%ebp),%eax +80104072: 39 c2 cmp %eax,%edx +80104074: 76 1e jbe 80104094 +80104076: 01 c3 add %eax,%ebx +80104078: 39 da cmp %ebx,%edx +8010407a: 72 1f jb 8010409b return -1; *pp = (char*)i; -80104250: 8b 55 0c mov 0xc(%ebp),%edx -80104253: 89 02 mov %eax,(%edx) +8010407c: 8b 55 0c mov 0xc(%ebp),%edx +8010407f: 89 02 mov %eax,(%edx) return 0; -80104255: b8 00 00 00 00 mov $0x0,%eax +80104081: b8 00 00 00 00 mov $0x0,%eax } -8010425a: 8d 65 f8 lea -0x8(%ebp),%esp -8010425d: 5b pop %ebx -8010425e: 5e pop %esi -8010425f: 5d pop %ebp -80104260: c3 ret +80104086: 8d 65 f8 lea -0x8(%ebp),%esp +80104089: 5b pop %ebx +8010408a: 5e pop %esi +8010408b: 5d pop %ebp +8010408c: c3 ret return -1; -80104261: b8 ff ff ff ff mov $0xffffffff,%eax -80104266: eb f2 jmp 8010425a -80104268: b8 ff ff ff ff mov $0xffffffff,%eax -8010426d: eb eb jmp 8010425a -8010426f: b8 ff ff ff ff mov $0xffffffff,%eax -80104274: eb e4 jmp 8010425a - -80104276 : +8010408d: b8 ff ff ff ff mov $0xffffffff,%eax +80104092: eb f2 jmp 80104086 +80104094: b8 ff ff ff ff mov $0xffffffff,%eax +80104099: eb eb jmp 80104086 +8010409b: b8 ff ff ff ff mov $0xffffffff,%eax +801040a0: eb e4 jmp 80104086 + +801040a2 : // 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) { -80104276: f3 0f 1e fb endbr32 -8010427a: 55 push %ebp -8010427b: 89 e5 mov %esp,%ebp -8010427d: 83 ec 20 sub $0x20,%esp +801040a2: 55 push %ebp +801040a3: 89 e5 mov %esp,%ebp +801040a5: 83 ec 20 sub $0x20,%esp int addr; if(argint(n, &addr) < 0) -80104280: 8d 45 f4 lea -0xc(%ebp),%eax -80104283: 50 push %eax -80104284: ff 75 08 pushl 0x8(%ebp) -80104287: e8 5b ff ff ff call 801041e7 -8010428c: 83 c4 10 add $0x10,%esp -8010428f: 85 c0 test %eax,%eax -80104291: 78 13 js 801042a6 +801040a8: 8d 45 f4 lea -0xc(%ebp),%eax +801040ab: 50 push %eax +801040ac: ff 75 08 push 0x8(%ebp) +801040af: e8 6b ff ff ff call 8010401f +801040b4: 83 c4 10 add $0x10,%esp +801040b7: 85 c0 test %eax,%eax +801040b9: 78 13 js 801040ce return -1; return fetchstr(addr, pp); -80104293: 83 ec 08 sub $0x8,%esp -80104296: ff 75 0c pushl 0xc(%ebp) -80104299: ff 75 f4 pushl -0xc(%ebp) -8010429c: e8 f9 fe ff ff call 8010419a -801042a1: 83 c4 10 add $0x10,%esp -} -801042a4: c9 leave -801042a5: c3 ret +801040bb: 83 ec 08 sub $0x8,%esp +801040be: ff 75 0c push 0xc(%ebp) +801040c1: ff 75 f4 push -0xc(%ebp) +801040c4: e8 0e ff ff ff call 80103fd7 +801040c9: 83 c4 10 add $0x10,%esp +} +801040cc: c9 leave +801040cd: c3 ret return -1; -801042a6: b8 ff ff ff ff mov $0xffffffff,%eax -801042ab: eb f7 jmp 801042a4 +801040ce: b8 ff ff ff ff mov $0xffffffff,%eax +801040d3: eb f7 jmp 801040cc -801042ad : +801040d5 : [SYS_ps] sys_ps, }; void syscall(void) { -801042ad: f3 0f 1e fb endbr32 -801042b1: 55 push %ebp -801042b2: 89 e5 mov %esp,%ebp -801042b4: 53 push %ebx -801042b5: 83 ec 04 sub $0x4,%esp +801040d5: 55 push %ebp +801040d6: 89 e5 mov %esp,%ebp +801040d8: 53 push %ebx +801040d9: 83 ec 04 sub $0x4,%esp int num; struct proc *curproc = myproc(); -801042b8: e8 2d f1 ff ff call 801033ea -801042bd: 89 c3 mov %eax,%ebx +801040dc: e8 cf f1 ff ff call 801032b0 +801040e1: 89 c3 mov %eax,%ebx num = curproc->tf->eax; -801042bf: 8b 40 18 mov 0x18(%eax),%eax -801042c2: 8b 40 1c mov 0x1c(%eax),%eax +801040e3: 8b 40 18 mov 0x18(%eax),%eax +801040e6: 8b 40 1c mov 0x1c(%eax),%eax if(num > 0 && num < NELEM(syscalls) && syscalls[num]) { -801042c5: 8d 50 ff lea -0x1(%eax),%edx -801042c8: 83 fa 16 cmp $0x16,%edx -801042cb: 77 17 ja 801042e4 -801042cd: 8b 14 85 80 7f 10 80 mov -0x7fef8080(,%eax,4),%edx -801042d4: 85 d2 test %edx,%edx -801042d6: 74 0c je 801042e4 +801040e9: 8d 50 ff lea -0x1(%eax),%edx +801040ec: 83 fa 16 cmp $0x16,%edx +801040ef: 77 17 ja 80104108 +801040f1: 8b 14 85 a0 7c 10 80 mov -0x7fef8360(,%eax,4),%edx +801040f8: 85 d2 test %edx,%edx +801040fa: 74 0c je 80104108 curproc->tf->eax = syscalls[num](); -801042d8: ff d2 call *%edx -801042da: 89 c2 mov %eax,%edx -801042dc: 8b 43 18 mov 0x18(%ebx),%eax -801042df: 89 50 1c mov %edx,0x1c(%eax) -801042e2: eb 1f jmp 80104303 +801040fc: ff d2 call *%edx +801040fe: 89 c2 mov %eax,%edx +80104100: 8b 43 18 mov 0x18(%ebx),%eax +80104103: 89 50 1c mov %edx,0x1c(%eax) +80104106: eb 1f jmp 80104127 } else { cprintf("%d %s: unknown sys call %d\n", -801042e4: 50 push %eax +80104108: 50 push %eax curproc->pid, curproc->name, num); -801042e5: 8d 43 6c lea 0x6c(%ebx),%eax +80104109: 8d 43 6c lea 0x6c(%ebx),%eax cprintf("%d %s: unknown sys call %d\n", -801042e8: 50 push %eax -801042e9: ff 73 10 pushl 0x10(%ebx) -801042ec: 68 4d 7f 10 80 push $0x80107f4d -801042f1: e8 36 c3 ff ff call 8010062c +8010410c: 50 push %eax +8010410d: ff 73 10 push 0x10(%ebx) +80104110: 68 6d 7c 10 80 push $0x80107c6d +80104115: e8 e7 c4 ff ff call 80100601 curproc->tf->eax = -1; -801042f6: 8b 43 18 mov 0x18(%ebx),%eax -801042f9: c7 40 1c ff ff ff ff movl $0xffffffff,0x1c(%eax) -80104300: 83 c4 10 add $0x10,%esp +8010411a: 8b 43 18 mov 0x18(%ebx),%eax +8010411d: c7 40 1c ff ff ff ff movl $0xffffffff,0x1c(%eax) +80104124: 83 c4 10 add $0x10,%esp } } -80104303: 8b 5d fc mov -0x4(%ebp),%ebx -80104306: c9 leave -80104307: c3 ret +80104127: 8b 5d fc mov -0x4(%ebp),%ebx +8010412a: c9 leave +8010412b: c3 ret -80104308 : +8010412c : // Fetch the nth word-sized system call argument as a file descriptor // and return both the descriptor and the corresponding struct file. static int argfd(int n, int *pfd, struct file **pf) { -80104308: 55 push %ebp -80104309: 89 e5 mov %esp,%ebp -8010430b: 56 push %esi -8010430c: 53 push %ebx -8010430d: 83 ec 18 sub $0x18,%esp -80104310: 89 d6 mov %edx,%esi -80104312: 89 cb mov %ecx,%ebx +8010412c: 55 push %ebp +8010412d: 89 e5 mov %esp,%ebp +8010412f: 56 push %esi +80104130: 53 push %ebx +80104131: 83 ec 18 sub $0x18,%esp +80104134: 89 d6 mov %edx,%esi +80104136: 89 cb mov %ecx,%ebx int fd; struct file *f; if(argint(n, &fd) < 0) -80104314: 8d 55 f4 lea -0xc(%ebp),%edx -80104317: 52 push %edx -80104318: 50 push %eax -80104319: e8 c9 fe ff ff call 801041e7 -8010431e: 83 c4 10 add $0x10,%esp -80104321: 85 c0 test %eax,%eax -80104323: 78 30 js 80104355 +80104138: 8d 55 f4 lea -0xc(%ebp),%edx +8010413b: 52 push %edx +8010413c: 50 push %eax +8010413d: e8 dd fe ff ff call 8010401f +80104142: 83 c4 10 add $0x10,%esp +80104145: 85 c0 test %eax,%eax +80104147: 78 30 js 80104179 return -1; if(fd < 0 || fd >= NOFILE || (f=myproc()->ofile[fd]) == 0) -80104325: 83 7d f4 0f cmpl $0xf,-0xc(%ebp) -80104329: 77 31 ja 8010435c -8010432b: e8 ba f0 ff ff call 801033ea -80104330: 89 c2 mov %eax,%edx -80104332: 8b 45 f4 mov -0xc(%ebp),%eax -80104335: 8b 54 82 28 mov 0x28(%edx,%eax,4),%edx -80104339: 85 d2 test %edx,%edx -8010433b: 74 26 je 80104363 +80104149: 83 7d f4 0f cmpl $0xf,-0xc(%ebp) +8010414d: 77 31 ja 80104180 +8010414f: e8 5c f1 ff ff call 801032b0 +80104154: 89 c2 mov %eax,%edx +80104156: 8b 45 f4 mov -0xc(%ebp),%eax +80104159: 8b 54 82 28 mov 0x28(%edx,%eax,4),%edx +8010415d: 85 d2 test %edx,%edx +8010415f: 74 26 je 80104187 return -1; if(pfd) -8010433d: 85 f6 test %esi,%esi -8010433f: 74 02 je 80104343 +80104161: 85 f6 test %esi,%esi +80104163: 74 02 je 80104167 *pfd = fd; -80104341: 89 06 mov %eax,(%esi) +80104165: 89 06 mov %eax,(%esi) if(pf) *pf = f; return 0; -80104343: b8 00 00 00 00 mov $0x0,%eax +80104167: b8 00 00 00 00 mov $0x0,%eax if(pf) -80104348: 85 db test %ebx,%ebx -8010434a: 74 02 je 8010434e +8010416c: 85 db test %ebx,%ebx +8010416e: 74 02 je 80104172 *pf = f; -8010434c: 89 13 mov %edx,(%ebx) +80104170: 89 13 mov %edx,(%ebx) } -8010434e: 8d 65 f8 lea -0x8(%ebp),%esp -80104351: 5b pop %ebx -80104352: 5e pop %esi -80104353: 5d pop %ebp -80104354: c3 ret +80104172: 8d 65 f8 lea -0x8(%ebp),%esp +80104175: 5b pop %ebx +80104176: 5e pop %esi +80104177: 5d pop %ebp +80104178: c3 ret return -1; -80104355: b8 ff ff ff ff mov $0xffffffff,%eax -8010435a: eb f2 jmp 8010434e +80104179: b8 ff ff ff ff mov $0xffffffff,%eax +8010417e: eb f2 jmp 80104172 return -1; -8010435c: b8 ff ff ff ff mov $0xffffffff,%eax -80104361: eb eb jmp 8010434e -80104363: b8 ff ff ff ff mov $0xffffffff,%eax -80104368: eb e4 jmp 8010434e +80104180: b8 ff ff ff ff mov $0xffffffff,%eax +80104185: eb eb jmp 80104172 +80104187: b8 ff ff ff ff mov $0xffffffff,%eax +8010418c: eb e4 jmp 80104172 -8010436a : +8010418e : // Allocate a file descriptor for the given file. // Takes over file reference from caller on success. static int fdalloc(struct file *f) { -8010436a: 55 push %ebp -8010436b: 89 e5 mov %esp,%ebp -8010436d: 53 push %ebx -8010436e: 83 ec 04 sub $0x4,%esp -80104371: 89 c3 mov %eax,%ebx +8010418e: 55 push %ebp +8010418f: 89 e5 mov %esp,%ebp +80104191: 53 push %ebx +80104192: 83 ec 04 sub $0x4,%esp +80104195: 89 c3 mov %eax,%ebx int fd; struct proc *curproc = myproc(); -80104373: e8 72 f0 ff ff call 801033ea -80104378: 89 c2 mov %eax,%edx +80104197: e8 14 f1 ff ff call 801032b0 +8010419c: 89 c2 mov %eax,%edx for(fd = 0; fd < NOFILE; fd++){ -8010437a: b8 00 00 00 00 mov $0x0,%eax +8010419e: b8 00 00 00 00 mov $0x0,%eax if(curproc->ofile[fd] == 0){ -8010437f: 83 7c 82 28 00 cmpl $0x0,0x28(%edx,%eax,4) -80104384: 74 13 je 80104399 +801041a3: 83 7c 82 28 00 cmpl $0x0,0x28(%edx,%eax,4) +801041a8: 74 12 je 801041bc for(fd = 0; fd < NOFILE; fd++){ -80104386: 83 c0 01 add $0x1,%eax -80104389: 83 f8 10 cmp $0x10,%eax -8010438c: 75 f1 jne 8010437f +801041aa: 83 c0 01 add $0x1,%eax +801041ad: 83 f8 10 cmp $0x10,%eax +801041b0: 75 f1 jne 801041a3 curproc->ofile[fd] = f; return fd; } } return -1; -8010438e: b8 ff ff ff ff mov $0xffffffff,%eax +801041b2: b8 ff ff ff ff mov $0xffffffff,%eax } -80104393: 83 c4 04 add $0x4,%esp -80104396: 5b pop %ebx -80104397: 5d pop %ebp -80104398: c3 ret +801041b7: 8b 5d fc mov -0x4(%ebp),%ebx +801041ba: c9 leave +801041bb: c3 ret curproc->ofile[fd] = f; -80104399: 89 5c 82 28 mov %ebx,0x28(%edx,%eax,4) +801041bc: 89 5c 82 28 mov %ebx,0x28(%edx,%eax,4) return fd; -8010439d: eb f4 jmp 80104393 +801041c0: eb f5 jmp 801041b7 -8010439f : +801041c2 : return -1; } static struct inode* create(char *path, short type, short major, short minor) { -8010439f: 55 push %ebp -801043a0: 89 e5 mov %esp,%ebp -801043a2: 57 push %edi -801043a3: 56 push %esi -801043a4: 53 push %ebx -801043a5: 83 ec 34 sub $0x34,%esp -801043a8: 89 55 d4 mov %edx,-0x2c(%ebp) -801043ab: 89 4d d0 mov %ecx,-0x30(%ebp) -801043ae: 8b 7d 08 mov 0x8(%ebp),%edi +801041c2: 55 push %ebp +801041c3: 89 e5 mov %esp,%ebp +801041c5: 57 push %edi +801041c6: 56 push %esi +801041c7: 53 push %ebx +801041c8: 83 ec 34 sub $0x34,%esp +801041cb: 89 55 d4 mov %edx,-0x2c(%ebp) +801041ce: 89 4d d0 mov %ecx,-0x30(%ebp) +801041d1: 8b 7d 08 mov 0x8(%ebp),%edi struct inode *ip, *dp; char name[DIRSIZ]; if((dp = nameiparent(path, name)) == 0) -801043b1: 8d 55 da lea -0x26(%ebp),%edx -801043b4: 52 push %edx -801043b5: 50 push %eax -801043b6: e8 45 d9 ff ff call 80101d00 -801043bb: 89 c6 mov %eax,%esi -801043bd: 83 c4 10 add $0x10,%esp -801043c0: 85 c0 test %eax,%eax -801043c2: 0f 84 2d 01 00 00 je 801044f5 +801041d4: 8d 55 da lea -0x26(%ebp),%edx +801041d7: 52 push %edx +801041d8: 50 push %eax +801041d9: e8 7b da ff ff call 80101c59 +801041de: 89 c6 mov %eax,%esi +801041e0: 83 c4 10 add $0x10,%esp +801041e3: 85 c0 test %eax,%eax +801041e5: 0f 84 2d 01 00 00 je 80104318 return 0; ilock(dp); -801043c8: 83 ec 0c sub $0xc,%esp -801043cb: 50 push %eax -801043cc: e8 5b d1 ff ff call 8010152c +801041eb: 83 ec 0c sub $0xc,%esp +801041ee: 50 push %eax +801041ef: e8 bf d2 ff ff call 801014b3 if((ip = dirlookup(dp, name, 0)) != 0){ -801043d1: 83 c4 0c add $0xc,%esp -801043d4: 6a 00 push $0x0 -801043d6: 8d 45 da lea -0x26(%ebp),%eax -801043d9: 50 push %eax -801043da: 56 push %esi -801043db: e8 34 d6 ff ff call 80101a14 -801043e0: 89 c3 mov %eax,%ebx -801043e2: 83 c4 10 add $0x10,%esp -801043e5: 85 c0 test %eax,%eax -801043e7: 74 3d je 80104426 +801041f4: 83 c4 0c add $0xc,%esp +801041f7: 6a 00 push $0x0 +801041f9: 8d 45 da lea -0x26(%ebp),%eax +801041fc: 50 push %eax +801041fd: 56 push %esi +801041fe: e8 76 d7 ff ff call 80101979 +80104203: 89 c3 mov %eax,%ebx +80104205: 83 c4 10 add $0x10,%esp +80104208: 85 c0 test %eax,%eax +8010420a: 74 3d je 80104249 iunlockput(dp); -801043e9: 83 ec 0c sub $0xc,%esp -801043ec: 56 push %esi -801043ed: e8 8f d3 ff ff call 80101781 +8010420c: 83 ec 0c sub $0xc,%esp +8010420f: 56 push %esi +80104210: e8 e7 d4 ff ff call 801016fc ilock(ip); -801043f2: 89 1c 24 mov %ebx,(%esp) -801043f5: e8 32 d1 ff ff call 8010152c +80104215: 89 1c 24 mov %ebx,(%esp) +80104218: e8 96 d2 ff ff call 801014b3 if(type == T_FILE && ip->type == T_FILE) -801043fa: 83 c4 10 add $0x10,%esp -801043fd: 66 83 7d d4 02 cmpw $0x2,-0x2c(%ebp) -80104402: 75 07 jne 8010440b -80104404: 66 83 7b 50 02 cmpw $0x2,0x50(%ebx) -80104409: 74 11 je 8010441c +8010421d: 83 c4 10 add $0x10,%esp +80104220: 66 83 7d d4 02 cmpw $0x2,-0x2c(%ebp) +80104225: 75 07 jne 8010422e +80104227: 66 83 7b 50 02 cmpw $0x2,0x50(%ebx) +8010422c: 74 11 je 8010423f return ip; iunlockput(ip); -8010440b: 83 ec 0c sub $0xc,%esp -8010440e: 53 push %ebx -8010440f: e8 6d d3 ff ff call 80101781 +8010422e: 83 ec 0c sub $0xc,%esp +80104231: 53 push %ebx +80104232: e8 c5 d4 ff ff call 801016fc return 0; -80104414: 83 c4 10 add $0x10,%esp -80104417: bb 00 00 00 00 mov $0x0,%ebx +80104237: 83 c4 10 add $0x10,%esp +8010423a: bb 00 00 00 00 mov $0x0,%ebx panic("create: dirlink"); iunlockput(dp); return ip; } -8010441c: 89 d8 mov %ebx,%eax -8010441e: 8d 65 f4 lea -0xc(%ebp),%esp -80104421: 5b pop %ebx -80104422: 5e pop %esi -80104423: 5f pop %edi -80104424: 5d pop %ebp -80104425: c3 ret +8010423f: 89 d8 mov %ebx,%eax +80104241: 8d 65 f4 lea -0xc(%ebp),%esp +80104244: 5b pop %ebx +80104245: 5e pop %esi +80104246: 5f pop %edi +80104247: 5d pop %ebp +80104248: c3 ret if((ip = ialloc(dp->dev, type)) == 0) -80104426: 83 ec 08 sub $0x8,%esp -80104429: 0f bf 45 d4 movswl -0x2c(%ebp),%eax -8010442d: 50 push %eax -8010442e: ff 36 pushl (%esi) -80104430: e8 98 cf ff ff call 801013cd -80104435: 89 c3 mov %eax,%ebx -80104437: 83 c4 10 add $0x10,%esp -8010443a: 85 c0 test %eax,%eax -8010443c: 74 52 je 80104490 +80104249: 83 ec 08 sub $0x8,%esp +8010424c: 0f bf 45 d4 movswl -0x2c(%ebp),%eax +80104250: 50 push %eax +80104251: ff 36 push (%esi) +80104253: e8 08 d1 ff ff call 80101360 +80104258: 89 c3 mov %eax,%ebx +8010425a: 83 c4 10 add $0x10,%esp +8010425d: 85 c0 test %eax,%eax +8010425f: 74 52 je 801042b3 ilock(ip); -8010443e: 83 ec 0c sub $0xc,%esp -80104441: 50 push %eax -80104442: e8 e5 d0 ff ff call 8010152c +80104261: 83 ec 0c sub $0xc,%esp +80104264: 50 push %eax +80104265: e8 49 d2 ff ff call 801014b3 ip->major = major; -80104447: 0f b7 45 d0 movzwl -0x30(%ebp),%eax -8010444b: 66 89 43 52 mov %ax,0x52(%ebx) +8010426a: 0f b7 45 d0 movzwl -0x30(%ebp),%eax +8010426e: 66 89 43 52 mov %ax,0x52(%ebx) ip->minor = minor; -8010444f: 66 89 7b 54 mov %di,0x54(%ebx) +80104272: 66 89 7b 54 mov %di,0x54(%ebx) ip->nlink = 1; -80104453: 66 c7 43 56 01 00 movw $0x1,0x56(%ebx) +80104276: 66 c7 43 56 01 00 movw $0x1,0x56(%ebx) iupdate(ip); -80104459: 89 1c 24 mov %ebx,(%esp) -8010445c: e8 19 d0 ff ff call 8010147a +8010427c: 89 1c 24 mov %ebx,(%esp) +8010427f: e8 85 d1 ff ff call 80101409 if(type == T_DIR){ // Create . and .. entries. -80104461: 83 c4 10 add $0x10,%esp -80104464: 66 83 7d d4 01 cmpw $0x1,-0x2c(%ebp) -80104469: 74 32 je 8010449d +80104284: 83 c4 10 add $0x10,%esp +80104287: 66 83 7d d4 01 cmpw $0x1,-0x2c(%ebp) +8010428c: 74 32 je 801042c0 if(dirlink(dp, name, ip->inum) < 0) -8010446b: 83 ec 04 sub $0x4,%esp -8010446e: ff 73 04 pushl 0x4(%ebx) -80104471: 8d 45 da lea -0x26(%ebp),%eax -80104474: 50 push %eax -80104475: 56 push %esi -80104476: e8 b0 d7 ff ff call 80101c2b -8010447b: 83 c4 10 add $0x10,%esp -8010447e: 85 c0 test %eax,%eax -80104480: 78 66 js 801044e8 +8010428e: 83 ec 04 sub $0x4,%esp +80104291: ff 73 04 push 0x4(%ebx) +80104294: 8d 45 da lea -0x26(%ebp),%eax +80104297: 50 push %eax +80104298: 56 push %esi +80104299: e8 ee d8 ff ff call 80101b8c +8010429e: 83 c4 10 add $0x10,%esp +801042a1: 85 c0 test %eax,%eax +801042a3: 78 66 js 8010430b iunlockput(dp); -80104482: 83 ec 0c sub $0xc,%esp -80104485: 56 push %esi -80104486: e8 f6 d2 ff ff call 80101781 +801042a5: 83 ec 0c sub $0xc,%esp +801042a8: 56 push %esi +801042a9: e8 4e d4 ff ff call 801016fc return ip; -8010448b: 83 c4 10 add $0x10,%esp -8010448e: eb 8c jmp 8010441c +801042ae: 83 c4 10 add $0x10,%esp +801042b1: eb 8c jmp 8010423f panic("create: ialloc"); -80104490: 83 ec 0c sub $0xc,%esp -80104493: 68 e0 7f 10 80 push $0x80107fe0 -80104498: e8 bb be ff ff call 80100358 +801042b3: 83 ec 0c sub $0xc,%esp +801042b6: 68 00 7d 10 80 push $0x80107d00 +801042bb: e8 80 c0 ff ff call 80100340 dp->nlink++; // for ".." -8010449d: 66 83 46 56 01 addw $0x1,0x56(%esi) +801042c0: 66 83 46 56 01 addw $0x1,0x56(%esi) iupdate(dp); -801044a2: 83 ec 0c sub $0xc,%esp -801044a5: 56 push %esi -801044a6: e8 cf cf ff ff call 8010147a +801042c5: 83 ec 0c sub $0xc,%esp +801042c8: 56 push %esi +801042c9: e8 3b d1 ff ff call 80101409 if(dirlink(ip, ".", ip->inum) < 0 || dirlink(ip, "..", dp->inum) < 0) -801044ab: 83 c4 0c add $0xc,%esp -801044ae: ff 73 04 pushl 0x4(%ebx) -801044b1: 68 f0 7f 10 80 push $0x80107ff0 -801044b6: 53 push %ebx -801044b7: e8 6f d7 ff ff call 80101c2b -801044bc: 83 c4 10 add $0x10,%esp -801044bf: 85 c0 test %eax,%eax -801044c1: 78 18 js 801044db -801044c3: 83 ec 04 sub $0x4,%esp -801044c6: ff 76 04 pushl 0x4(%esi) -801044c9: 68 ef 7f 10 80 push $0x80107fef -801044ce: 53 push %ebx -801044cf: e8 57 d7 ff ff call 80101c2b -801044d4: 83 c4 10 add $0x10,%esp -801044d7: 85 c0 test %eax,%eax -801044d9: 79 90 jns 8010446b +801042ce: 83 c4 0c add $0xc,%esp +801042d1: ff 73 04 push 0x4(%ebx) +801042d4: 68 10 7d 10 80 push $0x80107d10 +801042d9: 53 push %ebx +801042da: e8 ad d8 ff ff call 80101b8c +801042df: 83 c4 10 add $0x10,%esp +801042e2: 85 c0 test %eax,%eax +801042e4: 78 18 js 801042fe +801042e6: 83 ec 04 sub $0x4,%esp +801042e9: ff 76 04 push 0x4(%esi) +801042ec: 68 0f 7d 10 80 push $0x80107d0f +801042f1: 53 push %ebx +801042f2: e8 95 d8 ff ff call 80101b8c +801042f7: 83 c4 10 add $0x10,%esp +801042fa: 85 c0 test %eax,%eax +801042fc: 79 90 jns 8010428e panic("create dots"); -801044db: 83 ec 0c sub $0xc,%esp -801044de: 68 f2 7f 10 80 push $0x80107ff2 -801044e3: e8 70 be ff ff call 80100358 +801042fe: 83 ec 0c sub $0xc,%esp +80104301: 68 12 7d 10 80 push $0x80107d12 +80104306: e8 35 c0 ff ff call 80100340 panic("create: dirlink"); -801044e8: 83 ec 0c sub $0xc,%esp -801044eb: 68 fe 7f 10 80 push $0x80107ffe -801044f0: e8 63 be ff ff call 80100358 +8010430b: 83 ec 0c sub $0xc,%esp +8010430e: 68 1e 7d 10 80 push $0x80107d1e +80104313: e8 28 c0 ff ff call 80100340 return 0; -801044f5: 89 c3 mov %eax,%ebx -801044f7: e9 20 ff ff ff jmp 8010441c +80104318: 89 c3 mov %eax,%ebx +8010431a: e9 20 ff ff ff jmp 8010423f -801044fc : +8010431f : { -801044fc: f3 0f 1e fb endbr32 -80104500: 55 push %ebp -80104501: 89 e5 mov %esp,%ebp -80104503: 53 push %ebx -80104504: 83 ec 14 sub $0x14,%esp +8010431f: 55 push %ebp +80104320: 89 e5 mov %esp,%ebp +80104322: 56 push %esi +80104323: 53 push %ebx +80104324: 83 ec 10 sub $0x10,%esp if(argfd(0, 0, &f) < 0) -80104507: 8d 4d f4 lea -0xc(%ebp),%ecx -8010450a: ba 00 00 00 00 mov $0x0,%edx -8010450f: b8 00 00 00 00 mov $0x0,%eax -80104514: e8 ef fd ff ff call 80104308 -80104519: 85 c0 test %eax,%eax -8010451b: 78 23 js 80104540 +80104327: 8d 4d f4 lea -0xc(%ebp),%ecx +8010432a: ba 00 00 00 00 mov $0x0,%edx +8010432f: b8 00 00 00 00 mov $0x0,%eax +80104334: e8 f3 fd ff ff call 8010412c +80104339: 85 c0 test %eax,%eax +8010433b: 78 25 js 80104362 if((fd=fdalloc(f)) < 0) -8010451d: 8b 45 f4 mov -0xc(%ebp),%eax -80104520: e8 45 fe ff ff call 8010436a -80104525: 89 c3 mov %eax,%ebx -80104527: 85 c0 test %eax,%eax -80104529: 78 1c js 80104547 +8010433d: 8b 75 f4 mov -0xc(%ebp),%esi +80104340: 89 f0 mov %esi,%eax +80104342: e8 47 fe ff ff call 8010418e +80104347: 89 c3 mov %eax,%ebx +80104349: 85 c0 test %eax,%eax +8010434b: 78 1c js 80104369 filedup(f); -8010452b: 83 ec 0c sub $0xc,%esp -8010452e: ff 75 f4 pushl -0xc(%ebp) -80104531: e8 02 c8 ff ff call 80100d38 +8010434d: 83 ec 0c sub $0xc,%esp +80104350: 56 push %esi +80104351: e8 9e c9 ff ff call 80100cf4 return fd; -80104536: 83 c4 10 add $0x10,%esp -} -80104539: 89 d8 mov %ebx,%eax -8010453b: 8b 5d fc mov -0x4(%ebp),%ebx -8010453e: c9 leave -8010453f: c3 ret +80104356: 83 c4 10 add $0x10,%esp +} +80104359: 89 d8 mov %ebx,%eax +8010435b: 8d 65 f8 lea -0x8(%ebp),%esp +8010435e: 5b pop %ebx +8010435f: 5e pop %esi +80104360: 5d pop %ebp +80104361: c3 ret return -1; -80104540: bb ff ff ff ff mov $0xffffffff,%ebx -80104545: eb f2 jmp 80104539 +80104362: bb ff ff ff ff mov $0xffffffff,%ebx +80104367: eb f0 jmp 80104359 return -1; -80104547: bb ff ff ff ff mov $0xffffffff,%ebx -8010454c: eb eb jmp 80104539 +80104369: bb ff ff ff ff mov $0xffffffff,%ebx +8010436e: eb e9 jmp 80104359 -8010454e : +80104370 : { -8010454e: f3 0f 1e fb endbr32 -80104552: 55 push %ebp -80104553: 89 e5 mov %esp,%ebp -80104555: 83 ec 18 sub $0x18,%esp +80104370: 55 push %ebp +80104371: 89 e5 mov %esp,%ebp +80104373: 83 ec 18 sub $0x18,%esp if(argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argptr(1, &p, n) < 0) -80104558: 8d 4d f4 lea -0xc(%ebp),%ecx -8010455b: ba 00 00 00 00 mov $0x0,%edx -80104560: b8 00 00 00 00 mov $0x0,%eax -80104565: e8 9e fd ff ff call 80104308 -8010456a: 85 c0 test %eax,%eax -8010456c: 78 43 js 801045b1 -8010456e: 83 ec 08 sub $0x8,%esp -80104571: 8d 45 f0 lea -0x10(%ebp),%eax -80104574: 50 push %eax -80104575: 6a 02 push $0x2 -80104577: e8 6b fc ff ff call 801041e7 -8010457c: 83 c4 10 add $0x10,%esp -8010457f: 85 c0 test %eax,%eax -80104581: 78 35 js 801045b8 -80104583: 83 ec 04 sub $0x4,%esp -80104586: ff 75 f0 pushl -0x10(%ebp) -80104589: 8d 45 ec lea -0x14(%ebp),%eax -8010458c: 50 push %eax -8010458d: 6a 01 push $0x1 -8010458f: e8 7d fc ff ff call 80104211 -80104594: 83 c4 10 add $0x10,%esp -80104597: 85 c0 test %eax,%eax -80104599: 78 24 js 801045bf +80104376: 8d 4d f4 lea -0xc(%ebp),%ecx +80104379: ba 00 00 00 00 mov $0x0,%edx +8010437e: b8 00 00 00 00 mov $0x0,%eax +80104383: e8 a4 fd ff ff call 8010412c +80104388: 85 c0 test %eax,%eax +8010438a: 78 43 js 801043cf +8010438c: 83 ec 08 sub $0x8,%esp +8010438f: 8d 45 f0 lea -0x10(%ebp),%eax +80104392: 50 push %eax +80104393: 6a 02 push $0x2 +80104395: e8 85 fc ff ff call 8010401f +8010439a: 83 c4 10 add $0x10,%esp +8010439d: 85 c0 test %eax,%eax +8010439f: 78 35 js 801043d6 +801043a1: 83 ec 04 sub $0x4,%esp +801043a4: ff 75 f0 push -0x10(%ebp) +801043a7: 8d 45 ec lea -0x14(%ebp),%eax +801043aa: 50 push %eax +801043ab: 6a 01 push $0x1 +801043ad: e8 93 fc ff ff call 80104045 +801043b2: 83 c4 10 add $0x10,%esp +801043b5: 85 c0 test %eax,%eax +801043b7: 78 24 js 801043dd return fileread(f, p, n); -8010459b: 83 ec 04 sub $0x4,%esp -8010459e: ff 75 f0 pushl -0x10(%ebp) -801045a1: ff 75 ec pushl -0x14(%ebp) -801045a4: ff 75 f4 pushl -0xc(%ebp) -801045a7: e8 d9 c8 ff ff call 80100e85 -801045ac: 83 c4 10 add $0x10,%esp -} -801045af: c9 leave -801045b0: c3 ret +801043b9: 83 ec 04 sub $0x4,%esp +801043bc: ff 75 f0 push -0x10(%ebp) +801043bf: ff 75 ec push -0x14(%ebp) +801043c2: ff 75 f4 push -0xc(%ebp) +801043c5: e8 6b ca ff ff call 80100e35 +801043ca: 83 c4 10 add $0x10,%esp +} +801043cd: c9 leave +801043ce: c3 ret return -1; -801045b1: b8 ff ff ff ff mov $0xffffffff,%eax -801045b6: eb f7 jmp 801045af -801045b8: b8 ff ff ff ff mov $0xffffffff,%eax -801045bd: eb f0 jmp 801045af -801045bf: b8 ff ff ff ff mov $0xffffffff,%eax -801045c4: eb e9 jmp 801045af - -801045c6 : -{ -801045c6: f3 0f 1e fb endbr32 -801045ca: 55 push %ebp -801045cb: 89 e5 mov %esp,%ebp -801045cd: 83 ec 18 sub $0x18,%esp +801043cf: b8 ff ff ff ff mov $0xffffffff,%eax +801043d4: eb f7 jmp 801043cd +801043d6: b8 ff ff ff ff mov $0xffffffff,%eax +801043db: eb f0 jmp 801043cd +801043dd: b8 ff ff ff ff mov $0xffffffff,%eax +801043e2: eb e9 jmp 801043cd + +801043e4 : +{ +801043e4: 55 push %ebp +801043e5: 89 e5 mov %esp,%ebp +801043e7: 83 ec 18 sub $0x18,%esp if(argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argptr(1, &p, n) < 0) -801045d0: 8d 4d f4 lea -0xc(%ebp),%ecx -801045d3: ba 00 00 00 00 mov $0x0,%edx -801045d8: b8 00 00 00 00 mov $0x0,%eax -801045dd: e8 26 fd ff ff call 80104308 -801045e2: 85 c0 test %eax,%eax -801045e4: 78 43 js 80104629 -801045e6: 83 ec 08 sub $0x8,%esp -801045e9: 8d 45 f0 lea -0x10(%ebp),%eax -801045ec: 50 push %eax -801045ed: 6a 02 push $0x2 -801045ef: e8 f3 fb ff ff call 801041e7 -801045f4: 83 c4 10 add $0x10,%esp -801045f7: 85 c0 test %eax,%eax -801045f9: 78 35 js 80104630 -801045fb: 83 ec 04 sub $0x4,%esp -801045fe: ff 75 f0 pushl -0x10(%ebp) -80104601: 8d 45 ec lea -0x14(%ebp),%eax -80104604: 50 push %eax -80104605: 6a 01 push $0x1 -80104607: e8 05 fc ff ff call 80104211 -8010460c: 83 c4 10 add $0x10,%esp -8010460f: 85 c0 test %eax,%eax -80104611: 78 24 js 80104637 +801043ea: 8d 4d f4 lea -0xc(%ebp),%ecx +801043ed: ba 00 00 00 00 mov $0x0,%edx +801043f2: b8 00 00 00 00 mov $0x0,%eax +801043f7: e8 30 fd ff ff call 8010412c +801043fc: 85 c0 test %eax,%eax +801043fe: 78 43 js 80104443 +80104400: 83 ec 08 sub $0x8,%esp +80104403: 8d 45 f0 lea -0x10(%ebp),%eax +80104406: 50 push %eax +80104407: 6a 02 push $0x2 +80104409: e8 11 fc ff ff call 8010401f +8010440e: 83 c4 10 add $0x10,%esp +80104411: 85 c0 test %eax,%eax +80104413: 78 35 js 8010444a +80104415: 83 ec 04 sub $0x4,%esp +80104418: ff 75 f0 push -0x10(%ebp) +8010441b: 8d 45 ec lea -0x14(%ebp),%eax +8010441e: 50 push %eax +8010441f: 6a 01 push $0x1 +80104421: e8 1f fc ff ff call 80104045 +80104426: 83 c4 10 add $0x10,%esp +80104429: 85 c0 test %eax,%eax +8010442b: 78 24 js 80104451 return filewrite(f, p, n); -80104613: 83 ec 04 sub $0x4,%esp -80104616: ff 75 f0 pushl -0x10(%ebp) -80104619: ff 75 ec pushl -0x14(%ebp) -8010461c: ff 75 f4 pushl -0xc(%ebp) -8010461f: e8 ea c8 ff ff call 80100f0e -80104624: 83 c4 10 add $0x10,%esp -} -80104627: c9 leave -80104628: c3 ret +8010442d: 83 ec 04 sub $0x4,%esp +80104430: ff 75 f0 push -0x10(%ebp) +80104433: ff 75 ec push -0x14(%ebp) +80104436: ff 75 f4 push -0xc(%ebp) +80104439: e8 7c ca ff ff call 80100eba +8010443e: 83 c4 10 add $0x10,%esp +} +80104441: c9 leave +80104442: c3 ret return -1; -80104629: b8 ff ff ff ff mov $0xffffffff,%eax -8010462e: eb f7 jmp 80104627 -80104630: b8 ff ff ff ff mov $0xffffffff,%eax -80104635: eb f0 jmp 80104627 -80104637: b8 ff ff ff ff mov $0xffffffff,%eax -8010463c: eb e9 jmp 80104627 - -8010463e : -{ -8010463e: f3 0f 1e fb endbr32 -80104642: 55 push %ebp -80104643: 89 e5 mov %esp,%ebp -80104645: 83 ec 18 sub $0x18,%esp +80104443: b8 ff ff ff ff mov $0xffffffff,%eax +80104448: eb f7 jmp 80104441 +8010444a: b8 ff ff ff ff mov $0xffffffff,%eax +8010444f: eb f0 jmp 80104441 +80104451: b8 ff ff ff ff mov $0xffffffff,%eax +80104456: eb e9 jmp 80104441 + +80104458 : +{ +80104458: 55 push %ebp +80104459: 89 e5 mov %esp,%ebp +8010445b: 83 ec 18 sub $0x18,%esp if(argfd(0, &fd, &f) < 0) -80104648: 8d 4d f0 lea -0x10(%ebp),%ecx -8010464b: 8d 55 f4 lea -0xc(%ebp),%edx -8010464e: b8 00 00 00 00 mov $0x0,%eax -80104653: e8 b0 fc ff ff call 80104308 -80104658: 85 c0 test %eax,%eax -8010465a: 78 25 js 80104681 +8010445e: 8d 4d f0 lea -0x10(%ebp),%ecx +80104461: 8d 55 f4 lea -0xc(%ebp),%edx +80104464: b8 00 00 00 00 mov $0x0,%eax +80104469: e8 be fc ff ff call 8010412c +8010446e: 85 c0 test %eax,%eax +80104470: 78 25 js 80104497 myproc()->ofile[fd] = 0; -8010465c: e8 89 ed ff ff call 801033ea -80104661: 8b 55 f4 mov -0xc(%ebp),%edx -80104664: c7 44 90 28 00 00 00 movl $0x0,0x28(%eax,%edx,4) -8010466b: 00 +80104472: e8 39 ee ff ff call 801032b0 +80104477: 8b 55 f4 mov -0xc(%ebp),%edx +8010447a: c7 44 90 28 00 00 00 movl $0x0,0x28(%eax,%edx,4) +80104481: 00 fileclose(f); -8010466c: 83 ec 0c sub $0xc,%esp -8010466f: ff 75 f0 pushl -0x10(%ebp) -80104672: e8 0a c7 ff ff call 80100d81 +80104482: 83 ec 0c sub $0xc,%esp +80104485: ff 75 f0 push -0x10(%ebp) +80104488: e8 ac c8 ff ff call 80100d39 return 0; -80104677: 83 c4 10 add $0x10,%esp -8010467a: b8 00 00 00 00 mov $0x0,%eax +8010448d: 83 c4 10 add $0x10,%esp +80104490: b8 00 00 00 00 mov $0x0,%eax } -8010467f: c9 leave -80104680: c3 ret +80104495: c9 leave +80104496: c3 ret return -1; -80104681: b8 ff ff ff ff mov $0xffffffff,%eax -80104686: eb f7 jmp 8010467f +80104497: b8 ff ff ff ff mov $0xffffffff,%eax +8010449c: eb f7 jmp 80104495 -80104688 : +8010449e : { -80104688: f3 0f 1e fb endbr32 -8010468c: 55 push %ebp -8010468d: 89 e5 mov %esp,%ebp -8010468f: 83 ec 18 sub $0x18,%esp +8010449e: 55 push %ebp +8010449f: 89 e5 mov %esp,%ebp +801044a1: 83 ec 18 sub $0x18,%esp if(argfd(0, 0, &f) < 0 || argptr(1, (void*)&st, sizeof(*st)) < 0) -80104692: 8d 4d f4 lea -0xc(%ebp),%ecx -80104695: ba 00 00 00 00 mov $0x0,%edx -8010469a: b8 00 00 00 00 mov $0x0,%eax -8010469f: e8 64 fc ff ff call 80104308 -801046a4: 85 c0 test %eax,%eax -801046a6: 78 2a js 801046d2 -801046a8: 83 ec 04 sub $0x4,%esp -801046ab: 6a 14 push $0x14 -801046ad: 8d 45 f0 lea -0x10(%ebp),%eax -801046b0: 50 push %eax -801046b1: 6a 01 push $0x1 -801046b3: e8 59 fb ff ff call 80104211 -801046b8: 83 c4 10 add $0x10,%esp -801046bb: 85 c0 test %eax,%eax -801046bd: 78 1a js 801046d9 +801044a4: 8d 4d f4 lea -0xc(%ebp),%ecx +801044a7: ba 00 00 00 00 mov $0x0,%edx +801044ac: b8 00 00 00 00 mov $0x0,%eax +801044b1: e8 76 fc ff ff call 8010412c +801044b6: 85 c0 test %eax,%eax +801044b8: 78 2a js 801044e4 +801044ba: 83 ec 04 sub $0x4,%esp +801044bd: 6a 14 push $0x14 +801044bf: 8d 45 f0 lea -0x10(%ebp),%eax +801044c2: 50 push %eax +801044c3: 6a 01 push $0x1 +801044c5: e8 7b fb ff ff call 80104045 +801044ca: 83 c4 10 add $0x10,%esp +801044cd: 85 c0 test %eax,%eax +801044cf: 78 1a js 801044eb return filestat(f, st); -801046bf: 83 ec 08 sub $0x8,%esp -801046c2: ff 75 f0 pushl -0x10(%ebp) -801046c5: ff 75 f4 pushl -0xc(%ebp) -801046c8: e8 6d c7 ff ff call 80100e3a -801046cd: 83 c4 10 add $0x10,%esp -} -801046d0: c9 leave -801046d1: c3 ret +801044d1: 83 ec 08 sub $0x8,%esp +801044d4: ff 75 f0 push -0x10(%ebp) +801044d7: ff 75 f4 push -0xc(%ebp) +801044da: e8 0f c9 ff ff call 80100dee +801044df: 83 c4 10 add $0x10,%esp +} +801044e2: c9 leave +801044e3: c3 ret return -1; -801046d2: b8 ff ff ff ff mov $0xffffffff,%eax -801046d7: eb f7 jmp 801046d0 -801046d9: b8 ff ff ff ff mov $0xffffffff,%eax -801046de: eb f0 jmp 801046d0 - -801046e0 : -{ -801046e0: f3 0f 1e fb endbr32 -801046e4: 55 push %ebp -801046e5: 89 e5 mov %esp,%ebp -801046e7: 56 push %esi -801046e8: 53 push %ebx -801046e9: 83 ec 28 sub $0x28,%esp +801044e4: b8 ff ff ff ff mov $0xffffffff,%eax +801044e9: eb f7 jmp 801044e2 +801044eb: b8 ff ff ff ff mov $0xffffffff,%eax +801044f0: eb f0 jmp 801044e2 + +801044f2 : +{ +801044f2: 55 push %ebp +801044f3: 89 e5 mov %esp,%ebp +801044f5: 56 push %esi +801044f6: 53 push %ebx +801044f7: 83 ec 28 sub $0x28,%esp if(argstr(0, &old) < 0 || argstr(1, &new) < 0) -801046ec: 8d 45 e0 lea -0x20(%ebp),%eax -801046ef: 50 push %eax -801046f0: 6a 00 push $0x0 -801046f2: e8 7f fb ff ff call 80104276 -801046f7: 83 c4 10 add $0x10,%esp -801046fa: 85 c0 test %eax,%eax -801046fc: 0f 88 26 01 00 00 js 80104828 -80104702: 83 ec 08 sub $0x8,%esp -80104705: 8d 45 e4 lea -0x1c(%ebp),%eax -80104708: 50 push %eax -80104709: 6a 01 push $0x1 -8010470b: e8 66 fb ff ff call 80104276 -80104710: 83 c4 10 add $0x10,%esp -80104713: 85 c0 test %eax,%eax -80104715: 0f 88 14 01 00 00 js 8010482f +801044fa: 8d 45 e0 lea -0x20(%ebp),%eax +801044fd: 50 push %eax +801044fe: 6a 00 push $0x0 +80104500: e8 9d fb ff ff call 801040a2 +80104505: 83 c4 10 add $0x10,%esp +80104508: 85 c0 test %eax,%eax +8010450a: 0f 88 26 01 00 00 js 80104636 +80104510: 83 ec 08 sub $0x8,%esp +80104513: 8d 45 e4 lea -0x1c(%ebp),%eax +80104516: 50 push %eax +80104517: 6a 01 push $0x1 +80104519: e8 84 fb ff ff call 801040a2 +8010451e: 83 c4 10 add $0x10,%esp +80104521: 85 c0 test %eax,%eax +80104523: 0f 88 14 01 00 00 js 8010463d begin_op(); -8010471b: e8 60 e1 ff ff call 80102880 +80104529: e8 50 e2 ff ff call 8010277e if((ip = namei(old)) == 0){ -80104720: 83 ec 0c sub $0xc,%esp -80104723: ff 75 e0 pushl -0x20(%ebp) -80104726: e8 b9 d5 ff ff call 80101ce4 -8010472b: 89 c3 mov %eax,%ebx -8010472d: 83 c4 10 add $0x10,%esp -80104730: 85 c0 test %eax,%eax -80104732: 0f 84 93 00 00 00 je 801047cb +8010452e: 83 ec 0c sub $0xc,%esp +80104531: ff 75 e0 push -0x20(%ebp) +80104534: e8 08 d7 ff ff call 80101c41 +80104539: 89 c3 mov %eax,%ebx +8010453b: 83 c4 10 add $0x10,%esp +8010453e: 85 c0 test %eax,%eax +80104540: 0f 84 93 00 00 00 je 801045d9 ilock(ip); -80104738: 83 ec 0c sub $0xc,%esp -8010473b: 50 push %eax -8010473c: e8 eb cd ff ff call 8010152c +80104546: 83 ec 0c sub $0xc,%esp +80104549: 50 push %eax +8010454a: e8 64 cf ff ff call 801014b3 if(ip->type == T_DIR){ -80104741: 83 c4 10 add $0x10,%esp -80104744: 66 83 7b 50 01 cmpw $0x1,0x50(%ebx) -80104749: 0f 84 88 00 00 00 je 801047d7 +8010454f: 83 c4 10 add $0x10,%esp +80104552: 66 83 7b 50 01 cmpw $0x1,0x50(%ebx) +80104557: 0f 84 88 00 00 00 je 801045e5 ip->nlink++; -8010474f: 66 83 43 56 01 addw $0x1,0x56(%ebx) +8010455d: 66 83 43 56 01 addw $0x1,0x56(%ebx) iupdate(ip); -80104754: 83 ec 0c sub $0xc,%esp -80104757: 53 push %ebx -80104758: e8 1d cd ff ff call 8010147a +80104562: 83 ec 0c sub $0xc,%esp +80104565: 53 push %ebx +80104566: e8 9e ce ff ff call 80101409 iunlock(ip); -8010475d: 89 1c 24 mov %ebx,(%esp) -80104760: e8 8d ce ff ff call 801015f2 +8010456b: 89 1c 24 mov %ebx,(%esp) +8010456e: e8 02 d0 ff ff call 80101575 if((dp = nameiparent(new, name)) == 0) -80104765: 83 c4 08 add $0x8,%esp -80104768: 8d 45 ea lea -0x16(%ebp),%eax -8010476b: 50 push %eax -8010476c: ff 75 e4 pushl -0x1c(%ebp) -8010476f: e8 8c d5 ff ff call 80101d00 -80104774: 89 c6 mov %eax,%esi -80104776: 83 c4 10 add $0x10,%esp -80104779: 85 c0 test %eax,%eax -8010477b: 74 7e je 801047fb +80104573: 83 c4 08 add $0x8,%esp +80104576: 8d 45 ea lea -0x16(%ebp),%eax +80104579: 50 push %eax +8010457a: ff 75 e4 push -0x1c(%ebp) +8010457d: e8 d7 d6 ff ff call 80101c59 +80104582: 89 c6 mov %eax,%esi +80104584: 83 c4 10 add $0x10,%esp +80104587: 85 c0 test %eax,%eax +80104589: 74 7e je 80104609 ilock(dp); -8010477d: 83 ec 0c sub $0xc,%esp -80104780: 50 push %eax -80104781: e8 a6 cd ff ff call 8010152c +8010458b: 83 ec 0c sub $0xc,%esp +8010458e: 50 push %eax +8010458f: e8 1f cf ff ff call 801014b3 if(dp->dev != ip->dev || dirlink(dp, name, ip->inum) < 0){ -80104786: 83 c4 10 add $0x10,%esp -80104789: 8b 03 mov (%ebx),%eax -8010478b: 39 06 cmp %eax,(%esi) -8010478d: 75 60 jne 801047ef -8010478f: 83 ec 04 sub $0x4,%esp -80104792: ff 73 04 pushl 0x4(%ebx) -80104795: 8d 45 ea lea -0x16(%ebp),%eax -80104798: 50 push %eax -80104799: 56 push %esi -8010479a: e8 8c d4 ff ff call 80101c2b -8010479f: 83 c4 10 add $0x10,%esp -801047a2: 85 c0 test %eax,%eax -801047a4: 78 49 js 801047ef +80104594: 83 c4 10 add $0x10,%esp +80104597: 8b 03 mov (%ebx),%eax +80104599: 39 06 cmp %eax,(%esi) +8010459b: 75 60 jne 801045fd +8010459d: 83 ec 04 sub $0x4,%esp +801045a0: ff 73 04 push 0x4(%ebx) +801045a3: 8d 45 ea lea -0x16(%ebp),%eax +801045a6: 50 push %eax +801045a7: 56 push %esi +801045a8: e8 df d5 ff ff call 80101b8c +801045ad: 83 c4 10 add $0x10,%esp +801045b0: 85 c0 test %eax,%eax +801045b2: 78 49 js 801045fd iunlockput(dp); -801047a6: 83 ec 0c sub $0xc,%esp -801047a9: 56 push %esi -801047aa: e8 d2 cf ff ff call 80101781 +801045b4: 83 ec 0c sub $0xc,%esp +801045b7: 56 push %esi +801045b8: e8 3f d1 ff ff call 801016fc iput(ip); -801047af: 89 1c 24 mov %ebx,(%esp) -801047b2: e8 84 ce ff ff call 8010163b +801045bd: 89 1c 24 mov %ebx,(%esp) +801045c0: e8 f5 cf ff ff call 801015ba end_op(); -801047b7: e8 43 e1 ff ff call 801028ff +801045c5: e8 2f e2 ff ff call 801027f9 return 0; -801047bc: 83 c4 10 add $0x10,%esp -801047bf: b8 00 00 00 00 mov $0x0,%eax -} -801047c4: 8d 65 f8 lea -0x8(%ebp),%esp -801047c7: 5b pop %ebx -801047c8: 5e pop %esi -801047c9: 5d pop %ebp -801047ca: c3 ret +801045ca: 83 c4 10 add $0x10,%esp +801045cd: b8 00 00 00 00 mov $0x0,%eax +} +801045d2: 8d 65 f8 lea -0x8(%ebp),%esp +801045d5: 5b pop %ebx +801045d6: 5e pop %esi +801045d7: 5d pop %ebp +801045d8: c3 ret end_op(); -801047cb: e8 2f e1 ff ff call 801028ff +801045d9: e8 1b e2 ff ff call 801027f9 return -1; -801047d0: b8 ff ff ff ff mov $0xffffffff,%eax -801047d5: eb ed jmp 801047c4 +801045de: b8 ff ff ff ff mov $0xffffffff,%eax +801045e3: eb ed jmp 801045d2 iunlockput(ip); -801047d7: 83 ec 0c sub $0xc,%esp -801047da: 53 push %ebx -801047db: e8 a1 cf ff ff call 80101781 +801045e5: 83 ec 0c sub $0xc,%esp +801045e8: 53 push %ebx +801045e9: e8 0e d1 ff ff call 801016fc end_op(); -801047e0: e8 1a e1 ff ff call 801028ff +801045ee: e8 06 e2 ff ff call 801027f9 return -1; -801047e5: 83 c4 10 add $0x10,%esp -801047e8: b8 ff ff ff ff mov $0xffffffff,%eax -801047ed: eb d5 jmp 801047c4 +801045f3: 83 c4 10 add $0x10,%esp +801045f6: b8 ff ff ff ff mov $0xffffffff,%eax +801045fb: eb d5 jmp 801045d2 iunlockput(dp); -801047ef: 83 ec 0c sub $0xc,%esp -801047f2: 56 push %esi -801047f3: e8 89 cf ff ff call 80101781 +801045fd: 83 ec 0c sub $0xc,%esp +80104600: 56 push %esi +80104601: e8 f6 d0 ff ff call 801016fc goto bad; -801047f8: 83 c4 10 add $0x10,%esp +80104606: 83 c4 10 add $0x10,%esp ilock(ip); -801047fb: 83 ec 0c sub $0xc,%esp -801047fe: 53 push %ebx -801047ff: e8 28 cd ff ff call 8010152c +80104609: 83 ec 0c sub $0xc,%esp +8010460c: 53 push %ebx +8010460d: e8 a1 ce ff ff call 801014b3 ip->nlink--; -80104804: 66 83 6b 56 01 subw $0x1,0x56(%ebx) +80104612: 66 83 6b 56 01 subw $0x1,0x56(%ebx) iupdate(ip); -80104809: 89 1c 24 mov %ebx,(%esp) -8010480c: e8 69 cc ff ff call 8010147a +80104617: 89 1c 24 mov %ebx,(%esp) +8010461a: e8 ea cd ff ff call 80101409 iunlockput(ip); -80104811: 89 1c 24 mov %ebx,(%esp) -80104814: e8 68 cf ff ff call 80101781 +8010461f: 89 1c 24 mov %ebx,(%esp) +80104622: e8 d5 d0 ff ff call 801016fc end_op(); -80104819: e8 e1 e0 ff ff call 801028ff +80104627: e8 cd e1 ff ff call 801027f9 return -1; -8010481e: 83 c4 10 add $0x10,%esp -80104821: b8 ff ff ff ff mov $0xffffffff,%eax -80104826: eb 9c jmp 801047c4 +8010462c: 83 c4 10 add $0x10,%esp +8010462f: b8 ff ff ff ff mov $0xffffffff,%eax +80104634: eb 9c jmp 801045d2 return -1; -80104828: b8 ff ff ff ff mov $0xffffffff,%eax -8010482d: eb 95 jmp 801047c4 -8010482f: b8 ff ff ff ff mov $0xffffffff,%eax -80104834: eb 8e jmp 801047c4 - -80104836 : -{ -80104836: f3 0f 1e fb endbr32 -8010483a: 55 push %ebp -8010483b: 89 e5 mov %esp,%ebp -8010483d: 57 push %edi -8010483e: 56 push %esi -8010483f: 53 push %ebx -80104840: 83 ec 54 sub $0x54,%esp +80104636: b8 ff ff ff ff mov $0xffffffff,%eax +8010463b: eb 95 jmp 801045d2 +8010463d: b8 ff ff ff ff mov $0xffffffff,%eax +80104642: eb 8e jmp 801045d2 + +80104644 : +{ +80104644: 55 push %ebp +80104645: 89 e5 mov %esp,%ebp +80104647: 57 push %edi +80104648: 56 push %esi +80104649: 53 push %ebx +8010464a: 83 ec 54 sub $0x54,%esp if(argstr(0, &path) < 0) -80104843: 8d 45 c4 lea -0x3c(%ebp),%eax -80104846: 50 push %eax -80104847: 6a 00 push $0x0 -80104849: e8 28 fa ff ff call 80104276 -8010484e: 83 c4 10 add $0x10,%esp -80104851: 85 c0 test %eax,%eax -80104853: 0f 88 81 01 00 00 js 801049da +8010464d: 8d 45 c4 lea -0x3c(%ebp),%eax +80104650: 50 push %eax +80104651: 6a 00 push $0x0 +80104653: e8 4a fa ff ff call 801040a2 +80104658: 83 c4 10 add $0x10,%esp +8010465b: 85 c0 test %eax,%eax +8010465d: 0f 88 81 01 00 00 js 801047e4 begin_op(); -80104859: e8 22 e0 ff ff call 80102880 +80104663: e8 16 e1 ff ff call 8010277e if((dp = nameiparent(path, name)) == 0){ -8010485e: 83 ec 08 sub $0x8,%esp -80104861: 8d 45 ca lea -0x36(%ebp),%eax -80104864: 50 push %eax -80104865: ff 75 c4 pushl -0x3c(%ebp) -80104868: e8 93 d4 ff ff call 80101d00 -8010486d: 89 c6 mov %eax,%esi -8010486f: 83 c4 10 add $0x10,%esp -80104872: 85 c0 test %eax,%eax -80104874: 0f 84 df 00 00 00 je 80104959 +80104668: 83 ec 08 sub $0x8,%esp +8010466b: 8d 45 ca lea -0x36(%ebp),%eax +8010466e: 50 push %eax +8010466f: ff 75 c4 push -0x3c(%ebp) +80104672: e8 e2 d5 ff ff call 80101c59 +80104677: 89 c7 mov %eax,%edi +80104679: 83 c4 10 add $0x10,%esp +8010467c: 85 c0 test %eax,%eax +8010467e: 0f 84 df 00 00 00 je 80104763 ilock(dp); -8010487a: 83 ec 0c sub $0xc,%esp -8010487d: 50 push %eax -8010487e: e8 a9 cc ff ff call 8010152c +80104684: 83 ec 0c sub $0xc,%esp +80104687: 50 push %eax +80104688: e8 26 ce ff ff call 801014b3 if(namecmp(name, ".") == 0 || namecmp(name, "..") == 0) -80104883: 83 c4 08 add $0x8,%esp -80104886: 68 f0 7f 10 80 push $0x80107ff0 -8010488b: 8d 45 ca lea -0x36(%ebp),%eax -8010488e: 50 push %eax -8010488f: e8 67 d1 ff ff call 801019fb -80104894: 83 c4 10 add $0x10,%esp -80104897: 85 c0 test %eax,%eax -80104899: 0f 84 51 01 00 00 je 801049f0 -8010489f: 83 ec 08 sub $0x8,%esp -801048a2: 68 ef 7f 10 80 push $0x80107fef -801048a7: 8d 45 ca lea -0x36(%ebp),%eax -801048aa: 50 push %eax -801048ab: e8 4b d1 ff ff call 801019fb -801048b0: 83 c4 10 add $0x10,%esp -801048b3: 85 c0 test %eax,%eax -801048b5: 0f 84 35 01 00 00 je 801049f0 +8010468d: 83 c4 08 add $0x8,%esp +80104690: 68 10 7d 10 80 push $0x80107d10 +80104695: 8d 45 ca lea -0x36(%ebp),%eax +80104698: 50 push %eax +80104699: e8 c6 d2 ff ff call 80101964 +8010469e: 83 c4 10 add $0x10,%esp +801046a1: 85 c0 test %eax,%eax +801046a3: 0f 84 51 01 00 00 je 801047fa +801046a9: 83 ec 08 sub $0x8,%esp +801046ac: 68 0f 7d 10 80 push $0x80107d0f +801046b1: 8d 45 ca lea -0x36(%ebp),%eax +801046b4: 50 push %eax +801046b5: e8 aa d2 ff ff call 80101964 +801046ba: 83 c4 10 add $0x10,%esp +801046bd: 85 c0 test %eax,%eax +801046bf: 0f 84 35 01 00 00 je 801047fa if((ip = dirlookup(dp, name, &off)) == 0) -801048bb: 83 ec 04 sub $0x4,%esp -801048be: 8d 45 c0 lea -0x40(%ebp),%eax -801048c1: 50 push %eax -801048c2: 8d 45 ca lea -0x36(%ebp),%eax -801048c5: 50 push %eax -801048c6: 56 push %esi -801048c7: e8 48 d1 ff ff call 80101a14 -801048cc: 89 c3 mov %eax,%ebx -801048ce: 83 c4 10 add $0x10,%esp -801048d1: 85 c0 test %eax,%eax -801048d3: 0f 84 17 01 00 00 je 801049f0 +801046c5: 83 ec 04 sub $0x4,%esp +801046c8: 8d 45 c0 lea -0x40(%ebp),%eax +801046cb: 50 push %eax +801046cc: 8d 45 ca lea -0x36(%ebp),%eax +801046cf: 50 push %eax +801046d0: 57 push %edi +801046d1: e8 a3 d2 ff ff call 80101979 +801046d6: 89 c3 mov %eax,%ebx +801046d8: 83 c4 10 add $0x10,%esp +801046db: 85 c0 test %eax,%eax +801046dd: 0f 84 17 01 00 00 je 801047fa ilock(ip); -801048d9: 83 ec 0c sub $0xc,%esp -801048dc: 50 push %eax -801048dd: e8 4a cc ff ff call 8010152c +801046e3: 83 ec 0c sub $0xc,%esp +801046e6: 50 push %eax +801046e7: e8 c7 cd ff ff call 801014b3 if(ip->nlink < 1) -801048e2: 83 c4 10 add $0x10,%esp -801048e5: 66 83 7b 56 00 cmpw $0x0,0x56(%ebx) -801048ea: 7e 79 jle 80104965 +801046ec: 83 c4 10 add $0x10,%esp +801046ef: 66 83 7b 56 00 cmpw $0x0,0x56(%ebx) +801046f4: 7e 79 jle 8010476f if(ip->type == T_DIR && !isdirempty(ip)){ -801048ec: 66 83 7b 50 01 cmpw $0x1,0x50(%ebx) -801048f1: 74 7f je 80104972 +801046f6: 66 83 7b 50 01 cmpw $0x1,0x50(%ebx) +801046fb: 74 7f je 8010477c memset(&de, 0, sizeof(de)); -801048f3: 83 ec 04 sub $0x4,%esp -801048f6: 6a 10 push $0x10 -801048f8: 6a 00 push $0x0 -801048fa: 8d 7d d8 lea -0x28(%ebp),%edi -801048fd: 57 push %edi -801048fe: e8 4c f6 ff ff call 80103f4f +801046fd: 83 ec 04 sub $0x4,%esp +80104700: 6a 10 push $0x10 +80104702: 6a 00 push $0x0 +80104704: 8d 75 d8 lea -0x28(%ebp),%esi +80104707: 56 push %esi +80104708: e8 a2 f6 ff ff call 80103daf if(writei(dp, (char*)&de, off, sizeof(de)) != sizeof(de)) -80104903: 6a 10 push $0x10 -80104905: ff 75 c0 pushl -0x40(%ebp) -80104908: 57 push %edi -80104909: 56 push %esi -8010490a: e8 c5 cf ff ff call 801018d4 -8010490f: 83 c4 20 add $0x20,%esp -80104912: 83 f8 10 cmp $0x10,%eax -80104915: 0f 85 9c 00 00 00 jne 801049b7 +8010470d: 6a 10 push $0x10 +8010470f: ff 75 c0 push -0x40(%ebp) +80104712: 56 push %esi +80104713: 57 push %edi +80104714: e8 2a d1 ff ff call 80101843 +80104719: 83 c4 20 add $0x20,%esp +8010471c: 83 f8 10 cmp $0x10,%eax +8010471f: 0f 85 9c 00 00 00 jne 801047c1 if(ip->type == T_DIR){ -8010491b: 66 83 7b 50 01 cmpw $0x1,0x50(%ebx) -80104920: 0f 84 9e 00 00 00 je 801049c4 +80104725: 66 83 7b 50 01 cmpw $0x1,0x50(%ebx) +8010472a: 0f 84 9e 00 00 00 je 801047ce iunlockput(dp); -80104926: 83 ec 0c sub $0xc,%esp -80104929: 56 push %esi -8010492a: e8 52 ce ff ff call 80101781 +80104730: 83 ec 0c sub $0xc,%esp +80104733: 57 push %edi +80104734: e8 c3 cf ff ff call 801016fc ip->nlink--; -8010492f: 66 83 6b 56 01 subw $0x1,0x56(%ebx) +80104739: 66 83 6b 56 01 subw $0x1,0x56(%ebx) iupdate(ip); -80104934: 89 1c 24 mov %ebx,(%esp) -80104937: e8 3e cb ff ff call 8010147a +8010473e: 89 1c 24 mov %ebx,(%esp) +80104741: e8 c3 cc ff ff call 80101409 iunlockput(ip); -8010493c: 89 1c 24 mov %ebx,(%esp) -8010493f: e8 3d ce ff ff call 80101781 +80104746: 89 1c 24 mov %ebx,(%esp) +80104749: e8 ae cf ff ff call 801016fc end_op(); -80104944: e8 b6 df ff ff call 801028ff +8010474e: e8 a6 e0 ff ff call 801027f9 return 0; -80104949: 83 c4 10 add $0x10,%esp -8010494c: b8 00 00 00 00 mov $0x0,%eax -} -80104951: 8d 65 f4 lea -0xc(%ebp),%esp -80104954: 5b pop %ebx -80104955: 5e pop %esi -80104956: 5f pop %edi -80104957: 5d pop %ebp -80104958: c3 ret +80104753: 83 c4 10 add $0x10,%esp +80104756: b8 00 00 00 00 mov $0x0,%eax +} +8010475b: 8d 65 f4 lea -0xc(%ebp),%esp +8010475e: 5b pop %ebx +8010475f: 5e pop %esi +80104760: 5f pop %edi +80104761: 5d pop %ebp +80104762: c3 ret end_op(); -80104959: e8 a1 df ff ff call 801028ff +80104763: e8 91 e0 ff ff call 801027f9 return -1; -8010495e: b8 ff ff ff ff mov $0xffffffff,%eax -80104963: eb ec jmp 80104951 +80104768: b8 ff ff ff ff mov $0xffffffff,%eax +8010476d: eb ec jmp 8010475b panic("unlink: nlink < 1"); -80104965: 83 ec 0c sub $0xc,%esp -80104968: 68 0e 80 10 80 push $0x8010800e -8010496d: e8 e6 b9 ff ff call 80100358 +8010476f: 83 ec 0c sub $0xc,%esp +80104772: 68 2e 7d 10 80 push $0x80107d2e +80104777: e8 c4 bb ff ff call 80100340 for(off=2*sizeof(de); offsize; off+=sizeof(de)){ -80104972: 83 7b 58 20 cmpl $0x20,0x58(%ebx) -80104976: 0f 86 77 ff ff ff jbe 801048f3 -8010497c: bf 20 00 00 00 mov $0x20,%edi +8010477c: 83 7b 58 20 cmpl $0x20,0x58(%ebx) +80104780: 0f 86 77 ff ff ff jbe 801046fd +80104786: be 20 00 00 00 mov $0x20,%esi if(readi(dp, (char*)&de, off, sizeof(de)) != sizeof(de)) -80104981: 6a 10 push $0x10 -80104983: 57 push %edi -80104984: 8d 45 b0 lea -0x50(%ebp),%eax -80104987: 50 push %eax -80104988: 53 push %ebx -80104989: e8 46 ce ff ff call 801017d4 -8010498e: 83 c4 10 add $0x10,%esp -80104991: 83 f8 10 cmp $0x10,%eax -80104994: 75 14 jne 801049aa +8010478b: 6a 10 push $0x10 +8010478d: 56 push %esi +8010478e: 8d 45 b0 lea -0x50(%ebp),%eax +80104791: 50 push %eax +80104792: 53 push %ebx +80104793: e8 af cf ff ff call 80101747 +80104798: 83 c4 10 add $0x10,%esp +8010479b: 83 f8 10 cmp $0x10,%eax +8010479e: 75 14 jne 801047b4 if(de.inum != 0) -80104996: 66 83 7d b0 00 cmpw $0x0,-0x50(%ebp) -8010499b: 75 47 jne 801049e4 +801047a0: 66 83 7d b0 00 cmpw $0x0,-0x50(%ebp) +801047a5: 75 47 jne 801047ee for(off=2*sizeof(de); offsize; off+=sizeof(de)){ -8010499d: 83 c7 10 add $0x10,%edi -801049a0: 3b 7b 58 cmp 0x58(%ebx),%edi -801049a3: 72 dc jb 80104981 -801049a5: e9 49 ff ff ff jmp 801048f3 +801047a7: 83 c6 10 add $0x10,%esi +801047aa: 3b 73 58 cmp 0x58(%ebx),%esi +801047ad: 72 dc jb 8010478b +801047af: e9 49 ff ff ff jmp 801046fd panic("isdirempty: readi"); -801049aa: 83 ec 0c sub $0xc,%esp -801049ad: 68 20 80 10 80 push $0x80108020 -801049b2: e8 a1 b9 ff ff call 80100358 +801047b4: 83 ec 0c sub $0xc,%esp +801047b7: 68 40 7d 10 80 push $0x80107d40 +801047bc: e8 7f bb ff ff call 80100340 panic("unlink: writei"); -801049b7: 83 ec 0c sub $0xc,%esp -801049ba: 68 32 80 10 80 push $0x80108032 -801049bf: e8 94 b9 ff ff call 80100358 +801047c1: 83 ec 0c sub $0xc,%esp +801047c4: 68 52 7d 10 80 push $0x80107d52 +801047c9: e8 72 bb ff ff call 80100340 dp->nlink--; -801049c4: 66 83 6e 56 01 subw $0x1,0x56(%esi) +801047ce: 66 83 6f 56 01 subw $0x1,0x56(%edi) iupdate(dp); -801049c9: 83 ec 0c sub $0xc,%esp -801049cc: 56 push %esi -801049cd: e8 a8 ca ff ff call 8010147a -801049d2: 83 c4 10 add $0x10,%esp -801049d5: e9 4c ff ff ff jmp 80104926 +801047d3: 83 ec 0c sub $0xc,%esp +801047d6: 57 push %edi +801047d7: e8 2d cc ff ff call 80101409 +801047dc: 83 c4 10 add $0x10,%esp +801047df: e9 4c ff ff ff jmp 80104730 return -1; -801049da: b8 ff ff ff ff mov $0xffffffff,%eax -801049df: e9 6d ff ff ff jmp 80104951 +801047e4: b8 ff ff ff ff mov $0xffffffff,%eax +801047e9: e9 6d ff ff ff jmp 8010475b iunlockput(ip); -801049e4: 83 ec 0c sub $0xc,%esp -801049e7: 53 push %ebx -801049e8: e8 94 cd ff ff call 80101781 +801047ee: 83 ec 0c sub $0xc,%esp +801047f1: 53 push %ebx +801047f2: e8 05 cf ff ff call 801016fc goto bad; -801049ed: 83 c4 10 add $0x10,%esp +801047f7: 83 c4 10 add $0x10,%esp iunlockput(dp); -801049f0: 83 ec 0c sub $0xc,%esp -801049f3: 56 push %esi -801049f4: e8 88 cd ff ff call 80101781 +801047fa: 83 ec 0c sub $0xc,%esp +801047fd: 57 push %edi +801047fe: e8 f9 ce ff ff call 801016fc end_op(); -801049f9: e8 01 df ff ff call 801028ff +80104803: e8 f1 df ff ff call 801027f9 return -1; -801049fe: 83 c4 10 add $0x10,%esp -80104a01: b8 ff ff ff ff mov $0xffffffff,%eax -80104a06: e9 46 ff ff ff jmp 80104951 +80104808: 83 c4 10 add $0x10,%esp +8010480b: b8 ff ff ff ff mov $0xffffffff,%eax +80104810: e9 46 ff ff ff jmp 8010475b -80104a0b : +80104815 : int sys_open(void) { -80104a0b: f3 0f 1e fb endbr32 -80104a0f: 55 push %ebp -80104a10: 89 e5 mov %esp,%ebp -80104a12: 57 push %edi -80104a13: 56 push %esi -80104a14: 53 push %ebx -80104a15: 83 ec 24 sub $0x24,%esp +80104815: 55 push %ebp +80104816: 89 e5 mov %esp,%ebp +80104818: 57 push %edi +80104819: 56 push %esi +8010481a: 53 push %ebx +8010481b: 83 ec 24 sub $0x24,%esp char *path; int fd, omode; struct file *f; struct inode *ip; if(argstr(0, &path) < 0 || argint(1, &omode) < 0) -80104a18: 8d 45 e4 lea -0x1c(%ebp),%eax -80104a1b: 50 push %eax -80104a1c: 6a 00 push $0x0 -80104a1e: e8 53 f8 ff ff call 80104276 -80104a23: 83 c4 10 add $0x10,%esp -80104a26: 85 c0 test %eax,%eax -80104a28: 0f 88 0b 01 00 00 js 80104b39 -80104a2e: 83 ec 08 sub $0x8,%esp -80104a31: 8d 45 e0 lea -0x20(%ebp),%eax -80104a34: 50 push %eax -80104a35: 6a 01 push $0x1 -80104a37: e8 ab f7 ff ff call 801041e7 -80104a3c: 83 c4 10 add $0x10,%esp -80104a3f: 85 c0 test %eax,%eax -80104a41: 0f 88 f9 00 00 00 js 80104b40 +8010481e: 8d 45 e4 lea -0x1c(%ebp),%eax +80104821: 50 push %eax +80104822: 6a 00 push $0x0 +80104824: e8 79 f8 ff ff call 801040a2 +80104829: 83 c4 10 add $0x10,%esp +8010482c: 85 c0 test %eax,%eax +8010482e: 0f 88 0b 01 00 00 js 8010493f +80104834: 83 ec 08 sub $0x8,%esp +80104837: 8d 45 e0 lea -0x20(%ebp),%eax +8010483a: 50 push %eax +8010483b: 6a 01 push $0x1 +8010483d: e8 dd f7 ff ff call 8010401f +80104842: 83 c4 10 add $0x10,%esp +80104845: 85 c0 test %eax,%eax +80104847: 0f 88 f9 00 00 00 js 80104946 return -1; begin_op(); -80104a47: e8 34 de ff ff call 80102880 +8010484d: e8 2c df ff ff call 8010277e if(omode & O_CREATE){ -80104a4c: f6 45 e1 02 testb $0x2,-0x1f(%ebp) -80104a50: 0f 84 8a 00 00 00 je 80104ae0 +80104852: f6 45 e1 02 testb $0x2,-0x1f(%ebp) +80104856: 0f 84 8a 00 00 00 je 801048e6 ip = create(path, T_FILE, 0, 0); -80104a56: 83 ec 0c sub $0xc,%esp -80104a59: 6a 00 push $0x0 -80104a5b: b9 00 00 00 00 mov $0x0,%ecx -80104a60: ba 02 00 00 00 mov $0x2,%edx -80104a65: 8b 45 e4 mov -0x1c(%ebp),%eax -80104a68: e8 32 f9 ff ff call 8010439f -80104a6d: 89 c6 mov %eax,%esi +8010485c: 83 ec 0c sub $0xc,%esp +8010485f: 6a 00 push $0x0 +80104861: b9 00 00 00 00 mov $0x0,%ecx +80104866: ba 02 00 00 00 mov $0x2,%edx +8010486b: 8b 45 e4 mov -0x1c(%ebp),%eax +8010486e: e8 4f f9 ff ff call 801041c2 +80104873: 89 c6 mov %eax,%esi if(ip == 0){ -80104a6f: 83 c4 10 add $0x10,%esp -80104a72: 85 c0 test %eax,%eax -80104a74: 74 5e je 80104ad4 +80104875: 83 c4 10 add $0x10,%esp +80104878: 85 c0 test %eax,%eax +8010487a: 74 5e je 801048da end_op(); return -1; } } if((f = filealloc()) == 0 || (fd = fdalloc(f)) < 0){ -80104a76: e8 5a c2 ff ff call 80100cd5 -80104a7b: 89 c3 mov %eax,%ebx -80104a7d: 85 c0 test %eax,%eax -80104a7f: 0f 84 ce 00 00 00 je 80104b53 -80104a85: e8 e0 f8 ff ff call 8010436a -80104a8a: 89 c7 mov %eax,%edi -80104a8c: 85 c0 test %eax,%eax -80104a8e: 0f 88 b3 00 00 00 js 80104b47 +8010487c: e8 14 c4 ff ff call 80100c95 +80104881: 89 c3 mov %eax,%ebx +80104883: 85 c0 test %eax,%eax +80104885: 0f 84 ce 00 00 00 je 80104959 +8010488b: e8 fe f8 ff ff call 8010418e +80104890: 89 c7 mov %eax,%edi +80104892: 85 c0 test %eax,%eax +80104894: 0f 88 b3 00 00 00 js 8010494d fileclose(f); iunlockput(ip); end_op(); return -1; } iunlock(ip); -80104a94: 83 ec 0c sub $0xc,%esp -80104a97: 56 push %esi -80104a98: e8 55 cb ff ff call 801015f2 +8010489a: 83 ec 0c sub $0xc,%esp +8010489d: 56 push %esi +8010489e: e8 d2 cc ff ff call 80101575 end_op(); -80104a9d: e8 5d de ff ff call 801028ff +801048a3: e8 51 df ff ff call 801027f9 f->type = FD_INODE; -80104aa2: c7 03 02 00 00 00 movl $0x2,(%ebx) +801048a8: c7 03 02 00 00 00 movl $0x2,(%ebx) f->ip = ip; -80104aa8: 89 73 10 mov %esi,0x10(%ebx) +801048ae: 89 73 10 mov %esi,0x10(%ebx) f->off = 0; -80104aab: c7 43 14 00 00 00 00 movl $0x0,0x14(%ebx) +801048b1: c7 43 14 00 00 00 00 movl $0x0,0x14(%ebx) f->readable = !(omode & O_WRONLY); -80104ab2: 8b 55 e0 mov -0x20(%ebp),%edx -80104ab5: 89 d0 mov %edx,%eax -80104ab7: 83 f0 01 xor $0x1,%eax -80104aba: 83 e0 01 and $0x1,%eax -80104abd: 88 43 08 mov %al,0x8(%ebx) +801048b8: 8b 55 e0 mov -0x20(%ebp),%edx +801048bb: 89 d0 mov %edx,%eax +801048bd: 83 f0 01 xor $0x1,%eax +801048c0: 83 e0 01 and $0x1,%eax +801048c3: 88 43 08 mov %al,0x8(%ebx) f->writable = (omode & O_WRONLY) || (omode & O_RDWR); -80104ac0: 83 c4 10 add $0x10,%esp -80104ac3: f6 c2 03 test $0x3,%dl -80104ac6: 0f 95 43 09 setne 0x9(%ebx) +801048c6: 83 c4 10 add $0x10,%esp +801048c9: f6 c2 03 test $0x3,%dl +801048cc: 0f 95 43 09 setne 0x9(%ebx) return fd; } -80104aca: 89 f8 mov %edi,%eax -80104acc: 8d 65 f4 lea -0xc(%ebp),%esp -80104acf: 5b pop %ebx -80104ad0: 5e pop %esi -80104ad1: 5f pop %edi -80104ad2: 5d pop %ebp -80104ad3: c3 ret +801048d0: 89 f8 mov %edi,%eax +801048d2: 8d 65 f4 lea -0xc(%ebp),%esp +801048d5: 5b pop %ebx +801048d6: 5e pop %esi +801048d7: 5f pop %edi +801048d8: 5d pop %ebp +801048d9: c3 ret end_op(); -80104ad4: e8 26 de ff ff call 801028ff +801048da: e8 1a df ff ff call 801027f9 return -1; -80104ad9: bf ff ff ff ff mov $0xffffffff,%edi -80104ade: eb ea jmp 80104aca +801048df: bf ff ff ff ff mov $0xffffffff,%edi +801048e4: eb ea jmp 801048d0 if((ip = namei(path)) == 0){ -80104ae0: 83 ec 0c sub $0xc,%esp -80104ae3: ff 75 e4 pushl -0x1c(%ebp) -80104ae6: e8 f9 d1 ff ff call 80101ce4 -80104aeb: 89 c6 mov %eax,%esi -80104aed: 83 c4 10 add $0x10,%esp -80104af0: 85 c0 test %eax,%eax -80104af2: 74 39 je 80104b2d +801048e6: 83 ec 0c sub $0xc,%esp +801048e9: ff 75 e4 push -0x1c(%ebp) +801048ec: e8 50 d3 ff ff call 80101c41 +801048f1: 89 c6 mov %eax,%esi +801048f3: 83 c4 10 add $0x10,%esp +801048f6: 85 c0 test %eax,%eax +801048f8: 74 39 je 80104933 ilock(ip); -80104af4: 83 ec 0c sub $0xc,%esp -80104af7: 50 push %eax -80104af8: e8 2f ca ff ff call 8010152c +801048fa: 83 ec 0c sub $0xc,%esp +801048fd: 50 push %eax +801048fe: e8 b0 cb ff ff call 801014b3 if(ip->type == T_DIR && omode != O_RDONLY){ -80104afd: 83 c4 10 add $0x10,%esp -80104b00: 66 83 7e 50 01 cmpw $0x1,0x50(%esi) -80104b05: 0f 85 6b ff ff ff jne 80104a76 -80104b0b: 83 7d e0 00 cmpl $0x0,-0x20(%ebp) -80104b0f: 0f 84 61 ff ff ff je 80104a76 +80104903: 83 c4 10 add $0x10,%esp +80104906: 66 83 7e 50 01 cmpw $0x1,0x50(%esi) +8010490b: 0f 85 6b ff ff ff jne 8010487c +80104911: 83 7d e0 00 cmpl $0x0,-0x20(%ebp) +80104915: 0f 84 61 ff ff ff je 8010487c iunlockput(ip); -80104b15: 83 ec 0c sub $0xc,%esp -80104b18: 56 push %esi -80104b19: e8 63 cc ff ff call 80101781 +8010491b: 83 ec 0c sub $0xc,%esp +8010491e: 56 push %esi +8010491f: e8 d8 cd ff ff call 801016fc end_op(); -80104b1e: e8 dc dd ff ff call 801028ff +80104924: e8 d0 de ff ff call 801027f9 return -1; -80104b23: 83 c4 10 add $0x10,%esp -80104b26: bf ff ff ff ff mov $0xffffffff,%edi -80104b2b: eb 9d jmp 80104aca +80104929: 83 c4 10 add $0x10,%esp +8010492c: bf ff ff ff ff mov $0xffffffff,%edi +80104931: eb 9d jmp 801048d0 end_op(); -80104b2d: e8 cd dd ff ff call 801028ff +80104933: e8 c1 de ff ff call 801027f9 return -1; -80104b32: bf ff ff ff ff mov $0xffffffff,%edi -80104b37: eb 91 jmp 80104aca +80104938: bf ff ff ff ff mov $0xffffffff,%edi +8010493d: eb 91 jmp 801048d0 return -1; -80104b39: bf ff ff ff ff mov $0xffffffff,%edi -80104b3e: eb 8a jmp 80104aca -80104b40: bf ff ff ff ff mov $0xffffffff,%edi -80104b45: eb 83 jmp 80104aca +8010493f: bf ff ff ff ff mov $0xffffffff,%edi +80104944: eb 8a jmp 801048d0 +80104946: bf ff ff ff ff mov $0xffffffff,%edi +8010494b: eb 83 jmp 801048d0 fileclose(f); -80104b47: 83 ec 0c sub $0xc,%esp -80104b4a: 53 push %ebx -80104b4b: e8 31 c2 ff ff call 80100d81 -80104b50: 83 c4 10 add $0x10,%esp +8010494d: 83 ec 0c sub $0xc,%esp +80104950: 53 push %ebx +80104951: e8 e3 c3 ff ff call 80100d39 +80104956: 83 c4 10 add $0x10,%esp iunlockput(ip); -80104b53: 83 ec 0c sub $0xc,%esp -80104b56: 56 push %esi -80104b57: e8 25 cc ff ff call 80101781 +80104959: 83 ec 0c sub $0xc,%esp +8010495c: 56 push %esi +8010495d: e8 9a cd ff ff call 801016fc end_op(); -80104b5c: e8 9e dd ff ff call 801028ff +80104962: e8 92 de ff ff call 801027f9 return -1; -80104b61: 83 c4 10 add $0x10,%esp -80104b64: bf ff ff ff ff mov $0xffffffff,%edi -80104b69: e9 5c ff ff ff jmp 80104aca +80104967: 83 c4 10 add $0x10,%esp +8010496a: bf ff ff ff ff mov $0xffffffff,%edi +8010496f: e9 5c ff ff ff jmp 801048d0 -80104b6e : +80104974 : int sys_mkdir(void) { -80104b6e: f3 0f 1e fb endbr32 -80104b72: 55 push %ebp -80104b73: 89 e5 mov %esp,%ebp -80104b75: 83 ec 18 sub $0x18,%esp +80104974: 55 push %ebp +80104975: 89 e5 mov %esp,%ebp +80104977: 83 ec 18 sub $0x18,%esp char *path; struct inode *ip; begin_op(); -80104b78: e8 03 dd ff ff call 80102880 +8010497a: e8 ff dd ff ff call 8010277e if(argstr(0, &path) < 0 || (ip = create(path, T_DIR, 0, 0)) == 0){ -80104b7d: 83 ec 08 sub $0x8,%esp -80104b80: 8d 45 f4 lea -0xc(%ebp),%eax -80104b83: 50 push %eax -80104b84: 6a 00 push $0x0 -80104b86: e8 eb f6 ff ff call 80104276 -80104b8b: 83 c4 10 add $0x10,%esp -80104b8e: 85 c0 test %eax,%eax -80104b90: 78 36 js 80104bc8 -80104b92: 83 ec 0c sub $0xc,%esp -80104b95: 6a 00 push $0x0 -80104b97: b9 00 00 00 00 mov $0x0,%ecx -80104b9c: ba 01 00 00 00 mov $0x1,%edx -80104ba1: 8b 45 f4 mov -0xc(%ebp),%eax -80104ba4: e8 f6 f7 ff ff call 8010439f -80104ba9: 83 c4 10 add $0x10,%esp -80104bac: 85 c0 test %eax,%eax -80104bae: 74 18 je 80104bc8 +8010497f: 83 ec 08 sub $0x8,%esp +80104982: 8d 45 f4 lea -0xc(%ebp),%eax +80104985: 50 push %eax +80104986: 6a 00 push $0x0 +80104988: e8 15 f7 ff ff call 801040a2 +8010498d: 83 c4 10 add $0x10,%esp +80104990: 85 c0 test %eax,%eax +80104992: 78 36 js 801049ca +80104994: 83 ec 0c sub $0xc,%esp +80104997: 6a 00 push $0x0 +80104999: b9 00 00 00 00 mov $0x0,%ecx +8010499e: ba 01 00 00 00 mov $0x1,%edx +801049a3: 8b 45 f4 mov -0xc(%ebp),%eax +801049a6: e8 17 f8 ff ff call 801041c2 +801049ab: 83 c4 10 add $0x10,%esp +801049ae: 85 c0 test %eax,%eax +801049b0: 74 18 je 801049ca end_op(); return -1; } iunlockput(ip); -80104bb0: 83 ec 0c sub $0xc,%esp -80104bb3: 50 push %eax -80104bb4: e8 c8 cb ff ff call 80101781 +801049b2: 83 ec 0c sub $0xc,%esp +801049b5: 50 push %eax +801049b6: e8 41 cd ff ff call 801016fc end_op(); -80104bb9: e8 41 dd ff ff call 801028ff +801049bb: e8 39 de ff ff call 801027f9 return 0; -80104bbe: 83 c4 10 add $0x10,%esp -80104bc1: b8 00 00 00 00 mov $0x0,%eax +801049c0: 83 c4 10 add $0x10,%esp +801049c3: b8 00 00 00 00 mov $0x0,%eax } -80104bc6: c9 leave -80104bc7: c3 ret +801049c8: c9 leave +801049c9: c3 ret end_op(); -80104bc8: e8 32 dd ff ff call 801028ff +801049ca: e8 2a de ff ff call 801027f9 return -1; -80104bcd: b8 ff ff ff ff mov $0xffffffff,%eax -80104bd2: eb f2 jmp 80104bc6 +801049cf: b8 ff ff ff ff mov $0xffffffff,%eax +801049d4: eb f2 jmp 801049c8 -80104bd4 : +801049d6 : int sys_mknod(void) { -80104bd4: f3 0f 1e fb endbr32 -80104bd8: 55 push %ebp -80104bd9: 89 e5 mov %esp,%ebp -80104bdb: 83 ec 18 sub $0x18,%esp +801049d6: 55 push %ebp +801049d7: 89 e5 mov %esp,%ebp +801049d9: 83 ec 18 sub $0x18,%esp struct inode *ip; char *path; int major, minor; begin_op(); -80104bde: e8 9d dc ff ff call 80102880 +801049dc: e8 9d dd ff ff call 8010277e if((argstr(0, &path)) < 0 || -80104be3: 83 ec 08 sub $0x8,%esp -80104be6: 8d 45 f4 lea -0xc(%ebp),%eax -80104be9: 50 push %eax -80104bea: 6a 00 push $0x0 -80104bec: e8 85 f6 ff ff call 80104276 -80104bf1: 83 c4 10 add $0x10,%esp -80104bf4: 85 c0 test %eax,%eax -80104bf6: 78 62 js 80104c5a +801049e1: 83 ec 08 sub $0x8,%esp +801049e4: 8d 45 f4 lea -0xc(%ebp),%eax +801049e7: 50 push %eax +801049e8: 6a 00 push $0x0 +801049ea: e8 b3 f6 ff ff call 801040a2 +801049ef: 83 c4 10 add $0x10,%esp +801049f2: 85 c0 test %eax,%eax +801049f4: 78 62 js 80104a58 argint(1, &major) < 0 || -80104bf8: 83 ec 08 sub $0x8,%esp -80104bfb: 8d 45 f0 lea -0x10(%ebp),%eax -80104bfe: 50 push %eax -80104bff: 6a 01 push $0x1 -80104c01: e8 e1 f5 ff ff call 801041e7 +801049f6: 83 ec 08 sub $0x8,%esp +801049f9: 8d 45 f0 lea -0x10(%ebp),%eax +801049fc: 50 push %eax +801049fd: 6a 01 push $0x1 +801049ff: e8 1b f6 ff ff call 8010401f if((argstr(0, &path)) < 0 || -80104c06: 83 c4 10 add $0x10,%esp -80104c09: 85 c0 test %eax,%eax -80104c0b: 78 4d js 80104c5a +80104a04: 83 c4 10 add $0x10,%esp +80104a07: 85 c0 test %eax,%eax +80104a09: 78 4d js 80104a58 argint(2, &minor) < 0 || -80104c0d: 83 ec 08 sub $0x8,%esp -80104c10: 8d 45 ec lea -0x14(%ebp),%eax -80104c13: 50 push %eax -80104c14: 6a 02 push $0x2 -80104c16: e8 cc f5 ff ff call 801041e7 +80104a0b: 83 ec 08 sub $0x8,%esp +80104a0e: 8d 45 ec lea -0x14(%ebp),%eax +80104a11: 50 push %eax +80104a12: 6a 02 push $0x2 +80104a14: e8 06 f6 ff ff call 8010401f argint(1, &major) < 0 || -80104c1b: 83 c4 10 add $0x10,%esp -80104c1e: 85 c0 test %eax,%eax -80104c20: 78 38 js 80104c5a +80104a19: 83 c4 10 add $0x10,%esp +80104a1c: 85 c0 test %eax,%eax +80104a1e: 78 38 js 80104a58 (ip = create(path, T_DEV, major, minor)) == 0){ -80104c22: 0f bf 4d f0 movswl -0x10(%ebp),%ecx -80104c26: 83 ec 0c sub $0xc,%esp -80104c29: 0f bf 45 ec movswl -0x14(%ebp),%eax -80104c2d: 50 push %eax -80104c2e: ba 03 00 00 00 mov $0x3,%edx -80104c33: 8b 45 f4 mov -0xc(%ebp),%eax -80104c36: e8 64 f7 ff ff call 8010439f +80104a20: 0f bf 4d f0 movswl -0x10(%ebp),%ecx +80104a24: 83 ec 0c sub $0xc,%esp +80104a27: 0f bf 45 ec movswl -0x14(%ebp),%eax +80104a2b: 50 push %eax +80104a2c: ba 03 00 00 00 mov $0x3,%edx +80104a31: 8b 45 f4 mov -0xc(%ebp),%eax +80104a34: e8 89 f7 ff ff call 801041c2 argint(2, &minor) < 0 || -80104c3b: 83 c4 10 add $0x10,%esp -80104c3e: 85 c0 test %eax,%eax -80104c40: 74 18 je 80104c5a +80104a39: 83 c4 10 add $0x10,%esp +80104a3c: 85 c0 test %eax,%eax +80104a3e: 74 18 je 80104a58 end_op(); return -1; } iunlockput(ip); -80104c42: 83 ec 0c sub $0xc,%esp -80104c45: 50 push %eax -80104c46: e8 36 cb ff ff call 80101781 +80104a40: 83 ec 0c sub $0xc,%esp +80104a43: 50 push %eax +80104a44: e8 b3 cc ff ff call 801016fc end_op(); -80104c4b: e8 af dc ff ff call 801028ff +80104a49: e8 ab dd ff ff call 801027f9 return 0; -80104c50: 83 c4 10 add $0x10,%esp -80104c53: b8 00 00 00 00 mov $0x0,%eax +80104a4e: 83 c4 10 add $0x10,%esp +80104a51: b8 00 00 00 00 mov $0x0,%eax } -80104c58: c9 leave -80104c59: c3 ret +80104a56: c9 leave +80104a57: c3 ret end_op(); -80104c5a: e8 a0 dc ff ff call 801028ff +80104a58: e8 9c dd ff ff call 801027f9 return -1; -80104c5f: b8 ff ff ff ff mov $0xffffffff,%eax -80104c64: eb f2 jmp 80104c58 +80104a5d: b8 ff ff ff ff mov $0xffffffff,%eax +80104a62: eb f2 jmp 80104a56 -80104c66 : +80104a64 : int sys_chdir(void) { -80104c66: f3 0f 1e fb endbr32 -80104c6a: 55 push %ebp -80104c6b: 89 e5 mov %esp,%ebp -80104c6d: 56 push %esi -80104c6e: 53 push %ebx -80104c6f: 83 ec 10 sub $0x10,%esp +80104a64: 55 push %ebp +80104a65: 89 e5 mov %esp,%ebp +80104a67: 56 push %esi +80104a68: 53 push %ebx +80104a69: 83 ec 10 sub $0x10,%esp char *path; struct inode *ip; struct proc *curproc = myproc(); -80104c72: e8 73 e7 ff ff call 801033ea -80104c77: 89 c6 mov %eax,%esi +80104a6c: e8 3f e8 ff ff call 801032b0 +80104a71: 89 c6 mov %eax,%esi begin_op(); -80104c79: e8 02 dc ff ff call 80102880 +80104a73: e8 06 dd ff ff call 8010277e if(argstr(0, &path) < 0 || (ip = namei(path)) == 0){ -80104c7e: 83 ec 08 sub $0x8,%esp -80104c81: 8d 45 f4 lea -0xc(%ebp),%eax -80104c84: 50 push %eax -80104c85: 6a 00 push $0x0 -80104c87: e8 ea f5 ff ff call 80104276 -80104c8c: 83 c4 10 add $0x10,%esp -80104c8f: 85 c0 test %eax,%eax -80104c91: 78 52 js 80104ce5 -80104c93: 83 ec 0c sub $0xc,%esp -80104c96: ff 75 f4 pushl -0xc(%ebp) -80104c99: e8 46 d0 ff ff call 80101ce4 -80104c9e: 89 c3 mov %eax,%ebx -80104ca0: 83 c4 10 add $0x10,%esp -80104ca3: 85 c0 test %eax,%eax -80104ca5: 74 3e je 80104ce5 +80104a78: 83 ec 08 sub $0x8,%esp +80104a7b: 8d 45 f4 lea -0xc(%ebp),%eax +80104a7e: 50 push %eax +80104a7f: 6a 00 push $0x0 +80104a81: e8 1c f6 ff ff call 801040a2 +80104a86: 83 c4 10 add $0x10,%esp +80104a89: 85 c0 test %eax,%eax +80104a8b: 78 52 js 80104adf +80104a8d: 83 ec 0c sub $0xc,%esp +80104a90: ff 75 f4 push -0xc(%ebp) +80104a93: e8 a9 d1 ff ff call 80101c41 +80104a98: 89 c3 mov %eax,%ebx +80104a9a: 83 c4 10 add $0x10,%esp +80104a9d: 85 c0 test %eax,%eax +80104a9f: 74 3e je 80104adf end_op(); return -1; } ilock(ip); -80104ca7: 83 ec 0c sub $0xc,%esp -80104caa: 50 push %eax -80104cab: e8 7c c8 ff ff call 8010152c +80104aa1: 83 ec 0c sub $0xc,%esp +80104aa4: 50 push %eax +80104aa5: e8 09 ca ff ff call 801014b3 if(ip->type != T_DIR){ -80104cb0: 83 c4 10 add $0x10,%esp -80104cb3: 66 83 7b 50 01 cmpw $0x1,0x50(%ebx) -80104cb8: 75 37 jne 80104cf1 +80104aaa: 83 c4 10 add $0x10,%esp +80104aad: 66 83 7b 50 01 cmpw $0x1,0x50(%ebx) +80104ab2: 75 37 jne 80104aeb iunlockput(ip); end_op(); return -1; } iunlock(ip); -80104cba: 83 ec 0c sub $0xc,%esp -80104cbd: 53 push %ebx -80104cbe: e8 2f c9 ff ff call 801015f2 +80104ab4: 83 ec 0c sub $0xc,%esp +80104ab7: 53 push %ebx +80104ab8: e8 b8 ca ff ff call 80101575 iput(curproc->cwd); -80104cc3: 83 c4 04 add $0x4,%esp -80104cc6: ff 76 68 pushl 0x68(%esi) -80104cc9: e8 6d c9 ff ff call 8010163b +80104abd: 83 c4 04 add $0x4,%esp +80104ac0: ff 76 68 push 0x68(%esi) +80104ac3: e8 f2 ca ff ff call 801015ba end_op(); -80104cce: e8 2c dc ff ff call 801028ff +80104ac8: e8 2c dd ff ff call 801027f9 curproc->cwd = ip; -80104cd3: 89 5e 68 mov %ebx,0x68(%esi) +80104acd: 89 5e 68 mov %ebx,0x68(%esi) return 0; -80104cd6: 83 c4 10 add $0x10,%esp -80104cd9: b8 00 00 00 00 mov $0x0,%eax -} -80104cde: 8d 65 f8 lea -0x8(%ebp),%esp -80104ce1: 5b pop %ebx -80104ce2: 5e pop %esi -80104ce3: 5d pop %ebp -80104ce4: c3 ret +80104ad0: 83 c4 10 add $0x10,%esp +80104ad3: b8 00 00 00 00 mov $0x0,%eax +} +80104ad8: 8d 65 f8 lea -0x8(%ebp),%esp +80104adb: 5b pop %ebx +80104adc: 5e pop %esi +80104add: 5d pop %ebp +80104ade: c3 ret end_op(); -80104ce5: e8 15 dc ff ff call 801028ff +80104adf: e8 15 dd ff ff call 801027f9 return -1; -80104cea: b8 ff ff ff ff mov $0xffffffff,%eax -80104cef: eb ed jmp 80104cde +80104ae4: b8 ff ff ff ff mov $0xffffffff,%eax +80104ae9: eb ed jmp 80104ad8 iunlockput(ip); -80104cf1: 83 ec 0c sub $0xc,%esp -80104cf4: 53 push %ebx -80104cf5: e8 87 ca ff ff call 80101781 +80104aeb: 83 ec 0c sub $0xc,%esp +80104aee: 53 push %ebx +80104aef: e8 08 cc ff ff call 801016fc end_op(); -80104cfa: e8 00 dc ff ff call 801028ff +80104af4: e8 00 dd ff ff call 801027f9 return -1; -80104cff: 83 c4 10 add $0x10,%esp -80104d02: b8 ff ff ff ff mov $0xffffffff,%eax -80104d07: eb d5 jmp 80104cde +80104af9: 83 c4 10 add $0x10,%esp +80104afc: b8 ff ff ff ff mov $0xffffffff,%eax +80104b01: eb d5 jmp 80104ad8 -80104d09 : +80104b03 : int sys_exec(void) { -80104d09: f3 0f 1e fb endbr32 -80104d0d: 55 push %ebp -80104d0e: 89 e5 mov %esp,%ebp -80104d10: 57 push %edi -80104d11: 56 push %esi -80104d12: 53 push %ebx -80104d13: 81 ec a4 00 00 00 sub $0xa4,%esp +80104b03: 55 push %ebp +80104b04: 89 e5 mov %esp,%ebp +80104b06: 57 push %edi +80104b07: 56 push %esi +80104b08: 53 push %ebx +80104b09: 81 ec a4 00 00 00 sub $0xa4,%esp char *path, *argv[MAXARG]; int i; uint uargv, uarg; if(argstr(0, &path) < 0 || argint(1, (int*)&uargv) < 0){ -80104d19: 8d 45 e4 lea -0x1c(%ebp),%eax -80104d1c: 50 push %eax -80104d1d: 6a 00 push $0x0 -80104d1f: e8 52 f5 ff ff call 80104276 -80104d24: 83 c4 10 add $0x10,%esp -80104d27: 85 c0 test %eax,%eax -80104d29: 0f 88 ba 00 00 00 js 80104de9 -80104d2f: 83 ec 08 sub $0x8,%esp -80104d32: 8d 85 60 ff ff ff lea -0xa0(%ebp),%eax -80104d38: 50 push %eax -80104d39: 6a 01 push $0x1 -80104d3b: e8 a7 f4 ff ff call 801041e7 -80104d40: 83 c4 10 add $0x10,%esp -80104d43: 85 c0 test %eax,%eax -80104d45: 0f 88 a5 00 00 00 js 80104df0 +80104b0f: 8d 45 e4 lea -0x1c(%ebp),%eax +80104b12: 50 push %eax +80104b13: 6a 00 push $0x0 +80104b15: e8 88 f5 ff ff call 801040a2 +80104b1a: 83 c4 10 add $0x10,%esp +80104b1d: 85 c0 test %eax,%eax +80104b1f: 0f 88 ba 00 00 00 js 80104bdf +80104b25: 83 ec 08 sub $0x8,%esp +80104b28: 8d 85 60 ff ff ff lea -0xa0(%ebp),%eax +80104b2e: 50 push %eax +80104b2f: 6a 01 push $0x1 +80104b31: e8 e9 f4 ff ff call 8010401f +80104b36: 83 c4 10 add $0x10,%esp +80104b39: 85 c0 test %eax,%eax +80104b3b: 0f 88 a5 00 00 00 js 80104be6 return -1; } memset(argv, 0, sizeof(argv)); -80104d4b: 83 ec 04 sub $0x4,%esp -80104d4e: 68 80 00 00 00 push $0x80 -80104d53: 6a 00 push $0x0 -80104d55: 8d 85 64 ff ff ff lea -0x9c(%ebp),%eax -80104d5b: 50 push %eax -80104d5c: e8 ee f1 ff ff call 80103f4f -80104d61: 83 c4 10 add $0x10,%esp +80104b41: 83 ec 04 sub $0x4,%esp +80104b44: 68 80 00 00 00 push $0x80 +80104b49: 6a 00 push $0x0 +80104b4b: 8d 85 64 ff ff ff lea -0x9c(%ebp),%eax +80104b51: 50 push %eax +80104b52: e8 58 f2 ff ff call 80103daf +80104b57: 83 c4 10 add $0x10,%esp for(i=0;; i++){ -80104d64: be 00 00 00 00 mov $0x0,%esi +80104b5a: be 00 00 00 00 mov $0x0,%esi if(i >= NELEM(argv)) return -1; if(fetchint(uargv+4*i, (int*)&uarg) < 0) -80104d69: 8d bd 5c ff ff ff lea -0xa4(%ebp),%edi -80104d6f: 8d 1c b5 00 00 00 00 lea 0x0(,%esi,4),%ebx -80104d76: 83 ec 08 sub $0x8,%esp -80104d79: 57 push %edi -80104d7a: 89 d8 mov %ebx,%eax -80104d7c: 03 85 60 ff ff ff add -0xa0(%ebp),%eax -80104d82: 50 push %eax -80104d83: e8 d2 f3 ff ff call 8010415a -80104d88: 83 c4 10 add $0x10,%esp -80104d8b: 85 c0 test %eax,%eax -80104d8d: 78 68 js 80104df7 +80104b5f: 8d bd 5c ff ff ff lea -0xa4(%ebp),%edi +80104b65: 8d 1c b5 00 00 00 00 lea 0x0(,%esi,4),%ebx +80104b6c: 83 ec 08 sub $0x8,%esp +80104b6f: 57 push %edi +80104b70: 89 d8 mov %ebx,%eax +80104b72: 03 85 60 ff ff ff add -0xa0(%ebp),%eax +80104b78: 50 push %eax +80104b79: e8 1e f4 ff ff call 80103f9c +80104b7e: 83 c4 10 add $0x10,%esp +80104b81: 85 c0 test %eax,%eax +80104b83: 78 68 js 80104bed return -1; if(uarg == 0){ -80104d8f: 8b 85 5c ff ff ff mov -0xa4(%ebp),%eax -80104d95: 85 c0 test %eax,%eax -80104d97: 74 2e je 80104dc7 +80104b85: 8b 85 5c ff ff ff mov -0xa4(%ebp),%eax +80104b8b: 85 c0 test %eax,%eax +80104b8d: 74 2e je 80104bbd argv[i] = 0; break; } if(fetchstr(uarg, &argv[i]) < 0) -80104d99: 83 ec 08 sub $0x8,%esp -80104d9c: 8d 95 64 ff ff ff lea -0x9c(%ebp),%edx -80104da2: 01 d3 add %edx,%ebx -80104da4: 53 push %ebx -80104da5: 50 push %eax -80104da6: e8 ef f3 ff ff call 8010419a -80104dab: 83 c4 10 add $0x10,%esp -80104dae: 85 c0 test %eax,%eax -80104db0: 78 4c js 80104dfe +80104b8f: 83 ec 08 sub $0x8,%esp +80104b92: 8d 95 64 ff ff ff lea -0x9c(%ebp),%edx +80104b98: 01 d3 add %edx,%ebx +80104b9a: 53 push %ebx +80104b9b: 50 push %eax +80104b9c: e8 36 f4 ff ff call 80103fd7 +80104ba1: 83 c4 10 add $0x10,%esp +80104ba4: 85 c0 test %eax,%eax +80104ba6: 78 4c js 80104bf4 for(i=0;; i++){ -80104db2: 83 c6 01 add $0x1,%esi +80104ba8: 83 c6 01 add $0x1,%esi if(i >= NELEM(argv)) -80104db5: 83 fe 20 cmp $0x20,%esi -80104db8: 75 b5 jne 80104d6f +80104bab: 83 fe 20 cmp $0x20,%esi +80104bae: 75 b5 jne 80104b65 return -1; -80104dba: b8 ff ff ff ff mov $0xffffffff,%eax +80104bb0: b8 ff ff ff ff mov $0xffffffff,%eax return -1; } return exec(path, argv); } -80104dbf: 8d 65 f4 lea -0xc(%ebp),%esp -80104dc2: 5b pop %ebx -80104dc3: 5e pop %esi -80104dc4: 5f pop %edi -80104dc5: 5d pop %ebp -80104dc6: c3 ret +80104bb5: 8d 65 f4 lea -0xc(%ebp),%esp +80104bb8: 5b pop %ebx +80104bb9: 5e pop %esi +80104bba: 5f pop %edi +80104bbb: 5d pop %ebp +80104bbc: c3 ret argv[i] = 0; -80104dc7: c7 84 b5 64 ff ff ff movl $0x0,-0x9c(%ebp,%esi,4) -80104dce: 00 00 00 00 +80104bbd: c7 84 b5 64 ff ff ff movl $0x0,-0x9c(%ebp,%esi,4) +80104bc4: 00 00 00 00 return exec(path, argv); -80104dd2: 83 ec 08 sub $0x8,%esp -80104dd5: 8d 85 64 ff ff ff lea -0x9c(%ebp),%eax -80104ddb: 50 push %eax -80104ddc: ff 75 e4 pushl -0x1c(%ebp) -80104ddf: e8 89 bb ff ff call 8010096d -80104de4: 83 c4 10 add $0x10,%esp -80104de7: eb d6 jmp 80104dbf +80104bc8: 83 ec 08 sub $0x8,%esp +80104bcb: 8d 85 64 ff ff ff lea -0x9c(%ebp),%eax +80104bd1: 50 push %eax +80104bd2: ff 75 e4 push -0x1c(%ebp) +80104bd5: e8 5c bd ff ff call 80100936 +80104bda: 83 c4 10 add $0x10,%esp +80104bdd: eb d6 jmp 80104bb5 return -1; -80104de9: b8 ff ff ff ff mov $0xffffffff,%eax -80104dee: eb cf jmp 80104dbf -80104df0: b8 ff ff ff ff mov $0xffffffff,%eax -80104df5: eb c8 jmp 80104dbf +80104bdf: b8 ff ff ff ff mov $0xffffffff,%eax +80104be4: eb cf jmp 80104bb5 +80104be6: b8 ff ff ff ff mov $0xffffffff,%eax +80104beb: eb c8 jmp 80104bb5 return -1; -80104df7: b8 ff ff ff ff mov $0xffffffff,%eax -80104dfc: eb c1 jmp 80104dbf +80104bed: b8 ff ff ff ff mov $0xffffffff,%eax +80104bf2: eb c1 jmp 80104bb5 return -1; -80104dfe: b8 ff ff ff ff mov $0xffffffff,%eax -80104e03: eb ba jmp 80104dbf +80104bf4: b8 ff ff ff ff mov $0xffffffff,%eax +80104bf9: eb ba jmp 80104bb5 -80104e05 : +80104bfb : int sys_pipe(void) { -80104e05: f3 0f 1e fb endbr32 -80104e09: 55 push %ebp -80104e0a: 89 e5 mov %esp,%ebp -80104e0c: 53 push %ebx -80104e0d: 83 ec 18 sub $0x18,%esp +80104bfb: 55 push %ebp +80104bfc: 89 e5 mov %esp,%ebp +80104bfe: 53 push %ebx +80104bff: 83 ec 18 sub $0x18,%esp int *fd; struct file *rf, *wf; int fd0, fd1; if(argptr(0, (void*)&fd, 2*sizeof(fd[0])) < 0) -80104e10: 6a 08 push $0x8 -80104e12: 8d 45 f4 lea -0xc(%ebp),%eax -80104e15: 50 push %eax -80104e16: 6a 00 push $0x0 -80104e18: e8 f4 f3 ff ff call 80104211 -80104e1d: 83 c4 10 add $0x10,%esp -80104e20: 85 c0 test %eax,%eax -80104e22: 78 46 js 80104e6a +80104c02: 6a 08 push $0x8 +80104c04: 8d 45 f4 lea -0xc(%ebp),%eax +80104c07: 50 push %eax +80104c08: 6a 00 push $0x0 +80104c0a: e8 36 f4 ff ff call 80104045 +80104c0f: 83 c4 10 add $0x10,%esp +80104c12: 85 c0 test %eax,%eax +80104c14: 78 46 js 80104c5c return -1; if(pipealloc(&rf, &wf) < 0) -80104e24: 83 ec 08 sub $0x8,%esp -80104e27: 8d 45 ec lea -0x14(%ebp),%eax -80104e2a: 50 push %eax -80104e2b: 8d 45 f0 lea -0x10(%ebp),%eax -80104e2e: 50 push %eax -80104e2f: e8 82 e0 ff ff call 80102eb6 -80104e34: 83 c4 10 add $0x10,%esp -80104e37: 85 c0 test %eax,%eax -80104e39: 78 36 js 80104e71 +80104c16: 83 ec 08 sub $0x8,%esp +80104c19: 8d 45 ec lea -0x14(%ebp),%eax +80104c1c: 50 push %eax +80104c1d: 8d 45 f0 lea -0x10(%ebp),%eax +80104c20: 50 push %eax +80104c21: e8 7c e1 ff ff call 80102da2 +80104c26: 83 c4 10 add $0x10,%esp +80104c29: 85 c0 test %eax,%eax +80104c2b: 78 36 js 80104c63 return -1; fd0 = -1; if((fd0 = fdalloc(rf)) < 0 || (fd1 = fdalloc(wf)) < 0){ -80104e3b: 8b 45 f0 mov -0x10(%ebp),%eax -80104e3e: e8 27 f5 ff ff call 8010436a -80104e43: 89 c3 mov %eax,%ebx -80104e45: 85 c0 test %eax,%eax -80104e47: 78 3c js 80104e85 -80104e49: 8b 45 ec mov -0x14(%ebp),%eax -80104e4c: e8 19 f5 ff ff call 8010436a -80104e51: 85 c0 test %eax,%eax -80104e53: 78 23 js 80104e78 +80104c2d: 8b 45 f0 mov -0x10(%ebp),%eax +80104c30: e8 59 f5 ff ff call 8010418e +80104c35: 89 c3 mov %eax,%ebx +80104c37: 85 c0 test %eax,%eax +80104c39: 78 3c js 80104c77 +80104c3b: 8b 45 ec mov -0x14(%ebp),%eax +80104c3e: e8 4b f5 ff ff call 8010418e +80104c43: 85 c0 test %eax,%eax +80104c45: 78 23 js 80104c6a myproc()->ofile[fd0] = 0; fileclose(rf); fileclose(wf); return -1; } fd[0] = fd0; -80104e55: 8b 55 f4 mov -0xc(%ebp),%edx -80104e58: 89 1a mov %ebx,(%edx) +80104c47: 8b 55 f4 mov -0xc(%ebp),%edx +80104c4a: 89 1a mov %ebx,(%edx) fd[1] = fd1; -80104e5a: 8b 55 f4 mov -0xc(%ebp),%edx -80104e5d: 89 42 04 mov %eax,0x4(%edx) +80104c4c: 8b 55 f4 mov -0xc(%ebp),%edx +80104c4f: 89 42 04 mov %eax,0x4(%edx) return 0; -80104e60: b8 00 00 00 00 mov $0x0,%eax +80104c52: b8 00 00 00 00 mov $0x0,%eax } -80104e65: 8b 5d fc mov -0x4(%ebp),%ebx -80104e68: c9 leave -80104e69: c3 ret +80104c57: 8b 5d fc mov -0x4(%ebp),%ebx +80104c5a: c9 leave +80104c5b: c3 ret return -1; -80104e6a: b8 ff ff ff ff mov $0xffffffff,%eax -80104e6f: eb f4 jmp 80104e65 +80104c5c: b8 ff ff ff ff mov $0xffffffff,%eax +80104c61: eb f4 jmp 80104c57 return -1; -80104e71: b8 ff ff ff ff mov $0xffffffff,%eax -80104e76: eb ed jmp 80104e65 +80104c63: b8 ff ff ff ff mov $0xffffffff,%eax +80104c68: eb ed jmp 80104c57 myproc()->ofile[fd0] = 0; -80104e78: e8 6d e5 ff ff call 801033ea -80104e7d: c7 44 98 28 00 00 00 movl $0x0,0x28(%eax,%ebx,4) -80104e84: 00 +80104c6a: e8 41 e6 ff ff call 801032b0 +80104c6f: c7 44 98 28 00 00 00 movl $0x0,0x28(%eax,%ebx,4) +80104c76: 00 fileclose(rf); -80104e85: 83 ec 0c sub $0xc,%esp -80104e88: ff 75 f0 pushl -0x10(%ebp) -80104e8b: e8 f1 be ff ff call 80100d81 +80104c77: 83 ec 0c sub $0xc,%esp +80104c7a: ff 75 f0 push -0x10(%ebp) +80104c7d: e8 b7 c0 ff ff call 80100d39 fileclose(wf); -80104e90: 83 c4 04 add $0x4,%esp -80104e93: ff 75 ec pushl -0x14(%ebp) -80104e96: e8 e6 be ff ff call 80100d81 +80104c82: 83 c4 04 add $0x4,%esp +80104c85: ff 75 ec push -0x14(%ebp) +80104c88: e8 ac c0 ff ff call 80100d39 return -1; -80104e9b: 83 c4 10 add $0x10,%esp -80104e9e: b8 ff ff ff ff mov $0xffffffff,%eax -80104ea3: eb c0 jmp 80104e65 +80104c8d: 83 c4 10 add $0x10,%esp +80104c90: b8 ff ff ff ff mov $0xffffffff,%eax +80104c95: eb c0 jmp 80104c57 -80104ea5 : +80104c97 : #include "mmu.h" #include "proc.h" int sys_fork(void) { -80104ea5: f3 0f 1e fb endbr32 -80104ea9: 55 push %ebp -80104eaa: 89 e5 mov %esp,%ebp -80104eac: 83 ec 08 sub $0x8,%esp +80104c97: 55 push %ebp +80104c98: 89 e5 mov %esp,%ebp +80104c9a: 83 ec 08 sub $0x8,%esp return fork(); -80104eaf: e8 b8 e6 ff ff call 8010356c +80104c9d: e8 83 e7 ff ff call 80103425 } -80104eb4: c9 leave -80104eb5: c3 ret +80104ca2: c9 leave +80104ca3: c3 ret -80104eb6 : +80104ca4 : int sys_exit(void) { -80104eb6: f3 0f 1e fb endbr32 -80104eba: 55 push %ebp -80104ebb: 89 e5 mov %esp,%ebp -80104ebd: 83 ec 08 sub $0x8,%esp +80104ca4: 55 push %ebp +80104ca5: 89 e5 mov %esp,%ebp +80104ca7: 83 ec 08 sub $0x8,%esp exit(); -80104ec0: e8 ee e8 ff ff call 801037b3 +80104caa: e8 b1 e9 ff ff call 80103660 return 0; // not reached } -80104ec5: b8 00 00 00 00 mov $0x0,%eax -80104eca: c9 leave -80104ecb: c3 ret +80104caf: b8 00 00 00 00 mov $0x0,%eax +80104cb4: c9 leave +80104cb5: c3 ret -80104ecc : +80104cb6 : int sys_wait(void) { -80104ecc: f3 0f 1e fb endbr32 -80104ed0: 55 push %ebp -80104ed1: 89 e5 mov %esp,%ebp -80104ed3: 83 ec 08 sub $0x8,%esp +80104cb6: 55 push %ebp +80104cb7: 89 e5 mov %esp,%ebp +80104cb9: 83 ec 08 sub $0x8,%esp return wait(); -80104ed6: e8 7d ea ff ff call 80103958 +80104cbc: e8 38 eb ff ff call 801037f9 } -80104edb: c9 leave -80104edc: c3 ret +80104cc1: c9 leave +80104cc2: c3 ret -80104edd : +80104cc3 : int sys_kill(void) { -80104edd: f3 0f 1e fb endbr32 -80104ee1: 55 push %ebp -80104ee2: 89 e5 mov %esp,%ebp -80104ee4: 83 ec 20 sub $0x20,%esp +80104cc3: 55 push %ebp +80104cc4: 89 e5 mov %esp,%ebp +80104cc6: 83 ec 20 sub $0x20,%esp int pid; if(argint(0, &pid) < 0) -80104ee7: 8d 45 f4 lea -0xc(%ebp),%eax -80104eea: 50 push %eax -80104eeb: 6a 00 push $0x0 -80104eed: e8 f5 f2 ff ff call 801041e7 -80104ef2: 83 c4 10 add $0x10,%esp -80104ef5: 85 c0 test %eax,%eax -80104ef7: 78 10 js 80104f09 +80104cc9: 8d 45 f4 lea -0xc(%ebp),%eax +80104ccc: 50 push %eax +80104ccd: 6a 00 push $0x0 +80104ccf: e8 4b f3 ff ff call 8010401f +80104cd4: 83 c4 10 add $0x10,%esp +80104cd7: 85 c0 test %eax,%eax +80104cd9: 78 10 js 80104ceb return -1; return kill(pid); -80104ef9: 83 ec 0c sub $0xc,%esp -80104efc: ff 75 f4 pushl -0xc(%ebp) -80104eff: e8 63 eb ff ff call 80103a67 -80104f04: 83 c4 10 add $0x10,%esp +80104cdb: 83 ec 0c sub $0xc,%esp +80104cde: ff 75 f4 push -0xc(%ebp) +80104ce1: e8 1a ec ff ff call 80103900 +80104ce6: 83 c4 10 add $0x10,%esp } -80104f07: c9 leave -80104f08: c3 ret +80104ce9: c9 leave +80104cea: c3 ret return -1; -80104f09: b8 ff ff ff ff mov $0xffffffff,%eax -80104f0e: eb f7 jmp 80104f07 +80104ceb: b8 ff ff ff ff mov $0xffffffff,%eax +80104cf0: eb f7 jmp 80104ce9 -80104f10 : +80104cf2 : int sys_getpid(void) { -80104f10: f3 0f 1e fb endbr32 -80104f14: 55 push %ebp -80104f15: 89 e5 mov %esp,%ebp -80104f17: 83 ec 08 sub $0x8,%esp +80104cf2: 55 push %ebp +80104cf3: 89 e5 mov %esp,%ebp +80104cf5: 83 ec 08 sub $0x8,%esp return myproc()->pid; -80104f1a: e8 cb e4 ff ff call 801033ea -80104f1f: 8b 40 10 mov 0x10(%eax),%eax +80104cf8: e8 b3 e5 ff ff call 801032b0 +80104cfd: 8b 40 10 mov 0x10(%eax),%eax } -80104f22: c9 leave -80104f23: c3 ret +80104d00: c9 leave +80104d01: c3 ret -80104f24 : +80104d02 : int sys_sbrk(void) { -80104f24: f3 0f 1e fb endbr32 -80104f28: 55 push %ebp -80104f29: 89 e5 mov %esp,%ebp -80104f2b: 53 push %ebx -80104f2c: 83 ec 1c sub $0x1c,%esp +80104d02: 55 push %ebp +80104d03: 89 e5 mov %esp,%ebp +80104d05: 53 push %ebx +80104d06: 83 ec 1c sub $0x1c,%esp int addr; int n; if(argint(0, &n) < 0) -80104f2f: 8d 45 f4 lea -0xc(%ebp),%eax -80104f32: 50 push %eax -80104f33: 6a 00 push $0x0 -80104f35: e8 ad f2 ff ff call 801041e7 -80104f3a: 83 c4 10 add $0x10,%esp -80104f3d: 85 c0 test %eax,%eax -80104f3f: 78 26 js 80104f67 +80104d09: 8d 45 f4 lea -0xc(%ebp),%eax +80104d0c: 50 push %eax +80104d0d: 6a 00 push $0x0 +80104d0f: e8 0b f3 ff ff call 8010401f +80104d14: 83 c4 10 add $0x10,%esp +80104d17: 85 c0 test %eax,%eax +80104d19: 78 26 js 80104d41 return -1; addr = myproc()->sz; -80104f41: e8 a4 e4 ff ff call 801033ea -80104f46: 8b 18 mov (%eax),%ebx +80104d1b: e8 90 e5 ff ff call 801032b0 +80104d20: 8b 18 mov (%eax),%ebx if(growproc(n) < 0) -80104f48: 83 ec 0c sub $0xc,%esp -80104f4b: ff 75 f4 pushl -0xc(%ebp) -80104f4e: e8 aa e5 ff ff call 801034fd -80104f53: 83 c4 10 add $0x10,%esp +80104d22: 83 ec 0c sub $0xc,%esp +80104d25: ff 75 f4 push -0xc(%ebp) +80104d28: e8 8d e6 ff ff call 801033ba +80104d2d: 83 c4 10 add $0x10,%esp return -1; -80104f56: 85 c0 test %eax,%eax -80104f58: b8 ff ff ff ff mov $0xffffffff,%eax -80104f5d: 0f 48 d8 cmovs %eax,%ebx +80104d30: 85 c0 test %eax,%eax +80104d32: b8 ff ff ff ff mov $0xffffffff,%eax +80104d37: 0f 48 d8 cmovs %eax,%ebx return addr; } -80104f60: 89 d8 mov %ebx,%eax -80104f62: 8b 5d fc mov -0x4(%ebp),%ebx -80104f65: c9 leave -80104f66: c3 ret +80104d3a: 89 d8 mov %ebx,%eax +80104d3c: 8b 5d fc mov -0x4(%ebp),%ebx +80104d3f: c9 leave +80104d40: c3 ret return -1; -80104f67: bb ff ff ff ff mov $0xffffffff,%ebx -80104f6c: eb f2 jmp 80104f60 +80104d41: bb ff ff ff ff mov $0xffffffff,%ebx +80104d46: eb f2 jmp 80104d3a -80104f6e : +80104d48 : int sys_sleep(void) { -80104f6e: f3 0f 1e fb endbr32 -80104f72: 55 push %ebp -80104f73: 89 e5 mov %esp,%ebp -80104f75: 53 push %ebx -80104f76: 83 ec 1c sub $0x1c,%esp +80104d48: 55 push %ebp +80104d49: 89 e5 mov %esp,%ebp +80104d4b: 53 push %ebx +80104d4c: 83 ec 1c sub $0x1c,%esp int n; uint ticks0; if(argint(0, &n) < 0) -80104f79: 8d 45 f4 lea -0xc(%ebp),%eax -80104f7c: 50 push %eax -80104f7d: 6a 00 push $0x0 -80104f7f: e8 63 f2 ff ff call 801041e7 -80104f84: 83 c4 10 add $0x10,%esp -80104f87: 85 c0 test %eax,%eax -80104f89: 78 79 js 80105004 +80104d4f: 8d 45 f4 lea -0xc(%ebp),%eax +80104d52: 50 push %eax +80104d53: 6a 00 push $0x0 +80104d55: e8 c5 f2 ff ff call 8010401f +80104d5a: 83 c4 10 add $0x10,%esp +80104d5d: 85 c0 test %eax,%eax +80104d5f: 78 79 js 80104dda return -1; acquire(&tickslock); -80104f8b: 83 ec 0c sub $0xc,%esp -80104f8e: 68 c0 61 11 80 push $0x801161c0 -80104f93: e8 01 ef ff ff call 80103e99 +80104d61: 83 ec 0c sub $0xc,%esp +80104d64: 68 c0 35 11 80 push $0x801135c0 +80104d69: e8 93 ef ff ff call 80103d01 ticks0 = ticks; -80104f98: 8b 1d 00 6a 11 80 mov 0x80116a00,%ebx +80104d6e: 8b 1d a0 35 11 80 mov 0x801135a0,%ebx while(ticks - ticks0 < n){ -80104f9e: 83 c4 10 add $0x10,%esp -80104fa1: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) -80104fa5: 74 2c je 80104fd3 +80104d74: 83 c4 10 add $0x10,%esp +80104d77: 83 7d f4 00 cmpl $0x0,-0xc(%ebp) +80104d7b: 74 2c je 80104da9 if(myproc()->killed){ -80104fa7: e8 3e e4 ff ff call 801033ea -80104fac: 83 78 24 00 cmpl $0x0,0x24(%eax) -80104fb0: 75 3b jne 80104fed +80104d7d: e8 2e e5 ff ff call 801032b0 +80104d82: 83 78 24 00 cmpl $0x0,0x24(%eax) +80104d86: 75 3b jne 80104dc3 release(&tickslock); return -1; } sleep(&ticks, &tickslock); -80104fb2: 83 ec 08 sub $0x8,%esp -80104fb5: 68 c0 61 11 80 push $0x801161c0 -80104fba: 68 00 6a 11 80 push $0x80116a00 -80104fbf: e8 f0 e8 ff ff call 801038b4 +80104d88: 83 ec 08 sub $0x8,%esp +80104d8b: 68 c0 35 11 80 push $0x801135c0 +80104d90: 68 a0 35 11 80 push $0x801135a0 +80104d95: e8 bf e9 ff ff call 80103759 while(ticks - ticks0 < n){ -80104fc4: a1 00 6a 11 80 mov 0x80116a00,%eax -80104fc9: 29 d8 sub %ebx,%eax -80104fcb: 83 c4 10 add $0x10,%esp -80104fce: 3b 45 f4 cmp -0xc(%ebp),%eax -80104fd1: 72 d4 jb 80104fa7 +80104d9a: a1 a0 35 11 80 mov 0x801135a0,%eax +80104d9f: 29 d8 sub %ebx,%eax +80104da1: 83 c4 10 add $0x10,%esp +80104da4: 3b 45 f4 cmp -0xc(%ebp),%eax +80104da7: 72 d4 jb 80104d7d } release(&tickslock); -80104fd3: 83 ec 0c sub $0xc,%esp -80104fd6: 68 c0 61 11 80 push $0x801161c0 -80104fdb: e8 24 ef ff ff call 80103f04 +80104da9: 83 ec 0c sub $0xc,%esp +80104dac: 68 c0 35 11 80 push $0x801135c0 +80104db1: e8 b2 ef ff ff call 80103d68 return 0; -80104fe0: 83 c4 10 add $0x10,%esp -80104fe3: b8 00 00 00 00 mov $0x0,%eax +80104db6: 83 c4 10 add $0x10,%esp +80104db9: b8 00 00 00 00 mov $0x0,%eax } -80104fe8: 8b 5d fc mov -0x4(%ebp),%ebx -80104feb: c9 leave -80104fec: c3 ret +80104dbe: 8b 5d fc mov -0x4(%ebp),%ebx +80104dc1: c9 leave +80104dc2: c3 ret release(&tickslock); -80104fed: 83 ec 0c sub $0xc,%esp -80104ff0: 68 c0 61 11 80 push $0x801161c0 -80104ff5: e8 0a ef ff ff call 80103f04 +80104dc3: 83 ec 0c sub $0xc,%esp +80104dc6: 68 c0 35 11 80 push $0x801135c0 +80104dcb: e8 98 ef ff ff call 80103d68 return -1; -80104ffa: 83 c4 10 add $0x10,%esp -80104ffd: b8 ff ff ff ff mov $0xffffffff,%eax -80105002: eb e4 jmp 80104fe8 +80104dd0: 83 c4 10 add $0x10,%esp +80104dd3: b8 ff ff ff ff mov $0xffffffff,%eax +80104dd8: eb e4 jmp 80104dbe return -1; -80105004: b8 ff ff ff ff mov $0xffffffff,%eax -80105009: eb dd jmp 80104fe8 +80104dda: b8 ff ff ff ff mov $0xffffffff,%eax +80104ddf: eb dd jmp 80104dbe -8010500b : +80104de1 : // return how many clock tick interrupts have occurred // since start. int sys_uptime(void) { -8010500b: f3 0f 1e fb endbr32 -8010500f: 55 push %ebp -80105010: 89 e5 mov %esp,%ebp -80105012: 53 push %ebx -80105013: 83 ec 10 sub $0x10,%esp +80104de1: 55 push %ebp +80104de2: 89 e5 mov %esp,%ebp +80104de4: 53 push %ebx +80104de5: 83 ec 10 sub $0x10,%esp uint xticks; acquire(&tickslock); -80105016: 68 c0 61 11 80 push $0x801161c0 -8010501b: e8 79 ee ff ff call 80103e99 +80104de8: 68 c0 35 11 80 push $0x801135c0 +80104ded: e8 0f ef ff ff call 80103d01 xticks = ticks; -80105020: 8b 1d 00 6a 11 80 mov 0x80116a00,%ebx +80104df2: 8b 1d a0 35 11 80 mov 0x801135a0,%ebx release(&tickslock); -80105026: c7 04 24 c0 61 11 80 movl $0x801161c0,(%esp) -8010502d: e8 d2 ee ff ff call 80103f04 +80104df8: c7 04 24 c0 35 11 80 movl $0x801135c0,(%esp) +80104dff: e8 64 ef ff ff call 80103d68 return xticks; } -80105032: 89 d8 mov %ebx,%eax -80105034: 8b 5d fc mov -0x4(%ebp),%ebx -80105037: c9 leave -80105038: c3 ret +80104e04: 89 d8 mov %ebx,%eax +80104e06: 8b 5d fc mov -0x4(%ebp),%ebx +80104e09: c9 leave +80104e0a: c3 ret -80105039 : +80104e0b : int sys_ps(void) { -80105039: f3 0f 1e fb endbr32 -8010503d: 55 push %ebp -8010503e: 89 e5 mov %esp,%ebp -80105040: 83 ec 08 sub $0x8,%esp +80104e0b: 55 push %ebp +80104e0c: 89 e5 mov %esp,%ebp +80104e0e: 83 ec 08 sub $0x8,%esp ps(); -80105043: e8 4f eb ff ff call 80103b97 +80104e11: e8 12 ec ff ff call 80103a28 return 0; } -80105048: b8 00 00 00 00 mov $0x0,%eax -8010504d: c9 leave -8010504e: c3 ret +80104e16: b8 00 00 00 00 mov $0x0,%eax +80104e1b: c9 leave +80104e1c: c3 ret -8010504f : +80104e1d : # vectors.S sends all traps here. .globl alltraps alltraps: # Build trap frame. pushl %ds -8010504f: 1e push %ds +80104e1d: 1e push %ds pushl %es -80105050: 06 push %es +80104e1e: 06 push %es pushl %fs -80105051: 0f a0 push %fs +80104e1f: 0f a0 push %fs pushl %gs -80105053: 0f a8 push %gs +80104e21: 0f a8 push %gs pushal -80105055: 60 pusha +80104e23: 60 pusha # Set up data segments. movw $(SEG_KDATA<<3), %ax -80105056: 66 b8 10 00 mov $0x10,%ax +80104e24: 66 b8 10 00 mov $0x10,%ax movw %ax, %ds -8010505a: 8e d8 mov %eax,%ds +80104e28: 8e d8 mov %eax,%ds movw %ax, %es -8010505c: 8e c0 mov %eax,%es +80104e2a: 8e c0 mov %eax,%es # Call trap(tf), where tf=%esp pushl %esp -8010505e: 54 push %esp +80104e2c: 54 push %esp call trap -8010505f: e8 c5 00 00 00 call 80105129 +80104e2d: e8 bd 00 00 00 call 80104eef addl $4, %esp -80105064: 83 c4 04 add $0x4,%esp +80104e32: 83 c4 04 add $0x4,%esp -80105067 : +80104e35 : # Return falls through to trapret... .globl trapret trapret: popal -80105067: 61 popa +80104e35: 61 popa popl %gs -80105068: 0f a9 pop %gs +80104e36: 0f a9 pop %gs popl %fs -8010506a: 0f a1 pop %fs +80104e38: 0f a1 pop %fs popl %es -8010506c: 07 pop %es +80104e3a: 07 pop %es popl %ds -8010506d: 1f pop %ds +80104e3b: 1f pop %ds addl $0x8, %esp # trapno and errcode -8010506e: 83 c4 08 add $0x8,%esp +80104e3c: 83 c4 08 add $0x8,%esp iret -80105071: cf iret +80104e3f: cf iret -80105072 : +80104e40 : struct spinlock tickslock; uint ticks; void tvinit(void) { -80105072: f3 0f 1e fb endbr32 -80105076: 55 push %ebp -80105077: 89 e5 mov %esp,%ebp -80105079: 83 ec 08 sub $0x8,%esp +80104e40: 55 push %ebp +80104e41: 89 e5 mov %esp,%ebp +80104e43: 83 ec 08 sub $0x8,%esp int i; for(i = 0; i < 256; i++) -8010507c: b8 00 00 00 00 mov $0x0,%eax +80104e46: b8 00 00 00 00 mov $0x0,%eax SETGATE(idt[i], 0, SEG_KCODE<<3, vectors[i], 0); -80105081: 8b 14 85 08 b0 10 80 mov -0x7fef4ff8(,%eax,4),%edx -80105088: 66 89 14 c5 00 62 11 mov %dx,-0x7fee9e00(,%eax,8) -8010508f: 80 -80105090: 66 c7 04 c5 02 62 11 movw $0x8,-0x7fee9dfe(,%eax,8) -80105097: 80 08 00 -8010509a: c6 04 c5 04 62 11 80 movb $0x0,-0x7fee9dfc(,%eax,8) -801050a1: 00 -801050a2: c6 04 c5 05 62 11 80 movb $0x8e,-0x7fee9dfb(,%eax,8) -801050a9: 8e -801050aa: c1 ea 10 shr $0x10,%edx -801050ad: 66 89 14 c5 06 62 11 mov %dx,-0x7fee9dfa(,%eax,8) -801050b4: 80 +80104e4b: 8b 14 85 08 b0 10 80 mov -0x7fef4ff8(,%eax,4),%edx +80104e52: 66 89 14 c5 00 36 11 mov %dx,-0x7feeca00(,%eax,8) +80104e59: 80 +80104e5a: 66 c7 04 c5 02 36 11 movw $0x8,-0x7feec9fe(,%eax,8) +80104e61: 80 08 00 +80104e64: c6 04 c5 04 36 11 80 movb $0x0,-0x7feec9fc(,%eax,8) +80104e6b: 00 +80104e6c: c6 04 c5 05 36 11 80 movb $0x8e,-0x7feec9fb(,%eax,8) +80104e73: 8e +80104e74: c1 ea 10 shr $0x10,%edx +80104e77: 66 89 14 c5 06 36 11 mov %dx,-0x7feec9fa(,%eax,8) +80104e7e: 80 for(i = 0; i < 256; i++) -801050b5: 83 c0 01 add $0x1,%eax -801050b8: 3d 00 01 00 00 cmp $0x100,%eax -801050bd: 75 c2 jne 80105081 +80104e7f: 83 c0 01 add $0x1,%eax +80104e82: 3d 00 01 00 00 cmp $0x100,%eax +80104e87: 75 c2 jne 80104e4b SETGATE(idt[T_SYSCALL], 1, SEG_KCODE<<3, vectors[T_SYSCALL], DPL_USER); -801050bf: a1 08 b1 10 80 mov 0x8010b108,%eax -801050c4: 66 a3 00 64 11 80 mov %ax,0x80116400 -801050ca: 66 c7 05 02 64 11 80 movw $0x8,0x80116402 -801050d1: 08 00 -801050d3: c6 05 04 64 11 80 00 movb $0x0,0x80116404 -801050da: c6 05 05 64 11 80 ef movb $0xef,0x80116405 -801050e1: c1 e8 10 shr $0x10,%eax -801050e4: 66 a3 06 64 11 80 mov %ax,0x80116406 +80104e89: a1 08 b1 10 80 mov 0x8010b108,%eax +80104e8e: 66 a3 00 38 11 80 mov %ax,0x80113800 +80104e94: 66 c7 05 02 38 11 80 movw $0x8,0x80113802 +80104e9b: 08 00 +80104e9d: c6 05 04 38 11 80 00 movb $0x0,0x80113804 +80104ea4: c6 05 05 38 11 80 ef movb $0xef,0x80113805 +80104eab: c1 e8 10 shr $0x10,%eax +80104eae: 66 a3 06 38 11 80 mov %ax,0x80113806 initlock(&tickslock, "time"); -801050ea: 83 ec 08 sub $0x8,%esp -801050ed: 68 41 80 10 80 push $0x80108041 -801050f2: 68 c0 61 11 80 push $0x801161c0 -801050f7: e8 41 ec ff ff call 80103d3d +80104eb4: 83 ec 08 sub $0x8,%esp +80104eb7: 68 61 7d 10 80 push $0x80107d61 +80104ebc: 68 c0 35 11 80 push $0x801135c0 +80104ec1: e8 f2 ec ff ff call 80103bb8 } -801050fc: 83 c4 10 add $0x10,%esp -801050ff: c9 leave -80105100: c3 ret +80104ec6: 83 c4 10 add $0x10,%esp +80104ec9: c9 leave +80104eca: c3 ret -80105101 : +80104ecb : void idtinit(void) { -80105101: f3 0f 1e fb endbr32 -80105105: 55 push %ebp -80105106: 89 e5 mov %esp,%ebp -80105108: 83 ec 10 sub $0x10,%esp +80104ecb: 55 push %ebp +80104ecc: 89 e5 mov %esp,%ebp +80104ece: 83 ec 10 sub $0x10,%esp pd[0] = size-1; -8010510b: 66 c7 45 fa ff 07 movw $0x7ff,-0x6(%ebp) +80104ed1: 66 c7 45 fa ff 07 movw $0x7ff,-0x6(%ebp) pd[1] = (uint)p; -80105111: b8 00 62 11 80 mov $0x80116200,%eax -80105116: 66 89 45 fc mov %ax,-0x4(%ebp) +80104ed7: b8 00 36 11 80 mov $0x80113600,%eax +80104edc: 66 89 45 fc mov %ax,-0x4(%ebp) pd[2] = (uint)p >> 16; -8010511a: c1 e8 10 shr $0x10,%eax -8010511d: 66 89 45 fe mov %ax,-0x2(%ebp) +80104ee0: c1 e8 10 shr $0x10,%eax +80104ee3: 66 89 45 fe mov %ax,-0x2(%ebp) asm volatile("lidt (%0)" : : "r" (pd)); -80105121: 8d 45 fa lea -0x6(%ebp),%eax -80105124: 0f 01 18 lidtl (%eax) +80104ee7: 8d 45 fa lea -0x6(%ebp),%eax +80104eea: 0f 01 18 lidtl (%eax) lidt(idt, sizeof(idt)); } -80105127: c9 leave -80105128: c3 ret +80104eed: c9 leave +80104eee: c3 ret -80105129 : +80104eef : //PAGEBREAK: 41 void trap(struct trapframe *tf) { -80105129: f3 0f 1e fb endbr32 -8010512d: 55 push %ebp -8010512e: 89 e5 mov %esp,%ebp -80105130: 57 push %edi -80105131: 56 push %esi -80105132: 53 push %ebx -80105133: 83 ec 1c sub $0x1c,%esp -80105136: 8b 5d 08 mov 0x8(%ebp),%ebx +80104eef: 55 push %ebp +80104ef0: 89 e5 mov %esp,%ebp +80104ef2: 57 push %edi +80104ef3: 56 push %esi +80104ef4: 53 push %ebx +80104ef5: 83 ec 1c sub $0x1c,%esp +80104ef8: 8b 5d 08 mov 0x8(%ebp),%ebx if(tf->trapno == T_SYSCALL){ -80105139: 8b 43 30 mov 0x30(%ebx),%eax -8010513c: 83 f8 40 cmp $0x40,%eax -8010513f: 74 14 je 80105155 +80104efb: 8b 43 30 mov 0x30(%ebx),%eax +80104efe: 83 f8 40 cmp $0x40,%eax +80104f01: 74 13 je 80104f16 if(myproc()->killed) exit(); return; } switch(tf->trapno){ -80105141: 83 e8 20 sub $0x20,%eax -80105144: 83 f8 1f cmp $0x1f,%eax -80105147: 0f 87 38 01 00 00 ja 80105285 -8010514d: 3e ff 24 85 e8 80 10 notrack jmp *-0x7fef7f18(,%eax,4) -80105154: 80 +80104f03: 83 e8 20 sub $0x20,%eax +80104f06: 83 f8 1f cmp $0x1f,%eax +80104f09: 0f 87 37 01 00 00 ja 80105046 +80104f0f: ff 24 85 08 7e 10 80 jmp *-0x7fef81f8(,%eax,4) if(myproc()->killed) -80105155: e8 90 e2 ff ff call 801033ea -8010515a: 83 78 24 00 cmpl $0x0,0x24(%eax) -8010515e: 75 1f jne 8010517f +80104f16: e8 95 e3 ff ff call 801032b0 +80104f1b: 83 78 24 00 cmpl $0x0,0x24(%eax) +80104f1f: 75 1f jne 80104f40 myproc()->tf = tf; -80105160: e8 85 e2 ff ff call 801033ea -80105165: 89 58 18 mov %ebx,0x18(%eax) +80104f21: e8 8a e3 ff ff call 801032b0 +80104f26: 89 58 18 mov %ebx,0x18(%eax) syscall(); -80105168: e8 40 f1 ff ff call 801042ad +80104f29: e8 a7 f1 ff ff call 801040d5 if(myproc()->killed) -8010516d: e8 78 e2 ff ff call 801033ea -80105172: 83 78 24 00 cmpl $0x0,0x24(%eax) -80105176: 74 7e je 801051f6 +80104f2e: e8 7d e3 ff ff call 801032b0 +80104f33: 83 78 24 00 cmpl $0x0,0x24(%eax) +80104f37: 74 7e je 80104fb7 exit(); -80105178: e8 36 e6 ff ff call 801037b3 -8010517d: eb 77 jmp 801051f6 +80104f39: e8 22 e7 ff ff call 80103660 +80104f3e: eb 77 jmp 80104fb7 exit(); -8010517f: e8 2f e6 ff ff call 801037b3 -80105184: eb da jmp 80105160 +80104f40: e8 1b e7 ff ff call 80103660 +80104f45: eb da jmp 80104f21 case T_IRQ0 + IRQ_TIMER: if(cpuid() == 0){ -80105186: e8 40 e2 ff ff call 801033cb -8010518b: 85 c0 test %eax,%eax -8010518d: 74 6f je 801051fe +80104f47: e8 49 e3 ff ff call 80103295 +80104f4c: 85 c0 test %eax,%eax +80104f4e: 74 6f je 80104fbf acquire(&tickslock); ticks++; wakeup(&ticks); release(&tickslock); } lapiceoi(); -8010518f: e8 8a d3 ff ff call 8010251e +80104f50: e8 db d4 ff ff call 80102430 } // 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) -80105194: e8 51 e2 ff ff call 801033ea -80105199: 85 c0 test %eax,%eax -8010519b: 74 1c je 801051b9 -8010519d: e8 48 e2 ff ff call 801033ea -801051a2: 83 78 24 00 cmpl $0x0,0x24(%eax) -801051a6: 74 11 je 801051b9 -801051a8: 0f b7 43 3c movzwl 0x3c(%ebx),%eax -801051ac: 83 e0 03 and $0x3,%eax -801051af: 66 83 f8 03 cmp $0x3,%ax -801051b3: 0f 84 62 01 00 00 je 8010531b +80104f55: e8 56 e3 ff ff call 801032b0 +80104f5a: 85 c0 test %eax,%eax +80104f5c: 74 1c je 80104f7a +80104f5e: e8 4d e3 ff ff call 801032b0 +80104f63: 83 78 24 00 cmpl $0x0,0x24(%eax) +80104f67: 74 11 je 80104f7a +80104f69: 0f b7 43 3c movzwl 0x3c(%ebx),%eax +80104f6d: 83 e0 03 and $0x3,%eax +80104f70: 66 83 f8 03 cmp $0x3,%ax +80104f74: 0f 84 62 01 00 00 je 801050dc 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 && -801051b9: e8 2c e2 ff ff call 801033ea -801051be: 85 c0 test %eax,%eax -801051c0: 74 0f je 801051d1 -801051c2: e8 23 e2 ff ff call 801033ea -801051c7: 83 78 0c 04 cmpl $0x4,0xc(%eax) -801051cb: 0f 84 54 01 00 00 je 80105325 +80104f7a: e8 31 e3 ff ff call 801032b0 +80104f7f: 85 c0 test %eax,%eax +80104f81: 74 0f je 80104f92 +80104f83: e8 28 e3 ff ff call 801032b0 +80104f88: 83 78 0c 04 cmpl $0x4,0xc(%eax) +80104f8c: 0f 84 54 01 00 00 je 801050e6 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) -801051d1: e8 14 e2 ff ff call 801033ea -801051d6: 85 c0 test %eax,%eax -801051d8: 74 1c je 801051f6 -801051da: e8 0b e2 ff ff call 801033ea -801051df: 83 78 24 00 cmpl $0x0,0x24(%eax) -801051e3: 74 11 je 801051f6 -801051e5: 0f b7 43 3c movzwl 0x3c(%ebx),%eax -801051e9: 83 e0 03 and $0x3,%eax -801051ec: 66 83 f8 03 cmp $0x3,%ax -801051f0: 0f 84 43 01 00 00 je 80105339 +80104f92: e8 19 e3 ff ff call 801032b0 +80104f97: 85 c0 test %eax,%eax +80104f99: 74 1c je 80104fb7 +80104f9b: e8 10 e3 ff ff call 801032b0 +80104fa0: 83 78 24 00 cmpl $0x0,0x24(%eax) +80104fa4: 74 11 je 80104fb7 +80104fa6: 0f b7 43 3c movzwl 0x3c(%ebx),%eax +80104faa: 83 e0 03 and $0x3,%eax +80104fad: 66 83 f8 03 cmp $0x3,%ax +80104fb1: 0f 84 43 01 00 00 je 801050fa exit(); } -801051f6: 8d 65 f4 lea -0xc(%ebp),%esp -801051f9: 5b pop %ebx -801051fa: 5e pop %esi -801051fb: 5f pop %edi -801051fc: 5d pop %ebp -801051fd: c3 ret +80104fb7: 8d 65 f4 lea -0xc(%ebp),%esp +80104fba: 5b pop %ebx +80104fbb: 5e pop %esi +80104fbc: 5f pop %edi +80104fbd: 5d pop %ebp +80104fbe: c3 ret acquire(&tickslock); -801051fe: 83 ec 0c sub $0xc,%esp -80105201: 68 c0 61 11 80 push $0x801161c0 -80105206: e8 8e ec ff ff call 80103e99 +80104fbf: 83 ec 0c sub $0xc,%esp +80104fc2: 68 c0 35 11 80 push $0x801135c0 +80104fc7: e8 35 ed ff ff call 80103d01 ticks++; -8010520b: 83 05 00 6a 11 80 01 addl $0x1,0x80116a00 +80104fcc: 83 05 a0 35 11 80 01 addl $0x1,0x801135a0 wakeup(&ticks); -80105212: c7 04 24 00 6a 11 80 movl $0x80116a00,(%esp) -80105219: e8 1c e8 ff ff call 80103a3a +80104fd3: c7 04 24 a0 35 11 80 movl $0x801135a0,(%esp) +80104fda: e8 f8 e8 ff ff call 801038d7 release(&tickslock); -8010521e: c7 04 24 c0 61 11 80 movl $0x801161c0,(%esp) -80105225: e8 da ec ff ff call 80103f04 -8010522a: 83 c4 10 add $0x10,%esp -8010522d: e9 5d ff ff ff jmp 8010518f +80104fdf: c7 04 24 c0 35 11 80 movl $0x801135c0,(%esp) +80104fe6: e8 7d ed ff ff call 80103d68 +80104feb: 83 c4 10 add $0x10,%esp +80104fee: e9 5d ff ff ff jmp 80104f50 ideintr(); -80105232: e8 1d cc ff ff call 80101e54 +80104ff3: e8 ad cd ff ff call 80101da5 lapiceoi(); -80105237: e8 e2 d2 ff ff call 8010251e +80104ff8: e8 33 d4 ff ff call 80102430 break; -8010523c: e9 53 ff ff ff jmp 80105194 +80104ffd: e9 53 ff ff ff jmp 80104f55 kbdintr(); -80105241: e8 06 d1 ff ff call 8010234c +80105002: e8 63 d2 ff ff call 8010226a lapiceoi(); -80105246: e8 d3 d2 ff ff call 8010251e +80105007: e8 24 d4 ff ff call 80102430 break; -8010524b: e9 44 ff ff ff jmp 80105194 +8010500c: e9 44 ff ff ff jmp 80104f55 uartintr(); -80105250: e8 21 02 00 00 call 80105476 +80105011: e8 15 02 00 00 call 8010522b lapiceoi(); -80105255: e8 c4 d2 ff ff call 8010251e +80105016: e8 15 d4 ff ff call 80102430 break; -8010525a: e9 35 ff ff ff jmp 80105194 +8010501b: e9 35 ff ff ff jmp 80104f55 cprintf("cpu%d: spurious interrupt at %x:%x\n", -8010525f: 8b 7b 38 mov 0x38(%ebx),%edi -80105262: 0f b7 73 3c movzwl 0x3c(%ebx),%esi -80105266: e8 60 e1 ff ff call 801033cb -8010526b: 57 push %edi -8010526c: 56 push %esi -8010526d: 50 push %eax -8010526e: 68 4c 80 10 80 push $0x8010804c -80105273: e8 b4 b3 ff ff call 8010062c +80105020: 8b 7b 38 mov 0x38(%ebx),%edi +80105023: 0f b7 73 3c movzwl 0x3c(%ebx),%esi +80105027: e8 69 e2 ff ff call 80103295 +8010502c: 57 push %edi +8010502d: 56 push %esi +8010502e: 50 push %eax +8010502f: 68 6c 7d 10 80 push $0x80107d6c +80105034: e8 c8 b5 ff ff call 80100601 lapiceoi(); -80105278: e8 a1 d2 ff ff call 8010251e +80105039: e8 f2 d3 ff ff call 80102430 break; -8010527d: 83 c4 10 add $0x10,%esp -80105280: e9 0f ff ff ff jmp 80105194 +8010503e: 83 c4 10 add $0x10,%esp +80105041: e9 0f ff ff ff jmp 80104f55 if(myproc() == 0 || (tf->cs&3) == 0){ -80105285: e8 60 e1 ff ff call 801033ea -8010528a: 85 c0 test %eax,%eax -8010528c: 74 62 je 801052f0 -8010528e: f6 43 3c 03 testb $0x3,0x3c(%ebx) -80105292: 74 5c je 801052f0 +80105046: e8 65 e2 ff ff call 801032b0 +8010504b: 85 c0 test %eax,%eax +8010504d: 74 62 je 801050b1 +8010504f: f6 43 3c 03 testb $0x3,0x3c(%ebx) +80105053: 74 5c je 801050b1 static inline uint rcr2(void) { uint val; asm volatile("movl %%cr2,%0" : "=r" (val)); -80105294: 0f 20 d7 mov %cr2,%edi +80105055: 0f 20 d7 mov %cr2,%edi cprintf("pid %d %s: trap %d err %d on cpu %d " -80105297: 8b 73 38 mov 0x38(%ebx),%esi -8010529a: e8 2c e1 ff ff call 801033cb -8010529f: 89 45 e4 mov %eax,-0x1c(%ebp) -801052a2: 8b 4b 34 mov 0x34(%ebx),%ecx -801052a5: 89 4d e0 mov %ecx,-0x20(%ebp) -801052a8: 8b 53 30 mov 0x30(%ebx),%edx -801052ab: 89 55 dc mov %edx,-0x24(%ebp) +80105058: 8b 73 38 mov 0x38(%ebx),%esi +8010505b: e8 35 e2 ff ff call 80103295 +80105060: 89 45 e4 mov %eax,-0x1c(%ebp) +80105063: 8b 4b 34 mov 0x34(%ebx),%ecx +80105066: 89 4d e0 mov %ecx,-0x20(%ebp) +80105069: 8b 53 30 mov 0x30(%ebx),%edx +8010506c: 89 55 dc mov %edx,-0x24(%ebp) myproc()->pid, myproc()->name, tf->trapno, -801052ae: e8 37 e1 ff ff call 801033ea -801052b3: 89 45 d8 mov %eax,-0x28(%ebp) -801052b6: e8 2f e1 ff ff call 801033ea -801052bb: 89 c2 mov %eax,%edx +8010506f: e8 3c e2 ff ff call 801032b0 +80105074: 89 45 d8 mov %eax,-0x28(%ebp) +80105077: e8 34 e2 ff ff call 801032b0 +8010507c: 89 c2 mov %eax,%edx cprintf("pid %d %s: trap %d err %d on cpu %d " -801052bd: 57 push %edi -801052be: 56 push %esi -801052bf: ff 75 e4 pushl -0x1c(%ebp) -801052c2: ff 75 e0 pushl -0x20(%ebp) -801052c5: ff 75 dc pushl -0x24(%ebp) +8010507e: 57 push %edi +8010507f: 56 push %esi +80105080: ff 75 e4 push -0x1c(%ebp) +80105083: ff 75 e0 push -0x20(%ebp) +80105086: ff 75 dc push -0x24(%ebp) myproc()->pid, myproc()->name, tf->trapno, -801052c8: 8b 45 d8 mov -0x28(%ebp),%eax -801052cb: 83 c0 6c add $0x6c,%eax +80105089: 8b 45 d8 mov -0x28(%ebp),%eax +8010508c: 83 c0 6c add $0x6c,%eax cprintf("pid %d %s: trap %d err %d on cpu %d " -801052ce: 50 push %eax -801052cf: ff 72 10 pushl 0x10(%edx) -801052d2: 68 a4 80 10 80 push $0x801080a4 -801052d7: e8 50 b3 ff ff call 8010062c +8010508f: 50 push %eax +80105090: ff 72 10 push 0x10(%edx) +80105093: 68 c4 7d 10 80 push $0x80107dc4 +80105098: e8 64 b5 ff ff call 80100601 myproc()->killed = 1; -801052dc: 83 c4 20 add $0x20,%esp -801052df: e8 06 e1 ff ff call 801033ea -801052e4: c7 40 24 01 00 00 00 movl $0x1,0x24(%eax) -801052eb: e9 a4 fe ff ff jmp 80105194 -801052f0: 0f 20 d7 mov %cr2,%edi +8010509d: 83 c4 20 add $0x20,%esp +801050a0: e8 0b e2 ff ff call 801032b0 +801050a5: c7 40 24 01 00 00 00 movl $0x1,0x24(%eax) +801050ac: e9 a4 fe ff ff jmp 80104f55 +801050b1: 0f 20 d7 mov %cr2,%edi cprintf("unexpected trap %d from cpu %d eip %x (cr2=0x%x)\n", -801052f3: 8b 73 38 mov 0x38(%ebx),%esi -801052f6: e8 d0 e0 ff ff call 801033cb -801052fb: 83 ec 0c sub $0xc,%esp -801052fe: 57 push %edi -801052ff: 56 push %esi -80105300: 50 push %eax -80105301: ff 73 30 pushl 0x30(%ebx) -80105304: 68 70 80 10 80 push $0x80108070 -80105309: e8 1e b3 ff ff call 8010062c +801050b4: 8b 73 38 mov 0x38(%ebx),%esi +801050b7: e8 d9 e1 ff ff call 80103295 +801050bc: 83 ec 0c sub $0xc,%esp +801050bf: 57 push %edi +801050c0: 56 push %esi +801050c1: 50 push %eax +801050c2: ff 73 30 push 0x30(%ebx) +801050c5: 68 90 7d 10 80 push $0x80107d90 +801050ca: e8 32 b5 ff ff call 80100601 panic("trap"); -8010530e: 83 c4 14 add $0x14,%esp -80105311: 68 46 80 10 80 push $0x80108046 -80105316: e8 3d b0 ff ff call 80100358 +801050cf: 83 c4 14 add $0x14,%esp +801050d2: 68 66 7d 10 80 push $0x80107d66 +801050d7: e8 64 b2 ff ff call 80100340 exit(); -8010531b: e8 93 e4 ff ff call 801037b3 -80105320: e9 94 fe ff ff jmp 801051b9 +801050dc: e8 7f e5 ff ff call 80103660 +801050e1: e9 94 fe ff ff jmp 80104f7a if(myproc() && myproc()->state == RUNNING && -80105325: 83 7b 30 20 cmpl $0x20,0x30(%ebx) -80105329: 0f 85 a2 fe ff ff jne 801051d1 +801050e6: 83 7b 30 20 cmpl $0x20,0x30(%ebx) +801050ea: 0f 85 a2 fe ff ff jne 80104f92 yield(); -8010532f: e8 4a e5 ff ff call 8010387e -80105334: e9 98 fe ff ff jmp 801051d1 +801050f0: e8 32 e6 ff ff call 80103727 +801050f5: e9 98 fe ff ff jmp 80104f92 exit(); -80105339: e8 75 e4 ff ff call 801037b3 -8010533e: e9 b3 fe ff ff jmp 801051f6 +801050fa: e8 61 e5 ff ff call 80103660 +801050ff: e9 b3 fe ff ff jmp 80104fb7 -80105343 : - outb(COM1+0, c); +80105104 : } static int uartgetc(void) { -80105343: f3 0f 1e fb endbr32 if(!uart) -80105347: 83 3d bc b5 10 80 00 cmpl $0x0,0x8010b5bc -8010534e: 74 14 je 80105364 +80105104: 83 3d 00 3e 11 80 00 cmpl $0x0,0x80113e00 +8010510b: 74 14 je 80105121 asm volatile("in %1,%0" : "=a" (data) : "d" (port)); -80105350: ba fd 03 00 00 mov $0x3fd,%edx -80105355: ec in (%dx),%al +8010510d: ba fd 03 00 00 mov $0x3fd,%edx +80105112: ec in (%dx),%al return -1; if(!(inb(COM1+5) & 0x01)) -80105356: a8 01 test $0x1,%al -80105358: 74 10 je 8010536a -8010535a: ba f8 03 00 00 mov $0x3f8,%edx -8010535f: ec in (%dx),%al +80105113: a8 01 test $0x1,%al +80105115: 74 10 je 80105127 +80105117: ba f8 03 00 00 mov $0x3f8,%edx +8010511c: ec in (%dx),%al return -1; return inb(COM1+0); -80105360: 0f b6 c0 movzbl %al,%eax -80105363: c3 ret +8010511d: 0f b6 c0 movzbl %al,%eax +80105120: c3 ret return -1; -80105364: b8 ff ff ff ff mov $0xffffffff,%eax -80105369: c3 ret +80105121: b8 ff ff ff ff mov $0xffffffff,%eax +80105126: c3 ret return -1; -8010536a: b8 ff ff ff ff mov $0xffffffff,%eax +80105127: b8 ff ff ff ff mov $0xffffffff,%eax } -8010536f: c3 ret +8010512c: c3 ret -80105370 : -{ -80105370: f3 0f 1e fb endbr32 +8010512d : if(!uart) -80105374: 83 3d bc b5 10 80 00 cmpl $0x0,0x8010b5bc -8010537b: 74 4f je 801053cc -{ -8010537d: 55 push %ebp -8010537e: 89 e5 mov %esp,%ebp -80105380: 56 push %esi -80105381: 53 push %ebx -80105382: ba fd 03 00 00 mov $0x3fd,%edx -80105387: ec in (%dx),%al +8010512d: 83 3d 00 3e 11 80 00 cmpl $0x0,0x80113e00 +80105134: 74 4f je 80105185 +{ +80105136: 55 push %ebp +80105137: 89 e5 mov %esp,%ebp +80105139: 56 push %esi +8010513a: 53 push %ebx +8010513b: ba fd 03 00 00 mov $0x3fd,%edx +80105140: ec in (%dx),%al for(i = 0; i < 128 && !(inb(COM1+5) & 0x20); i++) -80105388: a8 20 test $0x20,%al -8010538a: 75 30 jne 801053bc +80105141: a8 20 test $0x20,%al +80105143: 75 30 jne 80105175 microdelay(10); -8010538c: 83 ec 0c sub $0xc,%esp -8010538f: 6a 0a push $0xa -80105391: e8 ad d1 ff ff call 80102543 -80105396: 83 c4 10 add $0x10,%esp -80105399: bb 7f 00 00 00 mov $0x7f,%ebx -8010539e: be fd 03 00 00 mov $0x3fd,%esi -801053a3: 89 f2 mov %esi,%edx -801053a5: ec in (%dx),%al +80105145: 83 ec 0c sub $0xc,%esp +80105148: 6a 0a push $0xa +8010514a: e8 02 d3 ff ff call 80102451 +8010514f: 83 c4 10 add $0x10,%esp +80105152: bb 7f 00 00 00 mov $0x7f,%ebx +80105157: be fd 03 00 00 mov $0x3fd,%esi +8010515c: 89 f2 mov %esi,%edx +8010515e: ec in (%dx),%al for(i = 0; i < 128 && !(inb(COM1+5) & 0x20); i++) -801053a6: a8 20 test $0x20,%al -801053a8: 75 12 jne 801053bc +8010515f: a8 20 test $0x20,%al +80105161: 75 12 jne 80105175 microdelay(10); -801053aa: 83 ec 0c sub $0xc,%esp -801053ad: 6a 0a push $0xa -801053af: e8 8f d1 ff ff call 80102543 +80105163: 83 ec 0c sub $0xc,%esp +80105166: 6a 0a push $0xa +80105168: e8 e4 d2 ff ff call 80102451 for(i = 0; i < 128 && !(inb(COM1+5) & 0x20); i++) -801053b4: 83 c4 10 add $0x10,%esp -801053b7: 83 eb 01 sub $0x1,%ebx -801053ba: 75 e7 jne 801053a3 +8010516d: 83 c4 10 add $0x10,%esp +80105170: 83 eb 01 sub $0x1,%ebx +80105173: 75 e7 jne 8010515c asm volatile("out %0,%1" : : "a" (data), "d" (port)); -801053bc: 8b 45 08 mov 0x8(%ebp),%eax -801053bf: ba f8 03 00 00 mov $0x3f8,%edx -801053c4: ee out %al,(%dx) -} -801053c5: 8d 65 f8 lea -0x8(%ebp),%esp -801053c8: 5b pop %ebx -801053c9: 5e pop %esi -801053ca: 5d pop %ebp -801053cb: c3 ret -801053cc: c3 ret - -801053cd : -{ -801053cd: f3 0f 1e fb endbr32 -801053d1: 55 push %ebp -801053d2: 89 e5 mov %esp,%ebp -801053d4: 56 push %esi -801053d5: 53 push %ebx -801053d6: b9 00 00 00 00 mov $0x0,%ecx -801053db: ba fa 03 00 00 mov $0x3fa,%edx -801053e0: 89 c8 mov %ecx,%eax -801053e2: ee out %al,(%dx) -801053e3: be fb 03 00 00 mov $0x3fb,%esi -801053e8: b8 80 ff ff ff mov $0xffffff80,%eax -801053ed: 89 f2 mov %esi,%edx -801053ef: ee out %al,(%dx) -801053f0: b8 0c 00 00 00 mov $0xc,%eax -801053f5: ba f8 03 00 00 mov $0x3f8,%edx -801053fa: ee out %al,(%dx) -801053fb: bb f9 03 00 00 mov $0x3f9,%ebx -80105400: 89 c8 mov %ecx,%eax -80105402: 89 da mov %ebx,%edx -80105404: ee out %al,(%dx) -80105405: b8 03 00 00 00 mov $0x3,%eax -8010540a: 89 f2 mov %esi,%edx -8010540c: ee out %al,(%dx) -8010540d: ba fc 03 00 00 mov $0x3fc,%edx -80105412: 89 c8 mov %ecx,%eax -80105414: ee out %al,(%dx) -80105415: b8 01 00 00 00 mov $0x1,%eax -8010541a: 89 da mov %ebx,%edx -8010541c: ee out %al,(%dx) +80105175: 8b 45 08 mov 0x8(%ebp),%eax +80105178: ba f8 03 00 00 mov $0x3f8,%edx +8010517d: ee out %al,(%dx) +} +8010517e: 8d 65 f8 lea -0x8(%ebp),%esp +80105181: 5b pop %ebx +80105182: 5e pop %esi +80105183: 5d pop %ebp +80105184: c3 ret +80105185: c3 ret + +80105186 : +{ +80105186: 55 push %ebp +80105187: 89 e5 mov %esp,%ebp +80105189: 56 push %esi +8010518a: 53 push %ebx +8010518b: b9 00 00 00 00 mov $0x0,%ecx +80105190: ba fa 03 00 00 mov $0x3fa,%edx +80105195: 89 c8 mov %ecx,%eax +80105197: ee out %al,(%dx) +80105198: be fb 03 00 00 mov $0x3fb,%esi +8010519d: b8 80 ff ff ff mov $0xffffff80,%eax +801051a2: 89 f2 mov %esi,%edx +801051a4: ee out %al,(%dx) +801051a5: b8 0c 00 00 00 mov $0xc,%eax +801051aa: ba f8 03 00 00 mov $0x3f8,%edx +801051af: ee out %al,(%dx) +801051b0: bb f9 03 00 00 mov $0x3f9,%ebx +801051b5: 89 c8 mov %ecx,%eax +801051b7: 89 da mov %ebx,%edx +801051b9: ee out %al,(%dx) +801051ba: b8 03 00 00 00 mov $0x3,%eax +801051bf: 89 f2 mov %esi,%edx +801051c1: ee out %al,(%dx) +801051c2: ba fc 03 00 00 mov $0x3fc,%edx +801051c7: 89 c8 mov %ecx,%eax +801051c9: ee out %al,(%dx) +801051ca: b8 01 00 00 00 mov $0x1,%eax +801051cf: 89 da mov %ebx,%edx +801051d1: ee out %al,(%dx) asm volatile("in %1,%0" : "=a" (data) : "d" (port)); -8010541d: ba fd 03 00 00 mov $0x3fd,%edx -80105422: ec in (%dx),%al +801051d2: ba fd 03 00 00 mov $0x3fd,%edx +801051d7: ec in (%dx),%al if(inb(COM1+5) == 0xFF) -80105423: 3c ff cmp $0xff,%al -80105425: 74 48 je 8010546f +801051d8: 3c ff cmp $0xff,%al +801051da: 74 48 je 80105224 uart = 1; -80105427: c7 05 bc b5 10 80 01 movl $0x1,0x8010b5bc -8010542e: 00 00 00 -80105431: ba fa 03 00 00 mov $0x3fa,%edx -80105436: ec in (%dx),%al -80105437: ba f8 03 00 00 mov $0x3f8,%edx -8010543c: ec in (%dx),%al +801051dc: c7 05 00 3e 11 80 01 movl $0x1,0x80113e00 +801051e3: 00 00 00 +801051e6: ba fa 03 00 00 mov $0x3fa,%edx +801051eb: ec in (%dx),%al +801051ec: ba f8 03 00 00 mov $0x3f8,%edx +801051f1: ec in (%dx),%al ioapicenable(IRQ_COM1, 0); -8010543d: 83 ec 08 sub $0x8,%esp -80105440: 6a 00 push $0x0 -80105442: 6a 04 push $0x4 -80105444: e8 3b cc ff ff call 80102084 -80105449: 83 c4 10 add $0x10,%esp +801051f2: 83 ec 08 sub $0x8,%esp +801051f5: 6a 00 push $0x0 +801051f7: 6a 04 push $0x4 +801051f9: e8 cb cd ff ff call 80101fc9 +801051fe: 83 c4 10 add $0x10,%esp for(p="xv6...\n"; *p; p++) -8010544c: bb 68 81 10 80 mov $0x80108168,%ebx -80105451: b8 78 00 00 00 mov $0x78,%eax +80105201: bb 88 7e 10 80 mov $0x80107e88,%ebx +80105206: b8 78 00 00 00 mov $0x78,%eax uartputc(*p); -80105456: 83 ec 0c sub $0xc,%esp -80105459: 0f be c0 movsbl %al,%eax -8010545c: 50 push %eax -8010545d: e8 0e ff ff ff call 80105370 +8010520b: 83 ec 0c sub $0xc,%esp +8010520e: 0f be c0 movsbl %al,%eax +80105211: 50 push %eax +80105212: e8 16 ff ff ff call 8010512d for(p="xv6...\n"; *p; p++) -80105462: 83 c3 01 add $0x1,%ebx -80105465: 0f b6 03 movzbl (%ebx),%eax -80105468: 83 c4 10 add $0x10,%esp -8010546b: 84 c0 test %al,%al -8010546d: 75 e7 jne 80105456 +80105217: 83 c3 01 add $0x1,%ebx +8010521a: 0f b6 03 movzbl (%ebx),%eax +8010521d: 83 c4 10 add $0x10,%esp +80105220: 84 c0 test %al,%al +80105222: 75 e7 jne 8010520b } -8010546f: 8d 65 f8 lea -0x8(%ebp),%esp -80105472: 5b pop %ebx -80105473: 5e pop %esi -80105474: 5d pop %ebp -80105475: c3 ret +80105224: 8d 65 f8 lea -0x8(%ebp),%esp +80105227: 5b pop %ebx +80105228: 5e pop %esi +80105229: 5d pop %ebp +8010522a: c3 ret -80105476 : +8010522b : void uartintr(void) { -80105476: f3 0f 1e fb endbr32 -8010547a: 55 push %ebp -8010547b: 89 e5 mov %esp,%ebp -8010547d: 83 ec 14 sub $0x14,%esp +8010522b: 55 push %ebp +8010522c: 89 e5 mov %esp,%ebp +8010522e: 83 ec 14 sub $0x14,%esp consoleintr(uartgetc); -80105480: 68 43 53 10 80 push $0x80105343 -80105485: e8 01 b3 ff ff call 8010078b +80105231: 68 04 51 10 80 push $0x80105104 +80105236: e8 21 b5 ff ff call 8010075c } -8010548a: 83 c4 10 add $0x10,%esp -8010548d: c9 leave -8010548e: c3 ret +8010523b: 83 c4 10 add $0x10,%esp +8010523e: c9 leave +8010523f: c3 ret -8010548f : +80105240 : # generated by vectors.pl - do not edit # handlers .globl alltraps .globl vector0 vector0: pushl $0 -8010548f: 6a 00 push $0x0 +80105240: 6a 00 push $0x0 pushl $0 -80105491: 6a 00 push $0x0 +80105242: 6a 00 push $0x0 jmp alltraps -80105493: e9 b7 fb ff ff jmp 8010504f +80105244: e9 d4 fb ff ff jmp 80104e1d -80105498 : +80105249 : .globl vector1 vector1: pushl $0 -80105498: 6a 00 push $0x0 +80105249: 6a 00 push $0x0 pushl $1 -8010549a: 6a 01 push $0x1 +8010524b: 6a 01 push $0x1 jmp alltraps -8010549c: e9 ae fb ff ff jmp 8010504f +8010524d: e9 cb fb ff ff jmp 80104e1d -801054a1 : +80105252 : .globl vector2 vector2: pushl $0 -801054a1: 6a 00 push $0x0 +80105252: 6a 00 push $0x0 pushl $2 -801054a3: 6a 02 push $0x2 +80105254: 6a 02 push $0x2 jmp alltraps -801054a5: e9 a5 fb ff ff jmp 8010504f +80105256: e9 c2 fb ff ff jmp 80104e1d -801054aa : +8010525b : .globl vector3 vector3: pushl $0 -801054aa: 6a 00 push $0x0 +8010525b: 6a 00 push $0x0 pushl $3 -801054ac: 6a 03 push $0x3 +8010525d: 6a 03 push $0x3 jmp alltraps -801054ae: e9 9c fb ff ff jmp 8010504f +8010525f: e9 b9 fb ff ff jmp 80104e1d -801054b3 : +80105264 : .globl vector4 vector4: pushl $0 -801054b3: 6a 00 push $0x0 +80105264: 6a 00 push $0x0 pushl $4 -801054b5: 6a 04 push $0x4 +80105266: 6a 04 push $0x4 jmp alltraps -801054b7: e9 93 fb ff ff jmp 8010504f +80105268: e9 b0 fb ff ff jmp 80104e1d -801054bc : +8010526d : .globl vector5 vector5: pushl $0 -801054bc: 6a 00 push $0x0 +8010526d: 6a 00 push $0x0 pushl $5 -801054be: 6a 05 push $0x5 +8010526f: 6a 05 push $0x5 jmp alltraps -801054c0: e9 8a fb ff ff jmp 8010504f +80105271: e9 a7 fb ff ff jmp 80104e1d -801054c5 : +80105276 : .globl vector6 vector6: pushl $0 -801054c5: 6a 00 push $0x0 +80105276: 6a 00 push $0x0 pushl $6 -801054c7: 6a 06 push $0x6 +80105278: 6a 06 push $0x6 jmp alltraps -801054c9: e9 81 fb ff ff jmp 8010504f +8010527a: e9 9e fb ff ff jmp 80104e1d -801054ce : +8010527f : .globl vector7 vector7: pushl $0 -801054ce: 6a 00 push $0x0 +8010527f: 6a 00 push $0x0 pushl $7 -801054d0: 6a 07 push $0x7 +80105281: 6a 07 push $0x7 jmp alltraps -801054d2: e9 78 fb ff ff jmp 8010504f +80105283: e9 95 fb ff ff jmp 80104e1d -801054d7 : +80105288 : .globl vector8 vector8: pushl $8 -801054d7: 6a 08 push $0x8 +80105288: 6a 08 push $0x8 jmp alltraps -801054d9: e9 71 fb ff ff jmp 8010504f +8010528a: e9 8e fb ff ff jmp 80104e1d -801054de : +8010528f : .globl vector9 vector9: pushl $0 -801054de: 6a 00 push $0x0 +8010528f: 6a 00 push $0x0 pushl $9 -801054e0: 6a 09 push $0x9 +80105291: 6a 09 push $0x9 jmp alltraps -801054e2: e9 68 fb ff ff jmp 8010504f +80105293: e9 85 fb ff ff jmp 80104e1d -801054e7 : +80105298 : .globl vector10 vector10: pushl $10 -801054e7: 6a 0a push $0xa +80105298: 6a 0a push $0xa jmp alltraps -801054e9: e9 61 fb ff ff jmp 8010504f +8010529a: e9 7e fb ff ff jmp 80104e1d -801054ee : +8010529f : .globl vector11 vector11: pushl $11 -801054ee: 6a 0b push $0xb +8010529f: 6a 0b push $0xb jmp alltraps -801054f0: e9 5a fb ff ff jmp 8010504f +801052a1: e9 77 fb ff ff jmp 80104e1d -801054f5 : +801052a6 : .globl vector12 vector12: pushl $12 -801054f5: 6a 0c push $0xc +801052a6: 6a 0c push $0xc jmp alltraps -801054f7: e9 53 fb ff ff jmp 8010504f +801052a8: e9 70 fb ff ff jmp 80104e1d -801054fc : +801052ad : .globl vector13 vector13: pushl $13 -801054fc: 6a 0d push $0xd +801052ad: 6a 0d push $0xd jmp alltraps -801054fe: e9 4c fb ff ff jmp 8010504f +801052af: e9 69 fb ff ff jmp 80104e1d -80105503 : +801052b4 : .globl vector14 vector14: pushl $14 -80105503: 6a 0e push $0xe +801052b4: 6a 0e push $0xe jmp alltraps -80105505: e9 45 fb ff ff jmp 8010504f +801052b6: e9 62 fb ff ff jmp 80104e1d -8010550a : +801052bb : .globl vector15 vector15: pushl $0 -8010550a: 6a 00 push $0x0 +801052bb: 6a 00 push $0x0 pushl $15 -8010550c: 6a 0f push $0xf +801052bd: 6a 0f push $0xf jmp alltraps -8010550e: e9 3c fb ff ff jmp 8010504f +801052bf: e9 59 fb ff ff jmp 80104e1d -80105513 : +801052c4 : .globl vector16 vector16: pushl $0 -80105513: 6a 00 push $0x0 +801052c4: 6a 00 push $0x0 pushl $16 -80105515: 6a 10 push $0x10 +801052c6: 6a 10 push $0x10 jmp alltraps -80105517: e9 33 fb ff ff jmp 8010504f +801052c8: e9 50 fb ff ff jmp 80104e1d -8010551c : +801052cd : .globl vector17 vector17: pushl $17 -8010551c: 6a 11 push $0x11 +801052cd: 6a 11 push $0x11 jmp alltraps -8010551e: e9 2c fb ff ff jmp 8010504f +801052cf: e9 49 fb ff ff jmp 80104e1d -80105523 : +801052d4 : .globl vector18 vector18: pushl $0 -80105523: 6a 00 push $0x0 +801052d4: 6a 00 push $0x0 pushl $18 -80105525: 6a 12 push $0x12 +801052d6: 6a 12 push $0x12 jmp alltraps -80105527: e9 23 fb ff ff jmp 8010504f +801052d8: e9 40 fb ff ff jmp 80104e1d -8010552c : +801052dd : .globl vector19 vector19: pushl $0 -8010552c: 6a 00 push $0x0 +801052dd: 6a 00 push $0x0 pushl $19 -8010552e: 6a 13 push $0x13 +801052df: 6a 13 push $0x13 jmp alltraps -80105530: e9 1a fb ff ff jmp 8010504f +801052e1: e9 37 fb ff ff jmp 80104e1d -80105535 : +801052e6 : .globl vector20 vector20: pushl $0 -80105535: 6a 00 push $0x0 +801052e6: 6a 00 push $0x0 pushl $20 -80105537: 6a 14 push $0x14 +801052e8: 6a 14 push $0x14 jmp alltraps -80105539: e9 11 fb ff ff jmp 8010504f +801052ea: e9 2e fb ff ff jmp 80104e1d -8010553e : +801052ef : .globl vector21 vector21: pushl $0 -8010553e: 6a 00 push $0x0 +801052ef: 6a 00 push $0x0 pushl $21 -80105540: 6a 15 push $0x15 +801052f1: 6a 15 push $0x15 jmp alltraps -80105542: e9 08 fb ff ff jmp 8010504f +801052f3: e9 25 fb ff ff jmp 80104e1d -80105547 : +801052f8 : .globl vector22 vector22: pushl $0 -80105547: 6a 00 push $0x0 +801052f8: 6a 00 push $0x0 pushl $22 -80105549: 6a 16 push $0x16 +801052fa: 6a 16 push $0x16 jmp alltraps -8010554b: e9 ff fa ff ff jmp 8010504f +801052fc: e9 1c fb ff ff jmp 80104e1d -80105550 : +80105301 : .globl vector23 vector23: pushl $0 -80105550: 6a 00 push $0x0 +80105301: 6a 00 push $0x0 pushl $23 -80105552: 6a 17 push $0x17 +80105303: 6a 17 push $0x17 jmp alltraps -80105554: e9 f6 fa ff ff jmp 8010504f +80105305: e9 13 fb ff ff jmp 80104e1d -80105559 : +8010530a : .globl vector24 vector24: pushl $0 -80105559: 6a 00 push $0x0 +8010530a: 6a 00 push $0x0 pushl $24 -8010555b: 6a 18 push $0x18 +8010530c: 6a 18 push $0x18 jmp alltraps -8010555d: e9 ed fa ff ff jmp 8010504f +8010530e: e9 0a fb ff ff jmp 80104e1d -80105562 : +80105313 : .globl vector25 vector25: pushl $0 -80105562: 6a 00 push $0x0 +80105313: 6a 00 push $0x0 pushl $25 -80105564: 6a 19 push $0x19 +80105315: 6a 19 push $0x19 jmp alltraps -80105566: e9 e4 fa ff ff jmp 8010504f +80105317: e9 01 fb ff ff jmp 80104e1d -8010556b : +8010531c : .globl vector26 vector26: pushl $0 -8010556b: 6a 00 push $0x0 +8010531c: 6a 00 push $0x0 pushl $26 -8010556d: 6a 1a push $0x1a +8010531e: 6a 1a push $0x1a jmp alltraps -8010556f: e9 db fa ff ff jmp 8010504f +80105320: e9 f8 fa ff ff jmp 80104e1d -80105574 : +80105325 : .globl vector27 vector27: pushl $0 -80105574: 6a 00 push $0x0 +80105325: 6a 00 push $0x0 pushl $27 -80105576: 6a 1b push $0x1b +80105327: 6a 1b push $0x1b jmp alltraps -80105578: e9 d2 fa ff ff jmp 8010504f +80105329: e9 ef fa ff ff jmp 80104e1d -8010557d : +8010532e : .globl vector28 vector28: pushl $0 -8010557d: 6a 00 push $0x0 +8010532e: 6a 00 push $0x0 pushl $28 -8010557f: 6a 1c push $0x1c +80105330: 6a 1c push $0x1c jmp alltraps -80105581: e9 c9 fa ff ff jmp 8010504f +80105332: e9 e6 fa ff ff jmp 80104e1d -80105586 : +80105337 : .globl vector29 vector29: pushl $0 -80105586: 6a 00 push $0x0 +80105337: 6a 00 push $0x0 pushl $29 -80105588: 6a 1d push $0x1d +80105339: 6a 1d push $0x1d jmp alltraps -8010558a: e9 c0 fa ff ff jmp 8010504f +8010533b: e9 dd fa ff ff jmp 80104e1d -8010558f : +80105340 : .globl vector30 vector30: pushl $0 -8010558f: 6a 00 push $0x0 +80105340: 6a 00 push $0x0 pushl $30 -80105591: 6a 1e push $0x1e +80105342: 6a 1e push $0x1e jmp alltraps -80105593: e9 b7 fa ff ff jmp 8010504f +80105344: e9 d4 fa ff ff jmp 80104e1d -80105598 : +80105349 : .globl vector31 vector31: pushl $0 -80105598: 6a 00 push $0x0 +80105349: 6a 00 push $0x0 pushl $31 -8010559a: 6a 1f push $0x1f +8010534b: 6a 1f push $0x1f jmp alltraps -8010559c: e9 ae fa ff ff jmp 8010504f +8010534d: e9 cb fa ff ff jmp 80104e1d -801055a1 : +80105352 : .globl vector32 vector32: pushl $0 -801055a1: 6a 00 push $0x0 +80105352: 6a 00 push $0x0 pushl $32 -801055a3: 6a 20 push $0x20 +80105354: 6a 20 push $0x20 jmp alltraps -801055a5: e9 a5 fa ff ff jmp 8010504f +80105356: e9 c2 fa ff ff jmp 80104e1d -801055aa : +8010535b : .globl vector33 vector33: pushl $0 -801055aa: 6a 00 push $0x0 +8010535b: 6a 00 push $0x0 pushl $33 -801055ac: 6a 21 push $0x21 +8010535d: 6a 21 push $0x21 jmp alltraps -801055ae: e9 9c fa ff ff jmp 8010504f +8010535f: e9 b9 fa ff ff jmp 80104e1d -801055b3 : +80105364 : .globl vector34 vector34: pushl $0 -801055b3: 6a 00 push $0x0 +80105364: 6a 00 push $0x0 pushl $34 -801055b5: 6a 22 push $0x22 +80105366: 6a 22 push $0x22 jmp alltraps -801055b7: e9 93 fa ff ff jmp 8010504f +80105368: e9 b0 fa ff ff jmp 80104e1d -801055bc : +8010536d : .globl vector35 vector35: pushl $0 -801055bc: 6a 00 push $0x0 +8010536d: 6a 00 push $0x0 pushl $35 -801055be: 6a 23 push $0x23 +8010536f: 6a 23 push $0x23 jmp alltraps -801055c0: e9 8a fa ff ff jmp 8010504f +80105371: e9 a7 fa ff ff jmp 80104e1d -801055c5 : +80105376 : .globl vector36 vector36: pushl $0 -801055c5: 6a 00 push $0x0 +80105376: 6a 00 push $0x0 pushl $36 -801055c7: 6a 24 push $0x24 +80105378: 6a 24 push $0x24 jmp alltraps -801055c9: e9 81 fa ff ff jmp 8010504f +8010537a: e9 9e fa ff ff jmp 80104e1d -801055ce : +8010537f : .globl vector37 vector37: pushl $0 -801055ce: 6a 00 push $0x0 +8010537f: 6a 00 push $0x0 pushl $37 -801055d0: 6a 25 push $0x25 +80105381: 6a 25 push $0x25 jmp alltraps -801055d2: e9 78 fa ff ff jmp 8010504f +80105383: e9 95 fa ff ff jmp 80104e1d -801055d7 : +80105388 : .globl vector38 vector38: pushl $0 -801055d7: 6a 00 push $0x0 +80105388: 6a 00 push $0x0 pushl $38 -801055d9: 6a 26 push $0x26 +8010538a: 6a 26 push $0x26 jmp alltraps -801055db: e9 6f fa ff ff jmp 8010504f +8010538c: e9 8c fa ff ff jmp 80104e1d -801055e0 : +80105391 : .globl vector39 vector39: pushl $0 -801055e0: 6a 00 push $0x0 +80105391: 6a 00 push $0x0 pushl $39 -801055e2: 6a 27 push $0x27 +80105393: 6a 27 push $0x27 jmp alltraps -801055e4: e9 66 fa ff ff jmp 8010504f +80105395: e9 83 fa ff ff jmp 80104e1d -801055e9 : +8010539a : .globl vector40 vector40: pushl $0 -801055e9: 6a 00 push $0x0 +8010539a: 6a 00 push $0x0 pushl $40 -801055eb: 6a 28 push $0x28 +8010539c: 6a 28 push $0x28 jmp alltraps -801055ed: e9 5d fa ff ff jmp 8010504f +8010539e: e9 7a fa ff ff jmp 80104e1d -801055f2 : +801053a3 : .globl vector41 vector41: pushl $0 -801055f2: 6a 00 push $0x0 +801053a3: 6a 00 push $0x0 pushl $41 -801055f4: 6a 29 push $0x29 +801053a5: 6a 29 push $0x29 jmp alltraps -801055f6: e9 54 fa ff ff jmp 8010504f +801053a7: e9 71 fa ff ff jmp 80104e1d -801055fb : +801053ac : .globl vector42 vector42: pushl $0 -801055fb: 6a 00 push $0x0 +801053ac: 6a 00 push $0x0 pushl $42 -801055fd: 6a 2a push $0x2a +801053ae: 6a 2a push $0x2a jmp alltraps -801055ff: e9 4b fa ff ff jmp 8010504f +801053b0: e9 68 fa ff ff jmp 80104e1d -80105604 : +801053b5 : .globl vector43 vector43: pushl $0 -80105604: 6a 00 push $0x0 +801053b5: 6a 00 push $0x0 pushl $43 -80105606: 6a 2b push $0x2b +801053b7: 6a 2b push $0x2b jmp alltraps -80105608: e9 42 fa ff ff jmp 8010504f +801053b9: e9 5f fa ff ff jmp 80104e1d -8010560d : +801053be : .globl vector44 vector44: pushl $0 -8010560d: 6a 00 push $0x0 +801053be: 6a 00 push $0x0 pushl $44 -8010560f: 6a 2c push $0x2c +801053c0: 6a 2c push $0x2c jmp alltraps -80105611: e9 39 fa ff ff jmp 8010504f +801053c2: e9 56 fa ff ff jmp 80104e1d -80105616 : +801053c7 : .globl vector45 vector45: pushl $0 -80105616: 6a 00 push $0x0 +801053c7: 6a 00 push $0x0 pushl $45 -80105618: 6a 2d push $0x2d +801053c9: 6a 2d push $0x2d jmp alltraps -8010561a: e9 30 fa ff ff jmp 8010504f +801053cb: e9 4d fa ff ff jmp 80104e1d -8010561f : +801053d0 : .globl vector46 vector46: pushl $0 -8010561f: 6a 00 push $0x0 +801053d0: 6a 00 push $0x0 pushl $46 -80105621: 6a 2e push $0x2e +801053d2: 6a 2e push $0x2e jmp alltraps -80105623: e9 27 fa ff ff jmp 8010504f +801053d4: e9 44 fa ff ff jmp 80104e1d -80105628 : +801053d9 : .globl vector47 vector47: pushl $0 -80105628: 6a 00 push $0x0 +801053d9: 6a 00 push $0x0 pushl $47 -8010562a: 6a 2f push $0x2f +801053db: 6a 2f push $0x2f jmp alltraps -8010562c: e9 1e fa ff ff jmp 8010504f +801053dd: e9 3b fa ff ff jmp 80104e1d -80105631 : +801053e2 : .globl vector48 vector48: pushl $0 -80105631: 6a 00 push $0x0 +801053e2: 6a 00 push $0x0 pushl $48 -80105633: 6a 30 push $0x30 +801053e4: 6a 30 push $0x30 jmp alltraps -80105635: e9 15 fa ff ff jmp 8010504f +801053e6: e9 32 fa ff ff jmp 80104e1d -8010563a : +801053eb : .globl vector49 vector49: pushl $0 -8010563a: 6a 00 push $0x0 +801053eb: 6a 00 push $0x0 pushl $49 -8010563c: 6a 31 push $0x31 +801053ed: 6a 31 push $0x31 jmp alltraps -8010563e: e9 0c fa ff ff jmp 8010504f +801053ef: e9 29 fa ff ff jmp 80104e1d -80105643 : +801053f4 : .globl vector50 vector50: pushl $0 -80105643: 6a 00 push $0x0 +801053f4: 6a 00 push $0x0 pushl $50 -80105645: 6a 32 push $0x32 +801053f6: 6a 32 push $0x32 jmp alltraps -80105647: e9 03 fa ff ff jmp 8010504f +801053f8: e9 20 fa ff ff jmp 80104e1d -8010564c : +801053fd : .globl vector51 vector51: pushl $0 -8010564c: 6a 00 push $0x0 +801053fd: 6a 00 push $0x0 pushl $51 -8010564e: 6a 33 push $0x33 +801053ff: 6a 33 push $0x33 jmp alltraps -80105650: e9 fa f9 ff ff jmp 8010504f +80105401: e9 17 fa ff ff jmp 80104e1d -80105655 : +80105406 : .globl vector52 vector52: pushl $0 -80105655: 6a 00 push $0x0 +80105406: 6a 00 push $0x0 pushl $52 -80105657: 6a 34 push $0x34 +80105408: 6a 34 push $0x34 jmp alltraps -80105659: e9 f1 f9 ff ff jmp 8010504f +8010540a: e9 0e fa ff ff jmp 80104e1d -8010565e : +8010540f : .globl vector53 vector53: pushl $0 -8010565e: 6a 00 push $0x0 +8010540f: 6a 00 push $0x0 pushl $53 -80105660: 6a 35 push $0x35 +80105411: 6a 35 push $0x35 jmp alltraps -80105662: e9 e8 f9 ff ff jmp 8010504f +80105413: e9 05 fa ff ff jmp 80104e1d -80105667 : +80105418 : .globl vector54 vector54: pushl $0 -80105667: 6a 00 push $0x0 +80105418: 6a 00 push $0x0 pushl $54 -80105669: 6a 36 push $0x36 +8010541a: 6a 36 push $0x36 jmp alltraps -8010566b: e9 df f9 ff ff jmp 8010504f +8010541c: e9 fc f9 ff ff jmp 80104e1d -80105670 : +80105421 : .globl vector55 vector55: pushl $0 -80105670: 6a 00 push $0x0 +80105421: 6a 00 push $0x0 pushl $55 -80105672: 6a 37 push $0x37 +80105423: 6a 37 push $0x37 jmp alltraps -80105674: e9 d6 f9 ff ff jmp 8010504f +80105425: e9 f3 f9 ff ff jmp 80104e1d -80105679 : +8010542a : .globl vector56 vector56: pushl $0 -80105679: 6a 00 push $0x0 +8010542a: 6a 00 push $0x0 pushl $56 -8010567b: 6a 38 push $0x38 +8010542c: 6a 38 push $0x38 jmp alltraps -8010567d: e9 cd f9 ff ff jmp 8010504f +8010542e: e9 ea f9 ff ff jmp 80104e1d -80105682 : +80105433 : .globl vector57 vector57: pushl $0 -80105682: 6a 00 push $0x0 +80105433: 6a 00 push $0x0 pushl $57 -80105684: 6a 39 push $0x39 +80105435: 6a 39 push $0x39 jmp alltraps -80105686: e9 c4 f9 ff ff jmp 8010504f +80105437: e9 e1 f9 ff ff jmp 80104e1d -8010568b : +8010543c : .globl vector58 vector58: pushl $0 -8010568b: 6a 00 push $0x0 +8010543c: 6a 00 push $0x0 pushl $58 -8010568d: 6a 3a push $0x3a +8010543e: 6a 3a push $0x3a jmp alltraps -8010568f: e9 bb f9 ff ff jmp 8010504f +80105440: e9 d8 f9 ff ff jmp 80104e1d -80105694 : +80105445 : .globl vector59 vector59: pushl $0 -80105694: 6a 00 push $0x0 +80105445: 6a 00 push $0x0 pushl $59 -80105696: 6a 3b push $0x3b +80105447: 6a 3b push $0x3b jmp alltraps -80105698: e9 b2 f9 ff ff jmp 8010504f +80105449: e9 cf f9 ff ff jmp 80104e1d -8010569d : +8010544e : .globl vector60 vector60: pushl $0 -8010569d: 6a 00 push $0x0 +8010544e: 6a 00 push $0x0 pushl $60 -8010569f: 6a 3c push $0x3c +80105450: 6a 3c push $0x3c jmp alltraps -801056a1: e9 a9 f9 ff ff jmp 8010504f +80105452: e9 c6 f9 ff ff jmp 80104e1d -801056a6 : +80105457 : .globl vector61 vector61: pushl $0 -801056a6: 6a 00 push $0x0 +80105457: 6a 00 push $0x0 pushl $61 -801056a8: 6a 3d push $0x3d +80105459: 6a 3d push $0x3d jmp alltraps -801056aa: e9 a0 f9 ff ff jmp 8010504f +8010545b: e9 bd f9 ff ff jmp 80104e1d -801056af : +80105460 : .globl vector62 vector62: pushl $0 -801056af: 6a 00 push $0x0 +80105460: 6a 00 push $0x0 pushl $62 -801056b1: 6a 3e push $0x3e +80105462: 6a 3e push $0x3e jmp alltraps -801056b3: e9 97 f9 ff ff jmp 8010504f +80105464: e9 b4 f9 ff ff jmp 80104e1d -801056b8 : +80105469 : .globl vector63 vector63: pushl $0 -801056b8: 6a 00 push $0x0 +80105469: 6a 00 push $0x0 pushl $63 -801056ba: 6a 3f push $0x3f +8010546b: 6a 3f push $0x3f jmp alltraps -801056bc: e9 8e f9 ff ff jmp 8010504f +8010546d: e9 ab f9 ff ff jmp 80104e1d -801056c1 : +80105472 : .globl vector64 vector64: pushl $0 -801056c1: 6a 00 push $0x0 +80105472: 6a 00 push $0x0 pushl $64 -801056c3: 6a 40 push $0x40 +80105474: 6a 40 push $0x40 jmp alltraps -801056c5: e9 85 f9 ff ff jmp 8010504f +80105476: e9 a2 f9 ff ff jmp 80104e1d -801056ca : +8010547b : .globl vector65 vector65: pushl $0 -801056ca: 6a 00 push $0x0 +8010547b: 6a 00 push $0x0 pushl $65 -801056cc: 6a 41 push $0x41 +8010547d: 6a 41 push $0x41 jmp alltraps -801056ce: e9 7c f9 ff ff jmp 8010504f +8010547f: e9 99 f9 ff ff jmp 80104e1d -801056d3 : +80105484 : .globl vector66 vector66: pushl $0 -801056d3: 6a 00 push $0x0 +80105484: 6a 00 push $0x0 pushl $66 -801056d5: 6a 42 push $0x42 +80105486: 6a 42 push $0x42 jmp alltraps -801056d7: e9 73 f9 ff ff jmp 8010504f +80105488: e9 90 f9 ff ff jmp 80104e1d -801056dc : +8010548d : .globl vector67 vector67: pushl $0 -801056dc: 6a 00 push $0x0 +8010548d: 6a 00 push $0x0 pushl $67 -801056de: 6a 43 push $0x43 +8010548f: 6a 43 push $0x43 jmp alltraps -801056e0: e9 6a f9 ff ff jmp 8010504f +80105491: e9 87 f9 ff ff jmp 80104e1d -801056e5 : +80105496 : .globl vector68 vector68: pushl $0 -801056e5: 6a 00 push $0x0 +80105496: 6a 00 push $0x0 pushl $68 -801056e7: 6a 44 push $0x44 +80105498: 6a 44 push $0x44 jmp alltraps -801056e9: e9 61 f9 ff ff jmp 8010504f +8010549a: e9 7e f9 ff ff jmp 80104e1d -801056ee : +8010549f : .globl vector69 vector69: pushl $0 -801056ee: 6a 00 push $0x0 +8010549f: 6a 00 push $0x0 pushl $69 -801056f0: 6a 45 push $0x45 +801054a1: 6a 45 push $0x45 jmp alltraps -801056f2: e9 58 f9 ff ff jmp 8010504f +801054a3: e9 75 f9 ff ff jmp 80104e1d -801056f7 : +801054a8 : .globl vector70 vector70: pushl $0 -801056f7: 6a 00 push $0x0 +801054a8: 6a 00 push $0x0 pushl $70 -801056f9: 6a 46 push $0x46 +801054aa: 6a 46 push $0x46 jmp alltraps -801056fb: e9 4f f9 ff ff jmp 8010504f +801054ac: e9 6c f9 ff ff jmp 80104e1d -80105700 : +801054b1 : .globl vector71 vector71: pushl $0 -80105700: 6a 00 push $0x0 +801054b1: 6a 00 push $0x0 pushl $71 -80105702: 6a 47 push $0x47 +801054b3: 6a 47 push $0x47 jmp alltraps -80105704: e9 46 f9 ff ff jmp 8010504f +801054b5: e9 63 f9 ff ff jmp 80104e1d -80105709 : +801054ba : .globl vector72 vector72: pushl $0 -80105709: 6a 00 push $0x0 +801054ba: 6a 00 push $0x0 pushl $72 -8010570b: 6a 48 push $0x48 +801054bc: 6a 48 push $0x48 jmp alltraps -8010570d: e9 3d f9 ff ff jmp 8010504f +801054be: e9 5a f9 ff ff jmp 80104e1d -80105712 : +801054c3 : .globl vector73 vector73: pushl $0 -80105712: 6a 00 push $0x0 +801054c3: 6a 00 push $0x0 pushl $73 -80105714: 6a 49 push $0x49 +801054c5: 6a 49 push $0x49 jmp alltraps -80105716: e9 34 f9 ff ff jmp 8010504f +801054c7: e9 51 f9 ff ff jmp 80104e1d -8010571b : +801054cc : .globl vector74 vector74: pushl $0 -8010571b: 6a 00 push $0x0 +801054cc: 6a 00 push $0x0 pushl $74 -8010571d: 6a 4a push $0x4a +801054ce: 6a 4a push $0x4a jmp alltraps -8010571f: e9 2b f9 ff ff jmp 8010504f +801054d0: e9 48 f9 ff ff jmp 80104e1d -80105724 : +801054d5 : .globl vector75 vector75: pushl $0 -80105724: 6a 00 push $0x0 +801054d5: 6a 00 push $0x0 pushl $75 -80105726: 6a 4b push $0x4b +801054d7: 6a 4b push $0x4b jmp alltraps -80105728: e9 22 f9 ff ff jmp 8010504f +801054d9: e9 3f f9 ff ff jmp 80104e1d -8010572d : +801054de : .globl vector76 vector76: pushl $0 -8010572d: 6a 00 push $0x0 +801054de: 6a 00 push $0x0 pushl $76 -8010572f: 6a 4c push $0x4c +801054e0: 6a 4c push $0x4c jmp alltraps -80105731: e9 19 f9 ff ff jmp 8010504f +801054e2: e9 36 f9 ff ff jmp 80104e1d -80105736 : +801054e7 : .globl vector77 vector77: pushl $0 -80105736: 6a 00 push $0x0 +801054e7: 6a 00 push $0x0 pushl $77 -80105738: 6a 4d push $0x4d +801054e9: 6a 4d push $0x4d jmp alltraps -8010573a: e9 10 f9 ff ff jmp 8010504f +801054eb: e9 2d f9 ff ff jmp 80104e1d -8010573f : +801054f0 : .globl vector78 vector78: pushl $0 -8010573f: 6a 00 push $0x0 +801054f0: 6a 00 push $0x0 pushl $78 -80105741: 6a 4e push $0x4e +801054f2: 6a 4e push $0x4e jmp alltraps -80105743: e9 07 f9 ff ff jmp 8010504f +801054f4: e9 24 f9 ff ff jmp 80104e1d -80105748 : +801054f9 : .globl vector79 vector79: pushl $0 -80105748: 6a 00 push $0x0 +801054f9: 6a 00 push $0x0 pushl $79 -8010574a: 6a 4f push $0x4f +801054fb: 6a 4f push $0x4f jmp alltraps -8010574c: e9 fe f8 ff ff jmp 8010504f +801054fd: e9 1b f9 ff ff jmp 80104e1d -80105751 : +80105502 : .globl vector80 vector80: pushl $0 -80105751: 6a 00 push $0x0 +80105502: 6a 00 push $0x0 pushl $80 -80105753: 6a 50 push $0x50 +80105504: 6a 50 push $0x50 jmp alltraps -80105755: e9 f5 f8 ff ff jmp 8010504f +80105506: e9 12 f9 ff ff jmp 80104e1d -8010575a : +8010550b : .globl vector81 vector81: pushl $0 -8010575a: 6a 00 push $0x0 +8010550b: 6a 00 push $0x0 pushl $81 -8010575c: 6a 51 push $0x51 +8010550d: 6a 51 push $0x51 jmp alltraps -8010575e: e9 ec f8 ff ff jmp 8010504f +8010550f: e9 09 f9 ff ff jmp 80104e1d -80105763 : +80105514 : .globl vector82 vector82: pushl $0 -80105763: 6a 00 push $0x0 +80105514: 6a 00 push $0x0 pushl $82 -80105765: 6a 52 push $0x52 +80105516: 6a 52 push $0x52 jmp alltraps -80105767: e9 e3 f8 ff ff jmp 8010504f +80105518: e9 00 f9 ff ff jmp 80104e1d -8010576c : +8010551d : .globl vector83 vector83: pushl $0 -8010576c: 6a 00 push $0x0 +8010551d: 6a 00 push $0x0 pushl $83 -8010576e: 6a 53 push $0x53 +8010551f: 6a 53 push $0x53 jmp alltraps -80105770: e9 da f8 ff ff jmp 8010504f +80105521: e9 f7 f8 ff ff jmp 80104e1d -80105775 : +80105526 : .globl vector84 vector84: pushl $0 -80105775: 6a 00 push $0x0 +80105526: 6a 00 push $0x0 pushl $84 -80105777: 6a 54 push $0x54 +80105528: 6a 54 push $0x54 jmp alltraps -80105779: e9 d1 f8 ff ff jmp 8010504f +8010552a: e9 ee f8 ff ff jmp 80104e1d -8010577e : +8010552f : .globl vector85 vector85: pushl $0 -8010577e: 6a 00 push $0x0 +8010552f: 6a 00 push $0x0 pushl $85 -80105780: 6a 55 push $0x55 +80105531: 6a 55 push $0x55 jmp alltraps -80105782: e9 c8 f8 ff ff jmp 8010504f +80105533: e9 e5 f8 ff ff jmp 80104e1d -80105787 : +80105538 : .globl vector86 vector86: pushl $0 -80105787: 6a 00 push $0x0 +80105538: 6a 00 push $0x0 pushl $86 -80105789: 6a 56 push $0x56 +8010553a: 6a 56 push $0x56 jmp alltraps -8010578b: e9 bf f8 ff ff jmp 8010504f +8010553c: e9 dc f8 ff ff jmp 80104e1d -80105790 : +80105541 : .globl vector87 vector87: pushl $0 -80105790: 6a 00 push $0x0 +80105541: 6a 00 push $0x0 pushl $87 -80105792: 6a 57 push $0x57 +80105543: 6a 57 push $0x57 jmp alltraps -80105794: e9 b6 f8 ff ff jmp 8010504f +80105545: e9 d3 f8 ff ff jmp 80104e1d -80105799 : +8010554a : .globl vector88 vector88: pushl $0 -80105799: 6a 00 push $0x0 +8010554a: 6a 00 push $0x0 pushl $88 -8010579b: 6a 58 push $0x58 +8010554c: 6a 58 push $0x58 jmp alltraps -8010579d: e9 ad f8 ff ff jmp 8010504f +8010554e: e9 ca f8 ff ff jmp 80104e1d -801057a2 : +80105553 : .globl vector89 vector89: pushl $0 -801057a2: 6a 00 push $0x0 +80105553: 6a 00 push $0x0 pushl $89 -801057a4: 6a 59 push $0x59 +80105555: 6a 59 push $0x59 jmp alltraps -801057a6: e9 a4 f8 ff ff jmp 8010504f +80105557: e9 c1 f8 ff ff jmp 80104e1d -801057ab : +8010555c : .globl vector90 vector90: pushl $0 -801057ab: 6a 00 push $0x0 +8010555c: 6a 00 push $0x0 pushl $90 -801057ad: 6a 5a push $0x5a +8010555e: 6a 5a push $0x5a jmp alltraps -801057af: e9 9b f8 ff ff jmp 8010504f +80105560: e9 b8 f8 ff ff jmp 80104e1d -801057b4 : +80105565 : .globl vector91 vector91: pushl $0 -801057b4: 6a 00 push $0x0 +80105565: 6a 00 push $0x0 pushl $91 -801057b6: 6a 5b push $0x5b +80105567: 6a 5b push $0x5b jmp alltraps -801057b8: e9 92 f8 ff ff jmp 8010504f +80105569: e9 af f8 ff ff jmp 80104e1d -801057bd : +8010556e : .globl vector92 vector92: pushl $0 -801057bd: 6a 00 push $0x0 +8010556e: 6a 00 push $0x0 pushl $92 -801057bf: 6a 5c push $0x5c +80105570: 6a 5c push $0x5c jmp alltraps -801057c1: e9 89 f8 ff ff jmp 8010504f +80105572: e9 a6 f8 ff ff jmp 80104e1d -801057c6 : +80105577 : .globl vector93 vector93: pushl $0 -801057c6: 6a 00 push $0x0 +80105577: 6a 00 push $0x0 pushl $93 -801057c8: 6a 5d push $0x5d +80105579: 6a 5d push $0x5d jmp alltraps -801057ca: e9 80 f8 ff ff jmp 8010504f +8010557b: e9 9d f8 ff ff jmp 80104e1d -801057cf : +80105580 : .globl vector94 vector94: pushl $0 -801057cf: 6a 00 push $0x0 +80105580: 6a 00 push $0x0 pushl $94 -801057d1: 6a 5e push $0x5e +80105582: 6a 5e push $0x5e jmp alltraps -801057d3: e9 77 f8 ff ff jmp 8010504f +80105584: e9 94 f8 ff ff jmp 80104e1d -801057d8 : +80105589 : .globl vector95 vector95: pushl $0 -801057d8: 6a 00 push $0x0 +80105589: 6a 00 push $0x0 pushl $95 -801057da: 6a 5f push $0x5f +8010558b: 6a 5f push $0x5f jmp alltraps -801057dc: e9 6e f8 ff ff jmp 8010504f +8010558d: e9 8b f8 ff ff jmp 80104e1d -801057e1 : +80105592 : .globl vector96 vector96: pushl $0 -801057e1: 6a 00 push $0x0 +80105592: 6a 00 push $0x0 pushl $96 -801057e3: 6a 60 push $0x60 +80105594: 6a 60 push $0x60 jmp alltraps -801057e5: e9 65 f8 ff ff jmp 8010504f +80105596: e9 82 f8 ff ff jmp 80104e1d -801057ea : +8010559b : .globl vector97 vector97: pushl $0 -801057ea: 6a 00 push $0x0 +8010559b: 6a 00 push $0x0 pushl $97 -801057ec: 6a 61 push $0x61 +8010559d: 6a 61 push $0x61 jmp alltraps -801057ee: e9 5c f8 ff ff jmp 8010504f +8010559f: e9 79 f8 ff ff jmp 80104e1d -801057f3 : +801055a4 : .globl vector98 vector98: pushl $0 -801057f3: 6a 00 push $0x0 +801055a4: 6a 00 push $0x0 pushl $98 -801057f5: 6a 62 push $0x62 +801055a6: 6a 62 push $0x62 jmp alltraps -801057f7: e9 53 f8 ff ff jmp 8010504f +801055a8: e9 70 f8 ff ff jmp 80104e1d -801057fc : +801055ad : .globl vector99 vector99: pushl $0 -801057fc: 6a 00 push $0x0 +801055ad: 6a 00 push $0x0 pushl $99 -801057fe: 6a 63 push $0x63 +801055af: 6a 63 push $0x63 jmp alltraps -80105800: e9 4a f8 ff ff jmp 8010504f +801055b1: e9 67 f8 ff ff jmp 80104e1d -80105805 : +801055b6 : .globl vector100 vector100: pushl $0 -80105805: 6a 00 push $0x0 +801055b6: 6a 00 push $0x0 pushl $100 -80105807: 6a 64 push $0x64 +801055b8: 6a 64 push $0x64 jmp alltraps -80105809: e9 41 f8 ff ff jmp 8010504f +801055ba: e9 5e f8 ff ff jmp 80104e1d -8010580e : +801055bf : .globl vector101 vector101: pushl $0 -8010580e: 6a 00 push $0x0 +801055bf: 6a 00 push $0x0 pushl $101 -80105810: 6a 65 push $0x65 +801055c1: 6a 65 push $0x65 jmp alltraps -80105812: e9 38 f8 ff ff jmp 8010504f +801055c3: e9 55 f8 ff ff jmp 80104e1d -80105817 : +801055c8 : .globl vector102 vector102: pushl $0 -80105817: 6a 00 push $0x0 +801055c8: 6a 00 push $0x0 pushl $102 -80105819: 6a 66 push $0x66 +801055ca: 6a 66 push $0x66 jmp alltraps -8010581b: e9 2f f8 ff ff jmp 8010504f +801055cc: e9 4c f8 ff ff jmp 80104e1d -80105820 : +801055d1 : .globl vector103 vector103: pushl $0 -80105820: 6a 00 push $0x0 +801055d1: 6a 00 push $0x0 pushl $103 -80105822: 6a 67 push $0x67 +801055d3: 6a 67 push $0x67 jmp alltraps -80105824: e9 26 f8 ff ff jmp 8010504f +801055d5: e9 43 f8 ff ff jmp 80104e1d -80105829 : +801055da : .globl vector104 vector104: pushl $0 -80105829: 6a 00 push $0x0 +801055da: 6a 00 push $0x0 pushl $104 -8010582b: 6a 68 push $0x68 +801055dc: 6a 68 push $0x68 jmp alltraps -8010582d: e9 1d f8 ff ff jmp 8010504f +801055de: e9 3a f8 ff ff jmp 80104e1d -80105832 : +801055e3 : .globl vector105 vector105: pushl $0 -80105832: 6a 00 push $0x0 +801055e3: 6a 00 push $0x0 pushl $105 -80105834: 6a 69 push $0x69 +801055e5: 6a 69 push $0x69 jmp alltraps -80105836: e9 14 f8 ff ff jmp 8010504f +801055e7: e9 31 f8 ff ff jmp 80104e1d -8010583b : +801055ec : .globl vector106 vector106: pushl $0 -8010583b: 6a 00 push $0x0 +801055ec: 6a 00 push $0x0 pushl $106 -8010583d: 6a 6a push $0x6a +801055ee: 6a 6a push $0x6a jmp alltraps -8010583f: e9 0b f8 ff ff jmp 8010504f +801055f0: e9 28 f8 ff ff jmp 80104e1d -80105844 : +801055f5 : .globl vector107 vector107: pushl $0 -80105844: 6a 00 push $0x0 +801055f5: 6a 00 push $0x0 pushl $107 -80105846: 6a 6b push $0x6b +801055f7: 6a 6b push $0x6b jmp alltraps -80105848: e9 02 f8 ff ff jmp 8010504f +801055f9: e9 1f f8 ff ff jmp 80104e1d -8010584d : +801055fe : .globl vector108 vector108: pushl $0 -8010584d: 6a 00 push $0x0 +801055fe: 6a 00 push $0x0 pushl $108 -8010584f: 6a 6c push $0x6c +80105600: 6a 6c push $0x6c jmp alltraps -80105851: e9 f9 f7 ff ff jmp 8010504f +80105602: e9 16 f8 ff ff jmp 80104e1d -80105856 : +80105607 : .globl vector109 vector109: pushl $0 -80105856: 6a 00 push $0x0 +80105607: 6a 00 push $0x0 pushl $109 -80105858: 6a 6d push $0x6d +80105609: 6a 6d push $0x6d jmp alltraps -8010585a: e9 f0 f7 ff ff jmp 8010504f +8010560b: e9 0d f8 ff ff jmp 80104e1d -8010585f : +80105610 : .globl vector110 vector110: pushl $0 -8010585f: 6a 00 push $0x0 +80105610: 6a 00 push $0x0 pushl $110 -80105861: 6a 6e push $0x6e +80105612: 6a 6e push $0x6e jmp alltraps -80105863: e9 e7 f7 ff ff jmp 8010504f +80105614: e9 04 f8 ff ff jmp 80104e1d -80105868 : +80105619 : .globl vector111 vector111: pushl $0 -80105868: 6a 00 push $0x0 +80105619: 6a 00 push $0x0 pushl $111 -8010586a: 6a 6f push $0x6f +8010561b: 6a 6f push $0x6f jmp alltraps -8010586c: e9 de f7 ff ff jmp 8010504f +8010561d: e9 fb f7 ff ff jmp 80104e1d -80105871 : +80105622 : .globl vector112 vector112: pushl $0 -80105871: 6a 00 push $0x0 +80105622: 6a 00 push $0x0 pushl $112 -80105873: 6a 70 push $0x70 +80105624: 6a 70 push $0x70 jmp alltraps -80105875: e9 d5 f7 ff ff jmp 8010504f +80105626: e9 f2 f7 ff ff jmp 80104e1d -8010587a : +8010562b : .globl vector113 vector113: pushl $0 -8010587a: 6a 00 push $0x0 +8010562b: 6a 00 push $0x0 pushl $113 -8010587c: 6a 71 push $0x71 +8010562d: 6a 71 push $0x71 jmp alltraps -8010587e: e9 cc f7 ff ff jmp 8010504f +8010562f: e9 e9 f7 ff ff jmp 80104e1d -80105883 : +80105634 : .globl vector114 vector114: pushl $0 -80105883: 6a 00 push $0x0 +80105634: 6a 00 push $0x0 pushl $114 -80105885: 6a 72 push $0x72 +80105636: 6a 72 push $0x72 jmp alltraps -80105887: e9 c3 f7 ff ff jmp 8010504f +80105638: e9 e0 f7 ff ff jmp 80104e1d -8010588c : +8010563d : .globl vector115 vector115: pushl $0 -8010588c: 6a 00 push $0x0 +8010563d: 6a 00 push $0x0 pushl $115 -8010588e: 6a 73 push $0x73 +8010563f: 6a 73 push $0x73 jmp alltraps -80105890: e9 ba f7 ff ff jmp 8010504f +80105641: e9 d7 f7 ff ff jmp 80104e1d -80105895 : +80105646 : .globl vector116 vector116: pushl $0 -80105895: 6a 00 push $0x0 +80105646: 6a 00 push $0x0 pushl $116 -80105897: 6a 74 push $0x74 +80105648: 6a 74 push $0x74 jmp alltraps -80105899: e9 b1 f7 ff ff jmp 8010504f +8010564a: e9 ce f7 ff ff jmp 80104e1d -8010589e : +8010564f : .globl vector117 vector117: pushl $0 -8010589e: 6a 00 push $0x0 +8010564f: 6a 00 push $0x0 pushl $117 -801058a0: 6a 75 push $0x75 +80105651: 6a 75 push $0x75 jmp alltraps -801058a2: e9 a8 f7 ff ff jmp 8010504f +80105653: e9 c5 f7 ff ff jmp 80104e1d -801058a7 : +80105658 : .globl vector118 vector118: pushl $0 -801058a7: 6a 00 push $0x0 +80105658: 6a 00 push $0x0 pushl $118 -801058a9: 6a 76 push $0x76 +8010565a: 6a 76 push $0x76 jmp alltraps -801058ab: e9 9f f7 ff ff jmp 8010504f +8010565c: e9 bc f7 ff ff jmp 80104e1d -801058b0 : +80105661 : .globl vector119 vector119: pushl $0 -801058b0: 6a 00 push $0x0 +80105661: 6a 00 push $0x0 pushl $119 -801058b2: 6a 77 push $0x77 +80105663: 6a 77 push $0x77 jmp alltraps -801058b4: e9 96 f7 ff ff jmp 8010504f +80105665: e9 b3 f7 ff ff jmp 80104e1d -801058b9 : +8010566a : .globl vector120 vector120: pushl $0 -801058b9: 6a 00 push $0x0 +8010566a: 6a 00 push $0x0 pushl $120 -801058bb: 6a 78 push $0x78 +8010566c: 6a 78 push $0x78 jmp alltraps -801058bd: e9 8d f7 ff ff jmp 8010504f +8010566e: e9 aa f7 ff ff jmp 80104e1d -801058c2 : +80105673 : .globl vector121 vector121: pushl $0 -801058c2: 6a 00 push $0x0 +80105673: 6a 00 push $0x0 pushl $121 -801058c4: 6a 79 push $0x79 +80105675: 6a 79 push $0x79 jmp alltraps -801058c6: e9 84 f7 ff ff jmp 8010504f +80105677: e9 a1 f7 ff ff jmp 80104e1d -801058cb : +8010567c : .globl vector122 vector122: pushl $0 -801058cb: 6a 00 push $0x0 +8010567c: 6a 00 push $0x0 pushl $122 -801058cd: 6a 7a push $0x7a +8010567e: 6a 7a push $0x7a jmp alltraps -801058cf: e9 7b f7 ff ff jmp 8010504f +80105680: e9 98 f7 ff ff jmp 80104e1d -801058d4 : +80105685 : .globl vector123 vector123: pushl $0 -801058d4: 6a 00 push $0x0 +80105685: 6a 00 push $0x0 pushl $123 -801058d6: 6a 7b push $0x7b +80105687: 6a 7b push $0x7b jmp alltraps -801058d8: e9 72 f7 ff ff jmp 8010504f +80105689: e9 8f f7 ff ff jmp 80104e1d -801058dd : +8010568e : .globl vector124 vector124: pushl $0 -801058dd: 6a 00 push $0x0 +8010568e: 6a 00 push $0x0 pushl $124 -801058df: 6a 7c push $0x7c +80105690: 6a 7c push $0x7c jmp alltraps -801058e1: e9 69 f7 ff ff jmp 8010504f +80105692: e9 86 f7 ff ff jmp 80104e1d -801058e6 : +80105697 : .globl vector125 vector125: pushl $0 -801058e6: 6a 00 push $0x0 +80105697: 6a 00 push $0x0 pushl $125 -801058e8: 6a 7d push $0x7d +80105699: 6a 7d push $0x7d jmp alltraps -801058ea: e9 60 f7 ff ff jmp 8010504f +8010569b: e9 7d f7 ff ff jmp 80104e1d -801058ef : +801056a0 : .globl vector126 vector126: pushl $0 -801058ef: 6a 00 push $0x0 +801056a0: 6a 00 push $0x0 pushl $126 -801058f1: 6a 7e push $0x7e +801056a2: 6a 7e push $0x7e jmp alltraps -801058f3: e9 57 f7 ff ff jmp 8010504f +801056a4: e9 74 f7 ff ff jmp 80104e1d -801058f8 : +801056a9 : .globl vector127 vector127: pushl $0 -801058f8: 6a 00 push $0x0 +801056a9: 6a 00 push $0x0 pushl $127 -801058fa: 6a 7f push $0x7f +801056ab: 6a 7f push $0x7f jmp alltraps -801058fc: e9 4e f7 ff ff jmp 8010504f +801056ad: e9 6b f7 ff ff jmp 80104e1d -80105901 : +801056b2 : .globl vector128 vector128: pushl $0 -80105901: 6a 00 push $0x0 +801056b2: 6a 00 push $0x0 pushl $128 -80105903: 68 80 00 00 00 push $0x80 +801056b4: 68 80 00 00 00 push $0x80 jmp alltraps -80105908: e9 42 f7 ff ff jmp 8010504f +801056b9: e9 5f f7 ff ff jmp 80104e1d -8010590d : +801056be : .globl vector129 vector129: pushl $0 -8010590d: 6a 00 push $0x0 +801056be: 6a 00 push $0x0 pushl $129 -8010590f: 68 81 00 00 00 push $0x81 +801056c0: 68 81 00 00 00 push $0x81 jmp alltraps -80105914: e9 36 f7 ff ff jmp 8010504f +801056c5: e9 53 f7 ff ff jmp 80104e1d -80105919 : +801056ca : .globl vector130 vector130: pushl $0 -80105919: 6a 00 push $0x0 +801056ca: 6a 00 push $0x0 pushl $130 -8010591b: 68 82 00 00 00 push $0x82 +801056cc: 68 82 00 00 00 push $0x82 jmp alltraps -80105920: e9 2a f7 ff ff jmp 8010504f +801056d1: e9 47 f7 ff ff jmp 80104e1d -80105925 : +801056d6 : .globl vector131 vector131: pushl $0 -80105925: 6a 00 push $0x0 +801056d6: 6a 00 push $0x0 pushl $131 -80105927: 68 83 00 00 00 push $0x83 +801056d8: 68 83 00 00 00 push $0x83 jmp alltraps -8010592c: e9 1e f7 ff ff jmp 8010504f +801056dd: e9 3b f7 ff ff jmp 80104e1d -80105931 : +801056e2 : .globl vector132 vector132: pushl $0 -80105931: 6a 00 push $0x0 +801056e2: 6a 00 push $0x0 pushl $132 -80105933: 68 84 00 00 00 push $0x84 +801056e4: 68 84 00 00 00 push $0x84 jmp alltraps -80105938: e9 12 f7 ff ff jmp 8010504f +801056e9: e9 2f f7 ff ff jmp 80104e1d -8010593d : +801056ee : .globl vector133 vector133: pushl $0 -8010593d: 6a 00 push $0x0 +801056ee: 6a 00 push $0x0 pushl $133 -8010593f: 68 85 00 00 00 push $0x85 +801056f0: 68 85 00 00 00 push $0x85 jmp alltraps -80105944: e9 06 f7 ff ff jmp 8010504f +801056f5: e9 23 f7 ff ff jmp 80104e1d -80105949 : +801056fa : .globl vector134 vector134: pushl $0 -80105949: 6a 00 push $0x0 +801056fa: 6a 00 push $0x0 pushl $134 -8010594b: 68 86 00 00 00 push $0x86 +801056fc: 68 86 00 00 00 push $0x86 jmp alltraps -80105950: e9 fa f6 ff ff jmp 8010504f +80105701: e9 17 f7 ff ff jmp 80104e1d -80105955 : +80105706 : .globl vector135 vector135: pushl $0 -80105955: 6a 00 push $0x0 +80105706: 6a 00 push $0x0 pushl $135 -80105957: 68 87 00 00 00 push $0x87 +80105708: 68 87 00 00 00 push $0x87 jmp alltraps -8010595c: e9 ee f6 ff ff jmp 8010504f +8010570d: e9 0b f7 ff ff jmp 80104e1d -80105961 : +80105712 : .globl vector136 vector136: pushl $0 -80105961: 6a 00 push $0x0 +80105712: 6a 00 push $0x0 pushl $136 -80105963: 68 88 00 00 00 push $0x88 +80105714: 68 88 00 00 00 push $0x88 jmp alltraps -80105968: e9 e2 f6 ff ff jmp 8010504f +80105719: e9 ff f6 ff ff jmp 80104e1d -8010596d : +8010571e : .globl vector137 vector137: pushl $0 -8010596d: 6a 00 push $0x0 +8010571e: 6a 00 push $0x0 pushl $137 -8010596f: 68 89 00 00 00 push $0x89 +80105720: 68 89 00 00 00 push $0x89 jmp alltraps -80105974: e9 d6 f6 ff ff jmp 8010504f +80105725: e9 f3 f6 ff ff jmp 80104e1d -80105979 : +8010572a : .globl vector138 vector138: pushl $0 -80105979: 6a 00 push $0x0 +8010572a: 6a 00 push $0x0 pushl $138 -8010597b: 68 8a 00 00 00 push $0x8a +8010572c: 68 8a 00 00 00 push $0x8a jmp alltraps -80105980: e9 ca f6 ff ff jmp 8010504f +80105731: e9 e7 f6 ff ff jmp 80104e1d -80105985 : +80105736 : .globl vector139 vector139: pushl $0 -80105985: 6a 00 push $0x0 +80105736: 6a 00 push $0x0 pushl $139 -80105987: 68 8b 00 00 00 push $0x8b +80105738: 68 8b 00 00 00 push $0x8b jmp alltraps -8010598c: e9 be f6 ff ff jmp 8010504f +8010573d: e9 db f6 ff ff jmp 80104e1d -80105991 : +80105742 : .globl vector140 vector140: pushl $0 -80105991: 6a 00 push $0x0 +80105742: 6a 00 push $0x0 pushl $140 -80105993: 68 8c 00 00 00 push $0x8c +80105744: 68 8c 00 00 00 push $0x8c jmp alltraps -80105998: e9 b2 f6 ff ff jmp 8010504f +80105749: e9 cf f6 ff ff jmp 80104e1d -8010599d : +8010574e : .globl vector141 vector141: pushl $0 -8010599d: 6a 00 push $0x0 +8010574e: 6a 00 push $0x0 pushl $141 -8010599f: 68 8d 00 00 00 push $0x8d +80105750: 68 8d 00 00 00 push $0x8d jmp alltraps -801059a4: e9 a6 f6 ff ff jmp 8010504f +80105755: e9 c3 f6 ff ff jmp 80104e1d -801059a9 : +8010575a : .globl vector142 vector142: pushl $0 -801059a9: 6a 00 push $0x0 +8010575a: 6a 00 push $0x0 pushl $142 -801059ab: 68 8e 00 00 00 push $0x8e +8010575c: 68 8e 00 00 00 push $0x8e jmp alltraps -801059b0: e9 9a f6 ff ff jmp 8010504f +80105761: e9 b7 f6 ff ff jmp 80104e1d -801059b5 : +80105766 : .globl vector143 vector143: pushl $0 -801059b5: 6a 00 push $0x0 +80105766: 6a 00 push $0x0 pushl $143 -801059b7: 68 8f 00 00 00 push $0x8f +80105768: 68 8f 00 00 00 push $0x8f jmp alltraps -801059bc: e9 8e f6 ff ff jmp 8010504f +8010576d: e9 ab f6 ff ff jmp 80104e1d -801059c1 : +80105772 : .globl vector144 vector144: pushl $0 -801059c1: 6a 00 push $0x0 +80105772: 6a 00 push $0x0 pushl $144 -801059c3: 68 90 00 00 00 push $0x90 +80105774: 68 90 00 00 00 push $0x90 jmp alltraps -801059c8: e9 82 f6 ff ff jmp 8010504f +80105779: e9 9f f6 ff ff jmp 80104e1d -801059cd : +8010577e : .globl vector145 vector145: pushl $0 -801059cd: 6a 00 push $0x0 +8010577e: 6a 00 push $0x0 pushl $145 -801059cf: 68 91 00 00 00 push $0x91 +80105780: 68 91 00 00 00 push $0x91 jmp alltraps -801059d4: e9 76 f6 ff ff jmp 8010504f +80105785: e9 93 f6 ff ff jmp 80104e1d -801059d9 : +8010578a : .globl vector146 vector146: pushl $0 -801059d9: 6a 00 push $0x0 +8010578a: 6a 00 push $0x0 pushl $146 -801059db: 68 92 00 00 00 push $0x92 +8010578c: 68 92 00 00 00 push $0x92 jmp alltraps -801059e0: e9 6a f6 ff ff jmp 8010504f +80105791: e9 87 f6 ff ff jmp 80104e1d -801059e5 : +80105796 : .globl vector147 vector147: pushl $0 -801059e5: 6a 00 push $0x0 +80105796: 6a 00 push $0x0 pushl $147 -801059e7: 68 93 00 00 00 push $0x93 +80105798: 68 93 00 00 00 push $0x93 jmp alltraps -801059ec: e9 5e f6 ff ff jmp 8010504f +8010579d: e9 7b f6 ff ff jmp 80104e1d -801059f1 : +801057a2 : .globl vector148 vector148: pushl $0 -801059f1: 6a 00 push $0x0 +801057a2: 6a 00 push $0x0 pushl $148 -801059f3: 68 94 00 00 00 push $0x94 +801057a4: 68 94 00 00 00 push $0x94 jmp alltraps -801059f8: e9 52 f6 ff ff jmp 8010504f +801057a9: e9 6f f6 ff ff jmp 80104e1d -801059fd : +801057ae : .globl vector149 vector149: pushl $0 -801059fd: 6a 00 push $0x0 +801057ae: 6a 00 push $0x0 pushl $149 -801059ff: 68 95 00 00 00 push $0x95 +801057b0: 68 95 00 00 00 push $0x95 jmp alltraps -80105a04: e9 46 f6 ff ff jmp 8010504f +801057b5: e9 63 f6 ff ff jmp 80104e1d -80105a09 : +801057ba : .globl vector150 vector150: pushl $0 -80105a09: 6a 00 push $0x0 +801057ba: 6a 00 push $0x0 pushl $150 -80105a0b: 68 96 00 00 00 push $0x96 +801057bc: 68 96 00 00 00 push $0x96 jmp alltraps -80105a10: e9 3a f6 ff ff jmp 8010504f +801057c1: e9 57 f6 ff ff jmp 80104e1d -80105a15 : +801057c6 : .globl vector151 vector151: pushl $0 -80105a15: 6a 00 push $0x0 +801057c6: 6a 00 push $0x0 pushl $151 -80105a17: 68 97 00 00 00 push $0x97 +801057c8: 68 97 00 00 00 push $0x97 jmp alltraps -80105a1c: e9 2e f6 ff ff jmp 8010504f +801057cd: e9 4b f6 ff ff jmp 80104e1d -80105a21 : +801057d2 : .globl vector152 vector152: pushl $0 -80105a21: 6a 00 push $0x0 +801057d2: 6a 00 push $0x0 pushl $152 -80105a23: 68 98 00 00 00 push $0x98 +801057d4: 68 98 00 00 00 push $0x98 jmp alltraps -80105a28: e9 22 f6 ff ff jmp 8010504f +801057d9: e9 3f f6 ff ff jmp 80104e1d -80105a2d : +801057de : .globl vector153 vector153: pushl $0 -80105a2d: 6a 00 push $0x0 +801057de: 6a 00 push $0x0 pushl $153 -80105a2f: 68 99 00 00 00 push $0x99 +801057e0: 68 99 00 00 00 push $0x99 jmp alltraps -80105a34: e9 16 f6 ff ff jmp 8010504f +801057e5: e9 33 f6 ff ff jmp 80104e1d -80105a39 : +801057ea : .globl vector154 vector154: pushl $0 -80105a39: 6a 00 push $0x0 +801057ea: 6a 00 push $0x0 pushl $154 -80105a3b: 68 9a 00 00 00 push $0x9a +801057ec: 68 9a 00 00 00 push $0x9a jmp alltraps -80105a40: e9 0a f6 ff ff jmp 8010504f +801057f1: e9 27 f6 ff ff jmp 80104e1d -80105a45 : +801057f6 : .globl vector155 vector155: pushl $0 -80105a45: 6a 00 push $0x0 +801057f6: 6a 00 push $0x0 pushl $155 -80105a47: 68 9b 00 00 00 push $0x9b +801057f8: 68 9b 00 00 00 push $0x9b jmp alltraps -80105a4c: e9 fe f5 ff ff jmp 8010504f +801057fd: e9 1b f6 ff ff jmp 80104e1d -80105a51 : +80105802 : .globl vector156 vector156: pushl $0 -80105a51: 6a 00 push $0x0 +80105802: 6a 00 push $0x0 pushl $156 -80105a53: 68 9c 00 00 00 push $0x9c +80105804: 68 9c 00 00 00 push $0x9c jmp alltraps -80105a58: e9 f2 f5 ff ff jmp 8010504f +80105809: e9 0f f6 ff ff jmp 80104e1d -80105a5d : +8010580e : .globl vector157 vector157: pushl $0 -80105a5d: 6a 00 push $0x0 +8010580e: 6a 00 push $0x0 pushl $157 -80105a5f: 68 9d 00 00 00 push $0x9d +80105810: 68 9d 00 00 00 push $0x9d jmp alltraps -80105a64: e9 e6 f5 ff ff jmp 8010504f +80105815: e9 03 f6 ff ff jmp 80104e1d -80105a69 : +8010581a : .globl vector158 vector158: pushl $0 -80105a69: 6a 00 push $0x0 +8010581a: 6a 00 push $0x0 pushl $158 -80105a6b: 68 9e 00 00 00 push $0x9e +8010581c: 68 9e 00 00 00 push $0x9e jmp alltraps -80105a70: e9 da f5 ff ff jmp 8010504f +80105821: e9 f7 f5 ff ff jmp 80104e1d -80105a75 : +80105826 : .globl vector159 vector159: pushl $0 -80105a75: 6a 00 push $0x0 +80105826: 6a 00 push $0x0 pushl $159 -80105a77: 68 9f 00 00 00 push $0x9f +80105828: 68 9f 00 00 00 push $0x9f jmp alltraps -80105a7c: e9 ce f5 ff ff jmp 8010504f +8010582d: e9 eb f5 ff ff jmp 80104e1d -80105a81 : +80105832 : .globl vector160 vector160: pushl $0 -80105a81: 6a 00 push $0x0 +80105832: 6a 00 push $0x0 pushl $160 -80105a83: 68 a0 00 00 00 push $0xa0 +80105834: 68 a0 00 00 00 push $0xa0 jmp alltraps -80105a88: e9 c2 f5 ff ff jmp 8010504f +80105839: e9 df f5 ff ff jmp 80104e1d -80105a8d : +8010583e : .globl vector161 vector161: pushl $0 -80105a8d: 6a 00 push $0x0 +8010583e: 6a 00 push $0x0 pushl $161 -80105a8f: 68 a1 00 00 00 push $0xa1 +80105840: 68 a1 00 00 00 push $0xa1 jmp alltraps -80105a94: e9 b6 f5 ff ff jmp 8010504f +80105845: e9 d3 f5 ff ff jmp 80104e1d -80105a99 : +8010584a : .globl vector162 vector162: pushl $0 -80105a99: 6a 00 push $0x0 +8010584a: 6a 00 push $0x0 pushl $162 -80105a9b: 68 a2 00 00 00 push $0xa2 +8010584c: 68 a2 00 00 00 push $0xa2 jmp alltraps -80105aa0: e9 aa f5 ff ff jmp 8010504f +80105851: e9 c7 f5 ff ff jmp 80104e1d -80105aa5 : +80105856 : .globl vector163 vector163: pushl $0 -80105aa5: 6a 00 push $0x0 +80105856: 6a 00 push $0x0 pushl $163 -80105aa7: 68 a3 00 00 00 push $0xa3 +80105858: 68 a3 00 00 00 push $0xa3 jmp alltraps -80105aac: e9 9e f5 ff ff jmp 8010504f +8010585d: e9 bb f5 ff ff jmp 80104e1d -80105ab1 : +80105862 : .globl vector164 vector164: pushl $0 -80105ab1: 6a 00 push $0x0 +80105862: 6a 00 push $0x0 pushl $164 -80105ab3: 68 a4 00 00 00 push $0xa4 +80105864: 68 a4 00 00 00 push $0xa4 jmp alltraps -80105ab8: e9 92 f5 ff ff jmp 8010504f +80105869: e9 af f5 ff ff jmp 80104e1d -80105abd : +8010586e : .globl vector165 vector165: pushl $0 -80105abd: 6a 00 push $0x0 +8010586e: 6a 00 push $0x0 pushl $165 -80105abf: 68 a5 00 00 00 push $0xa5 +80105870: 68 a5 00 00 00 push $0xa5 jmp alltraps -80105ac4: e9 86 f5 ff ff jmp 8010504f +80105875: e9 a3 f5 ff ff jmp 80104e1d -80105ac9 : +8010587a : .globl vector166 vector166: pushl $0 -80105ac9: 6a 00 push $0x0 +8010587a: 6a 00 push $0x0 pushl $166 -80105acb: 68 a6 00 00 00 push $0xa6 +8010587c: 68 a6 00 00 00 push $0xa6 jmp alltraps -80105ad0: e9 7a f5 ff ff jmp 8010504f +80105881: e9 97 f5 ff ff jmp 80104e1d -80105ad5 : +80105886 : .globl vector167 vector167: pushl $0 -80105ad5: 6a 00 push $0x0 +80105886: 6a 00 push $0x0 pushl $167 -80105ad7: 68 a7 00 00 00 push $0xa7 +80105888: 68 a7 00 00 00 push $0xa7 jmp alltraps -80105adc: e9 6e f5 ff ff jmp 8010504f +8010588d: e9 8b f5 ff ff jmp 80104e1d -80105ae1 : +80105892 : .globl vector168 vector168: pushl $0 -80105ae1: 6a 00 push $0x0 +80105892: 6a 00 push $0x0 pushl $168 -80105ae3: 68 a8 00 00 00 push $0xa8 +80105894: 68 a8 00 00 00 push $0xa8 jmp alltraps -80105ae8: e9 62 f5 ff ff jmp 8010504f +80105899: e9 7f f5 ff ff jmp 80104e1d -80105aed : +8010589e : .globl vector169 vector169: pushl $0 -80105aed: 6a 00 push $0x0 +8010589e: 6a 00 push $0x0 pushl $169 -80105aef: 68 a9 00 00 00 push $0xa9 +801058a0: 68 a9 00 00 00 push $0xa9 jmp alltraps -80105af4: e9 56 f5 ff ff jmp 8010504f +801058a5: e9 73 f5 ff ff jmp 80104e1d -80105af9 : +801058aa : .globl vector170 vector170: pushl $0 -80105af9: 6a 00 push $0x0 +801058aa: 6a 00 push $0x0 pushl $170 -80105afb: 68 aa 00 00 00 push $0xaa +801058ac: 68 aa 00 00 00 push $0xaa jmp alltraps -80105b00: e9 4a f5 ff ff jmp 8010504f +801058b1: e9 67 f5 ff ff jmp 80104e1d -80105b05 : +801058b6 : .globl vector171 vector171: pushl $0 -80105b05: 6a 00 push $0x0 +801058b6: 6a 00 push $0x0 pushl $171 -80105b07: 68 ab 00 00 00 push $0xab +801058b8: 68 ab 00 00 00 push $0xab jmp alltraps -80105b0c: e9 3e f5 ff ff jmp 8010504f +801058bd: e9 5b f5 ff ff jmp 80104e1d -80105b11 : +801058c2 : .globl vector172 vector172: pushl $0 -80105b11: 6a 00 push $0x0 +801058c2: 6a 00 push $0x0 pushl $172 -80105b13: 68 ac 00 00 00 push $0xac +801058c4: 68 ac 00 00 00 push $0xac jmp alltraps -80105b18: e9 32 f5 ff ff jmp 8010504f +801058c9: e9 4f f5 ff ff jmp 80104e1d -80105b1d : +801058ce : .globl vector173 vector173: pushl $0 -80105b1d: 6a 00 push $0x0 +801058ce: 6a 00 push $0x0 pushl $173 -80105b1f: 68 ad 00 00 00 push $0xad +801058d0: 68 ad 00 00 00 push $0xad jmp alltraps -80105b24: e9 26 f5 ff ff jmp 8010504f +801058d5: e9 43 f5 ff ff jmp 80104e1d -80105b29 : +801058da : .globl vector174 vector174: pushl $0 -80105b29: 6a 00 push $0x0 +801058da: 6a 00 push $0x0 pushl $174 -80105b2b: 68 ae 00 00 00 push $0xae +801058dc: 68 ae 00 00 00 push $0xae jmp alltraps -80105b30: e9 1a f5 ff ff jmp 8010504f +801058e1: e9 37 f5 ff ff jmp 80104e1d -80105b35 : +801058e6 : .globl vector175 vector175: pushl $0 -80105b35: 6a 00 push $0x0 +801058e6: 6a 00 push $0x0 pushl $175 -80105b37: 68 af 00 00 00 push $0xaf +801058e8: 68 af 00 00 00 push $0xaf jmp alltraps -80105b3c: e9 0e f5 ff ff jmp 8010504f +801058ed: e9 2b f5 ff ff jmp 80104e1d -80105b41 : +801058f2 : .globl vector176 vector176: pushl $0 -80105b41: 6a 00 push $0x0 +801058f2: 6a 00 push $0x0 pushl $176 -80105b43: 68 b0 00 00 00 push $0xb0 +801058f4: 68 b0 00 00 00 push $0xb0 jmp alltraps -80105b48: e9 02 f5 ff ff jmp 8010504f +801058f9: e9 1f f5 ff ff jmp 80104e1d -80105b4d : +801058fe : .globl vector177 vector177: pushl $0 -80105b4d: 6a 00 push $0x0 +801058fe: 6a 00 push $0x0 pushl $177 -80105b4f: 68 b1 00 00 00 push $0xb1 +80105900: 68 b1 00 00 00 push $0xb1 jmp alltraps -80105b54: e9 f6 f4 ff ff jmp 8010504f +80105905: e9 13 f5 ff ff jmp 80104e1d -80105b59 : +8010590a : .globl vector178 vector178: pushl $0 -80105b59: 6a 00 push $0x0 +8010590a: 6a 00 push $0x0 pushl $178 -80105b5b: 68 b2 00 00 00 push $0xb2 +8010590c: 68 b2 00 00 00 push $0xb2 jmp alltraps -80105b60: e9 ea f4 ff ff jmp 8010504f +80105911: e9 07 f5 ff ff jmp 80104e1d -80105b65 : +80105916 : .globl vector179 vector179: pushl $0 -80105b65: 6a 00 push $0x0 +80105916: 6a 00 push $0x0 pushl $179 -80105b67: 68 b3 00 00 00 push $0xb3 +80105918: 68 b3 00 00 00 push $0xb3 jmp alltraps -80105b6c: e9 de f4 ff ff jmp 8010504f +8010591d: e9 fb f4 ff ff jmp 80104e1d -80105b71 : +80105922 : .globl vector180 vector180: pushl $0 -80105b71: 6a 00 push $0x0 +80105922: 6a 00 push $0x0 pushl $180 -80105b73: 68 b4 00 00 00 push $0xb4 +80105924: 68 b4 00 00 00 push $0xb4 jmp alltraps -80105b78: e9 d2 f4 ff ff jmp 8010504f +80105929: e9 ef f4 ff ff jmp 80104e1d -80105b7d : +8010592e : .globl vector181 vector181: pushl $0 -80105b7d: 6a 00 push $0x0 +8010592e: 6a 00 push $0x0 pushl $181 -80105b7f: 68 b5 00 00 00 push $0xb5 +80105930: 68 b5 00 00 00 push $0xb5 jmp alltraps -80105b84: e9 c6 f4 ff ff jmp 8010504f +80105935: e9 e3 f4 ff ff jmp 80104e1d -80105b89 : +8010593a : .globl vector182 vector182: pushl $0 -80105b89: 6a 00 push $0x0 +8010593a: 6a 00 push $0x0 pushl $182 -80105b8b: 68 b6 00 00 00 push $0xb6 +8010593c: 68 b6 00 00 00 push $0xb6 jmp alltraps -80105b90: e9 ba f4 ff ff jmp 8010504f +80105941: e9 d7 f4 ff ff jmp 80104e1d -80105b95 : +80105946 : .globl vector183 vector183: pushl $0 -80105b95: 6a 00 push $0x0 +80105946: 6a 00 push $0x0 pushl $183 -80105b97: 68 b7 00 00 00 push $0xb7 +80105948: 68 b7 00 00 00 push $0xb7 jmp alltraps -80105b9c: e9 ae f4 ff ff jmp 8010504f +8010594d: e9 cb f4 ff ff jmp 80104e1d -80105ba1 : +80105952 : .globl vector184 vector184: pushl $0 -80105ba1: 6a 00 push $0x0 +80105952: 6a 00 push $0x0 pushl $184 -80105ba3: 68 b8 00 00 00 push $0xb8 +80105954: 68 b8 00 00 00 push $0xb8 jmp alltraps -80105ba8: e9 a2 f4 ff ff jmp 8010504f +80105959: e9 bf f4 ff ff jmp 80104e1d -80105bad : +8010595e : .globl vector185 vector185: pushl $0 -80105bad: 6a 00 push $0x0 +8010595e: 6a 00 push $0x0 pushl $185 -80105baf: 68 b9 00 00 00 push $0xb9 +80105960: 68 b9 00 00 00 push $0xb9 jmp alltraps -80105bb4: e9 96 f4 ff ff jmp 8010504f +80105965: e9 b3 f4 ff ff jmp 80104e1d -80105bb9 : +8010596a : .globl vector186 vector186: pushl $0 -80105bb9: 6a 00 push $0x0 +8010596a: 6a 00 push $0x0 pushl $186 -80105bbb: 68 ba 00 00 00 push $0xba +8010596c: 68 ba 00 00 00 push $0xba jmp alltraps -80105bc0: e9 8a f4 ff ff jmp 8010504f +80105971: e9 a7 f4 ff ff jmp 80104e1d -80105bc5 : +80105976 : .globl vector187 vector187: pushl $0 -80105bc5: 6a 00 push $0x0 +80105976: 6a 00 push $0x0 pushl $187 -80105bc7: 68 bb 00 00 00 push $0xbb +80105978: 68 bb 00 00 00 push $0xbb jmp alltraps -80105bcc: e9 7e f4 ff ff jmp 8010504f +8010597d: e9 9b f4 ff ff jmp 80104e1d -80105bd1 : +80105982 : .globl vector188 vector188: pushl $0 -80105bd1: 6a 00 push $0x0 +80105982: 6a 00 push $0x0 pushl $188 -80105bd3: 68 bc 00 00 00 push $0xbc +80105984: 68 bc 00 00 00 push $0xbc jmp alltraps -80105bd8: e9 72 f4 ff ff jmp 8010504f +80105989: e9 8f f4 ff ff jmp 80104e1d -80105bdd : +8010598e : .globl vector189 vector189: pushl $0 -80105bdd: 6a 00 push $0x0 +8010598e: 6a 00 push $0x0 pushl $189 -80105bdf: 68 bd 00 00 00 push $0xbd +80105990: 68 bd 00 00 00 push $0xbd jmp alltraps -80105be4: e9 66 f4 ff ff jmp 8010504f +80105995: e9 83 f4 ff ff jmp 80104e1d -80105be9 : +8010599a : .globl vector190 vector190: pushl $0 -80105be9: 6a 00 push $0x0 +8010599a: 6a 00 push $0x0 pushl $190 -80105beb: 68 be 00 00 00 push $0xbe +8010599c: 68 be 00 00 00 push $0xbe jmp alltraps -80105bf0: e9 5a f4 ff ff jmp 8010504f +801059a1: e9 77 f4 ff ff jmp 80104e1d -80105bf5 : +801059a6 : .globl vector191 vector191: pushl $0 -80105bf5: 6a 00 push $0x0 +801059a6: 6a 00 push $0x0 pushl $191 -80105bf7: 68 bf 00 00 00 push $0xbf +801059a8: 68 bf 00 00 00 push $0xbf jmp alltraps -80105bfc: e9 4e f4 ff ff jmp 8010504f +801059ad: e9 6b f4 ff ff jmp 80104e1d -80105c01 : +801059b2 : .globl vector192 vector192: pushl $0 -80105c01: 6a 00 push $0x0 +801059b2: 6a 00 push $0x0 pushl $192 -80105c03: 68 c0 00 00 00 push $0xc0 +801059b4: 68 c0 00 00 00 push $0xc0 jmp alltraps -80105c08: e9 42 f4 ff ff jmp 8010504f +801059b9: e9 5f f4 ff ff jmp 80104e1d -80105c0d : +801059be : .globl vector193 vector193: pushl $0 -80105c0d: 6a 00 push $0x0 +801059be: 6a 00 push $0x0 pushl $193 -80105c0f: 68 c1 00 00 00 push $0xc1 +801059c0: 68 c1 00 00 00 push $0xc1 jmp alltraps -80105c14: e9 36 f4 ff ff jmp 8010504f +801059c5: e9 53 f4 ff ff jmp 80104e1d -80105c19 : +801059ca : .globl vector194 vector194: pushl $0 -80105c19: 6a 00 push $0x0 +801059ca: 6a 00 push $0x0 pushl $194 -80105c1b: 68 c2 00 00 00 push $0xc2 +801059cc: 68 c2 00 00 00 push $0xc2 jmp alltraps -80105c20: e9 2a f4 ff ff jmp 8010504f +801059d1: e9 47 f4 ff ff jmp 80104e1d -80105c25 : +801059d6 : .globl vector195 vector195: pushl $0 -80105c25: 6a 00 push $0x0 +801059d6: 6a 00 push $0x0 pushl $195 -80105c27: 68 c3 00 00 00 push $0xc3 +801059d8: 68 c3 00 00 00 push $0xc3 jmp alltraps -80105c2c: e9 1e f4 ff ff jmp 8010504f +801059dd: e9 3b f4 ff ff jmp 80104e1d -80105c31 : +801059e2 : .globl vector196 vector196: pushl $0 -80105c31: 6a 00 push $0x0 +801059e2: 6a 00 push $0x0 pushl $196 -80105c33: 68 c4 00 00 00 push $0xc4 +801059e4: 68 c4 00 00 00 push $0xc4 jmp alltraps -80105c38: e9 12 f4 ff ff jmp 8010504f +801059e9: e9 2f f4 ff ff jmp 80104e1d -80105c3d : +801059ee : .globl vector197 vector197: pushl $0 -80105c3d: 6a 00 push $0x0 +801059ee: 6a 00 push $0x0 pushl $197 -80105c3f: 68 c5 00 00 00 push $0xc5 +801059f0: 68 c5 00 00 00 push $0xc5 jmp alltraps -80105c44: e9 06 f4 ff ff jmp 8010504f +801059f5: e9 23 f4 ff ff jmp 80104e1d -80105c49 : +801059fa : .globl vector198 vector198: pushl $0 -80105c49: 6a 00 push $0x0 +801059fa: 6a 00 push $0x0 pushl $198 -80105c4b: 68 c6 00 00 00 push $0xc6 +801059fc: 68 c6 00 00 00 push $0xc6 jmp alltraps -80105c50: e9 fa f3 ff ff jmp 8010504f +80105a01: e9 17 f4 ff ff jmp 80104e1d -80105c55 : +80105a06 : .globl vector199 vector199: pushl $0 -80105c55: 6a 00 push $0x0 +80105a06: 6a 00 push $0x0 pushl $199 -80105c57: 68 c7 00 00 00 push $0xc7 +80105a08: 68 c7 00 00 00 push $0xc7 jmp alltraps -80105c5c: e9 ee f3 ff ff jmp 8010504f +80105a0d: e9 0b f4 ff ff jmp 80104e1d -80105c61 : +80105a12 : .globl vector200 vector200: pushl $0 -80105c61: 6a 00 push $0x0 +80105a12: 6a 00 push $0x0 pushl $200 -80105c63: 68 c8 00 00 00 push $0xc8 +80105a14: 68 c8 00 00 00 push $0xc8 jmp alltraps -80105c68: e9 e2 f3 ff ff jmp 8010504f +80105a19: e9 ff f3 ff ff jmp 80104e1d -80105c6d : +80105a1e : .globl vector201 vector201: pushl $0 -80105c6d: 6a 00 push $0x0 +80105a1e: 6a 00 push $0x0 pushl $201 -80105c6f: 68 c9 00 00 00 push $0xc9 +80105a20: 68 c9 00 00 00 push $0xc9 jmp alltraps -80105c74: e9 d6 f3 ff ff jmp 8010504f +80105a25: e9 f3 f3 ff ff jmp 80104e1d -80105c79 : +80105a2a : .globl vector202 vector202: pushl $0 -80105c79: 6a 00 push $0x0 +80105a2a: 6a 00 push $0x0 pushl $202 -80105c7b: 68 ca 00 00 00 push $0xca +80105a2c: 68 ca 00 00 00 push $0xca jmp alltraps -80105c80: e9 ca f3 ff ff jmp 8010504f +80105a31: e9 e7 f3 ff ff jmp 80104e1d -80105c85 : +80105a36 : .globl vector203 vector203: pushl $0 -80105c85: 6a 00 push $0x0 +80105a36: 6a 00 push $0x0 pushl $203 -80105c87: 68 cb 00 00 00 push $0xcb +80105a38: 68 cb 00 00 00 push $0xcb jmp alltraps -80105c8c: e9 be f3 ff ff jmp 8010504f +80105a3d: e9 db f3 ff ff jmp 80104e1d -80105c91 : +80105a42 : .globl vector204 vector204: pushl $0 -80105c91: 6a 00 push $0x0 +80105a42: 6a 00 push $0x0 pushl $204 -80105c93: 68 cc 00 00 00 push $0xcc +80105a44: 68 cc 00 00 00 push $0xcc jmp alltraps -80105c98: e9 b2 f3 ff ff jmp 8010504f +80105a49: e9 cf f3 ff ff jmp 80104e1d -80105c9d : +80105a4e : .globl vector205 vector205: pushl $0 -80105c9d: 6a 00 push $0x0 +80105a4e: 6a 00 push $0x0 pushl $205 -80105c9f: 68 cd 00 00 00 push $0xcd +80105a50: 68 cd 00 00 00 push $0xcd jmp alltraps -80105ca4: e9 a6 f3 ff ff jmp 8010504f +80105a55: e9 c3 f3 ff ff jmp 80104e1d -80105ca9 : +80105a5a : .globl vector206 vector206: pushl $0 -80105ca9: 6a 00 push $0x0 +80105a5a: 6a 00 push $0x0 pushl $206 -80105cab: 68 ce 00 00 00 push $0xce +80105a5c: 68 ce 00 00 00 push $0xce jmp alltraps -80105cb0: e9 9a f3 ff ff jmp 8010504f +80105a61: e9 b7 f3 ff ff jmp 80104e1d -80105cb5 : +80105a66 : .globl vector207 vector207: pushl $0 -80105cb5: 6a 00 push $0x0 +80105a66: 6a 00 push $0x0 pushl $207 -80105cb7: 68 cf 00 00 00 push $0xcf +80105a68: 68 cf 00 00 00 push $0xcf jmp alltraps -80105cbc: e9 8e f3 ff ff jmp 8010504f +80105a6d: e9 ab f3 ff ff jmp 80104e1d -80105cc1 : +80105a72 : .globl vector208 vector208: pushl $0 -80105cc1: 6a 00 push $0x0 +80105a72: 6a 00 push $0x0 pushl $208 -80105cc3: 68 d0 00 00 00 push $0xd0 +80105a74: 68 d0 00 00 00 push $0xd0 jmp alltraps -80105cc8: e9 82 f3 ff ff jmp 8010504f +80105a79: e9 9f f3 ff ff jmp 80104e1d -80105ccd : +80105a7e : .globl vector209 vector209: pushl $0 -80105ccd: 6a 00 push $0x0 +80105a7e: 6a 00 push $0x0 pushl $209 -80105ccf: 68 d1 00 00 00 push $0xd1 +80105a80: 68 d1 00 00 00 push $0xd1 jmp alltraps -80105cd4: e9 76 f3 ff ff jmp 8010504f +80105a85: e9 93 f3 ff ff jmp 80104e1d -80105cd9 : +80105a8a : .globl vector210 vector210: pushl $0 -80105cd9: 6a 00 push $0x0 +80105a8a: 6a 00 push $0x0 pushl $210 -80105cdb: 68 d2 00 00 00 push $0xd2 +80105a8c: 68 d2 00 00 00 push $0xd2 jmp alltraps -80105ce0: e9 6a f3 ff ff jmp 8010504f +80105a91: e9 87 f3 ff ff jmp 80104e1d -80105ce5 : +80105a96 : .globl vector211 vector211: pushl $0 -80105ce5: 6a 00 push $0x0 +80105a96: 6a 00 push $0x0 pushl $211 -80105ce7: 68 d3 00 00 00 push $0xd3 +80105a98: 68 d3 00 00 00 push $0xd3 jmp alltraps -80105cec: e9 5e f3 ff ff jmp 8010504f +80105a9d: e9 7b f3 ff ff jmp 80104e1d -80105cf1 : +80105aa2 : .globl vector212 vector212: pushl $0 -80105cf1: 6a 00 push $0x0 +80105aa2: 6a 00 push $0x0 pushl $212 -80105cf3: 68 d4 00 00 00 push $0xd4 +80105aa4: 68 d4 00 00 00 push $0xd4 jmp alltraps -80105cf8: e9 52 f3 ff ff jmp 8010504f +80105aa9: e9 6f f3 ff ff jmp 80104e1d -80105cfd : +80105aae : .globl vector213 vector213: pushl $0 -80105cfd: 6a 00 push $0x0 +80105aae: 6a 00 push $0x0 pushl $213 -80105cff: 68 d5 00 00 00 push $0xd5 +80105ab0: 68 d5 00 00 00 push $0xd5 jmp alltraps -80105d04: e9 46 f3 ff ff jmp 8010504f +80105ab5: e9 63 f3 ff ff jmp 80104e1d -80105d09 : +80105aba : .globl vector214 vector214: pushl $0 -80105d09: 6a 00 push $0x0 +80105aba: 6a 00 push $0x0 pushl $214 -80105d0b: 68 d6 00 00 00 push $0xd6 +80105abc: 68 d6 00 00 00 push $0xd6 jmp alltraps -80105d10: e9 3a f3 ff ff jmp 8010504f +80105ac1: e9 57 f3 ff ff jmp 80104e1d -80105d15 : +80105ac6 : .globl vector215 vector215: pushl $0 -80105d15: 6a 00 push $0x0 +80105ac6: 6a 00 push $0x0 pushl $215 -80105d17: 68 d7 00 00 00 push $0xd7 +80105ac8: 68 d7 00 00 00 push $0xd7 jmp alltraps -80105d1c: e9 2e f3 ff ff jmp 8010504f +80105acd: e9 4b f3 ff ff jmp 80104e1d -80105d21 : +80105ad2 : .globl vector216 vector216: pushl $0 -80105d21: 6a 00 push $0x0 +80105ad2: 6a 00 push $0x0 pushl $216 -80105d23: 68 d8 00 00 00 push $0xd8 +80105ad4: 68 d8 00 00 00 push $0xd8 jmp alltraps -80105d28: e9 22 f3 ff ff jmp 8010504f +80105ad9: e9 3f f3 ff ff jmp 80104e1d -80105d2d : +80105ade : .globl vector217 vector217: pushl $0 -80105d2d: 6a 00 push $0x0 +80105ade: 6a 00 push $0x0 pushl $217 -80105d2f: 68 d9 00 00 00 push $0xd9 +80105ae0: 68 d9 00 00 00 push $0xd9 jmp alltraps -80105d34: e9 16 f3 ff ff jmp 8010504f +80105ae5: e9 33 f3 ff ff jmp 80104e1d -80105d39 : +80105aea : .globl vector218 vector218: pushl $0 -80105d39: 6a 00 push $0x0 +80105aea: 6a 00 push $0x0 pushl $218 -80105d3b: 68 da 00 00 00 push $0xda +80105aec: 68 da 00 00 00 push $0xda jmp alltraps -80105d40: e9 0a f3 ff ff jmp 8010504f +80105af1: e9 27 f3 ff ff jmp 80104e1d -80105d45 : +80105af6 : .globl vector219 vector219: pushl $0 -80105d45: 6a 00 push $0x0 +80105af6: 6a 00 push $0x0 pushl $219 -80105d47: 68 db 00 00 00 push $0xdb +80105af8: 68 db 00 00 00 push $0xdb jmp alltraps -80105d4c: e9 fe f2 ff ff jmp 8010504f +80105afd: e9 1b f3 ff ff jmp 80104e1d -80105d51 : +80105b02 : .globl vector220 vector220: pushl $0 -80105d51: 6a 00 push $0x0 +80105b02: 6a 00 push $0x0 pushl $220 -80105d53: 68 dc 00 00 00 push $0xdc +80105b04: 68 dc 00 00 00 push $0xdc jmp alltraps -80105d58: e9 f2 f2 ff ff jmp 8010504f +80105b09: e9 0f f3 ff ff jmp 80104e1d -80105d5d : +80105b0e : .globl vector221 vector221: pushl $0 -80105d5d: 6a 00 push $0x0 +80105b0e: 6a 00 push $0x0 pushl $221 -80105d5f: 68 dd 00 00 00 push $0xdd +80105b10: 68 dd 00 00 00 push $0xdd jmp alltraps -80105d64: e9 e6 f2 ff ff jmp 8010504f +80105b15: e9 03 f3 ff ff jmp 80104e1d -80105d69 : +80105b1a : .globl vector222 vector222: pushl $0 -80105d69: 6a 00 push $0x0 +80105b1a: 6a 00 push $0x0 pushl $222 -80105d6b: 68 de 00 00 00 push $0xde +80105b1c: 68 de 00 00 00 push $0xde jmp alltraps -80105d70: e9 da f2 ff ff jmp 8010504f +80105b21: e9 f7 f2 ff ff jmp 80104e1d -80105d75 : +80105b26 : .globl vector223 vector223: pushl $0 -80105d75: 6a 00 push $0x0 +80105b26: 6a 00 push $0x0 pushl $223 -80105d77: 68 df 00 00 00 push $0xdf +80105b28: 68 df 00 00 00 push $0xdf jmp alltraps -80105d7c: e9 ce f2 ff ff jmp 8010504f +80105b2d: e9 eb f2 ff ff jmp 80104e1d -80105d81 : +80105b32 : .globl vector224 vector224: pushl $0 -80105d81: 6a 00 push $0x0 +80105b32: 6a 00 push $0x0 pushl $224 -80105d83: 68 e0 00 00 00 push $0xe0 +80105b34: 68 e0 00 00 00 push $0xe0 jmp alltraps -80105d88: e9 c2 f2 ff ff jmp 8010504f +80105b39: e9 df f2 ff ff jmp 80104e1d -80105d8d : +80105b3e : .globl vector225 vector225: pushl $0 -80105d8d: 6a 00 push $0x0 +80105b3e: 6a 00 push $0x0 pushl $225 -80105d8f: 68 e1 00 00 00 push $0xe1 +80105b40: 68 e1 00 00 00 push $0xe1 jmp alltraps -80105d94: e9 b6 f2 ff ff jmp 8010504f +80105b45: e9 d3 f2 ff ff jmp 80104e1d -80105d99 : +80105b4a : .globl vector226 vector226: pushl $0 -80105d99: 6a 00 push $0x0 +80105b4a: 6a 00 push $0x0 pushl $226 -80105d9b: 68 e2 00 00 00 push $0xe2 +80105b4c: 68 e2 00 00 00 push $0xe2 jmp alltraps -80105da0: e9 aa f2 ff ff jmp 8010504f +80105b51: e9 c7 f2 ff ff jmp 80104e1d -80105da5 : +80105b56 : .globl vector227 vector227: pushl $0 -80105da5: 6a 00 push $0x0 +80105b56: 6a 00 push $0x0 pushl $227 -80105da7: 68 e3 00 00 00 push $0xe3 +80105b58: 68 e3 00 00 00 push $0xe3 jmp alltraps -80105dac: e9 9e f2 ff ff jmp 8010504f +80105b5d: e9 bb f2 ff ff jmp 80104e1d -80105db1 : +80105b62 : .globl vector228 vector228: pushl $0 -80105db1: 6a 00 push $0x0 +80105b62: 6a 00 push $0x0 pushl $228 -80105db3: 68 e4 00 00 00 push $0xe4 +80105b64: 68 e4 00 00 00 push $0xe4 jmp alltraps -80105db8: e9 92 f2 ff ff jmp 8010504f +80105b69: e9 af f2 ff ff jmp 80104e1d -80105dbd : +80105b6e : .globl vector229 vector229: pushl $0 -80105dbd: 6a 00 push $0x0 +80105b6e: 6a 00 push $0x0 pushl $229 -80105dbf: 68 e5 00 00 00 push $0xe5 +80105b70: 68 e5 00 00 00 push $0xe5 jmp alltraps -80105dc4: e9 86 f2 ff ff jmp 8010504f +80105b75: e9 a3 f2 ff ff jmp 80104e1d -80105dc9 : +80105b7a : .globl vector230 vector230: pushl $0 -80105dc9: 6a 00 push $0x0 +80105b7a: 6a 00 push $0x0 pushl $230 -80105dcb: 68 e6 00 00 00 push $0xe6 +80105b7c: 68 e6 00 00 00 push $0xe6 jmp alltraps -80105dd0: e9 7a f2 ff ff jmp 8010504f +80105b81: e9 97 f2 ff ff jmp 80104e1d -80105dd5 : +80105b86 : .globl vector231 vector231: pushl $0 -80105dd5: 6a 00 push $0x0 +80105b86: 6a 00 push $0x0 pushl $231 -80105dd7: 68 e7 00 00 00 push $0xe7 +80105b88: 68 e7 00 00 00 push $0xe7 jmp alltraps -80105ddc: e9 6e f2 ff ff jmp 8010504f +80105b8d: e9 8b f2 ff ff jmp 80104e1d -80105de1 : +80105b92 : .globl vector232 vector232: pushl $0 -80105de1: 6a 00 push $0x0 +80105b92: 6a 00 push $0x0 pushl $232 -80105de3: 68 e8 00 00 00 push $0xe8 +80105b94: 68 e8 00 00 00 push $0xe8 jmp alltraps -80105de8: e9 62 f2 ff ff jmp 8010504f +80105b99: e9 7f f2 ff ff jmp 80104e1d -80105ded : +80105b9e : .globl vector233 vector233: pushl $0 -80105ded: 6a 00 push $0x0 +80105b9e: 6a 00 push $0x0 pushl $233 -80105def: 68 e9 00 00 00 push $0xe9 +80105ba0: 68 e9 00 00 00 push $0xe9 jmp alltraps -80105df4: e9 56 f2 ff ff jmp 8010504f +80105ba5: e9 73 f2 ff ff jmp 80104e1d -80105df9 : +80105baa : .globl vector234 vector234: pushl $0 -80105df9: 6a 00 push $0x0 +80105baa: 6a 00 push $0x0 pushl $234 -80105dfb: 68 ea 00 00 00 push $0xea +80105bac: 68 ea 00 00 00 push $0xea jmp alltraps -80105e00: e9 4a f2 ff ff jmp 8010504f +80105bb1: e9 67 f2 ff ff jmp 80104e1d -80105e05 : +80105bb6 : .globl vector235 vector235: pushl $0 -80105e05: 6a 00 push $0x0 +80105bb6: 6a 00 push $0x0 pushl $235 -80105e07: 68 eb 00 00 00 push $0xeb +80105bb8: 68 eb 00 00 00 push $0xeb jmp alltraps -80105e0c: e9 3e f2 ff ff jmp 8010504f +80105bbd: e9 5b f2 ff ff jmp 80104e1d -80105e11 : +80105bc2 : .globl vector236 vector236: pushl $0 -80105e11: 6a 00 push $0x0 +80105bc2: 6a 00 push $0x0 pushl $236 -80105e13: 68 ec 00 00 00 push $0xec +80105bc4: 68 ec 00 00 00 push $0xec jmp alltraps -80105e18: e9 32 f2 ff ff jmp 8010504f +80105bc9: e9 4f f2 ff ff jmp 80104e1d -80105e1d : +80105bce : .globl vector237 vector237: pushl $0 -80105e1d: 6a 00 push $0x0 +80105bce: 6a 00 push $0x0 pushl $237 -80105e1f: 68 ed 00 00 00 push $0xed +80105bd0: 68 ed 00 00 00 push $0xed jmp alltraps -80105e24: e9 26 f2 ff ff jmp 8010504f +80105bd5: e9 43 f2 ff ff jmp 80104e1d -80105e29 : +80105bda : .globl vector238 vector238: pushl $0 -80105e29: 6a 00 push $0x0 +80105bda: 6a 00 push $0x0 pushl $238 -80105e2b: 68 ee 00 00 00 push $0xee +80105bdc: 68 ee 00 00 00 push $0xee jmp alltraps -80105e30: e9 1a f2 ff ff jmp 8010504f +80105be1: e9 37 f2 ff ff jmp 80104e1d -80105e35 : +80105be6 : .globl vector239 vector239: pushl $0 -80105e35: 6a 00 push $0x0 +80105be6: 6a 00 push $0x0 pushl $239 -80105e37: 68 ef 00 00 00 push $0xef +80105be8: 68 ef 00 00 00 push $0xef jmp alltraps -80105e3c: e9 0e f2 ff ff jmp 8010504f +80105bed: e9 2b f2 ff ff jmp 80104e1d -80105e41 : +80105bf2 : .globl vector240 vector240: pushl $0 -80105e41: 6a 00 push $0x0 +80105bf2: 6a 00 push $0x0 pushl $240 -80105e43: 68 f0 00 00 00 push $0xf0 +80105bf4: 68 f0 00 00 00 push $0xf0 jmp alltraps -80105e48: e9 02 f2 ff ff jmp 8010504f +80105bf9: e9 1f f2 ff ff jmp 80104e1d -80105e4d : +80105bfe : .globl vector241 vector241: pushl $0 -80105e4d: 6a 00 push $0x0 +80105bfe: 6a 00 push $0x0 pushl $241 -80105e4f: 68 f1 00 00 00 push $0xf1 +80105c00: 68 f1 00 00 00 push $0xf1 jmp alltraps -80105e54: e9 f6 f1 ff ff jmp 8010504f +80105c05: e9 13 f2 ff ff jmp 80104e1d -80105e59 : +80105c0a : .globl vector242 vector242: pushl $0 -80105e59: 6a 00 push $0x0 +80105c0a: 6a 00 push $0x0 pushl $242 -80105e5b: 68 f2 00 00 00 push $0xf2 +80105c0c: 68 f2 00 00 00 push $0xf2 jmp alltraps -80105e60: e9 ea f1 ff ff jmp 8010504f +80105c11: e9 07 f2 ff ff jmp 80104e1d -80105e65 : +80105c16 : .globl vector243 vector243: pushl $0 -80105e65: 6a 00 push $0x0 +80105c16: 6a 00 push $0x0 pushl $243 -80105e67: 68 f3 00 00 00 push $0xf3 +80105c18: 68 f3 00 00 00 push $0xf3 jmp alltraps -80105e6c: e9 de f1 ff ff jmp 8010504f +80105c1d: e9 fb f1 ff ff jmp 80104e1d -80105e71 : +80105c22 : .globl vector244 vector244: pushl $0 -80105e71: 6a 00 push $0x0 +80105c22: 6a 00 push $0x0 pushl $244 -80105e73: 68 f4 00 00 00 push $0xf4 +80105c24: 68 f4 00 00 00 push $0xf4 jmp alltraps -80105e78: e9 d2 f1 ff ff jmp 8010504f +80105c29: e9 ef f1 ff ff jmp 80104e1d -80105e7d : +80105c2e : .globl vector245 vector245: pushl $0 -80105e7d: 6a 00 push $0x0 +80105c2e: 6a 00 push $0x0 pushl $245 -80105e7f: 68 f5 00 00 00 push $0xf5 +80105c30: 68 f5 00 00 00 push $0xf5 jmp alltraps -80105e84: e9 c6 f1 ff ff jmp 8010504f +80105c35: e9 e3 f1 ff ff jmp 80104e1d -80105e89 : +80105c3a : .globl vector246 vector246: pushl $0 -80105e89: 6a 00 push $0x0 +80105c3a: 6a 00 push $0x0 pushl $246 -80105e8b: 68 f6 00 00 00 push $0xf6 +80105c3c: 68 f6 00 00 00 push $0xf6 jmp alltraps -80105e90: e9 ba f1 ff ff jmp 8010504f +80105c41: e9 d7 f1 ff ff jmp 80104e1d -80105e95 : +80105c46 : .globl vector247 vector247: pushl $0 -80105e95: 6a 00 push $0x0 +80105c46: 6a 00 push $0x0 pushl $247 -80105e97: 68 f7 00 00 00 push $0xf7 +80105c48: 68 f7 00 00 00 push $0xf7 jmp alltraps -80105e9c: e9 ae f1 ff ff jmp 8010504f +80105c4d: e9 cb f1 ff ff jmp 80104e1d -80105ea1 : +80105c52 : .globl vector248 vector248: pushl $0 -80105ea1: 6a 00 push $0x0 +80105c52: 6a 00 push $0x0 pushl $248 -80105ea3: 68 f8 00 00 00 push $0xf8 +80105c54: 68 f8 00 00 00 push $0xf8 jmp alltraps -80105ea8: e9 a2 f1 ff ff jmp 8010504f +80105c59: e9 bf f1 ff ff jmp 80104e1d -80105ead : +80105c5e : .globl vector249 vector249: pushl $0 -80105ead: 6a 00 push $0x0 +80105c5e: 6a 00 push $0x0 pushl $249 -80105eaf: 68 f9 00 00 00 push $0xf9 +80105c60: 68 f9 00 00 00 push $0xf9 jmp alltraps -80105eb4: e9 96 f1 ff ff jmp 8010504f +80105c65: e9 b3 f1 ff ff jmp 80104e1d -80105eb9 : +80105c6a : .globl vector250 vector250: pushl $0 -80105eb9: 6a 00 push $0x0 +80105c6a: 6a 00 push $0x0 pushl $250 -80105ebb: 68 fa 00 00 00 push $0xfa +80105c6c: 68 fa 00 00 00 push $0xfa jmp alltraps -80105ec0: e9 8a f1 ff ff jmp 8010504f +80105c71: e9 a7 f1 ff ff jmp 80104e1d -80105ec5 : +80105c76 : .globl vector251 vector251: pushl $0 -80105ec5: 6a 00 push $0x0 +80105c76: 6a 00 push $0x0 pushl $251 -80105ec7: 68 fb 00 00 00 push $0xfb +80105c78: 68 fb 00 00 00 push $0xfb jmp alltraps -80105ecc: e9 7e f1 ff ff jmp 8010504f +80105c7d: e9 9b f1 ff ff jmp 80104e1d -80105ed1 : +80105c82 : .globl vector252 vector252: pushl $0 -80105ed1: 6a 00 push $0x0 +80105c82: 6a 00 push $0x0 pushl $252 -80105ed3: 68 fc 00 00 00 push $0xfc +80105c84: 68 fc 00 00 00 push $0xfc jmp alltraps -80105ed8: e9 72 f1 ff ff jmp 8010504f +80105c89: e9 8f f1 ff ff jmp 80104e1d -80105edd : +80105c8e : .globl vector253 vector253: pushl $0 -80105edd: 6a 00 push $0x0 +80105c8e: 6a 00 push $0x0 pushl $253 -80105edf: 68 fd 00 00 00 push $0xfd +80105c90: 68 fd 00 00 00 push $0xfd jmp alltraps -80105ee4: e9 66 f1 ff ff jmp 8010504f +80105c95: e9 83 f1 ff ff jmp 80104e1d -80105ee9 : +80105c9a : .globl vector254 vector254: pushl $0 -80105ee9: 6a 00 push $0x0 +80105c9a: 6a 00 push $0x0 pushl $254 -80105eeb: 68 fe 00 00 00 push $0xfe +80105c9c: 68 fe 00 00 00 push $0xfe jmp alltraps -80105ef0: e9 5a f1 ff ff jmp 8010504f +80105ca1: e9 77 f1 ff ff jmp 80104e1d -80105ef5 : +80105ca6 : .globl vector255 vector255: pushl $0 -80105ef5: 6a 00 push $0x0 +80105ca6: 6a 00 push $0x0 pushl $255 -80105ef7: 68 ff 00 00 00 push $0xff +80105ca8: 68 ff 00 00 00 push $0xff jmp alltraps -80105efc: e9 4e f1 ff ff jmp 8010504f +80105cad: e9 6b f1 ff ff jmp 80104e1d -80105f01 : +80105cb2 : // Return the address of the PTE in page table pgdir // that corresponds to virtual address va. If alloc!=0, // create any required page table pages. static pte_t * walkpgdir(pde_t *pgdir, const void *va, int alloc) { -80105f01: 55 push %ebp -80105f02: 89 e5 mov %esp,%ebp -80105f04: 57 push %edi -80105f05: 56 push %esi -80105f06: 53 push %ebx -80105f07: 83 ec 0c sub $0xc,%esp -80105f0a: 89 d6 mov %edx,%esi +80105cb2: 55 push %ebp +80105cb3: 89 e5 mov %esp,%ebp +80105cb5: 57 push %edi +80105cb6: 56 push %esi +80105cb7: 53 push %ebx +80105cb8: 83 ec 0c sub $0xc,%esp +80105cbb: 89 d6 mov %edx,%esi pde_t *pde; pte_t *pgtab; pde = &pgdir[PDX(va)]; -80105f0c: c1 ea 16 shr $0x16,%edx -80105f0f: 8d 3c 90 lea (%eax,%edx,4),%edi +80105cbd: c1 ea 16 shr $0x16,%edx +80105cc0: 8d 3c 90 lea (%eax,%edx,4),%edi if(*pde & PTE_P){ -80105f12: 8b 1f mov (%edi),%ebx -80105f14: f6 c3 01 test $0x1,%bl -80105f17: 74 21 je 80105f3a +80105cc3: 8b 1f mov (%edi),%ebx +80105cc5: f6 c3 01 test $0x1,%bl +80105cc8: 74 21 je 80105ceb pgtab = (pte_t*)P2V(PTE_ADDR(*pde)); -80105f19: 81 e3 00 f0 ff ff and $0xfffff000,%ebx -80105f1f: 81 c3 00 00 00 80 add $0x80000000,%ebx +80105cca: 81 e3 00 f0 ff ff and $0xfffff000,%ebx +80105cd0: 81 c3 00 00 00 80 add $0x80000000,%ebx // The permissions here are overly generous, but they can // be further restricted by the permissions in the page table // entries, if necessary. *pde = V2P(pgtab) | PTE_P | PTE_W | PTE_U; } return &pgtab[PTX(va)]; -80105f25: c1 ee 0a shr $0xa,%esi -80105f28: 81 e6 fc 0f 00 00 and $0xffc,%esi -80105f2e: 01 f3 add %esi,%ebx -} -80105f30: 89 d8 mov %ebx,%eax -80105f32: 8d 65 f4 lea -0xc(%ebp),%esp -80105f35: 5b pop %ebx -80105f36: 5e pop %esi -80105f37: 5f pop %edi -80105f38: 5d pop %ebp -80105f39: c3 ret +80105cd6: c1 ee 0a shr $0xa,%esi +80105cd9: 81 e6 fc 0f 00 00 and $0xffc,%esi +80105cdf: 01 f3 add %esi,%ebx +} +80105ce1: 89 d8 mov %ebx,%eax +80105ce3: 8d 65 f4 lea -0xc(%ebp),%esp +80105ce6: 5b pop %ebx +80105ce7: 5e pop %esi +80105ce8: 5f pop %edi +80105ce9: 5d pop %ebp +80105cea: c3 ret return 0; -80105f3a: bb 00 00 00 00 mov $0x0,%ebx +80105ceb: bb 00 00 00 00 mov $0x0,%ebx if(!alloc || (pgtab = (pte_t*)kalloc()) == 0) -80105f3f: 85 c9 test %ecx,%ecx -80105f41: 74 ed je 80105f30 -80105f43: e8 d1 c2 ff ff call 80102219 -80105f48: 89 c3 mov %eax,%ebx -80105f4a: 85 c0 test %eax,%eax -80105f4c: 74 e2 je 80105f30 +80105cf0: 85 c9 test %ecx,%ecx +80105cf2: 74 ed je 80105ce1 +80105cf4: e8 51 c4 ff ff call 8010214a +80105cf9: 89 c3 mov %eax,%ebx +80105cfb: 85 c0 test %eax,%eax +80105cfd: 74 e2 je 80105ce1 memset(pgtab, 0, PGSIZE); -80105f4e: 83 ec 04 sub $0x4,%esp -80105f51: 68 00 10 00 00 push $0x1000 -80105f56: 6a 00 push $0x0 -80105f58: 50 push %eax -80105f59: e8 f1 df ff ff call 80103f4f +80105cff: 83 ec 04 sub $0x4,%esp +80105d02: 68 00 10 00 00 push $0x1000 +80105d07: 6a 00 push $0x0 +80105d09: 50 push %eax +80105d0a: e8 a0 e0 ff ff call 80103daf *pde = V2P(pgtab) | PTE_P | PTE_W | PTE_U; -80105f5e: 8d 83 00 00 00 80 lea -0x80000000(%ebx),%eax -80105f64: 83 c8 07 or $0x7,%eax -80105f67: 89 07 mov %eax,(%edi) -80105f69: 83 c4 10 add $0x10,%esp -80105f6c: eb b7 jmp 80105f25 +80105d0f: 8d 83 00 00 00 80 lea -0x80000000(%ebx),%eax +80105d15: 83 c8 07 or $0x7,%eax +80105d18: 89 07 mov %eax,(%edi) +80105d1a: 83 c4 10 add $0x10,%esp +80105d1d: eb b7 jmp 80105cd6 -80105f6e : +80105d1f : // Create PTEs for virtual addresses starting at va that refer to // physical addresses starting at pa. va and size might not // be page-aligned. static int mappages(pde_t *pgdir, void *va, uint size, uint pa, int perm) { -80105f6e: 55 push %ebp -80105f6f: 89 e5 mov %esp,%ebp -80105f71: 57 push %edi -80105f72: 56 push %esi -80105f73: 53 push %ebx -80105f74: 83 ec 1c sub $0x1c,%esp -80105f77: 89 45 e4 mov %eax,-0x1c(%ebp) +80105d1f: 55 push %ebp +80105d20: 89 e5 mov %esp,%ebp +80105d22: 57 push %edi +80105d23: 56 push %esi +80105d24: 53 push %ebx +80105d25: 83 ec 1c sub $0x1c,%esp +80105d28: 89 45 e4 mov %eax,-0x1c(%ebp) +80105d2b: 89 d0 mov %edx,%eax char *a, *last; pte_t *pte; a = (char*)PGROUNDDOWN((uint)va); -80105f7a: 89 d0 mov %edx,%eax -80105f7c: 25 00 f0 ff ff and $0xfffff000,%eax -80105f81: 89 c6 mov %eax,%esi +80105d2d: 81 e2 00 f0 ff ff and $0xfffff000,%edx +80105d33: 89 d6 mov %edx,%esi last = (char*)PGROUNDDOWN(((uint)va) + size - 1); -80105f83: 8d 54 0a ff lea -0x1(%edx,%ecx,1),%edx -80105f87: 81 e2 00 f0 ff ff and $0xfffff000,%edx -80105f8d: 89 55 e0 mov %edx,-0x20(%ebp) -80105f90: 8b 7d 08 mov 0x8(%ebp),%edi -80105f93: 29 c7 sub %eax,%edi -80105f95: 8d 1c 3e lea (%esi,%edi,1),%ebx +80105d35: 8d 7c 08 ff lea -0x1(%eax,%ecx,1),%edi +80105d39: 81 e7 00 f0 ff ff and $0xfffff000,%edi +80105d3f: 8b 45 08 mov 0x8(%ebp),%eax +80105d42: 29 d0 sub %edx,%eax +80105d44: 89 45 e0 mov %eax,-0x20(%ebp) +80105d47: 8b 45 e0 mov -0x20(%ebp),%eax +80105d4a: 8d 1c 06 lea (%esi,%eax,1),%ebx for(;;){ if((pte = walkpgdir(pgdir, a, 1)) == 0) -80105f98: b9 01 00 00 00 mov $0x1,%ecx -80105f9d: 89 f2 mov %esi,%edx -80105f9f: 8b 45 e4 mov -0x1c(%ebp),%eax -80105fa2: e8 5a ff ff ff call 80105f01 -80105fa7: 85 c0 test %eax,%eax -80105fa9: 74 27 je 80105fd2 +80105d4d: b9 01 00 00 00 mov $0x1,%ecx +80105d52: 89 f2 mov %esi,%edx +80105d54: 8b 45 e4 mov -0x1c(%ebp),%eax +80105d57: e8 56 ff ff ff call 80105cb2 +80105d5c: 85 c0 test %eax,%eax +80105d5e: 74 26 je 80105d86 return -1; if(*pte & PTE_P) -80105fab: f6 00 01 testb $0x1,(%eax) -80105fae: 75 15 jne 80105fc5 +80105d60: f6 00 01 testb $0x1,(%eax) +80105d63: 75 14 jne 80105d79 panic("remap"); *pte = pa | perm | PTE_P; -80105fb0: 0b 5d 0c or 0xc(%ebp),%ebx -80105fb3: 83 cb 01 or $0x1,%ebx -80105fb6: 89 18 mov %ebx,(%eax) +80105d65: 0b 5d 0c or 0xc(%ebp),%ebx +80105d68: 83 cb 01 or $0x1,%ebx +80105d6b: 89 18 mov %ebx,(%eax) if(a == last) -80105fb8: 3b 75 e0 cmp -0x20(%ebp),%esi -80105fbb: 74 22 je 80105fdf +80105d6d: 39 fe cmp %edi,%esi +80105d6f: 74 22 je 80105d93 break; a += PGSIZE; -80105fbd: 81 c6 00 10 00 00 add $0x1000,%esi +80105d71: 81 c6 00 10 00 00 add $0x1000,%esi if((pte = walkpgdir(pgdir, a, 1)) == 0) -80105fc3: eb d0 jmp 80105f95 +80105d77: eb ce jmp 80105d47 panic("remap"); -80105fc5: 83 ec 0c sub $0xc,%esp -80105fc8: 68 70 81 10 80 push $0x80108170 -80105fcd: e8 86 a3 ff ff call 80100358 +80105d79: 83 ec 0c sub $0xc,%esp +80105d7c: 68 90 7e 10 80 push $0x80107e90 +80105d81: e8 ba a5 ff ff call 80100340 return -1; -80105fd2: b8 ff ff ff ff mov $0xffffffff,%eax +80105d86: b8 ff ff ff ff mov $0xffffffff,%eax pa += PGSIZE; } return 0; } -80105fd7: 8d 65 f4 lea -0xc(%ebp),%esp -80105fda: 5b pop %ebx -80105fdb: 5e pop %esi -80105fdc: 5f pop %edi -80105fdd: 5d pop %ebp -80105fde: c3 ret +80105d8b: 8d 65 f4 lea -0xc(%ebp),%esp +80105d8e: 5b pop %ebx +80105d8f: 5e pop %esi +80105d90: 5f pop %edi +80105d91: 5d pop %ebp +80105d92: c3 ret return 0; -80105fdf: b8 00 00 00 00 mov $0x0,%eax -80105fe4: eb f1 jmp 80105fd7 +80105d93: b8 00 00 00 00 mov $0x0,%eax +80105d98: eb f1 jmp 80105d8b -80105fe6 : +80105d9a : { -80105fe6: f3 0f 1e fb endbr32 -80105fea: 55 push %ebp -80105feb: 89 e5 mov %esp,%ebp -80105fed: 83 ec 18 sub $0x18,%esp +80105d9a: 55 push %ebp +80105d9b: 89 e5 mov %esp,%ebp +80105d9d: 83 ec 18 sub $0x18,%esp c = &cpus[cpuid()]; -80105ff0: e8 d6 d3 ff ff call 801033cb +80105da0: e8 f0 d4 ff ff call 80103295 c->gdt[SEG_KCODE] = SEG(STA_X|STA_R, 0, 0xffffffff, 0); -80105ff5: 69 c0 b0 00 00 00 imul $0xb0,%eax,%eax -80105ffb: 66 c7 80 18 54 11 80 movw $0xffff,-0x7feeabe8(%eax) -80106002: ff ff -80106004: 66 c7 80 1a 54 11 80 movw $0x0,-0x7feeabe6(%eax) -8010600b: 00 00 -8010600d: c6 80 1c 54 11 80 00 movb $0x0,-0x7feeabe4(%eax) -80106014: c6 80 1d 54 11 80 9a movb $0x9a,-0x7feeabe3(%eax) -8010601b: c6 80 1e 54 11 80 cf movb $0xcf,-0x7feeabe2(%eax) -80106022: c6 80 1f 54 11 80 00 movb $0x0,-0x7feeabe1(%eax) +80105da5: 69 c0 b0 00 00 00 imul $0xb0,%eax,%eax +80105dab: 66 c7 80 18 28 11 80 movw $0xffff,-0x7feed7e8(%eax) +80105db2: ff ff +80105db4: 66 c7 80 1a 28 11 80 movw $0x0,-0x7feed7e6(%eax) +80105dbb: 00 00 +80105dbd: c6 80 1c 28 11 80 00 movb $0x0,-0x7feed7e4(%eax) +80105dc4: c6 80 1d 28 11 80 9a movb $0x9a,-0x7feed7e3(%eax) +80105dcb: c6 80 1e 28 11 80 cf movb $0xcf,-0x7feed7e2(%eax) +80105dd2: c6 80 1f 28 11 80 00 movb $0x0,-0x7feed7e1(%eax) c->gdt[SEG_KDATA] = SEG(STA_W, 0, 0xffffffff, 0); -80106029: 66 c7 80 20 54 11 80 movw $0xffff,-0x7feeabe0(%eax) -80106030: ff ff -80106032: 66 c7 80 22 54 11 80 movw $0x0,-0x7feeabde(%eax) -80106039: 00 00 -8010603b: c6 80 24 54 11 80 00 movb $0x0,-0x7feeabdc(%eax) -80106042: c6 80 25 54 11 80 92 movb $0x92,-0x7feeabdb(%eax) -80106049: c6 80 26 54 11 80 cf movb $0xcf,-0x7feeabda(%eax) -80106050: c6 80 27 54 11 80 00 movb $0x0,-0x7feeabd9(%eax) +80105dd9: 66 c7 80 20 28 11 80 movw $0xffff,-0x7feed7e0(%eax) +80105de0: ff ff +80105de2: 66 c7 80 22 28 11 80 movw $0x0,-0x7feed7de(%eax) +80105de9: 00 00 +80105deb: c6 80 24 28 11 80 00 movb $0x0,-0x7feed7dc(%eax) +80105df2: c6 80 25 28 11 80 92 movb $0x92,-0x7feed7db(%eax) +80105df9: c6 80 26 28 11 80 cf movb $0xcf,-0x7feed7da(%eax) +80105e00: c6 80 27 28 11 80 00 movb $0x0,-0x7feed7d9(%eax) c->gdt[SEG_UCODE] = SEG(STA_X|STA_R, 0, 0xffffffff, DPL_USER); -80106057: 66 c7 80 28 54 11 80 movw $0xffff,-0x7feeabd8(%eax) -8010605e: ff ff -80106060: 66 c7 80 2a 54 11 80 movw $0x0,-0x7feeabd6(%eax) -80106067: 00 00 -80106069: c6 80 2c 54 11 80 00 movb $0x0,-0x7feeabd4(%eax) -80106070: c6 80 2d 54 11 80 fa movb $0xfa,-0x7feeabd3(%eax) -80106077: c6 80 2e 54 11 80 cf movb $0xcf,-0x7feeabd2(%eax) -8010607e: c6 80 2f 54 11 80 00 movb $0x0,-0x7feeabd1(%eax) +80105e07: 66 c7 80 28 28 11 80 movw $0xffff,-0x7feed7d8(%eax) +80105e0e: ff ff +80105e10: 66 c7 80 2a 28 11 80 movw $0x0,-0x7feed7d6(%eax) +80105e17: 00 00 +80105e19: c6 80 2c 28 11 80 00 movb $0x0,-0x7feed7d4(%eax) +80105e20: c6 80 2d 28 11 80 fa movb $0xfa,-0x7feed7d3(%eax) +80105e27: c6 80 2e 28 11 80 cf movb $0xcf,-0x7feed7d2(%eax) +80105e2e: c6 80 2f 28 11 80 00 movb $0x0,-0x7feed7d1(%eax) c->gdt[SEG_UDATA] = SEG(STA_W, 0, 0xffffffff, DPL_USER); -80106085: 66 c7 80 30 54 11 80 movw $0xffff,-0x7feeabd0(%eax) -8010608c: ff ff -8010608e: 66 c7 80 32 54 11 80 movw $0x0,-0x7feeabce(%eax) -80106095: 00 00 -80106097: c6 80 34 54 11 80 00 movb $0x0,-0x7feeabcc(%eax) -8010609e: c6 80 35 54 11 80 f2 movb $0xf2,-0x7feeabcb(%eax) -801060a5: c6 80 36 54 11 80 cf movb $0xcf,-0x7feeabca(%eax) -801060ac: c6 80 37 54 11 80 00 movb $0x0,-0x7feeabc9(%eax) +80105e35: 66 c7 80 30 28 11 80 movw $0xffff,-0x7feed7d0(%eax) +80105e3c: ff ff +80105e3e: 66 c7 80 32 28 11 80 movw $0x0,-0x7feed7ce(%eax) +80105e45: 00 00 +80105e47: c6 80 34 28 11 80 00 movb $0x0,-0x7feed7cc(%eax) +80105e4e: c6 80 35 28 11 80 f2 movb $0xf2,-0x7feed7cb(%eax) +80105e55: c6 80 36 28 11 80 cf movb $0xcf,-0x7feed7ca(%eax) +80105e5c: c6 80 37 28 11 80 00 movb $0x0,-0x7feed7c9(%eax) lgdt(c->gdt, sizeof(c->gdt)); -801060b3: 05 10 54 11 80 add $0x80115410,%eax +80105e63: 05 10 28 11 80 add $0x80112810,%eax pd[0] = size-1; -801060b8: 66 c7 45 f2 2f 00 movw $0x2f,-0xe(%ebp) +80105e68: 66 c7 45 f2 2f 00 movw $0x2f,-0xe(%ebp) pd[1] = (uint)p; -801060be: 66 89 45 f4 mov %ax,-0xc(%ebp) +80105e6e: 66 89 45 f4 mov %ax,-0xc(%ebp) pd[2] = (uint)p >> 16; -801060c2: c1 e8 10 shr $0x10,%eax -801060c5: 66 89 45 f6 mov %ax,-0xa(%ebp) +80105e72: c1 e8 10 shr $0x10,%eax +80105e75: 66 89 45 f6 mov %ax,-0xa(%ebp) asm volatile("lgdt (%0)" : : "r" (pd)); -801060c9: 8d 45 f2 lea -0xe(%ebp),%eax -801060cc: 0f 01 10 lgdtl (%eax) +80105e79: 8d 45 f2 lea -0xe(%ebp),%eax +80105e7c: 0f 01 10 lgdtl (%eax) } -801060cf: c9 leave -801060d0: c3 ret - -801060d1 : +80105e7f: c9 leave +80105e80: c3 ret +80105e81 : // Switch h/w page table register to the kernel-only page table, // for when no process is running. void switchkvm(void) { -801060d1: f3 0f 1e fb endbr32 lcr3(V2P(kpgdir)); // switch to the kernel page table -801060d5: a1 04 6a 11 80 mov 0x80116a04,%eax -801060da: 05 00 00 00 80 add $0x80000000,%eax +80105e81: a1 04 3e 11 80 mov 0x80113e04,%eax +80105e86: 05 00 00 00 80 add $0x80000000,%eax } static inline void lcr3(uint val) { asm volatile("movl %0,%%cr3" : : "r" (val)); -801060df: 0f 22 d8 mov %eax,%cr3 +80105e8b: 0f 22 d8 mov %eax,%cr3 } -801060e2: c3 ret +80105e8e: c3 ret -801060e3 : +80105e8f : // Switch TSS and h/w page table to correspond to process p. void switchuvm(struct proc *p) { -801060e3: f3 0f 1e fb endbr32 -801060e7: 55 push %ebp -801060e8: 89 e5 mov %esp,%ebp -801060ea: 57 push %edi -801060eb: 56 push %esi -801060ec: 53 push %ebx -801060ed: 83 ec 1c sub $0x1c,%esp -801060f0: 8b 75 08 mov 0x8(%ebp),%esi +80105e8f: 55 push %ebp +80105e90: 89 e5 mov %esp,%ebp +80105e92: 57 push %edi +80105e93: 56 push %esi +80105e94: 53 push %ebx +80105e95: 83 ec 1c sub $0x1c,%esp +80105e98: 8b 75 08 mov 0x8(%ebp),%esi if(p == 0) -801060f3: 85 f6 test %esi,%esi -801060f5: 0f 84 c3 00 00 00 je 801061be +80105e9b: 85 f6 test %esi,%esi +80105e9d: 0f 84 c3 00 00 00 je 80105f66 panic("switchuvm: no process"); if(p->kstack == 0) -801060fb: 83 7e 08 00 cmpl $0x0,0x8(%esi) -801060ff: 0f 84 c6 00 00 00 je 801061cb +80105ea3: 83 7e 08 00 cmpl $0x0,0x8(%esi) +80105ea7: 0f 84 c6 00 00 00 je 80105f73 panic("switchuvm: no kstack"); if(p->pgdir == 0) -80106105: 83 7e 04 00 cmpl $0x0,0x4(%esi) -80106109: 0f 84 c9 00 00 00 je 801061d8 +80105ead: 83 7e 04 00 cmpl $0x0,0x4(%esi) +80105eb1: 0f 84 c9 00 00 00 je 80105f80 panic("switchuvm: no pgdir"); pushcli(); -8010610f: e8 a8 dc ff ff call 80103dbc +80105eb7: e8 75 dd ff ff call 80103c31 mycpu()->gdt[SEG_TSS] = SEG16(STS_T32A, &mycpu()->ts, -80106114: e8 4d d2 ff ff call 80103366 -80106119: 89 c3 mov %eax,%ebx -8010611b: e8 46 d2 ff ff call 80103366 -80106120: 89 c7 mov %eax,%edi -80106122: e8 3f d2 ff ff call 80103366 -80106127: 89 45 e4 mov %eax,-0x1c(%ebp) -8010612a: e8 37 d2 ff ff call 80103366 -8010612f: 66 c7 83 98 00 00 00 movw $0x67,0x98(%ebx) -80106136: 67 00 -80106138: 83 c7 08 add $0x8,%edi -8010613b: 66 89 bb 9a 00 00 00 mov %di,0x9a(%ebx) -80106142: 8b 55 e4 mov -0x1c(%ebp),%edx -80106145: 83 c2 08 add $0x8,%edx -80106148: c1 ea 10 shr $0x10,%edx -8010614b: 88 93 9c 00 00 00 mov %dl,0x9c(%ebx) -80106151: c6 83 9d 00 00 00 99 movb $0x99,0x9d(%ebx) -80106158: c6 83 9e 00 00 00 40 movb $0x40,0x9e(%ebx) -8010615f: 83 c0 08 add $0x8,%eax -80106162: c1 e8 18 shr $0x18,%eax -80106165: 88 83 9f 00 00 00 mov %al,0x9f(%ebx) +80105ebc: e8 75 d3 ff ff call 80103236 +80105ec1: 89 c3 mov %eax,%ebx +80105ec3: e8 6e d3 ff ff call 80103236 +80105ec8: 89 c7 mov %eax,%edi +80105eca: e8 67 d3 ff ff call 80103236 +80105ecf: 89 45 e4 mov %eax,-0x1c(%ebp) +80105ed2: e8 5f d3 ff ff call 80103236 +80105ed7: 66 c7 83 98 00 00 00 movw $0x67,0x98(%ebx) +80105ede: 67 00 +80105ee0: 83 c7 08 add $0x8,%edi +80105ee3: 66 89 bb 9a 00 00 00 mov %di,0x9a(%ebx) +80105eea: 8b 55 e4 mov -0x1c(%ebp),%edx +80105eed: 83 c2 08 add $0x8,%edx +80105ef0: c1 ea 10 shr $0x10,%edx +80105ef3: 88 93 9c 00 00 00 mov %dl,0x9c(%ebx) +80105ef9: c6 83 9d 00 00 00 99 movb $0x99,0x9d(%ebx) +80105f00: c6 83 9e 00 00 00 40 movb $0x40,0x9e(%ebx) +80105f07: 83 c0 08 add $0x8,%eax +80105f0a: c1 e8 18 shr $0x18,%eax +80105f0d: 88 83 9f 00 00 00 mov %al,0x9f(%ebx) sizeof(mycpu()->ts)-1, 0); mycpu()->gdt[SEG_TSS].s = 0; -8010616b: e8 f6 d1 ff ff call 80103366 -80106170: 80 a0 9d 00 00 00 ef andb $0xef,0x9d(%eax) +80105f13: e8 1e d3 ff ff call 80103236 +80105f18: 80 a0 9d 00 00 00 ef andb $0xef,0x9d(%eax) mycpu()->ts.ss0 = SEG_KDATA << 3; -80106177: e8 ea d1 ff ff call 80103366 -8010617c: 66 c7 40 10 10 00 movw $0x10,0x10(%eax) +80105f1f: e8 12 d3 ff ff call 80103236 +80105f24: 66 c7 40 10 10 00 movw $0x10,0x10(%eax) mycpu()->ts.esp0 = (uint)p->kstack + KSTACKSIZE; -80106182: 8b 5e 08 mov 0x8(%esi),%ebx -80106185: e8 dc d1 ff ff call 80103366 -8010618a: 81 c3 00 10 00 00 add $0x1000,%ebx -80106190: 89 58 0c mov %ebx,0xc(%eax) +80105f2a: 8b 5e 08 mov 0x8(%esi),%ebx +80105f2d: e8 04 d3 ff ff call 80103236 +80105f32: 81 c3 00 10 00 00 add $0x1000,%ebx +80105f38: 89 58 0c mov %ebx,0xc(%eax) // setting IOPL=0 in eflags *and* iomb beyond the tss segment limit // forbids I/O instructions (e.g., inb and outb) from user space mycpu()->ts.iomb = (ushort) 0xFFFF; -80106193: e8 ce d1 ff ff call 80103366 -80106198: 66 c7 40 6e ff ff movw $0xffff,0x6e(%eax) +80105f3b: e8 f6 d2 ff ff call 80103236 +80105f40: 66 c7 40 6e ff ff movw $0xffff,0x6e(%eax) asm volatile("ltr %0" : : "r" (sel)); -8010619e: b8 28 00 00 00 mov $0x28,%eax -801061a3: 0f 00 d8 ltr %ax +80105f46: b8 28 00 00 00 mov $0x28,%eax +80105f4b: 0f 00 d8 ltr %ax ltr(SEG_TSS << 3); lcr3(V2P(p->pgdir)); // switch to process's address space -801061a6: 8b 46 04 mov 0x4(%esi),%eax -801061a9: 05 00 00 00 80 add $0x80000000,%eax +80105f4e: 8b 46 04 mov 0x4(%esi),%eax +80105f51: 05 00 00 00 80 add $0x80000000,%eax asm volatile("movl %0,%%cr3" : : "r" (val)); -801061ae: 0f 22 d8 mov %eax,%cr3 +80105f56: 0f 22 d8 mov %eax,%cr3 popcli(); -801061b1: e8 47 dc ff ff call 80103dfd -} -801061b6: 8d 65 f4 lea -0xc(%ebp),%esp -801061b9: 5b pop %ebx -801061ba: 5e pop %esi -801061bb: 5f pop %edi -801061bc: 5d pop %ebp -801061bd: c3 ret +80105f59: e8 0f dd ff ff call 80103c6d +} +80105f5e: 8d 65 f4 lea -0xc(%ebp),%esp +80105f61: 5b pop %ebx +80105f62: 5e pop %esi +80105f63: 5f pop %edi +80105f64: 5d pop %ebp +80105f65: c3 ret panic("switchuvm: no process"); -801061be: 83 ec 0c sub $0xc,%esp -801061c1: 68 76 81 10 80 push $0x80108176 -801061c6: e8 8d a1 ff ff call 80100358 +80105f66: 83 ec 0c sub $0xc,%esp +80105f69: 68 96 7e 10 80 push $0x80107e96 +80105f6e: e8 cd a3 ff ff call 80100340 panic("switchuvm: no kstack"); -801061cb: 83 ec 0c sub $0xc,%esp -801061ce: 68 8c 81 10 80 push $0x8010818c -801061d3: e8 80 a1 ff ff call 80100358 +80105f73: 83 ec 0c sub $0xc,%esp +80105f76: 68 ac 7e 10 80 push $0x80107eac +80105f7b: e8 c0 a3 ff ff call 80100340 panic("switchuvm: no pgdir"); -801061d8: 83 ec 0c sub $0xc,%esp -801061db: 68 a1 81 10 80 push $0x801081a1 -801061e0: e8 73 a1 ff ff call 80100358 +80105f80: 83 ec 0c sub $0xc,%esp +80105f83: 68 c1 7e 10 80 push $0x80107ec1 +80105f88: e8 b3 a3 ff ff call 80100340 -801061e5 : +80105f8d : // Load the initcode into address 0 of pgdir. // sz must be less than a page. void inituvm(pde_t *pgdir, char *init, uint sz) { -801061e5: f3 0f 1e fb endbr32 -801061e9: 55 push %ebp -801061ea: 89 e5 mov %esp,%ebp -801061ec: 56 push %esi -801061ed: 53 push %ebx -801061ee: 8b 75 10 mov 0x10(%ebp),%esi +80105f8d: 55 push %ebp +80105f8e: 89 e5 mov %esp,%ebp +80105f90: 56 push %esi +80105f91: 53 push %ebx +80105f92: 8b 75 10 mov 0x10(%ebp),%esi char *mem; if(sz >= PGSIZE) -801061f1: 81 fe ff 0f 00 00 cmp $0xfff,%esi -801061f7: 77 4c ja 80106245 +80105f95: 81 fe ff 0f 00 00 cmp $0xfff,%esi +80105f9b: 77 4c ja 80105fe9 panic("inituvm: more than a page"); mem = kalloc(); -801061f9: e8 1b c0 ff ff call 80102219 -801061fe: 89 c3 mov %eax,%ebx +80105f9d: e8 a8 c1 ff ff call 8010214a +80105fa2: 89 c3 mov %eax,%ebx memset(mem, 0, PGSIZE); -80106200: 83 ec 04 sub $0x4,%esp -80106203: 68 00 10 00 00 push $0x1000 -80106208: 6a 00 push $0x0 -8010620a: 50 push %eax -8010620b: e8 3f dd ff ff call 80103f4f +80105fa4: 83 ec 04 sub $0x4,%esp +80105fa7: 68 00 10 00 00 push $0x1000 +80105fac: 6a 00 push $0x0 +80105fae: 50 push %eax +80105faf: e8 fb dd ff ff call 80103daf mappages(pgdir, 0, PGSIZE, V2P(mem), PTE_W|PTE_U); -80106210: 83 c4 08 add $0x8,%esp -80106213: 6a 06 push $0x6 -80106215: 8d 83 00 00 00 80 lea -0x80000000(%ebx),%eax -8010621b: 50 push %eax -8010621c: b9 00 10 00 00 mov $0x1000,%ecx -80106221: ba 00 00 00 00 mov $0x0,%edx -80106226: 8b 45 08 mov 0x8(%ebp),%eax -80106229: e8 40 fd ff ff call 80105f6e +80105fb4: 83 c4 08 add $0x8,%esp +80105fb7: 6a 06 push $0x6 +80105fb9: 8d 83 00 00 00 80 lea -0x80000000(%ebx),%eax +80105fbf: 50 push %eax +80105fc0: b9 00 10 00 00 mov $0x1000,%ecx +80105fc5: ba 00 00 00 00 mov $0x0,%edx +80105fca: 8b 45 08 mov 0x8(%ebp),%eax +80105fcd: e8 4d fd ff ff call 80105d1f memmove(mem, init, sz); -8010622e: 83 c4 0c add $0xc,%esp -80106231: 56 push %esi -80106232: ff 75 0c pushl 0xc(%ebp) -80106235: 53 push %ebx -80106236: e8 a1 dd ff ff call 80103fdc -} -8010623b: 83 c4 10 add $0x10,%esp -8010623e: 8d 65 f8 lea -0x8(%ebp),%esp -80106241: 5b pop %ebx -80106242: 5e pop %esi -80106243: 5d pop %ebp -80106244: c3 ret +80105fd2: 83 c4 0c add $0xc,%esp +80105fd5: 56 push %esi +80105fd6: ff 75 0c push 0xc(%ebp) +80105fd9: 53 push %ebx +80105fda: e8 55 de ff ff call 80103e34 +} +80105fdf: 83 c4 10 add $0x10,%esp +80105fe2: 8d 65 f8 lea -0x8(%ebp),%esp +80105fe5: 5b pop %ebx +80105fe6: 5e pop %esi +80105fe7: 5d pop %ebp +80105fe8: c3 ret panic("inituvm: more than a page"); -80106245: 83 ec 0c sub $0xc,%esp -80106248: 68 b5 81 10 80 push $0x801081b5 -8010624d: e8 06 a1 ff ff call 80100358 +80105fe9: 83 ec 0c sub $0xc,%esp +80105fec: 68 d5 7e 10 80 push $0x80107ed5 +80105ff1: e8 4a a3 ff ff call 80100340 -80106252 : +80105ff6 : // Load a program segment into pgdir. addr must be page-aligned // and the pages from addr to addr+sz must already be mapped. int loaduvm(pde_t *pgdir, char *addr, struct inode *ip, uint offset, uint sz) { -80106252: f3 0f 1e fb endbr32 -80106256: 55 push %ebp -80106257: 89 e5 mov %esp,%ebp -80106259: 57 push %edi -8010625a: 56 push %esi -8010625b: 53 push %ebx -8010625c: 83 ec 1c sub $0x1c,%esp -8010625f: 8b 45 0c mov 0xc(%ebp),%eax -80106262: 8b 75 18 mov 0x18(%ebp),%esi +80105ff6: 55 push %ebp +80105ff7: 89 e5 mov %esp,%ebp +80105ff9: 57 push %edi +80105ffa: 56 push %esi +80105ffb: 53 push %ebx +80105ffc: 83 ec 1c sub $0x1c,%esp +80105fff: 8b 45 0c mov 0xc(%ebp),%eax +80106002: 8b 75 18 mov 0x18(%ebp),%esi uint i, pa, n; pte_t *pte; if((uint) addr % PGSIZE != 0) -80106265: a9 ff 0f 00 00 test $0xfff,%eax -8010626a: 75 6f jne 801062db +80106005: a9 ff 0f 00 00 test $0xfff,%eax +8010600a: 75 6e jne 8010607a panic("loaduvm: addr must be page aligned"); for(i = 0; i < sz; i += PGSIZE){ -8010626c: 89 f3 mov %esi,%ebx +8010600c: 89 f3 mov %esi,%ebx if((pte = walkpgdir(pgdir, addr+i, 0)) == 0) -8010626e: 8d 04 30 lea (%eax,%esi,1),%eax -80106271: 89 45 e4 mov %eax,-0x1c(%ebp) +8010600e: 01 f0 add %esi,%eax +80106010: 89 45 e4 mov %eax,-0x1c(%ebp) else n = PGSIZE; if(readi(ip, P2V(pa), offset+i, n) != n) return -1; } return 0; -80106274: b8 00 00 00 00 mov $0x0,%eax +80106013: b8 00 00 00 00 mov $0x0,%eax for(i = 0; i < sz; i += PGSIZE){ -80106279: 85 f6 test %esi,%esi -8010627b: 74 7d je 801062fa +80106018: 85 f6 test %esi,%esi +8010601a: 74 7d je 80106099 if((pte = walkpgdir(pgdir, addr+i, 0)) == 0) -8010627d: 8b 55 e4 mov -0x1c(%ebp),%edx -80106280: 29 da sub %ebx,%edx -80106282: b9 00 00 00 00 mov $0x0,%ecx -80106287: 8b 45 08 mov 0x8(%ebp),%eax -8010628a: e8 72 fc ff ff call 80105f01 -8010628f: 85 c0 test %eax,%eax -80106291: 74 55 je 801062e8 +8010601c: 8b 55 e4 mov -0x1c(%ebp),%edx +8010601f: 29 da sub %ebx,%edx +80106021: b9 00 00 00 00 mov $0x0,%ecx +80106026: 8b 45 08 mov 0x8(%ebp),%eax +80106029: e8 84 fc ff ff call 80105cb2 +8010602e: 85 c0 test %eax,%eax +80106030: 74 55 je 80106087 pa = PTE_ADDR(*pte); -80106293: 8b 00 mov (%eax),%eax -80106295: 25 00 f0 ff ff and $0xfffff000,%eax +80106032: 8b 00 mov (%eax),%eax +80106034: 25 00 f0 ff ff and $0xfffff000,%eax n = sz - i; -8010629a: 81 fb ff 0f 00 00 cmp $0xfff,%ebx -801062a0: bf 00 10 00 00 mov $0x1000,%edi -801062a5: 0f 46 fb cmovbe %ebx,%edi +80106039: 81 fb ff 0f 00 00 cmp $0xfff,%ebx +8010603f: bf 00 10 00 00 mov $0x1000,%edi +80106044: 0f 46 fb cmovbe %ebx,%edi if(readi(ip, P2V(pa), offset+i, n) != n) -801062a8: 57 push %edi -801062a9: 89 f2 mov %esi,%edx -801062ab: 03 55 14 add 0x14(%ebp),%edx -801062ae: 29 da sub %ebx,%edx -801062b0: 52 push %edx -801062b1: 05 00 00 00 80 add $0x80000000,%eax -801062b6: 50 push %eax -801062b7: ff 75 10 pushl 0x10(%ebp) -801062ba: e8 15 b5 ff ff call 801017d4 -801062bf: 83 c4 10 add $0x10,%esp -801062c2: 39 f8 cmp %edi,%eax -801062c4: 75 2f jne 801062f5 +80106047: 57 push %edi +80106048: 89 f2 mov %esi,%edx +8010604a: 03 55 14 add 0x14(%ebp),%edx +8010604d: 29 da sub %ebx,%edx +8010604f: 52 push %edx +80106050: 05 00 00 00 80 add $0x80000000,%eax +80106055: 50 push %eax +80106056: ff 75 10 push 0x10(%ebp) +80106059: e8 e9 b6 ff ff call 80101747 +8010605e: 83 c4 10 add $0x10,%esp +80106061: 39 f8 cmp %edi,%eax +80106063: 75 2f jne 80106094 for(i = 0; i < sz; i += PGSIZE){ -801062c6: 81 eb 00 10 00 00 sub $0x1000,%ebx -801062cc: 89 f0 mov %esi,%eax -801062ce: 29 d8 sub %ebx,%eax -801062d0: 39 c6 cmp %eax,%esi -801062d2: 77 a9 ja 8010627d +80106065: 81 eb 00 10 00 00 sub $0x1000,%ebx +8010606b: 89 f0 mov %esi,%eax +8010606d: 29 d8 sub %ebx,%eax +8010606f: 39 c6 cmp %eax,%esi +80106071: 77 a9 ja 8010601c return 0; -801062d4: b8 00 00 00 00 mov $0x0,%eax -801062d9: eb 1f jmp 801062fa +80106073: b8 00 00 00 00 mov $0x0,%eax +80106078: eb 1f jmp 80106099 panic("loaduvm: addr must be page aligned"); -801062db: 83 ec 0c sub $0xc,%esp -801062de: 68 70 82 10 80 push $0x80108270 -801062e3: e8 70 a0 ff ff call 80100358 +8010607a: 83 ec 0c sub $0xc,%esp +8010607d: 68 90 7f 10 80 push $0x80107f90 +80106082: e8 b9 a2 ff ff call 80100340 panic("loaduvm: address should exist"); -801062e8: 83 ec 0c sub $0xc,%esp -801062eb: 68 cf 81 10 80 push $0x801081cf -801062f0: e8 63 a0 ff ff call 80100358 +80106087: 83 ec 0c sub $0xc,%esp +8010608a: 68 ef 7e 10 80 push $0x80107eef +8010608f: e8 ac a2 ff ff call 80100340 return -1; -801062f5: b8 ff ff ff ff mov $0xffffffff,%eax +80106094: b8 ff ff ff ff mov $0xffffffff,%eax } -801062fa: 8d 65 f4 lea -0xc(%ebp),%esp -801062fd: 5b pop %ebx -801062fe: 5e pop %esi -801062ff: 5f pop %edi -80106300: 5d pop %ebp -80106301: c3 ret +80106099: 8d 65 f4 lea -0xc(%ebp),%esp +8010609c: 5b pop %ebx +8010609d: 5e pop %esi +8010609e: 5f pop %edi +8010609f: 5d pop %ebp +801060a0: c3 ret -80106302 : +801060a1 : // 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) { -80106302: f3 0f 1e fb endbr32 -80106306: 55 push %ebp -80106307: 89 e5 mov %esp,%ebp -80106309: 57 push %edi -8010630a: 56 push %esi -8010630b: 53 push %ebx -8010630c: 83 ec 0c sub $0xc,%esp -8010630f: 8b 7d 0c mov 0xc(%ebp),%edi +801060a1: 55 push %ebp +801060a2: 89 e5 mov %esp,%ebp +801060a4: 57 push %edi +801060a5: 56 push %esi +801060a6: 53 push %ebx +801060a7: 83 ec 0c sub $0xc,%esp +801060aa: 8b 7d 0c mov 0xc(%ebp),%edi pte_t *pte; uint a, pa; if(newsz >= oldsz) return oldsz; -80106312: 89 f8 mov %edi,%eax +801060ad: 89 f8 mov %edi,%eax if(newsz >= oldsz) -80106314: 39 7d 10 cmp %edi,0x10(%ebp) -80106317: 73 16 jae 8010632f +801060af: 39 7d 10 cmp %edi,0x10(%ebp) +801060b2: 73 16 jae 801060ca a = PGROUNDUP(newsz); -80106319: 8b 45 10 mov 0x10(%ebp),%eax -8010631c: 8d 98 ff 0f 00 00 lea 0xfff(%eax),%ebx -80106322: 81 e3 00 f0 ff ff and $0xfffff000,%ebx +801060b4: 8b 45 10 mov 0x10(%ebp),%eax +801060b7: 8d 98 ff 0f 00 00 lea 0xfff(%eax),%ebx +801060bd: 81 e3 00 f0 ff ff and $0xfffff000,%ebx for(; a < oldsz; a += PGSIZE){ -80106328: 39 df cmp %ebx,%edi -8010632a: 77 21 ja 8010634d +801060c3: 39 df cmp %ebx,%edi +801060c5: 77 21 ja 801060e8 char *v = P2V(pa); kfree(v); *pte = 0; } } return newsz; -8010632c: 8b 45 10 mov 0x10(%ebp),%eax -} -8010632f: 8d 65 f4 lea -0xc(%ebp),%esp -80106332: 5b pop %ebx -80106333: 5e pop %esi -80106334: 5f pop %edi -80106335: 5d pop %ebp -80106336: c3 ret +801060c7: 8b 45 10 mov 0x10(%ebp),%eax +} +801060ca: 8d 65 f4 lea -0xc(%ebp),%esp +801060cd: 5b pop %ebx +801060ce: 5e pop %esi +801060cf: 5f pop %edi +801060d0: 5d pop %ebp +801060d1: c3 ret a = PGADDR(PDX(a) + 1, 0, 0) - PGSIZE; -80106337: 81 e3 00 00 c0 ff and $0xffc00000,%ebx -8010633d: 81 c3 00 f0 3f 00 add $0x3ff000,%ebx +801060d2: 81 e3 00 00 c0 ff and $0xffc00000,%ebx +801060d8: 81 c3 00 f0 3f 00 add $0x3ff000,%ebx for(; a < oldsz; a += PGSIZE){ -80106343: 81 c3 00 10 00 00 add $0x1000,%ebx -80106349: 39 df cmp %ebx,%edi -8010634b: 76 df jbe 8010632c +801060de: 81 c3 00 10 00 00 add $0x1000,%ebx +801060e4: 39 df cmp %ebx,%edi +801060e6: 76 df jbe 801060c7 pte = walkpgdir(pgdir, (char*)a, 0); -8010634d: b9 00 00 00 00 mov $0x0,%ecx -80106352: 89 da mov %ebx,%edx -80106354: 8b 45 08 mov 0x8(%ebp),%eax -80106357: e8 a5 fb ff ff call 80105f01 -8010635c: 89 c6 mov %eax,%esi +801060e8: b9 00 00 00 00 mov $0x0,%ecx +801060ed: 89 da mov %ebx,%edx +801060ef: 8b 45 08 mov 0x8(%ebp),%eax +801060f2: e8 bb fb ff ff call 80105cb2 +801060f7: 89 c6 mov %eax,%esi if(!pte) -8010635e: 85 c0 test %eax,%eax -80106360: 74 d5 je 80106337 +801060f9: 85 c0 test %eax,%eax +801060fb: 74 d5 je 801060d2 else if((*pte & PTE_P) != 0){ -80106362: 8b 00 mov (%eax),%eax -80106364: a8 01 test $0x1,%al -80106366: 74 db je 80106343 +801060fd: 8b 00 mov (%eax),%eax +801060ff: a8 01 test $0x1,%al +80106101: 74 db je 801060de if(pa == 0) -80106368: 25 00 f0 ff ff and $0xfffff000,%eax -8010636d: 74 19 je 80106388 +80106103: 25 00 f0 ff ff and $0xfffff000,%eax +80106108: 74 19 je 80106123 kfree(v); -8010636f: 83 ec 0c sub $0xc,%esp +8010610a: 83 ec 0c sub $0xc,%esp char *v = P2V(pa); -80106372: 05 00 00 00 80 add $0x80000000,%eax +8010610d: 05 00 00 00 80 add $0x80000000,%eax kfree(v); -80106377: 50 push %eax -80106378: e8 3e bd ff ff call 801020bb +80106112: 50 push %eax +80106113: e8 e4 be ff ff call 80101ffc *pte = 0; -8010637d: c7 06 00 00 00 00 movl $0x0,(%esi) -80106383: 83 c4 10 add $0x10,%esp -80106386: eb bb jmp 80106343 +80106118: c7 06 00 00 00 00 movl $0x0,(%esi) +8010611e: 83 c4 10 add $0x10,%esp +80106121: eb bb jmp 801060de panic("kfree"); -80106388: 83 ec 0c sub $0xc,%esp -8010638b: 68 ec 7a 10 80 push $0x80107aec -80106390: e8 c3 9f ff ff call 80100358 - -80106395 : -{ -80106395: f3 0f 1e fb endbr32 -80106399: 55 push %ebp -8010639a: 89 e5 mov %esp,%ebp -8010639c: 57 push %edi -8010639d: 56 push %esi -8010639e: 53 push %ebx -8010639f: 83 ec 1c sub $0x1c,%esp -801063a2: 8b 7d 10 mov 0x10(%ebp),%edi +80106123: 83 ec 0c sub $0xc,%esp +80106126: 68 0c 78 10 80 push $0x8010780c +8010612b: e8 10 a2 ff ff call 80100340 + +80106130 : +{ +80106130: 55 push %ebp +80106131: 89 e5 mov %esp,%ebp +80106133: 57 push %edi +80106134: 56 push %esi +80106135: 53 push %ebx +80106136: 83 ec 1c sub $0x1c,%esp +80106139: 8b 7d 10 mov 0x10(%ebp),%edi if(newsz >= KERNBASE) -801063a5: 89 7d e4 mov %edi,-0x1c(%ebp) -801063a8: 85 ff test %edi,%edi -801063aa: 0f 88 c5 00 00 00 js 80106475 +8010613c: 89 7d e4 mov %edi,-0x1c(%ebp) +8010613f: 85 ff test %edi,%edi +80106141: 0f 88 c5 00 00 00 js 8010620c if(newsz < oldsz) -801063b0: 3b 7d 0c cmp 0xc(%ebp),%edi -801063b3: 72 60 jb 80106415 +80106147: 3b 7d 0c cmp 0xc(%ebp),%edi +8010614a: 72 60 jb 801061ac a = PGROUNDUP(oldsz); -801063b5: 8b 45 0c mov 0xc(%ebp),%eax -801063b8: 8d b0 ff 0f 00 00 lea 0xfff(%eax),%esi -801063be: 81 e6 00 f0 ff ff and $0xfffff000,%esi +8010614c: 8b 45 0c mov 0xc(%ebp),%eax +8010614f: 8d b0 ff 0f 00 00 lea 0xfff(%eax),%esi +80106155: 81 e6 00 f0 ff ff and $0xfffff000,%esi for(; a < newsz; a += PGSIZE){ -801063c4: 39 f7 cmp %esi,%edi -801063c6: 0f 86 b0 00 00 00 jbe 8010647c +8010615b: 39 f7 cmp %esi,%edi +8010615d: 0f 86 b0 00 00 00 jbe 80106213 mem = kalloc(); -801063cc: e8 48 be ff ff call 80102219 -801063d1: 89 c3 mov %eax,%ebx +80106163: e8 e2 bf ff ff call 8010214a +80106168: 89 c3 mov %eax,%ebx if(mem == 0){ -801063d3: 85 c0 test %eax,%eax -801063d5: 74 46 je 8010641d +8010616a: 85 c0 test %eax,%eax +8010616c: 74 46 je 801061b4 memset(mem, 0, PGSIZE); -801063d7: 83 ec 04 sub $0x4,%esp -801063da: 68 00 10 00 00 push $0x1000 -801063df: 6a 00 push $0x0 -801063e1: 50 push %eax -801063e2: e8 68 db ff ff call 80103f4f +8010616e: 83 ec 04 sub $0x4,%esp +80106171: 68 00 10 00 00 push $0x1000 +80106176: 6a 00 push $0x0 +80106178: 50 push %eax +80106179: e8 31 dc ff ff call 80103daf if(mappages(pgdir, (char*)a, PGSIZE, V2P(mem), PTE_W|PTE_U) < 0){ -801063e7: 83 c4 08 add $0x8,%esp -801063ea: 6a 06 push $0x6 -801063ec: 8d 83 00 00 00 80 lea -0x80000000(%ebx),%eax -801063f2: 50 push %eax -801063f3: b9 00 10 00 00 mov $0x1000,%ecx -801063f8: 89 f2 mov %esi,%edx -801063fa: 8b 45 08 mov 0x8(%ebp),%eax -801063fd: e8 6c fb ff ff call 80105f6e -80106402: 83 c4 10 add $0x10,%esp -80106405: 85 c0 test %eax,%eax -80106407: 78 3c js 80106445 +8010617e: 83 c4 08 add $0x8,%esp +80106181: 6a 06 push $0x6 +80106183: 8d 83 00 00 00 80 lea -0x80000000(%ebx),%eax +80106189: 50 push %eax +8010618a: b9 00 10 00 00 mov $0x1000,%ecx +8010618f: 89 f2 mov %esi,%edx +80106191: 8b 45 08 mov 0x8(%ebp),%eax +80106194: e8 86 fb ff ff call 80105d1f +80106199: 83 c4 10 add $0x10,%esp +8010619c: 85 c0 test %eax,%eax +8010619e: 78 3c js 801061dc for(; a < newsz; a += PGSIZE){ -80106409: 81 c6 00 10 00 00 add $0x1000,%esi -8010640f: 39 f7 cmp %esi,%edi -80106411: 77 b9 ja 801063cc -80106413: eb 67 jmp 8010647c +801061a0: 81 c6 00 10 00 00 add $0x1000,%esi +801061a6: 39 f7 cmp %esi,%edi +801061a8: 77 b9 ja 80106163 +801061aa: eb 67 jmp 80106213 return oldsz; -80106415: 8b 45 0c mov 0xc(%ebp),%eax -80106418: 89 45 e4 mov %eax,-0x1c(%ebp) -8010641b: eb 5f jmp 8010647c +801061ac: 8b 45 0c mov 0xc(%ebp),%eax +801061af: 89 45 e4 mov %eax,-0x1c(%ebp) +801061b2: eb 5f jmp 80106213 cprintf("allocuvm out of memory\n"); -8010641d: 83 ec 0c sub $0xc,%esp -80106420: 68 ed 81 10 80 push $0x801081ed -80106425: e8 02 a2 ff ff call 8010062c +801061b4: 83 ec 0c sub $0xc,%esp +801061b7: 68 0d 7f 10 80 push $0x80107f0d +801061bc: e8 40 a4 ff ff call 80100601 deallocuvm(pgdir, newsz, oldsz); -8010642a: 83 c4 0c add $0xc,%esp -8010642d: ff 75 0c pushl 0xc(%ebp) -80106430: 57 push %edi -80106431: ff 75 08 pushl 0x8(%ebp) -80106434: e8 c9 fe ff ff call 80106302 +801061c1: 83 c4 0c add $0xc,%esp +801061c4: ff 75 0c push 0xc(%ebp) +801061c7: 57 push %edi +801061c8: ff 75 08 push 0x8(%ebp) +801061cb: e8 d1 fe ff ff call 801060a1 return 0; -80106439: 83 c4 10 add $0x10,%esp -8010643c: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) -80106443: eb 37 jmp 8010647c +801061d0: 83 c4 10 add $0x10,%esp +801061d3: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) +801061da: eb 37 jmp 80106213 cprintf("allocuvm out of memory (2)\n"); -80106445: 83 ec 0c sub $0xc,%esp -80106448: 68 05 82 10 80 push $0x80108205 -8010644d: e8 da a1 ff ff call 8010062c +801061dc: 83 ec 0c sub $0xc,%esp +801061df: 68 25 7f 10 80 push $0x80107f25 +801061e4: e8 18 a4 ff ff call 80100601 deallocuvm(pgdir, newsz, oldsz); -80106452: 83 c4 0c add $0xc,%esp -80106455: ff 75 0c pushl 0xc(%ebp) -80106458: 57 push %edi -80106459: ff 75 08 pushl 0x8(%ebp) -8010645c: e8 a1 fe ff ff call 80106302 +801061e9: 83 c4 0c add $0xc,%esp +801061ec: ff 75 0c push 0xc(%ebp) +801061ef: 57 push %edi +801061f0: ff 75 08 push 0x8(%ebp) +801061f3: e8 a9 fe ff ff call 801060a1 kfree(mem); -80106461: 89 1c 24 mov %ebx,(%esp) -80106464: e8 52 bc ff ff call 801020bb +801061f8: 89 1c 24 mov %ebx,(%esp) +801061fb: e8 fc bd ff ff call 80101ffc return 0; -80106469: 83 c4 10 add $0x10,%esp -8010646c: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) -80106473: eb 07 jmp 8010647c +80106200: 83 c4 10 add $0x10,%esp +80106203: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) +8010620a: eb 07 jmp 80106213 return 0; -80106475: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) +8010620c: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) } -8010647c: 8b 45 e4 mov -0x1c(%ebp),%eax -8010647f: 8d 65 f4 lea -0xc(%ebp),%esp -80106482: 5b pop %ebx -80106483: 5e pop %esi -80106484: 5f pop %edi -80106485: 5d pop %ebp -80106486: c3 ret +80106213: 8b 45 e4 mov -0x1c(%ebp),%eax +80106216: 8d 65 f4 lea -0xc(%ebp),%esp +80106219: 5b pop %ebx +8010621a: 5e pop %esi +8010621b: 5f pop %edi +8010621c: 5d pop %ebp +8010621d: c3 ret -80106487 : +8010621e : // Free a page table and all the physical memory pages // in the user part. void freevm(pde_t *pgdir) { -80106487: f3 0f 1e fb endbr32 -8010648b: 55 push %ebp -8010648c: 89 e5 mov %esp,%ebp -8010648e: 57 push %edi -8010648f: 56 push %esi -80106490: 53 push %ebx -80106491: 83 ec 0c sub $0xc,%esp -80106494: 8b 7d 08 mov 0x8(%ebp),%edi +8010621e: 55 push %ebp +8010621f: 89 e5 mov %esp,%ebp +80106221: 57 push %edi +80106222: 56 push %esi +80106223: 53 push %ebx +80106224: 83 ec 0c sub $0xc,%esp +80106227: 8b 7d 08 mov 0x8(%ebp),%edi uint i; if(pgdir == 0) -80106497: 85 ff test %edi,%edi -80106499: 74 1d je 801064b8 +8010622a: 85 ff test %edi,%edi +8010622c: 74 1d je 8010624b panic("freevm: no pgdir"); deallocuvm(pgdir, KERNBASE, 0); -8010649b: 83 ec 04 sub $0x4,%esp -8010649e: 6a 00 push $0x0 -801064a0: 68 00 00 00 80 push $0x80000000 -801064a5: 57 push %edi -801064a6: e8 57 fe ff ff call 80106302 +8010622e: 83 ec 04 sub $0x4,%esp +80106231: 6a 00 push $0x0 +80106233: 68 00 00 00 80 push $0x80000000 +80106238: 57 push %edi +80106239: e8 63 fe ff ff call 801060a1 for(i = 0; i < NPDENTRIES; i++){ -801064ab: 89 fb mov %edi,%ebx -801064ad: 8d b7 00 10 00 00 lea 0x1000(%edi),%esi -801064b3: 83 c4 10 add $0x10,%esp -801064b6: eb 2a jmp 801064e2 +8010623e: 89 fb mov %edi,%ebx +80106240: 8d b7 00 10 00 00 lea 0x1000(%edi),%esi +80106246: 83 c4 10 add $0x10,%esp +80106249: eb 14 jmp 8010625f panic("freevm: no pgdir"); -801064b8: 83 ec 0c sub $0xc,%esp -801064bb: 68 21 82 10 80 push $0x80108221 -801064c0: e8 93 9e ff ff call 80100358 +8010624b: 83 ec 0c sub $0xc,%esp +8010624e: 68 41 7f 10 80 push $0x80107f41 +80106253: e8 e8 a0 ff ff call 80100340 + for(i = 0; i < NPDENTRIES; i++){ +80106258: 83 c3 04 add $0x4,%ebx +8010625b: 39 f3 cmp %esi,%ebx +8010625d: 74 1e je 8010627d if(pgdir[i] & PTE_P){ +8010625f: 8b 03 mov (%ebx),%eax +80106261: a8 01 test $0x1,%al +80106263: 74 f3 je 80106258 char * v = P2V(PTE_ADDR(pgdir[i])); kfree(v); -801064c5: 83 ec 0c sub $0xc,%esp +80106265: 83 ec 0c sub $0xc,%esp char * v = P2V(PTE_ADDR(pgdir[i])); -801064c8: 25 00 f0 ff ff and $0xfffff000,%eax -801064cd: 05 00 00 00 80 add $0x80000000,%eax +80106268: 25 00 f0 ff ff and $0xfffff000,%eax +8010626d: 05 00 00 00 80 add $0x80000000,%eax kfree(v); -801064d2: 50 push %eax -801064d3: e8 e3 bb ff ff call 801020bb -801064d8: 83 c4 10 add $0x10,%esp - for(i = 0; i < NPDENTRIES; i++){ -801064db: 83 c3 04 add $0x4,%ebx -801064de: 39 f3 cmp %esi,%ebx -801064e0: 74 08 je 801064ea - if(pgdir[i] & PTE_P){ -801064e2: 8b 03 mov (%ebx),%eax -801064e4: a8 01 test $0x1,%al -801064e6: 74 f3 je 801064db -801064e8: eb db jmp 801064c5 +80106272: 50 push %eax +80106273: e8 84 bd ff ff call 80101ffc +80106278: 83 c4 10 add $0x10,%esp +8010627b: eb db jmp 80106258 } } kfree((char*)pgdir); -801064ea: 83 ec 0c sub $0xc,%esp -801064ed: 57 push %edi -801064ee: e8 c8 bb ff ff call 801020bb -} -801064f3: 83 c4 10 add $0x10,%esp -801064f6: 8d 65 f4 lea -0xc(%ebp),%esp -801064f9: 5b pop %ebx -801064fa: 5e pop %esi -801064fb: 5f pop %edi -801064fc: 5d pop %ebp -801064fd: c3 ret - -801064fe : -{ -801064fe: f3 0f 1e fb endbr32 -80106502: 55 push %ebp -80106503: 89 e5 mov %esp,%ebp -80106505: 56 push %esi -80106506: 53 push %ebx +8010627d: 83 ec 0c sub $0xc,%esp +80106280: 57 push %edi +80106281: e8 76 bd ff ff call 80101ffc +} +80106286: 83 c4 10 add $0x10,%esp +80106289: 8d 65 f4 lea -0xc(%ebp),%esp +8010628c: 5b pop %ebx +8010628d: 5e pop %esi +8010628e: 5f pop %edi +8010628f: 5d pop %ebp +80106290: c3 ret + +80106291 : +{ +80106291: 55 push %ebp +80106292: 89 e5 mov %esp,%ebp +80106294: 56 push %esi +80106295: 53 push %ebx if((pgdir = (pde_t*)kalloc()) == 0) -80106507: e8 0d bd ff ff call 80102219 -8010650c: 89 c6 mov %eax,%esi -8010650e: 85 c0 test %eax,%eax -80106510: 74 42 je 80106554 +80106296: e8 af be ff ff call 8010214a +8010629b: 89 c6 mov %eax,%esi +8010629d: 85 c0 test %eax,%eax +8010629f: 74 42 je 801062e3 memset(pgdir, 0, PGSIZE); -80106512: 83 ec 04 sub $0x4,%esp -80106515: 68 00 10 00 00 push $0x1000 -8010651a: 6a 00 push $0x0 -8010651c: 50 push %eax -8010651d: e8 2d da ff ff call 80103f4f -80106522: 83 c4 10 add $0x10,%esp +801062a1: 83 ec 04 sub $0x4,%esp +801062a4: 68 00 10 00 00 push $0x1000 +801062a9: 6a 00 push $0x0 +801062ab: 50 push %eax +801062ac: e8 fe da ff ff call 80103daf +801062b1: 83 c4 10 add $0x10,%esp for(k = kmap; k < &kmap[NELEM(kmap)]; k++) -80106525: bb 20 b4 10 80 mov $0x8010b420,%ebx +801062b4: bb 20 b4 10 80 mov $0x8010b420,%ebx (uint)k->phys_start, k->perm) < 0) { -8010652a: 8b 43 04 mov 0x4(%ebx),%eax +801062b9: 8b 43 04 mov 0x4(%ebx),%eax if(mappages(pgdir, k->virt, k->phys_end - k->phys_start, -8010652d: 8b 4b 08 mov 0x8(%ebx),%ecx -80106530: 29 c1 sub %eax,%ecx -80106532: 83 ec 08 sub $0x8,%esp -80106535: ff 73 0c pushl 0xc(%ebx) -80106538: 50 push %eax -80106539: 8b 13 mov (%ebx),%edx -8010653b: 89 f0 mov %esi,%eax -8010653d: e8 2c fa ff ff call 80105f6e -80106542: 83 c4 10 add $0x10,%esp -80106545: 85 c0 test %eax,%eax -80106547: 78 14 js 8010655d +801062bc: 8b 4b 08 mov 0x8(%ebx),%ecx +801062bf: 29 c1 sub %eax,%ecx +801062c1: 83 ec 08 sub $0x8,%esp +801062c4: ff 73 0c push 0xc(%ebx) +801062c7: 50 push %eax +801062c8: 8b 13 mov (%ebx),%edx +801062ca: 89 f0 mov %esi,%eax +801062cc: e8 4e fa ff ff call 80105d1f +801062d1: 83 c4 10 add $0x10,%esp +801062d4: 85 c0 test %eax,%eax +801062d6: 78 14 js 801062ec for(k = kmap; k < &kmap[NELEM(kmap)]; k++) -80106549: 83 c3 10 add $0x10,%ebx -8010654c: 81 fb 60 b4 10 80 cmp $0x8010b460,%ebx -80106552: 75 d6 jne 8010652a -} -80106554: 89 f0 mov %esi,%eax -80106556: 8d 65 f8 lea -0x8(%ebp),%esp -80106559: 5b pop %ebx -8010655a: 5e pop %esi -8010655b: 5d pop %ebp -8010655c: c3 ret +801062d8: 83 c3 10 add $0x10,%ebx +801062db: 81 fb 60 b4 10 80 cmp $0x8010b460,%ebx +801062e1: 75 d6 jne 801062b9 +} +801062e3: 89 f0 mov %esi,%eax +801062e5: 8d 65 f8 lea -0x8(%ebp),%esp +801062e8: 5b pop %ebx +801062e9: 5e pop %esi +801062ea: 5d pop %ebp +801062eb: c3 ret freevm(pgdir); -8010655d: 83 ec 0c sub $0xc,%esp -80106560: 56 push %esi -80106561: e8 21 ff ff ff call 80106487 +801062ec: 83 ec 0c sub $0xc,%esp +801062ef: 56 push %esi +801062f0: e8 29 ff ff ff call 8010621e return 0; -80106566: 83 c4 10 add $0x10,%esp -80106569: be 00 00 00 00 mov $0x0,%esi -8010656e: eb e4 jmp 80106554 +801062f5: 83 c4 10 add $0x10,%esp +801062f8: be 00 00 00 00 mov $0x0,%esi +801062fd: eb e4 jmp 801062e3 -80106570 : +801062ff : { -80106570: f3 0f 1e fb endbr32 -80106574: 55 push %ebp -80106575: 89 e5 mov %esp,%ebp -80106577: 83 ec 08 sub $0x8,%esp +801062ff: 55 push %ebp +80106300: 89 e5 mov %esp,%ebp +80106302: 83 ec 08 sub $0x8,%esp kpgdir = setupkvm(); -8010657a: e8 7f ff ff ff call 801064fe -8010657f: a3 04 6a 11 80 mov %eax,0x80116a04 +80106305: e8 87 ff ff ff call 80106291 +8010630a: a3 04 3e 11 80 mov %eax,0x80113e04 switchkvm(); -80106584: e8 48 fb ff ff call 801060d1 +8010630f: e8 6d fb ff ff call 80105e81 } -80106589: c9 leave -8010658a: c3 ret +80106314: c9 leave +80106315: c3 ret -8010658b : +80106316 : // Clear PTE_U on a page. Used to create an inaccessible // page beneath the user stack. void clearpteu(pde_t *pgdir, char *uva) { -8010658b: f3 0f 1e fb endbr32 -8010658f: 55 push %ebp -80106590: 89 e5 mov %esp,%ebp -80106592: 83 ec 08 sub $0x8,%esp +80106316: 55 push %ebp +80106317: 89 e5 mov %esp,%ebp +80106319: 83 ec 08 sub $0x8,%esp pte_t *pte; pte = walkpgdir(pgdir, uva, 0); -80106595: b9 00 00 00 00 mov $0x0,%ecx -8010659a: 8b 55 0c mov 0xc(%ebp),%edx -8010659d: 8b 45 08 mov 0x8(%ebp),%eax -801065a0: e8 5c f9 ff ff call 80105f01 +8010631c: b9 00 00 00 00 mov $0x0,%ecx +80106321: 8b 55 0c mov 0xc(%ebp),%edx +80106324: 8b 45 08 mov 0x8(%ebp),%eax +80106327: e8 86 f9 ff ff call 80105cb2 if(pte == 0) -801065a5: 85 c0 test %eax,%eax -801065a7: 74 05 je 801065ae +8010632c: 85 c0 test %eax,%eax +8010632e: 74 05 je 80106335 panic("clearpteu"); *pte &= ~PTE_U; -801065a9: 83 20 fb andl $0xfffffffb,(%eax) +80106330: 83 20 fb andl $0xfffffffb,(%eax) } -801065ac: c9 leave -801065ad: c3 ret +80106333: c9 leave +80106334: c3 ret panic("clearpteu"); -801065ae: 83 ec 0c sub $0xc,%esp -801065b1: 68 32 82 10 80 push $0x80108232 -801065b6: e8 9d 9d ff ff call 80100358 +80106335: 83 ec 0c sub $0xc,%esp +80106338: 68 52 7f 10 80 push $0x80107f52 +8010633d: e8 fe 9f ff ff call 80100340 -801065bb : +80106342 : // Given a parent process's page table, create a copy // of it for a child. pde_t* copyuvm(pde_t *pgdir, uint sz) { -801065bb: f3 0f 1e fb endbr32 -801065bf: 55 push %ebp -801065c0: 89 e5 mov %esp,%ebp -801065c2: 57 push %edi -801065c3: 56 push %esi -801065c4: 53 push %ebx -801065c5: 83 ec 1c sub $0x1c,%esp +80106342: 55 push %ebp +80106343: 89 e5 mov %esp,%ebp +80106345: 57 push %edi +80106346: 56 push %esi +80106347: 53 push %ebx +80106348: 83 ec 1c sub $0x1c,%esp pde_t *d; pte_t *pte; uint pa, i, flags; char *mem; if((d = setupkvm()) == 0) -801065c8: e8 31 ff ff ff call 801064fe -801065cd: 89 45 dc mov %eax,-0x24(%ebp) -801065d0: 85 c0 test %eax,%eax -801065d2: 0f 84 c7 00 00 00 je 8010669f +8010634b: e8 41 ff ff ff call 80106291 +80106350: 89 45 dc mov %eax,-0x24(%ebp) +80106353: 85 c0 test %eax,%eax +80106355: 0f 84 c7 00 00 00 je 80106422 return 0; for(i = 0; i < sz; i += PGSIZE){ -801065d8: 83 7d 0c 00 cmpl $0x0,0xc(%ebp) -801065dc: 0f 84 bd 00 00 00 je 8010669f -801065e2: bf 00 00 00 00 mov $0x0,%edi +8010635b: 83 7d 0c 00 cmpl $0x0,0xc(%ebp) +8010635f: 0f 84 bd 00 00 00 je 80106422 +80106365: bf 00 00 00 00 mov $0x0,%edi if((pte = walkpgdir(pgdir, (void *) i, 0)) == 0) -801065e7: 89 7d e4 mov %edi,-0x1c(%ebp) -801065ea: b9 00 00 00 00 mov $0x0,%ecx -801065ef: 89 fa mov %edi,%edx -801065f1: 8b 45 08 mov 0x8(%ebp),%eax -801065f4: e8 08 f9 ff ff call 80105f01 -801065f9: 85 c0 test %eax,%eax -801065fb: 74 67 je 80106664 +8010636a: 89 7d e4 mov %edi,-0x1c(%ebp) +8010636d: b9 00 00 00 00 mov $0x0,%ecx +80106372: 89 fa mov %edi,%edx +80106374: 8b 45 08 mov 0x8(%ebp),%eax +80106377: e8 36 f9 ff ff call 80105cb2 +8010637c: 85 c0 test %eax,%eax +8010637e: 74 67 je 801063e7 panic("copyuvm: pte should exist"); if(!(*pte & PTE_P)) -801065fd: 8b 00 mov (%eax),%eax -801065ff: a8 01 test $0x1,%al -80106601: 74 6e je 80106671 +80106380: 8b 00 mov (%eax),%eax +80106382: a8 01 test $0x1,%al +80106384: 74 6e je 801063f4 panic("copyuvm: page not present"); pa = PTE_ADDR(*pte); -80106603: 89 c6 mov %eax,%esi -80106605: 81 e6 00 f0 ff ff and $0xfffff000,%esi +80106386: 89 c6 mov %eax,%esi +80106388: 81 e6 00 f0 ff ff and $0xfffff000,%esi flags = PTE_FLAGS(*pte); -8010660b: 25 ff 0f 00 00 and $0xfff,%eax -80106610: 89 45 e0 mov %eax,-0x20(%ebp) +8010638e: 25 ff 0f 00 00 and $0xfff,%eax +80106393: 89 45 e0 mov %eax,-0x20(%ebp) if((mem = kalloc()) == 0) -80106613: e8 01 bc ff ff call 80102219 -80106618: 89 c3 mov %eax,%ebx -8010661a: 85 c0 test %eax,%eax -8010661c: 74 6c je 8010668a +80106396: e8 af bd ff ff call 8010214a +8010639b: 89 c3 mov %eax,%ebx +8010639d: 85 c0 test %eax,%eax +8010639f: 74 6c je 8010640d goto bad; memmove(mem, (char*)P2V(pa), PGSIZE); -8010661e: 83 ec 04 sub $0x4,%esp -80106621: 68 00 10 00 00 push $0x1000 -80106626: 81 c6 00 00 00 80 add $0x80000000,%esi -8010662c: 56 push %esi -8010662d: 50 push %eax -8010662e: e8 a9 d9 ff ff call 80103fdc +801063a1: 83 ec 04 sub $0x4,%esp +801063a4: 68 00 10 00 00 push $0x1000 +801063a9: 81 c6 00 00 00 80 add $0x80000000,%esi +801063af: 56 push %esi +801063b0: 50 push %eax +801063b1: e8 7e da ff ff call 80103e34 if(mappages(d, (void*)i, PGSIZE, V2P(mem), flags) < 0) { -80106633: 83 c4 08 add $0x8,%esp -80106636: ff 75 e0 pushl -0x20(%ebp) -80106639: 8d 83 00 00 00 80 lea -0x80000000(%ebx),%eax -8010663f: 50 push %eax -80106640: b9 00 10 00 00 mov $0x1000,%ecx -80106645: 8b 55 e4 mov -0x1c(%ebp),%edx -80106648: 8b 45 dc mov -0x24(%ebp),%eax -8010664b: e8 1e f9 ff ff call 80105f6e -80106650: 83 c4 10 add $0x10,%esp -80106653: 85 c0 test %eax,%eax -80106655: 78 27 js 8010667e +801063b6: 83 c4 08 add $0x8,%esp +801063b9: ff 75 e0 push -0x20(%ebp) +801063bc: 8d 83 00 00 00 80 lea -0x80000000(%ebx),%eax +801063c2: 50 push %eax +801063c3: b9 00 10 00 00 mov $0x1000,%ecx +801063c8: 8b 55 e4 mov -0x1c(%ebp),%edx +801063cb: 8b 45 dc mov -0x24(%ebp),%eax +801063ce: e8 4c f9 ff ff call 80105d1f +801063d3: 83 c4 10 add $0x10,%esp +801063d6: 85 c0 test %eax,%eax +801063d8: 78 27 js 80106401 for(i = 0; i < sz; i += PGSIZE){ -80106657: 81 c7 00 10 00 00 add $0x1000,%edi -8010665d: 39 7d 0c cmp %edi,0xc(%ebp) -80106660: 77 85 ja 801065e7 -80106662: eb 3b jmp 8010669f +801063da: 81 c7 00 10 00 00 add $0x1000,%edi +801063e0: 39 7d 0c cmp %edi,0xc(%ebp) +801063e3: 77 85 ja 8010636a +801063e5: eb 3b jmp 80106422 panic("copyuvm: pte should exist"); -80106664: 83 ec 0c sub $0xc,%esp -80106667: 68 3c 82 10 80 push $0x8010823c -8010666c: e8 e7 9c ff ff call 80100358 +801063e7: 83 ec 0c sub $0xc,%esp +801063ea: 68 5c 7f 10 80 push $0x80107f5c +801063ef: e8 4c 9f ff ff call 80100340 panic("copyuvm: page not present"); -80106671: 83 ec 0c sub $0xc,%esp -80106674: 68 56 82 10 80 push $0x80108256 -80106679: e8 da 9c ff ff call 80100358 +801063f4: 83 ec 0c sub $0xc,%esp +801063f7: 68 76 7f 10 80 push $0x80107f76 +801063fc: e8 3f 9f ff ff call 80100340 kfree(mem); -8010667e: 83 ec 0c sub $0xc,%esp -80106681: 53 push %ebx -80106682: e8 34 ba ff ff call 801020bb +80106401: 83 ec 0c sub $0xc,%esp +80106404: 53 push %ebx +80106405: e8 f2 bb ff ff call 80101ffc goto bad; -80106687: 83 c4 10 add $0x10,%esp +8010640a: 83 c4 10 add $0x10,%esp } } return d; bad: freevm(d); -8010668a: 83 ec 0c sub $0xc,%esp -8010668d: ff 75 dc pushl -0x24(%ebp) -80106690: e8 f2 fd ff ff call 80106487 +8010640d: 83 ec 0c sub $0xc,%esp +80106410: ff 75 dc push -0x24(%ebp) +80106413: e8 06 fe ff ff call 8010621e return 0; -80106695: 83 c4 10 add $0x10,%esp -80106698: c7 45 dc 00 00 00 00 movl $0x0,-0x24(%ebp) +80106418: 83 c4 10 add $0x10,%esp +8010641b: c7 45 dc 00 00 00 00 movl $0x0,-0x24(%ebp) } -8010669f: 8b 45 dc mov -0x24(%ebp),%eax -801066a2: 8d 65 f4 lea -0xc(%ebp),%esp -801066a5: 5b pop %ebx -801066a6: 5e pop %esi -801066a7: 5f pop %edi -801066a8: 5d pop %ebp -801066a9: c3 ret +80106422: 8b 45 dc mov -0x24(%ebp),%eax +80106425: 8d 65 f4 lea -0xc(%ebp),%esp +80106428: 5b pop %ebx +80106429: 5e pop %esi +8010642a: 5f pop %edi +8010642b: 5d pop %ebp +8010642c: c3 ret -801066aa : +8010642d : //PAGEBREAK! // Map user virtual address to kernel address. char* uva2ka(pde_t *pgdir, char *uva) { -801066aa: f3 0f 1e fb endbr32 -801066ae: 55 push %ebp -801066af: 89 e5 mov %esp,%ebp -801066b1: 83 ec 08 sub $0x8,%esp +8010642d: 55 push %ebp +8010642e: 89 e5 mov %esp,%ebp +80106430: 83 ec 08 sub $0x8,%esp pte_t *pte; pte = walkpgdir(pgdir, uva, 0); -801066b4: b9 00 00 00 00 mov $0x0,%ecx -801066b9: 8b 55 0c mov 0xc(%ebp),%edx -801066bc: 8b 45 08 mov 0x8(%ebp),%eax -801066bf: e8 3d f8 ff ff call 80105f01 +80106433: b9 00 00 00 00 mov $0x0,%ecx +80106438: 8b 55 0c mov 0xc(%ebp),%edx +8010643b: 8b 45 08 mov 0x8(%ebp),%eax +8010643e: e8 6f f8 ff ff call 80105cb2 if((*pte & PTE_P) == 0) -801066c4: 8b 00 mov (%eax),%eax +80106443: 8b 00 mov (%eax),%eax return 0; if((*pte & PTE_U) == 0) -801066c6: 89 c2 mov %eax,%edx -801066c8: 83 e2 05 and $0x5,%edx +80106445: 89 c2 mov %eax,%edx +80106447: 83 e2 05 and $0x5,%edx return 0; return (char*)P2V(PTE_ADDR(*pte)); -801066cb: 25 00 f0 ff ff and $0xfffff000,%eax -801066d0: 05 00 00 00 80 add $0x80000000,%eax -801066d5: 83 fa 05 cmp $0x5,%edx -801066d8: ba 00 00 00 00 mov $0x0,%edx -801066dd: 0f 45 c2 cmovne %edx,%eax +8010644a: 25 00 f0 ff ff and $0xfffff000,%eax +8010644f: 05 00 00 00 80 add $0x80000000,%eax +80106454: 83 fa 05 cmp $0x5,%edx +80106457: ba 00 00 00 00 mov $0x0,%edx +8010645c: 0f 45 c2 cmovne %edx,%eax } -801066e0: c9 leave -801066e1: c3 ret +8010645f: c9 leave +80106460: c3 ret -801066e2 : +80106461 : // 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) { -801066e2: f3 0f 1e fb endbr32 -801066e6: 55 push %ebp -801066e7: 89 e5 mov %esp,%ebp -801066e9: 57 push %edi -801066ea: 56 push %esi -801066eb: 53 push %ebx -801066ec: 83 ec 0c sub $0xc,%esp -801066ef: 8b 75 0c mov 0xc(%ebp),%esi +80106461: 55 push %ebp +80106462: 89 e5 mov %esp,%ebp +80106464: 57 push %edi +80106465: 56 push %esi +80106466: 53 push %ebx +80106467: 83 ec 0c sub $0xc,%esp +8010646a: 8b 75 14 mov 0x14(%ebp),%esi char *buf, *pa0; uint n, va0; buf = (char*)p; while(len > 0){ -801066f2: 83 7d 14 00 cmpl $0x0,0x14(%ebp) -801066f6: 74 55 je 8010674d +8010646d: 85 f6 test %esi,%esi +8010646f: 74 5a je 801064cb va0 = (uint)PGROUNDDOWN(va); -801066f8: 89 f7 mov %esi,%edi -801066fa: 81 e7 00 f0 ff ff and $0xfffff000,%edi +80106471: 8b 7d 0c mov 0xc(%ebp),%edi +80106474: 81 e7 00 f0 ff ff and $0xfffff000,%edi pa0 = uva2ka(pgdir, (char*)va0); -80106700: 83 ec 08 sub $0x8,%esp -80106703: 57 push %edi -80106704: ff 75 08 pushl 0x8(%ebp) -80106707: e8 9e ff ff ff call 801066aa +8010647a: 83 ec 08 sub $0x8,%esp +8010647d: 57 push %edi +8010647e: ff 75 08 push 0x8(%ebp) +80106481: e8 a7 ff ff ff call 8010642d if(pa0 == 0) -8010670c: 83 c4 10 add $0x10,%esp -8010670f: 85 c0 test %eax,%eax -80106711: 74 41 je 80106754 +80106486: 83 c4 10 add $0x10,%esp +80106489: 85 c0 test %eax,%eax +8010648b: 74 45 je 801064d2 return -1; n = PGSIZE - (va - va0); -80106713: 89 fb mov %edi,%ebx -80106715: 29 f3 sub %esi,%ebx -80106717: 81 c3 00 10 00 00 add $0x1000,%ebx +8010648d: 89 fb mov %edi,%ebx +8010648f: 2b 5d 0c sub 0xc(%ebp),%ebx +80106492: 81 c3 00 10 00 00 add $0x1000,%ebx +80106498: 39 f3 cmp %esi,%ebx +8010649a: 0f 47 de cmova %esi,%ebx if(n > len) -8010671d: 3b 5d 14 cmp 0x14(%ebp),%ebx -80106720: 0f 47 5d 14 cmova 0x14(%ebp),%ebx n = len; memmove(pa0 + (va - va0), buf, n); -80106724: 83 ec 04 sub $0x4,%esp -80106727: 53 push %ebx -80106728: ff 75 10 pushl 0x10(%ebp) -8010672b: 29 fe sub %edi,%esi -8010672d: 01 f0 add %esi,%eax -8010672f: 50 push %eax -80106730: e8 a7 d8 ff ff call 80103fdc +8010649d: 83 ec 04 sub $0x4,%esp +801064a0: 53 push %ebx +801064a1: ff 75 10 push 0x10(%ebp) +801064a4: 8b 55 0c mov 0xc(%ebp),%edx +801064a7: 29 fa sub %edi,%edx +801064a9: 01 d0 add %edx,%eax +801064ab: 50 push %eax +801064ac: e8 83 d9 ff ff call 80103e34 len -= n; buf += n; -80106735: 01 5d 10 add %ebx,0x10(%ebp) +801064b1: 01 5d 10 add %ebx,0x10(%ebp) va = va0 + PGSIZE; -80106738: 8d b7 00 10 00 00 lea 0x1000(%edi),%esi +801064b4: 8d 87 00 10 00 00 lea 0x1000(%edi),%eax +801064ba: 89 45 0c mov %eax,0xc(%ebp) while(len > 0){ -8010673e: 83 c4 10 add $0x10,%esp -80106741: 29 5d 14 sub %ebx,0x14(%ebp) -80106744: 75 b2 jne 801066f8 +801064bd: 83 c4 10 add $0x10,%esp +801064c0: 29 de sub %ebx,%esi +801064c2: 75 ad jne 80106471 } return 0; -80106746: b8 00 00 00 00 mov $0x0,%eax -8010674b: eb 0c jmp 80106759 -8010674d: b8 00 00 00 00 mov $0x0,%eax -80106752: eb 05 jmp 80106759 +801064c4: b8 00 00 00 00 mov $0x0,%eax +801064c9: eb 0c jmp 801064d7 +801064cb: b8 00 00 00 00 mov $0x0,%eax +801064d0: eb 05 jmp 801064d7 return -1; -80106754: b8 ff ff ff ff mov $0xffffffff,%eax +801064d2: b8 ff ff ff ff mov $0xffffffff,%eax } -80106759: 8d 65 f4 lea -0xc(%ebp),%esp -8010675c: 5b pop %ebx -8010675d: 5e pop %esi -8010675e: 5f pop %edi -8010675f: 5d pop %ebp -80106760: c3 ret +801064d7: 8d 65 f4 lea -0xc(%ebp),%esp +801064da: 5b pop %ebx +801064db: 5e pop %esi +801064dc: 5f pop %edi +801064dd: 5d pop %ebp +801064de: c3 ret -80106761 : +801064df : #include int set_bit(int num,int i) { -80106761: f3 0f 1e fb endbr32 -80106765: 55 push %ebp -80106766: 89 e5 mov %esp,%ebp +801064df: 55 push %ebp +801064e0: 89 e5 mov %esp,%ebp return num | (1<: +801064f1 : int get_bit(int num,int i) { -80106777: f3 0f 1e fb endbr32 -8010677b: 55 push %ebp -8010677c: 89 e5 mov %esp,%ebp +801064f1: 55 push %ebp +801064f2: 89 e5 mov %esp,%ebp return ((num&(1<: +80106501 : int clear_bit(int num,int i) { -8010678b: f3 0f 1e fb endbr32 -8010678f: 55 push %ebp -80106790: 89 e5 mov %esp,%ebp +80106501: 55 push %ebp +80106502: 89 e5 mov %esp,%ebp int mask=~(1<: +80106513 : unsigned int getnumofBits(unsigned int n) { -801067a1: f3 0f 1e fb endbr32 -801067a5: 55 push %ebp -801067a6: 89 e5 mov %esp,%ebp -801067a8: 8b 45 08 mov 0x8(%ebp),%eax +80106513: 55 push %ebp +80106514: 89 e5 mov %esp,%ebp +80106516: 8b 45 08 mov 0x8(%ebp),%eax unsigned count=0; while(n!=0) -801067ab: 85 c0 test %eax,%eax -801067ad: 74 10 je 801067bf +80106519: 85 c0 test %eax,%eax +8010651b: 74 10 je 8010652d unsigned count=0; -801067af: ba 00 00 00 00 mov $0x0,%edx +8010651d: ba 00 00 00 00 mov $0x0,%edx { n>>=1; count+=1; -801067b4: 83 c2 01 add $0x1,%edx +80106522: 83 c2 01 add $0x1,%edx while(n!=0) -801067b7: d1 e8 shr %eax -801067b9: 75 f9 jne 801067b4 +80106525: d1 e8 shr %eax +80106527: 75 f9 jne 80106522 } return count; } -801067bb: 89 d0 mov %edx,%eax -801067bd: 5d pop %ebp -801067be: c3 ret +80106529: 89 d0 mov %edx,%eax +8010652b: 5d pop %ebp +8010652c: c3 ret unsigned count=0; -801067bf: 89 c2 mov %eax,%edx +8010652d: 89 c2 mov %eax,%edx return count; -801067c1: eb f8 jmp 801067bb +8010652f: eb f8 jmp 80106529 -801067c3 : +80106531 : unsigned int nextPowerOf2(unsigned int n) { -801067c3: f3 0f 1e fb endbr32 -801067c7: 55 push %ebp -801067c8: 89 e5 mov %esp,%ebp -801067ca: 83 ec 08 sub $0x8,%esp -801067cd: 8b 55 08 mov 0x8(%ebp),%edx +80106531: 55 push %ebp +80106532: 89 e5 mov %esp,%ebp +80106534: 83 ec 08 sub $0x8,%esp +80106537: 8b 55 08 mov 0x8(%ebp),%edx if(n>=0 && n<8) return 8; -801067d0: b8 08 00 00 00 mov $0x8,%eax +8010653a: b8 08 00 00 00 mov $0x8,%eax if(n>=0 && n<8) -801067d5: 83 fa 07 cmp $0x7,%edx -801067d8: 76 1e jbe 801067f8 +8010653f: 83 fa 07 cmp $0x7,%edx +80106542: 76 1e jbe 80106562 if(n && !(n&(n-1))) -801067da: 8d 4a ff lea -0x1(%edx),%ecx +80106544: 8d 4a ff lea -0x1(%edx),%ecx return n; -801067dd: 89 d0 mov %edx,%eax +80106547: 89 d0 mov %edx,%eax if(n && !(n&(n-1))) -801067df: 85 d1 test %edx,%ecx -801067e1: 74 15 je 801067f8 +80106549: 85 d1 test %edx,%ecx +8010654b: 74 15 je 80106562 return 1< -801067ec: 83 c4 10 add $0x10,%esp -801067ef: 89 c1 mov %eax,%ecx -801067f1: b8 01 00 00 00 mov $0x1,%eax -801067f6: d3 e0 shl %cl,%eax -} -801067f8: c9 leave -801067f9: c3 ret - -801067fa : +8010654d: 83 ec 0c sub $0xc,%esp +80106550: 52 push %edx +80106551: e8 bd ff ff ff call 80106513 +80106556: 83 c4 10 add $0x10,%esp +80106559: 89 c1 mov %eax,%ecx +8010655b: b8 01 00 00 00 mov $0x1,%eax +80106560: d3 e0 shl %cl,%eax +} +80106562: c9 leave +80106563: c3 ret + +80106564 : unsigned int getslabIdx(unsigned int n) { -801067fa: f3 0f 1e fb endbr32 -801067fe: 55 push %ebp -801067ff: 89 e5 mov %esp,%ebp -80106801: 83 ec 14 sub $0x14,%esp +80106564: 55 push %ebp +80106565: 89 e5 mov %esp,%ebp +80106567: 83 ec 14 sub $0x14,%esp unsigned slabIdx=getnumofBits(n)-4; -80106804: ff 75 08 pushl 0x8(%ebp) -80106807: e8 95 ff ff ff call 801067a1 -8010680c: 83 c4 10 add $0x10,%esp -8010680f: 83 e8 04 sub $0x4,%eax +8010656a: ff 75 08 push 0x8(%ebp) +8010656d: e8 a1 ff ff ff call 80106513 +80106572: 83 c4 10 add $0x10,%esp +80106575: 83 e8 04 sub $0x4,%eax return slabIdx; } -80106812: c9 leave -80106813: c3 ret +80106578: c9 leave +80106579: c3 ret -80106814 : +8010657a : struct spinlock lock; struct slab slab[NSLAB]; } stable; int returnOffset(int row,int column) { -80106814: f3 0f 1e fb endbr32 -80106818: 55 push %ebp -80106819: 89 e5 mov %esp,%ebp +8010657a: 55 push %ebp +8010657b: 89 e5 mov %esp,%ebp return 8*row + column; -8010681b: 8b 45 08 mov 0x8(%ebp),%eax -8010681e: c1 e0 03 shl $0x3,%eax -80106821: 03 45 0c add 0xc(%ebp),%eax +8010657d: 8b 45 08 mov 0x8(%ebp),%eax +80106580: c1 e0 03 shl $0x3,%eax +80106583: 03 45 0c add 0xc(%ebp),%eax } -80106824: 5d pop %ebp -80106825: c3 ret +80106586: 5d pop %ebp +80106587: c3 ret -80106826 : +80106588 : int setBitmap(int slabIdx) { -80106826: f3 0f 1e fb endbr32 -8010682a: 55 push %ebp -8010682b: 89 e5 mov %esp,%ebp -8010682d: 56 push %esi -8010682e: 53 push %ebx +80106588: 55 push %ebp +80106589: 89 e5 mov %esp,%ebp +8010658b: 56 push %esi +8010658c: 53 push %ebx { if(s->bitmap[j]==0xFF) continue; for(int k=0;k<=7;k++) { if(!(s->bitmap[j]&(1< +8010659a: b9 00 00 00 00 mov $0x0,%ecx +8010659f: eb 1c jmp 801065bd for(int k=0;k<=7;k++) -80106843: b8 00 00 00 00 mov $0x0,%eax +801065a1: b8 00 00 00 00 mov $0x0,%eax return num | (1<bitmap[j]=set_bit(s->bitmap[j],k); -8010684b: 88 13 mov %dl,(%ebx) +801065a9: 88 13 mov %dl,(%ebx) return 8*row + column; -8010684d: 8d 04 c8 lea (%eax,%ecx,8),%eax +801065ab: 8d 04 c8 lea (%eax,%ecx,8),%eax return returnOffset(j,k); } } } return 0; //Unable to find empty space of bitmap } -80106850: 5b pop %ebx -80106851: 5e pop %esi -80106852: 5d pop %ebp -80106853: c3 ret +801065ae: 5b pop %ebx +801065af: 5e pop %esi +801065b0: 5d pop %ebp +801065b1: c3 ret for(int j=0;j +801065b2: 83 c1 01 add $0x1,%ecx +801065b5: 81 f9 00 10 00 00 cmp $0x1000,%ecx +801065bb: 74 22 je 801065df if(!(s->bitmap[j]&(1< +801065bd: 8d 1c 0e lea (%esi,%ecx,1),%ebx +801065c0: 0f b6 04 0e movzbl (%esi,%ecx,1),%eax +801065c4: 0f be d0 movsbl %al,%edx +801065c7: a8 01 test $0x1,%al +801065c9: 74 d6 je 801065a1 for(int k=0;k<=7;k++) -8010686d: b8 01 00 00 00 mov $0x1,%eax +801065cb: b8 01 00 00 00 mov $0x1,%eax if(!(s->bitmap[j]&(1< +801065d0: 0f a3 c2 bt %eax,%edx +801065d3: 73 d1 jae 801065a6 for(int k=0;k<=7;k++) -80106877: 83 c0 01 add $0x1,%eax -8010687a: 83 f8 08 cmp $0x8,%eax -8010687d: 75 f3 jne 80106872 -8010687f: eb d3 jmp 80106854 +801065d5: 83 c0 01 add $0x1,%eax +801065d8: 83 f8 08 cmp $0x8,%eax +801065db: 75 f3 jne 801065d0 +801065dd: eb d3 jmp 801065b2 return 0; //Unable to find empty space of bitmap -80106881: b8 00 00 00 00 mov $0x0,%eax -80106886: eb c8 jmp 80106850 +801065df: b8 00 00 00 00 mov $0x0,%eax +801065e4: eb c8 jmp 801065ae -80106888 : +801065e6 : int getRow(int offset) { -80106888: f3 0f 1e fb endbr32 -8010688c: 55 push %ebp -8010688d: 89 e5 mov %esp,%ebp -8010688f: 8b 55 08 mov 0x8(%ebp),%edx +801065e6: 55 push %ebp +801065e7: 89 e5 mov %esp,%ebp +801065e9: 8b 55 08 mov 0x8(%ebp),%edx return offset/8; -80106892: 8d 42 07 lea 0x7(%edx),%eax -80106895: 85 d2 test %edx,%edx -80106897: 0f 49 c2 cmovns %edx,%eax -8010689a: c1 f8 03 sar $0x3,%eax +801065ec: 8d 42 07 lea 0x7(%edx),%eax +801065ef: 85 d2 test %edx,%edx +801065f1: 0f 49 c2 cmovns %edx,%eax +801065f4: c1 f8 03 sar $0x3,%eax } -8010689d: 5d pop %ebp -8010689e: c3 ret +801065f7: 5d pop %ebp +801065f8: c3 ret -8010689f : +801065f9 : int getColumn(int offset) { -8010689f: f3 0f 1e fb endbr32 -801068a3: 55 push %ebp -801068a4: 89 e5 mov %esp,%ebp -801068a6: 8b 45 08 mov 0x8(%ebp),%eax +801065f9: 55 push %ebp +801065fa: 89 e5 mov %esp,%ebp +801065fc: 8b 45 08 mov 0x8(%ebp),%eax return offset%8; -801068a9: 99 cltd -801068aa: c1 ea 1d shr $0x1d,%edx -801068ad: 01 d0 add %edx,%eax -801068af: 83 e0 07 and $0x7,%eax -801068b2: 29 d0 sub %edx,%eax +801065ff: 99 cltd +80106600: c1 ea 1d shr $0x1d,%edx +80106603: 01 d0 add %edx,%eax +80106605: 83 e0 07 and $0x7,%eax +80106608: 29 d0 sub %edx,%eax } -801068b4: 5d pop %ebp -801068b5: c3 ret +8010660a: 5d pop %ebp +8010660b: c3 ret -801068b6 : +8010660c : bool clearBitmap(int slabIdx,int offset) { -801068b6: f3 0f 1e fb endbr32 -801068ba: 55 push %ebp -801068bb: 89 e5 mov %esp,%ebp -801068bd: 53 push %ebx -801068be: 8b 5d 0c mov 0xc(%ebp),%ebx - return offset%8; -801068c1: 89 d9 mov %ebx,%ecx -801068c3: c1 f9 1f sar $0x1f,%ecx -801068c6: c1 e9 1d shr $0x1d,%ecx -801068c9: 8d 14 0b lea (%ebx,%ecx,1),%edx -801068cc: 83 e2 07 and $0x7,%edx -801068cf: 29 ca sub %ecx,%edx +8010660c: 55 push %ebp +8010660d: 89 e5 mov %esp,%ebp +8010660f: 53 push %ebx +80106610: 8b 55 0c mov 0xc(%ebp),%edx struct slab *s; s=&stable.slab[slabIdx]; bool checkbit=true; int row=getRow(offset); int column=getColumn(offset); if(get_bit(s->bitmap[row],column)) -801068d1: 69 4d 08 a8 01 00 00 imul $0x1a8,0x8(%ebp),%ecx +80106613: 69 4d 08 a8 01 00 00 imul $0x1a8,0x8(%ebp),%ecx return offset/8; -801068d8: 8d 43 07 lea 0x7(%ebx),%eax -801068db: 85 db test %ebx,%ebx -801068dd: 0f 49 c3 cmovns %ebx,%eax -801068e0: c1 f8 03 sar $0x3,%eax +8010661a: 8d 42 07 lea 0x7(%edx),%eax +8010661d: 85 d2 test %edx,%edx +8010661f: 0f 49 c2 cmovns %edx,%eax +80106622: c1 f8 03 sar $0x3,%eax if(get_bit(s->bitmap[row],column)) -801068e3: 03 81 68 6a 11 80 add -0x7fee9598(%ecx),%eax -801068e9: 0f be 08 movsbl (%eax),%ecx +80106625: 03 81 68 3e 11 80 add -0x7feec198(%ecx),%eax +8010662b: 0f be 08 movsbl (%eax),%ecx + return ((num&(1<bitmap[row]=clear_bit(s->bitmap[row],column); else checkbit=false; -801068ec: bb 00 00 00 00 mov $0x0,%ebx +80106631: bb 00 00 00 00 mov $0x0,%ebx if(get_bit(s->bitmap[row],column)) -801068f1: 0f a3 d1 bt %edx,%ecx -801068f4: 73 0a jae 80106900 +80106636: 0f a3 d1 bt %edx,%ecx +80106639: 73 0a jae 80106645 return num&mask; -801068f6: 0f b3 d1 btr %edx,%ecx +8010663b: 0f b3 d1 btr %edx,%ecx s->bitmap[row]=clear_bit(s->bitmap[row],column); -801068f9: 88 08 mov %cl,(%eax) +8010663e: 88 08 mov %cl,(%eax) bool checkbit=true; -801068fb: bb 01 00 00 00 mov $0x1,%ebx +80106640: bb 01 00 00 00 mov $0x1,%ebx return checkbit; } -80106900: 89 d8 mov %ebx,%eax -80106902: 5b pop %ebx -80106903: 5d pop %ebp -80106904: c3 ret +80106645: 89 d8 mov %ebx,%eax +80106647: 8b 5d fc mov -0x4(%ebp),%ebx +8010664a: c9 leave +8010664b: c3 ret -80106905 : +8010664c : bool checkEmpty(int startOffset,int endOffset,int slabIdx) { -80106905: f3 0f 1e fb endbr32 -80106909: 55 push %ebp -8010690a: 89 e5 mov %esp,%ebp -8010690c: 57 push %edi -8010690d: 56 push %esi -8010690e: 53 push %ebx -8010690f: 83 ec 0c sub $0xc,%esp -80106912: 8b 55 08 mov 0x8(%ebp),%edx -80106915: 8b 45 0c mov 0xc(%ebp),%eax +8010664c: 55 push %ebp +8010664d: 89 e5 mov %esp,%ebp +8010664f: 57 push %edi +80106650: 56 push %esi +80106651: 53 push %ebx +80106652: 83 ec 08 sub $0x8,%esp +80106655: 8b 4d 08 mov 0x8(%ebp),%ecx +80106658: 8b 45 0c mov 0xc(%ebp),%eax return offset/8; -80106918: 8d 4a 07 lea 0x7(%edx),%ecx -8010691b: 85 d2 test %edx,%edx -8010691d: 0f 49 ca cmovns %edx,%ecx -80106920: c1 f9 03 sar $0x3,%ecx -80106923: 89 4d ec mov %ecx,-0x14(%ebp) -80106926: 89 cb mov %ecx,%ebx +8010665b: 8d 51 07 lea 0x7(%ecx),%edx +8010665e: 85 c9 test %ecx,%ecx +80106660: 0f 49 d1 cmovns %ecx,%edx +80106663: 89 d7 mov %edx,%edi +80106665: c1 ff 03 sar $0x3,%edi return offset%8; -80106928: 89 d6 mov %edx,%esi -8010692a: c1 fe 1f sar $0x1f,%esi -8010692d: c1 ee 1d shr $0x1d,%esi -80106930: 8d 0c 32 lea (%edx,%esi,1),%ecx -80106933: 83 e1 07 and $0x7,%ecx -80106936: 29 f1 sub %esi,%ecx +80106668: 89 ca mov %ecx,%edx +8010666a: c1 fa 1f sar $0x1f,%edx +8010666d: c1 ea 1d shr $0x1d,%edx +80106670: 8d 34 11 lea (%ecx,%edx,1),%esi +80106673: 83 e6 07 and $0x7,%esi +80106676: 29 d6 sub %edx,%esi return offset/8; -80106938: 8d 50 07 lea 0x7(%eax),%edx -8010693b: 85 c0 test %eax,%eax -8010693d: 0f 49 d0 cmovns %eax,%edx -80106940: c1 fa 03 sar $0x3,%edx -80106943: 89 55 e8 mov %edx,-0x18(%ebp) -80106946: 89 55 f0 mov %edx,-0x10(%ebp) +80106678: 8d 50 07 lea 0x7(%eax),%edx +8010667b: 85 c0 test %eax,%eax +8010667d: 0f 49 d0 cmovns %eax,%edx +80106680: c1 fa 03 sar $0x3,%edx +80106683: 89 55 f0 mov %edx,-0x10(%ebp) return offset%8; -80106949: 89 c2 mov %eax,%edx -8010694b: c1 fa 1f sar $0x1f,%edx -8010694e: 89 d7 mov %edx,%edi -80106950: c1 ef 1d shr $0x1d,%edi -80106953: 8d 14 38 lea (%eax,%edi,1),%edx -80106956: 83 e2 07 and $0x7,%edx -80106959: 29 fa sub %edi,%edx +80106686: 99 cltd +80106687: c1 ea 1d shr $0x1d,%edx +8010668a: 89 55 ec mov %edx,-0x14(%ebp) +8010668d: 01 c2 add %eax,%edx +8010668f: 83 e2 07 and $0x7,%edx +80106692: 2b 55 ec sub -0x14(%ebp),%edx int startColumn=getColumn(startOffset); int endRow=getRow(endOffset); int endColumn=getColumn(endOffset); // cprintf("startOffset: %d, endOffset %d\n",startOffset,endOffset); // cprintf("startRow:%d endRow:%d\n",startRow,endRow); for(int i=startRow;i<=endRow;i++) -8010695b: 8b 7d e8 mov -0x18(%ebp),%edi -8010695e: 39 df cmp %ebx,%edi -80106960: 7c 55 jl 801069b7 -80106962: 89 ce mov %ecx,%esi -80106964: b8 01 00 00 00 mov $0x1,%eax -80106969: d3 e0 shl %cl,%eax -8010696b: 89 45 ec mov %eax,-0x14(%ebp) +80106695: 39 7d f0 cmp %edi,-0x10(%ebp) +80106698: 7c 58 jl 801066f2 +8010669a: 89 fb mov %edi,%ebx +8010669c: 83 e1 07 and $0x7,%ecx +8010669f: b8 01 00 00 00 mov $0x1,%eax +801066a4: d3 e0 shl %cl,%eax +801066a6: 89 45 ec mov %eax,-0x14(%ebp) { for(int j=startColumn;j<=endColumn;j++) { if(get_bit(s->bitmap[i],j)) -8010696e: 69 7d 10 a8 01 00 00 imul $0x1a8,0x10(%ebp),%edi -80106975: 81 c7 20 6a 11 80 add $0x80116a20,%edi -8010697b: eb 08 jmp 80106985 +801066a9: 69 7d 10 a8 01 00 00 imul $0x1a8,0x10(%ebp),%edi +801066b0: 81 c7 20 3e 11 80 add $0x80113e20,%edi +801066b6: eb 08 jmp 801066c0 for(int i=startRow;i<=endRow;i++) -8010697d: 83 c3 01 add $0x1,%ebx -80106980: 3b 5d f0 cmp -0x10(%ebp),%ebx -80106983: 7f 39 jg 801069be +801066b8: 83 c3 01 add $0x1,%ebx +801066bb: 3b 5d f0 cmp -0x10(%ebp),%ebx +801066be: 7f 39 jg 801066f9 for(int j=startColumn;j<=endColumn;j++) -80106985: 39 f2 cmp %esi,%edx -80106987: 7c f4 jl 8010697d +801066c0: 39 f2 cmp %esi,%edx +801066c2: 7c f4 jl 801066b8 if(get_bit(s->bitmap[i],j)) -80106989: 8b 47 48 mov 0x48(%edi),%eax -8010698c: 0f be 0c 18 movsbl (%eax,%ebx,1),%ecx -80106990: 85 4d ec test %ecx,-0x14(%ebp) -80106993: 75 1b jne 801069b0 +801066c4: 8b 47 48 mov 0x48(%edi),%eax +801066c7: 0f be 0c 18 movsbl (%eax,%ebx,1),%ecx +801066cb: 85 4d ec test %ecx,-0x14(%ebp) +801066ce: 75 1b jne 801066eb for(int j=startColumn;j<=endColumn;j++) -80106995: 89 f0 mov %esi,%eax -80106997: 83 c0 01 add $0x1,%eax -8010699a: 39 d0 cmp %edx,%eax -8010699c: 7f df jg 8010697d +801066d0: 89 f0 mov %esi,%eax +801066d2: 83 c0 01 add $0x1,%eax +801066d5: 39 d0 cmp %edx,%eax +801066d7: 7f df jg 801066b8 if(get_bit(s->bitmap[i],j)) -8010699e: 0f a3 c1 bt %eax,%ecx -801069a1: 73 f4 jae 80106997 -801069a3: b8 00 00 00 00 mov $0x0,%eax +801066d9: 0f a3 c1 bt %eax,%ecx +801066dc: 73 f4 jae 801066d2 +801066de: b8 00 00 00 00 mov $0x0,%eax } if(empty==false) break; } return empty; } -801069a8: 83 c4 0c add $0xc,%esp -801069ab: 5b pop %ebx -801069ac: 5e pop %esi -801069ad: 5f pop %edi -801069ae: 5d pop %ebp -801069af: c3 ret +801066e3: 83 c4 08 add $0x8,%esp +801066e6: 5b pop %ebx +801066e7: 5e pop %esi +801066e8: 5f pop %edi +801066e9: 5d pop %ebp +801066ea: c3 ret if(get_bit(s->bitmap[i],j)) -801069b0: b8 00 00 00 00 mov $0x0,%eax -801069b5: eb f1 jmp 801069a8 +801066eb: b8 00 00 00 00 mov $0x0,%eax +801066f0: eb f1 jmp 801066e3 bool empty=true; -801069b7: b8 01 00 00 00 mov $0x1,%eax -801069bc: eb ea jmp 801069a8 -801069be: b8 01 00 00 00 mov $0x1,%eax +801066f2: b8 01 00 00 00 mov $0x1,%eax +801066f7: eb ea jmp 801066e3 +801066f9: b8 01 00 00 00 mov $0x1,%eax return empty; -801069c3: eb e3 jmp 801069a8 +801066fe: eb e3 jmp 801066e3 -801069c5 : +80106700 : int checkNewpage(int slabIdx) { -801069c5: f3 0f 1e fb endbr32 -801069c9: 55 push %ebp -801069ca: 89 e5 mov %esp,%ebp -801069cc: 57 push %edi -801069cd: 56 push %esi -801069ce: 53 push %ebx -801069cf: 8b 7d 08 mov 0x8(%ebp),%edi +80106700: 55 push %ebp +80106701: 89 e5 mov %esp,%ebp +80106703: 57 push %edi +80106704: 56 push %esi +80106705: 53 push %ebx +80106706: 8b 7d 08 mov 0x8(%ebp),%edi bool find0=false; for(int i=0;ibitmap[i],j)) -801069d2: 69 c7 a8 01 00 00 imul $0x1a8,%edi,%eax -801069d8: 8b 88 68 6a 11 80 mov -0x7fee9598(%eax),%ecx -801069de: 8d b1 00 10 00 00 lea 0x1000(%ecx),%esi +80106709: 69 c7 a8 01 00 00 imul $0x1a8,%edi,%eax +8010670f: 8b 88 68 3e 11 80 mov -0x7feec198(%eax),%ecx +80106715: 8d b1 00 10 00 00 lea 0x1000(%ecx),%esi int cnt=0; -801069e4: bb 00 00 00 00 mov $0x0,%ebx -801069e9: eb 07 jmp 801069f2 +8010671b: bb 00 00 00 00 mov $0x0,%ebx +80106720: eb 07 jmp 80106729 for(int i=0;i +80106722: 83 c1 01 add $0x1,%ecx +80106725: 39 f1 cmp %esi,%ecx +80106727: 74 24 je 8010674d if(get_bit(s->bitmap[i],j)) -801069f2: 0f b6 01 movzbl (%ecx),%eax -801069f5: 0f be d0 movsbl %al,%edx -801069f8: a8 01 test $0x1,%al -801069fa: 74 1a je 80106a16 +80106729: 0f b6 01 movzbl (%ecx),%eax +8010672c: 0f be d0 movsbl %al,%edx +8010672f: a8 01 test $0x1,%al +80106731: 74 1a je 8010674d cnt++; -801069fc: 83 c3 01 add $0x1,%ebx +80106733: 83 c3 01 add $0x1,%ebx for(int j=0;j<=7;j++) -801069ff: b8 01 00 00 00 mov $0x1,%eax +80106736: b8 01 00 00 00 mov $0x1,%eax if(get_bit(s->bitmap[i],j)) -80106a04: 0f a3 c2 bt %eax,%edx -80106a07: 73 0d jae 80106a16 +8010673b: 0f a3 c2 bt %eax,%edx +8010673e: 73 0d jae 8010674d cnt++; -80106a09: 83 c3 01 add $0x1,%ebx +80106740: 83 c3 01 add $0x1,%ebx for(int j=0;j<=7;j++) -80106a0c: 83 c0 01 add $0x1,%eax -80106a0f: 83 f8 08 cmp $0x8,%eax -80106a12: 75 f0 jne 80106a04 -80106a14: eb d5 jmp 801069eb +80106743: 83 c0 01 add $0x1,%eax +80106746: 83 f8 08 cmp $0x8,%eax +80106749: 75 f0 jne 8010673b +8010674b: eb d5 jmp 80106722 } } if(find0) break; } if(cnt%s->num_objects_per_page==0) -80106a16: 69 c7 a8 01 00 00 imul $0x1a8,%edi,%eax -80106a1c: 8b 88 64 6a 11 80 mov -0x7fee959c(%eax),%ecx -80106a22: 89 d8 mov %ebx,%eax -80106a24: 99 cltd -80106a25: f7 f9 idiv %ecx -80106a27: 89 d6 mov %edx,%esi -80106a29: 85 d2 test %edx,%edx -80106a2b: 75 28 jne 80106a55 +8010674d: 69 c7 a8 01 00 00 imul $0x1a8,%edi,%eax +80106753: 8b 88 64 3e 11 80 mov -0x7feec19c(%eax),%ecx +80106759: 89 d8 mov %ebx,%eax +8010675b: 99 cltd +8010675c: f7 f9 idiv %ecx +8010675e: 89 d6 mov %edx,%esi +80106760: 85 d2 test %edx,%edx +80106762: 75 28 jne 8010678c { int startOffset=(cnt/s->num_objects_per_page)*s->num_objects_per_page; -80106a2d: 89 d8 mov %ebx,%eax -80106a2f: 99 cltd -80106a30: f7 f9 idiv %ecx -80106a32: 89 c3 mov %eax,%ebx -80106a34: 0f af d9 imul %ecx,%ebx +80106764: 89 d8 mov %ebx,%eax +80106766: 99 cltd +80106767: f7 f9 idiv %ecx +80106769: 89 c3 mov %eax,%ebx +8010676b: 0f af d9 imul %ecx,%ebx int endOffset=(startOffset+s->num_objects_per_page)-1; if(checkEmpty(startOffset,endOffset,slabIdx)) -80106a37: 57 push %edi +8010676e: 57 push %edi int endOffset=(startOffset+s->num_objects_per_page)-1; -80106a38: 8d 44 19 ff lea -0x1(%ecx,%ebx,1),%eax +8010676f: 8d 44 19 ff lea -0x1(%ecx,%ebx,1),%eax if(checkEmpty(startOffset,endOffset,slabIdx)) -80106a3c: 50 push %eax -80106a3d: 53 push %ebx -80106a3e: e8 c2 fe ff ff call 80106905 -80106a43: 83 c4 0c add $0xc,%esp +80106773: 50 push %eax +80106774: 53 push %ebx +80106775: e8 d2 fe ff ff call 8010664c +8010677a: 83 c4 0c add $0xc,%esp { return startOffset; -80106a46: 84 c0 test %al,%al -80106a48: 0f 45 f3 cmovne %ebx,%esi +8010677d: 84 c0 test %al,%al +8010677f: 0f 45 f3 cmovne %ebx,%esi } } return 0; } -80106a4b: 89 f0 mov %esi,%eax -80106a4d: 8d 65 f4 lea -0xc(%ebp),%esp -80106a50: 5b pop %ebx -80106a51: 5e pop %esi -80106a52: 5f pop %edi -80106a53: 5d pop %ebp -80106a54: c3 ret +80106782: 89 f0 mov %esi,%eax +80106784: 8d 65 f4 lea -0xc(%ebp),%esp +80106787: 5b pop %ebx +80106788: 5e pop %esi +80106789: 5f pop %edi +8010678a: 5d pop %ebp +8010678b: c3 ret return 0; -80106a55: be 00 00 00 00 mov $0x0,%esi -80106a5a: eb ef jmp 80106a4b +8010678c: be 00 00 00 00 mov $0x0,%esi +80106791: eb ef jmp 80106782 -80106a5c : +80106793 : int getpageNum(int slabIdx) { -80106a5c: f3 0f 1e fb endbr32 -80106a60: 55 push %ebp -80106a61: 89 e5 mov %esp,%ebp -80106a63: 57 push %edi -80106a64: 56 push %esi -80106a65: 53 push %ebx -80106a66: 83 ec 04 sub $0x4,%esp -80106a69: 8b 4d 08 mov 0x8(%ebp),%ecx +80106793: 55 push %ebp +80106794: 89 e5 mov %esp,%ebp +80106796: 57 push %edi +80106797: 56 push %esi +80106798: 53 push %ebx +80106799: 83 ec 04 sub $0x4,%esp +8010679c: 8b 4d 08 mov 0x8(%ebp),%ecx struct slab *s; s=&stable.slab[slabIdx]; int page=0; //size 2048 - 1024 if(slabIdx>=7) -80106a6c: 83 f9 06 cmp $0x6,%ecx -80106a6f: 7f 2e jg 80106a9f +8010679f: 83 f9 06 cmp $0x6,%ecx +801067a2: 7f 2d jg 801067d1 //size 8 - 512 else { for(int i=0;isize)) { for(int j=i;jsize);j++) -80106a71: 69 f9 a8 01 00 00 imul $0x1a8,%ecx,%edi -80106a77: b8 00 02 00 00 mov $0x200,%eax -80106a7c: 99 cltd -80106a7d: f7 bf 54 6a 11 80 idivl -0x7fee95ac(%edi) -80106a83: 89 c7 mov %eax,%edi -80106a85: bb 00 00 00 00 mov $0x0,%ebx +801067a4: 69 f9 a8 01 00 00 imul $0x1a8,%ecx,%edi +801067aa: b8 00 02 00 00 mov $0x200,%eax +801067af: 99 cltd +801067b0: f7 bf 54 3e 11 80 idivl -0x7feec1ac(%edi) +801067b6: 89 45 f0 mov %eax,-0x10(%ebp) +801067b9: ba 00 00 00 00 mov $0x0,%edx int page=0; -80106a8a: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp) +801067be: bf 00 00 00 00 mov $0x0,%edi { if(s->bitmap[j]!=0x00) -80106a91: 69 c9 a8 01 00 00 imul $0x1a8,%ecx,%ecx -80106a97: 81 c1 20 6a 11 80 add $0x80116a20,%ecx -80106a9d: eb 71 jmp 80106b10 +801067c3: 69 c9 a8 01 00 00 imul $0x1a8,%ecx,%ecx +801067c9: 81 c1 20 3e 11 80 add $0x80113e20,%ecx +801067cf: eb 75 jmp 80106846 for(int k=j;ksize);k++) -80106a9f: 69 f9 a8 01 00 00 imul $0x1a8,%ecx,%edi -80106aa5: b8 00 10 00 00 mov $0x1000,%eax -80106aaa: 99 cltd -80106aab: f7 bf 54 6a 11 80 idivl -0x7fee95ac(%edi) -80106ab1: 89 c6 mov %eax,%esi +801067d1: 69 f9 a8 01 00 00 imul $0x1a8,%ecx,%edi +801067d7: b8 00 10 00 00 mov $0x1000,%eax +801067dc: 99 cltd +801067dd: f7 bf 54 3e 11 80 idivl -0x7feec1ac(%edi) +801067e3: 89 45 f0 mov %eax,-0x10(%ebp) for(int i=0;ibitmap[i],k)) -80106abf: 8d bf 20 6a 11 80 lea -0x7fee95e0(%edi),%edi -80106ac5: eb 36 jmp 80106afd +801067f0: 69 c9 a8 01 00 00 imul $0x1a8,%ecx,%ecx +801067f6: 8d b1 20 3e 11 80 lea -0x7feec1e0(%ecx),%esi +801067fc: eb 36 jmp 80106834 page++; -80106ac7: 83 45 f0 01 addl $0x1,-0x10(%ebp) +801067fe: 83 c7 01 add $0x1,%edi for(int j=0;j<=7;j+=(PGSIZE/s->size)) -80106acb: 83 fa 07 cmp $0x7,%edx -80106ace: 7f 22 jg 80106af2 +80106801: 83 fa 07 cmp $0x7,%edx +80106804: 7f 23 jg 80106829 for(int k=j;ksize);k++) -80106ad0: 89 d0 mov %edx,%eax -80106ad2: 01 f2 add %esi,%edx -80106ad4: 39 c2 cmp %eax,%edx -80106ad6: 7e f3 jle 80106acb +80106806: 89 d0 mov %edx,%eax +80106808: 03 55 f0 add -0x10(%ebp),%edx +8010680b: 39 c2 cmp %eax,%edx +8010680d: 7e f2 jle 80106801 if(get_bit(s->bitmap[i],k)) -80106ad8: 8b 4f 48 mov 0x48(%edi),%ecx -80106adb: 0f be 0c 19 movsbl (%ecx,%ebx,1),%ecx -80106adf: 0f a3 c1 bt %eax,%ecx -80106ae2: 72 e3 jb 80106ac7 +8010680f: 8b 4e 48 mov 0x48(%esi),%ecx +80106812: 0f be 0c 19 movsbl (%ecx,%ebx,1),%ecx +80106816: 0f a3 c1 bt %eax,%ecx +80106819: 72 e3 jb 801067fe for(int k=j;ksize);k++) -80106ae4: 83 c0 01 add $0x1,%eax -80106ae7: 39 d0 cmp %edx,%eax -80106ae9: 74 e0 je 80106acb +8010681b: 83 c0 01 add $0x1,%eax +8010681e: 39 d0 cmp %edx,%eax +80106820: 74 df je 80106801 if(get_bit(s->bitmap[i],k)) -80106aeb: 0f a3 c1 bt %eax,%ecx -80106aee: 73 f4 jae 80106ae4 -80106af0: eb d5 jmp 80106ac7 +80106822: 0f a3 c1 bt %eax,%ecx +80106825: 73 f4 jae 8010681b +80106827: eb d5 jmp 801067fe for(int i=0;i +80106829: 83 c3 01 add $0x1,%ebx +8010682c: 81 fb 00 10 00 00 cmp $0x1000,%ebx +80106832: 74 35 je 80106869 for(int j=0;j<=7;j+=(PGSIZE/s->size)) -80106afd: ba 00 00 00 00 mov $0x0,%edx -80106b02: eb cc jmp 80106ad0 +80106834: ba 00 00 00 00 mov $0x0,%edx +80106839: eb cb jmp 80106806 { page++; -80106b04: 83 45 f0 01 addl $0x1,-0x10(%ebp) +8010683b: 83 c7 01 add $0x1,%edi for(int i=0;isize)) -80106b08: 81 fe ff 0f 00 00 cmp $0xfff,%esi -80106b0e: 7f 21 jg 80106b31 -80106b10: 89 da mov %ebx,%edx +8010683e: 81 fb ff 0f 00 00 cmp $0xfff,%ebx +80106844: 7f 23 jg 80106869 +80106846: 89 d6 mov %edx,%esi for(int j=i;jsize);j++) -80106b12: 89 d8 mov %ebx,%eax -80106b14: 01 fb add %edi,%ebx -80106b16: 89 de mov %ebx,%esi -80106b18: 39 d3 cmp %edx,%ebx -80106b1a: 7e ec jle 80106b08 +80106848: 89 d0 mov %edx,%eax +8010684a: 03 55 f0 add -0x10(%ebp),%edx +8010684d: 89 d3 mov %edx,%ebx +8010684f: 39 f2 cmp %esi,%edx +80106851: 7e eb jle 8010683e +80106853: 03 41 48 add 0x48(%ecx),%eax +80106856: 89 d6 mov %edx,%esi +80106858: 03 71 48 add 0x48(%ecx),%esi if(s->bitmap[j]!=0x00) -80106b1c: 8b 51 48 mov 0x48(%ecx),%edx -80106b1f: 01 d0 add %edx,%eax -80106b21: 01 da add %ebx,%edx -80106b23: 80 38 00 cmpb $0x0,(%eax) -80106b26: 75 dc jne 80106b04 +8010685b: 80 38 00 cmpb $0x0,(%eax) +8010685e: 75 db jne 8010683b for(int j=i;jsize);j++) -80106b28: 83 c0 01 add $0x1,%eax -80106b2b: 39 d0 cmp %edx,%eax -80106b2d: 75 f4 jne 80106b23 -80106b2f: eb d7 jmp 80106b08 +80106860: 83 c0 01 add $0x1,%eax +80106863: 39 f0 cmp %esi,%eax +80106865: 75 f4 jne 8010685b +80106867: eb d5 jmp 8010683e } } } } return page; } -80106b31: 8b 45 f0 mov -0x10(%ebp),%eax -80106b34: 83 c4 04 add $0x4,%esp -80106b37: 5b pop %ebx -80106b38: 5e pop %esi -80106b39: 5f pop %edi -80106b3a: 5d pop %ebp -80106b3b: c3 ret +80106869: 89 f8 mov %edi,%eax +8010686b: 83 c4 04 add $0x4,%esp +8010686e: 5b pop %ebx +8010686f: 5e pop %esi +80106870: 5f pop %edi +80106871: 5d pop %ebp +80106872: c3 ret -80106b3c : +80106873 : void slabinit() { -80106b3c: f3 0f 1e fb endbr32 -80106b40: 55 push %ebp -80106b41: 89 e5 mov %esp,%ebp -80106b43: 57 push %edi -80106b44: 56 push %esi -80106b45: 53 push %ebx -80106b46: 83 ec 18 sub $0x18,%esp +80106873: 55 push %ebp +80106874: 89 e5 mov %esp,%ebp +80106876: 57 push %edi +80106877: 56 push %esi +80106878: 53 push %ebx +80106879: 83 ec 18 sub $0x18,%esp acquire(&stable.lock); -80106b49: 68 20 6a 11 80 push $0x80116a20 -80106b4e: e8 46 d3 ff ff call 80103e99 +8010687c: 68 20 3e 11 80 push $0x80113e20 +80106881: e8 7b d4 ff ff call 80103d01 stable.slab[0].size=8; -80106b53: c7 05 54 6a 11 80 08 movl $0x8,0x80116a54 -80106b5a: 00 00 00 +80106886: c7 05 54 3e 11 80 08 movl $0x8,0x80113e54 +8010688d: 00 00 00 stable.slab[0].num_objects_per_page=PGSIZE/stable.slab[0].size; -80106b5d: c7 05 64 6a 11 80 00 movl $0x200,0x80116a64 -80106b64: 02 00 00 +80106890: c7 05 64 3e 11 80 00 movl $0x200,0x80113e64 +80106897: 02 00 00 stable.slab[0].num_used_objects=0; -80106b67: c7 05 60 6a 11 80 00 movl $0x0,0x80116a60 -80106b6e: 00 00 00 +8010689a: c7 05 60 3e 11 80 00 movl $0x0,0x80113e60 +801068a1: 00 00 00 stable.slab[0].num_free_objects=stable.slab[0].num_objects_per_page*64; -80106b71: c7 05 5c 6a 11 80 00 movl $0x8000,0x80116a5c -80106b78: 80 00 00 +801068a4: c7 05 5c 3e 11 80 00 movl $0x8000,0x80113e5c +801068ab: 80 00 00 //allocate one page for bitmap, allocate one page for slab cache stable.slab[0].bitmap=stable.slab[0].page[0]; -80106b7b: a1 6c 6a 11 80 mov 0x80116a6c,%eax -80106b80: a3 68 6a 11 80 mov %eax,0x80116a68 +801068ae: a1 6c 3e 11 80 mov 0x80113e6c,%eax +801068b3: a3 68 3e 11 80 mov %eax,0x80113e68 stable.slab[0].bitmap=kalloc(); -80106b85: e8 8f b6 ff ff call 80102219 -80106b8a: a3 68 6a 11 80 mov %eax,0x80116a68 +801068b8: e8 8d b8 ff ff call 8010214a +801068bd: a3 68 3e 11 80 mov %eax,0x80113e68 memset(stable.slab[0].bitmap,0,PGSIZE); -80106b8f: 83 c4 0c add $0xc,%esp -80106b92: 68 00 10 00 00 push $0x1000 -80106b97: 6a 00 push $0x0 -80106b99: 50 push %eax -80106b9a: e8 b0 d3 ff ff call 80103f4f +801068c2: 83 c4 0c add $0xc,%esp +801068c5: 68 00 10 00 00 push $0x1000 +801068ca: 6a 00 push $0x0 +801068cc: 50 push %eax +801068cd: e8 dd d4 ff ff call 80103daf stable.slab[0].page[1]=kalloc(); -80106b9f: e8 75 b6 ff ff call 80102219 -80106ba4: a3 70 6a 11 80 mov %eax,0x80116a70 +801068d2: e8 73 b8 ff ff call 8010214a +801068d7: a3 70 3e 11 80 mov %eax,0x80113e70 stable.slab[0].num_pages=1; -80106ba9: c7 05 58 6a 11 80 01 movl $0x1,0x80116a58 -80106bb0: 00 00 00 +801068dc: c7 05 58 3e 11 80 01 movl $0x1,0x80113e58 +801068e3: 00 00 00 release(&stable.lock); -80106bb3: c7 04 24 20 6a 11 80 movl $0x80116a20,(%esp) -80106bba: e8 45 d3 ff ff call 80103f04 +801068e6: c7 04 24 20 3e 11 80 movl $0x80113e20,(%esp) +801068ed: e8 76 d4 ff ff call 80103d68 acquire(&stable.lock); -80106bbf: c7 04 24 20 6a 11 80 movl $0x80116a20,(%esp) -80106bc6: e8 ce d2 ff ff call 80103e99 +801068f2: c7 04 24 20 3e 11 80 movl $0x80113e20,(%esp) +801068f9: e8 03 d4 ff ff call 80103d01 for(int i=1;i -80106c17: 89 83 bc 01 00 00 mov %eax,0x1bc(%ebx) +80106945: e8 00 b8 ff ff call 8010214a +8010694a: 89 83 bc 01 00 00 mov %eax,0x1bc(%ebx) memset(stable.slab[i].bitmap,0,PGSIZE); -80106c1d: 83 ec 04 sub $0x4,%esp -80106c20: 68 00 10 00 00 push $0x1000 -80106c25: 6a 00 push $0x0 -80106c27: 50 push %eax -80106c28: e8 22 d3 ff ff call 80103f4f +80106950: 83 ec 04 sub $0x4,%esp +80106953: 68 00 10 00 00 push $0x1000 +80106958: 6a 00 push $0x0 +8010695a: 50 push %eax +8010695b: e8 4f d4 ff ff call 80103daf stable.slab[i].page[1]=kalloc(); -80106c2d: e8 e7 b5 ff ff call 80102219 -80106c32: 89 83 c4 01 00 00 mov %eax,0x1c4(%ebx) +80106960: e8 e5 b7 ff ff call 8010214a +80106965: 89 83 c4 01 00 00 mov %eax,0x1c4(%ebx) stable.slab[i].num_pages=1; -80106c38: c7 83 ac 01 00 00 01 movl $0x1,0x1ac(%ebx) -80106c3f: 00 00 00 +8010696b: c7 83 ac 01 00 00 01 movl $0x1,0x1ac(%ebx) +80106972: 00 00 00 for(int i=1;i +80106975: 81 c3 a8 01 00 00 add $0x1a8,%ebx +8010697b: 83 c4 10 add $0x10,%esp +8010697e: 39 fb cmp %edi,%ebx +80106980: 75 8e jne 80106910 } release(&stable.lock); -80106c4f: 83 ec 0c sub $0xc,%esp -80106c52: 68 20 6a 11 80 push $0x80116a20 -80106c57: e8 a8 d2 ff ff call 80103f04 -} -80106c5c: 83 c4 10 add $0x10,%esp -80106c5f: 8d 65 f4 lea -0xc(%ebp),%esp -80106c62: 5b pop %ebx -80106c63: 5e pop %esi -80106c64: 5f pop %edi -80106c65: 5d pop %ebp -80106c66: c3 ret - -80106c67 : +80106982: 83 ec 0c sub $0xc,%esp +80106985: 68 20 3e 11 80 push $0x80113e20 +8010698a: e8 d9 d3 ff ff call 80103d68 +} +8010698f: 83 c4 10 add $0x10,%esp +80106992: 8d 65 f4 lea -0xc(%ebp),%esp +80106995: 5b pop %ebx +80106996: 5e pop %esi +80106997: 5f pop %edi +80106998: 5d pop %ebp +80106999: c3 ret + +8010699a : char *kmalloc(int size){ -80106c67: f3 0f 1e fb endbr32 -80106c6b: 55 push %ebp -80106c6c: 89 e5 mov %esp,%ebp -80106c6e: 57 push %edi -80106c6f: 56 push %esi -80106c70: 53 push %ebx -80106c71: 83 ec 0c sub $0xc,%esp -80106c74: 8b 7d 08 mov 0x8(%ebp),%edi +8010699a: 55 push %ebp +8010699b: 89 e5 mov %esp,%ebp +8010699d: 57 push %edi +8010699e: 56 push %esi +8010699f: 53 push %ebx +801069a0: 83 ec 0c sub $0xc,%esp +801069a3: 8b 7d 08 mov 0x8(%ebp),%edi //out of range error needs to be handled if(size > 2048 || size<=0) -80106c77: 8d 57 ff lea -0x1(%edi),%edx +801069a6: 8d 57 ff lea -0x1(%edi),%edx return 0; -80106c7a: b8 00 00 00 00 mov $0x0,%eax +801069a9: b8 00 00 00 00 mov $0x0,%eax if(size > 2048 || size<=0) -80106c7f: 81 fa ff 07 00 00 cmp $0x7ff,%edx -80106c85: 0f 87 dc 00 00 00 ja 80106d67 +801069ae: 81 fa ff 07 00 00 cmp $0x7ff,%edx +801069b4: 0f 87 dc 00 00 00 ja 80106a96 //choose the byte 8 or 16 .. etc by getting index of slab int slabIdx=getslabIdx(nextPowerOf2(size)); -80106c8b: 83 ec 0c sub $0xc,%esp -80106c8e: 57 push %edi -80106c8f: e8 2f fb ff ff call 801067c3 -80106c94: 89 04 24 mov %eax,(%esp) -80106c97: e8 5e fb ff ff call 801067fa -80106c9c: 83 c4 10 add $0x10,%esp -80106c9f: 89 c6 mov %eax,%esi +801069ba: 83 ec 0c sub $0xc,%esp +801069bd: 57 push %edi +801069be: e8 6e fb ff ff call 80106531 +801069c3: 89 04 24 mov %eax,(%esp) +801069c6: e8 99 fb ff ff call 80106564 +801069cb: 83 c4 10 add $0x10,%esp +801069ce: 89 c3 mov %eax,%ebx struct slab *s; s=&stable.slab[slabIdx]; //can't alloc if num of used object is full if(s->num_used_objects==s->num_objects_per_page*MAX_PAGES_PER_SLAB) -80106ca1: 69 c0 a8 01 00 00 imul $0x1a8,%eax,%eax -80106ca7: 6b 90 64 6a 11 80 64 imul $0x64,-0x7fee959c(%eax),%edx -80106cae: 39 90 60 6a 11 80 cmp %edx,-0x7fee95a0(%eax) -80106cb4: 0f 84 db 00 00 00 je 80106d95 +801069d0: 69 c0 a8 01 00 00 imul $0x1a8,%eax,%eax +801069d6: 6b 90 64 3e 11 80 64 imul $0x64,-0x7feec19c(%eax),%edx +801069dd: 39 90 60 3e 11 80 cmp %edx,-0x7feec1a0(%eax) +801069e3: 0f 84 db 00 00 00 je 80106ac4 return 0; if(stable.slab[0].num_used_objects==stable.slab[0].num_objects_per_page*64) -80106cba: a1 64 6a 11 80 mov 0x80116a64,%eax -80106cbf: c1 e0 06 shl $0x6,%eax -80106cc2: 39 05 60 6a 11 80 cmp %eax,0x80116a60 -80106cc8: 0f 84 ce 00 00 00 je 80106d9c +801069e9: a1 64 3e 11 80 mov 0x80113e64,%eax +801069ee: c1 e0 06 shl $0x6,%eax +801069f1: 39 05 60 3e 11 80 cmp %eax,0x80113e60 +801069f7: 0f 84 ce 00 00 00 je 80106acb return 0; int startOffset=0; acquire(&stable.lock); -80106cce: 83 ec 0c sub $0xc,%esp -80106cd1: 68 20 6a 11 80 push $0x80116a20 -80106cd6: e8 be d1 ff ff call 80103e99 +801069fd: 83 ec 0c sub $0xc,%esp +80106a00: 68 20 3e 11 80 push $0x80113e20 +80106a05: e8 f7 d2 ff ff call 80103d01 if((startOffset=checkNewpage(slabIdx)) && s->num_used_objects!=0) -80106cdb: 89 34 24 mov %esi,(%esp) -80106cde: e8 e2 fc ff ff call 801069c5 -80106ce3: 83 c4 10 add $0x10,%esp -80106ce6: 85 c0 test %eax,%eax -80106ce8: 74 0f je 80106cf9 -80106cea: 69 d6 a8 01 00 00 imul $0x1a8,%esi,%edx -80106cf0: 83 ba 60 6a 11 80 00 cmpl $0x0,-0x7fee95a0(%edx) -80106cf7: 75 76 jne 80106d6f +80106a0a: 89 1c 24 mov %ebx,(%esp) +80106a0d: e8 ee fc ff ff call 80106700 +80106a12: 83 c4 10 add $0x10,%esp +80106a15: 85 c0 test %eax,%eax +80106a17: 74 0f je 80106a28 +80106a19: 69 d3 a8 01 00 00 imul $0x1a8,%ebx,%edx +80106a1f: 83 ba 60 3e 11 80 00 cmpl $0x0,-0x7feec1a0(%edx) +80106a26: 75 76 jne 80106a9e { s->page[startOffset/s->num_objects_per_page+1]=kalloc(); //current page +1 } int bitOffset=setBitmap(slabIdx); -80106cf9: 83 ec 0c sub $0xc,%esp -80106cfc: 56 push %esi -80106cfd: e8 24 fb ff ff call 80106826 -80106d02: 89 c3 mov %eax,%ebx +80106a28: 83 ec 0c sub $0xc,%esp +80106a2b: 53 push %ebx +80106a2c: e8 57 fb ff ff call 80106588 +80106a31: 89 c6 mov %eax,%esi //getPageNumfrom bitmap s->num_pages=getpageNum(slabIdx); -80106d04: 89 34 24 mov %esi,(%esp) -80106d07: e8 50 fd ff ff call 80106a5c -80106d0c: 83 c4 0c add $0xc,%esp -80106d0f: 69 d6 a8 01 00 00 imul $0x1a8,%esi,%edx -80106d15: 8d 8a 20 6a 11 80 lea -0x7fee95e0(%edx),%ecx -80106d1b: 89 82 58 6a 11 80 mov %eax,-0x7fee95a8(%edx) +80106a33: 89 1c 24 mov %ebx,(%esp) +80106a36: e8 58 fd ff ff call 80106793 +80106a3b: 83 c4 0c add $0xc,%esp +80106a3e: 69 d3 a8 01 00 00 imul $0x1a8,%ebx,%edx +80106a44: 8d 8a 20 3e 11 80 lea -0x7feec1e0(%edx),%ecx +80106a4a: 89 82 58 3e 11 80 mov %eax,-0x7feec1a8(%edx) s->num_free_objects-=1; -80106d21: 83 69 3c 01 subl $0x1,0x3c(%ecx) +80106a50: 83 69 3c 01 subl $0x1,0x3c(%ecx) s->num_used_objects+=1; -80106d25: 83 41 40 01 addl $0x1,0x40(%ecx) +80106a54: 83 41 40 01 addl $0x1,0x40(%ecx) int nowpage=bitOffset/s->num_objects_per_page+1; -80106d29: 89 d8 mov %ebx,%eax -80106d2b: 99 cltd -80106d2c: f7 79 44 idivl 0x44(%ecx) -80106d2f: 89 d3 mov %edx,%ebx +80106a58: 89 f0 mov %esi,%eax +80106a5a: 99 cltd +80106a5b: f7 79 44 idivl 0x44(%ecx) int pageOffset=(bitOffset%s->num_objects_per_page)*(1<<(slabIdx+3))*sizeof(char); -80106d31: 8d 4e 03 lea 0x3(%esi),%ecx -80106d34: d3 e3 shl %cl,%ebx +80106a5e: 8d 4b 03 lea 0x3(%ebx),%ecx +80106a61: 89 d6 mov %edx,%esi +80106a63: d3 e6 shl %cl,%esi memset(s->page[nowpage]+pageOffset,0,size*sizeof(char)); -80106d36: 57 push %edi -80106d37: 6a 00 push $0x0 -80106d39: 6b f6 6a imul $0x6a,%esi,%esi -80106d3c: 8d 74 30 11 lea 0x11(%eax,%esi,1),%esi -80106d40: 89 d8 mov %ebx,%eax -80106d42: 03 04 b5 2c 6a 11 80 add -0x7fee95d4(,%esi,4),%eax -80106d49: 50 push %eax -80106d4a: e8 00 d2 ff ff call 80103f4f +80106a65: 57 push %edi +80106a66: 6a 00 push $0x0 +80106a68: 6b db 6a imul $0x6a,%ebx,%ebx +80106a6b: 8d 5c 18 11 lea 0x11(%eax,%ebx,1),%ebx +80106a6f: 89 f0 mov %esi,%eax +80106a71: 03 04 9d 2c 3e 11 80 add -0x7feec1d4(,%ebx,4),%eax +80106a78: 50 push %eax +80106a79: e8 31 d3 ff ff call 80103daf release(&stable.lock); -80106d4f: c7 04 24 20 6a 11 80 movl $0x80116a20,(%esp) -80106d56: e8 a9 d1 ff ff call 80103f04 +80106a7e: c7 04 24 20 3e 11 80 movl $0x80113e20,(%esp) +80106a85: e8 de d2 ff ff call 80103d68 return s->page[nowpage]+pageOffset; -80106d5b: 89 d8 mov %ebx,%eax -80106d5d: 03 04 b5 2c 6a 11 80 add -0x7fee95d4(,%esi,4),%eax -80106d64: 83 c4 10 add $0x10,%esp -} -80106d67: 8d 65 f4 lea -0xc(%ebp),%esp -80106d6a: 5b pop %ebx -80106d6b: 5e pop %esi -80106d6c: 5f pop %edi -80106d6d: 5d pop %ebp -80106d6e: c3 ret +80106a8a: 89 f0 mov %esi,%eax +80106a8c: 03 04 9d 2c 3e 11 80 add -0x7feec1d4(,%ebx,4),%eax +80106a93: 83 c4 10 add $0x10,%esp +} +80106a96: 8d 65 f4 lea -0xc(%ebp),%esp +80106a99: 5b pop %ebx +80106a9a: 5e pop %esi +80106a9b: 5f pop %edi +80106a9c: 5d pop %ebp +80106a9d: c3 ret s->page[startOffset/s->num_objects_per_page+1]=kalloc(); //current page +1 -80106d6f: 89 d1 mov %edx,%ecx -80106d71: 99 cltd -80106d72: f7 b9 64 6a 11 80 idivl -0x7fee959c(%ecx) -80106d78: 8d 58 01 lea 0x1(%eax),%ebx -80106d7b: e8 99 b4 ff ff call 80102219 -80106d80: 89 c2 mov %eax,%edx -80106d82: 6b c6 6a imul $0x6a,%esi,%eax -80106d85: 8d 44 03 10 lea 0x10(%ebx,%eax,1),%eax -80106d89: 89 14 85 2c 6a 11 80 mov %edx,-0x7fee95d4(,%eax,4) -80106d90: e9 64 ff ff ff jmp 80106cf9 +80106a9e: 89 d1 mov %edx,%ecx +80106aa0: 99 cltd +80106aa1: f7 b9 64 3e 11 80 idivl -0x7feec19c(%ecx) +80106aa7: 8d 70 01 lea 0x1(%eax),%esi +80106aaa: e8 9b b6 ff ff call 8010214a +80106aaf: 89 c2 mov %eax,%edx +80106ab1: 6b c3 6a imul $0x6a,%ebx,%eax +80106ab4: 8d 44 06 10 lea 0x10(%esi,%eax,1),%eax +80106ab8: 89 14 85 2c 3e 11 80 mov %edx,-0x7feec1d4(,%eax,4) +80106abf: e9 64 ff ff ff jmp 80106a28 return 0; -80106d95: b8 00 00 00 00 mov $0x0,%eax -80106d9a: eb cb jmp 80106d67 +80106ac4: b8 00 00 00 00 mov $0x0,%eax +80106ac9: eb cb jmp 80106a96 return 0; -80106d9c: b8 00 00 00 00 mov $0x0,%eax -80106da1: eb c4 jmp 80106d67 +80106acb: b8 00 00 00 00 mov $0x0,%eax +80106ad0: eb c4 jmp 80106a96 -80106da3 : +80106ad2 : void kmfree(char *addr, int size){ -80106da3: f3 0f 1e fb endbr32 -80106da7: 55 push %ebp -80106da8: 89 e5 mov %esp,%ebp -80106daa: 57 push %edi -80106dab: 56 push %esi -80106dac: 53 push %ebx -80106dad: 83 ec 28 sub $0x28,%esp -80106db0: 8b 75 08 mov 0x8(%ebp),%esi -80106db3: 8b 5d 0c mov 0xc(%ebp),%ebx +80106ad2: 55 push %ebp +80106ad3: 89 e5 mov %esp,%ebp +80106ad5: 57 push %edi +80106ad6: 56 push %esi +80106ad7: 53 push %ebx +80106ad8: 83 ec 28 sub $0x28,%esp +80106adb: 8b 75 08 mov 0x8(%ebp),%esi +80106ade: 8b 5d 0c mov 0xc(%ebp),%ebx struct slab *s; int slabIdx=getslabIdx(size); -80106db6: 53 push %ebx -80106db7: e8 3e fa ff ff call 801067fa -80106dbc: 89 c7 mov %eax,%edi +80106ae1: 53 push %ebx +80106ae2: e8 7d fa ff ff call 80106564 +80106ae7: 89 c7 mov %eax,%edi s=&stable.slab[slabIdx]; acquire(&stable.lock); -80106dbe: c7 04 24 20 6a 11 80 movl $0x80116a20,(%esp) -80106dc5: e8 cf d0 ff ff call 80103e99 +80106ae9: c7 04 24 20 3e 11 80 movl $0x80113e20,(%esp) +80106af0: e8 0c d2 ff ff call 80103d01 if(s->num_used_objects==0) -80106dca: 69 c7 a8 01 00 00 imul $0x1a8,%edi,%eax -80106dd0: 83 c4 10 add $0x10,%esp -80106dd3: 83 b8 60 6a 11 80 00 cmpl $0x0,-0x7fee95a0(%eax) -80106dda: 74 2f je 80106e0b +80106af5: 69 c7 a8 01 00 00 imul $0x1a8,%edi,%eax +80106afb: 83 c4 10 add $0x10,%esp +80106afe: 83 b8 60 3e 11 80 00 cmpl $0x0,-0x7feec1a0(%eax) +80106b05: 74 2f je 80106b36 release(&stable.lock); return; } //set the garbage in slab; memset(addr,1,size); -80106ddc: 83 ec 04 sub $0x4,%esp -80106ddf: 53 push %ebx -80106de0: 6a 01 push $0x1 -80106de2: 56 push %esi -80106de3: e8 67 d1 ff ff call 80103f4f +80106b07: 83 ec 04 sub $0x4,%esp +80106b0a: 53 push %ebx +80106b0b: 6a 01 push $0x1 +80106b0d: 56 push %esi +80106b0e: e8 9c d2 ff ff call 80103daf //bitmap operation //get the adress page Number int pageNum=0; for(int i=1;i<=100;i++) -80106de8: 69 d7 a8 01 00 00 imul $0x1a8,%edi,%edx -80106dee: 83 c4 10 add $0x10,%esp -80106df1: bb 01 00 00 00 mov $0x1,%ebx +80106b13: 69 d7 a8 01 00 00 imul $0x1a8,%edi,%edx +80106b19: 83 c4 10 add $0x10,%esp +80106b1c: bb 01 00 00 00 mov $0x1,%ebx { if(addr-s->page[i]>=0 && addr-s->page[i] +80106b21: 89 f0 mov %esi,%eax +80106b23: 2b 84 9a 6c 3e 11 80 sub -0x7feec194(%edx,%ebx,4),%eax +80106b2a: 3d ff 0f 00 00 cmp $0xfff,%eax +80106b2f: 76 1a jbe 80106b4b for(int i=1;i<=100;i++) -80106e06: 83 c3 01 add $0x1,%ebx -80106e09: eb eb jmp 80106df6 +80106b31: 83 c3 01 add $0x1,%ebx +80106b34: eb eb jmp 80106b21 release(&stable.lock); -80106e0b: 83 ec 0c sub $0xc,%esp -80106e0e: 68 20 6a 11 80 push $0x80116a20 -80106e13: e8 ec d0 ff ff call 80103f04 +80106b36: 83 ec 0c sub $0xc,%esp +80106b39: 68 20 3e 11 80 push $0x80113e20 +80106b3e: e8 25 d2 ff ff call 80103d68 return; -80106e18: 83 c4 10 add $0x10,%esp -80106e1b: e9 93 00 00 00 jmp 80106eb3 +80106b43: 83 c4 10 add $0x10,%esp +80106b46: e9 91 00 00 00 jmp 80106bdc break; } } //get the offset to make 0 appropriate bitmap int offset=0; offset=((pageNum-1)*s->num_objects_per_page)+(addr-s->page[pageNum])/s->size; -80106e20: 8d 43 ff lea -0x1(%ebx),%eax -80106e23: 89 45 e4 mov %eax,-0x1c(%ebp) +80106b4b: 8d 43 ff lea -0x1(%ebx),%eax +80106b4e: 89 45 e4 mov %eax,-0x1c(%ebp) if(clearBitmap(slabIdx,offset)) -80106e26: 83 ec 08 sub $0x8,%esp +80106b51: 83 ec 08 sub $0x8,%esp offset=((pageNum-1)*s->num_objects_per_page)+(addr-s->page[pageNum])/s->size; -80106e29: 6b c7 6a imul $0x6a,%edi,%eax -80106e2c: 8d 44 03 10 lea 0x10(%ebx,%eax,1),%eax -80106e30: 89 f1 mov %esi,%ecx -80106e32: 2b 0c 85 2c 6a 11 80 sub -0x7fee95d4(,%eax,4),%ecx -80106e39: 89 c8 mov %ecx,%eax -80106e3b: 69 cf a8 01 00 00 imul $0x1a8,%edi,%ecx -80106e41: 99 cltd -80106e42: f7 b9 54 6a 11 80 idivl -0x7fee95ac(%ecx) -80106e48: 8b 75 e4 mov -0x1c(%ebp),%esi -80106e4b: 0f af b1 64 6a 11 80 imul -0x7fee959c(%ecx),%esi -80106e52: 01 f0 add %esi,%eax +80106b54: 6b c7 6a imul $0x6a,%edi,%eax +80106b57: 8d 44 03 10 lea 0x10(%ebx,%eax,1),%eax +80106b5b: 2b 34 85 2c 3e 11 80 sub -0x7feec1d4(,%eax,4),%esi +80106b62: 89 f0 mov %esi,%eax +80106b64: 69 cf a8 01 00 00 imul $0x1a8,%edi,%ecx +80106b6a: 99 cltd +80106b6b: f7 b9 54 3e 11 80 idivl -0x7feec1ac(%ecx) +80106b71: 8b 55 e4 mov -0x1c(%ebp),%edx +80106b74: 0f af 91 64 3e 11 80 imul -0x7feec19c(%ecx),%edx +80106b7b: 01 d0 add %edx,%eax if(clearBitmap(slabIdx,offset)) -80106e54: 50 push %eax -80106e55: 57 push %edi -80106e56: e8 5b fa ff ff call 801068b6 -80106e5b: 83 c4 10 add $0x10,%esp -80106e5e: 84 c0 test %al,%al -80106e60: 74 14 je 80106e76 +80106b7d: 50 push %eax +80106b7e: 57 push %edi +80106b7f: e8 88 fa ff ff call 8010660c +80106b84: 83 c4 10 add $0x10,%esp +80106b87: 84 c0 test %al,%al +80106b89: 74 14 je 80106b9f { stable.slab[slabIdx].num_free_objects+=1; -80106e62: 69 c7 a8 01 00 00 imul $0x1a8,%edi,%eax -80106e68: 83 80 5c 6a 11 80 01 addl $0x1,-0x7fee95a4(%eax) +80106b8b: 69 c7 a8 01 00 00 imul $0x1a8,%edi,%eax +80106b91: 83 80 5c 3e 11 80 01 addl $0x1,-0x7feec1a4(%eax) stable.slab[slabIdx].num_used_objects-=1; -80106e6f: 83 a8 60 6a 11 80 01 subl $0x1,-0x7fee95a0(%eax) +80106b98: 83 a8 60 3e 11 80 01 subl $0x1,-0x7feec1a0(%eax) } //page free int startOffset=(pageNum-1)*s->num_objects_per_page; int endOffset=(startOffset+s->num_objects_per_page)-1; if(pageNum!=1 && checkEmpty(startOffset,endOffset,slabIdx)) -80106e76: 83 fb 01 cmp $0x1,%ebx -80106e79: 74 28 je 80106ea3 +80106b9f: 83 fb 01 cmp $0x1,%ebx +80106ba2: 74 28 je 80106bcc int startOffset=(pageNum-1)*s->num_objects_per_page; -80106e7b: 69 c7 a8 01 00 00 imul $0x1a8,%edi,%eax -80106e81: 8b 90 64 6a 11 80 mov -0x7fee959c(%eax),%edx -80106e87: 8b 45 e4 mov -0x1c(%ebp),%eax -80106e8a: 0f af c2 imul %edx,%eax +80106ba4: 69 c7 a8 01 00 00 imul $0x1a8,%edi,%eax +80106baa: 8b 90 64 3e 11 80 mov -0x7feec19c(%eax),%edx +80106bb0: 8b 45 e4 mov -0x1c(%ebp),%eax +80106bb3: 0f af c2 imul %edx,%eax if(pageNum!=1 && checkEmpty(startOffset,endOffset,slabIdx)) -80106e8d: 83 ec 04 sub $0x4,%esp -80106e90: 57 push %edi +80106bb6: 83 ec 04 sub $0x4,%esp +80106bb9: 57 push %edi int endOffset=(startOffset+s->num_objects_per_page)-1; -80106e91: 8d 54 02 ff lea -0x1(%edx,%eax,1),%edx +80106bba: 8d 54 02 ff lea -0x1(%edx,%eax,1),%edx if(pageNum!=1 && checkEmpty(startOffset,endOffset,slabIdx)) -80106e95: 52 push %edx -80106e96: 50 push %eax -80106e97: e8 69 fa ff ff call 80106905 -80106e9c: 83 c4 10 add $0x10,%esp -80106e9f: 84 c0 test %al,%al -80106ea1: 75 18 jne 80106ebb +80106bbe: 52 push %edx +80106bbf: 50 push %eax +80106bc0: e8 87 fa ff ff call 8010664c +80106bc5: 83 c4 10 add $0x10,%esp +80106bc8: 84 c0 test %al,%al +80106bca: 75 18 jne 80106be4 { kfree(s->page[pageNum]); s->num_pages-=1; } release(&stable.lock); -80106ea3: 83 ec 0c sub $0xc,%esp -80106ea6: 68 20 6a 11 80 push $0x80116a20 -80106eab: e8 54 d0 ff ff call 80103f04 -80106eb0: 83 c4 10 add $0x10,%esp +80106bcc: 83 ec 0c sub $0xc,%esp +80106bcf: 68 20 3e 11 80 push $0x80113e20 +80106bd4: e8 8f d1 ff ff call 80103d68 +80106bd9: 83 c4 10 add $0x10,%esp // return; } -80106eb3: 8d 65 f4 lea -0xc(%ebp),%esp -80106eb6: 5b pop %ebx -80106eb7: 5e pop %esi -80106eb8: 5f pop %edi -80106eb9: 5d pop %ebp -80106eba: c3 ret +80106bdc: 8d 65 f4 lea -0xc(%ebp),%esp +80106bdf: 5b pop %ebx +80106be0: 5e pop %esi +80106be1: 5f pop %edi +80106be2: 5d pop %ebp +80106be3: c3 ret kfree(s->page[pageNum]); -80106ebb: 83 ec 0c sub $0xc,%esp -80106ebe: 6b c7 6a imul $0x6a,%edi,%eax -80106ec1: 8d 44 03 10 lea 0x10(%ebx,%eax,1),%eax -80106ec5: ff 34 85 2c 6a 11 80 pushl -0x7fee95d4(,%eax,4) -80106ecc: e8 ea b1 ff ff call 801020bb +80106be4: 83 ec 0c sub $0xc,%esp +80106be7: 6b c7 6a imul $0x6a,%edi,%eax +80106bea: 8d 44 03 10 lea 0x10(%ebx,%eax,1),%eax +80106bee: ff 34 85 2c 3e 11 80 push -0x7feec1d4(,%eax,4) +80106bf5: e8 02 b4 ff ff call 80101ffc s->num_pages-=1; -80106ed1: 69 ff a8 01 00 00 imul $0x1a8,%edi,%edi -80106ed7: 83 af 58 6a 11 80 01 subl $0x1,-0x7fee95a8(%edi) -80106ede: 83 c4 10 add $0x10,%esp -80106ee1: eb c0 jmp 80106ea3 +80106bfa: 69 ff a8 01 00 00 imul $0x1a8,%edi,%edi +80106c00: 83 af 58 3e 11 80 01 subl $0x1,-0x7feec1a8(%edi) +80106c07: 83 c4 10 add $0x10,%esp +80106c0a: eb c0 jmp 80106bcc -80106ee3 : +80106c0c : // for(s = stable.slab; s < &stable.slab[NSLAB]; s++){ // cprintf("%d\t%d\t\t%d\t\t%d\n", // s->size, s->num_pages, s->num_used_objects, s->num_free_objects); // } // } void slabdump(){ -80106ee3: f3 0f 1e fb endbr32 -80106ee7: 55 push %ebp -80106ee8: 89 e5 mov %esp,%ebp -80106eea: 57 push %edi -80106eeb: 56 push %esi -80106eec: 53 push %ebx -80106eed: 83 ec 18 sub $0x18,%esp +80106c0c: 55 push %ebp +80106c0d: 89 e5 mov %esp,%ebp +80106c0f: 57 push %edi +80106c10: 56 push %esi +80106c11: 53 push %ebx +80106c12: 83 ec 18 sub $0x18,%esp cprintf("__slabdump__\n"); -80106ef0: 68 93 82 10 80 push $0x80108293 -80106ef5: e8 32 97 ff ff call 8010062c +80106c15: 68 b3 7f 10 80 push $0x80107fb3 +80106c1a: e8 e2 99 ff ff call 80100601 struct slab *s; cprintf("size\tnum_pages\tused_objects\tfree_objects\n"); -80106efa: c7 04 24 bc 82 10 80 movl $0x801082bc,(%esp) -80106f01: e8 26 97 ff ff call 8010062c -80106f06: 83 c4 10 add $0x10,%esp +80106c1f: c7 04 24 dc 7f 10 80 movl $0x80107fdc,(%esp) +80106c26: e8 d6 99 ff ff call 80100601 +80106c2b: 83 c4 10 add $0x10,%esp for(s = stable.slab; s < &stable.slab[NSLAB]; s++){ -80106f09: bf 54 6a 11 80 mov $0x80116a54,%edi -80106f0e: eb 64 jmp 80106f74 +80106c2e: bf 54 3e 11 80 mov $0x80113e54,%edi +80106c33: eb 64 jmp 80106c99 { for(int j=7;j>=0;j--) { cprintf("%d",get_bit(s->bitmap[i],j)); } cprintf(" "); -80106f10: 83 ec 0c sub $0xc,%esp -80106f13: 68 b1 7e 10 80 push $0x80107eb1 -80106f18: e8 0f 97 ff ff call 8010062c +80106c35: 83 ec 0c sub $0xc,%esp +80106c38: 68 d1 7b 10 80 push $0x80107bd1 +80106c3d: e8 bf 99 ff ff call 80100601 for(int i=0;i<60;i++) -80106f1d: 83 c6 01 add $0x1,%esi -80106f20: 83 c4 10 add $0x10,%esp -80106f23: 83 fe 3c cmp $0x3c,%esi -80106f26: 74 2e je 80106f56 +80106c42: 83 c6 01 add $0x1,%esi +80106c45: 83 c4 10 add $0x10,%esp +80106c48: 83 fe 3c cmp $0x3c,%esi +80106c4b: 74 2e je 80106c7b for(int j=7;j>=0;j--) -80106f28: bb 07 00 00 00 mov $0x7,%ebx +80106c4d: bb 07 00 00 00 mov $0x7,%ebx cprintf("%d",get_bit(s->bitmap[i],j)); -80106f2d: 83 ec 08 sub $0x8,%esp -80106f30: 8b 47 14 mov 0x14(%edi),%eax -80106f33: 0f be 04 30 movsbl (%eax,%esi,1),%eax +80106c52: 83 ec 08 sub $0x8,%esp +80106c55: 8b 47 14 mov 0x14(%edi),%eax +80106c58: 0f be 04 30 movsbl (%eax,%esi,1),%eax return ((num&(1<bitmap[i],j)); -80106f3e: 50 push %eax -80106f3f: 68 b9 82 10 80 push $0x801082b9 -80106f44: e8 e3 96 ff ff call 8010062c +80106c63: 50 push %eax +80106c64: 68 d9 7f 10 80 push $0x80107fd9 +80106c69: e8 93 99 ff ff call 80100601 for(int j=7;j>=0;j--) -80106f49: 83 eb 01 sub $0x1,%ebx -80106f4c: 83 c4 10 add $0x10,%esp -80106f4f: 83 fb ff cmp $0xffffffff,%ebx -80106f52: 75 d9 jne 80106f2d -80106f54: eb ba jmp 80106f10 +80106c6e: 83 eb 01 sub $0x1,%ebx +80106c71: 83 c4 10 add $0x10,%esp +80106c74: 83 fb ff cmp $0xffffffff,%ebx +80106c77: 75 d9 jne 80106c52 +80106c79: eb ba jmp 80106c35 } cprintf("\n"); -80106f56: 83 ec 0c sub $0xc,%esp -80106f59: 68 1f 82 10 80 push $0x8010821f -80106f5e: e8 c9 96 ff ff call 8010062c +80106c7b: 83 ec 0c sub $0xc,%esp +80106c7e: 68 3f 7f 10 80 push $0x80107f3f +80106c83: e8 79 99 ff ff call 80100601 for(s = stable.slab; s < &stable.slab[NSLAB]; s++){ -80106f63: 81 c7 a8 01 00 00 add $0x1a8,%edi -80106f69: 83 c4 10 add $0x10,%esp -80106f6c: 81 ff 3c 79 11 80 cmp $0x8011793c,%edi -80106f72: 74 2f je 80106fa3 +80106c88: 81 c7 a8 01 00 00 add $0x1a8,%edi +80106c8e: 83 c4 10 add $0x10,%esp +80106c91: 81 ff 3c 4d 11 80 cmp $0x80114d3c,%edi +80106c97: 74 2f je 80106cc8 cprintf("%d\t%d\t\t%d\t\t%d\n", -80106f74: 83 ec 0c sub $0xc,%esp -80106f77: ff 77 08 pushl 0x8(%edi) -80106f7a: ff 77 0c pushl 0xc(%edi) -80106f7d: ff 77 04 pushl 0x4(%edi) -80106f80: ff 37 pushl (%edi) -80106f82: 68 a1 82 10 80 push $0x801082a1 -80106f87: e8 a0 96 ff ff call 8010062c +80106c99: 83 ec 0c sub $0xc,%esp +80106c9c: ff 77 08 push 0x8(%edi) +80106c9f: ff 77 0c push 0xc(%edi) +80106ca2: ff 77 04 push 0x4(%edi) +80106ca5: ff 37 push (%edi) +80106ca7: 68 c1 7f 10 80 push $0x80107fc1 +80106cac: e8 50 99 ff ff call 80100601 cprintf("Bitmap: "); -80106f8c: 83 c4 14 add $0x14,%esp -80106f8f: 68 b0 82 10 80 push $0x801082b0 -80106f94: e8 93 96 ff ff call 8010062c -80106f99: 83 c4 10 add $0x10,%esp +80106cb1: 83 c4 14 add $0x14,%esp +80106cb4: 68 d0 7f 10 80 push $0x80107fd0 +80106cb9: e8 43 99 ff ff call 80100601 +80106cbe: 83 c4 10 add $0x10,%esp for(int i=0;i<60;i++) -80106f9c: be 00 00 00 00 mov $0x0,%esi -80106fa1: eb 85 jmp 80106f28 +80106cc1: be 00 00 00 00 mov $0x0,%esi +80106cc6: eb 85 jmp 80106c4d } } -80106fa3: 8d 65 f4 lea -0xc(%ebp),%esp -80106fa6: 5b pop %ebx -80106fa7: 5e pop %esi -80106fa8: 5f pop %edi -80106fa9: 5d pop %ebp -80106faa: c3 ret +80106cc8: 8d 65 f4 lea -0xc(%ebp),%esp +80106ccb: 5b pop %ebx +80106ccc: 5e pop %esi +80106ccd: 5f pop %edi +80106cce: 5d pop %ebp +80106ccf: c3 ret -80106fab : +80106cd0 : int numobj_slab(int slabid) { -80106fab: f3 0f 1e fb endbr32 -80106faf: 55 push %ebp -80106fb0: 89 e5 mov %esp,%ebp +80106cd0: 55 push %ebp +80106cd1: 89 e5 mov %esp,%ebp return stable.slab[slabid].num_used_objects; -80106fb2: 69 45 08 a8 01 00 00 imul $0x1a8,0x8(%ebp),%eax -80106fb9: 8b 80 60 6a 11 80 mov -0x7fee95a0(%eax),%eax +80106cd3: 69 45 08 a8 01 00 00 imul $0x1a8,0x8(%ebp),%eax +80106cda: 8b 80 60 3e 11 80 mov -0x7feec1a0(%eax),%eax } -80106fbf: 5d pop %ebp -80106fc0: c3 ret +80106ce0: 5d pop %ebp +80106ce1: c3 ret -80106fc1 : +80106ce2 : Thereby, you should pass all tests in the slabtest() function as is. Note that, you can edit the test function only for the debugging purpose. */ int* t[NSLAB][MAXTEST] = {}; void slabtest(){ -80106fc1: f3 0f 1e fb endbr32 -80106fc5: 55 push %ebp -80106fc6: 89 e5 mov %esp,%ebp -80106fc8: 57 push %edi -80106fc9: 56 push %esi -80106fca: 53 push %ebx -80106fcb: 83 ec 48 sub $0x48,%esp +80106ce2: 55 push %ebp +80106ce3: 89 e5 mov %esp,%ebp +80106ce5: 57 push %edi +80106ce6: 56 push %esi +80106ce7: 53 push %ebx +80106ce8: 83 ec 48 sub $0x48,%esp int counter = 1; -80106fce: c7 45 e4 01 00 00 00 movl $0x1,-0x1c(%ebp) +80106ceb: c7 45 e4 01 00 00 00 movl $0x1,-0x1c(%ebp) * to locate the VMA (virtual memory address) of an multiple of 4 bytes. * You can check the VMA of .stab by executing 'objdump -h kernel' in your xv6 source dir. * If the VMA is not aligned to the multiple of 4B, then adjust (add/del chars) * the literal string in the cprintf function */ cprintf("==== SLAB TEST ====\n"); -80106fd5: 68 f1 82 10 80 push $0x801082f1 -80106fda: e8 4d 96 ff ff call 8010062c +80106cf2: 68 11 80 10 80 push $0x80108011 +80106cf7: e8 05 99 ff ff call 80100601 * cprintf(); * slabdump(); */ /* TEST1: Single slab alloc */ cprintf("==== TEST1 =====\n"); -80106fdf: c7 04 24 06 83 10 80 movl $0x80108306,(%esp) -80106fe6: e8 41 96 ff ff call 8010062c +80106cfc: c7 04 24 26 80 10 80 movl $0x80108026,(%esp) +80106d03: e8 f9 98 ff ff call 80100601 start = counter; -80106feb: 8b 5d e4 mov -0x1c(%ebp),%ebx +80106d08: 8b 5d e4 mov -0x1c(%ebp),%ebx t[0][0] = (int*) kmalloc (TESTSIZE); -80106fee: c7 04 24 00 08 00 00 movl $0x800,(%esp) -80106ff5: e8 6d fc ff ff call 80106c67 -80106ffa: a3 c0 b5 10 80 mov %eax,0x8010b5c0 +80106d0b: c7 04 24 00 08 00 00 movl $0x800,(%esp) +80106d12: e8 83 fc ff ff call 8010699a +80106d17: a3 40 4d 11 80 mov %eax,0x80114d40 *(t[0][0]) = counter; -80106fff: 8b 55 e4 mov -0x1c(%ebp),%edx -80107002: 89 10 mov %edx,(%eax) +80106d1c: 8b 55 e4 mov -0x1c(%ebp),%edx +80106d1f: 89 10 mov %edx,(%eax) counter++; -80107004: 83 45 e4 01 addl $0x1,-0x1c(%ebp) +80106d21: 83 45 e4 01 addl $0x1,-0x1c(%ebp) slabdump(); -80107008: e8 d6 fe ff ff call 80106ee3 +80106d25: e8 e2 fe ff ff call 80106c0c cprintf( (*(t[0][0]) == start && numobj_slab(TESTSLABID) == 1) ? "OK\n":"WRONG\n"); -8010700d: 83 c4 10 add $0x10,%esp -80107010: b8 ea 82 10 80 mov $0x801082ea,%eax -80107015: 8b 15 c0 b5 10 80 mov 0x8010b5c0,%edx -8010701b: 39 1a cmp %ebx,(%edx) -8010701d: 0f 84 a7 00 00 00 je 801070ca -80107023: 83 ec 0c sub $0xc,%esp -80107026: 50 push %eax -80107027: e8 00 96 ff ff call 8010062c +80106d2a: 83 c4 10 add $0x10,%esp +80106d2d: b8 0a 80 10 80 mov $0x8010800a,%eax +80106d32: 8b 15 40 4d 11 80 mov 0x80114d40,%edx +80106d38: 39 1a cmp %ebx,(%edx) +80106d3a: 0f 84 a7 00 00 00 je 80106de7 +80106d40: 83 ec 0c sub $0xc,%esp +80106d43: 50 push %eax +80106d44: e8 b8 98 ff ff call 80100601 kmfree ((char*) t[0][0], TESTSIZE); -8010702c: 83 c4 08 add $0x8,%esp -8010702f: 68 00 08 00 00 push $0x800 -80107034: ff 35 c0 b5 10 80 pushl 0x8010b5c0 -8010703a: e8 64 fd ff ff call 80106da3 +80106d49: 83 c4 08 add $0x8,%esp +80106d4c: 68 00 08 00 00 push $0x800 +80106d51: ff 35 40 4d 11 80 push 0x80114d40 +80106d57: e8 76 fd ff ff call 80106ad2 slabdump(); -8010703f: e8 9f fe ff ff call 80106ee3 +80106d5c: e8 ab fe ff ff call 80106c0c /* TEST1: Single slab alloc: the size not equal to a power of 2. */ cprintf("==== TEST2 =====\n"); -80107044: c7 04 24 18 83 10 80 movl $0x80108318,(%esp) -8010704b: e8 dc 95 ff ff call 8010062c +80106d61: c7 04 24 38 80 10 80 movl $0x80108038,(%esp) +80106d68: e8 94 98 ff ff call 80100601 start = counter; -80107050: 8b 5d e4 mov -0x1c(%ebp),%ebx +80106d6d: 8b 5d e4 mov -0x1c(%ebp),%ebx t[0][0] = (int*) kmalloc (TESTSIZE-10); -80107053: c7 04 24 f6 07 00 00 movl $0x7f6,(%esp) -8010705a: e8 08 fc ff ff call 80106c67 -8010705f: a3 c0 b5 10 80 mov %eax,0x8010b5c0 +80106d70: c7 04 24 f6 07 00 00 movl $0x7f6,(%esp) +80106d77: e8 1e fc ff ff call 8010699a +80106d7c: a3 40 4d 11 80 mov %eax,0x80114d40 *(t[0][0]) = counter; -80107064: 8b 55 e4 mov -0x1c(%ebp),%edx -80107067: 89 10 mov %edx,(%eax) +80106d81: 8b 55 e4 mov -0x1c(%ebp),%edx +80106d84: 89 10 mov %edx,(%eax) slabdump(); -80107069: e8 75 fe ff ff call 80106ee3 +80106d86: e8 81 fe ff ff call 80106c0c counter++; -8010706e: 83 45 e4 01 addl $0x1,-0x1c(%ebp) +80106d8b: 83 45 e4 01 addl $0x1,-0x1c(%ebp) cprintf( (*(t[0][0]) == start && numobj_slab(TESTSLABID) == 1) ? "OK\n":"WRONG\n"); -80107072: 83 c4 10 add $0x10,%esp -80107075: b8 ea 82 10 80 mov $0x801082ea,%eax -8010707a: 8b 15 c0 b5 10 80 mov 0x8010b5c0,%edx -80107080: 39 1a cmp %ebx,(%edx) -80107082: 74 68 je 801070ec -80107084: 83 ec 0c sub $0xc,%esp -80107087: 50 push %eax -80107088: e8 9f 95 ff ff call 8010062c +80106d8f: 83 c4 10 add $0x10,%esp +80106d92: b8 0a 80 10 80 mov $0x8010800a,%eax +80106d97: 8b 15 40 4d 11 80 mov 0x80114d40,%edx +80106d9d: 39 1a cmp %ebx,(%edx) +80106d9f: 74 68 je 80106e09 +80106da1: 83 ec 0c sub $0xc,%esp +80106da4: 50 push %eax +80106da5: e8 57 98 ff ff call 80100601 kmfree ((char*) t[0][0], TESTSIZE); -8010708d: 83 c4 08 add $0x8,%esp -80107090: 68 00 08 00 00 push $0x800 -80107095: ff 35 c0 b5 10 80 pushl 0x8010b5c0 -8010709b: e8 03 fd ff ff call 80106da3 +80106daa: 83 c4 08 add $0x8,%esp +80106dad: 68 00 08 00 00 push $0x800 +80106db2: ff 35 40 4d 11 80 push 0x80114d40 +80106db8: e8 15 fd ff ff call 80106ad2 slabdump(); -801070a0: e8 3e fe ff ff call 80106ee3 +80106dbd: e8 4a fe ff ff call 80106c0c /* TEST3: Multiple slabs alloc */ cprintf("==== TEST3 =====\n"); -801070a5: c7 04 24 2a 83 10 80 movl $0x8010832a,(%esp) -801070ac: e8 7b 95 ff ff call 8010062c +80106dc2: c7 04 24 4a 80 10 80 movl $0x8010804a,(%esp) +80106dc9: e8 33 98 ff ff call 80100601 start = counter; -801070b1: 8b 75 e4 mov -0x1c(%ebp),%esi +80106dce: 8b 75 e4 mov -0x1c(%ebp),%esi for (int i=0; i +80106de2: 89 75 cc mov %esi,-0x34(%ebp) +80106de5: eb 59 jmp 80106e40 cprintf( (*(t[0][0]) == start && numobj_slab(TESTSLABID) == 1) ? "OK\n":"WRONG\n"); -801070ca: 83 ec 0c sub $0xc,%esp -801070cd: 6a 08 push $0x8 -801070cf: e8 d7 fe ff ff call 80106fab -801070d4: 83 c4 10 add $0x10,%esp -801070d7: 83 f8 01 cmp $0x1,%eax -801070da: b8 e6 82 10 80 mov $0x801082e6,%eax -801070df: ba ea 82 10 80 mov $0x801082ea,%edx -801070e4: 0f 45 c2 cmovne %edx,%eax -801070e7: e9 37 ff ff ff jmp 80107023 +80106de7: 83 ec 0c sub $0xc,%esp +80106dea: 6a 08 push $0x8 +80106dec: e8 df fe ff ff call 80106cd0 +80106df1: 83 c4 10 add $0x10,%esp +80106df4: 83 f8 01 cmp $0x1,%eax +80106df7: b8 06 80 10 80 mov $0x80108006,%eax +80106dfc: ba 0a 80 10 80 mov $0x8010800a,%edx +80106e01: 0f 45 c2 cmovne %edx,%eax +80106e04: e9 37 ff ff ff jmp 80106d40 cprintf( (*(t[0][0]) == start && numobj_slab(TESTSLABID) == 1) ? "OK\n":"WRONG\n"); -801070ec: 83 ec 0c sub $0xc,%esp -801070ef: 6a 08 push $0x8 -801070f1: e8 b5 fe ff ff call 80106fab -801070f6: 83 c4 10 add $0x10,%esp -801070f9: 83 f8 01 cmp $0x1,%eax -801070fc: b8 e6 82 10 80 mov $0x801082e6,%eax -80107101: ba ea 82 10 80 mov $0x801082ea,%edx -80107106: 0f 45 c2 cmovne %edx,%eax -80107109: e9 76 ff ff ff jmp 80107084 - memmove (t[i][0]+j, &counter, sizeof(int)); -8010710e: 83 ec 04 sub $0x4,%esp -80107111: 6a 04 push $0x4 -80107113: 8d 45 e4 lea -0x1c(%ebp),%eax -80107116: 50 push %eax -80107117: 8b 07 mov (%edi),%eax -80107119: 8d 04 98 lea (%eax,%ebx,4),%eax -8010711c: 50 push %eax -8010711d: e8 ba ce ff ff call 80103fdc - counter++; -80107122: 83 45 e4 01 addl $0x1,-0x1c(%ebp) - for (int j=0; j +80106e09: 83 ec 0c sub $0xc,%esp +80106e0c: 6a 08 push $0x8 +80106e0e: e8 bd fe ff ff call 80106cd0 +80106e13: 83 c4 10 add $0x10,%esp +80106e16: 83 f8 01 cmp $0x1,%eax +80106e19: b8 06 80 10 80 mov $0x80108006,%eax +80106e1e: ba 0a 80 10 80 mov $0x8010800a,%edx +80106e23: 0f 45 c2 cmovne %edx,%eax +80106e26: e9 76 ff ff ff jmp 80106da1 for (int i=0; i +80106e2b: 83 45 d0 01 addl $0x1,-0x30(%ebp) +80106e2f: 81 45 d4 20 03 00 00 addl $0x320,-0x2c(%ebp) +80106e36: 8b 45 d4 mov -0x2c(%ebp),%eax +80106e39: 3d 60 69 11 80 cmp $0x80116960,%eax +80106e3e: 74 51 je 80106e91 int slabsize = 1 << (i+3); -80107145: bb 01 00 00 00 mov $0x1,%ebx -8010714a: 0f b6 4d d0 movzbl -0x30(%ebp),%ecx -8010714e: d3 e3 shl %cl,%ebx +80106e40: bb 01 00 00 00 mov $0x1,%ebx +80106e45: 0f b6 4d d0 movzbl -0x30(%ebp),%ecx +80106e49: d3 e3 shl %cl,%ebx t[i][0] = (int*) kmalloc (slabsize); -80107150: 83 ec 0c sub $0xc,%esp -80107153: 53 push %ebx -80107154: e8 0e fb ff ff call 80106c67 -80107159: 8b 55 d4 mov -0x2c(%ebp),%edx -8010715c: 89 d7 mov %edx,%edi -8010715e: 89 02 mov %eax,(%edx) +80106e4b: 83 ec 0c sub $0xc,%esp +80106e4e: 53 push %ebx +80106e4f: e8 46 fb ff ff call 8010699a +80106e54: 8b 55 d4 mov -0x2c(%ebp),%edx +80106e57: 89 d7 mov %edx,%edi +80106e59: 89 02 mov %eax,(%edx) + for (int j=0; j +80106e68: bb 00 00 00 00 mov $0x0,%ebx + memmove (t[i][0]+j, &counter, sizeof(int)); +80106e6d: 83 ec 04 sub $0x4,%esp +80106e70: 6a 04 push $0x4 +80106e72: 8d 45 e4 lea -0x1c(%ebp),%eax +80106e75: 50 push %eax +80106e76: 8b 07 mov (%edi),%eax +80106e78: 8d 04 98 lea (%eax,%ebx,4),%eax +80106e7b: 50 push %eax +80106e7c: e8 b3 cf ff ff call 80103e34 + counter++; +80106e81: 83 45 e4 01 addl $0x1,-0x1c(%ebp) for (int j=0; j -8010716d: bb 00 00 00 00 mov $0x0,%ebx -80107172: eb 9a jmp 8010710e -80107174: 8b 75 cc mov -0x34(%ebp),%esi -80107177: c7 45 d4 c0 b5 10 80 movl $0x8010b5c0,-0x2c(%ebp) -8010717e: b9 03 00 00 00 mov $0x3,%ecx +80106e85: 83 c3 01 add $0x1,%ebx +80106e88: 83 c4 10 add $0x10,%esp +80106e8b: 39 de cmp %ebx,%esi +80106e8d: 77 de ja 80106e6d +80106e8f: eb 9a jmp 80106e2b +80106e91: 8b 75 cc mov -0x34(%ebp),%esi +80106e94: c7 45 d4 40 4d 11 80 movl $0x80114d40,-0x2c(%ebp) +80106e9b: b9 03 00 00 00 mov $0x3,%ecx } } // CHECK pass = 1; -80107183: bf 01 00 00 00 mov $0x1,%edi -80107188: eb 14 jmp 8010719e +80106ea0: bf 01 00 00 00 mov $0x1,%edi +80106ea5: eb 14 jmp 80106ebb for (int j=0; j < slabsize/sizeof(int); j++) { // cprintf("%d, %d, %d, %d\n", i, j, *(t[i][0]+j), start); //YOU MAY USE THIS if ( *(t[i][0]+j) != start ) { pass = 0; -8010718a: bf 00 00 00 00 mov $0x0,%edi +80106ea7: bf 00 00 00 00 mov $0x0,%edi for (int i=0; i +80106eac: 83 c1 01 add $0x1,%ecx +80106eaf: 81 45 d4 20 03 00 00 addl $0x320,-0x2c(%ebp) +80106eb6: 83 f9 0c cmp $0xc,%ecx +80106eb9: 74 2c je 80106ee7 int slabsize = 1 << (i+3); -8010719e: b8 01 00 00 00 mov $0x1,%eax -801071a3: d3 e0 shl %cl,%eax +80106ebb: b8 01 00 00 00 mov $0x1,%eax +80106ec0: d3 e0 shl %cl,%eax for (int j=0; j < slabsize/sizeof(int); j++) -801071a5: 89 c3 mov %eax,%ebx -801071a7: c1 eb 02 shr $0x2,%ebx -801071aa: 83 f8 03 cmp $0x3,%eax -801071ad: 76 e0 jbe 8010718f +80106ec2: 89 c3 mov %eax,%ebx +80106ec4: c1 eb 02 shr $0x2,%ebx +80106ec7: 83 f8 03 cmp $0x3,%eax +80106eca: 76 e0 jbe 80106eac if ( *(t[i][0]+j) != start ) -801071af: 8b 45 d4 mov -0x2c(%ebp),%eax -801071b2: 8b 10 mov (%eax),%edx +80106ecc: 8b 45 d4 mov -0x2c(%ebp),%eax +80106ecf: 8b 10 mov (%eax),%edx for (int j=0; j < slabsize/sizeof(int); j++) -801071b4: b8 00 00 00 00 mov $0x0,%eax +80106ed1: b8 00 00 00 00 mov $0x0,%eax if ( *(t[i][0]+j) != start ) -801071b9: 39 34 82 cmp %esi,(%edx,%eax,4) -801071bc: 75 cc jne 8010718a +80106ed6: 39 34 82 cmp %esi,(%edx,%eax,4) +80106ed9: 75 cc jne 80106ea7 break; } start++; -801071be: 83 c6 01 add $0x1,%esi +80106edb: 83 c6 01 add $0x1,%esi for (int j=0; j < slabsize/sizeof(int); j++) -801071c1: 83 c0 01 add $0x1,%eax -801071c4: 39 d8 cmp %ebx,%eax -801071c6: 72 f1 jb 801071b9 -801071c8: eb c5 jmp 8010718f +80106ede: 83 c0 01 add $0x1,%eax +80106ee1: 39 d8 cmp %ebx,%eax +80106ee3: 72 f1 jb 80106ed6 +80106ee5: eb c5 jmp 80106eac } } slabdump(); -801071ca: e8 14 fd ff ff call 80106ee3 +80106ee7: e8 20 fd ff ff call 80106c0c cprintf( pass ? "OK\n" : "WRONG\n"); -801071cf: 85 ff test %edi,%edi -801071d1: b8 e6 82 10 80 mov $0x801082e6,%eax -801071d6: ba ea 82 10 80 mov $0x801082ea,%edx -801071db: 0f 44 c2 cmove %edx,%eax -801071de: 83 ec 0c sub $0xc,%esp -801071e1: 50 push %eax -801071e2: e8 45 94 ff ff call 8010062c -801071e7: 83 c4 10 add $0x10,%esp -801071ea: be c0 b5 10 80 mov $0x8010b5c0,%esi -801071ef: bb 03 00 00 00 mov $0x3,%ebx +80106eec: 85 ff test %edi,%edi +80106eee: b8 06 80 10 80 mov $0x80108006,%eax +80106ef3: ba 0a 80 10 80 mov $0x8010800a,%edx +80106ef8: 0f 44 c2 cmove %edx,%eax +80106efb: 83 ec 0c sub $0xc,%esp +80106efe: 50 push %eax +80106eff: e8 fd 96 ff ff call 80100601 +80106f04: 83 c4 10 add $0x10,%esp +80106f07: be 40 4d 11 80 mov $0x80114d40,%esi +80106f0c: bb 03 00 00 00 mov $0x3,%ebx for (int i=0; i +80106f1f: 50 push %eax +80106f20: ff 36 push (%esi) +80106f22: e8 ab fb ff ff call 80106ad2 for (int i=0; i +80106f27: 83 c3 01 add $0x1,%ebx +80106f2a: 81 c6 20 03 00 00 add $0x320,%esi +80106f30: 83 c4 10 add $0x10,%esp +80106f33: 83 fb 0c cmp $0xc,%ebx +80106f36: 75 de jne 80106f16 } slabdump(); -8010721b: e8 c3 fc ff ff call 80106ee3 +80106f38: e8 cf fc ff ff call 80106c0c /* TEST4: Multiple slabs alloc2 */ cprintf("==== TEST4 =====\n"); -80107220: 83 ec 0c sub $0xc,%esp -80107223: 68 3c 83 10 80 push $0x8010833c -80107228: e8 ff 93 ff ff call 8010062c +80106f3d: 83 ec 0c sub $0xc,%esp +80106f40: 68 5c 80 10 80 push $0x8010805c +80106f45: e8 b7 96 ff ff call 80100601 start = counter; -8010722d: 8b 7d e4 mov -0x1c(%ebp),%edi +80106f4a: 8b 7d e4 mov -0x1c(%ebp),%edi for (int i=0; i +80106f65: 89 7d c0 mov %edi,-0x40(%ebp) +80106f68: eb 67 jmp 80106fd1 for (int j=0; j +80106f6a: 83 45 d4 04 addl $0x4,-0x2c(%ebp) +80106f6e: 8b 45 d4 mov -0x2c(%ebp),%eax +80106f71: 39 45 d0 cmp %eax,-0x30(%ebp) +80106f74: 74 44 je 80106fba t[i][j] = (int*) kmalloc (slabsize); -80107259: 83 ec 0c sub $0xc,%esp -8010725c: ff 75 cc pushl -0x34(%ebp) -8010725f: e8 03 fa ff ff call 80106c67 -80107264: 8b 4d d4 mov -0x2c(%ebp),%ecx -80107267: 89 ce mov %ecx,%esi -80107269: 89 01 mov %eax,(%ecx) +80106f76: 83 ec 0c sub $0xc,%esp +80106f79: 8b 5d cc mov -0x34(%ebp),%ebx +80106f7c: 53 push %ebx +80106f7d: e8 18 fa ff ff call 8010699a +80106f82: 8b 4d d4 mov -0x2c(%ebp),%ecx +80106f85: 89 ce mov %ecx,%esi +80106f87: 89 01 mov %eax,(%ecx) for (int k=0; k -80107274: bb 00 00 00 00 mov $0x0,%ebx +80106f89: 83 c4 10 add $0x10,%esp +80106f8c: 83 fb 03 cmp $0x3,%ebx +80106f8f: 76 d9 jbe 80106f6a +80106f91: bb 00 00 00 00 mov $0x0,%ebx memmove (t[i][j]+k, &counter, sizeof(int)); -80107279: 83 ec 04 sub $0x4,%esp -8010727c: 6a 04 push $0x4 -8010727e: 8d 45 e4 lea -0x1c(%ebp),%eax -80107281: 50 push %eax -80107282: 8b 06 mov (%esi),%eax -80107284: 8d 04 98 lea (%eax,%ebx,4),%eax -80107287: 50 push %eax -80107288: e8 4f cd ff ff call 80103fdc +80106f96: 83 ec 04 sub $0x4,%esp +80106f99: 6a 04 push $0x4 +80106f9b: 8d 45 e4 lea -0x1c(%ebp),%eax +80106f9e: 50 push %eax +80106f9f: 8b 06 mov (%esi),%eax +80106fa1: 8d 04 98 lea (%eax,%ebx,4),%eax +80106fa4: 50 push %eax +80106fa5: e8 8a ce ff ff call 80103e34 counter++; -8010728d: 83 45 e4 01 addl $0x1,-0x1c(%ebp) +80106faa: 83 45 e4 01 addl $0x1,-0x1c(%ebp) for (int k=0; k -8010729b: eb b0 jmp 8010724d +80106fae: 83 c3 01 add $0x1,%ebx +80106fb1: 83 c4 10 add $0x10,%esp +80106fb4: 39 fb cmp %edi,%ebx +80106fb6: 72 de jb 80106f96 +80106fb8: eb b0 jmp 80106f6a for (int i=0; i +80106fba: 83 45 c8 01 addl $0x1,-0x38(%ebp) +80106fbe: 81 45 d0 20 03 00 00 addl $0x320,-0x30(%ebp) +80106fc5: 8b 45 d0 mov -0x30(%ebp),%eax +80106fc8: ba 80 6c 11 80 mov $0x80116c80,%edx +80106fcd: 39 c2 cmp %eax,%edx +80106fcf: 74 20 je 80106ff1 int slabsize = 1 << (i+3); -801072b4: b8 01 00 00 00 mov $0x1,%eax -801072b9: 0f b6 4d c4 movzbl -0x3c(%ebp),%ecx -801072bd: d3 e0 shl %cl,%eax -801072bf: 89 45 cc mov %eax,-0x34(%ebp) +80106fd1: b8 01 00 00 00 mov $0x1,%eax +80106fd6: 0f b6 4d c8 movzbl -0x38(%ebp),%ecx +80106fda: d3 e0 shl %cl,%eax +80106fdc: 89 45 cc mov %eax,-0x34(%ebp) for (int k=0; k -801072d7: 8b 7d bc mov -0x44(%ebp),%edi +80106fdf: c1 e8 02 shr $0x2,%eax +80106fe2: 89 c7 mov %eax,%edi +80106fe4: 8b 45 d0 mov -0x30(%ebp),%eax +80106fe7: 2d 20 03 00 00 sub $0x320,%eax +80106fec: 89 45 d4 mov %eax,-0x2c(%ebp) +80106fef: eb 85 jmp 80106f76 } } } slabdump(); -801072da: e8 04 fc ff ff call 80106ee3 -801072df: c7 45 d4 e0 b8 10 80 movl $0x8010b8e0,-0x2c(%ebp) -801072e6: c7 45 cc 03 00 00 00 movl $0x3,-0x34(%ebp) +80106ff1: 8b 7d c0 mov -0x40(%ebp),%edi +80106ff4: e8 13 fc ff ff call 80106c0c +80106ff9: c7 45 d4 60 50 11 80 movl $0x80115060,-0x2c(%ebp) +80107000: c7 45 cc 03 00 00 00 movl $0x3,-0x34(%ebp) // CHECK pass = 1; -801072ed: c7 45 d0 01 00 00 00 movl $0x1,-0x30(%ebp) -801072f4: eb 43 jmp 80107339 +80107007: c7 45 d0 01 00 00 00 movl $0x1,-0x30(%ebp) +8010700e: eb 43 jmp 80107053 for (int k=0; k +80107017: 83 c3 04 add $0x4,%ebx +8010701a: 3b 5d d4 cmp -0x2c(%ebp),%ebx +8010701d: 74 1d je 8010703c for (int k=0; k +8010701f: 83 fe 03 cmp $0x3,%esi +80107022: 76 f3 jbe 80107017 if (*(t[i][j]+k) != start) -8010730a: 8b 13 mov (%ebx),%edx +80107024: 8b 13 mov (%ebx),%edx for (int k=0; k +8010702b: 39 3c 82 cmp %edi,(%edx,%eax,4) +8010702e: 75 e0 jne 80107010 break; } start++; -80107316: 83 c7 01 add $0x1,%edi +80107030: 83 c7 01 add $0x1,%edi for (int k=0; k -80107320: eb db jmp 801072fd +80107033: 83 c0 01 add $0x1,%eax +80107036: 39 c8 cmp %ecx,%eax +80107038: 72 f1 jb 8010702b +8010703a: eb db jmp 80107017 for (int i=0; i +8010703c: 83 45 cc 01 addl $0x1,-0x34(%ebp) +80107040: 81 45 d4 20 03 00 00 addl $0x320,-0x2c(%ebp) +80107047: 8b 45 d4 mov -0x2c(%ebp),%eax +8010704a: ba 80 6c 11 80 mov $0x80116c80,%edx +8010704f: 39 c2 cmp %eax,%edx +80107051: 74 1b je 8010706e int slabsize = 1 << (i+3); -80107339: be 01 00 00 00 mov $0x1,%esi -8010733e: 0f b6 4d cc movzbl -0x34(%ebp),%ecx -80107342: d3 e6 shl %cl,%esi +80107053: be 01 00 00 00 mov $0x1,%esi +80107058: 0f b6 4d cc movzbl -0x34(%ebp),%ecx +8010705c: d3 e6 shl %cl,%esi for (int k=0; k +8010705e: 89 f1 mov %esi,%ecx +80107060: c1 e9 02 shr $0x2,%ecx +80107063: 8b 45 d4 mov -0x2c(%ebp),%eax +80107066: 8d 98 e0 fc ff ff lea -0x320(%eax),%ebx +8010706c: eb b1 jmp 8010701f } } } cprintf( pass ? "OK\n" : "WRONG\n"); -80107354: 83 7d d0 00 cmpl $0x0,-0x30(%ebp) -80107358: b8 e6 82 10 80 mov $0x801082e6,%eax -8010735d: ba ea 82 10 80 mov $0x801082ea,%edx -80107362: 0f 44 c2 cmove %edx,%eax -80107365: 83 ec 0c sub $0xc,%esp -80107368: 50 push %eax -80107369: e8 be 92 ff ff call 8010062c -8010736e: 83 c4 10 add $0x10,%esp -80107371: bf 03 00 00 00 mov $0x3,%edi +8010706e: 83 7d d0 00 cmpl $0x0,-0x30(%ebp) +80107072: b8 06 80 10 80 mov $0x80108006,%eax +80107077: ba 0a 80 10 80 mov $0x8010800a,%edx +8010707c: 0f 44 c2 cmove %edx,%eax +8010707f: 83 ec 0c sub $0xc,%esp +80107082: 50 push %eax +80107083: e8 79 95 ff ff call 80100601 +80107088: 83 c4 10 add $0x10,%esp +8010708b: bf 03 00 00 00 mov $0x3,%edi // slabdump(); for (int i=0; i +801070a7: 83 ec 08 sub $0x8,%esp +801070aa: 57 push %edi +801070ab: ff 33 push (%ebx) +801070ad: e8 20 fa ff ff call 80106ad2 for (int j=0; j +801070b2: 83 c3 04 add $0x4,%ebx +801070b5: 83 c4 10 add $0x10,%esp +801070b8: 39 f3 cmp %esi,%ebx +801070ba: 75 eb jne 801070a7 for (int i=0; i +801070bc: 83 45 d4 01 addl $0x1,-0x2c(%ebp) +801070c0: 81 c6 20 03 00 00 add $0x320,%esi +801070c6: 81 fe 80 6c 11 80 cmp $0x80116c80,%esi +801070cc: 75 c8 jne 80107096 // slabdump(); } } slabdump(); -801073b4: e8 2a fb ff ff call 80106ee3 +801070ce: e8 39 fb ff ff call 80106c0c /* TEST5: ALLOC MORE THAN 100 PAGES */ cprintf("==== TEST5 =====\n"); -801073b9: 83 ec 0c sub $0xc,%esp -801073bc: 68 4e 83 10 80 push $0x8010834e -801073c1: e8 66 92 ff ff call 8010062c -801073c6: 83 c4 10 add $0x10,%esp +801070d3: 83 ec 0c sub $0xc,%esp +801070d6: 68 6e 80 10 80 push $0x8010806e +801070db: e8 21 95 ff ff call 80100601 +801070e0: 83 c4 10 add $0x10,%esp start = counter; for (int j=0; j - for (int j=0; j +801070ea: 8d 7d e4 lea -0x1c(%ebp),%edi t[0][j] = (int*) kmalloc (TESTSIZE); -801073e3: 83 ec 0c sub $0xc,%esp -801073e6: 68 00 08 00 00 push $0x800 -801073eb: e8 77 f8 ff ff call 80106c67 -801073f0: 8b 55 d4 mov -0x2c(%ebp),%edx -801073f3: 89 d6 mov %edx,%esi -801073f5: 89 04 95 c0 b5 10 80 mov %eax,-0x7fef4a40(,%edx,4) -801073fc: 83 c4 10 add $0x10,%esp -801073ff: bb 00 00 00 00 mov $0x0,%ebx +801070ed: 83 ec 0c sub $0xc,%esp +801070f0: 68 00 08 00 00 push $0x800 +801070f5: e8 a0 f8 ff ff call 8010699a +801070fa: 8b 55 d4 mov -0x2c(%ebp),%edx +801070fd: 89 d6 mov %edx,%esi +801070ff: 89 04 95 40 4d 11 80 mov %eax,-0x7feeb2c0(,%edx,4) +80107106: 83 c4 10 add $0x10,%esp +80107109: bb 00 00 00 00 mov $0x0,%ebx memmove (t[0][j]+k, &counter, sizeof(int)); -80107404: 83 ec 04 sub $0x4,%esp -80107407: 6a 04 push $0x4 -80107409: 57 push %edi -8010740a: 89 d8 mov %ebx,%eax -8010740c: 03 04 b5 c0 b5 10 80 add -0x7fef4a40(,%esi,4),%eax -80107413: 50 push %eax -80107414: e8 c3 cb ff ff call 80103fdc +8010710e: 83 ec 04 sub $0x4,%esp +80107111: 6a 04 push $0x4 +80107113: 57 push %edi +80107114: 89 d8 mov %ebx,%eax +80107116: 03 04 b5 40 4d 11 80 add -0x7feeb2c0(,%esi,4),%eax +8010711d: 50 push %eax +8010711e: e8 11 cd ff ff call 80103e34 counter++; -80107419: 83 45 e4 01 addl $0x1,-0x1c(%ebp) +80107123: 83 45 e4 01 addl $0x1,-0x1c(%ebp) for (int k=0; k -8010742b: eb a8 jmp 801073d5 +80107127: 83 c3 04 add $0x4,%ebx +8010712a: 83 c4 10 add $0x10,%esp +8010712d: 81 fb 00 08 00 00 cmp $0x800,%ebx +80107133: 75 d9 jne 8010710e + for (int j=0; j } } tmp = (int*) kmalloc (TESTSIZE); -8010742d: 83 ec 0c sub $0xc,%esp -80107430: 68 00 08 00 00 push $0x800 -80107435: e8 2d f8 ff ff call 80106c67 -8010743a: 89 c2 mov %eax,%edx +80107143: 83 ec 0c sub $0xc,%esp +80107146: 68 00 08 00 00 push $0x800 +8010714b: e8 4a f8 ff ff call 8010699a +80107150: 89 c2 mov %eax,%edx cprintf( (!tmp && numobj_slab (TESTSLABID) == MAXTEST) ? "OK\n" : "WRONG\n"); -8010743c: 83 c4 10 add $0x10,%esp -8010743f: b8 ea 82 10 80 mov $0x801082ea,%eax -80107444: 85 d2 test %edx,%edx -80107446: 74 5b je 801074a3 -80107448: 83 ec 0c sub $0xc,%esp -8010744b: 50 push %eax -8010744c: e8 db 91 ff ff call 8010062c +80107152: 83 c4 10 add $0x10,%esp +80107155: b8 0a 80 10 80 mov $0x8010800a,%eax +8010715a: 85 d2 test %edx,%edx +8010715c: 0f 84 cb 00 00 00 je 8010722d +80107162: 83 ec 0c sub $0xc,%esp +80107165: 50 push %eax +80107166: e8 96 94 ff ff call 80100601 slabdump(); -80107451: e8 8d fa ff ff call 80106ee3 +8010716b: e8 9c fa ff ff call 80106c0c /* TEST6: ALLOC AFTER FREE */ cprintf("==== TEST6 =====\n"); -80107456: c7 04 24 60 83 10 80 movl $0x80108360,(%esp) -8010745d: e8 ca 91 ff ff call 8010062c -80107462: 83 c4 10 add $0x10,%esp +80107170: c7 04 24 80 80 10 80 movl $0x80108080,(%esp) +80107177: e8 85 94 ff ff call 80100601 +8010717c: 83 c4 10 add $0x10,%esp for (int j=0; j +80107184: 83 ec 08 sub $0x8,%esp +80107187: 68 00 08 00 00 push $0x800 +8010718c: ff 34 9d 40 4d 11 80 push -0x7feeb2c0(,%ebx,4) +80107193: e8 3a f9 ff ff call 80106ad2 for (int j=0; j +80107198: 83 c3 01 add $0x1,%ebx +8010719b: 83 c4 10 add $0x10,%esp +8010719e: 81 fb c8 00 00 00 cmp $0xc8,%ebx +801071a4: 75 de jne 80107184 } slabdump(); -8010748c: e8 52 fa ff ff call 80106ee3 +801071a6: e8 61 fa ff ff call 80106c0c start = counter; -80107491: 8b 45 e4 mov -0x1c(%ebp),%eax -80107494: 89 45 d0 mov %eax,-0x30(%ebp) +801071ab: 8b 45 e4 mov -0x1c(%ebp),%eax +801071ae: 89 45 d0 mov %eax,-0x30(%ebp) for (int j=0; j - cprintf( (!tmp && numobj_slab (TESTSLABID) == MAXTEST) ? "OK\n" : "WRONG\n"); -801074a3: 83 ec 0c sub $0xc,%esp -801074a6: 6a 08 push $0x8 -801074a8: e8 fe fa ff ff call 80106fab -801074ad: 83 c4 10 add $0x10,%esp -801074b0: 3d c8 00 00 00 cmp $0xc8,%eax -801074b5: b8 e6 82 10 80 mov $0x801082e6,%eax -801074ba: ba ea 82 10 80 mov $0x801082ea,%edx -801074bf: 0f 45 c2 cmovne %edx,%eax -801074c2: eb 84 jmp 80107448 - for (int j=0; j +801071b8: 8d 7d e4 lea -0x1c(%ebp),%edi t[0][j] = (int*) kmalloc (TESTSIZE); -801074d2: 83 ec 0c sub $0xc,%esp -801074d5: 68 00 08 00 00 push $0x800 -801074da: e8 88 f7 ff ff call 80106c67 -801074df: 8b 55 d4 mov -0x2c(%ebp),%edx -801074e2: 89 d6 mov %edx,%esi -801074e4: 89 04 95 c0 b5 10 80 mov %eax,-0x7fef4a40(,%edx,4) -801074eb: 83 c4 10 add $0x10,%esp -801074ee: bb 00 00 00 00 mov $0x0,%ebx +801071bb: 83 ec 0c sub $0xc,%esp +801071be: 68 00 08 00 00 push $0x800 +801071c3: e8 d2 f7 ff ff call 8010699a +801071c8: 8b 55 d4 mov -0x2c(%ebp),%edx +801071cb: 89 d6 mov %edx,%esi +801071cd: 89 04 95 40 4d 11 80 mov %eax,-0x7feeb2c0(,%edx,4) +801071d4: 83 c4 10 add $0x10,%esp +801071d7: bb 00 00 00 00 mov $0x0,%ebx memmove (t[0][j]+k, &counter, sizeof(int)); -801074f3: 83 ec 04 sub $0x4,%esp -801074f6: 6a 04 push $0x4 -801074f8: 57 push %edi -801074f9: 89 d8 mov %ebx,%eax -801074fb: 03 04 b5 c0 b5 10 80 add -0x7fef4a40(,%esi,4),%eax -80107502: 50 push %eax -80107503: e8 d4 ca ff ff call 80103fdc +801071dc: 83 ec 04 sub $0x4,%esp +801071df: 6a 04 push $0x4 +801071e1: 57 push %edi +801071e2: 89 d8 mov %ebx,%eax +801071e4: 03 04 b5 40 4d 11 80 add -0x7feeb2c0(,%esi,4),%eax +801071eb: 50 push %eax +801071ec: e8 43 cc ff ff call 80103e34 counter++; -80107508: 83 45 e4 01 addl $0x1,-0x1c(%ebp) +801071f1: 83 45 e4 01 addl $0x1,-0x1c(%ebp) for (int k=0; k -8010751a: eb a8 jmp 801074c4 +801071f5: 83 c3 04 add $0x4,%ebx +801071f8: 83 c4 10 add $0x10,%esp +801071fb: 81 fb 00 08 00 00 cmp $0x800,%ebx +80107201: 75 d9 jne 801071dc + for (int j=0; j } } slabdump(); -8010751c: e8 c2 f9 ff ff call 80106ee3 +80107211: e8 f6 f9 ff ff call 80106c0c // CHECK pass = 1; for (int j=0; j +8010721b: bf 01 00 00 00 mov $0x1,%edi { for (int k=0; k + cprintf( (!tmp && numobj_slab (TESTSLABID) == MAXTEST) ? "OK\n" : "WRONG\n"); +8010722d: 83 ec 0c sub $0xc,%esp +80107230: 6a 08 push $0x8 +80107232: e8 99 fa ff ff call 80106cd0 +80107237: 83 c4 10 add $0x10,%esp +8010723a: 3d c8 00 00 00 cmp $0xc8,%eax +8010723f: b8 06 80 10 80 mov $0x80108006,%eax +80107244: ba 0a 80 10 80 mov $0x8010800a,%edx +80107249: 0f 45 c2 cmovne %edx,%eax +8010724c: e9 11 ff ff ff jmp 80107162 + pass = 0; +80107251: 89 75 d4 mov %esi,-0x2c(%ebp) for (int j=0; j +80107254: 83 c1 01 add $0x1,%ecx +80107257: 81 f9 c8 00 00 00 cmp $0xc8,%ecx +8010725d: 74 26 je 80107285 for (int k=0; k +80107275: 39 04 82 cmp %eax,(%edx,%eax,4) +80107278: 75 d7 jne 80107251 break; } start++; -8010755d: 83 c0 01 add $0x1,%eax +8010727a: 83 c0 01 add $0x1,%eax for (int k=0; k -80107564: eb cf jmp 80107535 +8010727d: 39 c3 cmp %eax,%ebx +8010727f: 75 f4 jne 80107275 + start++; +80107281: 89 d8 mov %ebx,%eax +80107283: eb cf jmp 80107254 } } cprintf( pass ? "OK\n" : "WRONG\n"); -80107566: 85 db test %ebx,%ebx -80107568: b8 e6 82 10 80 mov $0x801082e6,%eax -8010756d: ba ea 82 10 80 mov $0x801082ea,%edx -80107572: 0f 44 c2 cmove %edx,%eax -80107575: 83 ec 0c sub $0xc,%esp -80107578: 50 push %eax -80107579: e8 ae 90 ff ff call 8010062c -8010757e: 83 c4 10 add $0x10,%esp +80107285: 8b 7d d4 mov -0x2c(%ebp),%edi +80107288: 85 ff test %edi,%edi +8010728a: b8 06 80 10 80 mov $0x80108006,%eax +8010728f: ba 0a 80 10 80 mov $0x8010800a,%edx +80107294: 0f 44 c2 cmove %edx,%eax +80107297: 83 ec 0c sub $0xc,%esp +8010729a: 50 push %eax +8010729b: e8 61 93 ff ff call 80100601 +801072a0: 83 c4 10 add $0x10,%esp for (int j=0; j +801072a8: 83 ec 08 sub $0x8,%esp +801072ab: 68 00 08 00 00 push $0x800 +801072b0: ff 34 9d 40 4d 11 80 push -0x7feeb2c0(,%ebx,4) +801072b7: e8 16 f8 ff ff call 80106ad2 for (int j=0; j +801072bc: 83 c3 01 add $0x1,%ebx +801072bf: 83 c4 10 add $0x10,%esp +801072c2: 81 fb c8 00 00 00 cmp $0xc8,%ebx +801072c8: 75 de jne 801072a8 // slabdump(); } slabdump(); -801075a8: e8 36 f9 ff ff call 80106ee3 +801072ca: e8 3d f9 ff ff call 80106c0c //alloc and free and alloc cprintf("==== TEST7 =====\n"); -801075ad: 83 ec 0c sub $0xc,%esp -801075b0: 68 72 83 10 80 push $0x80108372 -801075b5: e8 72 90 ff ff call 8010062c -801075ba: 83 c4 10 add $0x10,%esp +801072cf: 83 ec 0c sub $0xc,%esp +801072d2: 68 92 80 10 80 push $0x80108092 +801072d7: e8 25 93 ff ff call 80100601 +801072dc: 83 c4 10 add $0x10,%esp for (int j=0; j<16; j++) -801075bd: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp) +801072df: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp) { t[0][j] = (int*) kmalloc (TESTSIZE2); for (int k=0; k -801075d4: 8b 55 d4 mov -0x2c(%ebp),%edx -801075d7: 89 d7 mov %edx,%edi -801075d9: 89 04 95 c0 b5 10 80 mov %eax,-0x7fef4a40(,%edx,4) -801075e0: 83 c4 10 add $0x10,%esp -801075e3: bb 00 00 00 00 mov $0x0,%ebx +801072e9: 83 ec 0c sub $0xc,%esp +801072ec: 68 00 02 00 00 push $0x200 +801072f1: e8 a4 f6 ff ff call 8010699a +801072f6: 8b 55 d4 mov -0x2c(%ebp),%edx +801072f9: 89 d7 mov %edx,%edi +801072fb: 89 04 95 40 4d 11 80 mov %eax,-0x7feeb2c0(,%edx,4) +80107302: 83 c4 10 add $0x10,%esp +80107305: bb 00 00 00 00 mov $0x0,%ebx memmove (t[0][j]+k, &counter, sizeof(int)); -801075e8: 83 ec 04 sub $0x4,%esp -801075eb: 6a 04 push $0x4 -801075ed: 56 push %esi -801075ee: 89 d8 mov %ebx,%eax -801075f0: 03 04 bd c0 b5 10 80 add -0x7fef4a40(,%edi,4),%eax -801075f7: 50 push %eax -801075f8: e8 df c9 ff ff call 80103fdc +8010730a: 83 ec 04 sub $0x4,%esp +8010730d: 6a 04 push $0x4 +8010730f: 56 push %esi +80107310: 89 d8 mov %ebx,%eax +80107312: 03 04 bd 40 4d 11 80 add -0x7feeb2c0(,%edi,4),%eax +80107319: 50 push %eax +8010731a: e8 15 cb ff ff call 80103e34 counter++; -801075fd: 83 45 e4 01 addl $0x1,-0x1c(%ebp) +8010731f: 83 45 e4 01 addl $0x1,-0x1c(%ebp) for (int k=0; k +80107323: 83 c3 04 add $0x4,%ebx +80107326: 83 c4 10 add $0x10,%esp +80107329: 81 fb 00 02 00 00 cmp $0x200,%ebx +8010732f: 75 d9 jne 8010730a for (int j=0; j<16; j++) -8010760f: 83 45 d4 01 addl $0x1,-0x2c(%ebp) -80107613: 8b 45 d4 mov -0x2c(%ebp),%eax -80107616: 83 f8 10 cmp $0x10,%eax -80107619: 75 ac jne 801075c7 +80107331: 83 45 d4 01 addl $0x1,-0x2c(%ebp) +80107335: 8b 45 d4 mov -0x2c(%ebp),%eax +80107338: 83 f8 10 cmp $0x10,%eax +8010733b: 75 ac jne 801072e9 } } slabdump(); -8010761b: e8 c3 f8 ff ff call 80106ee3 +8010733d: e8 ca f8 ff ff call 80106c0c for (int j=10; j<12; j++) { kmfree((char*) t[0][j], TESTSIZE2); -80107620: 83 ec 08 sub $0x8,%esp -80107623: 68 00 02 00 00 push $0x200 -80107628: ff 35 e8 b5 10 80 pushl 0x8010b5e8 -8010762e: e8 70 f7 ff ff call 80106da3 -80107633: 83 c4 08 add $0x8,%esp -80107636: 68 00 02 00 00 push $0x200 -8010763b: ff 35 ec b5 10 80 pushl 0x8010b5ec -80107641: e8 5d f7 ff ff call 80106da3 +80107342: 83 ec 08 sub $0x8,%esp +80107345: 68 00 02 00 00 push $0x200 +8010734a: ff 35 68 4d 11 80 push 0x80114d68 +80107350: e8 7d f7 ff ff call 80106ad2 +80107355: 83 c4 08 add $0x8,%esp +80107358: 68 00 02 00 00 push $0x200 +8010735d: ff 35 6c 4d 11 80 push 0x80114d6c +80107363: e8 6a f7 ff ff call 80106ad2 } for (int j=13; j<15; j++) { kmfree((char*) t[0][j], TESTSIZE2); -80107646: 83 c4 08 add $0x8,%esp -80107649: 68 00 02 00 00 push $0x200 -8010764e: ff 35 f4 b5 10 80 pushl 0x8010b5f4 -80107654: e8 4a f7 ff ff call 80106da3 -80107659: 83 c4 08 add $0x8,%esp -8010765c: 68 00 02 00 00 push $0x200 -80107661: ff 35 f8 b5 10 80 pushl 0x8010b5f8 -80107667: e8 37 f7 ff ff call 80106da3 +80107368: 83 c4 08 add $0x8,%esp +8010736b: 68 00 02 00 00 push $0x200 +80107370: ff 35 74 4d 11 80 push 0x80114d74 +80107376: e8 57 f7 ff ff call 80106ad2 +8010737b: 83 c4 08 add $0x8,%esp +8010737e: 68 00 02 00 00 push $0x200 +80107383: ff 35 78 4d 11 80 push 0x80114d78 +80107389: e8 44 f7 ff ff call 80106ad2 } slabdump(); -8010766c: e8 72 f8 ff ff call 80106ee3 -80107671: 83 c4 10 add $0x10,%esp +8010738e: e8 79 f8 ff ff call 80106c0c +80107393: 83 c4 10 add $0x10,%esp for (int j=10; j<12; j++) -80107674: c7 45 d4 0a 00 00 00 movl $0xa,-0x2c(%ebp) +80107396: c7 45 d4 0a 00 00 00 movl $0xa,-0x2c(%ebp) { t[0][j] = (int*) kmalloc (TESTSIZE2); for (int k=0; k -8010768b: 8b 55 d4 mov -0x2c(%ebp),%edx -8010768e: 89 d7 mov %edx,%edi -80107690: 89 04 95 c0 b5 10 80 mov %eax,-0x7fef4a40(,%edx,4) -80107697: 83 c4 10 add $0x10,%esp -8010769a: bb 00 00 00 00 mov $0x0,%ebx +801073a0: 83 ec 0c sub $0xc,%esp +801073a3: 68 00 02 00 00 push $0x200 +801073a8: e8 ed f5 ff ff call 8010699a +801073ad: 8b 55 d4 mov -0x2c(%ebp),%edx +801073b0: 89 d7 mov %edx,%edi +801073b2: 89 04 95 40 4d 11 80 mov %eax,-0x7feeb2c0(,%edx,4) +801073b9: 83 c4 10 add $0x10,%esp +801073bc: bb 00 00 00 00 mov $0x0,%ebx memmove (t[0][j]+k, &counter, sizeof(int)); -8010769f: 83 ec 04 sub $0x4,%esp -801076a2: 6a 04 push $0x4 -801076a4: 56 push %esi -801076a5: 89 d8 mov %ebx,%eax -801076a7: 03 04 bd c0 b5 10 80 add -0x7fef4a40(,%edi,4),%eax -801076ae: 50 push %eax -801076af: e8 28 c9 ff ff call 80103fdc +801073c1: 83 ec 04 sub $0x4,%esp +801073c4: 6a 04 push $0x4 +801073c6: 56 push %esi +801073c7: 89 d8 mov %ebx,%eax +801073c9: 03 04 bd 40 4d 11 80 add -0x7feeb2c0(,%edi,4),%eax +801073d0: 50 push %eax +801073d1: e8 5e ca ff ff call 80103e34 counter++; -801076b4: 83 45 e4 01 addl $0x1,-0x1c(%ebp) +801073d6: 83 45 e4 01 addl $0x1,-0x1c(%ebp) for (int k=0; k +801073da: 83 c3 04 add $0x4,%ebx +801073dd: 83 c4 10 add $0x10,%esp +801073e0: 81 fb 00 02 00 00 cmp $0x200,%ebx +801073e6: 75 d9 jne 801073c1 for (int j=10; j<12; j++) -801076c6: 83 45 d4 01 addl $0x1,-0x2c(%ebp) -801076ca: 8b 45 d4 mov -0x2c(%ebp),%eax -801076cd: 83 f8 0c cmp $0xc,%eax -801076d0: 75 ac jne 8010767e +801073e8: 83 45 d4 01 addl $0x1,-0x2c(%ebp) +801073ec: 8b 45 d4 mov -0x2c(%ebp),%eax +801073ef: 83 f8 0c cmp $0xc,%eax +801073f2: 75 ac jne 801073a0 } } slabdump(); -801076d2: e8 0c f8 ff ff call 80106ee3 +801073f4: e8 13 f8 ff ff call 80106c0c for (int j=8; j<16; j++) -801076d7: bb 08 00 00 00 mov $0x8,%ebx +801073f9: bb 08 00 00 00 mov $0x8,%ebx { kmfree((char*) t[0][j], TESTSIZE2); -801076dc: 83 ec 08 sub $0x8,%esp -801076df: 68 00 02 00 00 push $0x200 -801076e4: ff 34 9d c0 b5 10 80 pushl -0x7fef4a40(,%ebx,4) -801076eb: e8 b3 f6 ff ff call 80106da3 +801073fe: 83 ec 08 sub $0x8,%esp +80107401: 68 00 02 00 00 push $0x200 +80107406: ff 34 9d 40 4d 11 80 push -0x7feeb2c0(,%ebx,4) +8010740d: e8 c0 f6 ff ff call 80106ad2 for (int j=8; j<16; j++) -801076f0: 83 c3 01 add $0x1,%ebx -801076f3: 83 c4 10 add $0x10,%esp -801076f6: 83 fb 10 cmp $0x10,%ebx -801076f9: 75 e1 jne 801076dc +80107412: 83 c3 01 add $0x1,%ebx +80107415: 83 c4 10 add $0x10,%esp +80107418: 83 fb 10 cmp $0x10,%ebx +8010741b: 75 e1 jne 801073fe } - slabdump(); -801076fb: e8 e3 f7 ff ff call 80106ee3 for (int j=0; j<8; j++) -80107700: bb 00 00 00 00 mov $0x0,%ebx +8010741d: bb 00 00 00 00 mov $0x0,%ebx { kmfree((char*) t[0][j], TESTSIZE2); -80107705: 83 ec 08 sub $0x8,%esp -80107708: 68 00 02 00 00 push $0x200 -8010770d: ff 34 9d c0 b5 10 80 pushl -0x7fef4a40(,%ebx,4) -80107714: e8 8a f6 ff ff call 80106da3 +80107422: 83 ec 08 sub $0x8,%esp +80107425: 68 00 02 00 00 push $0x200 +8010742a: ff 34 9d 40 4d 11 80 push -0x7feeb2c0(,%ebx,4) +80107431: e8 9c f6 ff ff call 80106ad2 for (int j=0; j<8; j++) -80107719: 83 c3 01 add $0x1,%ebx -8010771c: 83 c4 10 add $0x10,%esp -8010771f: 83 fb 08 cmp $0x8,%ebx -80107722: 75 e1 jne 80107705 -80107724: 89 5d d0 mov %ebx,-0x30(%ebp) +80107436: 83 c3 01 add $0x1,%ebx +80107439: 83 c4 10 add $0x10,%esp +8010743c: 83 fb 08 cmp $0x8,%ebx +8010743f: 75 e1 jne 80107422 } slabdump(); -80107727: e8 b7 f7 ff ff call 80106ee3 +80107441: 89 5d d0 mov %ebx,-0x30(%ebp) +80107444: e8 c3 f7 ff ff call 80106c0c cprintf("==== TEST8 =====\n"); -8010772c: 83 ec 0c sub $0xc,%esp -8010772f: 68 84 83 10 80 push $0x80108384 -80107734: e8 f3 8e ff ff call 8010062c -80107739: 83 c4 10 add $0x10,%esp +80107449: 83 ec 0c sub $0xc,%esp +8010744c: 68 a4 80 10 80 push $0x801080a4 +80107451: e8 ab 91 ff ff call 80100601 +80107456: 83 c4 10 add $0x10,%esp for (int j=0; j<24; j++) -8010773c: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp) +80107459: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp) { t[0][j] = (int*) kmalloc (TESTSIZE2); for (int k=0; k -80107753: 8b 55 d4 mov -0x2c(%ebp),%edx -80107756: 89 d6 mov %edx,%esi -80107758: 89 04 95 c0 b5 10 80 mov %eax,-0x7fef4a40(,%edx,4) -8010775f: 83 c4 10 add $0x10,%esp -80107762: bb 00 00 00 00 mov $0x0,%ebx +80107463: 83 ec 0c sub $0xc,%esp +80107466: 68 00 02 00 00 push $0x200 +8010746b: e8 2a f5 ff ff call 8010699a +80107470: 8b 55 d4 mov -0x2c(%ebp),%edx +80107473: 89 d6 mov %edx,%esi +80107475: 89 04 95 40 4d 11 80 mov %eax,-0x7feeb2c0(,%edx,4) +8010747c: 83 c4 10 add $0x10,%esp +8010747f: bb 00 00 00 00 mov $0x0,%ebx memmove (t[0][j]+k, &counter, sizeof(int)); -80107767: 83 ec 04 sub $0x4,%esp -8010776a: 6a 04 push $0x4 -8010776c: 57 push %edi -8010776d: 89 d8 mov %ebx,%eax -8010776f: 03 04 b5 c0 b5 10 80 add -0x7fef4a40(,%esi,4),%eax -80107776: 50 push %eax -80107777: e8 60 c8 ff ff call 80103fdc +80107484: 83 ec 04 sub $0x4,%esp +80107487: 6a 04 push $0x4 +80107489: 57 push %edi +8010748a: 89 d8 mov %ebx,%eax +8010748c: 03 04 b5 40 4d 11 80 add -0x7feeb2c0(,%esi,4),%eax +80107493: 50 push %eax +80107494: e8 9b c9 ff ff call 80103e34 counter++; -8010777c: 83 45 e4 01 addl $0x1,-0x1c(%ebp) +80107499: 83 45 e4 01 addl $0x1,-0x1c(%ebp) for (int k=0; k +8010749d: 83 c3 04 add $0x4,%ebx +801074a0: 83 c4 10 add $0x10,%esp +801074a3: 81 fb 00 02 00 00 cmp $0x200,%ebx +801074a9: 75 d9 jne 80107484 for (int j=0; j<24; j++) -8010778e: 83 45 d4 01 addl $0x1,-0x2c(%ebp) -80107792: 8b 45 d4 mov -0x2c(%ebp),%eax -80107795: 83 f8 18 cmp $0x18,%eax -80107798: 75 ac jne 80107746 +801074ab: 83 45 d4 01 addl $0x1,-0x2c(%ebp) +801074af: 8b 45 d4 mov -0x2c(%ebp),%eax +801074b2: 83 f8 18 cmp $0x18,%eax +801074b5: 75 ac jne 80107463 } } slabdump(); -8010779a: e8 44 f7 ff ff call 80106ee3 +801074b7: e8 50 f7 ff ff call 80106c0c for (int j=8; j<16; j++) -8010779f: 8b 5d d0 mov -0x30(%ebp),%ebx +801074bc: 8b 5d d0 mov -0x30(%ebp),%ebx { kmfree((char*) t[0][j], TESTSIZE2); -801077a2: 83 ec 08 sub $0x8,%esp -801077a5: 68 00 02 00 00 push $0x200 -801077aa: ff 34 9d c0 b5 10 80 pushl -0x7fef4a40(,%ebx,4) -801077b1: e8 ed f5 ff ff call 80106da3 +801074bf: 83 ec 08 sub $0x8,%esp +801074c2: 68 00 02 00 00 push $0x200 +801074c7: ff 34 9d 40 4d 11 80 push -0x7feeb2c0(,%ebx,4) +801074ce: e8 ff f5 ff ff call 80106ad2 for (int j=8; j<16; j++) -801077b6: 83 c3 01 add $0x1,%ebx -801077b9: 83 c4 10 add $0x10,%esp -801077bc: 83 fb 10 cmp $0x10,%ebx -801077bf: 75 e1 jne 801077a2 +801074d3: 83 c3 01 add $0x1,%ebx +801074d6: 83 c4 10 add $0x10,%esp +801074d9: 83 fb 10 cmp $0x10,%ebx +801074dc: 75 e1 jne 801074bf } slabdump(); -801077c1: e8 1d f7 ff ff call 80106ee3 +801074de: e8 29 f7 ff ff call 80106c0c for (int j=8; j<16; j++) { t[0][j] = (int*) kmalloc (TESTSIZE2); for (int k=0; k -801077d6: 8b 55 d0 mov -0x30(%ebp),%edx -801077d9: 89 d7 mov %edx,%edi -801077db: 89 04 95 c0 b5 10 80 mov %eax,-0x7fef4a40(,%edx,4) -801077e2: 83 c4 10 add $0x10,%esp -801077e5: bb 00 00 00 00 mov $0x0,%ebx +801074e6: 83 ec 0c sub $0xc,%esp +801074e9: 68 00 02 00 00 push $0x200 +801074ee: e8 a7 f4 ff ff call 8010699a +801074f3: 8b 55 d0 mov -0x30(%ebp),%edx +801074f6: 89 d7 mov %edx,%edi +801074f8: 89 04 95 40 4d 11 80 mov %eax,-0x7feeb2c0(,%edx,4) +801074ff: 83 c4 10 add $0x10,%esp +80107502: bb 00 00 00 00 mov $0x0,%ebx memmove (t[0][j]+k, &counter, sizeof(int)); -801077ea: 83 ec 04 sub $0x4,%esp -801077ed: 6a 04 push $0x4 -801077ef: 56 push %esi -801077f0: 89 d8 mov %ebx,%eax -801077f2: 03 04 bd c0 b5 10 80 add -0x7fef4a40(,%edi,4),%eax -801077f9: 50 push %eax -801077fa: e8 dd c7 ff ff call 80103fdc +80107507: 83 ec 04 sub $0x4,%esp +8010750a: 6a 04 push $0x4 +8010750c: 56 push %esi +8010750d: 89 d8 mov %ebx,%eax +8010750f: 03 04 bd 40 4d 11 80 add -0x7feeb2c0(,%edi,4),%eax +80107516: 50 push %eax +80107517: e8 18 c9 ff ff call 80103e34 counter++; -801077ff: 83 45 e4 01 addl $0x1,-0x1c(%ebp) +8010751c: 83 45 e4 01 addl $0x1,-0x1c(%ebp) for (int k=0; k +80107520: 83 c3 04 add $0x4,%ebx +80107523: 83 c4 10 add $0x10,%esp +80107526: 81 fb 00 02 00 00 cmp $0x200,%ebx +8010752c: 75 d9 jne 80107507 for (int j=8; j<16; j++) -80107811: 83 45 d0 01 addl $0x1,-0x30(%ebp) -80107815: 8b 45 d0 mov -0x30(%ebp),%eax -80107818: 83 f8 10 cmp $0x10,%eax -8010781b: 75 ac jne 801077c9 +8010752e: 83 45 d0 01 addl $0x1,-0x30(%ebp) +80107532: 8b 45 d0 mov -0x30(%ebp),%eax +80107535: 83 f8 10 cmp $0x10,%eax +80107538: 75 ac jne 801074e6 } } slabdump(); -8010781d: e8 c1 f6 ff ff call 80106ee3 +8010753a: e8 cd f6 ff ff call 80106c0c for (int j=0; j<24; j++) -80107822: bb 00 00 00 00 mov $0x0,%ebx +8010753f: bb 00 00 00 00 mov $0x0,%ebx { kmfree((char*) t[0][j], TESTSIZE2); -80107827: 83 ec 08 sub $0x8,%esp -8010782a: 68 00 02 00 00 push $0x200 -8010782f: ff 34 9d c0 b5 10 80 pushl -0x7fef4a40(,%ebx,4) -80107836: e8 68 f5 ff ff call 80106da3 - slabdump(); -8010783b: e8 a3 f6 ff ff call 80106ee3 +80107544: 83 ec 08 sub $0x8,%esp +80107547: 68 00 02 00 00 push $0x200 +8010754c: ff 34 9d 40 4d 11 80 push -0x7feeb2c0(,%ebx,4) +80107553: e8 7a f5 ff ff call 80106ad2 for (int j=0; j<24; j++) -80107840: 83 c3 01 add $0x1,%ebx -80107843: 83 c4 10 add $0x10,%esp -80107846: 83 fb 18 cmp $0x18,%ebx -80107849: 75 dc jne 80107827 +80107558: 83 c3 01 add $0x1,%ebx +8010755b: 83 c4 10 add $0x10,%esp +8010755e: 83 fb 18 cmp $0x18,%ebx +80107561: 75 e1 jne 80107544 } slabdump(); -8010784b: e8 93 f6 ff ff call 80106ee3 +80107563: e8 a4 f6 ff ff call 80106c0c } -80107850: 8d 65 f4 lea -0xc(%ebp),%esp -80107853: 5b pop %ebx -80107854: 5e pop %esi -80107855: 5f pop %edi -80107856: 5d pop %ebp -80107857: c3 ret +80107568: 8d 65 f4 lea -0xc(%ebp),%esp +8010756b: 5b pop %ebx +8010756c: 5e pop %esi +8010756d: 5f pop %edi +8010756e: 5d pop %ebp +8010756f: c3 ret -80107858 : +80107570 : #include "memlayout.h" #include "mmu.h" #include "spinlock.h" #include "slab.h" int sys_slabtest(){ -80107858: f3 0f 1e fb endbr32 -8010785c: 55 push %ebp -8010785d: 89 e5 mov %esp,%ebp -8010785f: 83 ec 08 sub $0x8,%esp +80107570: 55 push %ebp +80107571: 89 e5 mov %esp,%ebp +80107573: 83 ec 08 sub $0x8,%esp slabtest(); -80107862: e8 5a f7 ff ff call 80106fc1 +80107576: e8 67 f7 ff ff call 80106ce2 return 0; } -80107867: b8 00 00 00 00 mov $0x0,%eax -8010786c: c9 leave -8010786d: c3 ret +8010757b: b8 00 00 00 00 mov $0x0,%eax +80107580: c9 leave +80107581: c3 ret diff --git a/src/kernel.sym b/src/kernel.sym index 927a6f5..a447b32 100644 --- a/src/kernel.sym +++ b/src/kernel.sym @@ -1,547 +1,535 @@ -80100000 .text -80107880 .rodata -80109000 .data -8010b520 .bss -00000000 .debug_line -00000000 .debug_info -00000000 .debug_abbrev -00000000 .debug_aranges -00000000 .debug_str -00000000 .debug_loc -00000000 .comment -00000000 .debug_ranges 00000000 bio.c 00000000 console.c -8010b520 cons -8010b558 panicked -801003d4 consputc -80100548 printint -801078ec digits.1591 +8010ff20 cons +8010ff58 panicked +801003b8 consputc +80100522 printint +8010760c digits.0 00000000 exec.c 00000000 file.c 00000000 fs.c -80101019 bfree -8010108d balloc -801011b3 bmap -8010125c iget -80101ab6 namex +80100fc6 bfree +8010103a balloc +80101151 bmap +801011f7 iget +80101a17 namex 00000000 ide.c -80101d1c idestart -8010b580 idelock -8010b560 havedisk1 -8010b564 idequeue +80101c71 idestart +80112600 idelock +801125e0 havedisk1 +801125e4 idequeue 00000000 ioapic.c 00000000 kalloc.c 00000000 kbd.c -8010b5b4 shift.1430 -80107c20 shiftcode -80107b20 togglecode -80107b00 charcode.1431 +8011267c shift.1 +80107940 shiftcode +80107840 togglecode +80107820 charcode.0 80109200 normalmap 80109100 shiftmap 80109000 ctlmap 00000000 lapic.c -80102365 lapicw -80102379 fill_rtcdate +8010227f lapicw +80102293 fill_rtcdate 00000000 log.c -801026fd install_trans -8010278f write_head +801025ff install_trans +80102691 write_head 00000000 main.c -80102b03 mpmain -80102b42 mpenter +801029f2 mpmain +80102a31 mpenter 00000000 mp.c -80102c83 mpsearch1 +80102b6a mpsearch1 00000000 picirq.c 00000000 pipe.c 00000000 proc.c -80103204 wakeup1 -8010322e allocproc -8010b000 first.1633 -8010b5b8 initproc -80107efc states.1659 -80107ee4 states.1674 +801030dc wakeup1 +80103106 allocproc +8010b000 first.2 +80113594 initproc +80107c1c states.1 +80107c04 states.0 00000000 sleeplock.c 00000000 spinlock.c 00000000 string.c 00000000 syscall.c -80107f80 syscalls +80107ca0 syscalls 00000000 sysfile.c -80104308 argfd -8010436a fdalloc -8010439f create +8010412c argfd +8010418e fdalloc +801041c2 create 00000000 sysproc.c 00000000 trap.c 00000000 uart.c -80105343 uartgetc -8010b5bc uart +80105104 uartgetc +80113e00 uart 00000000 vm.c -80105f01 walkpgdir -80105f6e mappages +80105cb2 walkpgdir +80105d1f mappages 8010b420 kmap 00000000 slab.c 00000000 slabtest.c 00000000 sysslab.c -80100264 consoleread -80105e59 vector242 -801058b0 vector119 +80100254 consoleread +80105c0a vector242 +80105661 vector119 8010000c entry -80105790 vector87 -80105787 vector86 -801040e5 safestrcpy -8010463e sys_close -80105ec5 vector251 -8010b5c0 t -801057b4 vector91 -801055aa vector33 -80105a99 vector162 -8010387e yield -801152a0 log -80115260 kmem -80105cfd vector213 -8010584d vector108 -801053cd uartinit -80105604 vector43 -8010251e lapiceoi -80105abd vector165 -80105bad vector185 -80101fe1 ioapicinit -8010588c vector115 -80100e85 fileread -801058cb vector122 -80104f24 sys_sbrk -80115380 ioapicid -801067c3 nextPowerOf2 -80105a51 vector156 -801067a1 getnumofBits -80105e7d vector245 -80115254 ioapic -80105bdd vector189 -801054ce vector7 -801056a6 vector61 -80105559 vector24 -80105868 vector111 -80105c61 vector200 -801056dc vector67 -80106826 setBitmap -80106a5c getpageNum -80105979 vector138 -8010571b vector74 -8010370c sched -80103fdc memmove -80105682 vector57 -801042ad syscall -80105d09 vector214 -801057fc vector99 -801033cb cpuid -801018d4 writei -8010599d vector141 -80104ea5 sys_fork -8010e1e0 bcache -80105b11 vector172 -80105e4d vector241 -80103d5c getcallerpcs -80104b6e sys_mkdir -80105edd vector253 -801054aa vector3 -801054a1 vector2 -801019fb namecmp -80105da5 vector227 -80105cd9 vector210 -80104276 argstr -80105d81 vector224 -80103b97 ps -801055f2 vector41 -8010062c cprintf -80100d38 filedup -80101ce4 namei -8010553e vector21 +80105541 vector87 +80105538 vector86 +80103f2f safestrcpy +80104458 sys_close +80105c76 vector251 +80114d40 t +80105565 vector91 +8010535b vector33 +8010584a vector162 +80103727 yield +801126a0 log +80112640 kmem +80105aae vector213 +801055fe vector108 +80105186 uartinit +801053b5 vector43 +80102430 lapiceoi +8010586e vector165 +8010595e vector185 +80101f2a ioapicinit +8010563d vector115 +80100e35 fileread +8010567c vector122 +80104d02 sys_sbrk +80112780 ioapicid +80106531 nextPowerOf2 +80105802 vector156 +80106513 getnumofBits +80105c2e vector245 +80112634 ioapic +8010598e vector189 +8010527f vector7 +80105457 vector61 +8010530a vector24 +80105619 vector111 +80105a12 vector200 +8010548d vector67 +80106588 setBitmap +80106793 getpageNum +8010572a vector138 +801054cc vector74 +801035bd sched +80103e34 memmove +80105433 vector57 +801040d5 syscall +80105aba vector214 +801055ad vector99 +80103295 cpuid +80101843 writei +8010574e vector141 +80104c97 sys_fork +8010b520 bcache +801058c2 vector172 +80105bfe vector241 +80103bd3 getcallerpcs +80104974 sys_mkdir +80105c8e vector253 +8010525b vector3 +80105252 vector2 +80101964 namecmp +80105b56 vector227 +80105a8a vector210 +801040a2 argstr +80105b32 vector224 +80103a28 ps +801053a3 vector41 +80100601 cprintf +80100cf4 filedup +80101c41 namei +801052ef vector21 80100034 binit -80105b4d vector177 -801058a7 vector118 -801056f7 vector70 -801056ee vector69 -80105e1d vector237 -801056c1 vector64 -80105574 vector27 -80105931 vector132 -80106761 set_bit -80105bb9 vector186 -8010454e sys_read -80105d2d vector217 -8010415a fetchint -801064fe setupkvm -80106814 returnOffset -80104031 memcpy -80106487 freevm -801067fa getslabIdx -80105498 vector1 -80105b59 vector178 -801055d7 vector38 -801020bb kfree -80105e29 vector238 -80103366 mycpu -8010163b iput -80106b3c slabinit -8010593d vector133 -80105712 vector73 -801059c1 vector144 -80105ee9 vector254 -80101304 readsb +801058fe vector177 +80105658 vector118 +801054a8 vector70 +8010549f vector69 +80105bce vector237 +80105472 vector64 +80105325 vector27 +801056e2 vector132 +801064df set_bit +8010596a vector186 +80104370 sys_read +80105ade vector217 +80103f9c fetchint +80106291 setupkvm +8010657a returnOffset +80103e85 memcpy +8010621e freevm +80106564 getslabIdx +80105249 vector1 +8010590a vector178 +80105388 vector38 +80101ffc kfree +80105bda vector238 +80103236 mycpu +801015ba iput +80106873 slabinit +801056ee vector133 +801054c3 vector73 +80105772 vector144 +80105c9a vector254 +8010129f readsb 8010b004 nextpid -8010580e vector101 -80105ce5 vector211 -80102ce4 mpinit -80105b29 vector174 -80105e65 vector243 -80100cb7 fileinit -80103d3d initlock -80105901 vector128 -801066e2 copyout -8010575a vector81 -801038b4 sleep -80102543 microdelay -801054fc vector13 -8010564c vector51 -80105513 vector16 -80112b40 input -80105e41 vector240 -80105667 vector54 -8010552c vector19 -801057bd vector92 -80105e71 vector244 -801017a5 stati -80105991 vector140 -80104edd sys_kill -80105616 vector45 -80105748 vector79 -80102fb5 pipeclose -80105dbd vector229 -80105a69 vector158 -80104688 sys_fstat -801005c9 consolewrite -801055e0 vector39 -80105ae1 vector168 -80106da3 kmfree -801028ff end_op -801055bc vector35 -8010587a vector113 -80102177 freerange -801058e6 vector125 -80106395 allocuvm -8010689f getColumn -80105067 trapret -80105d21 vector216 -801056b8 vector63 -8010556b vector26 -80105c0d vector193 -801023f3 lapicinit -80105c31 vector196 -80105ccd vector209 -801054b3 vector4 -80105af9 vector170 -8010d1e0 stack -80105961 vector136 -801054e7 vector10 -80105ca9 vector206 -801015f2 iunlock -80104f6e sys_sleep -80105ef5 vector255 -80105b7d vector181 -80105694 vector59 -8010577e vector85 -80105775 vector84 -80105b95 vector183 -80105a75 vector159 -80105cf1 vector212 -801046e0 sys_link -80105628 vector47 -80105db1 vector228 -801055fb vector42 -80105883 vector114 -80106fc1 slabtest -801066aa uva2ka -80105b35 vector175 -801059b5 vector143 -80100cd5 filealloc -80103a3a wakeup -80105919 vector130 -80105e89 vector246 -801054de vector9 -801059a9 vector142 -80105805 vector100 -80105c6d vector201 -8010658b clearpteu -801033ea myproc -80105072 tvinit -80105039 sys_ps -8010569d vector60 -80105550 vector23 -80116a20 stable -801014fd idup -80105e11 vector236 -8010234c kbdintr -80104a0b sys_open -80105dd5 vector231 -801056d3 vector66 -80105586 vector29 -801017d4 readi -80105955 vector135 -8010078b consoleintr -80103a67 kill -80105736 vector77 -801013cd ialloc -80105b71 vector180 -80116a04 kpgdir -80105cc1 vector208 -801025e8 cmostime -80105476 uartintr -801057f3 vector98 -801057ea vector97 -80105b41 vector176 -80105c19 vector194 -801055a1 vector32 -8011793c end -80105c55 vector199 -80105925 vector131 -80105ed1 vector252 -80100f0e filewrite -8010548f vector0 -801068b6 clearBitmap -801041e7 argint -8010096d exec -801059cd vector145 -801045c6 sys_write -80103f04 release -8010419a fetchstr -80105844 vector107 -801055e9 vector40 -80103958 wait -80105817 vector102 +801055bf vector101 +80105a96 vector211 +80102bd3 mpinit +801058da vector174 +80105c16 vector243 +80100c7b fileinit +80103bb8 initlock +801056b2 vector128 +80106461 copyout +8010550b vector81 +80103759 sleep +80102451 microdelay +801052ad vector13 +801053fd vector51 +801052c4 vector16 +8010fe80 input +80105bf2 vector240 +80105418 vector54 +801052dd vector19 +8010556e vector92 +80105c22 vector244 +8010171c stati +80105742 vector140 +80104cc3 sys_kill +801053c7 vector45 +801054f9 vector79 +80102e9d pipeclose +80105b6e vector229 +8010581a vector158 +8010449e sys_fstat +801005a3 consolewrite +80105391 vector39 +80105892 vector168 +80106ad2 kmfree +801027f9 end_op +8010536d vector35 +8010562b vector113 +801020b4 freerange +80105697 vector125 +80106130 allocuvm +801065f9 getColumn +80104e35 trapret +80105ad2 vector216 +80105469 vector63 +8010531c vector26 +801059be vector193 +8010230d lapicinit +801059e2 vector196 +80105a7e vector209 +80105264 vector4 +801058aa vector170 +80116960 stack +80105712 vector136 +80105298 vector10 +80105a5a vector206 +80101575 iunlock +80104d48 sys_sleep +80105ca6 vector255 +8010592e vector181 +80105445 vector59 +8010552f vector85 +80105526 vector84 +80105946 vector183 +80105826 vector159 +80105aa2 vector212 +801044f2 sys_link +801053d9 vector47 +80105b62 vector228 +801053ac vector42 +80105634 vector114 +80106ce2 slabtest +8010642d uva2ka +801058e6 vector175 +80105766 vector143 +80100c95 filealloc +801038d7 wakeup +801056ca vector130 +80105c3a vector246 +8010528f vector9 +8010575a vector142 +801055b6 vector100 +80105a1e vector201 +80106316 clearpteu +801032b0 myproc +80104e40 tvinit +80104e0b sys_ps +8010544e vector60 +80105301 vector23 +80113e20 stable +80101488 idup +80105bc2 vector236 +8010226a kbdintr +80104815 sys_open +80105b86 vector231 +80105484 vector66 +80105337 vector29 +80101747 readi +80105706 vector135 +8010075c consoleintr +80103900 kill +801054e7 vector77 +80101360 ialloc +80105922 vector180 +80113e04 kpgdir +80105a72 vector208 +801024ee cmostime +8010522b uartintr +801055a4 vector98 +8010559b vector97 +801058f2 vector176 +801059ca vector194 +80105352 vector32 +80117960 end +80105a06 vector199 +801056d6 vector131 +80105c82 vector252 +80100eba filewrite +80105240 vector0 +8010660c clearBitmap +8010401f argint +80100936 exec +8010577e vector145 +801043e4 sys_write +80103d68 release +80103fd7 fetchstr +801055f5 vector107 +8010539a vector40 +801037f9 wait +801055c8 vector102 8010a000 entrypgdir 0010000c _start -80105679 vector56 -801056e5 vector68 -801054c5 vector6 +8010542a vector56 +80105496 vector68 +80105276 vector6 8010b48c _binary_initcode_end 80100000 multiboot_header -8010590d vector129 -80103677 scheduler -80101a14 dirlookup -80105c3d vector197 -80100d81 fileclose -80102880 begin_op -80105a21 vector152 -80106570 kvmalloc -80105dc9 vector230 -8010404b strncmp -801055ce vector37 -80105c9d vector205 -80105a8d vector161 -801161c0 tickslock -80103045 pipewrite -80104093 strncpy -80105700 vector71 -801065bb copyuvm -80112be0 ftable -80105a81 vector160 -80104211 argptr -80105d15 vector215 -80105a5d vector157 -801044fc sys_dup -80105871 vector112 -80100358 panic -801032ed forkret -80105b89 vector182 -801054f5 vector12 -80103f96 memcmp -8010227c kbdgetc -80105856 vector109 -80105535 vector20 -8010356c fork -8010565e vector53 -80105523 vector18 +801056be vector129 +8010352c scheduler +80101979 dirlookup +801059ee vector197 +80100d39 fileclose +8010277e begin_op +801057d2 vector152 +801062ff kvmalloc +80105b7a vector230 +80103e9b strncmp +8010537f vector37 +80105a4e vector205 +8010583e vector161 +801135c0 tickslock +80102f29 pipewrite +80103ee1 strncpy +801054b1 vector71 +80106342 copyuvm +8010ff60 ftable +80105832 vector160 +80104045 argptr +80105ac6 vector215 +8010580e vector157 +8010431f sys_dup +80105622 vector112 +80100340 panic +801031c5 forkret +8010593a vector182 +801052a6 vector12 +80103df2 memcmp +801021a9 kbdgetc +80105607 vector109 +801052e6 vector20 +80103425 fork +8010540f vector53 +801052d4 vector18 0000008a _binary_entryother_size -801153a0 cpus -80103cb0 releasesleep -801057d8 vector95 -80103e61 holding -801135e0 sb -80103e99 acquire -80105d99 vector226 -80101d00 nameiparent -8010563a vector49 -8010560d vector44 -8011529c lapic -8010573f vector78 -8010504f alltraps -80105b1d vector173 -8010589e vector117 -80105763 vector82 -80105d69 vector222 -801054d7 vector8 -80106ee3 slabdump -801059fd vector149 -8010147a iupdate +801127a0 cpus +80103b33 releasesleep +80105589 vector95 +80103ccd holding +801125b4 sb +80103d01 acquire +80105b4a vector226 +80101c59 nameiparent +801053eb vector49 +801053be vector44 +80112680 lapic +801054f0 vector78 +80104e1d alltraps +801058ce vector173 +8010564f vector117 +80105514 vector82 +80105b1a vector222 +80105288 vector8 +80106c0c slabdump +801057ae vector149 +80101409 iupdate 80109000 data -80103f4f memset -80105de1 vector232 -80102b60 main -801060d1 switchkvm -8010583b vector106 -80105d51 vector220 -801057ab vector90 -80105aa5 vector163 -80105df9 vector234 -80102a45 log_write -80103c5a acquiresleep -80104836 sys_unlink -801056af vector62 -80105562 vector25 -80105c49 vector198 -801058b9 vector120 +80103daf memset +80105b92 vector232 +80102a4b main +80105e81 switchkvm +801055ec vector106 +80105b02 vector220 +8010555c vector90 +80105856 vector163 +80105baa vector234 +8010293b log_write +80103ae1 acquiresleep +80104644 sys_unlink +80105460 vector62 +80105313 vector25 +801059fa vector198 +8010566a vector120 8010b48c _binary_entryother_start -801021bf kinit1 -80105643 vector50 -8010550a vector15 -80105a15 vector151 -8010576c vector83 -801057a2 vector89 -80105799 vector88 -80105129 trap -8010500b sys_uptime -80105b65 vector179 -801055b3 vector34 -8010561f vector46 -80105949 vector134 -80105d75 vector223 -80116200 idt -80105d39 vector218 -80103334 pinit -80106302 deallocuvm -80106fab numobj_slab -80105d8d vector225 -80102504 lapicid -80105bc5 vector187 -801034fd growproc -80103cef holdingsleep -8010678b clear_bit -80115920 ncpu -8010558f vector30 -80103412 userinit -80106888 getRow -801000ae bread -801058f8 vector127 -80103135 piperead -80116a00 ticks -80105c01 vector192 -80105ac9 vector166 -80100925 consoleinit -80106777 get_bit -8010572d vector76 -80105724 vector75 -80101e54 ideintr -80105c25 vector195 -80105a09 vector150 -8010568b vector58 -80105ea1 vector248 -801058d4 vector123 -801057e1 vector96 -80105598 vector31 -80105c85 vector203 -80105985 vector139 -80105a2d vector153 -80105ab1 vector164 -80103adf procdump -801058c2 vector121 -80105370 uartputc -801054bc vector5 -80105ad5 vector167 -80105a45 vector155 -80105ead vector249 -801001cd brelse -80105eb9 vector250 -801069c5 checkNewpage -801058dd vector124 -8010585f vector110 -80105c91 vector204 -8010152c ilock -80104d09 sys_exec -8010596d vector137 +801020f8 kinit1 +801053f4 vector50 +801052bb vector15 +801057c6 vector151 +8010551d vector83 +80105553 vector89 +8010554a vector88 +80104eef trap +80104de1 sys_uptime +80105916 vector179 +80105364 vector34 +801053d0 vector46 +801056fa vector134 +80105b26 vector223 +80113600 idt +80105aea vector218 +80103208 pinit +801060a1 deallocuvm +80106cd0 numobj_slab +80105b3e vector225 +8010241a lapicid +80105976 vector187 +801033ba growproc +80103b6e holdingsleep +80106501 clear_bit +80112784 ncpu +80105340 vector30 +801032d3 userinit +801065e6 getRow +801000aa bread +801056a9 vector127 +80103010 piperead +801135a0 ticks +801059b2 vector192 +8010587a vector166 +801008f2 consoleinit +801064f1 get_bit +801054de vector76 +801054d5 vector75 +80101da5 ideintr +801059d6 vector195 +801057ba vector150 +8010543c vector58 +80105c52 vector248 +80105685 vector123 +80105592 vector96 +80105349 vector31 +80105a36 vector203 +80105736 vector139 +801057de vector153 +80105862 vector164 +80103974 procdump +80105673 vector121 +8010512d uartputc +8010526d vector5 +80105886 vector167 +801057f6 vector155 +80105c5e vector249 +801001c1 brelse +80105c6a vector250 +80106700 checkNewpage +8010568e vector124 +80105610 vector110 +80105a42 vector204 +801014b3 ilock +80104b03 sys_exec +8010571e vector137 8010b460 _binary_initcode_start -80104145 swtch -80105e95 vector247 -80105547 vector22 -80105c79 vector202 -80105fe6 seginit -80101781 iunlockput -80105709 vector72 -80105670 vector55 -801058ef vector126 -801056ca vector65 -8010557d vector28 +80103f87 swtch +80105c46 vector247 +801052f8 vector22 +80105a2a vector202 +80105d9a seginit +801016fc iunlockput +801054ba vector72 +80105421 vector55 +801056a0 vector126 +8010547b vector65 +8010532e vector28 8010b516 _binary_entryother_end -80105aed vector169 -8010018e bwrite -80105ded vector233 -80106c67 kmalloc -80105101 idtinit -801037b3 exit -80104ecc sys_wait -80104eb6 sys_exit -80101c2b dirlink +8010589e vector169 +80100186 bwrite +80105b9e vector233 +8010699a kmalloc +80104ecb idtinit +80103660 exit +80104cb6 sys_wait +80104ca4 sys_exit +80101b8c dirlink 0000002c _binary_initcode_size -801059e5 vector147 -80103c23 initsleeplock -80106905 checkEmpty -80101ddb ideinit -80106252 loaduvm -80105829 vector104 -80107858 sys_slabtest -80105895 vector116 -80115940 ptable -80102084 ioapicenable -80103dfd popcli +80105796 vector147 +80103aae initsleeplock +8010664c checkEmpty +80101d30 ideinit +80105ff6 loaduvm +801055da vector104 +80107570 sys_slabtest +80105646 vector116 +80112d20 ptable +80101fc9 ioapicenable +80103c6d popcli 8010b008 vectors -80105655 vector52 -8010551c vector17 -80105ba1 vector184 -8010411f strlen -80104e05 sys_pipe -8010133c iinit -80102ea0 picinit -80105cb5 vector207 -801061e5 inituvm -80105be9 vector190 -80105e35 vector239 -801057cf vector94 -801057c6 vector93 -801027e9 initlog -80105bd1 vector188 -80105631 vector48 -80101ef7 iderw -80105d45 vector219 -801059f1 vector148 -80105d5d vector221 -80102219 kalloc -80113580 devsw -80104f10 sys_getpid -80105751 vector80 -80105b05 vector171 -80105a39 vector154 -801055c5 vector36 -80102eb6 pipealloc -80105e05 vector235 -80105832 vector105 -80104c66 sys_chdir -80113600 icache -801059d9 vector146 -80105bf5 vector191 -80105820 vector103 -80104bd4 sys_mknod -80102548 lapicstartap -801060e3 switchuvm -80103dbc pushcli -801021f5 kinit2 -801054ee vector11 -80105503 vector14 -80100e3a filestat +80105406 vector52 +801052cd vector17 +80105952 vector184 +80103f65 strlen +80104bfb sys_pipe +801012d3 iinit +80102d90 picinit +80105a66 vector207 +80105f8d inituvm +8010599a vector190 +80105be6 vector239 +80105580 vector94 +80105577 vector93 +801026eb initlog +80105982 vector188 +801053e2 vector48 +80101e44 iderw +80105af6 vector219 +801057a2 vector148 +80105b0e vector221 +8010214a kalloc +80110900 devsw +80104cf2 sys_getpid +80105502 vector80 +801058b6 vector171 +801057ea vector154 +80105376 vector36 +80102da2 pipealloc +80105bb6 vector235 +801055e3 vector105 +80104a64 sys_chdir +80110960 icache +8010578a vector146 +801059a6 vector191 +801055d1 vector103 +801049d6 sys_mknod +80102452 lapicstartap +80105e8f switchuvm +80103c31 pushcli +8010212a kinit2 +8010529f vector11 +801052b4 vector14 +80100dee filestat diff --git a/src/lapic.d b/src/lapic.d new file mode 100644 index 0000000..6e62387 --- /dev/null +++ b/src/lapic.d @@ -0,0 +1,2 @@ +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/src/lapic.o b/src/lapic.o new file mode 100644 index 0000000000000000000000000000000000000000..d16567560665f70184049b88e60eb7cca0827530 GIT binary patch literal 10180 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 O?G~fox2+M-+Wj|&>k?c5 literal 0 HcmV?d00001 diff --git a/src/log.d b/src/log.d new file mode 100644 index 0000000..04c8930 --- /dev/null +++ b/src/log.d @@ -0,0 +1,2 @@ +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/src/log.o b/src/log.o new file mode 100644 index 0000000000000000000000000000000000000000..fd5fcdb38410ba936c0ce57b781da055a21fb13a GIT binary patch literal 9912 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 IaIoxu0Hzd$L;wH) diff --git a/src/mp.d b/src/mp.d new file mode 100644 index 0000000..0714441 --- /dev/null +++ b/src/mp.d @@ -0,0 +1,2 @@ +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/src/mp.o b/src/mp.o new file mode 100644 index 0000000000000000000000000000000000000000..cd0fae476b34bf8c181aebaab55a82e395e8501f GIT binary patch literal 11232 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 Oy@I%ZW{rEv+Wj9k>q;^J literal 0 HcmV?d00001 diff --git a/src/picirq.d b/src/picirq.d new file mode 100644 index 0000000..5233e7e --- /dev/null +++ b/src/picirq.d @@ -0,0 +1 @@ +picirq.o: picirq.c /usr/include/stdc-predef.h types.h x86.h traps.h diff --git a/src/picirq.o b/src/picirq.o new file mode 100644 index 0000000000000000000000000000000000000000..a19f7b506dede7571ddcf6aefd0c5d3f4d9f0114 GIT binary patch literal 2624 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 UaG?Dc*`00>;w7c=Pl4V40-=!i6951J literal 0 HcmV?d00001 diff --git a/src/printf.d b/src/printf.d new file mode 100644 index 0000000..ddd3a8d --- /dev/null +++ b/src/printf.d @@ -0,0 +1 @@ +printf.o: printf.c /usr/include/stdc-predef.h types.h stat.h user.h diff --git a/src/printf.o b/src/printf.o new file mode 100644 index 0000000000000000000000000000000000000000..6fdc87b1fe14da182aa2d1c997deaf56e9ee67e6 GIT binary patch literal 7104 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 p8 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 X+k+z@amzc-E-?%5?E)iUVE6w3n>E*- literal 0 HcmV?d00001 diff --git a/src/slab.d b/src/slab.d new file mode 100644 index 0000000..9bb9eac --- /dev/null +++ b/src/slab.d @@ -0,0 +1,3 @@ +slab.o: slab.c /usr/include/stdc-predef.h types.h defs.h param.h \ + memlayout.h mmu.h spinlock.h slab.h \ + /usr/lib/gcc/x86_64-linux-gnu/11/include/stdbool.h diff --git a/src/slab.o b/src/slab.o new file mode 100644 index 0000000000000000000000000000000000000000..d352d197abfbb61d0b8736d1070b88363a8c0c17 GIT binary patch literal 19144 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 I5zw>yALjvXW&i*H literal 0 HcmV?d00001 diff --git a/src/string.d b/src/string.d new file mode 100644 index 0000000..68931ed --- /dev/null +++ b/src/string.d @@ -0,0 +1 @@ +string.o: string.c /usr/include/stdc-predef.h types.h x86.h diff --git a/src/string.o b/src/string.o new file mode 100644 index 0000000000000000000000000000000000000000..675814d89de84a935046a3d9c9a86464f3a9597f GIT binary patch literal 7056 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 N>wX}yZ8L7sy5A{ZSO5S3 literal 0 HcmV?d00001 diff --git a/src/syscall.d b/src/syscall.d new file mode 100644 index 0000000..4649283 --- /dev/null +++ b/src/syscall.d @@ -0,0 +1,2 @@ +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 diff --git a/src/syscall.o b/src/syscall.o new file mode 100644 index 0000000000000000000000000000000000000000..e92cd87223986e8e700f3fe314ec51a80073a739 GIT binary patch literal 8528 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 literal 0 HcmV?d00001 diff --git a/src/sysproc.d b/src/sysproc.d new file mode 100644 index 0000000..2f26f0c --- /dev/null +++ b/src/sysproc.d @@ -0,0 +1,2 @@ +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/src/sysproc.o b/src/sysproc.o new file mode 100644 index 0000000000000000000000000000000000000000..307d9d733f8ff9fe184a707a76b56cb1b1c41964 GIT binary patch literal 6944 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 literal 0 HcmV?d00001 diff --git a/src/trap.d b/src/trap.d new file mode 100644 index 0000000..c48ab89 --- /dev/null +++ b/src/trap.d @@ -0,0 +1,2 @@ +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/src/trap.o b/src/trap.o new file mode 100644 index 0000000000000000000000000000000000000000..83e3636ac2a17f73539ef30dfe7c24e90cf76781 GIT binary patch literal 10712 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 VQ7MR6B>pSqyf(mJ*+~A;yx$PQY{~!t literal 0 HcmV?d00001 diff --git a/src/uart.d b/src/uart.d new file mode 100644 index 0000000..d156629 --- /dev/null +++ b/src/uart.d @@ -0,0 +1,2 @@ +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/src/uart.o b/src/uart.o new file mode 100644 index 0000000000000000000000000000000000000000..7fd1910f80b77beab5d55ce81e7299e1c828e93d GIT binary patch literal 6356 zcma)AdyG`o9X{tiW@mTy!9LmLQDzl_qC4!u1`t?5DDo^&3AhLw_AbU{Tu|Q%UR}4IcV-8hCOygd zeZTj4+;h%7_wHS?>Q=3_vPCObjY>)l*9De#1J|i0)u;}17$H}8`g0c^&+6Qm)1Q*7 zI(g>osVgW#t>c>YhySu+op?v{tp|q7x0PME495enj(KS>vJElQ;g5!&jpl2vvL5)m z&VTUWlCWuDYGB71TAA_LEl3|#`A+J}^fKN>kzP7Av<^3rFQGjfWIQjph{If12VCitd#lk2wbnE z7OJv-5N9@s>y*%?tcUzE5*=O#sPg<|DyJfwj4Bi-IR2x6F{?pzb@>{A&nZwPhd>%0 zq)ehB4}nzEUXlg5<3}JqMO88%4wT^-VeP%W-O|zWe6uglQ2ZzT4wy4!B3)& z{x^b|hN@Kf36OTSxe-+#^Bkq>x|MFPWPhB8Re4g)Dk0C2%|NYZ6P#Ji=Jnk1L$*uz zK<-6tFm1D)eUSE`BGWX8+relOj%U96Ap;jde*_{YR?mj;7?`7|%3BHYT{1~wRCo%w zy8R%Wa(#?R%Li3M=>~{DKs}CXn&K04NGed9+|3x4X^LCm1ys}2t6*M14MNzcL&A^= z?ssg+?;!pb)r9;J%sZ$-$WvrUBB&GHS8T}NAYMQVJCu$IKf(%I+>X+P)ZHR-( z;7&3j6<{J%n6aEBLlQ=voQmPN>v4DebGaT4(GFi?F$ziMp-!HhpSQ zq*~X6I-B*z$n6nsGk3CzL~f3_*pc2cb)Vh~o$ssVfKdBrd`V0%XmTs(Hhc3TH#JvJ zZJOW2=&)65s`b<+W?$I2+ZaoI#Rvzc2=kRS7}=$3BNdS<6>0X!mA5N5Jhz!y;3|Et zVEZ^Ls`Zr0+K4-8{3K={gV9t;r}41IAhL39L;@Revem1pP0U#n)7C;oanEY6o{b16 z16vdQ4Hu`XFSxBA+i9FQ=7xw~k3NhoP9HUM*$9;+V2e@YY%1;^9?lUwVqbBUU_EHB zw8|^{+{M1vUR9M|OI2-?SN3V3YHETCx}f6JUFozQ_f~c~ZO6UNWGK8Zt0o-xlIc+R z8-`177ae1?H@m|m_c}M(MxgBI&}+R-o7k4}w(rIn88AVkT!7w1eaH!6Y2!fh4mnRc zdYy8VcSs-AXx_43*+p~``lI?O?UwE<@Lt)a!0?nlp`H0gPc~=(0VniHn~1De_F3S6 zQV(fortv3R$TOtRS%0!#+2z3hoPI-NCfEnEl1F=Q=rQ*~;3S%7rYC7E zNag5BPL+Q>IMqtR4X(_cY6&@CE8q0MJ%cUl*7|-35PHOOeC;j-TUXZ`(w_ExcODI^ zjA3YRk)_P-(0=*SK40Gva#K+xsWVyh5x*gHr}1A=|$UBU@AM!XO-&>H~Qf)N(QB8TE*+NZW&c;Iut@6WW zQlB;kMA=6y@_16>Q1M!>HY+o�hFrYC4_ zFc0(6)$5~++h#}G+G6do)@aMX%o!lLd@9k=n@A-x$!>`8Om|;La@L$#(U#uctzFTU zHEq$Bo>aP}E1&E~{{tbLgLkea-k*$Tld0Z7nI1^yT6!|^fkew-8Z9R>);ZpNPs?B? zolA7*(xMzpCSZ+cccr@fGU-%0pKZyfb|h0wVvF`t==XArobIz<-pUUkTOk{yu6FmgAbn)W3(d*WmWHK==Z9(p~ zug{nfYi++?)ZDanBq)0KZA$M6>+$8D_f2g2G0^cyVKF-%I2n~2pEB>MYDH!EerHjI zzvuz?fafedd&{|7eu;Scb)xP^<()v?a+Ti`){pu3q1ron!SAcg0>c*y&m&tr_2CuE z6R-aIqwJY06m9IUgOjY90t!>(rD1qWT%3Q!#WnYxQH@*37U*1adoH%~zB*c5^J!2l zb4Evti{3Oqv~yX59`VD#7JBpBz|JAR14)(OGvCNgGina%Ts z{bn}uRa=+tX6F^}LNvfbUgN!bgWyu?s+39yzAgGsC}Yz9O&Qn6Dm*|3_p=yZDo8Su zGA<&x{U{B>8RX|o4G{w8hd7Q1|7(c2i*U~97ZaQ-xIl2F;9Y|37yY*h?jWN7{3fFQ zF~Mg9UlKe+M7!p*1NeKce^>B=;IQCFMEGA4 z)GLBD{5-<=8U!Z^UMtu_gzpT&C8A$0c$?q`!7W7i zCj@tjevjb&f`oF}+Ya0L-@QJ@2C z7u+m(P*BCPy9V%X1?DmV_E|2I=#S+RJ98>#ZYr^^Y*xi^y}-4F-fgiqi168(=*sur zolNzl;c57IS63!+Z?UyM-QAze=9r)m5zoX^y$Ps-piHXwzg+s0sf4woNy}1ww~@Qk z0|NW{J^DVB{xwmePyu!bKlQdss**oxad zD(^71OTBG358lRrRn;&?$w;xb?U0M}9Ya38znKrOyF$K$;B5?8)rO#nWTaTzU}8#QOaQ*OWJS literal 0 HcmV?d00001 diff --git a/src/ulib.d b/src/ulib.d new file mode 100644 index 0000000..61f575e --- /dev/null +++ b/src/ulib.d @@ -0,0 +1,2 @@ +ulib.o: ulib.c /usr/include/stdc-predef.h types.h stat.h fcntl.h user.h \ + x86.h diff --git a/src/ulib.o b/src/ulib.o new file mode 100644 index 0000000000000000000000000000000000000000..7b7a3c7ea73095cc73a7d0fc29219d869a3690af GIT binary patch literal 6708 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 GmHHp-q0%1! literal 0 HcmV?d00001 diff --git a/src/umalloc.d b/src/umalloc.d new file mode 100644 index 0000000..cc1d152 --- /dev/null +++ b/src/umalloc.d @@ -0,0 +1,2 @@ +umalloc.o: umalloc.c /usr/include/stdc-predef.h types.h stat.h user.h \ + param.h diff --git a/src/umalloc.o b/src/umalloc.o new file mode 100644 index 0000000000000000000000000000000000000000..d4ee92cbc4524d02ef43c3db5d90a5360058467b GIT binary patch literal 4988 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 GcK-$grlL{+ literal 0 HcmV?d00001 diff --git a/src/user/_cat b/src/user/_cat index 991cad3289bce22a8d304ee281ad9417b33aaa23..48cf608f393a6e6a6ba6c68349b665423b12434d 100755 GIT binary patch literal 14644 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 diff --git a/src/user/_echo b/src/user/_echo index 66e18e4893ce789fabc323f63546fd107e761dbf..9603a5141824fb402105adf9422d54700037cbfe 100755 GIT binary patch literal 13792 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 literal 14748 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 literal 15532 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ⅅ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 literal 17032 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

&7fI2O*gwHpx5ii=1hR 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 amZLV(25`H4_NB{xF+qr5xk_kVx&H(YtdZgX literal 14916 zcmb7L3wTu3wcdNqV`h>`W|GN+7_?DDK*)q3BEg`5L?J@uArgv+c}yOVOw!CucwABH zKxG>9Y1&$QD>Z7{+lP8@A6II%)krA#_+H0-7_S$RjeX`GRQ{9TorIf-c9-#?`nhWNki>#KpqC$AYbP*Ck)t+z^fIIy{ zYzKHz*8!{lkZ5r=XR2%u0p1Co_2IyZbM@5AZ;gHWqjl*&tiNXM>eTC#`fK_(=&2F? zF*=YMlQ&kRH@%#CJur5`=%5FjL!rIH+bdFsC1h&ePrh_=X6kic`;Sc_ws=Ob)PxxI zQ0#TRzwYI++3n9+4Rg={)zMdAl|7@swf!r7{hI<0)3e}#B5hxhObyFD&nEwresbfc z5nGBv>jJ?8a?fz0V7@1rmwG~`4obyHz8O3)96V4s<7ifVop1L7ktkADVJ`i|?plvX zzMFn>)5wq5)5&*j!|VIk`O?SxSBCoQ0w2Beo%GSoStE76;DMFsG_>d0MDhGzB!aM{ zsN|oN;Y}k7oqXT1b$CckzDL=`z^+%*n~tSMRrGEQ z2M^S}x^L-OW3@R6y*4lT3yAmE9XqU>BK_7t^nW*Am-U5~eOts>(l`1?*tWudZh8dV zv1DM?=o?_B52q)eJNg5wnHElMyl&ITV`C^M-^xUL9R}qYSax*x2mWp6s8}G51A%n# zvEhLg%Z{?K;ppxU{e7b<{#La9*H*t~Ek=il=-(9D`}~c?@}2Zs&{kooAKSNVtY#$n zX8J95`!Mt7XNyK2MiwZHnOB%eNxorYCL!r!8zWH^%>*SsXyXDK7uwioeDj zdO0@EwQ<14c{a|safyvfEo`lT)a$kBx*r$=gj(f7O5u3?ez9bS6jiOPX(p1tqgc>ch(7akwj zbz&fSJa|CcS9e?`#5H5dL!%%3b!;qsB6U(?R%=crUvQ=#9n${EfeGn_j67@4^T9p$ zGm{R>fx1w-?%3l>v~u63SC!#`x>r{*S-uL}FniKSjZICQ1L@#_>&B=YgL3e(=Yj`D z_KqcAN}ZaTJd{3i^0%o|Er|`EdFg#vOZ~Ygu`_il9^CU)Qm2}OdtO(Sslh!#XdkY7 zb?Ugjs?itwKNQ#kr>y?ZwEDNa+l~EWi~JF1rhnJ5{?h(B-{`Fz{HfHijxoSdCHUIa zNLk8?A2B;Jve%zZb~D z-@dwRkk*gx{0ll8L0~lW4}}*kAC96k_Uv^_Go*#INe%l}jlRh!D>=jp zjvTWb`BnS}>4P<@&*U4BT|Zj;kqT$()L3#@ExVK77VF}TZP5i4U0Yi^dMjExI-~JO zB$6W(y`W-hyrQ)c%$ABocSUn=v@sFQ5z}MI&dwQdd3N=j3+7%p@1prNi9fF_3^;abY-}e5mIb6(9x^;hu{5Y9d(4p6le{5hdXn2i znkSj4fXE8KSs#pzod+!H@_lTK6_BZN%e1LxQ32lVfGV_~ z?{43iLxIKI)+zx13Ahk4<-pl~ZqZgBvHGb1`vhPXWU7HPGEG@KToxYzY9O=GEpz!T z+Gq8Y;i(^4e0Z^Ckh0SelXl21bIUIItd`P~Ih1r9JQwX(Lv{~jFLlcz4lzi&bnH`5^AGbdj^7lagxLe-wXUBN?D=xciLB;fSP03gySy2<28<|~M zom5oyjdNy4X3vexnPKs1%*r_)pVph4stA>TR#oMYM|dzY9;!mM{g&gj3v<>ZI&sok z?F}%d-dM)9e?HS5!WrFUb*LmP{cTv=mVPfJm%Hr$6;f7Ipoilr&4&&TKpv zV0H-U^HPfIj(O?jyYg>X*?`AutXzi&w=*y2R&nT~+TeWpQB-~UFY)w9a~^u|Ps4-Y z2^;>Ezy!|}(@&oW9@7x5a7q_ zwpfwTzYJE9Zuss6&v+VyZu(glW=phB=w9!)P}j|lShvu9zNsL5#(z`Hufzhz^CWUq zOGs!|puJY0eH+jwua|0Qm}q(=_mlEJpjv{g_kgA`W1l4)ARKzFoO9yL#tU44zZrEFT~ULJv`(( zN$aDia<`ECZ$T|L4t^o6eGU7* z6|}riG6;15ZlH4iHbl3eDcOpa09)95SL1e&#T+BMN6KEL`uZu_9|Z)O5xI+U*zSkA z7Z3(#zK?P83~nw=0&il^zFySiEY)Wbs@6OnfC9rctBBz`7t~~OU}Dx}nz#`q{UQDBt)9GGC_8f8pEf{|m0bD-oAXJYue^rBDh<=n4d zKsz^_SApg37s1g*wUSah@;i33v$d~fPbZgTvxbey9^6OCLDJu7; zVc+EHnI2e4w+4l`wF`loKAA0H#GnA+^CM8_`|kp)3gk3^ANe%XOPv&`W^%9!X6BF+ z#h%&>$YIjTnR(<5fZhS{H)39A`R_$bxrulHayi}40@R}bSk6;hcHn1VeiIU30|X9& zcnXyxfV|&>I6)PqdEcQ57qN>e>sAp zlm{T2c9j1el?SLiZ=CW9D)XU~SNNGlO8GEk4?4=DsJueuO^$N@9(emr2=@Yla+NkH z%%EH?7l_bz?G_hz5$x+jT%W6?J7R3=Wr3r{(~kG>1kIobs3T0kk2ZU;aWImNI7kCuLb zn)3Tlxd)JU3&hlvi%A?fdoHVnUdW?U#<(U`&IQ^M3XQrtP0xcY#{3z?t8Y1D;p1_XUF*UL7p_n^_n8X_0+UyYi`(P_f7fab#`tmmo;EDrLb%Fy_i zW9~|}mV|z97Qxt~{vjY3 zrNELPd1vL|)CL4EC+{*fqjAt(fDm67xKqeUG`>Dqz&DZm(ee#IA(`PHgJbfD1B4HQ zxDb_UKv4>czXPM_0aPNej#8|bT+4o{B>R@nqPaAd1RbQali+E!pUg?^sLoMNW4I^4 zu~$pkr>R~hIh%Y_mHTP=3~qsC0S1@d_i=x92I{=Tv}FJ7Rz@maEPaI ztHjks)-`ykhozREn`?EYyvcKk&c~QdFfy)?;mr=r_csTI)#bRA83Ybr7Y`Yc3r5Dg zJ^H|DMxVzaV@{lr2hYP$L+1%bp+KSFZ2-nDmm*jF58ge(}u7}-X zLsUD#FNq)~&SX{OGAgBRw~=n{4zcx|b{0g)L=P}ko{uy^{{53PlMS;mKFs5?2j`h9 zei)y39K%W{ANayQE)rHl4tVxZGgFj%ngB5d0au9fvH{LV6)9I8rcCg2$WhOv!6oQ0 z}L4osA@^!W^IB z?$w&ta(A$BGMsiIKfcQU|K;SGw6JuqtB)_Ei3`nFI$m!(N3ImSGiT^P<>Vu;Uif@^E%JWfnb_ zliMLKr*YfmxcoT7Jz;i!l%HnSZbiat*55Mn!~8sfFM-(X1wba_(Owb3iN%}F2wn?> zAS=?2KMAlKOJNX;Nv1S3)AwkR;Wrl>##-|_qYx}#t>L}fm?S*9$BY|g3QHqj;aWqp zv0*m-!SHVKEi|-69s|9{d1i<@x-iink?ibff*&Z`=g)&1D2W|CxPMjEc%m_3)od@> zuDs-*TW2UQj~9gvA8H1=m*xh;M_gbOC{h|h;(CkQib1U~@G2BB7b)GR@M?k~s*wdO zLBqV#Fu}>Kh1H9lM(X8&TT*Kj)f%$OoTK!Iii~_l3Pu`~0~#DCf+4NIC?-M+!=ss2 zcr-I&$POcT1#~{83`+9?W$8iPW5^OiD>5IzDDvo}d97+WZur?ntwGPcVC9+1jeKA~ zjRJC38ghe?Q`rC|%h)^NA{COH4Tc&O#*xR-*nx)50SVuS!`%T4)4rg~ko4^+8ULG(sT42r0T=kD)W0a%znb z5{hwN?rN7C4dZH9+c+*hzO%zcVOoNsw*@^{D;xe=Bfr)NV1CVuRd;H7>+!`{%4J9q zP4IT`G-(s$1z6N=&CA1_*tOr5rPe9%{agNV71{CeyQBfOwf2blWCM~v*OWIKd0Ht3WNKUQ9>>HA2QzlJQ3O+dOBlF~O3UEU z93zN^JPnzbuk|(n67ipsXO zmZplztEww1TVvgoP05bVL`Tdb;t5D6DjPdH8siB1+MJ~G11+j6uNqx z_n&y8JKm(;d_;3+cRVU$ogJ~QBHpnx3jfqu#aUUrwqj1?g1I7dpB5Lv2 zQACg>?XR*P8Ejzlyr+Tjac|FXNnGK&#!>fI`0$r!a-d!x}F(b-+-v> z5wkOHTD{bQyGjYIBDzjh*R}z%bC=5$Uklc!EH;rPoCzq$jn^4Go(KFM!0w1&14yx! z$b)taX9aOF0BoZ3Y&In9@*%LP1Ts-`n!bX{e*hR3;)4KqdI;z#t4j0?fD-OPO-h5W z6H^A^!BZ6}J_mdU00OvcvdTDaCc(yW9Z`kX;h6xibK;u-ADgw!V0I{>*+aw>#2B^% zQGVh?@q%W7;twj!K3tB2QXh+K5uKQ$a&-#|ySr6zxuCowCV1hg*(1&wBEc72zs;B; zhe%Fw%b@O*i3W9-L4Be@#TakUlF3*T{N)=*I)2)|2+rdcHxqr3syu=WdCJNXqT{N% zmgq%``!Y}-#*I94bp9S@Urz%t9YiMpricsQ*cn5t^V2<={shEtm#7kL0yt8vcUw(F zT#`-`>vvgAL=U-|Sm$tHkcij0juywm9m%0Nph7jMRYWxar-}8YRud7wsya<@SQS&; z3v5L+yB&Niw2+}3hsG3)MWMNAc-tT?9+zZx201az%h!qY2(IUD5y&!8=5VLcziN0mCiRlQ~M8h_l zm`5yPKo*f znDHOq#0s|p@bR2bEQK|Wf-c^XYlgBK<4#pewHXNWPDD9stafR*&IEO)@my2e-PsUk zH(V3M{IZ7^1|n|Cn%L$UVub)c5&O_Y-%UfTYy&ctadzA z@hAnlttQ3h0wF$jxfA$q0IYHW{2E{i^*L>bb#9z!`Ur?G0jQP&RjBG3q8f{fcBk0q zj8sd>GQH*@G!k&c5uLu5HQ8R)oCUMftX>?u7Us}T0T2)(s^p+2bBgzZsW`7lFIRf5 z6GUAPf=Sm)F`I>pt~~dg91$uhVrAxZDN4da)o3KZFwqr%OBS8D3Img?G*=OY0GjC8 zKC}Q8nnBPUX;3PTrxSN%9L!fWE;!;|z_>#(lwoFaA3H#Xnd$I)u$VMV4(5SV9zcaN zLEjk`4w+llKTZ{%5pRjusybTx_EocZGkl7=@imsAe^5S;5t#91Dd}8C;-L< z2yf9dh4S-3alAa3C7zc6^P4n1C(XsX6TnTV5S)5o=a(>~Ig8T}#%jBrzc&1q6;^!e zmtr$$pA}X`H-WChH1KC))aU2&7hLi&(9XARwkJWql>Icw-LCfA zKtJrF?*M(fi~b7eqb~X$&|h}Z-vHh2qQ3)ryNl*u2H$nj2SD>;mWAVg6qrBUVj(>Y ze9A>10qx{l2=V4#=KLm&Vb=xUq^hi*1d#wzBR> ztQ(KkZrnwv3yEY;qN6J+Hg9f<$2a31qZhXk)*XzxwV`jgKWRz!h|N)TL$f&=Yq9RZ zoC_9S%&2P@`@%*=#J*tRF!581_>L}IBmpOSE!^(Z64C7m5$Ww#wj3@{uy?&rG!P99U%k-GqO z?rq$XxGr7*1W!`e9ojhoc(764Dc^rsA@;kD9j9%}1i8N=pl@Q#PI2V=Y&mBfZ%na%p6ZsP>}PB_hri`KA?`bk zfBZ`8*rse?ju4EMQ=B$pdzq`IrH~s&(D_=)EwUp*#2m{Gv%*^oN ziXwsH7_%B}`?6hXqRX~*tM5&Ve6l`>huw5v!&Hn%A-kVI2 z-M9DmJNG=_=Q+>woOAD)o7`VB{}w5w@Ge7`!o#M5xM_;RnJUVJAu2?k$kqIWr-1%~ zPY9o1hz!6AZQ=1mQyO~^BtI9eYyLRZ@$spFyDuzB9bee-sXDpE5TfH#->ONr5Ub_M zLQ{y72jK?zi#u=kbuJI=rj_8X0`tKF+0iGryqi3oI@r1V!W;V_Ly;wc;4ZnPFOfIR zNM?7uDm(T{O-TMexT`O?EB~s)%eCkd-=-NNQK0R?Q0mo9)rLs^A$4&1z85)0{~us* zS?3a8>S*Wfxt%qE3upd5b+~h*J5r4=xa)QdmAmELMB%h|5<%F|Sn{+sxqP4Q`p?qJ z(#0L0UelTMy+p%Z8&9N`AL-a9Z&)7KcqL}NS}t2HPW}?y5QQ;GD|_ zsxuR+Iy?Ce#5-$_>{qr(o$3nz`(58$p{GErzSUwN={xzcr@Ve#Y9FWr$-sh>CqPW? zPnC{4`K-gH_PM*hxqRQt1GxH6>8LKjM2xPvhd2GvziynKIU?2-NCjW+>zY6JFqw6S zH+|t>d(w@w6P?pgUb+}_Lclwh=WhMrzCw8>bqcyV5VZpj&K;P(FZuh_DGs=srS!|0 z`*tJ0x<_Jl&oUw1a(k8q@j|yp9cY{-LweBd^V~k)?NND}A9DKww?{Qx(I*lcw!XU|nR@5!u>&=IoR!XL>O>XiVIW#pcWr#X>l>qwb|sGncbN~? z9My%ebRhZK$+LeN7)ZU}(JxUB)6XS;?WH{R4u<3i{hgj)C@R$8Wm`T7Zs~zD9s6Zh zO>U~@$SYc`^169I>s?_aAw)Q1LseQp+LYvvrmkfR~ z7ZNW`#n`(mv^C#@HA7QecJk-{i3#q*v`h>Rh2Ln+Px5IOE@q@lGawIB{(wqt9CY@R z-@>tr;})ivJDX2lhrs@t6XS>or8gi}u8Htw*5cCDO@W=W<`yZReikrr96p z%$>e>otpmUy4=*^=?CMdfWHZR@48c+@e7@~UDcmYKc6T`Ek4(|Ky^($JpJ>;h?MVd zsjGJbvt6Yq*O}k{fw}lXYJuv!?Ogw_yfO(OHC=TXulAb=PG=$2w!WJv?KC>)s_BQ; zPJ5Z#@$@sno6mGr{{e9o{p|-VN(ro=0~YTNqzK{KO|<{u^h1fut~!>QtGd*|RGms` z%Uuh6sl(n>JAJ9l{u8N~LJ4&A`4*fMOof(1K;gs@$BAR{e@N|}uE$J%2H9mN@4TR6 z-f?aq*{9c4|I@K}rl^P}TUxFXq7^$wA9j&F=>OdINt%4&CG^OjGlzI@$pbWH9v}u1F7`Pg}m=lmdw^fH_)b5+L zf7XFn9GJ4Dh(iLhbJAsJf7|R($xKRm4vqtVE@U5u?2YNNh{N5PIuLpul#4;`$%}o| zHp8AtaSi0QL++dB2L`sM+w=U~q=$DLg=Na~O=3UfUq(L|A6MRdUJgwRY|5X5+}BZt z5x|4;H@k6|`(^tTc)E2#{_S*m&mSiogZ|ul^UX8LDwZ@PqlskMe_-mEkrbj>-Su0un7GRP-SKc9y2zk%nh(v;s}Zu$*n7=QC1 z|0xW%)EQ7qu+9w;#J&Y}nRpbUr?8jInkrU`2u=tx;t06(WFU^4WhMf$_L4Awak1p$X$7-Z+wI!xTBu zcLDQlM2xAAvk!kFiT(Y_a~ENb%wMG+A80?_gZ z9zoMIMMz}aft#HTZcZ46p;bu9}&S!+}rI5_*1yl~eu`>vXkTQxv{uU{} zK;up$cYF^}!MAXe-wKj*J*bn>3a`+#a`KICC8Oe76M8{kj7G1_rg%a$_;-Na0(2Eg z@%Bd17^H)n(C$SO8Gi$Tq6~UxgaIz;1+)nO_Zqq5{{oV6u_T{L-$8p6&5Vj=I=;^U z*@-3$Cgav#K-B=|pqD!q8klQT+^SVkIuicedO5@P4%#6!b7hm5rwwuA{2eLnqE-_! zVa7)DeGRu`;P@H=FeAQJ06zjCj2b{+;RLycmZ8ZVuW`_Z2XaGYZ zMAsBBM1KiZ98ETgYf7p91d#8e31bZImT0HlVSWJNPz$35?Pc;MV=`XvpzsCli>SLKDVnkVCzIzJ@jdP44)DsxcALs%4NW zMU!`n&{zgz5|C@O>P=AfF>GAw27xf=>dgqbr1KsE!HlaHGY+sH=jgvNyOUI+?tIhr9_prz!KxHAT{(}n&!Xn%($ zH+_gnaAVp84v#ZpbPeygyuJK0aDv>J3^`&7=)<=rcSCZwkz8jR$=d~S({C|WNi-h; z-ykIHdw}PMBt58*GvERru5!mt43&v>Q4yd5D#E|AH6bcWN&gwzPtgjDxVYL+=pb4j zn$ajGWKbakhK`dE5fd^=_%R4SL@RuU<|ky6_B!zA(Tw_-xW>N+;^UBv95i(R9?z`0Gjk*i`aZh(TM6dO97Xw&G z-H$xoqN9k~D-iBN%a9AqZeeH0g>r@{7LXw)jXD#1;d3ClkCG8j1Ge>z3%KOxoNPd{ zSouOHcl-#({ivZp4zt~ak@@=KU%y@iib&Z8>;bfq&uh)gNc$1+AE0H%o1-F7K@y5@ z)a#VU3DTlv@@!tp%~b|{KLf?+UVu8w)rEHqx^JKv(QvcK)uneO#7CnU>qVY^)Gh{c zJBh5aY&8A)Ajeud+|A&G(R8@m0JNf+qadbJC9*hU4jbSS%yn>D(s)o@_D}THmNFYt z*A8SiiV&5Yorp{Ps|YT)Ofi}hCdT$8L2D_Shi0F z%!h&J#1id7W{3EM6hXdi$ehe804tIEufTjVD}y{ME`k=H&DMI6>(>+2`o?jpgoIe5ek+FuR}A43+`2vw59AWxJWT9Q37 zngkxa0(fRjO!jlCnX6)Aigs9x8cX>S$-G9Wv!fKdoGb}&nonSy@1v=Pm>8wyUjX*^ zq=29UdKk!CXwV!dva)W=FG^tA!~Zpl_m2++hj>K9{s*5nNF`Rkuc>S!I@m4&1PvupQlKj zz;K;;A&xh5#64O!+Y;U|^Fjs;Ved*K6#r~C9K(CNFnu%1CB1=|Lp5Bxnp`gFWx8c^ z>Lql%$qz-y_N-ViUT)EfGpmfj(D}U3`LpR;xpLf?hV_^^+%fo{Wr@k2hk+t3Z_@Gz z20a@FFpo3?&UDL-8_FkeYFKh#&P#3xuMAmPPD~l_yrD$pJ7EvOS-4YhiQp9uqrt-> zR$#G?j!v%=_YtGzG2%YV0M9mt%0E2#PE}kYBT~)_(P*F? zY7;RD7M(7qa@z@d&X)fJaMC&~{OQJ+hKuct8fF`#m0q0V(SzY$QtV~;vWqi3Z2K4<1amMI>QZU7 zoa%O0DfScX(BP_tM;XH@PR4vwhswq8Ew#*H17KNwIYWV=lw^lw`ufPxj<~twG7aj5 zn?}ejzIaIuPn@?2(d6j?^r!Pl$Ulezu&@4Q!ujg8n@(Y9m9iAcr4Zs+_z=%<3WoU*RV+8dtA(B6b z$jeEyBz{}~Ac}2SYZ>+%cUsnQ11}<0e!s z?eAmM*aP{A9nL&%+-wC(p>wZhClU9Mv~q!jF!BSKZ9d>kI8$w9R9hj;!)3~?mKB4c zyBs@iJdTD6LLn;~FR)fd6ULmZ^)dAvM8DR`wr|km=#!LJ{k&PLX4f= z6JqI9Rf2kt6HJ{ZtOfQVD^sIYRtbB|m))aQk)}TD=CsPet6<|cZM2!0v@+`un46eV z(_EQg#?4V2U)pBlO4inU;F}{sLfx!Qke?`HBCn!I(WBbcZh9JG_2vQ3S!vlnskZz# z=)^*50ai+Zz4=kgZ&qP#Ah8^o>&vjs^-h@^(A5OTeS;;|;nv)Z?BO+6R`5e{iO@xfkyr7-yxGJ*SRh z_tZH?_Y4YUn{SG0@|HN9pWTlvIDxXwgFK1R=&nI|KZ#cMO~}Muy5>GZRdNsfb81eX zW%TW$n&W%ES>n`OcY)rnO#4Q7g(9p&7AESXW>i__%ug+LOH@~lmCp_lyb`@>*J|9X zg1oaaaBJjh9gP%#T5SdAqw>D0Gw(y0A0-kn0~E%c{ljRVa69)p8oseP91XWe8iCfgH?F!da^1A+$|{?in;Ob0@0eUxxiZ>T z*^rF1BqC7sWMUD&=QV=8Bb8Jv86t~%F~XtMMZp7TYI7` z8I4Dpqv579etU69gu?412{FiPTvgvLTI(ZGQQzL&C}QmpSxI=UXp4oTqNzSnFIvN` zt!-<=?Bn5tSj%7OF+aE^>YJL{3AaF&q}T@098SbVQX8g&3DF*|ZxTt4y_P>E*C*N{ zTDCQYt}Whxzr2WrMPo}_JS?Iuk?0x`kK7aXo)8mPwY7#PI^WMGa%3iH*5a}$Ro6}v z4fW7j*B(iP9oIQXQ=~Zp4`Rs#y{rc-+OQ!Jj*C_BBit_LI$gY>eGO*b($dx_qRA*# zR4W`3uV`5ed!l`A%mwZab!|fAe@v266jUlRZSG7tcTOti0 zuAg=t5Kc3Wo=%~2Voept3qa+3P+`Lvx)gre?p8__8h7J%HDJMCfiDtz+RHZ)`QuJ#0R1g6au9X1oPurQR~$HjIQ%y=}Zl z++*)Fb{lem+HLGNfhu8wETcU)%nU%#!0FMuc)I<#b$CUwcblJtp}(lnoPXaT&9t9!RW3a>FPqy{0aAk-bJIrQq}V0_h* z6`akA)$k#j^a85JO{Lt_JG{|}D>d~tCs#TaN(3nr3})ab+nBh#M+Hm#4mei!sFE=r zokI_4D6OG}G&JaGICSJ*WsYMw-b4ir)u7rgUttuS$>6Te8QV}(YMc386Vd;!*+c9p z^ANB>q5mFGugEtU{5R$M(#98n zbH-DqYX3;|s6*yqdT`kM$R&Jao;5w`v*u<6=4Q2Bd8F-XCrLZiGs-dWjC#vs3M{H8 zIbl@!(3FQ}1Lpf=!sRnkE>maZ1&v;iKQVwFFpjW0V?1o4)1g@g|K1{Y)_h!{+pgX~ zhX7ydg883Hv)k9BehMex?nd_t1pZxV#DscR{xcR6i}e*iOgu03cjmK<=CkHMn2;j- zDf1s;&f)&E`2o2fAl5GTkomE*A2|Z&5pRyNSv{mU%0sGCIis94JHgRX9A^g-KtZN~ zg3qXDmFXMb!x6UwP7{4j?bf2ZRi75^Q?Jq{3ieq*LxQj>D&Sqk!-(O}?^h2?tlz{; ztkvy^r8_c37O9FZss2_j>T!6^X6OhgF%qF18OBx{)umElS5iX2X3hJh4aJw^jOLnlZ5l zCm3g|gSDIyv^HX_F}X*Lrd!f{rp`%ZB8J|X*MCibkc8P|^I7Su2CnBdNVw@{%zm)|yu z<060NZR0M_6uCtO1SV8SQ55P?y+$uL{9a?%e=FmS^|?IHIh>aR(u}R|QBOk$v*7$O z#xR~%QDPAaNiB+KR~#!Ua0|kF%OV@zPAlzEi<*HpN6h$oCP3vyV31!Lz3{4ruv)W0 z@HfIi(%&FNdQ$NEdGGP+nCE>cA229BAHc_l!HanIAm;Fkfb*cc9X(FrVhnnI7|TPC z!v+4rd+4J66rlV@!@Ud(OH3mhx#q)+IRDPV`zoFf${gU{=V0Qu0r&nIggEmw!<`2I zlAJ$NeLoHV2Jqu(+%70zkG?&PzY4hb@rV32;G5I|44JTr~|H1OGJ_;bMddj>Dc{}lZ_Y5YCF zA4}uMgD=S%7<#?0nw0k1?7X+@vw(XBanCV>2bVR` zwkFth&L%jZ#3D`JyMMfeFa5Cyjv(=t`UV^n67Gq@IlZijw6uuERZWq09G$|AVqHDX zPtK9XIjpQ~!$CryCX%s4q%|y7tZ0bGSKuwb9cKvV$fQqL^bKd8resX42wuW)4scH&0B%4>%x7SCTaVT=pNOWbJ2iG?=;K1WyIFN-s7z24A$(Z91 z-qzR>iQ^FE8f=d?J2|LH5_eI*9$_^i{uuM7orX{@ABmMzDC%)ege7oE-~(t5J;DM02{p4v5va|s_kk7qzxwj_ckBdAd^q$;*0ij)F!vFvP literal 14548 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 diff --git a/src/user/_rm b/src/user/_rm index 9fcce19ad50b768f92d172132c6201c8387bd690..4f85726d0c94f2fd14963f8197ca0cfe9dc00bb3 100755 GIT binary patch literal 13888 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 Ux69{Vy4;6&;QiE9LhH)?FX?%RjsO4v literal 14896 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 F{tus6ta-oRd!J`ALEhinKYsJ!&OPVcbIv{Y zoO74wW*(LmO}JD_Dcp}COhN3BPl&ToPoJq<&KCK?5CcT6$WiUfHCcU^bOb+&7g#>Z zRiDSoRKp2hY!974o09l^>g4*FzWR8e?n__!pMpZnHIgp`gs9sdm^xQXPUdD1_D!9f zyh1^t<-=u{tqqZ5*IYMq8^r6r47A3547JHjalu2$@BJLU()6_h zVknO}QX=_ZZu_BR&o-&;F7?~w3$Bze8HH5xN@Zzq<;z+H9divp9i-6QtCM@+-o!Sz zeD2kA#l+-~NTr=7^EB~({mdU;XC5G&p}C!tkEA#|lXIWqG{9M3Wc!2QNH@3 zP-0Y|z9=s-DpX(8IWa2l1U-S|%#@x0_1v!Xm?!A@iPWj>rKTz=>;Em~OMZip>(Tkx zSH6<6Q&MfcOq+^P1~6CZm%wgcedl3EqP>un!OiBx@@p{#lmGTGG{~@+ziyix_EG%P z#F3Rq|3uH=1~a(%SYhF^X@wUo%UOZES~RDyf6QB#98f41UJLHJC3zxd(qP0BVyMiwrv@K0ko_uyfLsNPtQ2co{P0J+`ysewBe{j2L`PIqV z_oUjt;PQhox?^?6b4GpKSHC1sp07<@r}{@y#d{>SC1)$~y%@r@sT0*AlPKDU5wr}4 zt6=S&n3tMTU$oEFOvm)5W5#_?$3V0-zAyO_N2-MBkn?nJ7p8g}ndXBZ(W`dTAo}6S z`l18%Q}!lC{{~a~6I7=&fsbdzA7)Pj+0!TAacp~cj=ql*P@q1Y^%t|#QY23g6jn=6 z)f_A@)MjizuvCXghWFiJI1##D8NAXb-huRZ>AN zpclLMP5#RjqX$Olu7{_(ev8x#G__xf`cs2GVY+RnLCaGH&2}}n85Ghxt%@r))VEVU z9Z#!3xlii>#EF#Hi50i}T67P>qbcS=4)Z+49GE(JTJi`QT^}(37egjF>li~FC?8K` z5)k+W>zAcB-9m1<=c!G%2@G|=utaP?1J>q=eRmk5ZmU(d=m!!1rX>$5xFKwTLG_~o zJJif|mPDs%tr{~oQMFq$1|K<1iMFPt3JkUIAV7sx4*o36QfCm*CnuL6dnLl?o7_<3 zo0uHR4BbID{2e=^rZr*Qm^A2S*!%HZNKH-lhOWdR=TL$nPAtC;W5RjlYit=it-dPt zuRIDTP3UXY9XQl_{SWB%DsW=X%r(mA(?u_07ORX~)T{28v6Ls9iOD-Ou_Zfs8pN@# zFGyZP62!{Nmvhm4;a^UoE~;66At|Ntx0hdd6M(Y#8_O@e89;vg6)4l}O_&2amM;U9 zhSi}?*18=p{yp=JwDP#Ne+cZSKkrP*ze$f+eUqEeZE_d9#i-U_?yH{}*vR=6+>mG9 znkVbF$`x!;*uEnftJm44)ZTg7cm=S5BKN zlHZ|8MP_L@xS{Cat)owAEzF2ng<0{xfE~-+4$C7Lf4vhzEwy4Z=c<3e6<*XA>%*76 z);Pj?5X8g|E&%Iwb1Hi_Bb8cP4k@or!9a|LF?*MP=U>=YjT|0p2qc1=w>C@|vzLw2 z_bxx~UyyYCti5ws8Nj7&N}zsbXype>JIEu6Ly%RD7}t91nATz2;$J5Y@eI8YF%*Bk zc-ux~fvS1RASuxsOUH% zsv4&tRpSh$>MWz4RLZ1Kvs7RM8RIl6ym(N>O1#We9T z;+fc`w)Ug{3U0V74+h?Pb&vNFZzNtB_U?j@>y~U4G2f2SJ>DPOFw20qPHR~5e#5mr z-fM`zhf~w7MenIZz>c*&d6e1zeqD>?>^~O�`1kFX$3Iik5oUE+iFl@RSuF1Xnb} zn7SRZ0msgweOnaU;9F-NRB9WF4&rd(OWqI7oN0DlYrj}ea0fSB*Gl0M2nRQ8TiF`_ zyzW@P_|C-6mQMi$R~&|-hKcvrecvIt%1fqIe2{DHd+$q#6z1z(`2t;Azhqy1C(McD zZrXkfE34jewH?1Cqj-U_O))-n62>p)A}#AL-&Zf|Ua=CF@54$IPHYQq5K0Y>Ou;Y4 zfaAsIplRa(rOkJ1QQHuwC12wHwGG2EF-!=2swBV2rCylmP3NXVZYTdvE3t%!3(fmC z7{3rY>T55ONV>MX264R}O z(%dl7*LJe4_a!n~4kl`_2LC~ySjFssEt>Z&My;@MUm3{e$o8d#TAv2vJ6pO6RAqaYbt6YVtz$5 zT2VD8e>QmXA)Q|vDXXZBl*THmt3=@l+&DxRSH+4KiCA@Y{`}&q#regxbE4wLf&GVz z8%2LnQ(PO3lvGxi&T|;^2j{yw2a3wb>{#`JNNw~2bethdtE-~bl@U=|Tvb&a%P%cc zRPk%r{wT_Rl#4Kfx}n%u49~;DsRwe>XA>1`#iZDaSUkL_rh2A(k|@E8|srhL$o zD8B&DxhL>crRfQv|AzmA=M3;PgXfGB^prb#_$Y8Sc-DbuAnKIOm##8zvFdE&?hN{F zr}7>=K>iirTl-CG>)dpmF8|2(`~$%A9QZ#1|K5}FZ);Oe-JgK>=EJS6U!08h^7gvP zA3}Z(KhoNI-AVZ8wP#nhUkv^V@Hd`>-?*;50QJ{^{|)f3IvM}Z+w=DY&l>Re`nI+8 zSLyu74P$JE@;H--KG_An)!?g4=To_Aj8R&hjLS#+x8U6i-nYp+8c`n`vW>VH88qWJ z^6Zh1(iw-9W&dn#r46YVj;u3hIdSIPD0FyuX^`TXqo#$@aV^?!gO2{`?bo#Bem>~S z!E-x!x}@`rTxDMU+RjvduLaLd;2E6GQ_`kKjo;~OS~`!LL*v?Vg1p~?_m9vwI-OVf zDxU5twFcx{n7`n?Fr62ExW3K(if;_~{(7Q~N@pasR;c)cuNf!&`_lEfb}nxpfAX&Z zzZVZEn~}#UA3OZ!)3R+~XeR$&@ZXC^!V17C{!z}{)0xn2?g<=1-vs}jbbi+!?T!?G z;f*8u4<9g4{}UxR!Rm2O_5Id?si)mUkMk9K(ARE9pBERS#~^ zmJIod!C`*L1}{M&PO)CU|uo!>^h<=w_2QO&$FtTP7XVNx`R!+~0%5lFdH- z!m}P#j`R$Nnx2HSJmBu!m20rfw-Te_W{8D73>pP>?$zudYAvSH2y(p{HMG8 z|4nm--0Sk6q4|~FLp8t1sZO1;u1Ij;}lgo=yhJ3vVBM_w$f> zWE*iMh<#O0yhkwDr9l1ft4?lUi|UCjy1QOw@fu-tP<^asyB4Z~kWUdGA(3Cg z!=}!^MvHP5pASX0;(3!iYH(V5Ja{ry%V#N-z261V=;Jx=Qj|a+_y~k7#oPfaqqdxo z@Nf`)|4K2BYWE!k{HkQAze4Zalw=c^(+sBDt5T(*(I~76v0W+~Ih8OKMQ}M}UXx)m zbFJsIX20KoCU?m2cOVA&xV%$_e+1kIjlC#z9JF0BY+_mt2F{Hpm;q~Fmw7(W&I5i9 ziY)NK!w{5XUEpdLD06{o7g**1!gD>;d&;4}!!-Bg@aqMjz99NoqlS40)<>QlWRnFb zqb3S^u5weOup`8}{~panC_E;HuNMzVHM@+)Yr_#@S!_2Nr(3b=dE#O1l@gG6!U*n0 zmk-N8G2l4L^(YoyxmG)+9{5VqY9ldB1T`(51pY9Jd<+JChbYMB0q}`bz6Rj8D3bT^ zv{(KUU*}+{lm<3-)zk@qk{S$PK3pMZ0U(d?MPbcqHSF2YyNaDOQHaA{EyHQUUM+iY zSf8PMh@x!1OWS8b$qy902|83ycLPv8-49?tdXrDMO$>4jp$)P=GiO|1YLAqinxD2LGAr9f{$QL$L8W5Lyg zSL+Df4edgALn?IgztOKU>Kg#P=xPt#q6XI)fEwID7nlw}@hoxx;iD;Y)d&{CZbn`< z(Ghg)+;;giSLf5y5Lkzz99yX!yASvqD6#>PSujLC06-bB34k(UI{>;yzKO3_xxf1I zk;^kw-|v9NbE<5rfp6LOjCOs`(0%`iK90G4U!(i(2PK_QWQ*GY{~)Hiw4tjLdXilL zC~Jnez<2MOXf*fM7W}v@mC>G*3PDf@o&=Qgu z`SIGcCBWk-@?PlSA}!YfP`zygpe))AK&=l40B}W={5!nPt}+buJXwqmuZB_y@h5MDsBqGFh~^}m3pCBTMJ|3g8P+nCz}|*JkF%=IBrZjt^&huW|FKdZ#vp?zO8uv5lQ|7& zUle)2tN!tndY-fPQ2k{9#whE#=qgX_>Bt6nB5*0{J$)In(a>`-N}!0OGf0{NbP7p4 zc{8M@)YiHIl21{3kSl#bN_sB@H?Y?kD7>VQO`H~)H5FxIquRmWgyf$nU53^y2+BnO z)ZFPJA^jxxJzjmtrgBJjjEX0nEe|OMvYKwx-W72ZelE3*?2t2%PoT1izwzi=5}z&Z z4idCY{;?$!4!K7e@Gd&vM*~7gmgi_dKL9-O$RPkYSb08xKag@6fKE^%7XVPJL4p)E ztp%Wr*#Lkmpxg|glFU5cEA!NWlJe@rSt|UG!`xeFEh|I7vwo<)U`$wdPz1K%R@Xl zU8p7(cb~6OLOeK)P_g|t(Cg2Mn*P%QMOoY@h8l452m&G`USn7GoZ zFr5uRG4ozf0X(tt_$&EPrI>&20@VOiU);JCund6Gv%&>LNbUkb^#nN-tw>Jw z^tcrqw`0o;+yg+Rf~}t)ZTZ2c^ndlazeYIeH@5RYP7PYM!Y%NT<8pOZ2bD+N#V zvgwz=^0?K@p9k4eh@3nZrNeoO){E^%qa~}v&j(R6Pghr?m}SwJDDgL;`Ff!9Ns88% ziqaqrTnY3h6yg0X7&>}sopBvBPFVw}3wq~;j%@mGw92TMl1rgqL*QQOsS?w?V-f1Ig5nSQgNP&OAW9pluo5sGkwY{jkA1zfPVF>FC!01Pp9UqK+*wf zMVD~V>3MX~a>y=1k)`7F?i7C*NHdBszJ*jjM(})yb^%2;t;DjD!8rBHW&^D)75zG` zLF4m~d6tT*M8BT>LD&ssCrW4Dq+J9Rl3(zJkf)lN5fDE_>jx;A*8n*P;Bz8Z0r>{N z*C^6fn;HO*t>2*_#yxZ-uo3uCgi(rthSvZ(h}~e25g53Lqo=v**XefbOKf zgyC;O$upwjH2)t#`7^NBP>fPB$V-6$M)`LVD#V}+64ryT4yD8EV3&ikNP7eL1{9;X zMx5^7goc3_U>L>P319r1OE@L45n;(JK1@Z``Bwz+KeoA|RRAydRZKzk>mO;dzl>BL29&3{(hl57grhdJr9b}I1zakQi=BwWZy(Fsv>i6 zjH3MMm~FjLj71_xZMD;ZOhW0wEPIq$#v=RJ%4L;knTw)a76VX=Vm=2J6=so1YuRn! zOh|<^PE86Aic`4uOOKRU7`iebt5k$3ga(Lul+6`dAV87kQIy zIR`*BJ9)nc%#zC?3bPeoQlCM>U8wY8$)oW1@WLK8H4)3(qgt|PA;NCeh)Xi5{vLSc zRur!fL%k$O(q5q3N%{gJqf}fy0nkx8Y=Ww%G4o|l5ahIA$K4>DhL*l4ok;X?!K($v z^P%r!Aa?+`4aMIG!M}sx-vrC7lo=`y@n9P-OP9sKr|#FX}=) z2KAiUWo)>xiv->0(y6VNWJ8Y3^<3Qf2G#6uYtB4Lb4L44J0r_o+myAAZFuTQ8-hd3 z3S%qH%+w?6<)bm#y)fb-7-0}v)R@yp7;=f}s&o2^%*+v)CfuGY<=8OQgk2l7G_1;N zZvZGA;8o?rlvnW_mPRqa)5+}+p7D$gU(|)f&IO{)k-co~Nvwt^Ix5|ZU0s8;<XQbaQ8vqqOUUqr)6w-l|(a6iE6x=I<0U@Q%-YGCupZCCpktsv;p)x6Suts zby^xH`lWq-ne9EJWpG1Ig?3wLJ+2lT?s1(?r+8Bd?sKP&U(Xk-ZN8+kH0AzGTMTt4 zPC)s+mr2c?*>9FkjWh*#a@SL**C5U~4^S!&-m${yycD+jbQJw3%Zigk#GSkW zcMZsL1$%k4)3bl-^kDlr6Kb0xIqkFGUG5MGtPkzm(r0QO=SK%;9_V1`oa{J8(iw8@+WuF~&Vo?w-=gjqoWaMp($U$zim2f|&|MYM)3S zh}~}C!=|nba<>;InYTSfkKcE8Te|q&%*ar-yRumPe;T1cTS&0rr>|!?z_%qgx3!>} zxX!#FA=F9l5N%Vcec)0-)tPoeSlcf&?I#^Z+2JH^#ukv86P+^U6s*df^_*=N=_0c^vLQg~NhC0npRrF|iv;K8hiG8bSW$ zkn7@gQ*5T^a@*c_?e4Ih3t?{|h!gA{9@K@NxUZLOnr9Z; zUUU3(+rBQm-u98{T`(=Oy^o<8L`_4xXTl8I`v=>8#vyG2X+c}-RcYY*^)tY0&cFGM z=Jo5>KgloKHvNyg$~<+pGQwNnkp^cN^YK2ODEh8>c2SQwV{jI%?meYx;x-1dMmm9 zd~w@vF2+po&9Ip>w&!)SU^+0fSJ>V!UB>3CQ;==mN>@DqFX-9%xteN>nY{^7x!akf zb$MYz$Z&*)9mA`Or`ya4X?8sP09_G>uis?XhrwztC{*L{9{_7y_eXF6I4S)zy8~@w zTSrBJ^{T#*44xUbx!VqdfJMa4Q+1uv2NyiCY`P-A!FmO0)X{~17SE>2?(1oV5ApSk zaE0bL`PwFaCA z>$F|U{u9@=?ESVEaW)%OqMP99M6}R8g%wgSn>C#GG*&j|NG=C^A+sWnkXaoIuU~(S zF6idtrP@z3kSk;l6xtrl31`xop3gm-Jacp~IRO_n(#+YMFawW3eCtvS%oh%Kum?yx z2>Agzlqx)pn5|jUbqcDr)b4FAn67-#JH@7_)oS}x*lnzaWA0Lk*>xAdxH8GV34qsk z3p%6v6e3TeMc7BwU+rMJ>1jp+ zGvaiq^h~#NRE>eL9;eBLgz1V2^hCipXR&Rx15%AFpcux%LE}}HWENrqVA^ZnQjBiy zSZE_0a)`6!W1qu9=0}$upx#8S!Uzt}N;`NNdi$9Ylb*Abp>YcvX-8Z&c^-$MSt=%u zAFcPwsz^u`V$3%eOjMa__%q64kp0nm$1suRK@UexrBTvuiri6YKZQc9z)*9eT`pv35kvE)c68 zQ2T;kGlMdRLSv8}XR6gI3x6H4bIn?K;!Zm_V>((d)E*eA4Ud6hj-cgONj(=RA*`s7 zi&6i=2e3aC&>b%?OO4cHzKUZn`k8HKjplM^-oP~$Oq)_nS>_v}kZn_R%k#?+1??!0 zxr_I+Q91V&j@|!h&Z!$t^`(}-ww&YbpV>v{Tw|VEuDErp4U-G@ z5EWE!f!&Mo8Hd#p*;Qn#0}wpOCELV7j<{I>{_!emT;n*Edmsd$7TUoH$h?bG4=2YfC?{44lp7f!6X!Ya?GhS15(F zn$hwWj}gBE%KNV6K0=~-jjoLf1tc>yKy(7>}qTdrKFa4(Jr?7|CM zn7i_l+2Apwh>?ZBLV2{}Y6ayR*cI=~Jnd6|i zKs_2vhkRZ*FVFEIHctqI%w9K7R|^(j&(g0`@h2XaT`?tp)X?*sU&iMTo`2Sv_=?4= zA{WkyR7GklN`V&FmX=>waqju&<`14Tr>rD@@RdXJ2hXmm9$XTysEk!qX(Sp0cWiKR zWks=i)k|?y&##CLo?Tl!KQg$c8b3IX)Vj>YrSk^Y)KX=QP=+?D1VWX`K-C1~WR)Z1d}4Kw`Ivb-V| ziPjXCMnq{j-Z?{KRYj?KWlU67L}TQK>F80t$>yMya8h*f{F3U*sEAiZE9O*1%JNIg zi)%#{{~{CNdu*b#vN{?O(emorSbmC$zpAf^MCNHD)XQ(_FR#T**u$JiEUI6kn_pZ} zCE^rXSX>bkwH0&9A&*z)95z<-tIHyy(jnkyyRZ%4QGr+FN|lzOqNWxqX5-CRylWR( z1Vwmv4bGllQB@qn+jo)qQT*brhAJYES|F5jh$`Fo3ZIx?T#5JVG@-JhDk92?W5pDm zk5}u&0{)nxxU8&JIjd%|h%0X}Ah0@8TqYLqFYCpz>I%g%zXnxxw8U`_2UrEIczv(p zhKRc}4k@pm9~q)w(ip-Hn2sYS=bu?{*7>5O7|vZ-i|FamQAJtBoCiBxJG(X#sS%acc=?bT=2zpbLlo$YET|D9D-l}71DhhX zL!#vcrQ#=Mu}Kstj)HRK5p|s=D|$-?!-Ennang|J}a4dGyq(+ z0{J#mPPEnsUJA&G_!B(3*_8R`Omw68lxA{*x}A*M+1NP7QNklk+oz3Zm*Uw4UWgPYlinyCKNMDiYLpKSdm<9=$rpW0HsJ{ou;i=%lW>&YyR=ERzbzlVcWY%6{d%=z{IGpcfZONvxE!kVMscdWZ--xFvBWQh`#e(3I$5NwIb)9oYdfdmGc)QleI7B5Od1?SdZpBlLOgj za^A|3Q?0jh_7PJ|Qym^_pYK69+_E0@Kjf!{5BWC}Z{O^5ngdQVy=#5$yA4is8P|E< z@KVnk-rZj6+3nruOVgv9eNJ=0Y1UDKF5Mh(nnO;r8!z35wZ(J5gF)WzeaVaJE$^rJ zv%U4X_gNpXXMG!dz&7~y0ds6p6>b-;L!P_5Og!($tUiXIzh>Dza!lVb{hO^%y`Pi% zkndTa=__uACMcYSYAf(T&F=W>J-_mxgI{?bqYaOF)&Wy()@%0nHb?%wecZ;#U4eJ( zPi+W%YJX=#;5#(B0(aWmmB4oUwRC}IdmRPV+1n_v4UMkAPU{XOaEEF*Z9hy@~@1$N#nZ7kM$wxSUbNmju`SP>w9CRiRyOqZj%eQ{#bVzZ$j9z z-Zb_Y%=SITyTsk*wZ=vR?%QbWz{pgi>#P@zSK0C^Tl5^XUX+bWSEF$kb*WL{2~g>> zcEW?SW{-S_o_t6CLvkVhhrEfJZ!#!4!P274N9&+GES=7%!MZ~>Lqb^1@)^*r=kNYc6c4in|WA`kqa`v#)e}CvI71kJqtMzOV%L6k!E}Ui^HgM)YpBf?fO? z>?514EHj8hTF2!*iX`a zq@hbXVjLssnDLNl)qWzbeZW|36-)AFCJ|eL|9+5vN^ar`l0J_uI$Lff2yNOD<1}m=l zCb6UD-4?3*tk+S&!6*Ab{U4>-=xetA2qR$R7WuNu?U&&bpgWDfDfDlgmJ`v>j|%+} zzQFW+$oxB2g9+B(&BN^Qu=%Eyc0hR*em5Ft!SQcNqefV7$+w;LXbT_)o*(NGb3MJe z-h9>s7jyX`^Es%~t#6wju=NA@+G*Ww9?| zvu>A|zp;xkSMP%_ou0`u$r{igt%v2LX5FS2L(O1`u5e}72$tH2V!Db=FG;^WRY)zX6cv^`WUDj+x7W<-j$*X%G@GM^Hz(bm? zr7NYcMl}p+#=VtZ>Yy#VGqrW@V+?J!`fwy0^+?PZhQy&THyvBM7s0He2*#{z<2bB& zi!fIBCbF1L5Z6F)+iZ4w0pD%1ks0=?d>vN;{E=6)^}76&q!#%Nt6Pja4Y=w~Vv<%d$!aiu2^HE{VJ$t#)%&1qkr`OC`gqUk$0evmVw>Q~ zfx8D`eIsu%Iz>h9#pC<-&JdxFc?1RxkfLL_*;-?);ex-$*zmvdxP5&izvmdfm#xyQ zS=4Mj1{sWk<3}Iu+LVYTCLximNfl{}m=(Ab?!9!92iBh7z1f;H2k4v%GrEWYuyQJ( z5WgHtxz{R*So0RE|3Jj`xb<7ONDT^BKkaU>sz>*$EhNw>zG=l@hXr4^DMO7rb@huy zmzV8f7eP(DJ8Jirn7ED={ebg#llTYBz(ZTxhy1*}=TG>!yiq@|{uzFr*@%xq?fz&w z7nE_p-Cqk6zY4hfvHe}i9ZC~eW#E3I^gba5s5zoyjxoT z8-eppcE%wGUfPD5W9*4S{?}2vuUZrT1@PadjsIQXgVOYU44j{fP{{u`)a%mtzXbkS z8h#k~i)r{#;K$SOe*<^l8>K$JtH;0JKZ2TgHfr}}VdDJ%VYa2ocL9EP8h#3JzL?MW zbG-e5Kb+P+2)O&sHT9hX{DZXiLf{-*R}{8i0-P89{4n19HFr489}|H0Ny8@t=l`p$ z`E4-^xckBa_00zEzL`dR9&q=40OGa4%`|-rfZvJyI2Q`p&i5kS7X*oa1-kpr2=P^D zZ|mO@cL3-A@yrii)xjI5_&=u7#&b9D`ZWAL;O^@y)OSB{_f-etYk}`h<9`ge`z{CD zp8|d)t$hRVXVdVPfWMYD9={??T8xL(2)3$Ek}&T#KzQdckvXuCBcN9s~W-wLTK zCSLyGKFhg5bML$6&#S7||F@O8C5!4SJKWpxO+gvzAe}ss>vUBd& zqLsXlO1qWh|D`pw{e4}uvbY4dS}}G?<@y#(-?h!FsH{xgWa2-?Qdf1({b$-mqqv9*0 zMHazWw-Ge=Sk6DdxO@Y!+5H~n^t5BO%XgN;$LC_MbNf*6$C}i~BByNJC2M?v5s-@&WC&~tDM^9 z>oXRw{5d?VT)tm9u-o(t@O|K{%Pt@5-=VlR5T6PM3?blr+&0$C0rzt&_$DG)ArSbZ l1jdc9A0^Ff@&3>Fzmb6Gd|VLe(T?xIYw>c2%Y@qH`yWj1Ma}>K literal 25584 zcmb7s3w%`7wf8x5=1gXiNoFPqAt6D7JOqINieexjuP9F&4Nny@2@?{?tC^VqUJz
: +0000006c
: int main(int argc, char *argv[]) { - 70: f3 0f 1e fb endbr32 - 74: 8d 4c 24 04 lea 0x4(%esp),%ecx - 78: 83 e4 f0 and $0xfffffff0,%esp - 7b: ff 71 fc pushl -0x4(%ecx) - 7e: 55 push %ebp - 7f: 89 e5 mov %esp,%ebp - 81: 57 push %edi - 82: 56 push %esi - 83: 53 push %ebx - 84: 51 push %ecx - 85: 83 ec 18 sub $0x18,%esp - 88: 8b 01 mov (%ecx),%eax - 8a: 89 45 e4 mov %eax,-0x1c(%ebp) - 8d: 8b 71 04 mov 0x4(%ecx),%esi + 6c: 8d 4c 24 04 lea 0x4(%esp),%ecx + 70: 83 e4 f0 and $0xfffffff0,%esp + 73: ff 71 fc push -0x4(%ecx) + 76: 55 push %ebp + 77: 89 e5 mov %esp,%ebp + 79: 57 push %edi + 7a: 56 push %esi + 7b: 53 push %ebx + 7c: 51 push %ecx + 7d: 83 ec 18 sub $0x18,%esp + 80: 8b 01 mov (%ecx),%eax + 82: 89 45 e4 mov %eax,-0x1c(%ebp) + 85: 8b 71 04 mov 0x4(%ecx),%esi int fd, i; if(argc <= 1){ - 90: 83 c6 04 add $0x4,%esi + 88: 83 c6 04 add $0x4,%esi cat(0); exit(); } for(i = 1; i < argc; i++){ - 93: bf 01 00 00 00 mov $0x1,%edi + 8b: bf 01 00 00 00 mov $0x1,%edi if(argc <= 1){ - 98: 83 f8 01 cmp $0x1,%eax - 9b: 7e 3c jle d9 + 90: 83 f8 01 cmp $0x1,%eax + 93: 7e 3c jle d1 if((fd = open(argv[i], 0)) < 0){ - 9d: 89 75 e0 mov %esi,-0x20(%ebp) - a0: 83 ec 08 sub $0x8,%esp - a3: 6a 00 push $0x0 - a5: ff 36 pushl (%esi) - a7: e8 7b 02 00 00 call 327 - ac: 89 c3 mov %eax,%ebx - ae: 83 c4 10 add $0x10,%esp - b1: 85 c0 test %eax,%eax - b3: 78 33 js e8 + 95: 89 75 e0 mov %esi,-0x20(%ebp) + 98: 83 ec 08 sub $0x8,%esp + 9b: 6a 00 push $0x0 + 9d: ff 36 push (%esi) + 9f: e8 5d 02 00 00 call 301 + a4: 89 c3 mov %eax,%ebx + a6: 83 c4 10 add $0x10,%esp + a9: 85 c0 test %eax,%eax + ab: 78 33 js e0 printf(1, "cat: cannot open %s\n", argv[i]); exit(); } cat(fd); - b5: 83 ec 0c sub $0xc,%esp - b8: 50 push %eax - b9: e8 42 ff ff ff call 0 + ad: 83 ec 0c sub $0xc,%esp + b0: 50 push %eax + b1: e8 4a ff ff ff call 0 close(fd); - be: 89 1c 24 mov %ebx,(%esp) - c1: e8 49 02 00 00 call 30f + b6: 89 1c 24 mov %ebx,(%esp) + b9: e8 2b 02 00 00 call 2e9 for(i = 1; i < argc; i++){ - c6: 83 c7 01 add $0x1,%edi - c9: 83 c6 04 add $0x4,%esi - cc: 83 c4 10 add $0x10,%esp - cf: 39 7d e4 cmp %edi,-0x1c(%ebp) - d2: 75 c9 jne 9d + be: 83 c7 01 add $0x1,%edi + c1: 83 c6 04 add $0x4,%esi + c4: 83 c4 10 add $0x10,%esp + c7: 39 7d e4 cmp %edi,-0x1c(%ebp) + ca: 75 c9 jne 95 } exit(); - d4: e8 0e 02 00 00 call 2e7 + cc: e8 f0 01 00 00 call 2c1 cat(0); - d9: 83 ec 0c sub $0xc,%esp - dc: 6a 00 push $0x0 - de: e8 1d ff ff ff call 0 + d1: 83 ec 0c sub $0xc,%esp + d4: 6a 00 push $0x0 + d6: e8 25 ff ff ff call 0 exit(); - e3: e8 ff 01 00 00 call 2e7 + db: e8 e1 01 00 00 call 2c1 printf(1, "cat: cannot open %s\n", argv[i]); - e8: 83 ec 04 sub $0x4,%esp - eb: 8b 45 e0 mov -0x20(%ebp),%eax - ee: ff 30 pushl (%eax) - f0: 68 67 07 00 00 push $0x767 - f5: 6a 01 push $0x1 - f7: e8 2f 03 00 00 call 42b + e0: 83 ec 04 sub $0x4,%esp + e3: 8b 45 e0 mov -0x20(%ebp),%eax + e6: ff 30 push (%eax) + e8: 68 23 07 00 00 push $0x723 + ed: 6a 01 push $0x1 + ef: e8 15 03 00 00 call 409 exit(); - fc: e8 e6 01 00 00 call 2e7 + f4: e8 c8 01 00 00 call 2c1 -00000101 : +000000f9 : #include "user.h" #include "x86.h" char* strcpy(char *s, const char *t) { - 101: f3 0f 1e fb endbr32 - 105: 55 push %ebp - 106: 89 e5 mov %esp,%ebp - 108: 53 push %ebx - 109: 8b 4d 08 mov 0x8(%ebp),%ecx - 10c: 8b 5d 0c mov 0xc(%ebp),%ebx + f9: 55 push %ebp + fa: 89 e5 mov %esp,%ebp + fc: 53 push %ebx + fd: 8b 4d 08 mov 0x8(%ebp),%ecx + 100: 8b 5d 0c mov 0xc(%ebp),%ebx char *os; os = s; while((*s++ = *t++) != 0) - 10f: b8 00 00 00 00 mov $0x0,%eax - 114: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 118: 88 14 01 mov %dl,(%ecx,%eax,1) - 11b: 83 c0 01 add $0x1,%eax - 11e: 84 d2 test %dl,%dl - 120: 75 f2 jne 114 + 103: b8 00 00 00 00 mov $0x0,%eax + 108: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx + 10c: 88 14 01 mov %dl,(%ecx,%eax,1) + 10f: 83 c0 01 add $0x1,%eax + 112: 84 d2 test %dl,%dl + 114: 75 f2 jne 108 ; return os; } - 122: 89 c8 mov %ecx,%eax - 124: 5b pop %ebx - 125: 5d pop %ebp - 126: c3 ret + 116: 89 c8 mov %ecx,%eax + 118: 8b 5d fc mov -0x4(%ebp),%ebx + 11b: c9 leave + 11c: c3 ret -00000127 : +0000011d : int strcmp(const char *p, const char *q) { - 127: f3 0f 1e fb endbr32 - 12b: 55 push %ebp - 12c: 89 e5 mov %esp,%ebp - 12e: 8b 4d 08 mov 0x8(%ebp),%ecx - 131: 8b 55 0c mov 0xc(%ebp),%edx + 11d: 55 push %ebp + 11e: 89 e5 mov %esp,%ebp + 120: 8b 4d 08 mov 0x8(%ebp),%ecx + 123: 8b 55 0c mov 0xc(%ebp),%edx while(*p && *p == *q) - 134: 0f b6 01 movzbl (%ecx),%eax - 137: 84 c0 test %al,%al - 139: 74 11 je 14c - 13b: 38 02 cmp %al,(%edx) - 13d: 75 0d jne 14c + 126: 0f b6 01 movzbl (%ecx),%eax + 129: 84 c0 test %al,%al + 12b: 74 11 je 13e + 12d: 38 02 cmp %al,(%edx) + 12f: 75 0d jne 13e p++, q++; - 13f: 83 c1 01 add $0x1,%ecx - 142: 83 c2 01 add $0x1,%edx + 131: 83 c1 01 add $0x1,%ecx + 134: 83 c2 01 add $0x1,%edx while(*p && *p == *q) - 145: 0f b6 01 movzbl (%ecx),%eax - 148: 84 c0 test %al,%al - 14a: 75 ef jne 13b + 137: 0f b6 01 movzbl (%ecx),%eax + 13a: 84 c0 test %al,%al + 13c: 75 ef jne 12d return (uchar)*p - (uchar)*q; - 14c: 0f b6 c0 movzbl %al,%eax - 14f: 0f b6 12 movzbl (%edx),%edx - 152: 29 d0 sub %edx,%eax + 13e: 0f b6 c0 movzbl %al,%eax + 141: 0f b6 12 movzbl (%edx),%edx + 144: 29 d0 sub %edx,%eax } - 154: 5d pop %ebp - 155: c3 ret + 146: 5d pop %ebp + 147: c3 ret -00000156 : +00000148 : uint strlen(const char *s) { - 156: f3 0f 1e fb endbr32 - 15a: 55 push %ebp - 15b: 89 e5 mov %esp,%ebp - 15d: 8b 55 08 mov 0x8(%ebp),%edx + 148: 55 push %ebp + 149: 89 e5 mov %esp,%ebp + 14b: 8b 55 08 mov 0x8(%ebp),%edx int n; for(n = 0; s[n]; n++) - 160: 80 3a 00 cmpb $0x0,(%edx) - 163: 74 14 je 179 - 165: b8 00 00 00 00 mov $0x0,%eax - 16a: 83 c0 01 add $0x1,%eax - 16d: 89 c1 mov %eax,%ecx - 16f: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - 173: 75 f5 jne 16a + 14e: 80 3a 00 cmpb $0x0,(%edx) + 151: 74 14 je 167 + 153: b8 00 00 00 00 mov $0x0,%eax + 158: 83 c0 01 add $0x1,%eax + 15b: 89 c1 mov %eax,%ecx + 15d: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) + 161: 75 f5 jne 158 ; return n; } - 175: 89 c8 mov %ecx,%eax - 177: 5d pop %ebp - 178: c3 ret + 163: 89 c8 mov %ecx,%eax + 165: 5d pop %ebp + 166: c3 ret for(n = 0; s[n]; n++) - 179: b9 00 00 00 00 mov $0x0,%ecx + 167: b9 00 00 00 00 mov $0x0,%ecx return n; - 17e: eb f5 jmp 175 + 16c: eb f5 jmp 163 -00000180 : +0000016e : void* memset(void *dst, int c, uint n) { - 180: f3 0f 1e fb endbr32 - 184: 55 push %ebp - 185: 89 e5 mov %esp,%ebp - 187: 57 push %edi - 188: 8b 55 08 mov 0x8(%ebp),%edx + 16e: 55 push %ebp + 16f: 89 e5 mov %esp,%ebp + 171: 57 push %edi + 172: 8b 55 08 mov 0x8(%ebp),%edx } static inline void stosb(void *addr, int data, int cnt) { asm volatile("cld; rep stosb" : - 18b: 89 d7 mov %edx,%edi - 18d: 8b 4d 10 mov 0x10(%ebp),%ecx - 190: 8b 45 0c mov 0xc(%ebp),%eax - 193: fc cld - 194: f3 aa rep stos %al,%es:(%edi) + 175: 89 d7 mov %edx,%edi + 177: 8b 4d 10 mov 0x10(%ebp),%ecx + 17a: 8b 45 0c mov 0xc(%ebp),%eax + 17d: fc cld + 17e: f3 aa rep stos %al,%es:(%edi) stosb(dst, c, n); return dst; } - 196: 89 d0 mov %edx,%eax - 198: 5f pop %edi - 199: 5d pop %ebp - 19a: c3 ret + 180: 89 d0 mov %edx,%eax + 182: 8b 7d fc mov -0x4(%ebp),%edi + 185: c9 leave + 186: c3 ret -0000019b : +00000187 : char* strchr(const char *s, char c) { - 19b: f3 0f 1e fb endbr32 - 19f: 55 push %ebp - 1a0: 89 e5 mov %esp,%ebp - 1a2: 8b 45 08 mov 0x8(%ebp),%eax - 1a5: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx + 187: 55 push %ebp + 188: 89 e5 mov %esp,%ebp + 18a: 8b 45 08 mov 0x8(%ebp),%eax + 18d: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx for(; *s; s++) - 1a9: 0f b6 10 movzbl (%eax),%edx - 1ac: 84 d2 test %dl,%dl - 1ae: 74 15 je 1c5 + 191: 0f b6 10 movzbl (%eax),%edx + 194: 84 d2 test %dl,%dl + 196: 74 15 je 1ad if(*s == c) - 1b0: 38 d1 cmp %dl,%cl - 1b2: 74 0f je 1c3 + 198: 38 d1 cmp %dl,%cl + 19a: 74 0f je 1ab for(; *s; s++) - 1b4: 83 c0 01 add $0x1,%eax - 1b7: 0f b6 10 movzbl (%eax),%edx - 1ba: 84 d2 test %dl,%dl - 1bc: 75 f2 jne 1b0 + 19c: 83 c0 01 add $0x1,%eax + 19f: 0f b6 10 movzbl (%eax),%edx + 1a2: 84 d2 test %dl,%dl + 1a4: 75 f2 jne 198 return (char*)s; return 0; - 1be: b8 00 00 00 00 mov $0x0,%eax + 1a6: b8 00 00 00 00 mov $0x0,%eax } - 1c3: 5d pop %ebp - 1c4: c3 ret + 1ab: 5d pop %ebp + 1ac: c3 ret return 0; - 1c5: b8 00 00 00 00 mov $0x0,%eax - 1ca: eb f7 jmp 1c3 + 1ad: b8 00 00 00 00 mov $0x0,%eax + 1b2: eb f7 jmp 1ab -000001cc : +000001b4 : char* gets(char *buf, int max) { - 1cc: f3 0f 1e fb endbr32 - 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 2c sub $0x2c,%esp - 1d9: 8b 75 08 mov 0x8(%ebp),%esi + 1b4: 55 push %ebp + 1b5: 89 e5 mov %esp,%ebp + 1b7: 57 push %edi + 1b8: 56 push %esi + 1b9: 53 push %ebx + 1ba: 83 ec 2c sub $0x2c,%esp + 1bd: 8b 75 08 mov 0x8(%ebp),%esi int i, cc; char c; for(i=0; i+1 < max; ){ - 1dc: bb 00 00 00 00 mov $0x0,%ebx + 1c0: bb 00 00 00 00 mov $0x0,%ebx cc = read(0, &c, 1); - 1e1: 8d 7d e7 lea -0x19(%ebp),%edi + 1c5: 8d 7d e7 lea -0x19(%ebp),%edi for(i=0; i+1 < max; ){ - 1e4: 89 5d d4 mov %ebx,-0x2c(%ebp) - 1e7: 83 c3 01 add $0x1,%ebx - 1ea: 3b 5d 0c cmp 0xc(%ebp),%ebx - 1ed: 7d 27 jge 216 + 1c8: 89 5d d4 mov %ebx,-0x2c(%ebp) + 1cb: 83 c3 01 add $0x1,%ebx + 1ce: 3b 5d 0c cmp 0xc(%ebp),%ebx + 1d1: 7d 27 jge 1fa cc = read(0, &c, 1); - 1ef: 83 ec 04 sub $0x4,%esp - 1f2: 6a 01 push $0x1 - 1f4: 57 push %edi - 1f5: 6a 00 push $0x0 - 1f7: e8 03 01 00 00 call 2ff + 1d3: 83 ec 04 sub $0x4,%esp + 1d6: 6a 01 push $0x1 + 1d8: 57 push %edi + 1d9: 6a 00 push $0x0 + 1db: e8 f9 00 00 00 call 2d9 if(cc < 1) - 1fc: 83 c4 10 add $0x10,%esp - 1ff: 85 c0 test %eax,%eax - 201: 7e 13 jle 216 + 1e0: 83 c4 10 add $0x10,%esp + 1e3: 85 c0 test %eax,%eax + 1e5: 7e 13 jle 1fa break; buf[i++] = c; - 203: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 207: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) + 1e7: 0f b6 45 e7 movzbl -0x19(%ebp),%eax + 1eb: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) if(c == '\n' || c == '\r') - 20b: 3c 0a cmp $0xa,%al - 20d: 74 04 je 213 - 20f: 3c 0d cmp $0xd,%al - 211: 75 d1 jne 1e4 + 1ef: 3c 0a cmp $0xa,%al + 1f1: 74 04 je 1f7 + 1f3: 3c 0d cmp $0xd,%al + 1f5: 75 d1 jne 1c8 for(i=0; i+1 < max; ){ - 213: 89 5d d4 mov %ebx,-0x2c(%ebp) + 1f7: 89 5d d4 mov %ebx,-0x2c(%ebp) break; } buf[i] = '\0'; - 216: 8b 45 d4 mov -0x2c(%ebp),%eax - 219: c6 04 06 00 movb $0x0,(%esi,%eax,1) + 1fa: 8b 45 d4 mov -0x2c(%ebp),%eax + 1fd: c6 04 06 00 movb $0x0,(%esi,%eax,1) return buf; } - 21d: 89 f0 mov %esi,%eax - 21f: 8d 65 f4 lea -0xc(%ebp),%esp - 222: 5b pop %ebx - 223: 5e pop %esi - 224: 5f pop %edi - 225: 5d pop %ebp - 226: c3 ret + 201: 89 f0 mov %esi,%eax + 203: 8d 65 f4 lea -0xc(%ebp),%esp + 206: 5b pop %ebx + 207: 5e pop %esi + 208: 5f pop %edi + 209: 5d pop %ebp + 20a: c3 ret -00000227 : +0000020b : int stat(const char *n, struct stat *st) { - 227: f3 0f 1e fb endbr32 - 22b: 55 push %ebp - 22c: 89 e5 mov %esp,%ebp - 22e: 56 push %esi - 22f: 53 push %ebx + 20b: 55 push %ebp + 20c: 89 e5 mov %esp,%ebp + 20e: 56 push %esi + 20f: 53 push %ebx int fd; int r; fd = open(n, O_RDONLY); - 230: 83 ec 08 sub $0x8,%esp - 233: 6a 00 push $0x0 - 235: ff 75 08 pushl 0x8(%ebp) - 238: e8 ea 00 00 00 call 327 + 210: 83 ec 08 sub $0x8,%esp + 213: 6a 00 push $0x0 + 215: ff 75 08 push 0x8(%ebp) + 218: e8 e4 00 00 00 call 301 if(fd < 0) - 23d: 83 c4 10 add $0x10,%esp - 240: 85 c0 test %eax,%eax - 242: 78 24 js 268 - 244: 89 c3 mov %eax,%ebx + 21d: 83 c4 10 add $0x10,%esp + 220: 85 c0 test %eax,%eax + 222: 78 24 js 248 + 224: 89 c3 mov %eax,%ebx return -1; r = fstat(fd, st); - 246: 83 ec 08 sub $0x8,%esp - 249: ff 75 0c pushl 0xc(%ebp) - 24c: 50 push %eax - 24d: e8 ed 00 00 00 call 33f - 252: 89 c6 mov %eax,%esi + 226: 83 ec 08 sub $0x8,%esp + 229: ff 75 0c push 0xc(%ebp) + 22c: 50 push %eax + 22d: e8 e7 00 00 00 call 319 + 232: 89 c6 mov %eax,%esi close(fd); - 254: 89 1c 24 mov %ebx,(%esp) - 257: e8 b3 00 00 00 call 30f + 234: 89 1c 24 mov %ebx,(%esp) + 237: e8 ad 00 00 00 call 2e9 return r; - 25c: 83 c4 10 add $0x10,%esp + 23c: 83 c4 10 add $0x10,%esp } - 25f: 89 f0 mov %esi,%eax - 261: 8d 65 f8 lea -0x8(%ebp),%esp - 264: 5b pop %ebx - 265: 5e pop %esi - 266: 5d pop %ebp - 267: c3 ret + 23f: 89 f0 mov %esi,%eax + 241: 8d 65 f8 lea -0x8(%ebp),%esp + 244: 5b pop %ebx + 245: 5e pop %esi + 246: 5d pop %ebp + 247: c3 ret return -1; - 268: be ff ff ff ff mov $0xffffffff,%esi - 26d: eb f0 jmp 25f + 248: be ff ff ff ff mov $0xffffffff,%esi + 24d: eb f0 jmp 23f -0000026f : +0000024f : int atoi(const char *s) { - 26f: f3 0f 1e fb endbr32 - 273: 55 push %ebp - 274: 89 e5 mov %esp,%ebp - 276: 53 push %ebx - 277: 8b 55 08 mov 0x8(%ebp),%edx + 24f: 55 push %ebp + 250: 89 e5 mov %esp,%ebp + 252: 53 push %ebx + 253: 8b 55 08 mov 0x8(%ebp),%edx int n; n = 0; while('0' <= *s && *s <= '9') - 27a: 0f b6 02 movzbl (%edx),%eax - 27d: 8d 48 d0 lea -0x30(%eax),%ecx - 280: 80 f9 09 cmp $0x9,%cl - 283: 77 22 ja 2a7 + 256: 0f b6 02 movzbl (%edx),%eax + 259: 8d 48 d0 lea -0x30(%eax),%ecx + 25c: 80 f9 09 cmp $0x9,%cl + 25f: 77 24 ja 285 n = 0; - 285: b9 00 00 00 00 mov $0x0,%ecx + 261: b9 00 00 00 00 mov $0x0,%ecx n = n*10 + *s++ - '0'; - 28a: 83 c2 01 add $0x1,%edx - 28d: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 290: 0f be c0 movsbl %al,%eax - 293: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx + 266: 83 c2 01 add $0x1,%edx + 269: 8d 0c 89 lea (%ecx,%ecx,4),%ecx + 26c: 0f be c0 movsbl %al,%eax + 26f: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx while('0' <= *s && *s <= '9') - 297: 0f b6 02 movzbl (%edx),%eax - 29a: 8d 58 d0 lea -0x30(%eax),%ebx - 29d: 80 fb 09 cmp $0x9,%bl - 2a0: 76 e8 jbe 28a + 273: 0f b6 02 movzbl (%edx),%eax + 276: 8d 58 d0 lea -0x30(%eax),%ebx + 279: 80 fb 09 cmp $0x9,%bl + 27c: 76 e8 jbe 266 return n; } - 2a2: 89 c8 mov %ecx,%eax - 2a4: 5b pop %ebx - 2a5: 5d pop %ebp - 2a6: c3 ret + 27e: 89 c8 mov %ecx,%eax + 280: 8b 5d fc mov -0x4(%ebp),%ebx + 283: c9 leave + 284: c3 ret n = 0; - 2a7: b9 00 00 00 00 mov $0x0,%ecx + 285: b9 00 00 00 00 mov $0x0,%ecx return n; - 2ac: eb f4 jmp 2a2 + 28a: eb f2 jmp 27e -000002ae : +0000028c : void* memmove(void *vdst, const void *vsrc, int n) { - 2ae: f3 0f 1e fb endbr32 - 2b2: 55 push %ebp - 2b3: 89 e5 mov %esp,%ebp - 2b5: 56 push %esi - 2b6: 53 push %ebx - 2b7: 8b 75 08 mov 0x8(%ebp),%esi - 2ba: 8b 55 0c mov 0xc(%ebp),%edx - 2bd: 8b 5d 10 mov 0x10(%ebp),%ebx + 28c: 55 push %ebp + 28d: 89 e5 mov %esp,%ebp + 28f: 56 push %esi + 290: 53 push %ebx + 291: 8b 75 08 mov 0x8(%ebp),%esi + 294: 8b 55 0c mov 0xc(%ebp),%edx + 297: 8b 5d 10 mov 0x10(%ebp),%ebx char *dst; const char *src; dst = vdst; src = vsrc; while(n-- > 0) - 2c0: 85 db test %ebx,%ebx - 2c2: 7e 15 jle 2d9 - 2c4: 01 f3 add %esi,%ebx + 29a: 85 db test %ebx,%ebx + 29c: 7e 15 jle 2b3 + 29e: 01 f3 add %esi,%ebx dst = vdst; - 2c6: 89 f0 mov %esi,%eax + 2a0: 89 f0 mov %esi,%eax *dst++ = *src++; - 2c8: 83 c2 01 add $0x1,%edx - 2cb: 83 c0 01 add $0x1,%eax - 2ce: 0f b6 4a ff movzbl -0x1(%edx),%ecx - 2d2: 88 48 ff mov %cl,-0x1(%eax) + 2a2: 83 c2 01 add $0x1,%edx + 2a5: 83 c0 01 add $0x1,%eax + 2a8: 0f b6 4a ff movzbl -0x1(%edx),%ecx + 2ac: 88 48 ff mov %cl,-0x1(%eax) while(n-- > 0) - 2d5: 39 c3 cmp %eax,%ebx - 2d7: 75 ef jne 2c8 + 2af: 39 c3 cmp %eax,%ebx + 2b1: 75 ef jne 2a2 return vdst; } - 2d9: 89 f0 mov %esi,%eax - 2db: 5b pop %ebx - 2dc: 5e pop %esi - 2dd: 5d pop %ebp - 2de: c3 ret + 2b3: 89 f0 mov %esi,%eax + 2b5: 5b pop %ebx + 2b6: 5e pop %esi + 2b7: 5d pop %ebp + 2b8: c3 ret -000002df : +000002b9 : name: \ movl $SYS_ ## name, %eax; \ int $T_SYSCALL; \ ret SYSCALL(fork) - 2df: b8 01 00 00 00 mov $0x1,%eax - 2e4: cd 40 int $0x40 - 2e6: c3 ret + 2b9: b8 01 00 00 00 mov $0x1,%eax + 2be: cd 40 int $0x40 + 2c0: c3 ret -000002e7 : +000002c1 : SYSCALL(exit) - 2e7: b8 02 00 00 00 mov $0x2,%eax - 2ec: cd 40 int $0x40 - 2ee: c3 ret + 2c1: b8 02 00 00 00 mov $0x2,%eax + 2c6: cd 40 int $0x40 + 2c8: c3 ret -000002ef : +000002c9 : SYSCALL(wait) - 2ef: b8 03 00 00 00 mov $0x3,%eax - 2f4: cd 40 int $0x40 - 2f6: c3 ret + 2c9: b8 03 00 00 00 mov $0x3,%eax + 2ce: cd 40 int $0x40 + 2d0: c3 ret -000002f7 : +000002d1 : SYSCALL(pipe) - 2f7: b8 04 00 00 00 mov $0x4,%eax - 2fc: cd 40 int $0x40 - 2fe: c3 ret + 2d1: b8 04 00 00 00 mov $0x4,%eax + 2d6: cd 40 int $0x40 + 2d8: c3 ret -000002ff : +000002d9 : SYSCALL(read) - 2ff: b8 05 00 00 00 mov $0x5,%eax - 304: cd 40 int $0x40 - 306: c3 ret + 2d9: b8 05 00 00 00 mov $0x5,%eax + 2de: cd 40 int $0x40 + 2e0: c3 ret -00000307 : +000002e1 : SYSCALL(write) - 307: b8 10 00 00 00 mov $0x10,%eax - 30c: cd 40 int $0x40 - 30e: c3 ret + 2e1: b8 10 00 00 00 mov $0x10,%eax + 2e6: cd 40 int $0x40 + 2e8: c3 ret -0000030f : +000002e9 : SYSCALL(close) - 30f: b8 15 00 00 00 mov $0x15,%eax - 314: cd 40 int $0x40 - 316: c3 ret + 2e9: b8 15 00 00 00 mov $0x15,%eax + 2ee: cd 40 int $0x40 + 2f0: c3 ret -00000317 : +000002f1 : SYSCALL(kill) - 317: b8 06 00 00 00 mov $0x6,%eax - 31c: cd 40 int $0x40 - 31e: c3 ret + 2f1: b8 06 00 00 00 mov $0x6,%eax + 2f6: cd 40 int $0x40 + 2f8: c3 ret -0000031f : +000002f9 : SYSCALL(exec) - 31f: b8 07 00 00 00 mov $0x7,%eax - 324: cd 40 int $0x40 - 326: c3 ret + 2f9: b8 07 00 00 00 mov $0x7,%eax + 2fe: cd 40 int $0x40 + 300: c3 ret -00000327 : +00000301 : SYSCALL(open) - 327: b8 0f 00 00 00 mov $0xf,%eax - 32c: cd 40 int $0x40 - 32e: c3 ret + 301: b8 0f 00 00 00 mov $0xf,%eax + 306: cd 40 int $0x40 + 308: c3 ret -0000032f : +00000309 : SYSCALL(mknod) - 32f: b8 11 00 00 00 mov $0x11,%eax - 334: cd 40 int $0x40 - 336: c3 ret + 309: b8 11 00 00 00 mov $0x11,%eax + 30e: cd 40 int $0x40 + 310: c3 ret -00000337 : +00000311 : SYSCALL(unlink) - 337: b8 12 00 00 00 mov $0x12,%eax - 33c: cd 40 int $0x40 - 33e: c3 ret + 311: b8 12 00 00 00 mov $0x12,%eax + 316: cd 40 int $0x40 + 318: c3 ret -0000033f : +00000319 : SYSCALL(fstat) - 33f: b8 08 00 00 00 mov $0x8,%eax - 344: cd 40 int $0x40 - 346: c3 ret + 319: b8 08 00 00 00 mov $0x8,%eax + 31e: cd 40 int $0x40 + 320: c3 ret -00000347 : +00000321 : SYSCALL(link) - 347: b8 13 00 00 00 mov $0x13,%eax - 34c: cd 40 int $0x40 - 34e: c3 ret + 321: b8 13 00 00 00 mov $0x13,%eax + 326: cd 40 int $0x40 + 328: c3 ret -0000034f : +00000329 : SYSCALL(mkdir) - 34f: b8 14 00 00 00 mov $0x14,%eax - 354: cd 40 int $0x40 - 356: c3 ret + 329: b8 14 00 00 00 mov $0x14,%eax + 32e: cd 40 int $0x40 + 330: c3 ret -00000357 : +00000331 : SYSCALL(chdir) - 357: b8 09 00 00 00 mov $0x9,%eax - 35c: cd 40 int $0x40 - 35e: c3 ret + 331: b8 09 00 00 00 mov $0x9,%eax + 336: cd 40 int $0x40 + 338: c3 ret -0000035f : +00000339 : SYSCALL(dup) - 35f: b8 0a 00 00 00 mov $0xa,%eax - 364: cd 40 int $0x40 - 366: c3 ret + 339: b8 0a 00 00 00 mov $0xa,%eax + 33e: cd 40 int $0x40 + 340: c3 ret -00000367 : +00000341 : SYSCALL(getpid) - 367: b8 0b 00 00 00 mov $0xb,%eax - 36c: cd 40 int $0x40 - 36e: c3 ret + 341: b8 0b 00 00 00 mov $0xb,%eax + 346: cd 40 int $0x40 + 348: c3 ret -0000036f : +00000349 : SYSCALL(sbrk) - 36f: b8 0c 00 00 00 mov $0xc,%eax - 374: cd 40 int $0x40 - 376: c3 ret + 349: b8 0c 00 00 00 mov $0xc,%eax + 34e: cd 40 int $0x40 + 350: c3 ret -00000377 : +00000351 : SYSCALL(sleep) - 377: b8 0d 00 00 00 mov $0xd,%eax - 37c: cd 40 int $0x40 - 37e: c3 ret + 351: b8 0d 00 00 00 mov $0xd,%eax + 356: cd 40 int $0x40 + 358: c3 ret -0000037f : +00000359 : SYSCALL(uptime) - 37f: b8 0e 00 00 00 mov $0xe,%eax - 384: cd 40 int $0x40 - 386: c3 ret + 359: b8 0e 00 00 00 mov $0xe,%eax + 35e: cd 40 int $0x40 + 360: c3 ret -00000387 : +00000361 : SYSCALL(slabtest) - 387: b8 16 00 00 00 mov $0x16,%eax - 38c: cd 40 int $0x40 - 38e: c3 ret + 361: b8 16 00 00 00 mov $0x16,%eax + 366: cd 40 int $0x40 + 368: c3 ret -0000038f : +00000369 : SYSCALL(ps) - 38f: b8 17 00 00 00 mov $0x17,%eax - 394: cd 40 int $0x40 - 396: c3 ret + 369: b8 17 00 00 00 mov $0x17,%eax + 36e: cd 40 int $0x40 + 370: c3 ret -00000397 : +00000371 : write(fd, &c, 1); } static void printint(int fd, int xx, int base, int sgn) { - 397: 55 push %ebp - 398: 89 e5 mov %esp,%ebp - 39a: 57 push %edi - 39b: 56 push %esi - 39c: 53 push %ebx - 39d: 83 ec 3c sub $0x3c,%esp - 3a0: 89 45 c4 mov %eax,-0x3c(%ebp) - 3a3: 89 d3 mov %edx,%ebx + 371: 55 push %ebp + 372: 89 e5 mov %esp,%ebp + 374: 57 push %edi + 375: 56 push %esi + 376: 53 push %ebx + 377: 83 ec 3c sub $0x3c,%esp + 37a: 89 45 c4 mov %eax,-0x3c(%ebp) + 37d: 89 ce mov %ecx,%esi char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 3a5: 83 7d 08 00 cmpl $0x0,0x8(%ebp) - 3a9: 74 77 je 422 - 3ab: 85 d2 test %edx,%edx - 3ad: 79 73 jns 422 + 37f: 83 7d 08 00 cmpl $0x0,0x8(%ebp) + 383: 74 79 je 3fe + 385: 85 d2 test %edx,%edx + 387: 79 75 jns 3fe neg = 1; x = -xx; - 3af: f7 db neg %ebx + 389: 89 d1 mov %edx,%ecx + 38b: f7 d9 neg %ecx neg = 1; - 3b1: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) + 38d: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) } else { x = xx; } i = 0; - 3b8: be 00 00 00 00 mov $0x0,%esi + 394: bb 00 00 00 00 mov $0x0,%ebx do{ buf[i++] = digits[x % base]; - 3bd: 89 f7 mov %esi,%edi - 3bf: 83 c6 01 add $0x1,%esi - 3c2: 89 d8 mov %ebx,%eax - 3c4: ba 00 00 00 00 mov $0x0,%edx - 3c9: f7 f1 div %ecx - 3cb: 0f b6 92 84 07 00 00 movzbl 0x784(%edx),%edx - 3d2: 88 54 35 d7 mov %dl,-0x29(%ebp,%esi,1) + 399: 89 df mov %ebx,%edi + 39b: 83 c3 01 add $0x1,%ebx + 39e: 89 c8 mov %ecx,%eax + 3a0: ba 00 00 00 00 mov $0x0,%edx + 3a5: f7 f6 div %esi + 3a7: 0f b6 92 98 07 00 00 movzbl 0x798(%edx),%edx + 3ae: 88 54 1d d7 mov %dl,-0x29(%ebp,%ebx,1) }while((x /= base) != 0); - 3d6: 89 da mov %ebx,%edx - 3d8: 89 c3 mov %eax,%ebx - 3da: 39 d1 cmp %edx,%ecx - 3dc: 76 df jbe 3bd + 3b2: 89 ca mov %ecx,%edx + 3b4: 89 c1 mov %eax,%ecx + 3b6: 39 d6 cmp %edx,%esi + 3b8: 76 df jbe 399 if(neg) - 3de: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) - 3e2: 74 08 je 3ec + 3ba: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) + 3be: 74 08 je 3c8 buf[i++] = '-'; - 3e4: c6 44 35 d8 2d movb $0x2d,-0x28(%ebp,%esi,1) - 3e9: 8d 77 02 lea 0x2(%edi),%esi + 3c0: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) + 3c5: 8d 5f 02 lea 0x2(%edi),%ebx while(--i >= 0) - 3ec: 85 f6 test %esi,%esi - 3ee: 7e 2a jle 41a - 3f0: 8d 5c 35 d7 lea -0x29(%ebp,%esi,1),%ebx - 3f4: 8d 7d d8 lea -0x28(%ebp),%edi + 3c8: 85 db test %ebx,%ebx + 3ca: 7e 2a jle 3f6 + 3cc: 8d 7d d8 lea -0x28(%ebp),%edi + 3cf: 8d 5c 1d d7 lea -0x29(%ebp,%ebx,1),%ebx write(fd, &c, 1); - 3f7: 8d 75 d7 lea -0x29(%ebp),%esi + 3d3: 8d 75 d7 lea -0x29(%ebp),%esi putc(fd, buf[i]); - 3fa: 0f b6 03 movzbl (%ebx),%eax - 3fd: 88 45 d7 mov %al,-0x29(%ebp) + 3d6: 0f b6 03 movzbl (%ebx),%eax + 3d9: 88 45 d7 mov %al,-0x29(%ebp) write(fd, &c, 1); - 400: 83 ec 04 sub $0x4,%esp - 403: 6a 01 push $0x1 - 405: 56 push %esi - 406: ff 75 c4 pushl -0x3c(%ebp) - 409: e8 f9 fe ff ff call 307 + 3dc: 83 ec 04 sub $0x4,%esp + 3df: 6a 01 push $0x1 + 3e1: 56 push %esi + 3e2: ff 75 c4 push -0x3c(%ebp) + 3e5: e8 f7 fe ff ff call 2e1 while(--i >= 0) - 40e: 89 d8 mov %ebx,%eax - 410: 83 eb 01 sub $0x1,%ebx - 413: 83 c4 10 add $0x10,%esp - 416: 39 f8 cmp %edi,%eax - 418: 75 e0 jne 3fa + 3ea: 89 d8 mov %ebx,%eax + 3ec: 83 eb 01 sub $0x1,%ebx + 3ef: 83 c4 10 add $0x10,%esp + 3f2: 39 f8 cmp %edi,%eax + 3f4: 75 e0 jne 3d6 } - 41a: 8d 65 f4 lea -0xc(%ebp),%esp - 41d: 5b pop %ebx - 41e: 5e pop %esi - 41f: 5f pop %edi - 420: 5d pop %ebp - 421: c3 ret + 3f6: 8d 65 f4 lea -0xc(%ebp),%esp + 3f9: 5b pop %ebx + 3fa: 5e pop %esi + 3fb: 5f pop %edi + 3fc: 5d pop %ebp + 3fd: c3 ret + x = xx; + 3fe: 89 d1 mov %edx,%ecx neg = 0; - 422: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) - 429: eb 8d jmp 3b8 + 400: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) + 407: eb 8b jmp 394 -0000042b : +00000409 : // Print to the given fd. Only understands %d, %x, %p, %s. void printf(int fd, const char *fmt, ...) { - 42b: f3 0f 1e fb endbr32 - 42f: 55 push %ebp - 430: 89 e5 mov %esp,%ebp - 432: 57 push %edi - 433: 56 push %esi - 434: 53 push %ebx - 435: 83 ec 2c sub $0x2c,%esp + 409: 55 push %ebp + 40a: 89 e5 mov %esp,%ebp + 40c: 57 push %edi + 40d: 56 push %esi + 40e: 53 push %ebx + 40f: 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++){ - 438: 8b 75 0c mov 0xc(%ebp),%esi - 43b: 0f b6 1e movzbl (%esi),%ebx - 43e: 84 db test %bl,%bl - 440: 0f 84 ab 01 00 00 je 5f1 - 446: 83 c6 01 add $0x1,%esi + 412: 8b 75 0c mov 0xc(%ebp),%esi + 415: 0f b6 1e movzbl (%esi),%ebx + 418: 84 db test %bl,%bl + 41a: 0f 84 9f 01 00 00 je 5bf + 420: 83 c6 01 add $0x1,%esi ap = (uint*)(void*)&fmt + 1; - 449: 8d 45 10 lea 0x10(%ebp),%eax - 44c: 89 45 d4 mov %eax,-0x2c(%ebp) + 423: 8d 45 10 lea 0x10(%ebp),%eax + 426: 89 45 d4 mov %eax,-0x2c(%ebp) state = 0; - 44f: bf 00 00 00 00 mov $0x0,%edi - 454: eb 2d jmp 483 + 429: bf 00 00 00 00 mov $0x0,%edi + 42e: eb 2d jmp 45d c = fmt[i] & 0xff; if(state == 0){ if(c == '%'){ state = '%'; } else { putc(fd, c); - 456: 88 5d e7 mov %bl,-0x19(%ebp) + 430: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 459: 83 ec 04 sub $0x4,%esp - 45c: 6a 01 push $0x1 - 45e: 8d 45 e7 lea -0x19(%ebp),%eax - 461: 50 push %eax - 462: ff 75 08 pushl 0x8(%ebp) - 465: e8 9d fe ff ff call 307 + 433: 83 ec 04 sub $0x4,%esp + 436: 6a 01 push $0x1 + 438: 8d 45 e7 lea -0x19(%ebp),%eax + 43b: 50 push %eax + 43c: ff 75 08 push 0x8(%ebp) + 43f: e8 9d fe ff ff call 2e1 putc(fd, c); - 46a: 83 c4 10 add $0x10,%esp - 46d: eb 05 jmp 474 + 444: 83 c4 10 add $0x10,%esp + 447: eb 05 jmp 44e } } else if(state == '%'){ - 46f: 83 ff 25 cmp $0x25,%edi - 472: 74 22 je 496 + 449: 83 ff 25 cmp $0x25,%edi + 44c: 74 1f je 46d for(i = 0; fmt[i]; i++){ - 474: 83 c6 01 add $0x1,%esi - 477: 0f b6 5e ff movzbl -0x1(%esi),%ebx - 47b: 84 db test %bl,%bl - 47d: 0f 84 6e 01 00 00 je 5f1 + 44e: 83 c6 01 add $0x1,%esi + 451: 0f b6 5e ff movzbl -0x1(%esi),%ebx + 455: 84 db test %bl,%bl + 457: 0f 84 62 01 00 00 je 5bf c = fmt[i] & 0xff; - 483: 0f be d3 movsbl %bl,%edx - 486: 0f b6 c3 movzbl %bl,%eax + 45d: 0f b6 c3 movzbl %bl,%eax if(state == 0){ - 489: 85 ff test %edi,%edi - 48b: 75 e2 jne 46f + 460: 85 ff test %edi,%edi + 462: 75 e5 jne 449 if(c == '%'){ - 48d: 83 f8 25 cmp $0x25,%eax - 490: 75 c4 jne 456 + 464: 83 f8 25 cmp $0x25,%eax + 467: 75 c7 jne 430 state = '%'; - 492: 89 c7 mov %eax,%edi - 494: eb de jmp 474 + 469: 89 c7 mov %eax,%edi + 46b: eb e1 jmp 44e if(c == 'd'){ - 496: 83 f8 64 cmp $0x64,%eax - 499: 74 59 je 4f4 + 46d: 83 f8 25 cmp $0x25,%eax + 470: 0f 84 f2 00 00 00 je 568 + 476: 8d 50 9d lea -0x63(%eax),%edx + 479: 83 fa 15 cmp $0x15,%edx + 47c: 0f 87 07 01 00 00 ja 589 + 482: 0f 87 01 01 00 00 ja 589 + 488: ff 24 95 40 07 00 00 jmp *0x740(,%edx,4) printint(fd, *ap, 10, 1); + 48f: 83 ec 0c sub $0xc,%esp + 492: 6a 01 push $0x1 + 494: b9 0a 00 00 00 mov $0xa,%ecx + 499: 8b 7d d4 mov -0x2c(%ebp),%edi + 49c: 8b 17 mov (%edi),%edx + 49e: 8b 45 08 mov 0x8(%ebp),%eax + 4a1: e8 cb fe ff ff call 371 ap++; - } else if(c == 'x' || c == 'p'){ - 49b: 81 e2 f7 00 00 00 and $0xf7,%edx - 4a1: 83 fa 70 cmp $0x70,%edx - 4a4: 74 7a je 520 - printint(fd, *ap, 16, 0); - ap++; - } else if(c == 's'){ - 4a6: 83 f8 73 cmp $0x73,%eax - 4a9: 0f 84 9d 00 00 00 je 54c - s = "(null)"; - while(*s != 0){ - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 4af: 83 f8 63 cmp $0x63,%eax - 4b2: 0f 84 ec 00 00 00 je 5a4 - putc(fd, *ap); - ap++; - } else if(c == '%'){ - 4b8: 83 f8 25 cmp $0x25,%eax - 4bb: 0f 84 0f 01 00 00 je 5d0 - putc(fd, c); + 4a6: 89 f8 mov %edi,%eax + 4a8: 83 c0 04 add $0x4,%eax + 4ab: 89 45 d4 mov %eax,-0x2c(%ebp) + 4ae: 83 c4 10 add $0x10,%esp } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); - 4c1: c6 45 e7 25 movb $0x25,-0x19(%ebp) - write(fd, &c, 1); - 4c5: 83 ec 04 sub $0x4,%esp - 4c8: 6a 01 push $0x1 - 4ca: 8d 45 e7 lea -0x19(%ebp),%eax - 4cd: 50 push %eax - 4ce: ff 75 08 pushl 0x8(%ebp) - 4d1: e8 31 fe ff ff call 307 - putc(fd, c); - 4d6: 88 5d e7 mov %bl,-0x19(%ebp) - write(fd, &c, 1); - 4d9: 83 c4 0c add $0xc,%esp - 4dc: 6a 01 push $0x1 - 4de: 8d 45 e7 lea -0x19(%ebp),%eax - 4e1: 50 push %eax - 4e2: ff 75 08 pushl 0x8(%ebp) - 4e5: e8 1d fe ff ff call 307 putc(fd, c); - 4ea: 83 c4 10 add $0x10,%esp } state = 0; - 4ed: bf 00 00 00 00 mov $0x0,%edi - 4f2: eb 80 jmp 474 - printint(fd, *ap, 10, 1); - 4f4: 83 ec 0c sub $0xc,%esp - 4f7: 6a 01 push $0x1 - 4f9: b9 0a 00 00 00 mov $0xa,%ecx - 4fe: 8b 7d d4 mov -0x2c(%ebp),%edi - 501: 8b 17 mov (%edi),%edx - 503: 8b 45 08 mov 0x8(%ebp),%eax - 506: e8 8c fe ff ff call 397 - ap++; - 50b: 89 f8 mov %edi,%eax - 50d: 83 c0 04 add $0x4,%eax - 510: 89 45 d4 mov %eax,-0x2c(%ebp) - 513: 83 c4 10 add $0x10,%esp - state = 0; - 516: bf 00 00 00 00 mov $0x0,%edi - 51b: e9 54 ff ff ff jmp 474 + 4b1: bf 00 00 00 00 mov $0x0,%edi + 4b6: eb 96 jmp 44e printint(fd, *ap, 16, 0); - 520: 83 ec 0c sub $0xc,%esp - 523: 6a 00 push $0x0 - 525: b9 10 00 00 00 mov $0x10,%ecx - 52a: 8b 7d d4 mov -0x2c(%ebp),%edi - 52d: 8b 17 mov (%edi),%edx - 52f: 8b 45 08 mov 0x8(%ebp),%eax - 532: e8 60 fe ff ff call 397 + 4b8: 83 ec 0c sub $0xc,%esp + 4bb: 6a 00 push $0x0 + 4bd: b9 10 00 00 00 mov $0x10,%ecx + 4c2: 8b 7d d4 mov -0x2c(%ebp),%edi + 4c5: 8b 17 mov (%edi),%edx + 4c7: 8b 45 08 mov 0x8(%ebp),%eax + 4ca: e8 a2 fe ff ff call 371 ap++; - 537: 89 f8 mov %edi,%eax - 539: 83 c0 04 add $0x4,%eax - 53c: 89 45 d4 mov %eax,-0x2c(%ebp) - 53f: 83 c4 10 add $0x10,%esp + 4cf: 89 f8 mov %edi,%eax + 4d1: 83 c0 04 add $0x4,%eax + 4d4: 89 45 d4 mov %eax,-0x2c(%ebp) + 4d7: 83 c4 10 add $0x10,%esp state = 0; - 542: bf 00 00 00 00 mov $0x0,%edi - 547: e9 28 ff ff ff jmp 474 + 4da: bf 00 00 00 00 mov $0x0,%edi + 4df: e9 6a ff ff ff jmp 44e s = (char*)*ap; - 54c: 8b 4d d4 mov -0x2c(%ebp),%ecx - 54f: 8b 01 mov (%ecx),%eax + 4e4: 8b 4d d4 mov -0x2c(%ebp),%ecx + 4e7: 8b 01 mov (%ecx),%eax ap++; - 551: 83 c1 04 add $0x4,%ecx - 554: 89 4d d4 mov %ecx,-0x2c(%ebp) + 4e9: 83 c1 04 add $0x4,%ecx + 4ec: 89 4d d4 mov %ecx,-0x2c(%ebp) if(s == 0) - 557: 85 c0 test %eax,%eax - 559: 74 13 je 56e + 4ef: 85 c0 test %eax,%eax + 4f1: 74 13 je 506 s = (char*)*ap; - 55b: 89 c3 mov %eax,%ebx + 4f3: 89 c3 mov %eax,%ebx while(*s != 0){ - 55d: 0f b6 00 movzbl (%eax),%eax + 4f5: 0f b6 00 movzbl (%eax),%eax state = 0; - 560: bf 00 00 00 00 mov $0x0,%edi + 4f8: bf 00 00 00 00 mov $0x0,%edi while(*s != 0){ - 565: 84 c0 test %al,%al - 567: 75 0f jne 578 - 569: e9 06 ff ff ff jmp 474 + 4fd: 84 c0 test %al,%al + 4ff: 75 0f jne 510 + 501: e9 48 ff ff ff jmp 44e s = "(null)"; - 56e: bb 7c 07 00 00 mov $0x77c,%ebx + 506: bb 38 07 00 00 mov $0x738,%ebx while(*s != 0){ - 573: b8 28 00 00 00 mov $0x28,%eax - 578: 8b 7d 08 mov 0x8(%ebp),%edi + 50b: b8 28 00 00 00 mov $0x28,%eax + 510: 8b 7d 08 mov 0x8(%ebp),%edi putc(fd, *s); - 57b: 88 45 e7 mov %al,-0x19(%ebp) + 513: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 57e: 83 ec 04 sub $0x4,%esp - 581: 6a 01 push $0x1 - 583: 8d 45 e7 lea -0x19(%ebp),%eax - 586: 50 push %eax - 587: 57 push %edi - 588: e8 7a fd ff ff call 307 + 516: 83 ec 04 sub $0x4,%esp + 519: 6a 01 push $0x1 + 51b: 8d 45 e7 lea -0x19(%ebp),%eax + 51e: 50 push %eax + 51f: 57 push %edi + 520: e8 bc fd ff ff call 2e1 s++; - 58d: 83 c3 01 add $0x1,%ebx + 525: 83 c3 01 add $0x1,%ebx while(*s != 0){ - 590: 0f b6 03 movzbl (%ebx),%eax - 593: 83 c4 10 add $0x10,%esp - 596: 84 c0 test %al,%al - 598: 75 e1 jne 57b + 528: 0f b6 03 movzbl (%ebx),%eax + 52b: 83 c4 10 add $0x10,%esp + 52e: 84 c0 test %al,%al + 530: 75 e1 jne 513 state = 0; - 59a: bf 00 00 00 00 mov $0x0,%edi - 59f: e9 d0 fe ff ff jmp 474 + 532: bf 00 00 00 00 mov $0x0,%edi + 537: e9 12 ff ff ff jmp 44e putc(fd, *ap); - 5a4: 8b 7d d4 mov -0x2c(%ebp),%edi - 5a7: 8b 07 mov (%edi),%eax - 5a9: 88 45 e7 mov %al,-0x19(%ebp) + 53c: 8b 7d d4 mov -0x2c(%ebp),%edi + 53f: 8b 07 mov (%edi),%eax + 541: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 5ac: 83 ec 04 sub $0x4,%esp - 5af: 6a 01 push $0x1 - 5b1: 8d 45 e7 lea -0x19(%ebp),%eax - 5b4: 50 push %eax - 5b5: ff 75 08 pushl 0x8(%ebp) - 5b8: e8 4a fd ff ff call 307 + 544: 83 ec 04 sub $0x4,%esp + 547: 6a 01 push $0x1 + 549: 8d 45 e7 lea -0x19(%ebp),%eax + 54c: 50 push %eax + 54d: ff 75 08 push 0x8(%ebp) + 550: e8 8c fd ff ff call 2e1 ap++; - 5bd: 83 c7 04 add $0x4,%edi - 5c0: 89 7d d4 mov %edi,-0x2c(%ebp) - 5c3: 83 c4 10 add $0x10,%esp + 555: 83 c7 04 add $0x4,%edi + 558: 89 7d d4 mov %edi,-0x2c(%ebp) + 55b: 83 c4 10 add $0x10,%esp state = 0; - 5c6: bf 00 00 00 00 mov $0x0,%edi - 5cb: e9 a4 fe ff ff jmp 474 + 55e: bf 00 00 00 00 mov $0x0,%edi + 563: e9 e6 fe ff ff jmp 44e putc(fd, c); - 5d0: 88 5d e7 mov %bl,-0x19(%ebp) + 568: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 5d3: 83 ec 04 sub $0x4,%esp - 5d6: 6a 01 push $0x1 - 5d8: 8d 45 e7 lea -0x19(%ebp),%eax - 5db: 50 push %eax - 5dc: ff 75 08 pushl 0x8(%ebp) - 5df: e8 23 fd ff ff call 307 - 5e4: 83 c4 10 add $0x10,%esp + 56b: 83 ec 04 sub $0x4,%esp + 56e: 6a 01 push $0x1 + 570: 8d 45 e7 lea -0x19(%ebp),%eax + 573: 50 push %eax + 574: ff 75 08 push 0x8(%ebp) + 577: e8 65 fd ff ff call 2e1 + 57c: 83 c4 10 add $0x10,%esp + state = 0; + 57f: bf 00 00 00 00 mov $0x0,%edi + 584: e9 c5 fe ff ff jmp 44e + putc(fd, '%'); + 589: c6 45 e7 25 movb $0x25,-0x19(%ebp) + write(fd, &c, 1); + 58d: 83 ec 04 sub $0x4,%esp + 590: 6a 01 push $0x1 + 592: 8d 45 e7 lea -0x19(%ebp),%eax + 595: 50 push %eax + 596: ff 75 08 push 0x8(%ebp) + 599: e8 43 fd ff ff call 2e1 + putc(fd, c); + 59e: 88 5d e7 mov %bl,-0x19(%ebp) + write(fd, &c, 1); + 5a1: 83 c4 0c add $0xc,%esp + 5a4: 6a 01 push $0x1 + 5a6: 8d 45 e7 lea -0x19(%ebp),%eax + 5a9: 50 push %eax + 5aa: ff 75 08 push 0x8(%ebp) + 5ad: e8 2f fd ff ff call 2e1 + putc(fd, c); + 5b2: 83 c4 10 add $0x10,%esp state = 0; - 5e7: bf 00 00 00 00 mov $0x0,%edi - 5ec: e9 83 fe ff ff jmp 474 + 5b5: bf 00 00 00 00 mov $0x0,%edi + 5ba: e9 8f fe ff ff jmp 44e } } } - 5f1: 8d 65 f4 lea -0xc(%ebp),%esp - 5f4: 5b pop %ebx - 5f5: 5e pop %esi - 5f6: 5f pop %edi - 5f7: 5d pop %ebp - 5f8: c3 ret - -000005f9 : + 5bf: 8d 65 f4 lea -0xc(%ebp),%esp + 5c2: 5b pop %ebx + 5c3: 5e pop %esi + 5c4: 5f pop %edi + 5c5: 5d pop %ebp + 5c6: c3 ret + +000005c7 : static Header base; static Header *freep; void free(void *ap) { - 5f9: f3 0f 1e fb endbr32 - 5fd: 55 push %ebp - 5fe: 89 e5 mov %esp,%ebp - 600: 57 push %edi - 601: 56 push %esi - 602: 53 push %ebx - 603: 8b 5d 08 mov 0x8(%ebp),%ebx + 5c7: 55 push %ebp + 5c8: 89 e5 mov %esp,%ebp + 5ca: 57 push %edi + 5cb: 56 push %esi + 5cc: 53 push %ebx + 5cd: 8b 5d 08 mov 0x8(%ebp),%ebx Header *bp, *p; bp = (Header*)ap - 1; - 606: 8d 4b f8 lea -0x8(%ebx),%ecx + 5d0: 8d 4b f8 lea -0x8(%ebx),%ecx for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 609: a1 40 0a 00 00 mov 0xa40,%eax - 60e: eb 0c jmp 61c + 5d3: a1 40 0c 00 00 mov 0xc40,%eax + 5d8: eb 0c jmp 5e6 if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 610: 8b 10 mov (%eax),%edx - 612: 39 c2 cmp %eax,%edx - 614: 77 04 ja 61a - 616: 39 ca cmp %ecx,%edx - 618: 77 10 ja 62a + 5da: 8b 10 mov (%eax),%edx + 5dc: 39 c2 cmp %eax,%edx + 5de: 77 04 ja 5e4 + 5e0: 39 ca cmp %ecx,%edx + 5e2: 77 10 ja 5f4 { - 61a: 89 d0 mov %edx,%eax + 5e4: 89 d0 mov %edx,%eax for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 61c: 39 c8 cmp %ecx,%eax - 61e: 73 f0 jae 610 - 620: 8b 10 mov (%eax),%edx - 622: 39 ca cmp %ecx,%edx - 624: 77 04 ja 62a + 5e6: 39 c8 cmp %ecx,%eax + 5e8: 73 f0 jae 5da + 5ea: 8b 10 mov (%eax),%edx + 5ec: 39 ca cmp %ecx,%edx + 5ee: 77 04 ja 5f4 if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 626: 39 c2 cmp %eax,%edx - 628: 77 f0 ja 61a + 5f0: 39 c2 cmp %eax,%edx + 5f2: 77 f0 ja 5e4 break; if(bp + bp->s.size == p->s.ptr){ - 62a: 8b 73 fc mov -0x4(%ebx),%esi - 62d: 8b 10 mov (%eax),%edx - 62f: 8d 3c f1 lea (%ecx,%esi,8),%edi - 632: 39 fa cmp %edi,%edx - 634: 74 19 je 64f + 5f4: 8b 73 fc mov -0x4(%ebx),%esi + 5f7: 8b 10 mov (%eax),%edx + 5f9: 8d 3c f1 lea (%ecx,%esi,8),%edi + 5fc: 39 fa cmp %edi,%edx + 5fe: 74 19 je 619 bp->s.size += p->s.ptr->s.size; bp->s.ptr = p->s.ptr->s.ptr; + 600: 89 53 f8 mov %edx,-0x8(%ebx) } else bp->s.ptr = p->s.ptr; - 636: 89 53 f8 mov %edx,-0x8(%ebx) if(p + p->s.size == bp){ - 639: 8b 50 04 mov 0x4(%eax),%edx - 63c: 8d 34 d0 lea (%eax,%edx,8),%esi - 63f: 39 f1 cmp %esi,%ecx - 641: 74 1b je 65e + 603: 8b 50 04 mov 0x4(%eax),%edx + 606: 8d 34 d0 lea (%eax,%edx,8),%esi + 609: 39 f1 cmp %esi,%ecx + 60b: 74 18 je 625 p->s.size += bp->s.size; p->s.ptr = bp->s.ptr; + 60d: 89 08 mov %ecx,(%eax) } else p->s.ptr = bp; - 643: 89 08 mov %ecx,(%eax) freep = p; - 645: a3 40 0a 00 00 mov %eax,0xa40 + 60f: a3 40 0c 00 00 mov %eax,0xc40 } - 64a: 5b pop %ebx - 64b: 5e pop %esi - 64c: 5f pop %edi - 64d: 5d pop %ebp - 64e: c3 ret + 614: 5b pop %ebx + 615: 5e pop %esi + 616: 5f pop %edi + 617: 5d pop %ebp + 618: c3 ret bp->s.size += p->s.ptr->s.size; - 64f: 03 72 04 add 0x4(%edx),%esi - 652: 89 73 fc mov %esi,-0x4(%ebx) + 619: 03 72 04 add 0x4(%edx),%esi + 61c: 89 73 fc mov %esi,-0x4(%ebx) bp->s.ptr = p->s.ptr->s.ptr; - 655: 8b 10 mov (%eax),%edx - 657: 8b 12 mov (%edx),%edx - 659: 89 53 f8 mov %edx,-0x8(%ebx) - 65c: eb db jmp 639 + 61f: 8b 10 mov (%eax),%edx + 621: 8b 12 mov (%edx),%edx + 623: eb db jmp 600 p->s.size += bp->s.size; - 65e: 03 53 fc add -0x4(%ebx),%edx - 661: 89 50 04 mov %edx,0x4(%eax) + 625: 03 53 fc add -0x4(%ebx),%edx + 628: 89 50 04 mov %edx,0x4(%eax) p->s.ptr = bp->s.ptr; - 664: 8b 53 f8 mov -0x8(%ebx),%edx - 667: 89 10 mov %edx,(%eax) - 669: eb da jmp 645 + 62b: 8b 4b f8 mov -0x8(%ebx),%ecx + 62e: eb dd jmp 60d -0000066b : +00000630 : return freep; } void* malloc(uint nbytes) { - 66b: f3 0f 1e fb endbr32 - 66f: 55 push %ebp - 670: 89 e5 mov %esp,%ebp - 672: 57 push %edi - 673: 56 push %esi - 674: 53 push %ebx - 675: 83 ec 0c sub $0xc,%esp + 630: 55 push %ebp + 631: 89 e5 mov %esp,%ebp + 633: 57 push %edi + 634: 56 push %esi + 635: 53 push %ebx + 636: 83 ec 0c sub $0xc,%esp Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 678: 8b 45 08 mov 0x8(%ebp),%eax - 67b: 8d 58 07 lea 0x7(%eax),%ebx - 67e: c1 eb 03 shr $0x3,%ebx - 681: 83 c3 01 add $0x1,%ebx + 639: 8b 45 08 mov 0x8(%ebp),%eax + 63c: 8d 58 07 lea 0x7(%eax),%ebx + 63f: c1 eb 03 shr $0x3,%ebx + 642: 83 c3 01 add $0x1,%ebx if((prevp = freep) == 0){ - 684: 8b 15 40 0a 00 00 mov 0xa40,%edx - 68a: 85 d2 test %edx,%edx - 68c: 74 20 je 6ae + 645: 8b 15 40 0c 00 00 mov 0xc40,%edx + 64b: 85 d2 test %edx,%edx + 64d: 74 1c je 66b base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 68e: 8b 02 mov (%edx),%eax + 64f: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 690: 8b 48 04 mov 0x4(%eax),%ecx - 693: 39 cb cmp %ecx,%ebx - 695: 76 3c jbe 6d3 - 697: 81 fb 00 10 00 00 cmp $0x1000,%ebx - 69d: be 00 10 00 00 mov $0x1000,%esi - 6a2: 0f 43 f3 cmovae %ebx,%esi + 651: 8b 48 04 mov 0x4(%eax),%ecx + 654: 39 cb cmp %ecx,%ebx + 656: 76 38 jbe 690 + 658: be 00 10 00 00 mov $0x1000,%esi + 65d: 39 f3 cmp %esi,%ebx + 65f: 0f 43 f3 cmovae %ebx,%esi p = sbrk(nu * sizeof(Header)); - 6a5: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi - 6ac: eb 72 jmp 720 + 662: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi + 669: eb 72 jmp 6dd base.s.ptr = freep = prevp = &base; - 6ae: c7 05 40 0a 00 00 44 movl $0xa44,0xa40 - 6b5: 0a 00 00 - 6b8: c7 05 44 0a 00 00 44 movl $0xa44,0xa44 - 6bf: 0a 00 00 + 66b: c7 05 40 0c 00 00 44 movl $0xc44,0xc40 + 672: 0c 00 00 + 675: c7 05 44 0c 00 00 44 movl $0xc44,0xc44 + 67c: 0c 00 00 base.s.size = 0; - 6c2: c7 05 48 0a 00 00 00 movl $0x0,0xa48 - 6c9: 00 00 00 + 67f: c7 05 48 0c 00 00 00 movl $0x0,0xc48 + 686: 00 00 00 for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 6cc: b8 44 0a 00 00 mov $0xa44,%eax - 6d1: eb c4 jmp 697 + 689: b8 44 0c 00 00 mov $0xc44,%eax + 68e: eb c8 jmp 658 if(p->s.size == nunits) - 6d3: 39 cb cmp %ecx,%ebx - 6d5: 74 1e je 6f5 + 690: 39 cb cmp %ecx,%ebx + 692: 74 1e je 6b2 prevp->s.ptr = p->s.ptr; else { p->s.size -= nunits; - 6d7: 29 d9 sub %ebx,%ecx - 6d9: 89 48 04 mov %ecx,0x4(%eax) + 694: 29 d9 sub %ebx,%ecx + 696: 89 48 04 mov %ecx,0x4(%eax) p += p->s.size; - 6dc: 8d 04 c8 lea (%eax,%ecx,8),%eax + 699: 8d 04 c8 lea (%eax,%ecx,8),%eax p->s.size = nunits; - 6df: 89 58 04 mov %ebx,0x4(%eax) + 69c: 89 58 04 mov %ebx,0x4(%eax) } freep = prevp; - 6e2: 89 15 40 0a 00 00 mov %edx,0xa40 + 69f: 89 15 40 0c 00 00 mov %edx,0xc40 return (void*)(p + 1); - 6e8: 8d 50 08 lea 0x8(%eax),%edx + 6a5: 8d 50 08 lea 0x8(%eax),%edx } if(p == freep) if((p = morecore(nunits)) == 0) return 0; } } - 6eb: 89 d0 mov %edx,%eax - 6ed: 8d 65 f4 lea -0xc(%ebp),%esp - 6f0: 5b pop %ebx - 6f1: 5e pop %esi - 6f2: 5f pop %edi - 6f3: 5d pop %ebp - 6f4: c3 ret + 6a8: 89 d0 mov %edx,%eax + 6aa: 8d 65 f4 lea -0xc(%ebp),%esp + 6ad: 5b pop %ebx + 6ae: 5e pop %esi + 6af: 5f pop %edi + 6b0: 5d pop %ebp + 6b1: c3 ret prevp->s.ptr = p->s.ptr; - 6f5: 8b 08 mov (%eax),%ecx - 6f7: 89 0a mov %ecx,(%edx) - 6f9: eb e7 jmp 6e2 + 6b2: 8b 08 mov (%eax),%ecx + 6b4: 89 0a mov %ecx,(%edx) + 6b6: eb e7 jmp 69f hp->s.size = nu; - 6fb: 89 70 04 mov %esi,0x4(%eax) + 6b8: 89 70 04 mov %esi,0x4(%eax) free((void*)(hp + 1)); - 6fe: 83 ec 0c sub $0xc,%esp - 701: 83 c0 08 add $0x8,%eax - 704: 50 push %eax - 705: e8 ef fe ff ff call 5f9 + 6bb: 83 ec 0c sub $0xc,%esp + 6be: 83 c0 08 add $0x8,%eax + 6c1: 50 push %eax + 6c2: e8 00 ff ff ff call 5c7 return freep; - 70a: 8b 15 40 0a 00 00 mov 0xa40,%edx + 6c7: 8b 15 40 0c 00 00 mov 0xc40,%edx if((p = morecore(nunits)) == 0) - 710: 83 c4 10 add $0x10,%esp - 713: 85 d2 test %edx,%edx - 715: 74 d4 je 6eb + 6cd: 83 c4 10 add $0x10,%esp + 6d0: 85 d2 test %edx,%edx + 6d2: 74 d4 je 6a8 for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 717: 8b 02 mov (%edx),%eax + 6d4: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 719: 8b 48 04 mov 0x4(%eax),%ecx - 71c: 39 d9 cmp %ebx,%ecx - 71e: 73 b3 jae 6d3 + 6d6: 8b 48 04 mov 0x4(%eax),%ecx + 6d9: 39 d9 cmp %ebx,%ecx + 6db: 73 b3 jae 690 if(p == freep) - 720: 89 c2 mov %eax,%edx - 722: 39 05 40 0a 00 00 cmp %eax,0xa40 - 728: 75 ed jne 717 + 6dd: 89 c2 mov %eax,%edx + 6df: 39 05 40 0c 00 00 cmp %eax,0xc40 + 6e5: 75 ed jne 6d4 p = sbrk(nu * sizeof(Header)); - 72a: 83 ec 0c sub $0xc,%esp - 72d: 57 push %edi - 72e: e8 3c fc ff ff call 36f + 6e7: 83 ec 0c sub $0xc,%esp + 6ea: 57 push %edi + 6eb: e8 59 fc ff ff call 349 if(p == (char*)-1) - 733: 83 c4 10 add $0x10,%esp - 736: 83 f8 ff cmp $0xffffffff,%eax - 739: 75 c0 jne 6fb + 6f0: 83 c4 10 add $0x10,%esp + 6f3: 83 f8 ff cmp $0xffffffff,%eax + 6f6: 75 c0 jne 6b8 return 0; - 73b: ba 00 00 00 00 mov $0x0,%edx - 740: eb a9 jmp 6eb + 6f8: ba 00 00 00 00 mov $0x0,%edx + 6fd: eb a9 jmp 6a8 diff --git a/src/user/cat.d b/src/user/cat.d new file mode 100644 index 0000000..5bed19b --- /dev/null +++ b/src/user/cat.d @@ -0,0 +1 @@ +user/cat.o: user/cat.c /usr/include/stdc-predef.h types.h stat.h user.h diff --git a/src/user/cat.o b/src/user/cat.o new file mode 100644 index 0000000000000000000000000000000000000000..a05a57bff1fec25dab413ce6fbf912a9f2ae83a6 GIT binary patch literal 4280 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 gj$ - 25: 8d 5f 04 lea 0x4(%edi),%ebx - 28: 8d 74 87 fc lea -0x4(%edi,%eax,4),%esi + 19: 83 fe 01 cmp $0x1,%esi + 1c: 7e 3e jle 5c + 1e: bb 01 00 00 00 mov $0x1,%ebx printf(1, "%s%s", argv[i], i+1 < argc ? " " : "\n"); - 2c: 39 f3 cmp %esi,%ebx - 2e: 74 1b je 4b - 30: 68 ac 06 00 00 push $0x6ac - 35: ff 33 pushl (%ebx) - 37: 68 ae 06 00 00 push $0x6ae - 3c: 6a 01 push $0x1 - 3e: e8 52 03 00 00 call 395 - for(i = 1; i < argc; i++) - 43: 83 c3 04 add $0x4,%ebx - 46: 83 c4 10 add $0x10,%esp - 49: eb e1 jmp 2c - printf(1, "%s%s", argv[i], i+1 < argc ? " " : "\n"); - 4b: 68 b3 06 00 00 push $0x6b3 - 50: 8b 45 e4 mov -0x1c(%ebp),%eax - 53: ff 74 87 fc pushl -0x4(%edi,%eax,4) - 57: 68 ae 06 00 00 push $0x6ae - 5c: 6a 01 push $0x1 - 5e: e8 32 03 00 00 call 395 - 63: 83 c4 10 add $0x10,%esp + 23: 83 c3 01 add $0x1,%ebx + 26: 39 f3 cmp %esi,%ebx + 28: 74 1a je 44 + 2a: 68 68 06 00 00 push $0x668 + 2f: ff 74 9f fc push -0x4(%edi,%ebx,4) + 33: 68 6a 06 00 00 push $0x66a + 38: 6a 01 push $0x1 + 3a: e8 32 03 00 00 call 371 + 3f: 83 c4 10 add $0x10,%esp + 42: eb df jmp 23 + 44: 68 6f 06 00 00 push $0x66f + 49: ff 74 b7 fc push -0x4(%edi,%esi,4) + 4d: 68 6a 06 00 00 push $0x66a + 52: 6a 01 push $0x1 + 54: e8 18 03 00 00 call 371 + 59: 83 c4 10 add $0x10,%esp exit(); - 66: e8 e6 01 00 00 call 251 + 5c: e8 c8 01 00 00 call 229 -0000006b : +00000061 : #include "user.h" #include "x86.h" char* strcpy(char *s, const char *t) { - 6b: f3 0f 1e fb endbr32 - 6f: 55 push %ebp - 70: 89 e5 mov %esp,%ebp - 72: 53 push %ebx - 73: 8b 4d 08 mov 0x8(%ebp),%ecx - 76: 8b 5d 0c mov 0xc(%ebp),%ebx + 61: 55 push %ebp + 62: 89 e5 mov %esp,%ebp + 64: 53 push %ebx + 65: 8b 4d 08 mov 0x8(%ebp),%ecx + 68: 8b 5d 0c mov 0xc(%ebp),%ebx char *os; os = s; while((*s++ = *t++) != 0) - 79: b8 00 00 00 00 mov $0x0,%eax - 7e: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 82: 88 14 01 mov %dl,(%ecx,%eax,1) - 85: 83 c0 01 add $0x1,%eax - 88: 84 d2 test %dl,%dl - 8a: 75 f2 jne 7e + 6b: b8 00 00 00 00 mov $0x0,%eax + 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; } - 8c: 89 c8 mov %ecx,%eax - 8e: 5b pop %ebx - 8f: 5d pop %ebp - 90: c3 ret + 7e: 89 c8 mov %ecx,%eax + 80: 8b 5d fc mov -0x4(%ebp),%ebx + 83: c9 leave + 84: c3 ret -00000091 : +00000085 : int strcmp(const char *p, const char *q) { - 91: f3 0f 1e fb endbr32 - 95: 55 push %ebp - 96: 89 e5 mov %esp,%ebp - 98: 8b 4d 08 mov 0x8(%ebp),%ecx - 9b: 8b 55 0c mov 0xc(%ebp),%edx + 85: 55 push %ebp + 86: 89 e5 mov %esp,%ebp + 88: 8b 4d 08 mov 0x8(%ebp),%ecx + 8b: 8b 55 0c mov 0xc(%ebp),%edx while(*p && *p == *q) - 9e: 0f b6 01 movzbl (%ecx),%eax - a1: 84 c0 test %al,%al - a3: 74 11 je b6 - a5: 38 02 cmp %al,(%edx) - a7: 75 0d jne b6 + 8e: 0f b6 01 movzbl (%ecx),%eax + 91: 84 c0 test %al,%al + 93: 74 11 je a6 + 95: 38 02 cmp %al,(%edx) + 97: 75 0d jne a6 p++, q++; - a9: 83 c1 01 add $0x1,%ecx - ac: 83 c2 01 add $0x1,%edx + 99: 83 c1 01 add $0x1,%ecx + 9c: 83 c2 01 add $0x1,%edx while(*p && *p == *q) - af: 0f b6 01 movzbl (%ecx),%eax - b2: 84 c0 test %al,%al - b4: 75 ef jne a5 + 9f: 0f b6 01 movzbl (%ecx),%eax + a2: 84 c0 test %al,%al + a4: 75 ef jne 95 return (uchar)*p - (uchar)*q; - b6: 0f b6 c0 movzbl %al,%eax - b9: 0f b6 12 movzbl (%edx),%edx - bc: 29 d0 sub %edx,%eax + a6: 0f b6 c0 movzbl %al,%eax + a9: 0f b6 12 movzbl (%edx),%edx + ac: 29 d0 sub %edx,%eax } - be: 5d pop %ebp - bf: c3 ret + ae: 5d pop %ebp + af: c3 ret -000000c0 : +000000b0 : uint strlen(const char *s) { - c0: f3 0f 1e fb endbr32 - c4: 55 push %ebp - c5: 89 e5 mov %esp,%ebp - c7: 8b 55 08 mov 0x8(%ebp),%edx + b0: 55 push %ebp + b1: 89 e5 mov %esp,%ebp + b3: 8b 55 08 mov 0x8(%ebp),%edx int n; for(n = 0; s[n]; n++) - ca: 80 3a 00 cmpb $0x0,(%edx) - cd: 74 14 je e3 - cf: b8 00 00 00 00 mov $0x0,%eax - d4: 83 c0 01 add $0x1,%eax - d7: 89 c1 mov %eax,%ecx - d9: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - dd: 75 f5 jne d4 + b6: 80 3a 00 cmpb $0x0,(%edx) + b9: 74 14 je cf + bb: b8 00 00 00 00 mov $0x0,%eax + c0: 83 c0 01 add $0x1,%eax + c3: 89 c1 mov %eax,%ecx + c5: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) + c9: 75 f5 jne c0 ; return n; } - df: 89 c8 mov %ecx,%eax - e1: 5d pop %ebp - e2: c3 ret + cb: 89 c8 mov %ecx,%eax + cd: 5d pop %ebp + ce: c3 ret for(n = 0; s[n]; n++) - e3: b9 00 00 00 00 mov $0x0,%ecx + cf: b9 00 00 00 00 mov $0x0,%ecx return n; - e8: eb f5 jmp df + d4: eb f5 jmp cb -000000ea : +000000d6 : void* memset(void *dst, int c, uint n) { - ea: f3 0f 1e fb endbr32 - ee: 55 push %ebp - ef: 89 e5 mov %esp,%ebp - f1: 57 push %edi - f2: 8b 55 08 mov 0x8(%ebp),%edx + d6: 55 push %ebp + d7: 89 e5 mov %esp,%ebp + d9: 57 push %edi + da: 8b 55 08 mov 0x8(%ebp),%edx } static inline void stosb(void *addr, int data, int cnt) { asm volatile("cld; rep stosb" : - f5: 89 d7 mov %edx,%edi - f7: 8b 4d 10 mov 0x10(%ebp),%ecx - fa: 8b 45 0c mov 0xc(%ebp),%eax - fd: fc cld - fe: f3 aa rep stos %al,%es:(%edi) + dd: 89 d7 mov %edx,%edi + df: 8b 4d 10 mov 0x10(%ebp),%ecx + e2: 8b 45 0c mov 0xc(%ebp),%eax + e5: fc cld + e6: f3 aa rep stos %al,%es:(%edi) stosb(dst, c, n); return dst; } - 100: 89 d0 mov %edx,%eax - 102: 5f pop %edi - 103: 5d pop %ebp - 104: c3 ret + e8: 89 d0 mov %edx,%eax + ea: 8b 7d fc mov -0x4(%ebp),%edi + ed: c9 leave + ee: c3 ret -00000105 : +000000ef : char* strchr(const char *s, char c) { - 105: f3 0f 1e fb endbr32 - 109: 55 push %ebp - 10a: 89 e5 mov %esp,%ebp - 10c: 8b 45 08 mov 0x8(%ebp),%eax - 10f: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx + ef: 55 push %ebp + f0: 89 e5 mov %esp,%ebp + f2: 8b 45 08 mov 0x8(%ebp),%eax + f5: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx for(; *s; s++) - 113: 0f b6 10 movzbl (%eax),%edx - 116: 84 d2 test %dl,%dl - 118: 74 15 je 12f + f9: 0f b6 10 movzbl (%eax),%edx + fc: 84 d2 test %dl,%dl + fe: 74 15 je 115 if(*s == c) - 11a: 38 d1 cmp %dl,%cl - 11c: 74 0f je 12d + 100: 38 d1 cmp %dl,%cl + 102: 74 0f je 113 for(; *s; s++) - 11e: 83 c0 01 add $0x1,%eax - 121: 0f b6 10 movzbl (%eax),%edx - 124: 84 d2 test %dl,%dl - 126: 75 f2 jne 11a + 104: 83 c0 01 add $0x1,%eax + 107: 0f b6 10 movzbl (%eax),%edx + 10a: 84 d2 test %dl,%dl + 10c: 75 f2 jne 100 return (char*)s; return 0; - 128: b8 00 00 00 00 mov $0x0,%eax + 10e: b8 00 00 00 00 mov $0x0,%eax } - 12d: 5d pop %ebp - 12e: c3 ret + 113: 5d pop %ebp + 114: c3 ret return 0; - 12f: b8 00 00 00 00 mov $0x0,%eax - 134: eb f7 jmp 12d + 115: b8 00 00 00 00 mov $0x0,%eax + 11a: eb f7 jmp 113 -00000136 : +0000011c : char* gets(char *buf, int max) { - 136: f3 0f 1e fb endbr32 - 13a: 55 push %ebp - 13b: 89 e5 mov %esp,%ebp - 13d: 57 push %edi - 13e: 56 push %esi - 13f: 53 push %ebx - 140: 83 ec 2c sub $0x2c,%esp - 143: 8b 75 08 mov 0x8(%ebp),%esi + 11c: 55 push %ebp + 11d: 89 e5 mov %esp,%ebp + 11f: 57 push %edi + 120: 56 push %esi + 121: 53 push %ebx + 122: 83 ec 2c sub $0x2c,%esp + 125: 8b 75 08 mov 0x8(%ebp),%esi int i, cc; char c; for(i=0; i+1 < max; ){ - 146: bb 00 00 00 00 mov $0x0,%ebx + 128: bb 00 00 00 00 mov $0x0,%ebx cc = read(0, &c, 1); - 14b: 8d 7d e7 lea -0x19(%ebp),%edi + 12d: 8d 7d e7 lea -0x19(%ebp),%edi for(i=0; i+1 < max; ){ - 14e: 89 5d d4 mov %ebx,-0x2c(%ebp) - 151: 83 c3 01 add $0x1,%ebx - 154: 3b 5d 0c cmp 0xc(%ebp),%ebx - 157: 7d 27 jge 180 + 130: 89 5d d4 mov %ebx,-0x2c(%ebp) + 133: 83 c3 01 add $0x1,%ebx + 136: 3b 5d 0c cmp 0xc(%ebp),%ebx + 139: 7d 27 jge 162 cc = read(0, &c, 1); - 159: 83 ec 04 sub $0x4,%esp - 15c: 6a 01 push $0x1 - 15e: 57 push %edi - 15f: 6a 00 push $0x0 - 161: e8 03 01 00 00 call 269 + 13b: 83 ec 04 sub $0x4,%esp + 13e: 6a 01 push $0x1 + 140: 57 push %edi + 141: 6a 00 push $0x0 + 143: e8 f9 00 00 00 call 241 if(cc < 1) - 166: 83 c4 10 add $0x10,%esp - 169: 85 c0 test %eax,%eax - 16b: 7e 13 jle 180 + 148: 83 c4 10 add $0x10,%esp + 14b: 85 c0 test %eax,%eax + 14d: 7e 13 jle 162 break; buf[i++] = c; - 16d: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 171: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) + 14f: 0f b6 45 e7 movzbl -0x19(%ebp),%eax + 153: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) if(c == '\n' || c == '\r') - 175: 3c 0a cmp $0xa,%al - 177: 74 04 je 17d - 179: 3c 0d cmp $0xd,%al - 17b: 75 d1 jne 14e + 157: 3c 0a cmp $0xa,%al + 159: 74 04 je 15f + 15b: 3c 0d cmp $0xd,%al + 15d: 75 d1 jne 130 for(i=0; i+1 < max; ){ - 17d: 89 5d d4 mov %ebx,-0x2c(%ebp) + 15f: 89 5d d4 mov %ebx,-0x2c(%ebp) break; } buf[i] = '\0'; - 180: 8b 45 d4 mov -0x2c(%ebp),%eax - 183: c6 04 06 00 movb $0x0,(%esi,%eax,1) + 162: 8b 45 d4 mov -0x2c(%ebp),%eax + 165: c6 04 06 00 movb $0x0,(%esi,%eax,1) return buf; } - 187: 89 f0 mov %esi,%eax - 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 + 169: 89 f0 mov %esi,%eax + 16b: 8d 65 f4 lea -0xc(%ebp),%esp + 16e: 5b pop %ebx + 16f: 5e pop %esi + 170: 5f pop %edi + 171: 5d pop %ebp + 172: c3 ret -00000191 : +00000173 : int stat(const char *n, struct stat *st) { - 191: f3 0f 1e fb endbr32 - 195: 55 push %ebp - 196: 89 e5 mov %esp,%ebp - 198: 56 push %esi - 199: 53 push %ebx + 173: 55 push %ebp + 174: 89 e5 mov %esp,%ebp + 176: 56 push %esi + 177: 53 push %ebx int fd; int r; fd = open(n, O_RDONLY); - 19a: 83 ec 08 sub $0x8,%esp - 19d: 6a 00 push $0x0 - 19f: ff 75 08 pushl 0x8(%ebp) - 1a2: e8 ea 00 00 00 call 291 + 178: 83 ec 08 sub $0x8,%esp + 17b: 6a 00 push $0x0 + 17d: ff 75 08 push 0x8(%ebp) + 180: e8 e4 00 00 00 call 269 if(fd < 0) - 1a7: 83 c4 10 add $0x10,%esp - 1aa: 85 c0 test %eax,%eax - 1ac: 78 24 js 1d2 - 1ae: 89 c3 mov %eax,%ebx + 185: 83 c4 10 add $0x10,%esp + 188: 85 c0 test %eax,%eax + 18a: 78 24 js 1b0 + 18c: 89 c3 mov %eax,%ebx return -1; r = fstat(fd, st); - 1b0: 83 ec 08 sub $0x8,%esp - 1b3: ff 75 0c pushl 0xc(%ebp) - 1b6: 50 push %eax - 1b7: e8 ed 00 00 00 call 2a9 - 1bc: 89 c6 mov %eax,%esi + 18e: 83 ec 08 sub $0x8,%esp + 191: ff 75 0c push 0xc(%ebp) + 194: 50 push %eax + 195: e8 e7 00 00 00 call 281 + 19a: 89 c6 mov %eax,%esi close(fd); - 1be: 89 1c 24 mov %ebx,(%esp) - 1c1: e8 b3 00 00 00 call 279 + 19c: 89 1c 24 mov %ebx,(%esp) + 19f: e8 ad 00 00 00 call 251 return r; - 1c6: 83 c4 10 add $0x10,%esp + 1a4: 83 c4 10 add $0x10,%esp } - 1c9: 89 f0 mov %esi,%eax - 1cb: 8d 65 f8 lea -0x8(%ebp),%esp - 1ce: 5b pop %ebx - 1cf: 5e pop %esi - 1d0: 5d pop %ebp - 1d1: c3 ret + 1a7: 89 f0 mov %esi,%eax + 1a9: 8d 65 f8 lea -0x8(%ebp),%esp + 1ac: 5b pop %ebx + 1ad: 5e pop %esi + 1ae: 5d pop %ebp + 1af: c3 ret return -1; - 1d2: be ff ff ff ff mov $0xffffffff,%esi - 1d7: eb f0 jmp 1c9 + 1b0: be ff ff ff ff mov $0xffffffff,%esi + 1b5: eb f0 jmp 1a7 -000001d9 : +000001b7 : int atoi(const char *s) { - 1d9: f3 0f 1e fb endbr32 - 1dd: 55 push %ebp - 1de: 89 e5 mov %esp,%ebp - 1e0: 53 push %ebx - 1e1: 8b 55 08 mov 0x8(%ebp),%edx + 1b7: 55 push %ebp + 1b8: 89 e5 mov %esp,%ebp + 1ba: 53 push %ebx + 1bb: 8b 55 08 mov 0x8(%ebp),%edx int n; n = 0; while('0' <= *s && *s <= '9') - 1e4: 0f b6 02 movzbl (%edx),%eax - 1e7: 8d 48 d0 lea -0x30(%eax),%ecx - 1ea: 80 f9 09 cmp $0x9,%cl - 1ed: 77 22 ja 211 + 1be: 0f b6 02 movzbl (%edx),%eax + 1c1: 8d 48 d0 lea -0x30(%eax),%ecx + 1c4: 80 f9 09 cmp $0x9,%cl + 1c7: 77 24 ja 1ed n = 0; - 1ef: b9 00 00 00 00 mov $0x0,%ecx + 1c9: b9 00 00 00 00 mov $0x0,%ecx n = n*10 + *s++ - '0'; - 1f4: 83 c2 01 add $0x1,%edx - 1f7: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 1fa: 0f be c0 movsbl %al,%eax - 1fd: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx + 1ce: 83 c2 01 add $0x1,%edx + 1d1: 8d 0c 89 lea (%ecx,%ecx,4),%ecx + 1d4: 0f be c0 movsbl %al,%eax + 1d7: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx while('0' <= *s && *s <= '9') - 201: 0f b6 02 movzbl (%edx),%eax - 204: 8d 58 d0 lea -0x30(%eax),%ebx - 207: 80 fb 09 cmp $0x9,%bl - 20a: 76 e8 jbe 1f4 + 1db: 0f b6 02 movzbl (%edx),%eax + 1de: 8d 58 d0 lea -0x30(%eax),%ebx + 1e1: 80 fb 09 cmp $0x9,%bl + 1e4: 76 e8 jbe 1ce return n; } - 20c: 89 c8 mov %ecx,%eax - 20e: 5b pop %ebx - 20f: 5d pop %ebp - 210: c3 ret + 1e6: 89 c8 mov %ecx,%eax + 1e8: 8b 5d fc mov -0x4(%ebp),%ebx + 1eb: c9 leave + 1ec: c3 ret n = 0; - 211: b9 00 00 00 00 mov $0x0,%ecx + 1ed: b9 00 00 00 00 mov $0x0,%ecx return n; - 216: eb f4 jmp 20c + 1f2: eb f2 jmp 1e6 -00000218 : +000001f4 : void* memmove(void *vdst, const void *vsrc, int n) { - 218: f3 0f 1e fb endbr32 - 21c: 55 push %ebp - 21d: 89 e5 mov %esp,%ebp - 21f: 56 push %esi - 220: 53 push %ebx - 221: 8b 75 08 mov 0x8(%ebp),%esi - 224: 8b 55 0c mov 0xc(%ebp),%edx - 227: 8b 5d 10 mov 0x10(%ebp),%ebx + 1f4: 55 push %ebp + 1f5: 89 e5 mov %esp,%ebp + 1f7: 56 push %esi + 1f8: 53 push %ebx + 1f9: 8b 75 08 mov 0x8(%ebp),%esi + 1fc: 8b 55 0c mov 0xc(%ebp),%edx + 1ff: 8b 5d 10 mov 0x10(%ebp),%ebx char *dst; const char *src; dst = vdst; src = vsrc; while(n-- > 0) - 22a: 85 db test %ebx,%ebx - 22c: 7e 15 jle 243 - 22e: 01 f3 add %esi,%ebx + 202: 85 db test %ebx,%ebx + 204: 7e 15 jle 21b + 206: 01 f3 add %esi,%ebx dst = vdst; - 230: 89 f0 mov %esi,%eax + 208: 89 f0 mov %esi,%eax *dst++ = *src++; - 232: 83 c2 01 add $0x1,%edx - 235: 83 c0 01 add $0x1,%eax - 238: 0f b6 4a ff movzbl -0x1(%edx),%ecx - 23c: 88 48 ff mov %cl,-0x1(%eax) + 20a: 83 c2 01 add $0x1,%edx + 20d: 83 c0 01 add $0x1,%eax + 210: 0f b6 4a ff movzbl -0x1(%edx),%ecx + 214: 88 48 ff mov %cl,-0x1(%eax) while(n-- > 0) - 23f: 39 c3 cmp %eax,%ebx - 241: 75 ef jne 232 + 217: 39 c3 cmp %eax,%ebx + 219: 75 ef jne 20a return vdst; } - 243: 89 f0 mov %esi,%eax - 245: 5b pop %ebx - 246: 5e pop %esi - 247: 5d pop %ebp - 248: c3 ret + 21b: 89 f0 mov %esi,%eax + 21d: 5b pop %ebx + 21e: 5e pop %esi + 21f: 5d pop %ebp + 220: c3 ret -00000249 : +00000221 : name: \ movl $SYS_ ## name, %eax; \ int $T_SYSCALL; \ ret SYSCALL(fork) - 249: b8 01 00 00 00 mov $0x1,%eax + 221: b8 01 00 00 00 mov $0x1,%eax + 226: cd 40 int $0x40 + 228: c3 ret + +00000229 : +SYSCALL(exit) + 229: b8 02 00 00 00 mov $0x2,%eax + 22e: cd 40 int $0x40 + 230: c3 ret + +00000231 : +SYSCALL(wait) + 231: b8 03 00 00 00 mov $0x3,%eax + 236: cd 40 int $0x40 + 238: c3 ret + +00000239 : +SYSCALL(pipe) + 239: b8 04 00 00 00 mov $0x4,%eax + 23e: cd 40 int $0x40 + 240: c3 ret + +00000241 : +SYSCALL(read) + 241: b8 05 00 00 00 mov $0x5,%eax + 246: cd 40 int $0x40 + 248: c3 ret + +00000249 : +SYSCALL(write) + 249: b8 10 00 00 00 mov $0x10,%eax 24e: cd 40 int $0x40 250: c3 ret -00000251 : -SYSCALL(exit) - 251: b8 02 00 00 00 mov $0x2,%eax +00000251 : +SYSCALL(close) + 251: b8 15 00 00 00 mov $0x15,%eax 256: cd 40 int $0x40 258: c3 ret -00000259 : -SYSCALL(wait) - 259: b8 03 00 00 00 mov $0x3,%eax +00000259 : +SYSCALL(kill) + 259: b8 06 00 00 00 mov $0x6,%eax 25e: cd 40 int $0x40 260: c3 ret -00000261 : -SYSCALL(pipe) - 261: b8 04 00 00 00 mov $0x4,%eax +00000261 : +SYSCALL(exec) + 261: b8 07 00 00 00 mov $0x7,%eax 266: cd 40 int $0x40 268: c3 ret -00000269 : -SYSCALL(read) - 269: b8 05 00 00 00 mov $0x5,%eax +00000269 : +SYSCALL(open) + 269: b8 0f 00 00 00 mov $0xf,%eax 26e: cd 40 int $0x40 270: c3 ret -00000271 : -SYSCALL(write) - 271: b8 10 00 00 00 mov $0x10,%eax +00000271 : +SYSCALL(mknod) + 271: b8 11 00 00 00 mov $0x11,%eax 276: cd 40 int $0x40 278: c3 ret -00000279 : -SYSCALL(close) - 279: b8 15 00 00 00 mov $0x15,%eax +00000279 : +SYSCALL(unlink) + 279: b8 12 00 00 00 mov $0x12,%eax 27e: cd 40 int $0x40 280: c3 ret -00000281 : -SYSCALL(kill) - 281: b8 06 00 00 00 mov $0x6,%eax +00000281 : +SYSCALL(fstat) + 281: b8 08 00 00 00 mov $0x8,%eax 286: cd 40 int $0x40 288: c3 ret -00000289 : -SYSCALL(exec) - 289: b8 07 00 00 00 mov $0x7,%eax +00000289 : +SYSCALL(link) + 289: b8 13 00 00 00 mov $0x13,%eax 28e: cd 40 int $0x40 290: c3 ret -00000291 : -SYSCALL(open) - 291: b8 0f 00 00 00 mov $0xf,%eax +00000291 : +SYSCALL(mkdir) + 291: b8 14 00 00 00 mov $0x14,%eax 296: cd 40 int $0x40 298: c3 ret -00000299 : -SYSCALL(mknod) - 299: b8 11 00 00 00 mov $0x11,%eax +00000299 : +SYSCALL(chdir) + 299: b8 09 00 00 00 mov $0x9,%eax 29e: cd 40 int $0x40 2a0: c3 ret -000002a1 : -SYSCALL(unlink) - 2a1: b8 12 00 00 00 mov $0x12,%eax +000002a1 : +SYSCALL(dup) + 2a1: b8 0a 00 00 00 mov $0xa,%eax 2a6: cd 40 int $0x40 2a8: c3 ret -000002a9 : -SYSCALL(fstat) - 2a9: b8 08 00 00 00 mov $0x8,%eax +000002a9 : +SYSCALL(getpid) + 2a9: b8 0b 00 00 00 mov $0xb,%eax 2ae: cd 40 int $0x40 2b0: c3 ret -000002b1 : -SYSCALL(link) - 2b1: b8 13 00 00 00 mov $0x13,%eax +000002b1 : +SYSCALL(sbrk) + 2b1: b8 0c 00 00 00 mov $0xc,%eax 2b6: cd 40 int $0x40 2b8: c3 ret -000002b9 : -SYSCALL(mkdir) - 2b9: b8 14 00 00 00 mov $0x14,%eax +000002b9 : +SYSCALL(sleep) + 2b9: b8 0d 00 00 00 mov $0xd,%eax 2be: cd 40 int $0x40 2c0: c3 ret -000002c1 : -SYSCALL(chdir) - 2c1: b8 09 00 00 00 mov $0x9,%eax +000002c1 : +SYSCALL(uptime) + 2c1: b8 0e 00 00 00 mov $0xe,%eax 2c6: cd 40 int $0x40 2c8: c3 ret -000002c9 : -SYSCALL(dup) - 2c9: b8 0a 00 00 00 mov $0xa,%eax +000002c9 : +SYSCALL(slabtest) + 2c9: b8 16 00 00 00 mov $0x16,%eax 2ce: cd 40 int $0x40 2d0: c3 ret -000002d1 : -SYSCALL(getpid) - 2d1: b8 0b 00 00 00 mov $0xb,%eax +000002d1 : +SYSCALL(ps) + 2d1: b8 17 00 00 00 mov $0x17,%eax 2d6: cd 40 int $0x40 2d8: c3 ret -000002d9 : -SYSCALL(sbrk) - 2d9: b8 0c 00 00 00 mov $0xc,%eax - 2de: cd 40 int $0x40 - 2e0: c3 ret - -000002e1 : -SYSCALL(sleep) - 2e1: b8 0d 00 00 00 mov $0xd,%eax - 2e6: cd 40 int $0x40 - 2e8: c3 ret - -000002e9 : -SYSCALL(uptime) - 2e9: b8 0e 00 00 00 mov $0xe,%eax - 2ee: cd 40 int $0x40 - 2f0: c3 ret - -000002f1 : -SYSCALL(slabtest) - 2f1: b8 16 00 00 00 mov $0x16,%eax - 2f6: cd 40 int $0x40 - 2f8: c3 ret - -000002f9 : -SYSCALL(ps) - 2f9: b8 17 00 00 00 mov $0x17,%eax - 2fe: cd 40 int $0x40 - 300: c3 ret - -00000301 : +000002d9 : write(fd, &c, 1); } static void printint(int fd, int xx, int base, int sgn) { - 301: 55 push %ebp - 302: 89 e5 mov %esp,%ebp - 304: 57 push %edi - 305: 56 push %esi - 306: 53 push %ebx - 307: 83 ec 3c sub $0x3c,%esp - 30a: 89 45 c4 mov %eax,-0x3c(%ebp) - 30d: 89 d3 mov %edx,%ebx + 2d9: 55 push %ebp + 2da: 89 e5 mov %esp,%ebp + 2dc: 57 push %edi + 2dd: 56 push %esi + 2de: 53 push %ebx + 2df: 83 ec 3c sub $0x3c,%esp + 2e2: 89 45 c4 mov %eax,-0x3c(%ebp) + 2e5: 89 ce mov %ecx,%esi char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 30f: 83 7d 08 00 cmpl $0x0,0x8(%ebp) - 313: 74 77 je 38c - 315: 85 d2 test %edx,%edx - 317: 79 73 jns 38c + 2e7: 83 7d 08 00 cmpl $0x0,0x8(%ebp) + 2eb: 74 79 je 366 + 2ed: 85 d2 test %edx,%edx + 2ef: 79 75 jns 366 neg = 1; x = -xx; - 319: f7 db neg %ebx + 2f1: 89 d1 mov %edx,%ecx + 2f3: f7 d9 neg %ecx neg = 1; - 31b: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) + 2f5: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) } else { x = xx; } i = 0; - 322: be 00 00 00 00 mov $0x0,%esi + 2fc: bb 00 00 00 00 mov $0x0,%ebx do{ buf[i++] = digits[x % base]; - 327: 89 f7 mov %esi,%edi - 329: 83 c6 01 add $0x1,%esi - 32c: 89 d8 mov %ebx,%eax - 32e: ba 00 00 00 00 mov $0x0,%edx - 333: f7 f1 div %ecx - 335: 0f b6 92 bc 06 00 00 movzbl 0x6bc(%edx),%edx - 33c: 88 54 35 d7 mov %dl,-0x29(%ebp,%esi,1) + 301: 89 df mov %ebx,%edi + 303: 83 c3 01 add $0x1,%ebx + 306: 89 c8 mov %ecx,%eax + 308: ba 00 00 00 00 mov $0x0,%edx + 30d: f7 f6 div %esi + 30f: 0f b6 92 d0 06 00 00 movzbl 0x6d0(%edx),%edx + 316: 88 54 1d d7 mov %dl,-0x29(%ebp,%ebx,1) }while((x /= base) != 0); - 340: 89 da mov %ebx,%edx - 342: 89 c3 mov %eax,%ebx - 344: 39 d1 cmp %edx,%ecx - 346: 76 df jbe 327 + 31a: 89 ca mov %ecx,%edx + 31c: 89 c1 mov %eax,%ecx + 31e: 39 d6 cmp %edx,%esi + 320: 76 df jbe 301 if(neg) - 348: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) - 34c: 74 08 je 356 + 322: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) + 326: 74 08 je 330 buf[i++] = '-'; - 34e: c6 44 35 d8 2d movb $0x2d,-0x28(%ebp,%esi,1) - 353: 8d 77 02 lea 0x2(%edi),%esi + 328: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) + 32d: 8d 5f 02 lea 0x2(%edi),%ebx while(--i >= 0) - 356: 85 f6 test %esi,%esi - 358: 7e 2a jle 384 - 35a: 8d 5c 35 d7 lea -0x29(%ebp,%esi,1),%ebx - 35e: 8d 7d d8 lea -0x28(%ebp),%edi + 330: 85 db test %ebx,%ebx + 332: 7e 2a jle 35e + 334: 8d 7d d8 lea -0x28(%ebp),%edi + 337: 8d 5c 1d d7 lea -0x29(%ebp,%ebx,1),%ebx write(fd, &c, 1); - 361: 8d 75 d7 lea -0x29(%ebp),%esi + 33b: 8d 75 d7 lea -0x29(%ebp),%esi putc(fd, buf[i]); - 364: 0f b6 03 movzbl (%ebx),%eax - 367: 88 45 d7 mov %al,-0x29(%ebp) + 33e: 0f b6 03 movzbl (%ebx),%eax + 341: 88 45 d7 mov %al,-0x29(%ebp) write(fd, &c, 1); - 36a: 83 ec 04 sub $0x4,%esp - 36d: 6a 01 push $0x1 - 36f: 56 push %esi - 370: ff 75 c4 pushl -0x3c(%ebp) - 373: e8 f9 fe ff ff call 271 + 344: 83 ec 04 sub $0x4,%esp + 347: 6a 01 push $0x1 + 349: 56 push %esi + 34a: ff 75 c4 push -0x3c(%ebp) + 34d: e8 f7 fe ff ff call 249 while(--i >= 0) - 378: 89 d8 mov %ebx,%eax - 37a: 83 eb 01 sub $0x1,%ebx - 37d: 83 c4 10 add $0x10,%esp - 380: 39 f8 cmp %edi,%eax - 382: 75 e0 jne 364 + 352: 89 d8 mov %ebx,%eax + 354: 83 eb 01 sub $0x1,%ebx + 357: 83 c4 10 add $0x10,%esp + 35a: 39 f8 cmp %edi,%eax + 35c: 75 e0 jne 33e } - 384: 8d 65 f4 lea -0xc(%ebp),%esp - 387: 5b pop %ebx - 388: 5e pop %esi - 389: 5f pop %edi - 38a: 5d pop %ebp - 38b: c3 ret + 35e: 8d 65 f4 lea -0xc(%ebp),%esp + 361: 5b pop %ebx + 362: 5e pop %esi + 363: 5f pop %edi + 364: 5d pop %ebp + 365: c3 ret + x = xx; + 366: 89 d1 mov %edx,%ecx neg = 0; - 38c: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) - 393: eb 8d jmp 322 + 368: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) + 36f: eb 8b jmp 2fc -00000395 : +00000371 : // Print to the given fd. Only understands %d, %x, %p, %s. void printf(int fd, const char *fmt, ...) { - 395: f3 0f 1e fb endbr32 - 399: 55 push %ebp - 39a: 89 e5 mov %esp,%ebp - 39c: 57 push %edi - 39d: 56 push %esi - 39e: 53 push %ebx - 39f: 83 ec 2c sub $0x2c,%esp + 371: 55 push %ebp + 372: 89 e5 mov %esp,%ebp + 374: 57 push %edi + 375: 56 push %esi + 376: 53 push %ebx + 377: 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++){ - 3a2: 8b 75 0c mov 0xc(%ebp),%esi - 3a5: 0f b6 1e movzbl (%esi),%ebx - 3a8: 84 db test %bl,%bl - 3aa: 0f 84 ab 01 00 00 je 55b - 3b0: 83 c6 01 add $0x1,%esi + 37a: 8b 75 0c mov 0xc(%ebp),%esi + 37d: 0f b6 1e movzbl (%esi),%ebx + 380: 84 db test %bl,%bl + 382: 0f 84 9f 01 00 00 je 527 + 388: 83 c6 01 add $0x1,%esi ap = (uint*)(void*)&fmt + 1; - 3b3: 8d 45 10 lea 0x10(%ebp),%eax - 3b6: 89 45 d4 mov %eax,-0x2c(%ebp) + 38b: 8d 45 10 lea 0x10(%ebp),%eax + 38e: 89 45 d4 mov %eax,-0x2c(%ebp) state = 0; - 3b9: bf 00 00 00 00 mov $0x0,%edi - 3be: eb 2d jmp 3ed + 391: bf 00 00 00 00 mov $0x0,%edi + 396: eb 2d jmp 3c5 c = fmt[i] & 0xff; if(state == 0){ if(c == '%'){ state = '%'; } else { putc(fd, c); - 3c0: 88 5d e7 mov %bl,-0x19(%ebp) + 398: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 3c3: 83 ec 04 sub $0x4,%esp - 3c6: 6a 01 push $0x1 - 3c8: 8d 45 e7 lea -0x19(%ebp),%eax - 3cb: 50 push %eax - 3cc: ff 75 08 pushl 0x8(%ebp) - 3cf: e8 9d fe ff ff call 271 + 39b: 83 ec 04 sub $0x4,%esp + 39e: 6a 01 push $0x1 + 3a0: 8d 45 e7 lea -0x19(%ebp),%eax + 3a3: 50 push %eax + 3a4: ff 75 08 push 0x8(%ebp) + 3a7: e8 9d fe ff ff call 249 putc(fd, c); - 3d4: 83 c4 10 add $0x10,%esp - 3d7: eb 05 jmp 3de + 3ac: 83 c4 10 add $0x10,%esp + 3af: eb 05 jmp 3b6 } } else if(state == '%'){ - 3d9: 83 ff 25 cmp $0x25,%edi - 3dc: 74 22 je 400 + 3b1: 83 ff 25 cmp $0x25,%edi + 3b4: 74 1f je 3d5 for(i = 0; fmt[i]; i++){ - 3de: 83 c6 01 add $0x1,%esi - 3e1: 0f b6 5e ff movzbl -0x1(%esi),%ebx - 3e5: 84 db test %bl,%bl - 3e7: 0f 84 6e 01 00 00 je 55b + 3b6: 83 c6 01 add $0x1,%esi + 3b9: 0f b6 5e ff movzbl -0x1(%esi),%ebx + 3bd: 84 db test %bl,%bl + 3bf: 0f 84 62 01 00 00 je 527 c = fmt[i] & 0xff; - 3ed: 0f be d3 movsbl %bl,%edx - 3f0: 0f b6 c3 movzbl %bl,%eax + 3c5: 0f b6 c3 movzbl %bl,%eax if(state == 0){ - 3f3: 85 ff test %edi,%edi - 3f5: 75 e2 jne 3d9 + 3c8: 85 ff test %edi,%edi + 3ca: 75 e5 jne 3b1 if(c == '%'){ - 3f7: 83 f8 25 cmp $0x25,%eax - 3fa: 75 c4 jne 3c0 + 3cc: 83 f8 25 cmp $0x25,%eax + 3cf: 75 c7 jne 398 state = '%'; - 3fc: 89 c7 mov %eax,%edi - 3fe: eb de jmp 3de + 3d1: 89 c7 mov %eax,%edi + 3d3: eb e1 jmp 3b6 if(c == 'd'){ - 400: 83 f8 64 cmp $0x64,%eax - 403: 74 59 je 45e + 3d5: 83 f8 25 cmp $0x25,%eax + 3d8: 0f 84 f2 00 00 00 je 4d0 + 3de: 8d 50 9d lea -0x63(%eax),%edx + 3e1: 83 fa 15 cmp $0x15,%edx + 3e4: 0f 87 07 01 00 00 ja 4f1 + 3ea: 0f 87 01 01 00 00 ja 4f1 + 3f0: ff 24 95 78 06 00 00 jmp *0x678(,%edx,4) printint(fd, *ap, 10, 1); + 3f7: 83 ec 0c sub $0xc,%esp + 3fa: 6a 01 push $0x1 + 3fc: b9 0a 00 00 00 mov $0xa,%ecx + 401: 8b 7d d4 mov -0x2c(%ebp),%edi + 404: 8b 17 mov (%edi),%edx + 406: 8b 45 08 mov 0x8(%ebp),%eax + 409: e8 cb fe ff ff call 2d9 ap++; - } else if(c == 'x' || c == 'p'){ - 405: 81 e2 f7 00 00 00 and $0xf7,%edx - 40b: 83 fa 70 cmp $0x70,%edx - 40e: 74 7a je 48a - printint(fd, *ap, 16, 0); - ap++; - } else if(c == 's'){ - 410: 83 f8 73 cmp $0x73,%eax - 413: 0f 84 9d 00 00 00 je 4b6 - s = "(null)"; - while(*s != 0){ - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 419: 83 f8 63 cmp $0x63,%eax - 41c: 0f 84 ec 00 00 00 je 50e - putc(fd, *ap); - ap++; - } else if(c == '%'){ - 422: 83 f8 25 cmp $0x25,%eax - 425: 0f 84 0f 01 00 00 je 53a - putc(fd, c); + 40e: 89 f8 mov %edi,%eax + 410: 83 c0 04 add $0x4,%eax + 413: 89 45 d4 mov %eax,-0x2c(%ebp) + 416: 83 c4 10 add $0x10,%esp } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); - 42b: c6 45 e7 25 movb $0x25,-0x19(%ebp) - write(fd, &c, 1); - 42f: 83 ec 04 sub $0x4,%esp - 432: 6a 01 push $0x1 - 434: 8d 45 e7 lea -0x19(%ebp),%eax - 437: 50 push %eax - 438: ff 75 08 pushl 0x8(%ebp) - 43b: e8 31 fe ff ff call 271 - putc(fd, c); - 440: 88 5d e7 mov %bl,-0x19(%ebp) - write(fd, &c, 1); - 443: 83 c4 0c add $0xc,%esp - 446: 6a 01 push $0x1 - 448: 8d 45 e7 lea -0x19(%ebp),%eax - 44b: 50 push %eax - 44c: ff 75 08 pushl 0x8(%ebp) - 44f: e8 1d fe ff ff call 271 putc(fd, c); - 454: 83 c4 10 add $0x10,%esp } state = 0; - 457: bf 00 00 00 00 mov $0x0,%edi - 45c: eb 80 jmp 3de - printint(fd, *ap, 10, 1); - 45e: 83 ec 0c sub $0xc,%esp - 461: 6a 01 push $0x1 - 463: b9 0a 00 00 00 mov $0xa,%ecx - 468: 8b 7d d4 mov -0x2c(%ebp),%edi - 46b: 8b 17 mov (%edi),%edx - 46d: 8b 45 08 mov 0x8(%ebp),%eax - 470: e8 8c fe ff ff call 301 - ap++; - 475: 89 f8 mov %edi,%eax - 477: 83 c0 04 add $0x4,%eax - 47a: 89 45 d4 mov %eax,-0x2c(%ebp) - 47d: 83 c4 10 add $0x10,%esp - state = 0; - 480: bf 00 00 00 00 mov $0x0,%edi - 485: e9 54 ff ff ff jmp 3de + 419: bf 00 00 00 00 mov $0x0,%edi + 41e: eb 96 jmp 3b6 printint(fd, *ap, 16, 0); - 48a: 83 ec 0c sub $0xc,%esp - 48d: 6a 00 push $0x0 - 48f: b9 10 00 00 00 mov $0x10,%ecx - 494: 8b 7d d4 mov -0x2c(%ebp),%edi - 497: 8b 17 mov (%edi),%edx - 499: 8b 45 08 mov 0x8(%ebp),%eax - 49c: e8 60 fe ff ff call 301 + 420: 83 ec 0c sub $0xc,%esp + 423: 6a 00 push $0x0 + 425: b9 10 00 00 00 mov $0x10,%ecx + 42a: 8b 7d d4 mov -0x2c(%ebp),%edi + 42d: 8b 17 mov (%edi),%edx + 42f: 8b 45 08 mov 0x8(%ebp),%eax + 432: e8 a2 fe ff ff call 2d9 ap++; - 4a1: 89 f8 mov %edi,%eax - 4a3: 83 c0 04 add $0x4,%eax - 4a6: 89 45 d4 mov %eax,-0x2c(%ebp) - 4a9: 83 c4 10 add $0x10,%esp + 437: 89 f8 mov %edi,%eax + 439: 83 c0 04 add $0x4,%eax + 43c: 89 45 d4 mov %eax,-0x2c(%ebp) + 43f: 83 c4 10 add $0x10,%esp state = 0; - 4ac: bf 00 00 00 00 mov $0x0,%edi - 4b1: e9 28 ff ff ff jmp 3de + 442: bf 00 00 00 00 mov $0x0,%edi + 447: e9 6a ff ff ff jmp 3b6 s = (char*)*ap; - 4b6: 8b 4d d4 mov -0x2c(%ebp),%ecx - 4b9: 8b 01 mov (%ecx),%eax + 44c: 8b 4d d4 mov -0x2c(%ebp),%ecx + 44f: 8b 01 mov (%ecx),%eax ap++; - 4bb: 83 c1 04 add $0x4,%ecx - 4be: 89 4d d4 mov %ecx,-0x2c(%ebp) + 451: 83 c1 04 add $0x4,%ecx + 454: 89 4d d4 mov %ecx,-0x2c(%ebp) if(s == 0) - 4c1: 85 c0 test %eax,%eax - 4c3: 74 13 je 4d8 + 457: 85 c0 test %eax,%eax + 459: 74 13 je 46e s = (char*)*ap; - 4c5: 89 c3 mov %eax,%ebx + 45b: 89 c3 mov %eax,%ebx while(*s != 0){ - 4c7: 0f b6 00 movzbl (%eax),%eax + 45d: 0f b6 00 movzbl (%eax),%eax state = 0; - 4ca: bf 00 00 00 00 mov $0x0,%edi + 460: bf 00 00 00 00 mov $0x0,%edi while(*s != 0){ - 4cf: 84 c0 test %al,%al - 4d1: 75 0f jne 4e2 - 4d3: e9 06 ff ff ff jmp 3de + 465: 84 c0 test %al,%al + 467: 75 0f jne 478 + 469: e9 48 ff ff ff jmp 3b6 s = "(null)"; - 4d8: bb b5 06 00 00 mov $0x6b5,%ebx + 46e: bb 71 06 00 00 mov $0x671,%ebx while(*s != 0){ - 4dd: b8 28 00 00 00 mov $0x28,%eax - 4e2: 8b 7d 08 mov 0x8(%ebp),%edi + 473: b8 28 00 00 00 mov $0x28,%eax + 478: 8b 7d 08 mov 0x8(%ebp),%edi putc(fd, *s); - 4e5: 88 45 e7 mov %al,-0x19(%ebp) + 47b: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 4e8: 83 ec 04 sub $0x4,%esp - 4eb: 6a 01 push $0x1 - 4ed: 8d 45 e7 lea -0x19(%ebp),%eax - 4f0: 50 push %eax - 4f1: 57 push %edi - 4f2: e8 7a fd ff ff call 271 + 47e: 83 ec 04 sub $0x4,%esp + 481: 6a 01 push $0x1 + 483: 8d 45 e7 lea -0x19(%ebp),%eax + 486: 50 push %eax + 487: 57 push %edi + 488: e8 bc fd ff ff call 249 s++; - 4f7: 83 c3 01 add $0x1,%ebx + 48d: 83 c3 01 add $0x1,%ebx while(*s != 0){ - 4fa: 0f b6 03 movzbl (%ebx),%eax - 4fd: 83 c4 10 add $0x10,%esp - 500: 84 c0 test %al,%al - 502: 75 e1 jne 4e5 + 490: 0f b6 03 movzbl (%ebx),%eax + 493: 83 c4 10 add $0x10,%esp + 496: 84 c0 test %al,%al + 498: 75 e1 jne 47b state = 0; - 504: bf 00 00 00 00 mov $0x0,%edi - 509: e9 d0 fe ff ff jmp 3de + 49a: bf 00 00 00 00 mov $0x0,%edi + 49f: e9 12 ff ff ff jmp 3b6 putc(fd, *ap); - 50e: 8b 7d d4 mov -0x2c(%ebp),%edi - 511: 8b 07 mov (%edi),%eax - 513: 88 45 e7 mov %al,-0x19(%ebp) + 4a4: 8b 7d d4 mov -0x2c(%ebp),%edi + 4a7: 8b 07 mov (%edi),%eax + 4a9: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 516: 83 ec 04 sub $0x4,%esp - 519: 6a 01 push $0x1 - 51b: 8d 45 e7 lea -0x19(%ebp),%eax - 51e: 50 push %eax - 51f: ff 75 08 pushl 0x8(%ebp) - 522: e8 4a fd ff ff call 271 + 4ac: 83 ec 04 sub $0x4,%esp + 4af: 6a 01 push $0x1 + 4b1: 8d 45 e7 lea -0x19(%ebp),%eax + 4b4: 50 push %eax + 4b5: ff 75 08 push 0x8(%ebp) + 4b8: e8 8c fd ff ff call 249 ap++; - 527: 83 c7 04 add $0x4,%edi - 52a: 89 7d d4 mov %edi,-0x2c(%ebp) - 52d: 83 c4 10 add $0x10,%esp + 4bd: 83 c7 04 add $0x4,%edi + 4c0: 89 7d d4 mov %edi,-0x2c(%ebp) + 4c3: 83 c4 10 add $0x10,%esp + state = 0; + 4c6: bf 00 00 00 00 mov $0x0,%edi + 4cb: e9 e6 fe ff ff jmp 3b6 + putc(fd, c); + 4d0: 88 5d e7 mov %bl,-0x19(%ebp) + write(fd, &c, 1); + 4d3: 83 ec 04 sub $0x4,%esp + 4d6: 6a 01 push $0x1 + 4d8: 8d 45 e7 lea -0x19(%ebp),%eax + 4db: 50 push %eax + 4dc: ff 75 08 push 0x8(%ebp) + 4df: e8 65 fd ff ff call 249 + 4e4: 83 c4 10 add $0x10,%esp state = 0; - 530: bf 00 00 00 00 mov $0x0,%edi - 535: e9 a4 fe ff ff jmp 3de + 4e7: bf 00 00 00 00 mov $0x0,%edi + 4ec: e9 c5 fe ff ff jmp 3b6 + putc(fd, '%'); + 4f1: c6 45 e7 25 movb $0x25,-0x19(%ebp) + write(fd, &c, 1); + 4f5: 83 ec 04 sub $0x4,%esp + 4f8: 6a 01 push $0x1 + 4fa: 8d 45 e7 lea -0x19(%ebp),%eax + 4fd: 50 push %eax + 4fe: ff 75 08 push 0x8(%ebp) + 501: e8 43 fd ff ff call 249 putc(fd, c); - 53a: 88 5d e7 mov %bl,-0x19(%ebp) + 506: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 53d: 83 ec 04 sub $0x4,%esp - 540: 6a 01 push $0x1 - 542: 8d 45 e7 lea -0x19(%ebp),%eax - 545: 50 push %eax - 546: ff 75 08 pushl 0x8(%ebp) - 549: e8 23 fd ff ff call 271 - 54e: 83 c4 10 add $0x10,%esp + 509: 83 c4 0c add $0xc,%esp + 50c: 6a 01 push $0x1 + 50e: 8d 45 e7 lea -0x19(%ebp),%eax + 511: 50 push %eax + 512: ff 75 08 push 0x8(%ebp) + 515: e8 2f fd ff ff call 249 + putc(fd, c); + 51a: 83 c4 10 add $0x10,%esp state = 0; - 551: bf 00 00 00 00 mov $0x0,%edi - 556: e9 83 fe ff ff jmp 3de + 51d: bf 00 00 00 00 mov $0x0,%edi + 522: e9 8f fe ff ff jmp 3b6 } } } - 55b: 8d 65 f4 lea -0xc(%ebp),%esp - 55e: 5b pop %ebx - 55f: 5e pop %esi - 560: 5f pop %edi - 561: 5d pop %ebp - 562: c3 ret - -00000563 : + 527: 8d 65 f4 lea -0xc(%ebp),%esp + 52a: 5b pop %ebx + 52b: 5e pop %esi + 52c: 5f pop %edi + 52d: 5d pop %ebp + 52e: c3 ret + +0000052f : static Header base; static Header *freep; void free(void *ap) { - 563: f3 0f 1e fb endbr32 - 567: 55 push %ebp - 568: 89 e5 mov %esp,%ebp - 56a: 57 push %edi - 56b: 56 push %esi - 56c: 53 push %ebx - 56d: 8b 5d 08 mov 0x8(%ebp),%ebx + 52f: 55 push %ebp + 530: 89 e5 mov %esp,%ebp + 532: 57 push %edi + 533: 56 push %esi + 534: 53 push %ebx + 535: 8b 5d 08 mov 0x8(%ebp),%ebx Header *bp, *p; bp = (Header*)ap - 1; - 570: 8d 4b f8 lea -0x8(%ebx),%ecx + 538: 8d 4b f8 lea -0x8(%ebx),%ecx for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 573: a1 30 09 00 00 mov 0x930,%eax - 578: eb 0c jmp 586 + 53b: a1 44 09 00 00 mov 0x944,%eax + 540: eb 0c jmp 54e if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 57a: 8b 10 mov (%eax),%edx - 57c: 39 c2 cmp %eax,%edx - 57e: 77 04 ja 584 - 580: 39 ca cmp %ecx,%edx - 582: 77 10 ja 594 + 542: 8b 10 mov (%eax),%edx + 544: 39 c2 cmp %eax,%edx + 546: 77 04 ja 54c + 548: 39 ca cmp %ecx,%edx + 54a: 77 10 ja 55c { - 584: 89 d0 mov %edx,%eax + 54c: 89 d0 mov %edx,%eax for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 586: 39 c8 cmp %ecx,%eax - 588: 73 f0 jae 57a - 58a: 8b 10 mov (%eax),%edx - 58c: 39 ca cmp %ecx,%edx - 58e: 77 04 ja 594 + 54e: 39 c8 cmp %ecx,%eax + 550: 73 f0 jae 542 + 552: 8b 10 mov (%eax),%edx + 554: 39 ca cmp %ecx,%edx + 556: 77 04 ja 55c if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 590: 39 c2 cmp %eax,%edx - 592: 77 f0 ja 584 + 558: 39 c2 cmp %eax,%edx + 55a: 77 f0 ja 54c break; if(bp + bp->s.size == p->s.ptr){ - 594: 8b 73 fc mov -0x4(%ebx),%esi - 597: 8b 10 mov (%eax),%edx - 599: 8d 3c f1 lea (%ecx,%esi,8),%edi - 59c: 39 fa cmp %edi,%edx - 59e: 74 19 je 5b9 + 55c: 8b 73 fc mov -0x4(%ebx),%esi + 55f: 8b 10 mov (%eax),%edx + 561: 8d 3c f1 lea (%ecx,%esi,8),%edi + 564: 39 fa cmp %edi,%edx + 566: 74 19 je 581 bp->s.size += p->s.ptr->s.size; bp->s.ptr = p->s.ptr->s.ptr; + 568: 89 53 f8 mov %edx,-0x8(%ebx) } else bp->s.ptr = p->s.ptr; - 5a0: 89 53 f8 mov %edx,-0x8(%ebx) if(p + p->s.size == bp){ - 5a3: 8b 50 04 mov 0x4(%eax),%edx - 5a6: 8d 34 d0 lea (%eax,%edx,8),%esi - 5a9: 39 f1 cmp %esi,%ecx - 5ab: 74 1b je 5c8 + 56b: 8b 50 04 mov 0x4(%eax),%edx + 56e: 8d 34 d0 lea (%eax,%edx,8),%esi + 571: 39 f1 cmp %esi,%ecx + 573: 74 18 je 58d p->s.size += bp->s.size; p->s.ptr = bp->s.ptr; + 575: 89 08 mov %ecx,(%eax) } else p->s.ptr = bp; - 5ad: 89 08 mov %ecx,(%eax) freep = p; - 5af: a3 30 09 00 00 mov %eax,0x930 + 577: a3 44 09 00 00 mov %eax,0x944 } - 5b4: 5b pop %ebx - 5b5: 5e pop %esi - 5b6: 5f pop %edi - 5b7: 5d pop %ebp - 5b8: c3 ret + 57c: 5b pop %ebx + 57d: 5e pop %esi + 57e: 5f pop %edi + 57f: 5d pop %ebp + 580: c3 ret bp->s.size += p->s.ptr->s.size; - 5b9: 03 72 04 add 0x4(%edx),%esi - 5bc: 89 73 fc mov %esi,-0x4(%ebx) + 581: 03 72 04 add 0x4(%edx),%esi + 584: 89 73 fc mov %esi,-0x4(%ebx) bp->s.ptr = p->s.ptr->s.ptr; - 5bf: 8b 10 mov (%eax),%edx - 5c1: 8b 12 mov (%edx),%edx - 5c3: 89 53 f8 mov %edx,-0x8(%ebx) - 5c6: eb db jmp 5a3 + 587: 8b 10 mov (%eax),%edx + 589: 8b 12 mov (%edx),%edx + 58b: eb db jmp 568 p->s.size += bp->s.size; - 5c8: 03 53 fc add -0x4(%ebx),%edx - 5cb: 89 50 04 mov %edx,0x4(%eax) + 58d: 03 53 fc add -0x4(%ebx),%edx + 590: 89 50 04 mov %edx,0x4(%eax) p->s.ptr = bp->s.ptr; - 5ce: 8b 53 f8 mov -0x8(%ebx),%edx - 5d1: 89 10 mov %edx,(%eax) - 5d3: eb da jmp 5af + 593: 8b 4b f8 mov -0x8(%ebx),%ecx + 596: eb dd jmp 575 -000005d5 : +00000598 : return freep; } void* malloc(uint nbytes) { - 5d5: f3 0f 1e fb endbr32 - 5d9: 55 push %ebp - 5da: 89 e5 mov %esp,%ebp - 5dc: 57 push %edi - 5dd: 56 push %esi - 5de: 53 push %ebx - 5df: 83 ec 0c sub $0xc,%esp + 598: 55 push %ebp + 599: 89 e5 mov %esp,%ebp + 59b: 57 push %edi + 59c: 56 push %esi + 59d: 53 push %ebx + 59e: 83 ec 0c sub $0xc,%esp Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 5e2: 8b 45 08 mov 0x8(%ebp),%eax - 5e5: 8d 58 07 lea 0x7(%eax),%ebx - 5e8: c1 eb 03 shr $0x3,%ebx - 5eb: 83 c3 01 add $0x1,%ebx + 5a1: 8b 45 08 mov 0x8(%ebp),%eax + 5a4: 8d 58 07 lea 0x7(%eax),%ebx + 5a7: c1 eb 03 shr $0x3,%ebx + 5aa: 83 c3 01 add $0x1,%ebx if((prevp = freep) == 0){ - 5ee: 8b 15 30 09 00 00 mov 0x930,%edx - 5f4: 85 d2 test %edx,%edx - 5f6: 74 20 je 618 + 5ad: 8b 15 44 09 00 00 mov 0x944,%edx + 5b3: 85 d2 test %edx,%edx + 5b5: 74 1c je 5d3 base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 5f8: 8b 02 mov (%edx),%eax + 5b7: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 5fa: 8b 48 04 mov 0x4(%eax),%ecx - 5fd: 39 cb cmp %ecx,%ebx - 5ff: 76 3c jbe 63d - 601: 81 fb 00 10 00 00 cmp $0x1000,%ebx - 607: be 00 10 00 00 mov $0x1000,%esi - 60c: 0f 43 f3 cmovae %ebx,%esi + 5b9: 8b 48 04 mov 0x4(%eax),%ecx + 5bc: 39 cb cmp %ecx,%ebx + 5be: 76 38 jbe 5f8 + 5c0: be 00 10 00 00 mov $0x1000,%esi + 5c5: 39 f3 cmp %esi,%ebx + 5c7: 0f 43 f3 cmovae %ebx,%esi p = sbrk(nu * sizeof(Header)); - 60f: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi - 616: eb 72 jmp 68a + 5ca: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi + 5d1: eb 72 jmp 645 base.s.ptr = freep = prevp = &base; - 618: c7 05 30 09 00 00 34 movl $0x934,0x930 - 61f: 09 00 00 - 622: c7 05 34 09 00 00 34 movl $0x934,0x934 - 629: 09 00 00 + 5d3: c7 05 44 09 00 00 48 movl $0x948,0x944 + 5da: 09 00 00 + 5dd: c7 05 48 09 00 00 48 movl $0x948,0x948 + 5e4: 09 00 00 base.s.size = 0; - 62c: c7 05 38 09 00 00 00 movl $0x0,0x938 - 633: 00 00 00 + 5e7: c7 05 4c 09 00 00 00 movl $0x0,0x94c + 5ee: 00 00 00 for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 636: b8 34 09 00 00 mov $0x934,%eax - 63b: eb c4 jmp 601 + 5f1: b8 48 09 00 00 mov $0x948,%eax + 5f6: eb c8 jmp 5c0 if(p->s.size == nunits) - 63d: 39 cb cmp %ecx,%ebx - 63f: 74 1e je 65f + 5f8: 39 cb cmp %ecx,%ebx + 5fa: 74 1e je 61a prevp->s.ptr = p->s.ptr; else { p->s.size -= nunits; - 641: 29 d9 sub %ebx,%ecx - 643: 89 48 04 mov %ecx,0x4(%eax) + 5fc: 29 d9 sub %ebx,%ecx + 5fe: 89 48 04 mov %ecx,0x4(%eax) p += p->s.size; - 646: 8d 04 c8 lea (%eax,%ecx,8),%eax + 601: 8d 04 c8 lea (%eax,%ecx,8),%eax p->s.size = nunits; - 649: 89 58 04 mov %ebx,0x4(%eax) + 604: 89 58 04 mov %ebx,0x4(%eax) } freep = prevp; - 64c: 89 15 30 09 00 00 mov %edx,0x930 + 607: 89 15 44 09 00 00 mov %edx,0x944 return (void*)(p + 1); - 652: 8d 50 08 lea 0x8(%eax),%edx + 60d: 8d 50 08 lea 0x8(%eax),%edx } if(p == freep) if((p = morecore(nunits)) == 0) return 0; } } - 655: 89 d0 mov %edx,%eax - 657: 8d 65 f4 lea -0xc(%ebp),%esp - 65a: 5b pop %ebx - 65b: 5e pop %esi - 65c: 5f pop %edi - 65d: 5d pop %ebp - 65e: c3 ret + 610: 89 d0 mov %edx,%eax + 612: 8d 65 f4 lea -0xc(%ebp),%esp + 615: 5b pop %ebx + 616: 5e pop %esi + 617: 5f pop %edi + 618: 5d pop %ebp + 619: c3 ret prevp->s.ptr = p->s.ptr; - 65f: 8b 08 mov (%eax),%ecx - 661: 89 0a mov %ecx,(%edx) - 663: eb e7 jmp 64c + 61a: 8b 08 mov (%eax),%ecx + 61c: 89 0a mov %ecx,(%edx) + 61e: eb e7 jmp 607 hp->s.size = nu; - 665: 89 70 04 mov %esi,0x4(%eax) + 620: 89 70 04 mov %esi,0x4(%eax) free((void*)(hp + 1)); - 668: 83 ec 0c sub $0xc,%esp - 66b: 83 c0 08 add $0x8,%eax - 66e: 50 push %eax - 66f: e8 ef fe ff ff call 563 + 623: 83 ec 0c sub $0xc,%esp + 626: 83 c0 08 add $0x8,%eax + 629: 50 push %eax + 62a: e8 00 ff ff ff call 52f return freep; - 674: 8b 15 30 09 00 00 mov 0x930,%edx + 62f: 8b 15 44 09 00 00 mov 0x944,%edx if((p = morecore(nunits)) == 0) - 67a: 83 c4 10 add $0x10,%esp - 67d: 85 d2 test %edx,%edx - 67f: 74 d4 je 655 + 635: 83 c4 10 add $0x10,%esp + 638: 85 d2 test %edx,%edx + 63a: 74 d4 je 610 for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 681: 8b 02 mov (%edx),%eax + 63c: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 683: 8b 48 04 mov 0x4(%eax),%ecx - 686: 39 d9 cmp %ebx,%ecx - 688: 73 b3 jae 63d + 63e: 8b 48 04 mov 0x4(%eax),%ecx + 641: 39 d9 cmp %ebx,%ecx + 643: 73 b3 jae 5f8 if(p == freep) - 68a: 89 c2 mov %eax,%edx - 68c: 39 05 30 09 00 00 cmp %eax,0x930 - 692: 75 ed jne 681 + 645: 89 c2 mov %eax,%edx + 647: 39 05 44 09 00 00 cmp %eax,0x944 + 64d: 75 ed jne 63c p = sbrk(nu * sizeof(Header)); - 694: 83 ec 0c sub $0xc,%esp - 697: 57 push %edi - 698: e8 3c fc ff ff call 2d9 + 64f: 83 ec 0c sub $0xc,%esp + 652: 57 push %edi + 653: e8 59 fc ff ff call 2b1 if(p == (char*)-1) - 69d: 83 c4 10 add $0x10,%esp - 6a0: 83 f8 ff cmp $0xffffffff,%eax - 6a3: 75 c0 jne 665 + 658: 83 c4 10 add $0x10,%esp + 65b: 83 f8 ff cmp $0xffffffff,%eax + 65e: 75 c0 jne 620 return 0; - 6a5: ba 00 00 00 00 mov $0x0,%edx - 6aa: eb a9 jmp 655 + 660: ba 00 00 00 00 mov $0x0,%edx + 665: eb a9 jmp 610 diff --git a/src/user/echo.d b/src/user/echo.d new file mode 100644 index 0000000..e4d01cd --- /dev/null +++ b/src/user/echo.d @@ -0,0 +1 @@ +user/echo.o: user/echo.c /usr/include/stdc-predef.h types.h stat.h user.h diff --git a/src/user/echo.o b/src/user/echo.o new file mode 100644 index 0000000000000000000000000000000000000000..ac38d546733960c27b39c3624ca77562a3ba83f2 GIT binary patch literal 3044 zcma)8TWDNW6y4{(GRfpIX=>ZFN~WfXtvWZEH1?S`rAcj5OG_=O4JhT#*&Q}Ta1P8ZY-T!9Dn}%hfbe5x$sNsa{lt1 zvGBLJwEsQszVLzA{aduL#J!fHtBWNK&$U}UNko=!C=5Gb}z-U>q-r8gU69q4j|o)GgOhDofO?V_i( zBdvFB>S`Bjtjv0>RQAJxHP|%VskiP)?@jMc-_<$R@vP_^>cq-zQEwmW6iC&$0fRR6 zCTY{F1I9Wy`GE}=lE7w@RL-#u4ZT`c8P;Drh*`7_lAfv!jG&s0PGSU;l2harLJTsr zD~4foYv=HBz)52}S0b9x*{$WT8r{9(l+in^hx1pB;Zg9>iG)u)EKbwy2v7RdCFcE9 z@(c(Mx)X>B|Esly0r|PULAvxiz-_ecXqxEK+VuO_JH($6wwZ#=WQYxxIBM!v>VdUp zMwpG(8Pl{T%*~cC%^|bXNIB8oK5xga9ogLU^kgBMJCV=kru=HI5PRjw^J_{N zAv(%AWzPvcf4XL@R=g-T6*v_)H&excZlHpl;$yj)pc=Wws49&!o(r!N&iTbsQ1z>E zn2Y_#J%2J6Ifb$t!Wl-~uUK}%lIrbMeF{s}Aj+;~OAvO9qUB8kQ6b+_D|Hvk}>oPUMhX2t%@iDk~hFxARaDGwBxM>9d|c zRYhdNokAgS&nvB5Etb77;?B#_PT=^{?kZE+^Ig>i=@n)3*+ef^D-{>l+V=5y*m%Hl z$)iw9>z2+YuML*;f29k7d`DEJ^PVO5OeRqGXA^X69UYMNestIc&h^SM{DXp$NPb*d zM_DHFibMq}AJ;C&|5sd6bBG&|2{<3mLkZ{O#=j9NH~Zc|`<;mt<>TM|`gN4Bj`v~X zb?_djb({cKeL(4DC|@vDN6y>Y^{aM-Pt+;<& z=RChAG&R4c!Brnn`WpH8o+(kjCt;{x?=Iw1=f;1HRKAzMxexC*%Onn_OC^EMl-p|( zRons+9EDAZihBzN<|^(J#PM6MM8&-W19K&R@`UO{`96Y;IhL8oBI5WSD^cC9!%)B8 z8LXGJs{MuoukDJA~pD#zP GtnnY4vwWuj literal 0 HcmV?d00001 diff --git a/src/user/echo.sym b/src/user/echo.sym index cd8a099..e30014f 100644 --- a/src/user/echo.sym +++ b/src/user/echo.sym @@ -1,59 +1,47 @@ -00000000 .text -000006ac .rodata -000006d0 .eh_frame -00000930 .bss -00000000 .comment -00000000 .debug_aranges -00000000 .debug_info -00000000 .debug_abbrev -00000000 .debug_line -00000000 .debug_str -00000000 .debug_loc -00000000 .debug_ranges 00000000 echo.c 00000000 ulib.c 00000000 printf.c -00000301 printint -000006bc digits.1089 +000002d9 printint +000006d0 digits.0 00000000 umalloc.c -00000930 freep -00000934 base -0000006b strcpy -00000395 printf -00000218 memmove -00000299 mknod -000002f9 ps -00000136 gets -000002d1 getpid -000005d5 malloc -000002e1 sleep -00000261 pipe -000002f1 slabtest -00000271 write -000002a9 fstat -00000281 kill -000002c1 chdir -00000289 exec -00000259 wait -00000269 read -000002a1 unlink -00000249 fork -000002d9 sbrk -000002e9 uptime -00000930 __bss_start -000000ea memset +00000944 freep +00000948 base +00000061 strcpy +00000371 printf +000001f4 memmove +00000271 mknod +000002d1 ps +0000011c gets +000002a9 getpid +00000598 malloc +000002b9 sleep +00000239 pipe +000002c9 slabtest +00000249 write +00000281 fstat +00000259 kill +00000299 chdir +00000261 exec +00000231 wait +00000241 read +00000279 unlink +00000221 fork +000002b1 sbrk +000002c1 uptime +00000944 __bss_start +000000d6 memset 00000000 main -00000091 strcmp -000002c9 dup -00000191 stat -00000930 _edata -0000093c _end -000002b1 link -00000251 exit -000001d9 atoi -000000c0 strlen -00000291 open -00000105 strchr -000002b9 mkdir -00000279 close -00000563 free +00000085 strcmp +000002a1 dup +00000173 stat +00000944 _edata +00000950 _end +00000289 link +00000229 exit +000001b7 atoi +000000b0 strlen +00000269 open +000000ef strchr +00000291 mkdir +00000251 close +0000052f free diff --git a/src/user/forktest.asm b/src/user/forktest.asm index cf37953..f43d520 100644 --- a/src/user/forktest.asm +++ b/src/user/forktest.asm @@ -11,1152 +11,1119 @@ Disassembly of section .text: void print(int fd, const char *s, ...) { - 0: f3 0f 1e fb endbr32 - 4: 55 push %ebp - 5: 89 e5 mov %esp,%ebp - 7: 53 push %ebx - 8: 83 ec 10 sub $0x10,%esp - b: 8b 5d 0c mov 0xc(%ebp),%ebx + 0: 55 push %ebp + 1: 89 e5 mov %esp,%ebp + 3: 53 push %ebx + 4: 83 ec 10 sub $0x10,%esp + 7: 8b 5d 0c mov 0xc(%ebp),%ebx write(fd, s, strlen(s)); - e: 53 push %ebx - f: e8 34 01 00 00 call 148 - 14: 83 c4 0c add $0xc,%esp - 17: 50 push %eax - 18: 53 push %ebx - 19: ff 75 08 pushl 0x8(%ebp) - 1c: e8 d8 02 00 00 call 2f9 + a: 53 push %ebx + b: e8 26 01 00 00 call 136 + 10: 83 c4 0c add $0xc,%esp + 13: 50 push %eax + 14: 53 push %ebx + 15: ff 75 08 push 0x8(%ebp) + 18: e8 b2 02 00 00 call 2cf } - 21: 83 c4 10 add $0x10,%esp - 24: 8b 5d fc mov -0x4(%ebp),%ebx - 27: c9 leave - 28: c3 ret + 1d: 83 c4 10 add $0x10,%esp + 20: 8b 5d fc mov -0x4(%ebp),%ebx + 23: c9 leave + 24: c3 ret -00000029 : +00000025 : void forktest(void) { - 29: f3 0f 1e fb endbr32 - 2d: 55 push %ebp - 2e: 89 e5 mov %esp,%ebp - 30: 53 push %ebx - 31: 83 ec 0c sub $0xc,%esp + 25: 55 push %ebp + 26: 89 e5 mov %esp,%ebp + 28: 53 push %ebx + 29: 83 ec 0c sub $0xc,%esp int n, pid; print(1, "fork test\n"); - 34: 68 34 07 00 00 push $0x734 - 39: 6a 01 push $0x1 - 3b: e8 c0 ff ff ff call 0 - 40: 83 c4 10 add $0x10,%esp + 2c: 68 f0 06 00 00 push $0x6f0 + 31: 6a 01 push $0x1 + 33: e8 c8 ff ff ff call 0 + 38: 83 c4 10 add $0x10,%esp for(n=0; n + 40: e8 62 02 00 00 call 2a7 if(pid < 0) - 4d: 85 c0 test %eax,%eax - 4f: 78 2b js 7c + 45: 85 c0 test %eax,%eax + 47: 78 2b js 74 break; if(pid == 0) - 51: 74 24 je 77 + 49: 74 24 je 6f for(n=0; n + 4b: 83 c3 01 add $0x1,%ebx + 4e: 81 fb e8 03 00 00 cmp $0x3e8,%ebx + 54: 75 ea jne 40 exit(); } if(n == N){ print(1, "fork claimed to work N times!\n", N); - 5e: 83 ec 04 sub $0x4,%esp - 61: 68 e8 03 00 00 push $0x3e8 - 66: 68 74 07 00 00 push $0x774 - 6b: 6a 01 push $0x1 - 6d: e8 8e ff ff ff call 0 + 56: 83 ec 04 sub $0x4,%esp + 59: 68 e8 03 00 00 push $0x3e8 + 5e: 68 30 07 00 00 push $0x730 + 63: 6a 01 push $0x1 + 65: e8 96 ff ff ff call 0 exit(); - 72: e8 62 02 00 00 call 2d9 + 6a: e8 40 02 00 00 call 2af exit(); - 77: e8 5d 02 00 00 call 2d9 + 6f: e8 3b 02 00 00 call 2af if(n == N){ - 7c: 81 fb e8 03 00 00 cmp $0x3e8,%ebx - 82: 74 da je 5e + 74: 81 fb e8 03 00 00 cmp $0x3e8,%ebx + 7a: 74 da je 56 } for(; n > 0; n--){ - 84: 85 db test %ebx,%ebx - 86: 7e 0e jle 96 + 7c: 85 db test %ebx,%ebx + 7e: 7e 0e jle 8e if(wait() < 0){ - 88: e8 54 02 00 00 call 2e1 - 8d: 85 c0 test %eax,%eax - 8f: 78 26 js b7 + 80: e8 32 02 00 00 call 2b7 + 85: 85 c0 test %eax,%eax + 87: 78 26 js af for(; n > 0; n--){ - 91: 83 eb 01 sub $0x1,%ebx - 94: 75 f2 jne 88 + 89: 83 eb 01 sub $0x1,%ebx + 8c: 75 f2 jne 80 print(1, "wait stopped early\n"); exit(); } } if(wait() != -1){ - 96: e8 46 02 00 00 call 2e1 - 9b: 83 f8 ff cmp $0xffffffff,%eax - 9e: 75 2b jne cb + 8e: e8 24 02 00 00 call 2b7 + 93: 83 f8 ff cmp $0xffffffff,%eax + 96: 75 2b jne c3 print(1, "wait got too many\n"); exit(); } print(1, "fork test OK\n"); - a0: 83 ec 08 sub $0x8,%esp - a3: 68 66 07 00 00 push $0x766 - a8: 6a 01 push $0x1 - aa: e8 51 ff ff ff call 0 + 98: 83 ec 08 sub $0x8,%esp + 9b: 68 22 07 00 00 push $0x722 + a0: 6a 01 push $0x1 + a2: e8 59 ff ff ff call 0 } - af: 83 c4 10 add $0x10,%esp - b2: 8b 5d fc mov -0x4(%ebp),%ebx - b5: c9 leave - b6: c3 ret + a7: 83 c4 10 add $0x10,%esp + aa: 8b 5d fc mov -0x4(%ebp),%ebx + ad: c9 leave + ae: c3 ret print(1, "wait stopped early\n"); - b7: 83 ec 08 sub $0x8,%esp - ba: 68 3f 07 00 00 push $0x73f - bf: 6a 01 push $0x1 - c1: e8 3a ff ff ff call 0 + af: 83 ec 08 sub $0x8,%esp + b2: 68 fb 06 00 00 push $0x6fb + b7: 6a 01 push $0x1 + b9: e8 42 ff ff ff call 0 exit(); - c6: e8 0e 02 00 00 call 2d9 + be: e8 ec 01 00 00 call 2af print(1, "wait got too many\n"); - cb: 83 ec 08 sub $0x8,%esp - ce: 68 53 07 00 00 push $0x753 - d3: 6a 01 push $0x1 - d5: e8 26 ff ff ff call 0 + c3: 83 ec 08 sub $0x8,%esp + c6: 68 0f 07 00 00 push $0x70f + cb: 6a 01 push $0x1 + cd: e8 2e ff ff ff call 0 exit(); - da: e8 fa 01 00 00 call 2d9 + d2: e8 d8 01 00 00 call 2af -000000df
: +000000d7
: int main(void) { - df: f3 0f 1e fb endbr32 - e3: 55 push %ebp - e4: 89 e5 mov %esp,%ebp - e6: 83 e4 f0 and $0xfffffff0,%esp + d7: 55 push %ebp + d8: 89 e5 mov %esp,%ebp + da: 83 e4 f0 and $0xfffffff0,%esp forktest(); - e9: e8 3b ff ff ff call 29 + dd: e8 43 ff ff ff call 25 exit(); - ee: e8 e6 01 00 00 call 2d9 + e2: e8 c8 01 00 00 call 2af -000000f3 : +000000e7 : #include "user.h" #include "x86.h" char* strcpy(char *s, const char *t) { - f3: f3 0f 1e fb endbr32 - f7: 55 push %ebp - f8: 89 e5 mov %esp,%ebp - fa: 53 push %ebx - fb: 8b 4d 08 mov 0x8(%ebp),%ecx - fe: 8b 5d 0c mov 0xc(%ebp),%ebx + e7: 55 push %ebp + e8: 89 e5 mov %esp,%ebp + ea: 53 push %ebx + eb: 8b 4d 08 mov 0x8(%ebp),%ecx + ee: 8b 5d 0c mov 0xc(%ebp),%ebx char *os; os = s; while((*s++ = *t++) != 0) - 101: b8 00 00 00 00 mov $0x0,%eax - 106: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 10a: 88 14 01 mov %dl,(%ecx,%eax,1) - 10d: 83 c0 01 add $0x1,%eax - 110: 84 d2 test %dl,%dl - 112: 75 f2 jne 106 + f1: b8 00 00 00 00 mov $0x0,%eax + f6: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx + fa: 88 14 01 mov %dl,(%ecx,%eax,1) + fd: 83 c0 01 add $0x1,%eax + 100: 84 d2 test %dl,%dl + 102: 75 f2 jne f6 ; return os; } - 114: 89 c8 mov %ecx,%eax - 116: 5b pop %ebx - 117: 5d pop %ebp - 118: c3 ret + 104: 89 c8 mov %ecx,%eax + 106: 8b 5d fc mov -0x4(%ebp),%ebx + 109: c9 leave + 10a: c3 ret -00000119 : +0000010b : int strcmp(const char *p, const char *q) { - 119: f3 0f 1e fb endbr32 - 11d: 55 push %ebp - 11e: 89 e5 mov %esp,%ebp - 120: 8b 4d 08 mov 0x8(%ebp),%ecx - 123: 8b 55 0c mov 0xc(%ebp),%edx + 10b: 55 push %ebp + 10c: 89 e5 mov %esp,%ebp + 10e: 8b 4d 08 mov 0x8(%ebp),%ecx + 111: 8b 55 0c mov 0xc(%ebp),%edx while(*p && *p == *q) - 126: 0f b6 01 movzbl (%ecx),%eax - 129: 84 c0 test %al,%al - 12b: 74 11 je 13e - 12d: 38 02 cmp %al,(%edx) - 12f: 75 0d jne 13e + 114: 0f b6 01 movzbl (%ecx),%eax + 117: 84 c0 test %al,%al + 119: 74 11 je 12c + 11b: 38 02 cmp %al,(%edx) + 11d: 75 0d jne 12c p++, q++; - 131: 83 c1 01 add $0x1,%ecx - 134: 83 c2 01 add $0x1,%edx + 11f: 83 c1 01 add $0x1,%ecx + 122: 83 c2 01 add $0x1,%edx while(*p && *p == *q) - 137: 0f b6 01 movzbl (%ecx),%eax - 13a: 84 c0 test %al,%al - 13c: 75 ef jne 12d + 125: 0f b6 01 movzbl (%ecx),%eax + 128: 84 c0 test %al,%al + 12a: 75 ef jne 11b return (uchar)*p - (uchar)*q; - 13e: 0f b6 c0 movzbl %al,%eax - 141: 0f b6 12 movzbl (%edx),%edx - 144: 29 d0 sub %edx,%eax + 12c: 0f b6 c0 movzbl %al,%eax + 12f: 0f b6 12 movzbl (%edx),%edx + 132: 29 d0 sub %edx,%eax } - 146: 5d pop %ebp - 147: c3 ret + 134: 5d pop %ebp + 135: c3 ret -00000148 : +00000136 : uint strlen(const char *s) { - 148: f3 0f 1e fb endbr32 - 14c: 55 push %ebp - 14d: 89 e5 mov %esp,%ebp - 14f: 8b 55 08 mov 0x8(%ebp),%edx + 136: 55 push %ebp + 137: 89 e5 mov %esp,%ebp + 139: 8b 55 08 mov 0x8(%ebp),%edx int n; for(n = 0; s[n]; n++) - 152: 80 3a 00 cmpb $0x0,(%edx) - 155: 74 14 je 16b - 157: b8 00 00 00 00 mov $0x0,%eax - 15c: 83 c0 01 add $0x1,%eax - 15f: 89 c1 mov %eax,%ecx - 161: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - 165: 75 f5 jne 15c + 13c: 80 3a 00 cmpb $0x0,(%edx) + 13f: 74 14 je 155 + 141: b8 00 00 00 00 mov $0x0,%eax + 146: 83 c0 01 add $0x1,%eax + 149: 89 c1 mov %eax,%ecx + 14b: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) + 14f: 75 f5 jne 146 ; return n; } - 167: 89 c8 mov %ecx,%eax - 169: 5d pop %ebp - 16a: c3 ret + 151: 89 c8 mov %ecx,%eax + 153: 5d pop %ebp + 154: c3 ret for(n = 0; s[n]; n++) - 16b: b9 00 00 00 00 mov $0x0,%ecx + 155: b9 00 00 00 00 mov $0x0,%ecx return n; - 170: eb f5 jmp 167 + 15a: eb f5 jmp 151 -00000172 : +0000015c : void* memset(void *dst, int c, uint n) { - 172: f3 0f 1e fb endbr32 - 176: 55 push %ebp - 177: 89 e5 mov %esp,%ebp - 179: 57 push %edi - 17a: 8b 55 08 mov 0x8(%ebp),%edx + 15c: 55 push %ebp + 15d: 89 e5 mov %esp,%ebp + 15f: 57 push %edi + 160: 8b 55 08 mov 0x8(%ebp),%edx } static inline void stosb(void *addr, int data, int cnt) { asm volatile("cld; rep stosb" : - 17d: 89 d7 mov %edx,%edi - 17f: 8b 4d 10 mov 0x10(%ebp),%ecx - 182: 8b 45 0c mov 0xc(%ebp),%eax - 185: fc cld - 186: f3 aa rep stos %al,%es:(%edi) + 163: 89 d7 mov %edx,%edi + 165: 8b 4d 10 mov 0x10(%ebp),%ecx + 168: 8b 45 0c mov 0xc(%ebp),%eax + 16b: fc cld + 16c: f3 aa rep stos %al,%es:(%edi) stosb(dst, c, n); return dst; } - 188: 89 d0 mov %edx,%eax - 18a: 5f pop %edi - 18b: 5d pop %ebp - 18c: c3 ret + 16e: 89 d0 mov %edx,%eax + 170: 8b 7d fc mov -0x4(%ebp),%edi + 173: c9 leave + 174: c3 ret -0000018d : +00000175 : char* strchr(const char *s, char c) { - 18d: f3 0f 1e fb endbr32 - 191: 55 push %ebp - 192: 89 e5 mov %esp,%ebp - 194: 8b 45 08 mov 0x8(%ebp),%eax - 197: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx + 175: 55 push %ebp + 176: 89 e5 mov %esp,%ebp + 178: 8b 45 08 mov 0x8(%ebp),%eax + 17b: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx for(; *s; s++) - 19b: 0f b6 10 movzbl (%eax),%edx - 19e: 84 d2 test %dl,%dl - 1a0: 74 15 je 1b7 + 17f: 0f b6 10 movzbl (%eax),%edx + 182: 84 d2 test %dl,%dl + 184: 74 15 je 19b if(*s == c) - 1a2: 38 d1 cmp %dl,%cl - 1a4: 74 0f je 1b5 + 186: 38 d1 cmp %dl,%cl + 188: 74 0f je 199 for(; *s; s++) - 1a6: 83 c0 01 add $0x1,%eax - 1a9: 0f b6 10 movzbl (%eax),%edx - 1ac: 84 d2 test %dl,%dl - 1ae: 75 f2 jne 1a2 + 18a: 83 c0 01 add $0x1,%eax + 18d: 0f b6 10 movzbl (%eax),%edx + 190: 84 d2 test %dl,%dl + 192: 75 f2 jne 186 return (char*)s; return 0; - 1b0: b8 00 00 00 00 mov $0x0,%eax + 194: b8 00 00 00 00 mov $0x0,%eax } - 1b5: 5d pop %ebp - 1b6: c3 ret + 199: 5d pop %ebp + 19a: c3 ret return 0; - 1b7: b8 00 00 00 00 mov $0x0,%eax - 1bc: eb f7 jmp 1b5 + 19b: b8 00 00 00 00 mov $0x0,%eax + 1a0: eb f7 jmp 199 -000001be : +000001a2 : char* gets(char *buf, int max) { - 1be: f3 0f 1e fb endbr32 - 1c2: 55 push %ebp - 1c3: 89 e5 mov %esp,%ebp - 1c5: 57 push %edi - 1c6: 56 push %esi - 1c7: 53 push %ebx - 1c8: 83 ec 2c sub $0x2c,%esp - 1cb: 8b 75 08 mov 0x8(%ebp),%esi + 1a2: 55 push %ebp + 1a3: 89 e5 mov %esp,%ebp + 1a5: 57 push %edi + 1a6: 56 push %esi + 1a7: 53 push %ebx + 1a8: 83 ec 2c sub $0x2c,%esp + 1ab: 8b 75 08 mov 0x8(%ebp),%esi int i, cc; char c; for(i=0; i+1 < max; ){ - 1ce: bb 00 00 00 00 mov $0x0,%ebx + 1ae: bb 00 00 00 00 mov $0x0,%ebx cc = read(0, &c, 1); - 1d3: 8d 7d e7 lea -0x19(%ebp),%edi + 1b3: 8d 7d e7 lea -0x19(%ebp),%edi for(i=0; i+1 < max; ){ - 1d6: 89 5d d4 mov %ebx,-0x2c(%ebp) - 1d9: 83 c3 01 add $0x1,%ebx - 1dc: 3b 5d 0c cmp 0xc(%ebp),%ebx - 1df: 7d 27 jge 208 + 1b6: 89 5d d4 mov %ebx,-0x2c(%ebp) + 1b9: 83 c3 01 add $0x1,%ebx + 1bc: 3b 5d 0c cmp 0xc(%ebp),%ebx + 1bf: 7d 27 jge 1e8 cc = read(0, &c, 1); - 1e1: 83 ec 04 sub $0x4,%esp - 1e4: 6a 01 push $0x1 - 1e6: 57 push %edi - 1e7: 6a 00 push $0x0 - 1e9: e8 03 01 00 00 call 2f1 + 1c1: 83 ec 04 sub $0x4,%esp + 1c4: 6a 01 push $0x1 + 1c6: 57 push %edi + 1c7: 6a 00 push $0x0 + 1c9: e8 f9 00 00 00 call 2c7 if(cc < 1) - 1ee: 83 c4 10 add $0x10,%esp - 1f1: 85 c0 test %eax,%eax - 1f3: 7e 13 jle 208 + 1ce: 83 c4 10 add $0x10,%esp + 1d1: 85 c0 test %eax,%eax + 1d3: 7e 13 jle 1e8 break; buf[i++] = c; - 1f5: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 1f9: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) + 1d5: 0f b6 45 e7 movzbl -0x19(%ebp),%eax + 1d9: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) if(c == '\n' || c == '\r') - 1fd: 3c 0a cmp $0xa,%al - 1ff: 74 04 je 205 - 201: 3c 0d cmp $0xd,%al - 203: 75 d1 jne 1d6 + 1dd: 3c 0a cmp $0xa,%al + 1df: 74 04 je 1e5 + 1e1: 3c 0d cmp $0xd,%al + 1e3: 75 d1 jne 1b6 for(i=0; i+1 < max; ){ - 205: 89 5d d4 mov %ebx,-0x2c(%ebp) + 1e5: 89 5d d4 mov %ebx,-0x2c(%ebp) break; } buf[i] = '\0'; - 208: 8b 45 d4 mov -0x2c(%ebp),%eax - 20b: c6 04 06 00 movb $0x0,(%esi,%eax,1) + 1e8: 8b 45 d4 mov -0x2c(%ebp),%eax + 1eb: c6 04 06 00 movb $0x0,(%esi,%eax,1) return buf; } - 20f: 89 f0 mov %esi,%eax - 211: 8d 65 f4 lea -0xc(%ebp),%esp - 214: 5b pop %ebx - 215: 5e pop %esi - 216: 5f pop %edi - 217: 5d pop %ebp - 218: c3 ret + 1ef: 89 f0 mov %esi,%eax + 1f1: 8d 65 f4 lea -0xc(%ebp),%esp + 1f4: 5b pop %ebx + 1f5: 5e pop %esi + 1f6: 5f pop %edi + 1f7: 5d pop %ebp + 1f8: c3 ret -00000219 : +000001f9 : int stat(const char *n, struct stat *st) { - 219: f3 0f 1e fb endbr32 - 21d: 55 push %ebp - 21e: 89 e5 mov %esp,%ebp - 220: 56 push %esi - 221: 53 push %ebx + 1f9: 55 push %ebp + 1fa: 89 e5 mov %esp,%ebp + 1fc: 56 push %esi + 1fd: 53 push %ebx int fd; int r; fd = open(n, O_RDONLY); - 222: 83 ec 08 sub $0x8,%esp - 225: 6a 00 push $0x0 - 227: ff 75 08 pushl 0x8(%ebp) - 22a: e8 ea 00 00 00 call 319 + 1fe: 83 ec 08 sub $0x8,%esp + 201: 6a 00 push $0x0 + 203: ff 75 08 push 0x8(%ebp) + 206: e8 e4 00 00 00 call 2ef if(fd < 0) - 22f: 83 c4 10 add $0x10,%esp - 232: 85 c0 test %eax,%eax - 234: 78 24 js 25a - 236: 89 c3 mov %eax,%ebx + 20b: 83 c4 10 add $0x10,%esp + 20e: 85 c0 test %eax,%eax + 210: 78 24 js 236 + 212: 89 c3 mov %eax,%ebx return -1; r = fstat(fd, st); - 238: 83 ec 08 sub $0x8,%esp - 23b: ff 75 0c pushl 0xc(%ebp) - 23e: 50 push %eax - 23f: e8 ed 00 00 00 call 331 - 244: 89 c6 mov %eax,%esi + 214: 83 ec 08 sub $0x8,%esp + 217: ff 75 0c push 0xc(%ebp) + 21a: 50 push %eax + 21b: e8 e7 00 00 00 call 307 + 220: 89 c6 mov %eax,%esi close(fd); - 246: 89 1c 24 mov %ebx,(%esp) - 249: e8 b3 00 00 00 call 301 + 222: 89 1c 24 mov %ebx,(%esp) + 225: e8 ad 00 00 00 call 2d7 return r; - 24e: 83 c4 10 add $0x10,%esp + 22a: 83 c4 10 add $0x10,%esp } - 251: 89 f0 mov %esi,%eax - 253: 8d 65 f8 lea -0x8(%ebp),%esp - 256: 5b pop %ebx - 257: 5e pop %esi - 258: 5d pop %ebp - 259: c3 ret + 22d: 89 f0 mov %esi,%eax + 22f: 8d 65 f8 lea -0x8(%ebp),%esp + 232: 5b pop %ebx + 233: 5e pop %esi + 234: 5d pop %ebp + 235: c3 ret return -1; - 25a: be ff ff ff ff mov $0xffffffff,%esi - 25f: eb f0 jmp 251 + 236: be ff ff ff ff mov $0xffffffff,%esi + 23b: eb f0 jmp 22d -00000261 : +0000023d : int atoi(const char *s) { - 261: f3 0f 1e fb endbr32 - 265: 55 push %ebp - 266: 89 e5 mov %esp,%ebp - 268: 53 push %ebx - 269: 8b 55 08 mov 0x8(%ebp),%edx + 23d: 55 push %ebp + 23e: 89 e5 mov %esp,%ebp + 240: 53 push %ebx + 241: 8b 55 08 mov 0x8(%ebp),%edx int n; n = 0; while('0' <= *s && *s <= '9') - 26c: 0f b6 02 movzbl (%edx),%eax - 26f: 8d 48 d0 lea -0x30(%eax),%ecx - 272: 80 f9 09 cmp $0x9,%cl - 275: 77 22 ja 299 + 244: 0f b6 02 movzbl (%edx),%eax + 247: 8d 48 d0 lea -0x30(%eax),%ecx + 24a: 80 f9 09 cmp $0x9,%cl + 24d: 77 24 ja 273 n = 0; - 277: b9 00 00 00 00 mov $0x0,%ecx + 24f: b9 00 00 00 00 mov $0x0,%ecx n = n*10 + *s++ - '0'; - 27c: 83 c2 01 add $0x1,%edx - 27f: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 282: 0f be c0 movsbl %al,%eax - 285: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx + 254: 83 c2 01 add $0x1,%edx + 257: 8d 0c 89 lea (%ecx,%ecx,4),%ecx + 25a: 0f be c0 movsbl %al,%eax + 25d: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx while('0' <= *s && *s <= '9') - 289: 0f b6 02 movzbl (%edx),%eax - 28c: 8d 58 d0 lea -0x30(%eax),%ebx - 28f: 80 fb 09 cmp $0x9,%bl - 292: 76 e8 jbe 27c + 261: 0f b6 02 movzbl (%edx),%eax + 264: 8d 58 d0 lea -0x30(%eax),%ebx + 267: 80 fb 09 cmp $0x9,%bl + 26a: 76 e8 jbe 254 return n; } - 294: 89 c8 mov %ecx,%eax - 296: 5b pop %ebx - 297: 5d pop %ebp - 298: c3 ret + 26c: 89 c8 mov %ecx,%eax + 26e: 8b 5d fc mov -0x4(%ebp),%ebx + 271: c9 leave + 272: c3 ret n = 0; - 299: b9 00 00 00 00 mov $0x0,%ecx + 273: b9 00 00 00 00 mov $0x0,%ecx return n; - 29e: eb f4 jmp 294 + 278: eb f2 jmp 26c -000002a0 : +0000027a : void* memmove(void *vdst, const void *vsrc, int n) { - 2a0: f3 0f 1e fb endbr32 - 2a4: 55 push %ebp - 2a5: 89 e5 mov %esp,%ebp - 2a7: 56 push %esi - 2a8: 53 push %ebx - 2a9: 8b 75 08 mov 0x8(%ebp),%esi - 2ac: 8b 55 0c mov 0xc(%ebp),%edx - 2af: 8b 5d 10 mov 0x10(%ebp),%ebx + 27a: 55 push %ebp + 27b: 89 e5 mov %esp,%ebp + 27d: 56 push %esi + 27e: 53 push %ebx + 27f: 8b 75 08 mov 0x8(%ebp),%esi + 282: 8b 55 0c mov 0xc(%ebp),%edx + 285: 8b 5d 10 mov 0x10(%ebp),%ebx char *dst; const char *src; dst = vdst; src = vsrc; while(n-- > 0) - 2b2: 85 db test %ebx,%ebx - 2b4: 7e 15 jle 2cb - 2b6: 01 f3 add %esi,%ebx + 288: 85 db test %ebx,%ebx + 28a: 7e 15 jle 2a1 + 28c: 01 f3 add %esi,%ebx dst = vdst; - 2b8: 89 f0 mov %esi,%eax + 28e: 89 f0 mov %esi,%eax *dst++ = *src++; - 2ba: 83 c2 01 add $0x1,%edx - 2bd: 83 c0 01 add $0x1,%eax - 2c0: 0f b6 4a ff movzbl -0x1(%edx),%ecx - 2c4: 88 48 ff mov %cl,-0x1(%eax) + 290: 83 c2 01 add $0x1,%edx + 293: 83 c0 01 add $0x1,%eax + 296: 0f b6 4a ff movzbl -0x1(%edx),%ecx + 29a: 88 48 ff mov %cl,-0x1(%eax) while(n-- > 0) - 2c7: 39 c3 cmp %eax,%ebx - 2c9: 75 ef jne 2ba + 29d: 39 c3 cmp %eax,%ebx + 29f: 75 ef jne 290 return vdst; } - 2cb: 89 f0 mov %esi,%eax - 2cd: 5b pop %ebx - 2ce: 5e pop %esi - 2cf: 5d pop %ebp - 2d0: c3 ret + 2a1: 89 f0 mov %esi,%eax + 2a3: 5b pop %ebx + 2a4: 5e pop %esi + 2a5: 5d pop %ebp + 2a6: c3 ret -000002d1 : +000002a7 : name: \ movl $SYS_ ## name, %eax; \ int $T_SYSCALL; \ ret SYSCALL(fork) - 2d1: b8 01 00 00 00 mov $0x1,%eax - 2d6: cd 40 int $0x40 - 2d8: c3 ret + 2a7: b8 01 00 00 00 mov $0x1,%eax + 2ac: cd 40 int $0x40 + 2ae: c3 ret -000002d9 : +000002af : SYSCALL(exit) - 2d9: b8 02 00 00 00 mov $0x2,%eax - 2de: cd 40 int $0x40 - 2e0: c3 ret + 2af: b8 02 00 00 00 mov $0x2,%eax + 2b4: cd 40 int $0x40 + 2b6: c3 ret -000002e1 : +000002b7 : SYSCALL(wait) - 2e1: b8 03 00 00 00 mov $0x3,%eax - 2e6: cd 40 int $0x40 - 2e8: c3 ret + 2b7: b8 03 00 00 00 mov $0x3,%eax + 2bc: cd 40 int $0x40 + 2be: c3 ret -000002e9 : +000002bf : SYSCALL(pipe) - 2e9: b8 04 00 00 00 mov $0x4,%eax - 2ee: cd 40 int $0x40 - 2f0: c3 ret + 2bf: b8 04 00 00 00 mov $0x4,%eax + 2c4: cd 40 int $0x40 + 2c6: c3 ret -000002f1 : +000002c7 : SYSCALL(read) - 2f1: b8 05 00 00 00 mov $0x5,%eax - 2f6: cd 40 int $0x40 - 2f8: c3 ret + 2c7: b8 05 00 00 00 mov $0x5,%eax + 2cc: cd 40 int $0x40 + 2ce: c3 ret -000002f9 : +000002cf : SYSCALL(write) - 2f9: b8 10 00 00 00 mov $0x10,%eax - 2fe: cd 40 int $0x40 - 300: c3 ret + 2cf: b8 10 00 00 00 mov $0x10,%eax + 2d4: cd 40 int $0x40 + 2d6: c3 ret -00000301 : +000002d7 : SYSCALL(close) - 301: b8 15 00 00 00 mov $0x15,%eax - 306: cd 40 int $0x40 - 308: c3 ret + 2d7: b8 15 00 00 00 mov $0x15,%eax + 2dc: cd 40 int $0x40 + 2de: c3 ret -00000309 : +000002df : SYSCALL(kill) - 309: b8 06 00 00 00 mov $0x6,%eax - 30e: cd 40 int $0x40 - 310: c3 ret + 2df: b8 06 00 00 00 mov $0x6,%eax + 2e4: cd 40 int $0x40 + 2e6: c3 ret -00000311 : +000002e7 : SYSCALL(exec) - 311: b8 07 00 00 00 mov $0x7,%eax - 316: cd 40 int $0x40 - 318: c3 ret + 2e7: b8 07 00 00 00 mov $0x7,%eax + 2ec: cd 40 int $0x40 + 2ee: c3 ret -00000319 : +000002ef : SYSCALL(open) - 319: b8 0f 00 00 00 mov $0xf,%eax - 31e: cd 40 int $0x40 - 320: c3 ret + 2ef: b8 0f 00 00 00 mov $0xf,%eax + 2f4: cd 40 int $0x40 + 2f6: c3 ret -00000321 : +000002f7 : SYSCALL(mknod) - 321: b8 11 00 00 00 mov $0x11,%eax - 326: cd 40 int $0x40 - 328: c3 ret + 2f7: b8 11 00 00 00 mov $0x11,%eax + 2fc: cd 40 int $0x40 + 2fe: c3 ret -00000329 : +000002ff : SYSCALL(unlink) - 329: b8 12 00 00 00 mov $0x12,%eax - 32e: cd 40 int $0x40 - 330: c3 ret + 2ff: b8 12 00 00 00 mov $0x12,%eax + 304: cd 40 int $0x40 + 306: c3 ret -00000331 : +00000307 : SYSCALL(fstat) - 331: b8 08 00 00 00 mov $0x8,%eax - 336: cd 40 int $0x40 - 338: c3 ret + 307: b8 08 00 00 00 mov $0x8,%eax + 30c: cd 40 int $0x40 + 30e: c3 ret -00000339 : +0000030f : SYSCALL(link) - 339: b8 13 00 00 00 mov $0x13,%eax - 33e: cd 40 int $0x40 - 340: c3 ret + 30f: b8 13 00 00 00 mov $0x13,%eax + 314: cd 40 int $0x40 + 316: c3 ret -00000341 : +00000317 : SYSCALL(mkdir) - 341: b8 14 00 00 00 mov $0x14,%eax - 346: cd 40 int $0x40 - 348: c3 ret + 317: b8 14 00 00 00 mov $0x14,%eax + 31c: cd 40 int $0x40 + 31e: c3 ret -00000349 : +0000031f : SYSCALL(chdir) - 349: b8 09 00 00 00 mov $0x9,%eax - 34e: cd 40 int $0x40 - 350: c3 ret + 31f: b8 09 00 00 00 mov $0x9,%eax + 324: cd 40 int $0x40 + 326: c3 ret -00000351 : +00000327 : SYSCALL(dup) - 351: b8 0a 00 00 00 mov $0xa,%eax - 356: cd 40 int $0x40 - 358: c3 ret + 327: b8 0a 00 00 00 mov $0xa,%eax + 32c: cd 40 int $0x40 + 32e: c3 ret -00000359 : +0000032f : SYSCALL(getpid) - 359: b8 0b 00 00 00 mov $0xb,%eax - 35e: cd 40 int $0x40 - 360: c3 ret + 32f: b8 0b 00 00 00 mov $0xb,%eax + 334: cd 40 int $0x40 + 336: c3 ret -00000361 : +00000337 : SYSCALL(sbrk) - 361: b8 0c 00 00 00 mov $0xc,%eax - 366: cd 40 int $0x40 - 368: c3 ret + 337: b8 0c 00 00 00 mov $0xc,%eax + 33c: cd 40 int $0x40 + 33e: c3 ret -00000369 : +0000033f : SYSCALL(sleep) - 369: b8 0d 00 00 00 mov $0xd,%eax - 36e: cd 40 int $0x40 - 370: c3 ret + 33f: b8 0d 00 00 00 mov $0xd,%eax + 344: cd 40 int $0x40 + 346: c3 ret -00000371 : +00000347 : SYSCALL(uptime) - 371: b8 0e 00 00 00 mov $0xe,%eax - 376: cd 40 int $0x40 - 378: c3 ret + 347: b8 0e 00 00 00 mov $0xe,%eax + 34c: cd 40 int $0x40 + 34e: c3 ret -00000379 : +0000034f : SYSCALL(slabtest) - 379: b8 16 00 00 00 mov $0x16,%eax - 37e: cd 40 int $0x40 - 380: c3 ret + 34f: b8 16 00 00 00 mov $0x16,%eax + 354: cd 40 int $0x40 + 356: c3 ret -00000381 : +00000357 : SYSCALL(ps) - 381: b8 17 00 00 00 mov $0x17,%eax - 386: cd 40 int $0x40 - 388: c3 ret + 357: b8 17 00 00 00 mov $0x17,%eax + 35c: cd 40 int $0x40 + 35e: c3 ret -00000389 : +0000035f : write(fd, &c, 1); } static void printint(int fd, int xx, int base, int sgn) { - 389: 55 push %ebp - 38a: 89 e5 mov %esp,%ebp - 38c: 57 push %edi - 38d: 56 push %esi - 38e: 53 push %ebx - 38f: 83 ec 3c sub $0x3c,%esp - 392: 89 45 c4 mov %eax,-0x3c(%ebp) - 395: 89 d3 mov %edx,%ebx + 35f: 55 push %ebp + 360: 89 e5 mov %esp,%ebp + 362: 57 push %edi + 363: 56 push %esi + 364: 53 push %ebx + 365: 83 ec 3c sub $0x3c,%esp + 368: 89 45 c4 mov %eax,-0x3c(%ebp) + 36b: 89 ce mov %ecx,%esi char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 397: 83 7d 08 00 cmpl $0x0,0x8(%ebp) - 39b: 74 77 je 414 - 39d: 85 d2 test %edx,%edx - 39f: 79 73 jns 414 + 36d: 83 7d 08 00 cmpl $0x0,0x8(%ebp) + 371: 74 79 je 3ec + 373: 85 d2 test %edx,%edx + 375: 79 75 jns 3ec neg = 1; x = -xx; - 3a1: f7 db neg %ebx + 377: 89 d1 mov %edx,%ecx + 379: f7 d9 neg %ecx neg = 1; - 3a3: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) + 37b: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) } else { x = xx; } i = 0; - 3aa: be 00 00 00 00 mov $0x0,%esi + 382: bb 00 00 00 00 mov $0x0,%ebx do{ buf[i++] = digits[x % base]; - 3af: 89 f7 mov %esi,%edi - 3b1: 83 c6 01 add $0x1,%esi - 3b4: 89 d8 mov %ebx,%eax - 3b6: ba 00 00 00 00 mov $0x0,%edx - 3bb: f7 f1 div %ecx - 3bd: 0f b6 92 9c 07 00 00 movzbl 0x79c(%edx),%edx - 3c4: 88 54 35 d7 mov %dl,-0x29(%ebp,%esi,1) + 387: 89 df mov %ebx,%edi + 389: 83 c3 01 add $0x1,%ebx + 38c: 89 c8 mov %ecx,%eax + 38e: ba 00 00 00 00 mov $0x0,%edx + 393: f7 f6 div %esi + 395: 0f b6 92 b0 07 00 00 movzbl 0x7b0(%edx),%edx + 39c: 88 54 1d d7 mov %dl,-0x29(%ebp,%ebx,1) }while((x /= base) != 0); - 3c8: 89 da mov %ebx,%edx - 3ca: 89 c3 mov %eax,%ebx - 3cc: 39 d1 cmp %edx,%ecx - 3ce: 76 df jbe 3af + 3a0: 89 ca mov %ecx,%edx + 3a2: 89 c1 mov %eax,%ecx + 3a4: 39 d6 cmp %edx,%esi + 3a6: 76 df jbe 387 if(neg) - 3d0: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) - 3d4: 74 08 je 3de + 3a8: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) + 3ac: 74 08 je 3b6 buf[i++] = '-'; - 3d6: c6 44 35 d8 2d movb $0x2d,-0x28(%ebp,%esi,1) - 3db: 8d 77 02 lea 0x2(%edi),%esi + 3ae: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) + 3b3: 8d 5f 02 lea 0x2(%edi),%ebx while(--i >= 0) - 3de: 85 f6 test %esi,%esi - 3e0: 7e 2a jle 40c - 3e2: 8d 5c 35 d7 lea -0x29(%ebp,%esi,1),%ebx - 3e6: 8d 7d d8 lea -0x28(%ebp),%edi + 3b6: 85 db test %ebx,%ebx + 3b8: 7e 2a jle 3e4 + 3ba: 8d 7d d8 lea -0x28(%ebp),%edi + 3bd: 8d 5c 1d d7 lea -0x29(%ebp,%ebx,1),%ebx write(fd, &c, 1); - 3e9: 8d 75 d7 lea -0x29(%ebp),%esi + 3c1: 8d 75 d7 lea -0x29(%ebp),%esi putc(fd, buf[i]); - 3ec: 0f b6 03 movzbl (%ebx),%eax - 3ef: 88 45 d7 mov %al,-0x29(%ebp) + 3c4: 0f b6 03 movzbl (%ebx),%eax + 3c7: 88 45 d7 mov %al,-0x29(%ebp) write(fd, &c, 1); - 3f2: 83 ec 04 sub $0x4,%esp - 3f5: 6a 01 push $0x1 - 3f7: 56 push %esi - 3f8: ff 75 c4 pushl -0x3c(%ebp) - 3fb: e8 f9 fe ff ff call 2f9 + 3ca: 83 ec 04 sub $0x4,%esp + 3cd: 6a 01 push $0x1 + 3cf: 56 push %esi + 3d0: ff 75 c4 push -0x3c(%ebp) + 3d3: e8 f7 fe ff ff call 2cf while(--i >= 0) - 400: 89 d8 mov %ebx,%eax - 402: 83 eb 01 sub $0x1,%ebx - 405: 83 c4 10 add $0x10,%esp - 408: 39 f8 cmp %edi,%eax - 40a: 75 e0 jne 3ec + 3d8: 89 d8 mov %ebx,%eax + 3da: 83 eb 01 sub $0x1,%ebx + 3dd: 83 c4 10 add $0x10,%esp + 3e0: 39 f8 cmp %edi,%eax + 3e2: 75 e0 jne 3c4 } - 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 + 3e4: 8d 65 f4 lea -0xc(%ebp),%esp + 3e7: 5b pop %ebx + 3e8: 5e pop %esi + 3e9: 5f pop %edi + 3ea: 5d pop %ebp + 3eb: c3 ret + x = xx; + 3ec: 89 d1 mov %edx,%ecx neg = 0; - 414: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) - 41b: eb 8d jmp 3aa + 3ee: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) + 3f5: eb 8b jmp 382 -0000041d : +000003f7 : // Print to the given fd. Only understands %d, %x, %p, %s. void printf(int fd, const char *fmt, ...) { - 41d: f3 0f 1e fb endbr32 - 421: 55 push %ebp - 422: 89 e5 mov %esp,%ebp - 424: 57 push %edi - 425: 56 push %esi - 426: 53 push %ebx - 427: 83 ec 2c sub $0x2c,%esp + 3f7: 55 push %ebp + 3f8: 89 e5 mov %esp,%ebp + 3fa: 57 push %edi + 3fb: 56 push %esi + 3fc: 53 push %ebx + 3fd: 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++){ - 42a: 8b 75 0c mov 0xc(%ebp),%esi - 42d: 0f b6 1e movzbl (%esi),%ebx - 430: 84 db test %bl,%bl - 432: 0f 84 ab 01 00 00 je 5e3 - 438: 83 c6 01 add $0x1,%esi + 400: 8b 75 0c mov 0xc(%ebp),%esi + 403: 0f b6 1e movzbl (%esi),%ebx + 406: 84 db test %bl,%bl + 408: 0f 84 9f 01 00 00 je 5ad + 40e: 83 c6 01 add $0x1,%esi ap = (uint*)(void*)&fmt + 1; - 43b: 8d 45 10 lea 0x10(%ebp),%eax - 43e: 89 45 d4 mov %eax,-0x2c(%ebp) + 411: 8d 45 10 lea 0x10(%ebp),%eax + 414: 89 45 d4 mov %eax,-0x2c(%ebp) state = 0; - 441: bf 00 00 00 00 mov $0x0,%edi - 446: eb 2d jmp 475 + 417: bf 00 00 00 00 mov $0x0,%edi + 41c: eb 2d jmp 44b c = fmt[i] & 0xff; if(state == 0){ if(c == '%'){ state = '%'; } else { putc(fd, c); - 448: 88 5d e7 mov %bl,-0x19(%ebp) + 41e: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 44b: 83 ec 04 sub $0x4,%esp - 44e: 6a 01 push $0x1 - 450: 8d 45 e7 lea -0x19(%ebp),%eax - 453: 50 push %eax - 454: ff 75 08 pushl 0x8(%ebp) - 457: e8 9d fe ff ff call 2f9 + 421: 83 ec 04 sub $0x4,%esp + 424: 6a 01 push $0x1 + 426: 8d 45 e7 lea -0x19(%ebp),%eax + 429: 50 push %eax + 42a: ff 75 08 push 0x8(%ebp) + 42d: e8 9d fe ff ff call 2cf putc(fd, c); - 45c: 83 c4 10 add $0x10,%esp - 45f: eb 05 jmp 466 + 432: 83 c4 10 add $0x10,%esp + 435: eb 05 jmp 43c } } else if(state == '%'){ - 461: 83 ff 25 cmp $0x25,%edi - 464: 74 22 je 488 + 437: 83 ff 25 cmp $0x25,%edi + 43a: 74 1f je 45b for(i = 0; fmt[i]; i++){ - 466: 83 c6 01 add $0x1,%esi - 469: 0f b6 5e ff movzbl -0x1(%esi),%ebx - 46d: 84 db test %bl,%bl - 46f: 0f 84 6e 01 00 00 je 5e3 + 43c: 83 c6 01 add $0x1,%esi + 43f: 0f b6 5e ff movzbl -0x1(%esi),%ebx + 443: 84 db test %bl,%bl + 445: 0f 84 62 01 00 00 je 5ad c = fmt[i] & 0xff; - 475: 0f be d3 movsbl %bl,%edx - 478: 0f b6 c3 movzbl %bl,%eax + 44b: 0f b6 c3 movzbl %bl,%eax if(state == 0){ - 47b: 85 ff test %edi,%edi - 47d: 75 e2 jne 461 + 44e: 85 ff test %edi,%edi + 450: 75 e5 jne 437 if(c == '%'){ - 47f: 83 f8 25 cmp $0x25,%eax - 482: 75 c4 jne 448 + 452: 83 f8 25 cmp $0x25,%eax + 455: 75 c7 jne 41e state = '%'; - 484: 89 c7 mov %eax,%edi - 486: eb de jmp 466 + 457: 89 c7 mov %eax,%edi + 459: eb e1 jmp 43c if(c == 'd'){ - 488: 83 f8 64 cmp $0x64,%eax - 48b: 74 59 je 4e6 + 45b: 83 f8 25 cmp $0x25,%eax + 45e: 0f 84 f2 00 00 00 je 556 + 464: 8d 50 9d lea -0x63(%eax),%edx + 467: 83 fa 15 cmp $0x15,%edx + 46a: 0f 87 07 01 00 00 ja 577 + 470: 0f 87 01 01 00 00 ja 577 + 476: ff 24 95 58 07 00 00 jmp *0x758(,%edx,4) printint(fd, *ap, 10, 1); + 47d: 83 ec 0c sub $0xc,%esp + 480: 6a 01 push $0x1 + 482: b9 0a 00 00 00 mov $0xa,%ecx + 487: 8b 7d d4 mov -0x2c(%ebp),%edi + 48a: 8b 17 mov (%edi),%edx + 48c: 8b 45 08 mov 0x8(%ebp),%eax + 48f: e8 cb fe ff ff call 35f ap++; - } else if(c == 'x' || c == 'p'){ - 48d: 81 e2 f7 00 00 00 and $0xf7,%edx - 493: 83 fa 70 cmp $0x70,%edx - 496: 74 7a je 512 - printint(fd, *ap, 16, 0); - ap++; - } else if(c == 's'){ - 498: 83 f8 73 cmp $0x73,%eax - 49b: 0f 84 9d 00 00 00 je 53e - s = "(null)"; - while(*s != 0){ - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 4a1: 83 f8 63 cmp $0x63,%eax - 4a4: 0f 84 ec 00 00 00 je 596 - putc(fd, *ap); - ap++; - } else if(c == '%'){ - 4aa: 83 f8 25 cmp $0x25,%eax - 4ad: 0f 84 0f 01 00 00 je 5c2 - putc(fd, c); + 494: 89 f8 mov %edi,%eax + 496: 83 c0 04 add $0x4,%eax + 499: 89 45 d4 mov %eax,-0x2c(%ebp) + 49c: 83 c4 10 add $0x10,%esp } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); - 4b3: c6 45 e7 25 movb $0x25,-0x19(%ebp) - write(fd, &c, 1); - 4b7: 83 ec 04 sub $0x4,%esp - 4ba: 6a 01 push $0x1 - 4bc: 8d 45 e7 lea -0x19(%ebp),%eax - 4bf: 50 push %eax - 4c0: ff 75 08 pushl 0x8(%ebp) - 4c3: e8 31 fe ff ff call 2f9 putc(fd, c); - 4c8: 88 5d e7 mov %bl,-0x19(%ebp) - write(fd, &c, 1); - 4cb: 83 c4 0c add $0xc,%esp - 4ce: 6a 01 push $0x1 - 4d0: 8d 45 e7 lea -0x19(%ebp),%eax - 4d3: 50 push %eax - 4d4: ff 75 08 pushl 0x8(%ebp) - 4d7: e8 1d fe ff ff call 2f9 - putc(fd, c); - 4dc: 83 c4 10 add $0x10,%esp } state = 0; - 4df: bf 00 00 00 00 mov $0x0,%edi - 4e4: eb 80 jmp 466 - printint(fd, *ap, 10, 1); - 4e6: 83 ec 0c sub $0xc,%esp - 4e9: 6a 01 push $0x1 - 4eb: b9 0a 00 00 00 mov $0xa,%ecx - 4f0: 8b 7d d4 mov -0x2c(%ebp),%edi - 4f3: 8b 17 mov (%edi),%edx - 4f5: 8b 45 08 mov 0x8(%ebp),%eax - 4f8: e8 8c fe ff ff call 389 - ap++; - 4fd: 89 f8 mov %edi,%eax - 4ff: 83 c0 04 add $0x4,%eax - 502: 89 45 d4 mov %eax,-0x2c(%ebp) - 505: 83 c4 10 add $0x10,%esp - state = 0; - 508: bf 00 00 00 00 mov $0x0,%edi - 50d: e9 54 ff ff ff jmp 466 + 49f: bf 00 00 00 00 mov $0x0,%edi + 4a4: eb 96 jmp 43c printint(fd, *ap, 16, 0); - 512: 83 ec 0c sub $0xc,%esp - 515: 6a 00 push $0x0 - 517: b9 10 00 00 00 mov $0x10,%ecx - 51c: 8b 7d d4 mov -0x2c(%ebp),%edi - 51f: 8b 17 mov (%edi),%edx - 521: 8b 45 08 mov 0x8(%ebp),%eax - 524: e8 60 fe ff ff call 389 + 4a6: 83 ec 0c sub $0xc,%esp + 4a9: 6a 00 push $0x0 + 4ab: b9 10 00 00 00 mov $0x10,%ecx + 4b0: 8b 7d d4 mov -0x2c(%ebp),%edi + 4b3: 8b 17 mov (%edi),%edx + 4b5: 8b 45 08 mov 0x8(%ebp),%eax + 4b8: e8 a2 fe ff ff call 35f ap++; - 529: 89 f8 mov %edi,%eax - 52b: 83 c0 04 add $0x4,%eax - 52e: 89 45 d4 mov %eax,-0x2c(%ebp) - 531: 83 c4 10 add $0x10,%esp + 4bd: 89 f8 mov %edi,%eax + 4bf: 83 c0 04 add $0x4,%eax + 4c2: 89 45 d4 mov %eax,-0x2c(%ebp) + 4c5: 83 c4 10 add $0x10,%esp state = 0; - 534: bf 00 00 00 00 mov $0x0,%edi - 539: e9 28 ff ff ff jmp 466 + 4c8: bf 00 00 00 00 mov $0x0,%edi + 4cd: e9 6a ff ff ff jmp 43c s = (char*)*ap; - 53e: 8b 4d d4 mov -0x2c(%ebp),%ecx - 541: 8b 01 mov (%ecx),%eax + 4d2: 8b 4d d4 mov -0x2c(%ebp),%ecx + 4d5: 8b 01 mov (%ecx),%eax ap++; - 543: 83 c1 04 add $0x4,%ecx - 546: 89 4d d4 mov %ecx,-0x2c(%ebp) + 4d7: 83 c1 04 add $0x4,%ecx + 4da: 89 4d d4 mov %ecx,-0x2c(%ebp) if(s == 0) - 549: 85 c0 test %eax,%eax - 54b: 74 13 je 560 + 4dd: 85 c0 test %eax,%eax + 4df: 74 13 je 4f4 s = (char*)*ap; - 54d: 89 c3 mov %eax,%ebx + 4e1: 89 c3 mov %eax,%ebx while(*s != 0){ - 54f: 0f b6 00 movzbl (%eax),%eax + 4e3: 0f b6 00 movzbl (%eax),%eax state = 0; - 552: bf 00 00 00 00 mov $0x0,%edi + 4e6: bf 00 00 00 00 mov $0x0,%edi while(*s != 0){ - 557: 84 c0 test %al,%al - 559: 75 0f jne 56a - 55b: e9 06 ff ff ff jmp 466 + 4eb: 84 c0 test %al,%al + 4ed: 75 0f jne 4fe + 4ef: e9 48 ff ff ff jmp 43c s = "(null)"; - 560: bb 93 07 00 00 mov $0x793,%ebx + 4f4: bb 4f 07 00 00 mov $0x74f,%ebx while(*s != 0){ - 565: b8 28 00 00 00 mov $0x28,%eax - 56a: 8b 7d 08 mov 0x8(%ebp),%edi + 4f9: b8 28 00 00 00 mov $0x28,%eax + 4fe: 8b 7d 08 mov 0x8(%ebp),%edi putc(fd, *s); - 56d: 88 45 e7 mov %al,-0x19(%ebp) + 501: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 570: 83 ec 04 sub $0x4,%esp - 573: 6a 01 push $0x1 - 575: 8d 45 e7 lea -0x19(%ebp),%eax - 578: 50 push %eax - 579: 57 push %edi - 57a: e8 7a fd ff ff call 2f9 + 504: 83 ec 04 sub $0x4,%esp + 507: 6a 01 push $0x1 + 509: 8d 45 e7 lea -0x19(%ebp),%eax + 50c: 50 push %eax + 50d: 57 push %edi + 50e: e8 bc fd ff ff call 2cf s++; - 57f: 83 c3 01 add $0x1,%ebx + 513: 83 c3 01 add $0x1,%ebx while(*s != 0){ - 582: 0f b6 03 movzbl (%ebx),%eax - 585: 83 c4 10 add $0x10,%esp - 588: 84 c0 test %al,%al - 58a: 75 e1 jne 56d + 516: 0f b6 03 movzbl (%ebx),%eax + 519: 83 c4 10 add $0x10,%esp + 51c: 84 c0 test %al,%al + 51e: 75 e1 jne 501 state = 0; - 58c: bf 00 00 00 00 mov $0x0,%edi - 591: e9 d0 fe ff ff jmp 466 + 520: bf 00 00 00 00 mov $0x0,%edi + 525: e9 12 ff ff ff jmp 43c putc(fd, *ap); - 596: 8b 7d d4 mov -0x2c(%ebp),%edi - 599: 8b 07 mov (%edi),%eax - 59b: 88 45 e7 mov %al,-0x19(%ebp) + 52a: 8b 7d d4 mov -0x2c(%ebp),%edi + 52d: 8b 07 mov (%edi),%eax + 52f: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 59e: 83 ec 04 sub $0x4,%esp - 5a1: 6a 01 push $0x1 - 5a3: 8d 45 e7 lea -0x19(%ebp),%eax - 5a6: 50 push %eax - 5a7: ff 75 08 pushl 0x8(%ebp) - 5aa: e8 4a fd ff ff call 2f9 + 532: 83 ec 04 sub $0x4,%esp + 535: 6a 01 push $0x1 + 537: 8d 45 e7 lea -0x19(%ebp),%eax + 53a: 50 push %eax + 53b: ff 75 08 push 0x8(%ebp) + 53e: e8 8c fd ff ff call 2cf ap++; - 5af: 83 c7 04 add $0x4,%edi - 5b2: 89 7d d4 mov %edi,-0x2c(%ebp) - 5b5: 83 c4 10 add $0x10,%esp + 543: 83 c7 04 add $0x4,%edi + 546: 89 7d d4 mov %edi,-0x2c(%ebp) + 549: 83 c4 10 add $0x10,%esp state = 0; - 5b8: bf 00 00 00 00 mov $0x0,%edi - 5bd: e9 a4 fe ff ff jmp 466 + 54c: bf 00 00 00 00 mov $0x0,%edi + 551: e9 e6 fe ff ff jmp 43c putc(fd, c); - 5c2: 88 5d e7 mov %bl,-0x19(%ebp) + 556: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 5c5: 83 ec 04 sub $0x4,%esp - 5c8: 6a 01 push $0x1 - 5ca: 8d 45 e7 lea -0x19(%ebp),%eax - 5cd: 50 push %eax - 5ce: ff 75 08 pushl 0x8(%ebp) - 5d1: e8 23 fd ff ff call 2f9 - 5d6: 83 c4 10 add $0x10,%esp + 559: 83 ec 04 sub $0x4,%esp + 55c: 6a 01 push $0x1 + 55e: 8d 45 e7 lea -0x19(%ebp),%eax + 561: 50 push %eax + 562: ff 75 08 push 0x8(%ebp) + 565: e8 65 fd ff ff call 2cf + 56a: 83 c4 10 add $0x10,%esp + state = 0; + 56d: bf 00 00 00 00 mov $0x0,%edi + 572: e9 c5 fe ff ff jmp 43c + putc(fd, '%'); + 577: c6 45 e7 25 movb $0x25,-0x19(%ebp) + write(fd, &c, 1); + 57b: 83 ec 04 sub $0x4,%esp + 57e: 6a 01 push $0x1 + 580: 8d 45 e7 lea -0x19(%ebp),%eax + 583: 50 push %eax + 584: ff 75 08 push 0x8(%ebp) + 587: e8 43 fd ff ff call 2cf + putc(fd, c); + 58c: 88 5d e7 mov %bl,-0x19(%ebp) + write(fd, &c, 1); + 58f: 83 c4 0c add $0xc,%esp + 592: 6a 01 push $0x1 + 594: 8d 45 e7 lea -0x19(%ebp),%eax + 597: 50 push %eax + 598: ff 75 08 push 0x8(%ebp) + 59b: e8 2f fd ff ff call 2cf + putc(fd, c); + 5a0: 83 c4 10 add $0x10,%esp state = 0; - 5d9: bf 00 00 00 00 mov $0x0,%edi - 5de: e9 83 fe ff ff jmp 466 + 5a3: bf 00 00 00 00 mov $0x0,%edi + 5a8: e9 8f fe ff ff jmp 43c } } } - 5e3: 8d 65 f4 lea -0xc(%ebp),%esp - 5e6: 5b pop %ebx - 5e7: 5e pop %esi - 5e8: 5f pop %edi - 5e9: 5d pop %ebp - 5ea: c3 ret - -000005eb : + 5ad: 8d 65 f4 lea -0xc(%ebp),%esp + 5b0: 5b pop %ebx + 5b1: 5e pop %esi + 5b2: 5f pop %edi + 5b3: 5d pop %ebp + 5b4: c3 ret + +000005b5 : static Header base; static Header *freep; void free(void *ap) { - 5eb: f3 0f 1e fb endbr32 - 5ef: 55 push %ebp - 5f0: 89 e5 mov %esp,%ebp - 5f2: 57 push %edi - 5f3: 56 push %esi - 5f4: 53 push %ebx - 5f5: 8b 5d 08 mov 0x8(%ebp),%ebx + 5b5: 55 push %ebp + 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 Header *bp, *p; bp = (Header*)ap - 1; - 5f8: 8d 4b f8 lea -0x8(%ebx),%ecx + 5be: 8d 4b f8 lea -0x8(%ebx),%ecx for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 5fb: a1 48 0a 00 00 mov 0xa48,%eax - 600: eb 0c jmp 60e + 5c1: a1 5c 0a 00 00 mov 0xa5c,%eax + 5c6: eb 0c jmp 5d4 if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 602: 8b 10 mov (%eax),%edx - 604: 39 c2 cmp %eax,%edx - 606: 77 04 ja 60c - 608: 39 ca cmp %ecx,%edx - 60a: 77 10 ja 61c + 5c8: 8b 10 mov (%eax),%edx + 5ca: 39 c2 cmp %eax,%edx + 5cc: 77 04 ja 5d2 + 5ce: 39 ca cmp %ecx,%edx + 5d0: 77 10 ja 5e2 { - 60c: 89 d0 mov %edx,%eax + 5d2: 89 d0 mov %edx,%eax for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 60e: 39 c8 cmp %ecx,%eax - 610: 73 f0 jae 602 - 612: 8b 10 mov (%eax),%edx - 614: 39 ca cmp %ecx,%edx - 616: 77 04 ja 61c + 5d4: 39 c8 cmp %ecx,%eax + 5d6: 73 f0 jae 5c8 + 5d8: 8b 10 mov (%eax),%edx + 5da: 39 ca cmp %ecx,%edx + 5dc: 77 04 ja 5e2 if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 618: 39 c2 cmp %eax,%edx - 61a: 77 f0 ja 60c + 5de: 39 c2 cmp %eax,%edx + 5e0: 77 f0 ja 5d2 break; if(bp + bp->s.size == p->s.ptr){ - 61c: 8b 73 fc mov -0x4(%ebx),%esi - 61f: 8b 10 mov (%eax),%edx - 621: 8d 3c f1 lea (%ecx,%esi,8),%edi - 624: 39 fa cmp %edi,%edx - 626: 74 19 je 641 + 5e2: 8b 73 fc mov -0x4(%ebx),%esi + 5e5: 8b 10 mov (%eax),%edx + 5e7: 8d 3c f1 lea (%ecx,%esi,8),%edi + 5ea: 39 fa cmp %edi,%edx + 5ec: 74 19 je 607 bp->s.size += p->s.ptr->s.size; bp->s.ptr = p->s.ptr->s.ptr; + 5ee: 89 53 f8 mov %edx,-0x8(%ebx) } else bp->s.ptr = p->s.ptr; - 628: 89 53 f8 mov %edx,-0x8(%ebx) if(p + p->s.size == bp){ - 62b: 8b 50 04 mov 0x4(%eax),%edx - 62e: 8d 34 d0 lea (%eax,%edx,8),%esi - 631: 39 f1 cmp %esi,%ecx - 633: 74 1b je 650 + 5f1: 8b 50 04 mov 0x4(%eax),%edx + 5f4: 8d 34 d0 lea (%eax,%edx,8),%esi + 5f7: 39 f1 cmp %esi,%ecx + 5f9: 74 18 je 613 p->s.size += bp->s.size; p->s.ptr = bp->s.ptr; + 5fb: 89 08 mov %ecx,(%eax) } else p->s.ptr = bp; - 635: 89 08 mov %ecx,(%eax) freep = p; - 637: a3 48 0a 00 00 mov %eax,0xa48 + 5fd: a3 5c 0a 00 00 mov %eax,0xa5c } - 63c: 5b pop %ebx - 63d: 5e pop %esi - 63e: 5f pop %edi - 63f: 5d pop %ebp - 640: c3 ret + 602: 5b pop %ebx + 603: 5e pop %esi + 604: 5f pop %edi + 605: 5d pop %ebp + 606: c3 ret bp->s.size += p->s.ptr->s.size; - 641: 03 72 04 add 0x4(%edx),%esi - 644: 89 73 fc mov %esi,-0x4(%ebx) + 607: 03 72 04 add 0x4(%edx),%esi + 60a: 89 73 fc mov %esi,-0x4(%ebx) bp->s.ptr = p->s.ptr->s.ptr; - 647: 8b 10 mov (%eax),%edx - 649: 8b 12 mov (%edx),%edx - 64b: 89 53 f8 mov %edx,-0x8(%ebx) - 64e: eb db jmp 62b + 60d: 8b 10 mov (%eax),%edx + 60f: 8b 12 mov (%edx),%edx + 611: eb db jmp 5ee p->s.size += bp->s.size; - 650: 03 53 fc add -0x4(%ebx),%edx - 653: 89 50 04 mov %edx,0x4(%eax) + 613: 03 53 fc add -0x4(%ebx),%edx + 616: 89 50 04 mov %edx,0x4(%eax) p->s.ptr = bp->s.ptr; - 656: 8b 53 f8 mov -0x8(%ebx),%edx - 659: 89 10 mov %edx,(%eax) - 65b: eb da jmp 637 + 619: 8b 4b f8 mov -0x8(%ebx),%ecx + 61c: eb dd jmp 5fb -0000065d : +0000061e : return freep; } void* malloc(uint nbytes) { - 65d: f3 0f 1e fb endbr32 - 661: 55 push %ebp - 662: 89 e5 mov %esp,%ebp - 664: 57 push %edi - 665: 56 push %esi - 666: 53 push %ebx - 667: 83 ec 0c sub $0xc,%esp + 61e: 55 push %ebp + 61f: 89 e5 mov %esp,%ebp + 621: 57 push %edi + 622: 56 push %esi + 623: 53 push %ebx + 624: 83 ec 0c sub $0xc,%esp Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 66a: 8b 45 08 mov 0x8(%ebp),%eax - 66d: 8d 58 07 lea 0x7(%eax),%ebx - 670: c1 eb 03 shr $0x3,%ebx - 673: 83 c3 01 add $0x1,%ebx + 627: 8b 45 08 mov 0x8(%ebp),%eax + 62a: 8d 58 07 lea 0x7(%eax),%ebx + 62d: c1 eb 03 shr $0x3,%ebx + 630: 83 c3 01 add $0x1,%ebx if((prevp = freep) == 0){ - 676: 8b 15 48 0a 00 00 mov 0xa48,%edx - 67c: 85 d2 test %edx,%edx - 67e: 74 20 je 6a0 + 633: 8b 15 5c 0a 00 00 mov 0xa5c,%edx + 639: 85 d2 test %edx,%edx + 63b: 74 1c je 659 base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 680: 8b 02 mov (%edx),%eax + 63d: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 682: 8b 48 04 mov 0x4(%eax),%ecx - 685: 39 cb cmp %ecx,%ebx - 687: 76 3c jbe 6c5 - 689: 81 fb 00 10 00 00 cmp $0x1000,%ebx - 68f: be 00 10 00 00 mov $0x1000,%esi - 694: 0f 43 f3 cmovae %ebx,%esi + 63f: 8b 48 04 mov 0x4(%eax),%ecx + 642: 39 cb cmp %ecx,%ebx + 644: 76 38 jbe 67e + 646: be 00 10 00 00 mov $0x1000,%esi + 64b: 39 f3 cmp %esi,%ebx + 64d: 0f 43 f3 cmovae %ebx,%esi p = sbrk(nu * sizeof(Header)); - 697: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi - 69e: eb 72 jmp 712 + 650: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi + 657: eb 72 jmp 6cb base.s.ptr = freep = prevp = &base; - 6a0: c7 05 48 0a 00 00 4c movl $0xa4c,0xa48 - 6a7: 0a 00 00 - 6aa: c7 05 4c 0a 00 00 4c movl $0xa4c,0xa4c - 6b1: 0a 00 00 + 659: c7 05 5c 0a 00 00 60 movl $0xa60,0xa5c + 660: 0a 00 00 + 663: c7 05 60 0a 00 00 60 movl $0xa60,0xa60 + 66a: 0a 00 00 base.s.size = 0; - 6b4: c7 05 50 0a 00 00 00 movl $0x0,0xa50 - 6bb: 00 00 00 + 66d: c7 05 64 0a 00 00 00 movl $0x0,0xa64 + 674: 00 00 00 for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 6be: b8 4c 0a 00 00 mov $0xa4c,%eax - 6c3: eb c4 jmp 689 + 677: b8 60 0a 00 00 mov $0xa60,%eax + 67c: eb c8 jmp 646 if(p->s.size == nunits) - 6c5: 39 cb cmp %ecx,%ebx - 6c7: 74 1e je 6e7 + 67e: 39 cb cmp %ecx,%ebx + 680: 74 1e je 6a0 prevp->s.ptr = p->s.ptr; else { p->s.size -= nunits; - 6c9: 29 d9 sub %ebx,%ecx - 6cb: 89 48 04 mov %ecx,0x4(%eax) + 682: 29 d9 sub %ebx,%ecx + 684: 89 48 04 mov %ecx,0x4(%eax) p += p->s.size; - 6ce: 8d 04 c8 lea (%eax,%ecx,8),%eax + 687: 8d 04 c8 lea (%eax,%ecx,8),%eax p->s.size = nunits; - 6d1: 89 58 04 mov %ebx,0x4(%eax) + 68a: 89 58 04 mov %ebx,0x4(%eax) } freep = prevp; - 6d4: 89 15 48 0a 00 00 mov %edx,0xa48 + 68d: 89 15 5c 0a 00 00 mov %edx,0xa5c return (void*)(p + 1); - 6da: 8d 50 08 lea 0x8(%eax),%edx + 693: 8d 50 08 lea 0x8(%eax),%edx } if(p == freep) if((p = morecore(nunits)) == 0) return 0; } } - 6dd: 89 d0 mov %edx,%eax - 6df: 8d 65 f4 lea -0xc(%ebp),%esp - 6e2: 5b pop %ebx - 6e3: 5e pop %esi - 6e4: 5f pop %edi - 6e5: 5d pop %ebp - 6e6: c3 ret + 696: 89 d0 mov %edx,%eax + 698: 8d 65 f4 lea -0xc(%ebp),%esp + 69b: 5b pop %ebx + 69c: 5e pop %esi + 69d: 5f pop %edi + 69e: 5d pop %ebp + 69f: c3 ret prevp->s.ptr = p->s.ptr; - 6e7: 8b 08 mov (%eax),%ecx - 6e9: 89 0a mov %ecx,(%edx) - 6eb: eb e7 jmp 6d4 + 6a0: 8b 08 mov (%eax),%ecx + 6a2: 89 0a mov %ecx,(%edx) + 6a4: eb e7 jmp 68d hp->s.size = nu; - 6ed: 89 70 04 mov %esi,0x4(%eax) + 6a6: 89 70 04 mov %esi,0x4(%eax) free((void*)(hp + 1)); - 6f0: 83 ec 0c sub $0xc,%esp - 6f3: 83 c0 08 add $0x8,%eax - 6f6: 50 push %eax - 6f7: e8 ef fe ff ff call 5eb + 6a9: 83 ec 0c sub $0xc,%esp + 6ac: 83 c0 08 add $0x8,%eax + 6af: 50 push %eax + 6b0: e8 00 ff ff ff call 5b5 return freep; - 6fc: 8b 15 48 0a 00 00 mov 0xa48,%edx + 6b5: 8b 15 5c 0a 00 00 mov 0xa5c,%edx if((p = morecore(nunits)) == 0) - 702: 83 c4 10 add $0x10,%esp - 705: 85 d2 test %edx,%edx - 707: 74 d4 je 6dd + 6bb: 83 c4 10 add $0x10,%esp + 6be: 85 d2 test %edx,%edx + 6c0: 74 d4 je 696 for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 709: 8b 02 mov (%edx),%eax + 6c2: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 70b: 8b 48 04 mov 0x4(%eax),%ecx - 70e: 39 d9 cmp %ebx,%ecx - 710: 73 b3 jae 6c5 + 6c4: 8b 48 04 mov 0x4(%eax),%ecx + 6c7: 39 d9 cmp %ebx,%ecx + 6c9: 73 b3 jae 67e if(p == freep) - 712: 89 c2 mov %eax,%edx - 714: 39 05 48 0a 00 00 cmp %eax,0xa48 - 71a: 75 ed jne 709 + 6cb: 89 c2 mov %eax,%edx + 6cd: 39 05 5c 0a 00 00 cmp %eax,0xa5c + 6d3: 75 ed jne 6c2 p = sbrk(nu * sizeof(Header)); - 71c: 83 ec 0c sub $0xc,%esp - 71f: 57 push %edi - 720: e8 3c fc ff ff call 361 + 6d5: 83 ec 0c sub $0xc,%esp + 6d8: 57 push %edi + 6d9: e8 59 fc ff ff call 337 if(p == (char*)-1) - 725: 83 c4 10 add $0x10,%esp - 728: 83 f8 ff cmp $0xffffffff,%eax - 72b: 75 c0 jne 6ed + 6de: 83 c4 10 add $0x10,%esp + 6e1: 83 f8 ff cmp $0xffffffff,%eax + 6e4: 75 c0 jne 6a6 return 0; - 72d: ba 00 00 00 00 mov $0x0,%edx - 732: eb a9 jmp 6dd + 6e6: ba 00 00 00 00 mov $0x0,%edx + 6eb: eb a9 jmp 696 diff --git a/src/user/forktest.d b/src/user/forktest.d new file mode 100644 index 0000000..bedfe5c --- /dev/null +++ b/src/user/forktest.d @@ -0,0 +1,2 @@ +user/forktest.o: user/forktest.c /usr/include/stdc-predef.h types.h \ + stat.h user.h diff --git a/src/user/forktest.o b/src/user/forktest.o new file mode 100644 index 0000000000000000000000000000000000000000..f8110601ee57f9099a74c2375bd1242a62738951 GIT binary patch literal 4296 zcma)9ZHQb~89wLUxwEr7`@OZvx`w@5Hrv=Zv%7JdujXUZB&}&`61$DGXiR5k@9x}Y z=HB7nJ55q+lXeL;v>-M8V-4hoKNL|4DikzmWc{E}6cj015Y&biO{EHg(8~He=bkgU z8w&cuInVoj&*yt)&K-R4J}IRzB!w+*N#xfHSrV6f0M0$Drx!OtF6t;Hwv{aYd)t&LUr+`I`xNc^cEdPy!_UC z%B;G@FgoQXUYvA^(-l8)<0Nc0y#?2+MD?>;w-hFB5{7Q05^A zx^j*mBqGQC>NtX~Sfw%Vkk5Sqo#LF$;5rri5;&VyyUmIG*C2O02heZKPoRH=c6K7q zy|ZL~FQDfK=z0gy$r;HMZ=m&4y!*CL)Ce^K>i}q!wttm521hqp}(zc z{Kj)~m>=)vKKD$h@%8F~w0)R%cKwsX98KR^W7gFF;U*yl9FAKL$67DM;2K3bjUniT zP-j%A>%bDEi&Ad;tTlBdH+xaax!gthg0$mvS8^}N?^1q6z5!q`D0k48$8uqeE;%pd zu~aF>trv5-@r_ne5Fdle(rN|h%sr!g1I@t*b^%co-|y`q@HnXP$WeO?Ja6JQG)s^Vb)V&Tf^jJI;ygj(p6qmmalHd1Nby{iOiKiIsyjPBbchpz0Ruo@i0ujFdI< z6Hl}Qsxmzv0zT|llTxMbS7JX{ zN|j;5PfCkXrQwyDAwK9u#<@~GRcc0I;#HGSE1SLtYb8D#RBKTfgsr&L3QqgMLMf@t z*S#3VIAI)Wcw95lei(?!TG;R=Tl1|TX-&paRkUI+n&gDJZsqESJBV_7Y2lLbW^}nG zlCw=O28#Rl@89WeIh<%a-!g%*VA_+=lZ;l21M)2S zj>nzEQYQBG7A{!#_BaQY?Gry=ftL{DP|u>#&YGO{v7YTxUiTj(DvT4#&CjFtZV>Xo6A za~{OC9?W=fZm5TCqCARb)`$L^+SYU}O1H=?4u%-dLSfd8@!4%pZuZHZq@GnBDU`-qsbdfl+Ui(1cD)52hy8lNHJx5igAUIsGHHz*^| z_qF^(E&qgw_+M)MueAQRTK`8P-nhSL8E=h{*h=n(#FlZ5CANyMJn^GM)WW6@(X#tmLJf_+DgC2G}bjfq4Db)U)A_ijjt2&y*D+!rSb3D{x2=_;g>jaeHu4t z9Md>KM4m~F+coaf_<+Vaji1-(X$&-;)_7jyMU9t;nBU7~`Sd^oX0==ip(`&^UhzMEm=37fA{a`UfpyDg@^O5(2k?LW!?#Bsp zwY@7*C0O#-sOo;;nGk%j9R( zU8%UXZ)c)uBaNV8E5$4t={pd<1^fsaeQ-Sm?+I%QWgCq&ViKgHvXR}4M*siiHw7Q2 zFm;IeW+5A*jcu<+y%GJa1%&W`UY>KyM4#|O4OzDwXu z3|P^F`}H0fO~%IBna%e)lFUNKe5`wBf3JXN4EKffALQF%l0YWQ_HB*EZz~p!Yh}pz zu_lu@elNlA6UIr~XkXF1F~v(EkCnaiAIu%ZbC>%Ji~KK>=n`i - 20: 83 c4 10 add $0x10,%esp - 23: 85 c0 test %eax,%eax - 25: 75 18 jne 3f + 12: 83 ec 08 sub $0x8,%esp + 15: 53 push %ebx + 16: 57 push %edi + 17: e8 2c 00 00 00 call 48 + 1c: 83 c4 10 add $0x10,%esp + 1f: 85 c0 test %eax,%eax + 21: 75 18 jne 3b return 1; }while(*text!='\0' && (*text++==c || c=='.')); - 27: 0f b6 13 movzbl (%ebx),%edx - 2a: 84 d2 test %dl,%dl - 2c: 74 16 je 44 - 2e: 83 c3 01 add $0x1,%ebx - 31: 83 fe 2e cmp $0x2e,%esi - 34: 74 e0 je 16 - 36: 0f be d2 movsbl %dl,%edx - 39: 39 f2 cmp %esi,%edx - 3b: 74 d9 je 16 - 3d: eb 05 jmp 44 + 23: 0f b6 13 movzbl (%ebx),%edx + 26: 84 d2 test %dl,%dl + 28: 74 16 je 40 + 2a: 83 c3 01 add $0x1,%ebx + 2d: 83 fe 2e cmp $0x2e,%esi + 30: 74 e0 je 12 + 32: 0f be d2 movsbl %dl,%edx + 35: 39 f2 cmp %esi,%edx + 37: 74 d9 je 12 + 39: eb 05 jmp 40 return 1; - 3f: b8 01 00 00 00 mov $0x1,%eax + 3b: b8 01 00 00 00 mov $0x1,%eax return 0; } - 44: 8d 65 f4 lea -0xc(%ebp),%esp - 47: 5b pop %ebx - 48: 5e pop %esi - 49: 5f pop %edi - 4a: 5d pop %ebp - 4b: c3 ret - -0000004c : + 40: 8d 65 f4 lea -0xc(%ebp),%esp + 43: 5b pop %ebx + 44: 5e pop %esi + 45: 5f pop %edi + 46: 5d pop %ebp + 47: c3 ret + +00000048 : { - 4c: f3 0f 1e fb endbr32 - 50: 55 push %ebp - 51: 89 e5 mov %esp,%ebp - 53: 53 push %ebx - 54: 83 ec 04 sub $0x4,%esp - 57: 8b 55 08 mov 0x8(%ebp),%edx + 48: 55 push %ebp + 49: 89 e5 mov %esp,%ebp + 4b: 53 push %ebx + 4c: 83 ec 04 sub $0x4,%esp + 4f: 8b 55 08 mov 0x8(%ebp),%edx if(re[0] == '\0') - 5a: 0f b6 0a movzbl (%edx),%ecx + 52: 0f b6 0a movzbl (%edx),%ecx return 1; - 5d: b8 01 00 00 00 mov $0x1,%eax + 55: b8 01 00 00 00 mov $0x1,%eax if(re[0] == '\0') - 62: 84 c9 test %cl,%cl - 64: 74 29 je 8f + 5a: 84 c9 test %cl,%cl + 5c: 74 29 je 87 if(re[1] == '*') - 66: 0f b6 42 01 movzbl 0x1(%edx),%eax - 6a: 3c 2a cmp $0x2a,%al - 6c: 74 26 je 94 + 5e: 0f b6 42 01 movzbl 0x1(%edx),%eax + 62: 3c 2a cmp $0x2a,%al + 64: 74 26 je 8c if(re[0] == '$' && re[1] == '\0') - 6e: 84 c0 test %al,%al - 70: 75 05 jne 77 - 72: 80 f9 24 cmp $0x24,%cl - 75: 74 35 je ac + 66: 84 c0 test %al,%al + 68: 75 05 jne 6f + 6a: 80 f9 24 cmp $0x24,%cl + 6d: 74 35 je a4 if(*text!='\0' && (re[0]=='.' || re[0]==*text)) - 77: 8b 45 0c mov 0xc(%ebp),%eax - 7a: 0f b6 18 movzbl (%eax),%ebx + 6f: 8b 45 0c mov 0xc(%ebp),%eax + 72: 0f b6 18 movzbl (%eax),%ebx return 0; - 7d: b8 00 00 00 00 mov $0x0,%eax + 75: b8 00 00 00 00 mov $0x0,%eax if(*text!='\0' && (re[0]=='.' || re[0]==*text)) - 82: 84 db test %bl,%bl - 84: 74 09 je 8f - 86: 38 d9 cmp %bl,%cl - 88: 74 30 je ba - 8a: 80 f9 2e cmp $0x2e,%cl - 8d: 74 2b je ba + 7a: 84 db test %bl,%bl + 7c: 74 09 je 87 + 7e: 38 d9 cmp %bl,%cl + 80: 74 30 je b2 + 82: 80 f9 2e cmp $0x2e,%cl + 85: 74 2b je b2 } - 8f: 8b 5d fc mov -0x4(%ebp),%ebx - 92: c9 leave - 93: c3 ret + 87: 8b 5d fc mov -0x4(%ebp),%ebx + 8a: c9 leave + 8b: c3 ret return matchstar(re[0], re+2, text); - 94: 83 ec 04 sub $0x4,%esp - 97: ff 75 0c pushl 0xc(%ebp) - 9a: 83 c2 02 add $0x2,%edx - 9d: 52 push %edx - 9e: 0f be c9 movsbl %cl,%ecx - a1: 51 push %ecx - a2: e8 59 ff ff ff call 0 - a7: 83 c4 10 add $0x10,%esp - aa: eb e3 jmp 8f + 8c: 83 ec 04 sub $0x4,%esp + 8f: ff 75 0c push 0xc(%ebp) + 92: 83 c2 02 add $0x2,%edx + 95: 52 push %edx + 96: 0f be c9 movsbl %cl,%ecx + 99: 51 push %ecx + 9a: e8 61 ff ff ff call 0 + 9f: 83 c4 10 add $0x10,%esp + a2: eb e3 jmp 87 return *text == '\0'; - ac: 8b 45 0c mov 0xc(%ebp),%eax - af: 80 38 00 cmpb $0x0,(%eax) - b2: 0f 94 c0 sete %al - b5: 0f b6 c0 movzbl %al,%eax - b8: eb d5 jmp 8f + a4: 8b 45 0c mov 0xc(%ebp),%eax + a7: 80 38 00 cmpb $0x0,(%eax) + aa: 0f 94 c0 sete %al + ad: 0f b6 c0 movzbl %al,%eax + b0: eb d5 jmp 87 return matchhere(re+1, text+1); - ba: 83 ec 08 sub $0x8,%esp - bd: 8b 45 0c mov 0xc(%ebp),%eax - c0: 83 c0 01 add $0x1,%eax - c3: 50 push %eax - c4: 83 c2 01 add $0x1,%edx - c7: 52 push %edx - c8: e8 7f ff ff ff call 4c - cd: 83 c4 10 add $0x10,%esp - d0: eb bd jmp 8f - -000000d2 : + b2: 83 ec 08 sub $0x8,%esp + b5: 8b 45 0c mov 0xc(%ebp),%eax + b8: 83 c0 01 add $0x1,%eax + bb: 50 push %eax + bc: 83 c2 01 add $0x1,%edx + bf: 52 push %edx + c0: e8 83 ff ff ff call 48 + c5: 83 c4 10 add $0x10,%esp + c8: eb bd jmp 87 + +000000ca : { - d2: f3 0f 1e fb endbr32 - d6: 55 push %ebp - d7: 89 e5 mov %esp,%ebp - d9: 56 push %esi - da: 53 push %ebx - db: 8b 75 08 mov 0x8(%ebp),%esi - de: 8b 5d 0c mov 0xc(%ebp),%ebx + ca: 55 push %ebp + cb: 89 e5 mov %esp,%ebp + cd: 56 push %esi + ce: 53 push %ebx + cf: 8b 75 08 mov 0x8(%ebp),%esi + d2: 8b 5d 0c mov 0xc(%ebp),%ebx if(re[0] == '^') - e1: 80 3e 5e cmpb $0x5e,(%esi) - e4: 74 1c je 102 + d5: 80 3e 5e cmpb $0x5e,(%esi) + d8: 74 1c je f6 if(matchhere(re, text)) - e6: 83 ec 08 sub $0x8,%esp - e9: 53 push %ebx - ea: 56 push %esi - eb: e8 5c ff ff ff call 4c - f0: 83 c4 10 add $0x10,%esp - f3: 85 c0 test %eax,%eax - f5: 75 1d jne 114 + da: 83 ec 08 sub $0x8,%esp + dd: 53 push %ebx + de: 56 push %esi + df: e8 64 ff ff ff call 48 + e4: 83 c4 10 add $0x10,%esp + e7: 85 c0 test %eax,%eax + e9: 75 1d jne 108 }while(*text++ != '\0'); - f7: 83 c3 01 add $0x1,%ebx - fa: 80 7b ff 00 cmpb $0x0,-0x1(%ebx) - fe: 75 e6 jne e6 - 100: eb 17 jmp 119 + eb: 83 c3 01 add $0x1,%ebx + ee: 80 7b ff 00 cmpb $0x0,-0x1(%ebx) + f2: 75 e6 jne da + f4: eb 17 jmp 10d return matchhere(re+1, text); - 102: 83 ec 08 sub $0x8,%esp - 105: 53 push %ebx - 106: 83 c6 01 add $0x1,%esi - 109: 56 push %esi - 10a: e8 3d ff ff ff call 4c - 10f: 83 c4 10 add $0x10,%esp - 112: eb 05 jmp 119 + f6: 83 ec 08 sub $0x8,%esp + f9: 53 push %ebx + fa: 83 c6 01 add $0x1,%esi + fd: 56 push %esi + fe: e8 45 ff ff ff call 48 + 103: 83 c4 10 add $0x10,%esp + 106: eb 05 jmp 10d return 1; - 114: b8 01 00 00 00 mov $0x1,%eax + 108: b8 01 00 00 00 mov $0x1,%eax } - 119: 8d 65 f8 lea -0x8(%ebp),%esp - 11c: 5b pop %ebx - 11d: 5e pop %esi - 11e: 5d pop %ebp - 11f: c3 ret + 10d: 8d 65 f8 lea -0x8(%ebp),%esp + 110: 5b pop %ebx + 111: 5e pop %esi + 112: 5d pop %ebp + 113: c3 ret -00000120 : +00000114 : { - 120: f3 0f 1e fb endbr32 - 124: 55 push %ebp - 125: 89 e5 mov %esp,%ebp - 127: 57 push %edi - 128: 56 push %esi - 129: 53 push %ebx - 12a: 83 ec 1c sub $0x1c,%esp - 12d: 8b 7d 08 mov 0x8(%ebp),%edi + 114: 55 push %ebp + 115: 89 e5 mov %esp,%ebp + 117: 57 push %edi + 118: 56 push %esi + 119: 53 push %ebx + 11a: 83 ec 1c sub $0x1c,%esp + 11d: 8b 7d 08 mov 0x8(%ebp),%edi m = 0; - 130: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) + 120: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) while((n = read(fd, buf+m, sizeof(buf)-m-1)) > 0){ - 137: eb 53 jmp 18c - *q = '\n'; - 139: c6 03 0a movb $0xa,(%ebx) - write(1, p, q+1 - p); - 13c: 83 ec 04 sub $0x4,%esp - 13f: 8d 43 01 lea 0x1(%ebx),%eax - 142: 29 f0 sub %esi,%eax - 144: 50 push %eax - 145: 56 push %esi - 146: 6a 01 push $0x1 - 148: e8 63 03 00 00 call 4b0 - 14d: 83 c4 10 add $0x10,%esp + 127: eb 53 jmp 17c p = q+1; - 150: 8d 73 01 lea 0x1(%ebx),%esi + 129: 8d 73 01 lea 0x1(%ebx),%esi while((q = strchr(p, '\n')) != 0){ - 153: 83 ec 08 sub $0x8,%esp - 156: 6a 0a push $0xa - 158: 56 push %esi - 159: e8 e6 01 00 00 call 344 - 15e: 89 c3 mov %eax,%ebx - 160: 83 c4 10 add $0x10,%esp - 163: 85 c0 test %eax,%eax - 165: 74 16 je 17d + 12c: 83 ec 08 sub $0x8,%esp + 12f: 6a 0a push $0xa + 131: 56 push %esi + 132: e8 f0 01 00 00 call 327 + 137: 89 c3 mov %eax,%ebx + 139: 83 c4 10 add $0x10,%esp + 13c: 85 c0 test %eax,%eax + 13e: 74 2d je 16d *q = 0; - 167: c6 03 00 movb $0x0,(%ebx) + 140: c6 03 00 movb $0x0,(%ebx) if(match(pattern, p)){ - 16a: 83 ec 08 sub $0x8,%esp - 16d: 56 push %esi - 16e: 57 push %edi - 16f: e8 5e ff ff ff call d2 - 174: 83 c4 10 add $0x10,%esp - 177: 85 c0 test %eax,%eax - 179: 74 d5 je 150 - 17b: eb bc jmp 139 + 143: 83 ec 08 sub $0x8,%esp + 146: 56 push %esi + 147: 57 push %edi + 148: e8 7d ff ff ff call ca + 14d: 83 c4 10 add $0x10,%esp + 150: 85 c0 test %eax,%eax + 152: 74 d5 je 129 + *q = '\n'; + 154: c6 03 0a movb $0xa,(%ebx) + write(1, p, q+1 - p); + 157: 83 ec 04 sub $0x4,%esp + 15a: 8d 43 01 lea 0x1(%ebx),%eax + 15d: 29 f0 sub %esi,%eax + 15f: 50 push %eax + 160: 56 push %esi + 161: 6a 01 push $0x1 + 163: e8 19 03 00 00 call 481 + 168: 83 c4 10 add $0x10,%esp + 16b: eb bc jmp 129 if(p == buf) - 17d: 81 fe 80 0c 00 00 cmp $0xc80,%esi - 183: 74 5f je 1e4 + 16d: 81 fe 60 0c 00 00 cmp $0xc60,%esi + 173: 74 62 je 1d7 if(m > 0){ - 185: 8b 4d e4 mov -0x1c(%ebp),%ecx - 188: 85 c9 test %ecx,%ecx - 18a: 7f 38 jg 1c4 + 175: 8b 4d e4 mov -0x1c(%ebp),%ecx + 178: 85 c9 test %ecx,%ecx + 17a: 7f 3b jg 1b7 while((n = read(fd, buf+m, sizeof(buf)-m-1)) > 0){ - 18c: 83 ec 04 sub $0x4,%esp - 18f: b8 ff 03 00 00 mov $0x3ff,%eax - 194: 8b 4d e4 mov -0x1c(%ebp),%ecx - 197: 29 c8 sub %ecx,%eax - 199: 50 push %eax - 19a: 8d 81 80 0c 00 00 lea 0xc80(%ecx),%eax - 1a0: 50 push %eax - 1a1: ff 75 0c pushl 0xc(%ebp) - 1a4: e8 ff 02 00 00 call 4a8 - 1a9: 83 c4 10 add $0x10,%esp - 1ac: 85 c0 test %eax,%eax - 1ae: 7e 3d jle 1ed + 17c: 83 ec 04 sub $0x4,%esp + 17f: b8 ff 03 00 00 mov $0x3ff,%eax + 184: 8b 4d e4 mov -0x1c(%ebp),%ecx + 187: 29 c8 sub %ecx,%eax + 189: 50 push %eax + 18a: 8d 81 60 0c 00 00 lea 0xc60(%ecx),%eax + 190: 50 push %eax + 191: ff 75 0c push 0xc(%ebp) + 194: e8 e0 02 00 00 call 479 + 199: 83 c4 10 add $0x10,%esp + 19c: 85 c0 test %eax,%eax + 19e: 7e 40 jle 1e0 m += n; - 1b0: 01 45 e4 add %eax,-0x1c(%ebp) - 1b3: 8b 55 e4 mov -0x1c(%ebp),%edx + 1a0: 01 45 e4 add %eax,-0x1c(%ebp) + 1a3: 8b 55 e4 mov -0x1c(%ebp),%edx buf[m] = '\0'; - 1b6: c6 82 80 0c 00 00 00 movb $0x0,0xc80(%edx) + 1a6: c6 82 60 0c 00 00 00 movb $0x0,0xc60(%edx) p = buf; - 1bd: be 80 0c 00 00 mov $0xc80,%esi + 1ad: be 60 0c 00 00 mov $0xc60,%esi while((q = strchr(p, '\n')) != 0){ - 1c2: eb 8f jmp 153 + 1b2: e9 75 ff ff ff jmp 12c m -= p - buf; - 1c4: 89 f0 mov %esi,%eax - 1c6: 2d 80 0c 00 00 sub $0xc80,%eax - 1cb: 29 c1 sub %eax,%ecx - 1cd: 89 4d e4 mov %ecx,-0x1c(%ebp) + 1b7: 89 f0 mov %esi,%eax + 1b9: 2d 60 0c 00 00 sub $0xc60,%eax + 1be: 29 c1 sub %eax,%ecx + 1c0: 89 4d e4 mov %ecx,-0x1c(%ebp) memmove(buf, p, m); - 1d0: 83 ec 04 sub $0x4,%esp - 1d3: 51 push %ecx - 1d4: 56 push %esi - 1d5: 68 80 0c 00 00 push $0xc80 - 1da: e8 78 02 00 00 call 457 - 1df: 83 c4 10 add $0x10,%esp - 1e2: eb a8 jmp 18c + 1c3: 83 ec 04 sub $0x4,%esp + 1c6: 51 push %ecx + 1c7: 56 push %esi + 1c8: 68 60 0c 00 00 push $0xc60 + 1cd: e8 5a 02 00 00 call 42c + 1d2: 83 c4 10 add $0x10,%esp + 1d5: eb a5 jmp 17c m = 0; - 1e4: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) - 1eb: eb 9f jmp 18c + 1d7: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) + 1de: eb 9c jmp 17c } - 1ed: 8d 65 f4 lea -0xc(%ebp),%esp - 1f0: 5b pop %ebx - 1f1: 5e pop %esi - 1f2: 5f pop %edi - 1f3: 5d pop %ebp - 1f4: c3 ret - -000001f5
: + 1e0: 8d 65 f4 lea -0xc(%ebp),%esp + 1e3: 5b pop %ebx + 1e4: 5e pop %esi + 1e5: 5f pop %edi + 1e6: 5d pop %ebp + 1e7: c3 ret + +000001e8
: { - 1f5: f3 0f 1e fb endbr32 - 1f9: 8d 4c 24 04 lea 0x4(%esp),%ecx - 1fd: 83 e4 f0 and $0xfffffff0,%esp - 200: ff 71 fc pushl -0x4(%ecx) - 203: 55 push %ebp - 204: 89 e5 mov %esp,%ebp - 206: 57 push %edi - 207: 56 push %esi - 208: 53 push %ebx - 209: 51 push %ecx - 20a: 83 ec 18 sub $0x18,%esp - 20d: 8b 01 mov (%ecx),%eax - 20f: 89 45 e4 mov %eax,-0x1c(%ebp) - 212: 8b 71 04 mov 0x4(%ecx),%esi + 1e8: 8d 4c 24 04 lea 0x4(%esp),%ecx + 1ec: 83 e4 f0 and $0xfffffff0,%esp + 1ef: ff 71 fc push -0x4(%ecx) + 1f2: 55 push %ebp + 1f3: 89 e5 mov %esp,%ebp + 1f5: 57 push %edi + 1f6: 56 push %esi + 1f7: 53 push %ebx + 1f8: 51 push %ecx + 1f9: 83 ec 18 sub $0x18,%esp + 1fc: 8b 01 mov (%ecx),%eax + 1fe: 89 45 e4 mov %eax,-0x1c(%ebp) + 201: 8b 71 04 mov 0x4(%ecx),%esi if(argc <= 1){ - 215: 83 f8 01 cmp $0x1,%eax - 218: 7e 53 jle 26d + 204: 83 f8 01 cmp $0x1,%eax + 207: 7e 53 jle 25c pattern = argv[1]; - 21a: 8b 46 04 mov 0x4(%esi),%eax - 21d: 89 45 e0 mov %eax,-0x20(%ebp) + 209: 8b 46 04 mov 0x4(%esi),%eax + 20c: 89 45 e0 mov %eax,-0x20(%ebp) if(argc <= 2){ - 220: 83 c6 08 add $0x8,%esi + 20f: 83 c6 08 add $0x8,%esi for(i = 2; i < argc; i++){ - 223: bf 02 00 00 00 mov $0x2,%edi + 212: bf 02 00 00 00 mov $0x2,%edi if(argc <= 2){ - 228: 83 7d e4 02 cmpl $0x2,-0x1c(%ebp) - 22c: 7e 53 jle 281 + 217: 83 7d e4 02 cmpl $0x2,-0x1c(%ebp) + 21b: 7e 53 jle 270 if((fd = open(argv[i], 0)) < 0){ - 22e: 89 75 dc mov %esi,-0x24(%ebp) - 231: 83 ec 08 sub $0x8,%esp - 234: 6a 00 push $0x0 - 236: ff 36 pushl (%esi) - 238: e8 93 02 00 00 call 4d0 - 23d: 89 c3 mov %eax,%ebx - 23f: 83 c4 10 add $0x10,%esp - 242: 85 c0 test %eax,%eax - 244: 78 4b js 291 + 21d: 89 75 dc mov %esi,-0x24(%ebp) + 220: 83 ec 08 sub $0x8,%esp + 223: 6a 00 push $0x0 + 225: ff 36 push (%esi) + 227: e8 75 02 00 00 call 4a1 + 22c: 89 c3 mov %eax,%ebx + 22e: 83 c4 10 add $0x10,%esp + 231: 85 c0 test %eax,%eax + 233: 78 4b js 280 grep(pattern, fd); - 246: 83 ec 08 sub $0x8,%esp - 249: 50 push %eax - 24a: ff 75 e0 pushl -0x20(%ebp) - 24d: e8 ce fe ff ff call 120 + 235: 83 ec 08 sub $0x8,%esp + 238: 50 push %eax + 239: ff 75 e0 push -0x20(%ebp) + 23c: e8 d3 fe ff ff call 114 close(fd); - 252: 89 1c 24 mov %ebx,(%esp) - 255: e8 5e 02 00 00 call 4b8 + 241: 89 1c 24 mov %ebx,(%esp) + 244: e8 40 02 00 00 call 489 for(i = 2; i < argc; i++){ - 25a: 83 c7 01 add $0x1,%edi - 25d: 83 c6 04 add $0x4,%esi - 260: 83 c4 10 add $0x10,%esp - 263: 39 7d e4 cmp %edi,-0x1c(%ebp) - 266: 75 c6 jne 22e + 249: 83 c7 01 add $0x1,%edi + 24c: 83 c6 04 add $0x4,%esi + 24f: 83 c4 10 add $0x10,%esp + 252: 39 7d e4 cmp %edi,-0x1c(%ebp) + 255: 75 c6 jne 21d exit(); - 268: e8 23 02 00 00 call 490 + 257: e8 05 02 00 00 call 461 printf(2, "usage: grep pattern [file ...]\n"); - 26d: 83 ec 08 sub $0x8,%esp - 270: 68 ec 08 00 00 push $0x8ec - 275: 6a 02 push $0x2 - 277: e8 58 03 00 00 call 5d4 + 25c: 83 ec 08 sub $0x8,%esp + 25f: 68 a0 08 00 00 push $0x8a0 + 264: 6a 02 push $0x2 + 266: e8 3e 03 00 00 call 5a9 exit(); - 27c: e8 0f 02 00 00 call 490 + 26b: e8 f1 01 00 00 call 461 grep(pattern, 0); - 281: 83 ec 08 sub $0x8,%esp - 284: 6a 00 push $0x0 - 286: 50 push %eax - 287: e8 94 fe ff ff call 120 + 270: 83 ec 08 sub $0x8,%esp + 273: 6a 00 push $0x0 + 275: 50 push %eax + 276: e8 99 fe ff ff call 114 exit(); - 28c: e8 ff 01 00 00 call 490 + 27b: e8 e1 01 00 00 call 461 printf(1, "grep: cannot open %s\n", argv[i]); - 291: 83 ec 04 sub $0x4,%esp - 294: 8b 45 dc mov -0x24(%ebp),%eax - 297: ff 30 pushl (%eax) - 299: 68 0c 09 00 00 push $0x90c - 29e: 6a 01 push $0x1 - 2a0: e8 2f 03 00 00 call 5d4 + 280: 83 ec 04 sub $0x4,%esp + 283: 8b 45 dc mov -0x24(%ebp),%eax + 286: ff 30 push (%eax) + 288: 68 c0 08 00 00 push $0x8c0 + 28d: 6a 01 push $0x1 + 28f: e8 15 03 00 00 call 5a9 exit(); - 2a5: e8 e6 01 00 00 call 490 + 294: e8 c8 01 00 00 call 461 -000002aa : +00000299 : #include "user.h" #include "x86.h" char* strcpy(char *s, const char *t) { - 2aa: f3 0f 1e fb endbr32 - 2ae: 55 push %ebp - 2af: 89 e5 mov %esp,%ebp - 2b1: 53 push %ebx - 2b2: 8b 4d 08 mov 0x8(%ebp),%ecx - 2b5: 8b 5d 0c mov 0xc(%ebp),%ebx + 299: 55 push %ebp + 29a: 89 e5 mov %esp,%ebp + 29c: 53 push %ebx + 29d: 8b 4d 08 mov 0x8(%ebp),%ecx + 2a0: 8b 5d 0c mov 0xc(%ebp),%ebx char *os; os = s; while((*s++ = *t++) != 0) - 2b8: b8 00 00 00 00 mov $0x0,%eax - 2bd: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 2c1: 88 14 01 mov %dl,(%ecx,%eax,1) - 2c4: 83 c0 01 add $0x1,%eax - 2c7: 84 d2 test %dl,%dl - 2c9: 75 f2 jne 2bd + 2a3: b8 00 00 00 00 mov $0x0,%eax + 2a8: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx + 2ac: 88 14 01 mov %dl,(%ecx,%eax,1) + 2af: 83 c0 01 add $0x1,%eax + 2b2: 84 d2 test %dl,%dl + 2b4: 75 f2 jne 2a8 ; return os; } - 2cb: 89 c8 mov %ecx,%eax - 2cd: 5b pop %ebx - 2ce: 5d pop %ebp - 2cf: c3 ret + 2b6: 89 c8 mov %ecx,%eax + 2b8: 8b 5d fc mov -0x4(%ebp),%ebx + 2bb: c9 leave + 2bc: c3 ret -000002d0 : +000002bd : int strcmp(const char *p, const char *q) { - 2d0: f3 0f 1e fb endbr32 - 2d4: 55 push %ebp - 2d5: 89 e5 mov %esp,%ebp - 2d7: 8b 4d 08 mov 0x8(%ebp),%ecx - 2da: 8b 55 0c mov 0xc(%ebp),%edx + 2bd: 55 push %ebp + 2be: 89 e5 mov %esp,%ebp + 2c0: 8b 4d 08 mov 0x8(%ebp),%ecx + 2c3: 8b 55 0c mov 0xc(%ebp),%edx while(*p && *p == *q) - 2dd: 0f b6 01 movzbl (%ecx),%eax - 2e0: 84 c0 test %al,%al - 2e2: 74 11 je 2f5 - 2e4: 38 02 cmp %al,(%edx) - 2e6: 75 0d jne 2f5 + 2c6: 0f b6 01 movzbl (%ecx),%eax + 2c9: 84 c0 test %al,%al + 2cb: 74 11 je 2de + 2cd: 38 02 cmp %al,(%edx) + 2cf: 75 0d jne 2de p++, q++; - 2e8: 83 c1 01 add $0x1,%ecx - 2eb: 83 c2 01 add $0x1,%edx + 2d1: 83 c1 01 add $0x1,%ecx + 2d4: 83 c2 01 add $0x1,%edx while(*p && *p == *q) - 2ee: 0f b6 01 movzbl (%ecx),%eax - 2f1: 84 c0 test %al,%al - 2f3: 75 ef jne 2e4 + 2d7: 0f b6 01 movzbl (%ecx),%eax + 2da: 84 c0 test %al,%al + 2dc: 75 ef jne 2cd return (uchar)*p - (uchar)*q; - 2f5: 0f b6 c0 movzbl %al,%eax - 2f8: 0f b6 12 movzbl (%edx),%edx - 2fb: 29 d0 sub %edx,%eax + 2de: 0f b6 c0 movzbl %al,%eax + 2e1: 0f b6 12 movzbl (%edx),%edx + 2e4: 29 d0 sub %edx,%eax } - 2fd: 5d pop %ebp - 2fe: c3 ret + 2e6: 5d pop %ebp + 2e7: c3 ret -000002ff : +000002e8 : uint strlen(const char *s) { - 2ff: f3 0f 1e fb endbr32 - 303: 55 push %ebp - 304: 89 e5 mov %esp,%ebp - 306: 8b 55 08 mov 0x8(%ebp),%edx + 2e8: 55 push %ebp + 2e9: 89 e5 mov %esp,%ebp + 2eb: 8b 55 08 mov 0x8(%ebp),%edx int n; for(n = 0; s[n]; n++) - 309: 80 3a 00 cmpb $0x0,(%edx) - 30c: 74 14 je 322 - 30e: b8 00 00 00 00 mov $0x0,%eax - 313: 83 c0 01 add $0x1,%eax - 316: 89 c1 mov %eax,%ecx - 318: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - 31c: 75 f5 jne 313 + 2ee: 80 3a 00 cmpb $0x0,(%edx) + 2f1: 74 14 je 307 + 2f3: b8 00 00 00 00 mov $0x0,%eax + 2f8: 83 c0 01 add $0x1,%eax + 2fb: 89 c1 mov %eax,%ecx + 2fd: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) + 301: 75 f5 jne 2f8 ; return n; } - 31e: 89 c8 mov %ecx,%eax - 320: 5d pop %ebp - 321: c3 ret + 303: 89 c8 mov %ecx,%eax + 305: 5d pop %ebp + 306: c3 ret for(n = 0; s[n]; n++) - 322: b9 00 00 00 00 mov $0x0,%ecx + 307: b9 00 00 00 00 mov $0x0,%ecx return n; - 327: eb f5 jmp 31e + 30c: eb f5 jmp 303 -00000329 : +0000030e : void* memset(void *dst, int c, uint n) { - 329: f3 0f 1e fb endbr32 - 32d: 55 push %ebp - 32e: 89 e5 mov %esp,%ebp - 330: 57 push %edi - 331: 8b 55 08 mov 0x8(%ebp),%edx + 30e: 55 push %ebp + 30f: 89 e5 mov %esp,%ebp + 311: 57 push %edi + 312: 8b 55 08 mov 0x8(%ebp),%edx } static inline void stosb(void *addr, int data, int cnt) { asm volatile("cld; rep stosb" : - 334: 89 d7 mov %edx,%edi - 336: 8b 4d 10 mov 0x10(%ebp),%ecx - 339: 8b 45 0c mov 0xc(%ebp),%eax - 33c: fc cld - 33d: f3 aa rep stos %al,%es:(%edi) + 315: 89 d7 mov %edx,%edi + 317: 8b 4d 10 mov 0x10(%ebp),%ecx + 31a: 8b 45 0c mov 0xc(%ebp),%eax + 31d: fc cld + 31e: f3 aa rep stos %al,%es:(%edi) stosb(dst, c, n); return dst; } - 33f: 89 d0 mov %edx,%eax - 341: 5f pop %edi - 342: 5d pop %ebp - 343: c3 ret + 320: 89 d0 mov %edx,%eax + 322: 8b 7d fc mov -0x4(%ebp),%edi + 325: c9 leave + 326: c3 ret -00000344 : +00000327 : char* strchr(const char *s, char c) { - 344: f3 0f 1e fb endbr32 - 348: 55 push %ebp - 349: 89 e5 mov %esp,%ebp - 34b: 8b 45 08 mov 0x8(%ebp),%eax - 34e: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx + 327: 55 push %ebp + 328: 89 e5 mov %esp,%ebp + 32a: 8b 45 08 mov 0x8(%ebp),%eax + 32d: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx for(; *s; s++) - 352: 0f b6 10 movzbl (%eax),%edx - 355: 84 d2 test %dl,%dl - 357: 74 15 je 36e + 331: 0f b6 10 movzbl (%eax),%edx + 334: 84 d2 test %dl,%dl + 336: 74 15 je 34d if(*s == c) - 359: 38 d1 cmp %dl,%cl - 35b: 74 0f je 36c + 338: 38 d1 cmp %dl,%cl + 33a: 74 0f je 34b for(; *s; s++) - 35d: 83 c0 01 add $0x1,%eax - 360: 0f b6 10 movzbl (%eax),%edx - 363: 84 d2 test %dl,%dl - 365: 75 f2 jne 359 + 33c: 83 c0 01 add $0x1,%eax + 33f: 0f b6 10 movzbl (%eax),%edx + 342: 84 d2 test %dl,%dl + 344: 75 f2 jne 338 return (char*)s; return 0; - 367: b8 00 00 00 00 mov $0x0,%eax + 346: b8 00 00 00 00 mov $0x0,%eax } - 36c: 5d pop %ebp - 36d: c3 ret + 34b: 5d pop %ebp + 34c: c3 ret return 0; - 36e: b8 00 00 00 00 mov $0x0,%eax - 373: eb f7 jmp 36c + 34d: b8 00 00 00 00 mov $0x0,%eax + 352: eb f7 jmp 34b -00000375 : +00000354 : char* gets(char *buf, int max) { - 375: f3 0f 1e fb endbr32 - 379: 55 push %ebp - 37a: 89 e5 mov %esp,%ebp - 37c: 57 push %edi - 37d: 56 push %esi - 37e: 53 push %ebx - 37f: 83 ec 2c sub $0x2c,%esp - 382: 8b 75 08 mov 0x8(%ebp),%esi + 354: 55 push %ebp + 355: 89 e5 mov %esp,%ebp + 357: 57 push %edi + 358: 56 push %esi + 359: 53 push %ebx + 35a: 83 ec 2c sub $0x2c,%esp + 35d: 8b 75 08 mov 0x8(%ebp),%esi int i, cc; char c; for(i=0; i+1 < max; ){ - 385: bb 00 00 00 00 mov $0x0,%ebx + 360: bb 00 00 00 00 mov $0x0,%ebx cc = read(0, &c, 1); - 38a: 8d 7d e7 lea -0x19(%ebp),%edi + 365: 8d 7d e7 lea -0x19(%ebp),%edi for(i=0; i+1 < max; ){ - 38d: 89 5d d4 mov %ebx,-0x2c(%ebp) - 390: 83 c3 01 add $0x1,%ebx - 393: 3b 5d 0c cmp 0xc(%ebp),%ebx - 396: 7d 27 jge 3bf + 368: 89 5d d4 mov %ebx,-0x2c(%ebp) + 36b: 83 c3 01 add $0x1,%ebx + 36e: 3b 5d 0c cmp 0xc(%ebp),%ebx + 371: 7d 27 jge 39a cc = read(0, &c, 1); - 398: 83 ec 04 sub $0x4,%esp - 39b: 6a 01 push $0x1 - 39d: 57 push %edi - 39e: 6a 00 push $0x0 - 3a0: e8 03 01 00 00 call 4a8 + 373: 83 ec 04 sub $0x4,%esp + 376: 6a 01 push $0x1 + 378: 57 push %edi + 379: 6a 00 push $0x0 + 37b: e8 f9 00 00 00 call 479 if(cc < 1) - 3a5: 83 c4 10 add $0x10,%esp - 3a8: 85 c0 test %eax,%eax - 3aa: 7e 13 jle 3bf + 380: 83 c4 10 add $0x10,%esp + 383: 85 c0 test %eax,%eax + 385: 7e 13 jle 39a break; buf[i++] = c; - 3ac: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 3b0: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) + 387: 0f b6 45 e7 movzbl -0x19(%ebp),%eax + 38b: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) if(c == '\n' || c == '\r') - 3b4: 3c 0a cmp $0xa,%al - 3b6: 74 04 je 3bc - 3b8: 3c 0d cmp $0xd,%al - 3ba: 75 d1 jne 38d + 38f: 3c 0a cmp $0xa,%al + 391: 74 04 je 397 + 393: 3c 0d cmp $0xd,%al + 395: 75 d1 jne 368 for(i=0; i+1 < max; ){ - 3bc: 89 5d d4 mov %ebx,-0x2c(%ebp) + 397: 89 5d d4 mov %ebx,-0x2c(%ebp) break; } buf[i] = '\0'; - 3bf: 8b 45 d4 mov -0x2c(%ebp),%eax - 3c2: c6 04 06 00 movb $0x0,(%esi,%eax,1) + 39a: 8b 45 d4 mov -0x2c(%ebp),%eax + 39d: c6 04 06 00 movb $0x0,(%esi,%eax,1) return buf; } - 3c6: 89 f0 mov %esi,%eax - 3c8: 8d 65 f4 lea -0xc(%ebp),%esp - 3cb: 5b pop %ebx - 3cc: 5e pop %esi - 3cd: 5f pop %edi - 3ce: 5d pop %ebp - 3cf: c3 ret + 3a1: 89 f0 mov %esi,%eax + 3a3: 8d 65 f4 lea -0xc(%ebp),%esp + 3a6: 5b pop %ebx + 3a7: 5e pop %esi + 3a8: 5f pop %edi + 3a9: 5d pop %ebp + 3aa: c3 ret -000003d0 : +000003ab : int stat(const char *n, struct stat *st) { - 3d0: f3 0f 1e fb endbr32 - 3d4: 55 push %ebp - 3d5: 89 e5 mov %esp,%ebp - 3d7: 56 push %esi - 3d8: 53 push %ebx + 3ab: 55 push %ebp + 3ac: 89 e5 mov %esp,%ebp + 3ae: 56 push %esi + 3af: 53 push %ebx int fd; int r; fd = open(n, O_RDONLY); - 3d9: 83 ec 08 sub $0x8,%esp - 3dc: 6a 00 push $0x0 - 3de: ff 75 08 pushl 0x8(%ebp) - 3e1: e8 ea 00 00 00 call 4d0 + 3b0: 83 ec 08 sub $0x8,%esp + 3b3: 6a 00 push $0x0 + 3b5: ff 75 08 push 0x8(%ebp) + 3b8: e8 e4 00 00 00 call 4a1 if(fd < 0) - 3e6: 83 c4 10 add $0x10,%esp - 3e9: 85 c0 test %eax,%eax - 3eb: 78 24 js 411 - 3ed: 89 c3 mov %eax,%ebx + 3bd: 83 c4 10 add $0x10,%esp + 3c0: 85 c0 test %eax,%eax + 3c2: 78 24 js 3e8 + 3c4: 89 c3 mov %eax,%ebx return -1; r = fstat(fd, st); - 3ef: 83 ec 08 sub $0x8,%esp - 3f2: ff 75 0c pushl 0xc(%ebp) - 3f5: 50 push %eax - 3f6: e8 ed 00 00 00 call 4e8 - 3fb: 89 c6 mov %eax,%esi + 3c6: 83 ec 08 sub $0x8,%esp + 3c9: ff 75 0c push 0xc(%ebp) + 3cc: 50 push %eax + 3cd: e8 e7 00 00 00 call 4b9 + 3d2: 89 c6 mov %eax,%esi close(fd); - 3fd: 89 1c 24 mov %ebx,(%esp) - 400: e8 b3 00 00 00 call 4b8 + 3d4: 89 1c 24 mov %ebx,(%esp) + 3d7: e8 ad 00 00 00 call 489 return r; - 405: 83 c4 10 add $0x10,%esp + 3dc: 83 c4 10 add $0x10,%esp } - 408: 89 f0 mov %esi,%eax - 40a: 8d 65 f8 lea -0x8(%ebp),%esp - 40d: 5b pop %ebx - 40e: 5e pop %esi - 40f: 5d pop %ebp - 410: c3 ret + 3df: 89 f0 mov %esi,%eax + 3e1: 8d 65 f8 lea -0x8(%ebp),%esp + 3e4: 5b pop %ebx + 3e5: 5e pop %esi + 3e6: 5d pop %ebp + 3e7: c3 ret return -1; - 411: be ff ff ff ff mov $0xffffffff,%esi - 416: eb f0 jmp 408 + 3e8: be ff ff ff ff mov $0xffffffff,%esi + 3ed: eb f0 jmp 3df -00000418 : +000003ef : int atoi(const char *s) { - 418: f3 0f 1e fb endbr32 - 41c: 55 push %ebp - 41d: 89 e5 mov %esp,%ebp - 41f: 53 push %ebx - 420: 8b 55 08 mov 0x8(%ebp),%edx + 3ef: 55 push %ebp + 3f0: 89 e5 mov %esp,%ebp + 3f2: 53 push %ebx + 3f3: 8b 55 08 mov 0x8(%ebp),%edx int n; n = 0; while('0' <= *s && *s <= '9') - 423: 0f b6 02 movzbl (%edx),%eax - 426: 8d 48 d0 lea -0x30(%eax),%ecx - 429: 80 f9 09 cmp $0x9,%cl - 42c: 77 22 ja 450 + 3f6: 0f b6 02 movzbl (%edx),%eax + 3f9: 8d 48 d0 lea -0x30(%eax),%ecx + 3fc: 80 f9 09 cmp $0x9,%cl + 3ff: 77 24 ja 425 n = 0; - 42e: b9 00 00 00 00 mov $0x0,%ecx + 401: b9 00 00 00 00 mov $0x0,%ecx n = n*10 + *s++ - '0'; - 433: 83 c2 01 add $0x1,%edx - 436: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 439: 0f be c0 movsbl %al,%eax - 43c: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx + 406: 83 c2 01 add $0x1,%edx + 409: 8d 0c 89 lea (%ecx,%ecx,4),%ecx + 40c: 0f be c0 movsbl %al,%eax + 40f: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx while('0' <= *s && *s <= '9') - 440: 0f b6 02 movzbl (%edx),%eax - 443: 8d 58 d0 lea -0x30(%eax),%ebx - 446: 80 fb 09 cmp $0x9,%bl - 449: 76 e8 jbe 433 + 413: 0f b6 02 movzbl (%edx),%eax + 416: 8d 58 d0 lea -0x30(%eax),%ebx + 419: 80 fb 09 cmp $0x9,%bl + 41c: 76 e8 jbe 406 return n; } - 44b: 89 c8 mov %ecx,%eax - 44d: 5b pop %ebx - 44e: 5d pop %ebp - 44f: c3 ret + 41e: 89 c8 mov %ecx,%eax + 420: 8b 5d fc mov -0x4(%ebp),%ebx + 423: c9 leave + 424: c3 ret n = 0; - 450: b9 00 00 00 00 mov $0x0,%ecx + 425: b9 00 00 00 00 mov $0x0,%ecx return n; - 455: eb f4 jmp 44b + 42a: eb f2 jmp 41e -00000457 : +0000042c : void* memmove(void *vdst, const void *vsrc, int n) { - 457: f3 0f 1e fb endbr32 - 45b: 55 push %ebp - 45c: 89 e5 mov %esp,%ebp - 45e: 56 push %esi - 45f: 53 push %ebx - 460: 8b 75 08 mov 0x8(%ebp),%esi - 463: 8b 55 0c mov 0xc(%ebp),%edx - 466: 8b 5d 10 mov 0x10(%ebp),%ebx + 42c: 55 push %ebp + 42d: 89 e5 mov %esp,%ebp + 42f: 56 push %esi + 430: 53 push %ebx + 431: 8b 75 08 mov 0x8(%ebp),%esi + 434: 8b 55 0c mov 0xc(%ebp),%edx + 437: 8b 5d 10 mov 0x10(%ebp),%ebx char *dst; const char *src; dst = vdst; src = vsrc; while(n-- > 0) - 469: 85 db test %ebx,%ebx - 46b: 7e 15 jle 482 - 46d: 01 f3 add %esi,%ebx + 43a: 85 db test %ebx,%ebx + 43c: 7e 15 jle 453 + 43e: 01 f3 add %esi,%ebx dst = vdst; - 46f: 89 f0 mov %esi,%eax + 440: 89 f0 mov %esi,%eax *dst++ = *src++; - 471: 83 c2 01 add $0x1,%edx - 474: 83 c0 01 add $0x1,%eax - 477: 0f b6 4a ff movzbl -0x1(%edx),%ecx - 47b: 88 48 ff mov %cl,-0x1(%eax) + 442: 83 c2 01 add $0x1,%edx + 445: 83 c0 01 add $0x1,%eax + 448: 0f b6 4a ff movzbl -0x1(%edx),%ecx + 44c: 88 48 ff mov %cl,-0x1(%eax) while(n-- > 0) - 47e: 39 c3 cmp %eax,%ebx - 480: 75 ef jne 471 + 44f: 39 c3 cmp %eax,%ebx + 451: 75 ef jne 442 return vdst; } - 482: 89 f0 mov %esi,%eax - 484: 5b pop %ebx - 485: 5e pop %esi - 486: 5d pop %ebp - 487: c3 ret + 453: 89 f0 mov %esi,%eax + 455: 5b pop %ebx + 456: 5e pop %esi + 457: 5d pop %ebp + 458: c3 ret -00000488 : +00000459 : name: \ movl $SYS_ ## name, %eax; \ int $T_SYSCALL; \ ret SYSCALL(fork) - 488: b8 01 00 00 00 mov $0x1,%eax - 48d: cd 40 int $0x40 - 48f: c3 ret + 459: b8 01 00 00 00 mov $0x1,%eax + 45e: cd 40 int $0x40 + 460: c3 ret -00000490 : +00000461 : SYSCALL(exit) - 490: b8 02 00 00 00 mov $0x2,%eax - 495: cd 40 int $0x40 - 497: c3 ret + 461: b8 02 00 00 00 mov $0x2,%eax + 466: cd 40 int $0x40 + 468: c3 ret -00000498 : +00000469 : SYSCALL(wait) - 498: b8 03 00 00 00 mov $0x3,%eax - 49d: cd 40 int $0x40 - 49f: c3 ret + 469: b8 03 00 00 00 mov $0x3,%eax + 46e: cd 40 int $0x40 + 470: c3 ret -000004a0 : +00000471 : SYSCALL(pipe) - 4a0: b8 04 00 00 00 mov $0x4,%eax - 4a5: cd 40 int $0x40 - 4a7: c3 ret + 471: b8 04 00 00 00 mov $0x4,%eax + 476: cd 40 int $0x40 + 478: c3 ret -000004a8 : +00000479 : SYSCALL(read) - 4a8: b8 05 00 00 00 mov $0x5,%eax - 4ad: cd 40 int $0x40 - 4af: c3 ret + 479: b8 05 00 00 00 mov $0x5,%eax + 47e: cd 40 int $0x40 + 480: c3 ret -000004b0 : +00000481 : SYSCALL(write) - 4b0: b8 10 00 00 00 mov $0x10,%eax - 4b5: cd 40 int $0x40 - 4b7: c3 ret + 481: b8 10 00 00 00 mov $0x10,%eax + 486: cd 40 int $0x40 + 488: c3 ret -000004b8 : +00000489 : SYSCALL(close) - 4b8: b8 15 00 00 00 mov $0x15,%eax - 4bd: cd 40 int $0x40 - 4bf: c3 ret + 489: b8 15 00 00 00 mov $0x15,%eax + 48e: cd 40 int $0x40 + 490: c3 ret -000004c0 : +00000491 : SYSCALL(kill) - 4c0: b8 06 00 00 00 mov $0x6,%eax - 4c5: cd 40 int $0x40 - 4c7: c3 ret + 491: b8 06 00 00 00 mov $0x6,%eax + 496: cd 40 int $0x40 + 498: c3 ret -000004c8 : +00000499 : SYSCALL(exec) - 4c8: b8 07 00 00 00 mov $0x7,%eax - 4cd: cd 40 int $0x40 - 4cf: c3 ret + 499: b8 07 00 00 00 mov $0x7,%eax + 49e: cd 40 int $0x40 + 4a0: c3 ret -000004d0 : +000004a1 : SYSCALL(open) - 4d0: b8 0f 00 00 00 mov $0xf,%eax - 4d5: cd 40 int $0x40 - 4d7: c3 ret + 4a1: b8 0f 00 00 00 mov $0xf,%eax + 4a6: cd 40 int $0x40 + 4a8: c3 ret -000004d8 : +000004a9 : SYSCALL(mknod) - 4d8: b8 11 00 00 00 mov $0x11,%eax - 4dd: cd 40 int $0x40 - 4df: c3 ret + 4a9: b8 11 00 00 00 mov $0x11,%eax + 4ae: cd 40 int $0x40 + 4b0: c3 ret -000004e0 : +000004b1 : SYSCALL(unlink) - 4e0: b8 12 00 00 00 mov $0x12,%eax - 4e5: cd 40 int $0x40 - 4e7: c3 ret + 4b1: b8 12 00 00 00 mov $0x12,%eax + 4b6: cd 40 int $0x40 + 4b8: c3 ret -000004e8 : +000004b9 : SYSCALL(fstat) - 4e8: b8 08 00 00 00 mov $0x8,%eax - 4ed: cd 40 int $0x40 - 4ef: c3 ret + 4b9: b8 08 00 00 00 mov $0x8,%eax + 4be: cd 40 int $0x40 + 4c0: c3 ret -000004f0 : +000004c1 : SYSCALL(link) - 4f0: b8 13 00 00 00 mov $0x13,%eax - 4f5: cd 40 int $0x40 - 4f7: c3 ret + 4c1: b8 13 00 00 00 mov $0x13,%eax + 4c6: cd 40 int $0x40 + 4c8: c3 ret -000004f8 : +000004c9 : SYSCALL(mkdir) - 4f8: b8 14 00 00 00 mov $0x14,%eax - 4fd: cd 40 int $0x40 - 4ff: c3 ret + 4c9: b8 14 00 00 00 mov $0x14,%eax + 4ce: cd 40 int $0x40 + 4d0: c3 ret -00000500 : +000004d1 : SYSCALL(chdir) - 500: b8 09 00 00 00 mov $0x9,%eax - 505: cd 40 int $0x40 - 507: c3 ret + 4d1: b8 09 00 00 00 mov $0x9,%eax + 4d6: cd 40 int $0x40 + 4d8: c3 ret -00000508 : +000004d9 : SYSCALL(dup) - 508: b8 0a 00 00 00 mov $0xa,%eax - 50d: cd 40 int $0x40 - 50f: c3 ret + 4d9: b8 0a 00 00 00 mov $0xa,%eax + 4de: cd 40 int $0x40 + 4e0: c3 ret -00000510 : +000004e1 : SYSCALL(getpid) - 510: b8 0b 00 00 00 mov $0xb,%eax - 515: cd 40 int $0x40 - 517: c3 ret + 4e1: b8 0b 00 00 00 mov $0xb,%eax + 4e6: cd 40 int $0x40 + 4e8: c3 ret -00000518 : +000004e9 : SYSCALL(sbrk) - 518: b8 0c 00 00 00 mov $0xc,%eax - 51d: cd 40 int $0x40 - 51f: c3 ret + 4e9: b8 0c 00 00 00 mov $0xc,%eax + 4ee: cd 40 int $0x40 + 4f0: c3 ret -00000520 : +000004f1 : SYSCALL(sleep) - 520: b8 0d 00 00 00 mov $0xd,%eax - 525: cd 40 int $0x40 - 527: c3 ret + 4f1: b8 0d 00 00 00 mov $0xd,%eax + 4f6: cd 40 int $0x40 + 4f8: c3 ret -00000528 : +000004f9 : SYSCALL(uptime) - 528: b8 0e 00 00 00 mov $0xe,%eax - 52d: cd 40 int $0x40 - 52f: c3 ret + 4f9: b8 0e 00 00 00 mov $0xe,%eax + 4fe: cd 40 int $0x40 + 500: c3 ret -00000530 : +00000501 : SYSCALL(slabtest) - 530: b8 16 00 00 00 mov $0x16,%eax - 535: cd 40 int $0x40 - 537: c3 ret + 501: b8 16 00 00 00 mov $0x16,%eax + 506: cd 40 int $0x40 + 508: c3 ret -00000538 : +00000509 : SYSCALL(ps) - 538: b8 17 00 00 00 mov $0x17,%eax - 53d: cd 40 int $0x40 - 53f: c3 ret + 509: b8 17 00 00 00 mov $0x17,%eax + 50e: cd 40 int $0x40 + 510: c3 ret -00000540 : +00000511 : write(fd, &c, 1); } static void printint(int fd, int xx, int base, int sgn) { - 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 3c sub $0x3c,%esp - 549: 89 45 c4 mov %eax,-0x3c(%ebp) - 54c: 89 d3 mov %edx,%ebx + 511: 55 push %ebp + 512: 89 e5 mov %esp,%ebp + 514: 57 push %edi + 515: 56 push %esi + 516: 53 push %ebx + 517: 83 ec 3c sub $0x3c,%esp + 51a: 89 45 c4 mov %eax,-0x3c(%ebp) + 51d: 89 ce mov %ecx,%esi char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 54e: 83 7d 08 00 cmpl $0x0,0x8(%ebp) - 552: 74 77 je 5cb - 554: 85 d2 test %edx,%edx - 556: 79 73 jns 5cb + 51f: 83 7d 08 00 cmpl $0x0,0x8(%ebp) + 523: 74 79 je 59e + 525: 85 d2 test %edx,%edx + 527: 79 75 jns 59e neg = 1; x = -xx; - 558: f7 db neg %ebx + 529: 89 d1 mov %edx,%ecx + 52b: f7 d9 neg %ecx neg = 1; - 55a: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) + 52d: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) } else { x = xx; } i = 0; - 561: be 00 00 00 00 mov $0x0,%esi + 534: bb 00 00 00 00 mov $0x0,%ebx do{ buf[i++] = digits[x % base]; - 566: 89 f7 mov %esi,%edi - 568: 83 c6 01 add $0x1,%esi - 56b: 89 d8 mov %ebx,%eax - 56d: ba 00 00 00 00 mov $0x0,%edx - 572: f7 f1 div %ecx - 574: 0f b6 92 2c 09 00 00 movzbl 0x92c(%edx),%edx - 57b: 88 54 35 d7 mov %dl,-0x29(%ebp,%esi,1) + 539: 89 df mov %ebx,%edi + 53b: 83 c3 01 add $0x1,%ebx + 53e: 89 c8 mov %ecx,%eax + 540: ba 00 00 00 00 mov $0x0,%edx + 545: f7 f6 div %esi + 547: 0f b6 92 38 09 00 00 movzbl 0x938(%edx),%edx + 54e: 88 54 1d d7 mov %dl,-0x29(%ebp,%ebx,1) }while((x /= base) != 0); - 57f: 89 da mov %ebx,%edx - 581: 89 c3 mov %eax,%ebx - 583: 39 d1 cmp %edx,%ecx - 585: 76 df jbe 566 + 552: 89 ca mov %ecx,%edx + 554: 89 c1 mov %eax,%ecx + 556: 39 d6 cmp %edx,%esi + 558: 76 df jbe 539 if(neg) - 587: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) - 58b: 74 08 je 595 + 55a: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) + 55e: 74 08 je 568 buf[i++] = '-'; - 58d: c6 44 35 d8 2d movb $0x2d,-0x28(%ebp,%esi,1) - 592: 8d 77 02 lea 0x2(%edi),%esi + 560: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) + 565: 8d 5f 02 lea 0x2(%edi),%ebx while(--i >= 0) - 595: 85 f6 test %esi,%esi - 597: 7e 2a jle 5c3 - 599: 8d 5c 35 d7 lea -0x29(%ebp,%esi,1),%ebx - 59d: 8d 7d d8 lea -0x28(%ebp),%edi + 568: 85 db test %ebx,%ebx + 56a: 7e 2a jle 596 + 56c: 8d 7d d8 lea -0x28(%ebp),%edi + 56f: 8d 5c 1d d7 lea -0x29(%ebp,%ebx,1),%ebx write(fd, &c, 1); - 5a0: 8d 75 d7 lea -0x29(%ebp),%esi + 573: 8d 75 d7 lea -0x29(%ebp),%esi putc(fd, buf[i]); - 5a3: 0f b6 03 movzbl (%ebx),%eax - 5a6: 88 45 d7 mov %al,-0x29(%ebp) + 576: 0f b6 03 movzbl (%ebx),%eax + 579: 88 45 d7 mov %al,-0x29(%ebp) write(fd, &c, 1); - 5a9: 83 ec 04 sub $0x4,%esp - 5ac: 6a 01 push $0x1 - 5ae: 56 push %esi - 5af: ff 75 c4 pushl -0x3c(%ebp) - 5b2: e8 f9 fe ff ff call 4b0 + 57c: 83 ec 04 sub $0x4,%esp + 57f: 6a 01 push $0x1 + 581: 56 push %esi + 582: ff 75 c4 push -0x3c(%ebp) + 585: e8 f7 fe ff ff call 481 while(--i >= 0) - 5b7: 89 d8 mov %ebx,%eax - 5b9: 83 eb 01 sub $0x1,%ebx - 5bc: 83 c4 10 add $0x10,%esp - 5bf: 39 f8 cmp %edi,%eax - 5c1: 75 e0 jne 5a3 + 58a: 89 d8 mov %ebx,%eax + 58c: 83 eb 01 sub $0x1,%ebx + 58f: 83 c4 10 add $0x10,%esp + 592: 39 f8 cmp %edi,%eax + 594: 75 e0 jne 576 } - 5c3: 8d 65 f4 lea -0xc(%ebp),%esp - 5c6: 5b pop %ebx - 5c7: 5e pop %esi - 5c8: 5f pop %edi - 5c9: 5d pop %ebp - 5ca: c3 ret + 596: 8d 65 f4 lea -0xc(%ebp),%esp + 599: 5b pop %ebx + 59a: 5e pop %esi + 59b: 5f pop %edi + 59c: 5d pop %ebp + 59d: c3 ret + x = xx; + 59e: 89 d1 mov %edx,%ecx neg = 0; - 5cb: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) - 5d2: eb 8d jmp 561 + 5a0: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) + 5a7: eb 8b jmp 534 -000005d4 : +000005a9 : // Print to the given fd. Only understands %d, %x, %p, %s. void printf(int fd, const char *fmt, ...) { - 5d4: f3 0f 1e fb endbr32 - 5d8: 55 push %ebp - 5d9: 89 e5 mov %esp,%ebp - 5db: 57 push %edi - 5dc: 56 push %esi - 5dd: 53 push %ebx - 5de: 83 ec 2c sub $0x2c,%esp + 5a9: 55 push %ebp + 5aa: 89 e5 mov %esp,%ebp + 5ac: 57 push %edi + 5ad: 56 push %esi + 5ae: 53 push %ebx + 5af: 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++){ - 5e1: 8b 75 0c mov 0xc(%ebp),%esi - 5e4: 0f b6 1e movzbl (%esi),%ebx - 5e7: 84 db test %bl,%bl - 5e9: 0f 84 ab 01 00 00 je 79a - 5ef: 83 c6 01 add $0x1,%esi + 5b2: 8b 75 0c mov 0xc(%ebp),%esi + 5b5: 0f b6 1e movzbl (%esi),%ebx + 5b8: 84 db test %bl,%bl + 5ba: 0f 84 9f 01 00 00 je 75f + 5c0: 83 c6 01 add $0x1,%esi ap = (uint*)(void*)&fmt + 1; - 5f2: 8d 45 10 lea 0x10(%ebp),%eax - 5f5: 89 45 d4 mov %eax,-0x2c(%ebp) + 5c3: 8d 45 10 lea 0x10(%ebp),%eax + 5c6: 89 45 d4 mov %eax,-0x2c(%ebp) state = 0; - 5f8: bf 00 00 00 00 mov $0x0,%edi - 5fd: eb 2d jmp 62c + 5c9: bf 00 00 00 00 mov $0x0,%edi + 5ce: eb 2d jmp 5fd c = fmt[i] & 0xff; if(state == 0){ if(c == '%'){ state = '%'; } else { putc(fd, c); - 5ff: 88 5d e7 mov %bl,-0x19(%ebp) + 5d0: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 602: 83 ec 04 sub $0x4,%esp - 605: 6a 01 push $0x1 - 607: 8d 45 e7 lea -0x19(%ebp),%eax - 60a: 50 push %eax - 60b: ff 75 08 pushl 0x8(%ebp) - 60e: e8 9d fe ff ff call 4b0 + 5d3: 83 ec 04 sub $0x4,%esp + 5d6: 6a 01 push $0x1 + 5d8: 8d 45 e7 lea -0x19(%ebp),%eax + 5db: 50 push %eax + 5dc: ff 75 08 push 0x8(%ebp) + 5df: e8 9d fe ff ff call 481 putc(fd, c); - 613: 83 c4 10 add $0x10,%esp - 616: eb 05 jmp 61d + 5e4: 83 c4 10 add $0x10,%esp + 5e7: eb 05 jmp 5ee } } else if(state == '%'){ - 618: 83 ff 25 cmp $0x25,%edi - 61b: 74 22 je 63f + 5e9: 83 ff 25 cmp $0x25,%edi + 5ec: 74 1f je 60d for(i = 0; fmt[i]; i++){ - 61d: 83 c6 01 add $0x1,%esi - 620: 0f b6 5e ff movzbl -0x1(%esi),%ebx - 624: 84 db test %bl,%bl - 626: 0f 84 6e 01 00 00 je 79a + 5ee: 83 c6 01 add $0x1,%esi + 5f1: 0f b6 5e ff movzbl -0x1(%esi),%ebx + 5f5: 84 db test %bl,%bl + 5f7: 0f 84 62 01 00 00 je 75f c = fmt[i] & 0xff; - 62c: 0f be d3 movsbl %bl,%edx - 62f: 0f b6 c3 movzbl %bl,%eax + 5fd: 0f b6 c3 movzbl %bl,%eax if(state == 0){ - 632: 85 ff test %edi,%edi - 634: 75 e2 jne 618 + 600: 85 ff test %edi,%edi + 602: 75 e5 jne 5e9 if(c == '%'){ - 636: 83 f8 25 cmp $0x25,%eax - 639: 75 c4 jne 5ff + 604: 83 f8 25 cmp $0x25,%eax + 607: 75 c7 jne 5d0 state = '%'; - 63b: 89 c7 mov %eax,%edi - 63d: eb de jmp 61d + 609: 89 c7 mov %eax,%edi + 60b: eb e1 jmp 5ee if(c == 'd'){ - 63f: 83 f8 64 cmp $0x64,%eax - 642: 74 59 je 69d + 60d: 83 f8 25 cmp $0x25,%eax + 610: 0f 84 f2 00 00 00 je 708 + 616: 8d 50 9d lea -0x63(%eax),%edx + 619: 83 fa 15 cmp $0x15,%edx + 61c: 0f 87 07 01 00 00 ja 729 + 622: 0f 87 01 01 00 00 ja 729 + 628: ff 24 95 e0 08 00 00 jmp *0x8e0(,%edx,4) printint(fd, *ap, 10, 1); + 62f: 83 ec 0c sub $0xc,%esp + 632: 6a 01 push $0x1 + 634: b9 0a 00 00 00 mov $0xa,%ecx + 639: 8b 7d d4 mov -0x2c(%ebp),%edi + 63c: 8b 17 mov (%edi),%edx + 63e: 8b 45 08 mov 0x8(%ebp),%eax + 641: e8 cb fe ff ff call 511 ap++; - } else if(c == 'x' || c == 'p'){ - 644: 81 e2 f7 00 00 00 and $0xf7,%edx - 64a: 83 fa 70 cmp $0x70,%edx - 64d: 74 7a je 6c9 - printint(fd, *ap, 16, 0); - ap++; - } else if(c == 's'){ - 64f: 83 f8 73 cmp $0x73,%eax - 652: 0f 84 9d 00 00 00 je 6f5 - s = "(null)"; - while(*s != 0){ - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 658: 83 f8 63 cmp $0x63,%eax - 65b: 0f 84 ec 00 00 00 je 74d - putc(fd, *ap); - ap++; - } else if(c == '%'){ - 661: 83 f8 25 cmp $0x25,%eax - 664: 0f 84 0f 01 00 00 je 779 - putc(fd, c); + 646: 89 f8 mov %edi,%eax + 648: 83 c0 04 add $0x4,%eax + 64b: 89 45 d4 mov %eax,-0x2c(%ebp) + 64e: 83 c4 10 add $0x10,%esp } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); - 66a: c6 45 e7 25 movb $0x25,-0x19(%ebp) - write(fd, &c, 1); - 66e: 83 ec 04 sub $0x4,%esp - 671: 6a 01 push $0x1 - 673: 8d 45 e7 lea -0x19(%ebp),%eax - 676: 50 push %eax - 677: ff 75 08 pushl 0x8(%ebp) - 67a: e8 31 fe ff ff call 4b0 putc(fd, c); - 67f: 88 5d e7 mov %bl,-0x19(%ebp) - write(fd, &c, 1); - 682: 83 c4 0c add $0xc,%esp - 685: 6a 01 push $0x1 - 687: 8d 45 e7 lea -0x19(%ebp),%eax - 68a: 50 push %eax - 68b: ff 75 08 pushl 0x8(%ebp) - 68e: e8 1d fe ff ff call 4b0 - putc(fd, c); - 693: 83 c4 10 add $0x10,%esp } state = 0; - 696: bf 00 00 00 00 mov $0x0,%edi - 69b: eb 80 jmp 61d - printint(fd, *ap, 10, 1); - 69d: 83 ec 0c sub $0xc,%esp - 6a0: 6a 01 push $0x1 - 6a2: b9 0a 00 00 00 mov $0xa,%ecx - 6a7: 8b 7d d4 mov -0x2c(%ebp),%edi - 6aa: 8b 17 mov (%edi),%edx - 6ac: 8b 45 08 mov 0x8(%ebp),%eax - 6af: e8 8c fe ff ff call 540 - ap++; - 6b4: 89 f8 mov %edi,%eax - 6b6: 83 c0 04 add $0x4,%eax - 6b9: 89 45 d4 mov %eax,-0x2c(%ebp) - 6bc: 83 c4 10 add $0x10,%esp - state = 0; - 6bf: bf 00 00 00 00 mov $0x0,%edi - 6c4: e9 54 ff ff ff jmp 61d + 651: bf 00 00 00 00 mov $0x0,%edi + 656: eb 96 jmp 5ee printint(fd, *ap, 16, 0); - 6c9: 83 ec 0c sub $0xc,%esp - 6cc: 6a 00 push $0x0 - 6ce: b9 10 00 00 00 mov $0x10,%ecx - 6d3: 8b 7d d4 mov -0x2c(%ebp),%edi - 6d6: 8b 17 mov (%edi),%edx - 6d8: 8b 45 08 mov 0x8(%ebp),%eax - 6db: e8 60 fe ff ff call 540 + 658: 83 ec 0c sub $0xc,%esp + 65b: 6a 00 push $0x0 + 65d: b9 10 00 00 00 mov $0x10,%ecx + 662: 8b 7d d4 mov -0x2c(%ebp),%edi + 665: 8b 17 mov (%edi),%edx + 667: 8b 45 08 mov 0x8(%ebp),%eax + 66a: e8 a2 fe ff ff call 511 ap++; - 6e0: 89 f8 mov %edi,%eax - 6e2: 83 c0 04 add $0x4,%eax - 6e5: 89 45 d4 mov %eax,-0x2c(%ebp) - 6e8: 83 c4 10 add $0x10,%esp + 66f: 89 f8 mov %edi,%eax + 671: 83 c0 04 add $0x4,%eax + 674: 89 45 d4 mov %eax,-0x2c(%ebp) + 677: 83 c4 10 add $0x10,%esp state = 0; - 6eb: bf 00 00 00 00 mov $0x0,%edi - 6f0: e9 28 ff ff ff jmp 61d + 67a: bf 00 00 00 00 mov $0x0,%edi + 67f: e9 6a ff ff ff jmp 5ee s = (char*)*ap; - 6f5: 8b 4d d4 mov -0x2c(%ebp),%ecx - 6f8: 8b 01 mov (%ecx),%eax + 684: 8b 4d d4 mov -0x2c(%ebp),%ecx + 687: 8b 01 mov (%ecx),%eax ap++; - 6fa: 83 c1 04 add $0x4,%ecx - 6fd: 89 4d d4 mov %ecx,-0x2c(%ebp) + 689: 83 c1 04 add $0x4,%ecx + 68c: 89 4d d4 mov %ecx,-0x2c(%ebp) if(s == 0) - 700: 85 c0 test %eax,%eax - 702: 74 13 je 717 + 68f: 85 c0 test %eax,%eax + 691: 74 13 je 6a6 s = (char*)*ap; - 704: 89 c3 mov %eax,%ebx + 693: 89 c3 mov %eax,%ebx while(*s != 0){ - 706: 0f b6 00 movzbl (%eax),%eax + 695: 0f b6 00 movzbl (%eax),%eax state = 0; - 709: bf 00 00 00 00 mov $0x0,%edi + 698: bf 00 00 00 00 mov $0x0,%edi while(*s != 0){ - 70e: 84 c0 test %al,%al - 710: 75 0f jne 721 - 712: e9 06 ff ff ff jmp 61d + 69d: 84 c0 test %al,%al + 69f: 75 0f jne 6b0 + 6a1: e9 48 ff ff ff jmp 5ee s = "(null)"; - 717: bb 22 09 00 00 mov $0x922,%ebx + 6a6: bb d6 08 00 00 mov $0x8d6,%ebx while(*s != 0){ - 71c: b8 28 00 00 00 mov $0x28,%eax - 721: 8b 7d 08 mov 0x8(%ebp),%edi + 6ab: b8 28 00 00 00 mov $0x28,%eax + 6b0: 8b 7d 08 mov 0x8(%ebp),%edi putc(fd, *s); - 724: 88 45 e7 mov %al,-0x19(%ebp) + 6b3: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 727: 83 ec 04 sub $0x4,%esp - 72a: 6a 01 push $0x1 - 72c: 8d 45 e7 lea -0x19(%ebp),%eax - 72f: 50 push %eax - 730: 57 push %edi - 731: e8 7a fd ff ff call 4b0 + 6b6: 83 ec 04 sub $0x4,%esp + 6b9: 6a 01 push $0x1 + 6bb: 8d 45 e7 lea -0x19(%ebp),%eax + 6be: 50 push %eax + 6bf: 57 push %edi + 6c0: e8 bc fd ff ff call 481 s++; - 736: 83 c3 01 add $0x1,%ebx + 6c5: 83 c3 01 add $0x1,%ebx while(*s != 0){ - 739: 0f b6 03 movzbl (%ebx),%eax - 73c: 83 c4 10 add $0x10,%esp - 73f: 84 c0 test %al,%al - 741: 75 e1 jne 724 + 6c8: 0f b6 03 movzbl (%ebx),%eax + 6cb: 83 c4 10 add $0x10,%esp + 6ce: 84 c0 test %al,%al + 6d0: 75 e1 jne 6b3 state = 0; - 743: bf 00 00 00 00 mov $0x0,%edi - 748: e9 d0 fe ff ff jmp 61d + 6d2: bf 00 00 00 00 mov $0x0,%edi + 6d7: e9 12 ff ff ff jmp 5ee putc(fd, *ap); - 74d: 8b 7d d4 mov -0x2c(%ebp),%edi - 750: 8b 07 mov (%edi),%eax - 752: 88 45 e7 mov %al,-0x19(%ebp) + 6dc: 8b 7d d4 mov -0x2c(%ebp),%edi + 6df: 8b 07 mov (%edi),%eax + 6e1: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 755: 83 ec 04 sub $0x4,%esp - 758: 6a 01 push $0x1 - 75a: 8d 45 e7 lea -0x19(%ebp),%eax - 75d: 50 push %eax - 75e: ff 75 08 pushl 0x8(%ebp) - 761: e8 4a fd ff ff call 4b0 + 6e4: 83 ec 04 sub $0x4,%esp + 6e7: 6a 01 push $0x1 + 6e9: 8d 45 e7 lea -0x19(%ebp),%eax + 6ec: 50 push %eax + 6ed: ff 75 08 push 0x8(%ebp) + 6f0: e8 8c fd ff ff call 481 ap++; - 766: 83 c7 04 add $0x4,%edi - 769: 89 7d d4 mov %edi,-0x2c(%ebp) - 76c: 83 c4 10 add $0x10,%esp + 6f5: 83 c7 04 add $0x4,%edi + 6f8: 89 7d d4 mov %edi,-0x2c(%ebp) + 6fb: 83 c4 10 add $0x10,%esp state = 0; - 76f: bf 00 00 00 00 mov $0x0,%edi - 774: e9 a4 fe ff ff jmp 61d + 6fe: bf 00 00 00 00 mov $0x0,%edi + 703: e9 e6 fe ff ff jmp 5ee putc(fd, c); - 779: 88 5d e7 mov %bl,-0x19(%ebp) + 708: 88 5d e7 mov %bl,-0x19(%ebp) + write(fd, &c, 1); + 70b: 83 ec 04 sub $0x4,%esp + 70e: 6a 01 push $0x1 + 710: 8d 45 e7 lea -0x19(%ebp),%eax + 713: 50 push %eax + 714: ff 75 08 push 0x8(%ebp) + 717: e8 65 fd ff ff call 481 + 71c: 83 c4 10 add $0x10,%esp + state = 0; + 71f: bf 00 00 00 00 mov $0x0,%edi + 724: e9 c5 fe ff ff jmp 5ee + putc(fd, '%'); + 729: c6 45 e7 25 movb $0x25,-0x19(%ebp) write(fd, &c, 1); - 77c: 83 ec 04 sub $0x4,%esp - 77f: 6a 01 push $0x1 - 781: 8d 45 e7 lea -0x19(%ebp),%eax - 784: 50 push %eax - 785: ff 75 08 pushl 0x8(%ebp) - 788: e8 23 fd ff ff call 4b0 - 78d: 83 c4 10 add $0x10,%esp + 72d: 83 ec 04 sub $0x4,%esp + 730: 6a 01 push $0x1 + 732: 8d 45 e7 lea -0x19(%ebp),%eax + 735: 50 push %eax + 736: ff 75 08 push 0x8(%ebp) + 739: e8 43 fd ff ff call 481 + putc(fd, c); + 73e: 88 5d e7 mov %bl,-0x19(%ebp) + write(fd, &c, 1); + 741: 83 c4 0c add $0xc,%esp + 744: 6a 01 push $0x1 + 746: 8d 45 e7 lea -0x19(%ebp),%eax + 749: 50 push %eax + 74a: ff 75 08 push 0x8(%ebp) + 74d: e8 2f fd ff ff call 481 + putc(fd, c); + 752: 83 c4 10 add $0x10,%esp state = 0; - 790: bf 00 00 00 00 mov $0x0,%edi - 795: e9 83 fe ff ff jmp 61d + 755: bf 00 00 00 00 mov $0x0,%edi + 75a: e9 8f fe ff ff jmp 5ee } } } - 79a: 8d 65 f4 lea -0xc(%ebp),%esp - 79d: 5b pop %ebx - 79e: 5e pop %esi - 79f: 5f pop %edi - 7a0: 5d pop %ebp - 7a1: c3 ret - -000007a2 : + 75f: 8d 65 f4 lea -0xc(%ebp),%esp + 762: 5b pop %ebx + 763: 5e pop %esi + 764: 5f pop %edi + 765: 5d pop %ebp + 766: c3 ret + +00000767 : static Header base; static Header *freep; void free(void *ap) { - 7a2: f3 0f 1e fb endbr32 - 7a6: 55 push %ebp - 7a7: 89 e5 mov %esp,%ebp - 7a9: 57 push %edi - 7aa: 56 push %esi - 7ab: 53 push %ebx - 7ac: 8b 5d 08 mov 0x8(%ebp),%ebx + 767: 55 push %ebp + 768: 89 e5 mov %esp,%ebp + 76a: 57 push %edi + 76b: 56 push %esi + 76c: 53 push %ebx + 76d: 8b 5d 08 mov 0x8(%ebp),%ebx Header *bp, *p; bp = (Header*)ap - 1; - 7af: 8d 4b f8 lea -0x8(%ebx),%ecx + 770: 8d 4b f8 lea -0x8(%ebx),%ecx for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 7b2: a1 60 0c 00 00 mov 0xc60,%eax - 7b7: eb 0c jmp 7c5 + 773: a1 60 10 00 00 mov 0x1060,%eax + 778: eb 0c jmp 786 if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 7b9: 8b 10 mov (%eax),%edx - 7bb: 39 c2 cmp %eax,%edx - 7bd: 77 04 ja 7c3 - 7bf: 39 ca cmp %ecx,%edx - 7c1: 77 10 ja 7d3 + 77a: 8b 10 mov (%eax),%edx + 77c: 39 c2 cmp %eax,%edx + 77e: 77 04 ja 784 + 780: 39 ca cmp %ecx,%edx + 782: 77 10 ja 794 { - 7c3: 89 d0 mov %edx,%eax + 784: 89 d0 mov %edx,%eax for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 7c5: 39 c8 cmp %ecx,%eax - 7c7: 73 f0 jae 7b9 - 7c9: 8b 10 mov (%eax),%edx - 7cb: 39 ca cmp %ecx,%edx - 7cd: 77 04 ja 7d3 + 786: 39 c8 cmp %ecx,%eax + 788: 73 f0 jae 77a + 78a: 8b 10 mov (%eax),%edx + 78c: 39 ca cmp %ecx,%edx + 78e: 77 04 ja 794 if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 7cf: 39 c2 cmp %eax,%edx - 7d1: 77 f0 ja 7c3 + 790: 39 c2 cmp %eax,%edx + 792: 77 f0 ja 784 break; if(bp + bp->s.size == p->s.ptr){ - 7d3: 8b 73 fc mov -0x4(%ebx),%esi - 7d6: 8b 10 mov (%eax),%edx - 7d8: 8d 3c f1 lea (%ecx,%esi,8),%edi - 7db: 39 fa cmp %edi,%edx - 7dd: 74 19 je 7f8 + 794: 8b 73 fc mov -0x4(%ebx),%esi + 797: 8b 10 mov (%eax),%edx + 799: 8d 3c f1 lea (%ecx,%esi,8),%edi + 79c: 39 fa cmp %edi,%edx + 79e: 74 19 je 7b9 bp->s.size += p->s.ptr->s.size; bp->s.ptr = p->s.ptr->s.ptr; + 7a0: 89 53 f8 mov %edx,-0x8(%ebx) } else bp->s.ptr = p->s.ptr; - 7df: 89 53 f8 mov %edx,-0x8(%ebx) if(p + p->s.size == bp){ - 7e2: 8b 50 04 mov 0x4(%eax),%edx - 7e5: 8d 34 d0 lea (%eax,%edx,8),%esi - 7e8: 39 f1 cmp %esi,%ecx - 7ea: 74 1b je 807 + 7a3: 8b 50 04 mov 0x4(%eax),%edx + 7a6: 8d 34 d0 lea (%eax,%edx,8),%esi + 7a9: 39 f1 cmp %esi,%ecx + 7ab: 74 18 je 7c5 p->s.size += bp->s.size; p->s.ptr = bp->s.ptr; + 7ad: 89 08 mov %ecx,(%eax) } else p->s.ptr = bp; - 7ec: 89 08 mov %ecx,(%eax) freep = p; - 7ee: a3 60 0c 00 00 mov %eax,0xc60 + 7af: a3 60 10 00 00 mov %eax,0x1060 } - 7f3: 5b pop %ebx - 7f4: 5e pop %esi - 7f5: 5f pop %edi - 7f6: 5d pop %ebp - 7f7: c3 ret + 7b4: 5b pop %ebx + 7b5: 5e pop %esi + 7b6: 5f pop %edi + 7b7: 5d pop %ebp + 7b8: c3 ret bp->s.size += p->s.ptr->s.size; - 7f8: 03 72 04 add 0x4(%edx),%esi - 7fb: 89 73 fc mov %esi,-0x4(%ebx) + 7b9: 03 72 04 add 0x4(%edx),%esi + 7bc: 89 73 fc mov %esi,-0x4(%ebx) bp->s.ptr = p->s.ptr->s.ptr; - 7fe: 8b 10 mov (%eax),%edx - 800: 8b 12 mov (%edx),%edx - 802: 89 53 f8 mov %edx,-0x8(%ebx) - 805: eb db jmp 7e2 + 7bf: 8b 10 mov (%eax),%edx + 7c1: 8b 12 mov (%edx),%edx + 7c3: eb db jmp 7a0 p->s.size += bp->s.size; - 807: 03 53 fc add -0x4(%ebx),%edx - 80a: 89 50 04 mov %edx,0x4(%eax) + 7c5: 03 53 fc add -0x4(%ebx),%edx + 7c8: 89 50 04 mov %edx,0x4(%eax) p->s.ptr = bp->s.ptr; - 80d: 8b 53 f8 mov -0x8(%ebx),%edx - 810: 89 10 mov %edx,(%eax) - 812: eb da jmp 7ee + 7cb: 8b 4b f8 mov -0x8(%ebx),%ecx + 7ce: eb dd jmp 7ad -00000814 : +000007d0 : return freep; } void* malloc(uint nbytes) { - 814: f3 0f 1e fb endbr32 - 818: 55 push %ebp - 819: 89 e5 mov %esp,%ebp - 81b: 57 push %edi - 81c: 56 push %esi - 81d: 53 push %ebx - 81e: 83 ec 0c sub $0xc,%esp + 7d0: 55 push %ebp + 7d1: 89 e5 mov %esp,%ebp + 7d3: 57 push %edi + 7d4: 56 push %esi + 7d5: 53 push %ebx + 7d6: 83 ec 0c sub $0xc,%esp Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 821: 8b 45 08 mov 0x8(%ebp),%eax - 824: 8d 58 07 lea 0x7(%eax),%ebx - 827: c1 eb 03 shr $0x3,%ebx - 82a: 83 c3 01 add $0x1,%ebx + 7d9: 8b 45 08 mov 0x8(%ebp),%eax + 7dc: 8d 58 07 lea 0x7(%eax),%ebx + 7df: c1 eb 03 shr $0x3,%ebx + 7e2: 83 c3 01 add $0x1,%ebx if((prevp = freep) == 0){ - 82d: 8b 15 60 0c 00 00 mov 0xc60,%edx - 833: 85 d2 test %edx,%edx - 835: 74 20 je 857 + 7e5: 8b 15 60 10 00 00 mov 0x1060,%edx + 7eb: 85 d2 test %edx,%edx + 7ed: 74 1c je 80b base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 837: 8b 02 mov (%edx),%eax + 7ef: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 839: 8b 48 04 mov 0x4(%eax),%ecx - 83c: 39 cb cmp %ecx,%ebx - 83e: 76 3c jbe 87c - 840: 81 fb 00 10 00 00 cmp $0x1000,%ebx - 846: be 00 10 00 00 mov $0x1000,%esi - 84b: 0f 43 f3 cmovae %ebx,%esi + 7f1: 8b 48 04 mov 0x4(%eax),%ecx + 7f4: 39 cb cmp %ecx,%ebx + 7f6: 76 38 jbe 830 + 7f8: be 00 10 00 00 mov $0x1000,%esi + 7fd: 39 f3 cmp %esi,%ebx + 7ff: 0f 43 f3 cmovae %ebx,%esi p = sbrk(nu * sizeof(Header)); - 84e: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi - 855: eb 72 jmp 8c9 + 802: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi + 809: eb 72 jmp 87d base.s.ptr = freep = prevp = &base; - 857: c7 05 60 0c 00 00 64 movl $0xc64,0xc60 - 85e: 0c 00 00 - 861: c7 05 64 0c 00 00 64 movl $0xc64,0xc64 - 868: 0c 00 00 + 80b: c7 05 60 10 00 00 64 movl $0x1064,0x1060 + 812: 10 00 00 + 815: c7 05 64 10 00 00 64 movl $0x1064,0x1064 + 81c: 10 00 00 base.s.size = 0; - 86b: c7 05 68 0c 00 00 00 movl $0x0,0xc68 - 872: 00 00 00 + 81f: c7 05 68 10 00 00 00 movl $0x0,0x1068 + 826: 00 00 00 for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 875: b8 64 0c 00 00 mov $0xc64,%eax - 87a: eb c4 jmp 840 + 829: b8 64 10 00 00 mov $0x1064,%eax + 82e: eb c8 jmp 7f8 if(p->s.size == nunits) - 87c: 39 cb cmp %ecx,%ebx - 87e: 74 1e je 89e + 830: 39 cb cmp %ecx,%ebx + 832: 74 1e je 852 prevp->s.ptr = p->s.ptr; else { p->s.size -= nunits; - 880: 29 d9 sub %ebx,%ecx - 882: 89 48 04 mov %ecx,0x4(%eax) + 834: 29 d9 sub %ebx,%ecx + 836: 89 48 04 mov %ecx,0x4(%eax) p += p->s.size; - 885: 8d 04 c8 lea (%eax,%ecx,8),%eax + 839: 8d 04 c8 lea (%eax,%ecx,8),%eax p->s.size = nunits; - 888: 89 58 04 mov %ebx,0x4(%eax) + 83c: 89 58 04 mov %ebx,0x4(%eax) } freep = prevp; - 88b: 89 15 60 0c 00 00 mov %edx,0xc60 + 83f: 89 15 60 10 00 00 mov %edx,0x1060 return (void*)(p + 1); - 891: 8d 50 08 lea 0x8(%eax),%edx + 845: 8d 50 08 lea 0x8(%eax),%edx } if(p == freep) if((p = morecore(nunits)) == 0) return 0; } } - 894: 89 d0 mov %edx,%eax - 896: 8d 65 f4 lea -0xc(%ebp),%esp - 899: 5b pop %ebx - 89a: 5e pop %esi - 89b: 5f pop %edi - 89c: 5d pop %ebp - 89d: c3 ret + 848: 89 d0 mov %edx,%eax + 84a: 8d 65 f4 lea -0xc(%ebp),%esp + 84d: 5b pop %ebx + 84e: 5e pop %esi + 84f: 5f pop %edi + 850: 5d pop %ebp + 851: c3 ret prevp->s.ptr = p->s.ptr; - 89e: 8b 08 mov (%eax),%ecx - 8a0: 89 0a mov %ecx,(%edx) - 8a2: eb e7 jmp 88b + 852: 8b 08 mov (%eax),%ecx + 854: 89 0a mov %ecx,(%edx) + 856: eb e7 jmp 83f hp->s.size = nu; - 8a4: 89 70 04 mov %esi,0x4(%eax) + 858: 89 70 04 mov %esi,0x4(%eax) free((void*)(hp + 1)); - 8a7: 83 ec 0c sub $0xc,%esp - 8aa: 83 c0 08 add $0x8,%eax - 8ad: 50 push %eax - 8ae: e8 ef fe ff ff call 7a2 + 85b: 83 ec 0c sub $0xc,%esp + 85e: 83 c0 08 add $0x8,%eax + 861: 50 push %eax + 862: e8 00 ff ff ff call 767 return freep; - 8b3: 8b 15 60 0c 00 00 mov 0xc60,%edx + 867: 8b 15 60 10 00 00 mov 0x1060,%edx if((p = morecore(nunits)) == 0) - 8b9: 83 c4 10 add $0x10,%esp - 8bc: 85 d2 test %edx,%edx - 8be: 74 d4 je 894 + 86d: 83 c4 10 add $0x10,%esp + 870: 85 d2 test %edx,%edx + 872: 74 d4 je 848 for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 8c0: 8b 02 mov (%edx),%eax + 874: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 8c2: 8b 48 04 mov 0x4(%eax),%ecx - 8c5: 39 d9 cmp %ebx,%ecx - 8c7: 73 b3 jae 87c + 876: 8b 48 04 mov 0x4(%eax),%ecx + 879: 39 d9 cmp %ebx,%ecx + 87b: 73 b3 jae 830 if(p == freep) - 8c9: 89 c2 mov %eax,%edx - 8cb: 39 05 60 0c 00 00 cmp %eax,0xc60 - 8d1: 75 ed jne 8c0 + 87d: 89 c2 mov %eax,%edx + 87f: 39 05 60 10 00 00 cmp %eax,0x1060 + 885: 75 ed jne 874 p = sbrk(nu * sizeof(Header)); - 8d3: 83 ec 0c sub $0xc,%esp - 8d6: 57 push %edi - 8d7: e8 3c fc ff ff call 518 + 887: 83 ec 0c sub $0xc,%esp + 88a: 57 push %edi + 88b: e8 59 fc ff ff call 4e9 if(p == (char*)-1) - 8dc: 83 c4 10 add $0x10,%esp - 8df: 83 f8 ff cmp $0xffffffff,%eax - 8e2: 75 c0 jne 8a4 + 890: 83 c4 10 add $0x10,%esp + 893: 83 f8 ff cmp $0xffffffff,%eax + 896: 75 c0 jne 858 return 0; - 8e4: ba 00 00 00 00 mov $0x0,%edx - 8e9: eb a9 jmp 894 + 898: ba 00 00 00 00 mov $0x0,%edx + 89d: eb a9 jmp 848 diff --git a/src/user/grep.d b/src/user/grep.d new file mode 100644 index 0000000..2280342 --- /dev/null +++ b/src/user/grep.d @@ -0,0 +1 @@ +user/grep.o: user/grep.c /usr/include/stdc-predef.h types.h stat.h user.h diff --git a/src/user/grep.o b/src/user/grep.o new file mode 100644 index 0000000000000000000000000000000000000000..c7c9fb89bc454d22509cde2bae4ffc6eac0dd043 GIT binary patch literal 6720 zcma)Ae{fvIecyfW?dhb`Z`qOsralpaEkI`(8?YT2@DG7y49Hd_y8&TNrzh!%bSLiK zVFR{tIP=3Jl!OG5nmV{Mv?G9 zL6D!2o%x^0Ei+a>LIpitoJDW>-fQm&=5roBR*iXFgbD1ue_G`J>r?}E`D1cMJu{h4 zZo5OzMX$;HvEAY0?NcoFRM&V`!t1WGg3tb=dU1l5W3GU>r)a@~pC5C}FqQFjviVGB z&t1~iaO#I&{3BxpePcIIJ#^xM&%)@%X;%oa&98Tkf04>gtblcRXkyRxvVCf-d+OMO z)QML({5pq6v;RyB>E<8rzj+E_HunsXwT`F$&X#@9KA-VT3%&f*nd!UF7M}R#{ONgP zazCQq?d3m_d%DJM@b|g1SQSmgQ>k9<(MD2VeUng(0o4+d=v>p?@aOL>tc$?sm{++T_1y zR5O&A>*?{jzviaJ`SsY0T;5Z1dFK;2Z*3Yxu82qz*!9No(?l`Dmum&p~;c6`^GgA&fO0J%Y zF;KhFy@7twTtfYu=&w?e6wMI|K1BaDdIR@|ysVTpc<5)zUV&=0d<}?t1e6^hc2ada zh;Nhl0tlX^a@0!h2ceDkTFDdEhC7{JBE&rN{+50bIS2H=kUSV+wn#aZ4jvxLjx?@? zXb}XTLHAOkLeHZO%nAxdM1`JsFPNJs7!{Rz63>BohJw3ArC#i}!Muttufb4H;${qd zxN-=?RU{5z;9i$B{w)ZQ8^mt;KphHFq66T@2l1f$Q6Qwrh# z3tl!`IFE1oEMG{B6+NmzN0$v4Pb?HlrA zu)_OT{z1wf?+@|`2dr-18}b+0^%rv7nTcl{h4+Db+GXI=?l(Q>ZqNIschVz&()*3( zf8(9e{2A|4&4210Q0Ee(uot`uPj+HB>B%l{uX>tuk)MtH_mg8(|X8z&Upsj zw|n2B!xry|JK@UB-h_KpOOLv5k$ubk56w=xOm(|gNX7hkLj+=+b+De#BSc82I)pfr zuIxE4D-6Gl#r0lt-gHpho6d*iKBRXiJYHhOFS+ly5WYkIPQf!7+W^fzL?P^llG2rC zk6Z&97ta5!tRS!`bPx+%9_=yoW$2Dv;8eL+QQO909c4=5TMI(CzZ5bgl^Y5-DOIP! zpi5p?^`T9w3}k(qS|A)xZd8{L+SCPvZI-L_mAq|ZTgV-b>KKQ#fB9;qwj$yt&8dy} z9>WQ2okk}6stUoOY)Gjd)dZ=tQOU1uR4U}&7ggm@sZjVHRjY}A(*lVk;Xr439$E(Z zd{M!*2ww$hZ5xz(=n<&O@1VMn`-2AxZZFr(se`gcg>$MTqk&A1(r*}tuUQj z9V9iX>@NXsWE<^Kz_u9J)uAa>+8rplJP0ieVXg5na&>dy%vs*9A{vKK?i!`KLc^*7 zg32~k@~=v9?Ls>_zN{Jv?tKrcY7%YA{RgGo)VB9~pI0Tlp@GmlIL4(M@kd6|_xOSr zG?7bXlY=S0KgtVMHpnD~GGZj2Oo_nX8HgR3WZ<8(Nesm^LJuSHATcBo!|ALKbI?OR zKJ4+#U_xa4c)!RFr87ZvR`AgbQVbNVvjGCZ`W|7fk;31ZM1JkXN_dkLH{Q}6UAOd_ z=+dRJ<+0Xi%gC}TF$B4kzk1M5`I%$_Y#b%8PF}s@>S)X0V1Hk<<<_OqmVs2dr7xEp z4w9(?gPA20K}&o%8P6tDg9TxFBpI{}Wa1-!%V-)|{fsq^C%(`!nn?$KB1jwIXwru^ zp1n7PB}%8#xok@=wIiA8Zwcak!+sV@%nE*q;dpk)dMDEq?)XLooB|*nV zB98i!^Z3&9__FhO+z^)0M!ns^`gG9m z`?+(XaC+!>+#ETDgN8rh^zmVjD18#?bElYTf5G4n44yFfQ=o&J<6?Y3ow-;`A|5$^ z;5hh?XB!c>%{ze-H-ka)D0bM$cMxH}%kcYw{C)ft^00f-$hk)(wjxRv5?hXYL}IJ) zZzSRcMA%+TgmE(wcC7~W^#J^}hVM1Vmxc4b*YIC5_`JcF48CRXBZCc`KjK|&u-o8v zBI?K!@v1yxP_HZOzi#-a3?3rFoYG_8~!PSPaAxOhj&)|T;tic@y z_ZfWD;5ZTazHac4!DkJA*WeL82ka-Fnvy@Hi153Zh<(Z*LBz`p@@yi%(xBd-;CcSh zFA8*kn+$Tll0Rthb%P?7y>|qkUto|a;E<&<{%}m+VPgI9ATDBk*{q0V(qw3jE5&Sf zDOkAl`+d2=?a95&m1mz@~?F7so!?X>6{L?Ns{v|V3KFx5Z1Er2B+#mv`>>skUvl6DMYTGXIEmq1@>c-mPVMRZ}z z>kL{u24-!x(T07CK`ZAUFE867igdStE}m~^EzWr4W=y;;GxNQp$Ooi&3mZCMBGW86 z3f|IGwPW&L(b`zuFm%OvKbcclC+5X=pUJxqwDkcgI-rb_FwN@rf-jCI@a^Hd#(4P5 z&BXf#XzK$~BoU9_DBG;=YY-I2t42KD6BrMlrQRqYc}8=%nowX?KPS)9hA!2Ym5-H((}UXlCYH91CKx3wMXFK!{Je;C+|zs?iy%XuIJLCn4gH*~U0*5YMt3Mc((drZ8B$ F{{uHBF=PM$ literal 0 HcmV?d00001 diff --git a/src/user/grep.sym b/src/user/grep.sym index 6958482..9bd88ef 100644 --- a/src/user/grep.sym +++ b/src/user/grep.sym @@ -1,64 +1,52 @@ -00000000 .text -000008ec .rodata -00000940 .eh_frame -00000c60 .bss -00000000 .comment -00000000 .debug_aranges -00000000 .debug_info -00000000 .debug_abbrev -00000000 .debug_line -00000000 .debug_str -00000000 .debug_loc -00000000 .debug_ranges 00000000 grep.c 00000000 ulib.c 00000000 printf.c -00000540 printint -0000092c digits.1089 +00000511 printint +00000938 digits.0 00000000 umalloc.c -00000c60 freep -00000c64 base -000002aa strcpy -000005d4 printf -00000457 memmove -0000004c matchhere -000004d8 mknod -00000538 ps -00000375 gets -00000510 getpid -00000120 grep -00000814 malloc -00000520 sleep -000004a0 pipe -00000530 slabtest -000004b0 write -000004e8 fstat -000004c0 kill -00000500 chdir -000004c8 exec -00000498 wait -000004a8 read -000004e0 unlink -00000488 fork -00000518 sbrk -00000528 uptime -00000c48 __bss_start -00000329 memset -000001f5 main +00001060 freep +00001064 base +00000299 strcpy +000005a9 printf +0000042c memmove +00000048 matchhere +000004a9 mknod +00000509 ps +00000354 gets +000004e1 getpid +00000114 grep +000007d0 malloc +000004f1 sleep +00000471 pipe +00000501 slabtest +00000481 write +000004b9 fstat +00000491 kill +000004d1 chdir +00000499 exec +00000469 wait +00000479 read +000004b1 unlink +00000459 fork +000004e9 sbrk +000004f9 uptime +00000c54 __bss_start +0000030e memset +000001e8 main 00000000 matchstar -000002d0 strcmp -00000508 dup -00000c80 buf -000003d0 stat -00000c48 _edata -00001080 _end -000000d2 match -000004f0 link -00000490 exit -00000418 atoi -000002ff strlen -000004d0 open -00000344 strchr -000004f8 mkdir -000004b8 close -000007a2 free +000002bd strcmp +000004d9 dup +00000c60 buf +000003ab stat +00000c54 _edata +0000106c _end +000000ca match +000004c1 link +00000461 exit +000003ef atoi +000002e8 strlen +000004a1 open +00000327 strchr +000004c9 mkdir +00000489 close +00000767 free diff --git a/src/user/init.asm b/src/user/init.asm index c064b8b..6ba5b51 100644 --- a/src/user/init.asm +++ b/src/user/init.asm @@ -11,1117 +11,1086 @@ char *argv[] = { "sh", 0 }; int main(void) { - 0: f3 0f 1e fb endbr32 - 4: 8d 4c 24 04 lea 0x4(%esp),%ecx - 8: 83 e4 f0 and $0xfffffff0,%esp - b: ff 71 fc pushl -0x4(%ecx) - e: 55 push %ebp - f: 89 e5 mov %esp,%ebp - 11: 53 push %ebx - 12: 51 push %ecx + 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){ - 13: 83 ec 08 sub $0x8,%esp - 16: 6a 02 push $0x2 - 18: 68 24 07 00 00 push $0x724 - 1d: e8 e5 02 00 00 call 307 - 22: 83 c4 10 add $0x10,%esp - 25: 85 c0 test %eax,%eax - 27: 78 59 js 82 + f: 83 ec 08 sub $0x8,%esp + 12: 6a 02 push $0x2 + 14: 68 e4 06 00 00 push $0x6e4 + 19: e8 c7 02 00 00 call 2e5 + 1e: 83 c4 10 add $0x10,%esp + 21: 85 c0 test %eax,%eax + 23: 78 59 js 7e 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 0c 03 00 00 call 33f + 25: 83 ec 0c sub $0xc,%esp + 28: 6a 00 push $0x0 + 2a: e8 ee 02 00 00 call 31d dup(0); // stderr - 33: c7 04 24 00 00 00 00 movl $0x0,(%esp) - 3a: e8 00 03 00 00 call 33f - 3f: 83 c4 10 add $0x10,%esp + 2f: c7 04 24 00 00 00 00 movl $0x0,(%esp) + 36: e8 e2 02 00 00 call 31d + 3b: 83 c4 10 add $0x10,%esp for(;;){ printf(1, "init: starting sh\n"); - 42: 83 ec 08 sub $0x8,%esp - 45: 68 2c 07 00 00 push $0x72c - 4a: 6a 01 push $0x1 - 4c: e8 ba 03 00 00 call 40b + 3e: 83 ec 08 sub $0x8,%esp + 41: 68 ec 06 00 00 push $0x6ec + 46: 6a 01 push $0x1 + 48: e8 a0 03 00 00 call 3ed pid = fork(); - 51: e8 69 02 00 00 call 2bf - 56: 89 c3 mov %eax,%ebx + 4d: e8 4b 02 00 00 call 29d + 52: 89 c3 mov %eax,%ebx if(pid < 0){ - 58: 83 c4 10 add $0x10,%esp - 5b: 85 c0 test %eax,%eax - 5d: 78 48 js a7 + 54: 83 c4 10 add $0x10,%esp + 57: 85 c0 test %eax,%eax + 59: 78 48 js a3 printf(1, "init: fork failed\n"); exit(); } if(pid == 0){ - 5f: 74 5a je bb + 5b: 74 5a je b7 exec("sh", argv); printf(1, "init: exec sh failed\n"); exit(); } while((wpid=wait()) >= 0 && wpid != pid) - 61: e8 69 02 00 00 call 2cf - 66: 39 c3 cmp %eax,%ebx - 68: 74 d8 je 42 - 6a: 85 c0 test %eax,%eax - 6c: 78 d4 js 42 + 5d: e8 4b 02 00 00 call 2ad + 62: 39 c3 cmp %eax,%ebx + 64: 74 d8 je 3e + 66: 85 c0 test %eax,%eax + 68: 78 d4 js 3e printf(1, "zombie!\n"); - 6e: 83 ec 08 sub $0x8,%esp - 71: 68 6b 07 00 00 push $0x76b - 76: 6a 01 push $0x1 - 78: e8 8e 03 00 00 call 40b - 7d: 83 c4 10 add $0x10,%esp - 80: eb df jmp 61 + 6a: 83 ec 08 sub $0x8,%esp + 6d: 68 2b 07 00 00 push $0x72b + 72: 6a 01 push $0x1 + 74: e8 74 03 00 00 call 3ed + 79: 83 c4 10 add $0x10,%esp + 7c: eb df jmp 5d mknod("console", 1, 1); - 82: 83 ec 04 sub $0x4,%esp - 85: 6a 01 push $0x1 - 87: 6a 01 push $0x1 - 89: 68 24 07 00 00 push $0x724 - 8e: e8 7c 02 00 00 call 30f + 7e: 83 ec 04 sub $0x4,%esp + 81: 6a 01 push $0x1 + 83: 6a 01 push $0x1 + 85: 68 e4 06 00 00 push $0x6e4 + 8a: e8 5e 02 00 00 call 2ed open("console", O_RDWR); - 93: 83 c4 08 add $0x8,%esp - 96: 6a 02 push $0x2 - 98: 68 24 07 00 00 push $0x724 - 9d: e8 65 02 00 00 call 307 - a2: 83 c4 10 add $0x10,%esp - a5: eb 82 jmp 29 + 8f: 83 c4 08 add $0x8,%esp + 92: 6a 02 push $0x2 + 94: 68 e4 06 00 00 push $0x6e4 + 99: e8 47 02 00 00 call 2e5 + 9e: 83 c4 10 add $0x10,%esp + a1: eb 82 jmp 25 printf(1, "init: fork failed\n"); - a7: 83 ec 08 sub $0x8,%esp - aa: 68 3f 07 00 00 push $0x73f - af: 6a 01 push $0x1 - b1: e8 55 03 00 00 call 40b + a3: 83 ec 08 sub $0x8,%esp + a6: 68 ff 06 00 00 push $0x6ff + ab: 6a 01 push $0x1 + ad: e8 3b 03 00 00 call 3ed exit(); - b6: e8 0c 02 00 00 call 2c7 + b2: e8 ee 01 00 00 call 2a5 exec("sh", argv); - bb: 83 ec 08 sub $0x8,%esp - be: 68 e8 09 00 00 push $0x9e8 - c3: 68 52 07 00 00 push $0x752 - c8: e8 32 02 00 00 call 2ff + b7: 83 ec 08 sub $0x8,%esp + ba: 68 00 0a 00 00 push $0xa00 + bf: 68 12 07 00 00 push $0x712 + c4: e8 14 02 00 00 call 2dd printf(1, "init: exec sh failed\n"); - cd: 83 c4 08 add $0x8,%esp - d0: 68 55 07 00 00 push $0x755 - d5: 6a 01 push $0x1 - d7: e8 2f 03 00 00 call 40b + c9: 83 c4 08 add $0x8,%esp + cc: 68 15 07 00 00 push $0x715 + d1: 6a 01 push $0x1 + d3: e8 15 03 00 00 call 3ed exit(); - dc: e8 e6 01 00 00 call 2c7 + d8: e8 c8 01 00 00 call 2a5 -000000e1 : +000000dd : #include "user.h" #include "x86.h" char* strcpy(char *s, const char *t) { - e1: f3 0f 1e fb endbr32 - e5: 55 push %ebp - e6: 89 e5 mov %esp,%ebp - e8: 53 push %ebx - e9: 8b 4d 08 mov 0x8(%ebp),%ecx - ec: 8b 5d 0c mov 0xc(%ebp),%ebx + dd: 55 push %ebp + de: 89 e5 mov %esp,%ebp + e0: 53 push %ebx + e1: 8b 4d 08 mov 0x8(%ebp),%ecx + e4: 8b 5d 0c mov 0xc(%ebp),%ebx char *os; os = s; while((*s++ = *t++) != 0) - ef: b8 00 00 00 00 mov $0x0,%eax - f4: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - f8: 88 14 01 mov %dl,(%ecx,%eax,1) - fb: 83 c0 01 add $0x1,%eax - fe: 84 d2 test %dl,%dl - 100: 75 f2 jne f4 + e7: b8 00 00 00 00 mov $0x0,%eax + ec: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx + f0: 88 14 01 mov %dl,(%ecx,%eax,1) + f3: 83 c0 01 add $0x1,%eax + f6: 84 d2 test %dl,%dl + f8: 75 f2 jne ec ; return os; } - 102: 89 c8 mov %ecx,%eax - 104: 5b pop %ebx - 105: 5d pop %ebp - 106: c3 ret + fa: 89 c8 mov %ecx,%eax + fc: 8b 5d fc mov -0x4(%ebp),%ebx + ff: c9 leave + 100: c3 ret -00000107 : +00000101 : int strcmp(const char *p, const char *q) { - 107: f3 0f 1e fb endbr32 - 10b: 55 push %ebp - 10c: 89 e5 mov %esp,%ebp - 10e: 8b 4d 08 mov 0x8(%ebp),%ecx - 111: 8b 55 0c mov 0xc(%ebp),%edx + 101: 55 push %ebp + 102: 89 e5 mov %esp,%ebp + 104: 8b 4d 08 mov 0x8(%ebp),%ecx + 107: 8b 55 0c mov 0xc(%ebp),%edx while(*p && *p == *q) - 114: 0f b6 01 movzbl (%ecx),%eax - 117: 84 c0 test %al,%al - 119: 74 11 je 12c - 11b: 38 02 cmp %al,(%edx) - 11d: 75 0d jne 12c + 10a: 0f b6 01 movzbl (%ecx),%eax + 10d: 84 c0 test %al,%al + 10f: 74 11 je 122 + 111: 38 02 cmp %al,(%edx) + 113: 75 0d jne 122 p++, q++; - 11f: 83 c1 01 add $0x1,%ecx - 122: 83 c2 01 add $0x1,%edx + 115: 83 c1 01 add $0x1,%ecx + 118: 83 c2 01 add $0x1,%edx while(*p && *p == *q) - 125: 0f b6 01 movzbl (%ecx),%eax - 128: 84 c0 test %al,%al - 12a: 75 ef jne 11b + 11b: 0f b6 01 movzbl (%ecx),%eax + 11e: 84 c0 test %al,%al + 120: 75 ef jne 111 return (uchar)*p - (uchar)*q; - 12c: 0f b6 c0 movzbl %al,%eax - 12f: 0f b6 12 movzbl (%edx),%edx - 132: 29 d0 sub %edx,%eax + 122: 0f b6 c0 movzbl %al,%eax + 125: 0f b6 12 movzbl (%edx),%edx + 128: 29 d0 sub %edx,%eax } - 134: 5d pop %ebp - 135: c3 ret + 12a: 5d pop %ebp + 12b: c3 ret -00000136 : +0000012c : uint strlen(const char *s) { - 136: f3 0f 1e fb endbr32 - 13a: 55 push %ebp - 13b: 89 e5 mov %esp,%ebp - 13d: 8b 55 08 mov 0x8(%ebp),%edx + 12c: 55 push %ebp + 12d: 89 e5 mov %esp,%ebp + 12f: 8b 55 08 mov 0x8(%ebp),%edx int n; for(n = 0; s[n]; n++) - 140: 80 3a 00 cmpb $0x0,(%edx) - 143: 74 14 je 159 - 145: b8 00 00 00 00 mov $0x0,%eax - 14a: 83 c0 01 add $0x1,%eax - 14d: 89 c1 mov %eax,%ecx - 14f: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - 153: 75 f5 jne 14a + 132: 80 3a 00 cmpb $0x0,(%edx) + 135: 74 14 je 14b + 137: b8 00 00 00 00 mov $0x0,%eax + 13c: 83 c0 01 add $0x1,%eax + 13f: 89 c1 mov %eax,%ecx + 141: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) + 145: 75 f5 jne 13c ; return n; } - 155: 89 c8 mov %ecx,%eax - 157: 5d pop %ebp - 158: c3 ret + 147: 89 c8 mov %ecx,%eax + 149: 5d pop %ebp + 14a: c3 ret for(n = 0; s[n]; n++) - 159: b9 00 00 00 00 mov $0x0,%ecx + 14b: b9 00 00 00 00 mov $0x0,%ecx return n; - 15e: eb f5 jmp 155 + 150: eb f5 jmp 147 -00000160 : +00000152 : void* memset(void *dst, int c, uint n) { - 160: f3 0f 1e fb endbr32 - 164: 55 push %ebp - 165: 89 e5 mov %esp,%ebp - 167: 57 push %edi - 168: 8b 55 08 mov 0x8(%ebp),%edx + 152: 55 push %ebp + 153: 89 e5 mov %esp,%ebp + 155: 57 push %edi + 156: 8b 55 08 mov 0x8(%ebp),%edx } static inline void stosb(void *addr, int data, int cnt) { asm volatile("cld; rep stosb" : - 16b: 89 d7 mov %edx,%edi - 16d: 8b 4d 10 mov 0x10(%ebp),%ecx - 170: 8b 45 0c mov 0xc(%ebp),%eax - 173: fc cld - 174: f3 aa rep stos %al,%es:(%edi) + 159: 89 d7 mov %edx,%edi + 15b: 8b 4d 10 mov 0x10(%ebp),%ecx + 15e: 8b 45 0c mov 0xc(%ebp),%eax + 161: fc cld + 162: f3 aa rep stos %al,%es:(%edi) stosb(dst, c, n); return dst; } - 176: 89 d0 mov %edx,%eax - 178: 5f pop %edi - 179: 5d pop %ebp - 17a: c3 ret + 164: 89 d0 mov %edx,%eax + 166: 8b 7d fc mov -0x4(%ebp),%edi + 169: c9 leave + 16a: c3 ret -0000017b : +0000016b : char* strchr(const char *s, char c) { - 17b: f3 0f 1e fb endbr32 - 17f: 55 push %ebp - 180: 89 e5 mov %esp,%ebp - 182: 8b 45 08 mov 0x8(%ebp),%eax - 185: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx + 16b: 55 push %ebp + 16c: 89 e5 mov %esp,%ebp + 16e: 8b 45 08 mov 0x8(%ebp),%eax + 171: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx for(; *s; s++) - 189: 0f b6 10 movzbl (%eax),%edx - 18c: 84 d2 test %dl,%dl - 18e: 74 15 je 1a5 + 175: 0f b6 10 movzbl (%eax),%edx + 178: 84 d2 test %dl,%dl + 17a: 74 15 je 191 if(*s == c) - 190: 38 d1 cmp %dl,%cl - 192: 74 0f je 1a3 + 17c: 38 d1 cmp %dl,%cl + 17e: 74 0f je 18f for(; *s; s++) - 194: 83 c0 01 add $0x1,%eax - 197: 0f b6 10 movzbl (%eax),%edx - 19a: 84 d2 test %dl,%dl - 19c: 75 f2 jne 190 + 180: 83 c0 01 add $0x1,%eax + 183: 0f b6 10 movzbl (%eax),%edx + 186: 84 d2 test %dl,%dl + 188: 75 f2 jne 17c return (char*)s; return 0; - 19e: b8 00 00 00 00 mov $0x0,%eax + 18a: b8 00 00 00 00 mov $0x0,%eax } - 1a3: 5d pop %ebp - 1a4: c3 ret + 18f: 5d pop %ebp + 190: c3 ret return 0; - 1a5: b8 00 00 00 00 mov $0x0,%eax - 1aa: eb f7 jmp 1a3 + 191: b8 00 00 00 00 mov $0x0,%eax + 196: eb f7 jmp 18f -000001ac : +00000198 : char* gets(char *buf, int max) { - 1ac: f3 0f 1e fb endbr32 - 1b0: 55 push %ebp - 1b1: 89 e5 mov %esp,%ebp - 1b3: 57 push %edi - 1b4: 56 push %esi - 1b5: 53 push %ebx - 1b6: 83 ec 2c sub $0x2c,%esp - 1b9: 8b 75 08 mov 0x8(%ebp),%esi + 198: 55 push %ebp + 199: 89 e5 mov %esp,%ebp + 19b: 57 push %edi + 19c: 56 push %esi + 19d: 53 push %ebx + 19e: 83 ec 2c sub $0x2c,%esp + 1a1: 8b 75 08 mov 0x8(%ebp),%esi int i, cc; char c; for(i=0; i+1 < max; ){ - 1bc: bb 00 00 00 00 mov $0x0,%ebx + 1a4: bb 00 00 00 00 mov $0x0,%ebx cc = read(0, &c, 1); - 1c1: 8d 7d e7 lea -0x19(%ebp),%edi + 1a9: 8d 7d e7 lea -0x19(%ebp),%edi for(i=0; i+1 < max; ){ - 1c4: 89 5d d4 mov %ebx,-0x2c(%ebp) - 1c7: 83 c3 01 add $0x1,%ebx - 1ca: 3b 5d 0c cmp 0xc(%ebp),%ebx - 1cd: 7d 27 jge 1f6 + 1ac: 89 5d d4 mov %ebx,-0x2c(%ebp) + 1af: 83 c3 01 add $0x1,%ebx + 1b2: 3b 5d 0c cmp 0xc(%ebp),%ebx + 1b5: 7d 27 jge 1de cc = read(0, &c, 1); - 1cf: 83 ec 04 sub $0x4,%esp - 1d2: 6a 01 push $0x1 - 1d4: 57 push %edi - 1d5: 6a 00 push $0x0 - 1d7: e8 03 01 00 00 call 2df + 1b7: 83 ec 04 sub $0x4,%esp + 1ba: 6a 01 push $0x1 + 1bc: 57 push %edi + 1bd: 6a 00 push $0x0 + 1bf: e8 f9 00 00 00 call 2bd if(cc < 1) - 1dc: 83 c4 10 add $0x10,%esp - 1df: 85 c0 test %eax,%eax - 1e1: 7e 13 jle 1f6 + 1c4: 83 c4 10 add $0x10,%esp + 1c7: 85 c0 test %eax,%eax + 1c9: 7e 13 jle 1de break; buf[i++] = c; - 1e3: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 1e7: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) + 1cb: 0f b6 45 e7 movzbl -0x19(%ebp),%eax + 1cf: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) if(c == '\n' || c == '\r') - 1eb: 3c 0a cmp $0xa,%al - 1ed: 74 04 je 1f3 - 1ef: 3c 0d cmp $0xd,%al - 1f1: 75 d1 jne 1c4 + 1d3: 3c 0a cmp $0xa,%al + 1d5: 74 04 je 1db + 1d7: 3c 0d cmp $0xd,%al + 1d9: 75 d1 jne 1ac for(i=0; i+1 < max; ){ - 1f3: 89 5d d4 mov %ebx,-0x2c(%ebp) + 1db: 89 5d d4 mov %ebx,-0x2c(%ebp) break; } buf[i] = '\0'; - 1f6: 8b 45 d4 mov -0x2c(%ebp),%eax - 1f9: c6 04 06 00 movb $0x0,(%esi,%eax,1) + 1de: 8b 45 d4 mov -0x2c(%ebp),%eax + 1e1: c6 04 06 00 movb $0x0,(%esi,%eax,1) return buf; } - 1fd: 89 f0 mov %esi,%eax - 1ff: 8d 65 f4 lea -0xc(%ebp),%esp - 202: 5b pop %ebx - 203: 5e pop %esi - 204: 5f pop %edi - 205: 5d pop %ebp - 206: c3 ret + 1e5: 89 f0 mov %esi,%eax + 1e7: 8d 65 f4 lea -0xc(%ebp),%esp + 1ea: 5b pop %ebx + 1eb: 5e pop %esi + 1ec: 5f pop %edi + 1ed: 5d pop %ebp + 1ee: c3 ret -00000207 : +000001ef : int stat(const char *n, struct stat *st) { - 207: f3 0f 1e fb endbr32 - 20b: 55 push %ebp - 20c: 89 e5 mov %esp,%ebp - 20e: 56 push %esi - 20f: 53 push %ebx + 1ef: 55 push %ebp + 1f0: 89 e5 mov %esp,%ebp + 1f2: 56 push %esi + 1f3: 53 push %ebx int fd; int r; fd = open(n, O_RDONLY); - 210: 83 ec 08 sub $0x8,%esp - 213: 6a 00 push $0x0 - 215: ff 75 08 pushl 0x8(%ebp) - 218: e8 ea 00 00 00 call 307 + 1f4: 83 ec 08 sub $0x8,%esp + 1f7: 6a 00 push $0x0 + 1f9: ff 75 08 push 0x8(%ebp) + 1fc: e8 e4 00 00 00 call 2e5 if(fd < 0) - 21d: 83 c4 10 add $0x10,%esp - 220: 85 c0 test %eax,%eax - 222: 78 24 js 248 - 224: 89 c3 mov %eax,%ebx + 201: 83 c4 10 add $0x10,%esp + 204: 85 c0 test %eax,%eax + 206: 78 24 js 22c + 208: 89 c3 mov %eax,%ebx return -1; r = fstat(fd, st); - 226: 83 ec 08 sub $0x8,%esp - 229: ff 75 0c pushl 0xc(%ebp) - 22c: 50 push %eax - 22d: e8 ed 00 00 00 call 31f - 232: 89 c6 mov %eax,%esi + 20a: 83 ec 08 sub $0x8,%esp + 20d: ff 75 0c push 0xc(%ebp) + 210: 50 push %eax + 211: e8 e7 00 00 00 call 2fd + 216: 89 c6 mov %eax,%esi close(fd); - 234: 89 1c 24 mov %ebx,(%esp) - 237: e8 b3 00 00 00 call 2ef + 218: 89 1c 24 mov %ebx,(%esp) + 21b: e8 ad 00 00 00 call 2cd return r; - 23c: 83 c4 10 add $0x10,%esp + 220: 83 c4 10 add $0x10,%esp } - 23f: 89 f0 mov %esi,%eax - 241: 8d 65 f8 lea -0x8(%ebp),%esp - 244: 5b pop %ebx - 245: 5e pop %esi - 246: 5d pop %ebp - 247: c3 ret + 223: 89 f0 mov %esi,%eax + 225: 8d 65 f8 lea -0x8(%ebp),%esp + 228: 5b pop %ebx + 229: 5e pop %esi + 22a: 5d pop %ebp + 22b: c3 ret return -1; - 248: be ff ff ff ff mov $0xffffffff,%esi - 24d: eb f0 jmp 23f + 22c: be ff ff ff ff mov $0xffffffff,%esi + 231: eb f0 jmp 223 -0000024f : +00000233 : int atoi(const char *s) { - 24f: f3 0f 1e fb endbr32 - 253: 55 push %ebp - 254: 89 e5 mov %esp,%ebp - 256: 53 push %ebx - 257: 8b 55 08 mov 0x8(%ebp),%edx + 233: 55 push %ebp + 234: 89 e5 mov %esp,%ebp + 236: 53 push %ebx + 237: 8b 55 08 mov 0x8(%ebp),%edx int n; n = 0; while('0' <= *s && *s <= '9') - 25a: 0f b6 02 movzbl (%edx),%eax - 25d: 8d 48 d0 lea -0x30(%eax),%ecx - 260: 80 f9 09 cmp $0x9,%cl - 263: 77 22 ja 287 + 23a: 0f b6 02 movzbl (%edx),%eax + 23d: 8d 48 d0 lea -0x30(%eax),%ecx + 240: 80 f9 09 cmp $0x9,%cl + 243: 77 24 ja 269 n = 0; - 265: b9 00 00 00 00 mov $0x0,%ecx + 245: b9 00 00 00 00 mov $0x0,%ecx n = n*10 + *s++ - '0'; - 26a: 83 c2 01 add $0x1,%edx - 26d: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 270: 0f be c0 movsbl %al,%eax - 273: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx + 24a: 83 c2 01 add $0x1,%edx + 24d: 8d 0c 89 lea (%ecx,%ecx,4),%ecx + 250: 0f be c0 movsbl %al,%eax + 253: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx while('0' <= *s && *s <= '9') - 277: 0f b6 02 movzbl (%edx),%eax - 27a: 8d 58 d0 lea -0x30(%eax),%ebx - 27d: 80 fb 09 cmp $0x9,%bl - 280: 76 e8 jbe 26a + 257: 0f b6 02 movzbl (%edx),%eax + 25a: 8d 58 d0 lea -0x30(%eax),%ebx + 25d: 80 fb 09 cmp $0x9,%bl + 260: 76 e8 jbe 24a return n; } - 282: 89 c8 mov %ecx,%eax - 284: 5b pop %ebx - 285: 5d pop %ebp - 286: c3 ret + 262: 89 c8 mov %ecx,%eax + 264: 8b 5d fc mov -0x4(%ebp),%ebx + 267: c9 leave + 268: c3 ret n = 0; - 287: b9 00 00 00 00 mov $0x0,%ecx + 269: b9 00 00 00 00 mov $0x0,%ecx return n; - 28c: eb f4 jmp 282 + 26e: eb f2 jmp 262 -0000028e : +00000270 : void* memmove(void *vdst, const void *vsrc, int n) { - 28e: f3 0f 1e fb endbr32 - 292: 55 push %ebp - 293: 89 e5 mov %esp,%ebp - 295: 56 push %esi - 296: 53 push %ebx - 297: 8b 75 08 mov 0x8(%ebp),%esi - 29a: 8b 55 0c mov 0xc(%ebp),%edx - 29d: 8b 5d 10 mov 0x10(%ebp),%ebx + 270: 55 push %ebp + 271: 89 e5 mov %esp,%ebp + 273: 56 push %esi + 274: 53 push %ebx + 275: 8b 75 08 mov 0x8(%ebp),%esi + 278: 8b 55 0c mov 0xc(%ebp),%edx + 27b: 8b 5d 10 mov 0x10(%ebp),%ebx char *dst; const char *src; dst = vdst; src = vsrc; while(n-- > 0) - 2a0: 85 db test %ebx,%ebx - 2a2: 7e 15 jle 2b9 - 2a4: 01 f3 add %esi,%ebx + 27e: 85 db test %ebx,%ebx + 280: 7e 15 jle 297 + 282: 01 f3 add %esi,%ebx dst = vdst; - 2a6: 89 f0 mov %esi,%eax + 284: 89 f0 mov %esi,%eax *dst++ = *src++; - 2a8: 83 c2 01 add $0x1,%edx - 2ab: 83 c0 01 add $0x1,%eax - 2ae: 0f b6 4a ff movzbl -0x1(%edx),%ecx - 2b2: 88 48 ff mov %cl,-0x1(%eax) + 286: 83 c2 01 add $0x1,%edx + 289: 83 c0 01 add $0x1,%eax + 28c: 0f b6 4a ff movzbl -0x1(%edx),%ecx + 290: 88 48 ff mov %cl,-0x1(%eax) while(n-- > 0) - 2b5: 39 c3 cmp %eax,%ebx - 2b7: 75 ef jne 2a8 + 293: 39 c3 cmp %eax,%ebx + 295: 75 ef jne 286 return vdst; } - 2b9: 89 f0 mov %esi,%eax - 2bb: 5b pop %ebx - 2bc: 5e pop %esi - 2bd: 5d pop %ebp - 2be: c3 ret + 297: 89 f0 mov %esi,%eax + 299: 5b pop %ebx + 29a: 5e pop %esi + 29b: 5d pop %ebp + 29c: c3 ret -000002bf : +0000029d : name: \ movl $SYS_ ## name, %eax; \ int $T_SYSCALL; \ ret SYSCALL(fork) - 2bf: b8 01 00 00 00 mov $0x1,%eax - 2c4: cd 40 int $0x40 - 2c6: c3 ret + 29d: b8 01 00 00 00 mov $0x1,%eax + 2a2: cd 40 int $0x40 + 2a4: c3 ret -000002c7 : +000002a5 : SYSCALL(exit) - 2c7: b8 02 00 00 00 mov $0x2,%eax - 2cc: cd 40 int $0x40 - 2ce: c3 ret + 2a5: b8 02 00 00 00 mov $0x2,%eax + 2aa: cd 40 int $0x40 + 2ac: c3 ret -000002cf : +000002ad : SYSCALL(wait) - 2cf: b8 03 00 00 00 mov $0x3,%eax - 2d4: cd 40 int $0x40 - 2d6: c3 ret + 2ad: b8 03 00 00 00 mov $0x3,%eax + 2b2: cd 40 int $0x40 + 2b4: c3 ret -000002d7 : +000002b5 : SYSCALL(pipe) - 2d7: b8 04 00 00 00 mov $0x4,%eax - 2dc: cd 40 int $0x40 - 2de: c3 ret + 2b5: b8 04 00 00 00 mov $0x4,%eax + 2ba: cd 40 int $0x40 + 2bc: c3 ret -000002df : +000002bd : SYSCALL(read) - 2df: b8 05 00 00 00 mov $0x5,%eax - 2e4: cd 40 int $0x40 - 2e6: c3 ret + 2bd: b8 05 00 00 00 mov $0x5,%eax + 2c2: cd 40 int $0x40 + 2c4: c3 ret -000002e7 : +000002c5 : SYSCALL(write) - 2e7: b8 10 00 00 00 mov $0x10,%eax - 2ec: cd 40 int $0x40 - 2ee: c3 ret + 2c5: b8 10 00 00 00 mov $0x10,%eax + 2ca: cd 40 int $0x40 + 2cc: c3 ret -000002ef : +000002cd : SYSCALL(close) - 2ef: b8 15 00 00 00 mov $0x15,%eax - 2f4: cd 40 int $0x40 - 2f6: c3 ret + 2cd: b8 15 00 00 00 mov $0x15,%eax + 2d2: cd 40 int $0x40 + 2d4: c3 ret -000002f7 : +000002d5 : SYSCALL(kill) - 2f7: b8 06 00 00 00 mov $0x6,%eax - 2fc: cd 40 int $0x40 - 2fe: c3 ret + 2d5: b8 06 00 00 00 mov $0x6,%eax + 2da: cd 40 int $0x40 + 2dc: c3 ret -000002ff : +000002dd : SYSCALL(exec) - 2ff: b8 07 00 00 00 mov $0x7,%eax - 304: cd 40 int $0x40 - 306: c3 ret + 2dd: b8 07 00 00 00 mov $0x7,%eax + 2e2: cd 40 int $0x40 + 2e4: c3 ret -00000307 : +000002e5 : SYSCALL(open) - 307: b8 0f 00 00 00 mov $0xf,%eax - 30c: cd 40 int $0x40 - 30e: c3 ret + 2e5: b8 0f 00 00 00 mov $0xf,%eax + 2ea: cd 40 int $0x40 + 2ec: c3 ret -0000030f : +000002ed : SYSCALL(mknod) - 30f: b8 11 00 00 00 mov $0x11,%eax - 314: cd 40 int $0x40 - 316: c3 ret + 2ed: b8 11 00 00 00 mov $0x11,%eax + 2f2: cd 40 int $0x40 + 2f4: c3 ret -00000317 : +000002f5 : SYSCALL(unlink) - 317: b8 12 00 00 00 mov $0x12,%eax - 31c: cd 40 int $0x40 - 31e: c3 ret + 2f5: b8 12 00 00 00 mov $0x12,%eax + 2fa: cd 40 int $0x40 + 2fc: c3 ret -0000031f : +000002fd : SYSCALL(fstat) - 31f: b8 08 00 00 00 mov $0x8,%eax - 324: cd 40 int $0x40 - 326: c3 ret + 2fd: b8 08 00 00 00 mov $0x8,%eax + 302: cd 40 int $0x40 + 304: c3 ret -00000327 : +00000305 : SYSCALL(link) - 327: b8 13 00 00 00 mov $0x13,%eax - 32c: cd 40 int $0x40 - 32e: c3 ret + 305: b8 13 00 00 00 mov $0x13,%eax + 30a: cd 40 int $0x40 + 30c: c3 ret -0000032f : +0000030d : SYSCALL(mkdir) - 32f: b8 14 00 00 00 mov $0x14,%eax - 334: cd 40 int $0x40 - 336: c3 ret + 30d: b8 14 00 00 00 mov $0x14,%eax + 312: cd 40 int $0x40 + 314: c3 ret -00000337 : +00000315 : SYSCALL(chdir) - 337: b8 09 00 00 00 mov $0x9,%eax - 33c: cd 40 int $0x40 - 33e: c3 ret + 315: b8 09 00 00 00 mov $0x9,%eax + 31a: cd 40 int $0x40 + 31c: c3 ret -0000033f : +0000031d : SYSCALL(dup) - 33f: b8 0a 00 00 00 mov $0xa,%eax - 344: cd 40 int $0x40 - 346: c3 ret + 31d: b8 0a 00 00 00 mov $0xa,%eax + 322: cd 40 int $0x40 + 324: c3 ret -00000347 : +00000325 : SYSCALL(getpid) - 347: b8 0b 00 00 00 mov $0xb,%eax - 34c: cd 40 int $0x40 - 34e: c3 ret + 325: b8 0b 00 00 00 mov $0xb,%eax + 32a: cd 40 int $0x40 + 32c: c3 ret -0000034f : +0000032d : SYSCALL(sbrk) - 34f: b8 0c 00 00 00 mov $0xc,%eax - 354: cd 40 int $0x40 - 356: c3 ret + 32d: b8 0c 00 00 00 mov $0xc,%eax + 332: cd 40 int $0x40 + 334: c3 ret -00000357 : +00000335 : SYSCALL(sleep) - 357: b8 0d 00 00 00 mov $0xd,%eax - 35c: cd 40 int $0x40 - 35e: c3 ret + 335: b8 0d 00 00 00 mov $0xd,%eax + 33a: cd 40 int $0x40 + 33c: c3 ret -0000035f : +0000033d : SYSCALL(uptime) - 35f: b8 0e 00 00 00 mov $0xe,%eax - 364: cd 40 int $0x40 - 366: c3 ret + 33d: b8 0e 00 00 00 mov $0xe,%eax + 342: cd 40 int $0x40 + 344: c3 ret -00000367 : +00000345 : SYSCALL(slabtest) - 367: b8 16 00 00 00 mov $0x16,%eax - 36c: cd 40 int $0x40 - 36e: c3 ret + 345: b8 16 00 00 00 mov $0x16,%eax + 34a: cd 40 int $0x40 + 34c: c3 ret -0000036f : +0000034d : SYSCALL(ps) - 36f: b8 17 00 00 00 mov $0x17,%eax - 374: cd 40 int $0x40 - 376: c3 ret + 34d: b8 17 00 00 00 mov $0x17,%eax + 352: cd 40 int $0x40 + 354: c3 ret -00000377 : +00000355 : write(fd, &c, 1); } static void printint(int fd, int xx, int base, int sgn) { - 377: 55 push %ebp - 378: 89 e5 mov %esp,%ebp - 37a: 57 push %edi - 37b: 56 push %esi - 37c: 53 push %ebx - 37d: 83 ec 3c sub $0x3c,%esp - 380: 89 45 c4 mov %eax,-0x3c(%ebp) - 383: 89 d3 mov %edx,%ebx + 355: 55 push %ebp + 356: 89 e5 mov %esp,%ebp + 358: 57 push %edi + 359: 56 push %esi + 35a: 53 push %ebx + 35b: 83 ec 3c sub $0x3c,%esp + 35e: 89 45 c4 mov %eax,-0x3c(%ebp) + 361: 89 ce mov %ecx,%esi char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 385: 83 7d 08 00 cmpl $0x0,0x8(%ebp) - 389: 74 77 je 402 - 38b: 85 d2 test %edx,%edx - 38d: 79 73 jns 402 + 363: 83 7d 08 00 cmpl $0x0,0x8(%ebp) + 367: 74 79 je 3e2 + 369: 85 d2 test %edx,%edx + 36b: 79 75 jns 3e2 neg = 1; x = -xx; - 38f: f7 db neg %ebx + 36d: 89 d1 mov %edx,%ecx + 36f: f7 d9 neg %ecx neg = 1; - 391: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) + 371: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) } else { x = xx; } i = 0; - 398: be 00 00 00 00 mov $0x0,%esi + 378: bb 00 00 00 00 mov $0x0,%ebx do{ buf[i++] = digits[x % base]; - 39d: 89 f7 mov %esi,%edi - 39f: 83 c6 01 add $0x1,%esi - 3a2: 89 d8 mov %ebx,%eax - 3a4: ba 00 00 00 00 mov $0x0,%edx - 3a9: f7 f1 div %ecx - 3ab: 0f b6 92 7c 07 00 00 movzbl 0x77c(%edx),%edx - 3b2: 88 54 35 d7 mov %dl,-0x29(%ebp,%esi,1) + 37d: 89 df mov %ebx,%edi + 37f: 83 c3 01 add $0x1,%ebx + 382: 89 c8 mov %ecx,%eax + 384: ba 00 00 00 00 mov $0x0,%edx + 389: f7 f6 div %esi + 38b: 0f b6 92 94 07 00 00 movzbl 0x794(%edx),%edx + 392: 88 54 1d d7 mov %dl,-0x29(%ebp,%ebx,1) }while((x /= base) != 0); - 3b6: 89 da mov %ebx,%edx - 3b8: 89 c3 mov %eax,%ebx - 3ba: 39 d1 cmp %edx,%ecx - 3bc: 76 df jbe 39d + 396: 89 ca mov %ecx,%edx + 398: 89 c1 mov %eax,%ecx + 39a: 39 d6 cmp %edx,%esi + 39c: 76 df jbe 37d if(neg) - 3be: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) - 3c2: 74 08 je 3cc + 39e: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) + 3a2: 74 08 je 3ac buf[i++] = '-'; - 3c4: c6 44 35 d8 2d movb $0x2d,-0x28(%ebp,%esi,1) - 3c9: 8d 77 02 lea 0x2(%edi),%esi + 3a4: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) + 3a9: 8d 5f 02 lea 0x2(%edi),%ebx while(--i >= 0) - 3cc: 85 f6 test %esi,%esi - 3ce: 7e 2a jle 3fa - 3d0: 8d 5c 35 d7 lea -0x29(%ebp,%esi,1),%ebx - 3d4: 8d 7d d8 lea -0x28(%ebp),%edi + 3ac: 85 db test %ebx,%ebx + 3ae: 7e 2a jle 3da + 3b0: 8d 7d d8 lea -0x28(%ebp),%edi + 3b3: 8d 5c 1d d7 lea -0x29(%ebp,%ebx,1),%ebx write(fd, &c, 1); - 3d7: 8d 75 d7 lea -0x29(%ebp),%esi + 3b7: 8d 75 d7 lea -0x29(%ebp),%esi putc(fd, buf[i]); - 3da: 0f b6 03 movzbl (%ebx),%eax - 3dd: 88 45 d7 mov %al,-0x29(%ebp) + 3ba: 0f b6 03 movzbl (%ebx),%eax + 3bd: 88 45 d7 mov %al,-0x29(%ebp) write(fd, &c, 1); - 3e0: 83 ec 04 sub $0x4,%esp - 3e3: 6a 01 push $0x1 - 3e5: 56 push %esi - 3e6: ff 75 c4 pushl -0x3c(%ebp) - 3e9: e8 f9 fe ff ff call 2e7 + 3c0: 83 ec 04 sub $0x4,%esp + 3c3: 6a 01 push $0x1 + 3c5: 56 push %esi + 3c6: ff 75 c4 push -0x3c(%ebp) + 3c9: e8 f7 fe ff ff call 2c5 while(--i >= 0) - 3ee: 89 d8 mov %ebx,%eax - 3f0: 83 eb 01 sub $0x1,%ebx - 3f3: 83 c4 10 add $0x10,%esp - 3f6: 39 f8 cmp %edi,%eax - 3f8: 75 e0 jne 3da + 3ce: 89 d8 mov %ebx,%eax + 3d0: 83 eb 01 sub $0x1,%ebx + 3d3: 83 c4 10 add $0x10,%esp + 3d6: 39 f8 cmp %edi,%eax + 3d8: 75 e0 jne 3ba } - 3fa: 8d 65 f4 lea -0xc(%ebp),%esp - 3fd: 5b pop %ebx - 3fe: 5e pop %esi - 3ff: 5f pop %edi - 400: 5d pop %ebp - 401: c3 ret + 3da: 8d 65 f4 lea -0xc(%ebp),%esp + 3dd: 5b pop %ebx + 3de: 5e pop %esi + 3df: 5f pop %edi + 3e0: 5d pop %ebp + 3e1: c3 ret + x = xx; + 3e2: 89 d1 mov %edx,%ecx neg = 0; - 402: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) - 409: eb 8d jmp 398 + 3e4: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) + 3eb: eb 8b jmp 378 -0000040b : +000003ed : // Print to the given fd. Only understands %d, %x, %p, %s. void printf(int fd, const char *fmt, ...) { - 40b: f3 0f 1e fb endbr32 - 40f: 55 push %ebp - 410: 89 e5 mov %esp,%ebp - 412: 57 push %edi - 413: 56 push %esi - 414: 53 push %ebx - 415: 83 ec 2c sub $0x2c,%esp + 3ed: 55 push %ebp + 3ee: 89 e5 mov %esp,%ebp + 3f0: 57 push %edi + 3f1: 56 push %esi + 3f2: 53 push %ebx + 3f3: 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++){ - 418: 8b 75 0c mov 0xc(%ebp),%esi - 41b: 0f b6 1e movzbl (%esi),%ebx - 41e: 84 db test %bl,%bl - 420: 0f 84 ab 01 00 00 je 5d1 - 426: 83 c6 01 add $0x1,%esi + 3f6: 8b 75 0c mov 0xc(%ebp),%esi + 3f9: 0f b6 1e movzbl (%esi),%ebx + 3fc: 84 db test %bl,%bl + 3fe: 0f 84 9f 01 00 00 je 5a3 + 404: 83 c6 01 add $0x1,%esi ap = (uint*)(void*)&fmt + 1; - 429: 8d 45 10 lea 0x10(%ebp),%eax - 42c: 89 45 d4 mov %eax,-0x2c(%ebp) + 407: 8d 45 10 lea 0x10(%ebp),%eax + 40a: 89 45 d4 mov %eax,-0x2c(%ebp) state = 0; - 42f: bf 00 00 00 00 mov $0x0,%edi - 434: eb 2d jmp 463 + 40d: bf 00 00 00 00 mov $0x0,%edi + 412: eb 2d jmp 441 c = fmt[i] & 0xff; if(state == 0){ if(c == '%'){ state = '%'; } else { putc(fd, c); - 436: 88 5d e7 mov %bl,-0x19(%ebp) + 414: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 439: 83 ec 04 sub $0x4,%esp - 43c: 6a 01 push $0x1 - 43e: 8d 45 e7 lea -0x19(%ebp),%eax - 441: 50 push %eax - 442: ff 75 08 pushl 0x8(%ebp) - 445: e8 9d fe ff ff call 2e7 + 417: 83 ec 04 sub $0x4,%esp + 41a: 6a 01 push $0x1 + 41c: 8d 45 e7 lea -0x19(%ebp),%eax + 41f: 50 push %eax + 420: ff 75 08 push 0x8(%ebp) + 423: e8 9d fe ff ff call 2c5 putc(fd, c); - 44a: 83 c4 10 add $0x10,%esp - 44d: eb 05 jmp 454 + 428: 83 c4 10 add $0x10,%esp + 42b: eb 05 jmp 432 } } else if(state == '%'){ - 44f: 83 ff 25 cmp $0x25,%edi - 452: 74 22 je 476 + 42d: 83 ff 25 cmp $0x25,%edi + 430: 74 1f je 451 for(i = 0; fmt[i]; i++){ - 454: 83 c6 01 add $0x1,%esi - 457: 0f b6 5e ff movzbl -0x1(%esi),%ebx - 45b: 84 db test %bl,%bl - 45d: 0f 84 6e 01 00 00 je 5d1 + 432: 83 c6 01 add $0x1,%esi + 435: 0f b6 5e ff movzbl -0x1(%esi),%ebx + 439: 84 db test %bl,%bl + 43b: 0f 84 62 01 00 00 je 5a3 c = fmt[i] & 0xff; - 463: 0f be d3 movsbl %bl,%edx - 466: 0f b6 c3 movzbl %bl,%eax + 441: 0f b6 c3 movzbl %bl,%eax if(state == 0){ - 469: 85 ff test %edi,%edi - 46b: 75 e2 jne 44f + 444: 85 ff test %edi,%edi + 446: 75 e5 jne 42d if(c == '%'){ - 46d: 83 f8 25 cmp $0x25,%eax - 470: 75 c4 jne 436 + 448: 83 f8 25 cmp $0x25,%eax + 44b: 75 c7 jne 414 state = '%'; - 472: 89 c7 mov %eax,%edi - 474: eb de jmp 454 + 44d: 89 c7 mov %eax,%edi + 44f: eb e1 jmp 432 if(c == 'd'){ - 476: 83 f8 64 cmp $0x64,%eax - 479: 74 59 je 4d4 + 451: 83 f8 25 cmp $0x25,%eax + 454: 0f 84 f2 00 00 00 je 54c + 45a: 8d 50 9d lea -0x63(%eax),%edx + 45d: 83 fa 15 cmp $0x15,%edx + 460: 0f 87 07 01 00 00 ja 56d + 466: 0f 87 01 01 00 00 ja 56d + 46c: ff 24 95 3c 07 00 00 jmp *0x73c(,%edx,4) printint(fd, *ap, 10, 1); + 473: 83 ec 0c sub $0xc,%esp + 476: 6a 01 push $0x1 + 478: b9 0a 00 00 00 mov $0xa,%ecx + 47d: 8b 7d d4 mov -0x2c(%ebp),%edi + 480: 8b 17 mov (%edi),%edx + 482: 8b 45 08 mov 0x8(%ebp),%eax + 485: e8 cb fe ff ff call 355 ap++; - } else if(c == 'x' || c == 'p'){ - 47b: 81 e2 f7 00 00 00 and $0xf7,%edx - 481: 83 fa 70 cmp $0x70,%edx - 484: 74 7a je 500 - printint(fd, *ap, 16, 0); - ap++; - } else if(c == 's'){ - 486: 83 f8 73 cmp $0x73,%eax - 489: 0f 84 9d 00 00 00 je 52c - s = "(null)"; - while(*s != 0){ - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 48f: 83 f8 63 cmp $0x63,%eax - 492: 0f 84 ec 00 00 00 je 584 - putc(fd, *ap); - ap++; - } else if(c == '%'){ - 498: 83 f8 25 cmp $0x25,%eax - 49b: 0f 84 0f 01 00 00 je 5b0 - putc(fd, c); + 48a: 89 f8 mov %edi,%eax + 48c: 83 c0 04 add $0x4,%eax + 48f: 89 45 d4 mov %eax,-0x2c(%ebp) + 492: 83 c4 10 add $0x10,%esp } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); - 4a1: c6 45 e7 25 movb $0x25,-0x19(%ebp) - write(fd, &c, 1); - 4a5: 83 ec 04 sub $0x4,%esp - 4a8: 6a 01 push $0x1 - 4aa: 8d 45 e7 lea -0x19(%ebp),%eax - 4ad: 50 push %eax - 4ae: ff 75 08 pushl 0x8(%ebp) - 4b1: e8 31 fe ff ff call 2e7 putc(fd, c); - 4b6: 88 5d e7 mov %bl,-0x19(%ebp) - write(fd, &c, 1); - 4b9: 83 c4 0c add $0xc,%esp - 4bc: 6a 01 push $0x1 - 4be: 8d 45 e7 lea -0x19(%ebp),%eax - 4c1: 50 push %eax - 4c2: ff 75 08 pushl 0x8(%ebp) - 4c5: e8 1d fe ff ff call 2e7 - putc(fd, c); - 4ca: 83 c4 10 add $0x10,%esp } state = 0; - 4cd: bf 00 00 00 00 mov $0x0,%edi - 4d2: eb 80 jmp 454 - printint(fd, *ap, 10, 1); - 4d4: 83 ec 0c sub $0xc,%esp - 4d7: 6a 01 push $0x1 - 4d9: b9 0a 00 00 00 mov $0xa,%ecx - 4de: 8b 7d d4 mov -0x2c(%ebp),%edi - 4e1: 8b 17 mov (%edi),%edx - 4e3: 8b 45 08 mov 0x8(%ebp),%eax - 4e6: e8 8c fe ff ff call 377 - ap++; - 4eb: 89 f8 mov %edi,%eax - 4ed: 83 c0 04 add $0x4,%eax - 4f0: 89 45 d4 mov %eax,-0x2c(%ebp) - 4f3: 83 c4 10 add $0x10,%esp - state = 0; - 4f6: bf 00 00 00 00 mov $0x0,%edi - 4fb: e9 54 ff ff ff jmp 454 + 495: bf 00 00 00 00 mov $0x0,%edi + 49a: eb 96 jmp 432 printint(fd, *ap, 16, 0); - 500: 83 ec 0c sub $0xc,%esp - 503: 6a 00 push $0x0 - 505: b9 10 00 00 00 mov $0x10,%ecx - 50a: 8b 7d d4 mov -0x2c(%ebp),%edi - 50d: 8b 17 mov (%edi),%edx - 50f: 8b 45 08 mov 0x8(%ebp),%eax - 512: e8 60 fe ff ff call 377 + 49c: 83 ec 0c sub $0xc,%esp + 49f: 6a 00 push $0x0 + 4a1: b9 10 00 00 00 mov $0x10,%ecx + 4a6: 8b 7d d4 mov -0x2c(%ebp),%edi + 4a9: 8b 17 mov (%edi),%edx + 4ab: 8b 45 08 mov 0x8(%ebp),%eax + 4ae: e8 a2 fe ff ff call 355 ap++; - 517: 89 f8 mov %edi,%eax - 519: 83 c0 04 add $0x4,%eax - 51c: 89 45 d4 mov %eax,-0x2c(%ebp) - 51f: 83 c4 10 add $0x10,%esp + 4b3: 89 f8 mov %edi,%eax + 4b5: 83 c0 04 add $0x4,%eax + 4b8: 89 45 d4 mov %eax,-0x2c(%ebp) + 4bb: 83 c4 10 add $0x10,%esp state = 0; - 522: bf 00 00 00 00 mov $0x0,%edi - 527: e9 28 ff ff ff jmp 454 + 4be: bf 00 00 00 00 mov $0x0,%edi + 4c3: e9 6a ff ff ff jmp 432 s = (char*)*ap; - 52c: 8b 4d d4 mov -0x2c(%ebp),%ecx - 52f: 8b 01 mov (%ecx),%eax + 4c8: 8b 4d d4 mov -0x2c(%ebp),%ecx + 4cb: 8b 01 mov (%ecx),%eax ap++; - 531: 83 c1 04 add $0x4,%ecx - 534: 89 4d d4 mov %ecx,-0x2c(%ebp) + 4cd: 83 c1 04 add $0x4,%ecx + 4d0: 89 4d d4 mov %ecx,-0x2c(%ebp) if(s == 0) - 537: 85 c0 test %eax,%eax - 539: 74 13 je 54e + 4d3: 85 c0 test %eax,%eax + 4d5: 74 13 je 4ea s = (char*)*ap; - 53b: 89 c3 mov %eax,%ebx + 4d7: 89 c3 mov %eax,%ebx while(*s != 0){ - 53d: 0f b6 00 movzbl (%eax),%eax + 4d9: 0f b6 00 movzbl (%eax),%eax state = 0; - 540: bf 00 00 00 00 mov $0x0,%edi + 4dc: bf 00 00 00 00 mov $0x0,%edi while(*s != 0){ - 545: 84 c0 test %al,%al - 547: 75 0f jne 558 - 549: e9 06 ff ff ff jmp 454 + 4e1: 84 c0 test %al,%al + 4e3: 75 0f jne 4f4 + 4e5: e9 48 ff ff ff jmp 432 s = "(null)"; - 54e: bb 74 07 00 00 mov $0x774,%ebx + 4ea: bb 34 07 00 00 mov $0x734,%ebx while(*s != 0){ - 553: b8 28 00 00 00 mov $0x28,%eax - 558: 8b 7d 08 mov 0x8(%ebp),%edi + 4ef: b8 28 00 00 00 mov $0x28,%eax + 4f4: 8b 7d 08 mov 0x8(%ebp),%edi putc(fd, *s); - 55b: 88 45 e7 mov %al,-0x19(%ebp) + 4f7: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 55e: 83 ec 04 sub $0x4,%esp - 561: 6a 01 push $0x1 - 563: 8d 45 e7 lea -0x19(%ebp),%eax - 566: 50 push %eax - 567: 57 push %edi - 568: e8 7a fd ff ff call 2e7 + 4fa: 83 ec 04 sub $0x4,%esp + 4fd: 6a 01 push $0x1 + 4ff: 8d 45 e7 lea -0x19(%ebp),%eax + 502: 50 push %eax + 503: 57 push %edi + 504: e8 bc fd ff ff call 2c5 s++; - 56d: 83 c3 01 add $0x1,%ebx + 509: 83 c3 01 add $0x1,%ebx while(*s != 0){ - 570: 0f b6 03 movzbl (%ebx),%eax - 573: 83 c4 10 add $0x10,%esp - 576: 84 c0 test %al,%al - 578: 75 e1 jne 55b + 50c: 0f b6 03 movzbl (%ebx),%eax + 50f: 83 c4 10 add $0x10,%esp + 512: 84 c0 test %al,%al + 514: 75 e1 jne 4f7 state = 0; - 57a: bf 00 00 00 00 mov $0x0,%edi - 57f: e9 d0 fe ff ff jmp 454 + 516: bf 00 00 00 00 mov $0x0,%edi + 51b: e9 12 ff ff ff jmp 432 putc(fd, *ap); - 584: 8b 7d d4 mov -0x2c(%ebp),%edi - 587: 8b 07 mov (%edi),%eax - 589: 88 45 e7 mov %al,-0x19(%ebp) + 520: 8b 7d d4 mov -0x2c(%ebp),%edi + 523: 8b 07 mov (%edi),%eax + 525: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 58c: 83 ec 04 sub $0x4,%esp - 58f: 6a 01 push $0x1 - 591: 8d 45 e7 lea -0x19(%ebp),%eax - 594: 50 push %eax - 595: ff 75 08 pushl 0x8(%ebp) - 598: e8 4a fd ff ff call 2e7 + 528: 83 ec 04 sub $0x4,%esp + 52b: 6a 01 push $0x1 + 52d: 8d 45 e7 lea -0x19(%ebp),%eax + 530: 50 push %eax + 531: ff 75 08 push 0x8(%ebp) + 534: e8 8c fd ff ff call 2c5 ap++; - 59d: 83 c7 04 add $0x4,%edi - 5a0: 89 7d d4 mov %edi,-0x2c(%ebp) - 5a3: 83 c4 10 add $0x10,%esp + 539: 83 c7 04 add $0x4,%edi + 53c: 89 7d d4 mov %edi,-0x2c(%ebp) + 53f: 83 c4 10 add $0x10,%esp state = 0; - 5a6: bf 00 00 00 00 mov $0x0,%edi - 5ab: e9 a4 fe ff ff jmp 454 + 542: bf 00 00 00 00 mov $0x0,%edi + 547: e9 e6 fe ff ff jmp 432 putc(fd, c); - 5b0: 88 5d e7 mov %bl,-0x19(%ebp) + 54c: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 5b3: 83 ec 04 sub $0x4,%esp - 5b6: 6a 01 push $0x1 - 5b8: 8d 45 e7 lea -0x19(%ebp),%eax - 5bb: 50 push %eax - 5bc: ff 75 08 pushl 0x8(%ebp) - 5bf: e8 23 fd ff ff call 2e7 - 5c4: 83 c4 10 add $0x10,%esp + 54f: 83 ec 04 sub $0x4,%esp + 552: 6a 01 push $0x1 + 554: 8d 45 e7 lea -0x19(%ebp),%eax + 557: 50 push %eax + 558: ff 75 08 push 0x8(%ebp) + 55b: e8 65 fd ff ff call 2c5 + 560: 83 c4 10 add $0x10,%esp + state = 0; + 563: bf 00 00 00 00 mov $0x0,%edi + 568: e9 c5 fe ff ff jmp 432 + putc(fd, '%'); + 56d: c6 45 e7 25 movb $0x25,-0x19(%ebp) + write(fd, &c, 1); + 571: 83 ec 04 sub $0x4,%esp + 574: 6a 01 push $0x1 + 576: 8d 45 e7 lea -0x19(%ebp),%eax + 579: 50 push %eax + 57a: ff 75 08 push 0x8(%ebp) + 57d: e8 43 fd ff ff call 2c5 + putc(fd, c); + 582: 88 5d e7 mov %bl,-0x19(%ebp) + write(fd, &c, 1); + 585: 83 c4 0c add $0xc,%esp + 588: 6a 01 push $0x1 + 58a: 8d 45 e7 lea -0x19(%ebp),%eax + 58d: 50 push %eax + 58e: ff 75 08 push 0x8(%ebp) + 591: e8 2f fd ff ff call 2c5 + putc(fd, c); + 596: 83 c4 10 add $0x10,%esp state = 0; - 5c7: bf 00 00 00 00 mov $0x0,%edi - 5cc: e9 83 fe ff ff jmp 454 + 599: bf 00 00 00 00 mov $0x0,%edi + 59e: e9 8f fe ff ff jmp 432 } } } - 5d1: 8d 65 f4 lea -0xc(%ebp),%esp - 5d4: 5b pop %ebx - 5d5: 5e pop %esi - 5d6: 5f pop %edi - 5d7: 5d pop %ebp - 5d8: c3 ret - -000005d9 : + 5a3: 8d 65 f4 lea -0xc(%ebp),%esp + 5a6: 5b pop %ebx + 5a7: 5e pop %esi + 5a8: 5f pop %edi + 5a9: 5d pop %ebp + 5aa: c3 ret + +000005ab : static Header base; static Header *freep; void free(void *ap) { - 5d9: f3 0f 1e fb endbr32 - 5dd: 55 push %ebp - 5de: 89 e5 mov %esp,%ebp - 5e0: 57 push %edi - 5e1: 56 push %esi - 5e2: 53 push %ebx - 5e3: 8b 5d 08 mov 0x8(%ebp),%ebx + 5ab: 55 push %ebp + 5ac: 89 e5 mov %esp,%ebp + 5ae: 57 push %edi + 5af: 56 push %esi + 5b0: 53 push %ebx + 5b1: 8b 5d 08 mov 0x8(%ebp),%ebx Header *bp, *p; bp = (Header*)ap - 1; - 5e6: 8d 4b f8 lea -0x8(%ebx),%ecx + 5b4: 8d 4b f8 lea -0x8(%ebx),%ecx for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 5e9: a1 f0 09 00 00 mov 0x9f0,%eax - 5ee: eb 0c jmp 5fc + 5b7: a1 08 0a 00 00 mov 0xa08,%eax + 5bc: eb 0c jmp 5ca if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 5f0: 8b 10 mov (%eax),%edx - 5f2: 39 c2 cmp %eax,%edx - 5f4: 77 04 ja 5fa - 5f6: 39 ca cmp %ecx,%edx - 5f8: 77 10 ja 60a + 5be: 8b 10 mov (%eax),%edx + 5c0: 39 c2 cmp %eax,%edx + 5c2: 77 04 ja 5c8 + 5c4: 39 ca cmp %ecx,%edx + 5c6: 77 10 ja 5d8 { - 5fa: 89 d0 mov %edx,%eax + 5c8: 89 d0 mov %edx,%eax for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 5fc: 39 c8 cmp %ecx,%eax - 5fe: 73 f0 jae 5f0 - 600: 8b 10 mov (%eax),%edx - 602: 39 ca cmp %ecx,%edx - 604: 77 04 ja 60a + 5ca: 39 c8 cmp %ecx,%eax + 5cc: 73 f0 jae 5be + 5ce: 8b 10 mov (%eax),%edx + 5d0: 39 ca cmp %ecx,%edx + 5d2: 77 04 ja 5d8 if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 606: 39 c2 cmp %eax,%edx - 608: 77 f0 ja 5fa + 5d4: 39 c2 cmp %eax,%edx + 5d6: 77 f0 ja 5c8 break; if(bp + bp->s.size == p->s.ptr){ - 60a: 8b 73 fc mov -0x4(%ebx),%esi - 60d: 8b 10 mov (%eax),%edx - 60f: 8d 3c f1 lea (%ecx,%esi,8),%edi - 612: 39 fa cmp %edi,%edx - 614: 74 19 je 62f + 5d8: 8b 73 fc mov -0x4(%ebx),%esi + 5db: 8b 10 mov (%eax),%edx + 5dd: 8d 3c f1 lea (%ecx,%esi,8),%edi + 5e0: 39 fa cmp %edi,%edx + 5e2: 74 19 je 5fd bp->s.size += p->s.ptr->s.size; bp->s.ptr = p->s.ptr->s.ptr; + 5e4: 89 53 f8 mov %edx,-0x8(%ebx) } else bp->s.ptr = p->s.ptr; - 616: 89 53 f8 mov %edx,-0x8(%ebx) if(p + p->s.size == bp){ - 619: 8b 50 04 mov 0x4(%eax),%edx - 61c: 8d 34 d0 lea (%eax,%edx,8),%esi - 61f: 39 f1 cmp %esi,%ecx - 621: 74 1b je 63e + 5e7: 8b 50 04 mov 0x4(%eax),%edx + 5ea: 8d 34 d0 lea (%eax,%edx,8),%esi + 5ed: 39 f1 cmp %esi,%ecx + 5ef: 74 18 je 609 p->s.size += bp->s.size; p->s.ptr = bp->s.ptr; + 5f1: 89 08 mov %ecx,(%eax) } else p->s.ptr = bp; - 623: 89 08 mov %ecx,(%eax) freep = p; - 625: a3 f0 09 00 00 mov %eax,0x9f0 + 5f3: a3 08 0a 00 00 mov %eax,0xa08 } - 62a: 5b pop %ebx - 62b: 5e pop %esi - 62c: 5f pop %edi - 62d: 5d pop %ebp - 62e: c3 ret + 5f8: 5b pop %ebx + 5f9: 5e pop %esi + 5fa: 5f pop %edi + 5fb: 5d pop %ebp + 5fc: c3 ret bp->s.size += p->s.ptr->s.size; - 62f: 03 72 04 add 0x4(%edx),%esi - 632: 89 73 fc mov %esi,-0x4(%ebx) + 5fd: 03 72 04 add 0x4(%edx),%esi + 600: 89 73 fc mov %esi,-0x4(%ebx) bp->s.ptr = p->s.ptr->s.ptr; - 635: 8b 10 mov (%eax),%edx - 637: 8b 12 mov (%edx),%edx - 639: 89 53 f8 mov %edx,-0x8(%ebx) - 63c: eb db jmp 619 + 603: 8b 10 mov (%eax),%edx + 605: 8b 12 mov (%edx),%edx + 607: eb db jmp 5e4 p->s.size += bp->s.size; - 63e: 03 53 fc add -0x4(%ebx),%edx - 641: 89 50 04 mov %edx,0x4(%eax) + 609: 03 53 fc add -0x4(%ebx),%edx + 60c: 89 50 04 mov %edx,0x4(%eax) p->s.ptr = bp->s.ptr; - 644: 8b 53 f8 mov -0x8(%ebx),%edx - 647: 89 10 mov %edx,(%eax) - 649: eb da jmp 625 + 60f: 8b 4b f8 mov -0x8(%ebx),%ecx + 612: eb dd jmp 5f1 -0000064b : +00000614 : return freep; } void* malloc(uint nbytes) { - 64b: f3 0f 1e fb endbr32 - 64f: 55 push %ebp - 650: 89 e5 mov %esp,%ebp - 652: 57 push %edi - 653: 56 push %esi - 654: 53 push %ebx - 655: 83 ec 0c sub $0xc,%esp + 614: 55 push %ebp + 615: 89 e5 mov %esp,%ebp + 617: 57 push %edi + 618: 56 push %esi + 619: 53 push %ebx + 61a: 83 ec 0c sub $0xc,%esp Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 658: 8b 45 08 mov 0x8(%ebp),%eax - 65b: 8d 58 07 lea 0x7(%eax),%ebx - 65e: c1 eb 03 shr $0x3,%ebx - 661: 83 c3 01 add $0x1,%ebx + 61d: 8b 45 08 mov 0x8(%ebp),%eax + 620: 8d 58 07 lea 0x7(%eax),%ebx + 623: c1 eb 03 shr $0x3,%ebx + 626: 83 c3 01 add $0x1,%ebx if((prevp = freep) == 0){ - 664: 8b 15 f0 09 00 00 mov 0x9f0,%edx - 66a: 85 d2 test %edx,%edx - 66c: 74 20 je 68e + 629: 8b 15 08 0a 00 00 mov 0xa08,%edx + 62f: 85 d2 test %edx,%edx + 631: 74 1c je 64f base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 66e: 8b 02 mov (%edx),%eax + 633: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 670: 8b 48 04 mov 0x4(%eax),%ecx - 673: 39 cb cmp %ecx,%ebx - 675: 76 3c jbe 6b3 - 677: 81 fb 00 10 00 00 cmp $0x1000,%ebx - 67d: be 00 10 00 00 mov $0x1000,%esi - 682: 0f 43 f3 cmovae %ebx,%esi + 635: 8b 48 04 mov 0x4(%eax),%ecx + 638: 39 cb cmp %ecx,%ebx + 63a: 76 38 jbe 674 + 63c: be 00 10 00 00 mov $0x1000,%esi + 641: 39 f3 cmp %esi,%ebx + 643: 0f 43 f3 cmovae %ebx,%esi p = sbrk(nu * sizeof(Header)); - 685: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi - 68c: eb 72 jmp 700 + 646: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi + 64d: eb 72 jmp 6c1 base.s.ptr = freep = prevp = &base; - 68e: c7 05 f0 09 00 00 f4 movl $0x9f4,0x9f0 - 695: 09 00 00 - 698: c7 05 f4 09 00 00 f4 movl $0x9f4,0x9f4 - 69f: 09 00 00 + 64f: c7 05 08 0a 00 00 0c movl $0xa0c,0xa08 + 656: 0a 00 00 + 659: c7 05 0c 0a 00 00 0c movl $0xa0c,0xa0c + 660: 0a 00 00 base.s.size = 0; - 6a2: c7 05 f8 09 00 00 00 movl $0x0,0x9f8 - 6a9: 00 00 00 + 663: c7 05 10 0a 00 00 00 movl $0x0,0xa10 + 66a: 00 00 00 for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 6ac: b8 f4 09 00 00 mov $0x9f4,%eax - 6b1: eb c4 jmp 677 + 66d: b8 0c 0a 00 00 mov $0xa0c,%eax + 672: eb c8 jmp 63c if(p->s.size == nunits) - 6b3: 39 cb cmp %ecx,%ebx - 6b5: 74 1e je 6d5 + 674: 39 cb cmp %ecx,%ebx + 676: 74 1e je 696 prevp->s.ptr = p->s.ptr; else { p->s.size -= nunits; - 6b7: 29 d9 sub %ebx,%ecx - 6b9: 89 48 04 mov %ecx,0x4(%eax) + 678: 29 d9 sub %ebx,%ecx + 67a: 89 48 04 mov %ecx,0x4(%eax) p += p->s.size; - 6bc: 8d 04 c8 lea (%eax,%ecx,8),%eax + 67d: 8d 04 c8 lea (%eax,%ecx,8),%eax p->s.size = nunits; - 6bf: 89 58 04 mov %ebx,0x4(%eax) + 680: 89 58 04 mov %ebx,0x4(%eax) } freep = prevp; - 6c2: 89 15 f0 09 00 00 mov %edx,0x9f0 + 683: 89 15 08 0a 00 00 mov %edx,0xa08 return (void*)(p + 1); - 6c8: 8d 50 08 lea 0x8(%eax),%edx + 689: 8d 50 08 lea 0x8(%eax),%edx } if(p == freep) if((p = morecore(nunits)) == 0) return 0; } } - 6cb: 89 d0 mov %edx,%eax - 6cd: 8d 65 f4 lea -0xc(%ebp),%esp - 6d0: 5b pop %ebx - 6d1: 5e pop %esi - 6d2: 5f pop %edi - 6d3: 5d pop %ebp - 6d4: c3 ret + 68c: 89 d0 mov %edx,%eax + 68e: 8d 65 f4 lea -0xc(%ebp),%esp + 691: 5b pop %ebx + 692: 5e pop %esi + 693: 5f pop %edi + 694: 5d pop %ebp + 695: c3 ret prevp->s.ptr = p->s.ptr; - 6d5: 8b 08 mov (%eax),%ecx - 6d7: 89 0a mov %ecx,(%edx) - 6d9: eb e7 jmp 6c2 + 696: 8b 08 mov (%eax),%ecx + 698: 89 0a mov %ecx,(%edx) + 69a: eb e7 jmp 683 hp->s.size = nu; - 6db: 89 70 04 mov %esi,0x4(%eax) + 69c: 89 70 04 mov %esi,0x4(%eax) free((void*)(hp + 1)); - 6de: 83 ec 0c sub $0xc,%esp - 6e1: 83 c0 08 add $0x8,%eax - 6e4: 50 push %eax - 6e5: e8 ef fe ff ff call 5d9 + 69f: 83 ec 0c sub $0xc,%esp + 6a2: 83 c0 08 add $0x8,%eax + 6a5: 50 push %eax + 6a6: e8 00 ff ff ff call 5ab return freep; - 6ea: 8b 15 f0 09 00 00 mov 0x9f0,%edx + 6ab: 8b 15 08 0a 00 00 mov 0xa08,%edx if((p = morecore(nunits)) == 0) - 6f0: 83 c4 10 add $0x10,%esp - 6f3: 85 d2 test %edx,%edx - 6f5: 74 d4 je 6cb + 6b1: 83 c4 10 add $0x10,%esp + 6b4: 85 d2 test %edx,%edx + 6b6: 74 d4 je 68c for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 6f7: 8b 02 mov (%edx),%eax + 6b8: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 6f9: 8b 48 04 mov 0x4(%eax),%ecx - 6fc: 39 d9 cmp %ebx,%ecx - 6fe: 73 b3 jae 6b3 + 6ba: 8b 48 04 mov 0x4(%eax),%ecx + 6bd: 39 d9 cmp %ebx,%ecx + 6bf: 73 b3 jae 674 if(p == freep) - 700: 89 c2 mov %eax,%edx - 702: 39 05 f0 09 00 00 cmp %eax,0x9f0 - 708: 75 ed jne 6f7 + 6c1: 89 c2 mov %eax,%edx + 6c3: 39 05 08 0a 00 00 cmp %eax,0xa08 + 6c9: 75 ed jne 6b8 p = sbrk(nu * sizeof(Header)); - 70a: 83 ec 0c sub $0xc,%esp - 70d: 57 push %edi - 70e: e8 3c fc ff ff call 34f + 6cb: 83 ec 0c sub $0xc,%esp + 6ce: 57 push %edi + 6cf: e8 59 fc ff ff call 32d if(p == (char*)-1) - 713: 83 c4 10 add $0x10,%esp - 716: 83 f8 ff cmp $0xffffffff,%eax - 719: 75 c0 jne 6db + 6d4: 83 c4 10 add $0x10,%esp + 6d7: 83 f8 ff cmp $0xffffffff,%eax + 6da: 75 c0 jne 69c return 0; - 71b: ba 00 00 00 00 mov $0x0,%edx - 720: eb a9 jmp 6cb + 6dc: ba 00 00 00 00 mov $0x0,%edx + 6e1: eb a9 jmp 68c diff --git a/src/user/init.d b/src/user/init.d new file mode 100644 index 0000000..565d86a --- /dev/null +++ b/src/user/init.d @@ -0,0 +1,2 @@ +user/init.o: user/init.c /usr/include/stdc-predef.h types.h stat.h user.h \ + fcntl.h diff --git a/src/user/init.o b/src/user/init.o new file mode 100644 index 0000000000000000000000000000000000000000..ed94c527e019c32a6374c5b6430f802758e2fd33 GIT binary patch literal 4064 zcma)9Z)_Y#6`$F?JzsqOe`ynwHa-_8ZJ~G0C8llCv#@_05sbzP|Fv>eYdzRPoE)RMrUhRso77soYif{2S@0 zx#UsB_rH-`Mv%AYdvwzmPVfGC^=fWOF3IeKz4O2OEC=q`9GE5s9TRC)(WRO<3$0p@ z7bxv)jWCGAwkQ0+PY#sh#ElX^SS-h_eyv&vqf_Mt*Kd2xei65{)?4u!aN01O4Lfz; zo9q{V!ooU2<`}y#LU-dRMcv-kXy^JIh_=;th#(7-iaE@^kaPSX5nCRC%%^`hIw^9G z18kX}1{5g|&?pOi^8m+2C-P(H`i_v_fNqe|i+C)0T9ibN;$VY3@6euSC?yR&NbLvn zza!9OQ5qIG4=~c~E(_~A<@k5wARO+PVfq&F+RER$i&l162DBksr#7r)VssliS(J)E zo5$x%2gfB0`KtJD1HRg*+%;4x+7mk_M&($3 z1S?d~adD2eNI75P=>ADeIbB5FyVcwSGXj$oF-LK}bZFedx((_Hl#=tFm*WS=@ga0Z zTAyY!%!M9NmO>h4Gt<#)2h5k4*x~JG5o-+7YXA9?we8{&q+80SqIF^x;T@q41D9^2 zrEqZV(}l@3>=G%%WiJrj zAodpnuUY2tKJEI6=(v6$SV}f+jg}h;)pbqR?LZ1l~!-ZToJ_+NeCjj-ON(BDdpJmP1VFMaJ1}oT@BGVd6EC zP%D>x4^}rm6Es>;7=+!p(hW}gL9>#$^|lwoh{}s`jkX)N%xFIh#B?j{c+=f_H%PkE zafF46y=a=ny4v{PMto*%*1!=}6xO4&vj@tzoKT_kvQ%nm=(ru()E4~MfE4p1j@1=MhVAZ3e#ExAEI2)lo6)qK_~*Kj ziPzr7EZo7e6WWP_wW&cs-ha-VGPG4J7PrXQagL{>o=+5JW!_5ev=_U z@|$~jrHAj;oOz7m4S94;<9PEC)e%w0hc}Sk^=iYXCrBL1O{441eOKLE5) zEI&-db;3D_N3@+cr-c_kMnw7MRcK+U0&VYVySfPw?*(!s_hoJWDmmhRNAvHKBi@gQ zxb|P8eoTnhi5UNL>QTjiqxoCp@c$!G|4g7C*F@s>gb5cszYh?foZo=R_mU`9Tyu%7 zaVrsido-#t2!4;|uEtXuSBMDuwC3kEep}-OjVgb{`G@A%>1v)`8ut*9$9+U>*^g^{ zK-(YH{Bey9BK+GLyBg1FJg@PK8o#3PWsTp{_^QUAYW#)9-)g+9k*A2i#JHa})(h*m zn;iHdjrKv9j)bWpK?Nt9yCNRijBCf-USs+5{;;)-fLjzL2b zj;K{@+UnK2izoeHAr#f7lHGbe@}4xT9X8s2oNzE>r5=$REPB_d+J4}fAqa0os!uB3 z2s<4QcR@8kHLl`DsHiHNhV@z}Rr$ti{l9Gjj#%1_>cn+ZHBbkjjco@WET1@xhwVM= zp&tX)xdieOhbrB-Kx}!{wju!arkTrr7Zlle-vyx`<8iEs$KQk0n|L>vgrH+HRDEx7 zQ-kPtTzRA&{rDW!m}=8~`&SbrW1EGX&F>YEIruR@9M6sX_=6@hTpUB9w`CMYbbI{H z;su$DX~wS$g^_9d8T`r=bThUmz_a=N3)cnD1oK1r+Q{!Y$Yu;g@fXB-QRK33R3zzaK!6^>eVew;3mG zqn&$=Xj+XQA=8ZQ*U(Ys(Po>0-(e-C9p8iP5}xe)9>)8c{fBbC@xIwu9G5U2l&ssl jp&5_s&RAxTLKLqe7=MYHX7b~ekoB9xyuUY2K;!ox!?7|& literal 0 HcmV?d00001 diff --git a/src/user/init.sym b/src/user/init.sym index 1927530..425d691 100644 --- a/src/user/init.sym +++ b/src/user/init.sym @@ -1,61 +1,48 @@ -00000000 .text -00000724 .rodata -00000790 .eh_frame -000009e8 .data -000009f0 .bss -00000000 .comment -00000000 .debug_aranges -00000000 .debug_info -00000000 .debug_abbrev -00000000 .debug_line -00000000 .debug_str -00000000 .debug_loc -00000000 .debug_ranges 00000000 init.c 00000000 ulib.c 00000000 printf.c -00000377 printint -0000077c digits.1089 +00000355 printint +00000794 digits.0 00000000 umalloc.c -000009f0 freep -000009f4 base -000000e1 strcpy -0000040b printf -000009e8 argv -0000028e memmove -0000030f mknod -0000036f ps -000001ac gets -00000347 getpid -0000064b malloc -00000357 sleep -000002d7 pipe -00000367 slabtest -000002e7 write -0000031f fstat -000002f7 kill -00000337 chdir -000002ff exec -000002cf wait -000002df read -00000317 unlink -000002bf fork -0000034f sbrk -0000035f uptime -000009f0 __bss_start -00000160 memset +00000a08 freep +00000a0c base +000000dd strcpy +000003ed printf +00000a00 argv +00000270 memmove +000002ed mknod +0000034d ps +00000198 gets +00000325 getpid +00000614 malloc +00000335 sleep +000002b5 pipe +00000345 slabtest +000002c5 write +000002fd fstat +000002d5 kill +00000315 chdir +000002dd exec +000002ad wait +000002bd read +000002f5 unlink +0000029d fork +0000032d sbrk +0000033d uptime +00000a08 __bss_start +00000152 memset 00000000 main -00000107 strcmp -0000033f dup -00000207 stat -000009f0 _edata -000009fc _end -00000327 link -000002c7 exit -0000024f atoi -00000136 strlen -00000307 open -0000017b strchr -0000032f mkdir -000002ef close -000005d9 free +00000101 strcmp +0000031d dup +000001ef stat +00000a08 _edata +00000a14 _end +00000305 link +000002a5 exit +00000233 atoi +0000012c strlen +000002e5 open +0000016b strchr +0000030d mkdir +000002cd close +000005ab free diff --git a/src/user/kill.asm b/src/user/kill.asm index 38504a9..1a05a3c 100644 --- a/src/user/kill.asm +++ b/src/user/kill.asm @@ -11,1063 +11,1032 @@ Disassembly of section .text: int main(int argc, char **argv) { - 0: f3 0f 1e fb endbr32 - 4: 8d 4c 24 04 lea 0x4(%esp),%ecx - 8: 83 e4 f0 and $0xfffffff0,%esp - b: ff 71 fc pushl -0x4(%ecx) - e: 55 push %ebp - f: 89 e5 mov %esp,%ebp - 11: 56 push %esi - 12: 53 push %ebx - 13: 51 push %ecx - 14: 83 ec 0c sub $0xc,%esp - 17: 8b 01 mov (%ecx),%eax - 19: 8b 51 04 mov 0x4(%ecx),%edx - int i; + 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 if(argc < 2){ - 1c: 83 f8 01 cmp $0x1,%eax - 1f: 7e 27 jle 48 - 21: 8d 5a 04 lea 0x4(%edx),%ebx - 24: 8d 34 82 lea (%edx,%eax,4),%esi printf(2, "usage: kill pid...\n"); exit(); } for(i=1; i kill(atoi(argv[i])); - 27: 83 ec 0c sub $0xc,%esp - 2a: ff 33 pushl (%ebx) - 2c: e8 99 01 00 00 call 1ca - 31: 89 04 24 mov %eax,(%esp) - 34: e8 39 02 00 00 call 272 + 23: 83 ec 0c sub $0xc,%esp + 26: ff 34 9f push (%edi,%ebx,4) + 29: e8 81 01 00 00 call 1af + 2e: 89 04 24 mov %eax,(%esp) + 31: e8 1b 02 00 00 call 251 for(i=1; i + 36: 83 c3 01 add $0x1,%ebx + 39: 83 c4 10 add $0x10,%esp + 3c: 39 de cmp %ebx,%esi + 3e: 75 e3 jne 23 exit(); - 43: e8 fa 01 00 00 call 242 + 40: e8 dc 01 00 00 call 221 printf(2, "usage: kill pid...\n"); - 48: 83 ec 08 sub $0x8,%esp - 4b: 68 a0 06 00 00 push $0x6a0 - 50: 6a 02 push $0x2 - 52: e8 2f 03 00 00 call 386 + 45: 83 ec 08 sub $0x8,%esp + 48: 68 60 06 00 00 push $0x660 + 4d: 6a 02 push $0x2 + 4f: e8 15 03 00 00 call 369 exit(); - 57: e8 e6 01 00 00 call 242 + 54: e8 c8 01 00 00 call 221 -0000005c : +00000059 : #include "user.h" #include "x86.h" char* strcpy(char *s, const char *t) { - 5c: f3 0f 1e fb endbr32 - 60: 55 push %ebp - 61: 89 e5 mov %esp,%ebp - 63: 53 push %ebx - 64: 8b 4d 08 mov 0x8(%ebp),%ecx - 67: 8b 5d 0c mov 0xc(%ebp),%ebx + 59: 55 push %ebp + 5a: 89 e5 mov %esp,%ebp + 5c: 53 push %ebx + 5d: 8b 4d 08 mov 0x8(%ebp),%ecx + 60: 8b 5d 0c mov 0xc(%ebp),%ebx char *os; os = s; while((*s++ = *t++) != 0) - 6a: b8 00 00 00 00 mov $0x0,%eax - 6f: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 73: 88 14 01 mov %dl,(%ecx,%eax,1) - 76: 83 c0 01 add $0x1,%eax - 79: 84 d2 test %dl,%dl - 7b: 75 f2 jne 6f + 63: b8 00 00 00 00 mov $0x0,%eax + 68: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx + 6c: 88 14 01 mov %dl,(%ecx,%eax,1) + 6f: 83 c0 01 add $0x1,%eax + 72: 84 d2 test %dl,%dl + 74: 75 f2 jne 68 ; return os; } - 7d: 89 c8 mov %ecx,%eax - 7f: 5b pop %ebx - 80: 5d pop %ebp - 81: c3 ret + 76: 89 c8 mov %ecx,%eax + 78: 8b 5d fc mov -0x4(%ebp),%ebx + 7b: c9 leave + 7c: c3 ret -00000082 : +0000007d : int strcmp(const char *p, const char *q) { - 82: f3 0f 1e fb endbr32 - 86: 55 push %ebp - 87: 89 e5 mov %esp,%ebp - 89: 8b 4d 08 mov 0x8(%ebp),%ecx - 8c: 8b 55 0c mov 0xc(%ebp),%edx + 7d: 55 push %ebp + 7e: 89 e5 mov %esp,%ebp + 80: 8b 4d 08 mov 0x8(%ebp),%ecx + 83: 8b 55 0c mov 0xc(%ebp),%edx while(*p && *p == *q) - 8f: 0f b6 01 movzbl (%ecx),%eax - 92: 84 c0 test %al,%al - 94: 74 11 je a7 - 96: 38 02 cmp %al,(%edx) - 98: 75 0d jne a7 + 86: 0f b6 01 movzbl (%ecx),%eax + 89: 84 c0 test %al,%al + 8b: 74 11 je 9e + 8d: 38 02 cmp %al,(%edx) + 8f: 75 0d jne 9e p++, q++; - 9a: 83 c1 01 add $0x1,%ecx - 9d: 83 c2 01 add $0x1,%edx + 91: 83 c1 01 add $0x1,%ecx + 94: 83 c2 01 add $0x1,%edx while(*p && *p == *q) - a0: 0f b6 01 movzbl (%ecx),%eax - a3: 84 c0 test %al,%al - a5: 75 ef jne 96 + 97: 0f b6 01 movzbl (%ecx),%eax + 9a: 84 c0 test %al,%al + 9c: 75 ef jne 8d return (uchar)*p - (uchar)*q; - a7: 0f b6 c0 movzbl %al,%eax - aa: 0f b6 12 movzbl (%edx),%edx - ad: 29 d0 sub %edx,%eax + 9e: 0f b6 c0 movzbl %al,%eax + a1: 0f b6 12 movzbl (%edx),%edx + a4: 29 d0 sub %edx,%eax } - af: 5d pop %ebp - b0: c3 ret + a6: 5d pop %ebp + a7: c3 ret -000000b1 : +000000a8 : uint strlen(const char *s) { - b1: f3 0f 1e fb endbr32 - b5: 55 push %ebp - b6: 89 e5 mov %esp,%ebp - b8: 8b 55 08 mov 0x8(%ebp),%edx + a8: 55 push %ebp + a9: 89 e5 mov %esp,%ebp + ab: 8b 55 08 mov 0x8(%ebp),%edx int n; for(n = 0; s[n]; n++) - bb: 80 3a 00 cmpb $0x0,(%edx) - be: 74 14 je d4 - c0: b8 00 00 00 00 mov $0x0,%eax - c5: 83 c0 01 add $0x1,%eax - c8: 89 c1 mov %eax,%ecx - ca: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - ce: 75 f5 jne c5 + ae: 80 3a 00 cmpb $0x0,(%edx) + b1: 74 14 je c7 + b3: b8 00 00 00 00 mov $0x0,%eax + b8: 83 c0 01 add $0x1,%eax + bb: 89 c1 mov %eax,%ecx + bd: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) + c1: 75 f5 jne b8 ; return n; } - d0: 89 c8 mov %ecx,%eax - d2: 5d pop %ebp - d3: c3 ret + c3: 89 c8 mov %ecx,%eax + c5: 5d pop %ebp + c6: c3 ret for(n = 0; s[n]; n++) - d4: b9 00 00 00 00 mov $0x0,%ecx + c7: b9 00 00 00 00 mov $0x0,%ecx return n; - d9: eb f5 jmp d0 + cc: eb f5 jmp c3 -000000db : +000000ce : void* memset(void *dst, int c, uint n) { - db: f3 0f 1e fb endbr32 - df: 55 push %ebp - e0: 89 e5 mov %esp,%ebp - e2: 57 push %edi - e3: 8b 55 08 mov 0x8(%ebp),%edx + ce: 55 push %ebp + cf: 89 e5 mov %esp,%ebp + d1: 57 push %edi + d2: 8b 55 08 mov 0x8(%ebp),%edx } static inline void stosb(void *addr, int data, int cnt) { asm volatile("cld; rep stosb" : - e6: 89 d7 mov %edx,%edi - e8: 8b 4d 10 mov 0x10(%ebp),%ecx - eb: 8b 45 0c mov 0xc(%ebp),%eax - ee: fc cld - ef: f3 aa rep stos %al,%es:(%edi) + d5: 89 d7 mov %edx,%edi + d7: 8b 4d 10 mov 0x10(%ebp),%ecx + da: 8b 45 0c mov 0xc(%ebp),%eax + dd: fc cld + de: f3 aa rep stos %al,%es:(%edi) stosb(dst, c, n); return dst; } - f1: 89 d0 mov %edx,%eax - f3: 5f pop %edi - f4: 5d pop %ebp - f5: c3 ret + e0: 89 d0 mov %edx,%eax + e2: 8b 7d fc mov -0x4(%ebp),%edi + e5: c9 leave + e6: c3 ret -000000f6 : +000000e7 : char* strchr(const char *s, char c) { - f6: f3 0f 1e fb endbr32 - fa: 55 push %ebp - fb: 89 e5 mov %esp,%ebp - fd: 8b 45 08 mov 0x8(%ebp),%eax - 100: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx + e7: 55 push %ebp + e8: 89 e5 mov %esp,%ebp + ea: 8b 45 08 mov 0x8(%ebp),%eax + ed: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx for(; *s; s++) - 104: 0f b6 10 movzbl (%eax),%edx - 107: 84 d2 test %dl,%dl - 109: 74 15 je 120 + f1: 0f b6 10 movzbl (%eax),%edx + f4: 84 d2 test %dl,%dl + f6: 74 15 je 10d if(*s == c) - 10b: 38 d1 cmp %dl,%cl - 10d: 74 0f je 11e + f8: 38 d1 cmp %dl,%cl + fa: 74 0f je 10b for(; *s; s++) - 10f: 83 c0 01 add $0x1,%eax - 112: 0f b6 10 movzbl (%eax),%edx - 115: 84 d2 test %dl,%dl - 117: 75 f2 jne 10b + fc: 83 c0 01 add $0x1,%eax + ff: 0f b6 10 movzbl (%eax),%edx + 102: 84 d2 test %dl,%dl + 104: 75 f2 jne f8 return (char*)s; return 0; - 119: b8 00 00 00 00 mov $0x0,%eax + 106: b8 00 00 00 00 mov $0x0,%eax } - 11e: 5d pop %ebp - 11f: c3 ret + 10b: 5d pop %ebp + 10c: c3 ret return 0; - 120: b8 00 00 00 00 mov $0x0,%eax - 125: eb f7 jmp 11e + 10d: b8 00 00 00 00 mov $0x0,%eax + 112: eb f7 jmp 10b -00000127 : +00000114 : char* gets(char *buf, int max) { - 127: f3 0f 1e fb endbr32 - 12b: 55 push %ebp - 12c: 89 e5 mov %esp,%ebp - 12e: 57 push %edi - 12f: 56 push %esi - 130: 53 push %ebx - 131: 83 ec 2c sub $0x2c,%esp - 134: 8b 75 08 mov 0x8(%ebp),%esi + 114: 55 push %ebp + 115: 89 e5 mov %esp,%ebp + 117: 57 push %edi + 118: 56 push %esi + 119: 53 push %ebx + 11a: 83 ec 2c sub $0x2c,%esp + 11d: 8b 75 08 mov 0x8(%ebp),%esi int i, cc; char c; for(i=0; i+1 < max; ){ - 137: bb 00 00 00 00 mov $0x0,%ebx + 120: bb 00 00 00 00 mov $0x0,%ebx cc = read(0, &c, 1); - 13c: 8d 7d e7 lea -0x19(%ebp),%edi + 125: 8d 7d e7 lea -0x19(%ebp),%edi for(i=0; i+1 < max; ){ - 13f: 89 5d d4 mov %ebx,-0x2c(%ebp) - 142: 83 c3 01 add $0x1,%ebx - 145: 3b 5d 0c cmp 0xc(%ebp),%ebx - 148: 7d 27 jge 171 + 128: 89 5d d4 mov %ebx,-0x2c(%ebp) + 12b: 83 c3 01 add $0x1,%ebx + 12e: 3b 5d 0c cmp 0xc(%ebp),%ebx + 131: 7d 27 jge 15a cc = read(0, &c, 1); - 14a: 83 ec 04 sub $0x4,%esp - 14d: 6a 01 push $0x1 - 14f: 57 push %edi - 150: 6a 00 push $0x0 - 152: e8 03 01 00 00 call 25a + 133: 83 ec 04 sub $0x4,%esp + 136: 6a 01 push $0x1 + 138: 57 push %edi + 139: 6a 00 push $0x0 + 13b: e8 f9 00 00 00 call 239 if(cc < 1) - 157: 83 c4 10 add $0x10,%esp - 15a: 85 c0 test %eax,%eax - 15c: 7e 13 jle 171 + 140: 83 c4 10 add $0x10,%esp + 143: 85 c0 test %eax,%eax + 145: 7e 13 jle 15a break; buf[i++] = c; - 15e: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 162: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) + 147: 0f b6 45 e7 movzbl -0x19(%ebp),%eax + 14b: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) if(c == '\n' || c == '\r') - 166: 3c 0a cmp $0xa,%al - 168: 74 04 je 16e - 16a: 3c 0d cmp $0xd,%al - 16c: 75 d1 jne 13f + 14f: 3c 0a cmp $0xa,%al + 151: 74 04 je 157 + 153: 3c 0d cmp $0xd,%al + 155: 75 d1 jne 128 for(i=0; i+1 < max; ){ - 16e: 89 5d d4 mov %ebx,-0x2c(%ebp) + 157: 89 5d d4 mov %ebx,-0x2c(%ebp) break; } buf[i] = '\0'; - 171: 8b 45 d4 mov -0x2c(%ebp),%eax - 174: c6 04 06 00 movb $0x0,(%esi,%eax,1) + 15a: 8b 45 d4 mov -0x2c(%ebp),%eax + 15d: c6 04 06 00 movb $0x0,(%esi,%eax,1) return buf; } - 178: 89 f0 mov %esi,%eax - 17a: 8d 65 f4 lea -0xc(%ebp),%esp - 17d: 5b pop %ebx - 17e: 5e pop %esi - 17f: 5f pop %edi - 180: 5d pop %ebp - 181: c3 ret + 161: 89 f0 mov %esi,%eax + 163: 8d 65 f4 lea -0xc(%ebp),%esp + 166: 5b pop %ebx + 167: 5e pop %esi + 168: 5f pop %edi + 169: 5d pop %ebp + 16a: c3 ret -00000182 : +0000016b : int stat(const char *n, struct stat *st) { - 182: f3 0f 1e fb endbr32 - 186: 55 push %ebp - 187: 89 e5 mov %esp,%ebp - 189: 56 push %esi - 18a: 53 push %ebx + 16b: 55 push %ebp + 16c: 89 e5 mov %esp,%ebp + 16e: 56 push %esi + 16f: 53 push %ebx int fd; int r; fd = open(n, O_RDONLY); - 18b: 83 ec 08 sub $0x8,%esp - 18e: 6a 00 push $0x0 - 190: ff 75 08 pushl 0x8(%ebp) - 193: e8 ea 00 00 00 call 282 + 170: 83 ec 08 sub $0x8,%esp + 173: 6a 00 push $0x0 + 175: ff 75 08 push 0x8(%ebp) + 178: e8 e4 00 00 00 call 261 if(fd < 0) - 198: 83 c4 10 add $0x10,%esp - 19b: 85 c0 test %eax,%eax - 19d: 78 24 js 1c3 - 19f: 89 c3 mov %eax,%ebx + 17d: 83 c4 10 add $0x10,%esp + 180: 85 c0 test %eax,%eax + 182: 78 24 js 1a8 + 184: 89 c3 mov %eax,%ebx return -1; r = fstat(fd, st); - 1a1: 83 ec 08 sub $0x8,%esp - 1a4: ff 75 0c pushl 0xc(%ebp) - 1a7: 50 push %eax - 1a8: e8 ed 00 00 00 call 29a - 1ad: 89 c6 mov %eax,%esi + 186: 83 ec 08 sub $0x8,%esp + 189: ff 75 0c push 0xc(%ebp) + 18c: 50 push %eax + 18d: e8 e7 00 00 00 call 279 + 192: 89 c6 mov %eax,%esi close(fd); - 1af: 89 1c 24 mov %ebx,(%esp) - 1b2: e8 b3 00 00 00 call 26a + 194: 89 1c 24 mov %ebx,(%esp) + 197: e8 ad 00 00 00 call 249 return r; - 1b7: 83 c4 10 add $0x10,%esp + 19c: 83 c4 10 add $0x10,%esp } - 1ba: 89 f0 mov %esi,%eax - 1bc: 8d 65 f8 lea -0x8(%ebp),%esp - 1bf: 5b pop %ebx - 1c0: 5e pop %esi - 1c1: 5d pop %ebp - 1c2: c3 ret + 19f: 89 f0 mov %esi,%eax + 1a1: 8d 65 f8 lea -0x8(%ebp),%esp + 1a4: 5b pop %ebx + 1a5: 5e pop %esi + 1a6: 5d pop %ebp + 1a7: c3 ret return -1; - 1c3: be ff ff ff ff mov $0xffffffff,%esi - 1c8: eb f0 jmp 1ba + 1a8: be ff ff ff ff mov $0xffffffff,%esi + 1ad: eb f0 jmp 19f -000001ca : +000001af : int atoi(const char *s) { - 1ca: f3 0f 1e fb endbr32 - 1ce: 55 push %ebp - 1cf: 89 e5 mov %esp,%ebp - 1d1: 53 push %ebx - 1d2: 8b 55 08 mov 0x8(%ebp),%edx + 1af: 55 push %ebp + 1b0: 89 e5 mov %esp,%ebp + 1b2: 53 push %ebx + 1b3: 8b 55 08 mov 0x8(%ebp),%edx int n; n = 0; while('0' <= *s && *s <= '9') - 1d5: 0f b6 02 movzbl (%edx),%eax - 1d8: 8d 48 d0 lea -0x30(%eax),%ecx - 1db: 80 f9 09 cmp $0x9,%cl - 1de: 77 22 ja 202 + 1b6: 0f b6 02 movzbl (%edx),%eax + 1b9: 8d 48 d0 lea -0x30(%eax),%ecx + 1bc: 80 f9 09 cmp $0x9,%cl + 1bf: 77 24 ja 1e5 n = 0; - 1e0: b9 00 00 00 00 mov $0x0,%ecx + 1c1: b9 00 00 00 00 mov $0x0,%ecx n = n*10 + *s++ - '0'; - 1e5: 83 c2 01 add $0x1,%edx - 1e8: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 1eb: 0f be c0 movsbl %al,%eax - 1ee: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx + 1c6: 83 c2 01 add $0x1,%edx + 1c9: 8d 0c 89 lea (%ecx,%ecx,4),%ecx + 1cc: 0f be c0 movsbl %al,%eax + 1cf: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx while('0' <= *s && *s <= '9') - 1f2: 0f b6 02 movzbl (%edx),%eax - 1f5: 8d 58 d0 lea -0x30(%eax),%ebx - 1f8: 80 fb 09 cmp $0x9,%bl - 1fb: 76 e8 jbe 1e5 + 1d3: 0f b6 02 movzbl (%edx),%eax + 1d6: 8d 58 d0 lea -0x30(%eax),%ebx + 1d9: 80 fb 09 cmp $0x9,%bl + 1dc: 76 e8 jbe 1c6 return n; } - 1fd: 89 c8 mov %ecx,%eax - 1ff: 5b pop %ebx - 200: 5d pop %ebp - 201: c3 ret + 1de: 89 c8 mov %ecx,%eax + 1e0: 8b 5d fc mov -0x4(%ebp),%ebx + 1e3: c9 leave + 1e4: c3 ret n = 0; - 202: b9 00 00 00 00 mov $0x0,%ecx + 1e5: b9 00 00 00 00 mov $0x0,%ecx return n; - 207: eb f4 jmp 1fd + 1ea: eb f2 jmp 1de -00000209 : +000001ec : void* memmove(void *vdst, const void *vsrc, int n) { - 209: f3 0f 1e fb endbr32 - 20d: 55 push %ebp - 20e: 89 e5 mov %esp,%ebp - 210: 56 push %esi - 211: 53 push %ebx - 212: 8b 75 08 mov 0x8(%ebp),%esi - 215: 8b 55 0c mov 0xc(%ebp),%edx - 218: 8b 5d 10 mov 0x10(%ebp),%ebx + 1ec: 55 push %ebp + 1ed: 89 e5 mov %esp,%ebp + 1ef: 56 push %esi + 1f0: 53 push %ebx + 1f1: 8b 75 08 mov 0x8(%ebp),%esi + 1f4: 8b 55 0c mov 0xc(%ebp),%edx + 1f7: 8b 5d 10 mov 0x10(%ebp),%ebx char *dst; const char *src; dst = vdst; src = vsrc; while(n-- > 0) - 21b: 85 db test %ebx,%ebx - 21d: 7e 15 jle 234 - 21f: 01 f3 add %esi,%ebx + 1fa: 85 db test %ebx,%ebx + 1fc: 7e 15 jle 213 + 1fe: 01 f3 add %esi,%ebx dst = vdst; - 221: 89 f0 mov %esi,%eax + 200: 89 f0 mov %esi,%eax *dst++ = *src++; - 223: 83 c2 01 add $0x1,%edx - 226: 83 c0 01 add $0x1,%eax - 229: 0f b6 4a ff movzbl -0x1(%edx),%ecx - 22d: 88 48 ff mov %cl,-0x1(%eax) + 202: 83 c2 01 add $0x1,%edx + 205: 83 c0 01 add $0x1,%eax + 208: 0f b6 4a ff movzbl -0x1(%edx),%ecx + 20c: 88 48 ff mov %cl,-0x1(%eax) while(n-- > 0) - 230: 39 c3 cmp %eax,%ebx - 232: 75 ef jne 223 + 20f: 39 c3 cmp %eax,%ebx + 211: 75 ef jne 202 return vdst; } - 234: 89 f0 mov %esi,%eax - 236: 5b pop %ebx - 237: 5e pop %esi - 238: 5d pop %ebp - 239: c3 ret + 213: 89 f0 mov %esi,%eax + 215: 5b pop %ebx + 216: 5e pop %esi + 217: 5d pop %ebp + 218: c3 ret -0000023a : +00000219 : name: \ movl $SYS_ ## name, %eax; \ int $T_SYSCALL; \ ret SYSCALL(fork) - 23a: b8 01 00 00 00 mov $0x1,%eax - 23f: cd 40 int $0x40 - 241: c3 ret + 219: b8 01 00 00 00 mov $0x1,%eax + 21e: cd 40 int $0x40 + 220: c3 ret -00000242 : +00000221 : SYSCALL(exit) - 242: b8 02 00 00 00 mov $0x2,%eax - 247: cd 40 int $0x40 - 249: c3 ret + 221: b8 02 00 00 00 mov $0x2,%eax + 226: cd 40 int $0x40 + 228: c3 ret -0000024a : +00000229 : SYSCALL(wait) - 24a: b8 03 00 00 00 mov $0x3,%eax - 24f: cd 40 int $0x40 - 251: c3 ret + 229: b8 03 00 00 00 mov $0x3,%eax + 22e: cd 40 int $0x40 + 230: c3 ret -00000252 : +00000231 : SYSCALL(pipe) - 252: b8 04 00 00 00 mov $0x4,%eax - 257: cd 40 int $0x40 - 259: c3 ret + 231: b8 04 00 00 00 mov $0x4,%eax + 236: cd 40 int $0x40 + 238: c3 ret -0000025a : +00000239 : SYSCALL(read) - 25a: b8 05 00 00 00 mov $0x5,%eax - 25f: cd 40 int $0x40 - 261: c3 ret + 239: b8 05 00 00 00 mov $0x5,%eax + 23e: cd 40 int $0x40 + 240: c3 ret -00000262 : +00000241 : SYSCALL(write) - 262: b8 10 00 00 00 mov $0x10,%eax - 267: cd 40 int $0x40 - 269: c3 ret + 241: b8 10 00 00 00 mov $0x10,%eax + 246: cd 40 int $0x40 + 248: c3 ret -0000026a : +00000249 : SYSCALL(close) - 26a: b8 15 00 00 00 mov $0x15,%eax - 26f: cd 40 int $0x40 - 271: c3 ret + 249: b8 15 00 00 00 mov $0x15,%eax + 24e: cd 40 int $0x40 + 250: c3 ret -00000272 : +00000251 : SYSCALL(kill) - 272: b8 06 00 00 00 mov $0x6,%eax - 277: cd 40 int $0x40 - 279: c3 ret + 251: b8 06 00 00 00 mov $0x6,%eax + 256: cd 40 int $0x40 + 258: c3 ret -0000027a : +00000259 : SYSCALL(exec) - 27a: b8 07 00 00 00 mov $0x7,%eax - 27f: cd 40 int $0x40 - 281: c3 ret + 259: b8 07 00 00 00 mov $0x7,%eax + 25e: cd 40 int $0x40 + 260: c3 ret -00000282 : +00000261 : SYSCALL(open) - 282: b8 0f 00 00 00 mov $0xf,%eax - 287: cd 40 int $0x40 - 289: c3 ret + 261: b8 0f 00 00 00 mov $0xf,%eax + 266: cd 40 int $0x40 + 268: c3 ret -0000028a : +00000269 : SYSCALL(mknod) - 28a: b8 11 00 00 00 mov $0x11,%eax - 28f: cd 40 int $0x40 - 291: c3 ret + 269: b8 11 00 00 00 mov $0x11,%eax + 26e: cd 40 int $0x40 + 270: c3 ret -00000292 : +00000271 : SYSCALL(unlink) - 292: b8 12 00 00 00 mov $0x12,%eax - 297: cd 40 int $0x40 - 299: c3 ret + 271: b8 12 00 00 00 mov $0x12,%eax + 276: cd 40 int $0x40 + 278: c3 ret -0000029a : +00000279 : SYSCALL(fstat) - 29a: b8 08 00 00 00 mov $0x8,%eax - 29f: cd 40 int $0x40 - 2a1: c3 ret + 279: b8 08 00 00 00 mov $0x8,%eax + 27e: cd 40 int $0x40 + 280: c3 ret -000002a2 : +00000281 : SYSCALL(link) - 2a2: b8 13 00 00 00 mov $0x13,%eax - 2a7: cd 40 int $0x40 - 2a9: c3 ret + 281: b8 13 00 00 00 mov $0x13,%eax + 286: cd 40 int $0x40 + 288: c3 ret -000002aa : +00000289 : SYSCALL(mkdir) - 2aa: b8 14 00 00 00 mov $0x14,%eax - 2af: cd 40 int $0x40 - 2b1: c3 ret + 289: b8 14 00 00 00 mov $0x14,%eax + 28e: cd 40 int $0x40 + 290: c3 ret -000002b2 : +00000291 : SYSCALL(chdir) - 2b2: b8 09 00 00 00 mov $0x9,%eax - 2b7: cd 40 int $0x40 - 2b9: c3 ret + 291: b8 09 00 00 00 mov $0x9,%eax + 296: cd 40 int $0x40 + 298: c3 ret -000002ba : +00000299 : SYSCALL(dup) - 2ba: b8 0a 00 00 00 mov $0xa,%eax - 2bf: cd 40 int $0x40 - 2c1: c3 ret + 299: b8 0a 00 00 00 mov $0xa,%eax + 29e: cd 40 int $0x40 + 2a0: c3 ret -000002c2 : +000002a1 : SYSCALL(getpid) - 2c2: b8 0b 00 00 00 mov $0xb,%eax - 2c7: cd 40 int $0x40 - 2c9: c3 ret + 2a1: b8 0b 00 00 00 mov $0xb,%eax + 2a6: cd 40 int $0x40 + 2a8: c3 ret -000002ca : +000002a9 : SYSCALL(sbrk) - 2ca: b8 0c 00 00 00 mov $0xc,%eax - 2cf: cd 40 int $0x40 - 2d1: c3 ret + 2a9: b8 0c 00 00 00 mov $0xc,%eax + 2ae: cd 40 int $0x40 + 2b0: c3 ret -000002d2 : +000002b1 : SYSCALL(sleep) - 2d2: b8 0d 00 00 00 mov $0xd,%eax - 2d7: cd 40 int $0x40 - 2d9: c3 ret + 2b1: b8 0d 00 00 00 mov $0xd,%eax + 2b6: cd 40 int $0x40 + 2b8: c3 ret -000002da : +000002b9 : SYSCALL(uptime) - 2da: b8 0e 00 00 00 mov $0xe,%eax - 2df: cd 40 int $0x40 - 2e1: c3 ret + 2b9: b8 0e 00 00 00 mov $0xe,%eax + 2be: cd 40 int $0x40 + 2c0: c3 ret -000002e2 : +000002c1 : SYSCALL(slabtest) - 2e2: b8 16 00 00 00 mov $0x16,%eax - 2e7: cd 40 int $0x40 - 2e9: c3 ret + 2c1: b8 16 00 00 00 mov $0x16,%eax + 2c6: cd 40 int $0x40 + 2c8: c3 ret -000002ea : +000002c9 : SYSCALL(ps) - 2ea: b8 17 00 00 00 mov $0x17,%eax - 2ef: cd 40 int $0x40 - 2f1: c3 ret + 2c9: b8 17 00 00 00 mov $0x17,%eax + 2ce: cd 40 int $0x40 + 2d0: c3 ret -000002f2 : +000002d1 : write(fd, &c, 1); } static void printint(int fd, int xx, int base, int sgn) { - 2f2: 55 push %ebp - 2f3: 89 e5 mov %esp,%ebp - 2f5: 57 push %edi - 2f6: 56 push %esi - 2f7: 53 push %ebx - 2f8: 83 ec 3c sub $0x3c,%esp - 2fb: 89 45 c4 mov %eax,-0x3c(%ebp) - 2fe: 89 d3 mov %edx,%ebx + 2d1: 55 push %ebp + 2d2: 89 e5 mov %esp,%ebp + 2d4: 57 push %edi + 2d5: 56 push %esi + 2d6: 53 push %ebx + 2d7: 83 ec 3c sub $0x3c,%esp + 2da: 89 45 c4 mov %eax,-0x3c(%ebp) + 2dd: 89 ce mov %ecx,%esi char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 300: 83 7d 08 00 cmpl $0x0,0x8(%ebp) - 304: 74 77 je 37d - 306: 85 d2 test %edx,%edx - 308: 79 73 jns 37d + 2df: 83 7d 08 00 cmpl $0x0,0x8(%ebp) + 2e3: 74 79 je 35e + 2e5: 85 d2 test %edx,%edx + 2e7: 79 75 jns 35e neg = 1; x = -xx; - 30a: f7 db neg %ebx + 2e9: 89 d1 mov %edx,%ecx + 2eb: f7 d9 neg %ecx neg = 1; - 30c: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) + 2ed: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) } else { x = xx; } i = 0; - 313: be 00 00 00 00 mov $0x0,%esi + 2f4: bb 00 00 00 00 mov $0x0,%ebx do{ buf[i++] = digits[x % base]; - 318: 89 f7 mov %esi,%edi - 31a: 83 c6 01 add $0x1,%esi - 31d: 89 d8 mov %ebx,%eax - 31f: ba 00 00 00 00 mov $0x0,%edx - 324: f7 f1 div %ecx - 326: 0f b6 92 bc 06 00 00 movzbl 0x6bc(%edx),%edx - 32d: 88 54 35 d7 mov %dl,-0x29(%ebp,%esi,1) + 2f9: 89 df mov %ebx,%edi + 2fb: 83 c3 01 add $0x1,%ebx + 2fe: 89 c8 mov %ecx,%eax + 300: ba 00 00 00 00 mov $0x0,%edx + 305: f7 f6 div %esi + 307: 0f b6 92 d4 06 00 00 movzbl 0x6d4(%edx),%edx + 30e: 88 54 1d d7 mov %dl,-0x29(%ebp,%ebx,1) }while((x /= base) != 0); - 331: 89 da mov %ebx,%edx - 333: 89 c3 mov %eax,%ebx - 335: 39 d1 cmp %edx,%ecx - 337: 76 df jbe 318 + 312: 89 ca mov %ecx,%edx + 314: 89 c1 mov %eax,%ecx + 316: 39 d6 cmp %edx,%esi + 318: 76 df jbe 2f9 if(neg) - 339: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) - 33d: 74 08 je 347 + 31a: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) + 31e: 74 08 je 328 buf[i++] = '-'; - 33f: c6 44 35 d8 2d movb $0x2d,-0x28(%ebp,%esi,1) - 344: 8d 77 02 lea 0x2(%edi),%esi + 320: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) + 325: 8d 5f 02 lea 0x2(%edi),%ebx while(--i >= 0) - 347: 85 f6 test %esi,%esi - 349: 7e 2a jle 375 - 34b: 8d 5c 35 d7 lea -0x29(%ebp,%esi,1),%ebx - 34f: 8d 7d d8 lea -0x28(%ebp),%edi + 328: 85 db test %ebx,%ebx + 32a: 7e 2a jle 356 + 32c: 8d 7d d8 lea -0x28(%ebp),%edi + 32f: 8d 5c 1d d7 lea -0x29(%ebp,%ebx,1),%ebx write(fd, &c, 1); - 352: 8d 75 d7 lea -0x29(%ebp),%esi + 333: 8d 75 d7 lea -0x29(%ebp),%esi putc(fd, buf[i]); - 355: 0f b6 03 movzbl (%ebx),%eax - 358: 88 45 d7 mov %al,-0x29(%ebp) + 336: 0f b6 03 movzbl (%ebx),%eax + 339: 88 45 d7 mov %al,-0x29(%ebp) write(fd, &c, 1); - 35b: 83 ec 04 sub $0x4,%esp - 35e: 6a 01 push $0x1 - 360: 56 push %esi - 361: ff 75 c4 pushl -0x3c(%ebp) - 364: e8 f9 fe ff ff call 262 + 33c: 83 ec 04 sub $0x4,%esp + 33f: 6a 01 push $0x1 + 341: 56 push %esi + 342: ff 75 c4 push -0x3c(%ebp) + 345: e8 f7 fe ff ff call 241 while(--i >= 0) - 369: 89 d8 mov %ebx,%eax - 36b: 83 eb 01 sub $0x1,%ebx - 36e: 83 c4 10 add $0x10,%esp - 371: 39 f8 cmp %edi,%eax - 373: 75 e0 jne 355 + 34a: 89 d8 mov %ebx,%eax + 34c: 83 eb 01 sub $0x1,%ebx + 34f: 83 c4 10 add $0x10,%esp + 352: 39 f8 cmp %edi,%eax + 354: 75 e0 jne 336 } - 375: 8d 65 f4 lea -0xc(%ebp),%esp - 378: 5b pop %ebx - 379: 5e pop %esi - 37a: 5f pop %edi - 37b: 5d pop %ebp - 37c: c3 ret + 356: 8d 65 f4 lea -0xc(%ebp),%esp + 359: 5b pop %ebx + 35a: 5e pop %esi + 35b: 5f pop %edi + 35c: 5d pop %ebp + 35d: c3 ret + x = xx; + 35e: 89 d1 mov %edx,%ecx neg = 0; - 37d: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) - 384: eb 8d jmp 313 + 360: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) + 367: eb 8b jmp 2f4 -00000386 : +00000369 : // Print to the given fd. Only understands %d, %x, %p, %s. void printf(int fd, const char *fmt, ...) { - 386: f3 0f 1e fb endbr32 - 38a: 55 push %ebp - 38b: 89 e5 mov %esp,%ebp - 38d: 57 push %edi - 38e: 56 push %esi - 38f: 53 push %ebx - 390: 83 ec 2c sub $0x2c,%esp + 369: 55 push %ebp + 36a: 89 e5 mov %esp,%ebp + 36c: 57 push %edi + 36d: 56 push %esi + 36e: 53 push %ebx + 36f: 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++){ - 393: 8b 75 0c mov 0xc(%ebp),%esi - 396: 0f b6 1e movzbl (%esi),%ebx - 399: 84 db test %bl,%bl - 39b: 0f 84 ab 01 00 00 je 54c - 3a1: 83 c6 01 add $0x1,%esi + 372: 8b 75 0c mov 0xc(%ebp),%esi + 375: 0f b6 1e movzbl (%esi),%ebx + 378: 84 db test %bl,%bl + 37a: 0f 84 9f 01 00 00 je 51f + 380: 83 c6 01 add $0x1,%esi ap = (uint*)(void*)&fmt + 1; - 3a4: 8d 45 10 lea 0x10(%ebp),%eax - 3a7: 89 45 d4 mov %eax,-0x2c(%ebp) + 383: 8d 45 10 lea 0x10(%ebp),%eax + 386: 89 45 d4 mov %eax,-0x2c(%ebp) state = 0; - 3aa: bf 00 00 00 00 mov $0x0,%edi - 3af: eb 2d jmp 3de + 389: bf 00 00 00 00 mov $0x0,%edi + 38e: eb 2d jmp 3bd c = fmt[i] & 0xff; if(state == 0){ if(c == '%'){ state = '%'; } else { putc(fd, c); - 3b1: 88 5d e7 mov %bl,-0x19(%ebp) + 390: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 3b4: 83 ec 04 sub $0x4,%esp - 3b7: 6a 01 push $0x1 - 3b9: 8d 45 e7 lea -0x19(%ebp),%eax - 3bc: 50 push %eax - 3bd: ff 75 08 pushl 0x8(%ebp) - 3c0: e8 9d fe ff ff call 262 + 393: 83 ec 04 sub $0x4,%esp + 396: 6a 01 push $0x1 + 398: 8d 45 e7 lea -0x19(%ebp),%eax + 39b: 50 push %eax + 39c: ff 75 08 push 0x8(%ebp) + 39f: e8 9d fe ff ff call 241 putc(fd, c); - 3c5: 83 c4 10 add $0x10,%esp - 3c8: eb 05 jmp 3cf + 3a4: 83 c4 10 add $0x10,%esp + 3a7: eb 05 jmp 3ae } } else if(state == '%'){ - 3ca: 83 ff 25 cmp $0x25,%edi - 3cd: 74 22 je 3f1 + 3a9: 83 ff 25 cmp $0x25,%edi + 3ac: 74 1f je 3cd for(i = 0; fmt[i]; i++){ - 3cf: 83 c6 01 add $0x1,%esi - 3d2: 0f b6 5e ff movzbl -0x1(%esi),%ebx - 3d6: 84 db test %bl,%bl - 3d8: 0f 84 6e 01 00 00 je 54c + 3ae: 83 c6 01 add $0x1,%esi + 3b1: 0f b6 5e ff movzbl -0x1(%esi),%ebx + 3b5: 84 db test %bl,%bl + 3b7: 0f 84 62 01 00 00 je 51f c = fmt[i] & 0xff; - 3de: 0f be d3 movsbl %bl,%edx - 3e1: 0f b6 c3 movzbl %bl,%eax + 3bd: 0f b6 c3 movzbl %bl,%eax if(state == 0){ - 3e4: 85 ff test %edi,%edi - 3e6: 75 e2 jne 3ca + 3c0: 85 ff test %edi,%edi + 3c2: 75 e5 jne 3a9 if(c == '%'){ - 3e8: 83 f8 25 cmp $0x25,%eax - 3eb: 75 c4 jne 3b1 + 3c4: 83 f8 25 cmp $0x25,%eax + 3c7: 75 c7 jne 390 state = '%'; - 3ed: 89 c7 mov %eax,%edi - 3ef: eb de jmp 3cf + 3c9: 89 c7 mov %eax,%edi + 3cb: eb e1 jmp 3ae if(c == 'd'){ - 3f1: 83 f8 64 cmp $0x64,%eax - 3f4: 74 59 je 44f + 3cd: 83 f8 25 cmp $0x25,%eax + 3d0: 0f 84 f2 00 00 00 je 4c8 + 3d6: 8d 50 9d lea -0x63(%eax),%edx + 3d9: 83 fa 15 cmp $0x15,%edx + 3dc: 0f 87 07 01 00 00 ja 4e9 + 3e2: 0f 87 01 01 00 00 ja 4e9 + 3e8: ff 24 95 7c 06 00 00 jmp *0x67c(,%edx,4) printint(fd, *ap, 10, 1); + 3ef: 83 ec 0c sub $0xc,%esp + 3f2: 6a 01 push $0x1 + 3f4: b9 0a 00 00 00 mov $0xa,%ecx + 3f9: 8b 7d d4 mov -0x2c(%ebp),%edi + 3fc: 8b 17 mov (%edi),%edx + 3fe: 8b 45 08 mov 0x8(%ebp),%eax + 401: e8 cb fe ff ff call 2d1 ap++; - } else if(c == 'x' || c == 'p'){ - 3f6: 81 e2 f7 00 00 00 and $0xf7,%edx - 3fc: 83 fa 70 cmp $0x70,%edx - 3ff: 74 7a je 47b - printint(fd, *ap, 16, 0); - ap++; - } else if(c == 's'){ - 401: 83 f8 73 cmp $0x73,%eax - 404: 0f 84 9d 00 00 00 je 4a7 - s = "(null)"; - while(*s != 0){ - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 40a: 83 f8 63 cmp $0x63,%eax - 40d: 0f 84 ec 00 00 00 je 4ff - putc(fd, *ap); - ap++; - } else if(c == '%'){ - 413: 83 f8 25 cmp $0x25,%eax - 416: 0f 84 0f 01 00 00 je 52b - putc(fd, c); + 406: 89 f8 mov %edi,%eax + 408: 83 c0 04 add $0x4,%eax + 40b: 89 45 d4 mov %eax,-0x2c(%ebp) + 40e: 83 c4 10 add $0x10,%esp } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); - 41c: c6 45 e7 25 movb $0x25,-0x19(%ebp) - write(fd, &c, 1); - 420: 83 ec 04 sub $0x4,%esp - 423: 6a 01 push $0x1 - 425: 8d 45 e7 lea -0x19(%ebp),%eax - 428: 50 push %eax - 429: ff 75 08 pushl 0x8(%ebp) - 42c: e8 31 fe ff ff call 262 putc(fd, c); - 431: 88 5d e7 mov %bl,-0x19(%ebp) - write(fd, &c, 1); - 434: 83 c4 0c add $0xc,%esp - 437: 6a 01 push $0x1 - 439: 8d 45 e7 lea -0x19(%ebp),%eax - 43c: 50 push %eax - 43d: ff 75 08 pushl 0x8(%ebp) - 440: e8 1d fe ff ff call 262 - putc(fd, c); - 445: 83 c4 10 add $0x10,%esp } state = 0; - 448: bf 00 00 00 00 mov $0x0,%edi - 44d: eb 80 jmp 3cf - printint(fd, *ap, 10, 1); - 44f: 83 ec 0c sub $0xc,%esp - 452: 6a 01 push $0x1 - 454: b9 0a 00 00 00 mov $0xa,%ecx - 459: 8b 7d d4 mov -0x2c(%ebp),%edi - 45c: 8b 17 mov (%edi),%edx - 45e: 8b 45 08 mov 0x8(%ebp),%eax - 461: e8 8c fe ff ff call 2f2 - ap++; - 466: 89 f8 mov %edi,%eax - 468: 83 c0 04 add $0x4,%eax - 46b: 89 45 d4 mov %eax,-0x2c(%ebp) - 46e: 83 c4 10 add $0x10,%esp - state = 0; - 471: bf 00 00 00 00 mov $0x0,%edi - 476: e9 54 ff ff ff jmp 3cf + 411: bf 00 00 00 00 mov $0x0,%edi + 416: eb 96 jmp 3ae printint(fd, *ap, 16, 0); - 47b: 83 ec 0c sub $0xc,%esp - 47e: 6a 00 push $0x0 - 480: b9 10 00 00 00 mov $0x10,%ecx - 485: 8b 7d d4 mov -0x2c(%ebp),%edi - 488: 8b 17 mov (%edi),%edx - 48a: 8b 45 08 mov 0x8(%ebp),%eax - 48d: e8 60 fe ff ff call 2f2 + 418: 83 ec 0c sub $0xc,%esp + 41b: 6a 00 push $0x0 + 41d: b9 10 00 00 00 mov $0x10,%ecx + 422: 8b 7d d4 mov -0x2c(%ebp),%edi + 425: 8b 17 mov (%edi),%edx + 427: 8b 45 08 mov 0x8(%ebp),%eax + 42a: e8 a2 fe ff ff call 2d1 ap++; - 492: 89 f8 mov %edi,%eax - 494: 83 c0 04 add $0x4,%eax - 497: 89 45 d4 mov %eax,-0x2c(%ebp) - 49a: 83 c4 10 add $0x10,%esp + 42f: 89 f8 mov %edi,%eax + 431: 83 c0 04 add $0x4,%eax + 434: 89 45 d4 mov %eax,-0x2c(%ebp) + 437: 83 c4 10 add $0x10,%esp state = 0; - 49d: bf 00 00 00 00 mov $0x0,%edi - 4a2: e9 28 ff ff ff jmp 3cf + 43a: bf 00 00 00 00 mov $0x0,%edi + 43f: e9 6a ff ff ff jmp 3ae s = (char*)*ap; - 4a7: 8b 4d d4 mov -0x2c(%ebp),%ecx - 4aa: 8b 01 mov (%ecx),%eax + 444: 8b 4d d4 mov -0x2c(%ebp),%ecx + 447: 8b 01 mov (%ecx),%eax ap++; - 4ac: 83 c1 04 add $0x4,%ecx - 4af: 89 4d d4 mov %ecx,-0x2c(%ebp) + 449: 83 c1 04 add $0x4,%ecx + 44c: 89 4d d4 mov %ecx,-0x2c(%ebp) if(s == 0) - 4b2: 85 c0 test %eax,%eax - 4b4: 74 13 je 4c9 + 44f: 85 c0 test %eax,%eax + 451: 74 13 je 466 s = (char*)*ap; - 4b6: 89 c3 mov %eax,%ebx + 453: 89 c3 mov %eax,%ebx while(*s != 0){ - 4b8: 0f b6 00 movzbl (%eax),%eax + 455: 0f b6 00 movzbl (%eax),%eax state = 0; - 4bb: bf 00 00 00 00 mov $0x0,%edi + 458: bf 00 00 00 00 mov $0x0,%edi while(*s != 0){ - 4c0: 84 c0 test %al,%al - 4c2: 75 0f jne 4d3 - 4c4: e9 06 ff ff ff jmp 3cf + 45d: 84 c0 test %al,%al + 45f: 75 0f jne 470 + 461: e9 48 ff ff ff jmp 3ae s = "(null)"; - 4c9: bb b4 06 00 00 mov $0x6b4,%ebx + 466: bb 74 06 00 00 mov $0x674,%ebx while(*s != 0){ - 4ce: b8 28 00 00 00 mov $0x28,%eax - 4d3: 8b 7d 08 mov 0x8(%ebp),%edi + 46b: b8 28 00 00 00 mov $0x28,%eax + 470: 8b 7d 08 mov 0x8(%ebp),%edi putc(fd, *s); - 4d6: 88 45 e7 mov %al,-0x19(%ebp) + 473: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 4d9: 83 ec 04 sub $0x4,%esp - 4dc: 6a 01 push $0x1 - 4de: 8d 45 e7 lea -0x19(%ebp),%eax - 4e1: 50 push %eax - 4e2: 57 push %edi - 4e3: e8 7a fd ff ff call 262 + 476: 83 ec 04 sub $0x4,%esp + 479: 6a 01 push $0x1 + 47b: 8d 45 e7 lea -0x19(%ebp),%eax + 47e: 50 push %eax + 47f: 57 push %edi + 480: e8 bc fd ff ff call 241 s++; - 4e8: 83 c3 01 add $0x1,%ebx + 485: 83 c3 01 add $0x1,%ebx while(*s != 0){ - 4eb: 0f b6 03 movzbl (%ebx),%eax - 4ee: 83 c4 10 add $0x10,%esp - 4f1: 84 c0 test %al,%al - 4f3: 75 e1 jne 4d6 + 488: 0f b6 03 movzbl (%ebx),%eax + 48b: 83 c4 10 add $0x10,%esp + 48e: 84 c0 test %al,%al + 490: 75 e1 jne 473 state = 0; - 4f5: bf 00 00 00 00 mov $0x0,%edi - 4fa: e9 d0 fe ff ff jmp 3cf + 492: bf 00 00 00 00 mov $0x0,%edi + 497: e9 12 ff ff ff jmp 3ae putc(fd, *ap); - 4ff: 8b 7d d4 mov -0x2c(%ebp),%edi - 502: 8b 07 mov (%edi),%eax - 504: 88 45 e7 mov %al,-0x19(%ebp) + 49c: 8b 7d d4 mov -0x2c(%ebp),%edi + 49f: 8b 07 mov (%edi),%eax + 4a1: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 507: 83 ec 04 sub $0x4,%esp - 50a: 6a 01 push $0x1 - 50c: 8d 45 e7 lea -0x19(%ebp),%eax - 50f: 50 push %eax - 510: ff 75 08 pushl 0x8(%ebp) - 513: e8 4a fd ff ff call 262 + 4a4: 83 ec 04 sub $0x4,%esp + 4a7: 6a 01 push $0x1 + 4a9: 8d 45 e7 lea -0x19(%ebp),%eax + 4ac: 50 push %eax + 4ad: ff 75 08 push 0x8(%ebp) + 4b0: e8 8c fd ff ff call 241 ap++; - 518: 83 c7 04 add $0x4,%edi - 51b: 89 7d d4 mov %edi,-0x2c(%ebp) - 51e: 83 c4 10 add $0x10,%esp + 4b5: 83 c7 04 add $0x4,%edi + 4b8: 89 7d d4 mov %edi,-0x2c(%ebp) + 4bb: 83 c4 10 add $0x10,%esp state = 0; - 521: bf 00 00 00 00 mov $0x0,%edi - 526: e9 a4 fe ff ff jmp 3cf + 4be: bf 00 00 00 00 mov $0x0,%edi + 4c3: e9 e6 fe ff ff jmp 3ae putc(fd, c); - 52b: 88 5d e7 mov %bl,-0x19(%ebp) + 4c8: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 52e: 83 ec 04 sub $0x4,%esp - 531: 6a 01 push $0x1 - 533: 8d 45 e7 lea -0x19(%ebp),%eax - 536: 50 push %eax - 537: ff 75 08 pushl 0x8(%ebp) - 53a: e8 23 fd ff ff call 262 - 53f: 83 c4 10 add $0x10,%esp + 4cb: 83 ec 04 sub $0x4,%esp + 4ce: 6a 01 push $0x1 + 4d0: 8d 45 e7 lea -0x19(%ebp),%eax + 4d3: 50 push %eax + 4d4: ff 75 08 push 0x8(%ebp) + 4d7: e8 65 fd ff ff call 241 + 4dc: 83 c4 10 add $0x10,%esp + state = 0; + 4df: bf 00 00 00 00 mov $0x0,%edi + 4e4: e9 c5 fe ff ff jmp 3ae + putc(fd, '%'); + 4e9: c6 45 e7 25 movb $0x25,-0x19(%ebp) + write(fd, &c, 1); + 4ed: 83 ec 04 sub $0x4,%esp + 4f0: 6a 01 push $0x1 + 4f2: 8d 45 e7 lea -0x19(%ebp),%eax + 4f5: 50 push %eax + 4f6: ff 75 08 push 0x8(%ebp) + 4f9: e8 43 fd ff ff call 241 + putc(fd, c); + 4fe: 88 5d e7 mov %bl,-0x19(%ebp) + write(fd, &c, 1); + 501: 83 c4 0c add $0xc,%esp + 504: 6a 01 push $0x1 + 506: 8d 45 e7 lea -0x19(%ebp),%eax + 509: 50 push %eax + 50a: ff 75 08 push 0x8(%ebp) + 50d: e8 2f fd ff ff call 241 + putc(fd, c); + 512: 83 c4 10 add $0x10,%esp state = 0; - 542: bf 00 00 00 00 mov $0x0,%edi - 547: e9 83 fe ff ff jmp 3cf + 515: bf 00 00 00 00 mov $0x0,%edi + 51a: e9 8f fe ff ff jmp 3ae } } } - 54c: 8d 65 f4 lea -0xc(%ebp),%esp - 54f: 5b pop %ebx - 550: 5e pop %esi - 551: 5f pop %edi - 552: 5d pop %ebp - 553: c3 ret - -00000554 : + 51f: 8d 65 f4 lea -0xc(%ebp),%esp + 522: 5b pop %ebx + 523: 5e pop %esi + 524: 5f pop %edi + 525: 5d pop %ebp + 526: c3 ret + +00000527 : static Header base; static Header *freep; void free(void *ap) { - 554: f3 0f 1e fb endbr32 - 558: 55 push %ebp - 559: 89 e5 mov %esp,%ebp - 55b: 57 push %edi - 55c: 56 push %esi - 55d: 53 push %ebx - 55e: 8b 5d 08 mov 0x8(%ebp),%ebx + 527: 55 push %ebp + 528: 89 e5 mov %esp,%ebp + 52a: 57 push %edi + 52b: 56 push %esi + 52c: 53 push %ebx + 52d: 8b 5d 08 mov 0x8(%ebp),%ebx Header *bp, *p; bp = (Header*)ap - 1; - 561: 8d 4b f8 lea -0x8(%ebx),%ecx + 530: 8d 4b f8 lea -0x8(%ebx),%ecx for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 564: a1 2c 09 00 00 mov 0x92c,%eax - 569: eb 0c jmp 577 + 533: a1 48 09 00 00 mov 0x948,%eax + 538: eb 0c jmp 546 if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 56b: 8b 10 mov (%eax),%edx - 56d: 39 c2 cmp %eax,%edx - 56f: 77 04 ja 575 - 571: 39 ca cmp %ecx,%edx - 573: 77 10 ja 585 + 53a: 8b 10 mov (%eax),%edx + 53c: 39 c2 cmp %eax,%edx + 53e: 77 04 ja 544 + 540: 39 ca cmp %ecx,%edx + 542: 77 10 ja 554 { - 575: 89 d0 mov %edx,%eax + 544: 89 d0 mov %edx,%eax for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 577: 39 c8 cmp %ecx,%eax - 579: 73 f0 jae 56b - 57b: 8b 10 mov (%eax),%edx - 57d: 39 ca cmp %ecx,%edx - 57f: 77 04 ja 585 + 546: 39 c8 cmp %ecx,%eax + 548: 73 f0 jae 53a + 54a: 8b 10 mov (%eax),%edx + 54c: 39 ca cmp %ecx,%edx + 54e: 77 04 ja 554 if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 581: 39 c2 cmp %eax,%edx - 583: 77 f0 ja 575 + 550: 39 c2 cmp %eax,%edx + 552: 77 f0 ja 544 break; if(bp + bp->s.size == p->s.ptr){ - 585: 8b 73 fc mov -0x4(%ebx),%esi - 588: 8b 10 mov (%eax),%edx - 58a: 8d 3c f1 lea (%ecx,%esi,8),%edi - 58d: 39 fa cmp %edi,%edx - 58f: 74 19 je 5aa + 554: 8b 73 fc mov -0x4(%ebx),%esi + 557: 8b 10 mov (%eax),%edx + 559: 8d 3c f1 lea (%ecx,%esi,8),%edi + 55c: 39 fa cmp %edi,%edx + 55e: 74 19 je 579 bp->s.size += p->s.ptr->s.size; bp->s.ptr = p->s.ptr->s.ptr; + 560: 89 53 f8 mov %edx,-0x8(%ebx) } else bp->s.ptr = p->s.ptr; - 591: 89 53 f8 mov %edx,-0x8(%ebx) if(p + p->s.size == bp){ - 594: 8b 50 04 mov 0x4(%eax),%edx - 597: 8d 34 d0 lea (%eax,%edx,8),%esi - 59a: 39 f1 cmp %esi,%ecx - 59c: 74 1b je 5b9 + 563: 8b 50 04 mov 0x4(%eax),%edx + 566: 8d 34 d0 lea (%eax,%edx,8),%esi + 569: 39 f1 cmp %esi,%ecx + 56b: 74 18 je 585 p->s.size += bp->s.size; p->s.ptr = bp->s.ptr; + 56d: 89 08 mov %ecx,(%eax) } else p->s.ptr = bp; - 59e: 89 08 mov %ecx,(%eax) freep = p; - 5a0: a3 2c 09 00 00 mov %eax,0x92c + 56f: a3 48 09 00 00 mov %eax,0x948 } - 5a5: 5b pop %ebx - 5a6: 5e pop %esi - 5a7: 5f pop %edi - 5a8: 5d pop %ebp - 5a9: c3 ret + 574: 5b pop %ebx + 575: 5e pop %esi + 576: 5f pop %edi + 577: 5d pop %ebp + 578: c3 ret bp->s.size += p->s.ptr->s.size; - 5aa: 03 72 04 add 0x4(%edx),%esi - 5ad: 89 73 fc mov %esi,-0x4(%ebx) + 579: 03 72 04 add 0x4(%edx),%esi + 57c: 89 73 fc mov %esi,-0x4(%ebx) bp->s.ptr = p->s.ptr->s.ptr; - 5b0: 8b 10 mov (%eax),%edx - 5b2: 8b 12 mov (%edx),%edx - 5b4: 89 53 f8 mov %edx,-0x8(%ebx) - 5b7: eb db jmp 594 + 57f: 8b 10 mov (%eax),%edx + 581: 8b 12 mov (%edx),%edx + 583: eb db jmp 560 p->s.size += bp->s.size; - 5b9: 03 53 fc add -0x4(%ebx),%edx - 5bc: 89 50 04 mov %edx,0x4(%eax) + 585: 03 53 fc add -0x4(%ebx),%edx + 588: 89 50 04 mov %edx,0x4(%eax) p->s.ptr = bp->s.ptr; - 5bf: 8b 53 f8 mov -0x8(%ebx),%edx - 5c2: 89 10 mov %edx,(%eax) - 5c4: eb da jmp 5a0 + 58b: 8b 4b f8 mov -0x8(%ebx),%ecx + 58e: eb dd jmp 56d -000005c6 : +00000590 : return freep; } void* malloc(uint nbytes) { - 5c6: f3 0f 1e fb endbr32 - 5ca: 55 push %ebp - 5cb: 89 e5 mov %esp,%ebp - 5cd: 57 push %edi - 5ce: 56 push %esi - 5cf: 53 push %ebx - 5d0: 83 ec 0c sub $0xc,%esp + 590: 55 push %ebp + 591: 89 e5 mov %esp,%ebp + 593: 57 push %edi + 594: 56 push %esi + 595: 53 push %ebx + 596: 83 ec 0c sub $0xc,%esp Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 5d3: 8b 45 08 mov 0x8(%ebp),%eax - 5d6: 8d 58 07 lea 0x7(%eax),%ebx - 5d9: c1 eb 03 shr $0x3,%ebx - 5dc: 83 c3 01 add $0x1,%ebx + 599: 8b 45 08 mov 0x8(%ebp),%eax + 59c: 8d 58 07 lea 0x7(%eax),%ebx + 59f: c1 eb 03 shr $0x3,%ebx + 5a2: 83 c3 01 add $0x1,%ebx if((prevp = freep) == 0){ - 5df: 8b 15 2c 09 00 00 mov 0x92c,%edx - 5e5: 85 d2 test %edx,%edx - 5e7: 74 20 je 609 + 5a5: 8b 15 48 09 00 00 mov 0x948,%edx + 5ab: 85 d2 test %edx,%edx + 5ad: 74 1c je 5cb base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 5e9: 8b 02 mov (%edx),%eax + 5af: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 5eb: 8b 48 04 mov 0x4(%eax),%ecx - 5ee: 39 cb cmp %ecx,%ebx - 5f0: 76 3c jbe 62e - 5f2: 81 fb 00 10 00 00 cmp $0x1000,%ebx - 5f8: be 00 10 00 00 mov $0x1000,%esi - 5fd: 0f 43 f3 cmovae %ebx,%esi + 5b1: 8b 48 04 mov 0x4(%eax),%ecx + 5b4: 39 cb cmp %ecx,%ebx + 5b6: 76 38 jbe 5f0 + 5b8: be 00 10 00 00 mov $0x1000,%esi + 5bd: 39 f3 cmp %esi,%ebx + 5bf: 0f 43 f3 cmovae %ebx,%esi p = sbrk(nu * sizeof(Header)); - 600: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi - 607: eb 72 jmp 67b + 5c2: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi + 5c9: eb 72 jmp 63d base.s.ptr = freep = prevp = &base; - 609: c7 05 2c 09 00 00 30 movl $0x930,0x92c - 610: 09 00 00 - 613: c7 05 30 09 00 00 30 movl $0x930,0x930 - 61a: 09 00 00 + 5cb: c7 05 48 09 00 00 4c movl $0x94c,0x948 + 5d2: 09 00 00 + 5d5: c7 05 4c 09 00 00 4c movl $0x94c,0x94c + 5dc: 09 00 00 base.s.size = 0; - 61d: c7 05 34 09 00 00 00 movl $0x0,0x934 - 624: 00 00 00 + 5df: c7 05 50 09 00 00 00 movl $0x0,0x950 + 5e6: 00 00 00 for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 627: b8 30 09 00 00 mov $0x930,%eax - 62c: eb c4 jmp 5f2 + 5e9: b8 4c 09 00 00 mov $0x94c,%eax + 5ee: eb c8 jmp 5b8 if(p->s.size == nunits) - 62e: 39 cb cmp %ecx,%ebx - 630: 74 1e je 650 + 5f0: 39 cb cmp %ecx,%ebx + 5f2: 74 1e je 612 prevp->s.ptr = p->s.ptr; else { p->s.size -= nunits; - 632: 29 d9 sub %ebx,%ecx - 634: 89 48 04 mov %ecx,0x4(%eax) + 5f4: 29 d9 sub %ebx,%ecx + 5f6: 89 48 04 mov %ecx,0x4(%eax) p += p->s.size; - 637: 8d 04 c8 lea (%eax,%ecx,8),%eax + 5f9: 8d 04 c8 lea (%eax,%ecx,8),%eax p->s.size = nunits; - 63a: 89 58 04 mov %ebx,0x4(%eax) + 5fc: 89 58 04 mov %ebx,0x4(%eax) } freep = prevp; - 63d: 89 15 2c 09 00 00 mov %edx,0x92c + 5ff: 89 15 48 09 00 00 mov %edx,0x948 return (void*)(p + 1); - 643: 8d 50 08 lea 0x8(%eax),%edx + 605: 8d 50 08 lea 0x8(%eax),%edx } if(p == freep) if((p = morecore(nunits)) == 0) return 0; } } - 646: 89 d0 mov %edx,%eax - 648: 8d 65 f4 lea -0xc(%ebp),%esp - 64b: 5b pop %ebx - 64c: 5e pop %esi - 64d: 5f pop %edi - 64e: 5d pop %ebp - 64f: c3 ret + 608: 89 d0 mov %edx,%eax + 60a: 8d 65 f4 lea -0xc(%ebp),%esp + 60d: 5b pop %ebx + 60e: 5e pop %esi + 60f: 5f pop %edi + 610: 5d pop %ebp + 611: c3 ret prevp->s.ptr = p->s.ptr; - 650: 8b 08 mov (%eax),%ecx - 652: 89 0a mov %ecx,(%edx) - 654: eb e7 jmp 63d + 612: 8b 08 mov (%eax),%ecx + 614: 89 0a mov %ecx,(%edx) + 616: eb e7 jmp 5ff hp->s.size = nu; - 656: 89 70 04 mov %esi,0x4(%eax) + 618: 89 70 04 mov %esi,0x4(%eax) free((void*)(hp + 1)); - 659: 83 ec 0c sub $0xc,%esp - 65c: 83 c0 08 add $0x8,%eax - 65f: 50 push %eax - 660: e8 ef fe ff ff call 554 + 61b: 83 ec 0c sub $0xc,%esp + 61e: 83 c0 08 add $0x8,%eax + 621: 50 push %eax + 622: e8 00 ff ff ff call 527 return freep; - 665: 8b 15 2c 09 00 00 mov 0x92c,%edx + 627: 8b 15 48 09 00 00 mov 0x948,%edx if((p = morecore(nunits)) == 0) - 66b: 83 c4 10 add $0x10,%esp - 66e: 85 d2 test %edx,%edx - 670: 74 d4 je 646 + 62d: 83 c4 10 add $0x10,%esp + 630: 85 d2 test %edx,%edx + 632: 74 d4 je 608 for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 672: 8b 02 mov (%edx),%eax + 634: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 674: 8b 48 04 mov 0x4(%eax),%ecx - 677: 39 d9 cmp %ebx,%ecx - 679: 73 b3 jae 62e + 636: 8b 48 04 mov 0x4(%eax),%ecx + 639: 39 d9 cmp %ebx,%ecx + 63b: 73 b3 jae 5f0 if(p == freep) - 67b: 89 c2 mov %eax,%edx - 67d: 39 05 2c 09 00 00 cmp %eax,0x92c - 683: 75 ed jne 672 + 63d: 89 c2 mov %eax,%edx + 63f: 39 05 48 09 00 00 cmp %eax,0x948 + 645: 75 ed jne 634 p = sbrk(nu * sizeof(Header)); - 685: 83 ec 0c sub $0xc,%esp - 688: 57 push %edi - 689: e8 3c fc ff ff call 2ca + 647: 83 ec 0c sub $0xc,%esp + 64a: 57 push %edi + 64b: e8 59 fc ff ff call 2a9 if(p == (char*)-1) - 68e: 83 c4 10 add $0x10,%esp - 691: 83 f8 ff cmp $0xffffffff,%eax - 694: 75 c0 jne 656 + 650: 83 c4 10 add $0x10,%esp + 653: 83 f8 ff cmp $0xffffffff,%eax + 656: 75 c0 jne 618 return 0; - 696: ba 00 00 00 00 mov $0x0,%edx - 69b: eb a9 jmp 646 + 658: ba 00 00 00 00 mov $0x0,%edx + 65d: eb a9 jmp 608 diff --git a/src/user/kill.d b/src/user/kill.d new file mode 100644 index 0000000..a484589 --- /dev/null +++ b/src/user/kill.d @@ -0,0 +1 @@ +user/kill.o: user/kill.c /usr/include/stdc-predef.h types.h stat.h user.h diff --git a/src/user/kill.o b/src/user/kill.o new file mode 100644 index 0000000000000000000000000000000000000000..4601a11363cc8fe2a038953324109002a56b221d GIT binary patch literal 3168 zcma)8TWB0r7(Qn%n{76iO`}cHs@XPGTXiShG`*y@R*g}k;w`P02Q9Ok$?n+Q*>rZM zHl|PG|XtUsg|DJpTNT4?Zw=-||ZKh0+U4 z&c}>g{!5eZhU&v2=lYZY8SF$zce9Tg!n$nhE4GtAf zhV^=3F`V~2uUlM$oUV`#eKTcDmk*HD^sq+hbdi%**M5S`UZEuSAwZYohEXEi5%4`X zV|oO`CL`QgOuNaR!mv3B=Lt+wX08KdPh;9NhsnygbnD(sek}7YK&4PIInmP#h0I8m z6)e{!-yFl*drQjFO^fxa=(}5qLo{sx+k?>`3YqPq!vTza7?y{L%e1&1F4CI8^fZ}c zm|h~oZ%`wgT}b9|sY31)x!esoyASr;#S`+$L9EjivjC@GbN1-A(E+(RlOMw2>4YeQ>{TkyCQqp79D;Lb5TdNx{S2buiF;j`+Sy{^DgRM7081^2!UilL8g#wz+Jg`Hh@tm7VKoZo3oP7*A4Xy^2D>2mG{l;CO@uLM61?}lfs&n zv3}AF1&pUfa3)N&2MxE~eY`MTI#4K;yh(3Qq1f0vfhkF&;7B!yf;g-|^y5nHNVxyt z{z9=@oi7)P_mm37g{WC9r(rz_qqfjW;GGoxdg!;psM=OG8(~shi2X)TTx{ZlL2R7; z%E{tl+)RQ>($vbuFo4x>Ek%`D+>DxOtC&WQhtYg7@yqp~1!F5=T&3=}Y9=~tMq<3y zYy{(JIgOHZycJhO+6v-vo|0GjcO&jhn>8@PLo2#%diqdd*Kw6fA4{>+&RjY_G2!i* z+^yBPTyY5}kUV?8kms^;TaV*BhtgozU~Q39J>AkH#cbZSQgKVaoi1kbT~>N7pRv+2 zdD}{pw&(iH3Nz%0UsnxJ+}N2ZyPampnSaQ-d26jLHvPlS?z2v|K-=gbTl5Q)fqU7E z+Gn3Lln29pXoxZ%>l#ruXF(-pbNH&LRduS8R@JF%TwDV;D<{MR5lg&@h!3+5N?V9~ zDPyU}wVrE~I11H+A#hC+TV;PGZYAO+?jYiKVmA?fdo-#y4*3Qx-=XnQjY}GrHNLFz zJ&hj_k^fUIf2r|nBCh0HjX!JrRpakO#PO1eSzJDGK;u@8yjA`H^89GuLBzhU(#Z3o z%-?9@lt#55$hT8QTmfhSh1XhY;AH`mxQ#W##X;Rmf-{Nm=KaJMUb)p0UfiTW?~+%7 z2%q_&oK{bS(LxiRiucRqI5=&jdb3gwTM2{Ly#3gZs=)?TJ&Xbqg7k)^`h=1z%|;_Y zzw#n<3=dtas5(JAZBRR*S`4=Ie`yqsIM%h7!ZTCvR41T~v<(ACCvL$DFJyvyXegcZ7>CAgn-V$k_O&#PGCzjCwj^oH}g$E7j@uhps>4YHSTCI@k9O z-Y4sv>+8la>w5;gi2*ByaggW9Xfn2^Aa~~b5cv*5$9(K|Cf_UI8N>4?y^eglO%ljt zIo{A{{60Yf_6I}8?|mr98^2BHN7orAZKM4|%^TCcjV)Z|pzU+*$LC5q2tU4KL)-`H z0!HV4SFm5!8TZRRX!gr*n_OVUQ^@xV@KOwO&Ux_6Woi_xSVWPGk + 12: 83 39 03 cmpl $0x3,(%ecx) + 15: 74 14 je 2b printf(2, "Usage: ln old new\n"); - 1b: 83 ec 08 sub $0x8,%esp - 1e: 68 a4 06 00 00 push $0x6a4 - 23: 6a 02 push $0x2 - 25: e8 60 03 00 00 call 38a + 17: 83 ec 08 sub $0x8,%esp + 1a: 68 64 06 00 00 push $0x664 + 1f: 6a 02 push $0x2 + 21: e8 46 03 00 00 call 36c exit(); - 2a: e8 17 02 00 00 call 246 + 26: e8 f9 01 00 00 call 224 } if(link(argv[1], argv[2]) < 0) - 2f: 83 ec 08 sub $0x8,%esp - 32: ff 73 08 pushl 0x8(%ebx) - 35: ff 73 04 pushl 0x4(%ebx) - 38: e8 69 02 00 00 call 2a6 - 3d: 83 c4 10 add $0x10,%esp - 40: 85 c0 test %eax,%eax - 42: 78 05 js 49 + 2b: 83 ec 08 sub $0x8,%esp + 2e: ff 73 08 push 0x8(%ebx) + 31: ff 73 04 push 0x4(%ebx) + 34: e8 4b 02 00 00 call 284 + 39: 83 c4 10 add $0x10,%esp + 3c: 85 c0 test %eax,%eax + 3e: 78 05 js 45 printf(2, "link %s %s: failed\n", argv[1], argv[2]); exit(); - 44: e8 fd 01 00 00 call 246 + 40: e8 df 01 00 00 call 224 printf(2, "link %s %s: failed\n", argv[1], argv[2]); - 49: ff 73 08 pushl 0x8(%ebx) - 4c: ff 73 04 pushl 0x4(%ebx) - 4f: 68 b7 06 00 00 push $0x6b7 - 54: 6a 02 push $0x2 - 56: e8 2f 03 00 00 call 38a - 5b: 83 c4 10 add $0x10,%esp - 5e: eb e4 jmp 44 - -00000060 : + 45: ff 73 08 push 0x8(%ebx) + 48: ff 73 04 push 0x4(%ebx) + 4b: 68 77 06 00 00 push $0x677 + 50: 6a 02 push $0x2 + 52: e8 15 03 00 00 call 36c + 57: 83 c4 10 add $0x10,%esp + 5a: eb e4 jmp 40 + +0000005c : #include "user.h" #include "x86.h" char* strcpy(char *s, const char *t) { - 60: f3 0f 1e fb endbr32 - 64: 55 push %ebp - 65: 89 e5 mov %esp,%ebp - 67: 53 push %ebx - 68: 8b 4d 08 mov 0x8(%ebp),%ecx - 6b: 8b 5d 0c mov 0xc(%ebp),%ebx + 5c: 55 push %ebp + 5d: 89 e5 mov %esp,%ebp + 5f: 53 push %ebx + 60: 8b 4d 08 mov 0x8(%ebp),%ecx + 63: 8b 5d 0c mov 0xc(%ebp),%ebx char *os; os = s; while((*s++ = *t++) != 0) - 6e: b8 00 00 00 00 mov $0x0,%eax - 73: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 77: 88 14 01 mov %dl,(%ecx,%eax,1) - 7a: 83 c0 01 add $0x1,%eax - 7d: 84 d2 test %dl,%dl - 7f: 75 f2 jne 73 + 66: b8 00 00 00 00 mov $0x0,%eax + 6b: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx + 6f: 88 14 01 mov %dl,(%ecx,%eax,1) + 72: 83 c0 01 add $0x1,%eax + 75: 84 d2 test %dl,%dl + 77: 75 f2 jne 6b ; return os; } - 81: 89 c8 mov %ecx,%eax - 83: 5b pop %ebx - 84: 5d pop %ebp - 85: c3 ret + 79: 89 c8 mov %ecx,%eax + 7b: 8b 5d fc mov -0x4(%ebp),%ebx + 7e: c9 leave + 7f: c3 ret -00000086 : +00000080 : int strcmp(const char *p, const char *q) { - 86: f3 0f 1e fb endbr32 - 8a: 55 push %ebp - 8b: 89 e5 mov %esp,%ebp - 8d: 8b 4d 08 mov 0x8(%ebp),%ecx - 90: 8b 55 0c mov 0xc(%ebp),%edx + 80: 55 push %ebp + 81: 89 e5 mov %esp,%ebp + 83: 8b 4d 08 mov 0x8(%ebp),%ecx + 86: 8b 55 0c mov 0xc(%ebp),%edx while(*p && *p == *q) - 93: 0f b6 01 movzbl (%ecx),%eax - 96: 84 c0 test %al,%al - 98: 74 11 je ab - 9a: 38 02 cmp %al,(%edx) - 9c: 75 0d jne ab + 89: 0f b6 01 movzbl (%ecx),%eax + 8c: 84 c0 test %al,%al + 8e: 74 11 je a1 + 90: 38 02 cmp %al,(%edx) + 92: 75 0d jne a1 p++, q++; - 9e: 83 c1 01 add $0x1,%ecx - a1: 83 c2 01 add $0x1,%edx + 94: 83 c1 01 add $0x1,%ecx + 97: 83 c2 01 add $0x1,%edx while(*p && *p == *q) - a4: 0f b6 01 movzbl (%ecx),%eax - a7: 84 c0 test %al,%al - a9: 75 ef jne 9a + 9a: 0f b6 01 movzbl (%ecx),%eax + 9d: 84 c0 test %al,%al + 9f: 75 ef jne 90 return (uchar)*p - (uchar)*q; - ab: 0f b6 c0 movzbl %al,%eax - ae: 0f b6 12 movzbl (%edx),%edx - b1: 29 d0 sub %edx,%eax + a1: 0f b6 c0 movzbl %al,%eax + a4: 0f b6 12 movzbl (%edx),%edx + a7: 29 d0 sub %edx,%eax } - b3: 5d pop %ebp - b4: c3 ret + a9: 5d pop %ebp + aa: c3 ret -000000b5 : +000000ab : uint strlen(const char *s) { - b5: f3 0f 1e fb endbr32 - b9: 55 push %ebp - ba: 89 e5 mov %esp,%ebp - bc: 8b 55 08 mov 0x8(%ebp),%edx + ab: 55 push %ebp + ac: 89 e5 mov %esp,%ebp + ae: 8b 55 08 mov 0x8(%ebp),%edx int n; for(n = 0; s[n]; n++) - bf: 80 3a 00 cmpb $0x0,(%edx) - c2: 74 14 je d8 - c4: b8 00 00 00 00 mov $0x0,%eax - c9: 83 c0 01 add $0x1,%eax - cc: 89 c1 mov %eax,%ecx - ce: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - d2: 75 f5 jne c9 + b1: 80 3a 00 cmpb $0x0,(%edx) + b4: 74 14 je ca + b6: b8 00 00 00 00 mov $0x0,%eax + bb: 83 c0 01 add $0x1,%eax + be: 89 c1 mov %eax,%ecx + c0: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) + c4: 75 f5 jne bb ; return n; } - d4: 89 c8 mov %ecx,%eax - d6: 5d pop %ebp - d7: c3 ret + c6: 89 c8 mov %ecx,%eax + c8: 5d pop %ebp + c9: c3 ret for(n = 0; s[n]; n++) - d8: b9 00 00 00 00 mov $0x0,%ecx + ca: b9 00 00 00 00 mov $0x0,%ecx return n; - dd: eb f5 jmp d4 + cf: eb f5 jmp c6 -000000df : +000000d1 : void* memset(void *dst, int c, uint n) { - df: f3 0f 1e fb endbr32 - e3: 55 push %ebp - e4: 89 e5 mov %esp,%ebp - e6: 57 push %edi - e7: 8b 55 08 mov 0x8(%ebp),%edx + d1: 55 push %ebp + d2: 89 e5 mov %esp,%ebp + d4: 57 push %edi + d5: 8b 55 08 mov 0x8(%ebp),%edx } static inline void stosb(void *addr, int data, int cnt) { asm volatile("cld; rep stosb" : - ea: 89 d7 mov %edx,%edi - ec: 8b 4d 10 mov 0x10(%ebp),%ecx - ef: 8b 45 0c mov 0xc(%ebp),%eax - f2: fc cld - f3: f3 aa rep stos %al,%es:(%edi) + d8: 89 d7 mov %edx,%edi + da: 8b 4d 10 mov 0x10(%ebp),%ecx + dd: 8b 45 0c mov 0xc(%ebp),%eax + e0: fc cld + e1: f3 aa rep stos %al,%es:(%edi) stosb(dst, c, n); return dst; } - f5: 89 d0 mov %edx,%eax - f7: 5f pop %edi - f8: 5d pop %ebp - f9: c3 ret + e3: 89 d0 mov %edx,%eax + e5: 8b 7d fc mov -0x4(%ebp),%edi + e8: c9 leave + e9: c3 ret -000000fa : +000000ea : char* strchr(const char *s, char c) { - fa: f3 0f 1e fb endbr32 - fe: 55 push %ebp - ff: 89 e5 mov %esp,%ebp - 101: 8b 45 08 mov 0x8(%ebp),%eax - 104: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx + ea: 55 push %ebp + eb: 89 e5 mov %esp,%ebp + ed: 8b 45 08 mov 0x8(%ebp),%eax + f0: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx for(; *s; s++) - 108: 0f b6 10 movzbl (%eax),%edx - 10b: 84 d2 test %dl,%dl - 10d: 74 15 je 124 + f4: 0f b6 10 movzbl (%eax),%edx + f7: 84 d2 test %dl,%dl + f9: 74 15 je 110 if(*s == c) - 10f: 38 d1 cmp %dl,%cl - 111: 74 0f je 122 + fb: 38 d1 cmp %dl,%cl + fd: 74 0f je 10e for(; *s; s++) - 113: 83 c0 01 add $0x1,%eax - 116: 0f b6 10 movzbl (%eax),%edx - 119: 84 d2 test %dl,%dl - 11b: 75 f2 jne 10f + ff: 83 c0 01 add $0x1,%eax + 102: 0f b6 10 movzbl (%eax),%edx + 105: 84 d2 test %dl,%dl + 107: 75 f2 jne fb return (char*)s; return 0; - 11d: b8 00 00 00 00 mov $0x0,%eax + 109: b8 00 00 00 00 mov $0x0,%eax } - 122: 5d pop %ebp - 123: c3 ret + 10e: 5d pop %ebp + 10f: c3 ret return 0; - 124: b8 00 00 00 00 mov $0x0,%eax - 129: eb f7 jmp 122 + 110: b8 00 00 00 00 mov $0x0,%eax + 115: eb f7 jmp 10e -0000012b : +00000117 : char* gets(char *buf, int max) { - 12b: f3 0f 1e fb endbr32 - 12f: 55 push %ebp - 130: 89 e5 mov %esp,%ebp - 132: 57 push %edi - 133: 56 push %esi - 134: 53 push %ebx - 135: 83 ec 2c sub $0x2c,%esp - 138: 8b 75 08 mov 0x8(%ebp),%esi + 117: 55 push %ebp + 118: 89 e5 mov %esp,%ebp + 11a: 57 push %edi + 11b: 56 push %esi + 11c: 53 push %ebx + 11d: 83 ec 2c sub $0x2c,%esp + 120: 8b 75 08 mov 0x8(%ebp),%esi int i, cc; char c; for(i=0; i+1 < max; ){ - 13b: bb 00 00 00 00 mov $0x0,%ebx + 123: bb 00 00 00 00 mov $0x0,%ebx cc = read(0, &c, 1); - 140: 8d 7d e7 lea -0x19(%ebp),%edi + 128: 8d 7d e7 lea -0x19(%ebp),%edi for(i=0; i+1 < max; ){ - 143: 89 5d d4 mov %ebx,-0x2c(%ebp) - 146: 83 c3 01 add $0x1,%ebx - 149: 3b 5d 0c cmp 0xc(%ebp),%ebx - 14c: 7d 27 jge 175 + 12b: 89 5d d4 mov %ebx,-0x2c(%ebp) + 12e: 83 c3 01 add $0x1,%ebx + 131: 3b 5d 0c cmp 0xc(%ebp),%ebx + 134: 7d 27 jge 15d cc = read(0, &c, 1); - 14e: 83 ec 04 sub $0x4,%esp - 151: 6a 01 push $0x1 - 153: 57 push %edi - 154: 6a 00 push $0x0 - 156: e8 03 01 00 00 call 25e + 136: 83 ec 04 sub $0x4,%esp + 139: 6a 01 push $0x1 + 13b: 57 push %edi + 13c: 6a 00 push $0x0 + 13e: e8 f9 00 00 00 call 23c if(cc < 1) - 15b: 83 c4 10 add $0x10,%esp - 15e: 85 c0 test %eax,%eax - 160: 7e 13 jle 175 + 143: 83 c4 10 add $0x10,%esp + 146: 85 c0 test %eax,%eax + 148: 7e 13 jle 15d break; buf[i++] = c; - 162: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 166: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) + 14a: 0f b6 45 e7 movzbl -0x19(%ebp),%eax + 14e: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) if(c == '\n' || c == '\r') - 16a: 3c 0a cmp $0xa,%al - 16c: 74 04 je 172 - 16e: 3c 0d cmp $0xd,%al - 170: 75 d1 jne 143 + 152: 3c 0a cmp $0xa,%al + 154: 74 04 je 15a + 156: 3c 0d cmp $0xd,%al + 158: 75 d1 jne 12b for(i=0; i+1 < max; ){ - 172: 89 5d d4 mov %ebx,-0x2c(%ebp) + 15a: 89 5d d4 mov %ebx,-0x2c(%ebp) break; } buf[i] = '\0'; - 175: 8b 45 d4 mov -0x2c(%ebp),%eax - 178: c6 04 06 00 movb $0x0,(%esi,%eax,1) + 15d: 8b 45 d4 mov -0x2c(%ebp),%eax + 160: c6 04 06 00 movb $0x0,(%esi,%eax,1) return buf; } - 17c: 89 f0 mov %esi,%eax - 17e: 8d 65 f4 lea -0xc(%ebp),%esp - 181: 5b pop %ebx - 182: 5e pop %esi - 183: 5f pop %edi - 184: 5d pop %ebp - 185: c3 ret + 164: 89 f0 mov %esi,%eax + 166: 8d 65 f4 lea -0xc(%ebp),%esp + 169: 5b pop %ebx + 16a: 5e pop %esi + 16b: 5f pop %edi + 16c: 5d pop %ebp + 16d: c3 ret -00000186 : +0000016e : int stat(const char *n, struct stat *st) { - 186: f3 0f 1e fb endbr32 - 18a: 55 push %ebp - 18b: 89 e5 mov %esp,%ebp - 18d: 56 push %esi - 18e: 53 push %ebx + 16e: 55 push %ebp + 16f: 89 e5 mov %esp,%ebp + 171: 56 push %esi + 172: 53 push %ebx int fd; int r; fd = open(n, O_RDONLY); - 18f: 83 ec 08 sub $0x8,%esp - 192: 6a 00 push $0x0 - 194: ff 75 08 pushl 0x8(%ebp) - 197: e8 ea 00 00 00 call 286 + 173: 83 ec 08 sub $0x8,%esp + 176: 6a 00 push $0x0 + 178: ff 75 08 push 0x8(%ebp) + 17b: e8 e4 00 00 00 call 264 if(fd < 0) - 19c: 83 c4 10 add $0x10,%esp - 19f: 85 c0 test %eax,%eax - 1a1: 78 24 js 1c7 - 1a3: 89 c3 mov %eax,%ebx + 180: 83 c4 10 add $0x10,%esp + 183: 85 c0 test %eax,%eax + 185: 78 24 js 1ab + 187: 89 c3 mov %eax,%ebx return -1; r = fstat(fd, st); - 1a5: 83 ec 08 sub $0x8,%esp - 1a8: ff 75 0c pushl 0xc(%ebp) - 1ab: 50 push %eax - 1ac: e8 ed 00 00 00 call 29e - 1b1: 89 c6 mov %eax,%esi + 189: 83 ec 08 sub $0x8,%esp + 18c: ff 75 0c push 0xc(%ebp) + 18f: 50 push %eax + 190: e8 e7 00 00 00 call 27c + 195: 89 c6 mov %eax,%esi close(fd); - 1b3: 89 1c 24 mov %ebx,(%esp) - 1b6: e8 b3 00 00 00 call 26e + 197: 89 1c 24 mov %ebx,(%esp) + 19a: e8 ad 00 00 00 call 24c return r; - 1bb: 83 c4 10 add $0x10,%esp + 19f: 83 c4 10 add $0x10,%esp } - 1be: 89 f0 mov %esi,%eax - 1c0: 8d 65 f8 lea -0x8(%ebp),%esp - 1c3: 5b pop %ebx - 1c4: 5e pop %esi - 1c5: 5d pop %ebp - 1c6: c3 ret + 1a2: 89 f0 mov %esi,%eax + 1a4: 8d 65 f8 lea -0x8(%ebp),%esp + 1a7: 5b pop %ebx + 1a8: 5e pop %esi + 1a9: 5d pop %ebp + 1aa: c3 ret return -1; - 1c7: be ff ff ff ff mov $0xffffffff,%esi - 1cc: eb f0 jmp 1be + 1ab: be ff ff ff ff mov $0xffffffff,%esi + 1b0: eb f0 jmp 1a2 -000001ce : +000001b2 : int atoi(const char *s) { - 1ce: f3 0f 1e fb endbr32 - 1d2: 55 push %ebp - 1d3: 89 e5 mov %esp,%ebp - 1d5: 53 push %ebx - 1d6: 8b 55 08 mov 0x8(%ebp),%edx + 1b2: 55 push %ebp + 1b3: 89 e5 mov %esp,%ebp + 1b5: 53 push %ebx + 1b6: 8b 55 08 mov 0x8(%ebp),%edx int n; n = 0; while('0' <= *s && *s <= '9') - 1d9: 0f b6 02 movzbl (%edx),%eax - 1dc: 8d 48 d0 lea -0x30(%eax),%ecx - 1df: 80 f9 09 cmp $0x9,%cl - 1e2: 77 22 ja 206 + 1b9: 0f b6 02 movzbl (%edx),%eax + 1bc: 8d 48 d0 lea -0x30(%eax),%ecx + 1bf: 80 f9 09 cmp $0x9,%cl + 1c2: 77 24 ja 1e8 n = 0; - 1e4: b9 00 00 00 00 mov $0x0,%ecx + 1c4: b9 00 00 00 00 mov $0x0,%ecx n = n*10 + *s++ - '0'; - 1e9: 83 c2 01 add $0x1,%edx - 1ec: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 1ef: 0f be c0 movsbl %al,%eax - 1f2: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx + 1c9: 83 c2 01 add $0x1,%edx + 1cc: 8d 0c 89 lea (%ecx,%ecx,4),%ecx + 1cf: 0f be c0 movsbl %al,%eax + 1d2: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx while('0' <= *s && *s <= '9') - 1f6: 0f b6 02 movzbl (%edx),%eax - 1f9: 8d 58 d0 lea -0x30(%eax),%ebx - 1fc: 80 fb 09 cmp $0x9,%bl - 1ff: 76 e8 jbe 1e9 + 1d6: 0f b6 02 movzbl (%edx),%eax + 1d9: 8d 58 d0 lea -0x30(%eax),%ebx + 1dc: 80 fb 09 cmp $0x9,%bl + 1df: 76 e8 jbe 1c9 return n; } - 201: 89 c8 mov %ecx,%eax - 203: 5b pop %ebx - 204: 5d pop %ebp - 205: c3 ret + 1e1: 89 c8 mov %ecx,%eax + 1e3: 8b 5d fc mov -0x4(%ebp),%ebx + 1e6: c9 leave + 1e7: c3 ret n = 0; - 206: b9 00 00 00 00 mov $0x0,%ecx + 1e8: b9 00 00 00 00 mov $0x0,%ecx return n; - 20b: eb f4 jmp 201 + 1ed: eb f2 jmp 1e1 -0000020d : +000001ef : void* memmove(void *vdst, const void *vsrc, int n) { - 20d: f3 0f 1e fb endbr32 - 211: 55 push %ebp - 212: 89 e5 mov %esp,%ebp - 214: 56 push %esi - 215: 53 push %ebx - 216: 8b 75 08 mov 0x8(%ebp),%esi - 219: 8b 55 0c mov 0xc(%ebp),%edx - 21c: 8b 5d 10 mov 0x10(%ebp),%ebx + 1ef: 55 push %ebp + 1f0: 89 e5 mov %esp,%ebp + 1f2: 56 push %esi + 1f3: 53 push %ebx + 1f4: 8b 75 08 mov 0x8(%ebp),%esi + 1f7: 8b 55 0c mov 0xc(%ebp),%edx + 1fa: 8b 5d 10 mov 0x10(%ebp),%ebx char *dst; const char *src; dst = vdst; src = vsrc; while(n-- > 0) - 21f: 85 db test %ebx,%ebx - 221: 7e 15 jle 238 - 223: 01 f3 add %esi,%ebx + 1fd: 85 db test %ebx,%ebx + 1ff: 7e 15 jle 216 + 201: 01 f3 add %esi,%ebx dst = vdst; - 225: 89 f0 mov %esi,%eax + 203: 89 f0 mov %esi,%eax *dst++ = *src++; - 227: 83 c2 01 add $0x1,%edx - 22a: 83 c0 01 add $0x1,%eax - 22d: 0f b6 4a ff movzbl -0x1(%edx),%ecx - 231: 88 48 ff mov %cl,-0x1(%eax) + 205: 83 c2 01 add $0x1,%edx + 208: 83 c0 01 add $0x1,%eax + 20b: 0f b6 4a ff movzbl -0x1(%edx),%ecx + 20f: 88 48 ff mov %cl,-0x1(%eax) while(n-- > 0) - 234: 39 c3 cmp %eax,%ebx - 236: 75 ef jne 227 + 212: 39 c3 cmp %eax,%ebx + 214: 75 ef jne 205 return vdst; } - 238: 89 f0 mov %esi,%eax - 23a: 5b pop %ebx - 23b: 5e pop %esi - 23c: 5d pop %ebp - 23d: c3 ret + 216: 89 f0 mov %esi,%eax + 218: 5b pop %ebx + 219: 5e pop %esi + 21a: 5d pop %ebp + 21b: c3 ret -0000023e : +0000021c : name: \ movl $SYS_ ## name, %eax; \ int $T_SYSCALL; \ ret SYSCALL(fork) - 23e: b8 01 00 00 00 mov $0x1,%eax - 243: cd 40 int $0x40 - 245: c3 ret + 21c: b8 01 00 00 00 mov $0x1,%eax + 221: cd 40 int $0x40 + 223: c3 ret -00000246 : +00000224 : SYSCALL(exit) - 246: b8 02 00 00 00 mov $0x2,%eax - 24b: cd 40 int $0x40 - 24d: c3 ret + 224: b8 02 00 00 00 mov $0x2,%eax + 229: cd 40 int $0x40 + 22b: c3 ret -0000024e : +0000022c : SYSCALL(wait) - 24e: b8 03 00 00 00 mov $0x3,%eax - 253: cd 40 int $0x40 - 255: c3 ret + 22c: b8 03 00 00 00 mov $0x3,%eax + 231: cd 40 int $0x40 + 233: c3 ret -00000256 : +00000234 : SYSCALL(pipe) - 256: b8 04 00 00 00 mov $0x4,%eax - 25b: cd 40 int $0x40 - 25d: c3 ret + 234: b8 04 00 00 00 mov $0x4,%eax + 239: cd 40 int $0x40 + 23b: c3 ret -0000025e : +0000023c : SYSCALL(read) - 25e: b8 05 00 00 00 mov $0x5,%eax - 263: cd 40 int $0x40 - 265: c3 ret + 23c: b8 05 00 00 00 mov $0x5,%eax + 241: cd 40 int $0x40 + 243: c3 ret -00000266 : +00000244 : SYSCALL(write) - 266: b8 10 00 00 00 mov $0x10,%eax - 26b: cd 40 int $0x40 - 26d: c3 ret + 244: b8 10 00 00 00 mov $0x10,%eax + 249: cd 40 int $0x40 + 24b: c3 ret -0000026e : +0000024c : SYSCALL(close) - 26e: b8 15 00 00 00 mov $0x15,%eax - 273: cd 40 int $0x40 - 275: c3 ret + 24c: b8 15 00 00 00 mov $0x15,%eax + 251: cd 40 int $0x40 + 253: c3 ret -00000276 : +00000254 : SYSCALL(kill) - 276: b8 06 00 00 00 mov $0x6,%eax - 27b: cd 40 int $0x40 - 27d: c3 ret + 254: b8 06 00 00 00 mov $0x6,%eax + 259: cd 40 int $0x40 + 25b: c3 ret -0000027e : +0000025c : SYSCALL(exec) - 27e: b8 07 00 00 00 mov $0x7,%eax - 283: cd 40 int $0x40 - 285: c3 ret + 25c: b8 07 00 00 00 mov $0x7,%eax + 261: cd 40 int $0x40 + 263: c3 ret -00000286 : +00000264 : SYSCALL(open) - 286: b8 0f 00 00 00 mov $0xf,%eax - 28b: cd 40 int $0x40 - 28d: c3 ret + 264: b8 0f 00 00 00 mov $0xf,%eax + 269: cd 40 int $0x40 + 26b: c3 ret -0000028e : +0000026c : SYSCALL(mknod) - 28e: b8 11 00 00 00 mov $0x11,%eax - 293: cd 40 int $0x40 - 295: c3 ret + 26c: b8 11 00 00 00 mov $0x11,%eax + 271: cd 40 int $0x40 + 273: c3 ret -00000296 : +00000274 : SYSCALL(unlink) - 296: b8 12 00 00 00 mov $0x12,%eax - 29b: cd 40 int $0x40 - 29d: c3 ret + 274: b8 12 00 00 00 mov $0x12,%eax + 279: cd 40 int $0x40 + 27b: c3 ret -0000029e : +0000027c : SYSCALL(fstat) - 29e: b8 08 00 00 00 mov $0x8,%eax - 2a3: cd 40 int $0x40 - 2a5: c3 ret + 27c: b8 08 00 00 00 mov $0x8,%eax + 281: cd 40 int $0x40 + 283: c3 ret -000002a6 : +00000284 : SYSCALL(link) - 2a6: b8 13 00 00 00 mov $0x13,%eax - 2ab: cd 40 int $0x40 - 2ad: c3 ret + 284: b8 13 00 00 00 mov $0x13,%eax + 289: cd 40 int $0x40 + 28b: c3 ret -000002ae : +0000028c : SYSCALL(mkdir) - 2ae: b8 14 00 00 00 mov $0x14,%eax - 2b3: cd 40 int $0x40 - 2b5: c3 ret + 28c: b8 14 00 00 00 mov $0x14,%eax + 291: cd 40 int $0x40 + 293: c3 ret -000002b6 : +00000294 : SYSCALL(chdir) - 2b6: b8 09 00 00 00 mov $0x9,%eax - 2bb: cd 40 int $0x40 - 2bd: c3 ret + 294: b8 09 00 00 00 mov $0x9,%eax + 299: cd 40 int $0x40 + 29b: c3 ret -000002be : +0000029c : SYSCALL(dup) - 2be: b8 0a 00 00 00 mov $0xa,%eax - 2c3: cd 40 int $0x40 - 2c5: c3 ret + 29c: b8 0a 00 00 00 mov $0xa,%eax + 2a1: cd 40 int $0x40 + 2a3: c3 ret -000002c6 : +000002a4 : SYSCALL(getpid) - 2c6: b8 0b 00 00 00 mov $0xb,%eax - 2cb: cd 40 int $0x40 - 2cd: c3 ret + 2a4: b8 0b 00 00 00 mov $0xb,%eax + 2a9: cd 40 int $0x40 + 2ab: c3 ret -000002ce : +000002ac : SYSCALL(sbrk) - 2ce: b8 0c 00 00 00 mov $0xc,%eax - 2d3: cd 40 int $0x40 - 2d5: c3 ret + 2ac: b8 0c 00 00 00 mov $0xc,%eax + 2b1: cd 40 int $0x40 + 2b3: c3 ret -000002d6 : +000002b4 : SYSCALL(sleep) - 2d6: b8 0d 00 00 00 mov $0xd,%eax - 2db: cd 40 int $0x40 - 2dd: c3 ret + 2b4: b8 0d 00 00 00 mov $0xd,%eax + 2b9: cd 40 int $0x40 + 2bb: c3 ret -000002de : +000002bc : SYSCALL(uptime) - 2de: b8 0e 00 00 00 mov $0xe,%eax - 2e3: cd 40 int $0x40 - 2e5: c3 ret + 2bc: b8 0e 00 00 00 mov $0xe,%eax + 2c1: cd 40 int $0x40 + 2c3: c3 ret -000002e6 : +000002c4 : SYSCALL(slabtest) - 2e6: b8 16 00 00 00 mov $0x16,%eax - 2eb: cd 40 int $0x40 - 2ed: c3 ret + 2c4: b8 16 00 00 00 mov $0x16,%eax + 2c9: cd 40 int $0x40 + 2cb: c3 ret -000002ee : +000002cc : SYSCALL(ps) - 2ee: b8 17 00 00 00 mov $0x17,%eax - 2f3: cd 40 int $0x40 - 2f5: c3 ret + 2cc: b8 17 00 00 00 mov $0x17,%eax + 2d1: cd 40 int $0x40 + 2d3: c3 ret -000002f6 : +000002d4 : write(fd, &c, 1); } static void printint(int fd, int xx, int base, int sgn) { - 2f6: 55 push %ebp - 2f7: 89 e5 mov %esp,%ebp - 2f9: 57 push %edi - 2fa: 56 push %esi - 2fb: 53 push %ebx - 2fc: 83 ec 3c sub $0x3c,%esp - 2ff: 89 45 c4 mov %eax,-0x3c(%ebp) - 302: 89 d3 mov %edx,%ebx + 2d4: 55 push %ebp + 2d5: 89 e5 mov %esp,%ebp + 2d7: 57 push %edi + 2d8: 56 push %esi + 2d9: 53 push %ebx + 2da: 83 ec 3c sub $0x3c,%esp + 2dd: 89 45 c4 mov %eax,-0x3c(%ebp) + 2e0: 89 ce mov %ecx,%esi char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 304: 83 7d 08 00 cmpl $0x0,0x8(%ebp) - 308: 74 77 je 381 - 30a: 85 d2 test %edx,%edx - 30c: 79 73 jns 381 + 2e2: 83 7d 08 00 cmpl $0x0,0x8(%ebp) + 2e6: 74 79 je 361 + 2e8: 85 d2 test %edx,%edx + 2ea: 79 75 jns 361 neg = 1; x = -xx; - 30e: f7 db neg %ebx + 2ec: 89 d1 mov %edx,%ecx + 2ee: f7 d9 neg %ecx neg = 1; - 310: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) + 2f0: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) } else { x = xx; } i = 0; - 317: be 00 00 00 00 mov $0x0,%esi + 2f7: bb 00 00 00 00 mov $0x0,%ebx do{ buf[i++] = digits[x % base]; - 31c: 89 f7 mov %esi,%edi - 31e: 83 c6 01 add $0x1,%esi - 321: 89 d8 mov %ebx,%eax - 323: ba 00 00 00 00 mov $0x0,%edx - 328: f7 f1 div %ecx - 32a: 0f b6 92 d4 06 00 00 movzbl 0x6d4(%edx),%edx - 331: 88 54 35 d7 mov %dl,-0x29(%ebp,%esi,1) + 2fc: 89 df mov %ebx,%edi + 2fe: 83 c3 01 add $0x1,%ebx + 301: 89 c8 mov %ecx,%eax + 303: ba 00 00 00 00 mov $0x0,%edx + 308: f7 f6 div %esi + 30a: 0f b6 92 ec 06 00 00 movzbl 0x6ec(%edx),%edx + 311: 88 54 1d d7 mov %dl,-0x29(%ebp,%ebx,1) }while((x /= base) != 0); - 335: 89 da mov %ebx,%edx - 337: 89 c3 mov %eax,%ebx - 339: 39 d1 cmp %edx,%ecx - 33b: 76 df jbe 31c + 315: 89 ca mov %ecx,%edx + 317: 89 c1 mov %eax,%ecx + 319: 39 d6 cmp %edx,%esi + 31b: 76 df jbe 2fc if(neg) - 33d: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) - 341: 74 08 je 34b + 31d: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) + 321: 74 08 je 32b buf[i++] = '-'; - 343: c6 44 35 d8 2d movb $0x2d,-0x28(%ebp,%esi,1) - 348: 8d 77 02 lea 0x2(%edi),%esi + 323: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) + 328: 8d 5f 02 lea 0x2(%edi),%ebx while(--i >= 0) - 34b: 85 f6 test %esi,%esi - 34d: 7e 2a jle 379 - 34f: 8d 5c 35 d7 lea -0x29(%ebp,%esi,1),%ebx - 353: 8d 7d d8 lea -0x28(%ebp),%edi + 32b: 85 db test %ebx,%ebx + 32d: 7e 2a jle 359 + 32f: 8d 7d d8 lea -0x28(%ebp),%edi + 332: 8d 5c 1d d7 lea -0x29(%ebp,%ebx,1),%ebx write(fd, &c, 1); - 356: 8d 75 d7 lea -0x29(%ebp),%esi + 336: 8d 75 d7 lea -0x29(%ebp),%esi putc(fd, buf[i]); - 359: 0f b6 03 movzbl (%ebx),%eax - 35c: 88 45 d7 mov %al,-0x29(%ebp) + 339: 0f b6 03 movzbl (%ebx),%eax + 33c: 88 45 d7 mov %al,-0x29(%ebp) write(fd, &c, 1); - 35f: 83 ec 04 sub $0x4,%esp - 362: 6a 01 push $0x1 - 364: 56 push %esi - 365: ff 75 c4 pushl -0x3c(%ebp) - 368: e8 f9 fe ff ff call 266 + 33f: 83 ec 04 sub $0x4,%esp + 342: 6a 01 push $0x1 + 344: 56 push %esi + 345: ff 75 c4 push -0x3c(%ebp) + 348: e8 f7 fe ff ff call 244 while(--i >= 0) - 36d: 89 d8 mov %ebx,%eax - 36f: 83 eb 01 sub $0x1,%ebx - 372: 83 c4 10 add $0x10,%esp - 375: 39 f8 cmp %edi,%eax - 377: 75 e0 jne 359 + 34d: 89 d8 mov %ebx,%eax + 34f: 83 eb 01 sub $0x1,%ebx + 352: 83 c4 10 add $0x10,%esp + 355: 39 f8 cmp %edi,%eax + 357: 75 e0 jne 339 } - 379: 8d 65 f4 lea -0xc(%ebp),%esp - 37c: 5b pop %ebx - 37d: 5e pop %esi - 37e: 5f pop %edi - 37f: 5d pop %ebp - 380: c3 ret + 359: 8d 65 f4 lea -0xc(%ebp),%esp + 35c: 5b pop %ebx + 35d: 5e pop %esi + 35e: 5f pop %edi + 35f: 5d pop %ebp + 360: c3 ret + x = xx; + 361: 89 d1 mov %edx,%ecx neg = 0; - 381: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) - 388: eb 8d jmp 317 + 363: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) + 36a: eb 8b jmp 2f7 -0000038a : +0000036c : // Print to the given fd. Only understands %d, %x, %p, %s. void printf(int fd, const char *fmt, ...) { - 38a: f3 0f 1e fb endbr32 - 38e: 55 push %ebp - 38f: 89 e5 mov %esp,%ebp - 391: 57 push %edi - 392: 56 push %esi - 393: 53 push %ebx - 394: 83 ec 2c sub $0x2c,%esp + 36c: 55 push %ebp + 36d: 89 e5 mov %esp,%ebp + 36f: 57 push %edi + 370: 56 push %esi + 371: 53 push %ebx + 372: 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++){ - 397: 8b 75 0c mov 0xc(%ebp),%esi - 39a: 0f b6 1e movzbl (%esi),%ebx - 39d: 84 db test %bl,%bl - 39f: 0f 84 ab 01 00 00 je 550 - 3a5: 83 c6 01 add $0x1,%esi + 375: 8b 75 0c mov 0xc(%ebp),%esi + 378: 0f b6 1e movzbl (%esi),%ebx + 37b: 84 db test %bl,%bl + 37d: 0f 84 9f 01 00 00 je 522 + 383: 83 c6 01 add $0x1,%esi ap = (uint*)(void*)&fmt + 1; - 3a8: 8d 45 10 lea 0x10(%ebp),%eax - 3ab: 89 45 d4 mov %eax,-0x2c(%ebp) + 386: 8d 45 10 lea 0x10(%ebp),%eax + 389: 89 45 d4 mov %eax,-0x2c(%ebp) state = 0; - 3ae: bf 00 00 00 00 mov $0x0,%edi - 3b3: eb 2d jmp 3e2 + 38c: bf 00 00 00 00 mov $0x0,%edi + 391: eb 2d jmp 3c0 c = fmt[i] & 0xff; if(state == 0){ if(c == '%'){ state = '%'; } else { putc(fd, c); - 3b5: 88 5d e7 mov %bl,-0x19(%ebp) + 393: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 3b8: 83 ec 04 sub $0x4,%esp - 3bb: 6a 01 push $0x1 - 3bd: 8d 45 e7 lea -0x19(%ebp),%eax - 3c0: 50 push %eax - 3c1: ff 75 08 pushl 0x8(%ebp) - 3c4: e8 9d fe ff ff call 266 + 396: 83 ec 04 sub $0x4,%esp + 399: 6a 01 push $0x1 + 39b: 8d 45 e7 lea -0x19(%ebp),%eax + 39e: 50 push %eax + 39f: ff 75 08 push 0x8(%ebp) + 3a2: e8 9d fe ff ff call 244 putc(fd, c); - 3c9: 83 c4 10 add $0x10,%esp - 3cc: eb 05 jmp 3d3 + 3a7: 83 c4 10 add $0x10,%esp + 3aa: eb 05 jmp 3b1 } } else if(state == '%'){ - 3ce: 83 ff 25 cmp $0x25,%edi - 3d1: 74 22 je 3f5 + 3ac: 83 ff 25 cmp $0x25,%edi + 3af: 74 1f je 3d0 for(i = 0; fmt[i]; i++){ - 3d3: 83 c6 01 add $0x1,%esi - 3d6: 0f b6 5e ff movzbl -0x1(%esi),%ebx - 3da: 84 db test %bl,%bl - 3dc: 0f 84 6e 01 00 00 je 550 + 3b1: 83 c6 01 add $0x1,%esi + 3b4: 0f b6 5e ff movzbl -0x1(%esi),%ebx + 3b8: 84 db test %bl,%bl + 3ba: 0f 84 62 01 00 00 je 522 c = fmt[i] & 0xff; - 3e2: 0f be d3 movsbl %bl,%edx - 3e5: 0f b6 c3 movzbl %bl,%eax + 3c0: 0f b6 c3 movzbl %bl,%eax if(state == 0){ - 3e8: 85 ff test %edi,%edi - 3ea: 75 e2 jne 3ce + 3c3: 85 ff test %edi,%edi + 3c5: 75 e5 jne 3ac if(c == '%'){ - 3ec: 83 f8 25 cmp $0x25,%eax - 3ef: 75 c4 jne 3b5 + 3c7: 83 f8 25 cmp $0x25,%eax + 3ca: 75 c7 jne 393 state = '%'; - 3f1: 89 c7 mov %eax,%edi - 3f3: eb de jmp 3d3 + 3cc: 89 c7 mov %eax,%edi + 3ce: eb e1 jmp 3b1 if(c == 'd'){ - 3f5: 83 f8 64 cmp $0x64,%eax - 3f8: 74 59 je 453 + 3d0: 83 f8 25 cmp $0x25,%eax + 3d3: 0f 84 f2 00 00 00 je 4cb + 3d9: 8d 50 9d lea -0x63(%eax),%edx + 3dc: 83 fa 15 cmp $0x15,%edx + 3df: 0f 87 07 01 00 00 ja 4ec + 3e5: 0f 87 01 01 00 00 ja 4ec + 3eb: ff 24 95 94 06 00 00 jmp *0x694(,%edx,4) printint(fd, *ap, 10, 1); + 3f2: 83 ec 0c sub $0xc,%esp + 3f5: 6a 01 push $0x1 + 3f7: b9 0a 00 00 00 mov $0xa,%ecx + 3fc: 8b 7d d4 mov -0x2c(%ebp),%edi + 3ff: 8b 17 mov (%edi),%edx + 401: 8b 45 08 mov 0x8(%ebp),%eax + 404: e8 cb fe ff ff call 2d4 ap++; - } else if(c == 'x' || c == 'p'){ - 3fa: 81 e2 f7 00 00 00 and $0xf7,%edx - 400: 83 fa 70 cmp $0x70,%edx - 403: 74 7a je 47f - printint(fd, *ap, 16, 0); - ap++; - } else if(c == 's'){ - 405: 83 f8 73 cmp $0x73,%eax - 408: 0f 84 9d 00 00 00 je 4ab - s = "(null)"; - while(*s != 0){ - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 40e: 83 f8 63 cmp $0x63,%eax - 411: 0f 84 ec 00 00 00 je 503 - putc(fd, *ap); - ap++; - } else if(c == '%'){ - 417: 83 f8 25 cmp $0x25,%eax - 41a: 0f 84 0f 01 00 00 je 52f - putc(fd, c); + 409: 89 f8 mov %edi,%eax + 40b: 83 c0 04 add $0x4,%eax + 40e: 89 45 d4 mov %eax,-0x2c(%ebp) + 411: 83 c4 10 add $0x10,%esp } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); - 420: c6 45 e7 25 movb $0x25,-0x19(%ebp) - write(fd, &c, 1); - 424: 83 ec 04 sub $0x4,%esp - 427: 6a 01 push $0x1 - 429: 8d 45 e7 lea -0x19(%ebp),%eax - 42c: 50 push %eax - 42d: ff 75 08 pushl 0x8(%ebp) - 430: e8 31 fe ff ff call 266 putc(fd, c); - 435: 88 5d e7 mov %bl,-0x19(%ebp) - write(fd, &c, 1); - 438: 83 c4 0c add $0xc,%esp - 43b: 6a 01 push $0x1 - 43d: 8d 45 e7 lea -0x19(%ebp),%eax - 440: 50 push %eax - 441: ff 75 08 pushl 0x8(%ebp) - 444: e8 1d fe ff ff call 266 - putc(fd, c); - 449: 83 c4 10 add $0x10,%esp } state = 0; - 44c: bf 00 00 00 00 mov $0x0,%edi - 451: eb 80 jmp 3d3 - printint(fd, *ap, 10, 1); - 453: 83 ec 0c sub $0xc,%esp - 456: 6a 01 push $0x1 - 458: b9 0a 00 00 00 mov $0xa,%ecx - 45d: 8b 7d d4 mov -0x2c(%ebp),%edi - 460: 8b 17 mov (%edi),%edx - 462: 8b 45 08 mov 0x8(%ebp),%eax - 465: e8 8c fe ff ff call 2f6 - ap++; - 46a: 89 f8 mov %edi,%eax - 46c: 83 c0 04 add $0x4,%eax - 46f: 89 45 d4 mov %eax,-0x2c(%ebp) - 472: 83 c4 10 add $0x10,%esp - state = 0; - 475: bf 00 00 00 00 mov $0x0,%edi - 47a: e9 54 ff ff ff jmp 3d3 + 414: bf 00 00 00 00 mov $0x0,%edi + 419: eb 96 jmp 3b1 printint(fd, *ap, 16, 0); - 47f: 83 ec 0c sub $0xc,%esp - 482: 6a 00 push $0x0 - 484: b9 10 00 00 00 mov $0x10,%ecx - 489: 8b 7d d4 mov -0x2c(%ebp),%edi - 48c: 8b 17 mov (%edi),%edx - 48e: 8b 45 08 mov 0x8(%ebp),%eax - 491: e8 60 fe ff ff call 2f6 + 41b: 83 ec 0c sub $0xc,%esp + 41e: 6a 00 push $0x0 + 420: b9 10 00 00 00 mov $0x10,%ecx + 425: 8b 7d d4 mov -0x2c(%ebp),%edi + 428: 8b 17 mov (%edi),%edx + 42a: 8b 45 08 mov 0x8(%ebp),%eax + 42d: e8 a2 fe ff ff call 2d4 ap++; - 496: 89 f8 mov %edi,%eax - 498: 83 c0 04 add $0x4,%eax - 49b: 89 45 d4 mov %eax,-0x2c(%ebp) - 49e: 83 c4 10 add $0x10,%esp + 432: 89 f8 mov %edi,%eax + 434: 83 c0 04 add $0x4,%eax + 437: 89 45 d4 mov %eax,-0x2c(%ebp) + 43a: 83 c4 10 add $0x10,%esp state = 0; - 4a1: bf 00 00 00 00 mov $0x0,%edi - 4a6: e9 28 ff ff ff jmp 3d3 + 43d: bf 00 00 00 00 mov $0x0,%edi + 442: e9 6a ff ff ff jmp 3b1 s = (char*)*ap; - 4ab: 8b 4d d4 mov -0x2c(%ebp),%ecx - 4ae: 8b 01 mov (%ecx),%eax + 447: 8b 4d d4 mov -0x2c(%ebp),%ecx + 44a: 8b 01 mov (%ecx),%eax ap++; - 4b0: 83 c1 04 add $0x4,%ecx - 4b3: 89 4d d4 mov %ecx,-0x2c(%ebp) + 44c: 83 c1 04 add $0x4,%ecx + 44f: 89 4d d4 mov %ecx,-0x2c(%ebp) if(s == 0) - 4b6: 85 c0 test %eax,%eax - 4b8: 74 13 je 4cd + 452: 85 c0 test %eax,%eax + 454: 74 13 je 469 s = (char*)*ap; - 4ba: 89 c3 mov %eax,%ebx + 456: 89 c3 mov %eax,%ebx while(*s != 0){ - 4bc: 0f b6 00 movzbl (%eax),%eax + 458: 0f b6 00 movzbl (%eax),%eax state = 0; - 4bf: bf 00 00 00 00 mov $0x0,%edi + 45b: bf 00 00 00 00 mov $0x0,%edi while(*s != 0){ - 4c4: 84 c0 test %al,%al - 4c6: 75 0f jne 4d7 - 4c8: e9 06 ff ff ff jmp 3d3 + 460: 84 c0 test %al,%al + 462: 75 0f jne 473 + 464: e9 48 ff ff ff jmp 3b1 s = "(null)"; - 4cd: bb cb 06 00 00 mov $0x6cb,%ebx + 469: bb 8b 06 00 00 mov $0x68b,%ebx while(*s != 0){ - 4d2: b8 28 00 00 00 mov $0x28,%eax - 4d7: 8b 7d 08 mov 0x8(%ebp),%edi + 46e: b8 28 00 00 00 mov $0x28,%eax + 473: 8b 7d 08 mov 0x8(%ebp),%edi putc(fd, *s); - 4da: 88 45 e7 mov %al,-0x19(%ebp) + 476: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 4dd: 83 ec 04 sub $0x4,%esp - 4e0: 6a 01 push $0x1 - 4e2: 8d 45 e7 lea -0x19(%ebp),%eax - 4e5: 50 push %eax - 4e6: 57 push %edi - 4e7: e8 7a fd ff ff call 266 + 479: 83 ec 04 sub $0x4,%esp + 47c: 6a 01 push $0x1 + 47e: 8d 45 e7 lea -0x19(%ebp),%eax + 481: 50 push %eax + 482: 57 push %edi + 483: e8 bc fd ff ff call 244 s++; - 4ec: 83 c3 01 add $0x1,%ebx + 488: 83 c3 01 add $0x1,%ebx while(*s != 0){ - 4ef: 0f b6 03 movzbl (%ebx),%eax - 4f2: 83 c4 10 add $0x10,%esp - 4f5: 84 c0 test %al,%al - 4f7: 75 e1 jne 4da + 48b: 0f b6 03 movzbl (%ebx),%eax + 48e: 83 c4 10 add $0x10,%esp + 491: 84 c0 test %al,%al + 493: 75 e1 jne 476 state = 0; - 4f9: bf 00 00 00 00 mov $0x0,%edi - 4fe: e9 d0 fe ff ff jmp 3d3 + 495: bf 00 00 00 00 mov $0x0,%edi + 49a: e9 12 ff ff ff jmp 3b1 putc(fd, *ap); - 503: 8b 7d d4 mov -0x2c(%ebp),%edi - 506: 8b 07 mov (%edi),%eax - 508: 88 45 e7 mov %al,-0x19(%ebp) + 49f: 8b 7d d4 mov -0x2c(%ebp),%edi + 4a2: 8b 07 mov (%edi),%eax + 4a4: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 50b: 83 ec 04 sub $0x4,%esp - 50e: 6a 01 push $0x1 - 510: 8d 45 e7 lea -0x19(%ebp),%eax - 513: 50 push %eax - 514: ff 75 08 pushl 0x8(%ebp) - 517: e8 4a fd ff ff call 266 + 4a7: 83 ec 04 sub $0x4,%esp + 4aa: 6a 01 push $0x1 + 4ac: 8d 45 e7 lea -0x19(%ebp),%eax + 4af: 50 push %eax + 4b0: ff 75 08 push 0x8(%ebp) + 4b3: e8 8c fd ff ff call 244 ap++; - 51c: 83 c7 04 add $0x4,%edi - 51f: 89 7d d4 mov %edi,-0x2c(%ebp) - 522: 83 c4 10 add $0x10,%esp + 4b8: 83 c7 04 add $0x4,%edi + 4bb: 89 7d d4 mov %edi,-0x2c(%ebp) + 4be: 83 c4 10 add $0x10,%esp state = 0; - 525: bf 00 00 00 00 mov $0x0,%edi - 52a: e9 a4 fe ff ff jmp 3d3 + 4c1: bf 00 00 00 00 mov $0x0,%edi + 4c6: e9 e6 fe ff ff jmp 3b1 putc(fd, c); - 52f: 88 5d e7 mov %bl,-0x19(%ebp) + 4cb: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 532: 83 ec 04 sub $0x4,%esp - 535: 6a 01 push $0x1 - 537: 8d 45 e7 lea -0x19(%ebp),%eax - 53a: 50 push %eax - 53b: ff 75 08 pushl 0x8(%ebp) - 53e: e8 23 fd ff ff call 266 - 543: 83 c4 10 add $0x10,%esp + 4ce: 83 ec 04 sub $0x4,%esp + 4d1: 6a 01 push $0x1 + 4d3: 8d 45 e7 lea -0x19(%ebp),%eax + 4d6: 50 push %eax + 4d7: ff 75 08 push 0x8(%ebp) + 4da: e8 65 fd ff ff call 244 + 4df: 83 c4 10 add $0x10,%esp + state = 0; + 4e2: bf 00 00 00 00 mov $0x0,%edi + 4e7: e9 c5 fe ff ff jmp 3b1 + putc(fd, '%'); + 4ec: c6 45 e7 25 movb $0x25,-0x19(%ebp) + write(fd, &c, 1); + 4f0: 83 ec 04 sub $0x4,%esp + 4f3: 6a 01 push $0x1 + 4f5: 8d 45 e7 lea -0x19(%ebp),%eax + 4f8: 50 push %eax + 4f9: ff 75 08 push 0x8(%ebp) + 4fc: e8 43 fd ff ff call 244 + putc(fd, c); + 501: 88 5d e7 mov %bl,-0x19(%ebp) + write(fd, &c, 1); + 504: 83 c4 0c add $0xc,%esp + 507: 6a 01 push $0x1 + 509: 8d 45 e7 lea -0x19(%ebp),%eax + 50c: 50 push %eax + 50d: ff 75 08 push 0x8(%ebp) + 510: e8 2f fd ff ff call 244 + putc(fd, c); + 515: 83 c4 10 add $0x10,%esp state = 0; - 546: bf 00 00 00 00 mov $0x0,%edi - 54b: e9 83 fe ff ff jmp 3d3 + 518: bf 00 00 00 00 mov $0x0,%edi + 51d: e9 8f fe ff ff jmp 3b1 } } } - 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 - -00000558 : + 522: 8d 65 f4 lea -0xc(%ebp),%esp + 525: 5b pop %ebx + 526: 5e pop %esi + 527: 5f pop %edi + 528: 5d pop %ebp + 529: c3 ret + +0000052a : static Header base; static Header *freep; void free(void *ap) { - 558: f3 0f 1e fb endbr32 - 55c: 55 push %ebp - 55d: 89 e5 mov %esp,%ebp - 55f: 57 push %edi - 560: 56 push %esi - 561: 53 push %ebx - 562: 8b 5d 08 mov 0x8(%ebp),%ebx + 52a: 55 push %ebp + 52b: 89 e5 mov %esp,%ebp + 52d: 57 push %edi + 52e: 56 push %esi + 52f: 53 push %ebx + 530: 8b 5d 08 mov 0x8(%ebp),%ebx Header *bp, *p; bp = (Header*)ap - 1; - 565: 8d 4b f8 lea -0x8(%ebx),%ecx + 533: 8d 4b f8 lea -0x8(%ebx),%ecx for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 568: a1 40 09 00 00 mov 0x940,%eax - 56d: eb 0c jmp 57b + 536: a1 58 09 00 00 mov 0x958,%eax + 53b: eb 0c jmp 549 if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 56f: 8b 10 mov (%eax),%edx - 571: 39 c2 cmp %eax,%edx - 573: 77 04 ja 579 - 575: 39 ca cmp %ecx,%edx - 577: 77 10 ja 589 + 53d: 8b 10 mov (%eax),%edx + 53f: 39 c2 cmp %eax,%edx + 541: 77 04 ja 547 + 543: 39 ca cmp %ecx,%edx + 545: 77 10 ja 557 { - 579: 89 d0 mov %edx,%eax + 547: 89 d0 mov %edx,%eax for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 57b: 39 c8 cmp %ecx,%eax - 57d: 73 f0 jae 56f - 57f: 8b 10 mov (%eax),%edx - 581: 39 ca cmp %ecx,%edx - 583: 77 04 ja 589 + 549: 39 c8 cmp %ecx,%eax + 54b: 73 f0 jae 53d + 54d: 8b 10 mov (%eax),%edx + 54f: 39 ca cmp %ecx,%edx + 551: 77 04 ja 557 if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 585: 39 c2 cmp %eax,%edx - 587: 77 f0 ja 579 + 553: 39 c2 cmp %eax,%edx + 555: 77 f0 ja 547 break; if(bp + bp->s.size == p->s.ptr){ - 589: 8b 73 fc mov -0x4(%ebx),%esi - 58c: 8b 10 mov (%eax),%edx - 58e: 8d 3c f1 lea (%ecx,%esi,8),%edi - 591: 39 fa cmp %edi,%edx - 593: 74 19 je 5ae + 557: 8b 73 fc mov -0x4(%ebx),%esi + 55a: 8b 10 mov (%eax),%edx + 55c: 8d 3c f1 lea (%ecx,%esi,8),%edi + 55f: 39 fa cmp %edi,%edx + 561: 74 19 je 57c bp->s.size += p->s.ptr->s.size; bp->s.ptr = p->s.ptr->s.ptr; + 563: 89 53 f8 mov %edx,-0x8(%ebx) } else bp->s.ptr = p->s.ptr; - 595: 89 53 f8 mov %edx,-0x8(%ebx) if(p + p->s.size == bp){ - 598: 8b 50 04 mov 0x4(%eax),%edx - 59b: 8d 34 d0 lea (%eax,%edx,8),%esi - 59e: 39 f1 cmp %esi,%ecx - 5a0: 74 1b je 5bd + 566: 8b 50 04 mov 0x4(%eax),%edx + 569: 8d 34 d0 lea (%eax,%edx,8),%esi + 56c: 39 f1 cmp %esi,%ecx + 56e: 74 18 je 588 p->s.size += bp->s.size; p->s.ptr = bp->s.ptr; + 570: 89 08 mov %ecx,(%eax) } else p->s.ptr = bp; - 5a2: 89 08 mov %ecx,(%eax) freep = p; - 5a4: a3 40 09 00 00 mov %eax,0x940 + 572: a3 58 09 00 00 mov %eax,0x958 } - 5a9: 5b pop %ebx - 5aa: 5e pop %esi - 5ab: 5f pop %edi - 5ac: 5d pop %ebp - 5ad: c3 ret + 577: 5b pop %ebx + 578: 5e pop %esi + 579: 5f pop %edi + 57a: 5d pop %ebp + 57b: c3 ret bp->s.size += p->s.ptr->s.size; - 5ae: 03 72 04 add 0x4(%edx),%esi - 5b1: 89 73 fc mov %esi,-0x4(%ebx) + 57c: 03 72 04 add 0x4(%edx),%esi + 57f: 89 73 fc mov %esi,-0x4(%ebx) bp->s.ptr = p->s.ptr->s.ptr; - 5b4: 8b 10 mov (%eax),%edx - 5b6: 8b 12 mov (%edx),%edx - 5b8: 89 53 f8 mov %edx,-0x8(%ebx) - 5bb: eb db jmp 598 + 582: 8b 10 mov (%eax),%edx + 584: 8b 12 mov (%edx),%edx + 586: eb db jmp 563 p->s.size += bp->s.size; - 5bd: 03 53 fc add -0x4(%ebx),%edx - 5c0: 89 50 04 mov %edx,0x4(%eax) + 588: 03 53 fc add -0x4(%ebx),%edx + 58b: 89 50 04 mov %edx,0x4(%eax) p->s.ptr = bp->s.ptr; - 5c3: 8b 53 f8 mov -0x8(%ebx),%edx - 5c6: 89 10 mov %edx,(%eax) - 5c8: eb da jmp 5a4 + 58e: 8b 4b f8 mov -0x8(%ebx),%ecx + 591: eb dd jmp 570 -000005ca : +00000593 : return freep; } void* malloc(uint nbytes) { - 5ca: f3 0f 1e fb endbr32 - 5ce: 55 push %ebp - 5cf: 89 e5 mov %esp,%ebp - 5d1: 57 push %edi - 5d2: 56 push %esi - 5d3: 53 push %ebx - 5d4: 83 ec 0c sub $0xc,%esp + 593: 55 push %ebp + 594: 89 e5 mov %esp,%ebp + 596: 57 push %edi + 597: 56 push %esi + 598: 53 push %ebx + 599: 83 ec 0c sub $0xc,%esp Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 5d7: 8b 45 08 mov 0x8(%ebp),%eax - 5da: 8d 58 07 lea 0x7(%eax),%ebx - 5dd: c1 eb 03 shr $0x3,%ebx - 5e0: 83 c3 01 add $0x1,%ebx + 59c: 8b 45 08 mov 0x8(%ebp),%eax + 59f: 8d 58 07 lea 0x7(%eax),%ebx + 5a2: c1 eb 03 shr $0x3,%ebx + 5a5: 83 c3 01 add $0x1,%ebx if((prevp = freep) == 0){ - 5e3: 8b 15 40 09 00 00 mov 0x940,%edx - 5e9: 85 d2 test %edx,%edx - 5eb: 74 20 je 60d + 5a8: 8b 15 58 09 00 00 mov 0x958,%edx + 5ae: 85 d2 test %edx,%edx + 5b0: 74 1c je 5ce base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 5ed: 8b 02 mov (%edx),%eax + 5b2: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 5ef: 8b 48 04 mov 0x4(%eax),%ecx - 5f2: 39 cb cmp %ecx,%ebx - 5f4: 76 3c jbe 632 - 5f6: 81 fb 00 10 00 00 cmp $0x1000,%ebx - 5fc: be 00 10 00 00 mov $0x1000,%esi - 601: 0f 43 f3 cmovae %ebx,%esi + 5b4: 8b 48 04 mov 0x4(%eax),%ecx + 5b7: 39 cb cmp %ecx,%ebx + 5b9: 76 38 jbe 5f3 + 5bb: be 00 10 00 00 mov $0x1000,%esi + 5c0: 39 f3 cmp %esi,%ebx + 5c2: 0f 43 f3 cmovae %ebx,%esi p = sbrk(nu * sizeof(Header)); - 604: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi - 60b: eb 72 jmp 67f + 5c5: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi + 5cc: eb 72 jmp 640 base.s.ptr = freep = prevp = &base; - 60d: c7 05 40 09 00 00 44 movl $0x944,0x940 - 614: 09 00 00 - 617: c7 05 44 09 00 00 44 movl $0x944,0x944 - 61e: 09 00 00 + 5ce: c7 05 58 09 00 00 5c movl $0x95c,0x958 + 5d5: 09 00 00 + 5d8: c7 05 5c 09 00 00 5c movl $0x95c,0x95c + 5df: 09 00 00 base.s.size = 0; - 621: c7 05 48 09 00 00 00 movl $0x0,0x948 - 628: 00 00 00 + 5e2: c7 05 60 09 00 00 00 movl $0x0,0x960 + 5e9: 00 00 00 for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 62b: b8 44 09 00 00 mov $0x944,%eax - 630: eb c4 jmp 5f6 + 5ec: b8 5c 09 00 00 mov $0x95c,%eax + 5f1: eb c8 jmp 5bb if(p->s.size == nunits) - 632: 39 cb cmp %ecx,%ebx - 634: 74 1e je 654 + 5f3: 39 cb cmp %ecx,%ebx + 5f5: 74 1e je 615 prevp->s.ptr = p->s.ptr; else { p->s.size -= nunits; - 636: 29 d9 sub %ebx,%ecx - 638: 89 48 04 mov %ecx,0x4(%eax) + 5f7: 29 d9 sub %ebx,%ecx + 5f9: 89 48 04 mov %ecx,0x4(%eax) p += p->s.size; - 63b: 8d 04 c8 lea (%eax,%ecx,8),%eax + 5fc: 8d 04 c8 lea (%eax,%ecx,8),%eax p->s.size = nunits; - 63e: 89 58 04 mov %ebx,0x4(%eax) + 5ff: 89 58 04 mov %ebx,0x4(%eax) } freep = prevp; - 641: 89 15 40 09 00 00 mov %edx,0x940 + 602: 89 15 58 09 00 00 mov %edx,0x958 return (void*)(p + 1); - 647: 8d 50 08 lea 0x8(%eax),%edx + 608: 8d 50 08 lea 0x8(%eax),%edx } if(p == freep) if((p = morecore(nunits)) == 0) return 0; } } - 64a: 89 d0 mov %edx,%eax - 64c: 8d 65 f4 lea -0xc(%ebp),%esp - 64f: 5b pop %ebx - 650: 5e pop %esi - 651: 5f pop %edi - 652: 5d pop %ebp - 653: c3 ret + 60b: 89 d0 mov %edx,%eax + 60d: 8d 65 f4 lea -0xc(%ebp),%esp + 610: 5b pop %ebx + 611: 5e pop %esi + 612: 5f pop %edi + 613: 5d pop %ebp + 614: c3 ret prevp->s.ptr = p->s.ptr; - 654: 8b 08 mov (%eax),%ecx - 656: 89 0a mov %ecx,(%edx) - 658: eb e7 jmp 641 + 615: 8b 08 mov (%eax),%ecx + 617: 89 0a mov %ecx,(%edx) + 619: eb e7 jmp 602 hp->s.size = nu; - 65a: 89 70 04 mov %esi,0x4(%eax) + 61b: 89 70 04 mov %esi,0x4(%eax) free((void*)(hp + 1)); - 65d: 83 ec 0c sub $0xc,%esp - 660: 83 c0 08 add $0x8,%eax - 663: 50 push %eax - 664: e8 ef fe ff ff call 558 + 61e: 83 ec 0c sub $0xc,%esp + 621: 83 c0 08 add $0x8,%eax + 624: 50 push %eax + 625: e8 00 ff ff ff call 52a return freep; - 669: 8b 15 40 09 00 00 mov 0x940,%edx + 62a: 8b 15 58 09 00 00 mov 0x958,%edx if((p = morecore(nunits)) == 0) - 66f: 83 c4 10 add $0x10,%esp - 672: 85 d2 test %edx,%edx - 674: 74 d4 je 64a + 630: 83 c4 10 add $0x10,%esp + 633: 85 d2 test %edx,%edx + 635: 74 d4 je 60b for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 676: 8b 02 mov (%edx),%eax + 637: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 678: 8b 48 04 mov 0x4(%eax),%ecx - 67b: 39 d9 cmp %ebx,%ecx - 67d: 73 b3 jae 632 + 639: 8b 48 04 mov 0x4(%eax),%ecx + 63c: 39 d9 cmp %ebx,%ecx + 63e: 73 b3 jae 5f3 if(p == freep) - 67f: 89 c2 mov %eax,%edx - 681: 39 05 40 09 00 00 cmp %eax,0x940 - 687: 75 ed jne 676 + 640: 89 c2 mov %eax,%edx + 642: 39 05 58 09 00 00 cmp %eax,0x958 + 648: 75 ed jne 637 p = sbrk(nu * sizeof(Header)); - 689: 83 ec 0c sub $0xc,%esp - 68c: 57 push %edi - 68d: e8 3c fc ff ff call 2ce + 64a: 83 ec 0c sub $0xc,%esp + 64d: 57 push %edi + 64e: e8 59 fc ff ff call 2ac if(p == (char*)-1) - 692: 83 c4 10 add $0x10,%esp - 695: 83 f8 ff cmp $0xffffffff,%eax - 698: 75 c0 jne 65a + 653: 83 c4 10 add $0x10,%esp + 656: 83 f8 ff cmp $0xffffffff,%eax + 659: 75 c0 jne 61b return 0; - 69a: ba 00 00 00 00 mov $0x0,%edx - 69f: eb a9 jmp 64a + 65b: ba 00 00 00 00 mov $0x0,%edx + 660: eb a9 jmp 60b diff --git a/src/user/ln.d b/src/user/ln.d new file mode 100644 index 0000000..a6dabde --- /dev/null +++ b/src/user/ln.d @@ -0,0 +1 @@ +user/ln.o: user/ln.c /usr/include/stdc-predef.h types.h stat.h user.h diff --git a/src/user/ln.o b/src/user/ln.o new file mode 100644 index 0000000000000000000000000000000000000000..e96572318fc680d045dae41d2e1fa172fd2a16c0 GIT binary patch literal 3056 zcma)7TWl0n7(R2`UbgolZ3WX+TQ0&**;1iYK%^j)5Q&loF&Hwto$ik8&X$?kQV5D# zyv3NvqspsKzLM~2A~D7X6ODma9w2J;L3|)4kks!xdrrG0Ci-XReEigFO1 z$qdK%O=M=hpzP1IiZs^f2*c)lPCJGty2&a!rO>dO$QfqS&jh3SzLcC_04duE!bCK+ zAd}hS?1yRwpS3&)dyd{lsskR)0r-}C7|fLPZS7~=)2YuG!(bVh7Hu~4M#`Xy#HAQl zsci3+mR4HKE23jiifd_F3soD{8!)^>W($TInOzvB$Q;y~6JY2gY%bmA!h|s-(&@cv zs{@XQ#hb<@9INGsDS+K6(ofptoNi;dqc?30t{dz&dQx3|I0O}kOKx(F=Lf8giS%>n zUFnSjQ@y(f3vD*59F|d0;h}P9n^_X-&mejV|GS$mD_w`?pS=$|rdB-_n_90^}jDuq6&tzC`hhCb_Oy+iGayfU*-ImE#wvS>+YN5ZU=!bq3 z6d-z0p|mI1F}@>{Ef#0;ne4G#COaEev-w(3PJ*y5#0k8UtXB@aI0%b%WwjC{+1bde z_}RHCCiEli>=n*r=b~!j7m}({&ILZKUVJ_*l%i@_t;N||crFNMvWb^3`!S4h!ni`& zi%U8>sD>ggRih-cYG-v7_vkMKiCDH3N?s%?UJ%N6ETrf~#e$fN;5;k9&x?^#wc?M| z^0hFjjl@ww)M7sxDTi+1-%Y|5(kKV|y68NICMPE{o2F$Fb->wNJ!kH%(NTBX*k+~1 zC9c6oGA_I#jEl|2x;ESX5EU>49ZQHL%jQ6vA*Q+zU&G-c+9|h9yIA!>8R|dAuer-VLA!2K6 zf5gX$cv#G9pmT2~!f%^G`D7vQRq_#qWrgz!-&Odz!Y_%)drisTDExtlqyI_aEh7AG zEBsC2UkV>61nD(P^=T;=s+Ee5NA8AbB`(@oRiG4~xh5&YCzGM2Z*`qYXu#!=Bl0H?aLFeNiEdBq>Pu3p%MpXjl zW4&u)K7Nx5wf;JoPCZ$J?RoHx`zT`{-$BQH@C@`mj)89o7vDm-37sZwdmReR({>g0 z#CNDk+s;CvdD?zd_4lYB{~jCHH->k}I_LUY@#*zl2H%+P9`bPxP1^Q06pi@~AfLWB zb}^lg=gJtKHz|*c8PZ80ljZk?LhbiH5*&a|llJ=x3i8_Td-!eDPRd66HN|VweJ-eh z=tJTik;gVA{SCi;iYMr>8{ixFdlCC(o$>tG@90OlF&9KJj=p#s_!vHY&RyV{OV=n^ Z(T^foPezemUpM4Nzss1HeNB`0`v;}Zg#-Wq literal 0 HcmV?d00001 diff --git a/src/user/ln.sym b/src/user/ln.sym index 2b3f57e..e7ff64e 100644 --- a/src/user/ln.sym +++ b/src/user/ln.sym @@ -1,59 +1,47 @@ -00000000 .text -000006a4 .rodata -000006e8 .eh_frame -00000940 .bss -00000000 .comment -00000000 .debug_aranges -00000000 .debug_info -00000000 .debug_abbrev -00000000 .debug_line -00000000 .debug_str -00000000 .debug_loc -00000000 .debug_ranges 00000000 ln.c 00000000 ulib.c 00000000 printf.c -000002f6 printint -000006d4 digits.1089 +000002d4 printint +000006ec digits.0 00000000 umalloc.c -00000940 freep -00000944 base -00000060 strcpy -0000038a printf -0000020d memmove -0000028e mknod -000002ee ps -0000012b gets -000002c6 getpid -000005ca malloc -000002d6 sleep -00000256 pipe -000002e6 slabtest -00000266 write -0000029e fstat -00000276 kill -000002b6 chdir -0000027e exec -0000024e wait -0000025e read -00000296 unlink -0000023e fork -000002ce sbrk -000002de uptime -00000940 __bss_start -000000df memset +00000958 freep +0000095c base +0000005c strcpy +0000036c printf +000001ef memmove +0000026c mknod +000002cc ps +00000117 gets +000002a4 getpid +00000593 malloc +000002b4 sleep +00000234 pipe +000002c4 slabtest +00000244 write +0000027c fstat +00000254 kill +00000294 chdir +0000025c exec +0000022c wait +0000023c read +00000274 unlink +0000021c fork +000002ac sbrk +000002bc uptime +00000958 __bss_start +000000d1 memset 00000000 main -00000086 strcmp -000002be dup -00000186 stat -00000940 _edata -0000094c _end -000002a6 link -00000246 exit -000001ce atoi -000000b5 strlen -00000286 open -000000fa strchr -000002ae mkdir -0000026e close -00000558 free +00000080 strcmp +0000029c dup +0000016e stat +00000958 _edata +00000964 _end +00000284 link +00000224 exit +000001b2 atoi +000000ab strlen +00000264 open +000000ea strchr +0000028c mkdir +0000024c close +0000052a free diff --git a/src/user/ls.asm b/src/user/ls.asm index ef9f6d9..edc2d36 100644 --- a/src/user/ls.asm +++ b/src/user/ls.asm @@ -11,1341 +11,1308 @@ Disassembly of section .text: char* fmtname(char *path) { - 0: f3 0f 1e fb endbr32 - 4: 55 push %ebp - 5: 89 e5 mov %esp,%ebp - 7: 56 push %esi - 8: 53 push %ebx - 9: 8b 5d 08 mov 0x8(%ebp),%ebx + 0: 55 push %ebp + 1: 89 e5 mov %esp,%ebp + 3: 56 push %esi + 4: 53 push %ebx + 5: 8b 5d 08 mov 0x8(%ebp),%ebx static char buf[DIRSIZ+1]; char *p; // Find first character after last slash. for(p=path+strlen(path); p >= path && *p != '/'; p--) - c: 83 ec 0c sub $0xc,%esp - f: 53 push %ebx - 10: e8 1e 03 00 00 call 333 - 15: 83 c4 10 add $0x10,%esp - 18: 01 d8 add %ebx,%eax - 1a: 72 0c jb 28 - 1c: 80 38 2f cmpb $0x2f,(%eax) - 1f: 74 07 je 28 - 21: 83 e8 01 sub $0x1,%eax - 24: 39 c3 cmp %eax,%ebx - 26: 76 f4 jbe 1c + 8: 83 ec 0c sub $0xc,%esp + b: 53 push %ebx + c: e8 11 03 00 00 call 322 + 11: 83 c4 10 add $0x10,%esp + 14: 01 d8 add %ebx,%eax + 16: 72 0c jb 24 + 18: 80 38 2f cmpb $0x2f,(%eax) + 1b: 74 07 je 24 + 1d: 83 e8 01 sub $0x1,%eax + 20: 39 c3 cmp %eax,%ebx + 22: 76 f4 jbe 18 ; p++; - 28: 8d 58 01 lea 0x1(%eax),%ebx + 24: 8d 58 01 lea 0x1(%eax),%ebx // Return blank-padded name. if(strlen(p) >= DIRSIZ) - 2b: 83 ec 0c sub $0xc,%esp - 2e: 53 push %ebx - 2f: e8 ff 02 00 00 call 333 - 34: 83 c4 10 add $0x10,%esp - 37: 83 f8 0d cmp $0xd,%eax - 3a: 76 09 jbe 45 + 27: 83 ec 0c sub $0xc,%esp + 2a: 53 push %ebx + 2b: e8 f2 02 00 00 call 322 + 30: 83 c4 10 add $0x10,%esp + 33: 83 f8 0d cmp $0xd,%eax + 36: 76 09 jbe 41 return p; memmove(buf, p, strlen(p)); memset(buf+strlen(p), ' ', DIRSIZ-strlen(p)); return buf; } - 3c: 89 d8 mov %ebx,%eax - 3e: 8d 65 f8 lea -0x8(%ebp),%esp - 41: 5b pop %ebx - 42: 5e pop %esi - 43: 5d pop %ebp - 44: c3 ret + 38: 89 d8 mov %ebx,%eax + 3a: 8d 65 f8 lea -0x8(%ebp),%esp + 3d: 5b pop %ebx + 3e: 5e pop %esi + 3f: 5d pop %ebp + 40: c3 ret memmove(buf, p, strlen(p)); - 45: 83 ec 0c sub $0xc,%esp - 48: 53 push %ebx - 49: e8 e5 02 00 00 call 333 - 4e: 83 c4 0c add $0xc,%esp - 51: 50 push %eax - 52: 53 push %ebx - 53: 68 40 0c 00 00 push $0xc40 - 58: e8 2e 04 00 00 call 48b + 41: 83 ec 0c sub $0xc,%esp + 44: 53 push %ebx + 45: e8 d8 02 00 00 call 322 + 4a: 83 c4 0c add $0xc,%esp + 4d: 50 push %eax + 4e: 53 push %ebx + 4f: 68 58 0c 00 00 push $0xc58 + 54: e8 0d 04 00 00 call 466 memset(buf+strlen(p), ' ', DIRSIZ-strlen(p)); - 5d: 89 1c 24 mov %ebx,(%esp) - 60: e8 ce 02 00 00 call 333 - 65: 89 c6 mov %eax,%esi - 67: 89 1c 24 mov %ebx,(%esp) - 6a: e8 c4 02 00 00 call 333 - 6f: 83 c4 0c add $0xc,%esp - 72: ba 0e 00 00 00 mov $0xe,%edx - 77: 29 f2 sub %esi,%edx - 79: 52 push %edx - 7a: 6a 20 push $0x20 - 7c: 05 40 0c 00 00 add $0xc40,%eax - 81: 50 push %eax - 82: e8 d6 02 00 00 call 35d + 59: 89 1c 24 mov %ebx,(%esp) + 5c: e8 c1 02 00 00 call 322 + 61: 89 c6 mov %eax,%esi + 63: 89 1c 24 mov %ebx,(%esp) + 66: e8 b7 02 00 00 call 322 + 6b: 83 c4 0c add $0xc,%esp + 6e: ba 0e 00 00 00 mov $0xe,%edx + 73: 29 f2 sub %esi,%edx + 75: 52 push %edx + 76: 6a 20 push $0x20 + 78: 05 58 0c 00 00 add $0xc58,%eax + 7d: 50 push %eax + 7e: e8 c5 02 00 00 call 348 return buf; - 87: 83 c4 10 add $0x10,%esp - 8a: bb 40 0c 00 00 mov $0xc40,%ebx - 8f: eb ab jmp 3c + 83: 83 c4 10 add $0x10,%esp + 86: bb 58 0c 00 00 mov $0xc58,%ebx + 8b: eb ab jmp 38 -00000091 : +0000008d : void ls(char *path) { - 91: f3 0f 1e fb endbr32 - 95: 55 push %ebp - 96: 89 e5 mov %esp,%ebp - 98: 57 push %edi - 99: 56 push %esi - 9a: 53 push %ebx - 9b: 81 ec 54 02 00 00 sub $0x254,%esp - a1: 8b 5d 08 mov 0x8(%ebp),%ebx + 8d: 55 push %ebp + 8e: 89 e5 mov %esp,%ebp + 90: 57 push %edi + 91: 56 push %esi + 92: 53 push %ebx + 93: 81 ec 54 02 00 00 sub $0x254,%esp + 99: 8b 5d 08 mov 0x8(%ebp),%ebx char buf[512], *p; int fd; struct dirent de; struct stat st; if((fd = open(path, 0)) < 0){ - a4: 6a 00 push $0x0 - a6: 53 push %ebx - a7: e8 58 04 00 00 call 504 - ac: 83 c4 10 add $0x10,%esp - af: 85 c0 test %eax,%eax - b1: 78 7b js 12e - b3: 89 c6 mov %eax,%esi + 9c: 6a 00 push $0x0 + 9e: 53 push %ebx + 9f: e8 37 04 00 00 call 4db + a4: 83 c4 10 add $0x10,%esp + a7: 85 c0 test %eax,%eax + a9: 78 7b js 126 + ab: 89 c6 mov %eax,%esi printf(2, "ls: cannot open %s\n", path); return; } if(fstat(fd, &st) < 0){ - b5: 83 ec 08 sub $0x8,%esp - b8: 8d 85 c4 fd ff ff lea -0x23c(%ebp),%eax - be: 50 push %eax - bf: 56 push %esi - c0: e8 57 04 00 00 call 51c - c5: 83 c4 10 add $0x10,%esp - c8: 85 c0 test %eax,%eax - ca: 78 77 js 143 + ad: 83 ec 08 sub $0x8,%esp + b0: 8d 85 c4 fd ff ff lea -0x23c(%ebp),%eax + b6: 50 push %eax + b7: 56 push %esi + b8: e8 36 04 00 00 call 4f3 + bd: 83 c4 10 add $0x10,%esp + c0: 85 c0 test %eax,%eax + c2: 78 77 js 13b printf(2, "ls: cannot stat %s\n", path); close(fd); return; } switch(st.type){ - cc: 0f b7 85 c4 fd ff ff movzwl -0x23c(%ebp),%eax - d3: 66 83 f8 01 cmp $0x1,%ax - d7: 0f 84 83 00 00 00 je 160 - dd: 66 83 f8 02 cmp $0x2,%ax - e1: 75 37 jne 11a + c4: 0f b7 85 c4 fd ff ff movzwl -0x23c(%ebp),%eax + cb: 66 83 f8 01 cmp $0x1,%ax + cf: 0f 84 83 00 00 00 je 158 + d5: 66 83 f8 02 cmp $0x2,%ax + d9: 75 37 jne 112 case T_FILE: printf(1, "%s %d %d %d\n", fmtname(path), st.type, st.ino, st.size); - e3: 8b bd d4 fd ff ff mov -0x22c(%ebp),%edi - e9: 8b 85 cc fd ff ff mov -0x234(%ebp),%eax - ef: 89 85 b4 fd ff ff mov %eax,-0x24c(%ebp) - f5: 83 ec 0c sub $0xc,%esp - f8: 53 push %ebx - f9: e8 02 ff ff ff call 0 - fe: 83 c4 08 add $0x8,%esp - 101: 57 push %edi - 102: ff b5 b4 fd ff ff pushl -0x24c(%ebp) - 108: 6a 02 push $0x2 - 10a: 50 push %eax - 10b: 68 48 09 00 00 push $0x948 - 110: 6a 01 push $0x1 - 112: e8 f1 04 00 00 call 608 + db: 8b bd d4 fd ff ff mov -0x22c(%ebp),%edi + e1: 8b 85 cc fd ff ff mov -0x234(%ebp),%eax + e7: 89 85 b4 fd ff ff mov %eax,-0x24c(%ebp) + ed: 83 ec 0c sub $0xc,%esp + f0: 53 push %ebx + f1: e8 0a ff ff ff call 0 + f6: 83 c4 08 add $0x8,%esp + f9: 57 push %edi + fa: ff b5 b4 fd ff ff push -0x24c(%ebp) + 100: 6a 02 push $0x2 + 102: 50 push %eax + 103: 68 04 09 00 00 push $0x904 + 108: 6a 01 push $0x1 + 10a: e8 d4 04 00 00 call 5e3 break; - 117: 83 c4 20 add $0x20,%esp + 10f: 83 c4 20 add $0x20,%esp } printf(1, "%s %d %d %d\n", fmtname(buf), st.type, st.ino, st.size); } break; } close(fd); - 11a: 83 ec 0c sub $0xc,%esp - 11d: 56 push %esi - 11e: e8 c9 03 00 00 call 4ec - 123: 83 c4 10 add $0x10,%esp + 112: 83 ec 0c sub $0xc,%esp + 115: 56 push %esi + 116: e8 a8 03 00 00 call 4c3 + 11b: 83 c4 10 add $0x10,%esp } - 126: 8d 65 f4 lea -0xc(%ebp),%esp - 129: 5b pop %ebx - 12a: 5e pop %esi - 12b: 5f pop %edi - 12c: 5d pop %ebp - 12d: c3 ret + 11e: 8d 65 f4 lea -0xc(%ebp),%esp + 121: 5b pop %ebx + 122: 5e pop %esi + 123: 5f pop %edi + 124: 5d pop %ebp + 125: c3 ret printf(2, "ls: cannot open %s\n", path); - 12e: 83 ec 04 sub $0x4,%esp - 131: 53 push %ebx - 132: 68 20 09 00 00 push $0x920 - 137: 6a 02 push $0x2 - 139: e8 ca 04 00 00 call 608 + 126: 83 ec 04 sub $0x4,%esp + 129: 53 push %ebx + 12a: 68 dc 08 00 00 push $0x8dc + 12f: 6a 02 push $0x2 + 131: e8 ad 04 00 00 call 5e3 return; - 13e: 83 c4 10 add $0x10,%esp - 141: eb e3 jmp 126 + 136: 83 c4 10 add $0x10,%esp + 139: eb e3 jmp 11e printf(2, "ls: cannot stat %s\n", path); - 143: 83 ec 04 sub $0x4,%esp - 146: 53 push %ebx - 147: 68 34 09 00 00 push $0x934 - 14c: 6a 02 push $0x2 - 14e: e8 b5 04 00 00 call 608 + 13b: 83 ec 04 sub $0x4,%esp + 13e: 53 push %ebx + 13f: 68 f0 08 00 00 push $0x8f0 + 144: 6a 02 push $0x2 + 146: e8 98 04 00 00 call 5e3 close(fd); - 153: 89 34 24 mov %esi,(%esp) - 156: e8 91 03 00 00 call 4ec + 14b: 89 34 24 mov %esi,(%esp) + 14e: e8 70 03 00 00 call 4c3 return; - 15b: 83 c4 10 add $0x10,%esp - 15e: eb c6 jmp 126 + 153: 83 c4 10 add $0x10,%esp + 156: eb c6 jmp 11e if(strlen(path) + 1 + DIRSIZ + 1 > sizeof buf){ - 160: 83 ec 0c sub $0xc,%esp - 163: 53 push %ebx - 164: e8 ca 01 00 00 call 333 - 169: 83 c0 10 add $0x10,%eax - 16c: 83 c4 10 add $0x10,%esp - 16f: 3d 00 02 00 00 cmp $0x200,%eax - 174: 76 14 jbe 18a + 158: 83 ec 0c sub $0xc,%esp + 15b: 53 push %ebx + 15c: e8 c1 01 00 00 call 322 + 161: 83 c0 10 add $0x10,%eax + 164: 83 c4 10 add $0x10,%esp + 167: 3d 00 02 00 00 cmp $0x200,%eax + 16c: 76 14 jbe 182 printf(1, "ls: path too long\n"); - 176: 83 ec 08 sub $0x8,%esp - 179: 68 55 09 00 00 push $0x955 - 17e: 6a 01 push $0x1 - 180: e8 83 04 00 00 call 608 + 16e: 83 ec 08 sub $0x8,%esp + 171: 68 11 09 00 00 push $0x911 + 176: 6a 01 push $0x1 + 178: e8 66 04 00 00 call 5e3 break; - 185: 83 c4 10 add $0x10,%esp - 188: eb 90 jmp 11a + 17d: 83 c4 10 add $0x10,%esp + 180: eb 90 jmp 112 strcpy(buf, path); - 18a: 83 ec 08 sub $0x8,%esp - 18d: 53 push %ebx - 18e: 8d bd e8 fd ff ff lea -0x218(%ebp),%edi - 194: 57 push %edi - 195: e8 44 01 00 00 call 2de + 182: 83 ec 08 sub $0x8,%esp + 185: 53 push %ebx + 186: 8d bd e8 fd ff ff lea -0x218(%ebp),%edi + 18c: 57 push %edi + 18d: e8 41 01 00 00 call 2d3 p = buf+strlen(buf); - 19a: 89 3c 24 mov %edi,(%esp) - 19d: e8 91 01 00 00 call 333 - 1a2: 01 c7 add %eax,%edi + 192: 89 3c 24 mov %edi,(%esp) + 195: e8 88 01 00 00 call 322 + 19a: 01 c7 add %eax,%edi *p++ = '/'; - 1a4: 8d 47 01 lea 0x1(%edi),%eax - 1a7: 89 85 a8 fd ff ff mov %eax,-0x258(%ebp) - 1ad: c6 07 2f movb $0x2f,(%edi) + 19c: 8d 47 01 lea 0x1(%edi),%eax + 19f: 89 85 a8 fd ff ff mov %eax,-0x258(%ebp) + 1a5: c6 07 2f movb $0x2f,(%edi) while(read(fd, &de, sizeof(de)) == sizeof(de)){ - 1b0: 83 c4 10 add $0x10,%esp - 1b3: 8d 9d d8 fd ff ff lea -0x228(%ebp),%ebx - 1b9: eb 19 jmp 1d4 + 1a8: 83 c4 10 add $0x10,%esp + 1ab: 8d 9d d8 fd ff ff lea -0x228(%ebp),%ebx + 1b1: eb 19 jmp 1cc printf(1, "ls: cannot stat %s\n", buf); - 1bb: 83 ec 04 sub $0x4,%esp - 1be: 8d 85 e8 fd ff ff lea -0x218(%ebp),%eax - 1c4: 50 push %eax - 1c5: 68 34 09 00 00 push $0x934 - 1ca: 6a 01 push $0x1 - 1cc: e8 37 04 00 00 call 608 + 1b3: 83 ec 04 sub $0x4,%esp + 1b6: 8d 85 e8 fd ff ff lea -0x218(%ebp),%eax + 1bc: 50 push %eax + 1bd: 68 f0 08 00 00 push $0x8f0 + 1c2: 6a 01 push $0x1 + 1c4: e8 1a 04 00 00 call 5e3 continue; - 1d1: 83 c4 10 add $0x10,%esp + 1c9: 83 c4 10 add $0x10,%esp while(read(fd, &de, sizeof(de)) == sizeof(de)){ - 1d4: 83 ec 04 sub $0x4,%esp - 1d7: 6a 10 push $0x10 - 1d9: 53 push %ebx - 1da: 56 push %esi - 1db: e8 fc 02 00 00 call 4dc - 1e0: 83 c4 10 add $0x10,%esp - 1e3: 83 f8 10 cmp $0x10,%eax - 1e6: 0f 85 2e ff ff ff jne 11a + 1cc: 83 ec 04 sub $0x4,%esp + 1cf: 6a 10 push $0x10 + 1d1: 53 push %ebx + 1d2: 56 push %esi + 1d3: e8 db 02 00 00 call 4b3 + 1d8: 83 c4 10 add $0x10,%esp + 1db: 83 f8 10 cmp $0x10,%eax + 1de: 0f 85 2e ff ff ff jne 112 if(de.inum == 0) - 1ec: 66 83 bd d8 fd ff ff cmpw $0x0,-0x228(%ebp) - 1f3: 00 - 1f4: 74 de je 1d4 + 1e4: 66 83 bd d8 fd ff ff cmpw $0x0,-0x228(%ebp) + 1eb: 00 + 1ec: 74 de je 1cc memmove(p, de.name, DIRSIZ); - 1f6: 83 ec 04 sub $0x4,%esp - 1f9: 6a 0e push $0xe - 1fb: 8d 85 da fd ff ff lea -0x226(%ebp),%eax - 201: 50 push %eax - 202: ff b5 a8 fd ff ff pushl -0x258(%ebp) - 208: e8 7e 02 00 00 call 48b + 1ee: 83 ec 04 sub $0x4,%esp + 1f1: 6a 0e push $0xe + 1f3: 8d 85 da fd ff ff lea -0x226(%ebp),%eax + 1f9: 50 push %eax + 1fa: ff b5 a8 fd ff ff push -0x258(%ebp) + 200: e8 61 02 00 00 call 466 p[DIRSIZ] = 0; - 20d: c6 47 0f 00 movb $0x0,0xf(%edi) + 205: c6 47 0f 00 movb $0x0,0xf(%edi) if(stat(buf, &st) < 0){ - 211: 83 c4 08 add $0x8,%esp - 214: 8d 85 c4 fd ff ff lea -0x23c(%ebp),%eax - 21a: 50 push %eax - 21b: 8d 85 e8 fd ff ff lea -0x218(%ebp),%eax - 221: 50 push %eax - 222: e8 dd 01 00 00 call 404 - 227: 83 c4 10 add $0x10,%esp - 22a: 85 c0 test %eax,%eax - 22c: 78 8d js 1bb + 209: 83 c4 08 add $0x8,%esp + 20c: 8d 85 c4 fd ff ff lea -0x23c(%ebp),%eax + 212: 50 push %eax + 213: 8d 85 e8 fd ff ff lea -0x218(%ebp),%eax + 219: 50 push %eax + 21a: e8 c6 01 00 00 call 3e5 + 21f: 83 c4 10 add $0x10,%esp + 222: 85 c0 test %eax,%eax + 224: 78 8d js 1b3 printf(1, "%s %d %d %d\n", fmtname(buf), st.type, st.ino, st.size); - 22e: 8b 85 d4 fd ff ff mov -0x22c(%ebp),%eax - 234: 89 85 b4 fd ff ff mov %eax,-0x24c(%ebp) - 23a: 8b 95 cc fd ff ff mov -0x234(%ebp),%edx - 240: 89 95 b0 fd ff ff mov %edx,-0x250(%ebp) - 246: 0f bf 8d c4 fd ff ff movswl -0x23c(%ebp),%ecx - 24d: 89 8d ac fd ff ff mov %ecx,-0x254(%ebp) - 253: 83 ec 0c sub $0xc,%esp - 256: 8d 85 e8 fd ff ff lea -0x218(%ebp),%eax - 25c: 50 push %eax - 25d: e8 9e fd ff ff call 0 - 262: 83 c4 08 add $0x8,%esp - 265: ff b5 b4 fd ff ff pushl -0x24c(%ebp) - 26b: ff b5 b0 fd ff ff pushl -0x250(%ebp) - 271: ff b5 ac fd ff ff pushl -0x254(%ebp) - 277: 50 push %eax - 278: 68 48 09 00 00 push $0x948 - 27d: 6a 01 push $0x1 - 27f: e8 84 03 00 00 call 608 - 284: 83 c4 20 add $0x20,%esp - 287: e9 48 ff ff ff jmp 1d4 - -0000028c
: + 226: 8b 85 d4 fd ff ff mov -0x22c(%ebp),%eax + 22c: 89 85 b4 fd ff ff mov %eax,-0x24c(%ebp) + 232: 8b 95 cc fd ff ff mov -0x234(%ebp),%edx + 238: 89 95 b0 fd ff ff mov %edx,-0x250(%ebp) + 23e: 0f bf 8d c4 fd ff ff movswl -0x23c(%ebp),%ecx + 245: 89 8d ac fd ff ff mov %ecx,-0x254(%ebp) + 24b: 83 ec 0c sub $0xc,%esp + 24e: 8d 85 e8 fd ff ff lea -0x218(%ebp),%eax + 254: 50 push %eax + 255: e8 a6 fd ff ff call 0 + 25a: 83 c4 08 add $0x8,%esp + 25d: ff b5 b4 fd ff ff push -0x24c(%ebp) + 263: ff b5 b0 fd ff ff push -0x250(%ebp) + 269: ff b5 ac fd ff ff push -0x254(%ebp) + 26f: 50 push %eax + 270: 68 04 09 00 00 push $0x904 + 275: 6a 01 push $0x1 + 277: e8 67 03 00 00 call 5e3 + 27c: 83 c4 20 add $0x20,%esp + 27f: e9 48 ff ff ff jmp 1cc + +00000284
: int main(int argc, char *argv[]) { - 28c: f3 0f 1e fb endbr32 - 290: 8d 4c 24 04 lea 0x4(%esp),%ecx - 294: 83 e4 f0 and $0xfffffff0,%esp - 297: ff 71 fc pushl -0x4(%ecx) - 29a: 55 push %ebp - 29b: 89 e5 mov %esp,%ebp - 29d: 56 push %esi - 29e: 53 push %ebx - 29f: 51 push %ecx - 2a0: 83 ec 0c sub $0xc,%esp - 2a3: 8b 01 mov (%ecx),%eax - 2a5: 8b 51 04 mov 0x4(%ecx),%edx - int i; + 284: 8d 4c 24 04 lea 0x4(%esp),%ecx + 288: 83 e4 f0 and $0xfffffff0,%esp + 28b: ff 71 fc push -0x4(%ecx) + 28e: 55 push %ebp + 28f: 89 e5 mov %esp,%ebp + 291: 57 push %edi + 292: 56 push %esi + 293: 53 push %ebx + 294: 51 push %ecx + 295: 83 ec 08 sub $0x8,%esp + 298: 8b 31 mov (%ecx),%esi + 29a: 8b 79 04 mov 0x4(%ecx),%edi if(argc < 2){ - 2a8: 83 f8 01 cmp $0x1,%eax - 2ab: 7e 1f jle 2cc - 2ad: 8d 5a 04 lea 0x4(%edx),%ebx - 2b0: 8d 34 82 lea (%edx,%eax,4),%esi ls("."); exit(); } for(i=1; i ls(argv[i]); - 2b3: 83 ec 0c sub $0xc,%esp - 2b6: ff 33 pushl (%ebx) - 2b8: e8 d4 fd ff ff call 91 + 2a7: 83 ec 0c sub $0xc,%esp + 2aa: ff 34 9f push (%edi,%ebx,4) + 2ad: e8 db fd ff ff call 8d for(i=1; i + 2b2: 83 c3 01 add $0x1,%ebx + 2b5: 83 c4 10 add $0x10,%esp + 2b8: 39 de cmp %ebx,%esi + 2ba: 75 eb jne 2a7 exit(); - 2c7: e8 f8 01 00 00 call 4c4 + 2bc: e8 da 01 00 00 call 49b ls("."); - 2cc: 83 ec 0c sub $0xc,%esp - 2cf: 68 68 09 00 00 push $0x968 - 2d4: e8 b8 fd ff ff call 91 + 2c1: 83 ec 0c sub $0xc,%esp + 2c4: 68 24 09 00 00 push $0x924 + 2c9: e8 bf fd ff ff call 8d exit(); - 2d9: e8 e6 01 00 00 call 4c4 + 2ce: e8 c8 01 00 00 call 49b -000002de : +000002d3 : #include "user.h" #include "x86.h" char* strcpy(char *s, const char *t) { - 2de: f3 0f 1e fb endbr32 - 2e2: 55 push %ebp - 2e3: 89 e5 mov %esp,%ebp - 2e5: 53 push %ebx - 2e6: 8b 4d 08 mov 0x8(%ebp),%ecx - 2e9: 8b 5d 0c mov 0xc(%ebp),%ebx + 2d3: 55 push %ebp + 2d4: 89 e5 mov %esp,%ebp + 2d6: 53 push %ebx + 2d7: 8b 4d 08 mov 0x8(%ebp),%ecx + 2da: 8b 5d 0c mov 0xc(%ebp),%ebx char *os; os = s; while((*s++ = *t++) != 0) - 2ec: b8 00 00 00 00 mov $0x0,%eax - 2f1: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 2f5: 88 14 01 mov %dl,(%ecx,%eax,1) - 2f8: 83 c0 01 add $0x1,%eax - 2fb: 84 d2 test %dl,%dl - 2fd: 75 f2 jne 2f1 + 2dd: b8 00 00 00 00 mov $0x0,%eax + 2e2: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx + 2e6: 88 14 01 mov %dl,(%ecx,%eax,1) + 2e9: 83 c0 01 add $0x1,%eax + 2ec: 84 d2 test %dl,%dl + 2ee: 75 f2 jne 2e2 ; return os; } - 2ff: 89 c8 mov %ecx,%eax - 301: 5b pop %ebx - 302: 5d pop %ebp - 303: c3 ret + 2f0: 89 c8 mov %ecx,%eax + 2f2: 8b 5d fc mov -0x4(%ebp),%ebx + 2f5: c9 leave + 2f6: c3 ret -00000304 : +000002f7 : int strcmp(const char *p, const char *q) { - 304: f3 0f 1e fb endbr32 - 308: 55 push %ebp - 309: 89 e5 mov %esp,%ebp - 30b: 8b 4d 08 mov 0x8(%ebp),%ecx - 30e: 8b 55 0c mov 0xc(%ebp),%edx + 2f7: 55 push %ebp + 2f8: 89 e5 mov %esp,%ebp + 2fa: 8b 4d 08 mov 0x8(%ebp),%ecx + 2fd: 8b 55 0c mov 0xc(%ebp),%edx while(*p && *p == *q) - 311: 0f b6 01 movzbl (%ecx),%eax - 314: 84 c0 test %al,%al - 316: 74 11 je 329 - 318: 38 02 cmp %al,(%edx) - 31a: 75 0d jne 329 + 300: 0f b6 01 movzbl (%ecx),%eax + 303: 84 c0 test %al,%al + 305: 74 11 je 318 + 307: 38 02 cmp %al,(%edx) + 309: 75 0d jne 318 p++, q++; - 31c: 83 c1 01 add $0x1,%ecx - 31f: 83 c2 01 add $0x1,%edx + 30b: 83 c1 01 add $0x1,%ecx + 30e: 83 c2 01 add $0x1,%edx while(*p && *p == *q) - 322: 0f b6 01 movzbl (%ecx),%eax - 325: 84 c0 test %al,%al - 327: 75 ef jne 318 + 311: 0f b6 01 movzbl (%ecx),%eax + 314: 84 c0 test %al,%al + 316: 75 ef jne 307 return (uchar)*p - (uchar)*q; - 329: 0f b6 c0 movzbl %al,%eax - 32c: 0f b6 12 movzbl (%edx),%edx - 32f: 29 d0 sub %edx,%eax + 318: 0f b6 c0 movzbl %al,%eax + 31b: 0f b6 12 movzbl (%edx),%edx + 31e: 29 d0 sub %edx,%eax } - 331: 5d pop %ebp - 332: c3 ret + 320: 5d pop %ebp + 321: c3 ret -00000333 : +00000322 : uint strlen(const char *s) { - 333: f3 0f 1e fb endbr32 - 337: 55 push %ebp - 338: 89 e5 mov %esp,%ebp - 33a: 8b 55 08 mov 0x8(%ebp),%edx + 322: 55 push %ebp + 323: 89 e5 mov %esp,%ebp + 325: 8b 55 08 mov 0x8(%ebp),%edx int n; for(n = 0; s[n]; n++) - 33d: 80 3a 00 cmpb $0x0,(%edx) - 340: 74 14 je 356 - 342: b8 00 00 00 00 mov $0x0,%eax - 347: 83 c0 01 add $0x1,%eax - 34a: 89 c1 mov %eax,%ecx - 34c: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - 350: 75 f5 jne 347 + 328: 80 3a 00 cmpb $0x0,(%edx) + 32b: 74 14 je 341 + 32d: b8 00 00 00 00 mov $0x0,%eax + 332: 83 c0 01 add $0x1,%eax + 335: 89 c1 mov %eax,%ecx + 337: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) + 33b: 75 f5 jne 332 ; return n; } - 352: 89 c8 mov %ecx,%eax - 354: 5d pop %ebp - 355: c3 ret + 33d: 89 c8 mov %ecx,%eax + 33f: 5d pop %ebp + 340: c3 ret for(n = 0; s[n]; n++) - 356: b9 00 00 00 00 mov $0x0,%ecx + 341: b9 00 00 00 00 mov $0x0,%ecx return n; - 35b: eb f5 jmp 352 + 346: eb f5 jmp 33d -0000035d : +00000348 : void* memset(void *dst, int c, uint n) { - 35d: f3 0f 1e fb endbr32 - 361: 55 push %ebp - 362: 89 e5 mov %esp,%ebp - 364: 57 push %edi - 365: 8b 55 08 mov 0x8(%ebp),%edx + 348: 55 push %ebp + 349: 89 e5 mov %esp,%ebp + 34b: 57 push %edi + 34c: 8b 55 08 mov 0x8(%ebp),%edx } static inline void stosb(void *addr, int data, int cnt) { asm volatile("cld; rep stosb" : - 368: 89 d7 mov %edx,%edi - 36a: 8b 4d 10 mov 0x10(%ebp),%ecx - 36d: 8b 45 0c mov 0xc(%ebp),%eax - 370: fc cld - 371: f3 aa rep stos %al,%es:(%edi) + 34f: 89 d7 mov %edx,%edi + 351: 8b 4d 10 mov 0x10(%ebp),%ecx + 354: 8b 45 0c mov 0xc(%ebp),%eax + 357: fc cld + 358: f3 aa rep stos %al,%es:(%edi) stosb(dst, c, n); return dst; } - 373: 89 d0 mov %edx,%eax - 375: 5f pop %edi - 376: 5d pop %ebp - 377: c3 ret + 35a: 89 d0 mov %edx,%eax + 35c: 8b 7d fc mov -0x4(%ebp),%edi + 35f: c9 leave + 360: c3 ret -00000378 : +00000361 : char* strchr(const char *s, char c) { - 378: f3 0f 1e fb endbr32 - 37c: 55 push %ebp - 37d: 89 e5 mov %esp,%ebp - 37f: 8b 45 08 mov 0x8(%ebp),%eax - 382: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx + 361: 55 push %ebp + 362: 89 e5 mov %esp,%ebp + 364: 8b 45 08 mov 0x8(%ebp),%eax + 367: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx for(; *s; s++) - 386: 0f b6 10 movzbl (%eax),%edx - 389: 84 d2 test %dl,%dl - 38b: 74 15 je 3a2 + 36b: 0f b6 10 movzbl (%eax),%edx + 36e: 84 d2 test %dl,%dl + 370: 74 15 je 387 if(*s == c) - 38d: 38 d1 cmp %dl,%cl - 38f: 74 0f je 3a0 + 372: 38 d1 cmp %dl,%cl + 374: 74 0f je 385 for(; *s; s++) - 391: 83 c0 01 add $0x1,%eax - 394: 0f b6 10 movzbl (%eax),%edx - 397: 84 d2 test %dl,%dl - 399: 75 f2 jne 38d + 376: 83 c0 01 add $0x1,%eax + 379: 0f b6 10 movzbl (%eax),%edx + 37c: 84 d2 test %dl,%dl + 37e: 75 f2 jne 372 return (char*)s; return 0; - 39b: b8 00 00 00 00 mov $0x0,%eax + 380: b8 00 00 00 00 mov $0x0,%eax } - 3a0: 5d pop %ebp - 3a1: c3 ret + 385: 5d pop %ebp + 386: c3 ret return 0; - 3a2: b8 00 00 00 00 mov $0x0,%eax - 3a7: eb f7 jmp 3a0 + 387: b8 00 00 00 00 mov $0x0,%eax + 38c: eb f7 jmp 385 -000003a9 : +0000038e : char* gets(char *buf, int max) { - 3a9: f3 0f 1e fb endbr32 - 3ad: 55 push %ebp - 3ae: 89 e5 mov %esp,%ebp - 3b0: 57 push %edi - 3b1: 56 push %esi - 3b2: 53 push %ebx - 3b3: 83 ec 2c sub $0x2c,%esp - 3b6: 8b 75 08 mov 0x8(%ebp),%esi + 38e: 55 push %ebp + 38f: 89 e5 mov %esp,%ebp + 391: 57 push %edi + 392: 56 push %esi + 393: 53 push %ebx + 394: 83 ec 2c sub $0x2c,%esp + 397: 8b 75 08 mov 0x8(%ebp),%esi int i, cc; char c; for(i=0; i+1 < max; ){ - 3b9: bb 00 00 00 00 mov $0x0,%ebx + 39a: bb 00 00 00 00 mov $0x0,%ebx cc = read(0, &c, 1); - 3be: 8d 7d e7 lea -0x19(%ebp),%edi + 39f: 8d 7d e7 lea -0x19(%ebp),%edi for(i=0; i+1 < max; ){ - 3c1: 89 5d d4 mov %ebx,-0x2c(%ebp) - 3c4: 83 c3 01 add $0x1,%ebx - 3c7: 3b 5d 0c cmp 0xc(%ebp),%ebx - 3ca: 7d 27 jge 3f3 + 3a2: 89 5d d4 mov %ebx,-0x2c(%ebp) + 3a5: 83 c3 01 add $0x1,%ebx + 3a8: 3b 5d 0c cmp 0xc(%ebp),%ebx + 3ab: 7d 27 jge 3d4 cc = read(0, &c, 1); - 3cc: 83 ec 04 sub $0x4,%esp - 3cf: 6a 01 push $0x1 - 3d1: 57 push %edi - 3d2: 6a 00 push $0x0 - 3d4: e8 03 01 00 00 call 4dc + 3ad: 83 ec 04 sub $0x4,%esp + 3b0: 6a 01 push $0x1 + 3b2: 57 push %edi + 3b3: 6a 00 push $0x0 + 3b5: e8 f9 00 00 00 call 4b3 if(cc < 1) - 3d9: 83 c4 10 add $0x10,%esp - 3dc: 85 c0 test %eax,%eax - 3de: 7e 13 jle 3f3 + 3ba: 83 c4 10 add $0x10,%esp + 3bd: 85 c0 test %eax,%eax + 3bf: 7e 13 jle 3d4 break; buf[i++] = c; - 3e0: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 3e4: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) + 3c1: 0f b6 45 e7 movzbl -0x19(%ebp),%eax + 3c5: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) if(c == '\n' || c == '\r') - 3e8: 3c 0a cmp $0xa,%al - 3ea: 74 04 je 3f0 - 3ec: 3c 0d cmp $0xd,%al - 3ee: 75 d1 jne 3c1 + 3c9: 3c 0a cmp $0xa,%al + 3cb: 74 04 je 3d1 + 3cd: 3c 0d cmp $0xd,%al + 3cf: 75 d1 jne 3a2 for(i=0; i+1 < max; ){ - 3f0: 89 5d d4 mov %ebx,-0x2c(%ebp) + 3d1: 89 5d d4 mov %ebx,-0x2c(%ebp) break; } buf[i] = '\0'; - 3f3: 8b 45 d4 mov -0x2c(%ebp),%eax - 3f6: c6 04 06 00 movb $0x0,(%esi,%eax,1) + 3d4: 8b 45 d4 mov -0x2c(%ebp),%eax + 3d7: c6 04 06 00 movb $0x0,(%esi,%eax,1) return buf; } - 3fa: 89 f0 mov %esi,%eax - 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 + 3db: 89 f0 mov %esi,%eax + 3dd: 8d 65 f4 lea -0xc(%ebp),%esp + 3e0: 5b pop %ebx + 3e1: 5e pop %esi + 3e2: 5f pop %edi + 3e3: 5d pop %ebp + 3e4: c3 ret -00000404 : +000003e5 : int stat(const char *n, struct stat *st) { - 404: f3 0f 1e fb endbr32 - 408: 55 push %ebp - 409: 89 e5 mov %esp,%ebp - 40b: 56 push %esi - 40c: 53 push %ebx + 3e5: 55 push %ebp + 3e6: 89 e5 mov %esp,%ebp + 3e8: 56 push %esi + 3e9: 53 push %ebx int fd; int r; fd = open(n, O_RDONLY); - 40d: 83 ec 08 sub $0x8,%esp - 410: 6a 00 push $0x0 - 412: ff 75 08 pushl 0x8(%ebp) - 415: e8 ea 00 00 00 call 504 + 3ea: 83 ec 08 sub $0x8,%esp + 3ed: 6a 00 push $0x0 + 3ef: ff 75 08 push 0x8(%ebp) + 3f2: e8 e4 00 00 00 call 4db if(fd < 0) - 41a: 83 c4 10 add $0x10,%esp - 41d: 85 c0 test %eax,%eax - 41f: 78 24 js 445 - 421: 89 c3 mov %eax,%ebx + 3f7: 83 c4 10 add $0x10,%esp + 3fa: 85 c0 test %eax,%eax + 3fc: 78 24 js 422 + 3fe: 89 c3 mov %eax,%ebx return -1; r = fstat(fd, st); - 423: 83 ec 08 sub $0x8,%esp - 426: ff 75 0c pushl 0xc(%ebp) - 429: 50 push %eax - 42a: e8 ed 00 00 00 call 51c - 42f: 89 c6 mov %eax,%esi + 400: 83 ec 08 sub $0x8,%esp + 403: ff 75 0c push 0xc(%ebp) + 406: 50 push %eax + 407: e8 e7 00 00 00 call 4f3 + 40c: 89 c6 mov %eax,%esi close(fd); - 431: 89 1c 24 mov %ebx,(%esp) - 434: e8 b3 00 00 00 call 4ec + 40e: 89 1c 24 mov %ebx,(%esp) + 411: e8 ad 00 00 00 call 4c3 return r; - 439: 83 c4 10 add $0x10,%esp + 416: 83 c4 10 add $0x10,%esp } - 43c: 89 f0 mov %esi,%eax - 43e: 8d 65 f8 lea -0x8(%ebp),%esp - 441: 5b pop %ebx - 442: 5e pop %esi - 443: 5d pop %ebp - 444: c3 ret + 419: 89 f0 mov %esi,%eax + 41b: 8d 65 f8 lea -0x8(%ebp),%esp + 41e: 5b pop %ebx + 41f: 5e pop %esi + 420: 5d pop %ebp + 421: c3 ret return -1; - 445: be ff ff ff ff mov $0xffffffff,%esi - 44a: eb f0 jmp 43c + 422: be ff ff ff ff mov $0xffffffff,%esi + 427: eb f0 jmp 419 -0000044c : +00000429 : int atoi(const char *s) { - 44c: f3 0f 1e fb endbr32 - 450: 55 push %ebp - 451: 89 e5 mov %esp,%ebp - 453: 53 push %ebx - 454: 8b 55 08 mov 0x8(%ebp),%edx + 429: 55 push %ebp + 42a: 89 e5 mov %esp,%ebp + 42c: 53 push %ebx + 42d: 8b 55 08 mov 0x8(%ebp),%edx int n; n = 0; while('0' <= *s && *s <= '9') - 457: 0f b6 02 movzbl (%edx),%eax - 45a: 8d 48 d0 lea -0x30(%eax),%ecx - 45d: 80 f9 09 cmp $0x9,%cl - 460: 77 22 ja 484 + 430: 0f b6 02 movzbl (%edx),%eax + 433: 8d 48 d0 lea -0x30(%eax),%ecx + 436: 80 f9 09 cmp $0x9,%cl + 439: 77 24 ja 45f n = 0; - 462: b9 00 00 00 00 mov $0x0,%ecx + 43b: b9 00 00 00 00 mov $0x0,%ecx n = n*10 + *s++ - '0'; - 467: 83 c2 01 add $0x1,%edx - 46a: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 46d: 0f be c0 movsbl %al,%eax - 470: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx + 440: 83 c2 01 add $0x1,%edx + 443: 8d 0c 89 lea (%ecx,%ecx,4),%ecx + 446: 0f be c0 movsbl %al,%eax + 449: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx while('0' <= *s && *s <= '9') - 474: 0f b6 02 movzbl (%edx),%eax - 477: 8d 58 d0 lea -0x30(%eax),%ebx - 47a: 80 fb 09 cmp $0x9,%bl - 47d: 76 e8 jbe 467 + 44d: 0f b6 02 movzbl (%edx),%eax + 450: 8d 58 d0 lea -0x30(%eax),%ebx + 453: 80 fb 09 cmp $0x9,%bl + 456: 76 e8 jbe 440 return n; } - 47f: 89 c8 mov %ecx,%eax - 481: 5b pop %ebx - 482: 5d pop %ebp - 483: c3 ret + 458: 89 c8 mov %ecx,%eax + 45a: 8b 5d fc mov -0x4(%ebp),%ebx + 45d: c9 leave + 45e: c3 ret n = 0; - 484: b9 00 00 00 00 mov $0x0,%ecx + 45f: b9 00 00 00 00 mov $0x0,%ecx return n; - 489: eb f4 jmp 47f + 464: eb f2 jmp 458 -0000048b : +00000466 : void* memmove(void *vdst, const void *vsrc, int n) { - 48b: f3 0f 1e fb endbr32 - 48f: 55 push %ebp - 490: 89 e5 mov %esp,%ebp - 492: 56 push %esi - 493: 53 push %ebx - 494: 8b 75 08 mov 0x8(%ebp),%esi - 497: 8b 55 0c mov 0xc(%ebp),%edx - 49a: 8b 5d 10 mov 0x10(%ebp),%ebx + 466: 55 push %ebp + 467: 89 e5 mov %esp,%ebp + 469: 56 push %esi + 46a: 53 push %ebx + 46b: 8b 75 08 mov 0x8(%ebp),%esi + 46e: 8b 55 0c mov 0xc(%ebp),%edx + 471: 8b 5d 10 mov 0x10(%ebp),%ebx char *dst; const char *src; dst = vdst; src = vsrc; while(n-- > 0) - 49d: 85 db test %ebx,%ebx - 49f: 7e 15 jle 4b6 - 4a1: 01 f3 add %esi,%ebx + 474: 85 db test %ebx,%ebx + 476: 7e 15 jle 48d + 478: 01 f3 add %esi,%ebx dst = vdst; - 4a3: 89 f0 mov %esi,%eax + 47a: 89 f0 mov %esi,%eax *dst++ = *src++; - 4a5: 83 c2 01 add $0x1,%edx - 4a8: 83 c0 01 add $0x1,%eax - 4ab: 0f b6 4a ff movzbl -0x1(%edx),%ecx - 4af: 88 48 ff mov %cl,-0x1(%eax) + 47c: 83 c2 01 add $0x1,%edx + 47f: 83 c0 01 add $0x1,%eax + 482: 0f b6 4a ff movzbl -0x1(%edx),%ecx + 486: 88 48 ff mov %cl,-0x1(%eax) while(n-- > 0) - 4b2: 39 c3 cmp %eax,%ebx - 4b4: 75 ef jne 4a5 + 489: 39 c3 cmp %eax,%ebx + 48b: 75 ef jne 47c return vdst; } - 4b6: 89 f0 mov %esi,%eax - 4b8: 5b pop %ebx - 4b9: 5e pop %esi - 4ba: 5d pop %ebp - 4bb: c3 ret + 48d: 89 f0 mov %esi,%eax + 48f: 5b pop %ebx + 490: 5e pop %esi + 491: 5d pop %ebp + 492: c3 ret -000004bc : +00000493 : name: \ movl $SYS_ ## name, %eax; \ int $T_SYSCALL; \ ret SYSCALL(fork) - 4bc: b8 01 00 00 00 mov $0x1,%eax - 4c1: cd 40 int $0x40 - 4c3: c3 ret + 493: b8 01 00 00 00 mov $0x1,%eax + 498: cd 40 int $0x40 + 49a: c3 ret -000004c4 : +0000049b : SYSCALL(exit) - 4c4: b8 02 00 00 00 mov $0x2,%eax - 4c9: cd 40 int $0x40 - 4cb: c3 ret + 49b: b8 02 00 00 00 mov $0x2,%eax + 4a0: cd 40 int $0x40 + 4a2: c3 ret -000004cc : +000004a3 : SYSCALL(wait) - 4cc: b8 03 00 00 00 mov $0x3,%eax - 4d1: cd 40 int $0x40 - 4d3: c3 ret + 4a3: b8 03 00 00 00 mov $0x3,%eax + 4a8: cd 40 int $0x40 + 4aa: c3 ret -000004d4 : +000004ab : SYSCALL(pipe) - 4d4: b8 04 00 00 00 mov $0x4,%eax - 4d9: cd 40 int $0x40 - 4db: c3 ret + 4ab: b8 04 00 00 00 mov $0x4,%eax + 4b0: cd 40 int $0x40 + 4b2: c3 ret -000004dc : +000004b3 : SYSCALL(read) - 4dc: b8 05 00 00 00 mov $0x5,%eax - 4e1: cd 40 int $0x40 - 4e3: c3 ret + 4b3: b8 05 00 00 00 mov $0x5,%eax + 4b8: cd 40 int $0x40 + 4ba: c3 ret -000004e4 : +000004bb : SYSCALL(write) - 4e4: b8 10 00 00 00 mov $0x10,%eax - 4e9: cd 40 int $0x40 - 4eb: c3 ret + 4bb: b8 10 00 00 00 mov $0x10,%eax + 4c0: cd 40 int $0x40 + 4c2: c3 ret -000004ec : +000004c3 : SYSCALL(close) - 4ec: b8 15 00 00 00 mov $0x15,%eax - 4f1: cd 40 int $0x40 - 4f3: c3 ret + 4c3: b8 15 00 00 00 mov $0x15,%eax + 4c8: cd 40 int $0x40 + 4ca: c3 ret -000004f4 : +000004cb : SYSCALL(kill) - 4f4: b8 06 00 00 00 mov $0x6,%eax - 4f9: cd 40 int $0x40 - 4fb: c3 ret + 4cb: b8 06 00 00 00 mov $0x6,%eax + 4d0: cd 40 int $0x40 + 4d2: c3 ret -000004fc : +000004d3 : SYSCALL(exec) - 4fc: b8 07 00 00 00 mov $0x7,%eax - 501: cd 40 int $0x40 - 503: c3 ret + 4d3: b8 07 00 00 00 mov $0x7,%eax + 4d8: cd 40 int $0x40 + 4da: c3 ret -00000504 : +000004db : SYSCALL(open) - 504: b8 0f 00 00 00 mov $0xf,%eax - 509: cd 40 int $0x40 - 50b: c3 ret + 4db: b8 0f 00 00 00 mov $0xf,%eax + 4e0: cd 40 int $0x40 + 4e2: c3 ret -0000050c : +000004e3 : SYSCALL(mknod) - 50c: b8 11 00 00 00 mov $0x11,%eax - 511: cd 40 int $0x40 - 513: c3 ret + 4e3: b8 11 00 00 00 mov $0x11,%eax + 4e8: cd 40 int $0x40 + 4ea: c3 ret -00000514 : +000004eb : SYSCALL(unlink) - 514: b8 12 00 00 00 mov $0x12,%eax - 519: cd 40 int $0x40 - 51b: c3 ret + 4eb: b8 12 00 00 00 mov $0x12,%eax + 4f0: cd 40 int $0x40 + 4f2: c3 ret -0000051c : +000004f3 : SYSCALL(fstat) - 51c: b8 08 00 00 00 mov $0x8,%eax - 521: cd 40 int $0x40 - 523: c3 ret + 4f3: b8 08 00 00 00 mov $0x8,%eax + 4f8: cd 40 int $0x40 + 4fa: c3 ret -00000524 : +000004fb : SYSCALL(link) - 524: b8 13 00 00 00 mov $0x13,%eax - 529: cd 40 int $0x40 - 52b: c3 ret + 4fb: b8 13 00 00 00 mov $0x13,%eax + 500: cd 40 int $0x40 + 502: c3 ret -0000052c : +00000503 : SYSCALL(mkdir) - 52c: b8 14 00 00 00 mov $0x14,%eax - 531: cd 40 int $0x40 - 533: c3 ret + 503: b8 14 00 00 00 mov $0x14,%eax + 508: cd 40 int $0x40 + 50a: c3 ret -00000534 : +0000050b : SYSCALL(chdir) - 534: b8 09 00 00 00 mov $0x9,%eax - 539: cd 40 int $0x40 - 53b: c3 ret + 50b: b8 09 00 00 00 mov $0x9,%eax + 510: cd 40 int $0x40 + 512: c3 ret -0000053c : +00000513 : SYSCALL(dup) - 53c: b8 0a 00 00 00 mov $0xa,%eax - 541: cd 40 int $0x40 - 543: c3 ret + 513: b8 0a 00 00 00 mov $0xa,%eax + 518: cd 40 int $0x40 + 51a: c3 ret -00000544 : +0000051b : SYSCALL(getpid) - 544: b8 0b 00 00 00 mov $0xb,%eax - 549: cd 40 int $0x40 - 54b: c3 ret + 51b: b8 0b 00 00 00 mov $0xb,%eax + 520: cd 40 int $0x40 + 522: c3 ret -0000054c : +00000523 : SYSCALL(sbrk) - 54c: b8 0c 00 00 00 mov $0xc,%eax - 551: cd 40 int $0x40 - 553: c3 ret + 523: b8 0c 00 00 00 mov $0xc,%eax + 528: cd 40 int $0x40 + 52a: c3 ret -00000554 : +0000052b : SYSCALL(sleep) - 554: b8 0d 00 00 00 mov $0xd,%eax - 559: cd 40 int $0x40 - 55b: c3 ret + 52b: b8 0d 00 00 00 mov $0xd,%eax + 530: cd 40 int $0x40 + 532: c3 ret -0000055c : +00000533 : SYSCALL(uptime) - 55c: b8 0e 00 00 00 mov $0xe,%eax - 561: cd 40 int $0x40 - 563: c3 ret + 533: b8 0e 00 00 00 mov $0xe,%eax + 538: cd 40 int $0x40 + 53a: c3 ret -00000564 : +0000053b : SYSCALL(slabtest) - 564: b8 16 00 00 00 mov $0x16,%eax - 569: cd 40 int $0x40 - 56b: c3 ret + 53b: b8 16 00 00 00 mov $0x16,%eax + 540: cd 40 int $0x40 + 542: c3 ret -0000056c : +00000543 : SYSCALL(ps) - 56c: b8 17 00 00 00 mov $0x17,%eax - 571: cd 40 int $0x40 - 573: c3 ret + 543: b8 17 00 00 00 mov $0x17,%eax + 548: cd 40 int $0x40 + 54a: c3 ret -00000574 : +0000054b : write(fd, &c, 1); } static void printint(int fd, int xx, int base, int sgn) { - 574: 55 push %ebp - 575: 89 e5 mov %esp,%ebp - 577: 57 push %edi - 578: 56 push %esi - 579: 53 push %ebx - 57a: 83 ec 3c sub $0x3c,%esp - 57d: 89 45 c4 mov %eax,-0x3c(%ebp) - 580: 89 d3 mov %edx,%ebx + 54b: 55 push %ebp + 54c: 89 e5 mov %esp,%ebp + 54e: 57 push %edi + 54f: 56 push %esi + 550: 53 push %ebx + 551: 83 ec 3c sub $0x3c,%esp + 554: 89 45 c4 mov %eax,-0x3c(%ebp) + 557: 89 ce mov %ecx,%esi char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 582: 83 7d 08 00 cmpl $0x0,0x8(%ebp) - 586: 74 77 je 5ff - 588: 85 d2 test %edx,%edx - 58a: 79 73 jns 5ff + 559: 83 7d 08 00 cmpl $0x0,0x8(%ebp) + 55d: 74 79 je 5d8 + 55f: 85 d2 test %edx,%edx + 561: 79 75 jns 5d8 neg = 1; x = -xx; - 58c: f7 db neg %ebx + 563: 89 d1 mov %edx,%ecx + 565: f7 d9 neg %ecx neg = 1; - 58e: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) + 567: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) } else { x = xx; } i = 0; - 595: be 00 00 00 00 mov $0x0,%esi + 56e: bb 00 00 00 00 mov $0x0,%ebx do{ buf[i++] = digits[x % base]; - 59a: 89 f7 mov %esi,%edi - 59c: 83 c6 01 add $0x1,%esi - 59f: 89 d8 mov %ebx,%eax - 5a1: ba 00 00 00 00 mov $0x0,%edx - 5a6: f7 f1 div %ecx - 5a8: 0f b6 92 74 09 00 00 movzbl 0x974(%edx),%edx - 5af: 88 54 35 d7 mov %dl,-0x29(%ebp,%esi,1) + 573: 89 df mov %ebx,%edi + 575: 83 c3 01 add $0x1,%ebx + 578: 89 c8 mov %ecx,%eax + 57a: ba 00 00 00 00 mov $0x0,%edx + 57f: f7 f6 div %esi + 581: 0f b6 92 88 09 00 00 movzbl 0x988(%edx),%edx + 588: 88 54 1d d7 mov %dl,-0x29(%ebp,%ebx,1) }while((x /= base) != 0); - 5b3: 89 da mov %ebx,%edx - 5b5: 89 c3 mov %eax,%ebx - 5b7: 39 d1 cmp %edx,%ecx - 5b9: 76 df jbe 59a + 58c: 89 ca mov %ecx,%edx + 58e: 89 c1 mov %eax,%ecx + 590: 39 d6 cmp %edx,%esi + 592: 76 df jbe 573 if(neg) - 5bb: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) - 5bf: 74 08 je 5c9 + 594: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) + 598: 74 08 je 5a2 buf[i++] = '-'; - 5c1: c6 44 35 d8 2d movb $0x2d,-0x28(%ebp,%esi,1) - 5c6: 8d 77 02 lea 0x2(%edi),%esi + 59a: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) + 59f: 8d 5f 02 lea 0x2(%edi),%ebx while(--i >= 0) - 5c9: 85 f6 test %esi,%esi - 5cb: 7e 2a jle 5f7 - 5cd: 8d 5c 35 d7 lea -0x29(%ebp,%esi,1),%ebx - 5d1: 8d 7d d8 lea -0x28(%ebp),%edi + 5a2: 85 db test %ebx,%ebx + 5a4: 7e 2a jle 5d0 + 5a6: 8d 7d d8 lea -0x28(%ebp),%edi + 5a9: 8d 5c 1d d7 lea -0x29(%ebp,%ebx,1),%ebx write(fd, &c, 1); - 5d4: 8d 75 d7 lea -0x29(%ebp),%esi + 5ad: 8d 75 d7 lea -0x29(%ebp),%esi putc(fd, buf[i]); - 5d7: 0f b6 03 movzbl (%ebx),%eax - 5da: 88 45 d7 mov %al,-0x29(%ebp) + 5b0: 0f b6 03 movzbl (%ebx),%eax + 5b3: 88 45 d7 mov %al,-0x29(%ebp) write(fd, &c, 1); - 5dd: 83 ec 04 sub $0x4,%esp - 5e0: 6a 01 push $0x1 - 5e2: 56 push %esi - 5e3: ff 75 c4 pushl -0x3c(%ebp) - 5e6: e8 f9 fe ff ff call 4e4 + 5b6: 83 ec 04 sub $0x4,%esp + 5b9: 6a 01 push $0x1 + 5bb: 56 push %esi + 5bc: ff 75 c4 push -0x3c(%ebp) + 5bf: e8 f7 fe ff ff call 4bb while(--i >= 0) - 5eb: 89 d8 mov %ebx,%eax - 5ed: 83 eb 01 sub $0x1,%ebx - 5f0: 83 c4 10 add $0x10,%esp - 5f3: 39 f8 cmp %edi,%eax - 5f5: 75 e0 jne 5d7 + 5c4: 89 d8 mov %ebx,%eax + 5c6: 83 eb 01 sub $0x1,%ebx + 5c9: 83 c4 10 add $0x10,%esp + 5cc: 39 f8 cmp %edi,%eax + 5ce: 75 e0 jne 5b0 } - 5f7: 8d 65 f4 lea -0xc(%ebp),%esp - 5fa: 5b pop %ebx - 5fb: 5e pop %esi - 5fc: 5f pop %edi - 5fd: 5d pop %ebp - 5fe: c3 ret + 5d0: 8d 65 f4 lea -0xc(%ebp),%esp + 5d3: 5b pop %ebx + 5d4: 5e pop %esi + 5d5: 5f pop %edi + 5d6: 5d pop %ebp + 5d7: c3 ret + x = xx; + 5d8: 89 d1 mov %edx,%ecx neg = 0; - 5ff: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) - 606: eb 8d jmp 595 + 5da: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) + 5e1: eb 8b jmp 56e -00000608 : +000005e3 : // Print to the given fd. Only understands %d, %x, %p, %s. void printf(int fd, const char *fmt, ...) { - 608: f3 0f 1e fb endbr32 - 60c: 55 push %ebp - 60d: 89 e5 mov %esp,%ebp - 60f: 57 push %edi - 610: 56 push %esi - 611: 53 push %ebx - 612: 83 ec 2c sub $0x2c,%esp + 5e3: 55 push %ebp + 5e4: 89 e5 mov %esp,%ebp + 5e6: 57 push %edi + 5e7: 56 push %esi + 5e8: 53 push %ebx + 5e9: 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++){ - 615: 8b 75 0c mov 0xc(%ebp),%esi - 618: 0f b6 1e movzbl (%esi),%ebx - 61b: 84 db test %bl,%bl - 61d: 0f 84 ab 01 00 00 je 7ce - 623: 83 c6 01 add $0x1,%esi + 5ec: 8b 75 0c mov 0xc(%ebp),%esi + 5ef: 0f b6 1e movzbl (%esi),%ebx + 5f2: 84 db test %bl,%bl + 5f4: 0f 84 9f 01 00 00 je 799 + 5fa: 83 c6 01 add $0x1,%esi ap = (uint*)(void*)&fmt + 1; - 626: 8d 45 10 lea 0x10(%ebp),%eax - 629: 89 45 d4 mov %eax,-0x2c(%ebp) + 5fd: 8d 45 10 lea 0x10(%ebp),%eax + 600: 89 45 d4 mov %eax,-0x2c(%ebp) state = 0; - 62c: bf 00 00 00 00 mov $0x0,%edi - 631: eb 2d jmp 660 + 603: bf 00 00 00 00 mov $0x0,%edi + 608: eb 2d jmp 637 c = fmt[i] & 0xff; if(state == 0){ if(c == '%'){ state = '%'; } else { putc(fd, c); - 633: 88 5d e7 mov %bl,-0x19(%ebp) + 60a: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 636: 83 ec 04 sub $0x4,%esp - 639: 6a 01 push $0x1 - 63b: 8d 45 e7 lea -0x19(%ebp),%eax - 63e: 50 push %eax - 63f: ff 75 08 pushl 0x8(%ebp) - 642: e8 9d fe ff ff call 4e4 + 60d: 83 ec 04 sub $0x4,%esp + 610: 6a 01 push $0x1 + 612: 8d 45 e7 lea -0x19(%ebp),%eax + 615: 50 push %eax + 616: ff 75 08 push 0x8(%ebp) + 619: e8 9d fe ff ff call 4bb putc(fd, c); - 647: 83 c4 10 add $0x10,%esp - 64a: eb 05 jmp 651 + 61e: 83 c4 10 add $0x10,%esp + 621: eb 05 jmp 628 } } else if(state == '%'){ - 64c: 83 ff 25 cmp $0x25,%edi - 64f: 74 22 je 673 + 623: 83 ff 25 cmp $0x25,%edi + 626: 74 1f je 647 for(i = 0; fmt[i]; i++){ - 651: 83 c6 01 add $0x1,%esi - 654: 0f b6 5e ff movzbl -0x1(%esi),%ebx - 658: 84 db test %bl,%bl - 65a: 0f 84 6e 01 00 00 je 7ce + 628: 83 c6 01 add $0x1,%esi + 62b: 0f b6 5e ff movzbl -0x1(%esi),%ebx + 62f: 84 db test %bl,%bl + 631: 0f 84 62 01 00 00 je 799 c = fmt[i] & 0xff; - 660: 0f be d3 movsbl %bl,%edx - 663: 0f b6 c3 movzbl %bl,%eax + 637: 0f b6 c3 movzbl %bl,%eax if(state == 0){ - 666: 85 ff test %edi,%edi - 668: 75 e2 jne 64c + 63a: 85 ff test %edi,%edi + 63c: 75 e5 jne 623 if(c == '%'){ - 66a: 83 f8 25 cmp $0x25,%eax - 66d: 75 c4 jne 633 + 63e: 83 f8 25 cmp $0x25,%eax + 641: 75 c7 jne 60a state = '%'; - 66f: 89 c7 mov %eax,%edi - 671: eb de jmp 651 + 643: 89 c7 mov %eax,%edi + 645: eb e1 jmp 628 if(c == 'd'){ - 673: 83 f8 64 cmp $0x64,%eax - 676: 74 59 je 6d1 + 647: 83 f8 25 cmp $0x25,%eax + 64a: 0f 84 f2 00 00 00 je 742 + 650: 8d 50 9d lea -0x63(%eax),%edx + 653: 83 fa 15 cmp $0x15,%edx + 656: 0f 87 07 01 00 00 ja 763 + 65c: 0f 87 01 01 00 00 ja 763 + 662: ff 24 95 30 09 00 00 jmp *0x930(,%edx,4) printint(fd, *ap, 10, 1); + 669: 83 ec 0c sub $0xc,%esp + 66c: 6a 01 push $0x1 + 66e: b9 0a 00 00 00 mov $0xa,%ecx + 673: 8b 7d d4 mov -0x2c(%ebp),%edi + 676: 8b 17 mov (%edi),%edx + 678: 8b 45 08 mov 0x8(%ebp),%eax + 67b: e8 cb fe ff ff call 54b ap++; - } else if(c == 'x' || c == 'p'){ - 678: 81 e2 f7 00 00 00 and $0xf7,%edx - 67e: 83 fa 70 cmp $0x70,%edx - 681: 74 7a je 6fd - printint(fd, *ap, 16, 0); - ap++; - } else if(c == 's'){ - 683: 83 f8 73 cmp $0x73,%eax - 686: 0f 84 9d 00 00 00 je 729 - s = "(null)"; - while(*s != 0){ - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 68c: 83 f8 63 cmp $0x63,%eax - 68f: 0f 84 ec 00 00 00 je 781 - putc(fd, *ap); - ap++; - } else if(c == '%'){ - 695: 83 f8 25 cmp $0x25,%eax - 698: 0f 84 0f 01 00 00 je 7ad - putc(fd, c); + 680: 89 f8 mov %edi,%eax + 682: 83 c0 04 add $0x4,%eax + 685: 89 45 d4 mov %eax,-0x2c(%ebp) + 688: 83 c4 10 add $0x10,%esp } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); - 69e: c6 45 e7 25 movb $0x25,-0x19(%ebp) - write(fd, &c, 1); - 6a2: 83 ec 04 sub $0x4,%esp - 6a5: 6a 01 push $0x1 - 6a7: 8d 45 e7 lea -0x19(%ebp),%eax - 6aa: 50 push %eax - 6ab: ff 75 08 pushl 0x8(%ebp) - 6ae: e8 31 fe ff ff call 4e4 putc(fd, c); - 6b3: 88 5d e7 mov %bl,-0x19(%ebp) - write(fd, &c, 1); - 6b6: 83 c4 0c add $0xc,%esp - 6b9: 6a 01 push $0x1 - 6bb: 8d 45 e7 lea -0x19(%ebp),%eax - 6be: 50 push %eax - 6bf: ff 75 08 pushl 0x8(%ebp) - 6c2: e8 1d fe ff ff call 4e4 - putc(fd, c); - 6c7: 83 c4 10 add $0x10,%esp } state = 0; - 6ca: bf 00 00 00 00 mov $0x0,%edi - 6cf: eb 80 jmp 651 - printint(fd, *ap, 10, 1); - 6d1: 83 ec 0c sub $0xc,%esp - 6d4: 6a 01 push $0x1 - 6d6: b9 0a 00 00 00 mov $0xa,%ecx - 6db: 8b 7d d4 mov -0x2c(%ebp),%edi - 6de: 8b 17 mov (%edi),%edx - 6e0: 8b 45 08 mov 0x8(%ebp),%eax - 6e3: e8 8c fe ff ff call 574 - ap++; - 6e8: 89 f8 mov %edi,%eax - 6ea: 83 c0 04 add $0x4,%eax - 6ed: 89 45 d4 mov %eax,-0x2c(%ebp) - 6f0: 83 c4 10 add $0x10,%esp - state = 0; - 6f3: bf 00 00 00 00 mov $0x0,%edi - 6f8: e9 54 ff ff ff jmp 651 + 68b: bf 00 00 00 00 mov $0x0,%edi + 690: eb 96 jmp 628 printint(fd, *ap, 16, 0); - 6fd: 83 ec 0c sub $0xc,%esp - 700: 6a 00 push $0x0 - 702: b9 10 00 00 00 mov $0x10,%ecx - 707: 8b 7d d4 mov -0x2c(%ebp),%edi - 70a: 8b 17 mov (%edi),%edx - 70c: 8b 45 08 mov 0x8(%ebp),%eax - 70f: e8 60 fe ff ff call 574 + 692: 83 ec 0c sub $0xc,%esp + 695: 6a 00 push $0x0 + 697: b9 10 00 00 00 mov $0x10,%ecx + 69c: 8b 7d d4 mov -0x2c(%ebp),%edi + 69f: 8b 17 mov (%edi),%edx + 6a1: 8b 45 08 mov 0x8(%ebp),%eax + 6a4: e8 a2 fe ff ff call 54b ap++; - 714: 89 f8 mov %edi,%eax - 716: 83 c0 04 add $0x4,%eax - 719: 89 45 d4 mov %eax,-0x2c(%ebp) - 71c: 83 c4 10 add $0x10,%esp + 6a9: 89 f8 mov %edi,%eax + 6ab: 83 c0 04 add $0x4,%eax + 6ae: 89 45 d4 mov %eax,-0x2c(%ebp) + 6b1: 83 c4 10 add $0x10,%esp state = 0; - 71f: bf 00 00 00 00 mov $0x0,%edi - 724: e9 28 ff ff ff jmp 651 + 6b4: bf 00 00 00 00 mov $0x0,%edi + 6b9: e9 6a ff ff ff jmp 628 s = (char*)*ap; - 729: 8b 4d d4 mov -0x2c(%ebp),%ecx - 72c: 8b 01 mov (%ecx),%eax + 6be: 8b 4d d4 mov -0x2c(%ebp),%ecx + 6c1: 8b 01 mov (%ecx),%eax ap++; - 72e: 83 c1 04 add $0x4,%ecx - 731: 89 4d d4 mov %ecx,-0x2c(%ebp) + 6c3: 83 c1 04 add $0x4,%ecx + 6c6: 89 4d d4 mov %ecx,-0x2c(%ebp) if(s == 0) - 734: 85 c0 test %eax,%eax - 736: 74 13 je 74b + 6c9: 85 c0 test %eax,%eax + 6cb: 74 13 je 6e0 s = (char*)*ap; - 738: 89 c3 mov %eax,%ebx + 6cd: 89 c3 mov %eax,%ebx while(*s != 0){ - 73a: 0f b6 00 movzbl (%eax),%eax + 6cf: 0f b6 00 movzbl (%eax),%eax state = 0; - 73d: bf 00 00 00 00 mov $0x0,%edi + 6d2: bf 00 00 00 00 mov $0x0,%edi while(*s != 0){ - 742: 84 c0 test %al,%al - 744: 75 0f jne 755 - 746: e9 06 ff ff ff jmp 651 + 6d7: 84 c0 test %al,%al + 6d9: 75 0f jne 6ea + 6db: e9 48 ff ff ff jmp 628 s = "(null)"; - 74b: bb 6a 09 00 00 mov $0x96a,%ebx + 6e0: bb 26 09 00 00 mov $0x926,%ebx while(*s != 0){ - 750: b8 28 00 00 00 mov $0x28,%eax - 755: 8b 7d 08 mov 0x8(%ebp),%edi + 6e5: b8 28 00 00 00 mov $0x28,%eax + 6ea: 8b 7d 08 mov 0x8(%ebp),%edi putc(fd, *s); - 758: 88 45 e7 mov %al,-0x19(%ebp) + 6ed: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 75b: 83 ec 04 sub $0x4,%esp - 75e: 6a 01 push $0x1 - 760: 8d 45 e7 lea -0x19(%ebp),%eax - 763: 50 push %eax - 764: 57 push %edi - 765: e8 7a fd ff ff call 4e4 + 6f0: 83 ec 04 sub $0x4,%esp + 6f3: 6a 01 push $0x1 + 6f5: 8d 45 e7 lea -0x19(%ebp),%eax + 6f8: 50 push %eax + 6f9: 57 push %edi + 6fa: e8 bc fd ff ff call 4bb s++; - 76a: 83 c3 01 add $0x1,%ebx + 6ff: 83 c3 01 add $0x1,%ebx while(*s != 0){ - 76d: 0f b6 03 movzbl (%ebx),%eax - 770: 83 c4 10 add $0x10,%esp - 773: 84 c0 test %al,%al - 775: 75 e1 jne 758 + 702: 0f b6 03 movzbl (%ebx),%eax + 705: 83 c4 10 add $0x10,%esp + 708: 84 c0 test %al,%al + 70a: 75 e1 jne 6ed state = 0; - 777: bf 00 00 00 00 mov $0x0,%edi - 77c: e9 d0 fe ff ff jmp 651 + 70c: bf 00 00 00 00 mov $0x0,%edi + 711: e9 12 ff ff ff jmp 628 putc(fd, *ap); - 781: 8b 7d d4 mov -0x2c(%ebp),%edi - 784: 8b 07 mov (%edi),%eax - 786: 88 45 e7 mov %al,-0x19(%ebp) + 716: 8b 7d d4 mov -0x2c(%ebp),%edi + 719: 8b 07 mov (%edi),%eax + 71b: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 789: 83 ec 04 sub $0x4,%esp - 78c: 6a 01 push $0x1 - 78e: 8d 45 e7 lea -0x19(%ebp),%eax - 791: 50 push %eax - 792: ff 75 08 pushl 0x8(%ebp) - 795: e8 4a fd ff ff call 4e4 + 71e: 83 ec 04 sub $0x4,%esp + 721: 6a 01 push $0x1 + 723: 8d 45 e7 lea -0x19(%ebp),%eax + 726: 50 push %eax + 727: ff 75 08 push 0x8(%ebp) + 72a: e8 8c fd ff ff call 4bb ap++; - 79a: 83 c7 04 add $0x4,%edi - 79d: 89 7d d4 mov %edi,-0x2c(%ebp) - 7a0: 83 c4 10 add $0x10,%esp + 72f: 83 c7 04 add $0x4,%edi + 732: 89 7d d4 mov %edi,-0x2c(%ebp) + 735: 83 c4 10 add $0x10,%esp state = 0; - 7a3: bf 00 00 00 00 mov $0x0,%edi - 7a8: e9 a4 fe ff ff jmp 651 + 738: bf 00 00 00 00 mov $0x0,%edi + 73d: e9 e6 fe ff ff jmp 628 putc(fd, c); - 7ad: 88 5d e7 mov %bl,-0x19(%ebp) + 742: 88 5d e7 mov %bl,-0x19(%ebp) + write(fd, &c, 1); + 745: 83 ec 04 sub $0x4,%esp + 748: 6a 01 push $0x1 + 74a: 8d 45 e7 lea -0x19(%ebp),%eax + 74d: 50 push %eax + 74e: ff 75 08 push 0x8(%ebp) + 751: e8 65 fd ff ff call 4bb + 756: 83 c4 10 add $0x10,%esp + state = 0; + 759: bf 00 00 00 00 mov $0x0,%edi + 75e: e9 c5 fe ff ff jmp 628 + putc(fd, '%'); + 763: c6 45 e7 25 movb $0x25,-0x19(%ebp) write(fd, &c, 1); - 7b0: 83 ec 04 sub $0x4,%esp - 7b3: 6a 01 push $0x1 - 7b5: 8d 45 e7 lea -0x19(%ebp),%eax - 7b8: 50 push %eax - 7b9: ff 75 08 pushl 0x8(%ebp) - 7bc: e8 23 fd ff ff call 4e4 - 7c1: 83 c4 10 add $0x10,%esp + 767: 83 ec 04 sub $0x4,%esp + 76a: 6a 01 push $0x1 + 76c: 8d 45 e7 lea -0x19(%ebp),%eax + 76f: 50 push %eax + 770: ff 75 08 push 0x8(%ebp) + 773: e8 43 fd ff ff call 4bb + putc(fd, c); + 778: 88 5d e7 mov %bl,-0x19(%ebp) + write(fd, &c, 1); + 77b: 83 c4 0c add $0xc,%esp + 77e: 6a 01 push $0x1 + 780: 8d 45 e7 lea -0x19(%ebp),%eax + 783: 50 push %eax + 784: ff 75 08 push 0x8(%ebp) + 787: e8 2f fd ff ff call 4bb + putc(fd, c); + 78c: 83 c4 10 add $0x10,%esp state = 0; - 7c4: bf 00 00 00 00 mov $0x0,%edi - 7c9: e9 83 fe ff ff jmp 651 + 78f: bf 00 00 00 00 mov $0x0,%edi + 794: e9 8f fe ff ff jmp 628 } } } - 7ce: 8d 65 f4 lea -0xc(%ebp),%esp - 7d1: 5b pop %ebx - 7d2: 5e pop %esi - 7d3: 5f pop %edi - 7d4: 5d pop %ebp - 7d5: c3 ret - -000007d6 : + 799: 8d 65 f4 lea -0xc(%ebp),%esp + 79c: 5b pop %ebx + 79d: 5e pop %esi + 79e: 5f pop %edi + 79f: 5d pop %ebp + 7a0: c3 ret + +000007a1 : static Header base; static Header *freep; void free(void *ap) { - 7d6: f3 0f 1e fb endbr32 - 7da: 55 push %ebp - 7db: 89 e5 mov %esp,%ebp - 7dd: 57 push %edi - 7de: 56 push %esi - 7df: 53 push %ebx - 7e0: 8b 5d 08 mov 0x8(%ebp),%ebx + 7a1: 55 push %ebp + 7a2: 89 e5 mov %esp,%ebp + 7a4: 57 push %edi + 7a5: 56 push %esi + 7a6: 53 push %ebx + 7a7: 8b 5d 08 mov 0x8(%ebp),%ebx Header *bp, *p; bp = (Header*)ap - 1; - 7e3: 8d 4b f8 lea -0x8(%ebx),%ecx + 7aa: 8d 4b f8 lea -0x8(%ebx),%ecx for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 7e6: a1 50 0c 00 00 mov 0xc50,%eax - 7eb: eb 0c jmp 7f9 + 7ad: a1 68 0c 00 00 mov 0xc68,%eax + 7b2: eb 0c jmp 7c0 if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 7ed: 8b 10 mov (%eax),%edx - 7ef: 39 c2 cmp %eax,%edx - 7f1: 77 04 ja 7f7 - 7f3: 39 ca cmp %ecx,%edx - 7f5: 77 10 ja 807 + 7b4: 8b 10 mov (%eax),%edx + 7b6: 39 c2 cmp %eax,%edx + 7b8: 77 04 ja 7be + 7ba: 39 ca cmp %ecx,%edx + 7bc: 77 10 ja 7ce { - 7f7: 89 d0 mov %edx,%eax + 7be: 89 d0 mov %edx,%eax for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 7f9: 39 c8 cmp %ecx,%eax - 7fb: 73 f0 jae 7ed - 7fd: 8b 10 mov (%eax),%edx - 7ff: 39 ca cmp %ecx,%edx - 801: 77 04 ja 807 + 7c0: 39 c8 cmp %ecx,%eax + 7c2: 73 f0 jae 7b4 + 7c4: 8b 10 mov (%eax),%edx + 7c6: 39 ca cmp %ecx,%edx + 7c8: 77 04 ja 7ce if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 803: 39 c2 cmp %eax,%edx - 805: 77 f0 ja 7f7 + 7ca: 39 c2 cmp %eax,%edx + 7cc: 77 f0 ja 7be break; if(bp + bp->s.size == p->s.ptr){ - 807: 8b 73 fc mov -0x4(%ebx),%esi - 80a: 8b 10 mov (%eax),%edx - 80c: 8d 3c f1 lea (%ecx,%esi,8),%edi - 80f: 39 fa cmp %edi,%edx - 811: 74 19 je 82c + 7ce: 8b 73 fc mov -0x4(%ebx),%esi + 7d1: 8b 10 mov (%eax),%edx + 7d3: 8d 3c f1 lea (%ecx,%esi,8),%edi + 7d6: 39 fa cmp %edi,%edx + 7d8: 74 19 je 7f3 bp->s.size += p->s.ptr->s.size; bp->s.ptr = p->s.ptr->s.ptr; + 7da: 89 53 f8 mov %edx,-0x8(%ebx) } else bp->s.ptr = p->s.ptr; - 813: 89 53 f8 mov %edx,-0x8(%ebx) if(p + p->s.size == bp){ - 816: 8b 50 04 mov 0x4(%eax),%edx - 819: 8d 34 d0 lea (%eax,%edx,8),%esi - 81c: 39 f1 cmp %esi,%ecx - 81e: 74 1b je 83b + 7dd: 8b 50 04 mov 0x4(%eax),%edx + 7e0: 8d 34 d0 lea (%eax,%edx,8),%esi + 7e3: 39 f1 cmp %esi,%ecx + 7e5: 74 18 je 7ff p->s.size += bp->s.size; p->s.ptr = bp->s.ptr; + 7e7: 89 08 mov %ecx,(%eax) } else p->s.ptr = bp; - 820: 89 08 mov %ecx,(%eax) freep = p; - 822: a3 50 0c 00 00 mov %eax,0xc50 + 7e9: a3 68 0c 00 00 mov %eax,0xc68 } - 827: 5b pop %ebx - 828: 5e pop %esi - 829: 5f pop %edi - 82a: 5d pop %ebp - 82b: c3 ret + 7ee: 5b pop %ebx + 7ef: 5e pop %esi + 7f0: 5f pop %edi + 7f1: 5d pop %ebp + 7f2: c3 ret bp->s.size += p->s.ptr->s.size; - 82c: 03 72 04 add 0x4(%edx),%esi - 82f: 89 73 fc mov %esi,-0x4(%ebx) + 7f3: 03 72 04 add 0x4(%edx),%esi + 7f6: 89 73 fc mov %esi,-0x4(%ebx) bp->s.ptr = p->s.ptr->s.ptr; - 832: 8b 10 mov (%eax),%edx - 834: 8b 12 mov (%edx),%edx - 836: 89 53 f8 mov %edx,-0x8(%ebx) - 839: eb db jmp 816 + 7f9: 8b 10 mov (%eax),%edx + 7fb: 8b 12 mov (%edx),%edx + 7fd: eb db jmp 7da p->s.size += bp->s.size; - 83b: 03 53 fc add -0x4(%ebx),%edx - 83e: 89 50 04 mov %edx,0x4(%eax) + 7ff: 03 53 fc add -0x4(%ebx),%edx + 802: 89 50 04 mov %edx,0x4(%eax) p->s.ptr = bp->s.ptr; - 841: 8b 53 f8 mov -0x8(%ebx),%edx - 844: 89 10 mov %edx,(%eax) - 846: eb da jmp 822 + 805: 8b 4b f8 mov -0x8(%ebx),%ecx + 808: eb dd jmp 7e7 -00000848 : +0000080a : return freep; } void* malloc(uint nbytes) { - 848: f3 0f 1e fb endbr32 - 84c: 55 push %ebp - 84d: 89 e5 mov %esp,%ebp - 84f: 57 push %edi - 850: 56 push %esi - 851: 53 push %ebx - 852: 83 ec 0c sub $0xc,%esp + 80a: 55 push %ebp + 80b: 89 e5 mov %esp,%ebp + 80d: 57 push %edi + 80e: 56 push %esi + 80f: 53 push %ebx + 810: 83 ec 0c sub $0xc,%esp Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 855: 8b 45 08 mov 0x8(%ebp),%eax - 858: 8d 58 07 lea 0x7(%eax),%ebx - 85b: c1 eb 03 shr $0x3,%ebx - 85e: 83 c3 01 add $0x1,%ebx + 813: 8b 45 08 mov 0x8(%ebp),%eax + 816: 8d 58 07 lea 0x7(%eax),%ebx + 819: c1 eb 03 shr $0x3,%ebx + 81c: 83 c3 01 add $0x1,%ebx if((prevp = freep) == 0){ - 861: 8b 15 50 0c 00 00 mov 0xc50,%edx - 867: 85 d2 test %edx,%edx - 869: 74 20 je 88b + 81f: 8b 15 68 0c 00 00 mov 0xc68,%edx + 825: 85 d2 test %edx,%edx + 827: 74 1c je 845 base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 86b: 8b 02 mov (%edx),%eax + 829: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 86d: 8b 48 04 mov 0x4(%eax),%ecx - 870: 39 cb cmp %ecx,%ebx - 872: 76 3c jbe 8b0 - 874: 81 fb 00 10 00 00 cmp $0x1000,%ebx - 87a: be 00 10 00 00 mov $0x1000,%esi - 87f: 0f 43 f3 cmovae %ebx,%esi + 82b: 8b 48 04 mov 0x4(%eax),%ecx + 82e: 39 cb cmp %ecx,%ebx + 830: 76 38 jbe 86a + 832: be 00 10 00 00 mov $0x1000,%esi + 837: 39 f3 cmp %esi,%ebx + 839: 0f 43 f3 cmovae %ebx,%esi p = sbrk(nu * sizeof(Header)); - 882: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi - 889: eb 72 jmp 8fd + 83c: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi + 843: eb 72 jmp 8b7 base.s.ptr = freep = prevp = &base; - 88b: c7 05 50 0c 00 00 54 movl $0xc54,0xc50 - 892: 0c 00 00 - 895: c7 05 54 0c 00 00 54 movl $0xc54,0xc54 - 89c: 0c 00 00 + 845: c7 05 68 0c 00 00 6c movl $0xc6c,0xc68 + 84c: 0c 00 00 + 84f: c7 05 6c 0c 00 00 6c movl $0xc6c,0xc6c + 856: 0c 00 00 base.s.size = 0; - 89f: c7 05 58 0c 00 00 00 movl $0x0,0xc58 - 8a6: 00 00 00 + 859: c7 05 70 0c 00 00 00 movl $0x0,0xc70 + 860: 00 00 00 for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 8a9: b8 54 0c 00 00 mov $0xc54,%eax - 8ae: eb c4 jmp 874 + 863: b8 6c 0c 00 00 mov $0xc6c,%eax + 868: eb c8 jmp 832 if(p->s.size == nunits) - 8b0: 39 cb cmp %ecx,%ebx - 8b2: 74 1e je 8d2 + 86a: 39 cb cmp %ecx,%ebx + 86c: 74 1e je 88c prevp->s.ptr = p->s.ptr; else { p->s.size -= nunits; - 8b4: 29 d9 sub %ebx,%ecx - 8b6: 89 48 04 mov %ecx,0x4(%eax) + 86e: 29 d9 sub %ebx,%ecx + 870: 89 48 04 mov %ecx,0x4(%eax) p += p->s.size; - 8b9: 8d 04 c8 lea (%eax,%ecx,8),%eax + 873: 8d 04 c8 lea (%eax,%ecx,8),%eax p->s.size = nunits; - 8bc: 89 58 04 mov %ebx,0x4(%eax) + 876: 89 58 04 mov %ebx,0x4(%eax) } freep = prevp; - 8bf: 89 15 50 0c 00 00 mov %edx,0xc50 + 879: 89 15 68 0c 00 00 mov %edx,0xc68 return (void*)(p + 1); - 8c5: 8d 50 08 lea 0x8(%eax),%edx + 87f: 8d 50 08 lea 0x8(%eax),%edx } if(p == freep) if((p = morecore(nunits)) == 0) return 0; } } - 8c8: 89 d0 mov %edx,%eax - 8ca: 8d 65 f4 lea -0xc(%ebp),%esp - 8cd: 5b pop %ebx - 8ce: 5e pop %esi - 8cf: 5f pop %edi - 8d0: 5d pop %ebp - 8d1: c3 ret + 882: 89 d0 mov %edx,%eax + 884: 8d 65 f4 lea -0xc(%ebp),%esp + 887: 5b pop %ebx + 888: 5e pop %esi + 889: 5f pop %edi + 88a: 5d pop %ebp + 88b: c3 ret prevp->s.ptr = p->s.ptr; - 8d2: 8b 08 mov (%eax),%ecx - 8d4: 89 0a mov %ecx,(%edx) - 8d6: eb e7 jmp 8bf + 88c: 8b 08 mov (%eax),%ecx + 88e: 89 0a mov %ecx,(%edx) + 890: eb e7 jmp 879 hp->s.size = nu; - 8d8: 89 70 04 mov %esi,0x4(%eax) + 892: 89 70 04 mov %esi,0x4(%eax) free((void*)(hp + 1)); - 8db: 83 ec 0c sub $0xc,%esp - 8de: 83 c0 08 add $0x8,%eax - 8e1: 50 push %eax - 8e2: e8 ef fe ff ff call 7d6 + 895: 83 ec 0c sub $0xc,%esp + 898: 83 c0 08 add $0x8,%eax + 89b: 50 push %eax + 89c: e8 00 ff ff ff call 7a1 return freep; - 8e7: 8b 15 50 0c 00 00 mov 0xc50,%edx + 8a1: 8b 15 68 0c 00 00 mov 0xc68,%edx if((p = morecore(nunits)) == 0) - 8ed: 83 c4 10 add $0x10,%esp - 8f0: 85 d2 test %edx,%edx - 8f2: 74 d4 je 8c8 + 8a7: 83 c4 10 add $0x10,%esp + 8aa: 85 d2 test %edx,%edx + 8ac: 74 d4 je 882 for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 8f4: 8b 02 mov (%edx),%eax + 8ae: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 8f6: 8b 48 04 mov 0x4(%eax),%ecx - 8f9: 39 d9 cmp %ebx,%ecx - 8fb: 73 b3 jae 8b0 + 8b0: 8b 48 04 mov 0x4(%eax),%ecx + 8b3: 39 d9 cmp %ebx,%ecx + 8b5: 73 b3 jae 86a if(p == freep) - 8fd: 89 c2 mov %eax,%edx - 8ff: 39 05 50 0c 00 00 cmp %eax,0xc50 - 905: 75 ed jne 8f4 + 8b7: 89 c2 mov %eax,%edx + 8b9: 39 05 68 0c 00 00 cmp %eax,0xc68 + 8bf: 75 ed jne 8ae p = sbrk(nu * sizeof(Header)); - 907: 83 ec 0c sub $0xc,%esp - 90a: 57 push %edi - 90b: e8 3c fc ff ff call 54c + 8c1: 83 ec 0c sub $0xc,%esp + 8c4: 57 push %edi + 8c5: e8 59 fc ff ff call 523 if(p == (char*)-1) - 910: 83 c4 10 add $0x10,%esp - 913: 83 f8 ff cmp $0xffffffff,%eax - 916: 75 c0 jne 8d8 + 8ca: 83 c4 10 add $0x10,%esp + 8cd: 83 f8 ff cmp $0xffffffff,%eax + 8d0: 75 c0 jne 892 return 0; - 918: ba 00 00 00 00 mov $0x0,%edx - 91d: eb a9 jmp 8c8 + 8d2: ba 00 00 00 00 mov $0x0,%edx + 8d7: eb a9 jmp 882 diff --git a/src/user/ls.d b/src/user/ls.d new file mode 100644 index 0000000..abb2715 --- /dev/null +++ b/src/user/ls.d @@ -0,0 +1,2 @@ +user/ls.o: user/ls.c /usr/include/stdc-predef.h types.h stat.h user.h \ + fs.h diff --git a/src/user/ls.o b/src/user/ls.o new file mode 100644 index 0000000000000000000000000000000000000000..4b78b8f8dc3034e6fb196ed21d8cc02a942692b1 GIT binary patch literal 6384 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 + 21: 83 ff 01 cmp $0x1,%edi + 24: 7e 20 jle 46 if(mkdir(argv[i]) < 0){ - 2a: 89 5d e4 mov %ebx,-0x1c(%ebp) - 2d: 83 ec 0c sub $0xc,%esp - 30: ff 33 pushl (%ebx) - 32: e8 91 02 00 00 call 2c8 - 37: 83 c4 10 add $0x10,%esp - 3a: 85 c0 test %eax,%eax - 3c: 78 20 js 5e + 26: 89 5d e4 mov %ebx,-0x1c(%ebp) + 29: 83 ec 0c sub $0xc,%esp + 2c: ff 33 push (%ebx) + 2e: e8 73 02 00 00 call 2a6 + 33: 83 c4 10 add $0x10,%esp + 36: 85 c0 test %eax,%eax + 38: 78 20 js 5a for(i = 1; i < argc; i++){ - 3e: 83 c6 01 add $0x1,%esi - 41: 83 c3 04 add $0x4,%ebx - 44: 39 f7 cmp %esi,%edi - 46: 75 e2 jne 2a - 48: eb 2b jmp 75 + 3a: 83 c6 01 add $0x1,%esi + 3d: 83 c3 04 add $0x4,%ebx + 40: 39 f7 cmp %esi,%edi + 42: 75 e2 jne 26 + 44: eb 2b jmp 71 printf(2, "Usage: mkdir files...\n"); - 4a: 83 ec 08 sub $0x8,%esp - 4d: 68 bc 06 00 00 push $0x6bc - 52: 6a 02 push $0x2 - 54: e8 4b 03 00 00 call 3a4 + 46: 83 ec 08 sub $0x8,%esp + 49: 68 7c 06 00 00 push $0x67c + 4e: 6a 02 push $0x2 + 50: e8 31 03 00 00 call 386 exit(); - 59: e8 02 02 00 00 call 260 + 55: e8 e4 01 00 00 call 23e printf(2, "mkdir: %s failed to create\n", argv[i]); - 5e: 83 ec 04 sub $0x4,%esp - 61: 8b 45 e4 mov -0x1c(%ebp),%eax - 64: ff 30 pushl (%eax) - 66: 68 d3 06 00 00 push $0x6d3 - 6b: 6a 02 push $0x2 - 6d: e8 32 03 00 00 call 3a4 + 5a: 83 ec 04 sub $0x4,%esp + 5d: 8b 45 e4 mov -0x1c(%ebp),%eax + 60: ff 30 push (%eax) + 62: 68 93 06 00 00 push $0x693 + 67: 6a 02 push $0x2 + 69: e8 18 03 00 00 call 386 break; - 72: 83 c4 10 add $0x10,%esp + 6e: 83 c4 10 add $0x10,%esp } } exit(); - 75: e8 e6 01 00 00 call 260 + 71: e8 c8 01 00 00 call 23e -0000007a : +00000076 : #include "user.h" #include "x86.h" char* strcpy(char *s, const char *t) { - 7a: f3 0f 1e fb endbr32 - 7e: 55 push %ebp - 7f: 89 e5 mov %esp,%ebp - 81: 53 push %ebx - 82: 8b 4d 08 mov 0x8(%ebp),%ecx - 85: 8b 5d 0c mov 0xc(%ebp),%ebx + 76: 55 push %ebp + 77: 89 e5 mov %esp,%ebp + 79: 53 push %ebx + 7a: 8b 4d 08 mov 0x8(%ebp),%ecx + 7d: 8b 5d 0c mov 0xc(%ebp),%ebx char *os; os = s; while((*s++ = *t++) != 0) - 88: b8 00 00 00 00 mov $0x0,%eax - 8d: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 91: 88 14 01 mov %dl,(%ecx,%eax,1) - 94: 83 c0 01 add $0x1,%eax - 97: 84 d2 test %dl,%dl - 99: 75 f2 jne 8d + 80: b8 00 00 00 00 mov $0x0,%eax + 85: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx + 89: 88 14 01 mov %dl,(%ecx,%eax,1) + 8c: 83 c0 01 add $0x1,%eax + 8f: 84 d2 test %dl,%dl + 91: 75 f2 jne 85 ; return os; } - 9b: 89 c8 mov %ecx,%eax - 9d: 5b pop %ebx - 9e: 5d pop %ebp - 9f: c3 ret + 93: 89 c8 mov %ecx,%eax + 95: 8b 5d fc mov -0x4(%ebp),%ebx + 98: c9 leave + 99: c3 ret -000000a0 : +0000009a : int strcmp(const char *p, const char *q) { - a0: f3 0f 1e fb endbr32 - a4: 55 push %ebp - a5: 89 e5 mov %esp,%ebp - a7: 8b 4d 08 mov 0x8(%ebp),%ecx - aa: 8b 55 0c mov 0xc(%ebp),%edx + 9a: 55 push %ebp + 9b: 89 e5 mov %esp,%ebp + 9d: 8b 4d 08 mov 0x8(%ebp),%ecx + a0: 8b 55 0c mov 0xc(%ebp),%edx while(*p && *p == *q) - ad: 0f b6 01 movzbl (%ecx),%eax - b0: 84 c0 test %al,%al - b2: 74 11 je c5 - b4: 38 02 cmp %al,(%edx) - b6: 75 0d jne c5 + a3: 0f b6 01 movzbl (%ecx),%eax + a6: 84 c0 test %al,%al + a8: 74 11 je bb + aa: 38 02 cmp %al,(%edx) + ac: 75 0d jne bb p++, q++; - b8: 83 c1 01 add $0x1,%ecx - bb: 83 c2 01 add $0x1,%edx + ae: 83 c1 01 add $0x1,%ecx + b1: 83 c2 01 add $0x1,%edx while(*p && *p == *q) - be: 0f b6 01 movzbl (%ecx),%eax - c1: 84 c0 test %al,%al - c3: 75 ef jne b4 + b4: 0f b6 01 movzbl (%ecx),%eax + b7: 84 c0 test %al,%al + b9: 75 ef jne aa return (uchar)*p - (uchar)*q; - c5: 0f b6 c0 movzbl %al,%eax - c8: 0f b6 12 movzbl (%edx),%edx - cb: 29 d0 sub %edx,%eax + bb: 0f b6 c0 movzbl %al,%eax + be: 0f b6 12 movzbl (%edx),%edx + c1: 29 d0 sub %edx,%eax } - cd: 5d pop %ebp - ce: c3 ret + c3: 5d pop %ebp + c4: c3 ret -000000cf : +000000c5 : uint strlen(const char *s) { - cf: f3 0f 1e fb endbr32 - d3: 55 push %ebp - d4: 89 e5 mov %esp,%ebp - d6: 8b 55 08 mov 0x8(%ebp),%edx + c5: 55 push %ebp + c6: 89 e5 mov %esp,%ebp + c8: 8b 55 08 mov 0x8(%ebp),%edx int n; for(n = 0; s[n]; n++) - d9: 80 3a 00 cmpb $0x0,(%edx) - dc: 74 14 je f2 - de: b8 00 00 00 00 mov $0x0,%eax - e3: 83 c0 01 add $0x1,%eax - e6: 89 c1 mov %eax,%ecx - e8: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - ec: 75 f5 jne e3 + cb: 80 3a 00 cmpb $0x0,(%edx) + ce: 74 14 je e4 + d0: b8 00 00 00 00 mov $0x0,%eax + d5: 83 c0 01 add $0x1,%eax + d8: 89 c1 mov %eax,%ecx + da: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) + de: 75 f5 jne d5 ; return n; } - ee: 89 c8 mov %ecx,%eax - f0: 5d pop %ebp - f1: c3 ret + e0: 89 c8 mov %ecx,%eax + e2: 5d pop %ebp + e3: c3 ret for(n = 0; s[n]; n++) - f2: b9 00 00 00 00 mov $0x0,%ecx + e4: b9 00 00 00 00 mov $0x0,%ecx return n; - f7: eb f5 jmp ee + e9: eb f5 jmp e0 -000000f9 : +000000eb : void* memset(void *dst, int c, uint n) { - f9: f3 0f 1e fb endbr32 - fd: 55 push %ebp - fe: 89 e5 mov %esp,%ebp - 100: 57 push %edi - 101: 8b 55 08 mov 0x8(%ebp),%edx + eb: 55 push %ebp + ec: 89 e5 mov %esp,%ebp + ee: 57 push %edi + ef: 8b 55 08 mov 0x8(%ebp),%edx } static inline void stosb(void *addr, int data, int cnt) { asm volatile("cld; rep stosb" : - 104: 89 d7 mov %edx,%edi - 106: 8b 4d 10 mov 0x10(%ebp),%ecx - 109: 8b 45 0c mov 0xc(%ebp),%eax - 10c: fc cld - 10d: f3 aa rep stos %al,%es:(%edi) + f2: 89 d7 mov %edx,%edi + f4: 8b 4d 10 mov 0x10(%ebp),%ecx + f7: 8b 45 0c mov 0xc(%ebp),%eax + fa: fc cld + fb: f3 aa rep stos %al,%es:(%edi) stosb(dst, c, n); return dst; } - 10f: 89 d0 mov %edx,%eax - 111: 5f pop %edi - 112: 5d pop %ebp - 113: c3 ret + fd: 89 d0 mov %edx,%eax + ff: 8b 7d fc mov -0x4(%ebp),%edi + 102: c9 leave + 103: c3 ret -00000114 : +00000104 : char* strchr(const char *s, char c) { - 114: f3 0f 1e fb endbr32 - 118: 55 push %ebp - 119: 89 e5 mov %esp,%ebp - 11b: 8b 45 08 mov 0x8(%ebp),%eax - 11e: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx + 104: 55 push %ebp + 105: 89 e5 mov %esp,%ebp + 107: 8b 45 08 mov 0x8(%ebp),%eax + 10a: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx for(; *s; s++) - 122: 0f b6 10 movzbl (%eax),%edx - 125: 84 d2 test %dl,%dl - 127: 74 15 je 13e + 10e: 0f b6 10 movzbl (%eax),%edx + 111: 84 d2 test %dl,%dl + 113: 74 15 je 12a if(*s == c) - 129: 38 d1 cmp %dl,%cl - 12b: 74 0f je 13c + 115: 38 d1 cmp %dl,%cl + 117: 74 0f je 128 for(; *s; s++) - 12d: 83 c0 01 add $0x1,%eax - 130: 0f b6 10 movzbl (%eax),%edx - 133: 84 d2 test %dl,%dl - 135: 75 f2 jne 129 + 119: 83 c0 01 add $0x1,%eax + 11c: 0f b6 10 movzbl (%eax),%edx + 11f: 84 d2 test %dl,%dl + 121: 75 f2 jne 115 return (char*)s; return 0; - 137: b8 00 00 00 00 mov $0x0,%eax + 123: b8 00 00 00 00 mov $0x0,%eax } - 13c: 5d pop %ebp - 13d: c3 ret + 128: 5d pop %ebp + 129: c3 ret return 0; - 13e: b8 00 00 00 00 mov $0x0,%eax - 143: eb f7 jmp 13c + 12a: b8 00 00 00 00 mov $0x0,%eax + 12f: eb f7 jmp 128 -00000145 : +00000131 : char* gets(char *buf, int max) { - 145: f3 0f 1e fb endbr32 - 149: 55 push %ebp - 14a: 89 e5 mov %esp,%ebp - 14c: 57 push %edi - 14d: 56 push %esi - 14e: 53 push %ebx - 14f: 83 ec 2c sub $0x2c,%esp - 152: 8b 75 08 mov 0x8(%ebp),%esi + 131: 55 push %ebp + 132: 89 e5 mov %esp,%ebp + 134: 57 push %edi + 135: 56 push %esi + 136: 53 push %ebx + 137: 83 ec 2c sub $0x2c,%esp + 13a: 8b 75 08 mov 0x8(%ebp),%esi int i, cc; char c; for(i=0; i+1 < max; ){ - 155: bb 00 00 00 00 mov $0x0,%ebx + 13d: bb 00 00 00 00 mov $0x0,%ebx cc = read(0, &c, 1); - 15a: 8d 7d e7 lea -0x19(%ebp),%edi + 142: 8d 7d e7 lea -0x19(%ebp),%edi for(i=0; i+1 < max; ){ - 15d: 89 5d d4 mov %ebx,-0x2c(%ebp) - 160: 83 c3 01 add $0x1,%ebx - 163: 3b 5d 0c cmp 0xc(%ebp),%ebx - 166: 7d 27 jge 18f + 145: 89 5d d4 mov %ebx,-0x2c(%ebp) + 148: 83 c3 01 add $0x1,%ebx + 14b: 3b 5d 0c cmp 0xc(%ebp),%ebx + 14e: 7d 27 jge 177 cc = read(0, &c, 1); - 168: 83 ec 04 sub $0x4,%esp - 16b: 6a 01 push $0x1 - 16d: 57 push %edi - 16e: 6a 00 push $0x0 - 170: e8 03 01 00 00 call 278 + 150: 83 ec 04 sub $0x4,%esp + 153: 6a 01 push $0x1 + 155: 57 push %edi + 156: 6a 00 push $0x0 + 158: e8 f9 00 00 00 call 256 if(cc < 1) - 175: 83 c4 10 add $0x10,%esp - 178: 85 c0 test %eax,%eax - 17a: 7e 13 jle 18f + 15d: 83 c4 10 add $0x10,%esp + 160: 85 c0 test %eax,%eax + 162: 7e 13 jle 177 break; buf[i++] = c; - 17c: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 180: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) + 164: 0f b6 45 e7 movzbl -0x19(%ebp),%eax + 168: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) if(c == '\n' || c == '\r') - 184: 3c 0a cmp $0xa,%al - 186: 74 04 je 18c - 188: 3c 0d cmp $0xd,%al - 18a: 75 d1 jne 15d + 16c: 3c 0a cmp $0xa,%al + 16e: 74 04 je 174 + 170: 3c 0d cmp $0xd,%al + 172: 75 d1 jne 145 for(i=0; i+1 < max; ){ - 18c: 89 5d d4 mov %ebx,-0x2c(%ebp) + 174: 89 5d d4 mov %ebx,-0x2c(%ebp) break; } buf[i] = '\0'; - 18f: 8b 45 d4 mov -0x2c(%ebp),%eax - 192: c6 04 06 00 movb $0x0,(%esi,%eax,1) + 177: 8b 45 d4 mov -0x2c(%ebp),%eax + 17a: c6 04 06 00 movb $0x0,(%esi,%eax,1) return buf; } - 196: 89 f0 mov %esi,%eax - 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 + 17e: 89 f0 mov %esi,%eax + 180: 8d 65 f4 lea -0xc(%ebp),%esp + 183: 5b pop %ebx + 184: 5e pop %esi + 185: 5f pop %edi + 186: 5d pop %ebp + 187: c3 ret -000001a0 : +00000188 : int stat(const char *n, struct stat *st) { - 1a0: f3 0f 1e fb endbr32 - 1a4: 55 push %ebp - 1a5: 89 e5 mov %esp,%ebp - 1a7: 56 push %esi - 1a8: 53 push %ebx + 188: 55 push %ebp + 189: 89 e5 mov %esp,%ebp + 18b: 56 push %esi + 18c: 53 push %ebx int fd; int r; fd = open(n, O_RDONLY); - 1a9: 83 ec 08 sub $0x8,%esp - 1ac: 6a 00 push $0x0 - 1ae: ff 75 08 pushl 0x8(%ebp) - 1b1: e8 ea 00 00 00 call 2a0 + 18d: 83 ec 08 sub $0x8,%esp + 190: 6a 00 push $0x0 + 192: ff 75 08 push 0x8(%ebp) + 195: e8 e4 00 00 00 call 27e if(fd < 0) - 1b6: 83 c4 10 add $0x10,%esp - 1b9: 85 c0 test %eax,%eax - 1bb: 78 24 js 1e1 - 1bd: 89 c3 mov %eax,%ebx + 19a: 83 c4 10 add $0x10,%esp + 19d: 85 c0 test %eax,%eax + 19f: 78 24 js 1c5 + 1a1: 89 c3 mov %eax,%ebx return -1; r = fstat(fd, st); - 1bf: 83 ec 08 sub $0x8,%esp - 1c2: ff 75 0c pushl 0xc(%ebp) - 1c5: 50 push %eax - 1c6: e8 ed 00 00 00 call 2b8 - 1cb: 89 c6 mov %eax,%esi + 1a3: 83 ec 08 sub $0x8,%esp + 1a6: ff 75 0c push 0xc(%ebp) + 1a9: 50 push %eax + 1aa: e8 e7 00 00 00 call 296 + 1af: 89 c6 mov %eax,%esi close(fd); - 1cd: 89 1c 24 mov %ebx,(%esp) - 1d0: e8 b3 00 00 00 call 288 + 1b1: 89 1c 24 mov %ebx,(%esp) + 1b4: e8 ad 00 00 00 call 266 return r; - 1d5: 83 c4 10 add $0x10,%esp + 1b9: 83 c4 10 add $0x10,%esp } - 1d8: 89 f0 mov %esi,%eax - 1da: 8d 65 f8 lea -0x8(%ebp),%esp - 1dd: 5b pop %ebx - 1de: 5e pop %esi - 1df: 5d pop %ebp - 1e0: c3 ret + 1bc: 89 f0 mov %esi,%eax + 1be: 8d 65 f8 lea -0x8(%ebp),%esp + 1c1: 5b pop %ebx + 1c2: 5e pop %esi + 1c3: 5d pop %ebp + 1c4: c3 ret return -1; - 1e1: be ff ff ff ff mov $0xffffffff,%esi - 1e6: eb f0 jmp 1d8 + 1c5: be ff ff ff ff mov $0xffffffff,%esi + 1ca: eb f0 jmp 1bc -000001e8 : +000001cc : int atoi(const char *s) { - 1e8: f3 0f 1e fb endbr32 - 1ec: 55 push %ebp - 1ed: 89 e5 mov %esp,%ebp - 1ef: 53 push %ebx - 1f0: 8b 55 08 mov 0x8(%ebp),%edx + 1cc: 55 push %ebp + 1cd: 89 e5 mov %esp,%ebp + 1cf: 53 push %ebx + 1d0: 8b 55 08 mov 0x8(%ebp),%edx int n; n = 0; while('0' <= *s && *s <= '9') - 1f3: 0f b6 02 movzbl (%edx),%eax - 1f6: 8d 48 d0 lea -0x30(%eax),%ecx - 1f9: 80 f9 09 cmp $0x9,%cl - 1fc: 77 22 ja 220 + 1d3: 0f b6 02 movzbl (%edx),%eax + 1d6: 8d 48 d0 lea -0x30(%eax),%ecx + 1d9: 80 f9 09 cmp $0x9,%cl + 1dc: 77 24 ja 202 n = 0; - 1fe: b9 00 00 00 00 mov $0x0,%ecx + 1de: b9 00 00 00 00 mov $0x0,%ecx n = n*10 + *s++ - '0'; - 203: 83 c2 01 add $0x1,%edx - 206: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 209: 0f be c0 movsbl %al,%eax - 20c: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx + 1e3: 83 c2 01 add $0x1,%edx + 1e6: 8d 0c 89 lea (%ecx,%ecx,4),%ecx + 1e9: 0f be c0 movsbl %al,%eax + 1ec: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx while('0' <= *s && *s <= '9') - 210: 0f b6 02 movzbl (%edx),%eax - 213: 8d 58 d0 lea -0x30(%eax),%ebx - 216: 80 fb 09 cmp $0x9,%bl - 219: 76 e8 jbe 203 + 1f0: 0f b6 02 movzbl (%edx),%eax + 1f3: 8d 58 d0 lea -0x30(%eax),%ebx + 1f6: 80 fb 09 cmp $0x9,%bl + 1f9: 76 e8 jbe 1e3 return n; } - 21b: 89 c8 mov %ecx,%eax - 21d: 5b pop %ebx - 21e: 5d pop %ebp - 21f: c3 ret + 1fb: 89 c8 mov %ecx,%eax + 1fd: 8b 5d fc mov -0x4(%ebp),%ebx + 200: c9 leave + 201: c3 ret n = 0; - 220: b9 00 00 00 00 mov $0x0,%ecx + 202: b9 00 00 00 00 mov $0x0,%ecx return n; - 225: eb f4 jmp 21b + 207: eb f2 jmp 1fb -00000227 : +00000209 : void* memmove(void *vdst, const void *vsrc, int n) { - 227: f3 0f 1e fb endbr32 - 22b: 55 push %ebp - 22c: 89 e5 mov %esp,%ebp - 22e: 56 push %esi - 22f: 53 push %ebx - 230: 8b 75 08 mov 0x8(%ebp),%esi - 233: 8b 55 0c mov 0xc(%ebp),%edx - 236: 8b 5d 10 mov 0x10(%ebp),%ebx + 209: 55 push %ebp + 20a: 89 e5 mov %esp,%ebp + 20c: 56 push %esi + 20d: 53 push %ebx + 20e: 8b 75 08 mov 0x8(%ebp),%esi + 211: 8b 55 0c mov 0xc(%ebp),%edx + 214: 8b 5d 10 mov 0x10(%ebp),%ebx char *dst; const char *src; dst = vdst; src = vsrc; while(n-- > 0) - 239: 85 db test %ebx,%ebx - 23b: 7e 15 jle 252 - 23d: 01 f3 add %esi,%ebx + 217: 85 db test %ebx,%ebx + 219: 7e 15 jle 230 + 21b: 01 f3 add %esi,%ebx dst = vdst; - 23f: 89 f0 mov %esi,%eax + 21d: 89 f0 mov %esi,%eax *dst++ = *src++; - 241: 83 c2 01 add $0x1,%edx - 244: 83 c0 01 add $0x1,%eax - 247: 0f b6 4a ff movzbl -0x1(%edx),%ecx - 24b: 88 48 ff mov %cl,-0x1(%eax) + 21f: 83 c2 01 add $0x1,%edx + 222: 83 c0 01 add $0x1,%eax + 225: 0f b6 4a ff movzbl -0x1(%edx),%ecx + 229: 88 48 ff mov %cl,-0x1(%eax) while(n-- > 0) - 24e: 39 c3 cmp %eax,%ebx - 250: 75 ef jne 241 + 22c: 39 c3 cmp %eax,%ebx + 22e: 75 ef jne 21f return vdst; } - 252: 89 f0 mov %esi,%eax - 254: 5b pop %ebx - 255: 5e pop %esi - 256: 5d pop %ebp - 257: c3 ret + 230: 89 f0 mov %esi,%eax + 232: 5b pop %ebx + 233: 5e pop %esi + 234: 5d pop %ebp + 235: c3 ret -00000258 : +00000236 : name: \ movl $SYS_ ## name, %eax; \ int $T_SYSCALL; \ ret SYSCALL(fork) - 258: b8 01 00 00 00 mov $0x1,%eax - 25d: cd 40 int $0x40 - 25f: c3 ret + 236: b8 01 00 00 00 mov $0x1,%eax + 23b: cd 40 int $0x40 + 23d: c3 ret -00000260 : +0000023e : SYSCALL(exit) - 260: b8 02 00 00 00 mov $0x2,%eax - 265: cd 40 int $0x40 - 267: c3 ret + 23e: b8 02 00 00 00 mov $0x2,%eax + 243: cd 40 int $0x40 + 245: c3 ret -00000268 : +00000246 : SYSCALL(wait) - 268: b8 03 00 00 00 mov $0x3,%eax - 26d: cd 40 int $0x40 - 26f: c3 ret + 246: b8 03 00 00 00 mov $0x3,%eax + 24b: cd 40 int $0x40 + 24d: c3 ret -00000270 : +0000024e : SYSCALL(pipe) - 270: b8 04 00 00 00 mov $0x4,%eax - 275: cd 40 int $0x40 - 277: c3 ret + 24e: b8 04 00 00 00 mov $0x4,%eax + 253: cd 40 int $0x40 + 255: c3 ret -00000278 : +00000256 : SYSCALL(read) - 278: b8 05 00 00 00 mov $0x5,%eax - 27d: cd 40 int $0x40 - 27f: c3 ret + 256: b8 05 00 00 00 mov $0x5,%eax + 25b: cd 40 int $0x40 + 25d: c3 ret -00000280 : +0000025e : SYSCALL(write) - 280: b8 10 00 00 00 mov $0x10,%eax - 285: cd 40 int $0x40 - 287: c3 ret + 25e: b8 10 00 00 00 mov $0x10,%eax + 263: cd 40 int $0x40 + 265: c3 ret -00000288 : +00000266 : SYSCALL(close) - 288: b8 15 00 00 00 mov $0x15,%eax - 28d: cd 40 int $0x40 - 28f: c3 ret + 266: b8 15 00 00 00 mov $0x15,%eax + 26b: cd 40 int $0x40 + 26d: c3 ret -00000290 : +0000026e : SYSCALL(kill) - 290: b8 06 00 00 00 mov $0x6,%eax - 295: cd 40 int $0x40 - 297: c3 ret + 26e: b8 06 00 00 00 mov $0x6,%eax + 273: cd 40 int $0x40 + 275: c3 ret -00000298 : +00000276 : SYSCALL(exec) - 298: b8 07 00 00 00 mov $0x7,%eax - 29d: cd 40 int $0x40 - 29f: c3 ret + 276: b8 07 00 00 00 mov $0x7,%eax + 27b: cd 40 int $0x40 + 27d: c3 ret -000002a0 : +0000027e : SYSCALL(open) - 2a0: b8 0f 00 00 00 mov $0xf,%eax - 2a5: cd 40 int $0x40 - 2a7: c3 ret + 27e: b8 0f 00 00 00 mov $0xf,%eax + 283: cd 40 int $0x40 + 285: c3 ret -000002a8 : +00000286 : SYSCALL(mknod) - 2a8: b8 11 00 00 00 mov $0x11,%eax - 2ad: cd 40 int $0x40 - 2af: c3 ret + 286: b8 11 00 00 00 mov $0x11,%eax + 28b: cd 40 int $0x40 + 28d: c3 ret -000002b0 : +0000028e : SYSCALL(unlink) - 2b0: b8 12 00 00 00 mov $0x12,%eax - 2b5: cd 40 int $0x40 - 2b7: c3 ret + 28e: b8 12 00 00 00 mov $0x12,%eax + 293: cd 40 int $0x40 + 295: c3 ret -000002b8 : +00000296 : SYSCALL(fstat) - 2b8: b8 08 00 00 00 mov $0x8,%eax - 2bd: cd 40 int $0x40 - 2bf: c3 ret + 296: b8 08 00 00 00 mov $0x8,%eax + 29b: cd 40 int $0x40 + 29d: c3 ret -000002c0 : +0000029e : SYSCALL(link) - 2c0: b8 13 00 00 00 mov $0x13,%eax - 2c5: cd 40 int $0x40 - 2c7: c3 ret + 29e: b8 13 00 00 00 mov $0x13,%eax + 2a3: cd 40 int $0x40 + 2a5: c3 ret -000002c8 : +000002a6 : SYSCALL(mkdir) - 2c8: b8 14 00 00 00 mov $0x14,%eax - 2cd: cd 40 int $0x40 - 2cf: c3 ret + 2a6: b8 14 00 00 00 mov $0x14,%eax + 2ab: cd 40 int $0x40 + 2ad: c3 ret -000002d0 : +000002ae : SYSCALL(chdir) - 2d0: b8 09 00 00 00 mov $0x9,%eax - 2d5: cd 40 int $0x40 - 2d7: c3 ret + 2ae: b8 09 00 00 00 mov $0x9,%eax + 2b3: cd 40 int $0x40 + 2b5: c3 ret -000002d8 : +000002b6 : SYSCALL(dup) - 2d8: b8 0a 00 00 00 mov $0xa,%eax - 2dd: cd 40 int $0x40 - 2df: c3 ret + 2b6: b8 0a 00 00 00 mov $0xa,%eax + 2bb: cd 40 int $0x40 + 2bd: c3 ret -000002e0 : +000002be : SYSCALL(getpid) - 2e0: b8 0b 00 00 00 mov $0xb,%eax - 2e5: cd 40 int $0x40 - 2e7: c3 ret + 2be: b8 0b 00 00 00 mov $0xb,%eax + 2c3: cd 40 int $0x40 + 2c5: c3 ret -000002e8 : +000002c6 : SYSCALL(sbrk) - 2e8: b8 0c 00 00 00 mov $0xc,%eax - 2ed: cd 40 int $0x40 - 2ef: c3 ret + 2c6: b8 0c 00 00 00 mov $0xc,%eax + 2cb: cd 40 int $0x40 + 2cd: c3 ret -000002f0 : +000002ce : SYSCALL(sleep) - 2f0: b8 0d 00 00 00 mov $0xd,%eax - 2f5: cd 40 int $0x40 - 2f7: c3 ret + 2ce: b8 0d 00 00 00 mov $0xd,%eax + 2d3: cd 40 int $0x40 + 2d5: c3 ret -000002f8 : +000002d6 : SYSCALL(uptime) - 2f8: b8 0e 00 00 00 mov $0xe,%eax - 2fd: cd 40 int $0x40 - 2ff: c3 ret + 2d6: b8 0e 00 00 00 mov $0xe,%eax + 2db: cd 40 int $0x40 + 2dd: c3 ret -00000300 : +000002de : SYSCALL(slabtest) - 300: b8 16 00 00 00 mov $0x16,%eax - 305: cd 40 int $0x40 - 307: c3 ret + 2de: b8 16 00 00 00 mov $0x16,%eax + 2e3: cd 40 int $0x40 + 2e5: c3 ret -00000308 : +000002e6 : SYSCALL(ps) - 308: b8 17 00 00 00 mov $0x17,%eax - 30d: cd 40 int $0x40 - 30f: c3 ret + 2e6: b8 17 00 00 00 mov $0x17,%eax + 2eb: cd 40 int $0x40 + 2ed: c3 ret -00000310 : +000002ee : write(fd, &c, 1); } static void printint(int fd, int xx, int base, int sgn) { - 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 3c sub $0x3c,%esp - 319: 89 45 c4 mov %eax,-0x3c(%ebp) - 31c: 89 d3 mov %edx,%ebx + 2ee: 55 push %ebp + 2ef: 89 e5 mov %esp,%ebp + 2f1: 57 push %edi + 2f2: 56 push %esi + 2f3: 53 push %ebx + 2f4: 83 ec 3c sub $0x3c,%esp + 2f7: 89 45 c4 mov %eax,-0x3c(%ebp) + 2fa: 89 ce mov %ecx,%esi char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 31e: 83 7d 08 00 cmpl $0x0,0x8(%ebp) - 322: 74 77 je 39b - 324: 85 d2 test %edx,%edx - 326: 79 73 jns 39b + 2fc: 83 7d 08 00 cmpl $0x0,0x8(%ebp) + 300: 74 79 je 37b + 302: 85 d2 test %edx,%edx + 304: 79 75 jns 37b neg = 1; x = -xx; - 328: f7 db neg %ebx + 306: 89 d1 mov %edx,%ecx + 308: f7 d9 neg %ecx neg = 1; - 32a: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) + 30a: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) } else { x = xx; } i = 0; - 331: be 00 00 00 00 mov $0x0,%esi + 311: bb 00 00 00 00 mov $0x0,%ebx do{ buf[i++] = digits[x % base]; - 336: 89 f7 mov %esi,%edi - 338: 83 c6 01 add $0x1,%esi - 33b: 89 d8 mov %ebx,%eax - 33d: ba 00 00 00 00 mov $0x0,%edx - 342: f7 f1 div %ecx - 344: 0f b6 92 f8 06 00 00 movzbl 0x6f8(%edx),%edx - 34b: 88 54 35 d7 mov %dl,-0x29(%ebp,%esi,1) + 316: 89 df mov %ebx,%edi + 318: 83 c3 01 add $0x1,%ebx + 31b: 89 c8 mov %ecx,%eax + 31d: ba 00 00 00 00 mov $0x0,%edx + 322: f7 f6 div %esi + 324: 0f b6 92 10 07 00 00 movzbl 0x710(%edx),%edx + 32b: 88 54 1d d7 mov %dl,-0x29(%ebp,%ebx,1) }while((x /= base) != 0); - 34f: 89 da mov %ebx,%edx - 351: 89 c3 mov %eax,%ebx - 353: 39 d1 cmp %edx,%ecx - 355: 76 df jbe 336 + 32f: 89 ca mov %ecx,%edx + 331: 89 c1 mov %eax,%ecx + 333: 39 d6 cmp %edx,%esi + 335: 76 df jbe 316 if(neg) - 357: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) - 35b: 74 08 je 365 + 337: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) + 33b: 74 08 je 345 buf[i++] = '-'; - 35d: c6 44 35 d8 2d movb $0x2d,-0x28(%ebp,%esi,1) - 362: 8d 77 02 lea 0x2(%edi),%esi + 33d: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) + 342: 8d 5f 02 lea 0x2(%edi),%ebx while(--i >= 0) - 365: 85 f6 test %esi,%esi - 367: 7e 2a jle 393 - 369: 8d 5c 35 d7 lea -0x29(%ebp,%esi,1),%ebx - 36d: 8d 7d d8 lea -0x28(%ebp),%edi + 345: 85 db test %ebx,%ebx + 347: 7e 2a jle 373 + 349: 8d 7d d8 lea -0x28(%ebp),%edi + 34c: 8d 5c 1d d7 lea -0x29(%ebp,%ebx,1),%ebx write(fd, &c, 1); - 370: 8d 75 d7 lea -0x29(%ebp),%esi + 350: 8d 75 d7 lea -0x29(%ebp),%esi putc(fd, buf[i]); - 373: 0f b6 03 movzbl (%ebx),%eax - 376: 88 45 d7 mov %al,-0x29(%ebp) + 353: 0f b6 03 movzbl (%ebx),%eax + 356: 88 45 d7 mov %al,-0x29(%ebp) write(fd, &c, 1); - 379: 83 ec 04 sub $0x4,%esp - 37c: 6a 01 push $0x1 - 37e: 56 push %esi - 37f: ff 75 c4 pushl -0x3c(%ebp) - 382: e8 f9 fe ff ff call 280 + 359: 83 ec 04 sub $0x4,%esp + 35c: 6a 01 push $0x1 + 35e: 56 push %esi + 35f: ff 75 c4 push -0x3c(%ebp) + 362: e8 f7 fe ff ff call 25e while(--i >= 0) - 387: 89 d8 mov %ebx,%eax - 389: 83 eb 01 sub $0x1,%ebx - 38c: 83 c4 10 add $0x10,%esp - 38f: 39 f8 cmp %edi,%eax - 391: 75 e0 jne 373 + 367: 89 d8 mov %ebx,%eax + 369: 83 eb 01 sub $0x1,%ebx + 36c: 83 c4 10 add $0x10,%esp + 36f: 39 f8 cmp %edi,%eax + 371: 75 e0 jne 353 } - 393: 8d 65 f4 lea -0xc(%ebp),%esp - 396: 5b pop %ebx - 397: 5e pop %esi - 398: 5f pop %edi - 399: 5d pop %ebp - 39a: c3 ret + 373: 8d 65 f4 lea -0xc(%ebp),%esp + 376: 5b pop %ebx + 377: 5e pop %esi + 378: 5f pop %edi + 379: 5d pop %ebp + 37a: c3 ret + x = xx; + 37b: 89 d1 mov %edx,%ecx neg = 0; - 39b: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) - 3a2: eb 8d jmp 331 + 37d: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) + 384: eb 8b jmp 311 -000003a4 : +00000386 : // Print to the given fd. Only understands %d, %x, %p, %s. void printf(int fd, const char *fmt, ...) { - 3a4: f3 0f 1e fb endbr32 - 3a8: 55 push %ebp - 3a9: 89 e5 mov %esp,%ebp - 3ab: 57 push %edi - 3ac: 56 push %esi - 3ad: 53 push %ebx - 3ae: 83 ec 2c sub $0x2c,%esp + 386: 55 push %ebp + 387: 89 e5 mov %esp,%ebp + 389: 57 push %edi + 38a: 56 push %esi + 38b: 53 push %ebx + 38c: 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++){ - 3b1: 8b 75 0c mov 0xc(%ebp),%esi - 3b4: 0f b6 1e movzbl (%esi),%ebx - 3b7: 84 db test %bl,%bl - 3b9: 0f 84 ab 01 00 00 je 56a - 3bf: 83 c6 01 add $0x1,%esi + 38f: 8b 75 0c mov 0xc(%ebp),%esi + 392: 0f b6 1e movzbl (%esi),%ebx + 395: 84 db test %bl,%bl + 397: 0f 84 9f 01 00 00 je 53c + 39d: 83 c6 01 add $0x1,%esi ap = (uint*)(void*)&fmt + 1; - 3c2: 8d 45 10 lea 0x10(%ebp),%eax - 3c5: 89 45 d4 mov %eax,-0x2c(%ebp) + 3a0: 8d 45 10 lea 0x10(%ebp),%eax + 3a3: 89 45 d4 mov %eax,-0x2c(%ebp) state = 0; - 3c8: bf 00 00 00 00 mov $0x0,%edi - 3cd: eb 2d jmp 3fc + 3a6: bf 00 00 00 00 mov $0x0,%edi + 3ab: eb 2d jmp 3da c = fmt[i] & 0xff; if(state == 0){ if(c == '%'){ state = '%'; } else { putc(fd, c); - 3cf: 88 5d e7 mov %bl,-0x19(%ebp) + 3ad: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 3d2: 83 ec 04 sub $0x4,%esp - 3d5: 6a 01 push $0x1 - 3d7: 8d 45 e7 lea -0x19(%ebp),%eax - 3da: 50 push %eax - 3db: ff 75 08 pushl 0x8(%ebp) - 3de: e8 9d fe ff ff call 280 + 3b0: 83 ec 04 sub $0x4,%esp + 3b3: 6a 01 push $0x1 + 3b5: 8d 45 e7 lea -0x19(%ebp),%eax + 3b8: 50 push %eax + 3b9: ff 75 08 push 0x8(%ebp) + 3bc: e8 9d fe ff ff call 25e putc(fd, c); - 3e3: 83 c4 10 add $0x10,%esp - 3e6: eb 05 jmp 3ed + 3c1: 83 c4 10 add $0x10,%esp + 3c4: eb 05 jmp 3cb } } else if(state == '%'){ - 3e8: 83 ff 25 cmp $0x25,%edi - 3eb: 74 22 je 40f + 3c6: 83 ff 25 cmp $0x25,%edi + 3c9: 74 1f je 3ea for(i = 0; fmt[i]; i++){ - 3ed: 83 c6 01 add $0x1,%esi - 3f0: 0f b6 5e ff movzbl -0x1(%esi),%ebx - 3f4: 84 db test %bl,%bl - 3f6: 0f 84 6e 01 00 00 je 56a + 3cb: 83 c6 01 add $0x1,%esi + 3ce: 0f b6 5e ff movzbl -0x1(%esi),%ebx + 3d2: 84 db test %bl,%bl + 3d4: 0f 84 62 01 00 00 je 53c c = fmt[i] & 0xff; - 3fc: 0f be d3 movsbl %bl,%edx - 3ff: 0f b6 c3 movzbl %bl,%eax + 3da: 0f b6 c3 movzbl %bl,%eax if(state == 0){ - 402: 85 ff test %edi,%edi - 404: 75 e2 jne 3e8 + 3dd: 85 ff test %edi,%edi + 3df: 75 e5 jne 3c6 if(c == '%'){ - 406: 83 f8 25 cmp $0x25,%eax - 409: 75 c4 jne 3cf + 3e1: 83 f8 25 cmp $0x25,%eax + 3e4: 75 c7 jne 3ad state = '%'; - 40b: 89 c7 mov %eax,%edi - 40d: eb de jmp 3ed + 3e6: 89 c7 mov %eax,%edi + 3e8: eb e1 jmp 3cb if(c == 'd'){ - 40f: 83 f8 64 cmp $0x64,%eax - 412: 74 59 je 46d + 3ea: 83 f8 25 cmp $0x25,%eax + 3ed: 0f 84 f2 00 00 00 je 4e5 + 3f3: 8d 50 9d lea -0x63(%eax),%edx + 3f6: 83 fa 15 cmp $0x15,%edx + 3f9: 0f 87 07 01 00 00 ja 506 + 3ff: 0f 87 01 01 00 00 ja 506 + 405: ff 24 95 b8 06 00 00 jmp *0x6b8(,%edx,4) printint(fd, *ap, 10, 1); + 40c: 83 ec 0c sub $0xc,%esp + 40f: 6a 01 push $0x1 + 411: b9 0a 00 00 00 mov $0xa,%ecx + 416: 8b 7d d4 mov -0x2c(%ebp),%edi + 419: 8b 17 mov (%edi),%edx + 41b: 8b 45 08 mov 0x8(%ebp),%eax + 41e: e8 cb fe ff ff call 2ee ap++; - } else if(c == 'x' || c == 'p'){ - 414: 81 e2 f7 00 00 00 and $0xf7,%edx - 41a: 83 fa 70 cmp $0x70,%edx - 41d: 74 7a je 499 - printint(fd, *ap, 16, 0); - ap++; - } else if(c == 's'){ - 41f: 83 f8 73 cmp $0x73,%eax - 422: 0f 84 9d 00 00 00 je 4c5 - s = "(null)"; - while(*s != 0){ - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 428: 83 f8 63 cmp $0x63,%eax - 42b: 0f 84 ec 00 00 00 je 51d - putc(fd, *ap); - ap++; - } else if(c == '%'){ - 431: 83 f8 25 cmp $0x25,%eax - 434: 0f 84 0f 01 00 00 je 549 - putc(fd, c); + 423: 89 f8 mov %edi,%eax + 425: 83 c0 04 add $0x4,%eax + 428: 89 45 d4 mov %eax,-0x2c(%ebp) + 42b: 83 c4 10 add $0x10,%esp } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); - 43a: c6 45 e7 25 movb $0x25,-0x19(%ebp) - write(fd, &c, 1); - 43e: 83 ec 04 sub $0x4,%esp - 441: 6a 01 push $0x1 - 443: 8d 45 e7 lea -0x19(%ebp),%eax - 446: 50 push %eax - 447: ff 75 08 pushl 0x8(%ebp) - 44a: e8 31 fe ff ff call 280 putc(fd, c); - 44f: 88 5d e7 mov %bl,-0x19(%ebp) - write(fd, &c, 1); - 452: 83 c4 0c add $0xc,%esp - 455: 6a 01 push $0x1 - 457: 8d 45 e7 lea -0x19(%ebp),%eax - 45a: 50 push %eax - 45b: ff 75 08 pushl 0x8(%ebp) - 45e: e8 1d fe ff ff call 280 - putc(fd, c); - 463: 83 c4 10 add $0x10,%esp } state = 0; - 466: bf 00 00 00 00 mov $0x0,%edi - 46b: eb 80 jmp 3ed - printint(fd, *ap, 10, 1); - 46d: 83 ec 0c sub $0xc,%esp - 470: 6a 01 push $0x1 - 472: b9 0a 00 00 00 mov $0xa,%ecx - 477: 8b 7d d4 mov -0x2c(%ebp),%edi - 47a: 8b 17 mov (%edi),%edx - 47c: 8b 45 08 mov 0x8(%ebp),%eax - 47f: e8 8c fe ff ff call 310 - ap++; - 484: 89 f8 mov %edi,%eax - 486: 83 c0 04 add $0x4,%eax - 489: 89 45 d4 mov %eax,-0x2c(%ebp) - 48c: 83 c4 10 add $0x10,%esp - state = 0; - 48f: bf 00 00 00 00 mov $0x0,%edi - 494: e9 54 ff ff ff jmp 3ed + 42e: bf 00 00 00 00 mov $0x0,%edi + 433: eb 96 jmp 3cb printint(fd, *ap, 16, 0); - 499: 83 ec 0c sub $0xc,%esp - 49c: 6a 00 push $0x0 - 49e: b9 10 00 00 00 mov $0x10,%ecx - 4a3: 8b 7d d4 mov -0x2c(%ebp),%edi - 4a6: 8b 17 mov (%edi),%edx - 4a8: 8b 45 08 mov 0x8(%ebp),%eax - 4ab: e8 60 fe ff ff call 310 + 435: 83 ec 0c sub $0xc,%esp + 438: 6a 00 push $0x0 + 43a: b9 10 00 00 00 mov $0x10,%ecx + 43f: 8b 7d d4 mov -0x2c(%ebp),%edi + 442: 8b 17 mov (%edi),%edx + 444: 8b 45 08 mov 0x8(%ebp),%eax + 447: e8 a2 fe ff ff call 2ee ap++; - 4b0: 89 f8 mov %edi,%eax - 4b2: 83 c0 04 add $0x4,%eax - 4b5: 89 45 d4 mov %eax,-0x2c(%ebp) - 4b8: 83 c4 10 add $0x10,%esp + 44c: 89 f8 mov %edi,%eax + 44e: 83 c0 04 add $0x4,%eax + 451: 89 45 d4 mov %eax,-0x2c(%ebp) + 454: 83 c4 10 add $0x10,%esp state = 0; - 4bb: bf 00 00 00 00 mov $0x0,%edi - 4c0: e9 28 ff ff ff jmp 3ed + 457: bf 00 00 00 00 mov $0x0,%edi + 45c: e9 6a ff ff ff jmp 3cb s = (char*)*ap; - 4c5: 8b 4d d4 mov -0x2c(%ebp),%ecx - 4c8: 8b 01 mov (%ecx),%eax + 461: 8b 4d d4 mov -0x2c(%ebp),%ecx + 464: 8b 01 mov (%ecx),%eax ap++; - 4ca: 83 c1 04 add $0x4,%ecx - 4cd: 89 4d d4 mov %ecx,-0x2c(%ebp) + 466: 83 c1 04 add $0x4,%ecx + 469: 89 4d d4 mov %ecx,-0x2c(%ebp) if(s == 0) - 4d0: 85 c0 test %eax,%eax - 4d2: 74 13 je 4e7 + 46c: 85 c0 test %eax,%eax + 46e: 74 13 je 483 s = (char*)*ap; - 4d4: 89 c3 mov %eax,%ebx + 470: 89 c3 mov %eax,%ebx while(*s != 0){ - 4d6: 0f b6 00 movzbl (%eax),%eax + 472: 0f b6 00 movzbl (%eax),%eax state = 0; - 4d9: bf 00 00 00 00 mov $0x0,%edi + 475: bf 00 00 00 00 mov $0x0,%edi while(*s != 0){ - 4de: 84 c0 test %al,%al - 4e0: 75 0f jne 4f1 - 4e2: e9 06 ff ff ff jmp 3ed + 47a: 84 c0 test %al,%al + 47c: 75 0f jne 48d + 47e: e9 48 ff ff ff jmp 3cb s = "(null)"; - 4e7: bb ef 06 00 00 mov $0x6ef,%ebx + 483: bb af 06 00 00 mov $0x6af,%ebx while(*s != 0){ - 4ec: b8 28 00 00 00 mov $0x28,%eax - 4f1: 8b 7d 08 mov 0x8(%ebp),%edi + 488: b8 28 00 00 00 mov $0x28,%eax + 48d: 8b 7d 08 mov 0x8(%ebp),%edi putc(fd, *s); - 4f4: 88 45 e7 mov %al,-0x19(%ebp) + 490: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 4f7: 83 ec 04 sub $0x4,%esp - 4fa: 6a 01 push $0x1 - 4fc: 8d 45 e7 lea -0x19(%ebp),%eax - 4ff: 50 push %eax - 500: 57 push %edi - 501: e8 7a fd ff ff call 280 + 493: 83 ec 04 sub $0x4,%esp + 496: 6a 01 push $0x1 + 498: 8d 45 e7 lea -0x19(%ebp),%eax + 49b: 50 push %eax + 49c: 57 push %edi + 49d: e8 bc fd ff ff call 25e s++; - 506: 83 c3 01 add $0x1,%ebx + 4a2: 83 c3 01 add $0x1,%ebx while(*s != 0){ - 509: 0f b6 03 movzbl (%ebx),%eax - 50c: 83 c4 10 add $0x10,%esp - 50f: 84 c0 test %al,%al - 511: 75 e1 jne 4f4 + 4a5: 0f b6 03 movzbl (%ebx),%eax + 4a8: 83 c4 10 add $0x10,%esp + 4ab: 84 c0 test %al,%al + 4ad: 75 e1 jne 490 state = 0; - 513: bf 00 00 00 00 mov $0x0,%edi - 518: e9 d0 fe ff ff jmp 3ed + 4af: bf 00 00 00 00 mov $0x0,%edi + 4b4: e9 12 ff ff ff jmp 3cb putc(fd, *ap); - 51d: 8b 7d d4 mov -0x2c(%ebp),%edi - 520: 8b 07 mov (%edi),%eax - 522: 88 45 e7 mov %al,-0x19(%ebp) + 4b9: 8b 7d d4 mov -0x2c(%ebp),%edi + 4bc: 8b 07 mov (%edi),%eax + 4be: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 525: 83 ec 04 sub $0x4,%esp - 528: 6a 01 push $0x1 - 52a: 8d 45 e7 lea -0x19(%ebp),%eax - 52d: 50 push %eax - 52e: ff 75 08 pushl 0x8(%ebp) - 531: e8 4a fd ff ff call 280 + 4c1: 83 ec 04 sub $0x4,%esp + 4c4: 6a 01 push $0x1 + 4c6: 8d 45 e7 lea -0x19(%ebp),%eax + 4c9: 50 push %eax + 4ca: ff 75 08 push 0x8(%ebp) + 4cd: e8 8c fd ff ff call 25e ap++; - 536: 83 c7 04 add $0x4,%edi - 539: 89 7d d4 mov %edi,-0x2c(%ebp) - 53c: 83 c4 10 add $0x10,%esp + 4d2: 83 c7 04 add $0x4,%edi + 4d5: 89 7d d4 mov %edi,-0x2c(%ebp) + 4d8: 83 c4 10 add $0x10,%esp state = 0; - 53f: bf 00 00 00 00 mov $0x0,%edi - 544: e9 a4 fe ff ff jmp 3ed + 4db: bf 00 00 00 00 mov $0x0,%edi + 4e0: e9 e6 fe ff ff jmp 3cb putc(fd, c); - 549: 88 5d e7 mov %bl,-0x19(%ebp) + 4e5: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 54c: 83 ec 04 sub $0x4,%esp - 54f: 6a 01 push $0x1 - 551: 8d 45 e7 lea -0x19(%ebp),%eax - 554: 50 push %eax - 555: ff 75 08 pushl 0x8(%ebp) - 558: e8 23 fd ff ff call 280 - 55d: 83 c4 10 add $0x10,%esp + 4e8: 83 ec 04 sub $0x4,%esp + 4eb: 6a 01 push $0x1 + 4ed: 8d 45 e7 lea -0x19(%ebp),%eax + 4f0: 50 push %eax + 4f1: ff 75 08 push 0x8(%ebp) + 4f4: e8 65 fd ff ff call 25e + 4f9: 83 c4 10 add $0x10,%esp + state = 0; + 4fc: bf 00 00 00 00 mov $0x0,%edi + 501: e9 c5 fe ff ff jmp 3cb + putc(fd, '%'); + 506: c6 45 e7 25 movb $0x25,-0x19(%ebp) + write(fd, &c, 1); + 50a: 83 ec 04 sub $0x4,%esp + 50d: 6a 01 push $0x1 + 50f: 8d 45 e7 lea -0x19(%ebp),%eax + 512: 50 push %eax + 513: ff 75 08 push 0x8(%ebp) + 516: e8 43 fd ff ff call 25e + putc(fd, c); + 51b: 88 5d e7 mov %bl,-0x19(%ebp) + write(fd, &c, 1); + 51e: 83 c4 0c add $0xc,%esp + 521: 6a 01 push $0x1 + 523: 8d 45 e7 lea -0x19(%ebp),%eax + 526: 50 push %eax + 527: ff 75 08 push 0x8(%ebp) + 52a: e8 2f fd ff ff call 25e + putc(fd, c); + 52f: 83 c4 10 add $0x10,%esp state = 0; - 560: bf 00 00 00 00 mov $0x0,%edi - 565: e9 83 fe ff ff jmp 3ed + 532: bf 00 00 00 00 mov $0x0,%edi + 537: e9 8f fe ff ff jmp 3cb } } } - 56a: 8d 65 f4 lea -0xc(%ebp),%esp - 56d: 5b pop %ebx - 56e: 5e pop %esi - 56f: 5f pop %edi - 570: 5d pop %ebp - 571: c3 ret - -00000572 : + 53c: 8d 65 f4 lea -0xc(%ebp),%esp + 53f: 5b pop %ebx + 540: 5e pop %esi + 541: 5f pop %edi + 542: 5d pop %ebp + 543: c3 ret + +00000544 : static Header base; static Header *freep; void free(void *ap) { - 572: f3 0f 1e fb endbr32 - 576: 55 push %ebp - 577: 89 e5 mov %esp,%ebp - 579: 57 push %edi - 57a: 56 push %esi - 57b: 53 push %ebx - 57c: 8b 5d 08 mov 0x8(%ebp),%ebx + 544: 55 push %ebp + 545: 89 e5 mov %esp,%ebp + 547: 57 push %edi + 548: 56 push %esi + 549: 53 push %ebx + 54a: 8b 5d 08 mov 0x8(%ebp),%ebx Header *bp, *p; bp = (Header*)ap - 1; - 57f: 8d 4b f8 lea -0x8(%ebx),%ecx + 54d: 8d 4b f8 lea -0x8(%ebx),%ecx for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 582: a1 6c 09 00 00 mov 0x96c,%eax - 587: eb 0c jmp 595 + 550: a1 84 09 00 00 mov 0x984,%eax + 555: eb 0c jmp 563 if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 589: 8b 10 mov (%eax),%edx - 58b: 39 c2 cmp %eax,%edx - 58d: 77 04 ja 593 - 58f: 39 ca cmp %ecx,%edx - 591: 77 10 ja 5a3 + 557: 8b 10 mov (%eax),%edx + 559: 39 c2 cmp %eax,%edx + 55b: 77 04 ja 561 + 55d: 39 ca cmp %ecx,%edx + 55f: 77 10 ja 571 { - 593: 89 d0 mov %edx,%eax + 561: 89 d0 mov %edx,%eax for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 595: 39 c8 cmp %ecx,%eax - 597: 73 f0 jae 589 - 599: 8b 10 mov (%eax),%edx - 59b: 39 ca cmp %ecx,%edx - 59d: 77 04 ja 5a3 + 563: 39 c8 cmp %ecx,%eax + 565: 73 f0 jae 557 + 567: 8b 10 mov (%eax),%edx + 569: 39 ca cmp %ecx,%edx + 56b: 77 04 ja 571 if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 59f: 39 c2 cmp %eax,%edx - 5a1: 77 f0 ja 593 + 56d: 39 c2 cmp %eax,%edx + 56f: 77 f0 ja 561 break; if(bp + bp->s.size == p->s.ptr){ - 5a3: 8b 73 fc mov -0x4(%ebx),%esi - 5a6: 8b 10 mov (%eax),%edx - 5a8: 8d 3c f1 lea (%ecx,%esi,8),%edi - 5ab: 39 fa cmp %edi,%edx - 5ad: 74 19 je 5c8 + 571: 8b 73 fc mov -0x4(%ebx),%esi + 574: 8b 10 mov (%eax),%edx + 576: 8d 3c f1 lea (%ecx,%esi,8),%edi + 579: 39 fa cmp %edi,%edx + 57b: 74 19 je 596 bp->s.size += p->s.ptr->s.size; bp->s.ptr = p->s.ptr->s.ptr; + 57d: 89 53 f8 mov %edx,-0x8(%ebx) } else bp->s.ptr = p->s.ptr; - 5af: 89 53 f8 mov %edx,-0x8(%ebx) if(p + p->s.size == bp){ - 5b2: 8b 50 04 mov 0x4(%eax),%edx - 5b5: 8d 34 d0 lea (%eax,%edx,8),%esi - 5b8: 39 f1 cmp %esi,%ecx - 5ba: 74 1b je 5d7 + 580: 8b 50 04 mov 0x4(%eax),%edx + 583: 8d 34 d0 lea (%eax,%edx,8),%esi + 586: 39 f1 cmp %esi,%ecx + 588: 74 18 je 5a2 p->s.size += bp->s.size; p->s.ptr = bp->s.ptr; + 58a: 89 08 mov %ecx,(%eax) } else p->s.ptr = bp; - 5bc: 89 08 mov %ecx,(%eax) freep = p; - 5be: a3 6c 09 00 00 mov %eax,0x96c + 58c: a3 84 09 00 00 mov %eax,0x984 } - 5c3: 5b pop %ebx - 5c4: 5e pop %esi - 5c5: 5f pop %edi - 5c6: 5d pop %ebp - 5c7: c3 ret + 591: 5b pop %ebx + 592: 5e pop %esi + 593: 5f pop %edi + 594: 5d pop %ebp + 595: c3 ret bp->s.size += p->s.ptr->s.size; - 5c8: 03 72 04 add 0x4(%edx),%esi - 5cb: 89 73 fc mov %esi,-0x4(%ebx) + 596: 03 72 04 add 0x4(%edx),%esi + 599: 89 73 fc mov %esi,-0x4(%ebx) bp->s.ptr = p->s.ptr->s.ptr; - 5ce: 8b 10 mov (%eax),%edx - 5d0: 8b 12 mov (%edx),%edx - 5d2: 89 53 f8 mov %edx,-0x8(%ebx) - 5d5: eb db jmp 5b2 + 59c: 8b 10 mov (%eax),%edx + 59e: 8b 12 mov (%edx),%edx + 5a0: eb db jmp 57d p->s.size += bp->s.size; - 5d7: 03 53 fc add -0x4(%ebx),%edx - 5da: 89 50 04 mov %edx,0x4(%eax) + 5a2: 03 53 fc add -0x4(%ebx),%edx + 5a5: 89 50 04 mov %edx,0x4(%eax) p->s.ptr = bp->s.ptr; - 5dd: 8b 53 f8 mov -0x8(%ebx),%edx - 5e0: 89 10 mov %edx,(%eax) - 5e2: eb da jmp 5be + 5a8: 8b 4b f8 mov -0x8(%ebx),%ecx + 5ab: eb dd jmp 58a -000005e4 : +000005ad : return freep; } void* malloc(uint nbytes) { - 5e4: f3 0f 1e fb endbr32 - 5e8: 55 push %ebp - 5e9: 89 e5 mov %esp,%ebp - 5eb: 57 push %edi - 5ec: 56 push %esi - 5ed: 53 push %ebx - 5ee: 83 ec 0c sub $0xc,%esp + 5ad: 55 push %ebp + 5ae: 89 e5 mov %esp,%ebp + 5b0: 57 push %edi + 5b1: 56 push %esi + 5b2: 53 push %ebx + 5b3: 83 ec 0c sub $0xc,%esp Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 5f1: 8b 45 08 mov 0x8(%ebp),%eax - 5f4: 8d 58 07 lea 0x7(%eax),%ebx - 5f7: c1 eb 03 shr $0x3,%ebx - 5fa: 83 c3 01 add $0x1,%ebx + 5b6: 8b 45 08 mov 0x8(%ebp),%eax + 5b9: 8d 58 07 lea 0x7(%eax),%ebx + 5bc: c1 eb 03 shr $0x3,%ebx + 5bf: 83 c3 01 add $0x1,%ebx if((prevp = freep) == 0){ - 5fd: 8b 15 6c 09 00 00 mov 0x96c,%edx - 603: 85 d2 test %edx,%edx - 605: 74 20 je 627 + 5c2: 8b 15 84 09 00 00 mov 0x984,%edx + 5c8: 85 d2 test %edx,%edx + 5ca: 74 1c je 5e8 base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 607: 8b 02 mov (%edx),%eax + 5cc: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 609: 8b 48 04 mov 0x4(%eax),%ecx - 60c: 39 cb cmp %ecx,%ebx - 60e: 76 3c jbe 64c - 610: 81 fb 00 10 00 00 cmp $0x1000,%ebx - 616: be 00 10 00 00 mov $0x1000,%esi - 61b: 0f 43 f3 cmovae %ebx,%esi + 5ce: 8b 48 04 mov 0x4(%eax),%ecx + 5d1: 39 cb cmp %ecx,%ebx + 5d3: 76 38 jbe 60d + 5d5: be 00 10 00 00 mov $0x1000,%esi + 5da: 39 f3 cmp %esi,%ebx + 5dc: 0f 43 f3 cmovae %ebx,%esi p = sbrk(nu * sizeof(Header)); - 61e: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi - 625: eb 72 jmp 699 + 5df: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi + 5e6: eb 72 jmp 65a base.s.ptr = freep = prevp = &base; - 627: c7 05 6c 09 00 00 70 movl $0x970,0x96c - 62e: 09 00 00 - 631: c7 05 70 09 00 00 70 movl $0x970,0x970 - 638: 09 00 00 + 5e8: c7 05 84 09 00 00 88 movl $0x988,0x984 + 5ef: 09 00 00 + 5f2: c7 05 88 09 00 00 88 movl $0x988,0x988 + 5f9: 09 00 00 base.s.size = 0; - 63b: c7 05 74 09 00 00 00 movl $0x0,0x974 - 642: 00 00 00 + 5fc: c7 05 8c 09 00 00 00 movl $0x0,0x98c + 603: 00 00 00 for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 645: b8 70 09 00 00 mov $0x970,%eax - 64a: eb c4 jmp 610 + 606: b8 88 09 00 00 mov $0x988,%eax + 60b: eb c8 jmp 5d5 if(p->s.size == nunits) - 64c: 39 cb cmp %ecx,%ebx - 64e: 74 1e je 66e + 60d: 39 cb cmp %ecx,%ebx + 60f: 74 1e je 62f prevp->s.ptr = p->s.ptr; else { p->s.size -= nunits; - 650: 29 d9 sub %ebx,%ecx - 652: 89 48 04 mov %ecx,0x4(%eax) + 611: 29 d9 sub %ebx,%ecx + 613: 89 48 04 mov %ecx,0x4(%eax) p += p->s.size; - 655: 8d 04 c8 lea (%eax,%ecx,8),%eax + 616: 8d 04 c8 lea (%eax,%ecx,8),%eax p->s.size = nunits; - 658: 89 58 04 mov %ebx,0x4(%eax) + 619: 89 58 04 mov %ebx,0x4(%eax) } freep = prevp; - 65b: 89 15 6c 09 00 00 mov %edx,0x96c + 61c: 89 15 84 09 00 00 mov %edx,0x984 return (void*)(p + 1); - 661: 8d 50 08 lea 0x8(%eax),%edx + 622: 8d 50 08 lea 0x8(%eax),%edx } if(p == freep) if((p = morecore(nunits)) == 0) return 0; } } - 664: 89 d0 mov %edx,%eax - 666: 8d 65 f4 lea -0xc(%ebp),%esp - 669: 5b pop %ebx - 66a: 5e pop %esi - 66b: 5f pop %edi - 66c: 5d pop %ebp - 66d: c3 ret + 625: 89 d0 mov %edx,%eax + 627: 8d 65 f4 lea -0xc(%ebp),%esp + 62a: 5b pop %ebx + 62b: 5e pop %esi + 62c: 5f pop %edi + 62d: 5d pop %ebp + 62e: c3 ret prevp->s.ptr = p->s.ptr; - 66e: 8b 08 mov (%eax),%ecx - 670: 89 0a mov %ecx,(%edx) - 672: eb e7 jmp 65b + 62f: 8b 08 mov (%eax),%ecx + 631: 89 0a mov %ecx,(%edx) + 633: eb e7 jmp 61c hp->s.size = nu; - 674: 89 70 04 mov %esi,0x4(%eax) + 635: 89 70 04 mov %esi,0x4(%eax) free((void*)(hp + 1)); - 677: 83 ec 0c sub $0xc,%esp - 67a: 83 c0 08 add $0x8,%eax - 67d: 50 push %eax - 67e: e8 ef fe ff ff call 572 + 638: 83 ec 0c sub $0xc,%esp + 63b: 83 c0 08 add $0x8,%eax + 63e: 50 push %eax + 63f: e8 00 ff ff ff call 544 return freep; - 683: 8b 15 6c 09 00 00 mov 0x96c,%edx + 644: 8b 15 84 09 00 00 mov 0x984,%edx if((p = morecore(nunits)) == 0) - 689: 83 c4 10 add $0x10,%esp - 68c: 85 d2 test %edx,%edx - 68e: 74 d4 je 664 + 64a: 83 c4 10 add $0x10,%esp + 64d: 85 d2 test %edx,%edx + 64f: 74 d4 je 625 for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 690: 8b 02 mov (%edx),%eax + 651: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 692: 8b 48 04 mov 0x4(%eax),%ecx - 695: 39 d9 cmp %ebx,%ecx - 697: 73 b3 jae 64c + 653: 8b 48 04 mov 0x4(%eax),%ecx + 656: 39 d9 cmp %ebx,%ecx + 658: 73 b3 jae 60d if(p == freep) - 699: 89 c2 mov %eax,%edx - 69b: 39 05 6c 09 00 00 cmp %eax,0x96c - 6a1: 75 ed jne 690 + 65a: 89 c2 mov %eax,%edx + 65c: 39 05 84 09 00 00 cmp %eax,0x984 + 662: 75 ed jne 651 p = sbrk(nu * sizeof(Header)); - 6a3: 83 ec 0c sub $0xc,%esp - 6a6: 57 push %edi - 6a7: e8 3c fc ff ff call 2e8 + 664: 83 ec 0c sub $0xc,%esp + 667: 57 push %edi + 668: e8 59 fc ff ff call 2c6 if(p == (char*)-1) - 6ac: 83 c4 10 add $0x10,%esp - 6af: 83 f8 ff cmp $0xffffffff,%eax - 6b2: 75 c0 jne 674 + 66d: 83 c4 10 add $0x10,%esp + 670: 83 f8 ff cmp $0xffffffff,%eax + 673: 75 c0 jne 635 return 0; - 6b4: ba 00 00 00 00 mov $0x0,%edx - 6b9: eb a9 jmp 664 + 675: ba 00 00 00 00 mov $0x0,%edx + 67a: eb a9 jmp 625 diff --git a/src/user/mkdir.d b/src/user/mkdir.d new file mode 100644 index 0000000..318f105 --- /dev/null +++ b/src/user/mkdir.d @@ -0,0 +1,2 @@ +user/mkdir.o: user/mkdir.c /usr/include/stdc-predef.h types.h stat.h \ + user.h diff --git a/src/user/mkdir.o b/src/user/mkdir.o new file mode 100644 index 0000000000000000000000000000000000000000..097c91c8ec55610140e291ce5c3c8315d5f26b61 GIT binary patch literal 3204 zcma)8TWl0n7(QoiyY2R}ZLze1c0^i0-04-IwMeBDV4qcyA&)# zw(z-joq`ui{DOJ;_~OD+O{w?iyQNZT;YRw>XY=O57aTtQe?>q3x^-bGnWv;DmDr=~ zwxnIzyIAVVuU#=9G`5WecFq|v3#X=B-<)=5oWQcIY8J}_W_w^x+fYuKVbRR`jvYGH ztOc9V8P{kT{RF0m8i*A%Cy;9i;<%FNBH+oESkjLI3{7{vkR=+yD^2=tzyyX$6Vpy% z;@s!}B&RS{9m1p-v0L>p@sApB0aS{MV^XZ97CbjNsfcJ7{JjS3w00}8Mm1TKtE}!o zEH;y=8Eg$ky~}tqK@R;GPhcp$m_~^i!*q_AW0+=%@uY^vRM35)M)RqF;)Pp0}) zn_5Sk23t9Tk{xlDDvPbQzRFt%TN$ff9aWA=(Vf?nnNvT@DR8e_ zrC9svZfvf;kEzM>e&AHru_2_^SzH9*Bxy`ju4Ib|CkOS!`+6%=G{p$?G~uAGzkXX!98d1l)gc9? z&Lb~ya~_@nm2JUxz48NL%ld5I_E|jHelE*`e9;fhWh+I^`k1E~%yZ0{cSGSrrhU(i znZw=N&F*fi&+0NWh29=aVdObGbB^cuZWf~LXY)JVZ9BG^nOtsa(##y{HZ#*+F*6yt zGokC1g&>4?n6YPEJ8->RSy?Q&VP@L53r=RXhy@*AI@{S(nOVOWI@z!&l(Vh_s~w#2 zvU$Jg6{8>%c`v!%R3@}1(H>w7LW;}I*g;-KyG4(6=8FZVGn$ONFzO8aEQ=m_UHVawg%-ANczD3vJQimYHW)sbUTKDG+#`#oFSIJFy2nnvXoXaUCQ?Bvt6z?wvozunRC=VLllMSjB(Ebz5XsB8 zTv5ZKFyoq}r=+A9i<_j%*kO{ft#LxM*esAke^Tgup{J8^96#>D5U8|3=4mp0ez<7ONPS{TiJTLHVfgcbe@5e&EF7Qi2T>n=BzZLksz(qpD z{U-2Ff%Jh%pQQc*q%TN6baZzlZy?0EIs`r@klGLF>Gy*$J_m3=$%r$73XoaBnF8Js zF!alqmz?j+SfMi?GHc2XZDvgd0kixf3FO^vbwh;DlrtISCR}g22+x?eCntSpPD(Sy z?2H?P6uj(h`?i;JR;gxO&ygWWFIiGg#B#P+C^+a&mWTdep+{xncVABHqTp!f*`%JHS(IlMnrhpfp&!kWr2?eJD_Z%tycfg^uf_Uk- z8-0lSz9i}Q2^7Rj@>aL&W!p_SkRLr)qFMOSJC;P}Ai9B3dEPXNjOvW;kNTfHZ)Gm1 o*)`<*0r&uhyyrA{%7v>~rgu;z=CZW1clxtk>DPiqzqya!zm){2QUCw| literal 0 HcmV?d00001 diff --git a/src/user/mkdir.sym b/src/user/mkdir.sym index a0645ec..54f0b41 100644 --- a/src/user/mkdir.sym +++ b/src/user/mkdir.sym @@ -1,59 +1,47 @@ -00000000 .text -000006bc .rodata -0000070c .eh_frame -0000096c .bss -00000000 .comment -00000000 .debug_aranges -00000000 .debug_info -00000000 .debug_abbrev -00000000 .debug_line -00000000 .debug_str -00000000 .debug_loc -00000000 .debug_ranges 00000000 mkdir.c 00000000 ulib.c 00000000 printf.c -00000310 printint -000006f8 digits.1089 +000002ee printint +00000710 digits.0 00000000 umalloc.c -0000096c freep -00000970 base -0000007a strcpy -000003a4 printf -00000227 memmove -000002a8 mknod -00000308 ps -00000145 gets -000002e0 getpid -000005e4 malloc -000002f0 sleep -00000270 pipe -00000300 slabtest -00000280 write -000002b8 fstat -00000290 kill -000002d0 chdir -00000298 exec -00000268 wait -00000278 read -000002b0 unlink -00000258 fork -000002e8 sbrk -000002f8 uptime -0000096c __bss_start -000000f9 memset +00000984 freep +00000988 base +00000076 strcpy +00000386 printf +00000209 memmove +00000286 mknod +000002e6 ps +00000131 gets +000002be getpid +000005ad malloc +000002ce sleep +0000024e pipe +000002de slabtest +0000025e write +00000296 fstat +0000026e kill +000002ae chdir +00000276 exec +00000246 wait +00000256 read +0000028e unlink +00000236 fork +000002c6 sbrk +000002d6 uptime +00000984 __bss_start +000000eb memset 00000000 main -000000a0 strcmp -000002d8 dup -000001a0 stat -0000096c _edata -00000978 _end -000002c0 link -00000260 exit -000001e8 atoi -000000cf strlen -000002a0 open -00000114 strchr -000002c8 mkdir -00000288 close -00000572 free +0000009a strcmp +000002b6 dup +00000188 stat +00000984 _edata +00000990 _end +0000029e link +0000023e exit +000001cc atoi +000000c5 strlen +0000027e open +00000104 strchr +000002a6 mkdir +00000266 close +00000544 free diff --git a/src/user/ps.asm b/src/user/ps.asm index c69920c..902084d 100644 --- a/src/user/ps.asm +++ b/src/user/ps.asm @@ -11,1037 +11,1006 @@ Disassembly of section .text: int main(int argc, char **argv) { - 0: f3 0f 1e fb endbr32 - 4: 8d 4c 24 04 lea 0x4(%esp),%ecx - 8: 83 e4 f0 and $0xfffffff0,%esp - b: ff 71 fc pushl -0x4(%ecx) - e: 55 push %ebp - f: 89 e5 mov %esp,%ebp - 11: 51 push %ecx - 12: 83 ec 04 sub $0x4,%esp + 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 ps(); - 15: e8 a2 02 00 00 call 2bc + 11: e8 84 02 00 00 call 29a printf(1, "ps\n"); - 1a: 83 ec 08 sub $0x8,%esp - 1d: 68 70 06 00 00 push $0x670 - 22: 6a 01 push $0x1 - 24: e8 2f 03 00 00 call 358 + 16: 83 ec 08 sub $0x8,%esp + 19: 68 30 06 00 00 push $0x630 + 1e: 6a 01 push $0x1 + 20: e8 15 03 00 00 call 33a exit(); - 29: e8 e6 01 00 00 call 214 + 25: e8 c8 01 00 00 call 1f2 -0000002e : +0000002a : #include "user.h" #include "x86.h" char* strcpy(char *s, const char *t) { - 2e: f3 0f 1e fb endbr32 - 32: 55 push %ebp - 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 + 2a: 55 push %ebp + 2b: 89 e5 mov %esp,%ebp + 2d: 53 push %ebx + 2e: 8b 4d 08 mov 0x8(%ebp),%ecx + 31: 8b 5d 0c mov 0xc(%ebp),%ebx char *os; os = s; while((*s++ = *t++) != 0) - 3c: b8 00 00 00 00 mov $0x0,%eax - 41: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 45: 88 14 01 mov %dl,(%ecx,%eax,1) - 48: 83 c0 01 add $0x1,%eax - 4b: 84 d2 test %dl,%dl - 4d: 75 f2 jne 41 + 34: b8 00 00 00 00 mov $0x0,%eax + 39: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx + 3d: 88 14 01 mov %dl,(%ecx,%eax,1) + 40: 83 c0 01 add $0x1,%eax + 43: 84 d2 test %dl,%dl + 45: 75 f2 jne 39 ; return os; } - 4f: 89 c8 mov %ecx,%eax - 51: 5b pop %ebx - 52: 5d pop %ebp - 53: c3 ret + 47: 89 c8 mov %ecx,%eax + 49: 8b 5d fc mov -0x4(%ebp),%ebx + 4c: c9 leave + 4d: c3 ret -00000054 : +0000004e : int strcmp(const char *p, const char *q) { - 54: f3 0f 1e fb endbr32 - 58: 55 push %ebp - 59: 89 e5 mov %esp,%ebp - 5b: 8b 4d 08 mov 0x8(%ebp),%ecx - 5e: 8b 55 0c mov 0xc(%ebp),%edx + 4e: 55 push %ebp + 4f: 89 e5 mov %esp,%ebp + 51: 8b 4d 08 mov 0x8(%ebp),%ecx + 54: 8b 55 0c mov 0xc(%ebp),%edx while(*p && *p == *q) - 61: 0f b6 01 movzbl (%ecx),%eax - 64: 84 c0 test %al,%al - 66: 74 11 je 79 - 68: 38 02 cmp %al,(%edx) - 6a: 75 0d jne 79 + 57: 0f b6 01 movzbl (%ecx),%eax + 5a: 84 c0 test %al,%al + 5c: 74 11 je 6f + 5e: 38 02 cmp %al,(%edx) + 60: 75 0d jne 6f p++, q++; - 6c: 83 c1 01 add $0x1,%ecx - 6f: 83 c2 01 add $0x1,%edx + 62: 83 c1 01 add $0x1,%ecx + 65: 83 c2 01 add $0x1,%edx while(*p && *p == *q) - 72: 0f b6 01 movzbl (%ecx),%eax - 75: 84 c0 test %al,%al - 77: 75 ef jne 68 + 68: 0f b6 01 movzbl (%ecx),%eax + 6b: 84 c0 test %al,%al + 6d: 75 ef jne 5e return (uchar)*p - (uchar)*q; - 79: 0f b6 c0 movzbl %al,%eax - 7c: 0f b6 12 movzbl (%edx),%edx - 7f: 29 d0 sub %edx,%eax + 6f: 0f b6 c0 movzbl %al,%eax + 72: 0f b6 12 movzbl (%edx),%edx + 75: 29 d0 sub %edx,%eax } - 81: 5d pop %ebp - 82: c3 ret + 77: 5d pop %ebp + 78: c3 ret -00000083 : +00000079 : uint strlen(const char *s) { - 83: f3 0f 1e fb endbr32 - 87: 55 push %ebp - 88: 89 e5 mov %esp,%ebp - 8a: 8b 55 08 mov 0x8(%ebp),%edx + 79: 55 push %ebp + 7a: 89 e5 mov %esp,%ebp + 7c: 8b 55 08 mov 0x8(%ebp),%edx int n; for(n = 0; s[n]; n++) - 8d: 80 3a 00 cmpb $0x0,(%edx) - 90: 74 14 je a6 - 92: b8 00 00 00 00 mov $0x0,%eax - 97: 83 c0 01 add $0x1,%eax - 9a: 89 c1 mov %eax,%ecx - 9c: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - a0: 75 f5 jne 97 + 7f: 80 3a 00 cmpb $0x0,(%edx) + 82: 74 14 je 98 + 84: b8 00 00 00 00 mov $0x0,%eax + 89: 83 c0 01 add $0x1,%eax + 8c: 89 c1 mov %eax,%ecx + 8e: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) + 92: 75 f5 jne 89 ; return n; } - a2: 89 c8 mov %ecx,%eax - a4: 5d pop %ebp - a5: c3 ret + 94: 89 c8 mov %ecx,%eax + 96: 5d pop %ebp + 97: c3 ret for(n = 0; s[n]; n++) - a6: b9 00 00 00 00 mov $0x0,%ecx + 98: b9 00 00 00 00 mov $0x0,%ecx return n; - ab: eb f5 jmp a2 + 9d: eb f5 jmp 94 -000000ad : +0000009f : void* memset(void *dst, int c, uint n) { - ad: f3 0f 1e fb endbr32 - b1: 55 push %ebp - b2: 89 e5 mov %esp,%ebp - b4: 57 push %edi - b5: 8b 55 08 mov 0x8(%ebp),%edx + 9f: 55 push %ebp + a0: 89 e5 mov %esp,%ebp + a2: 57 push %edi + a3: 8b 55 08 mov 0x8(%ebp),%edx } static inline void stosb(void *addr, int data, int cnt) { asm volatile("cld; rep stosb" : - b8: 89 d7 mov %edx,%edi - ba: 8b 4d 10 mov 0x10(%ebp),%ecx - bd: 8b 45 0c mov 0xc(%ebp),%eax - c0: fc cld - c1: f3 aa rep stos %al,%es:(%edi) + a6: 89 d7 mov %edx,%edi + a8: 8b 4d 10 mov 0x10(%ebp),%ecx + ab: 8b 45 0c mov 0xc(%ebp),%eax + ae: fc cld + af: f3 aa rep stos %al,%es:(%edi) stosb(dst, c, n); return dst; } - c3: 89 d0 mov %edx,%eax - c5: 5f pop %edi - c6: 5d pop %ebp - c7: c3 ret + b1: 89 d0 mov %edx,%eax + b3: 8b 7d fc mov -0x4(%ebp),%edi + b6: c9 leave + b7: c3 ret -000000c8 : +000000b8 : char* strchr(const char *s, char c) { - c8: f3 0f 1e fb endbr32 - cc: 55 push %ebp - cd: 89 e5 mov %esp,%ebp - cf: 8b 45 08 mov 0x8(%ebp),%eax - d2: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx + b8: 55 push %ebp + b9: 89 e5 mov %esp,%ebp + bb: 8b 45 08 mov 0x8(%ebp),%eax + be: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx for(; *s; s++) - d6: 0f b6 10 movzbl (%eax),%edx - d9: 84 d2 test %dl,%dl - db: 74 15 je f2 + c2: 0f b6 10 movzbl (%eax),%edx + c5: 84 d2 test %dl,%dl + c7: 74 15 je de if(*s == c) - dd: 38 d1 cmp %dl,%cl - df: 74 0f je f0 + c9: 38 d1 cmp %dl,%cl + cb: 74 0f je dc for(; *s; s++) - e1: 83 c0 01 add $0x1,%eax - e4: 0f b6 10 movzbl (%eax),%edx - e7: 84 d2 test %dl,%dl - e9: 75 f2 jne dd + cd: 83 c0 01 add $0x1,%eax + d0: 0f b6 10 movzbl (%eax),%edx + d3: 84 d2 test %dl,%dl + d5: 75 f2 jne c9 return (char*)s; return 0; - eb: b8 00 00 00 00 mov $0x0,%eax + d7: b8 00 00 00 00 mov $0x0,%eax } - f0: 5d pop %ebp - f1: c3 ret + dc: 5d pop %ebp + dd: c3 ret return 0; - f2: b8 00 00 00 00 mov $0x0,%eax - f7: eb f7 jmp f0 + de: b8 00 00 00 00 mov $0x0,%eax + e3: eb f7 jmp dc -000000f9 : +000000e5 : char* gets(char *buf, int max) { - f9: f3 0f 1e fb endbr32 - fd: 55 push %ebp - fe: 89 e5 mov %esp,%ebp - 100: 57 push %edi - 101: 56 push %esi - 102: 53 push %ebx - 103: 83 ec 2c sub $0x2c,%esp - 106: 8b 75 08 mov 0x8(%ebp),%esi + e5: 55 push %ebp + e6: 89 e5 mov %esp,%ebp + e8: 57 push %edi + e9: 56 push %esi + ea: 53 push %ebx + eb: 83 ec 2c sub $0x2c,%esp + ee: 8b 75 08 mov 0x8(%ebp),%esi int i, cc; char c; for(i=0; i+1 < max; ){ - 109: bb 00 00 00 00 mov $0x0,%ebx + f1: bb 00 00 00 00 mov $0x0,%ebx cc = read(0, &c, 1); - 10e: 8d 7d e7 lea -0x19(%ebp),%edi + f6: 8d 7d e7 lea -0x19(%ebp),%edi for(i=0; i+1 < max; ){ - 111: 89 5d d4 mov %ebx,-0x2c(%ebp) - 114: 83 c3 01 add $0x1,%ebx - 117: 3b 5d 0c cmp 0xc(%ebp),%ebx - 11a: 7d 27 jge 143 + f9: 89 5d d4 mov %ebx,-0x2c(%ebp) + fc: 83 c3 01 add $0x1,%ebx + ff: 3b 5d 0c cmp 0xc(%ebp),%ebx + 102: 7d 27 jge 12b cc = read(0, &c, 1); - 11c: 83 ec 04 sub $0x4,%esp - 11f: 6a 01 push $0x1 - 121: 57 push %edi - 122: 6a 00 push $0x0 - 124: e8 03 01 00 00 call 22c + 104: 83 ec 04 sub $0x4,%esp + 107: 6a 01 push $0x1 + 109: 57 push %edi + 10a: 6a 00 push $0x0 + 10c: e8 f9 00 00 00 call 20a if(cc < 1) - 129: 83 c4 10 add $0x10,%esp - 12c: 85 c0 test %eax,%eax - 12e: 7e 13 jle 143 + 111: 83 c4 10 add $0x10,%esp + 114: 85 c0 test %eax,%eax + 116: 7e 13 jle 12b break; buf[i++] = c; - 130: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 134: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) + 118: 0f b6 45 e7 movzbl -0x19(%ebp),%eax + 11c: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) if(c == '\n' || c == '\r') - 138: 3c 0a cmp $0xa,%al - 13a: 74 04 je 140 - 13c: 3c 0d cmp $0xd,%al - 13e: 75 d1 jne 111 + 120: 3c 0a cmp $0xa,%al + 122: 74 04 je 128 + 124: 3c 0d cmp $0xd,%al + 126: 75 d1 jne f9 for(i=0; i+1 < max; ){ - 140: 89 5d d4 mov %ebx,-0x2c(%ebp) + 128: 89 5d d4 mov %ebx,-0x2c(%ebp) break; } buf[i] = '\0'; - 143: 8b 45 d4 mov -0x2c(%ebp),%eax - 146: c6 04 06 00 movb $0x0,(%esi,%eax,1) + 12b: 8b 45 d4 mov -0x2c(%ebp),%eax + 12e: c6 04 06 00 movb $0x0,(%esi,%eax,1) return buf; } - 14a: 89 f0 mov %esi,%eax - 14c: 8d 65 f4 lea -0xc(%ebp),%esp - 14f: 5b pop %ebx - 150: 5e pop %esi - 151: 5f pop %edi - 152: 5d pop %ebp - 153: c3 ret + 132: 89 f0 mov %esi,%eax + 134: 8d 65 f4 lea -0xc(%ebp),%esp + 137: 5b pop %ebx + 138: 5e pop %esi + 139: 5f pop %edi + 13a: 5d pop %ebp + 13b: c3 ret -00000154 : +0000013c : int stat(const char *n, struct stat *st) { - 154: f3 0f 1e fb endbr32 - 158: 55 push %ebp - 159: 89 e5 mov %esp,%ebp - 15b: 56 push %esi - 15c: 53 push %ebx + 13c: 55 push %ebp + 13d: 89 e5 mov %esp,%ebp + 13f: 56 push %esi + 140: 53 push %ebx int fd; int r; fd = open(n, O_RDONLY); - 15d: 83 ec 08 sub $0x8,%esp - 160: 6a 00 push $0x0 - 162: ff 75 08 pushl 0x8(%ebp) - 165: e8 ea 00 00 00 call 254 + 141: 83 ec 08 sub $0x8,%esp + 144: 6a 00 push $0x0 + 146: ff 75 08 push 0x8(%ebp) + 149: e8 e4 00 00 00 call 232 if(fd < 0) - 16a: 83 c4 10 add $0x10,%esp - 16d: 85 c0 test %eax,%eax - 16f: 78 24 js 195 - 171: 89 c3 mov %eax,%ebx + 14e: 83 c4 10 add $0x10,%esp + 151: 85 c0 test %eax,%eax + 153: 78 24 js 179 + 155: 89 c3 mov %eax,%ebx return -1; r = fstat(fd, st); - 173: 83 ec 08 sub $0x8,%esp - 176: ff 75 0c pushl 0xc(%ebp) - 179: 50 push %eax - 17a: e8 ed 00 00 00 call 26c - 17f: 89 c6 mov %eax,%esi + 157: 83 ec 08 sub $0x8,%esp + 15a: ff 75 0c push 0xc(%ebp) + 15d: 50 push %eax + 15e: e8 e7 00 00 00 call 24a + 163: 89 c6 mov %eax,%esi close(fd); - 181: 89 1c 24 mov %ebx,(%esp) - 184: e8 b3 00 00 00 call 23c + 165: 89 1c 24 mov %ebx,(%esp) + 168: e8 ad 00 00 00 call 21a return r; - 189: 83 c4 10 add $0x10,%esp + 16d: 83 c4 10 add $0x10,%esp } - 18c: 89 f0 mov %esi,%eax - 18e: 8d 65 f8 lea -0x8(%ebp),%esp - 191: 5b pop %ebx - 192: 5e pop %esi - 193: 5d pop %ebp - 194: c3 ret + 170: 89 f0 mov %esi,%eax + 172: 8d 65 f8 lea -0x8(%ebp),%esp + 175: 5b pop %ebx + 176: 5e pop %esi + 177: 5d pop %ebp + 178: c3 ret return -1; - 195: be ff ff ff ff mov $0xffffffff,%esi - 19a: eb f0 jmp 18c + 179: be ff ff ff ff mov $0xffffffff,%esi + 17e: eb f0 jmp 170 -0000019c : +00000180 : int atoi(const char *s) { - 19c: f3 0f 1e fb endbr32 - 1a0: 55 push %ebp - 1a1: 89 e5 mov %esp,%ebp - 1a3: 53 push %ebx - 1a4: 8b 55 08 mov 0x8(%ebp),%edx + 180: 55 push %ebp + 181: 89 e5 mov %esp,%ebp + 183: 53 push %ebx + 184: 8b 55 08 mov 0x8(%ebp),%edx int n; n = 0; while('0' <= *s && *s <= '9') - 1a7: 0f b6 02 movzbl (%edx),%eax - 1aa: 8d 48 d0 lea -0x30(%eax),%ecx - 1ad: 80 f9 09 cmp $0x9,%cl - 1b0: 77 22 ja 1d4 + 187: 0f b6 02 movzbl (%edx),%eax + 18a: 8d 48 d0 lea -0x30(%eax),%ecx + 18d: 80 f9 09 cmp $0x9,%cl + 190: 77 24 ja 1b6 n = 0; - 1b2: b9 00 00 00 00 mov $0x0,%ecx + 192: b9 00 00 00 00 mov $0x0,%ecx n = n*10 + *s++ - '0'; - 1b7: 83 c2 01 add $0x1,%edx - 1ba: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 1bd: 0f be c0 movsbl %al,%eax - 1c0: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx + 197: 83 c2 01 add $0x1,%edx + 19a: 8d 0c 89 lea (%ecx,%ecx,4),%ecx + 19d: 0f be c0 movsbl %al,%eax + 1a0: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx while('0' <= *s && *s <= '9') - 1c4: 0f b6 02 movzbl (%edx),%eax - 1c7: 8d 58 d0 lea -0x30(%eax),%ebx - 1ca: 80 fb 09 cmp $0x9,%bl - 1cd: 76 e8 jbe 1b7 + 1a4: 0f b6 02 movzbl (%edx),%eax + 1a7: 8d 58 d0 lea -0x30(%eax),%ebx + 1aa: 80 fb 09 cmp $0x9,%bl + 1ad: 76 e8 jbe 197 return n; } - 1cf: 89 c8 mov %ecx,%eax - 1d1: 5b pop %ebx - 1d2: 5d pop %ebp - 1d3: c3 ret + 1af: 89 c8 mov %ecx,%eax + 1b1: 8b 5d fc mov -0x4(%ebp),%ebx + 1b4: c9 leave + 1b5: c3 ret n = 0; - 1d4: b9 00 00 00 00 mov $0x0,%ecx + 1b6: b9 00 00 00 00 mov $0x0,%ecx return n; - 1d9: eb f4 jmp 1cf + 1bb: eb f2 jmp 1af -000001db : +000001bd : void* memmove(void *vdst, const void *vsrc, int n) { - 1db: f3 0f 1e fb endbr32 - 1df: 55 push %ebp - 1e0: 89 e5 mov %esp,%ebp - 1e2: 56 push %esi - 1e3: 53 push %ebx - 1e4: 8b 75 08 mov 0x8(%ebp),%esi - 1e7: 8b 55 0c mov 0xc(%ebp),%edx - 1ea: 8b 5d 10 mov 0x10(%ebp),%ebx + 1bd: 55 push %ebp + 1be: 89 e5 mov %esp,%ebp + 1c0: 56 push %esi + 1c1: 53 push %ebx + 1c2: 8b 75 08 mov 0x8(%ebp),%esi + 1c5: 8b 55 0c mov 0xc(%ebp),%edx + 1c8: 8b 5d 10 mov 0x10(%ebp),%ebx char *dst; const char *src; dst = vdst; src = vsrc; while(n-- > 0) - 1ed: 85 db test %ebx,%ebx - 1ef: 7e 15 jle 206 - 1f1: 01 f3 add %esi,%ebx + 1cb: 85 db test %ebx,%ebx + 1cd: 7e 15 jle 1e4 + 1cf: 01 f3 add %esi,%ebx dst = vdst; - 1f3: 89 f0 mov %esi,%eax + 1d1: 89 f0 mov %esi,%eax *dst++ = *src++; - 1f5: 83 c2 01 add $0x1,%edx - 1f8: 83 c0 01 add $0x1,%eax - 1fb: 0f b6 4a ff movzbl -0x1(%edx),%ecx - 1ff: 88 48 ff mov %cl,-0x1(%eax) + 1d3: 83 c2 01 add $0x1,%edx + 1d6: 83 c0 01 add $0x1,%eax + 1d9: 0f b6 4a ff movzbl -0x1(%edx),%ecx + 1dd: 88 48 ff mov %cl,-0x1(%eax) while(n-- > 0) - 202: 39 c3 cmp %eax,%ebx - 204: 75 ef jne 1f5 + 1e0: 39 c3 cmp %eax,%ebx + 1e2: 75 ef jne 1d3 return vdst; } - 206: 89 f0 mov %esi,%eax - 208: 5b pop %ebx - 209: 5e pop %esi - 20a: 5d pop %ebp - 20b: c3 ret + 1e4: 89 f0 mov %esi,%eax + 1e6: 5b pop %ebx + 1e7: 5e pop %esi + 1e8: 5d pop %ebp + 1e9: c3 ret -0000020c : +000001ea : name: \ movl $SYS_ ## name, %eax; \ int $T_SYSCALL; \ ret SYSCALL(fork) - 20c: b8 01 00 00 00 mov $0x1,%eax - 211: cd 40 int $0x40 - 213: c3 ret + 1ea: b8 01 00 00 00 mov $0x1,%eax + 1ef: cd 40 int $0x40 + 1f1: c3 ret -00000214 : +000001f2 : SYSCALL(exit) - 214: b8 02 00 00 00 mov $0x2,%eax - 219: cd 40 int $0x40 - 21b: c3 ret + 1f2: b8 02 00 00 00 mov $0x2,%eax + 1f7: cd 40 int $0x40 + 1f9: c3 ret -0000021c : +000001fa : SYSCALL(wait) - 21c: b8 03 00 00 00 mov $0x3,%eax - 221: cd 40 int $0x40 - 223: c3 ret + 1fa: b8 03 00 00 00 mov $0x3,%eax + 1ff: cd 40 int $0x40 + 201: c3 ret -00000224 : +00000202 : SYSCALL(pipe) - 224: b8 04 00 00 00 mov $0x4,%eax - 229: cd 40 int $0x40 - 22b: c3 ret + 202: b8 04 00 00 00 mov $0x4,%eax + 207: cd 40 int $0x40 + 209: c3 ret -0000022c : +0000020a : SYSCALL(read) - 22c: b8 05 00 00 00 mov $0x5,%eax - 231: cd 40 int $0x40 - 233: c3 ret + 20a: b8 05 00 00 00 mov $0x5,%eax + 20f: cd 40 int $0x40 + 211: c3 ret -00000234 : +00000212 : SYSCALL(write) - 234: b8 10 00 00 00 mov $0x10,%eax - 239: cd 40 int $0x40 - 23b: c3 ret + 212: b8 10 00 00 00 mov $0x10,%eax + 217: cd 40 int $0x40 + 219: c3 ret -0000023c : +0000021a : SYSCALL(close) - 23c: b8 15 00 00 00 mov $0x15,%eax - 241: cd 40 int $0x40 - 243: c3 ret + 21a: b8 15 00 00 00 mov $0x15,%eax + 21f: cd 40 int $0x40 + 221: c3 ret -00000244 : +00000222 : SYSCALL(kill) - 244: b8 06 00 00 00 mov $0x6,%eax - 249: cd 40 int $0x40 - 24b: c3 ret + 222: b8 06 00 00 00 mov $0x6,%eax + 227: cd 40 int $0x40 + 229: c3 ret -0000024c : +0000022a : SYSCALL(exec) - 24c: b8 07 00 00 00 mov $0x7,%eax - 251: cd 40 int $0x40 - 253: c3 ret + 22a: b8 07 00 00 00 mov $0x7,%eax + 22f: cd 40 int $0x40 + 231: c3 ret -00000254 : +00000232 : SYSCALL(open) - 254: b8 0f 00 00 00 mov $0xf,%eax - 259: cd 40 int $0x40 - 25b: c3 ret + 232: b8 0f 00 00 00 mov $0xf,%eax + 237: cd 40 int $0x40 + 239: c3 ret -0000025c : +0000023a : SYSCALL(mknod) - 25c: b8 11 00 00 00 mov $0x11,%eax - 261: cd 40 int $0x40 - 263: c3 ret + 23a: b8 11 00 00 00 mov $0x11,%eax + 23f: cd 40 int $0x40 + 241: c3 ret -00000264 : +00000242 : SYSCALL(unlink) - 264: b8 12 00 00 00 mov $0x12,%eax - 269: cd 40 int $0x40 - 26b: c3 ret + 242: b8 12 00 00 00 mov $0x12,%eax + 247: cd 40 int $0x40 + 249: c3 ret -0000026c : +0000024a : SYSCALL(fstat) - 26c: b8 08 00 00 00 mov $0x8,%eax - 271: cd 40 int $0x40 - 273: c3 ret + 24a: b8 08 00 00 00 mov $0x8,%eax + 24f: cd 40 int $0x40 + 251: c3 ret -00000274 : +00000252 : SYSCALL(link) - 274: b8 13 00 00 00 mov $0x13,%eax - 279: cd 40 int $0x40 - 27b: c3 ret + 252: b8 13 00 00 00 mov $0x13,%eax + 257: cd 40 int $0x40 + 259: c3 ret -0000027c : +0000025a : SYSCALL(mkdir) - 27c: b8 14 00 00 00 mov $0x14,%eax - 281: cd 40 int $0x40 - 283: c3 ret + 25a: b8 14 00 00 00 mov $0x14,%eax + 25f: cd 40 int $0x40 + 261: c3 ret -00000284 : +00000262 : SYSCALL(chdir) - 284: b8 09 00 00 00 mov $0x9,%eax - 289: cd 40 int $0x40 - 28b: c3 ret + 262: b8 09 00 00 00 mov $0x9,%eax + 267: cd 40 int $0x40 + 269: c3 ret -0000028c : +0000026a : SYSCALL(dup) - 28c: b8 0a 00 00 00 mov $0xa,%eax - 291: cd 40 int $0x40 - 293: c3 ret + 26a: b8 0a 00 00 00 mov $0xa,%eax + 26f: cd 40 int $0x40 + 271: c3 ret -00000294 : +00000272 : SYSCALL(getpid) - 294: b8 0b 00 00 00 mov $0xb,%eax - 299: cd 40 int $0x40 - 29b: c3 ret + 272: b8 0b 00 00 00 mov $0xb,%eax + 277: cd 40 int $0x40 + 279: c3 ret -0000029c : +0000027a : SYSCALL(sbrk) - 29c: b8 0c 00 00 00 mov $0xc,%eax - 2a1: cd 40 int $0x40 - 2a3: c3 ret + 27a: b8 0c 00 00 00 mov $0xc,%eax + 27f: cd 40 int $0x40 + 281: c3 ret -000002a4 : +00000282 : SYSCALL(sleep) - 2a4: b8 0d 00 00 00 mov $0xd,%eax - 2a9: cd 40 int $0x40 - 2ab: c3 ret + 282: b8 0d 00 00 00 mov $0xd,%eax + 287: cd 40 int $0x40 + 289: c3 ret -000002ac : +0000028a : SYSCALL(uptime) - 2ac: b8 0e 00 00 00 mov $0xe,%eax - 2b1: cd 40 int $0x40 - 2b3: c3 ret + 28a: b8 0e 00 00 00 mov $0xe,%eax + 28f: cd 40 int $0x40 + 291: c3 ret -000002b4 : +00000292 : SYSCALL(slabtest) - 2b4: b8 16 00 00 00 mov $0x16,%eax - 2b9: cd 40 int $0x40 - 2bb: c3 ret + 292: b8 16 00 00 00 mov $0x16,%eax + 297: cd 40 int $0x40 + 299: c3 ret -000002bc : +0000029a : SYSCALL(ps) - 2bc: b8 17 00 00 00 mov $0x17,%eax - 2c1: cd 40 int $0x40 - 2c3: c3 ret + 29a: b8 17 00 00 00 mov $0x17,%eax + 29f: cd 40 int $0x40 + 2a1: c3 ret -000002c4 : +000002a2 : write(fd, &c, 1); } static void printint(int fd, int xx, int base, int sgn) { - 2c4: 55 push %ebp - 2c5: 89 e5 mov %esp,%ebp - 2c7: 57 push %edi - 2c8: 56 push %esi - 2c9: 53 push %ebx - 2ca: 83 ec 3c sub $0x3c,%esp - 2cd: 89 45 c4 mov %eax,-0x3c(%ebp) - 2d0: 89 d3 mov %edx,%ebx + 2a2: 55 push %ebp + 2a3: 89 e5 mov %esp,%ebp + 2a5: 57 push %edi + 2a6: 56 push %esi + 2a7: 53 push %ebx + 2a8: 83 ec 3c sub $0x3c,%esp + 2ab: 89 45 c4 mov %eax,-0x3c(%ebp) + 2ae: 89 ce mov %ecx,%esi char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 2d2: 83 7d 08 00 cmpl $0x0,0x8(%ebp) - 2d6: 74 77 je 34f - 2d8: 85 d2 test %edx,%edx - 2da: 79 73 jns 34f + 2b0: 83 7d 08 00 cmpl $0x0,0x8(%ebp) + 2b4: 74 79 je 32f + 2b6: 85 d2 test %edx,%edx + 2b8: 79 75 jns 32f neg = 1; x = -xx; - 2dc: f7 db neg %ebx + 2ba: 89 d1 mov %edx,%ecx + 2bc: f7 d9 neg %ecx neg = 1; - 2de: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) + 2be: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) } else { x = xx; } i = 0; - 2e5: be 00 00 00 00 mov $0x0,%esi + 2c5: bb 00 00 00 00 mov $0x0,%ebx do{ buf[i++] = digits[x % base]; - 2ea: 89 f7 mov %esi,%edi - 2ec: 83 c6 01 add $0x1,%esi - 2ef: 89 d8 mov %ebx,%eax - 2f1: ba 00 00 00 00 mov $0x0,%edx - 2f6: f7 f1 div %ecx - 2f8: 0f b6 92 7c 06 00 00 movzbl 0x67c(%edx),%edx - 2ff: 88 54 35 d7 mov %dl,-0x29(%ebp,%esi,1) + 2ca: 89 df mov %ebx,%edi + 2cc: 83 c3 01 add $0x1,%ebx + 2cf: 89 c8 mov %ecx,%eax + 2d1: ba 00 00 00 00 mov $0x0,%edx + 2d6: f7 f6 div %esi + 2d8: 0f b6 92 94 06 00 00 movzbl 0x694(%edx),%edx + 2df: 88 54 1d d7 mov %dl,-0x29(%ebp,%ebx,1) }while((x /= base) != 0); - 303: 89 da mov %ebx,%edx - 305: 89 c3 mov %eax,%ebx - 307: 39 d1 cmp %edx,%ecx - 309: 76 df jbe 2ea + 2e3: 89 ca mov %ecx,%edx + 2e5: 89 c1 mov %eax,%ecx + 2e7: 39 d6 cmp %edx,%esi + 2e9: 76 df jbe 2ca if(neg) - 30b: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) - 30f: 74 08 je 319 + 2eb: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) + 2ef: 74 08 je 2f9 buf[i++] = '-'; - 311: c6 44 35 d8 2d movb $0x2d,-0x28(%ebp,%esi,1) - 316: 8d 77 02 lea 0x2(%edi),%esi + 2f1: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) + 2f6: 8d 5f 02 lea 0x2(%edi),%ebx while(--i >= 0) - 319: 85 f6 test %esi,%esi - 31b: 7e 2a jle 347 - 31d: 8d 5c 35 d7 lea -0x29(%ebp,%esi,1),%ebx - 321: 8d 7d d8 lea -0x28(%ebp),%edi + 2f9: 85 db test %ebx,%ebx + 2fb: 7e 2a jle 327 + 2fd: 8d 7d d8 lea -0x28(%ebp),%edi + 300: 8d 5c 1d d7 lea -0x29(%ebp,%ebx,1),%ebx write(fd, &c, 1); - 324: 8d 75 d7 lea -0x29(%ebp),%esi + 304: 8d 75 d7 lea -0x29(%ebp),%esi putc(fd, buf[i]); - 327: 0f b6 03 movzbl (%ebx),%eax - 32a: 88 45 d7 mov %al,-0x29(%ebp) + 307: 0f b6 03 movzbl (%ebx),%eax + 30a: 88 45 d7 mov %al,-0x29(%ebp) write(fd, &c, 1); - 32d: 83 ec 04 sub $0x4,%esp - 330: 6a 01 push $0x1 - 332: 56 push %esi - 333: ff 75 c4 pushl -0x3c(%ebp) - 336: e8 f9 fe ff ff call 234 + 30d: 83 ec 04 sub $0x4,%esp + 310: 6a 01 push $0x1 + 312: 56 push %esi + 313: ff 75 c4 push -0x3c(%ebp) + 316: e8 f7 fe ff ff call 212 while(--i >= 0) - 33b: 89 d8 mov %ebx,%eax - 33d: 83 eb 01 sub $0x1,%ebx - 340: 83 c4 10 add $0x10,%esp - 343: 39 f8 cmp %edi,%eax - 345: 75 e0 jne 327 + 31b: 89 d8 mov %ebx,%eax + 31d: 83 eb 01 sub $0x1,%ebx + 320: 83 c4 10 add $0x10,%esp + 323: 39 f8 cmp %edi,%eax + 325: 75 e0 jne 307 } - 347: 8d 65 f4 lea -0xc(%ebp),%esp - 34a: 5b pop %ebx - 34b: 5e pop %esi - 34c: 5f pop %edi - 34d: 5d pop %ebp - 34e: c3 ret + 327: 8d 65 f4 lea -0xc(%ebp),%esp + 32a: 5b pop %ebx + 32b: 5e pop %esi + 32c: 5f pop %edi + 32d: 5d pop %ebp + 32e: c3 ret + x = xx; + 32f: 89 d1 mov %edx,%ecx neg = 0; - 34f: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) - 356: eb 8d jmp 2e5 + 331: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) + 338: eb 8b jmp 2c5 -00000358 : +0000033a : // Print to the given fd. Only understands %d, %x, %p, %s. void printf(int fd, const char *fmt, ...) { - 358: f3 0f 1e fb endbr32 - 35c: 55 push %ebp - 35d: 89 e5 mov %esp,%ebp - 35f: 57 push %edi - 360: 56 push %esi - 361: 53 push %ebx - 362: 83 ec 2c sub $0x2c,%esp + 33a: 55 push %ebp + 33b: 89 e5 mov %esp,%ebp + 33d: 57 push %edi + 33e: 56 push %esi + 33f: 53 push %ebx + 340: 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++){ - 365: 8b 75 0c mov 0xc(%ebp),%esi - 368: 0f b6 1e movzbl (%esi),%ebx - 36b: 84 db test %bl,%bl - 36d: 0f 84 ab 01 00 00 je 51e - 373: 83 c6 01 add $0x1,%esi + 343: 8b 75 0c mov 0xc(%ebp),%esi + 346: 0f b6 1e movzbl (%esi),%ebx + 349: 84 db test %bl,%bl + 34b: 0f 84 9f 01 00 00 je 4f0 + 351: 83 c6 01 add $0x1,%esi ap = (uint*)(void*)&fmt + 1; - 376: 8d 45 10 lea 0x10(%ebp),%eax - 379: 89 45 d4 mov %eax,-0x2c(%ebp) + 354: 8d 45 10 lea 0x10(%ebp),%eax + 357: 89 45 d4 mov %eax,-0x2c(%ebp) state = 0; - 37c: bf 00 00 00 00 mov $0x0,%edi - 381: eb 2d jmp 3b0 + 35a: bf 00 00 00 00 mov $0x0,%edi + 35f: eb 2d jmp 38e c = fmt[i] & 0xff; if(state == 0){ if(c == '%'){ state = '%'; } else { putc(fd, c); - 383: 88 5d e7 mov %bl,-0x19(%ebp) + 361: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 386: 83 ec 04 sub $0x4,%esp - 389: 6a 01 push $0x1 - 38b: 8d 45 e7 lea -0x19(%ebp),%eax - 38e: 50 push %eax - 38f: ff 75 08 pushl 0x8(%ebp) - 392: e8 9d fe ff ff call 234 + 364: 83 ec 04 sub $0x4,%esp + 367: 6a 01 push $0x1 + 369: 8d 45 e7 lea -0x19(%ebp),%eax + 36c: 50 push %eax + 36d: ff 75 08 push 0x8(%ebp) + 370: e8 9d fe ff ff call 212 putc(fd, c); - 397: 83 c4 10 add $0x10,%esp - 39a: eb 05 jmp 3a1 + 375: 83 c4 10 add $0x10,%esp + 378: eb 05 jmp 37f } } else if(state == '%'){ - 39c: 83 ff 25 cmp $0x25,%edi - 39f: 74 22 je 3c3 + 37a: 83 ff 25 cmp $0x25,%edi + 37d: 74 1f je 39e for(i = 0; fmt[i]; i++){ - 3a1: 83 c6 01 add $0x1,%esi - 3a4: 0f b6 5e ff movzbl -0x1(%esi),%ebx - 3a8: 84 db test %bl,%bl - 3aa: 0f 84 6e 01 00 00 je 51e + 37f: 83 c6 01 add $0x1,%esi + 382: 0f b6 5e ff movzbl -0x1(%esi),%ebx + 386: 84 db test %bl,%bl + 388: 0f 84 62 01 00 00 je 4f0 c = fmt[i] & 0xff; - 3b0: 0f be d3 movsbl %bl,%edx - 3b3: 0f b6 c3 movzbl %bl,%eax + 38e: 0f b6 c3 movzbl %bl,%eax if(state == 0){ - 3b6: 85 ff test %edi,%edi - 3b8: 75 e2 jne 39c + 391: 85 ff test %edi,%edi + 393: 75 e5 jne 37a if(c == '%'){ - 3ba: 83 f8 25 cmp $0x25,%eax - 3bd: 75 c4 jne 383 + 395: 83 f8 25 cmp $0x25,%eax + 398: 75 c7 jne 361 state = '%'; - 3bf: 89 c7 mov %eax,%edi - 3c1: eb de jmp 3a1 + 39a: 89 c7 mov %eax,%edi + 39c: eb e1 jmp 37f if(c == 'd'){ - 3c3: 83 f8 64 cmp $0x64,%eax - 3c6: 74 59 je 421 + 39e: 83 f8 25 cmp $0x25,%eax + 3a1: 0f 84 f2 00 00 00 je 499 + 3a7: 8d 50 9d lea -0x63(%eax),%edx + 3aa: 83 fa 15 cmp $0x15,%edx + 3ad: 0f 87 07 01 00 00 ja 4ba + 3b3: 0f 87 01 01 00 00 ja 4ba + 3b9: ff 24 95 3c 06 00 00 jmp *0x63c(,%edx,4) printint(fd, *ap, 10, 1); + 3c0: 83 ec 0c sub $0xc,%esp + 3c3: 6a 01 push $0x1 + 3c5: b9 0a 00 00 00 mov $0xa,%ecx + 3ca: 8b 7d d4 mov -0x2c(%ebp),%edi + 3cd: 8b 17 mov (%edi),%edx + 3cf: 8b 45 08 mov 0x8(%ebp),%eax + 3d2: e8 cb fe ff ff call 2a2 ap++; - } else if(c == 'x' || c == 'p'){ - 3c8: 81 e2 f7 00 00 00 and $0xf7,%edx - 3ce: 83 fa 70 cmp $0x70,%edx - 3d1: 74 7a je 44d - printint(fd, *ap, 16, 0); - ap++; - } else if(c == 's'){ - 3d3: 83 f8 73 cmp $0x73,%eax - 3d6: 0f 84 9d 00 00 00 je 479 - s = "(null)"; - while(*s != 0){ - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 3dc: 83 f8 63 cmp $0x63,%eax - 3df: 0f 84 ec 00 00 00 je 4d1 - putc(fd, *ap); - ap++; - } else if(c == '%'){ - 3e5: 83 f8 25 cmp $0x25,%eax - 3e8: 0f 84 0f 01 00 00 je 4fd - putc(fd, c); + 3d7: 89 f8 mov %edi,%eax + 3d9: 83 c0 04 add $0x4,%eax + 3dc: 89 45 d4 mov %eax,-0x2c(%ebp) + 3df: 83 c4 10 add $0x10,%esp } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); - 3ee: c6 45 e7 25 movb $0x25,-0x19(%ebp) - write(fd, &c, 1); - 3f2: 83 ec 04 sub $0x4,%esp - 3f5: 6a 01 push $0x1 - 3f7: 8d 45 e7 lea -0x19(%ebp),%eax - 3fa: 50 push %eax - 3fb: ff 75 08 pushl 0x8(%ebp) - 3fe: e8 31 fe ff ff call 234 putc(fd, c); - 403: 88 5d e7 mov %bl,-0x19(%ebp) - write(fd, &c, 1); - 406: 83 c4 0c add $0xc,%esp - 409: 6a 01 push $0x1 - 40b: 8d 45 e7 lea -0x19(%ebp),%eax - 40e: 50 push %eax - 40f: ff 75 08 pushl 0x8(%ebp) - 412: e8 1d fe ff ff call 234 - putc(fd, c); - 417: 83 c4 10 add $0x10,%esp } state = 0; - 41a: bf 00 00 00 00 mov $0x0,%edi - 41f: eb 80 jmp 3a1 - printint(fd, *ap, 10, 1); - 421: 83 ec 0c sub $0xc,%esp - 424: 6a 01 push $0x1 - 426: b9 0a 00 00 00 mov $0xa,%ecx - 42b: 8b 7d d4 mov -0x2c(%ebp),%edi - 42e: 8b 17 mov (%edi),%edx - 430: 8b 45 08 mov 0x8(%ebp),%eax - 433: e8 8c fe ff ff call 2c4 - ap++; - 438: 89 f8 mov %edi,%eax - 43a: 83 c0 04 add $0x4,%eax - 43d: 89 45 d4 mov %eax,-0x2c(%ebp) - 440: 83 c4 10 add $0x10,%esp - state = 0; - 443: bf 00 00 00 00 mov $0x0,%edi - 448: e9 54 ff ff ff jmp 3a1 + 3e2: bf 00 00 00 00 mov $0x0,%edi + 3e7: eb 96 jmp 37f printint(fd, *ap, 16, 0); - 44d: 83 ec 0c sub $0xc,%esp - 450: 6a 00 push $0x0 - 452: b9 10 00 00 00 mov $0x10,%ecx - 457: 8b 7d d4 mov -0x2c(%ebp),%edi - 45a: 8b 17 mov (%edi),%edx - 45c: 8b 45 08 mov 0x8(%ebp),%eax - 45f: e8 60 fe ff ff call 2c4 + 3e9: 83 ec 0c sub $0xc,%esp + 3ec: 6a 00 push $0x0 + 3ee: b9 10 00 00 00 mov $0x10,%ecx + 3f3: 8b 7d d4 mov -0x2c(%ebp),%edi + 3f6: 8b 17 mov (%edi),%edx + 3f8: 8b 45 08 mov 0x8(%ebp),%eax + 3fb: e8 a2 fe ff ff call 2a2 ap++; - 464: 89 f8 mov %edi,%eax - 466: 83 c0 04 add $0x4,%eax - 469: 89 45 d4 mov %eax,-0x2c(%ebp) - 46c: 83 c4 10 add $0x10,%esp + 400: 89 f8 mov %edi,%eax + 402: 83 c0 04 add $0x4,%eax + 405: 89 45 d4 mov %eax,-0x2c(%ebp) + 408: 83 c4 10 add $0x10,%esp state = 0; - 46f: bf 00 00 00 00 mov $0x0,%edi - 474: e9 28 ff ff ff jmp 3a1 + 40b: bf 00 00 00 00 mov $0x0,%edi + 410: e9 6a ff ff ff jmp 37f s = (char*)*ap; - 479: 8b 4d d4 mov -0x2c(%ebp),%ecx - 47c: 8b 01 mov (%ecx),%eax + 415: 8b 4d d4 mov -0x2c(%ebp),%ecx + 418: 8b 01 mov (%ecx),%eax ap++; - 47e: 83 c1 04 add $0x4,%ecx - 481: 89 4d d4 mov %ecx,-0x2c(%ebp) + 41a: 83 c1 04 add $0x4,%ecx + 41d: 89 4d d4 mov %ecx,-0x2c(%ebp) if(s == 0) - 484: 85 c0 test %eax,%eax - 486: 74 13 je 49b + 420: 85 c0 test %eax,%eax + 422: 74 13 je 437 s = (char*)*ap; - 488: 89 c3 mov %eax,%ebx + 424: 89 c3 mov %eax,%ebx while(*s != 0){ - 48a: 0f b6 00 movzbl (%eax),%eax + 426: 0f b6 00 movzbl (%eax),%eax state = 0; - 48d: bf 00 00 00 00 mov $0x0,%edi + 429: bf 00 00 00 00 mov $0x0,%edi while(*s != 0){ - 492: 84 c0 test %al,%al - 494: 75 0f jne 4a5 - 496: e9 06 ff ff ff jmp 3a1 + 42e: 84 c0 test %al,%al + 430: 75 0f jne 441 + 432: e9 48 ff ff ff jmp 37f s = "(null)"; - 49b: bb 74 06 00 00 mov $0x674,%ebx + 437: bb 34 06 00 00 mov $0x634,%ebx while(*s != 0){ - 4a0: b8 28 00 00 00 mov $0x28,%eax - 4a5: 8b 7d 08 mov 0x8(%ebp),%edi + 43c: b8 28 00 00 00 mov $0x28,%eax + 441: 8b 7d 08 mov 0x8(%ebp),%edi putc(fd, *s); - 4a8: 88 45 e7 mov %al,-0x19(%ebp) + 444: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 4ab: 83 ec 04 sub $0x4,%esp - 4ae: 6a 01 push $0x1 - 4b0: 8d 45 e7 lea -0x19(%ebp),%eax - 4b3: 50 push %eax - 4b4: 57 push %edi - 4b5: e8 7a fd ff ff call 234 + 447: 83 ec 04 sub $0x4,%esp + 44a: 6a 01 push $0x1 + 44c: 8d 45 e7 lea -0x19(%ebp),%eax + 44f: 50 push %eax + 450: 57 push %edi + 451: e8 bc fd ff ff call 212 s++; - 4ba: 83 c3 01 add $0x1,%ebx + 456: 83 c3 01 add $0x1,%ebx while(*s != 0){ - 4bd: 0f b6 03 movzbl (%ebx),%eax - 4c0: 83 c4 10 add $0x10,%esp - 4c3: 84 c0 test %al,%al - 4c5: 75 e1 jne 4a8 + 459: 0f b6 03 movzbl (%ebx),%eax + 45c: 83 c4 10 add $0x10,%esp + 45f: 84 c0 test %al,%al + 461: 75 e1 jne 444 state = 0; - 4c7: bf 00 00 00 00 mov $0x0,%edi - 4cc: e9 d0 fe ff ff jmp 3a1 + 463: bf 00 00 00 00 mov $0x0,%edi + 468: e9 12 ff ff ff jmp 37f putc(fd, *ap); - 4d1: 8b 7d d4 mov -0x2c(%ebp),%edi - 4d4: 8b 07 mov (%edi),%eax - 4d6: 88 45 e7 mov %al,-0x19(%ebp) + 46d: 8b 7d d4 mov -0x2c(%ebp),%edi + 470: 8b 07 mov (%edi),%eax + 472: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 4d9: 83 ec 04 sub $0x4,%esp - 4dc: 6a 01 push $0x1 - 4de: 8d 45 e7 lea -0x19(%ebp),%eax - 4e1: 50 push %eax - 4e2: ff 75 08 pushl 0x8(%ebp) - 4e5: e8 4a fd ff ff call 234 + 475: 83 ec 04 sub $0x4,%esp + 478: 6a 01 push $0x1 + 47a: 8d 45 e7 lea -0x19(%ebp),%eax + 47d: 50 push %eax + 47e: ff 75 08 push 0x8(%ebp) + 481: e8 8c fd ff ff call 212 ap++; - 4ea: 83 c7 04 add $0x4,%edi - 4ed: 89 7d d4 mov %edi,-0x2c(%ebp) - 4f0: 83 c4 10 add $0x10,%esp + 486: 83 c7 04 add $0x4,%edi + 489: 89 7d d4 mov %edi,-0x2c(%ebp) + 48c: 83 c4 10 add $0x10,%esp state = 0; - 4f3: bf 00 00 00 00 mov $0x0,%edi - 4f8: e9 a4 fe ff ff jmp 3a1 + 48f: bf 00 00 00 00 mov $0x0,%edi + 494: e9 e6 fe ff ff jmp 37f putc(fd, c); - 4fd: 88 5d e7 mov %bl,-0x19(%ebp) + 499: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 500: 83 ec 04 sub $0x4,%esp - 503: 6a 01 push $0x1 - 505: 8d 45 e7 lea -0x19(%ebp),%eax - 508: 50 push %eax - 509: ff 75 08 pushl 0x8(%ebp) - 50c: e8 23 fd ff ff call 234 - 511: 83 c4 10 add $0x10,%esp + 49c: 83 ec 04 sub $0x4,%esp + 49f: 6a 01 push $0x1 + 4a1: 8d 45 e7 lea -0x19(%ebp),%eax + 4a4: 50 push %eax + 4a5: ff 75 08 push 0x8(%ebp) + 4a8: e8 65 fd ff ff call 212 + 4ad: 83 c4 10 add $0x10,%esp + state = 0; + 4b0: bf 00 00 00 00 mov $0x0,%edi + 4b5: e9 c5 fe ff ff jmp 37f + putc(fd, '%'); + 4ba: c6 45 e7 25 movb $0x25,-0x19(%ebp) + write(fd, &c, 1); + 4be: 83 ec 04 sub $0x4,%esp + 4c1: 6a 01 push $0x1 + 4c3: 8d 45 e7 lea -0x19(%ebp),%eax + 4c6: 50 push %eax + 4c7: ff 75 08 push 0x8(%ebp) + 4ca: e8 43 fd ff ff call 212 + putc(fd, c); + 4cf: 88 5d e7 mov %bl,-0x19(%ebp) + write(fd, &c, 1); + 4d2: 83 c4 0c add $0xc,%esp + 4d5: 6a 01 push $0x1 + 4d7: 8d 45 e7 lea -0x19(%ebp),%eax + 4da: 50 push %eax + 4db: ff 75 08 push 0x8(%ebp) + 4de: e8 2f fd ff ff call 212 + putc(fd, c); + 4e3: 83 c4 10 add $0x10,%esp state = 0; - 514: bf 00 00 00 00 mov $0x0,%edi - 519: e9 83 fe ff ff jmp 3a1 + 4e6: bf 00 00 00 00 mov $0x0,%edi + 4eb: e9 8f fe ff ff jmp 37f } } } - 51e: 8d 65 f4 lea -0xc(%ebp),%esp - 521: 5b pop %ebx - 522: 5e pop %esi - 523: 5f pop %edi - 524: 5d pop %ebp - 525: c3 ret - -00000526 : + 4f0: 8d 65 f4 lea -0xc(%ebp),%esp + 4f3: 5b pop %ebx + 4f4: 5e pop %esi + 4f5: 5f pop %edi + 4f6: 5d pop %ebp + 4f7: c3 ret + +000004f8 : static Header base; static Header *freep; void free(void *ap) { - 526: f3 0f 1e fb endbr32 - 52a: 55 push %ebp - 52b: 89 e5 mov %esp,%ebp - 52d: 57 push %edi - 52e: 56 push %esi - 52f: 53 push %ebx - 530: 8b 5d 08 mov 0x8(%ebp),%ebx + 4f8: 55 push %ebp + 4f9: 89 e5 mov %esp,%ebp + 4fb: 57 push %edi + 4fc: 56 push %esi + 4fd: 53 push %ebx + 4fe: 8b 5d 08 mov 0x8(%ebp),%ebx Header *bp, *p; bp = (Header*)ap - 1; - 533: 8d 4b f8 lea -0x8(%ebx),%ecx + 501: 8d 4b f8 lea -0x8(%ebx),%ecx for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 536: a1 e4 08 00 00 mov 0x8e4,%eax - 53b: eb 0c jmp 549 + 504: a1 fc 08 00 00 mov 0x8fc,%eax + 509: eb 0c jmp 517 if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 53d: 8b 10 mov (%eax),%edx - 53f: 39 c2 cmp %eax,%edx - 541: 77 04 ja 547 - 543: 39 ca cmp %ecx,%edx - 545: 77 10 ja 557 + 50b: 8b 10 mov (%eax),%edx + 50d: 39 c2 cmp %eax,%edx + 50f: 77 04 ja 515 + 511: 39 ca cmp %ecx,%edx + 513: 77 10 ja 525 { - 547: 89 d0 mov %edx,%eax + 515: 89 d0 mov %edx,%eax for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 549: 39 c8 cmp %ecx,%eax - 54b: 73 f0 jae 53d - 54d: 8b 10 mov (%eax),%edx - 54f: 39 ca cmp %ecx,%edx - 551: 77 04 ja 557 + 517: 39 c8 cmp %ecx,%eax + 519: 73 f0 jae 50b + 51b: 8b 10 mov (%eax),%edx + 51d: 39 ca cmp %ecx,%edx + 51f: 77 04 ja 525 if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 553: 39 c2 cmp %eax,%edx - 555: 77 f0 ja 547 + 521: 39 c2 cmp %eax,%edx + 523: 77 f0 ja 515 break; if(bp + bp->s.size == p->s.ptr){ - 557: 8b 73 fc mov -0x4(%ebx),%esi - 55a: 8b 10 mov (%eax),%edx - 55c: 8d 3c f1 lea (%ecx,%esi,8),%edi - 55f: 39 fa cmp %edi,%edx - 561: 74 19 je 57c + 525: 8b 73 fc mov -0x4(%ebx),%esi + 528: 8b 10 mov (%eax),%edx + 52a: 8d 3c f1 lea (%ecx,%esi,8),%edi + 52d: 39 fa cmp %edi,%edx + 52f: 74 19 je 54a bp->s.size += p->s.ptr->s.size; bp->s.ptr = p->s.ptr->s.ptr; + 531: 89 53 f8 mov %edx,-0x8(%ebx) } else bp->s.ptr = p->s.ptr; - 563: 89 53 f8 mov %edx,-0x8(%ebx) if(p + p->s.size == bp){ - 566: 8b 50 04 mov 0x4(%eax),%edx - 569: 8d 34 d0 lea (%eax,%edx,8),%esi - 56c: 39 f1 cmp %esi,%ecx - 56e: 74 1b je 58b + 534: 8b 50 04 mov 0x4(%eax),%edx + 537: 8d 34 d0 lea (%eax,%edx,8),%esi + 53a: 39 f1 cmp %esi,%ecx + 53c: 74 18 je 556 p->s.size += bp->s.size; p->s.ptr = bp->s.ptr; + 53e: 89 08 mov %ecx,(%eax) } else p->s.ptr = bp; - 570: 89 08 mov %ecx,(%eax) freep = p; - 572: a3 e4 08 00 00 mov %eax,0x8e4 + 540: a3 fc 08 00 00 mov %eax,0x8fc } - 577: 5b pop %ebx - 578: 5e pop %esi - 579: 5f pop %edi - 57a: 5d pop %ebp - 57b: c3 ret + 545: 5b pop %ebx + 546: 5e pop %esi + 547: 5f pop %edi + 548: 5d pop %ebp + 549: c3 ret bp->s.size += p->s.ptr->s.size; - 57c: 03 72 04 add 0x4(%edx),%esi - 57f: 89 73 fc mov %esi,-0x4(%ebx) + 54a: 03 72 04 add 0x4(%edx),%esi + 54d: 89 73 fc mov %esi,-0x4(%ebx) bp->s.ptr = p->s.ptr->s.ptr; - 582: 8b 10 mov (%eax),%edx - 584: 8b 12 mov (%edx),%edx - 586: 89 53 f8 mov %edx,-0x8(%ebx) - 589: eb db jmp 566 + 550: 8b 10 mov (%eax),%edx + 552: 8b 12 mov (%edx),%edx + 554: eb db jmp 531 p->s.size += bp->s.size; - 58b: 03 53 fc add -0x4(%ebx),%edx - 58e: 89 50 04 mov %edx,0x4(%eax) + 556: 03 53 fc add -0x4(%ebx),%edx + 559: 89 50 04 mov %edx,0x4(%eax) p->s.ptr = bp->s.ptr; - 591: 8b 53 f8 mov -0x8(%ebx),%edx - 594: 89 10 mov %edx,(%eax) - 596: eb da jmp 572 + 55c: 8b 4b f8 mov -0x8(%ebx),%ecx + 55f: eb dd jmp 53e -00000598 : +00000561 : return freep; } void* malloc(uint nbytes) { - 598: f3 0f 1e fb endbr32 - 59c: 55 push %ebp - 59d: 89 e5 mov %esp,%ebp - 59f: 57 push %edi - 5a0: 56 push %esi - 5a1: 53 push %ebx - 5a2: 83 ec 0c sub $0xc,%esp + 561: 55 push %ebp + 562: 89 e5 mov %esp,%ebp + 564: 57 push %edi + 565: 56 push %esi + 566: 53 push %ebx + 567: 83 ec 0c sub $0xc,%esp Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 5a5: 8b 45 08 mov 0x8(%ebp),%eax - 5a8: 8d 58 07 lea 0x7(%eax),%ebx - 5ab: c1 eb 03 shr $0x3,%ebx - 5ae: 83 c3 01 add $0x1,%ebx + 56a: 8b 45 08 mov 0x8(%ebp),%eax + 56d: 8d 58 07 lea 0x7(%eax),%ebx + 570: c1 eb 03 shr $0x3,%ebx + 573: 83 c3 01 add $0x1,%ebx if((prevp = freep) == 0){ - 5b1: 8b 15 e4 08 00 00 mov 0x8e4,%edx - 5b7: 85 d2 test %edx,%edx - 5b9: 74 20 je 5db + 576: 8b 15 fc 08 00 00 mov 0x8fc,%edx + 57c: 85 d2 test %edx,%edx + 57e: 74 1c je 59c base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 5bb: 8b 02 mov (%edx),%eax + 580: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 5bd: 8b 48 04 mov 0x4(%eax),%ecx - 5c0: 39 cb cmp %ecx,%ebx - 5c2: 76 3c jbe 600 - 5c4: 81 fb 00 10 00 00 cmp $0x1000,%ebx - 5ca: be 00 10 00 00 mov $0x1000,%esi - 5cf: 0f 43 f3 cmovae %ebx,%esi + 582: 8b 48 04 mov 0x4(%eax),%ecx + 585: 39 cb cmp %ecx,%ebx + 587: 76 38 jbe 5c1 + 589: be 00 10 00 00 mov $0x1000,%esi + 58e: 39 f3 cmp %esi,%ebx + 590: 0f 43 f3 cmovae %ebx,%esi p = sbrk(nu * sizeof(Header)); - 5d2: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi - 5d9: eb 72 jmp 64d + 593: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi + 59a: eb 72 jmp 60e base.s.ptr = freep = prevp = &base; - 5db: c7 05 e4 08 00 00 e8 movl $0x8e8,0x8e4 - 5e2: 08 00 00 - 5e5: c7 05 e8 08 00 00 e8 movl $0x8e8,0x8e8 - 5ec: 08 00 00 + 59c: c7 05 fc 08 00 00 00 movl $0x900,0x8fc + 5a3: 09 00 00 + 5a6: c7 05 00 09 00 00 00 movl $0x900,0x900 + 5ad: 09 00 00 base.s.size = 0; - 5ef: c7 05 ec 08 00 00 00 movl $0x0,0x8ec - 5f6: 00 00 00 + 5b0: c7 05 04 09 00 00 00 movl $0x0,0x904 + 5b7: 00 00 00 for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 5f9: b8 e8 08 00 00 mov $0x8e8,%eax - 5fe: eb c4 jmp 5c4 + 5ba: b8 00 09 00 00 mov $0x900,%eax + 5bf: eb c8 jmp 589 if(p->s.size == nunits) - 600: 39 cb cmp %ecx,%ebx - 602: 74 1e je 622 + 5c1: 39 cb cmp %ecx,%ebx + 5c3: 74 1e je 5e3 prevp->s.ptr = p->s.ptr; else { p->s.size -= nunits; - 604: 29 d9 sub %ebx,%ecx - 606: 89 48 04 mov %ecx,0x4(%eax) + 5c5: 29 d9 sub %ebx,%ecx + 5c7: 89 48 04 mov %ecx,0x4(%eax) p += p->s.size; - 609: 8d 04 c8 lea (%eax,%ecx,8),%eax + 5ca: 8d 04 c8 lea (%eax,%ecx,8),%eax p->s.size = nunits; - 60c: 89 58 04 mov %ebx,0x4(%eax) + 5cd: 89 58 04 mov %ebx,0x4(%eax) } freep = prevp; - 60f: 89 15 e4 08 00 00 mov %edx,0x8e4 + 5d0: 89 15 fc 08 00 00 mov %edx,0x8fc return (void*)(p + 1); - 615: 8d 50 08 lea 0x8(%eax),%edx + 5d6: 8d 50 08 lea 0x8(%eax),%edx } if(p == freep) if((p = morecore(nunits)) == 0) return 0; } } - 618: 89 d0 mov %edx,%eax - 61a: 8d 65 f4 lea -0xc(%ebp),%esp - 61d: 5b pop %ebx - 61e: 5e pop %esi - 61f: 5f pop %edi - 620: 5d pop %ebp - 621: c3 ret + 5d9: 89 d0 mov %edx,%eax + 5db: 8d 65 f4 lea -0xc(%ebp),%esp + 5de: 5b pop %ebx + 5df: 5e pop %esi + 5e0: 5f pop %edi + 5e1: 5d pop %ebp + 5e2: c3 ret prevp->s.ptr = p->s.ptr; - 622: 8b 08 mov (%eax),%ecx - 624: 89 0a mov %ecx,(%edx) - 626: eb e7 jmp 60f + 5e3: 8b 08 mov (%eax),%ecx + 5e5: 89 0a mov %ecx,(%edx) + 5e7: eb e7 jmp 5d0 hp->s.size = nu; - 628: 89 70 04 mov %esi,0x4(%eax) + 5e9: 89 70 04 mov %esi,0x4(%eax) free((void*)(hp + 1)); - 62b: 83 ec 0c sub $0xc,%esp - 62e: 83 c0 08 add $0x8,%eax - 631: 50 push %eax - 632: e8 ef fe ff ff call 526 + 5ec: 83 ec 0c sub $0xc,%esp + 5ef: 83 c0 08 add $0x8,%eax + 5f2: 50 push %eax + 5f3: e8 00 ff ff ff call 4f8 return freep; - 637: 8b 15 e4 08 00 00 mov 0x8e4,%edx + 5f8: 8b 15 fc 08 00 00 mov 0x8fc,%edx if((p = morecore(nunits)) == 0) - 63d: 83 c4 10 add $0x10,%esp - 640: 85 d2 test %edx,%edx - 642: 74 d4 je 618 + 5fe: 83 c4 10 add $0x10,%esp + 601: 85 d2 test %edx,%edx + 603: 74 d4 je 5d9 for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 644: 8b 02 mov (%edx),%eax + 605: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 646: 8b 48 04 mov 0x4(%eax),%ecx - 649: 39 d9 cmp %ebx,%ecx - 64b: 73 b3 jae 600 + 607: 8b 48 04 mov 0x4(%eax),%ecx + 60a: 39 d9 cmp %ebx,%ecx + 60c: 73 b3 jae 5c1 if(p == freep) - 64d: 89 c2 mov %eax,%edx - 64f: 39 05 e4 08 00 00 cmp %eax,0x8e4 - 655: 75 ed jne 644 + 60e: 89 c2 mov %eax,%edx + 610: 39 05 fc 08 00 00 cmp %eax,0x8fc + 616: 75 ed jne 605 p = sbrk(nu * sizeof(Header)); - 657: 83 ec 0c sub $0xc,%esp - 65a: 57 push %edi - 65b: e8 3c fc ff ff call 29c + 618: 83 ec 0c sub $0xc,%esp + 61b: 57 push %edi + 61c: e8 59 fc ff ff call 27a if(p == (char*)-1) - 660: 83 c4 10 add $0x10,%esp - 663: 83 f8 ff cmp $0xffffffff,%eax - 666: 75 c0 jne 628 + 621: 83 c4 10 add $0x10,%esp + 624: 83 f8 ff cmp $0xffffffff,%eax + 627: 75 c0 jne 5e9 return 0; - 668: ba 00 00 00 00 mov $0x0,%edx - 66d: eb a9 jmp 618 + 629: ba 00 00 00 00 mov $0x0,%edx + 62e: eb a9 jmp 5d9 diff --git a/src/user/ps.d b/src/user/ps.d new file mode 100644 index 0000000..4f5a35c --- /dev/null +++ b/src/user/ps.d @@ -0,0 +1 @@ +user/ps.o: user/ps.c /usr/include/stdc-predef.h types.h stat.h user.h diff --git a/src/user/ps.o b/src/user/ps.o new file mode 100644 index 0000000000000000000000000000000000000000..05e6c06707fd1d77b269a8054d7152de023f814d GIT binary patch literal 2836 zcma)8ONMLgo9kXNV0xkO%?PQ68)2^@B5$i=&G8z z{LJxZrIf;m6t;Mv330Kn>)EbglNc8(#RtdNJ6C@FbLq^z`S)(WaOIBk`@N;5r7L&( z>kN8LDphsuWI)`8%@xw2&mBUyW|UOR7LC$T14*mzM_8on|BGO`zX5WN8%C+=dnHxjoQSqj{ z4C1(gx;rX26vp!Q)a2BtT%H>l$MSSuzYu+%I51%s_T-<+@6JCyF*o+EoY*^o<$5w} z-#Z~uYS}6bIe(OhcGd*7R?pv z%YjiG;aJxk$5~;WLAM25JPNa=oeI#IuS)$C8jI`%;-vju7$RVodCowl>`Cw^(aLC+ zoU(@PZS?M9w~sbg3Rev=o|DI1EBD}VN~lHTg@;nEyjK`D79M{Fo;dCUwysQj$3I^OIR$F-_x z$B0`L;Ah2jz10k+JC#n9cBYfKDmqCJPq!1V`f!)$ zxm&Y*X=cXTx_z@Y<6Av~Mv)g@6!K!foE&tVtN74G*mzPX>U10)lwxkgwL0SIVY_oN z*LC&uJR?RNad*jZV(%+O-Oak8_g1t8u2)8EJQi88)lGk3u?4PiMr<*BzarT}^$(%(sa(C%Afq2OxdNL#3@XW{YL2;IV~$=ORRkq@YZ!na9c z34EG}Di3#L9d$gVn|0h)jq3IxZ@<=$X?#gzN8>vhuMtu2hSopP_yrML`=!ROiHQ4N z<4+p7`+W1c5A>^fVV+zM=gU1L@^^)}TcesE^rO^~R|Hx>;U(vrxH-Ty?qc1rIB0lj za4r?zf}i@rt0al=;uaM~m%TDn#4H4rPVICUEw&J;xL>Kn!C9jP2`FJiJOJbs z4c23u)d)~hLH~#51T*dd@a#HnVjZ8t#&vKH%sNhjn;cN_9F!kOv>4wj&<&?+4bBty zz=-jkfx&S44k4~cqQ&^Se>EQL^UIhN&pGEefM(|RHn_@#`i63 + 21: 83 ff 01 cmp $0x1,%edi + 24: 7e 20 jle 46 if(unlink(argv[i]) < 0){ - 2a: 89 5d e4 mov %ebx,-0x1c(%ebp) - 2d: 83 ec 0c sub $0xc,%esp - 30: ff 33 pushl (%ebx) - 32: e8 79 02 00 00 call 2b0 - 37: 83 c4 10 add $0x10,%esp - 3a: 85 c0 test %eax,%eax - 3c: 78 20 js 5e + 26: 89 5d e4 mov %ebx,-0x1c(%ebp) + 29: 83 ec 0c sub $0xc,%esp + 2c: ff 33 push (%ebx) + 2e: e8 5b 02 00 00 call 28e + 33: 83 c4 10 add $0x10,%esp + 36: 85 c0 test %eax,%eax + 38: 78 20 js 5a for(i = 1; i < argc; i++){ - 3e: 83 c6 01 add $0x1,%esi - 41: 83 c3 04 add $0x4,%ebx - 44: 39 f7 cmp %esi,%edi - 46: 75 e2 jne 2a - 48: eb 2b jmp 75 + 3a: 83 c6 01 add $0x1,%esi + 3d: 83 c3 04 add $0x4,%ebx + 40: 39 f7 cmp %esi,%edi + 42: 75 e2 jne 26 + 44: eb 2b jmp 71 printf(2, "Usage: rm files...\n"); - 4a: 83 ec 08 sub $0x8,%esp - 4d: 68 bc 06 00 00 push $0x6bc - 52: 6a 02 push $0x2 - 54: e8 4b 03 00 00 call 3a4 + 46: 83 ec 08 sub $0x8,%esp + 49: 68 7c 06 00 00 push $0x67c + 4e: 6a 02 push $0x2 + 50: e8 31 03 00 00 call 386 exit(); - 59: e8 02 02 00 00 call 260 + 55: e8 e4 01 00 00 call 23e printf(2, "rm: %s failed to delete\n", argv[i]); - 5e: 83 ec 04 sub $0x4,%esp - 61: 8b 45 e4 mov -0x1c(%ebp),%eax - 64: ff 30 pushl (%eax) - 66: 68 d0 06 00 00 push $0x6d0 - 6b: 6a 02 push $0x2 - 6d: e8 32 03 00 00 call 3a4 + 5a: 83 ec 04 sub $0x4,%esp + 5d: 8b 45 e4 mov -0x1c(%ebp),%eax + 60: ff 30 push (%eax) + 62: 68 90 06 00 00 push $0x690 + 67: 6a 02 push $0x2 + 69: e8 18 03 00 00 call 386 break; - 72: 83 c4 10 add $0x10,%esp + 6e: 83 c4 10 add $0x10,%esp } } exit(); - 75: e8 e6 01 00 00 call 260 + 71: e8 c8 01 00 00 call 23e -0000007a : +00000076 : #include "user.h" #include "x86.h" char* strcpy(char *s, const char *t) { - 7a: f3 0f 1e fb endbr32 - 7e: 55 push %ebp - 7f: 89 e5 mov %esp,%ebp - 81: 53 push %ebx - 82: 8b 4d 08 mov 0x8(%ebp),%ecx - 85: 8b 5d 0c mov 0xc(%ebp),%ebx + 76: 55 push %ebp + 77: 89 e5 mov %esp,%ebp + 79: 53 push %ebx + 7a: 8b 4d 08 mov 0x8(%ebp),%ecx + 7d: 8b 5d 0c mov 0xc(%ebp),%ebx char *os; os = s; while((*s++ = *t++) != 0) - 88: b8 00 00 00 00 mov $0x0,%eax - 8d: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 91: 88 14 01 mov %dl,(%ecx,%eax,1) - 94: 83 c0 01 add $0x1,%eax - 97: 84 d2 test %dl,%dl - 99: 75 f2 jne 8d + 80: b8 00 00 00 00 mov $0x0,%eax + 85: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx + 89: 88 14 01 mov %dl,(%ecx,%eax,1) + 8c: 83 c0 01 add $0x1,%eax + 8f: 84 d2 test %dl,%dl + 91: 75 f2 jne 85 ; return os; } - 9b: 89 c8 mov %ecx,%eax - 9d: 5b pop %ebx - 9e: 5d pop %ebp - 9f: c3 ret + 93: 89 c8 mov %ecx,%eax + 95: 8b 5d fc mov -0x4(%ebp),%ebx + 98: c9 leave + 99: c3 ret -000000a0 : +0000009a : int strcmp(const char *p, const char *q) { - a0: f3 0f 1e fb endbr32 - a4: 55 push %ebp - a5: 89 e5 mov %esp,%ebp - a7: 8b 4d 08 mov 0x8(%ebp),%ecx - aa: 8b 55 0c mov 0xc(%ebp),%edx + 9a: 55 push %ebp + 9b: 89 e5 mov %esp,%ebp + 9d: 8b 4d 08 mov 0x8(%ebp),%ecx + a0: 8b 55 0c mov 0xc(%ebp),%edx while(*p && *p == *q) - ad: 0f b6 01 movzbl (%ecx),%eax - b0: 84 c0 test %al,%al - b2: 74 11 je c5 - b4: 38 02 cmp %al,(%edx) - b6: 75 0d jne c5 + a3: 0f b6 01 movzbl (%ecx),%eax + a6: 84 c0 test %al,%al + a8: 74 11 je bb + aa: 38 02 cmp %al,(%edx) + ac: 75 0d jne bb p++, q++; - b8: 83 c1 01 add $0x1,%ecx - bb: 83 c2 01 add $0x1,%edx + ae: 83 c1 01 add $0x1,%ecx + b1: 83 c2 01 add $0x1,%edx while(*p && *p == *q) - be: 0f b6 01 movzbl (%ecx),%eax - c1: 84 c0 test %al,%al - c3: 75 ef jne b4 + b4: 0f b6 01 movzbl (%ecx),%eax + b7: 84 c0 test %al,%al + b9: 75 ef jne aa return (uchar)*p - (uchar)*q; - c5: 0f b6 c0 movzbl %al,%eax - c8: 0f b6 12 movzbl (%edx),%edx - cb: 29 d0 sub %edx,%eax + bb: 0f b6 c0 movzbl %al,%eax + be: 0f b6 12 movzbl (%edx),%edx + c1: 29 d0 sub %edx,%eax } - cd: 5d pop %ebp - ce: c3 ret + c3: 5d pop %ebp + c4: c3 ret -000000cf : +000000c5 : uint strlen(const char *s) { - cf: f3 0f 1e fb endbr32 - d3: 55 push %ebp - d4: 89 e5 mov %esp,%ebp - d6: 8b 55 08 mov 0x8(%ebp),%edx + c5: 55 push %ebp + c6: 89 e5 mov %esp,%ebp + c8: 8b 55 08 mov 0x8(%ebp),%edx int n; for(n = 0; s[n]; n++) - d9: 80 3a 00 cmpb $0x0,(%edx) - dc: 74 14 je f2 - de: b8 00 00 00 00 mov $0x0,%eax - e3: 83 c0 01 add $0x1,%eax - e6: 89 c1 mov %eax,%ecx - e8: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - ec: 75 f5 jne e3 + cb: 80 3a 00 cmpb $0x0,(%edx) + ce: 74 14 je e4 + d0: b8 00 00 00 00 mov $0x0,%eax + d5: 83 c0 01 add $0x1,%eax + d8: 89 c1 mov %eax,%ecx + da: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) + de: 75 f5 jne d5 ; return n; } - ee: 89 c8 mov %ecx,%eax - f0: 5d pop %ebp - f1: c3 ret + e0: 89 c8 mov %ecx,%eax + e2: 5d pop %ebp + e3: c3 ret for(n = 0; s[n]; n++) - f2: b9 00 00 00 00 mov $0x0,%ecx + e4: b9 00 00 00 00 mov $0x0,%ecx return n; - f7: eb f5 jmp ee + e9: eb f5 jmp e0 -000000f9 : +000000eb : void* memset(void *dst, int c, uint n) { - f9: f3 0f 1e fb endbr32 - fd: 55 push %ebp - fe: 89 e5 mov %esp,%ebp - 100: 57 push %edi - 101: 8b 55 08 mov 0x8(%ebp),%edx + eb: 55 push %ebp + ec: 89 e5 mov %esp,%ebp + ee: 57 push %edi + ef: 8b 55 08 mov 0x8(%ebp),%edx } static inline void stosb(void *addr, int data, int cnt) { asm volatile("cld; rep stosb" : - 104: 89 d7 mov %edx,%edi - 106: 8b 4d 10 mov 0x10(%ebp),%ecx - 109: 8b 45 0c mov 0xc(%ebp),%eax - 10c: fc cld - 10d: f3 aa rep stos %al,%es:(%edi) + f2: 89 d7 mov %edx,%edi + f4: 8b 4d 10 mov 0x10(%ebp),%ecx + f7: 8b 45 0c mov 0xc(%ebp),%eax + fa: fc cld + fb: f3 aa rep stos %al,%es:(%edi) stosb(dst, c, n); return dst; } - 10f: 89 d0 mov %edx,%eax - 111: 5f pop %edi - 112: 5d pop %ebp - 113: c3 ret + fd: 89 d0 mov %edx,%eax + ff: 8b 7d fc mov -0x4(%ebp),%edi + 102: c9 leave + 103: c3 ret -00000114 : +00000104 : char* strchr(const char *s, char c) { - 114: f3 0f 1e fb endbr32 - 118: 55 push %ebp - 119: 89 e5 mov %esp,%ebp - 11b: 8b 45 08 mov 0x8(%ebp),%eax - 11e: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx + 104: 55 push %ebp + 105: 89 e5 mov %esp,%ebp + 107: 8b 45 08 mov 0x8(%ebp),%eax + 10a: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx for(; *s; s++) - 122: 0f b6 10 movzbl (%eax),%edx - 125: 84 d2 test %dl,%dl - 127: 74 15 je 13e + 10e: 0f b6 10 movzbl (%eax),%edx + 111: 84 d2 test %dl,%dl + 113: 74 15 je 12a if(*s == c) - 129: 38 d1 cmp %dl,%cl - 12b: 74 0f je 13c + 115: 38 d1 cmp %dl,%cl + 117: 74 0f je 128 for(; *s; s++) - 12d: 83 c0 01 add $0x1,%eax - 130: 0f b6 10 movzbl (%eax),%edx - 133: 84 d2 test %dl,%dl - 135: 75 f2 jne 129 + 119: 83 c0 01 add $0x1,%eax + 11c: 0f b6 10 movzbl (%eax),%edx + 11f: 84 d2 test %dl,%dl + 121: 75 f2 jne 115 return (char*)s; return 0; - 137: b8 00 00 00 00 mov $0x0,%eax + 123: b8 00 00 00 00 mov $0x0,%eax } - 13c: 5d pop %ebp - 13d: c3 ret + 128: 5d pop %ebp + 129: c3 ret return 0; - 13e: b8 00 00 00 00 mov $0x0,%eax - 143: eb f7 jmp 13c + 12a: b8 00 00 00 00 mov $0x0,%eax + 12f: eb f7 jmp 128 -00000145 : +00000131 : char* gets(char *buf, int max) { - 145: f3 0f 1e fb endbr32 - 149: 55 push %ebp - 14a: 89 e5 mov %esp,%ebp - 14c: 57 push %edi - 14d: 56 push %esi - 14e: 53 push %ebx - 14f: 83 ec 2c sub $0x2c,%esp - 152: 8b 75 08 mov 0x8(%ebp),%esi + 131: 55 push %ebp + 132: 89 e5 mov %esp,%ebp + 134: 57 push %edi + 135: 56 push %esi + 136: 53 push %ebx + 137: 83 ec 2c sub $0x2c,%esp + 13a: 8b 75 08 mov 0x8(%ebp),%esi int i, cc; char c; for(i=0; i+1 < max; ){ - 155: bb 00 00 00 00 mov $0x0,%ebx + 13d: bb 00 00 00 00 mov $0x0,%ebx cc = read(0, &c, 1); - 15a: 8d 7d e7 lea -0x19(%ebp),%edi + 142: 8d 7d e7 lea -0x19(%ebp),%edi for(i=0; i+1 < max; ){ - 15d: 89 5d d4 mov %ebx,-0x2c(%ebp) - 160: 83 c3 01 add $0x1,%ebx - 163: 3b 5d 0c cmp 0xc(%ebp),%ebx - 166: 7d 27 jge 18f + 145: 89 5d d4 mov %ebx,-0x2c(%ebp) + 148: 83 c3 01 add $0x1,%ebx + 14b: 3b 5d 0c cmp 0xc(%ebp),%ebx + 14e: 7d 27 jge 177 cc = read(0, &c, 1); - 168: 83 ec 04 sub $0x4,%esp - 16b: 6a 01 push $0x1 - 16d: 57 push %edi - 16e: 6a 00 push $0x0 - 170: e8 03 01 00 00 call 278 + 150: 83 ec 04 sub $0x4,%esp + 153: 6a 01 push $0x1 + 155: 57 push %edi + 156: 6a 00 push $0x0 + 158: e8 f9 00 00 00 call 256 if(cc < 1) - 175: 83 c4 10 add $0x10,%esp - 178: 85 c0 test %eax,%eax - 17a: 7e 13 jle 18f + 15d: 83 c4 10 add $0x10,%esp + 160: 85 c0 test %eax,%eax + 162: 7e 13 jle 177 break; buf[i++] = c; - 17c: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 180: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) + 164: 0f b6 45 e7 movzbl -0x19(%ebp),%eax + 168: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) if(c == '\n' || c == '\r') - 184: 3c 0a cmp $0xa,%al - 186: 74 04 je 18c - 188: 3c 0d cmp $0xd,%al - 18a: 75 d1 jne 15d + 16c: 3c 0a cmp $0xa,%al + 16e: 74 04 je 174 + 170: 3c 0d cmp $0xd,%al + 172: 75 d1 jne 145 for(i=0; i+1 < max; ){ - 18c: 89 5d d4 mov %ebx,-0x2c(%ebp) + 174: 89 5d d4 mov %ebx,-0x2c(%ebp) break; } buf[i] = '\0'; - 18f: 8b 45 d4 mov -0x2c(%ebp),%eax - 192: c6 04 06 00 movb $0x0,(%esi,%eax,1) + 177: 8b 45 d4 mov -0x2c(%ebp),%eax + 17a: c6 04 06 00 movb $0x0,(%esi,%eax,1) return buf; } - 196: 89 f0 mov %esi,%eax - 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 + 17e: 89 f0 mov %esi,%eax + 180: 8d 65 f4 lea -0xc(%ebp),%esp + 183: 5b pop %ebx + 184: 5e pop %esi + 185: 5f pop %edi + 186: 5d pop %ebp + 187: c3 ret -000001a0 : +00000188 : int stat(const char *n, struct stat *st) { - 1a0: f3 0f 1e fb endbr32 - 1a4: 55 push %ebp - 1a5: 89 e5 mov %esp,%ebp - 1a7: 56 push %esi - 1a8: 53 push %ebx + 188: 55 push %ebp + 189: 89 e5 mov %esp,%ebp + 18b: 56 push %esi + 18c: 53 push %ebx int fd; int r; fd = open(n, O_RDONLY); - 1a9: 83 ec 08 sub $0x8,%esp - 1ac: 6a 00 push $0x0 - 1ae: ff 75 08 pushl 0x8(%ebp) - 1b1: e8 ea 00 00 00 call 2a0 + 18d: 83 ec 08 sub $0x8,%esp + 190: 6a 00 push $0x0 + 192: ff 75 08 push 0x8(%ebp) + 195: e8 e4 00 00 00 call 27e if(fd < 0) - 1b6: 83 c4 10 add $0x10,%esp - 1b9: 85 c0 test %eax,%eax - 1bb: 78 24 js 1e1 - 1bd: 89 c3 mov %eax,%ebx + 19a: 83 c4 10 add $0x10,%esp + 19d: 85 c0 test %eax,%eax + 19f: 78 24 js 1c5 + 1a1: 89 c3 mov %eax,%ebx return -1; r = fstat(fd, st); - 1bf: 83 ec 08 sub $0x8,%esp - 1c2: ff 75 0c pushl 0xc(%ebp) - 1c5: 50 push %eax - 1c6: e8 ed 00 00 00 call 2b8 - 1cb: 89 c6 mov %eax,%esi + 1a3: 83 ec 08 sub $0x8,%esp + 1a6: ff 75 0c push 0xc(%ebp) + 1a9: 50 push %eax + 1aa: e8 e7 00 00 00 call 296 + 1af: 89 c6 mov %eax,%esi close(fd); - 1cd: 89 1c 24 mov %ebx,(%esp) - 1d0: e8 b3 00 00 00 call 288 + 1b1: 89 1c 24 mov %ebx,(%esp) + 1b4: e8 ad 00 00 00 call 266 return r; - 1d5: 83 c4 10 add $0x10,%esp + 1b9: 83 c4 10 add $0x10,%esp } - 1d8: 89 f0 mov %esi,%eax - 1da: 8d 65 f8 lea -0x8(%ebp),%esp - 1dd: 5b pop %ebx - 1de: 5e pop %esi - 1df: 5d pop %ebp - 1e0: c3 ret + 1bc: 89 f0 mov %esi,%eax + 1be: 8d 65 f8 lea -0x8(%ebp),%esp + 1c1: 5b pop %ebx + 1c2: 5e pop %esi + 1c3: 5d pop %ebp + 1c4: c3 ret return -1; - 1e1: be ff ff ff ff mov $0xffffffff,%esi - 1e6: eb f0 jmp 1d8 + 1c5: be ff ff ff ff mov $0xffffffff,%esi + 1ca: eb f0 jmp 1bc -000001e8 : +000001cc : int atoi(const char *s) { - 1e8: f3 0f 1e fb endbr32 - 1ec: 55 push %ebp - 1ed: 89 e5 mov %esp,%ebp - 1ef: 53 push %ebx - 1f0: 8b 55 08 mov 0x8(%ebp),%edx + 1cc: 55 push %ebp + 1cd: 89 e5 mov %esp,%ebp + 1cf: 53 push %ebx + 1d0: 8b 55 08 mov 0x8(%ebp),%edx int n; n = 0; while('0' <= *s && *s <= '9') - 1f3: 0f b6 02 movzbl (%edx),%eax - 1f6: 8d 48 d0 lea -0x30(%eax),%ecx - 1f9: 80 f9 09 cmp $0x9,%cl - 1fc: 77 22 ja 220 + 1d3: 0f b6 02 movzbl (%edx),%eax + 1d6: 8d 48 d0 lea -0x30(%eax),%ecx + 1d9: 80 f9 09 cmp $0x9,%cl + 1dc: 77 24 ja 202 n = 0; - 1fe: b9 00 00 00 00 mov $0x0,%ecx + 1de: b9 00 00 00 00 mov $0x0,%ecx n = n*10 + *s++ - '0'; - 203: 83 c2 01 add $0x1,%edx - 206: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 209: 0f be c0 movsbl %al,%eax - 20c: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx + 1e3: 83 c2 01 add $0x1,%edx + 1e6: 8d 0c 89 lea (%ecx,%ecx,4),%ecx + 1e9: 0f be c0 movsbl %al,%eax + 1ec: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx while('0' <= *s && *s <= '9') - 210: 0f b6 02 movzbl (%edx),%eax - 213: 8d 58 d0 lea -0x30(%eax),%ebx - 216: 80 fb 09 cmp $0x9,%bl - 219: 76 e8 jbe 203 + 1f0: 0f b6 02 movzbl (%edx),%eax + 1f3: 8d 58 d0 lea -0x30(%eax),%ebx + 1f6: 80 fb 09 cmp $0x9,%bl + 1f9: 76 e8 jbe 1e3 return n; } - 21b: 89 c8 mov %ecx,%eax - 21d: 5b pop %ebx - 21e: 5d pop %ebp - 21f: c3 ret + 1fb: 89 c8 mov %ecx,%eax + 1fd: 8b 5d fc mov -0x4(%ebp),%ebx + 200: c9 leave + 201: c3 ret n = 0; - 220: b9 00 00 00 00 mov $0x0,%ecx + 202: b9 00 00 00 00 mov $0x0,%ecx return n; - 225: eb f4 jmp 21b + 207: eb f2 jmp 1fb -00000227 : +00000209 : void* memmove(void *vdst, const void *vsrc, int n) { - 227: f3 0f 1e fb endbr32 - 22b: 55 push %ebp - 22c: 89 e5 mov %esp,%ebp - 22e: 56 push %esi - 22f: 53 push %ebx - 230: 8b 75 08 mov 0x8(%ebp),%esi - 233: 8b 55 0c mov 0xc(%ebp),%edx - 236: 8b 5d 10 mov 0x10(%ebp),%ebx + 209: 55 push %ebp + 20a: 89 e5 mov %esp,%ebp + 20c: 56 push %esi + 20d: 53 push %ebx + 20e: 8b 75 08 mov 0x8(%ebp),%esi + 211: 8b 55 0c mov 0xc(%ebp),%edx + 214: 8b 5d 10 mov 0x10(%ebp),%ebx char *dst; const char *src; dst = vdst; src = vsrc; while(n-- > 0) - 239: 85 db test %ebx,%ebx - 23b: 7e 15 jle 252 - 23d: 01 f3 add %esi,%ebx + 217: 85 db test %ebx,%ebx + 219: 7e 15 jle 230 + 21b: 01 f3 add %esi,%ebx dst = vdst; - 23f: 89 f0 mov %esi,%eax + 21d: 89 f0 mov %esi,%eax *dst++ = *src++; - 241: 83 c2 01 add $0x1,%edx - 244: 83 c0 01 add $0x1,%eax - 247: 0f b6 4a ff movzbl -0x1(%edx),%ecx - 24b: 88 48 ff mov %cl,-0x1(%eax) + 21f: 83 c2 01 add $0x1,%edx + 222: 83 c0 01 add $0x1,%eax + 225: 0f b6 4a ff movzbl -0x1(%edx),%ecx + 229: 88 48 ff mov %cl,-0x1(%eax) while(n-- > 0) - 24e: 39 c3 cmp %eax,%ebx - 250: 75 ef jne 241 + 22c: 39 c3 cmp %eax,%ebx + 22e: 75 ef jne 21f return vdst; } - 252: 89 f0 mov %esi,%eax - 254: 5b pop %ebx - 255: 5e pop %esi - 256: 5d pop %ebp - 257: c3 ret + 230: 89 f0 mov %esi,%eax + 232: 5b pop %ebx + 233: 5e pop %esi + 234: 5d pop %ebp + 235: c3 ret -00000258 : +00000236 : name: \ movl $SYS_ ## name, %eax; \ int $T_SYSCALL; \ ret SYSCALL(fork) - 258: b8 01 00 00 00 mov $0x1,%eax - 25d: cd 40 int $0x40 - 25f: c3 ret + 236: b8 01 00 00 00 mov $0x1,%eax + 23b: cd 40 int $0x40 + 23d: c3 ret -00000260 : +0000023e : SYSCALL(exit) - 260: b8 02 00 00 00 mov $0x2,%eax - 265: cd 40 int $0x40 - 267: c3 ret + 23e: b8 02 00 00 00 mov $0x2,%eax + 243: cd 40 int $0x40 + 245: c3 ret -00000268 : +00000246 : SYSCALL(wait) - 268: b8 03 00 00 00 mov $0x3,%eax - 26d: cd 40 int $0x40 - 26f: c3 ret + 246: b8 03 00 00 00 mov $0x3,%eax + 24b: cd 40 int $0x40 + 24d: c3 ret -00000270 : +0000024e : SYSCALL(pipe) - 270: b8 04 00 00 00 mov $0x4,%eax - 275: cd 40 int $0x40 - 277: c3 ret + 24e: b8 04 00 00 00 mov $0x4,%eax + 253: cd 40 int $0x40 + 255: c3 ret -00000278 : +00000256 : SYSCALL(read) - 278: b8 05 00 00 00 mov $0x5,%eax - 27d: cd 40 int $0x40 - 27f: c3 ret + 256: b8 05 00 00 00 mov $0x5,%eax + 25b: cd 40 int $0x40 + 25d: c3 ret -00000280 : +0000025e : SYSCALL(write) - 280: b8 10 00 00 00 mov $0x10,%eax - 285: cd 40 int $0x40 - 287: c3 ret + 25e: b8 10 00 00 00 mov $0x10,%eax + 263: cd 40 int $0x40 + 265: c3 ret -00000288 : +00000266 : SYSCALL(close) - 288: b8 15 00 00 00 mov $0x15,%eax - 28d: cd 40 int $0x40 - 28f: c3 ret + 266: b8 15 00 00 00 mov $0x15,%eax + 26b: cd 40 int $0x40 + 26d: c3 ret -00000290 : +0000026e : SYSCALL(kill) - 290: b8 06 00 00 00 mov $0x6,%eax - 295: cd 40 int $0x40 - 297: c3 ret + 26e: b8 06 00 00 00 mov $0x6,%eax + 273: cd 40 int $0x40 + 275: c3 ret -00000298 : +00000276 : SYSCALL(exec) - 298: b8 07 00 00 00 mov $0x7,%eax - 29d: cd 40 int $0x40 - 29f: c3 ret + 276: b8 07 00 00 00 mov $0x7,%eax + 27b: cd 40 int $0x40 + 27d: c3 ret -000002a0 : +0000027e : SYSCALL(open) - 2a0: b8 0f 00 00 00 mov $0xf,%eax - 2a5: cd 40 int $0x40 - 2a7: c3 ret + 27e: b8 0f 00 00 00 mov $0xf,%eax + 283: cd 40 int $0x40 + 285: c3 ret -000002a8 : +00000286 : SYSCALL(mknod) - 2a8: b8 11 00 00 00 mov $0x11,%eax - 2ad: cd 40 int $0x40 - 2af: c3 ret + 286: b8 11 00 00 00 mov $0x11,%eax + 28b: cd 40 int $0x40 + 28d: c3 ret -000002b0 : +0000028e : SYSCALL(unlink) - 2b0: b8 12 00 00 00 mov $0x12,%eax - 2b5: cd 40 int $0x40 - 2b7: c3 ret + 28e: b8 12 00 00 00 mov $0x12,%eax + 293: cd 40 int $0x40 + 295: c3 ret -000002b8 : +00000296 : SYSCALL(fstat) - 2b8: b8 08 00 00 00 mov $0x8,%eax - 2bd: cd 40 int $0x40 - 2bf: c3 ret + 296: b8 08 00 00 00 mov $0x8,%eax + 29b: cd 40 int $0x40 + 29d: c3 ret -000002c0 : +0000029e : SYSCALL(link) - 2c0: b8 13 00 00 00 mov $0x13,%eax - 2c5: cd 40 int $0x40 - 2c7: c3 ret + 29e: b8 13 00 00 00 mov $0x13,%eax + 2a3: cd 40 int $0x40 + 2a5: c3 ret -000002c8 : +000002a6 : SYSCALL(mkdir) - 2c8: b8 14 00 00 00 mov $0x14,%eax - 2cd: cd 40 int $0x40 - 2cf: c3 ret + 2a6: b8 14 00 00 00 mov $0x14,%eax + 2ab: cd 40 int $0x40 + 2ad: c3 ret -000002d0 : +000002ae : SYSCALL(chdir) - 2d0: b8 09 00 00 00 mov $0x9,%eax - 2d5: cd 40 int $0x40 - 2d7: c3 ret + 2ae: b8 09 00 00 00 mov $0x9,%eax + 2b3: cd 40 int $0x40 + 2b5: c3 ret -000002d8 : +000002b6 : SYSCALL(dup) - 2d8: b8 0a 00 00 00 mov $0xa,%eax - 2dd: cd 40 int $0x40 - 2df: c3 ret + 2b6: b8 0a 00 00 00 mov $0xa,%eax + 2bb: cd 40 int $0x40 + 2bd: c3 ret -000002e0 : +000002be : SYSCALL(getpid) - 2e0: b8 0b 00 00 00 mov $0xb,%eax - 2e5: cd 40 int $0x40 - 2e7: c3 ret + 2be: b8 0b 00 00 00 mov $0xb,%eax + 2c3: cd 40 int $0x40 + 2c5: c3 ret -000002e8 : +000002c6 : SYSCALL(sbrk) - 2e8: b8 0c 00 00 00 mov $0xc,%eax - 2ed: cd 40 int $0x40 - 2ef: c3 ret + 2c6: b8 0c 00 00 00 mov $0xc,%eax + 2cb: cd 40 int $0x40 + 2cd: c3 ret -000002f0 : +000002ce : SYSCALL(sleep) - 2f0: b8 0d 00 00 00 mov $0xd,%eax - 2f5: cd 40 int $0x40 - 2f7: c3 ret + 2ce: b8 0d 00 00 00 mov $0xd,%eax + 2d3: cd 40 int $0x40 + 2d5: c3 ret -000002f8 : +000002d6 : SYSCALL(uptime) - 2f8: b8 0e 00 00 00 mov $0xe,%eax - 2fd: cd 40 int $0x40 - 2ff: c3 ret + 2d6: b8 0e 00 00 00 mov $0xe,%eax + 2db: cd 40 int $0x40 + 2dd: c3 ret -00000300 : +000002de : SYSCALL(slabtest) - 300: b8 16 00 00 00 mov $0x16,%eax - 305: cd 40 int $0x40 - 307: c3 ret + 2de: b8 16 00 00 00 mov $0x16,%eax + 2e3: cd 40 int $0x40 + 2e5: c3 ret -00000308 : +000002e6 : SYSCALL(ps) - 308: b8 17 00 00 00 mov $0x17,%eax - 30d: cd 40 int $0x40 - 30f: c3 ret + 2e6: b8 17 00 00 00 mov $0x17,%eax + 2eb: cd 40 int $0x40 + 2ed: c3 ret -00000310 : +000002ee : write(fd, &c, 1); } static void printint(int fd, int xx, int base, int sgn) { - 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 3c sub $0x3c,%esp - 319: 89 45 c4 mov %eax,-0x3c(%ebp) - 31c: 89 d3 mov %edx,%ebx + 2ee: 55 push %ebp + 2ef: 89 e5 mov %esp,%ebp + 2f1: 57 push %edi + 2f2: 56 push %esi + 2f3: 53 push %ebx + 2f4: 83 ec 3c sub $0x3c,%esp + 2f7: 89 45 c4 mov %eax,-0x3c(%ebp) + 2fa: 89 ce mov %ecx,%esi char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 31e: 83 7d 08 00 cmpl $0x0,0x8(%ebp) - 322: 74 77 je 39b - 324: 85 d2 test %edx,%edx - 326: 79 73 jns 39b + 2fc: 83 7d 08 00 cmpl $0x0,0x8(%ebp) + 300: 74 79 je 37b + 302: 85 d2 test %edx,%edx + 304: 79 75 jns 37b neg = 1; x = -xx; - 328: f7 db neg %ebx + 306: 89 d1 mov %edx,%ecx + 308: f7 d9 neg %ecx neg = 1; - 32a: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) + 30a: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) } else { x = xx; } i = 0; - 331: be 00 00 00 00 mov $0x0,%esi + 311: bb 00 00 00 00 mov $0x0,%ebx do{ buf[i++] = digits[x % base]; - 336: 89 f7 mov %esi,%edi - 338: 83 c6 01 add $0x1,%esi - 33b: 89 d8 mov %ebx,%eax - 33d: ba 00 00 00 00 mov $0x0,%edx - 342: f7 f1 div %ecx - 344: 0f b6 92 f0 06 00 00 movzbl 0x6f0(%edx),%edx - 34b: 88 54 35 d7 mov %dl,-0x29(%ebp,%esi,1) + 316: 89 df mov %ebx,%edi + 318: 83 c3 01 add $0x1,%ebx + 31b: 89 c8 mov %ecx,%eax + 31d: ba 00 00 00 00 mov $0x0,%edx + 322: f7 f6 div %esi + 324: 0f b6 92 08 07 00 00 movzbl 0x708(%edx),%edx + 32b: 88 54 1d d7 mov %dl,-0x29(%ebp,%ebx,1) }while((x /= base) != 0); - 34f: 89 da mov %ebx,%edx - 351: 89 c3 mov %eax,%ebx - 353: 39 d1 cmp %edx,%ecx - 355: 76 df jbe 336 + 32f: 89 ca mov %ecx,%edx + 331: 89 c1 mov %eax,%ecx + 333: 39 d6 cmp %edx,%esi + 335: 76 df jbe 316 if(neg) - 357: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) - 35b: 74 08 je 365 + 337: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) + 33b: 74 08 je 345 buf[i++] = '-'; - 35d: c6 44 35 d8 2d movb $0x2d,-0x28(%ebp,%esi,1) - 362: 8d 77 02 lea 0x2(%edi),%esi + 33d: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) + 342: 8d 5f 02 lea 0x2(%edi),%ebx while(--i >= 0) - 365: 85 f6 test %esi,%esi - 367: 7e 2a jle 393 - 369: 8d 5c 35 d7 lea -0x29(%ebp,%esi,1),%ebx - 36d: 8d 7d d8 lea -0x28(%ebp),%edi + 345: 85 db test %ebx,%ebx + 347: 7e 2a jle 373 + 349: 8d 7d d8 lea -0x28(%ebp),%edi + 34c: 8d 5c 1d d7 lea -0x29(%ebp,%ebx,1),%ebx write(fd, &c, 1); - 370: 8d 75 d7 lea -0x29(%ebp),%esi + 350: 8d 75 d7 lea -0x29(%ebp),%esi putc(fd, buf[i]); - 373: 0f b6 03 movzbl (%ebx),%eax - 376: 88 45 d7 mov %al,-0x29(%ebp) + 353: 0f b6 03 movzbl (%ebx),%eax + 356: 88 45 d7 mov %al,-0x29(%ebp) write(fd, &c, 1); - 379: 83 ec 04 sub $0x4,%esp - 37c: 6a 01 push $0x1 - 37e: 56 push %esi - 37f: ff 75 c4 pushl -0x3c(%ebp) - 382: e8 f9 fe ff ff call 280 + 359: 83 ec 04 sub $0x4,%esp + 35c: 6a 01 push $0x1 + 35e: 56 push %esi + 35f: ff 75 c4 push -0x3c(%ebp) + 362: e8 f7 fe ff ff call 25e while(--i >= 0) - 387: 89 d8 mov %ebx,%eax - 389: 83 eb 01 sub $0x1,%ebx - 38c: 83 c4 10 add $0x10,%esp - 38f: 39 f8 cmp %edi,%eax - 391: 75 e0 jne 373 + 367: 89 d8 mov %ebx,%eax + 369: 83 eb 01 sub $0x1,%ebx + 36c: 83 c4 10 add $0x10,%esp + 36f: 39 f8 cmp %edi,%eax + 371: 75 e0 jne 353 } - 393: 8d 65 f4 lea -0xc(%ebp),%esp - 396: 5b pop %ebx - 397: 5e pop %esi - 398: 5f pop %edi - 399: 5d pop %ebp - 39a: c3 ret + 373: 8d 65 f4 lea -0xc(%ebp),%esp + 376: 5b pop %ebx + 377: 5e pop %esi + 378: 5f pop %edi + 379: 5d pop %ebp + 37a: c3 ret + x = xx; + 37b: 89 d1 mov %edx,%ecx neg = 0; - 39b: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) - 3a2: eb 8d jmp 331 + 37d: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) + 384: eb 8b jmp 311 -000003a4 : +00000386 : // Print to the given fd. Only understands %d, %x, %p, %s. void printf(int fd, const char *fmt, ...) { - 3a4: f3 0f 1e fb endbr32 - 3a8: 55 push %ebp - 3a9: 89 e5 mov %esp,%ebp - 3ab: 57 push %edi - 3ac: 56 push %esi - 3ad: 53 push %ebx - 3ae: 83 ec 2c sub $0x2c,%esp + 386: 55 push %ebp + 387: 89 e5 mov %esp,%ebp + 389: 57 push %edi + 38a: 56 push %esi + 38b: 53 push %ebx + 38c: 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++){ - 3b1: 8b 75 0c mov 0xc(%ebp),%esi - 3b4: 0f b6 1e movzbl (%esi),%ebx - 3b7: 84 db test %bl,%bl - 3b9: 0f 84 ab 01 00 00 je 56a - 3bf: 83 c6 01 add $0x1,%esi + 38f: 8b 75 0c mov 0xc(%ebp),%esi + 392: 0f b6 1e movzbl (%esi),%ebx + 395: 84 db test %bl,%bl + 397: 0f 84 9f 01 00 00 je 53c + 39d: 83 c6 01 add $0x1,%esi ap = (uint*)(void*)&fmt + 1; - 3c2: 8d 45 10 lea 0x10(%ebp),%eax - 3c5: 89 45 d4 mov %eax,-0x2c(%ebp) + 3a0: 8d 45 10 lea 0x10(%ebp),%eax + 3a3: 89 45 d4 mov %eax,-0x2c(%ebp) state = 0; - 3c8: bf 00 00 00 00 mov $0x0,%edi - 3cd: eb 2d jmp 3fc + 3a6: bf 00 00 00 00 mov $0x0,%edi + 3ab: eb 2d jmp 3da c = fmt[i] & 0xff; if(state == 0){ if(c == '%'){ state = '%'; } else { putc(fd, c); - 3cf: 88 5d e7 mov %bl,-0x19(%ebp) + 3ad: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 3d2: 83 ec 04 sub $0x4,%esp - 3d5: 6a 01 push $0x1 - 3d7: 8d 45 e7 lea -0x19(%ebp),%eax - 3da: 50 push %eax - 3db: ff 75 08 pushl 0x8(%ebp) - 3de: e8 9d fe ff ff call 280 + 3b0: 83 ec 04 sub $0x4,%esp + 3b3: 6a 01 push $0x1 + 3b5: 8d 45 e7 lea -0x19(%ebp),%eax + 3b8: 50 push %eax + 3b9: ff 75 08 push 0x8(%ebp) + 3bc: e8 9d fe ff ff call 25e putc(fd, c); - 3e3: 83 c4 10 add $0x10,%esp - 3e6: eb 05 jmp 3ed + 3c1: 83 c4 10 add $0x10,%esp + 3c4: eb 05 jmp 3cb } } else if(state == '%'){ - 3e8: 83 ff 25 cmp $0x25,%edi - 3eb: 74 22 je 40f + 3c6: 83 ff 25 cmp $0x25,%edi + 3c9: 74 1f je 3ea for(i = 0; fmt[i]; i++){ - 3ed: 83 c6 01 add $0x1,%esi - 3f0: 0f b6 5e ff movzbl -0x1(%esi),%ebx - 3f4: 84 db test %bl,%bl - 3f6: 0f 84 6e 01 00 00 je 56a + 3cb: 83 c6 01 add $0x1,%esi + 3ce: 0f b6 5e ff movzbl -0x1(%esi),%ebx + 3d2: 84 db test %bl,%bl + 3d4: 0f 84 62 01 00 00 je 53c c = fmt[i] & 0xff; - 3fc: 0f be d3 movsbl %bl,%edx - 3ff: 0f b6 c3 movzbl %bl,%eax + 3da: 0f b6 c3 movzbl %bl,%eax if(state == 0){ - 402: 85 ff test %edi,%edi - 404: 75 e2 jne 3e8 + 3dd: 85 ff test %edi,%edi + 3df: 75 e5 jne 3c6 if(c == '%'){ - 406: 83 f8 25 cmp $0x25,%eax - 409: 75 c4 jne 3cf + 3e1: 83 f8 25 cmp $0x25,%eax + 3e4: 75 c7 jne 3ad state = '%'; - 40b: 89 c7 mov %eax,%edi - 40d: eb de jmp 3ed + 3e6: 89 c7 mov %eax,%edi + 3e8: eb e1 jmp 3cb if(c == 'd'){ - 40f: 83 f8 64 cmp $0x64,%eax - 412: 74 59 je 46d + 3ea: 83 f8 25 cmp $0x25,%eax + 3ed: 0f 84 f2 00 00 00 je 4e5 + 3f3: 8d 50 9d lea -0x63(%eax),%edx + 3f6: 83 fa 15 cmp $0x15,%edx + 3f9: 0f 87 07 01 00 00 ja 506 + 3ff: 0f 87 01 01 00 00 ja 506 + 405: ff 24 95 b0 06 00 00 jmp *0x6b0(,%edx,4) printint(fd, *ap, 10, 1); + 40c: 83 ec 0c sub $0xc,%esp + 40f: 6a 01 push $0x1 + 411: b9 0a 00 00 00 mov $0xa,%ecx + 416: 8b 7d d4 mov -0x2c(%ebp),%edi + 419: 8b 17 mov (%edi),%edx + 41b: 8b 45 08 mov 0x8(%ebp),%eax + 41e: e8 cb fe ff ff call 2ee ap++; - } else if(c == 'x' || c == 'p'){ - 414: 81 e2 f7 00 00 00 and $0xf7,%edx - 41a: 83 fa 70 cmp $0x70,%edx - 41d: 74 7a je 499 - printint(fd, *ap, 16, 0); - ap++; - } else if(c == 's'){ - 41f: 83 f8 73 cmp $0x73,%eax - 422: 0f 84 9d 00 00 00 je 4c5 - s = "(null)"; - while(*s != 0){ - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 428: 83 f8 63 cmp $0x63,%eax - 42b: 0f 84 ec 00 00 00 je 51d - putc(fd, *ap); - ap++; - } else if(c == '%'){ - 431: 83 f8 25 cmp $0x25,%eax - 434: 0f 84 0f 01 00 00 je 549 - putc(fd, c); + 423: 89 f8 mov %edi,%eax + 425: 83 c0 04 add $0x4,%eax + 428: 89 45 d4 mov %eax,-0x2c(%ebp) + 42b: 83 c4 10 add $0x10,%esp } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); - 43a: c6 45 e7 25 movb $0x25,-0x19(%ebp) - write(fd, &c, 1); - 43e: 83 ec 04 sub $0x4,%esp - 441: 6a 01 push $0x1 - 443: 8d 45 e7 lea -0x19(%ebp),%eax - 446: 50 push %eax - 447: ff 75 08 pushl 0x8(%ebp) - 44a: e8 31 fe ff ff call 280 putc(fd, c); - 44f: 88 5d e7 mov %bl,-0x19(%ebp) - write(fd, &c, 1); - 452: 83 c4 0c add $0xc,%esp - 455: 6a 01 push $0x1 - 457: 8d 45 e7 lea -0x19(%ebp),%eax - 45a: 50 push %eax - 45b: ff 75 08 pushl 0x8(%ebp) - 45e: e8 1d fe ff ff call 280 - putc(fd, c); - 463: 83 c4 10 add $0x10,%esp } state = 0; - 466: bf 00 00 00 00 mov $0x0,%edi - 46b: eb 80 jmp 3ed - printint(fd, *ap, 10, 1); - 46d: 83 ec 0c sub $0xc,%esp - 470: 6a 01 push $0x1 - 472: b9 0a 00 00 00 mov $0xa,%ecx - 477: 8b 7d d4 mov -0x2c(%ebp),%edi - 47a: 8b 17 mov (%edi),%edx - 47c: 8b 45 08 mov 0x8(%ebp),%eax - 47f: e8 8c fe ff ff call 310 - ap++; - 484: 89 f8 mov %edi,%eax - 486: 83 c0 04 add $0x4,%eax - 489: 89 45 d4 mov %eax,-0x2c(%ebp) - 48c: 83 c4 10 add $0x10,%esp - state = 0; - 48f: bf 00 00 00 00 mov $0x0,%edi - 494: e9 54 ff ff ff jmp 3ed + 42e: bf 00 00 00 00 mov $0x0,%edi + 433: eb 96 jmp 3cb printint(fd, *ap, 16, 0); - 499: 83 ec 0c sub $0xc,%esp - 49c: 6a 00 push $0x0 - 49e: b9 10 00 00 00 mov $0x10,%ecx - 4a3: 8b 7d d4 mov -0x2c(%ebp),%edi - 4a6: 8b 17 mov (%edi),%edx - 4a8: 8b 45 08 mov 0x8(%ebp),%eax - 4ab: e8 60 fe ff ff call 310 + 435: 83 ec 0c sub $0xc,%esp + 438: 6a 00 push $0x0 + 43a: b9 10 00 00 00 mov $0x10,%ecx + 43f: 8b 7d d4 mov -0x2c(%ebp),%edi + 442: 8b 17 mov (%edi),%edx + 444: 8b 45 08 mov 0x8(%ebp),%eax + 447: e8 a2 fe ff ff call 2ee ap++; - 4b0: 89 f8 mov %edi,%eax - 4b2: 83 c0 04 add $0x4,%eax - 4b5: 89 45 d4 mov %eax,-0x2c(%ebp) - 4b8: 83 c4 10 add $0x10,%esp + 44c: 89 f8 mov %edi,%eax + 44e: 83 c0 04 add $0x4,%eax + 451: 89 45 d4 mov %eax,-0x2c(%ebp) + 454: 83 c4 10 add $0x10,%esp state = 0; - 4bb: bf 00 00 00 00 mov $0x0,%edi - 4c0: e9 28 ff ff ff jmp 3ed + 457: bf 00 00 00 00 mov $0x0,%edi + 45c: e9 6a ff ff ff jmp 3cb s = (char*)*ap; - 4c5: 8b 4d d4 mov -0x2c(%ebp),%ecx - 4c8: 8b 01 mov (%ecx),%eax + 461: 8b 4d d4 mov -0x2c(%ebp),%ecx + 464: 8b 01 mov (%ecx),%eax ap++; - 4ca: 83 c1 04 add $0x4,%ecx - 4cd: 89 4d d4 mov %ecx,-0x2c(%ebp) + 466: 83 c1 04 add $0x4,%ecx + 469: 89 4d d4 mov %ecx,-0x2c(%ebp) if(s == 0) - 4d0: 85 c0 test %eax,%eax - 4d2: 74 13 je 4e7 + 46c: 85 c0 test %eax,%eax + 46e: 74 13 je 483 s = (char*)*ap; - 4d4: 89 c3 mov %eax,%ebx + 470: 89 c3 mov %eax,%ebx while(*s != 0){ - 4d6: 0f b6 00 movzbl (%eax),%eax + 472: 0f b6 00 movzbl (%eax),%eax state = 0; - 4d9: bf 00 00 00 00 mov $0x0,%edi + 475: bf 00 00 00 00 mov $0x0,%edi while(*s != 0){ - 4de: 84 c0 test %al,%al - 4e0: 75 0f jne 4f1 - 4e2: e9 06 ff ff ff jmp 3ed + 47a: 84 c0 test %al,%al + 47c: 75 0f jne 48d + 47e: e9 48 ff ff ff jmp 3cb s = "(null)"; - 4e7: bb e9 06 00 00 mov $0x6e9,%ebx + 483: bb a9 06 00 00 mov $0x6a9,%ebx while(*s != 0){ - 4ec: b8 28 00 00 00 mov $0x28,%eax - 4f1: 8b 7d 08 mov 0x8(%ebp),%edi + 488: b8 28 00 00 00 mov $0x28,%eax + 48d: 8b 7d 08 mov 0x8(%ebp),%edi putc(fd, *s); - 4f4: 88 45 e7 mov %al,-0x19(%ebp) + 490: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 4f7: 83 ec 04 sub $0x4,%esp - 4fa: 6a 01 push $0x1 - 4fc: 8d 45 e7 lea -0x19(%ebp),%eax - 4ff: 50 push %eax - 500: 57 push %edi - 501: e8 7a fd ff ff call 280 + 493: 83 ec 04 sub $0x4,%esp + 496: 6a 01 push $0x1 + 498: 8d 45 e7 lea -0x19(%ebp),%eax + 49b: 50 push %eax + 49c: 57 push %edi + 49d: e8 bc fd ff ff call 25e s++; - 506: 83 c3 01 add $0x1,%ebx + 4a2: 83 c3 01 add $0x1,%ebx while(*s != 0){ - 509: 0f b6 03 movzbl (%ebx),%eax - 50c: 83 c4 10 add $0x10,%esp - 50f: 84 c0 test %al,%al - 511: 75 e1 jne 4f4 + 4a5: 0f b6 03 movzbl (%ebx),%eax + 4a8: 83 c4 10 add $0x10,%esp + 4ab: 84 c0 test %al,%al + 4ad: 75 e1 jne 490 state = 0; - 513: bf 00 00 00 00 mov $0x0,%edi - 518: e9 d0 fe ff ff jmp 3ed + 4af: bf 00 00 00 00 mov $0x0,%edi + 4b4: e9 12 ff ff ff jmp 3cb putc(fd, *ap); - 51d: 8b 7d d4 mov -0x2c(%ebp),%edi - 520: 8b 07 mov (%edi),%eax - 522: 88 45 e7 mov %al,-0x19(%ebp) + 4b9: 8b 7d d4 mov -0x2c(%ebp),%edi + 4bc: 8b 07 mov (%edi),%eax + 4be: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 525: 83 ec 04 sub $0x4,%esp - 528: 6a 01 push $0x1 - 52a: 8d 45 e7 lea -0x19(%ebp),%eax - 52d: 50 push %eax - 52e: ff 75 08 pushl 0x8(%ebp) - 531: e8 4a fd ff ff call 280 + 4c1: 83 ec 04 sub $0x4,%esp + 4c4: 6a 01 push $0x1 + 4c6: 8d 45 e7 lea -0x19(%ebp),%eax + 4c9: 50 push %eax + 4ca: ff 75 08 push 0x8(%ebp) + 4cd: e8 8c fd ff ff call 25e ap++; - 536: 83 c7 04 add $0x4,%edi - 539: 89 7d d4 mov %edi,-0x2c(%ebp) - 53c: 83 c4 10 add $0x10,%esp + 4d2: 83 c7 04 add $0x4,%edi + 4d5: 89 7d d4 mov %edi,-0x2c(%ebp) + 4d8: 83 c4 10 add $0x10,%esp state = 0; - 53f: bf 00 00 00 00 mov $0x0,%edi - 544: e9 a4 fe ff ff jmp 3ed + 4db: bf 00 00 00 00 mov $0x0,%edi + 4e0: e9 e6 fe ff ff jmp 3cb putc(fd, c); - 549: 88 5d e7 mov %bl,-0x19(%ebp) + 4e5: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 54c: 83 ec 04 sub $0x4,%esp - 54f: 6a 01 push $0x1 - 551: 8d 45 e7 lea -0x19(%ebp),%eax - 554: 50 push %eax - 555: ff 75 08 pushl 0x8(%ebp) - 558: e8 23 fd ff ff call 280 - 55d: 83 c4 10 add $0x10,%esp + 4e8: 83 ec 04 sub $0x4,%esp + 4eb: 6a 01 push $0x1 + 4ed: 8d 45 e7 lea -0x19(%ebp),%eax + 4f0: 50 push %eax + 4f1: ff 75 08 push 0x8(%ebp) + 4f4: e8 65 fd ff ff call 25e + 4f9: 83 c4 10 add $0x10,%esp + state = 0; + 4fc: bf 00 00 00 00 mov $0x0,%edi + 501: e9 c5 fe ff ff jmp 3cb + putc(fd, '%'); + 506: c6 45 e7 25 movb $0x25,-0x19(%ebp) + write(fd, &c, 1); + 50a: 83 ec 04 sub $0x4,%esp + 50d: 6a 01 push $0x1 + 50f: 8d 45 e7 lea -0x19(%ebp),%eax + 512: 50 push %eax + 513: ff 75 08 push 0x8(%ebp) + 516: e8 43 fd ff ff call 25e + putc(fd, c); + 51b: 88 5d e7 mov %bl,-0x19(%ebp) + write(fd, &c, 1); + 51e: 83 c4 0c add $0xc,%esp + 521: 6a 01 push $0x1 + 523: 8d 45 e7 lea -0x19(%ebp),%eax + 526: 50 push %eax + 527: ff 75 08 push 0x8(%ebp) + 52a: e8 2f fd ff ff call 25e + putc(fd, c); + 52f: 83 c4 10 add $0x10,%esp state = 0; - 560: bf 00 00 00 00 mov $0x0,%edi - 565: e9 83 fe ff ff jmp 3ed + 532: bf 00 00 00 00 mov $0x0,%edi + 537: e9 8f fe ff ff jmp 3cb } } } - 56a: 8d 65 f4 lea -0xc(%ebp),%esp - 56d: 5b pop %ebx - 56e: 5e pop %esi - 56f: 5f pop %edi - 570: 5d pop %ebp - 571: c3 ret - -00000572 : + 53c: 8d 65 f4 lea -0xc(%ebp),%esp + 53f: 5b pop %ebx + 540: 5e pop %esi + 541: 5f pop %edi + 542: 5d pop %ebp + 543: c3 ret + +00000544 : static Header base; static Header *freep; void free(void *ap) { - 572: f3 0f 1e fb endbr32 - 576: 55 push %ebp - 577: 89 e5 mov %esp,%ebp - 579: 57 push %edi - 57a: 56 push %esi - 57b: 53 push %ebx - 57c: 8b 5d 08 mov 0x8(%ebp),%ebx + 544: 55 push %ebp + 545: 89 e5 mov %esp,%ebp + 547: 57 push %edi + 548: 56 push %esi + 549: 53 push %ebx + 54a: 8b 5d 08 mov 0x8(%ebp),%ebx Header *bp, *p; bp = (Header*)ap - 1; - 57f: 8d 4b f8 lea -0x8(%ebx),%ecx + 54d: 8d 4b f8 lea -0x8(%ebx),%ecx for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 582: a1 64 09 00 00 mov 0x964,%eax - 587: eb 0c jmp 595 + 550: a1 7c 09 00 00 mov 0x97c,%eax + 555: eb 0c jmp 563 if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 589: 8b 10 mov (%eax),%edx - 58b: 39 c2 cmp %eax,%edx - 58d: 77 04 ja 593 - 58f: 39 ca cmp %ecx,%edx - 591: 77 10 ja 5a3 + 557: 8b 10 mov (%eax),%edx + 559: 39 c2 cmp %eax,%edx + 55b: 77 04 ja 561 + 55d: 39 ca cmp %ecx,%edx + 55f: 77 10 ja 571 { - 593: 89 d0 mov %edx,%eax + 561: 89 d0 mov %edx,%eax for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 595: 39 c8 cmp %ecx,%eax - 597: 73 f0 jae 589 - 599: 8b 10 mov (%eax),%edx - 59b: 39 ca cmp %ecx,%edx - 59d: 77 04 ja 5a3 + 563: 39 c8 cmp %ecx,%eax + 565: 73 f0 jae 557 + 567: 8b 10 mov (%eax),%edx + 569: 39 ca cmp %ecx,%edx + 56b: 77 04 ja 571 if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 59f: 39 c2 cmp %eax,%edx - 5a1: 77 f0 ja 593 + 56d: 39 c2 cmp %eax,%edx + 56f: 77 f0 ja 561 break; if(bp + bp->s.size == p->s.ptr){ - 5a3: 8b 73 fc mov -0x4(%ebx),%esi - 5a6: 8b 10 mov (%eax),%edx - 5a8: 8d 3c f1 lea (%ecx,%esi,8),%edi - 5ab: 39 fa cmp %edi,%edx - 5ad: 74 19 je 5c8 + 571: 8b 73 fc mov -0x4(%ebx),%esi + 574: 8b 10 mov (%eax),%edx + 576: 8d 3c f1 lea (%ecx,%esi,8),%edi + 579: 39 fa cmp %edi,%edx + 57b: 74 19 je 596 bp->s.size += p->s.ptr->s.size; bp->s.ptr = p->s.ptr->s.ptr; + 57d: 89 53 f8 mov %edx,-0x8(%ebx) } else bp->s.ptr = p->s.ptr; - 5af: 89 53 f8 mov %edx,-0x8(%ebx) if(p + p->s.size == bp){ - 5b2: 8b 50 04 mov 0x4(%eax),%edx - 5b5: 8d 34 d0 lea (%eax,%edx,8),%esi - 5b8: 39 f1 cmp %esi,%ecx - 5ba: 74 1b je 5d7 + 580: 8b 50 04 mov 0x4(%eax),%edx + 583: 8d 34 d0 lea (%eax,%edx,8),%esi + 586: 39 f1 cmp %esi,%ecx + 588: 74 18 je 5a2 p->s.size += bp->s.size; p->s.ptr = bp->s.ptr; + 58a: 89 08 mov %ecx,(%eax) } else p->s.ptr = bp; - 5bc: 89 08 mov %ecx,(%eax) freep = p; - 5be: a3 64 09 00 00 mov %eax,0x964 + 58c: a3 7c 09 00 00 mov %eax,0x97c } - 5c3: 5b pop %ebx - 5c4: 5e pop %esi - 5c5: 5f pop %edi - 5c6: 5d pop %ebp - 5c7: c3 ret + 591: 5b pop %ebx + 592: 5e pop %esi + 593: 5f pop %edi + 594: 5d pop %ebp + 595: c3 ret bp->s.size += p->s.ptr->s.size; - 5c8: 03 72 04 add 0x4(%edx),%esi - 5cb: 89 73 fc mov %esi,-0x4(%ebx) + 596: 03 72 04 add 0x4(%edx),%esi + 599: 89 73 fc mov %esi,-0x4(%ebx) bp->s.ptr = p->s.ptr->s.ptr; - 5ce: 8b 10 mov (%eax),%edx - 5d0: 8b 12 mov (%edx),%edx - 5d2: 89 53 f8 mov %edx,-0x8(%ebx) - 5d5: eb db jmp 5b2 + 59c: 8b 10 mov (%eax),%edx + 59e: 8b 12 mov (%edx),%edx + 5a0: eb db jmp 57d p->s.size += bp->s.size; - 5d7: 03 53 fc add -0x4(%ebx),%edx - 5da: 89 50 04 mov %edx,0x4(%eax) + 5a2: 03 53 fc add -0x4(%ebx),%edx + 5a5: 89 50 04 mov %edx,0x4(%eax) p->s.ptr = bp->s.ptr; - 5dd: 8b 53 f8 mov -0x8(%ebx),%edx - 5e0: 89 10 mov %edx,(%eax) - 5e2: eb da jmp 5be + 5a8: 8b 4b f8 mov -0x8(%ebx),%ecx + 5ab: eb dd jmp 58a -000005e4 : +000005ad : return freep; } void* malloc(uint nbytes) { - 5e4: f3 0f 1e fb endbr32 - 5e8: 55 push %ebp - 5e9: 89 e5 mov %esp,%ebp - 5eb: 57 push %edi - 5ec: 56 push %esi - 5ed: 53 push %ebx - 5ee: 83 ec 0c sub $0xc,%esp + 5ad: 55 push %ebp + 5ae: 89 e5 mov %esp,%ebp + 5b0: 57 push %edi + 5b1: 56 push %esi + 5b2: 53 push %ebx + 5b3: 83 ec 0c sub $0xc,%esp Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 5f1: 8b 45 08 mov 0x8(%ebp),%eax - 5f4: 8d 58 07 lea 0x7(%eax),%ebx - 5f7: c1 eb 03 shr $0x3,%ebx - 5fa: 83 c3 01 add $0x1,%ebx + 5b6: 8b 45 08 mov 0x8(%ebp),%eax + 5b9: 8d 58 07 lea 0x7(%eax),%ebx + 5bc: c1 eb 03 shr $0x3,%ebx + 5bf: 83 c3 01 add $0x1,%ebx if((prevp = freep) == 0){ - 5fd: 8b 15 64 09 00 00 mov 0x964,%edx - 603: 85 d2 test %edx,%edx - 605: 74 20 je 627 + 5c2: 8b 15 7c 09 00 00 mov 0x97c,%edx + 5c8: 85 d2 test %edx,%edx + 5ca: 74 1c je 5e8 base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 607: 8b 02 mov (%edx),%eax + 5cc: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 609: 8b 48 04 mov 0x4(%eax),%ecx - 60c: 39 cb cmp %ecx,%ebx - 60e: 76 3c jbe 64c - 610: 81 fb 00 10 00 00 cmp $0x1000,%ebx - 616: be 00 10 00 00 mov $0x1000,%esi - 61b: 0f 43 f3 cmovae %ebx,%esi + 5ce: 8b 48 04 mov 0x4(%eax),%ecx + 5d1: 39 cb cmp %ecx,%ebx + 5d3: 76 38 jbe 60d + 5d5: be 00 10 00 00 mov $0x1000,%esi + 5da: 39 f3 cmp %esi,%ebx + 5dc: 0f 43 f3 cmovae %ebx,%esi p = sbrk(nu * sizeof(Header)); - 61e: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi - 625: eb 72 jmp 699 + 5df: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi + 5e6: eb 72 jmp 65a base.s.ptr = freep = prevp = &base; - 627: c7 05 64 09 00 00 68 movl $0x968,0x964 - 62e: 09 00 00 - 631: c7 05 68 09 00 00 68 movl $0x968,0x968 - 638: 09 00 00 + 5e8: c7 05 7c 09 00 00 80 movl $0x980,0x97c + 5ef: 09 00 00 + 5f2: c7 05 80 09 00 00 80 movl $0x980,0x980 + 5f9: 09 00 00 base.s.size = 0; - 63b: c7 05 6c 09 00 00 00 movl $0x0,0x96c - 642: 00 00 00 + 5fc: c7 05 84 09 00 00 00 movl $0x0,0x984 + 603: 00 00 00 for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 645: b8 68 09 00 00 mov $0x968,%eax - 64a: eb c4 jmp 610 + 606: b8 80 09 00 00 mov $0x980,%eax + 60b: eb c8 jmp 5d5 if(p->s.size == nunits) - 64c: 39 cb cmp %ecx,%ebx - 64e: 74 1e je 66e + 60d: 39 cb cmp %ecx,%ebx + 60f: 74 1e je 62f prevp->s.ptr = p->s.ptr; else { p->s.size -= nunits; - 650: 29 d9 sub %ebx,%ecx - 652: 89 48 04 mov %ecx,0x4(%eax) + 611: 29 d9 sub %ebx,%ecx + 613: 89 48 04 mov %ecx,0x4(%eax) p += p->s.size; - 655: 8d 04 c8 lea (%eax,%ecx,8),%eax + 616: 8d 04 c8 lea (%eax,%ecx,8),%eax p->s.size = nunits; - 658: 89 58 04 mov %ebx,0x4(%eax) + 619: 89 58 04 mov %ebx,0x4(%eax) } freep = prevp; - 65b: 89 15 64 09 00 00 mov %edx,0x964 + 61c: 89 15 7c 09 00 00 mov %edx,0x97c return (void*)(p + 1); - 661: 8d 50 08 lea 0x8(%eax),%edx + 622: 8d 50 08 lea 0x8(%eax),%edx } if(p == freep) if((p = morecore(nunits)) == 0) return 0; } } - 664: 89 d0 mov %edx,%eax - 666: 8d 65 f4 lea -0xc(%ebp),%esp - 669: 5b pop %ebx - 66a: 5e pop %esi - 66b: 5f pop %edi - 66c: 5d pop %ebp - 66d: c3 ret + 625: 89 d0 mov %edx,%eax + 627: 8d 65 f4 lea -0xc(%ebp),%esp + 62a: 5b pop %ebx + 62b: 5e pop %esi + 62c: 5f pop %edi + 62d: 5d pop %ebp + 62e: c3 ret prevp->s.ptr = p->s.ptr; - 66e: 8b 08 mov (%eax),%ecx - 670: 89 0a mov %ecx,(%edx) - 672: eb e7 jmp 65b + 62f: 8b 08 mov (%eax),%ecx + 631: 89 0a mov %ecx,(%edx) + 633: eb e7 jmp 61c hp->s.size = nu; - 674: 89 70 04 mov %esi,0x4(%eax) + 635: 89 70 04 mov %esi,0x4(%eax) free((void*)(hp + 1)); - 677: 83 ec 0c sub $0xc,%esp - 67a: 83 c0 08 add $0x8,%eax - 67d: 50 push %eax - 67e: e8 ef fe ff ff call 572 + 638: 83 ec 0c sub $0xc,%esp + 63b: 83 c0 08 add $0x8,%eax + 63e: 50 push %eax + 63f: e8 00 ff ff ff call 544 return freep; - 683: 8b 15 64 09 00 00 mov 0x964,%edx + 644: 8b 15 7c 09 00 00 mov 0x97c,%edx if((p = morecore(nunits)) == 0) - 689: 83 c4 10 add $0x10,%esp - 68c: 85 d2 test %edx,%edx - 68e: 74 d4 je 664 + 64a: 83 c4 10 add $0x10,%esp + 64d: 85 d2 test %edx,%edx + 64f: 74 d4 je 625 for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 690: 8b 02 mov (%edx),%eax + 651: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 692: 8b 48 04 mov 0x4(%eax),%ecx - 695: 39 d9 cmp %ebx,%ecx - 697: 73 b3 jae 64c + 653: 8b 48 04 mov 0x4(%eax),%ecx + 656: 39 d9 cmp %ebx,%ecx + 658: 73 b3 jae 60d if(p == freep) - 699: 89 c2 mov %eax,%edx - 69b: 39 05 64 09 00 00 cmp %eax,0x964 - 6a1: 75 ed jne 690 + 65a: 89 c2 mov %eax,%edx + 65c: 39 05 7c 09 00 00 cmp %eax,0x97c + 662: 75 ed jne 651 p = sbrk(nu * sizeof(Header)); - 6a3: 83 ec 0c sub $0xc,%esp - 6a6: 57 push %edi - 6a7: e8 3c fc ff ff call 2e8 + 664: 83 ec 0c sub $0xc,%esp + 667: 57 push %edi + 668: e8 59 fc ff ff call 2c6 if(p == (char*)-1) - 6ac: 83 c4 10 add $0x10,%esp - 6af: 83 f8 ff cmp $0xffffffff,%eax - 6b2: 75 c0 jne 674 + 66d: 83 c4 10 add $0x10,%esp + 670: 83 f8 ff cmp $0xffffffff,%eax + 673: 75 c0 jne 635 return 0; - 6b4: ba 00 00 00 00 mov $0x0,%edx - 6b9: eb a9 jmp 664 + 675: ba 00 00 00 00 mov $0x0,%edx + 67a: eb a9 jmp 625 diff --git a/src/user/rm.d b/src/user/rm.d new file mode 100644 index 0000000..dfa40b4 --- /dev/null +++ b/src/user/rm.d @@ -0,0 +1 @@ +user/rm.o: user/rm.c /usr/include/stdc-predef.h types.h stat.h user.h diff --git a/src/user/rm.o b/src/user/rm.o new file mode 100644 index 0000000000000000000000000000000000000000..342313ada2121ee1555f7e95f8bd7b7e4e53e767 GIT binary patch literal 3188 zcma)7TWl0n7(Qn%yW4IrTZ*L>v;#r`ai`t30<8rKEtdij5n3Y&*4gcJcVKt6%*@t8 zxR|U)2%1QuPa5MR(Fb2l^of{A44U}jizaF$rX)sdf-%ttN!IV5J*V9g68)1o-+%ee ze=hrsavH-6>La}&pomKWNu z4qSa+D}S!tpvmP5zi3=JIbU9AsPz4EuTrU$Zzf*-Y|bcu!ND2$yY%yKTgnTu93?%a zgp4X}LA$zlzS5IhxfHzP*=G&cCgv<1(U5fqInJ8uVe zJ!{7{bjCGWK%d0$2x;{+KxV6ec$74*L{kJj))89zI3S|wjvKJ(3g}8g-vgjLDh*6K zje+yXMnG%|L)|kNlt@UcA0_><$XfuF=7n?Otf3J)k8pC4&@TA9E!b(}6QoA!DWY6s zO@~6WjY4fu8}KzdjK`ux7{K==KBW)C7%8;f^Q4@>FhhzfJ+uaSnAV158f}&F^(-FW z8CRP?JispSORd&GH5=&cd1$A@kvszFrJL$+dT6ZP)gk3{1<*NFGTU z$!WKkOqZN|;J8)855NwRR^G9E$IVuq#ex$gr#-7+CufRS(Do$R%A8Klc*VfZ1V!PT zaco2_|E!zIc}2Ha@{=X^CC8mg238u)0YN{Yd6~TB=j3dsh&%CZuiGn_8P=UE7VPd) zy5t6>Zr^)=gSgB@lL0#%$YG*s?H?H#G&YTgQ^kcOQ`JnVi@m*OPyc4&X4J??__=2p zKOf_(8#L`QDuW7wN{b|HN23j#jU{xY#73Ld(o7@~RZ8a*5v4SjP?b_pWiE|WU{W;p zM@8y{%R4yPdTkhXI?D=_e!M202z^TqvZ>Qb zA-j6PwPh=6F)TyIx%-0p`;5Q~0^b(+J|XgcB5Q)UV#I8%1Il$~_k=^~h+Zl%+nJu9tz zF_U-vfF>`pEzfeZ_A(cmmMy0sy;R9P8QPg*peotq512#)lB zr4vMYPx4jJolzZ2k#CI}Ij)Wki@R>TuRX_YoZ~zA=p1wh@*GE?%Q;ZlpD=zU zMTm@@ge`Rn{fK%R6&wN?3*SnOe=QDf)Yy_&fUkCcpW + b: 83 ec 08 sub $0x8,%esp + e: 68 cc 0f 00 00 push $0xfcc + 13: 6a 02 push $0x2 + 15: e8 b9 0c 00 00 call cd3 memset(buf, 0, nbuf); - 1e: 83 c4 0c add $0xc,%esp - 21: 56 push %esi - 22: 6a 00 push $0x0 - 24: 53 push %ebx - 25: e8 65 0a 00 00 call a8f + 1a: 83 c4 0c add $0xc,%esp + 1d: 56 push %esi + 1e: 6a 00 push $0x0 + 20: 53 push %ebx + 21: e8 12 0a 00 00 call a38 gets(buf, nbuf); - 2a: 83 c4 08 add $0x8,%esp - 2d: 56 push %esi - 2e: 53 push %ebx - 2f: e8 a7 0a 00 00 call adb + 26: 83 c4 08 add $0x8,%esp + 29: 56 push %esi + 2a: 53 push %ebx + 2b: e8 4e 0a 00 00 call a7e if(buf[0] == 0) // EOF - 34: 83 c4 10 add $0x10,%esp - 37: 80 3b 00 cmpb $0x0,(%ebx) - 3a: 0f 94 c0 sete %al - 3d: 0f b6 c0 movzbl %al,%eax - 40: f7 d8 neg %eax + 30: 83 c4 10 add $0x10,%esp + 33: 80 3b 01 cmpb $0x1,(%ebx) + 36: 19 c0 sbb %eax,%eax return -1; return 0; } - 42: 8d 65 f8 lea -0x8(%ebp),%esp - 45: 5b pop %ebx - 46: 5e pop %esi - 47: 5d pop %ebp - 48: c3 ret + 38: 8d 65 f8 lea -0x8(%ebp),%esp + 3b: 5b pop %ebx + 3c: 5e pop %esi + 3d: 5d pop %ebp + 3e: c3 ret -00000049 : +0000003f : exit(); } void panic(char *s) { - 49: f3 0f 1e fb endbr32 - 4d: 55 push %ebp - 4e: 89 e5 mov %esp,%ebp - 50: 83 ec 0c sub $0xc,%esp + 3f: 55 push %ebp + 40: 89 e5 mov %esp,%ebp + 42: 83 ec 0c sub $0xc,%esp printf(2, "%s\n", s); - 53: ff 75 08 pushl 0x8(%ebp) - 56: 68 f1 10 00 00 push $0x10f1 - 5b: 6a 02 push $0x2 - 5d: e8 d8 0c 00 00 call d3a + 45: ff 75 08 push 0x8(%ebp) + 48: 68 69 10 00 00 push $0x1069 + 4d: 6a 02 push $0x2 + 4f: e8 7f 0c 00 00 call cd3 exit(); - 62: e8 8f 0b 00 00 call bf6 + 54: e8 32 0b 00 00 call b8b -00000067 : +00000059 : } int fork1(void) { - 67: f3 0f 1e fb endbr32 - 6b: 55 push %ebp - 6c: 89 e5 mov %esp,%ebp - 6e: 83 ec 08 sub $0x8,%esp + 59: 55 push %ebp + 5a: 89 e5 mov %esp,%ebp + 5c: 83 ec 08 sub $0x8,%esp int pid; pid = fork(); - 71: e8 78 0b 00 00 call bee + 5f: e8 1f 0b 00 00 call b83 if(pid == -1) - 76: 83 f8 ff cmp $0xffffffff,%eax - 79: 74 02 je 7d + 64: 83 f8 ff cmp $0xffffffff,%eax + 67: 74 02 je 6b panic("fork"); return pid; } - 7b: c9 leave - 7c: c3 ret + 69: c9 leave + 6a: c3 ret panic("fork"); - 7d: 83 ec 0c sub $0xc,%esp - 80: 68 57 10 00 00 push $0x1057 - 85: e8 bf ff ff ff call 49 + 6b: 83 ec 0c sub $0xc,%esp + 6e: 68 cf 0f 00 00 push $0xfcf + 73: e8 c7 ff ff ff call 3f -0000008a : +00000078 : { - 8a: f3 0f 1e fb endbr32 - 8e: 55 push %ebp - 8f: 89 e5 mov %esp,%ebp - 91: 53 push %ebx - 92: 83 ec 14 sub $0x14,%esp - 95: 8b 5d 08 mov 0x8(%ebp),%ebx + 78: 55 push %ebp + 79: 89 e5 mov %esp,%ebp + 7b: 53 push %ebx + 7c: 83 ec 14 sub $0x14,%esp + 7f: 8b 5d 08 mov 0x8(%ebp),%ebx if(cmd == 0) - 98: 85 db test %ebx,%ebx - 9a: 74 0f je ab + 82: 85 db test %ebx,%ebx + 84: 74 0e je 94 switch(cmd->type){ - 9c: 83 3b 05 cmpl $0x5,(%ebx) - 9f: 77 0f ja b0 - a1: 8b 03 mov (%ebx),%eax - a3: 3e ff 24 85 0c 11 00 notrack jmp *0x110c(,%eax,4) - aa: 00 + 86: 83 3b 05 cmpl $0x5,(%ebx) + 89: 77 0e ja 99 + 8b: 8b 03 mov (%ebx),%eax + 8d: ff 24 85 84 10 00 00 jmp *0x1084(,%eax,4) exit(); - ab: e8 46 0b 00 00 call bf6 + 94: e8 f2 0a 00 00 call b8b panic("runcmd"); - b0: 83 ec 0c sub $0xc,%esp - b3: 68 5c 10 00 00 push $0x105c - b8: e8 8c ff ff ff call 49 + 99: 83 ec 0c sub $0xc,%esp + 9c: 68 d4 0f 00 00 push $0xfd4 + a1: e8 99 ff ff ff call 3f if(ecmd->argv[0] == 0) - bd: 8b 43 04 mov 0x4(%ebx),%eax - c0: 85 c0 test %eax,%eax - c2: 74 27 je eb + a6: 8b 43 04 mov 0x4(%ebx),%eax + a9: 85 c0 test %eax,%eax + ab: 74 27 je d4 exec(ecmd->argv[0], ecmd->argv); - c4: 83 ec 08 sub $0x8,%esp - c7: 8d 53 04 lea 0x4(%ebx),%edx - ca: 52 push %edx - cb: 50 push %eax - cc: e8 5d 0b 00 00 call c2e + ad: 83 ec 08 sub $0x8,%esp + b0: 8d 53 04 lea 0x4(%ebx),%edx + b3: 52 push %edx + b4: 50 push %eax + b5: e8 09 0b 00 00 call bc3 printf(2, "exec %s failed\n", ecmd->argv[0]); - d1: 83 c4 0c add $0xc,%esp - d4: ff 73 04 pushl 0x4(%ebx) - d7: 68 63 10 00 00 push $0x1063 - dc: 6a 02 push $0x2 - de: e8 57 0c 00 00 call d3a + ba: 83 c4 0c add $0xc,%esp + bd: ff 73 04 push 0x4(%ebx) + c0: 68 db 0f 00 00 push $0xfdb + c5: 6a 02 push $0x2 + c7: e8 07 0c 00 00 call cd3 break; - e3: 83 c4 10 add $0x10,%esp + cc: 83 c4 10 add $0x10,%esp exit(); - e6: e8 0b 0b 00 00 call bf6 + cf: e8 b7 0a 00 00 call b8b exit(); - eb: e8 06 0b 00 00 call bf6 + d4: e8 b2 0a 00 00 call b8b close(rcmd->fd); - f0: 83 ec 0c sub $0xc,%esp - f3: ff 73 14 pushl 0x14(%ebx) - f6: e8 23 0b 00 00 call c1e + d9: 83 ec 0c sub $0xc,%esp + dc: ff 73 14 push 0x14(%ebx) + df: e8 cf 0a 00 00 call bb3 if(open(rcmd->file, rcmd->mode) < 0){ - fb: 83 c4 08 add $0x8,%esp - fe: ff 73 10 pushl 0x10(%ebx) - 101: ff 73 08 pushl 0x8(%ebx) - 104: e8 2d 0b 00 00 call c36 - 109: 83 c4 10 add $0x10,%esp - 10c: 85 c0 test %eax,%eax - 10e: 78 0b js 11b + e4: 83 c4 08 add $0x8,%esp + e7: ff 73 10 push 0x10(%ebx) + ea: ff 73 08 push 0x8(%ebx) + ed: e8 d9 0a 00 00 call bcb + f2: 83 c4 10 add $0x10,%esp + f5: 85 c0 test %eax,%eax + f7: 78 0b js 104 runcmd(rcmd->cmd); - 110: 83 ec 0c sub $0xc,%esp - 113: ff 73 04 pushl 0x4(%ebx) - 116: e8 6f ff ff ff call 8a + f9: 83 ec 0c sub $0xc,%esp + fc: ff 73 04 push 0x4(%ebx) + ff: e8 74 ff ff ff call 78 printf(2, "open %s failed\n", rcmd->file); - 11b: 83 ec 04 sub $0x4,%esp - 11e: ff 73 08 pushl 0x8(%ebx) - 121: 68 73 10 00 00 push $0x1073 - 126: 6a 02 push $0x2 - 128: e8 0d 0c 00 00 call d3a + 104: 83 ec 04 sub $0x4,%esp + 107: ff 73 08 push 0x8(%ebx) + 10a: 68 eb 0f 00 00 push $0xfeb + 10f: 6a 02 push $0x2 + 111: e8 bd 0b 00 00 call cd3 exit(); - 12d: e8 c4 0a 00 00 call bf6 + 116: e8 70 0a 00 00 call b8b if(fork1() == 0) - 132: e8 30 ff ff ff call 67 - 137: 85 c0 test %eax,%eax - 139: 74 10 je 14b + 11b: e8 39 ff ff ff call 59 + 120: 85 c0 test %eax,%eax + 122: 74 10 je 134 wait(); - 13b: e8 be 0a 00 00 call bfe + 124: e8 6a 0a 00 00 call b93 runcmd(lcmd->right); - 140: 83 ec 0c sub $0xc,%esp - 143: ff 73 08 pushl 0x8(%ebx) - 146: e8 3f ff ff ff call 8a + 129: 83 ec 0c sub $0xc,%esp + 12c: ff 73 08 push 0x8(%ebx) + 12f: e8 44 ff ff ff call 78 runcmd(lcmd->left); - 14b: 83 ec 0c sub $0xc,%esp - 14e: ff 73 04 pushl 0x4(%ebx) - 151: e8 34 ff ff ff call 8a + 134: 83 ec 0c sub $0xc,%esp + 137: ff 73 04 push 0x4(%ebx) + 13a: e8 39 ff ff ff call 78 if(pipe(p) < 0) - 156: 83 ec 0c sub $0xc,%esp - 159: 8d 45 f0 lea -0x10(%ebp),%eax - 15c: 50 push %eax - 15d: e8 a4 0a 00 00 call c06 - 162: 83 c4 10 add $0x10,%esp - 165: 85 c0 test %eax,%eax - 167: 78 3a js 1a3 + 13f: 83 ec 0c sub $0xc,%esp + 142: 8d 45 f0 lea -0x10(%ebp),%eax + 145: 50 push %eax + 146: e8 50 0a 00 00 call b9b + 14b: 83 c4 10 add $0x10,%esp + 14e: 85 c0 test %eax,%eax + 150: 78 3a js 18c if(fork1() == 0){ - 169: e8 f9 fe ff ff call 67 - 16e: 85 c0 test %eax,%eax - 170: 74 3e je 1b0 + 152: e8 02 ff ff ff call 59 + 157: 85 c0 test %eax,%eax + 159: 74 3e je 199 if(fork1() == 0){ - 172: e8 f0 fe ff ff call 67 - 177: 85 c0 test %eax,%eax - 179: 74 6b je 1e6 + 15b: e8 f9 fe ff ff call 59 + 160: 85 c0 test %eax,%eax + 162: 74 6b je 1cf close(p[0]); - 17b: 83 ec 0c sub $0xc,%esp - 17e: ff 75 f0 pushl -0x10(%ebp) - 181: e8 98 0a 00 00 call c1e + 164: 83 ec 0c sub $0xc,%esp + 167: ff 75 f0 push -0x10(%ebp) + 16a: e8 44 0a 00 00 call bb3 close(p[1]); - 186: 83 c4 04 add $0x4,%esp - 189: ff 75 f4 pushl -0xc(%ebp) - 18c: e8 8d 0a 00 00 call c1e + 16f: 83 c4 04 add $0x4,%esp + 172: ff 75 f4 push -0xc(%ebp) + 175: e8 39 0a 00 00 call bb3 wait(); - 191: e8 68 0a 00 00 call bfe + 17a: e8 14 0a 00 00 call b93 wait(); - 196: e8 63 0a 00 00 call bfe + 17f: e8 0f 0a 00 00 call b93 break; - 19b: 83 c4 10 add $0x10,%esp - 19e: e9 43 ff ff ff jmp e6 + 184: 83 c4 10 add $0x10,%esp + 187: e9 43 ff ff ff jmp cf panic("pipe"); - 1a3: 83 ec 0c sub $0xc,%esp - 1a6: 68 83 10 00 00 push $0x1083 - 1ab: e8 99 fe ff ff call 49 + 18c: 83 ec 0c sub $0xc,%esp + 18f: 68 fb 0f 00 00 push $0xffb + 194: e8 a6 fe ff ff call 3f close(1); - 1b0: 83 ec 0c sub $0xc,%esp - 1b3: 6a 01 push $0x1 - 1b5: e8 64 0a 00 00 call c1e + 199: 83 ec 0c sub $0xc,%esp + 19c: 6a 01 push $0x1 + 19e: e8 10 0a 00 00 call bb3 dup(p[1]); - 1ba: 83 c4 04 add $0x4,%esp - 1bd: ff 75 f4 pushl -0xc(%ebp) - 1c0: e8 a9 0a 00 00 call c6e + 1a3: 83 c4 04 add $0x4,%esp + 1a6: ff 75 f4 push -0xc(%ebp) + 1a9: e8 55 0a 00 00 call c03 close(p[0]); - 1c5: 83 c4 04 add $0x4,%esp - 1c8: ff 75 f0 pushl -0x10(%ebp) - 1cb: e8 4e 0a 00 00 call c1e + 1ae: 83 c4 04 add $0x4,%esp + 1b1: ff 75 f0 push -0x10(%ebp) + 1b4: e8 fa 09 00 00 call bb3 close(p[1]); - 1d0: 83 c4 04 add $0x4,%esp - 1d3: ff 75 f4 pushl -0xc(%ebp) - 1d6: e8 43 0a 00 00 call c1e + 1b9: 83 c4 04 add $0x4,%esp + 1bc: ff 75 f4 push -0xc(%ebp) + 1bf: e8 ef 09 00 00 call bb3 runcmd(pcmd->left); - 1db: 83 c4 04 add $0x4,%esp - 1de: ff 73 04 pushl 0x4(%ebx) - 1e1: e8 a4 fe ff ff call 8a + 1c4: 83 c4 04 add $0x4,%esp + 1c7: ff 73 04 push 0x4(%ebx) + 1ca: e8 a9 fe ff ff call 78 close(0); - 1e6: 83 ec 0c sub $0xc,%esp - 1e9: 6a 00 push $0x0 - 1eb: e8 2e 0a 00 00 call c1e + 1cf: 83 ec 0c sub $0xc,%esp + 1d2: 6a 00 push $0x0 + 1d4: e8 da 09 00 00 call bb3 dup(p[0]); - 1f0: 83 c4 04 add $0x4,%esp - 1f3: ff 75 f0 pushl -0x10(%ebp) - 1f6: e8 73 0a 00 00 call c6e + 1d9: 83 c4 04 add $0x4,%esp + 1dc: ff 75 f0 push -0x10(%ebp) + 1df: e8 1f 0a 00 00 call c03 close(p[0]); - 1fb: 83 c4 04 add $0x4,%esp - 1fe: ff 75 f0 pushl -0x10(%ebp) - 201: e8 18 0a 00 00 call c1e + 1e4: 83 c4 04 add $0x4,%esp + 1e7: ff 75 f0 push -0x10(%ebp) + 1ea: e8 c4 09 00 00 call bb3 close(p[1]); - 206: 83 c4 04 add $0x4,%esp - 209: ff 75 f4 pushl -0xc(%ebp) - 20c: e8 0d 0a 00 00 call c1e + 1ef: 83 c4 04 add $0x4,%esp + 1f2: ff 75 f4 push -0xc(%ebp) + 1f5: e8 b9 09 00 00 call bb3 runcmd(pcmd->right); - 211: 83 c4 04 add $0x4,%esp - 214: ff 73 08 pushl 0x8(%ebx) - 217: e8 6e fe ff ff call 8a + 1fa: 83 c4 04 add $0x4,%esp + 1fd: ff 73 08 push 0x8(%ebx) + 200: e8 73 fe ff ff call 78 if(fork1() == 0) - 21c: e8 46 fe ff ff call 67 - 221: 85 c0 test %eax,%eax - 223: 0f 85 bd fe ff ff jne e6 + 205: e8 4f fe ff ff call 59 + 20a: 85 c0 test %eax,%eax + 20c: 0f 85 bd fe ff ff jne cf runcmd(bcmd->cmd); - 229: 83 ec 0c sub $0xc,%esp - 22c: ff 73 04 pushl 0x4(%ebx) - 22f: e8 56 fe ff ff call 8a + 212: 83 ec 0c sub $0xc,%esp + 215: ff 73 04 push 0x4(%ebx) + 218: e8 5b fe ff ff call 78 -00000234 : +0000021d : //PAGEBREAK! // Constructors struct cmd* execcmd(void) { - 234: f3 0f 1e fb endbr32 - 238: 55 push %ebp - 239: 89 e5 mov %esp,%ebp - 23b: 53 push %ebx - 23c: 83 ec 10 sub $0x10,%esp + 21d: 55 push %ebp + 21e: 89 e5 mov %esp,%ebp + 220: 53 push %ebx + 221: 83 ec 10 sub $0x10,%esp struct execcmd *cmd; cmd = malloc(sizeof(*cmd)); - 23f: 6a 54 push $0x54 - 241: e8 34 0d 00 00 call f7a - 246: 89 c3 mov %eax,%ebx + 224: 6a 54 push $0x54 + 226: e8 cf 0c 00 00 call efa + 22b: 89 c3 mov %eax,%ebx memset(cmd, 0, sizeof(*cmd)); - 248: 83 c4 0c add $0xc,%esp - 24b: 6a 54 push $0x54 - 24d: 6a 00 push $0x0 - 24f: 50 push %eax - 250: e8 3a 08 00 00 call a8f + 22d: 83 c4 0c add $0xc,%esp + 230: 6a 54 push $0x54 + 232: 6a 00 push $0x0 + 234: 50 push %eax + 235: e8 fe 07 00 00 call a38 cmd->type = EXEC; - 255: c7 03 01 00 00 00 movl $0x1,(%ebx) + 23a: c7 03 01 00 00 00 movl $0x1,(%ebx) return (struct cmd*)cmd; } - 25b: 89 d8 mov %ebx,%eax - 25d: 8b 5d fc mov -0x4(%ebp),%ebx - 260: c9 leave - 261: c3 ret + 240: 89 d8 mov %ebx,%eax + 242: 8b 5d fc mov -0x4(%ebp),%ebx + 245: c9 leave + 246: c3 ret -00000262 : +00000247 : struct cmd* redircmd(struct cmd *subcmd, char *file, char *efile, int mode, int fd) { - 262: f3 0f 1e fb endbr32 - 266: 55 push %ebp - 267: 89 e5 mov %esp,%ebp - 269: 53 push %ebx - 26a: 83 ec 10 sub $0x10,%esp + 247: 55 push %ebp + 248: 89 e5 mov %esp,%ebp + 24a: 53 push %ebx + 24b: 83 ec 10 sub $0x10,%esp struct redircmd *cmd; cmd = malloc(sizeof(*cmd)); - 26d: 6a 18 push $0x18 - 26f: e8 06 0d 00 00 call f7a - 274: 89 c3 mov %eax,%ebx + 24e: 6a 18 push $0x18 + 250: e8 a5 0c 00 00 call efa + 255: 89 c3 mov %eax,%ebx memset(cmd, 0, sizeof(*cmd)); - 276: 83 c4 0c add $0xc,%esp - 279: 6a 18 push $0x18 - 27b: 6a 00 push $0x0 - 27d: 50 push %eax - 27e: e8 0c 08 00 00 call a8f + 257: 83 c4 0c add $0xc,%esp + 25a: 6a 18 push $0x18 + 25c: 6a 00 push $0x0 + 25e: 50 push %eax + 25f: e8 d4 07 00 00 call a38 cmd->type = REDIR; - 283: c7 03 02 00 00 00 movl $0x2,(%ebx) + 264: c7 03 02 00 00 00 movl $0x2,(%ebx) cmd->cmd = subcmd; - 289: 8b 45 08 mov 0x8(%ebp),%eax - 28c: 89 43 04 mov %eax,0x4(%ebx) + 26a: 8b 45 08 mov 0x8(%ebp),%eax + 26d: 89 43 04 mov %eax,0x4(%ebx) cmd->file = file; - 28f: 8b 45 0c mov 0xc(%ebp),%eax - 292: 89 43 08 mov %eax,0x8(%ebx) + 270: 8b 45 0c mov 0xc(%ebp),%eax + 273: 89 43 08 mov %eax,0x8(%ebx) cmd->efile = efile; - 295: 8b 45 10 mov 0x10(%ebp),%eax - 298: 89 43 0c mov %eax,0xc(%ebx) + 276: 8b 45 10 mov 0x10(%ebp),%eax + 279: 89 43 0c mov %eax,0xc(%ebx) cmd->mode = mode; - 29b: 8b 45 14 mov 0x14(%ebp),%eax - 29e: 89 43 10 mov %eax,0x10(%ebx) + 27c: 8b 45 14 mov 0x14(%ebp),%eax + 27f: 89 43 10 mov %eax,0x10(%ebx) cmd->fd = fd; - 2a1: 8b 45 18 mov 0x18(%ebp),%eax - 2a4: 89 43 14 mov %eax,0x14(%ebx) + 282: 8b 45 18 mov 0x18(%ebp),%eax + 285: 89 43 14 mov %eax,0x14(%ebx) return (struct cmd*)cmd; } - 2a7: 89 d8 mov %ebx,%eax - 2a9: 8b 5d fc mov -0x4(%ebp),%ebx - 2ac: c9 leave - 2ad: c3 ret + 288: 89 d8 mov %ebx,%eax + 28a: 8b 5d fc mov -0x4(%ebp),%ebx + 28d: c9 leave + 28e: c3 ret -000002ae : +0000028f : struct cmd* pipecmd(struct cmd *left, struct cmd *right) { - 2ae: f3 0f 1e fb endbr32 - 2b2: 55 push %ebp - 2b3: 89 e5 mov %esp,%ebp - 2b5: 53 push %ebx - 2b6: 83 ec 10 sub $0x10,%esp + 28f: 55 push %ebp + 290: 89 e5 mov %esp,%ebp + 292: 53 push %ebx + 293: 83 ec 10 sub $0x10,%esp struct pipecmd *cmd; cmd = malloc(sizeof(*cmd)); - 2b9: 6a 0c push $0xc - 2bb: e8 ba 0c 00 00 call f7a - 2c0: 89 c3 mov %eax,%ebx + 296: 6a 0c push $0xc + 298: e8 5d 0c 00 00 call efa + 29d: 89 c3 mov %eax,%ebx memset(cmd, 0, sizeof(*cmd)); - 2c2: 83 c4 0c add $0xc,%esp - 2c5: 6a 0c push $0xc - 2c7: 6a 00 push $0x0 - 2c9: 50 push %eax - 2ca: e8 c0 07 00 00 call a8f + 29f: 83 c4 0c add $0xc,%esp + 2a2: 6a 0c push $0xc + 2a4: 6a 00 push $0x0 + 2a6: 50 push %eax + 2a7: e8 8c 07 00 00 call a38 cmd->type = PIPE; - 2cf: c7 03 03 00 00 00 movl $0x3,(%ebx) + 2ac: c7 03 03 00 00 00 movl $0x3,(%ebx) cmd->left = left; - 2d5: 8b 45 08 mov 0x8(%ebp),%eax - 2d8: 89 43 04 mov %eax,0x4(%ebx) + 2b2: 8b 45 08 mov 0x8(%ebp),%eax + 2b5: 89 43 04 mov %eax,0x4(%ebx) cmd->right = right; - 2db: 8b 45 0c mov 0xc(%ebp),%eax - 2de: 89 43 08 mov %eax,0x8(%ebx) + 2b8: 8b 45 0c mov 0xc(%ebp),%eax + 2bb: 89 43 08 mov %eax,0x8(%ebx) return (struct cmd*)cmd; } - 2e1: 89 d8 mov %ebx,%eax - 2e3: 8b 5d fc mov -0x4(%ebp),%ebx - 2e6: c9 leave - 2e7: c3 ret + 2be: 89 d8 mov %ebx,%eax + 2c0: 8b 5d fc mov -0x4(%ebp),%ebx + 2c3: c9 leave + 2c4: c3 ret -000002e8 : +000002c5 : struct cmd* listcmd(struct cmd *left, struct cmd *right) { - 2e8: f3 0f 1e fb endbr32 - 2ec: 55 push %ebp - 2ed: 89 e5 mov %esp,%ebp - 2ef: 53 push %ebx - 2f0: 83 ec 10 sub $0x10,%esp + 2c5: 55 push %ebp + 2c6: 89 e5 mov %esp,%ebp + 2c8: 53 push %ebx + 2c9: 83 ec 10 sub $0x10,%esp struct listcmd *cmd; cmd = malloc(sizeof(*cmd)); - 2f3: 6a 0c push $0xc - 2f5: e8 80 0c 00 00 call f7a - 2fa: 89 c3 mov %eax,%ebx + 2cc: 6a 0c push $0xc + 2ce: e8 27 0c 00 00 call efa + 2d3: 89 c3 mov %eax,%ebx memset(cmd, 0, sizeof(*cmd)); - 2fc: 83 c4 0c add $0xc,%esp - 2ff: 6a 0c push $0xc - 301: 6a 00 push $0x0 - 303: 50 push %eax - 304: e8 86 07 00 00 call a8f + 2d5: 83 c4 0c add $0xc,%esp + 2d8: 6a 0c push $0xc + 2da: 6a 00 push $0x0 + 2dc: 50 push %eax + 2dd: e8 56 07 00 00 call a38 cmd->type = LIST; - 309: c7 03 04 00 00 00 movl $0x4,(%ebx) + 2e2: c7 03 04 00 00 00 movl $0x4,(%ebx) cmd->left = left; - 30f: 8b 45 08 mov 0x8(%ebp),%eax - 312: 89 43 04 mov %eax,0x4(%ebx) + 2e8: 8b 45 08 mov 0x8(%ebp),%eax + 2eb: 89 43 04 mov %eax,0x4(%ebx) cmd->right = right; - 315: 8b 45 0c mov 0xc(%ebp),%eax - 318: 89 43 08 mov %eax,0x8(%ebx) + 2ee: 8b 45 0c mov 0xc(%ebp),%eax + 2f1: 89 43 08 mov %eax,0x8(%ebx) return (struct cmd*)cmd; } - 31b: 89 d8 mov %ebx,%eax - 31d: 8b 5d fc mov -0x4(%ebp),%ebx - 320: c9 leave - 321: c3 ret + 2f4: 89 d8 mov %ebx,%eax + 2f6: 8b 5d fc mov -0x4(%ebp),%ebx + 2f9: c9 leave + 2fa: c3 ret -00000322 : +000002fb : struct cmd* backcmd(struct cmd *subcmd) { - 322: f3 0f 1e fb endbr32 - 326: 55 push %ebp - 327: 89 e5 mov %esp,%ebp - 329: 53 push %ebx - 32a: 83 ec 10 sub $0x10,%esp + 2fb: 55 push %ebp + 2fc: 89 e5 mov %esp,%ebp + 2fe: 53 push %ebx + 2ff: 83 ec 10 sub $0x10,%esp struct backcmd *cmd; cmd = malloc(sizeof(*cmd)); - 32d: 6a 08 push $0x8 - 32f: e8 46 0c 00 00 call f7a - 334: 89 c3 mov %eax,%ebx + 302: 6a 08 push $0x8 + 304: e8 f1 0b 00 00 call efa + 309: 89 c3 mov %eax,%ebx memset(cmd, 0, sizeof(*cmd)); - 336: 83 c4 0c add $0xc,%esp - 339: 6a 08 push $0x8 - 33b: 6a 00 push $0x0 - 33d: 50 push %eax - 33e: e8 4c 07 00 00 call a8f + 30b: 83 c4 0c add $0xc,%esp + 30e: 6a 08 push $0x8 + 310: 6a 00 push $0x0 + 312: 50 push %eax + 313: e8 20 07 00 00 call a38 cmd->type = BACK; - 343: c7 03 05 00 00 00 movl $0x5,(%ebx) + 318: c7 03 05 00 00 00 movl $0x5,(%ebx) cmd->cmd = subcmd; - 349: 8b 45 08 mov 0x8(%ebp),%eax - 34c: 89 43 04 mov %eax,0x4(%ebx) + 31e: 8b 45 08 mov 0x8(%ebp),%eax + 321: 89 43 04 mov %eax,0x4(%ebx) return (struct cmd*)cmd; } - 34f: 89 d8 mov %ebx,%eax - 351: 8b 5d fc mov -0x4(%ebp),%ebx - 354: c9 leave - 355: c3 ret + 324: 89 d8 mov %ebx,%eax + 326: 8b 5d fc mov -0x4(%ebp),%ebx + 329: c9 leave + 32a: c3 ret -00000356 : +0000032b : char whitespace[] = " \t\r\n\v"; char symbols[] = "<|>&;()"; int gettoken(char **ps, char *es, char **q, char **eq) { - 356: f3 0f 1e fb endbr32 - 35a: 55 push %ebp - 35b: 89 e5 mov %esp,%ebp - 35d: 57 push %edi - 35e: 56 push %esi - 35f: 53 push %ebx - 360: 83 ec 0c sub $0xc,%esp - 363: 8b 75 0c mov 0xc(%ebp),%esi - 366: 8b 7d 10 mov 0x10(%ebp),%edi + 32b: 55 push %ebp + 32c: 89 e5 mov %esp,%ebp + 32e: 57 push %edi + 32f: 56 push %esi + 330: 53 push %ebx + 331: 83 ec 0c sub $0xc,%esp + 334: 8b 75 0c mov 0xc(%ebp),%esi + 337: 8b 7d 10 mov 0x10(%ebp),%edi char *s; int ret; s = *ps; - 369: 8b 45 08 mov 0x8(%ebp),%eax - 36c: 8b 18 mov (%eax),%ebx + 33a: 8b 45 08 mov 0x8(%ebp),%eax + 33d: 8b 18 mov (%eax),%ebx while(s < es && strchr(whitespace, *s)) - 36e: 39 f3 cmp %esi,%ebx - 370: 73 1f jae 391 - 372: 83 ec 08 sub $0x8,%esp - 375: 0f be 03 movsbl (%ebx),%eax - 378: 50 push %eax - 379: 68 8c 16 00 00 push $0x168c - 37e: e8 27 07 00 00 call aaa - 383: 83 c4 10 add $0x10,%esp - 386: 85 c0 test %eax,%eax - 388: 74 07 je 391 + 33f: 39 f3 cmp %esi,%ebx + 341: 73 21 jae 364 + 343: 83 ec 08 sub $0x8,%esp + 346: 0f be 03 movsbl (%ebx),%eax + 349: 50 push %eax + 34a: 68 5c 16 00 00 push $0x165c + 34f: e8 fd 06 00 00 call a51 + 354: 83 c4 10 add $0x10,%esp + 357: 85 c0 test %eax,%eax + 359: 74 09 je 364 s++; - 38a: 83 c3 01 add $0x1,%ebx + 35b: 83 c3 01 add $0x1,%ebx while(s < es && strchr(whitespace, *s)) - 38d: 39 de cmp %ebx,%esi - 38f: 75 e1 jne 372 + 35e: 39 de cmp %ebx,%esi + 360: 75 e1 jne 343 + s++; + 362: 89 f3 mov %esi,%ebx if(q) - 391: 85 ff test %edi,%edi - 393: 74 02 je 397 + 364: 85 ff test %edi,%edi + 366: 74 02 je 36a *q = s; - 395: 89 1f mov %ebx,(%edi) + 368: 89 1f mov %ebx,(%edi) ret = *s; - 397: 0f b6 03 movzbl (%ebx),%eax - 39a: 0f be f8 movsbl %al,%edi + 36a: 0f b6 03 movzbl (%ebx),%eax + 36d: 0f be f8 movsbl %al,%edi switch(*s){ - 39d: 3c 3c cmp $0x3c,%al - 39f: 7f 55 jg 3f6 - 3a1: 3c 3a cmp $0x3a,%al - 3a3: 7f 11 jg 3b6 - 3a5: 84 c0 test %al,%al - 3a7: 74 10 je 3b9 - 3a9: 78 65 js 410 - 3ab: 3c 26 cmp $0x26,%al - 3ad: 74 07 je 3b6 - 3af: 83 e8 28 sub $0x28,%eax - 3b2: 3c 01 cmp $0x1,%al - 3b4: 77 5a ja 410 + 370: 3c 3c cmp $0x3c,%al + 372: 7f 57 jg 3cb + 374: 3c 3a cmp $0x3a,%al + 376: 7f 11 jg 389 + 378: 84 c0 test %al,%al + 37a: 74 10 je 38c + 37c: 78 67 js 3e5 + 37e: 3c 26 cmp $0x26,%al + 380: 74 07 je 389 + 382: 83 e8 28 sub $0x28,%eax + 385: 3c 01 cmp $0x1,%al + 387: 77 5c ja 3e5 case '(': case ')': case ';': case '&': case '<': s++; - 3b6: 83 c3 01 add $0x1,%ebx + 389: 83 c3 01 add $0x1,%ebx ret = 'a'; while(s < es && !strchr(whitespace, *s) && !strchr(symbols, *s)) s++; break; } if(eq) - 3b9: 83 7d 14 00 cmpl $0x0,0x14(%ebp) - 3bd: 74 05 je 3c4 + 38c: 83 7d 14 00 cmpl $0x0,0x14(%ebp) + 390: 74 05 je 397 *eq = s; - 3bf: 8b 45 14 mov 0x14(%ebp),%eax - 3c2: 89 18 mov %ebx,(%eax) + 392: 8b 45 14 mov 0x14(%ebp),%eax + 395: 89 18 mov %ebx,(%eax) while(s < es && strchr(whitespace, *s)) - 3c4: 39 f3 cmp %esi,%ebx - 3c6: 73 1f jae 3e7 - 3c8: 83 ec 08 sub $0x8,%esp - 3cb: 0f be 03 movsbl (%ebx),%eax - 3ce: 50 push %eax - 3cf: 68 8c 16 00 00 push $0x168c - 3d4: e8 d1 06 00 00 call aaa - 3d9: 83 c4 10 add $0x10,%esp - 3dc: 85 c0 test %eax,%eax - 3de: 74 07 je 3e7 + 397: 39 f3 cmp %esi,%ebx + 399: 73 21 jae 3bc + 39b: 83 ec 08 sub $0x8,%esp + 39e: 0f be 03 movsbl (%ebx),%eax + 3a1: 50 push %eax + 3a2: 68 5c 16 00 00 push $0x165c + 3a7: e8 a5 06 00 00 call a51 + 3ac: 83 c4 10 add $0x10,%esp + 3af: 85 c0 test %eax,%eax + 3b1: 74 09 je 3bc s++; - 3e0: 83 c3 01 add $0x1,%ebx + 3b3: 83 c3 01 add $0x1,%ebx while(s < es && strchr(whitespace, *s)) - 3e3: 39 de cmp %ebx,%esi - 3e5: 75 e1 jne 3c8 + 3b6: 39 de cmp %ebx,%esi + 3b8: 75 e1 jne 39b + s++; + 3ba: 89 f3 mov %esi,%ebx *ps = s; - 3e7: 8b 45 08 mov 0x8(%ebp),%eax - 3ea: 89 18 mov %ebx,(%eax) + 3bc: 8b 45 08 mov 0x8(%ebp),%eax + 3bf: 89 18 mov %ebx,(%eax) return ret; } - 3ec: 89 f8 mov %edi,%eax - 3ee: 8d 65 f4 lea -0xc(%ebp),%esp - 3f1: 5b pop %ebx - 3f2: 5e pop %esi - 3f3: 5f pop %edi - 3f4: 5d pop %ebp - 3f5: c3 ret + 3c1: 89 f8 mov %edi,%eax + 3c3: 8d 65 f4 lea -0xc(%ebp),%esp + 3c6: 5b pop %ebx + 3c7: 5e pop %esi + 3c8: 5f pop %edi + 3c9: 5d pop %ebp + 3ca: c3 ret switch(*s){ - 3f6: 3c 3e cmp $0x3e,%al - 3f8: 75 12 jne 40c + 3cb: 3c 3e cmp $0x3e,%al + 3cd: 75 12 jne 3e1 s++; - 3fa: 8d 43 01 lea 0x1(%ebx),%eax + 3cf: 8d 43 01 lea 0x1(%ebx),%eax if(*s == '>'){ - 3fd: 80 7b 01 3e cmpb $0x3e,0x1(%ebx) - 401: 74 59 je 45c + 3d2: 80 7b 01 3e cmpb $0x3e,0x1(%ebx) + 3d6: 74 5b je 433 s++; - 403: 89 c3 mov %eax,%ebx + 3d8: 89 c3 mov %eax,%ebx ret = *s; - 405: bf 3e 00 00 00 mov $0x3e,%edi - 40a: eb ad jmp 3b9 + 3da: bf 3e 00 00 00 mov $0x3e,%edi + 3df: eb ab jmp 38c switch(*s){ - 40c: 3c 7c cmp $0x7c,%al - 40e: 74 a6 je 3b6 + 3e1: 3c 7c cmp $0x7c,%al + 3e3: 74 a4 je 389 while(s < es && !strchr(whitespace, *s) && !strchr(symbols, *s)) - 410: 39 de cmp %ebx,%esi - 412: 76 37 jbe 44b - 414: 83 ec 08 sub $0x8,%esp - 417: 0f be 03 movsbl (%ebx),%eax - 41a: 50 push %eax - 41b: 68 8c 16 00 00 push $0x168c - 420: e8 85 06 00 00 call aaa - 425: 83 c4 10 add $0x10,%esp - 428: 85 c0 test %eax,%eax - 42a: 75 47 jne 473 - 42c: 83 ec 08 sub $0x8,%esp - 42f: 0f be 03 movsbl (%ebx),%eax - 432: 50 push %eax - 433: 68 84 16 00 00 push $0x1684 - 438: e8 6d 06 00 00 call aaa - 43d: 83 c4 10 add $0x10,%esp - 440: 85 c0 test %eax,%eax - 442: 75 25 jne 469 + 3e5: 39 de cmp %ebx,%esi + 3e7: 76 39 jbe 422 + 3e9: 83 ec 08 sub $0x8,%esp + 3ec: 0f be 03 movsbl (%ebx),%eax + 3ef: 50 push %eax + 3f0: 68 5c 16 00 00 push $0x165c + 3f5: e8 57 06 00 00 call a51 + 3fa: 83 c4 10 add $0x10,%esp + 3fd: 85 c0 test %eax,%eax + 3ff: 75 49 jne 44a + 401: 83 ec 08 sub $0x8,%esp + 404: 0f be 03 movsbl (%ebx),%eax + 407: 50 push %eax + 408: 68 54 16 00 00 push $0x1654 + 40d: e8 3f 06 00 00 call a51 + 412: 83 c4 10 add $0x10,%esp + 415: 85 c0 test %eax,%eax + 417: 75 27 jne 440 s++; - 444: 83 c3 01 add $0x1,%ebx + 419: 83 c3 01 add $0x1,%ebx while(s < es && !strchr(whitespace, *s) && !strchr(symbols, *s)) - 447: 39 de cmp %ebx,%esi - 449: 75 c9 jne 414 + 41c: 39 de cmp %ebx,%esi + 41e: 75 c9 jne 3e9 + s++; + 420: 89 f3 mov %esi,%ebx if(eq) - 44b: bf 61 00 00 00 mov $0x61,%edi - 450: 83 7d 14 00 cmpl $0x0,0x14(%ebp) - 454: 0f 85 65 ff ff ff jne 3bf - 45a: eb 8b jmp 3e7 + 422: bf 61 00 00 00 mov $0x61,%edi + 427: 83 7d 14 00 cmpl $0x0,0x14(%ebp) + 42b: 0f 85 61 ff ff ff jne 392 + 431: eb 89 jmp 3bc s++; - 45c: 83 c3 02 add $0x2,%ebx + 433: 83 c3 02 add $0x2,%ebx ret = '+'; - 45f: bf 2b 00 00 00 mov $0x2b,%edi - 464: e9 50 ff ff ff jmp 3b9 + 436: bf 2b 00 00 00 mov $0x2b,%edi + 43b: e9 4c ff ff ff jmp 38c ret = 'a'; - 469: bf 61 00 00 00 mov $0x61,%edi - 46e: e9 46 ff ff ff jmp 3b9 - 473: bf 61 00 00 00 mov $0x61,%edi - 478: e9 3c ff ff ff jmp 3b9 + 440: bf 61 00 00 00 mov $0x61,%edi + 445: e9 42 ff ff ff jmp 38c + 44a: bf 61 00 00 00 mov $0x61,%edi + 44f: e9 38 ff ff ff jmp 38c -0000047d : +00000454 : int peek(char **ps, char *es, char *toks) { - 47d: f3 0f 1e fb endbr32 - 481: 55 push %ebp - 482: 89 e5 mov %esp,%ebp - 484: 57 push %edi - 485: 56 push %esi - 486: 53 push %ebx - 487: 83 ec 0c sub $0xc,%esp - 48a: 8b 7d 08 mov 0x8(%ebp),%edi - 48d: 8b 75 0c mov 0xc(%ebp),%esi + 454: 55 push %ebp + 455: 89 e5 mov %esp,%ebp + 457: 57 push %edi + 458: 56 push %esi + 459: 53 push %ebx + 45a: 83 ec 0c sub $0xc,%esp + 45d: 8b 7d 08 mov 0x8(%ebp),%edi + 460: 8b 75 0c mov 0xc(%ebp),%esi char *s; s = *ps; - 490: 8b 1f mov (%edi),%ebx + 463: 8b 1f mov (%edi),%ebx while(s < es && strchr(whitespace, *s)) - 492: 39 f3 cmp %esi,%ebx - 494: 73 1f jae 4b5 - 496: 83 ec 08 sub $0x8,%esp - 499: 0f be 03 movsbl (%ebx),%eax - 49c: 50 push %eax - 49d: 68 8c 16 00 00 push $0x168c - 4a2: e8 03 06 00 00 call aaa - 4a7: 83 c4 10 add $0x10,%esp - 4aa: 85 c0 test %eax,%eax - 4ac: 74 07 je 4b5 + 465: 39 f3 cmp %esi,%ebx + 467: 73 21 jae 48a + 469: 83 ec 08 sub $0x8,%esp + 46c: 0f be 03 movsbl (%ebx),%eax + 46f: 50 push %eax + 470: 68 5c 16 00 00 push $0x165c + 475: e8 d7 05 00 00 call a51 + 47a: 83 c4 10 add $0x10,%esp + 47d: 85 c0 test %eax,%eax + 47f: 74 09 je 48a s++; - 4ae: 83 c3 01 add $0x1,%ebx + 481: 83 c3 01 add $0x1,%ebx while(s < es && strchr(whitespace, *s)) - 4b1: 39 de cmp %ebx,%esi - 4b3: 75 e1 jne 496 + 484: 39 de cmp %ebx,%esi + 486: 75 e1 jne 469 + s++; + 488: 89 f3 mov %esi,%ebx *ps = s; - 4b5: 89 1f mov %ebx,(%edi) + 48a: 89 1f mov %ebx,(%edi) return *s && strchr(toks, *s); - 4b7: 0f b6 03 movzbl (%ebx),%eax - 4ba: ba 00 00 00 00 mov $0x0,%edx - 4bf: 84 c0 test %al,%al - 4c1: 75 0a jne 4cd + 48c: 0f b6 03 movzbl (%ebx),%eax + 48f: ba 00 00 00 00 mov $0x0,%edx + 494: 84 c0 test %al,%al + 496: 75 0a jne 4a2 } - 4c3: 89 d0 mov %edx,%eax - 4c5: 8d 65 f4 lea -0xc(%ebp),%esp - 4c8: 5b pop %ebx - 4c9: 5e pop %esi - 4ca: 5f pop %edi - 4cb: 5d pop %ebp - 4cc: c3 ret + 498: 89 d0 mov %edx,%eax + 49a: 8d 65 f4 lea -0xc(%ebp),%esp + 49d: 5b pop %ebx + 49e: 5e pop %esi + 49f: 5f pop %edi + 4a0: 5d pop %ebp + 4a1: c3 ret return *s && strchr(toks, *s); - 4cd: 83 ec 08 sub $0x8,%esp - 4d0: 0f be c0 movsbl %al,%eax - 4d3: 50 push %eax - 4d4: ff 75 10 pushl 0x10(%ebp) - 4d7: e8 ce 05 00 00 call aaa - 4dc: 83 c4 10 add $0x10,%esp - 4df: 85 c0 test %eax,%eax - 4e1: 0f 95 c2 setne %dl - 4e4: 0f b6 d2 movzbl %dl,%edx - 4e7: eb da jmp 4c3 - -000004e9 : + 4a2: 83 ec 08 sub $0x8,%esp + 4a5: 0f be c0 movsbl %al,%eax + 4a8: 50 push %eax + 4a9: ff 75 10 push 0x10(%ebp) + 4ac: e8 a0 05 00 00 call a51 + 4b1: 83 c4 10 add $0x10,%esp + 4b4: 85 c0 test %eax,%eax + 4b6: 0f 95 c2 setne %dl + 4b9: 0f b6 d2 movzbl %dl,%edx + 4bc: eb da jmp 498 + +000004be : return cmd; } struct cmd* parseredirs(struct cmd *cmd, char **ps, char *es) { - 4e9: f3 0f 1e fb endbr32 - 4ed: 55 push %ebp - 4ee: 89 e5 mov %esp,%ebp - 4f0: 57 push %edi - 4f1: 56 push %esi - 4f2: 53 push %ebx - 4f3: 83 ec 1c sub $0x1c,%esp - 4f6: 8b 75 0c mov 0xc(%ebp),%esi - 4f9: 8b 7d 10 mov 0x10(%ebp),%edi + 4be: 55 push %ebp + 4bf: 89 e5 mov %esp,%ebp + 4c1: 57 push %edi + 4c2: 56 push %esi + 4c3: 53 push %ebx + 4c4: 83 ec 1c sub $0x1c,%esp + 4c7: 8b 75 0c mov 0xc(%ebp),%esi + 4ca: 8b 7d 10 mov 0x10(%ebp),%edi int tok; char *q, *eq; while(peek(ps, es, "<>")){ - 4fc: eb 28 jmp 526 + 4cd: eb 28 jmp 4f7 tok = gettoken(ps, es, 0, 0); if(gettoken(ps, es, &q, &eq) != 'a') panic("missing file for redirection"); - 4fe: 83 ec 0c sub $0xc,%esp - 501: 68 88 10 00 00 push $0x1088 - 506: e8 3e fb ff ff call 49 + 4cf: 83 ec 0c sub $0xc,%esp + 4d2: 68 00 10 00 00 push $0x1000 + 4d7: e8 63 fb ff ff call 3f switch(tok){ case '<': cmd = redircmd(cmd, q, eq, O_RDONLY, 0); - 50b: 83 ec 0c sub $0xc,%esp - 50e: 6a 00 push $0x0 - 510: 6a 00 push $0x0 - 512: ff 75 e0 pushl -0x20(%ebp) - 515: ff 75 e4 pushl -0x1c(%ebp) - 518: ff 75 08 pushl 0x8(%ebp) - 51b: e8 42 fd ff ff call 262 - 520: 89 45 08 mov %eax,0x8(%ebp) + 4dc: 83 ec 0c sub $0xc,%esp + 4df: 6a 00 push $0x0 + 4e1: 6a 00 push $0x0 + 4e3: ff 75 e0 push -0x20(%ebp) + 4e6: ff 75 e4 push -0x1c(%ebp) + 4e9: ff 75 08 push 0x8(%ebp) + 4ec: e8 56 fd ff ff call 247 + 4f1: 89 45 08 mov %eax,0x8(%ebp) break; - 523: 83 c4 20 add $0x20,%esp + 4f4: 83 c4 20 add $0x20,%esp while(peek(ps, es, "<>")){ - 526: 83 ec 04 sub $0x4,%esp - 529: 68 a5 10 00 00 push $0x10a5 - 52e: 57 push %edi - 52f: 56 push %esi - 530: e8 48 ff ff ff call 47d - 535: 83 c4 10 add $0x10,%esp - 538: 85 c0 test %eax,%eax - 53a: 74 76 je 5b2 + 4f7: 83 ec 04 sub $0x4,%esp + 4fa: 68 1d 10 00 00 push $0x101d + 4ff: 57 push %edi + 500: 56 push %esi + 501: e8 4e ff ff ff call 454 + 506: 83 c4 10 add $0x10,%esp + 509: 85 c0 test %eax,%eax + 50b: 74 76 je 583 tok = gettoken(ps, es, 0, 0); - 53c: 6a 00 push $0x0 - 53e: 6a 00 push $0x0 - 540: 57 push %edi - 541: 56 push %esi - 542: e8 0f fe ff ff call 356 - 547: 89 c3 mov %eax,%ebx + 50d: 6a 00 push $0x0 + 50f: 6a 00 push $0x0 + 511: 57 push %edi + 512: 56 push %esi + 513: e8 13 fe ff ff call 32b + 518: 89 c3 mov %eax,%ebx if(gettoken(ps, es, &q, &eq) != 'a') - 549: 8d 45 e0 lea -0x20(%ebp),%eax - 54c: 50 push %eax - 54d: 8d 45 e4 lea -0x1c(%ebp),%eax - 550: 50 push %eax - 551: 57 push %edi - 552: 56 push %esi - 553: e8 fe fd ff ff call 356 - 558: 83 c4 20 add $0x20,%esp - 55b: 83 f8 61 cmp $0x61,%eax - 55e: 75 9e jne 4fe + 51a: 8d 45 e0 lea -0x20(%ebp),%eax + 51d: 50 push %eax + 51e: 8d 45 e4 lea -0x1c(%ebp),%eax + 521: 50 push %eax + 522: 57 push %edi + 523: 56 push %esi + 524: e8 02 fe ff ff call 32b + 529: 83 c4 20 add $0x20,%esp + 52c: 83 f8 61 cmp $0x61,%eax + 52f: 75 9e jne 4cf switch(tok){ - 560: 83 fb 3c cmp $0x3c,%ebx - 563: 74 a6 je 50b - 565: 83 fb 3e cmp $0x3e,%ebx - 568: 74 25 je 58f - 56a: 83 fb 2b cmp $0x2b,%ebx - 56d: 75 b7 jne 526 + 531: 83 fb 3c cmp $0x3c,%ebx + 534: 74 a6 je 4dc + 536: 83 fb 3e cmp $0x3e,%ebx + 539: 74 25 je 560 + 53b: 83 fb 2b cmp $0x2b,%ebx + 53e: 75 b7 jne 4f7 case '>': cmd = redircmd(cmd, q, eq, O_WRONLY|O_CREATE, 1); break; case '+': // >> cmd = redircmd(cmd, q, eq, O_WRONLY|O_CREATE, 1); - 56f: 83 ec 0c sub $0xc,%esp - 572: 6a 01 push $0x1 - 574: 68 01 02 00 00 push $0x201 - 579: ff 75 e0 pushl -0x20(%ebp) - 57c: ff 75 e4 pushl -0x1c(%ebp) - 57f: ff 75 08 pushl 0x8(%ebp) - 582: e8 db fc ff ff call 262 - 587: 89 45 08 mov %eax,0x8(%ebp) + 540: 83 ec 0c sub $0xc,%esp + 543: 6a 01 push $0x1 + 545: 68 01 02 00 00 push $0x201 + 54a: ff 75 e0 push -0x20(%ebp) + 54d: ff 75 e4 push -0x1c(%ebp) + 550: ff 75 08 push 0x8(%ebp) + 553: e8 ef fc ff ff call 247 + 558: 89 45 08 mov %eax,0x8(%ebp) break; - 58a: 83 c4 20 add $0x20,%esp - 58d: eb 97 jmp 526 + 55b: 83 c4 20 add $0x20,%esp + 55e: eb 97 jmp 4f7 cmd = redircmd(cmd, q, eq, O_WRONLY|O_CREATE, 1); - 58f: 83 ec 0c sub $0xc,%esp - 592: 6a 01 push $0x1 - 594: 68 01 02 00 00 push $0x201 - 599: ff 75 e0 pushl -0x20(%ebp) - 59c: ff 75 e4 pushl -0x1c(%ebp) - 59f: ff 75 08 pushl 0x8(%ebp) - 5a2: e8 bb fc ff ff call 262 - 5a7: 89 45 08 mov %eax,0x8(%ebp) + 560: 83 ec 0c sub $0xc,%esp + 563: 6a 01 push $0x1 + 565: 68 01 02 00 00 push $0x201 + 56a: ff 75 e0 push -0x20(%ebp) + 56d: ff 75 e4 push -0x1c(%ebp) + 570: ff 75 08 push 0x8(%ebp) + 573: e8 cf fc ff ff call 247 + 578: 89 45 08 mov %eax,0x8(%ebp) break; - 5aa: 83 c4 20 add $0x20,%esp - 5ad: e9 74 ff ff ff jmp 526 + 57b: 83 c4 20 add $0x20,%esp + 57e: e9 74 ff ff ff jmp 4f7 } } return cmd; } - 5b2: 8b 45 08 mov 0x8(%ebp),%eax - 5b5: 8d 65 f4 lea -0xc(%ebp),%esp - 5b8: 5b pop %ebx - 5b9: 5e pop %esi - 5ba: 5f pop %edi - 5bb: 5d pop %ebp - 5bc: c3 ret - -000005bd : + 583: 8b 45 08 mov 0x8(%ebp),%eax + 586: 8d 65 f4 lea -0xc(%ebp),%esp + 589: 5b pop %ebx + 58a: 5e pop %esi + 58b: 5f pop %edi + 58c: 5d pop %ebp + 58d: c3 ret + +0000058e : return cmd; } struct cmd* parseexec(char **ps, char *es) { - 5bd: f3 0f 1e fb endbr32 - 5c1: 55 push %ebp - 5c2: 89 e5 mov %esp,%ebp - 5c4: 57 push %edi - 5c5: 56 push %esi - 5c6: 53 push %ebx - 5c7: 83 ec 30 sub $0x30,%esp - 5ca: 8b 75 08 mov 0x8(%ebp),%esi - 5cd: 8b 7d 0c mov 0xc(%ebp),%edi + 58e: 55 push %ebp + 58f: 89 e5 mov %esp,%ebp + 591: 57 push %edi + 592: 56 push %esi + 593: 53 push %ebx + 594: 83 ec 30 sub $0x30,%esp + 597: 8b 75 08 mov 0x8(%ebp),%esi + 59a: 8b 7d 0c mov 0xc(%ebp),%edi char *q, *eq; int tok, argc; struct execcmd *cmd; struct cmd *ret; if(peek(ps, es, "(")) - 5d0: 68 a8 10 00 00 push $0x10a8 - 5d5: 57 push %edi - 5d6: 56 push %esi - 5d7: e8 a1 fe ff ff call 47d - 5dc: 83 c4 10 add $0x10,%esp - 5df: 85 c0 test %eax,%eax - 5e1: 75 1d jne 600 - 5e3: 89 c3 mov %eax,%ebx + 59d: 68 20 10 00 00 push $0x1020 + 5a2: 57 push %edi + 5a3: 56 push %esi + 5a4: e8 ab fe ff ff call 454 + 5a9: 83 c4 10 add $0x10,%esp + 5ac: 85 c0 test %eax,%eax + 5ae: 75 1d jne 5cd + 5b0: 89 c3 mov %eax,%ebx return parseblock(ps, es); ret = execcmd(); - 5e5: e8 4a fc ff ff call 234 - 5ea: 89 45 d0 mov %eax,-0x30(%ebp) + 5b2: e8 66 fc ff ff call 21d + 5b7: 89 45 d0 mov %eax,-0x30(%ebp) cmd = (struct execcmd*)ret; argc = 0; ret = parseredirs(ret, ps, es); - 5ed: 83 ec 04 sub $0x4,%esp - 5f0: 57 push %edi - 5f1: 56 push %esi - 5f2: 50 push %eax - 5f3: e8 f1 fe ff ff call 4e9 - 5f8: 89 45 d4 mov %eax,-0x2c(%ebp) + 5ba: 83 ec 04 sub $0x4,%esp + 5bd: 57 push %edi + 5be: 56 push %esi + 5bf: 50 push %eax + 5c0: e8 f9 fe ff ff call 4be + 5c5: 89 45 d4 mov %eax,-0x2c(%ebp) while(!peek(ps, es, "|)&;")){ - 5fb: 83 c4 10 add $0x10,%esp - 5fe: eb 3b jmp 63b + 5c8: 83 c4 10 add $0x10,%esp + 5cb: eb 3b jmp 608 return parseblock(ps, es); - 600: 83 ec 08 sub $0x8,%esp - 603: 57 push %edi - 604: 56 push %esi - 605: e8 98 01 00 00 call 7a2 - 60a: 89 45 d4 mov %eax,-0x2c(%ebp) - 60d: 83 c4 10 add $0x10,%esp + 5cd: 83 ec 08 sub $0x8,%esp + 5d0: 57 push %edi + 5d1: 56 push %esi + 5d2: e8 8f 01 00 00 call 766 + 5d7: 89 45 d4 mov %eax,-0x2c(%ebp) + 5da: 83 c4 10 add $0x10,%esp ret = parseredirs(ret, ps, es); } cmd->argv[argc] = 0; cmd->eargv[argc] = 0; return ret; } - 610: 8b 45 d4 mov -0x2c(%ebp),%eax - 613: 8d 65 f4 lea -0xc(%ebp),%esp - 616: 5b pop %ebx - 617: 5e pop %esi - 618: 5f pop %edi - 619: 5d pop %ebp - 61a: c3 ret + 5dd: 8b 45 d4 mov -0x2c(%ebp),%eax + 5e0: 8d 65 f4 lea -0xc(%ebp),%esp + 5e3: 5b pop %ebx + 5e4: 5e pop %esi + 5e5: 5f pop %edi + 5e6: 5d pop %ebp + 5e7: c3 ret panic("syntax"); - 61b: 83 ec 0c sub $0xc,%esp - 61e: 68 aa 10 00 00 push $0x10aa - 623: e8 21 fa ff ff call 49 + 5e8: 83 ec 0c sub $0xc,%esp + 5eb: 68 22 10 00 00 push $0x1022 + 5f0: e8 4a fa ff ff call 3f ret = parseredirs(ret, ps, es); - 628: 83 ec 04 sub $0x4,%esp - 62b: 57 push %edi - 62c: 56 push %esi - 62d: ff 75 d4 pushl -0x2c(%ebp) - 630: e8 b4 fe ff ff call 4e9 - 635: 89 45 d4 mov %eax,-0x2c(%ebp) - 638: 83 c4 10 add $0x10,%esp + 5f5: 83 ec 04 sub $0x4,%esp + 5f8: 57 push %edi + 5f9: 56 push %esi + 5fa: ff 75 d4 push -0x2c(%ebp) + 5fd: e8 bc fe ff ff call 4be + 602: 89 45 d4 mov %eax,-0x2c(%ebp) + 605: 83 c4 10 add $0x10,%esp while(!peek(ps, es, "|)&;")){ - 63b: 83 ec 04 sub $0x4,%esp - 63e: 68 bf 10 00 00 push $0x10bf - 643: 57 push %edi - 644: 56 push %esi - 645: e8 33 fe ff ff call 47d - 64a: 83 c4 10 add $0x10,%esp - 64d: 85 c0 test %eax,%eax - 64f: 75 41 jne 692 + 608: 83 ec 04 sub $0x4,%esp + 60b: 68 37 10 00 00 push $0x1037 + 610: 57 push %edi + 611: 56 push %esi + 612: e8 3d fe ff ff call 454 + 617: 83 c4 10 add $0x10,%esp + 61a: 85 c0 test %eax,%eax + 61c: 75 41 jne 65f if((tok=gettoken(ps, es, &q, &eq)) == 0) - 651: 8d 45 e0 lea -0x20(%ebp),%eax - 654: 50 push %eax - 655: 8d 45 e4 lea -0x1c(%ebp),%eax - 658: 50 push %eax - 659: 57 push %edi - 65a: 56 push %esi - 65b: e8 f6 fc ff ff call 356 - 660: 83 c4 10 add $0x10,%esp - 663: 85 c0 test %eax,%eax - 665: 74 2b je 692 + 61e: 8d 45 e0 lea -0x20(%ebp),%eax + 621: 50 push %eax + 622: 8d 45 e4 lea -0x1c(%ebp),%eax + 625: 50 push %eax + 626: 57 push %edi + 627: 56 push %esi + 628: e8 fe fc ff ff call 32b + 62d: 83 c4 10 add $0x10,%esp + 630: 85 c0 test %eax,%eax + 632: 74 2b je 65f if(tok != 'a') - 667: 83 f8 61 cmp $0x61,%eax - 66a: 75 af jne 61b + 634: 83 f8 61 cmp $0x61,%eax + 637: 75 af jne 5e8 cmd->argv[argc] = q; - 66c: 8b 45 e4 mov -0x1c(%ebp),%eax - 66f: 8b 55 d0 mov -0x30(%ebp),%edx - 672: 89 44 9a 04 mov %eax,0x4(%edx,%ebx,4) + 639: 8b 45 e4 mov -0x1c(%ebp),%eax + 63c: 8b 55 d0 mov -0x30(%ebp),%edx + 63f: 89 44 9a 04 mov %eax,0x4(%edx,%ebx,4) cmd->eargv[argc] = eq; - 676: 8b 45 e0 mov -0x20(%ebp),%eax - 679: 89 44 9a 2c mov %eax,0x2c(%edx,%ebx,4) + 643: 8b 45 e0 mov -0x20(%ebp),%eax + 646: 89 44 9a 2c mov %eax,0x2c(%edx,%ebx,4) argc++; - 67d: 83 c3 01 add $0x1,%ebx + 64a: 83 c3 01 add $0x1,%ebx if(argc >= MAXARGS) - 680: 83 fb 0a cmp $0xa,%ebx - 683: 75 a3 jne 628 + 64d: 83 fb 0a cmp $0xa,%ebx + 650: 75 a3 jne 5f5 panic("too many args"); - 685: 83 ec 0c sub $0xc,%esp - 688: 68 b1 10 00 00 push $0x10b1 - 68d: e8 b7 f9 ff ff call 49 + 652: 83 ec 0c sub $0xc,%esp + 655: 68 29 10 00 00 push $0x1029 + 65a: e8 e0 f9 ff ff call 3f cmd->argv[argc] = 0; - 692: 8b 45 d0 mov -0x30(%ebp),%eax - 695: 8d 04 98 lea (%eax,%ebx,4),%eax - 698: c7 40 04 00 00 00 00 movl $0x0,0x4(%eax) + 65f: 8b 45 d0 mov -0x30(%ebp),%eax + 662: c7 44 98 04 00 00 00 movl $0x0,0x4(%eax,%ebx,4) + 669: 00 cmd->eargv[argc] = 0; - 69f: c7 40 2c 00 00 00 00 movl $0x0,0x2c(%eax) + 66a: c7 44 98 2c 00 00 00 movl $0x0,0x2c(%eax,%ebx,4) + 671: 00 return ret; - 6a6: e9 65 ff ff ff jmp 610 + 672: e9 66 ff ff ff jmp 5dd -000006ab : +00000677 : { - 6ab: f3 0f 1e fb endbr32 - 6af: 55 push %ebp - 6b0: 89 e5 mov %esp,%ebp - 6b2: 57 push %edi - 6b3: 56 push %esi - 6b4: 53 push %ebx - 6b5: 83 ec 14 sub $0x14,%esp - 6b8: 8b 75 08 mov 0x8(%ebp),%esi - 6bb: 8b 7d 0c mov 0xc(%ebp),%edi + 677: 55 push %ebp + 678: 89 e5 mov %esp,%ebp + 67a: 57 push %edi + 67b: 56 push %esi + 67c: 53 push %ebx + 67d: 83 ec 14 sub $0x14,%esp + 680: 8b 75 08 mov 0x8(%ebp),%esi + 683: 8b 7d 0c mov 0xc(%ebp),%edi cmd = parseexec(ps, es); - 6be: 57 push %edi - 6bf: 56 push %esi - 6c0: e8 f8 fe ff ff call 5bd - 6c5: 89 c3 mov %eax,%ebx + 686: 57 push %edi + 687: 56 push %esi + 688: e8 01 ff ff ff call 58e + 68d: 89 c3 mov %eax,%ebx if(peek(ps, es, "|")){ - 6c7: 83 c4 0c add $0xc,%esp - 6ca: 68 c4 10 00 00 push $0x10c4 - 6cf: 57 push %edi - 6d0: 56 push %esi - 6d1: e8 a7 fd ff ff call 47d - 6d6: 83 c4 10 add $0x10,%esp - 6d9: 85 c0 test %eax,%eax - 6db: 75 0a jne 6e7 + 68f: 83 c4 0c add $0xc,%esp + 692: 68 3c 10 00 00 push $0x103c + 697: 57 push %edi + 698: 56 push %esi + 699: e8 b6 fd ff ff call 454 + 69e: 83 c4 10 add $0x10,%esp + 6a1: 85 c0 test %eax,%eax + 6a3: 75 0a jne 6af } - 6dd: 89 d8 mov %ebx,%eax - 6df: 8d 65 f4 lea -0xc(%ebp),%esp - 6e2: 5b pop %ebx - 6e3: 5e pop %esi - 6e4: 5f pop %edi - 6e5: 5d pop %ebp - 6e6: c3 ret + 6a5: 89 d8 mov %ebx,%eax + 6a7: 8d 65 f4 lea -0xc(%ebp),%esp + 6aa: 5b pop %ebx + 6ab: 5e pop %esi + 6ac: 5f pop %edi + 6ad: 5d pop %ebp + 6ae: c3 ret gettoken(ps, es, 0, 0); - 6e7: 6a 00 push $0x0 - 6e9: 6a 00 push $0x0 - 6eb: 57 push %edi - 6ec: 56 push %esi - 6ed: e8 64 fc ff ff call 356 + 6af: 6a 00 push $0x0 + 6b1: 6a 00 push $0x0 + 6b3: 57 push %edi + 6b4: 56 push %esi + 6b5: e8 71 fc ff ff call 32b cmd = pipecmd(cmd, parsepipe(ps, es)); - 6f2: 83 c4 08 add $0x8,%esp - 6f5: 57 push %edi - 6f6: 56 push %esi - 6f7: e8 af ff ff ff call 6ab - 6fc: 83 c4 08 add $0x8,%esp - 6ff: 50 push %eax - 700: 53 push %ebx - 701: e8 a8 fb ff ff call 2ae - 706: 89 c3 mov %eax,%ebx - 708: 83 c4 10 add $0x10,%esp + 6ba: 83 c4 08 add $0x8,%esp + 6bd: 57 push %edi + 6be: 56 push %esi + 6bf: e8 b3 ff ff ff call 677 + 6c4: 83 c4 08 add $0x8,%esp + 6c7: 50 push %eax + 6c8: 53 push %ebx + 6c9: e8 c1 fb ff ff call 28f + 6ce: 89 c3 mov %eax,%ebx + 6d0: 83 c4 10 add $0x10,%esp return cmd; - 70b: eb d0 jmp 6dd + 6d3: eb d0 jmp 6a5 -0000070d : +000006d5 : { - 70d: f3 0f 1e fb endbr32 - 711: 55 push %ebp - 712: 89 e5 mov %esp,%ebp - 714: 57 push %edi - 715: 56 push %esi - 716: 53 push %ebx - 717: 83 ec 14 sub $0x14,%esp - 71a: 8b 75 08 mov 0x8(%ebp),%esi - 71d: 8b 7d 0c mov 0xc(%ebp),%edi + 6d5: 55 push %ebp + 6d6: 89 e5 mov %esp,%ebp + 6d8: 57 push %edi + 6d9: 56 push %esi + 6da: 53 push %ebx + 6db: 83 ec 14 sub $0x14,%esp + 6de: 8b 75 08 mov 0x8(%ebp),%esi + 6e1: 8b 7d 0c mov 0xc(%ebp),%edi cmd = parsepipe(ps, es); - 720: 57 push %edi - 721: 56 push %esi - 722: e8 84 ff ff ff call 6ab - 727: 89 c3 mov %eax,%ebx + 6e4: 57 push %edi + 6e5: 56 push %esi + 6e6: e8 8c ff ff ff call 677 + 6eb: 89 c3 mov %eax,%ebx while(peek(ps, es, "&")){ - 729: 83 c4 10 add $0x10,%esp - 72c: 83 ec 04 sub $0x4,%esp - 72f: 68 c6 10 00 00 push $0x10c6 - 734: 57 push %edi - 735: 56 push %esi - 736: e8 42 fd ff ff call 47d - 73b: 83 c4 10 add $0x10,%esp - 73e: 85 c0 test %eax,%eax - 740: 74 1a je 75c + 6ed: 83 c4 10 add $0x10,%esp + 6f0: eb 18 jmp 70a gettoken(ps, es, 0, 0); - 742: 6a 00 push $0x0 - 744: 6a 00 push $0x0 - 746: 57 push %edi - 747: 56 push %esi - 748: e8 09 fc ff ff call 356 + 6f2: 6a 00 push $0x0 + 6f4: 6a 00 push $0x0 + 6f6: 57 push %edi + 6f7: 56 push %esi + 6f8: e8 2e fc ff ff call 32b cmd = backcmd(cmd); - 74d: 89 1c 24 mov %ebx,(%esp) - 750: e8 cd fb ff ff call 322 - 755: 89 c3 mov %eax,%ebx - 757: 83 c4 10 add $0x10,%esp - 75a: eb d0 jmp 72c + 6fd: 89 1c 24 mov %ebx,(%esp) + 700: e8 f6 fb ff ff call 2fb + 705: 89 c3 mov %eax,%ebx + 707: 83 c4 10 add $0x10,%esp + while(peek(ps, es, "&")){ + 70a: 83 ec 04 sub $0x4,%esp + 70d: 68 3e 10 00 00 push $0x103e + 712: 57 push %edi + 713: 56 push %esi + 714: e8 3b fd ff ff call 454 + 719: 83 c4 10 add $0x10,%esp + 71c: 85 c0 test %eax,%eax + 71e: 75 d2 jne 6f2 if(peek(ps, es, ";")){ - 75c: 83 ec 04 sub $0x4,%esp - 75f: 68 c2 10 00 00 push $0x10c2 - 764: 57 push %edi - 765: 56 push %esi - 766: e8 12 fd ff ff call 47d - 76b: 83 c4 10 add $0x10,%esp - 76e: 85 c0 test %eax,%eax - 770: 75 0a jne 77c + 720: 83 ec 04 sub $0x4,%esp + 723: 68 3a 10 00 00 push $0x103a + 728: 57 push %edi + 729: 56 push %esi + 72a: e8 25 fd ff ff call 454 + 72f: 83 c4 10 add $0x10,%esp + 732: 85 c0 test %eax,%eax + 734: 75 0a jne 740 } - 772: 89 d8 mov %ebx,%eax - 774: 8d 65 f4 lea -0xc(%ebp),%esp - 777: 5b pop %ebx - 778: 5e pop %esi - 779: 5f pop %edi - 77a: 5d pop %ebp - 77b: c3 ret + 736: 89 d8 mov %ebx,%eax + 738: 8d 65 f4 lea -0xc(%ebp),%esp + 73b: 5b pop %ebx + 73c: 5e pop %esi + 73d: 5f pop %edi + 73e: 5d pop %ebp + 73f: c3 ret gettoken(ps, es, 0, 0); - 77c: 6a 00 push $0x0 - 77e: 6a 00 push $0x0 - 780: 57 push %edi - 781: 56 push %esi - 782: e8 cf fb ff ff call 356 + 740: 6a 00 push $0x0 + 742: 6a 00 push $0x0 + 744: 57 push %edi + 745: 56 push %esi + 746: e8 e0 fb ff ff call 32b cmd = listcmd(cmd, parseline(ps, es)); - 787: 83 c4 08 add $0x8,%esp - 78a: 57 push %edi - 78b: 56 push %esi - 78c: e8 7c ff ff ff call 70d - 791: 83 c4 08 add $0x8,%esp - 794: 50 push %eax - 795: 53 push %ebx - 796: e8 4d fb ff ff call 2e8 - 79b: 89 c3 mov %eax,%ebx - 79d: 83 c4 10 add $0x10,%esp + 74b: 83 c4 08 add $0x8,%esp + 74e: 57 push %edi + 74f: 56 push %esi + 750: e8 80 ff ff ff call 6d5 + 755: 83 c4 08 add $0x8,%esp + 758: 50 push %eax + 759: 53 push %ebx + 75a: e8 66 fb ff ff call 2c5 + 75f: 89 c3 mov %eax,%ebx + 761: 83 c4 10 add $0x10,%esp return cmd; - 7a0: eb d0 jmp 772 + 764: eb d0 jmp 736 -000007a2 : +00000766 : { - 7a2: f3 0f 1e fb endbr32 - 7a6: 55 push %ebp - 7a7: 89 e5 mov %esp,%ebp - 7a9: 57 push %edi - 7aa: 56 push %esi - 7ab: 53 push %ebx - 7ac: 83 ec 10 sub $0x10,%esp - 7af: 8b 5d 08 mov 0x8(%ebp),%ebx - 7b2: 8b 75 0c mov 0xc(%ebp),%esi + 766: 55 push %ebp + 767: 89 e5 mov %esp,%ebp + 769: 57 push %edi + 76a: 56 push %esi + 76b: 53 push %ebx + 76c: 83 ec 10 sub $0x10,%esp + 76f: 8b 5d 08 mov 0x8(%ebp),%ebx + 772: 8b 75 0c mov 0xc(%ebp),%esi if(!peek(ps, es, "(")) - 7b5: 68 a8 10 00 00 push $0x10a8 - 7ba: 56 push %esi - 7bb: 53 push %ebx - 7bc: e8 bc fc ff ff call 47d - 7c1: 83 c4 10 add $0x10,%esp - 7c4: 85 c0 test %eax,%eax - 7c6: 74 4b je 813 + 775: 68 20 10 00 00 push $0x1020 + 77a: 56 push %esi + 77b: 53 push %ebx + 77c: e8 d3 fc ff ff call 454 + 781: 83 c4 10 add $0x10,%esp + 784: 85 c0 test %eax,%eax + 786: 74 4b je 7d3 gettoken(ps, es, 0, 0); - 7c8: 6a 00 push $0x0 - 7ca: 6a 00 push $0x0 - 7cc: 56 push %esi - 7cd: 53 push %ebx - 7ce: e8 83 fb ff ff call 356 + 788: 6a 00 push $0x0 + 78a: 6a 00 push $0x0 + 78c: 56 push %esi + 78d: 53 push %ebx + 78e: e8 98 fb ff ff call 32b cmd = parseline(ps, es); - 7d3: 83 c4 08 add $0x8,%esp - 7d6: 56 push %esi - 7d7: 53 push %ebx - 7d8: e8 30 ff ff ff call 70d - 7dd: 89 c7 mov %eax,%edi + 793: 83 c4 08 add $0x8,%esp + 796: 56 push %esi + 797: 53 push %ebx + 798: e8 38 ff ff ff call 6d5 + 79d: 89 c7 mov %eax,%edi if(!peek(ps, es, ")")) - 7df: 83 c4 0c add $0xc,%esp - 7e2: 68 e4 10 00 00 push $0x10e4 - 7e7: 56 push %esi - 7e8: 53 push %ebx - 7e9: e8 8f fc ff ff call 47d - 7ee: 83 c4 10 add $0x10,%esp - 7f1: 85 c0 test %eax,%eax - 7f3: 74 2b je 820 + 79f: 83 c4 0c add $0xc,%esp + 7a2: 68 5c 10 00 00 push $0x105c + 7a7: 56 push %esi + 7a8: 53 push %ebx + 7a9: e8 a6 fc ff ff call 454 + 7ae: 83 c4 10 add $0x10,%esp + 7b1: 85 c0 test %eax,%eax + 7b3: 74 2b je 7e0 gettoken(ps, es, 0, 0); - 7f5: 6a 00 push $0x0 - 7f7: 6a 00 push $0x0 - 7f9: 56 push %esi - 7fa: 53 push %ebx - 7fb: e8 56 fb ff ff call 356 + 7b5: 6a 00 push $0x0 + 7b7: 6a 00 push $0x0 + 7b9: 56 push %esi + 7ba: 53 push %ebx + 7bb: e8 6b fb ff ff call 32b cmd = parseredirs(cmd, ps, es); - 800: 83 c4 0c add $0xc,%esp - 803: 56 push %esi - 804: 53 push %ebx - 805: 57 push %edi - 806: e8 de fc ff ff call 4e9 + 7c0: 83 c4 0c add $0xc,%esp + 7c3: 56 push %esi + 7c4: 53 push %ebx + 7c5: 57 push %edi + 7c6: e8 f3 fc ff ff call 4be } - 80b: 8d 65 f4 lea -0xc(%ebp),%esp - 80e: 5b pop %ebx - 80f: 5e pop %esi - 810: 5f pop %edi - 811: 5d pop %ebp - 812: c3 ret + 7cb: 8d 65 f4 lea -0xc(%ebp),%esp + 7ce: 5b pop %ebx + 7cf: 5e pop %esi + 7d0: 5f pop %edi + 7d1: 5d pop %ebp + 7d2: c3 ret panic("parseblock"); - 813: 83 ec 0c sub $0xc,%esp - 816: 68 c8 10 00 00 push $0x10c8 - 81b: e8 29 f8 ff ff call 49 + 7d3: 83 ec 0c sub $0xc,%esp + 7d6: 68 40 10 00 00 push $0x1040 + 7db: e8 5f f8 ff ff call 3f panic("syntax - missing )"); - 820: 83 ec 0c sub $0xc,%esp - 823: 68 d3 10 00 00 push $0x10d3 - 828: e8 1c f8 ff ff call 49 + 7e0: 83 ec 0c sub $0xc,%esp + 7e3: 68 4b 10 00 00 push $0x104b + 7e8: e8 52 f8 ff ff call 3f -0000082d : +000007ed : // NUL-terminate all the counted strings. struct cmd* nulterminate(struct cmd *cmd) { - 82d: f3 0f 1e fb endbr32 - 831: 55 push %ebp - 832: 89 e5 mov %esp,%ebp - 834: 53 push %ebx - 835: 83 ec 04 sub $0x4,%esp - 838: 8b 5d 08 mov 0x8(%ebp),%ebx + 7ed: 55 push %ebp + 7ee: 89 e5 mov %esp,%ebp + 7f0: 53 push %ebx + 7f1: 83 ec 04 sub $0x4,%esp + 7f4: 8b 5d 08 mov 0x8(%ebp),%ebx struct execcmd *ecmd; struct listcmd *lcmd; struct pipecmd *pcmd; struct redircmd *rcmd; if(cmd == 0) - 83b: 85 db test %ebx,%ebx - 83d: 74 3d je 87c + 7f7: 85 db test %ebx,%ebx + 7f9: 74 3c je 837 return 0; switch(cmd->type){ - 83f: 83 3b 05 cmpl $0x5,(%ebx) - 842: 77 38 ja 87c - 844: 8b 03 mov (%ebx),%eax - 846: 3e ff 24 85 24 11 00 notrack jmp *0x1124(,%eax,4) - 84d: 00 + 7fb: 83 3b 05 cmpl $0x5,(%ebx) + 7fe: 77 37 ja 837 + 800: 8b 03 mov (%ebx),%eax + 802: ff 24 85 9c 10 00 00 jmp *0x109c(,%eax,4) case EXEC: ecmd = (struct execcmd*)cmd; for(i=0; ecmd->argv[i]; i++) - 84e: 83 7b 04 00 cmpl $0x0,0x4(%ebx) - 852: 74 28 je 87c - 854: 8d 43 08 lea 0x8(%ebx),%eax + 809: 83 7b 04 00 cmpl $0x0,0x4(%ebx) + 80d: 74 28 je 837 + 80f: 8d 43 08 lea 0x8(%ebx),%eax *ecmd->eargv[i] = 0; - 857: 8b 50 24 mov 0x24(%eax),%edx - 85a: c6 02 00 movb $0x0,(%edx) + 812: 8b 50 24 mov 0x24(%eax),%edx + 815: c6 02 00 movb $0x0,(%edx) for(i=0; ecmd->argv[i]; i++) - 85d: 83 c0 04 add $0x4,%eax - 860: 83 78 fc 00 cmpl $0x0,-0x4(%eax) - 864: 75 f1 jne 857 - 866: eb 14 jmp 87c + 818: 83 c0 04 add $0x4,%eax + 81b: 83 78 fc 00 cmpl $0x0,-0x4(%eax) + 81f: 75 f1 jne 812 + 821: eb 14 jmp 837 break; case REDIR: rcmd = (struct redircmd*)cmd; nulterminate(rcmd->cmd); - 868: 83 ec 0c sub $0xc,%esp - 86b: ff 73 04 pushl 0x4(%ebx) - 86e: e8 ba ff ff ff call 82d + 823: 83 ec 0c sub $0xc,%esp + 826: ff 73 04 push 0x4(%ebx) + 829: e8 bf ff ff ff call 7ed *rcmd->efile = 0; - 873: 8b 43 0c mov 0xc(%ebx),%eax - 876: c6 00 00 movb $0x0,(%eax) + 82e: 8b 43 0c mov 0xc(%ebx),%eax + 831: c6 00 00 movb $0x0,(%eax) break; - 879: 83 c4 10 add $0x10,%esp + 834: 83 c4 10 add $0x10,%esp bcmd = (struct backcmd*)cmd; nulterminate(bcmd->cmd); break; } return cmd; } - 87c: 89 d8 mov %ebx,%eax - 87e: 8b 5d fc mov -0x4(%ebp),%ebx - 881: c9 leave - 882: c3 ret + 837: 89 d8 mov %ebx,%eax + 839: 8b 5d fc mov -0x4(%ebp),%ebx + 83c: c9 leave + 83d: c3 ret nulterminate(pcmd->left); - 883: 83 ec 0c sub $0xc,%esp - 886: ff 73 04 pushl 0x4(%ebx) - 889: e8 9f ff ff ff call 82d + 83e: 83 ec 0c sub $0xc,%esp + 841: ff 73 04 push 0x4(%ebx) + 844: e8 a4 ff ff ff call 7ed nulterminate(pcmd->right); - 88e: 83 c4 04 add $0x4,%esp - 891: ff 73 08 pushl 0x8(%ebx) - 894: e8 94 ff ff ff call 82d + 849: 83 c4 04 add $0x4,%esp + 84c: ff 73 08 push 0x8(%ebx) + 84f: e8 99 ff ff ff call 7ed break; - 899: 83 c4 10 add $0x10,%esp - 89c: eb de jmp 87c + 854: 83 c4 10 add $0x10,%esp + 857: eb de jmp 837 nulterminate(lcmd->left); - 89e: 83 ec 0c sub $0xc,%esp - 8a1: ff 73 04 pushl 0x4(%ebx) - 8a4: e8 84 ff ff ff call 82d + 859: 83 ec 0c sub $0xc,%esp + 85c: ff 73 04 push 0x4(%ebx) + 85f: e8 89 ff ff ff call 7ed nulterminate(lcmd->right); - 8a9: 83 c4 04 add $0x4,%esp - 8ac: ff 73 08 pushl 0x8(%ebx) - 8af: e8 79 ff ff ff call 82d + 864: 83 c4 04 add $0x4,%esp + 867: ff 73 08 push 0x8(%ebx) + 86a: e8 7e ff ff ff call 7ed break; - 8b4: 83 c4 10 add $0x10,%esp - 8b7: eb c3 jmp 87c + 86f: 83 c4 10 add $0x10,%esp + 872: eb c3 jmp 837 nulterminate(bcmd->cmd); - 8b9: 83 ec 0c sub $0xc,%esp - 8bc: ff 73 04 pushl 0x4(%ebx) - 8bf: e8 69 ff ff ff call 82d + 874: 83 ec 0c sub $0xc,%esp + 877: ff 73 04 push 0x4(%ebx) + 87a: e8 6e ff ff ff call 7ed break; - 8c4: 83 c4 10 add $0x10,%esp - 8c7: eb b3 jmp 87c + 87f: 83 c4 10 add $0x10,%esp + 882: eb b3 jmp 837 -000008c9 : +00000884 : { - 8c9: f3 0f 1e fb endbr32 - 8cd: 55 push %ebp - 8ce: 89 e5 mov %esp,%ebp - 8d0: 56 push %esi - 8d1: 53 push %ebx + 884: 55 push %ebp + 885: 89 e5 mov %esp,%ebp + 887: 56 push %esi + 888: 53 push %ebx es = s + strlen(s); - 8d2: 8b 5d 08 mov 0x8(%ebp),%ebx - 8d5: 83 ec 0c sub $0xc,%esp - 8d8: 53 push %ebx - 8d9: e8 87 01 00 00 call a65 - 8de: 01 c3 add %eax,%ebx + 889: 8b 5d 08 mov 0x8(%ebp),%ebx + 88c: 83 ec 0c sub $0xc,%esp + 88f: 53 push %ebx + 890: e8 7d 01 00 00 call a12 + 895: 01 c3 add %eax,%ebx cmd = parseline(&s, es); - 8e0: 83 c4 08 add $0x8,%esp - 8e3: 53 push %ebx - 8e4: 8d 45 08 lea 0x8(%ebp),%eax - 8e7: 50 push %eax - 8e8: e8 20 fe ff ff call 70d - 8ed: 89 c6 mov %eax,%esi + 897: 83 c4 08 add $0x8,%esp + 89a: 53 push %ebx + 89b: 8d 45 08 lea 0x8(%ebp),%eax + 89e: 50 push %eax + 89f: e8 31 fe ff ff call 6d5 + 8a4: 89 c6 mov %eax,%esi peek(&s, es, ""); - 8ef: 83 c4 0c add $0xc,%esp - 8f2: 68 72 10 00 00 push $0x1072 - 8f7: 53 push %ebx - 8f8: 8d 45 08 lea 0x8(%ebp),%eax - 8fb: 50 push %eax - 8fc: e8 7c fb ff ff call 47d + 8a6: 83 c4 0c add $0xc,%esp + 8a9: 68 ea 0f 00 00 push $0xfea + 8ae: 53 push %ebx + 8af: 8d 45 08 lea 0x8(%ebp),%eax + 8b2: 50 push %eax + 8b3: e8 9c fb ff ff call 454 if(s != es){ - 901: 8b 45 08 mov 0x8(%ebp),%eax - 904: 83 c4 10 add $0x10,%esp - 907: 39 d8 cmp %ebx,%eax - 909: 75 12 jne 91d + 8b8: 8b 45 08 mov 0x8(%ebp),%eax + 8bb: 83 c4 10 add $0x10,%esp + 8be: 39 d8 cmp %ebx,%eax + 8c0: 75 12 jne 8d4 nulterminate(cmd); - 90b: 83 ec 0c sub $0xc,%esp - 90e: 56 push %esi - 90f: e8 19 ff ff ff call 82d + 8c2: 83 ec 0c sub $0xc,%esp + 8c5: 56 push %esi + 8c6: e8 22 ff ff ff call 7ed } - 914: 89 f0 mov %esi,%eax - 916: 8d 65 f8 lea -0x8(%ebp),%esp - 919: 5b pop %ebx - 91a: 5e pop %esi - 91b: 5d pop %ebp - 91c: c3 ret + 8cb: 89 f0 mov %esi,%eax + 8cd: 8d 65 f8 lea -0x8(%ebp),%esp + 8d0: 5b pop %ebx + 8d1: 5e pop %esi + 8d2: 5d pop %ebp + 8d3: c3 ret printf(2, "leftovers: %s\n", s); - 91d: 83 ec 04 sub $0x4,%esp - 920: 50 push %eax - 921: 68 e6 10 00 00 push $0x10e6 - 926: 6a 02 push $0x2 - 928: e8 0d 04 00 00 call d3a + 8d4: 83 ec 04 sub $0x4,%esp + 8d7: 50 push %eax + 8d8: 68 5e 10 00 00 push $0x105e + 8dd: 6a 02 push $0x2 + 8df: e8 ef 03 00 00 call cd3 panic("syntax"); - 92d: c7 04 24 aa 10 00 00 movl $0x10aa,(%esp) - 934: e8 10 f7 ff ff call 49 + 8e4: c7 04 24 22 10 00 00 movl $0x1022,(%esp) + 8eb: e8 4f f7 ff ff call 3f -00000939
: +000008f0
: { - 939: f3 0f 1e fb endbr32 - 93d: 8d 4c 24 04 lea 0x4(%esp),%ecx - 941: 83 e4 f0 and $0xfffffff0,%esp - 944: ff 71 fc pushl -0x4(%ecx) - 947: 55 push %ebp - 948: 89 e5 mov %esp,%ebp - 94a: 51 push %ecx - 94b: 83 ec 04 sub $0x4,%esp + 8f0: 8d 4c 24 04 lea 0x4(%esp),%ecx + 8f4: 83 e4 f0 and $0xfffffff0,%esp + 8f7: ff 71 fc push -0x4(%ecx) + 8fa: 55 push %ebp + 8fb: 89 e5 mov %esp,%ebp + 8fd: 51 push %ecx + 8fe: 83 ec 04 sub $0x4,%esp while((fd = open("console", O_RDWR)) >= 0){ - 94e: 83 ec 08 sub $0x8,%esp - 951: 6a 02 push $0x2 - 953: 68 f5 10 00 00 push $0x10f5 - 958: e8 d9 02 00 00 call c36 - 95d: 83 c4 10 add $0x10,%esp - 960: 85 c0 test %eax,%eax - 962: 78 21 js 985 + 901: 83 ec 08 sub $0x8,%esp + 904: 6a 02 push $0x2 + 906: 68 6d 10 00 00 push $0x106d + 90b: e8 bb 02 00 00 call bcb + 910: 83 c4 10 add $0x10,%esp + 913: 85 c0 test %eax,%eax + 915: 78 21 js 938 if(fd >= 3){ - 964: 83 f8 02 cmp $0x2,%eax - 967: 7e e5 jle 94e + 917: 83 f8 02 cmp $0x2,%eax + 91a: 7e e5 jle 901 close(fd); - 969: 83 ec 0c sub $0xc,%esp - 96c: 50 push %eax - 96d: e8 ac 02 00 00 call c1e + 91c: 83 ec 0c sub $0xc,%esp + 91f: 50 push %eax + 920: e8 8e 02 00 00 call bb3 break; - 972: 83 c4 10 add $0x10,%esp - 975: eb 0e jmp 985 + 925: 83 c4 10 add $0x10,%esp + 928: eb 0e jmp 938 if(fork1() == 0) - 977: e8 eb f6 ff ff call 67 - 97c: 85 c0 test %eax,%eax - 97e: 74 76 je 9f6 + 92a: e8 2a f7 ff ff call 59 + 92f: 85 c0 test %eax,%eax + 931: 74 76 je 9a9 wait(); - 980: e8 79 02 00 00 call bfe + 933: e8 5b 02 00 00 call b93 while(getcmd(buf, sizeof(buf)) >= 0){ - 985: 83 ec 08 sub $0x8,%esp - 988: 6a 64 push $0x64 - 98a: 68 a0 16 00 00 push $0x16a0 - 98f: e8 6c f6 ff ff call 0 - 994: 83 c4 10 add $0x10,%esp - 997: 85 c0 test %eax,%eax - 999: 78 70 js a0b + 938: 83 ec 08 sub $0x8,%esp + 93b: 6a 64 push $0x64 + 93d: 68 80 16 00 00 push $0x1680 + 942: e8 b9 f6 ff ff call 0 + 947: 83 c4 10 add $0x10,%esp + 94a: 85 c0 test %eax,%eax + 94c: 78 70 js 9be if(buf[0] == 'c' && buf[1] == 'd' && buf[2] == ' '){ - 99b: 80 3d a0 16 00 00 63 cmpb $0x63,0x16a0 - 9a2: 75 d3 jne 977 - 9a4: 80 3d a1 16 00 00 64 cmpb $0x64,0x16a1 - 9ab: 75 ca jne 977 - 9ad: 80 3d a2 16 00 00 20 cmpb $0x20,0x16a2 - 9b4: 75 c1 jne 977 + 94e: 80 3d 80 16 00 00 63 cmpb $0x63,0x1680 + 955: 75 d3 jne 92a + 957: 80 3d 81 16 00 00 64 cmpb $0x64,0x1681 + 95e: 75 ca jne 92a + 960: 80 3d 82 16 00 00 20 cmpb $0x20,0x1682 + 967: 75 c1 jne 92a buf[strlen(buf)-1] = 0; // chop \n - 9b6: 83 ec 0c sub $0xc,%esp - 9b9: 68 a0 16 00 00 push $0x16a0 - 9be: e8 a2 00 00 00 call a65 - 9c3: c6 80 9f 16 00 00 00 movb $0x0,0x169f(%eax) + 969: 83 ec 0c sub $0xc,%esp + 96c: 68 80 16 00 00 push $0x1680 + 971: e8 9c 00 00 00 call a12 + 976: c6 80 7f 16 00 00 00 movb $0x0,0x167f(%eax) if(chdir(buf+3) < 0) - 9ca: c7 04 24 a3 16 00 00 movl $0x16a3,(%esp) - 9d1: e8 90 02 00 00 call c66 - 9d6: 83 c4 10 add $0x10,%esp - 9d9: 85 c0 test %eax,%eax - 9db: 79 a8 jns 985 + 97d: c7 04 24 83 16 00 00 movl $0x1683,(%esp) + 984: e8 72 02 00 00 call bfb + 989: 83 c4 10 add $0x10,%esp + 98c: 85 c0 test %eax,%eax + 98e: 79 a8 jns 938 printf(2, "cannot cd %s\n", buf+3); - 9dd: 83 ec 04 sub $0x4,%esp - 9e0: 68 a3 16 00 00 push $0x16a3 - 9e5: 68 fd 10 00 00 push $0x10fd - 9ea: 6a 02 push $0x2 - 9ec: e8 49 03 00 00 call d3a - 9f1: 83 c4 10 add $0x10,%esp - 9f4: eb 8f jmp 985 + 990: 83 ec 04 sub $0x4,%esp + 993: 68 83 16 00 00 push $0x1683 + 998: 68 75 10 00 00 push $0x1075 + 99d: 6a 02 push $0x2 + 99f: e8 2f 03 00 00 call cd3 + 9a4: 83 c4 10 add $0x10,%esp + 9a7: eb 8f jmp 938 runcmd(parsecmd(buf)); - 9f6: 83 ec 0c sub $0xc,%esp - 9f9: 68 a0 16 00 00 push $0x16a0 - 9fe: e8 c6 fe ff ff call 8c9 - a03: 89 04 24 mov %eax,(%esp) - a06: e8 7f f6 ff ff call 8a + 9a9: 83 ec 0c sub $0xc,%esp + 9ac: 68 80 16 00 00 push $0x1680 + 9b1: e8 ce fe ff ff call 884 + 9b6: 89 04 24 mov %eax,(%esp) + 9b9: e8 ba f6 ff ff call 78 exit(); - a0b: e8 e6 01 00 00 call bf6 + 9be: e8 c8 01 00 00 call b8b -00000a10 : +000009c3 : #include "user.h" #include "x86.h" char* strcpy(char *s, const char *t) { - a10: f3 0f 1e fb endbr32 - a14: 55 push %ebp - a15: 89 e5 mov %esp,%ebp - a17: 53 push %ebx - a18: 8b 4d 08 mov 0x8(%ebp),%ecx - a1b: 8b 5d 0c mov 0xc(%ebp),%ebx + 9c3: 55 push %ebp + 9c4: 89 e5 mov %esp,%ebp + 9c6: 53 push %ebx + 9c7: 8b 4d 08 mov 0x8(%ebp),%ecx + 9ca: 8b 5d 0c mov 0xc(%ebp),%ebx char *os; os = s; while((*s++ = *t++) != 0) - a1e: b8 00 00 00 00 mov $0x0,%eax - a23: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - a27: 88 14 01 mov %dl,(%ecx,%eax,1) - a2a: 83 c0 01 add $0x1,%eax - a2d: 84 d2 test %dl,%dl - a2f: 75 f2 jne a23 + 9cd: b8 00 00 00 00 mov $0x0,%eax + 9d2: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx + 9d6: 88 14 01 mov %dl,(%ecx,%eax,1) + 9d9: 83 c0 01 add $0x1,%eax + 9dc: 84 d2 test %dl,%dl + 9de: 75 f2 jne 9d2 ; return os; } - a31: 89 c8 mov %ecx,%eax - a33: 5b pop %ebx - a34: 5d pop %ebp - a35: c3 ret + 9e0: 89 c8 mov %ecx,%eax + 9e2: 8b 5d fc mov -0x4(%ebp),%ebx + 9e5: c9 leave + 9e6: c3 ret -00000a36 : +000009e7 : int strcmp(const char *p, const char *q) { - a36: f3 0f 1e fb endbr32 - a3a: 55 push %ebp - a3b: 89 e5 mov %esp,%ebp - a3d: 8b 4d 08 mov 0x8(%ebp),%ecx - a40: 8b 55 0c mov 0xc(%ebp),%edx + 9e7: 55 push %ebp + 9e8: 89 e5 mov %esp,%ebp + 9ea: 8b 4d 08 mov 0x8(%ebp),%ecx + 9ed: 8b 55 0c mov 0xc(%ebp),%edx while(*p && *p == *q) - a43: 0f b6 01 movzbl (%ecx),%eax - a46: 84 c0 test %al,%al - a48: 74 11 je a5b - a4a: 38 02 cmp %al,(%edx) - a4c: 75 0d jne a5b + 9f0: 0f b6 01 movzbl (%ecx),%eax + 9f3: 84 c0 test %al,%al + 9f5: 74 11 je a08 + 9f7: 38 02 cmp %al,(%edx) + 9f9: 75 0d jne a08 p++, q++; - a4e: 83 c1 01 add $0x1,%ecx - a51: 83 c2 01 add $0x1,%edx + 9fb: 83 c1 01 add $0x1,%ecx + 9fe: 83 c2 01 add $0x1,%edx while(*p && *p == *q) - a54: 0f b6 01 movzbl (%ecx),%eax - a57: 84 c0 test %al,%al - a59: 75 ef jne a4a + a01: 0f b6 01 movzbl (%ecx),%eax + a04: 84 c0 test %al,%al + a06: 75 ef jne 9f7 return (uchar)*p - (uchar)*q; - a5b: 0f b6 c0 movzbl %al,%eax - a5e: 0f b6 12 movzbl (%edx),%edx - a61: 29 d0 sub %edx,%eax + a08: 0f b6 c0 movzbl %al,%eax + a0b: 0f b6 12 movzbl (%edx),%edx + a0e: 29 d0 sub %edx,%eax } - a63: 5d pop %ebp - a64: c3 ret + a10: 5d pop %ebp + a11: c3 ret -00000a65 : +00000a12 : uint strlen(const char *s) { - a65: f3 0f 1e fb endbr32 - a69: 55 push %ebp - a6a: 89 e5 mov %esp,%ebp - a6c: 8b 55 08 mov 0x8(%ebp),%edx + a12: 55 push %ebp + a13: 89 e5 mov %esp,%ebp + a15: 8b 55 08 mov 0x8(%ebp),%edx int n; for(n = 0; s[n]; n++) - a6f: 80 3a 00 cmpb $0x0,(%edx) - a72: 74 14 je a88 - a74: b8 00 00 00 00 mov $0x0,%eax - a79: 83 c0 01 add $0x1,%eax - a7c: 89 c1 mov %eax,%ecx - a7e: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - a82: 75 f5 jne a79 + a18: 80 3a 00 cmpb $0x0,(%edx) + a1b: 74 14 je a31 + a1d: b8 00 00 00 00 mov $0x0,%eax + a22: 83 c0 01 add $0x1,%eax + a25: 89 c1 mov %eax,%ecx + a27: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) + a2b: 75 f5 jne a22 ; return n; } - a84: 89 c8 mov %ecx,%eax - a86: 5d pop %ebp - a87: c3 ret + a2d: 89 c8 mov %ecx,%eax + a2f: 5d pop %ebp + a30: c3 ret for(n = 0; s[n]; n++) - a88: b9 00 00 00 00 mov $0x0,%ecx + a31: b9 00 00 00 00 mov $0x0,%ecx return n; - a8d: eb f5 jmp a84 + a36: eb f5 jmp a2d -00000a8f : +00000a38 : void* memset(void *dst, int c, uint n) { - a8f: f3 0f 1e fb endbr32 - a93: 55 push %ebp - a94: 89 e5 mov %esp,%ebp - a96: 57 push %edi - a97: 8b 55 08 mov 0x8(%ebp),%edx + a38: 55 push %ebp + a39: 89 e5 mov %esp,%ebp + a3b: 57 push %edi + a3c: 8b 55 08 mov 0x8(%ebp),%edx } static inline void stosb(void *addr, int data, int cnt) { asm volatile("cld; rep stosb" : - a9a: 89 d7 mov %edx,%edi - a9c: 8b 4d 10 mov 0x10(%ebp),%ecx - a9f: 8b 45 0c mov 0xc(%ebp),%eax - aa2: fc cld - aa3: f3 aa rep stos %al,%es:(%edi) + a3f: 89 d7 mov %edx,%edi + a41: 8b 4d 10 mov 0x10(%ebp),%ecx + a44: 8b 45 0c mov 0xc(%ebp),%eax + a47: fc cld + a48: f3 aa rep stos %al,%es:(%edi) stosb(dst, c, n); return dst; } - aa5: 89 d0 mov %edx,%eax - aa7: 5f pop %edi - aa8: 5d pop %ebp - aa9: c3 ret + a4a: 89 d0 mov %edx,%eax + a4c: 8b 7d fc mov -0x4(%ebp),%edi + a4f: c9 leave + a50: c3 ret -00000aaa : +00000a51 : char* strchr(const char *s, char c) { - aaa: f3 0f 1e fb endbr32 - aae: 55 push %ebp - aaf: 89 e5 mov %esp,%ebp - ab1: 8b 45 08 mov 0x8(%ebp),%eax - ab4: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx + a51: 55 push %ebp + a52: 89 e5 mov %esp,%ebp + a54: 8b 45 08 mov 0x8(%ebp),%eax + a57: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx for(; *s; s++) - ab8: 0f b6 10 movzbl (%eax),%edx - abb: 84 d2 test %dl,%dl - abd: 74 15 je ad4 + a5b: 0f b6 10 movzbl (%eax),%edx + a5e: 84 d2 test %dl,%dl + a60: 74 15 je a77 if(*s == c) - abf: 38 d1 cmp %dl,%cl - ac1: 74 0f je ad2 + a62: 38 d1 cmp %dl,%cl + a64: 74 0f je a75 for(; *s; s++) - ac3: 83 c0 01 add $0x1,%eax - ac6: 0f b6 10 movzbl (%eax),%edx - ac9: 84 d2 test %dl,%dl - acb: 75 f2 jne abf + a66: 83 c0 01 add $0x1,%eax + a69: 0f b6 10 movzbl (%eax),%edx + a6c: 84 d2 test %dl,%dl + a6e: 75 f2 jne a62 return (char*)s; return 0; - acd: b8 00 00 00 00 mov $0x0,%eax + a70: b8 00 00 00 00 mov $0x0,%eax } - ad2: 5d pop %ebp - ad3: c3 ret + a75: 5d pop %ebp + a76: c3 ret return 0; - ad4: b8 00 00 00 00 mov $0x0,%eax - ad9: eb f7 jmp ad2 + a77: b8 00 00 00 00 mov $0x0,%eax + a7c: eb f7 jmp a75 -00000adb : +00000a7e : char* gets(char *buf, int max) { - adb: f3 0f 1e fb endbr32 - adf: 55 push %ebp - ae0: 89 e5 mov %esp,%ebp - ae2: 57 push %edi - ae3: 56 push %esi - ae4: 53 push %ebx - ae5: 83 ec 2c sub $0x2c,%esp - ae8: 8b 75 08 mov 0x8(%ebp),%esi + a7e: 55 push %ebp + a7f: 89 e5 mov %esp,%ebp + a81: 57 push %edi + a82: 56 push %esi + a83: 53 push %ebx + a84: 83 ec 2c sub $0x2c,%esp + a87: 8b 75 08 mov 0x8(%ebp),%esi int i, cc; char c; for(i=0; i+1 < max; ){ - aeb: bb 00 00 00 00 mov $0x0,%ebx + a8a: bb 00 00 00 00 mov $0x0,%ebx cc = read(0, &c, 1); - af0: 8d 7d e7 lea -0x19(%ebp),%edi + a8f: 8d 7d e7 lea -0x19(%ebp),%edi for(i=0; i+1 < max; ){ - af3: 89 5d d4 mov %ebx,-0x2c(%ebp) - af6: 83 c3 01 add $0x1,%ebx - af9: 3b 5d 0c cmp 0xc(%ebp),%ebx - afc: 7d 27 jge b25 + a92: 89 5d d4 mov %ebx,-0x2c(%ebp) + a95: 83 c3 01 add $0x1,%ebx + a98: 3b 5d 0c cmp 0xc(%ebp),%ebx + a9b: 7d 27 jge ac4 cc = read(0, &c, 1); - afe: 83 ec 04 sub $0x4,%esp - b01: 6a 01 push $0x1 - b03: 57 push %edi - b04: 6a 00 push $0x0 - b06: e8 03 01 00 00 call c0e + a9d: 83 ec 04 sub $0x4,%esp + aa0: 6a 01 push $0x1 + aa2: 57 push %edi + aa3: 6a 00 push $0x0 + aa5: e8 f9 00 00 00 call ba3 if(cc < 1) - b0b: 83 c4 10 add $0x10,%esp - b0e: 85 c0 test %eax,%eax - b10: 7e 13 jle b25 + aaa: 83 c4 10 add $0x10,%esp + aad: 85 c0 test %eax,%eax + aaf: 7e 13 jle ac4 break; buf[i++] = c; - b12: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - b16: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) + ab1: 0f b6 45 e7 movzbl -0x19(%ebp),%eax + ab5: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) if(c == '\n' || c == '\r') - b1a: 3c 0a cmp $0xa,%al - b1c: 74 04 je b22 - b1e: 3c 0d cmp $0xd,%al - b20: 75 d1 jne af3 + ab9: 3c 0a cmp $0xa,%al + abb: 74 04 je ac1 + abd: 3c 0d cmp $0xd,%al + abf: 75 d1 jne a92 for(i=0; i+1 < max; ){ - b22: 89 5d d4 mov %ebx,-0x2c(%ebp) + ac1: 89 5d d4 mov %ebx,-0x2c(%ebp) break; } buf[i] = '\0'; - b25: 8b 45 d4 mov -0x2c(%ebp),%eax - b28: c6 04 06 00 movb $0x0,(%esi,%eax,1) + ac4: 8b 45 d4 mov -0x2c(%ebp),%eax + ac7: c6 04 06 00 movb $0x0,(%esi,%eax,1) return buf; } - b2c: 89 f0 mov %esi,%eax - b2e: 8d 65 f4 lea -0xc(%ebp),%esp - b31: 5b pop %ebx - b32: 5e pop %esi - b33: 5f pop %edi - b34: 5d pop %ebp - b35: c3 ret + acb: 89 f0 mov %esi,%eax + acd: 8d 65 f4 lea -0xc(%ebp),%esp + ad0: 5b pop %ebx + ad1: 5e pop %esi + ad2: 5f pop %edi + ad3: 5d pop %ebp + ad4: c3 ret -00000b36 : +00000ad5 : int stat(const char *n, struct stat *st) { - b36: f3 0f 1e fb endbr32 - b3a: 55 push %ebp - b3b: 89 e5 mov %esp,%ebp - b3d: 56 push %esi - b3e: 53 push %ebx + ad5: 55 push %ebp + ad6: 89 e5 mov %esp,%ebp + ad8: 56 push %esi + ad9: 53 push %ebx int fd; int r; fd = open(n, O_RDONLY); - b3f: 83 ec 08 sub $0x8,%esp - b42: 6a 00 push $0x0 - b44: ff 75 08 pushl 0x8(%ebp) - b47: e8 ea 00 00 00 call c36 + ada: 83 ec 08 sub $0x8,%esp + add: 6a 00 push $0x0 + adf: ff 75 08 push 0x8(%ebp) + ae2: e8 e4 00 00 00 call bcb if(fd < 0) - b4c: 83 c4 10 add $0x10,%esp - b4f: 85 c0 test %eax,%eax - b51: 78 24 js b77 - b53: 89 c3 mov %eax,%ebx + ae7: 83 c4 10 add $0x10,%esp + aea: 85 c0 test %eax,%eax + aec: 78 24 js b12 + aee: 89 c3 mov %eax,%ebx return -1; r = fstat(fd, st); - b55: 83 ec 08 sub $0x8,%esp - b58: ff 75 0c pushl 0xc(%ebp) - b5b: 50 push %eax - b5c: e8 ed 00 00 00 call c4e - b61: 89 c6 mov %eax,%esi + af0: 83 ec 08 sub $0x8,%esp + af3: ff 75 0c push 0xc(%ebp) + af6: 50 push %eax + af7: e8 e7 00 00 00 call be3 + afc: 89 c6 mov %eax,%esi close(fd); - b63: 89 1c 24 mov %ebx,(%esp) - b66: e8 b3 00 00 00 call c1e + afe: 89 1c 24 mov %ebx,(%esp) + b01: e8 ad 00 00 00 call bb3 return r; - b6b: 83 c4 10 add $0x10,%esp + b06: 83 c4 10 add $0x10,%esp } - b6e: 89 f0 mov %esi,%eax - b70: 8d 65 f8 lea -0x8(%ebp),%esp - b73: 5b pop %ebx - b74: 5e pop %esi - b75: 5d pop %ebp - b76: c3 ret + b09: 89 f0 mov %esi,%eax + b0b: 8d 65 f8 lea -0x8(%ebp),%esp + b0e: 5b pop %ebx + b0f: 5e pop %esi + b10: 5d pop %ebp + b11: c3 ret return -1; - b77: be ff ff ff ff mov $0xffffffff,%esi - b7c: eb f0 jmp b6e + b12: be ff ff ff ff mov $0xffffffff,%esi + b17: eb f0 jmp b09 -00000b7e : +00000b19 : int atoi(const char *s) { - b7e: f3 0f 1e fb endbr32 - b82: 55 push %ebp - b83: 89 e5 mov %esp,%ebp - b85: 53 push %ebx - b86: 8b 55 08 mov 0x8(%ebp),%edx + b19: 55 push %ebp + b1a: 89 e5 mov %esp,%ebp + b1c: 53 push %ebx + b1d: 8b 55 08 mov 0x8(%ebp),%edx int n; n = 0; while('0' <= *s && *s <= '9') - b89: 0f b6 02 movzbl (%edx),%eax - b8c: 8d 48 d0 lea -0x30(%eax),%ecx - b8f: 80 f9 09 cmp $0x9,%cl - b92: 77 22 ja bb6 + b20: 0f b6 02 movzbl (%edx),%eax + b23: 8d 48 d0 lea -0x30(%eax),%ecx + b26: 80 f9 09 cmp $0x9,%cl + b29: 77 24 ja b4f n = 0; - b94: b9 00 00 00 00 mov $0x0,%ecx + b2b: b9 00 00 00 00 mov $0x0,%ecx n = n*10 + *s++ - '0'; - b99: 83 c2 01 add $0x1,%edx - b9c: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - b9f: 0f be c0 movsbl %al,%eax - ba2: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx + b30: 83 c2 01 add $0x1,%edx + b33: 8d 0c 89 lea (%ecx,%ecx,4),%ecx + b36: 0f be c0 movsbl %al,%eax + b39: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx while('0' <= *s && *s <= '9') - ba6: 0f b6 02 movzbl (%edx),%eax - ba9: 8d 58 d0 lea -0x30(%eax),%ebx - bac: 80 fb 09 cmp $0x9,%bl - baf: 76 e8 jbe b99 + b3d: 0f b6 02 movzbl (%edx),%eax + b40: 8d 58 d0 lea -0x30(%eax),%ebx + b43: 80 fb 09 cmp $0x9,%bl + b46: 76 e8 jbe b30 return n; } - bb1: 89 c8 mov %ecx,%eax - bb3: 5b pop %ebx - bb4: 5d pop %ebp - bb5: c3 ret + b48: 89 c8 mov %ecx,%eax + b4a: 8b 5d fc mov -0x4(%ebp),%ebx + b4d: c9 leave + b4e: c3 ret n = 0; - bb6: b9 00 00 00 00 mov $0x0,%ecx + b4f: b9 00 00 00 00 mov $0x0,%ecx return n; - bbb: eb f4 jmp bb1 + b54: eb f2 jmp b48 -00000bbd : +00000b56 : void* memmove(void *vdst, const void *vsrc, int n) { - bbd: f3 0f 1e fb endbr32 - bc1: 55 push %ebp - bc2: 89 e5 mov %esp,%ebp - bc4: 56 push %esi - bc5: 53 push %ebx - bc6: 8b 75 08 mov 0x8(%ebp),%esi - bc9: 8b 55 0c mov 0xc(%ebp),%edx - bcc: 8b 5d 10 mov 0x10(%ebp),%ebx + b56: 55 push %ebp + b57: 89 e5 mov %esp,%ebp + b59: 56 push %esi + b5a: 53 push %ebx + b5b: 8b 75 08 mov 0x8(%ebp),%esi + b5e: 8b 55 0c mov 0xc(%ebp),%edx + b61: 8b 5d 10 mov 0x10(%ebp),%ebx char *dst; const char *src; dst = vdst; src = vsrc; while(n-- > 0) - bcf: 85 db test %ebx,%ebx - bd1: 7e 15 jle be8 - bd3: 01 f3 add %esi,%ebx + b64: 85 db test %ebx,%ebx + b66: 7e 15 jle b7d + b68: 01 f3 add %esi,%ebx dst = vdst; - bd5: 89 f0 mov %esi,%eax + b6a: 89 f0 mov %esi,%eax *dst++ = *src++; - bd7: 83 c2 01 add $0x1,%edx - bda: 83 c0 01 add $0x1,%eax - bdd: 0f b6 4a ff movzbl -0x1(%edx),%ecx - be1: 88 48 ff mov %cl,-0x1(%eax) + b6c: 83 c2 01 add $0x1,%edx + b6f: 83 c0 01 add $0x1,%eax + b72: 0f b6 4a ff movzbl -0x1(%edx),%ecx + b76: 88 48 ff mov %cl,-0x1(%eax) while(n-- > 0) - be4: 39 c3 cmp %eax,%ebx - be6: 75 ef jne bd7 + b79: 39 c3 cmp %eax,%ebx + b7b: 75 ef jne b6c return vdst; } - be8: 89 f0 mov %esi,%eax - bea: 5b pop %ebx - beb: 5e pop %esi - bec: 5d pop %ebp - bed: c3 ret + b7d: 89 f0 mov %esi,%eax + b7f: 5b pop %ebx + b80: 5e pop %esi + b81: 5d pop %ebp + b82: c3 ret -00000bee : +00000b83 : name: \ movl $SYS_ ## name, %eax; \ int $T_SYSCALL; \ ret SYSCALL(fork) - bee: b8 01 00 00 00 mov $0x1,%eax - bf3: cd 40 int $0x40 - bf5: c3 ret + b83: b8 01 00 00 00 mov $0x1,%eax + b88: cd 40 int $0x40 + b8a: c3 ret -00000bf6 : +00000b8b : SYSCALL(exit) - bf6: b8 02 00 00 00 mov $0x2,%eax - bfb: cd 40 int $0x40 - bfd: c3 ret + b8b: b8 02 00 00 00 mov $0x2,%eax + b90: cd 40 int $0x40 + b92: c3 ret -00000bfe : +00000b93 : SYSCALL(wait) - bfe: b8 03 00 00 00 mov $0x3,%eax - c03: cd 40 int $0x40 - c05: c3 ret + b93: b8 03 00 00 00 mov $0x3,%eax + b98: cd 40 int $0x40 + b9a: c3 ret -00000c06 : +00000b9b : SYSCALL(pipe) - c06: b8 04 00 00 00 mov $0x4,%eax - c0b: cd 40 int $0x40 - c0d: c3 ret + b9b: b8 04 00 00 00 mov $0x4,%eax + ba0: cd 40 int $0x40 + ba2: c3 ret -00000c0e : +00000ba3 : SYSCALL(read) - c0e: b8 05 00 00 00 mov $0x5,%eax - c13: cd 40 int $0x40 - c15: c3 ret + ba3: b8 05 00 00 00 mov $0x5,%eax + ba8: cd 40 int $0x40 + baa: c3 ret -00000c16 : +00000bab : SYSCALL(write) - c16: b8 10 00 00 00 mov $0x10,%eax - c1b: cd 40 int $0x40 - c1d: c3 ret + bab: b8 10 00 00 00 mov $0x10,%eax + bb0: cd 40 int $0x40 + bb2: c3 ret -00000c1e : +00000bb3 : SYSCALL(close) - c1e: b8 15 00 00 00 mov $0x15,%eax - c23: cd 40 int $0x40 - c25: c3 ret + bb3: b8 15 00 00 00 mov $0x15,%eax + bb8: cd 40 int $0x40 + bba: c3 ret -00000c26 : +00000bbb : SYSCALL(kill) - c26: b8 06 00 00 00 mov $0x6,%eax - c2b: cd 40 int $0x40 - c2d: c3 ret + bbb: b8 06 00 00 00 mov $0x6,%eax + bc0: cd 40 int $0x40 + bc2: c3 ret -00000c2e : +00000bc3 : SYSCALL(exec) - c2e: b8 07 00 00 00 mov $0x7,%eax - c33: cd 40 int $0x40 - c35: c3 ret + bc3: b8 07 00 00 00 mov $0x7,%eax + bc8: cd 40 int $0x40 + bca: c3 ret -00000c36 : +00000bcb : SYSCALL(open) - c36: b8 0f 00 00 00 mov $0xf,%eax - c3b: cd 40 int $0x40 - c3d: c3 ret + bcb: b8 0f 00 00 00 mov $0xf,%eax + bd0: cd 40 int $0x40 + bd2: c3 ret -00000c3e : +00000bd3 : SYSCALL(mknod) - c3e: b8 11 00 00 00 mov $0x11,%eax - c43: cd 40 int $0x40 - c45: c3 ret + bd3: b8 11 00 00 00 mov $0x11,%eax + bd8: cd 40 int $0x40 + bda: c3 ret -00000c46 : +00000bdb : SYSCALL(unlink) - c46: b8 12 00 00 00 mov $0x12,%eax - c4b: cd 40 int $0x40 - c4d: c3 ret + bdb: b8 12 00 00 00 mov $0x12,%eax + be0: cd 40 int $0x40 + be2: c3 ret -00000c4e : +00000be3 : SYSCALL(fstat) - c4e: b8 08 00 00 00 mov $0x8,%eax - c53: cd 40 int $0x40 - c55: c3 ret + be3: b8 08 00 00 00 mov $0x8,%eax + be8: cd 40 int $0x40 + bea: c3 ret -00000c56 : +00000beb : SYSCALL(link) - c56: b8 13 00 00 00 mov $0x13,%eax - c5b: cd 40 int $0x40 - c5d: c3 ret + beb: b8 13 00 00 00 mov $0x13,%eax + bf0: cd 40 int $0x40 + bf2: c3 ret -00000c5e : +00000bf3 : SYSCALL(mkdir) - c5e: b8 14 00 00 00 mov $0x14,%eax - c63: cd 40 int $0x40 - c65: c3 ret + bf3: b8 14 00 00 00 mov $0x14,%eax + bf8: cd 40 int $0x40 + bfa: c3 ret -00000c66 : +00000bfb : SYSCALL(chdir) - c66: b8 09 00 00 00 mov $0x9,%eax - c6b: cd 40 int $0x40 - c6d: c3 ret + bfb: b8 09 00 00 00 mov $0x9,%eax + c00: cd 40 int $0x40 + c02: c3 ret -00000c6e : +00000c03 : SYSCALL(dup) - c6e: b8 0a 00 00 00 mov $0xa,%eax - c73: cd 40 int $0x40 - c75: c3 ret + c03: b8 0a 00 00 00 mov $0xa,%eax + c08: cd 40 int $0x40 + c0a: c3 ret -00000c76 : +00000c0b : SYSCALL(getpid) - c76: b8 0b 00 00 00 mov $0xb,%eax - c7b: cd 40 int $0x40 - c7d: c3 ret + c0b: b8 0b 00 00 00 mov $0xb,%eax + c10: cd 40 int $0x40 + c12: c3 ret -00000c7e : +00000c13 : SYSCALL(sbrk) - c7e: b8 0c 00 00 00 mov $0xc,%eax - c83: cd 40 int $0x40 - c85: c3 ret + c13: b8 0c 00 00 00 mov $0xc,%eax + c18: cd 40 int $0x40 + c1a: c3 ret -00000c86 : +00000c1b : SYSCALL(sleep) - c86: b8 0d 00 00 00 mov $0xd,%eax - c8b: cd 40 int $0x40 - c8d: c3 ret + c1b: b8 0d 00 00 00 mov $0xd,%eax + c20: cd 40 int $0x40 + c22: c3 ret -00000c8e : +00000c23 : SYSCALL(uptime) - c8e: b8 0e 00 00 00 mov $0xe,%eax - c93: cd 40 int $0x40 - c95: c3 ret + c23: b8 0e 00 00 00 mov $0xe,%eax + c28: cd 40 int $0x40 + c2a: c3 ret -00000c96 : +00000c2b : SYSCALL(slabtest) - c96: b8 16 00 00 00 mov $0x16,%eax - c9b: cd 40 int $0x40 - c9d: c3 ret + c2b: b8 16 00 00 00 mov $0x16,%eax + c30: cd 40 int $0x40 + c32: c3 ret -00000c9e : +00000c33 : SYSCALL(ps) - c9e: b8 17 00 00 00 mov $0x17,%eax - ca3: cd 40 int $0x40 - ca5: c3 ret + c33: b8 17 00 00 00 mov $0x17,%eax + c38: cd 40 int $0x40 + c3a: c3 ret -00000ca6 : +00000c3b : write(fd, &c, 1); } static void printint(int fd, int xx, int base, int sgn) { - ca6: 55 push %ebp - ca7: 89 e5 mov %esp,%ebp - ca9: 57 push %edi - caa: 56 push %esi - cab: 53 push %ebx - cac: 83 ec 3c sub $0x3c,%esp - caf: 89 45 c4 mov %eax,-0x3c(%ebp) - cb2: 89 d3 mov %edx,%ebx + c3b: 55 push %ebp + c3c: 89 e5 mov %esp,%ebp + c3e: 57 push %edi + c3f: 56 push %esi + c40: 53 push %ebx + c41: 83 ec 3c sub $0x3c,%esp + c44: 89 45 c4 mov %eax,-0x3c(%ebp) + c47: 89 ce mov %ecx,%esi char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - cb4: 83 7d 08 00 cmpl $0x0,0x8(%ebp) - cb8: 74 77 je d31 - cba: 85 d2 test %edx,%edx - cbc: 79 73 jns d31 + c49: 83 7d 08 00 cmpl $0x0,0x8(%ebp) + c4d: 74 79 je cc8 + c4f: 85 d2 test %edx,%edx + c51: 79 75 jns cc8 neg = 1; x = -xx; - cbe: f7 db neg %ebx + c53: 89 d1 mov %edx,%ecx + c55: f7 d9 neg %ecx neg = 1; - cc0: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) + c57: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) } else { x = xx; } i = 0; - cc7: be 00 00 00 00 mov $0x0,%esi + c5e: bb 00 00 00 00 mov $0x0,%ebx do{ buf[i++] = digits[x % base]; - ccc: 89 f7 mov %esi,%edi - cce: 83 c6 01 add $0x1,%esi - cd1: 89 d8 mov %ebx,%eax - cd3: ba 00 00 00 00 mov $0x0,%edx - cd8: f7 f1 div %ecx - cda: 0f b6 92 44 11 00 00 movzbl 0x1144(%edx),%edx - ce1: 88 54 35 d7 mov %dl,-0x29(%ebp,%esi,1) + c63: 89 df mov %ebx,%edi + c65: 83 c3 01 add $0x1,%ebx + c68: 89 c8 mov %ecx,%eax + c6a: ba 00 00 00 00 mov $0x0,%edx + c6f: f7 f6 div %esi + c71: 0f b6 92 14 11 00 00 movzbl 0x1114(%edx),%edx + c78: 88 54 1d d7 mov %dl,-0x29(%ebp,%ebx,1) }while((x /= base) != 0); - ce5: 89 da mov %ebx,%edx - ce7: 89 c3 mov %eax,%ebx - ce9: 39 d1 cmp %edx,%ecx - ceb: 76 df jbe ccc + c7c: 89 ca mov %ecx,%edx + c7e: 89 c1 mov %eax,%ecx + c80: 39 d6 cmp %edx,%esi + c82: 76 df jbe c63 if(neg) - ced: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) - cf1: 74 08 je cfb + c84: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) + c88: 74 08 je c92 buf[i++] = '-'; - cf3: c6 44 35 d8 2d movb $0x2d,-0x28(%ebp,%esi,1) - cf8: 8d 77 02 lea 0x2(%edi),%esi + c8a: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) + c8f: 8d 5f 02 lea 0x2(%edi),%ebx while(--i >= 0) - cfb: 85 f6 test %esi,%esi - cfd: 7e 2a jle d29 - cff: 8d 5c 35 d7 lea -0x29(%ebp,%esi,1),%ebx - d03: 8d 7d d8 lea -0x28(%ebp),%edi + c92: 85 db test %ebx,%ebx + c94: 7e 2a jle cc0 + c96: 8d 7d d8 lea -0x28(%ebp),%edi + c99: 8d 5c 1d d7 lea -0x29(%ebp,%ebx,1),%ebx write(fd, &c, 1); - d06: 8d 75 d7 lea -0x29(%ebp),%esi + c9d: 8d 75 d7 lea -0x29(%ebp),%esi putc(fd, buf[i]); - d09: 0f b6 03 movzbl (%ebx),%eax - d0c: 88 45 d7 mov %al,-0x29(%ebp) + ca0: 0f b6 03 movzbl (%ebx),%eax + ca3: 88 45 d7 mov %al,-0x29(%ebp) write(fd, &c, 1); - d0f: 83 ec 04 sub $0x4,%esp - d12: 6a 01 push $0x1 - d14: 56 push %esi - d15: ff 75 c4 pushl -0x3c(%ebp) - d18: e8 f9 fe ff ff call c16 + ca6: 83 ec 04 sub $0x4,%esp + ca9: 6a 01 push $0x1 + cab: 56 push %esi + cac: ff 75 c4 push -0x3c(%ebp) + caf: e8 f7 fe ff ff call bab while(--i >= 0) - d1d: 89 d8 mov %ebx,%eax - d1f: 83 eb 01 sub $0x1,%ebx - d22: 83 c4 10 add $0x10,%esp - d25: 39 f8 cmp %edi,%eax - d27: 75 e0 jne d09 + cb4: 89 d8 mov %ebx,%eax + cb6: 83 eb 01 sub $0x1,%ebx + cb9: 83 c4 10 add $0x10,%esp + cbc: 39 f8 cmp %edi,%eax + cbe: 75 e0 jne ca0 } - d29: 8d 65 f4 lea -0xc(%ebp),%esp - d2c: 5b pop %ebx - d2d: 5e pop %esi - d2e: 5f pop %edi - d2f: 5d pop %ebp - d30: c3 ret + cc0: 8d 65 f4 lea -0xc(%ebp),%esp + cc3: 5b pop %ebx + cc4: 5e pop %esi + cc5: 5f pop %edi + cc6: 5d pop %ebp + cc7: c3 ret + x = xx; + cc8: 89 d1 mov %edx,%ecx neg = 0; - d31: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) - d38: eb 8d jmp cc7 + cca: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) + cd1: eb 8b jmp c5e -00000d3a : +00000cd3 : // Print to the given fd. Only understands %d, %x, %p, %s. void printf(int fd, const char *fmt, ...) { - d3a: f3 0f 1e fb endbr32 - d3e: 55 push %ebp - d3f: 89 e5 mov %esp,%ebp - d41: 57 push %edi - d42: 56 push %esi - d43: 53 push %ebx - d44: 83 ec 2c sub $0x2c,%esp + cd3: 55 push %ebp + cd4: 89 e5 mov %esp,%ebp + cd6: 57 push %edi + cd7: 56 push %esi + cd8: 53 push %ebx + cd9: 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++){ - d47: 8b 75 0c mov 0xc(%ebp),%esi - d4a: 0f b6 1e movzbl (%esi),%ebx - d4d: 84 db test %bl,%bl - d4f: 0f 84 ab 01 00 00 je f00 - d55: 83 c6 01 add $0x1,%esi + cdc: 8b 75 0c mov 0xc(%ebp),%esi + cdf: 0f b6 1e movzbl (%esi),%ebx + ce2: 84 db test %bl,%bl + ce4: 0f 84 9f 01 00 00 je e89 + cea: 83 c6 01 add $0x1,%esi ap = (uint*)(void*)&fmt + 1; - d58: 8d 45 10 lea 0x10(%ebp),%eax - d5b: 89 45 d4 mov %eax,-0x2c(%ebp) + ced: 8d 45 10 lea 0x10(%ebp),%eax + cf0: 89 45 d4 mov %eax,-0x2c(%ebp) state = 0; - d5e: bf 00 00 00 00 mov $0x0,%edi - d63: eb 2d jmp d92 + cf3: bf 00 00 00 00 mov $0x0,%edi + cf8: eb 2d jmp d27 c = fmt[i] & 0xff; if(state == 0){ if(c == '%'){ state = '%'; } else { putc(fd, c); - d65: 88 5d e7 mov %bl,-0x19(%ebp) + cfa: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - d68: 83 ec 04 sub $0x4,%esp - d6b: 6a 01 push $0x1 - d6d: 8d 45 e7 lea -0x19(%ebp),%eax - d70: 50 push %eax - d71: ff 75 08 pushl 0x8(%ebp) - d74: e8 9d fe ff ff call c16 + cfd: 83 ec 04 sub $0x4,%esp + d00: 6a 01 push $0x1 + d02: 8d 45 e7 lea -0x19(%ebp),%eax + d05: 50 push %eax + d06: ff 75 08 push 0x8(%ebp) + d09: e8 9d fe ff ff call bab putc(fd, c); - d79: 83 c4 10 add $0x10,%esp - d7c: eb 05 jmp d83 + d0e: 83 c4 10 add $0x10,%esp + d11: eb 05 jmp d18 } } else if(state == '%'){ - d7e: 83 ff 25 cmp $0x25,%edi - d81: 74 22 je da5 + d13: 83 ff 25 cmp $0x25,%edi + d16: 74 1f je d37 for(i = 0; fmt[i]; i++){ - d83: 83 c6 01 add $0x1,%esi - d86: 0f b6 5e ff movzbl -0x1(%esi),%ebx - d8a: 84 db test %bl,%bl - d8c: 0f 84 6e 01 00 00 je f00 + d18: 83 c6 01 add $0x1,%esi + d1b: 0f b6 5e ff movzbl -0x1(%esi),%ebx + d1f: 84 db test %bl,%bl + d21: 0f 84 62 01 00 00 je e89 c = fmt[i] & 0xff; - d92: 0f be d3 movsbl %bl,%edx - d95: 0f b6 c3 movzbl %bl,%eax + d27: 0f b6 c3 movzbl %bl,%eax if(state == 0){ - d98: 85 ff test %edi,%edi - d9a: 75 e2 jne d7e + d2a: 85 ff test %edi,%edi + d2c: 75 e5 jne d13 if(c == '%'){ - d9c: 83 f8 25 cmp $0x25,%eax - d9f: 75 c4 jne d65 + d2e: 83 f8 25 cmp $0x25,%eax + d31: 75 c7 jne cfa state = '%'; - da1: 89 c7 mov %eax,%edi - da3: eb de jmp d83 + d33: 89 c7 mov %eax,%edi + d35: eb e1 jmp d18 if(c == 'd'){ - da5: 83 f8 64 cmp $0x64,%eax - da8: 74 59 je e03 + d37: 83 f8 25 cmp $0x25,%eax + d3a: 0f 84 f2 00 00 00 je e32 + d40: 8d 50 9d lea -0x63(%eax),%edx + d43: 83 fa 15 cmp $0x15,%edx + d46: 0f 87 07 01 00 00 ja e53 + d4c: 0f 87 01 01 00 00 ja e53 + d52: ff 24 95 bc 10 00 00 jmp *0x10bc(,%edx,4) printint(fd, *ap, 10, 1); + d59: 83 ec 0c sub $0xc,%esp + d5c: 6a 01 push $0x1 + d5e: b9 0a 00 00 00 mov $0xa,%ecx + d63: 8b 7d d4 mov -0x2c(%ebp),%edi + d66: 8b 17 mov (%edi),%edx + d68: 8b 45 08 mov 0x8(%ebp),%eax + d6b: e8 cb fe ff ff call c3b ap++; - } else if(c == 'x' || c == 'p'){ - daa: 81 e2 f7 00 00 00 and $0xf7,%edx - db0: 83 fa 70 cmp $0x70,%edx - db3: 74 7a je e2f - printint(fd, *ap, 16, 0); - ap++; - } else if(c == 's'){ - db5: 83 f8 73 cmp $0x73,%eax - db8: 0f 84 9d 00 00 00 je e5b - s = "(null)"; - while(*s != 0){ - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - dbe: 83 f8 63 cmp $0x63,%eax - dc1: 0f 84 ec 00 00 00 je eb3 - putc(fd, *ap); - ap++; - } else if(c == '%'){ - dc7: 83 f8 25 cmp $0x25,%eax - dca: 0f 84 0f 01 00 00 je edf - putc(fd, c); + d70: 89 f8 mov %edi,%eax + d72: 83 c0 04 add $0x4,%eax + d75: 89 45 d4 mov %eax,-0x2c(%ebp) + d78: 83 c4 10 add $0x10,%esp } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); - dd0: c6 45 e7 25 movb $0x25,-0x19(%ebp) - write(fd, &c, 1); - dd4: 83 ec 04 sub $0x4,%esp - dd7: 6a 01 push $0x1 - dd9: 8d 45 e7 lea -0x19(%ebp),%eax - ddc: 50 push %eax - ddd: ff 75 08 pushl 0x8(%ebp) - de0: e8 31 fe ff ff call c16 - putc(fd, c); - de5: 88 5d e7 mov %bl,-0x19(%ebp) - write(fd, &c, 1); - de8: 83 c4 0c add $0xc,%esp - deb: 6a 01 push $0x1 - ded: 8d 45 e7 lea -0x19(%ebp),%eax - df0: 50 push %eax - df1: ff 75 08 pushl 0x8(%ebp) - df4: e8 1d fe ff ff call c16 putc(fd, c); - df9: 83 c4 10 add $0x10,%esp } state = 0; - dfc: bf 00 00 00 00 mov $0x0,%edi - e01: eb 80 jmp d83 - printint(fd, *ap, 10, 1); - e03: 83 ec 0c sub $0xc,%esp - e06: 6a 01 push $0x1 - e08: b9 0a 00 00 00 mov $0xa,%ecx - e0d: 8b 7d d4 mov -0x2c(%ebp),%edi - e10: 8b 17 mov (%edi),%edx - e12: 8b 45 08 mov 0x8(%ebp),%eax - e15: e8 8c fe ff ff call ca6 - ap++; - e1a: 89 f8 mov %edi,%eax - e1c: 83 c0 04 add $0x4,%eax - e1f: 89 45 d4 mov %eax,-0x2c(%ebp) - e22: 83 c4 10 add $0x10,%esp - state = 0; - e25: bf 00 00 00 00 mov $0x0,%edi - e2a: e9 54 ff ff ff jmp d83 + d7b: bf 00 00 00 00 mov $0x0,%edi + d80: eb 96 jmp d18 printint(fd, *ap, 16, 0); - e2f: 83 ec 0c sub $0xc,%esp - e32: 6a 00 push $0x0 - e34: b9 10 00 00 00 mov $0x10,%ecx - e39: 8b 7d d4 mov -0x2c(%ebp),%edi - e3c: 8b 17 mov (%edi),%edx - e3e: 8b 45 08 mov 0x8(%ebp),%eax - e41: e8 60 fe ff ff call ca6 + d82: 83 ec 0c sub $0xc,%esp + d85: 6a 00 push $0x0 + d87: b9 10 00 00 00 mov $0x10,%ecx + d8c: 8b 7d d4 mov -0x2c(%ebp),%edi + d8f: 8b 17 mov (%edi),%edx + d91: 8b 45 08 mov 0x8(%ebp),%eax + d94: e8 a2 fe ff ff call c3b ap++; - e46: 89 f8 mov %edi,%eax - e48: 83 c0 04 add $0x4,%eax - e4b: 89 45 d4 mov %eax,-0x2c(%ebp) - e4e: 83 c4 10 add $0x10,%esp + d99: 89 f8 mov %edi,%eax + d9b: 83 c0 04 add $0x4,%eax + d9e: 89 45 d4 mov %eax,-0x2c(%ebp) + da1: 83 c4 10 add $0x10,%esp state = 0; - e51: bf 00 00 00 00 mov $0x0,%edi - e56: e9 28 ff ff ff jmp d83 + da4: bf 00 00 00 00 mov $0x0,%edi + da9: e9 6a ff ff ff jmp d18 s = (char*)*ap; - e5b: 8b 4d d4 mov -0x2c(%ebp),%ecx - e5e: 8b 01 mov (%ecx),%eax + dae: 8b 4d d4 mov -0x2c(%ebp),%ecx + db1: 8b 01 mov (%ecx),%eax ap++; - e60: 83 c1 04 add $0x4,%ecx - e63: 89 4d d4 mov %ecx,-0x2c(%ebp) + db3: 83 c1 04 add $0x4,%ecx + db6: 89 4d d4 mov %ecx,-0x2c(%ebp) if(s == 0) - e66: 85 c0 test %eax,%eax - e68: 74 13 je e7d + db9: 85 c0 test %eax,%eax + dbb: 74 13 je dd0 s = (char*)*ap; - e6a: 89 c3 mov %eax,%ebx + dbd: 89 c3 mov %eax,%ebx while(*s != 0){ - e6c: 0f b6 00 movzbl (%eax),%eax + dbf: 0f b6 00 movzbl (%eax),%eax state = 0; - e6f: bf 00 00 00 00 mov $0x0,%edi + dc2: bf 00 00 00 00 mov $0x0,%edi while(*s != 0){ - e74: 84 c0 test %al,%al - e76: 75 0f jne e87 - e78: e9 06 ff ff ff jmp d83 + dc7: 84 c0 test %al,%al + dc9: 75 0f jne dda + dcb: e9 48 ff ff ff jmp d18 s = "(null)"; - e7d: bb 3c 11 00 00 mov $0x113c,%ebx + dd0: bb b4 10 00 00 mov $0x10b4,%ebx while(*s != 0){ - e82: b8 28 00 00 00 mov $0x28,%eax - e87: 8b 7d 08 mov 0x8(%ebp),%edi + dd5: b8 28 00 00 00 mov $0x28,%eax + dda: 8b 7d 08 mov 0x8(%ebp),%edi putc(fd, *s); - e8a: 88 45 e7 mov %al,-0x19(%ebp) + ddd: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - e8d: 83 ec 04 sub $0x4,%esp - e90: 6a 01 push $0x1 - e92: 8d 45 e7 lea -0x19(%ebp),%eax - e95: 50 push %eax - e96: 57 push %edi - e97: e8 7a fd ff ff call c16 + de0: 83 ec 04 sub $0x4,%esp + de3: 6a 01 push $0x1 + de5: 8d 45 e7 lea -0x19(%ebp),%eax + de8: 50 push %eax + de9: 57 push %edi + dea: e8 bc fd ff ff call bab s++; - e9c: 83 c3 01 add $0x1,%ebx + def: 83 c3 01 add $0x1,%ebx while(*s != 0){ - e9f: 0f b6 03 movzbl (%ebx),%eax - ea2: 83 c4 10 add $0x10,%esp - ea5: 84 c0 test %al,%al - ea7: 75 e1 jne e8a + df2: 0f b6 03 movzbl (%ebx),%eax + df5: 83 c4 10 add $0x10,%esp + df8: 84 c0 test %al,%al + dfa: 75 e1 jne ddd state = 0; - ea9: bf 00 00 00 00 mov $0x0,%edi - eae: e9 d0 fe ff ff jmp d83 + dfc: bf 00 00 00 00 mov $0x0,%edi + e01: e9 12 ff ff ff jmp d18 putc(fd, *ap); - eb3: 8b 7d d4 mov -0x2c(%ebp),%edi - eb6: 8b 07 mov (%edi),%eax - eb8: 88 45 e7 mov %al,-0x19(%ebp) + e06: 8b 7d d4 mov -0x2c(%ebp),%edi + e09: 8b 07 mov (%edi),%eax + e0b: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - ebb: 83 ec 04 sub $0x4,%esp - ebe: 6a 01 push $0x1 - ec0: 8d 45 e7 lea -0x19(%ebp),%eax - ec3: 50 push %eax - ec4: ff 75 08 pushl 0x8(%ebp) - ec7: e8 4a fd ff ff call c16 + e0e: 83 ec 04 sub $0x4,%esp + e11: 6a 01 push $0x1 + e13: 8d 45 e7 lea -0x19(%ebp),%eax + e16: 50 push %eax + e17: ff 75 08 push 0x8(%ebp) + e1a: e8 8c fd ff ff call bab ap++; - ecc: 83 c7 04 add $0x4,%edi - ecf: 89 7d d4 mov %edi,-0x2c(%ebp) - ed2: 83 c4 10 add $0x10,%esp + e1f: 83 c7 04 add $0x4,%edi + e22: 89 7d d4 mov %edi,-0x2c(%ebp) + e25: 83 c4 10 add $0x10,%esp state = 0; - ed5: bf 00 00 00 00 mov $0x0,%edi - eda: e9 a4 fe ff ff jmp d83 + e28: bf 00 00 00 00 mov $0x0,%edi + e2d: e9 e6 fe ff ff jmp d18 putc(fd, c); - edf: 88 5d e7 mov %bl,-0x19(%ebp) + e32: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - ee2: 83 ec 04 sub $0x4,%esp - ee5: 6a 01 push $0x1 - ee7: 8d 45 e7 lea -0x19(%ebp),%eax - eea: 50 push %eax - eeb: ff 75 08 pushl 0x8(%ebp) - eee: e8 23 fd ff ff call c16 - ef3: 83 c4 10 add $0x10,%esp + e35: 83 ec 04 sub $0x4,%esp + e38: 6a 01 push $0x1 + e3a: 8d 45 e7 lea -0x19(%ebp),%eax + e3d: 50 push %eax + e3e: ff 75 08 push 0x8(%ebp) + e41: e8 65 fd ff ff call bab + e46: 83 c4 10 add $0x10,%esp + state = 0; + e49: bf 00 00 00 00 mov $0x0,%edi + e4e: e9 c5 fe ff ff jmp d18 + putc(fd, '%'); + e53: c6 45 e7 25 movb $0x25,-0x19(%ebp) + write(fd, &c, 1); + e57: 83 ec 04 sub $0x4,%esp + e5a: 6a 01 push $0x1 + e5c: 8d 45 e7 lea -0x19(%ebp),%eax + e5f: 50 push %eax + e60: ff 75 08 push 0x8(%ebp) + e63: e8 43 fd ff ff call bab + putc(fd, c); + e68: 88 5d e7 mov %bl,-0x19(%ebp) + write(fd, &c, 1); + e6b: 83 c4 0c add $0xc,%esp + e6e: 6a 01 push $0x1 + e70: 8d 45 e7 lea -0x19(%ebp),%eax + e73: 50 push %eax + e74: ff 75 08 push 0x8(%ebp) + e77: e8 2f fd ff ff call bab + putc(fd, c); + e7c: 83 c4 10 add $0x10,%esp state = 0; - ef6: bf 00 00 00 00 mov $0x0,%edi - efb: e9 83 fe ff ff jmp d83 + e7f: bf 00 00 00 00 mov $0x0,%edi + e84: e9 8f fe ff ff jmp d18 } } } - f00: 8d 65 f4 lea -0xc(%ebp),%esp - f03: 5b pop %ebx - f04: 5e pop %esi - f05: 5f pop %edi - f06: 5d pop %ebp - f07: c3 ret - -00000f08 : + e89: 8d 65 f4 lea -0xc(%ebp),%esp + e8c: 5b pop %ebx + e8d: 5e pop %esi + e8e: 5f pop %edi + e8f: 5d pop %ebp + e90: c3 ret + +00000e91 : static Header base; static Header *freep; void free(void *ap) { - f08: f3 0f 1e fb endbr32 - f0c: 55 push %ebp - f0d: 89 e5 mov %esp,%ebp - f0f: 57 push %edi - f10: 56 push %esi - f11: 53 push %ebx - f12: 8b 5d 08 mov 0x8(%ebp),%ebx + e91: 55 push %ebp + e92: 89 e5 mov %esp,%ebp + e94: 57 push %edi + e95: 56 push %esi + e96: 53 push %ebx + e97: 8b 5d 08 mov 0x8(%ebp),%ebx Header *bp, *p; bp = (Header*)ap - 1; - f15: 8d 4b f8 lea -0x8(%ebx),%ecx + e9a: 8d 4b f8 lea -0x8(%ebx),%ecx for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - f18: a1 04 17 00 00 mov 0x1704,%eax - f1d: eb 0c jmp f2b + e9d: a1 e4 16 00 00 mov 0x16e4,%eax + ea2: eb 0c jmp eb0 if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - f1f: 8b 10 mov (%eax),%edx - f21: 39 c2 cmp %eax,%edx - f23: 77 04 ja f29 - f25: 39 ca cmp %ecx,%edx - f27: 77 10 ja f39 + ea4: 8b 10 mov (%eax),%edx + ea6: 39 c2 cmp %eax,%edx + ea8: 77 04 ja eae + eaa: 39 ca cmp %ecx,%edx + eac: 77 10 ja ebe { - f29: 89 d0 mov %edx,%eax + eae: 89 d0 mov %edx,%eax for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - f2b: 39 c8 cmp %ecx,%eax - f2d: 73 f0 jae f1f - f2f: 8b 10 mov (%eax),%edx - f31: 39 ca cmp %ecx,%edx - f33: 77 04 ja f39 + eb0: 39 c8 cmp %ecx,%eax + eb2: 73 f0 jae ea4 + eb4: 8b 10 mov (%eax),%edx + eb6: 39 ca cmp %ecx,%edx + eb8: 77 04 ja ebe if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - f35: 39 c2 cmp %eax,%edx - f37: 77 f0 ja f29 + eba: 39 c2 cmp %eax,%edx + ebc: 77 f0 ja eae break; if(bp + bp->s.size == p->s.ptr){ - f39: 8b 73 fc mov -0x4(%ebx),%esi - f3c: 8b 10 mov (%eax),%edx - f3e: 8d 3c f1 lea (%ecx,%esi,8),%edi - f41: 39 fa cmp %edi,%edx - f43: 74 19 je f5e + ebe: 8b 73 fc mov -0x4(%ebx),%esi + ec1: 8b 10 mov (%eax),%edx + ec3: 8d 3c f1 lea (%ecx,%esi,8),%edi + ec6: 39 fa cmp %edi,%edx + ec8: 74 19 je ee3 bp->s.size += p->s.ptr->s.size; bp->s.ptr = p->s.ptr->s.ptr; + eca: 89 53 f8 mov %edx,-0x8(%ebx) } else bp->s.ptr = p->s.ptr; - f45: 89 53 f8 mov %edx,-0x8(%ebx) if(p + p->s.size == bp){ - f48: 8b 50 04 mov 0x4(%eax),%edx - f4b: 8d 34 d0 lea (%eax,%edx,8),%esi - f4e: 39 f1 cmp %esi,%ecx - f50: 74 1b je f6d + ecd: 8b 50 04 mov 0x4(%eax),%edx + ed0: 8d 34 d0 lea (%eax,%edx,8),%esi + ed3: 39 f1 cmp %esi,%ecx + ed5: 74 18 je eef p->s.size += bp->s.size; p->s.ptr = bp->s.ptr; + ed7: 89 08 mov %ecx,(%eax) } else p->s.ptr = bp; - f52: 89 08 mov %ecx,(%eax) freep = p; - f54: a3 04 17 00 00 mov %eax,0x1704 + ed9: a3 e4 16 00 00 mov %eax,0x16e4 } - f59: 5b pop %ebx - f5a: 5e pop %esi - f5b: 5f pop %edi - f5c: 5d pop %ebp - f5d: c3 ret + ede: 5b pop %ebx + edf: 5e pop %esi + ee0: 5f pop %edi + ee1: 5d pop %ebp + ee2: c3 ret bp->s.size += p->s.ptr->s.size; - f5e: 03 72 04 add 0x4(%edx),%esi - f61: 89 73 fc mov %esi,-0x4(%ebx) + ee3: 03 72 04 add 0x4(%edx),%esi + ee6: 89 73 fc mov %esi,-0x4(%ebx) bp->s.ptr = p->s.ptr->s.ptr; - f64: 8b 10 mov (%eax),%edx - f66: 8b 12 mov (%edx),%edx - f68: 89 53 f8 mov %edx,-0x8(%ebx) - f6b: eb db jmp f48 + ee9: 8b 10 mov (%eax),%edx + eeb: 8b 12 mov (%edx),%edx + eed: eb db jmp eca p->s.size += bp->s.size; - f6d: 03 53 fc add -0x4(%ebx),%edx - f70: 89 50 04 mov %edx,0x4(%eax) + eef: 03 53 fc add -0x4(%ebx),%edx + ef2: 89 50 04 mov %edx,0x4(%eax) p->s.ptr = bp->s.ptr; - f73: 8b 53 f8 mov -0x8(%ebx),%edx - f76: 89 10 mov %edx,(%eax) - f78: eb da jmp f54 + ef5: 8b 4b f8 mov -0x8(%ebx),%ecx + ef8: eb dd jmp ed7 -00000f7a : +00000efa : return freep; } void* malloc(uint nbytes) { - f7a: f3 0f 1e fb endbr32 - f7e: 55 push %ebp - f7f: 89 e5 mov %esp,%ebp - f81: 57 push %edi - f82: 56 push %esi - f83: 53 push %ebx - f84: 83 ec 0c sub $0xc,%esp + efa: 55 push %ebp + efb: 89 e5 mov %esp,%ebp + efd: 57 push %edi + efe: 56 push %esi + eff: 53 push %ebx + f00: 83 ec 0c sub $0xc,%esp Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - f87: 8b 45 08 mov 0x8(%ebp),%eax - f8a: 8d 58 07 lea 0x7(%eax),%ebx - f8d: c1 eb 03 shr $0x3,%ebx - f90: 83 c3 01 add $0x1,%ebx + f03: 8b 45 08 mov 0x8(%ebp),%eax + f06: 8d 58 07 lea 0x7(%eax),%ebx + f09: c1 eb 03 shr $0x3,%ebx + f0c: 83 c3 01 add $0x1,%ebx if((prevp = freep) == 0){ - f93: 8b 15 04 17 00 00 mov 0x1704,%edx - f99: 85 d2 test %edx,%edx - f9b: 74 20 je fbd + f0f: 8b 15 e4 16 00 00 mov 0x16e4,%edx + f15: 85 d2 test %edx,%edx + f17: 74 1c je f35 base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - f9d: 8b 02 mov (%edx),%eax + f19: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - f9f: 8b 48 04 mov 0x4(%eax),%ecx - fa2: 39 cb cmp %ecx,%ebx - fa4: 76 3c jbe fe2 - fa6: 81 fb 00 10 00 00 cmp $0x1000,%ebx - fac: be 00 10 00 00 mov $0x1000,%esi - fb1: 0f 43 f3 cmovae %ebx,%esi + f1b: 8b 48 04 mov 0x4(%eax),%ecx + f1e: 39 cb cmp %ecx,%ebx + f20: 76 38 jbe f5a + f22: be 00 10 00 00 mov $0x1000,%esi + f27: 39 f3 cmp %esi,%ebx + f29: 0f 43 f3 cmovae %ebx,%esi p = sbrk(nu * sizeof(Header)); - fb4: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi - fbb: eb 72 jmp 102f + f2c: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi + f33: eb 72 jmp fa7 base.s.ptr = freep = prevp = &base; - fbd: c7 05 04 17 00 00 08 movl $0x1708,0x1704 - fc4: 17 00 00 - fc7: c7 05 08 17 00 00 08 movl $0x1708,0x1708 - fce: 17 00 00 + f35: c7 05 e4 16 00 00 e8 movl $0x16e8,0x16e4 + f3c: 16 00 00 + f3f: c7 05 e8 16 00 00 e8 movl $0x16e8,0x16e8 + f46: 16 00 00 base.s.size = 0; - fd1: c7 05 0c 17 00 00 00 movl $0x0,0x170c - fd8: 00 00 00 + f49: c7 05 ec 16 00 00 00 movl $0x0,0x16ec + f50: 00 00 00 for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - fdb: b8 08 17 00 00 mov $0x1708,%eax - fe0: eb c4 jmp fa6 + f53: b8 e8 16 00 00 mov $0x16e8,%eax + f58: eb c8 jmp f22 if(p->s.size == nunits) - fe2: 39 cb cmp %ecx,%ebx - fe4: 74 1e je 1004 + f5a: 39 cb cmp %ecx,%ebx + f5c: 74 1e je f7c prevp->s.ptr = p->s.ptr; else { p->s.size -= nunits; - fe6: 29 d9 sub %ebx,%ecx - fe8: 89 48 04 mov %ecx,0x4(%eax) + f5e: 29 d9 sub %ebx,%ecx + f60: 89 48 04 mov %ecx,0x4(%eax) p += p->s.size; - feb: 8d 04 c8 lea (%eax,%ecx,8),%eax + f63: 8d 04 c8 lea (%eax,%ecx,8),%eax p->s.size = nunits; - fee: 89 58 04 mov %ebx,0x4(%eax) + f66: 89 58 04 mov %ebx,0x4(%eax) } freep = prevp; - ff1: 89 15 04 17 00 00 mov %edx,0x1704 + f69: 89 15 e4 16 00 00 mov %edx,0x16e4 return (void*)(p + 1); - ff7: 8d 50 08 lea 0x8(%eax),%edx + f6f: 8d 50 08 lea 0x8(%eax),%edx } if(p == freep) if((p = morecore(nunits)) == 0) return 0; } } - ffa: 89 d0 mov %edx,%eax - ffc: 8d 65 f4 lea -0xc(%ebp),%esp - fff: 5b pop %ebx - 1000: 5e pop %esi - 1001: 5f pop %edi - 1002: 5d pop %ebp - 1003: c3 ret + f72: 89 d0 mov %edx,%eax + f74: 8d 65 f4 lea -0xc(%ebp),%esp + f77: 5b pop %ebx + f78: 5e pop %esi + f79: 5f pop %edi + f7a: 5d pop %ebp + f7b: c3 ret prevp->s.ptr = p->s.ptr; - 1004: 8b 08 mov (%eax),%ecx - 1006: 89 0a mov %ecx,(%edx) - 1008: eb e7 jmp ff1 + f7c: 8b 08 mov (%eax),%ecx + f7e: 89 0a mov %ecx,(%edx) + f80: eb e7 jmp f69 hp->s.size = nu; - 100a: 89 70 04 mov %esi,0x4(%eax) + f82: 89 70 04 mov %esi,0x4(%eax) free((void*)(hp + 1)); - 100d: 83 ec 0c sub $0xc,%esp - 1010: 83 c0 08 add $0x8,%eax - 1013: 50 push %eax - 1014: e8 ef fe ff ff call f08 + f85: 83 ec 0c sub $0xc,%esp + f88: 83 c0 08 add $0x8,%eax + f8b: 50 push %eax + f8c: e8 00 ff ff ff call e91 return freep; - 1019: 8b 15 04 17 00 00 mov 0x1704,%edx + f91: 8b 15 e4 16 00 00 mov 0x16e4,%edx if((p = morecore(nunits)) == 0) - 101f: 83 c4 10 add $0x10,%esp - 1022: 85 d2 test %edx,%edx - 1024: 74 d4 je ffa + f97: 83 c4 10 add $0x10,%esp + f9a: 85 d2 test %edx,%edx + f9c: 74 d4 je f72 for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 1026: 8b 02 mov (%edx),%eax + f9e: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 1028: 8b 48 04 mov 0x4(%eax),%ecx - 102b: 39 d9 cmp %ebx,%ecx - 102d: 73 b3 jae fe2 + fa0: 8b 48 04 mov 0x4(%eax),%ecx + fa3: 39 d9 cmp %ebx,%ecx + fa5: 73 b3 jae f5a if(p == freep) - 102f: 89 c2 mov %eax,%edx - 1031: 39 05 04 17 00 00 cmp %eax,0x1704 - 1037: 75 ed jne 1026 + fa7: 89 c2 mov %eax,%edx + fa9: 39 05 e4 16 00 00 cmp %eax,0x16e4 + faf: 75 ed jne f9e p = sbrk(nu * sizeof(Header)); - 1039: 83 ec 0c sub $0xc,%esp - 103c: 57 push %edi - 103d: e8 3c fc ff ff call c7e + fb1: 83 ec 0c sub $0xc,%esp + fb4: 57 push %edi + fb5: e8 59 fc ff ff call c13 if(p == (char*)-1) - 1042: 83 c4 10 add $0x10,%esp - 1045: 83 f8 ff cmp $0xffffffff,%eax - 1048: 75 c0 jne 100a + fba: 83 c4 10 add $0x10,%esp + fbd: 83 f8 ff cmp $0xffffffff,%eax + fc0: 75 c0 jne f82 return 0; - 104a: ba 00 00 00 00 mov $0x0,%edx - 104f: eb a9 jmp ffa + fc2: ba 00 00 00 00 mov $0x0,%edx + fc7: eb a9 jmp f72 diff --git a/src/user/sh.d b/src/user/sh.d new file mode 100644 index 0000000..642e9ce --- /dev/null +++ b/src/user/sh.d @@ -0,0 +1 @@ +user/sh.o: user/sh.c /usr/include/stdc-predef.h types.h user.h fcntl.h diff --git a/src/user/sh.o b/src/user/sh.o new file mode 100644 index 0000000000000000000000000000000000000000..94827b4149d4bd0b4a3729d33a4969587c5aabc0 GIT binary patch literal 18232 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 + 6: e8 6d 02 00 00 call 278 exit(); - f: e8 e6 01 00 00 call 1fa + b: e8 c8 01 00 00 call 1d8 -00000014 : +00000010 : #include "user.h" #include "x86.h" char* strcpy(char *s, const char *t) { - 14: f3 0f 1e fb endbr32 - 18: 55 push %ebp - 19: 89 e5 mov %esp,%ebp - 1b: 53 push %ebx - 1c: 8b 4d 08 mov 0x8(%ebp),%ecx - 1f: 8b 5d 0c mov 0xc(%ebp),%ebx + 10: 55 push %ebp + 11: 89 e5 mov %esp,%ebp + 13: 53 push %ebx + 14: 8b 4d 08 mov 0x8(%ebp),%ecx + 17: 8b 5d 0c mov 0xc(%ebp),%ebx char *os; os = s; while((*s++ = *t++) != 0) - 22: b8 00 00 00 00 mov $0x0,%eax - 27: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 2b: 88 14 01 mov %dl,(%ecx,%eax,1) - 2e: 83 c0 01 add $0x1,%eax - 31: 84 d2 test %dl,%dl - 33: 75 f2 jne 27 + 1a: b8 00 00 00 00 mov $0x0,%eax + 1f: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx + 23: 88 14 01 mov %dl,(%ecx,%eax,1) + 26: 83 c0 01 add $0x1,%eax + 29: 84 d2 test %dl,%dl + 2b: 75 f2 jne 1f ; return os; } - 35: 89 c8 mov %ecx,%eax - 37: 5b pop %ebx - 38: 5d pop %ebp - 39: c3 ret + 2d: 89 c8 mov %ecx,%eax + 2f: 8b 5d fc mov -0x4(%ebp),%ebx + 32: c9 leave + 33: c3 ret -0000003a : +00000034 : int strcmp(const char *p, const char *q) { - 3a: f3 0f 1e fb endbr32 - 3e: 55 push %ebp - 3f: 89 e5 mov %esp,%ebp - 41: 8b 4d 08 mov 0x8(%ebp),%ecx - 44: 8b 55 0c mov 0xc(%ebp),%edx + 34: 55 push %ebp + 35: 89 e5 mov %esp,%ebp + 37: 8b 4d 08 mov 0x8(%ebp),%ecx + 3a: 8b 55 0c mov 0xc(%ebp),%edx while(*p && *p == *q) - 47: 0f b6 01 movzbl (%ecx),%eax - 4a: 84 c0 test %al,%al - 4c: 74 11 je 5f - 4e: 38 02 cmp %al,(%edx) - 50: 75 0d jne 5f + 3d: 0f b6 01 movzbl (%ecx),%eax + 40: 84 c0 test %al,%al + 42: 74 11 je 55 + 44: 38 02 cmp %al,(%edx) + 46: 75 0d jne 55 p++, q++; - 52: 83 c1 01 add $0x1,%ecx - 55: 83 c2 01 add $0x1,%edx + 48: 83 c1 01 add $0x1,%ecx + 4b: 83 c2 01 add $0x1,%edx while(*p && *p == *q) - 58: 0f b6 01 movzbl (%ecx),%eax - 5b: 84 c0 test %al,%al - 5d: 75 ef jne 4e + 4e: 0f b6 01 movzbl (%ecx),%eax + 51: 84 c0 test %al,%al + 53: 75 ef jne 44 return (uchar)*p - (uchar)*q; - 5f: 0f b6 c0 movzbl %al,%eax - 62: 0f b6 12 movzbl (%edx),%edx - 65: 29 d0 sub %edx,%eax + 55: 0f b6 c0 movzbl %al,%eax + 58: 0f b6 12 movzbl (%edx),%edx + 5b: 29 d0 sub %edx,%eax } - 67: 5d pop %ebp - 68: c3 ret + 5d: 5d pop %ebp + 5e: c3 ret -00000069 : +0000005f : uint strlen(const char *s) { - 69: f3 0f 1e fb endbr32 - 6d: 55 push %ebp - 6e: 89 e5 mov %esp,%ebp - 70: 8b 55 08 mov 0x8(%ebp),%edx + 5f: 55 push %ebp + 60: 89 e5 mov %esp,%ebp + 62: 8b 55 08 mov 0x8(%ebp),%edx int n; for(n = 0; s[n]; n++) - 73: 80 3a 00 cmpb $0x0,(%edx) - 76: 74 14 je 8c - 78: b8 00 00 00 00 mov $0x0,%eax - 7d: 83 c0 01 add $0x1,%eax - 80: 89 c1 mov %eax,%ecx - 82: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - 86: 75 f5 jne 7d + 65: 80 3a 00 cmpb $0x0,(%edx) + 68: 74 14 je 7e + 6a: b8 00 00 00 00 mov $0x0,%eax + 6f: 83 c0 01 add $0x1,%eax + 72: 89 c1 mov %eax,%ecx + 74: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) + 78: 75 f5 jne 6f ; return n; } - 88: 89 c8 mov %ecx,%eax - 8a: 5d pop %ebp - 8b: c3 ret + 7a: 89 c8 mov %ecx,%eax + 7c: 5d pop %ebp + 7d: c3 ret for(n = 0; s[n]; n++) - 8c: b9 00 00 00 00 mov $0x0,%ecx + 7e: b9 00 00 00 00 mov $0x0,%ecx return n; - 91: eb f5 jmp 88 + 83: eb f5 jmp 7a -00000093 : +00000085 : void* memset(void *dst, int c, uint n) { - 93: f3 0f 1e fb endbr32 - 97: 55 push %ebp - 98: 89 e5 mov %esp,%ebp - 9a: 57 push %edi - 9b: 8b 55 08 mov 0x8(%ebp),%edx + 85: 55 push %ebp + 86: 89 e5 mov %esp,%ebp + 88: 57 push %edi + 89: 8b 55 08 mov 0x8(%ebp),%edx } static inline void stosb(void *addr, int data, int cnt) { asm volatile("cld; rep stosb" : - 9e: 89 d7 mov %edx,%edi - a0: 8b 4d 10 mov 0x10(%ebp),%ecx - a3: 8b 45 0c mov 0xc(%ebp),%eax - a6: fc cld - a7: f3 aa rep stos %al,%es:(%edi) + 8c: 89 d7 mov %edx,%edi + 8e: 8b 4d 10 mov 0x10(%ebp),%ecx + 91: 8b 45 0c mov 0xc(%ebp),%eax + 94: fc cld + 95: f3 aa rep stos %al,%es:(%edi) stosb(dst, c, n); return dst; } - a9: 89 d0 mov %edx,%eax - ab: 5f pop %edi - ac: 5d pop %ebp - ad: c3 ret + 97: 89 d0 mov %edx,%eax + 99: 8b 7d fc mov -0x4(%ebp),%edi + 9c: c9 leave + 9d: c3 ret -000000ae : +0000009e : char* strchr(const char *s, char c) { - ae: f3 0f 1e fb endbr32 - b2: 55 push %ebp - b3: 89 e5 mov %esp,%ebp - b5: 8b 45 08 mov 0x8(%ebp),%eax - b8: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx + 9e: 55 push %ebp + 9f: 89 e5 mov %esp,%ebp + a1: 8b 45 08 mov 0x8(%ebp),%eax + a4: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx for(; *s; s++) - bc: 0f b6 10 movzbl (%eax),%edx - bf: 84 d2 test %dl,%dl - c1: 74 15 je d8 + a8: 0f b6 10 movzbl (%eax),%edx + ab: 84 d2 test %dl,%dl + ad: 74 15 je c4 if(*s == c) - c3: 38 d1 cmp %dl,%cl - c5: 74 0f je d6 + af: 38 d1 cmp %dl,%cl + b1: 74 0f je c2 for(; *s; s++) - c7: 83 c0 01 add $0x1,%eax - ca: 0f b6 10 movzbl (%eax),%edx - cd: 84 d2 test %dl,%dl - cf: 75 f2 jne c3 + b3: 83 c0 01 add $0x1,%eax + b6: 0f b6 10 movzbl (%eax),%edx + b9: 84 d2 test %dl,%dl + bb: 75 f2 jne af return (char*)s; return 0; - d1: b8 00 00 00 00 mov $0x0,%eax + bd: b8 00 00 00 00 mov $0x0,%eax } - d6: 5d pop %ebp - d7: c3 ret + c2: 5d pop %ebp + c3: c3 ret return 0; - d8: b8 00 00 00 00 mov $0x0,%eax - dd: eb f7 jmp d6 + c4: b8 00 00 00 00 mov $0x0,%eax + c9: eb f7 jmp c2 -000000df : +000000cb : char* gets(char *buf, int max) { - df: f3 0f 1e fb endbr32 - e3: 55 push %ebp - e4: 89 e5 mov %esp,%ebp - e6: 57 push %edi - e7: 56 push %esi - e8: 53 push %ebx - e9: 83 ec 2c sub $0x2c,%esp - ec: 8b 75 08 mov 0x8(%ebp),%esi + cb: 55 push %ebp + cc: 89 e5 mov %esp,%ebp + ce: 57 push %edi + cf: 56 push %esi + d0: 53 push %ebx + d1: 83 ec 2c sub $0x2c,%esp + d4: 8b 75 08 mov 0x8(%ebp),%esi int i, cc; char c; for(i=0; i+1 < max; ){ - ef: bb 00 00 00 00 mov $0x0,%ebx + d7: bb 00 00 00 00 mov $0x0,%ebx cc = read(0, &c, 1); - f4: 8d 7d e7 lea -0x19(%ebp),%edi + dc: 8d 7d e7 lea -0x19(%ebp),%edi for(i=0; i+1 < max; ){ - f7: 89 5d d4 mov %ebx,-0x2c(%ebp) - fa: 83 c3 01 add $0x1,%ebx - fd: 3b 5d 0c cmp 0xc(%ebp),%ebx - 100: 7d 27 jge 129 + df: 89 5d d4 mov %ebx,-0x2c(%ebp) + e2: 83 c3 01 add $0x1,%ebx + e5: 3b 5d 0c cmp 0xc(%ebp),%ebx + e8: 7d 27 jge 111 cc = read(0, &c, 1); - 102: 83 ec 04 sub $0x4,%esp - 105: 6a 01 push $0x1 - 107: 57 push %edi - 108: 6a 00 push $0x0 - 10a: e8 03 01 00 00 call 212 + ea: 83 ec 04 sub $0x4,%esp + ed: 6a 01 push $0x1 + ef: 57 push %edi + f0: 6a 00 push $0x0 + f2: e8 f9 00 00 00 call 1f0 if(cc < 1) - 10f: 83 c4 10 add $0x10,%esp - 112: 85 c0 test %eax,%eax - 114: 7e 13 jle 129 + f7: 83 c4 10 add $0x10,%esp + fa: 85 c0 test %eax,%eax + fc: 7e 13 jle 111 break; buf[i++] = c; - 116: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 11a: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) + fe: 0f b6 45 e7 movzbl -0x19(%ebp),%eax + 102: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) if(c == '\n' || c == '\r') - 11e: 3c 0a cmp $0xa,%al - 120: 74 04 je 126 - 122: 3c 0d cmp $0xd,%al - 124: 75 d1 jne f7 + 106: 3c 0a cmp $0xa,%al + 108: 74 04 je 10e + 10a: 3c 0d cmp $0xd,%al + 10c: 75 d1 jne df for(i=0; i+1 < max; ){ - 126: 89 5d d4 mov %ebx,-0x2c(%ebp) + 10e: 89 5d d4 mov %ebx,-0x2c(%ebp) break; } buf[i] = '\0'; - 129: 8b 45 d4 mov -0x2c(%ebp),%eax - 12c: c6 04 06 00 movb $0x0,(%esi,%eax,1) + 111: 8b 45 d4 mov -0x2c(%ebp),%eax + 114: c6 04 06 00 movb $0x0,(%esi,%eax,1) return buf; } - 130: 89 f0 mov %esi,%eax - 132: 8d 65 f4 lea -0xc(%ebp),%esp - 135: 5b pop %ebx - 136: 5e pop %esi - 137: 5f pop %edi - 138: 5d pop %ebp - 139: c3 ret + 118: 89 f0 mov %esi,%eax + 11a: 8d 65 f4 lea -0xc(%ebp),%esp + 11d: 5b pop %ebx + 11e: 5e pop %esi + 11f: 5f pop %edi + 120: 5d pop %ebp + 121: c3 ret -0000013a : +00000122 : int stat(const char *n, struct stat *st) { - 13a: f3 0f 1e fb endbr32 - 13e: 55 push %ebp - 13f: 89 e5 mov %esp,%ebp - 141: 56 push %esi - 142: 53 push %ebx + 122: 55 push %ebp + 123: 89 e5 mov %esp,%ebp + 125: 56 push %esi + 126: 53 push %ebx int fd; int r; fd = open(n, O_RDONLY); - 143: 83 ec 08 sub $0x8,%esp - 146: 6a 00 push $0x0 - 148: ff 75 08 pushl 0x8(%ebp) - 14b: e8 ea 00 00 00 call 23a + 127: 83 ec 08 sub $0x8,%esp + 12a: 6a 00 push $0x0 + 12c: ff 75 08 push 0x8(%ebp) + 12f: e8 e4 00 00 00 call 218 if(fd < 0) - 150: 83 c4 10 add $0x10,%esp - 153: 85 c0 test %eax,%eax - 155: 78 24 js 17b - 157: 89 c3 mov %eax,%ebx + 134: 83 c4 10 add $0x10,%esp + 137: 85 c0 test %eax,%eax + 139: 78 24 js 15f + 13b: 89 c3 mov %eax,%ebx return -1; r = fstat(fd, st); - 159: 83 ec 08 sub $0x8,%esp - 15c: ff 75 0c pushl 0xc(%ebp) - 15f: 50 push %eax - 160: e8 ed 00 00 00 call 252 - 165: 89 c6 mov %eax,%esi + 13d: 83 ec 08 sub $0x8,%esp + 140: ff 75 0c push 0xc(%ebp) + 143: 50 push %eax + 144: e8 e7 00 00 00 call 230 + 149: 89 c6 mov %eax,%esi close(fd); - 167: 89 1c 24 mov %ebx,(%esp) - 16a: e8 b3 00 00 00 call 222 + 14b: 89 1c 24 mov %ebx,(%esp) + 14e: e8 ad 00 00 00 call 200 return r; - 16f: 83 c4 10 add $0x10,%esp + 153: 83 c4 10 add $0x10,%esp } - 172: 89 f0 mov %esi,%eax - 174: 8d 65 f8 lea -0x8(%ebp),%esp - 177: 5b pop %ebx - 178: 5e pop %esi - 179: 5d pop %ebp - 17a: c3 ret + 156: 89 f0 mov %esi,%eax + 158: 8d 65 f8 lea -0x8(%ebp),%esp + 15b: 5b pop %ebx + 15c: 5e pop %esi + 15d: 5d pop %ebp + 15e: c3 ret return -1; - 17b: be ff ff ff ff mov $0xffffffff,%esi - 180: eb f0 jmp 172 + 15f: be ff ff ff ff mov $0xffffffff,%esi + 164: eb f0 jmp 156 -00000182 : +00000166 : int atoi(const char *s) { - 182: f3 0f 1e fb endbr32 - 186: 55 push %ebp - 187: 89 e5 mov %esp,%ebp - 189: 53 push %ebx - 18a: 8b 55 08 mov 0x8(%ebp),%edx + 166: 55 push %ebp + 167: 89 e5 mov %esp,%ebp + 169: 53 push %ebx + 16a: 8b 55 08 mov 0x8(%ebp),%edx int n; n = 0; while('0' <= *s && *s <= '9') - 18d: 0f b6 02 movzbl (%edx),%eax - 190: 8d 48 d0 lea -0x30(%eax),%ecx - 193: 80 f9 09 cmp $0x9,%cl - 196: 77 22 ja 1ba + 16d: 0f b6 02 movzbl (%edx),%eax + 170: 8d 48 d0 lea -0x30(%eax),%ecx + 173: 80 f9 09 cmp $0x9,%cl + 176: 77 24 ja 19c n = 0; - 198: b9 00 00 00 00 mov $0x0,%ecx + 178: b9 00 00 00 00 mov $0x0,%ecx n = n*10 + *s++ - '0'; - 19d: 83 c2 01 add $0x1,%edx - 1a0: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 1a3: 0f be c0 movsbl %al,%eax - 1a6: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx + 17d: 83 c2 01 add $0x1,%edx + 180: 8d 0c 89 lea (%ecx,%ecx,4),%ecx + 183: 0f be c0 movsbl %al,%eax + 186: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx while('0' <= *s && *s <= '9') - 1aa: 0f b6 02 movzbl (%edx),%eax - 1ad: 8d 58 d0 lea -0x30(%eax),%ebx - 1b0: 80 fb 09 cmp $0x9,%bl - 1b3: 76 e8 jbe 19d + 18a: 0f b6 02 movzbl (%edx),%eax + 18d: 8d 58 d0 lea -0x30(%eax),%ebx + 190: 80 fb 09 cmp $0x9,%bl + 193: 76 e8 jbe 17d return n; } - 1b5: 89 c8 mov %ecx,%eax - 1b7: 5b pop %ebx - 1b8: 5d pop %ebp - 1b9: c3 ret + 195: 89 c8 mov %ecx,%eax + 197: 8b 5d fc mov -0x4(%ebp),%ebx + 19a: c9 leave + 19b: c3 ret n = 0; - 1ba: b9 00 00 00 00 mov $0x0,%ecx + 19c: b9 00 00 00 00 mov $0x0,%ecx return n; - 1bf: eb f4 jmp 1b5 + 1a1: eb f2 jmp 195 -000001c1 : +000001a3 : void* memmove(void *vdst, const void *vsrc, int n) { - 1c1: f3 0f 1e fb endbr32 - 1c5: 55 push %ebp - 1c6: 89 e5 mov %esp,%ebp - 1c8: 56 push %esi - 1c9: 53 push %ebx - 1ca: 8b 75 08 mov 0x8(%ebp),%esi - 1cd: 8b 55 0c mov 0xc(%ebp),%edx - 1d0: 8b 5d 10 mov 0x10(%ebp),%ebx + 1a3: 55 push %ebp + 1a4: 89 e5 mov %esp,%ebp + 1a6: 56 push %esi + 1a7: 53 push %ebx + 1a8: 8b 75 08 mov 0x8(%ebp),%esi + 1ab: 8b 55 0c mov 0xc(%ebp),%edx + 1ae: 8b 5d 10 mov 0x10(%ebp),%ebx char *dst; const char *src; dst = vdst; src = vsrc; while(n-- > 0) - 1d3: 85 db test %ebx,%ebx - 1d5: 7e 15 jle 1ec - 1d7: 01 f3 add %esi,%ebx + 1b1: 85 db test %ebx,%ebx + 1b3: 7e 15 jle 1ca + 1b5: 01 f3 add %esi,%ebx dst = vdst; - 1d9: 89 f0 mov %esi,%eax + 1b7: 89 f0 mov %esi,%eax *dst++ = *src++; - 1db: 83 c2 01 add $0x1,%edx - 1de: 83 c0 01 add $0x1,%eax - 1e1: 0f b6 4a ff movzbl -0x1(%edx),%ecx - 1e5: 88 48 ff mov %cl,-0x1(%eax) + 1b9: 83 c2 01 add $0x1,%edx + 1bc: 83 c0 01 add $0x1,%eax + 1bf: 0f b6 4a ff movzbl -0x1(%edx),%ecx + 1c3: 88 48 ff mov %cl,-0x1(%eax) while(n-- > 0) - 1e8: 39 c3 cmp %eax,%ebx - 1ea: 75 ef jne 1db + 1c6: 39 c3 cmp %eax,%ebx + 1c8: 75 ef jne 1b9 return vdst; } - 1ec: 89 f0 mov %esi,%eax - 1ee: 5b pop %ebx - 1ef: 5e pop %esi - 1f0: 5d pop %ebp - 1f1: c3 ret + 1ca: 89 f0 mov %esi,%eax + 1cc: 5b pop %ebx + 1cd: 5e pop %esi + 1ce: 5d pop %ebp + 1cf: c3 ret -000001f2 : +000001d0 : name: \ movl $SYS_ ## name, %eax; \ int $T_SYSCALL; \ ret SYSCALL(fork) - 1f2: b8 01 00 00 00 mov $0x1,%eax - 1f7: cd 40 int $0x40 - 1f9: c3 ret + 1d0: b8 01 00 00 00 mov $0x1,%eax + 1d5: cd 40 int $0x40 + 1d7: c3 ret -000001fa : +000001d8 : SYSCALL(exit) - 1fa: b8 02 00 00 00 mov $0x2,%eax - 1ff: cd 40 int $0x40 - 201: c3 ret + 1d8: b8 02 00 00 00 mov $0x2,%eax + 1dd: cd 40 int $0x40 + 1df: c3 ret -00000202 : +000001e0 : SYSCALL(wait) - 202: b8 03 00 00 00 mov $0x3,%eax - 207: cd 40 int $0x40 - 209: c3 ret + 1e0: b8 03 00 00 00 mov $0x3,%eax + 1e5: cd 40 int $0x40 + 1e7: c3 ret -0000020a : +000001e8 : SYSCALL(pipe) - 20a: b8 04 00 00 00 mov $0x4,%eax - 20f: cd 40 int $0x40 - 211: c3 ret + 1e8: b8 04 00 00 00 mov $0x4,%eax + 1ed: cd 40 int $0x40 + 1ef: c3 ret -00000212 : +000001f0 : SYSCALL(read) - 212: b8 05 00 00 00 mov $0x5,%eax - 217: cd 40 int $0x40 - 219: c3 ret + 1f0: b8 05 00 00 00 mov $0x5,%eax + 1f5: cd 40 int $0x40 + 1f7: c3 ret -0000021a : +000001f8 : SYSCALL(write) - 21a: b8 10 00 00 00 mov $0x10,%eax - 21f: cd 40 int $0x40 - 221: c3 ret + 1f8: b8 10 00 00 00 mov $0x10,%eax + 1fd: cd 40 int $0x40 + 1ff: c3 ret -00000222 : +00000200 : SYSCALL(close) - 222: b8 15 00 00 00 mov $0x15,%eax - 227: cd 40 int $0x40 - 229: c3 ret + 200: b8 15 00 00 00 mov $0x15,%eax + 205: cd 40 int $0x40 + 207: c3 ret -0000022a : +00000208 : SYSCALL(kill) - 22a: b8 06 00 00 00 mov $0x6,%eax - 22f: cd 40 int $0x40 - 231: c3 ret + 208: b8 06 00 00 00 mov $0x6,%eax + 20d: cd 40 int $0x40 + 20f: c3 ret -00000232 : +00000210 : SYSCALL(exec) - 232: b8 07 00 00 00 mov $0x7,%eax - 237: cd 40 int $0x40 - 239: c3 ret + 210: b8 07 00 00 00 mov $0x7,%eax + 215: cd 40 int $0x40 + 217: c3 ret -0000023a : +00000218 : SYSCALL(open) - 23a: b8 0f 00 00 00 mov $0xf,%eax - 23f: cd 40 int $0x40 - 241: c3 ret + 218: b8 0f 00 00 00 mov $0xf,%eax + 21d: cd 40 int $0x40 + 21f: c3 ret -00000242 : +00000220 : SYSCALL(mknod) - 242: b8 11 00 00 00 mov $0x11,%eax - 247: cd 40 int $0x40 - 249: c3 ret + 220: b8 11 00 00 00 mov $0x11,%eax + 225: cd 40 int $0x40 + 227: c3 ret -0000024a : +00000228 : SYSCALL(unlink) - 24a: b8 12 00 00 00 mov $0x12,%eax - 24f: cd 40 int $0x40 - 251: c3 ret + 228: b8 12 00 00 00 mov $0x12,%eax + 22d: cd 40 int $0x40 + 22f: c3 ret -00000252 : +00000230 : SYSCALL(fstat) - 252: b8 08 00 00 00 mov $0x8,%eax - 257: cd 40 int $0x40 - 259: c3 ret + 230: b8 08 00 00 00 mov $0x8,%eax + 235: cd 40 int $0x40 + 237: c3 ret -0000025a : +00000238 : SYSCALL(link) - 25a: b8 13 00 00 00 mov $0x13,%eax - 25f: cd 40 int $0x40 - 261: c3 ret + 238: b8 13 00 00 00 mov $0x13,%eax + 23d: cd 40 int $0x40 + 23f: c3 ret -00000262 : +00000240 : SYSCALL(mkdir) - 262: b8 14 00 00 00 mov $0x14,%eax - 267: cd 40 int $0x40 - 269: c3 ret + 240: b8 14 00 00 00 mov $0x14,%eax + 245: cd 40 int $0x40 + 247: c3 ret -0000026a : +00000248 : SYSCALL(chdir) - 26a: b8 09 00 00 00 mov $0x9,%eax - 26f: cd 40 int $0x40 - 271: c3 ret + 248: b8 09 00 00 00 mov $0x9,%eax + 24d: cd 40 int $0x40 + 24f: c3 ret -00000272 : +00000250 : SYSCALL(dup) - 272: b8 0a 00 00 00 mov $0xa,%eax - 277: cd 40 int $0x40 - 279: c3 ret + 250: b8 0a 00 00 00 mov $0xa,%eax + 255: cd 40 int $0x40 + 257: c3 ret -0000027a : +00000258 : SYSCALL(getpid) - 27a: b8 0b 00 00 00 mov $0xb,%eax - 27f: cd 40 int $0x40 - 281: c3 ret + 258: b8 0b 00 00 00 mov $0xb,%eax + 25d: cd 40 int $0x40 + 25f: c3 ret -00000282 : +00000260 : SYSCALL(sbrk) - 282: b8 0c 00 00 00 mov $0xc,%eax - 287: cd 40 int $0x40 - 289: c3 ret + 260: b8 0c 00 00 00 mov $0xc,%eax + 265: cd 40 int $0x40 + 267: c3 ret -0000028a : +00000268 : SYSCALL(sleep) - 28a: b8 0d 00 00 00 mov $0xd,%eax - 28f: cd 40 int $0x40 - 291: c3 ret + 268: b8 0d 00 00 00 mov $0xd,%eax + 26d: cd 40 int $0x40 + 26f: c3 ret -00000292 : +00000270 : SYSCALL(uptime) - 292: b8 0e 00 00 00 mov $0xe,%eax - 297: cd 40 int $0x40 - 299: c3 ret + 270: b8 0e 00 00 00 mov $0xe,%eax + 275: cd 40 int $0x40 + 277: c3 ret -0000029a : +00000278 : SYSCALL(slabtest) - 29a: b8 16 00 00 00 mov $0x16,%eax - 29f: cd 40 int $0x40 - 2a1: c3 ret + 278: b8 16 00 00 00 mov $0x16,%eax + 27d: cd 40 int $0x40 + 27f: c3 ret -000002a2 : +00000280 : SYSCALL(ps) - 2a2: b8 17 00 00 00 mov $0x17,%eax - 2a7: cd 40 int $0x40 - 2a9: c3 ret + 280: b8 17 00 00 00 mov $0x17,%eax + 285: cd 40 int $0x40 + 287: c3 ret -000002aa : +00000288 : write(fd, &c, 1); } static void printint(int fd, int xx, int base, int sgn) { - 2aa: 55 push %ebp - 2ab: 89 e5 mov %esp,%ebp - 2ad: 57 push %edi - 2ae: 56 push %esi - 2af: 53 push %ebx - 2b0: 83 ec 3c sub $0x3c,%esp - 2b3: 89 45 c4 mov %eax,-0x3c(%ebp) - 2b6: 89 d3 mov %edx,%ebx + 288: 55 push %ebp + 289: 89 e5 mov %esp,%ebp + 28b: 57 push %edi + 28c: 56 push %esi + 28d: 53 push %ebx + 28e: 83 ec 3c sub $0x3c,%esp + 291: 89 45 c4 mov %eax,-0x3c(%ebp) + 294: 89 ce mov %ecx,%esi char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 2b8: 83 7d 08 00 cmpl $0x0,0x8(%ebp) - 2bc: 74 77 je 335 - 2be: 85 d2 test %edx,%edx - 2c0: 79 73 jns 335 + 296: 83 7d 08 00 cmpl $0x0,0x8(%ebp) + 29a: 74 79 je 315 + 29c: 85 d2 test %edx,%edx + 29e: 79 75 jns 315 neg = 1; x = -xx; - 2c2: f7 db neg %ebx + 2a0: 89 d1 mov %edx,%ecx + 2a2: f7 d9 neg %ecx neg = 1; - 2c4: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) + 2a4: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) } else { x = xx; } i = 0; - 2cb: be 00 00 00 00 mov $0x0,%esi + 2ab: bb 00 00 00 00 mov $0x0,%ebx do{ buf[i++] = digits[x % base]; - 2d0: 89 f7 mov %esi,%edi - 2d2: 83 c6 01 add $0x1,%esi - 2d5: 89 d8 mov %ebx,%eax - 2d7: ba 00 00 00 00 mov $0x0,%edx - 2dc: f7 f1 div %ecx - 2de: 0f b6 92 60 06 00 00 movzbl 0x660(%edx),%edx - 2e5: 88 54 35 d7 mov %dl,-0x29(%ebp,%esi,1) + 2b0: 89 df mov %ebx,%edi + 2b2: 83 c3 01 add $0x1,%ebx + 2b5: 89 c8 mov %ecx,%eax + 2b7: ba 00 00 00 00 mov $0x0,%edx + 2bc: f7 f6 div %esi + 2be: 0f b6 92 78 06 00 00 movzbl 0x678(%edx),%edx + 2c5: 88 54 1d d7 mov %dl,-0x29(%ebp,%ebx,1) }while((x /= base) != 0); - 2e9: 89 da mov %ebx,%edx - 2eb: 89 c3 mov %eax,%ebx - 2ed: 39 d1 cmp %edx,%ecx - 2ef: 76 df jbe 2d0 + 2c9: 89 ca mov %ecx,%edx + 2cb: 89 c1 mov %eax,%ecx + 2cd: 39 d6 cmp %edx,%esi + 2cf: 76 df jbe 2b0 if(neg) - 2f1: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) - 2f5: 74 08 je 2ff + 2d1: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) + 2d5: 74 08 je 2df buf[i++] = '-'; - 2f7: c6 44 35 d8 2d movb $0x2d,-0x28(%ebp,%esi,1) - 2fc: 8d 77 02 lea 0x2(%edi),%esi + 2d7: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) + 2dc: 8d 5f 02 lea 0x2(%edi),%ebx while(--i >= 0) - 2ff: 85 f6 test %esi,%esi - 301: 7e 2a jle 32d - 303: 8d 5c 35 d7 lea -0x29(%ebp,%esi,1),%ebx - 307: 8d 7d d8 lea -0x28(%ebp),%edi + 2df: 85 db test %ebx,%ebx + 2e1: 7e 2a jle 30d + 2e3: 8d 7d d8 lea -0x28(%ebp),%edi + 2e6: 8d 5c 1d d7 lea -0x29(%ebp,%ebx,1),%ebx write(fd, &c, 1); - 30a: 8d 75 d7 lea -0x29(%ebp),%esi + 2ea: 8d 75 d7 lea -0x29(%ebp),%esi putc(fd, buf[i]); - 30d: 0f b6 03 movzbl (%ebx),%eax - 310: 88 45 d7 mov %al,-0x29(%ebp) + 2ed: 0f b6 03 movzbl (%ebx),%eax + 2f0: 88 45 d7 mov %al,-0x29(%ebp) write(fd, &c, 1); - 313: 83 ec 04 sub $0x4,%esp - 316: 6a 01 push $0x1 - 318: 56 push %esi - 319: ff 75 c4 pushl -0x3c(%ebp) - 31c: e8 f9 fe ff ff call 21a + 2f3: 83 ec 04 sub $0x4,%esp + 2f6: 6a 01 push $0x1 + 2f8: 56 push %esi + 2f9: ff 75 c4 push -0x3c(%ebp) + 2fc: e8 f7 fe ff ff call 1f8 while(--i >= 0) - 321: 89 d8 mov %ebx,%eax - 323: 83 eb 01 sub $0x1,%ebx - 326: 83 c4 10 add $0x10,%esp - 329: 39 f8 cmp %edi,%eax - 32b: 75 e0 jne 30d + 301: 89 d8 mov %ebx,%eax + 303: 83 eb 01 sub $0x1,%ebx + 306: 83 c4 10 add $0x10,%esp + 309: 39 f8 cmp %edi,%eax + 30b: 75 e0 jne 2ed } - 32d: 8d 65 f4 lea -0xc(%ebp),%esp - 330: 5b pop %ebx - 331: 5e pop %esi - 332: 5f pop %edi - 333: 5d pop %ebp - 334: c3 ret + 30d: 8d 65 f4 lea -0xc(%ebp),%esp + 310: 5b pop %ebx + 311: 5e pop %esi + 312: 5f pop %edi + 313: 5d pop %ebp + 314: c3 ret + x = xx; + 315: 89 d1 mov %edx,%ecx neg = 0; - 335: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) - 33c: eb 8d jmp 2cb + 317: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) + 31e: eb 8b jmp 2ab -0000033e : +00000320 : // Print to the given fd. Only understands %d, %x, %p, %s. void printf(int fd, const char *fmt, ...) { - 33e: f3 0f 1e fb endbr32 - 342: 55 push %ebp - 343: 89 e5 mov %esp,%ebp - 345: 57 push %edi - 346: 56 push %esi - 347: 53 push %ebx - 348: 83 ec 2c sub $0x2c,%esp + 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 2c sub $0x2c,%esp int c, i, state; uint *ap; state = 0; ap = (uint*)(void*)&fmt + 1; for(i = 0; fmt[i]; i++){ - 34b: 8b 75 0c mov 0xc(%ebp),%esi - 34e: 0f b6 1e movzbl (%esi),%ebx - 351: 84 db test %bl,%bl - 353: 0f 84 ab 01 00 00 je 504 - 359: 83 c6 01 add $0x1,%esi + 329: 8b 75 0c mov 0xc(%ebp),%esi + 32c: 0f b6 1e movzbl (%esi),%ebx + 32f: 84 db test %bl,%bl + 331: 0f 84 9f 01 00 00 je 4d6 + 337: 83 c6 01 add $0x1,%esi ap = (uint*)(void*)&fmt + 1; - 35c: 8d 45 10 lea 0x10(%ebp),%eax - 35f: 89 45 d4 mov %eax,-0x2c(%ebp) + 33a: 8d 45 10 lea 0x10(%ebp),%eax + 33d: 89 45 d4 mov %eax,-0x2c(%ebp) state = 0; - 362: bf 00 00 00 00 mov $0x0,%edi - 367: eb 2d jmp 396 + 340: bf 00 00 00 00 mov $0x0,%edi + 345: eb 2d jmp 374 c = fmt[i] & 0xff; if(state == 0){ if(c == '%'){ state = '%'; } else { putc(fd, c); - 369: 88 5d e7 mov %bl,-0x19(%ebp) + 347: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 36c: 83 ec 04 sub $0x4,%esp - 36f: 6a 01 push $0x1 - 371: 8d 45 e7 lea -0x19(%ebp),%eax - 374: 50 push %eax - 375: ff 75 08 pushl 0x8(%ebp) - 378: e8 9d fe ff ff call 21a + 34a: 83 ec 04 sub $0x4,%esp + 34d: 6a 01 push $0x1 + 34f: 8d 45 e7 lea -0x19(%ebp),%eax + 352: 50 push %eax + 353: ff 75 08 push 0x8(%ebp) + 356: e8 9d fe ff ff call 1f8 putc(fd, c); - 37d: 83 c4 10 add $0x10,%esp - 380: eb 05 jmp 387 + 35b: 83 c4 10 add $0x10,%esp + 35e: eb 05 jmp 365 } } else if(state == '%'){ - 382: 83 ff 25 cmp $0x25,%edi - 385: 74 22 je 3a9 + 360: 83 ff 25 cmp $0x25,%edi + 363: 74 1f je 384 for(i = 0; fmt[i]; i++){ - 387: 83 c6 01 add $0x1,%esi - 38a: 0f b6 5e ff movzbl -0x1(%esi),%ebx - 38e: 84 db test %bl,%bl - 390: 0f 84 6e 01 00 00 je 504 + 365: 83 c6 01 add $0x1,%esi + 368: 0f b6 5e ff movzbl -0x1(%esi),%ebx + 36c: 84 db test %bl,%bl + 36e: 0f 84 62 01 00 00 je 4d6 c = fmt[i] & 0xff; - 396: 0f be d3 movsbl %bl,%edx - 399: 0f b6 c3 movzbl %bl,%eax + 374: 0f b6 c3 movzbl %bl,%eax if(state == 0){ - 39c: 85 ff test %edi,%edi - 39e: 75 e2 jne 382 + 377: 85 ff test %edi,%edi + 379: 75 e5 jne 360 if(c == '%'){ - 3a0: 83 f8 25 cmp $0x25,%eax - 3a3: 75 c4 jne 369 + 37b: 83 f8 25 cmp $0x25,%eax + 37e: 75 c7 jne 347 state = '%'; - 3a5: 89 c7 mov %eax,%edi - 3a7: eb de jmp 387 + 380: 89 c7 mov %eax,%edi + 382: eb e1 jmp 365 if(c == 'd'){ - 3a9: 83 f8 64 cmp $0x64,%eax - 3ac: 74 59 je 407 + 384: 83 f8 25 cmp $0x25,%eax + 387: 0f 84 f2 00 00 00 je 47f + 38d: 8d 50 9d lea -0x63(%eax),%edx + 390: 83 fa 15 cmp $0x15,%edx + 393: 0f 87 07 01 00 00 ja 4a0 + 399: 0f 87 01 01 00 00 ja 4a0 + 39f: ff 24 95 20 06 00 00 jmp *0x620(,%edx,4) printint(fd, *ap, 10, 1); + 3a6: 83 ec 0c sub $0xc,%esp + 3a9: 6a 01 push $0x1 + 3ab: b9 0a 00 00 00 mov $0xa,%ecx + 3b0: 8b 7d d4 mov -0x2c(%ebp),%edi + 3b3: 8b 17 mov (%edi),%edx + 3b5: 8b 45 08 mov 0x8(%ebp),%eax + 3b8: e8 cb fe ff ff call 288 ap++; - } else if(c == 'x' || c == 'p'){ - 3ae: 81 e2 f7 00 00 00 and $0xf7,%edx - 3b4: 83 fa 70 cmp $0x70,%edx - 3b7: 74 7a je 433 - printint(fd, *ap, 16, 0); - ap++; - } else if(c == 's'){ - 3b9: 83 f8 73 cmp $0x73,%eax - 3bc: 0f 84 9d 00 00 00 je 45f - s = "(null)"; - while(*s != 0){ - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 3c2: 83 f8 63 cmp $0x63,%eax - 3c5: 0f 84 ec 00 00 00 je 4b7 - putc(fd, *ap); - ap++; - } else if(c == '%'){ - 3cb: 83 f8 25 cmp $0x25,%eax - 3ce: 0f 84 0f 01 00 00 je 4e3 - putc(fd, c); + 3bd: 89 f8 mov %edi,%eax + 3bf: 83 c0 04 add $0x4,%eax + 3c2: 89 45 d4 mov %eax,-0x2c(%ebp) + 3c5: 83 c4 10 add $0x10,%esp } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); - 3d4: c6 45 e7 25 movb $0x25,-0x19(%ebp) - write(fd, &c, 1); - 3d8: 83 ec 04 sub $0x4,%esp - 3db: 6a 01 push $0x1 - 3dd: 8d 45 e7 lea -0x19(%ebp),%eax - 3e0: 50 push %eax - 3e1: ff 75 08 pushl 0x8(%ebp) - 3e4: e8 31 fe ff ff call 21a putc(fd, c); - 3e9: 88 5d e7 mov %bl,-0x19(%ebp) - write(fd, &c, 1); - 3ec: 83 c4 0c add $0xc,%esp - 3ef: 6a 01 push $0x1 - 3f1: 8d 45 e7 lea -0x19(%ebp),%eax - 3f4: 50 push %eax - 3f5: ff 75 08 pushl 0x8(%ebp) - 3f8: e8 1d fe ff ff call 21a - putc(fd, c); - 3fd: 83 c4 10 add $0x10,%esp } state = 0; - 400: bf 00 00 00 00 mov $0x0,%edi - 405: eb 80 jmp 387 - printint(fd, *ap, 10, 1); - 407: 83 ec 0c sub $0xc,%esp - 40a: 6a 01 push $0x1 - 40c: b9 0a 00 00 00 mov $0xa,%ecx - 411: 8b 7d d4 mov -0x2c(%ebp),%edi - 414: 8b 17 mov (%edi),%edx - 416: 8b 45 08 mov 0x8(%ebp),%eax - 419: e8 8c fe ff ff call 2aa - ap++; - 41e: 89 f8 mov %edi,%eax - 420: 83 c0 04 add $0x4,%eax - 423: 89 45 d4 mov %eax,-0x2c(%ebp) - 426: 83 c4 10 add $0x10,%esp - state = 0; - 429: bf 00 00 00 00 mov $0x0,%edi - 42e: e9 54 ff ff ff jmp 387 + 3c8: bf 00 00 00 00 mov $0x0,%edi + 3cd: eb 96 jmp 365 printint(fd, *ap, 16, 0); - 433: 83 ec 0c sub $0xc,%esp - 436: 6a 00 push $0x0 - 438: b9 10 00 00 00 mov $0x10,%ecx - 43d: 8b 7d d4 mov -0x2c(%ebp),%edi - 440: 8b 17 mov (%edi),%edx - 442: 8b 45 08 mov 0x8(%ebp),%eax - 445: e8 60 fe ff ff call 2aa + 3cf: 83 ec 0c sub $0xc,%esp + 3d2: 6a 00 push $0x0 + 3d4: b9 10 00 00 00 mov $0x10,%ecx + 3d9: 8b 7d d4 mov -0x2c(%ebp),%edi + 3dc: 8b 17 mov (%edi),%edx + 3de: 8b 45 08 mov 0x8(%ebp),%eax + 3e1: e8 a2 fe ff ff call 288 ap++; - 44a: 89 f8 mov %edi,%eax - 44c: 83 c0 04 add $0x4,%eax - 44f: 89 45 d4 mov %eax,-0x2c(%ebp) - 452: 83 c4 10 add $0x10,%esp + 3e6: 89 f8 mov %edi,%eax + 3e8: 83 c0 04 add $0x4,%eax + 3eb: 89 45 d4 mov %eax,-0x2c(%ebp) + 3ee: 83 c4 10 add $0x10,%esp state = 0; - 455: bf 00 00 00 00 mov $0x0,%edi - 45a: e9 28 ff ff ff jmp 387 + 3f1: bf 00 00 00 00 mov $0x0,%edi + 3f6: e9 6a ff ff ff jmp 365 s = (char*)*ap; - 45f: 8b 4d d4 mov -0x2c(%ebp),%ecx - 462: 8b 01 mov (%ecx),%eax + 3fb: 8b 4d d4 mov -0x2c(%ebp),%ecx + 3fe: 8b 01 mov (%ecx),%eax ap++; - 464: 83 c1 04 add $0x4,%ecx - 467: 89 4d d4 mov %ecx,-0x2c(%ebp) + 400: 83 c1 04 add $0x4,%ecx + 403: 89 4d d4 mov %ecx,-0x2c(%ebp) if(s == 0) - 46a: 85 c0 test %eax,%eax - 46c: 74 13 je 481 + 406: 85 c0 test %eax,%eax + 408: 74 13 je 41d s = (char*)*ap; - 46e: 89 c3 mov %eax,%ebx + 40a: 89 c3 mov %eax,%ebx while(*s != 0){ - 470: 0f b6 00 movzbl (%eax),%eax + 40c: 0f b6 00 movzbl (%eax),%eax state = 0; - 473: bf 00 00 00 00 mov $0x0,%edi + 40f: bf 00 00 00 00 mov $0x0,%edi while(*s != 0){ - 478: 84 c0 test %al,%al - 47a: 75 0f jne 48b - 47c: e9 06 ff ff ff jmp 387 + 414: 84 c0 test %al,%al + 416: 75 0f jne 427 + 418: e9 48 ff ff ff jmp 365 s = "(null)"; - 481: bb 58 06 00 00 mov $0x658,%ebx + 41d: bb 18 06 00 00 mov $0x618,%ebx while(*s != 0){ - 486: b8 28 00 00 00 mov $0x28,%eax - 48b: 8b 7d 08 mov 0x8(%ebp),%edi + 422: b8 28 00 00 00 mov $0x28,%eax + 427: 8b 7d 08 mov 0x8(%ebp),%edi putc(fd, *s); - 48e: 88 45 e7 mov %al,-0x19(%ebp) + 42a: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 491: 83 ec 04 sub $0x4,%esp - 494: 6a 01 push $0x1 - 496: 8d 45 e7 lea -0x19(%ebp),%eax - 499: 50 push %eax - 49a: 57 push %edi - 49b: e8 7a fd ff ff call 21a + 42d: 83 ec 04 sub $0x4,%esp + 430: 6a 01 push $0x1 + 432: 8d 45 e7 lea -0x19(%ebp),%eax + 435: 50 push %eax + 436: 57 push %edi + 437: e8 bc fd ff ff call 1f8 s++; - 4a0: 83 c3 01 add $0x1,%ebx + 43c: 83 c3 01 add $0x1,%ebx while(*s != 0){ - 4a3: 0f b6 03 movzbl (%ebx),%eax - 4a6: 83 c4 10 add $0x10,%esp - 4a9: 84 c0 test %al,%al - 4ab: 75 e1 jne 48e + 43f: 0f b6 03 movzbl (%ebx),%eax + 442: 83 c4 10 add $0x10,%esp + 445: 84 c0 test %al,%al + 447: 75 e1 jne 42a state = 0; - 4ad: bf 00 00 00 00 mov $0x0,%edi - 4b2: e9 d0 fe ff ff jmp 387 + 449: bf 00 00 00 00 mov $0x0,%edi + 44e: e9 12 ff ff ff jmp 365 putc(fd, *ap); - 4b7: 8b 7d d4 mov -0x2c(%ebp),%edi - 4ba: 8b 07 mov (%edi),%eax - 4bc: 88 45 e7 mov %al,-0x19(%ebp) + 453: 8b 7d d4 mov -0x2c(%ebp),%edi + 456: 8b 07 mov (%edi),%eax + 458: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 4bf: 83 ec 04 sub $0x4,%esp - 4c2: 6a 01 push $0x1 - 4c4: 8d 45 e7 lea -0x19(%ebp),%eax - 4c7: 50 push %eax - 4c8: ff 75 08 pushl 0x8(%ebp) - 4cb: e8 4a fd ff ff call 21a + 45b: 83 ec 04 sub $0x4,%esp + 45e: 6a 01 push $0x1 + 460: 8d 45 e7 lea -0x19(%ebp),%eax + 463: 50 push %eax + 464: ff 75 08 push 0x8(%ebp) + 467: e8 8c fd ff ff call 1f8 ap++; - 4d0: 83 c7 04 add $0x4,%edi - 4d3: 89 7d d4 mov %edi,-0x2c(%ebp) - 4d6: 83 c4 10 add $0x10,%esp + 46c: 83 c7 04 add $0x4,%edi + 46f: 89 7d d4 mov %edi,-0x2c(%ebp) + 472: 83 c4 10 add $0x10,%esp state = 0; - 4d9: bf 00 00 00 00 mov $0x0,%edi - 4de: e9 a4 fe ff ff jmp 387 + 475: bf 00 00 00 00 mov $0x0,%edi + 47a: e9 e6 fe ff ff jmp 365 putc(fd, c); - 4e3: 88 5d e7 mov %bl,-0x19(%ebp) + 47f: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 4e6: 83 ec 04 sub $0x4,%esp - 4e9: 6a 01 push $0x1 - 4eb: 8d 45 e7 lea -0x19(%ebp),%eax - 4ee: 50 push %eax - 4ef: ff 75 08 pushl 0x8(%ebp) - 4f2: e8 23 fd ff ff call 21a - 4f7: 83 c4 10 add $0x10,%esp + 482: 83 ec 04 sub $0x4,%esp + 485: 6a 01 push $0x1 + 487: 8d 45 e7 lea -0x19(%ebp),%eax + 48a: 50 push %eax + 48b: ff 75 08 push 0x8(%ebp) + 48e: e8 65 fd ff ff call 1f8 + 493: 83 c4 10 add $0x10,%esp + state = 0; + 496: bf 00 00 00 00 mov $0x0,%edi + 49b: e9 c5 fe ff ff jmp 365 + putc(fd, '%'); + 4a0: c6 45 e7 25 movb $0x25,-0x19(%ebp) + write(fd, &c, 1); + 4a4: 83 ec 04 sub $0x4,%esp + 4a7: 6a 01 push $0x1 + 4a9: 8d 45 e7 lea -0x19(%ebp),%eax + 4ac: 50 push %eax + 4ad: ff 75 08 push 0x8(%ebp) + 4b0: e8 43 fd ff ff call 1f8 + putc(fd, c); + 4b5: 88 5d e7 mov %bl,-0x19(%ebp) + write(fd, &c, 1); + 4b8: 83 c4 0c add $0xc,%esp + 4bb: 6a 01 push $0x1 + 4bd: 8d 45 e7 lea -0x19(%ebp),%eax + 4c0: 50 push %eax + 4c1: ff 75 08 push 0x8(%ebp) + 4c4: e8 2f fd ff ff call 1f8 + putc(fd, c); + 4c9: 83 c4 10 add $0x10,%esp state = 0; - 4fa: bf 00 00 00 00 mov $0x0,%edi - 4ff: e9 83 fe ff ff jmp 387 + 4cc: bf 00 00 00 00 mov $0x0,%edi + 4d1: e9 8f fe ff ff jmp 365 } } } - 504: 8d 65 f4 lea -0xc(%ebp),%esp - 507: 5b pop %ebx - 508: 5e pop %esi - 509: 5f pop %edi - 50a: 5d pop %ebp - 50b: c3 ret - -0000050c : + 4d6: 8d 65 f4 lea -0xc(%ebp),%esp + 4d9: 5b pop %ebx + 4da: 5e pop %esi + 4db: 5f pop %edi + 4dc: 5d pop %ebp + 4dd: c3 ret + +000004de : static Header base; static Header *freep; void free(void *ap) { - 50c: f3 0f 1e fb endbr32 - 510: 55 push %ebp - 511: 89 e5 mov %esp,%ebp - 513: 57 push %edi - 514: 56 push %esi - 515: 53 push %ebx - 516: 8b 5d 08 mov 0x8(%ebp),%ebx + 4de: 55 push %ebp + 4df: 89 e5 mov %esp,%ebp + 4e1: 57 push %edi + 4e2: 56 push %esi + 4e3: 53 push %ebx + 4e4: 8b 5d 08 mov 0x8(%ebp),%ebx Header *bp, *p; bp = (Header*)ap - 1; - 519: 8d 4b f8 lea -0x8(%ebx),%ecx + 4e7: 8d 4b f8 lea -0x8(%ebx),%ecx for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 51c: a1 c0 08 00 00 mov 0x8c0,%eax - 521: eb 0c jmp 52f + 4ea: a1 d8 08 00 00 mov 0x8d8,%eax + 4ef: eb 0c jmp 4fd if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 523: 8b 10 mov (%eax),%edx - 525: 39 c2 cmp %eax,%edx - 527: 77 04 ja 52d - 529: 39 ca cmp %ecx,%edx - 52b: 77 10 ja 53d + 4f1: 8b 10 mov (%eax),%edx + 4f3: 39 c2 cmp %eax,%edx + 4f5: 77 04 ja 4fb + 4f7: 39 ca cmp %ecx,%edx + 4f9: 77 10 ja 50b { - 52d: 89 d0 mov %edx,%eax + 4fb: 89 d0 mov %edx,%eax for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 52f: 39 c8 cmp %ecx,%eax - 531: 73 f0 jae 523 - 533: 8b 10 mov (%eax),%edx - 535: 39 ca cmp %ecx,%edx - 537: 77 04 ja 53d + 4fd: 39 c8 cmp %ecx,%eax + 4ff: 73 f0 jae 4f1 + 501: 8b 10 mov (%eax),%edx + 503: 39 ca cmp %ecx,%edx + 505: 77 04 ja 50b if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 539: 39 c2 cmp %eax,%edx - 53b: 77 f0 ja 52d + 507: 39 c2 cmp %eax,%edx + 509: 77 f0 ja 4fb break; if(bp + bp->s.size == p->s.ptr){ - 53d: 8b 73 fc mov -0x4(%ebx),%esi - 540: 8b 10 mov (%eax),%edx - 542: 8d 3c f1 lea (%ecx,%esi,8),%edi - 545: 39 fa cmp %edi,%edx - 547: 74 19 je 562 + 50b: 8b 73 fc mov -0x4(%ebx),%esi + 50e: 8b 10 mov (%eax),%edx + 510: 8d 3c f1 lea (%ecx,%esi,8),%edi + 513: 39 fa cmp %edi,%edx + 515: 74 19 je 530 bp->s.size += p->s.ptr->s.size; bp->s.ptr = p->s.ptr->s.ptr; + 517: 89 53 f8 mov %edx,-0x8(%ebx) } else bp->s.ptr = p->s.ptr; - 549: 89 53 f8 mov %edx,-0x8(%ebx) if(p + p->s.size == bp){ - 54c: 8b 50 04 mov 0x4(%eax),%edx - 54f: 8d 34 d0 lea (%eax,%edx,8),%esi - 552: 39 f1 cmp %esi,%ecx - 554: 74 1b je 571 + 51a: 8b 50 04 mov 0x4(%eax),%edx + 51d: 8d 34 d0 lea (%eax,%edx,8),%esi + 520: 39 f1 cmp %esi,%ecx + 522: 74 18 je 53c p->s.size += bp->s.size; p->s.ptr = bp->s.ptr; + 524: 89 08 mov %ecx,(%eax) } else p->s.ptr = bp; - 556: 89 08 mov %ecx,(%eax) freep = p; - 558: a3 c0 08 00 00 mov %eax,0x8c0 + 526: a3 d8 08 00 00 mov %eax,0x8d8 } - 55d: 5b pop %ebx - 55e: 5e pop %esi - 55f: 5f pop %edi - 560: 5d pop %ebp - 561: c3 ret + 52b: 5b pop %ebx + 52c: 5e pop %esi + 52d: 5f pop %edi + 52e: 5d pop %ebp + 52f: c3 ret bp->s.size += p->s.ptr->s.size; - 562: 03 72 04 add 0x4(%edx),%esi - 565: 89 73 fc mov %esi,-0x4(%ebx) + 530: 03 72 04 add 0x4(%edx),%esi + 533: 89 73 fc mov %esi,-0x4(%ebx) bp->s.ptr = p->s.ptr->s.ptr; - 568: 8b 10 mov (%eax),%edx - 56a: 8b 12 mov (%edx),%edx - 56c: 89 53 f8 mov %edx,-0x8(%ebx) - 56f: eb db jmp 54c + 536: 8b 10 mov (%eax),%edx + 538: 8b 12 mov (%edx),%edx + 53a: eb db jmp 517 p->s.size += bp->s.size; - 571: 03 53 fc add -0x4(%ebx),%edx - 574: 89 50 04 mov %edx,0x4(%eax) + 53c: 03 53 fc add -0x4(%ebx),%edx + 53f: 89 50 04 mov %edx,0x4(%eax) p->s.ptr = bp->s.ptr; - 577: 8b 53 f8 mov -0x8(%ebx),%edx - 57a: 89 10 mov %edx,(%eax) - 57c: eb da jmp 558 + 542: 8b 4b f8 mov -0x8(%ebx),%ecx + 545: eb dd jmp 524 -0000057e : +00000547 : return freep; } void* malloc(uint nbytes) { - 57e: f3 0f 1e fb endbr32 - 582: 55 push %ebp - 583: 89 e5 mov %esp,%ebp - 585: 57 push %edi - 586: 56 push %esi - 587: 53 push %ebx - 588: 83 ec 0c sub $0xc,%esp + 547: 55 push %ebp + 548: 89 e5 mov %esp,%ebp + 54a: 57 push %edi + 54b: 56 push %esi + 54c: 53 push %ebx + 54d: 83 ec 0c sub $0xc,%esp Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 58b: 8b 45 08 mov 0x8(%ebp),%eax - 58e: 8d 58 07 lea 0x7(%eax),%ebx - 591: c1 eb 03 shr $0x3,%ebx - 594: 83 c3 01 add $0x1,%ebx + 550: 8b 45 08 mov 0x8(%ebp),%eax + 553: 8d 58 07 lea 0x7(%eax),%ebx + 556: c1 eb 03 shr $0x3,%ebx + 559: 83 c3 01 add $0x1,%ebx if((prevp = freep) == 0){ - 597: 8b 15 c0 08 00 00 mov 0x8c0,%edx - 59d: 85 d2 test %edx,%edx - 59f: 74 20 je 5c1 + 55c: 8b 15 d8 08 00 00 mov 0x8d8,%edx + 562: 85 d2 test %edx,%edx + 564: 74 1c je 582 base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 5a1: 8b 02 mov (%edx),%eax + 566: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 5a3: 8b 48 04 mov 0x4(%eax),%ecx - 5a6: 39 cb cmp %ecx,%ebx - 5a8: 76 3c jbe 5e6 - 5aa: 81 fb 00 10 00 00 cmp $0x1000,%ebx - 5b0: be 00 10 00 00 mov $0x1000,%esi - 5b5: 0f 43 f3 cmovae %ebx,%esi + 568: 8b 48 04 mov 0x4(%eax),%ecx + 56b: 39 cb cmp %ecx,%ebx + 56d: 76 38 jbe 5a7 + 56f: be 00 10 00 00 mov $0x1000,%esi + 574: 39 f3 cmp %esi,%ebx + 576: 0f 43 f3 cmovae %ebx,%esi p = sbrk(nu * sizeof(Header)); - 5b8: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi - 5bf: eb 72 jmp 633 + 579: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi + 580: eb 72 jmp 5f4 base.s.ptr = freep = prevp = &base; - 5c1: c7 05 c0 08 00 00 c4 movl $0x8c4,0x8c0 - 5c8: 08 00 00 - 5cb: c7 05 c4 08 00 00 c4 movl $0x8c4,0x8c4 - 5d2: 08 00 00 + 582: c7 05 d8 08 00 00 dc movl $0x8dc,0x8d8 + 589: 08 00 00 + 58c: c7 05 dc 08 00 00 dc movl $0x8dc,0x8dc + 593: 08 00 00 base.s.size = 0; - 5d5: c7 05 c8 08 00 00 00 movl $0x0,0x8c8 - 5dc: 00 00 00 + 596: c7 05 e0 08 00 00 00 movl $0x0,0x8e0 + 59d: 00 00 00 for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 5df: b8 c4 08 00 00 mov $0x8c4,%eax - 5e4: eb c4 jmp 5aa + 5a0: b8 dc 08 00 00 mov $0x8dc,%eax + 5a5: eb c8 jmp 56f if(p->s.size == nunits) - 5e6: 39 cb cmp %ecx,%ebx - 5e8: 74 1e je 608 + 5a7: 39 cb cmp %ecx,%ebx + 5a9: 74 1e je 5c9 prevp->s.ptr = p->s.ptr; else { p->s.size -= nunits; - 5ea: 29 d9 sub %ebx,%ecx - 5ec: 89 48 04 mov %ecx,0x4(%eax) + 5ab: 29 d9 sub %ebx,%ecx + 5ad: 89 48 04 mov %ecx,0x4(%eax) p += p->s.size; - 5ef: 8d 04 c8 lea (%eax,%ecx,8),%eax + 5b0: 8d 04 c8 lea (%eax,%ecx,8),%eax p->s.size = nunits; - 5f2: 89 58 04 mov %ebx,0x4(%eax) + 5b3: 89 58 04 mov %ebx,0x4(%eax) } freep = prevp; - 5f5: 89 15 c0 08 00 00 mov %edx,0x8c0 + 5b6: 89 15 d8 08 00 00 mov %edx,0x8d8 return (void*)(p + 1); - 5fb: 8d 50 08 lea 0x8(%eax),%edx + 5bc: 8d 50 08 lea 0x8(%eax),%edx } if(p == freep) if((p = morecore(nunits)) == 0) return 0; } } - 5fe: 89 d0 mov %edx,%eax - 600: 8d 65 f4 lea -0xc(%ebp),%esp - 603: 5b pop %ebx - 604: 5e pop %esi - 605: 5f pop %edi - 606: 5d pop %ebp - 607: c3 ret + 5bf: 89 d0 mov %edx,%eax + 5c1: 8d 65 f4 lea -0xc(%ebp),%esp + 5c4: 5b pop %ebx + 5c5: 5e pop %esi + 5c6: 5f pop %edi + 5c7: 5d pop %ebp + 5c8: c3 ret prevp->s.ptr = p->s.ptr; - 608: 8b 08 mov (%eax),%ecx - 60a: 89 0a mov %ecx,(%edx) - 60c: eb e7 jmp 5f5 + 5c9: 8b 08 mov (%eax),%ecx + 5cb: 89 0a mov %ecx,(%edx) + 5cd: eb e7 jmp 5b6 hp->s.size = nu; - 60e: 89 70 04 mov %esi,0x4(%eax) + 5cf: 89 70 04 mov %esi,0x4(%eax) free((void*)(hp + 1)); - 611: 83 ec 0c sub $0xc,%esp - 614: 83 c0 08 add $0x8,%eax - 617: 50 push %eax - 618: e8 ef fe ff ff call 50c + 5d2: 83 ec 0c sub $0xc,%esp + 5d5: 83 c0 08 add $0x8,%eax + 5d8: 50 push %eax + 5d9: e8 00 ff ff ff call 4de return freep; - 61d: 8b 15 c0 08 00 00 mov 0x8c0,%edx + 5de: 8b 15 d8 08 00 00 mov 0x8d8,%edx if((p = morecore(nunits)) == 0) - 623: 83 c4 10 add $0x10,%esp - 626: 85 d2 test %edx,%edx - 628: 74 d4 je 5fe + 5e4: 83 c4 10 add $0x10,%esp + 5e7: 85 d2 test %edx,%edx + 5e9: 74 d4 je 5bf for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 62a: 8b 02 mov (%edx),%eax + 5eb: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 62c: 8b 48 04 mov 0x4(%eax),%ecx - 62f: 39 d9 cmp %ebx,%ecx - 631: 73 b3 jae 5e6 + 5ed: 8b 48 04 mov 0x4(%eax),%ecx + 5f0: 39 d9 cmp %ebx,%ecx + 5f2: 73 b3 jae 5a7 if(p == freep) - 633: 89 c2 mov %eax,%edx - 635: 39 05 c0 08 00 00 cmp %eax,0x8c0 - 63b: 75 ed jne 62a + 5f4: 89 c2 mov %eax,%edx + 5f6: 39 05 d8 08 00 00 cmp %eax,0x8d8 + 5fc: 75 ed jne 5eb p = sbrk(nu * sizeof(Header)); - 63d: 83 ec 0c sub $0xc,%esp - 640: 57 push %edi - 641: e8 3c fc ff ff call 282 + 5fe: 83 ec 0c sub $0xc,%esp + 601: 57 push %edi + 602: e8 59 fc ff ff call 260 if(p == (char*)-1) - 646: 83 c4 10 add $0x10,%esp - 649: 83 f8 ff cmp $0xffffffff,%eax - 64c: 75 c0 jne 60e + 607: 83 c4 10 add $0x10,%esp + 60a: 83 f8 ff cmp $0xffffffff,%eax + 60d: 75 c0 jne 5cf return 0; - 64e: ba 00 00 00 00 mov $0x0,%edx - 653: eb a9 jmp 5fe + 60f: ba 00 00 00 00 mov $0x0,%edx + 614: eb a9 jmp 5bf diff --git a/src/user/slabtest.d b/src/user/slabtest.d new file mode 100644 index 0000000..6c600c4 --- /dev/null +++ b/src/user/slabtest.d @@ -0,0 +1,2 @@ +user/slabtest.o: user/slabtest.c /usr/include/stdc-predef.h types.h \ + stat.h user.h diff --git a/src/user/slabtest.o b/src/user/slabtest.o new file mode 100644 index 0000000000000000000000000000000000000000..a503e1f990ffa8e63bf6ec1c6bf75f9acd31ba8f GIT binary patch literal 2472 zcma)7U2has7(QoqXWO!Lp)J}j#dK;!L78c{Hb6nJQWa_pBqTM_80+kIx;t@qrq0Y_ zAt;H4sEIcaO-%F>FGvhQH2wmAfUriB91@R+ePZR)Up~73`)_}3ZEdN~J@{-Piwv=c@p+8eUVb13 zWpRL}v<7}A$iauovVR4Xigp-fV&DOEt7M-63|24I12D!FeWO??gIqx?FnSqH6mRo$2OlX*e~^(+h;sRKxllpAEee$r)AHnWX`#G4 zW=$aToOoYe8$-?>QJyX?L$gQZ!OB>m5Z zOckb~&!I8Gl2g{6!UDZ7@^gWlErqSRm?%lxDmCB00!Z17(y$o?YYw;K?D-XEsdmh% z)x3Fc)^R(}&f$}Fqu^9Ch=L?+!1R+w>r{C3_)*7gHrMKod!gpI>rw31yJ0&Eqn?pw zh|XNU9r|e)HG5>-2{U&+@jHRL5u?K(F~NT09d{#%v!Id1n%oEjc>VNp)MzDf6n9g% z8@(4sYi{P(+d&FvnlZ1@_S2Th4&z9qtvJb?zM1tX&N0{wGtp@IiP#QMR>u#K+4k#M zkY>V9nhky~iEbJsGlusXVx|>$f|+i;8)e;@H2D{T8N%DHg`8YEonA|bvr9`SoI@+B zj9zcI)~j0kU~bNvoj5`3JEb6YZR@@K-8<}IVHl2U6sL3~7eQ|S4m-a{{d=Ky zOpU-A5~{9+?s5Cn>%*r<;=LLrVwjI=WPOSA{x}iSIZQ;{tVVT{V4v3ZD;i(Z_?E_y zh&r3vzOM16=D*VTo#y#;%7T8fO#c|yljMOfyO?)fMcO4O*+}Zez^GBdbICQMa81-XR#wkPbrKC* zFBZ`#Kj4we$3gX9?w*Md_Q48 zUxMSAe3*NyY#I-2?BYk?N` mQSUC0e{QqRjAyO + 2b: 68 18 07 00 00 push $0x718 + 30: 6a 01 push $0x1 + 32: e8 ea 03 00 00 call 421 memset(data, 'a', sizeof(data)); - 3b: 83 c4 0c add $0xc,%esp - 3e: 68 00 02 00 00 push $0x200 - 43: 6a 61 push $0x61 - 45: 8d 85 de fd ff ff lea -0x222(%ebp),%eax - 4b: 50 push %eax - 4c: e8 43 01 00 00 call 194 - 51: 83 c4 10 add $0x10,%esp + 37: 83 c4 0c add $0xc,%esp + 3a: 68 00 02 00 00 push $0x200 + 3f: 6a 61 push $0x61 + 41: 8d 85 de fd ff ff lea -0x222(%ebp),%eax + 47: 50 push %eax + 48: e8 39 01 00 00 call 186 + 4d: 83 c4 10 add $0x10,%esp for(i = 0; i < 4; i++) - 54: bb 00 00 00 00 mov $0x0,%ebx + 50: bb 00 00 00 00 mov $0x0,%ebx if(fork() > 0) - 59: e8 95 02 00 00 call 2f3 - 5e: 85 c0 test %eax,%eax - 60: 7f 08 jg 6a + 55: e8 77 02 00 00 call 2d1 + 5a: 85 c0 test %eax,%eax + 5c: 7f 08 jg 66 for(i = 0; i < 4; i++) - 62: 83 c3 01 add $0x1,%ebx - 65: 83 fb 04 cmp $0x4,%ebx - 68: 75 ef jne 59 + 5e: 83 c3 01 add $0x1,%ebx + 61: 83 fb 04 cmp $0x4,%ebx + 64: 75 ef jne 55 break; printf(1, "write %d\n", i); - 6a: 83 ec 04 sub $0x4,%esp - 6d: 53 push %ebx - 6e: 68 6b 07 00 00 push $0x76b - 73: 6a 01 push $0x1 - 75: e8 c5 03 00 00 call 43f + 66: 83 ec 04 sub $0x4,%esp + 69: 53 push %ebx + 6a: 68 2b 07 00 00 push $0x72b + 6f: 6a 01 push $0x1 + 71: e8 ab 03 00 00 call 421 path[8] += i; - 7a: 00 5d e6 add %bl,-0x1a(%ebp) + 76: 00 5d e6 add %bl,-0x1a(%ebp) fd = open(path, O_CREATE | O_RDWR); - 7d: 83 c4 08 add $0x8,%esp - 80: 68 02 02 00 00 push $0x202 - 85: 8d 45 de lea -0x22(%ebp),%eax - 88: 50 push %eax - 89: e8 ad 02 00 00 call 33b - 8e: 89 c6 mov %eax,%esi - 90: 83 c4 10 add $0x10,%esp - 93: bb 14 00 00 00 mov $0x14,%ebx + 79: 83 c4 08 add $0x8,%esp + 7c: 68 02 02 00 00 push $0x202 + 81: 8d 45 de lea -0x22(%ebp),%eax + 84: 50 push %eax + 85: e8 8f 02 00 00 call 319 + 8a: 89 c6 mov %eax,%esi + 8c: 83 c4 10 add $0x10,%esp + 8f: bb 14 00 00 00 mov $0x14,%ebx for(i = 0; i < 20; i++) // printf(fd, "%d\n", i); write(fd, data, sizeof(data)); - 98: 8d bd de fd ff ff lea -0x222(%ebp),%edi - 9e: 83 ec 04 sub $0x4,%esp - a1: 68 00 02 00 00 push $0x200 - a6: 57 push %edi - a7: 56 push %esi - a8: e8 6e 02 00 00 call 31b + 94: 8d bd de fd ff ff lea -0x222(%ebp),%edi + 9a: 83 ec 04 sub $0x4,%esp + 9d: 68 00 02 00 00 push $0x200 + a2: 57 push %edi + a3: 56 push %esi + a4: e8 50 02 00 00 call 2f9 for(i = 0; i < 20; i++) - ad: 83 c4 10 add $0x10,%esp - b0: 83 eb 01 sub $0x1,%ebx - b3: 75 e9 jne 9e + a9: 83 c4 10 add $0x10,%esp + ac: 83 eb 01 sub $0x1,%ebx + af: 75 e9 jne 9a close(fd); - b5: 83 ec 0c sub $0xc,%esp - b8: 56 push %esi - b9: e8 65 02 00 00 call 323 + b1: 83 ec 0c sub $0xc,%esp + b4: 56 push %esi + b5: e8 47 02 00 00 call 301 printf(1, "read\n"); - be: 83 c4 08 add $0x8,%esp - c1: 68 75 07 00 00 push $0x775 - c6: 6a 01 push $0x1 - c8: e8 72 03 00 00 call 43f + ba: 83 c4 08 add $0x8,%esp + bd: 68 35 07 00 00 push $0x735 + c2: 6a 01 push $0x1 + c4: e8 58 03 00 00 call 421 fd = open(path, O_RDONLY); - cd: 83 c4 08 add $0x8,%esp - d0: 6a 00 push $0x0 - d2: 8d 45 de lea -0x22(%ebp),%eax - d5: 50 push %eax - d6: e8 60 02 00 00 call 33b - db: 89 c6 mov %eax,%esi - dd: 83 c4 10 add $0x10,%esp - e0: bb 14 00 00 00 mov $0x14,%ebx + c9: 83 c4 08 add $0x8,%esp + cc: 6a 00 push $0x0 + ce: 8d 45 de lea -0x22(%ebp),%eax + d1: 50 push %eax + d2: e8 42 02 00 00 call 319 + d7: 89 c6 mov %eax,%esi + d9: 83 c4 10 add $0x10,%esp + dc: bb 14 00 00 00 mov $0x14,%ebx for (i = 0; i < 20; i++) read(fd, data, sizeof(data)); - e5: 8d bd de fd ff ff lea -0x222(%ebp),%edi - eb: 83 ec 04 sub $0x4,%esp - ee: 68 00 02 00 00 push $0x200 - f3: 57 push %edi - f4: 56 push %esi - f5: e8 19 02 00 00 call 313 + e1: 8d bd de fd ff ff lea -0x222(%ebp),%edi + e7: 83 ec 04 sub $0x4,%esp + ea: 68 00 02 00 00 push $0x200 + ef: 57 push %edi + f0: 56 push %esi + f1: e8 fb 01 00 00 call 2f1 for (i = 0; i < 20; i++) - fa: 83 c4 10 add $0x10,%esp - fd: 83 eb 01 sub $0x1,%ebx - 100: 75 e9 jne eb + f6: 83 c4 10 add $0x10,%esp + f9: 83 eb 01 sub $0x1,%ebx + fc: 75 e9 jne e7 close(fd); - 102: 83 ec 0c sub $0xc,%esp - 105: 56 push %esi - 106: e8 18 02 00 00 call 323 + fe: 83 ec 0c sub $0xc,%esp + 101: 56 push %esi + 102: e8 fa 01 00 00 call 301 wait(); - 10b: e8 f3 01 00 00 call 303 + 107: e8 d5 01 00 00 call 2e1 exit(); - 110: e8 e6 01 00 00 call 2fb + 10c: e8 c8 01 00 00 call 2d9 -00000115 : +00000111 : #include "user.h" #include "x86.h" char* strcpy(char *s, const char *t) { - 115: f3 0f 1e fb endbr32 - 119: 55 push %ebp - 11a: 89 e5 mov %esp,%ebp - 11c: 53 push %ebx - 11d: 8b 4d 08 mov 0x8(%ebp),%ecx - 120: 8b 5d 0c mov 0xc(%ebp),%ebx + 111: 55 push %ebp + 112: 89 e5 mov %esp,%ebp + 114: 53 push %ebx + 115: 8b 4d 08 mov 0x8(%ebp),%ecx + 118: 8b 5d 0c mov 0xc(%ebp),%ebx char *os; os = s; while((*s++ = *t++) != 0) - 123: b8 00 00 00 00 mov $0x0,%eax - 128: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 12c: 88 14 01 mov %dl,(%ecx,%eax,1) - 12f: 83 c0 01 add $0x1,%eax - 132: 84 d2 test %dl,%dl - 134: 75 f2 jne 128 + 11b: b8 00 00 00 00 mov $0x0,%eax + 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; } - 136: 89 c8 mov %ecx,%eax - 138: 5b pop %ebx - 139: 5d pop %ebp - 13a: c3 ret + 12e: 89 c8 mov %ecx,%eax + 130: 8b 5d fc mov -0x4(%ebp),%ebx + 133: c9 leave + 134: c3 ret -0000013b : +00000135 : int strcmp(const char *p, const char *q) { - 13b: f3 0f 1e fb endbr32 - 13f: 55 push %ebp - 140: 89 e5 mov %esp,%ebp - 142: 8b 4d 08 mov 0x8(%ebp),%ecx - 145: 8b 55 0c mov 0xc(%ebp),%edx + 135: 55 push %ebp + 136: 89 e5 mov %esp,%ebp + 138: 8b 4d 08 mov 0x8(%ebp),%ecx + 13b: 8b 55 0c mov 0xc(%ebp),%edx while(*p && *p == *q) - 148: 0f b6 01 movzbl (%ecx),%eax - 14b: 84 c0 test %al,%al - 14d: 74 11 je 160 - 14f: 38 02 cmp %al,(%edx) - 151: 75 0d jne 160 + 13e: 0f b6 01 movzbl (%ecx),%eax + 141: 84 c0 test %al,%al + 143: 74 11 je 156 + 145: 38 02 cmp %al,(%edx) + 147: 75 0d jne 156 p++, q++; - 153: 83 c1 01 add $0x1,%ecx - 156: 83 c2 01 add $0x1,%edx + 149: 83 c1 01 add $0x1,%ecx + 14c: 83 c2 01 add $0x1,%edx while(*p && *p == *q) - 159: 0f b6 01 movzbl (%ecx),%eax - 15c: 84 c0 test %al,%al - 15e: 75 ef jne 14f + 14f: 0f b6 01 movzbl (%ecx),%eax + 152: 84 c0 test %al,%al + 154: 75 ef jne 145 return (uchar)*p - (uchar)*q; - 160: 0f b6 c0 movzbl %al,%eax - 163: 0f b6 12 movzbl (%edx),%edx - 166: 29 d0 sub %edx,%eax + 156: 0f b6 c0 movzbl %al,%eax + 159: 0f b6 12 movzbl (%edx),%edx + 15c: 29 d0 sub %edx,%eax } - 168: 5d pop %ebp - 169: c3 ret + 15e: 5d pop %ebp + 15f: c3 ret -0000016a : +00000160 : uint strlen(const char *s) { - 16a: f3 0f 1e fb endbr32 - 16e: 55 push %ebp - 16f: 89 e5 mov %esp,%ebp - 171: 8b 55 08 mov 0x8(%ebp),%edx + 160: 55 push %ebp + 161: 89 e5 mov %esp,%ebp + 163: 8b 55 08 mov 0x8(%ebp),%edx int n; for(n = 0; s[n]; n++) - 174: 80 3a 00 cmpb $0x0,(%edx) - 177: 74 14 je 18d - 179: b8 00 00 00 00 mov $0x0,%eax - 17e: 83 c0 01 add $0x1,%eax - 181: 89 c1 mov %eax,%ecx - 183: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - 187: 75 f5 jne 17e + 166: 80 3a 00 cmpb $0x0,(%edx) + 169: 74 14 je 17f + 16b: b8 00 00 00 00 mov $0x0,%eax + 170: 83 c0 01 add $0x1,%eax + 173: 89 c1 mov %eax,%ecx + 175: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) + 179: 75 f5 jne 170 ; return n; } - 189: 89 c8 mov %ecx,%eax - 18b: 5d pop %ebp - 18c: c3 ret + 17b: 89 c8 mov %ecx,%eax + 17d: 5d pop %ebp + 17e: c3 ret for(n = 0; s[n]; n++) - 18d: b9 00 00 00 00 mov $0x0,%ecx + 17f: b9 00 00 00 00 mov $0x0,%ecx return n; - 192: eb f5 jmp 189 + 184: eb f5 jmp 17b -00000194 : +00000186 : void* memset(void *dst, int c, uint n) { - 194: f3 0f 1e fb endbr32 - 198: 55 push %ebp - 199: 89 e5 mov %esp,%ebp - 19b: 57 push %edi - 19c: 8b 55 08 mov 0x8(%ebp),%edx + 186: 55 push %ebp + 187: 89 e5 mov %esp,%ebp + 189: 57 push %edi + 18a: 8b 55 08 mov 0x8(%ebp),%edx } static inline void stosb(void *addr, int data, int cnt) { asm volatile("cld; rep stosb" : - 19f: 89 d7 mov %edx,%edi - 1a1: 8b 4d 10 mov 0x10(%ebp),%ecx - 1a4: 8b 45 0c mov 0xc(%ebp),%eax - 1a7: fc cld - 1a8: f3 aa rep stos %al,%es:(%edi) + 18d: 89 d7 mov %edx,%edi + 18f: 8b 4d 10 mov 0x10(%ebp),%ecx + 192: 8b 45 0c mov 0xc(%ebp),%eax + 195: fc cld + 196: f3 aa rep stos %al,%es:(%edi) stosb(dst, c, n); return dst; } - 1aa: 89 d0 mov %edx,%eax - 1ac: 5f pop %edi - 1ad: 5d pop %ebp - 1ae: c3 ret + 198: 89 d0 mov %edx,%eax + 19a: 8b 7d fc mov -0x4(%ebp),%edi + 19d: c9 leave + 19e: c3 ret -000001af : +0000019f : char* strchr(const char *s, char c) { - 1af: f3 0f 1e fb endbr32 - 1b3: 55 push %ebp - 1b4: 89 e5 mov %esp,%ebp - 1b6: 8b 45 08 mov 0x8(%ebp),%eax - 1b9: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx + 19f: 55 push %ebp + 1a0: 89 e5 mov %esp,%ebp + 1a2: 8b 45 08 mov 0x8(%ebp),%eax + 1a5: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx for(; *s; s++) - 1bd: 0f b6 10 movzbl (%eax),%edx - 1c0: 84 d2 test %dl,%dl - 1c2: 74 15 je 1d9 + 1a9: 0f b6 10 movzbl (%eax),%edx + 1ac: 84 d2 test %dl,%dl + 1ae: 74 15 je 1c5 if(*s == c) - 1c4: 38 d1 cmp %dl,%cl - 1c6: 74 0f je 1d7 + 1b0: 38 d1 cmp %dl,%cl + 1b2: 74 0f je 1c3 for(; *s; s++) - 1c8: 83 c0 01 add $0x1,%eax - 1cb: 0f b6 10 movzbl (%eax),%edx - 1ce: 84 d2 test %dl,%dl - 1d0: 75 f2 jne 1c4 + 1b4: 83 c0 01 add $0x1,%eax + 1b7: 0f b6 10 movzbl (%eax),%edx + 1ba: 84 d2 test %dl,%dl + 1bc: 75 f2 jne 1b0 return (char*)s; return 0; - 1d2: b8 00 00 00 00 mov $0x0,%eax + 1be: b8 00 00 00 00 mov $0x0,%eax } - 1d7: 5d pop %ebp - 1d8: c3 ret + 1c3: 5d pop %ebp + 1c4: c3 ret return 0; - 1d9: b8 00 00 00 00 mov $0x0,%eax - 1de: eb f7 jmp 1d7 + 1c5: b8 00 00 00 00 mov $0x0,%eax + 1ca: eb f7 jmp 1c3 -000001e0 : +000001cc : char* gets(char *buf, int max) { - 1e0: f3 0f 1e fb endbr32 - 1e4: 55 push %ebp - 1e5: 89 e5 mov %esp,%ebp - 1e7: 57 push %edi - 1e8: 56 push %esi - 1e9: 53 push %ebx - 1ea: 83 ec 2c sub $0x2c,%esp - 1ed: 8b 75 08 mov 0x8(%ebp),%esi + 1cc: 55 push %ebp + 1cd: 89 e5 mov %esp,%ebp + 1cf: 57 push %edi + 1d0: 56 push %esi + 1d1: 53 push %ebx + 1d2: 83 ec 2c sub $0x2c,%esp + 1d5: 8b 75 08 mov 0x8(%ebp),%esi int i, cc; char c; for(i=0; i+1 < max; ){ - 1f0: bb 00 00 00 00 mov $0x0,%ebx + 1d8: bb 00 00 00 00 mov $0x0,%ebx cc = read(0, &c, 1); - 1f5: 8d 7d e7 lea -0x19(%ebp),%edi + 1dd: 8d 7d e7 lea -0x19(%ebp),%edi for(i=0; i+1 < max; ){ - 1f8: 89 5d d4 mov %ebx,-0x2c(%ebp) - 1fb: 83 c3 01 add $0x1,%ebx - 1fe: 3b 5d 0c cmp 0xc(%ebp),%ebx - 201: 7d 27 jge 22a + 1e0: 89 5d d4 mov %ebx,-0x2c(%ebp) + 1e3: 83 c3 01 add $0x1,%ebx + 1e6: 3b 5d 0c cmp 0xc(%ebp),%ebx + 1e9: 7d 27 jge 212 cc = read(0, &c, 1); - 203: 83 ec 04 sub $0x4,%esp - 206: 6a 01 push $0x1 - 208: 57 push %edi - 209: 6a 00 push $0x0 - 20b: e8 03 01 00 00 call 313 + 1eb: 83 ec 04 sub $0x4,%esp + 1ee: 6a 01 push $0x1 + 1f0: 57 push %edi + 1f1: 6a 00 push $0x0 + 1f3: e8 f9 00 00 00 call 2f1 if(cc < 1) - 210: 83 c4 10 add $0x10,%esp - 213: 85 c0 test %eax,%eax - 215: 7e 13 jle 22a + 1f8: 83 c4 10 add $0x10,%esp + 1fb: 85 c0 test %eax,%eax + 1fd: 7e 13 jle 212 break; buf[i++] = c; - 217: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 21b: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) + 1ff: 0f b6 45 e7 movzbl -0x19(%ebp),%eax + 203: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) if(c == '\n' || c == '\r') - 21f: 3c 0a cmp $0xa,%al - 221: 74 04 je 227 - 223: 3c 0d cmp $0xd,%al - 225: 75 d1 jne 1f8 + 207: 3c 0a cmp $0xa,%al + 209: 74 04 je 20f + 20b: 3c 0d cmp $0xd,%al + 20d: 75 d1 jne 1e0 for(i=0; i+1 < max; ){ - 227: 89 5d d4 mov %ebx,-0x2c(%ebp) + 20f: 89 5d d4 mov %ebx,-0x2c(%ebp) break; } buf[i] = '\0'; - 22a: 8b 45 d4 mov -0x2c(%ebp),%eax - 22d: c6 04 06 00 movb $0x0,(%esi,%eax,1) + 212: 8b 45 d4 mov -0x2c(%ebp),%eax + 215: c6 04 06 00 movb $0x0,(%esi,%eax,1) return buf; } - 231: 89 f0 mov %esi,%eax - 233: 8d 65 f4 lea -0xc(%ebp),%esp - 236: 5b pop %ebx - 237: 5e pop %esi - 238: 5f pop %edi - 239: 5d pop %ebp - 23a: c3 ret + 219: 89 f0 mov %esi,%eax + 21b: 8d 65 f4 lea -0xc(%ebp),%esp + 21e: 5b pop %ebx + 21f: 5e pop %esi + 220: 5f pop %edi + 221: 5d pop %ebp + 222: c3 ret -0000023b : +00000223 : int stat(const char *n, struct stat *st) { - 23b: f3 0f 1e fb endbr32 - 23f: 55 push %ebp - 240: 89 e5 mov %esp,%ebp - 242: 56 push %esi - 243: 53 push %ebx + 223: 55 push %ebp + 224: 89 e5 mov %esp,%ebp + 226: 56 push %esi + 227: 53 push %ebx int fd; int r; fd = open(n, O_RDONLY); - 244: 83 ec 08 sub $0x8,%esp - 247: 6a 00 push $0x0 - 249: ff 75 08 pushl 0x8(%ebp) - 24c: e8 ea 00 00 00 call 33b + 228: 83 ec 08 sub $0x8,%esp + 22b: 6a 00 push $0x0 + 22d: ff 75 08 push 0x8(%ebp) + 230: e8 e4 00 00 00 call 319 if(fd < 0) - 251: 83 c4 10 add $0x10,%esp - 254: 85 c0 test %eax,%eax - 256: 78 24 js 27c - 258: 89 c3 mov %eax,%ebx + 235: 83 c4 10 add $0x10,%esp + 238: 85 c0 test %eax,%eax + 23a: 78 24 js 260 + 23c: 89 c3 mov %eax,%ebx return -1; r = fstat(fd, st); - 25a: 83 ec 08 sub $0x8,%esp - 25d: ff 75 0c pushl 0xc(%ebp) - 260: 50 push %eax - 261: e8 ed 00 00 00 call 353 - 266: 89 c6 mov %eax,%esi + 23e: 83 ec 08 sub $0x8,%esp + 241: ff 75 0c push 0xc(%ebp) + 244: 50 push %eax + 245: e8 e7 00 00 00 call 331 + 24a: 89 c6 mov %eax,%esi close(fd); - 268: 89 1c 24 mov %ebx,(%esp) - 26b: e8 b3 00 00 00 call 323 + 24c: 89 1c 24 mov %ebx,(%esp) + 24f: e8 ad 00 00 00 call 301 return r; - 270: 83 c4 10 add $0x10,%esp + 254: 83 c4 10 add $0x10,%esp } - 273: 89 f0 mov %esi,%eax - 275: 8d 65 f8 lea -0x8(%ebp),%esp - 278: 5b pop %ebx - 279: 5e pop %esi - 27a: 5d pop %ebp - 27b: c3 ret + 257: 89 f0 mov %esi,%eax + 259: 8d 65 f8 lea -0x8(%ebp),%esp + 25c: 5b pop %ebx + 25d: 5e pop %esi + 25e: 5d pop %ebp + 25f: c3 ret return -1; - 27c: be ff ff ff ff mov $0xffffffff,%esi - 281: eb f0 jmp 273 + 260: be ff ff ff ff mov $0xffffffff,%esi + 265: eb f0 jmp 257 -00000283 : +00000267 : int atoi(const char *s) { - 283: f3 0f 1e fb endbr32 - 287: 55 push %ebp - 288: 89 e5 mov %esp,%ebp - 28a: 53 push %ebx - 28b: 8b 55 08 mov 0x8(%ebp),%edx + 267: 55 push %ebp + 268: 89 e5 mov %esp,%ebp + 26a: 53 push %ebx + 26b: 8b 55 08 mov 0x8(%ebp),%edx int n; n = 0; while('0' <= *s && *s <= '9') - 28e: 0f b6 02 movzbl (%edx),%eax - 291: 8d 48 d0 lea -0x30(%eax),%ecx - 294: 80 f9 09 cmp $0x9,%cl - 297: 77 22 ja 2bb + 26e: 0f b6 02 movzbl (%edx),%eax + 271: 8d 48 d0 lea -0x30(%eax),%ecx + 274: 80 f9 09 cmp $0x9,%cl + 277: 77 24 ja 29d n = 0; - 299: b9 00 00 00 00 mov $0x0,%ecx + 279: b9 00 00 00 00 mov $0x0,%ecx n = n*10 + *s++ - '0'; - 29e: 83 c2 01 add $0x1,%edx - 2a1: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 2a4: 0f be c0 movsbl %al,%eax - 2a7: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx + 27e: 83 c2 01 add $0x1,%edx + 281: 8d 0c 89 lea (%ecx,%ecx,4),%ecx + 284: 0f be c0 movsbl %al,%eax + 287: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx while('0' <= *s && *s <= '9') - 2ab: 0f b6 02 movzbl (%edx),%eax - 2ae: 8d 58 d0 lea -0x30(%eax),%ebx - 2b1: 80 fb 09 cmp $0x9,%bl - 2b4: 76 e8 jbe 29e + 28b: 0f b6 02 movzbl (%edx),%eax + 28e: 8d 58 d0 lea -0x30(%eax),%ebx + 291: 80 fb 09 cmp $0x9,%bl + 294: 76 e8 jbe 27e return n; } - 2b6: 89 c8 mov %ecx,%eax - 2b8: 5b pop %ebx - 2b9: 5d pop %ebp - 2ba: c3 ret + 296: 89 c8 mov %ecx,%eax + 298: 8b 5d fc mov -0x4(%ebp),%ebx + 29b: c9 leave + 29c: c3 ret n = 0; - 2bb: b9 00 00 00 00 mov $0x0,%ecx + 29d: b9 00 00 00 00 mov $0x0,%ecx return n; - 2c0: eb f4 jmp 2b6 + 2a2: eb f2 jmp 296 -000002c2 : +000002a4 : void* memmove(void *vdst, const void *vsrc, int n) { - 2c2: f3 0f 1e fb endbr32 - 2c6: 55 push %ebp - 2c7: 89 e5 mov %esp,%ebp - 2c9: 56 push %esi - 2ca: 53 push %ebx - 2cb: 8b 75 08 mov 0x8(%ebp),%esi - 2ce: 8b 55 0c mov 0xc(%ebp),%edx - 2d1: 8b 5d 10 mov 0x10(%ebp),%ebx + 2a4: 55 push %ebp + 2a5: 89 e5 mov %esp,%ebp + 2a7: 56 push %esi + 2a8: 53 push %ebx + 2a9: 8b 75 08 mov 0x8(%ebp),%esi + 2ac: 8b 55 0c mov 0xc(%ebp),%edx + 2af: 8b 5d 10 mov 0x10(%ebp),%ebx char *dst; const char *src; dst = vdst; src = vsrc; while(n-- > 0) - 2d4: 85 db test %ebx,%ebx - 2d6: 7e 15 jle 2ed - 2d8: 01 f3 add %esi,%ebx + 2b2: 85 db test %ebx,%ebx + 2b4: 7e 15 jle 2cb + 2b6: 01 f3 add %esi,%ebx dst = vdst; - 2da: 89 f0 mov %esi,%eax + 2b8: 89 f0 mov %esi,%eax *dst++ = *src++; - 2dc: 83 c2 01 add $0x1,%edx - 2df: 83 c0 01 add $0x1,%eax - 2e2: 0f b6 4a ff movzbl -0x1(%edx),%ecx - 2e6: 88 48 ff mov %cl,-0x1(%eax) + 2ba: 83 c2 01 add $0x1,%edx + 2bd: 83 c0 01 add $0x1,%eax + 2c0: 0f b6 4a ff movzbl -0x1(%edx),%ecx + 2c4: 88 48 ff mov %cl,-0x1(%eax) while(n-- > 0) - 2e9: 39 c3 cmp %eax,%ebx - 2eb: 75 ef jne 2dc + 2c7: 39 c3 cmp %eax,%ebx + 2c9: 75 ef jne 2ba return vdst; } - 2ed: 89 f0 mov %esi,%eax - 2ef: 5b pop %ebx - 2f0: 5e pop %esi - 2f1: 5d pop %ebp - 2f2: c3 ret + 2cb: 89 f0 mov %esi,%eax + 2cd: 5b pop %ebx + 2ce: 5e pop %esi + 2cf: 5d pop %ebp + 2d0: c3 ret -000002f3 : +000002d1 : name: \ movl $SYS_ ## name, %eax; \ int $T_SYSCALL; \ ret SYSCALL(fork) - 2f3: b8 01 00 00 00 mov $0x1,%eax - 2f8: cd 40 int $0x40 - 2fa: c3 ret + 2d1: b8 01 00 00 00 mov $0x1,%eax + 2d6: cd 40 int $0x40 + 2d8: c3 ret -000002fb : +000002d9 : SYSCALL(exit) - 2fb: b8 02 00 00 00 mov $0x2,%eax - 300: cd 40 int $0x40 - 302: c3 ret + 2d9: b8 02 00 00 00 mov $0x2,%eax + 2de: cd 40 int $0x40 + 2e0: c3 ret -00000303 : +000002e1 : SYSCALL(wait) - 303: b8 03 00 00 00 mov $0x3,%eax - 308: cd 40 int $0x40 - 30a: c3 ret + 2e1: b8 03 00 00 00 mov $0x3,%eax + 2e6: cd 40 int $0x40 + 2e8: c3 ret -0000030b : +000002e9 : SYSCALL(pipe) - 30b: b8 04 00 00 00 mov $0x4,%eax - 310: cd 40 int $0x40 - 312: c3 ret + 2e9: b8 04 00 00 00 mov $0x4,%eax + 2ee: cd 40 int $0x40 + 2f0: c3 ret -00000313 : +000002f1 : SYSCALL(read) - 313: b8 05 00 00 00 mov $0x5,%eax - 318: cd 40 int $0x40 - 31a: c3 ret + 2f1: b8 05 00 00 00 mov $0x5,%eax + 2f6: cd 40 int $0x40 + 2f8: c3 ret -0000031b : +000002f9 : SYSCALL(write) - 31b: b8 10 00 00 00 mov $0x10,%eax - 320: cd 40 int $0x40 - 322: c3 ret + 2f9: b8 10 00 00 00 mov $0x10,%eax + 2fe: cd 40 int $0x40 + 300: c3 ret -00000323 : +00000301 : SYSCALL(close) - 323: b8 15 00 00 00 mov $0x15,%eax - 328: cd 40 int $0x40 - 32a: c3 ret + 301: b8 15 00 00 00 mov $0x15,%eax + 306: cd 40 int $0x40 + 308: c3 ret -0000032b : +00000309 : SYSCALL(kill) - 32b: b8 06 00 00 00 mov $0x6,%eax - 330: cd 40 int $0x40 - 332: c3 ret + 309: b8 06 00 00 00 mov $0x6,%eax + 30e: cd 40 int $0x40 + 310: c3 ret -00000333 : +00000311 : SYSCALL(exec) - 333: b8 07 00 00 00 mov $0x7,%eax - 338: cd 40 int $0x40 - 33a: c3 ret + 311: b8 07 00 00 00 mov $0x7,%eax + 316: cd 40 int $0x40 + 318: c3 ret -0000033b : +00000319 : SYSCALL(open) - 33b: b8 0f 00 00 00 mov $0xf,%eax - 340: cd 40 int $0x40 - 342: c3 ret + 319: b8 0f 00 00 00 mov $0xf,%eax + 31e: cd 40 int $0x40 + 320: c3 ret -00000343 : +00000321 : SYSCALL(mknod) - 343: b8 11 00 00 00 mov $0x11,%eax - 348: cd 40 int $0x40 - 34a: c3 ret + 321: b8 11 00 00 00 mov $0x11,%eax + 326: cd 40 int $0x40 + 328: c3 ret -0000034b : +00000329 : SYSCALL(unlink) - 34b: b8 12 00 00 00 mov $0x12,%eax - 350: cd 40 int $0x40 - 352: c3 ret + 329: b8 12 00 00 00 mov $0x12,%eax + 32e: cd 40 int $0x40 + 330: c3 ret -00000353 : +00000331 : SYSCALL(fstat) - 353: b8 08 00 00 00 mov $0x8,%eax - 358: cd 40 int $0x40 - 35a: c3 ret + 331: b8 08 00 00 00 mov $0x8,%eax + 336: cd 40 int $0x40 + 338: c3 ret -0000035b : +00000339 : SYSCALL(link) - 35b: b8 13 00 00 00 mov $0x13,%eax - 360: cd 40 int $0x40 - 362: c3 ret + 339: b8 13 00 00 00 mov $0x13,%eax + 33e: cd 40 int $0x40 + 340: c3 ret -00000363 : +00000341 : SYSCALL(mkdir) - 363: b8 14 00 00 00 mov $0x14,%eax - 368: cd 40 int $0x40 - 36a: c3 ret + 341: b8 14 00 00 00 mov $0x14,%eax + 346: cd 40 int $0x40 + 348: c3 ret -0000036b : +00000349 : SYSCALL(chdir) - 36b: b8 09 00 00 00 mov $0x9,%eax - 370: cd 40 int $0x40 - 372: c3 ret + 349: b8 09 00 00 00 mov $0x9,%eax + 34e: cd 40 int $0x40 + 350: c3 ret -00000373 : +00000351 : SYSCALL(dup) - 373: b8 0a 00 00 00 mov $0xa,%eax - 378: cd 40 int $0x40 - 37a: c3 ret + 351: b8 0a 00 00 00 mov $0xa,%eax + 356: cd 40 int $0x40 + 358: c3 ret -0000037b : +00000359 : SYSCALL(getpid) - 37b: b8 0b 00 00 00 mov $0xb,%eax - 380: cd 40 int $0x40 - 382: c3 ret + 359: b8 0b 00 00 00 mov $0xb,%eax + 35e: cd 40 int $0x40 + 360: c3 ret -00000383 : +00000361 : SYSCALL(sbrk) - 383: b8 0c 00 00 00 mov $0xc,%eax - 388: cd 40 int $0x40 - 38a: c3 ret + 361: b8 0c 00 00 00 mov $0xc,%eax + 366: cd 40 int $0x40 + 368: c3 ret -0000038b : +00000369 : SYSCALL(sleep) - 38b: b8 0d 00 00 00 mov $0xd,%eax - 390: cd 40 int $0x40 - 392: c3 ret + 369: b8 0d 00 00 00 mov $0xd,%eax + 36e: cd 40 int $0x40 + 370: c3 ret -00000393 : +00000371 : SYSCALL(uptime) - 393: b8 0e 00 00 00 mov $0xe,%eax - 398: cd 40 int $0x40 - 39a: c3 ret + 371: b8 0e 00 00 00 mov $0xe,%eax + 376: cd 40 int $0x40 + 378: c3 ret -0000039b : +00000379 : SYSCALL(slabtest) - 39b: b8 16 00 00 00 mov $0x16,%eax - 3a0: cd 40 int $0x40 - 3a2: c3 ret + 379: b8 16 00 00 00 mov $0x16,%eax + 37e: cd 40 int $0x40 + 380: c3 ret -000003a3 : +00000381 : SYSCALL(ps) - 3a3: b8 17 00 00 00 mov $0x17,%eax - 3a8: cd 40 int $0x40 - 3aa: c3 ret + 381: b8 17 00 00 00 mov $0x17,%eax + 386: cd 40 int $0x40 + 388: c3 ret -000003ab : +00000389 : write(fd, &c, 1); } static void printint(int fd, int xx, int base, int sgn) { - 3ab: 55 push %ebp - 3ac: 89 e5 mov %esp,%ebp - 3ae: 57 push %edi - 3af: 56 push %esi - 3b0: 53 push %ebx - 3b1: 83 ec 3c sub $0x3c,%esp - 3b4: 89 45 c4 mov %eax,-0x3c(%ebp) - 3b7: 89 d3 mov %edx,%ebx + 389: 55 push %ebp + 38a: 89 e5 mov %esp,%ebp + 38c: 57 push %edi + 38d: 56 push %esi + 38e: 53 push %ebx + 38f: 83 ec 3c sub $0x3c,%esp + 392: 89 45 c4 mov %eax,-0x3c(%ebp) + 395: 89 ce mov %ecx,%esi char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 3b9: 83 7d 08 00 cmpl $0x0,0x8(%ebp) - 3bd: 74 77 je 436 - 3bf: 85 d2 test %edx,%edx - 3c1: 79 73 jns 436 + 397: 83 7d 08 00 cmpl $0x0,0x8(%ebp) + 39b: 74 79 je 416 + 39d: 85 d2 test %edx,%edx + 39f: 79 75 jns 416 neg = 1; x = -xx; - 3c3: f7 db neg %ebx + 3a1: 89 d1 mov %edx,%ecx + 3a3: f7 d9 neg %ecx neg = 1; - 3c5: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) + 3a5: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) } else { x = xx; } i = 0; - 3cc: be 00 00 00 00 mov $0x0,%esi + 3ac: bb 00 00 00 00 mov $0x0,%ebx do{ buf[i++] = digits[x % base]; - 3d1: 89 f7 mov %esi,%edi - 3d3: 83 c6 01 add $0x1,%esi - 3d6: 89 d8 mov %ebx,%eax - 3d8: ba 00 00 00 00 mov $0x0,%edx - 3dd: f7 f1 div %ecx - 3df: 0f b6 92 84 07 00 00 movzbl 0x784(%edx),%edx - 3e6: 88 54 35 d7 mov %dl,-0x29(%ebp,%esi,1) + 3b1: 89 df mov %ebx,%edi + 3b3: 83 c3 01 add $0x1,%ebx + 3b6: 89 c8 mov %ecx,%eax + 3b8: ba 00 00 00 00 mov $0x0,%edx + 3bd: f7 f6 div %esi + 3bf: 0f b6 92 9c 07 00 00 movzbl 0x79c(%edx),%edx + 3c6: 88 54 1d d7 mov %dl,-0x29(%ebp,%ebx,1) }while((x /= base) != 0); - 3ea: 89 da mov %ebx,%edx - 3ec: 89 c3 mov %eax,%ebx - 3ee: 39 d1 cmp %edx,%ecx - 3f0: 76 df jbe 3d1 + 3ca: 89 ca mov %ecx,%edx + 3cc: 89 c1 mov %eax,%ecx + 3ce: 39 d6 cmp %edx,%esi + 3d0: 76 df jbe 3b1 if(neg) - 3f2: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) - 3f6: 74 08 je 400 + 3d2: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) + 3d6: 74 08 je 3e0 buf[i++] = '-'; - 3f8: c6 44 35 d8 2d movb $0x2d,-0x28(%ebp,%esi,1) - 3fd: 8d 77 02 lea 0x2(%edi),%esi + 3d8: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) + 3dd: 8d 5f 02 lea 0x2(%edi),%ebx while(--i >= 0) - 400: 85 f6 test %esi,%esi - 402: 7e 2a jle 42e - 404: 8d 5c 35 d7 lea -0x29(%ebp,%esi,1),%ebx - 408: 8d 7d d8 lea -0x28(%ebp),%edi + 3e0: 85 db test %ebx,%ebx + 3e2: 7e 2a jle 40e + 3e4: 8d 7d d8 lea -0x28(%ebp),%edi + 3e7: 8d 5c 1d d7 lea -0x29(%ebp,%ebx,1),%ebx write(fd, &c, 1); - 40b: 8d 75 d7 lea -0x29(%ebp),%esi + 3eb: 8d 75 d7 lea -0x29(%ebp),%esi putc(fd, buf[i]); - 40e: 0f b6 03 movzbl (%ebx),%eax - 411: 88 45 d7 mov %al,-0x29(%ebp) + 3ee: 0f b6 03 movzbl (%ebx),%eax + 3f1: 88 45 d7 mov %al,-0x29(%ebp) write(fd, &c, 1); - 414: 83 ec 04 sub $0x4,%esp - 417: 6a 01 push $0x1 - 419: 56 push %esi - 41a: ff 75 c4 pushl -0x3c(%ebp) - 41d: e8 f9 fe ff ff call 31b + 3f4: 83 ec 04 sub $0x4,%esp + 3f7: 6a 01 push $0x1 + 3f9: 56 push %esi + 3fa: ff 75 c4 push -0x3c(%ebp) + 3fd: e8 f7 fe ff ff call 2f9 while(--i >= 0) - 422: 89 d8 mov %ebx,%eax - 424: 83 eb 01 sub $0x1,%ebx - 427: 83 c4 10 add $0x10,%esp - 42a: 39 f8 cmp %edi,%eax - 42c: 75 e0 jne 40e + 402: 89 d8 mov %ebx,%eax + 404: 83 eb 01 sub $0x1,%ebx + 407: 83 c4 10 add $0x10,%esp + 40a: 39 f8 cmp %edi,%eax + 40c: 75 e0 jne 3ee } - 42e: 8d 65 f4 lea -0xc(%ebp),%esp - 431: 5b pop %ebx - 432: 5e pop %esi - 433: 5f pop %edi - 434: 5d pop %ebp - 435: c3 ret + 40e: 8d 65 f4 lea -0xc(%ebp),%esp + 411: 5b pop %ebx + 412: 5e pop %esi + 413: 5f pop %edi + 414: 5d pop %ebp + 415: c3 ret + x = xx; + 416: 89 d1 mov %edx,%ecx neg = 0; - 436: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) - 43d: eb 8d jmp 3cc + 418: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) + 41f: eb 8b jmp 3ac -0000043f : +00000421 : // Print to the given fd. Only understands %d, %x, %p, %s. void printf(int fd, const char *fmt, ...) { - 43f: f3 0f 1e fb endbr32 - 443: 55 push %ebp - 444: 89 e5 mov %esp,%ebp - 446: 57 push %edi - 447: 56 push %esi - 448: 53 push %ebx - 449: 83 ec 2c sub $0x2c,%esp + 421: 55 push %ebp + 422: 89 e5 mov %esp,%ebp + 424: 57 push %edi + 425: 56 push %esi + 426: 53 push %ebx + 427: 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++){ - 44c: 8b 75 0c mov 0xc(%ebp),%esi - 44f: 0f b6 1e movzbl (%esi),%ebx - 452: 84 db test %bl,%bl - 454: 0f 84 ab 01 00 00 je 605 - 45a: 83 c6 01 add $0x1,%esi + 42a: 8b 75 0c mov 0xc(%ebp),%esi + 42d: 0f b6 1e movzbl (%esi),%ebx + 430: 84 db test %bl,%bl + 432: 0f 84 9f 01 00 00 je 5d7 + 438: 83 c6 01 add $0x1,%esi ap = (uint*)(void*)&fmt + 1; - 45d: 8d 45 10 lea 0x10(%ebp),%eax - 460: 89 45 d4 mov %eax,-0x2c(%ebp) + 43b: 8d 45 10 lea 0x10(%ebp),%eax + 43e: 89 45 d4 mov %eax,-0x2c(%ebp) state = 0; - 463: bf 00 00 00 00 mov $0x0,%edi - 468: eb 2d jmp 497 + 441: bf 00 00 00 00 mov $0x0,%edi + 446: eb 2d jmp 475 c = fmt[i] & 0xff; if(state == 0){ if(c == '%'){ state = '%'; } else { putc(fd, c); - 46a: 88 5d e7 mov %bl,-0x19(%ebp) + 448: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 46d: 83 ec 04 sub $0x4,%esp - 470: 6a 01 push $0x1 - 472: 8d 45 e7 lea -0x19(%ebp),%eax - 475: 50 push %eax - 476: ff 75 08 pushl 0x8(%ebp) - 479: e8 9d fe ff ff call 31b + 44b: 83 ec 04 sub $0x4,%esp + 44e: 6a 01 push $0x1 + 450: 8d 45 e7 lea -0x19(%ebp),%eax + 453: 50 push %eax + 454: ff 75 08 push 0x8(%ebp) + 457: e8 9d fe ff ff call 2f9 putc(fd, c); - 47e: 83 c4 10 add $0x10,%esp - 481: eb 05 jmp 488 + 45c: 83 c4 10 add $0x10,%esp + 45f: eb 05 jmp 466 } } else if(state == '%'){ - 483: 83 ff 25 cmp $0x25,%edi - 486: 74 22 je 4aa + 461: 83 ff 25 cmp $0x25,%edi + 464: 74 1f je 485 for(i = 0; fmt[i]; i++){ - 488: 83 c6 01 add $0x1,%esi - 48b: 0f b6 5e ff movzbl -0x1(%esi),%ebx - 48f: 84 db test %bl,%bl - 491: 0f 84 6e 01 00 00 je 605 + 466: 83 c6 01 add $0x1,%esi + 469: 0f b6 5e ff movzbl -0x1(%esi),%ebx + 46d: 84 db test %bl,%bl + 46f: 0f 84 62 01 00 00 je 5d7 c = fmt[i] & 0xff; - 497: 0f be d3 movsbl %bl,%edx - 49a: 0f b6 c3 movzbl %bl,%eax + 475: 0f b6 c3 movzbl %bl,%eax if(state == 0){ - 49d: 85 ff test %edi,%edi - 49f: 75 e2 jne 483 + 478: 85 ff test %edi,%edi + 47a: 75 e5 jne 461 if(c == '%'){ - 4a1: 83 f8 25 cmp $0x25,%eax - 4a4: 75 c4 jne 46a + 47c: 83 f8 25 cmp $0x25,%eax + 47f: 75 c7 jne 448 state = '%'; - 4a6: 89 c7 mov %eax,%edi - 4a8: eb de jmp 488 + 481: 89 c7 mov %eax,%edi + 483: eb e1 jmp 466 if(c == 'd'){ - 4aa: 83 f8 64 cmp $0x64,%eax - 4ad: 74 59 je 508 + 485: 83 f8 25 cmp $0x25,%eax + 488: 0f 84 f2 00 00 00 je 580 + 48e: 8d 50 9d lea -0x63(%eax),%edx + 491: 83 fa 15 cmp $0x15,%edx + 494: 0f 87 07 01 00 00 ja 5a1 + 49a: 0f 87 01 01 00 00 ja 5a1 + 4a0: ff 24 95 44 07 00 00 jmp *0x744(,%edx,4) printint(fd, *ap, 10, 1); + 4a7: 83 ec 0c sub $0xc,%esp + 4aa: 6a 01 push $0x1 + 4ac: b9 0a 00 00 00 mov $0xa,%ecx + 4b1: 8b 7d d4 mov -0x2c(%ebp),%edi + 4b4: 8b 17 mov (%edi),%edx + 4b6: 8b 45 08 mov 0x8(%ebp),%eax + 4b9: e8 cb fe ff ff call 389 ap++; - } else if(c == 'x' || c == 'p'){ - 4af: 81 e2 f7 00 00 00 and $0xf7,%edx - 4b5: 83 fa 70 cmp $0x70,%edx - 4b8: 74 7a je 534 - printint(fd, *ap, 16, 0); - ap++; - } else if(c == 's'){ - 4ba: 83 f8 73 cmp $0x73,%eax - 4bd: 0f 84 9d 00 00 00 je 560 - s = "(null)"; - while(*s != 0){ - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 4c3: 83 f8 63 cmp $0x63,%eax - 4c6: 0f 84 ec 00 00 00 je 5b8 - putc(fd, *ap); - ap++; - } else if(c == '%'){ - 4cc: 83 f8 25 cmp $0x25,%eax - 4cf: 0f 84 0f 01 00 00 je 5e4 - putc(fd, c); + 4be: 89 f8 mov %edi,%eax + 4c0: 83 c0 04 add $0x4,%eax + 4c3: 89 45 d4 mov %eax,-0x2c(%ebp) + 4c6: 83 c4 10 add $0x10,%esp } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); - 4d5: c6 45 e7 25 movb $0x25,-0x19(%ebp) - write(fd, &c, 1); - 4d9: 83 ec 04 sub $0x4,%esp - 4dc: 6a 01 push $0x1 - 4de: 8d 45 e7 lea -0x19(%ebp),%eax - 4e1: 50 push %eax - 4e2: ff 75 08 pushl 0x8(%ebp) - 4e5: e8 31 fe ff ff call 31b putc(fd, c); - 4ea: 88 5d e7 mov %bl,-0x19(%ebp) - write(fd, &c, 1); - 4ed: 83 c4 0c add $0xc,%esp - 4f0: 6a 01 push $0x1 - 4f2: 8d 45 e7 lea -0x19(%ebp),%eax - 4f5: 50 push %eax - 4f6: ff 75 08 pushl 0x8(%ebp) - 4f9: e8 1d fe ff ff call 31b - putc(fd, c); - 4fe: 83 c4 10 add $0x10,%esp } state = 0; - 501: bf 00 00 00 00 mov $0x0,%edi - 506: eb 80 jmp 488 - printint(fd, *ap, 10, 1); - 508: 83 ec 0c sub $0xc,%esp - 50b: 6a 01 push $0x1 - 50d: b9 0a 00 00 00 mov $0xa,%ecx - 512: 8b 7d d4 mov -0x2c(%ebp),%edi - 515: 8b 17 mov (%edi),%edx - 517: 8b 45 08 mov 0x8(%ebp),%eax - 51a: e8 8c fe ff ff call 3ab - ap++; - 51f: 89 f8 mov %edi,%eax - 521: 83 c0 04 add $0x4,%eax - 524: 89 45 d4 mov %eax,-0x2c(%ebp) - 527: 83 c4 10 add $0x10,%esp - state = 0; - 52a: bf 00 00 00 00 mov $0x0,%edi - 52f: e9 54 ff ff ff jmp 488 + 4c9: bf 00 00 00 00 mov $0x0,%edi + 4ce: eb 96 jmp 466 printint(fd, *ap, 16, 0); - 534: 83 ec 0c sub $0xc,%esp - 537: 6a 00 push $0x0 - 539: b9 10 00 00 00 mov $0x10,%ecx - 53e: 8b 7d d4 mov -0x2c(%ebp),%edi - 541: 8b 17 mov (%edi),%edx - 543: 8b 45 08 mov 0x8(%ebp),%eax - 546: e8 60 fe ff ff call 3ab + 4d0: 83 ec 0c sub $0xc,%esp + 4d3: 6a 00 push $0x0 + 4d5: b9 10 00 00 00 mov $0x10,%ecx + 4da: 8b 7d d4 mov -0x2c(%ebp),%edi + 4dd: 8b 17 mov (%edi),%edx + 4df: 8b 45 08 mov 0x8(%ebp),%eax + 4e2: e8 a2 fe ff ff call 389 ap++; - 54b: 89 f8 mov %edi,%eax - 54d: 83 c0 04 add $0x4,%eax - 550: 89 45 d4 mov %eax,-0x2c(%ebp) - 553: 83 c4 10 add $0x10,%esp + 4e7: 89 f8 mov %edi,%eax + 4e9: 83 c0 04 add $0x4,%eax + 4ec: 89 45 d4 mov %eax,-0x2c(%ebp) + 4ef: 83 c4 10 add $0x10,%esp state = 0; - 556: bf 00 00 00 00 mov $0x0,%edi - 55b: e9 28 ff ff ff jmp 488 + 4f2: bf 00 00 00 00 mov $0x0,%edi + 4f7: e9 6a ff ff ff jmp 466 s = (char*)*ap; - 560: 8b 4d d4 mov -0x2c(%ebp),%ecx - 563: 8b 01 mov (%ecx),%eax + 4fc: 8b 4d d4 mov -0x2c(%ebp),%ecx + 4ff: 8b 01 mov (%ecx),%eax ap++; - 565: 83 c1 04 add $0x4,%ecx - 568: 89 4d d4 mov %ecx,-0x2c(%ebp) + 501: 83 c1 04 add $0x4,%ecx + 504: 89 4d d4 mov %ecx,-0x2c(%ebp) if(s == 0) - 56b: 85 c0 test %eax,%eax - 56d: 74 13 je 582 + 507: 85 c0 test %eax,%eax + 509: 74 13 je 51e s = (char*)*ap; - 56f: 89 c3 mov %eax,%ebx + 50b: 89 c3 mov %eax,%ebx while(*s != 0){ - 571: 0f b6 00 movzbl (%eax),%eax + 50d: 0f b6 00 movzbl (%eax),%eax state = 0; - 574: bf 00 00 00 00 mov $0x0,%edi + 510: bf 00 00 00 00 mov $0x0,%edi while(*s != 0){ - 579: 84 c0 test %al,%al - 57b: 75 0f jne 58c - 57d: e9 06 ff ff ff jmp 488 + 515: 84 c0 test %al,%al + 517: 75 0f jne 528 + 519: e9 48 ff ff ff jmp 466 s = "(null)"; - 582: bb 7b 07 00 00 mov $0x77b,%ebx + 51e: bb 3b 07 00 00 mov $0x73b,%ebx while(*s != 0){ - 587: b8 28 00 00 00 mov $0x28,%eax - 58c: 8b 7d 08 mov 0x8(%ebp),%edi + 523: b8 28 00 00 00 mov $0x28,%eax + 528: 8b 7d 08 mov 0x8(%ebp),%edi putc(fd, *s); - 58f: 88 45 e7 mov %al,-0x19(%ebp) + 52b: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 592: 83 ec 04 sub $0x4,%esp - 595: 6a 01 push $0x1 - 597: 8d 45 e7 lea -0x19(%ebp),%eax - 59a: 50 push %eax - 59b: 57 push %edi - 59c: e8 7a fd ff ff call 31b + 52e: 83 ec 04 sub $0x4,%esp + 531: 6a 01 push $0x1 + 533: 8d 45 e7 lea -0x19(%ebp),%eax + 536: 50 push %eax + 537: 57 push %edi + 538: e8 bc fd ff ff call 2f9 s++; - 5a1: 83 c3 01 add $0x1,%ebx + 53d: 83 c3 01 add $0x1,%ebx while(*s != 0){ - 5a4: 0f b6 03 movzbl (%ebx),%eax - 5a7: 83 c4 10 add $0x10,%esp - 5aa: 84 c0 test %al,%al - 5ac: 75 e1 jne 58f + 540: 0f b6 03 movzbl (%ebx),%eax + 543: 83 c4 10 add $0x10,%esp + 546: 84 c0 test %al,%al + 548: 75 e1 jne 52b state = 0; - 5ae: bf 00 00 00 00 mov $0x0,%edi - 5b3: e9 d0 fe ff ff jmp 488 + 54a: bf 00 00 00 00 mov $0x0,%edi + 54f: e9 12 ff ff ff jmp 466 putc(fd, *ap); - 5b8: 8b 7d d4 mov -0x2c(%ebp),%edi - 5bb: 8b 07 mov (%edi),%eax - 5bd: 88 45 e7 mov %al,-0x19(%ebp) + 554: 8b 7d d4 mov -0x2c(%ebp),%edi + 557: 8b 07 mov (%edi),%eax + 559: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 5c0: 83 ec 04 sub $0x4,%esp - 5c3: 6a 01 push $0x1 - 5c5: 8d 45 e7 lea -0x19(%ebp),%eax - 5c8: 50 push %eax - 5c9: ff 75 08 pushl 0x8(%ebp) - 5cc: e8 4a fd ff ff call 31b + 55c: 83 ec 04 sub $0x4,%esp + 55f: 6a 01 push $0x1 + 561: 8d 45 e7 lea -0x19(%ebp),%eax + 564: 50 push %eax + 565: ff 75 08 push 0x8(%ebp) + 568: e8 8c fd ff ff call 2f9 ap++; - 5d1: 83 c7 04 add $0x4,%edi - 5d4: 89 7d d4 mov %edi,-0x2c(%ebp) - 5d7: 83 c4 10 add $0x10,%esp + 56d: 83 c7 04 add $0x4,%edi + 570: 89 7d d4 mov %edi,-0x2c(%ebp) + 573: 83 c4 10 add $0x10,%esp state = 0; - 5da: bf 00 00 00 00 mov $0x0,%edi - 5df: e9 a4 fe ff ff jmp 488 + 576: bf 00 00 00 00 mov $0x0,%edi + 57b: e9 e6 fe ff ff jmp 466 putc(fd, c); - 5e4: 88 5d e7 mov %bl,-0x19(%ebp) + 580: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 5e7: 83 ec 04 sub $0x4,%esp - 5ea: 6a 01 push $0x1 - 5ec: 8d 45 e7 lea -0x19(%ebp),%eax - 5ef: 50 push %eax - 5f0: ff 75 08 pushl 0x8(%ebp) - 5f3: e8 23 fd ff ff call 31b - 5f8: 83 c4 10 add $0x10,%esp + 583: 83 ec 04 sub $0x4,%esp + 586: 6a 01 push $0x1 + 588: 8d 45 e7 lea -0x19(%ebp),%eax + 58b: 50 push %eax + 58c: ff 75 08 push 0x8(%ebp) + 58f: e8 65 fd ff ff call 2f9 + 594: 83 c4 10 add $0x10,%esp + state = 0; + 597: bf 00 00 00 00 mov $0x0,%edi + 59c: e9 c5 fe ff ff jmp 466 + putc(fd, '%'); + 5a1: c6 45 e7 25 movb $0x25,-0x19(%ebp) + write(fd, &c, 1); + 5a5: 83 ec 04 sub $0x4,%esp + 5a8: 6a 01 push $0x1 + 5aa: 8d 45 e7 lea -0x19(%ebp),%eax + 5ad: 50 push %eax + 5ae: ff 75 08 push 0x8(%ebp) + 5b1: e8 43 fd ff ff call 2f9 + putc(fd, c); + 5b6: 88 5d e7 mov %bl,-0x19(%ebp) + write(fd, &c, 1); + 5b9: 83 c4 0c add $0xc,%esp + 5bc: 6a 01 push $0x1 + 5be: 8d 45 e7 lea -0x19(%ebp),%eax + 5c1: 50 push %eax + 5c2: ff 75 08 push 0x8(%ebp) + 5c5: e8 2f fd ff ff call 2f9 + putc(fd, c); + 5ca: 83 c4 10 add $0x10,%esp state = 0; - 5fb: bf 00 00 00 00 mov $0x0,%edi - 600: e9 83 fe ff ff jmp 488 + 5cd: bf 00 00 00 00 mov $0x0,%edi + 5d2: e9 8f fe ff ff jmp 466 } } } - 605: 8d 65 f4 lea -0xc(%ebp),%esp - 608: 5b pop %ebx - 609: 5e pop %esi - 60a: 5f pop %edi - 60b: 5d pop %ebp - 60c: c3 ret - -0000060d : + 5d7: 8d 65 f4 lea -0xc(%ebp),%esp + 5da: 5b pop %ebx + 5db: 5e pop %esi + 5dc: 5f pop %edi + 5dd: 5d pop %ebp + 5de: c3 ret + +000005df : static Header base; static Header *freep; void free(void *ap) { - 60d: f3 0f 1e fb endbr32 - 611: 55 push %ebp - 612: 89 e5 mov %esp,%ebp - 614: 57 push %edi - 615: 56 push %esi - 616: 53 push %ebx - 617: 8b 5d 08 mov 0x8(%ebp),%ebx + 5df: 55 push %ebp + 5e0: 89 e5 mov %esp,%ebp + 5e2: 57 push %edi + 5e3: 56 push %esi + 5e4: 53 push %ebx + 5e5: 8b 5d 08 mov 0x8(%ebp),%ebx Header *bp, *p; bp = (Header*)ap - 1; - 61a: 8d 4b f8 lea -0x8(%ebx),%ecx + 5e8: 8d 4b f8 lea -0x8(%ebx),%ecx for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 61d: a1 f8 09 00 00 mov 0x9f8,%eax - 622: eb 0c jmp 630 + 5eb: a1 10 0a 00 00 mov 0xa10,%eax + 5f0: eb 0c jmp 5fe if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 624: 8b 10 mov (%eax),%edx - 626: 39 c2 cmp %eax,%edx - 628: 77 04 ja 62e - 62a: 39 ca cmp %ecx,%edx - 62c: 77 10 ja 63e + 5f2: 8b 10 mov (%eax),%edx + 5f4: 39 c2 cmp %eax,%edx + 5f6: 77 04 ja 5fc + 5f8: 39 ca cmp %ecx,%edx + 5fa: 77 10 ja 60c { - 62e: 89 d0 mov %edx,%eax + 5fc: 89 d0 mov %edx,%eax for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 630: 39 c8 cmp %ecx,%eax - 632: 73 f0 jae 624 - 634: 8b 10 mov (%eax),%edx - 636: 39 ca cmp %ecx,%edx - 638: 77 04 ja 63e + 5fe: 39 c8 cmp %ecx,%eax + 600: 73 f0 jae 5f2 + 602: 8b 10 mov (%eax),%edx + 604: 39 ca cmp %ecx,%edx + 606: 77 04 ja 60c if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 63a: 39 c2 cmp %eax,%edx - 63c: 77 f0 ja 62e + 608: 39 c2 cmp %eax,%edx + 60a: 77 f0 ja 5fc break; if(bp + bp->s.size == p->s.ptr){ - 63e: 8b 73 fc mov -0x4(%ebx),%esi - 641: 8b 10 mov (%eax),%edx - 643: 8d 3c f1 lea (%ecx,%esi,8),%edi - 646: 39 fa cmp %edi,%edx - 648: 74 19 je 663 + 60c: 8b 73 fc mov -0x4(%ebx),%esi + 60f: 8b 10 mov (%eax),%edx + 611: 8d 3c f1 lea (%ecx,%esi,8),%edi + 614: 39 fa cmp %edi,%edx + 616: 74 19 je 631 bp->s.size += p->s.ptr->s.size; bp->s.ptr = p->s.ptr->s.ptr; + 618: 89 53 f8 mov %edx,-0x8(%ebx) } else bp->s.ptr = p->s.ptr; - 64a: 89 53 f8 mov %edx,-0x8(%ebx) if(p + p->s.size == bp){ - 64d: 8b 50 04 mov 0x4(%eax),%edx - 650: 8d 34 d0 lea (%eax,%edx,8),%esi - 653: 39 f1 cmp %esi,%ecx - 655: 74 1b je 672 + 61b: 8b 50 04 mov 0x4(%eax),%edx + 61e: 8d 34 d0 lea (%eax,%edx,8),%esi + 621: 39 f1 cmp %esi,%ecx + 623: 74 18 je 63d p->s.size += bp->s.size; p->s.ptr = bp->s.ptr; + 625: 89 08 mov %ecx,(%eax) } else p->s.ptr = bp; - 657: 89 08 mov %ecx,(%eax) freep = p; - 659: a3 f8 09 00 00 mov %eax,0x9f8 + 627: a3 10 0a 00 00 mov %eax,0xa10 } - 65e: 5b pop %ebx - 65f: 5e pop %esi - 660: 5f pop %edi - 661: 5d pop %ebp - 662: c3 ret + 62c: 5b pop %ebx + 62d: 5e pop %esi + 62e: 5f pop %edi + 62f: 5d pop %ebp + 630: c3 ret bp->s.size += p->s.ptr->s.size; - 663: 03 72 04 add 0x4(%edx),%esi - 666: 89 73 fc mov %esi,-0x4(%ebx) + 631: 03 72 04 add 0x4(%edx),%esi + 634: 89 73 fc mov %esi,-0x4(%ebx) bp->s.ptr = p->s.ptr->s.ptr; - 669: 8b 10 mov (%eax),%edx - 66b: 8b 12 mov (%edx),%edx - 66d: 89 53 f8 mov %edx,-0x8(%ebx) - 670: eb db jmp 64d + 637: 8b 10 mov (%eax),%edx + 639: 8b 12 mov (%edx),%edx + 63b: eb db jmp 618 p->s.size += bp->s.size; - 672: 03 53 fc add -0x4(%ebx),%edx - 675: 89 50 04 mov %edx,0x4(%eax) + 63d: 03 53 fc add -0x4(%ebx),%edx + 640: 89 50 04 mov %edx,0x4(%eax) p->s.ptr = bp->s.ptr; - 678: 8b 53 f8 mov -0x8(%ebx),%edx - 67b: 89 10 mov %edx,(%eax) - 67d: eb da jmp 659 + 643: 8b 4b f8 mov -0x8(%ebx),%ecx + 646: eb dd jmp 625 -0000067f : +00000648 : return freep; } void* malloc(uint nbytes) { - 67f: f3 0f 1e fb endbr32 - 683: 55 push %ebp - 684: 89 e5 mov %esp,%ebp - 686: 57 push %edi - 687: 56 push %esi - 688: 53 push %ebx - 689: 83 ec 0c sub $0xc,%esp + 648: 55 push %ebp + 649: 89 e5 mov %esp,%ebp + 64b: 57 push %edi + 64c: 56 push %esi + 64d: 53 push %ebx + 64e: 83 ec 0c sub $0xc,%esp Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 68c: 8b 45 08 mov 0x8(%ebp),%eax - 68f: 8d 58 07 lea 0x7(%eax),%ebx - 692: c1 eb 03 shr $0x3,%ebx - 695: 83 c3 01 add $0x1,%ebx + 651: 8b 45 08 mov 0x8(%ebp),%eax + 654: 8d 58 07 lea 0x7(%eax),%ebx + 657: c1 eb 03 shr $0x3,%ebx + 65a: 83 c3 01 add $0x1,%ebx if((prevp = freep) == 0){ - 698: 8b 15 f8 09 00 00 mov 0x9f8,%edx - 69e: 85 d2 test %edx,%edx - 6a0: 74 20 je 6c2 + 65d: 8b 15 10 0a 00 00 mov 0xa10,%edx + 663: 85 d2 test %edx,%edx + 665: 74 1c je 683 base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 6a2: 8b 02 mov (%edx),%eax + 667: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 6a4: 8b 48 04 mov 0x4(%eax),%ecx - 6a7: 39 cb cmp %ecx,%ebx - 6a9: 76 3c jbe 6e7 - 6ab: 81 fb 00 10 00 00 cmp $0x1000,%ebx - 6b1: be 00 10 00 00 mov $0x1000,%esi - 6b6: 0f 43 f3 cmovae %ebx,%esi + 669: 8b 48 04 mov 0x4(%eax),%ecx + 66c: 39 cb cmp %ecx,%ebx + 66e: 76 38 jbe 6a8 + 670: be 00 10 00 00 mov $0x1000,%esi + 675: 39 f3 cmp %esi,%ebx + 677: 0f 43 f3 cmovae %ebx,%esi p = sbrk(nu * sizeof(Header)); - 6b9: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi - 6c0: eb 72 jmp 734 + 67a: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi + 681: eb 72 jmp 6f5 base.s.ptr = freep = prevp = &base; - 6c2: c7 05 f8 09 00 00 fc movl $0x9fc,0x9f8 - 6c9: 09 00 00 - 6cc: c7 05 fc 09 00 00 fc movl $0x9fc,0x9fc - 6d3: 09 00 00 + 683: c7 05 10 0a 00 00 14 movl $0xa14,0xa10 + 68a: 0a 00 00 + 68d: c7 05 14 0a 00 00 14 movl $0xa14,0xa14 + 694: 0a 00 00 base.s.size = 0; - 6d6: c7 05 00 0a 00 00 00 movl $0x0,0xa00 - 6dd: 00 00 00 + 697: c7 05 18 0a 00 00 00 movl $0x0,0xa18 + 69e: 00 00 00 for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 6e0: b8 fc 09 00 00 mov $0x9fc,%eax - 6e5: eb c4 jmp 6ab + 6a1: b8 14 0a 00 00 mov $0xa14,%eax + 6a6: eb c8 jmp 670 if(p->s.size == nunits) - 6e7: 39 cb cmp %ecx,%ebx - 6e9: 74 1e je 709 + 6a8: 39 cb cmp %ecx,%ebx + 6aa: 74 1e je 6ca prevp->s.ptr = p->s.ptr; else { p->s.size -= nunits; - 6eb: 29 d9 sub %ebx,%ecx - 6ed: 89 48 04 mov %ecx,0x4(%eax) + 6ac: 29 d9 sub %ebx,%ecx + 6ae: 89 48 04 mov %ecx,0x4(%eax) p += p->s.size; - 6f0: 8d 04 c8 lea (%eax,%ecx,8),%eax + 6b1: 8d 04 c8 lea (%eax,%ecx,8),%eax p->s.size = nunits; - 6f3: 89 58 04 mov %ebx,0x4(%eax) + 6b4: 89 58 04 mov %ebx,0x4(%eax) } freep = prevp; - 6f6: 89 15 f8 09 00 00 mov %edx,0x9f8 + 6b7: 89 15 10 0a 00 00 mov %edx,0xa10 return (void*)(p + 1); - 6fc: 8d 50 08 lea 0x8(%eax),%edx + 6bd: 8d 50 08 lea 0x8(%eax),%edx } if(p == freep) if((p = morecore(nunits)) == 0) return 0; } } - 6ff: 89 d0 mov %edx,%eax - 701: 8d 65 f4 lea -0xc(%ebp),%esp - 704: 5b pop %ebx - 705: 5e pop %esi - 706: 5f pop %edi - 707: 5d pop %ebp - 708: c3 ret + 6c0: 89 d0 mov %edx,%eax + 6c2: 8d 65 f4 lea -0xc(%ebp),%esp + 6c5: 5b pop %ebx + 6c6: 5e pop %esi + 6c7: 5f pop %edi + 6c8: 5d pop %ebp + 6c9: c3 ret prevp->s.ptr = p->s.ptr; - 709: 8b 08 mov (%eax),%ecx - 70b: 89 0a mov %ecx,(%edx) - 70d: eb e7 jmp 6f6 + 6ca: 8b 08 mov (%eax),%ecx + 6cc: 89 0a mov %ecx,(%edx) + 6ce: eb e7 jmp 6b7 hp->s.size = nu; - 70f: 89 70 04 mov %esi,0x4(%eax) + 6d0: 89 70 04 mov %esi,0x4(%eax) free((void*)(hp + 1)); - 712: 83 ec 0c sub $0xc,%esp - 715: 83 c0 08 add $0x8,%eax - 718: 50 push %eax - 719: e8 ef fe ff ff call 60d + 6d3: 83 ec 0c sub $0xc,%esp + 6d6: 83 c0 08 add $0x8,%eax + 6d9: 50 push %eax + 6da: e8 00 ff ff ff call 5df return freep; - 71e: 8b 15 f8 09 00 00 mov 0x9f8,%edx + 6df: 8b 15 10 0a 00 00 mov 0xa10,%edx if((p = morecore(nunits)) == 0) - 724: 83 c4 10 add $0x10,%esp - 727: 85 d2 test %edx,%edx - 729: 74 d4 je 6ff + 6e5: 83 c4 10 add $0x10,%esp + 6e8: 85 d2 test %edx,%edx + 6ea: 74 d4 je 6c0 for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 72b: 8b 02 mov (%edx),%eax + 6ec: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 72d: 8b 48 04 mov 0x4(%eax),%ecx - 730: 39 d9 cmp %ebx,%ecx - 732: 73 b3 jae 6e7 + 6ee: 8b 48 04 mov 0x4(%eax),%ecx + 6f1: 39 d9 cmp %ebx,%ecx + 6f3: 73 b3 jae 6a8 if(p == freep) - 734: 89 c2 mov %eax,%edx - 736: 39 05 f8 09 00 00 cmp %eax,0x9f8 - 73c: 75 ed jne 72b + 6f5: 89 c2 mov %eax,%edx + 6f7: 39 05 10 0a 00 00 cmp %eax,0xa10 + 6fd: 75 ed jne 6ec p = sbrk(nu * sizeof(Header)); - 73e: 83 ec 0c sub $0xc,%esp - 741: 57 push %edi - 742: e8 3c fc ff ff call 383 + 6ff: 83 ec 0c sub $0xc,%esp + 702: 57 push %edi + 703: e8 59 fc ff ff call 361 if(p == (char*)-1) - 747: 83 c4 10 add $0x10,%esp - 74a: 83 f8 ff cmp $0xffffffff,%eax - 74d: 75 c0 jne 70f + 708: 83 c4 10 add $0x10,%esp + 70b: 83 f8 ff cmp $0xffffffff,%eax + 70e: 75 c0 jne 6d0 return 0; - 74f: ba 00 00 00 00 mov $0x0,%edx - 754: eb a9 jmp 6ff + 710: ba 00 00 00 00 mov $0x0,%edx + 715: eb a9 jmp 6c0 diff --git a/src/user/stressfs.d b/src/user/stressfs.d new file mode 100644 index 0000000..e03760e --- /dev/null +++ b/src/user/stressfs.d @@ -0,0 +1,2 @@ +user/stressfs.o: user/stressfs.c /usr/include/stdc-predef.h types.h \ + stat.h user.h fs.h fcntl.h diff --git a/src/user/stressfs.o b/src/user/stressfs.o new file mode 100644 index 0000000000000000000000000000000000000000..65cc095e8b4b740467cffd7f3f6bf4dae5d7f553 GIT binary patch literal 4424 zcmbVPYm8K98GgTWnH_eP-I<+bcPTZ@wm`2ldjUbNCBoV+mV)BaN@&U1*|R$XJ2T5U zXSh_fH4ADDB+@iS(b!-9AYQ78mqcP?QYX7DPW^8)H=I4C?0mR9du`@ovScB{nc*vq;FsQOCOp~iF^nD|75xg-Ei8Rb1sa$ASzcUTjgj_j{Mxp z@m2|Z5A869?TT{Hxh!(ga2S$i1Im~sZ*2!-tKK2#Y^SA{lGXAqC6)XG!E!f3nR486 zHG(qnFr>CoSQh^pjg@ep0wl7~wvclcfos*uuR>JRsX0#C9cLHQX@~E{4&wX^>>{mX z)<)DEC+=^d?9fwb*G@O+q#NcJcR!lMN+i}+=MKbGE$sCk=;pgutDutf8Yr#%6GOD= z@i9|IIvpx9T17vuk@{vI)-l_!Ev- z<9L!g5Y+VuLah38Nls|VMhJHO%4e)~kT_CnCzxA!tbJ(SCvyaiHhme)+ti##!?FGm(Z@ zYd5`8?2$dB%y5#}hgEu{i%p-}g*|>zE#0(Kq#dJ5;T&;y(q`nwr!njdI+V`4EhAa> zyS4XuJ+Z9Y)Hlc1b(f+sjU`HrWVsC8eHc$ay6m9_OR8nQi`+U_^nnIPa>TLDI*zl} zI*jJ51)*V}?X)_l)NbdTx~$Y*=d!v^>AE^=slBY7tftM6I6FtJfmfZ;(@O2p!IaLa z^UB>G%Dt~T=hbV<9oFn?$Z539OULW#W~{oYZpV(d(Ott)?!}mJS~xP@vWW|dR$x4w z-6jYq^|#s=6QFDiRxP*t!1JuF!(*xCR)@2m*6nO|QMZ?ktHjm)*cp{jJ6t=F?9aN% zgd(@O>q2s$nzf?1P^h8Y&E|dB~`7I{6JiQqO-<)QO~8*5){0!Wn-QI=&zz{Zed4=^aVC zR$aDt*!Af|y2YxWNGGiNv9xW~qlV{v%hx0(N8X=}dE(t)N|ael=E;`Cya3J?RK+H; zQQVu!)>qfO#ugOyCbFet&VzI5#0#8hvh!<#H8Up4%VPmZdBp%Vd#eweIYs6S>LaFK#>UZX93*}s$x)t1eYUx0$`)A-v{0`{h`7~t6w9L06(6z$6M= z)ot(|A}Zm1#1@eUi16cD5p|&jZZq-@gU=WoGgviv%;47ze%~O+%X}O!@wUNb7$@b` z2DcC~o}EVCZ*Y=`BY4Q*F@q-z^8KLww867Pz3|=;P)!=&u zKQMU5U;??Auft%kLB1vYGUoZD{XQbrdzHb54e}p^dVM(ow-{NkGvu9=5uXF{H$e*F z@d~ObFbW!2in+j_Dn$OVND8`=7RJI*3PFtmy$1_}5aBcKkJTp+l&cdpcxv7o8w>m+ zu{2dHPL;!m!E@eT;8iF6yHr!W{Sl} zpu`bEt!vPK^BaJfF+)v$_Zyx-8y~&5R2V8jIl{d)L?06CQ1d*x@V-yO$a(O5#q;3j zOdJDNeu#m7s!0*E&o1zDQ4d&8Vv79^LlN_|y#c=*8AGv+AN$SYJBfP6^Um>M$>+v* z5_}v3R^CBA{s_esvoAu?obMIn+X@}?ft}0u74VGVdXuhWF-GGgkje7-hQZix6E^WV z=wgcfz5@mM*zX+t9*v!hjrJcIJ~q9{L(xR^A-#o%e7vP^!S4wg3~}E`7x6UD_xG42 zQ*yqn&++~?=Ym?&2-*te67calr@=E BdQSiV literal 0 HcmV?d00001 diff --git a/src/user/stressfs.sym b/src/user/stressfs.sym index e5889c6..36e5182 100644 --- a/src/user/stressfs.sym +++ b/src/user/stressfs.sym @@ -1,59 +1,47 @@ -00000000 .text -00000758 .rodata -00000798 .eh_frame -000009f8 .bss -00000000 .comment -00000000 .debug_aranges -00000000 .debug_info -00000000 .debug_abbrev -00000000 .debug_line -00000000 .debug_str -00000000 .debug_loc -00000000 .debug_ranges 00000000 stressfs.c 00000000 ulib.c 00000000 printf.c -000003ab printint -00000784 digits.1089 +00000389 printint +0000079c digits.0 00000000 umalloc.c -000009f8 freep -000009fc base -00000115 strcpy -0000043f printf -000002c2 memmove -00000343 mknod -000003a3 ps -000001e0 gets -0000037b getpid -0000067f malloc -0000038b sleep -0000030b pipe -0000039b slabtest -0000031b write -00000353 fstat -0000032b kill -0000036b chdir -00000333 exec -00000303 wait -00000313 read -0000034b unlink -000002f3 fork -00000383 sbrk -00000393 uptime -000009f8 __bss_start -00000194 memset +00000a10 freep +00000a14 base +00000111 strcpy +00000421 printf +000002a4 memmove +00000321 mknod +00000381 ps +000001cc gets +00000359 getpid +00000648 malloc +00000369 sleep +000002e9 pipe +00000379 slabtest +000002f9 write +00000331 fstat +00000309 kill +00000349 chdir +00000311 exec +000002e1 wait +000002f1 read +00000329 unlink +000002d1 fork +00000361 sbrk +00000371 uptime +00000a10 __bss_start +00000186 memset 00000000 main -0000013b strcmp -00000373 dup -0000023b stat -000009f8 _edata -00000a04 _end -0000035b link -000002fb exit -00000283 atoi -0000016a strlen -0000033b open -000001af strchr -00000363 mkdir -00000323 close -0000060d free +00000135 strcmp +00000351 dup +00000223 stat +00000a10 _edata +00000a1c _end +00000339 link +000002d9 exit +00000267 atoi +00000160 strlen +00000319 open +0000019f strchr +00000341 mkdir +00000301 close +000005df free diff --git a/src/user/usertests.asm b/src/user/usertests.asm index c4fd56e..28838bb 100644 --- a/src/user/usertests.asm +++ b/src/user/usertests.asm @@ -11,7167 +11,7093 @@ int stdout = 1; void iputtest(void) { - 0: f3 0f 1e fb endbr32 - 4: 55 push %ebp - 5: 89 e5 mov %esp,%ebp - 7: 83 ec 10 sub $0x10,%esp + 0: 55 push %ebp + 1: 89 e5 mov %esp,%ebp + 3: 83 ec 10 sub $0x10,%esp printf(stdout, "iput test\n"); - a: 68 10 3d 00 00 push $0x3d10 - f: ff 35 8c 5c 00 00 pushl 0x5c8c - 15: e8 48 39 00 00 call 3962 + 6: 68 38 3c 00 00 push $0x3c38 + b: ff 35 10 5c 00 00 push 0x5c10 + 11: e8 95 38 00 00 call 38ab if(mkdir("iputdir") < 0){ - 1a: c7 04 24 a3 3c 00 00 movl $0x3ca3,(%esp) - 21: e8 60 38 00 00 call 3886 - 26: 83 c4 10 add $0x10,%esp - 29: 85 c0 test %eax,%eax - 2b: 78 54 js 81 + 16: c7 04 24 cb 3b 00 00 movl $0x3bcb,(%esp) + 1d: e8 a9 37 00 00 call 37cb + 22: 83 c4 10 add $0x10,%esp + 25: 85 c0 test %eax,%eax + 27: 78 54 js 7d printf(stdout, "mkdir failed\n"); exit(); } if(chdir("iputdir") < 0){ - 2d: 83 ec 0c sub $0xc,%esp - 30: 68 a3 3c 00 00 push $0x3ca3 - 35: e8 54 38 00 00 call 388e - 3a: 83 c4 10 add $0x10,%esp - 3d: 85 c0 test %eax,%eax - 3f: 78 58 js 99 + 29: 83 ec 0c sub $0xc,%esp + 2c: 68 cb 3b 00 00 push $0x3bcb + 31: e8 9d 37 00 00 call 37d3 + 36: 83 c4 10 add $0x10,%esp + 39: 85 c0 test %eax,%eax + 3b: 78 58 js 95 printf(stdout, "chdir iputdir failed\n"); exit(); } if(unlink("../iputdir") < 0){ - 41: 83 ec 0c sub $0xc,%esp - 44: 68 a0 3c 00 00 push $0x3ca0 - 49: e8 20 38 00 00 call 386e - 4e: 83 c4 10 add $0x10,%esp - 51: 85 c0 test %eax,%eax - 53: 78 5c js b1 + 3d: 83 ec 0c sub $0xc,%esp + 40: 68 c8 3b 00 00 push $0x3bc8 + 45: e8 69 37 00 00 call 37b3 + 4a: 83 c4 10 add $0x10,%esp + 4d: 85 c0 test %eax,%eax + 4f: 78 5c js ad printf(stdout, "unlink ../iputdir failed\n"); exit(); } if(chdir("/") < 0){ - 55: 83 ec 0c sub $0xc,%esp - 58: 68 c5 3c 00 00 push $0x3cc5 - 5d: e8 2c 38 00 00 call 388e - 62: 83 c4 10 add $0x10,%esp - 65: 85 c0 test %eax,%eax - 67: 78 60 js c9 + 51: 83 ec 0c sub $0xc,%esp + 54: 68 ed 3b 00 00 push $0x3bed + 59: e8 75 37 00 00 call 37d3 + 5e: 83 c4 10 add $0x10,%esp + 61: 85 c0 test %eax,%eax + 63: 78 60 js c5 printf(stdout, "chdir / failed\n"); exit(); } printf(stdout, "iput test ok\n"); - 69: 83 ec 08 sub $0x8,%esp - 6c: 68 48 3d 00 00 push $0x3d48 - 71: ff 35 8c 5c 00 00 pushl 0x5c8c - 77: e8 e6 38 00 00 call 3962 + 65: 83 ec 08 sub $0x8,%esp + 68: 68 70 3c 00 00 push $0x3c70 + 6d: ff 35 10 5c 00 00 push 0x5c10 + 73: e8 33 38 00 00 call 38ab } - 7c: 83 c4 10 add $0x10,%esp - 7f: c9 leave - 80: c3 ret + 78: 83 c4 10 add $0x10,%esp + 7b: c9 leave + 7c: c3 ret printf(stdout, "mkdir failed\n"); - 81: 83 ec 08 sub $0x8,%esp - 84: 68 7c 3c 00 00 push $0x3c7c - 89: ff 35 8c 5c 00 00 pushl 0x5c8c - 8f: e8 ce 38 00 00 call 3962 + 7d: 83 ec 08 sub $0x8,%esp + 80: 68 a4 3b 00 00 push $0x3ba4 + 85: ff 35 10 5c 00 00 push 0x5c10 + 8b: e8 1b 38 00 00 call 38ab exit(); - 94: e8 85 37 00 00 call 381e + 90: e8 ce 36 00 00 call 3763 printf(stdout, "chdir iputdir failed\n"); - 99: 83 ec 08 sub $0x8,%esp - 9c: 68 8a 3c 00 00 push $0x3c8a - a1: ff 35 8c 5c 00 00 pushl 0x5c8c - a7: e8 b6 38 00 00 call 3962 + 95: 83 ec 08 sub $0x8,%esp + 98: 68 b2 3b 00 00 push $0x3bb2 + 9d: ff 35 10 5c 00 00 push 0x5c10 + a3: e8 03 38 00 00 call 38ab exit(); - ac: e8 6d 37 00 00 call 381e + a8: e8 b6 36 00 00 call 3763 printf(stdout, "unlink ../iputdir failed\n"); - b1: 83 ec 08 sub $0x8,%esp - b4: 68 ab 3c 00 00 push $0x3cab - b9: ff 35 8c 5c 00 00 pushl 0x5c8c - bf: e8 9e 38 00 00 call 3962 + ad: 83 ec 08 sub $0x8,%esp + b0: 68 d3 3b 00 00 push $0x3bd3 + b5: ff 35 10 5c 00 00 push 0x5c10 + bb: e8 eb 37 00 00 call 38ab exit(); - c4: e8 55 37 00 00 call 381e + c0: e8 9e 36 00 00 call 3763 printf(stdout, "chdir / failed\n"); - c9: 83 ec 08 sub $0x8,%esp - cc: 68 c7 3c 00 00 push $0x3cc7 - d1: ff 35 8c 5c 00 00 pushl 0x5c8c - d7: e8 86 38 00 00 call 3962 + c5: 83 ec 08 sub $0x8,%esp + c8: 68 ef 3b 00 00 push $0x3bef + cd: ff 35 10 5c 00 00 push 0x5c10 + d3: e8 d3 37 00 00 call 38ab exit(); - dc: e8 3d 37 00 00 call 381e + d8: e8 86 36 00 00 call 3763 -000000e1 : +000000dd : // does exit() call iput(p->cwd) in a transaction? void exitiputtest(void) { - e1: f3 0f 1e fb endbr32 - e5: 55 push %ebp - e6: 89 e5 mov %esp,%ebp - e8: 83 ec 10 sub $0x10,%esp + dd: 55 push %ebp + de: 89 e5 mov %esp,%ebp + e0: 83 ec 10 sub $0x10,%esp int pid; printf(stdout, "exitiput test\n"); - eb: 68 d7 3c 00 00 push $0x3cd7 - f0: ff 35 8c 5c 00 00 pushl 0x5c8c - f6: e8 67 38 00 00 call 3962 + e3: 68 ff 3b 00 00 push $0x3bff + e8: ff 35 10 5c 00 00 push 0x5c10 + ee: e8 b8 37 00 00 call 38ab pid = fork(); - fb: e8 16 37 00 00 call 3816 + f3: e8 63 36 00 00 call 375b if(pid < 0){ - 100: 83 c4 10 add $0x10,%esp - 103: 85 c0 test %eax,%eax - 105: 78 47 js 14e + f8: 83 c4 10 add $0x10,%esp + fb: 85 c0 test %eax,%eax + fd: 78 47 js 146 printf(stdout, "fork failed\n"); exit(); } if(pid == 0){ - 107: 0f 85 a1 00 00 00 jne 1ae + ff: 0f 85 a1 00 00 00 jne 1a6 if(mkdir("iputdir") < 0){ - 10d: 83 ec 0c sub $0xc,%esp - 110: 68 a3 3c 00 00 push $0x3ca3 - 115: e8 6c 37 00 00 call 3886 - 11a: 83 c4 10 add $0x10,%esp - 11d: 85 c0 test %eax,%eax - 11f: 78 45 js 166 + 105: 83 ec 0c sub $0xc,%esp + 108: 68 cb 3b 00 00 push $0x3bcb + 10d: e8 b9 36 00 00 call 37cb + 112: 83 c4 10 add $0x10,%esp + 115: 85 c0 test %eax,%eax + 117: 78 45 js 15e printf(stdout, "mkdir failed\n"); exit(); } if(chdir("iputdir") < 0){ - 121: 83 ec 0c sub $0xc,%esp - 124: 68 a3 3c 00 00 push $0x3ca3 - 129: e8 60 37 00 00 call 388e - 12e: 83 c4 10 add $0x10,%esp - 131: 85 c0 test %eax,%eax - 133: 78 49 js 17e + 119: 83 ec 0c sub $0xc,%esp + 11c: 68 cb 3b 00 00 push $0x3bcb + 121: e8 ad 36 00 00 call 37d3 + 126: 83 c4 10 add $0x10,%esp + 129: 85 c0 test %eax,%eax + 12b: 78 49 js 176 printf(stdout, "child chdir failed\n"); exit(); } if(unlink("../iputdir") < 0){ - 135: 83 ec 0c sub $0xc,%esp - 138: 68 a0 3c 00 00 push $0x3ca0 - 13d: e8 2c 37 00 00 call 386e - 142: 83 c4 10 add $0x10,%esp - 145: 85 c0 test %eax,%eax - 147: 78 4d js 196 + 12d: 83 ec 0c sub $0xc,%esp + 130: 68 c8 3b 00 00 push $0x3bc8 + 135: e8 79 36 00 00 call 37b3 + 13a: 83 c4 10 add $0x10,%esp + 13d: 85 c0 test %eax,%eax + 13f: 78 4d js 18e printf(stdout, "unlink ../iputdir failed\n"); exit(); } exit(); - 149: e8 d0 36 00 00 call 381e + 141: e8 1d 36 00 00 call 3763 printf(stdout, "fork failed\n"); - 14e: 83 ec 08 sub $0x8,%esp - 151: 68 bd 4b 00 00 push $0x4bbd - 156: ff 35 8c 5c 00 00 pushl 0x5c8c - 15c: e8 01 38 00 00 call 3962 + 146: 83 ec 08 sub $0x8,%esp + 149: 68 e5 4a 00 00 push $0x4ae5 + 14e: ff 35 10 5c 00 00 push 0x5c10 + 154: e8 52 37 00 00 call 38ab exit(); - 161: e8 b8 36 00 00 call 381e + 159: e8 05 36 00 00 call 3763 printf(stdout, "mkdir failed\n"); - 166: 83 ec 08 sub $0x8,%esp - 169: 68 7c 3c 00 00 push $0x3c7c - 16e: ff 35 8c 5c 00 00 pushl 0x5c8c - 174: e8 e9 37 00 00 call 3962 + 15e: 83 ec 08 sub $0x8,%esp + 161: 68 a4 3b 00 00 push $0x3ba4 + 166: ff 35 10 5c 00 00 push 0x5c10 + 16c: e8 3a 37 00 00 call 38ab exit(); - 179: e8 a0 36 00 00 call 381e + 171: e8 ed 35 00 00 call 3763 printf(stdout, "child chdir failed\n"); - 17e: 83 ec 08 sub $0x8,%esp - 181: 68 e6 3c 00 00 push $0x3ce6 - 186: ff 35 8c 5c 00 00 pushl 0x5c8c - 18c: e8 d1 37 00 00 call 3962 + 176: 83 ec 08 sub $0x8,%esp + 179: 68 0e 3c 00 00 push $0x3c0e + 17e: ff 35 10 5c 00 00 push 0x5c10 + 184: e8 22 37 00 00 call 38ab exit(); - 191: e8 88 36 00 00 call 381e + 189: e8 d5 35 00 00 call 3763 printf(stdout, "unlink ../iputdir failed\n"); - 196: 83 ec 08 sub $0x8,%esp - 199: 68 ab 3c 00 00 push $0x3cab - 19e: ff 35 8c 5c 00 00 pushl 0x5c8c - 1a4: e8 b9 37 00 00 call 3962 + 18e: 83 ec 08 sub $0x8,%esp + 191: 68 d3 3b 00 00 push $0x3bd3 + 196: ff 35 10 5c 00 00 push 0x5c10 + 19c: e8 0a 37 00 00 call 38ab exit(); - 1a9: e8 70 36 00 00 call 381e + 1a1: e8 bd 35 00 00 call 3763 } wait(); - 1ae: e8 73 36 00 00 call 3826 + 1a6: e8 c0 35 00 00 call 376b printf(stdout, "exitiput test ok\n"); - 1b3: 83 ec 08 sub $0x8,%esp - 1b6: 68 fa 3c 00 00 push $0x3cfa - 1bb: ff 35 8c 5c 00 00 pushl 0x5c8c - 1c1: e8 9c 37 00 00 call 3962 + 1ab: 83 ec 08 sub $0x8,%esp + 1ae: 68 22 3c 00 00 push $0x3c22 + 1b3: ff 35 10 5c 00 00 push 0x5c10 + 1b9: e8 ed 36 00 00 call 38ab } - 1c6: 83 c4 10 add $0x10,%esp - 1c9: c9 leave - 1ca: c3 ret + 1be: 83 c4 10 add $0x10,%esp + 1c1: c9 leave + 1c2: c3 ret -000001cb : +000001c3 : // for(i = 0; i < 10000; i++) // yield(); // } void openiputtest(void) { - 1cb: f3 0f 1e fb endbr32 - 1cf: 55 push %ebp - 1d0: 89 e5 mov %esp,%ebp - 1d2: 83 ec 10 sub $0x10,%esp + 1c3: 55 push %ebp + 1c4: 89 e5 mov %esp,%ebp + 1c6: 83 ec 10 sub $0x10,%esp int pid; printf(stdout, "openiput test\n"); - 1d5: 68 0c 3d 00 00 push $0x3d0c - 1da: ff 35 8c 5c 00 00 pushl 0x5c8c - 1e0: e8 7d 37 00 00 call 3962 + 1c9: 68 34 3c 00 00 push $0x3c34 + 1ce: ff 35 10 5c 00 00 push 0x5c10 + 1d4: e8 d2 36 00 00 call 38ab if(mkdir("oidir") < 0){ - 1e5: c7 04 24 1b 3d 00 00 movl $0x3d1b,(%esp) - 1ec: e8 95 36 00 00 call 3886 - 1f1: 83 c4 10 add $0x10,%esp - 1f4: 85 c0 test %eax,%eax - 1f6: 78 39 js 231 + 1d9: c7 04 24 43 3c 00 00 movl $0x3c43,(%esp) + 1e0: e8 e6 35 00 00 call 37cb + 1e5: 83 c4 10 add $0x10,%esp + 1e8: 85 c0 test %eax,%eax + 1ea: 78 39 js 225 printf(stdout, "mkdir oidir failed\n"); exit(); } pid = fork(); - 1f8: e8 19 36 00 00 call 3816 + 1ec: e8 6a 35 00 00 call 375b if(pid < 0){ - 1fd: 85 c0 test %eax,%eax - 1ff: 78 48 js 249 + 1f1: 85 c0 test %eax,%eax + 1f3: 78 48 js 23d printf(stdout, "fork failed\n"); exit(); } if(pid == 0){ - 201: 75 63 jne 266 + 1f5: 75 63 jne 25a int fd = open("oidir", O_RDWR); - 203: 83 ec 08 sub $0x8,%esp - 206: 6a 02 push $0x2 - 208: 68 1b 3d 00 00 push $0x3d1b - 20d: e8 4c 36 00 00 call 385e + 1f7: 83 ec 08 sub $0x8,%esp + 1fa: 6a 02 push $0x2 + 1fc: 68 43 3c 00 00 push $0x3c43 + 201: e8 9d 35 00 00 call 37a3 if(fd >= 0){ - 212: 83 c4 10 add $0x10,%esp - 215: 85 c0 test %eax,%eax - 217: 78 48 js 261 + 206: 83 c4 10 add $0x10,%esp + 209: 85 c0 test %eax,%eax + 20b: 78 48 js 255 printf(stdout, "open directory for write succeeded\n"); - 219: 83 ec 08 sub $0x8,%esp - 21c: 68 a0 4c 00 00 push $0x4ca0 - 221: ff 35 8c 5c 00 00 pushl 0x5c8c - 227: e8 36 37 00 00 call 3962 + 20d: 83 ec 08 sub $0x8,%esp + 210: 68 c8 4b 00 00 push $0x4bc8 + 215: ff 35 10 5c 00 00 push 0x5c10 + 21b: e8 8b 36 00 00 call 38ab exit(); - 22c: e8 ed 35 00 00 call 381e + 220: e8 3e 35 00 00 call 3763 printf(stdout, "mkdir oidir failed\n"); - 231: 83 ec 08 sub $0x8,%esp - 234: 68 21 3d 00 00 push $0x3d21 - 239: ff 35 8c 5c 00 00 pushl 0x5c8c - 23f: e8 1e 37 00 00 call 3962 + 225: 83 ec 08 sub $0x8,%esp + 228: 68 49 3c 00 00 push $0x3c49 + 22d: ff 35 10 5c 00 00 push 0x5c10 + 233: e8 73 36 00 00 call 38ab exit(); - 244: e8 d5 35 00 00 call 381e + 238: e8 26 35 00 00 call 3763 printf(stdout, "fork failed\n"); - 249: 83 ec 08 sub $0x8,%esp - 24c: 68 bd 4b 00 00 push $0x4bbd - 251: ff 35 8c 5c 00 00 pushl 0x5c8c - 257: e8 06 37 00 00 call 3962 + 23d: 83 ec 08 sub $0x8,%esp + 240: 68 e5 4a 00 00 push $0x4ae5 + 245: ff 35 10 5c 00 00 push 0x5c10 + 24b: e8 5b 36 00 00 call 38ab exit(); - 25c: e8 bd 35 00 00 call 381e + 250: e8 0e 35 00 00 call 3763 } exit(); - 261: e8 b8 35 00 00 call 381e + 255: e8 09 35 00 00 call 3763 } sleep(1); - 266: 83 ec 0c sub $0xc,%esp - 269: 6a 01 push $0x1 - 26b: e8 3e 36 00 00 call 38ae + 25a: 83 ec 0c sub $0xc,%esp + 25d: 6a 01 push $0x1 + 25f: e8 8f 35 00 00 call 37f3 if(unlink("oidir") != 0){ - 270: c7 04 24 1b 3d 00 00 movl $0x3d1b,(%esp) - 277: e8 f2 35 00 00 call 386e - 27c: 83 c4 10 add $0x10,%esp - 27f: 85 c0 test %eax,%eax - 281: 75 1d jne 2a0 + 264: c7 04 24 43 3c 00 00 movl $0x3c43,(%esp) + 26b: e8 43 35 00 00 call 37b3 + 270: 83 c4 10 add $0x10,%esp + 273: 85 c0 test %eax,%eax + 275: 75 1d jne 294 printf(stdout, "unlink failed\n"); exit(); } wait(); - 283: e8 9e 35 00 00 call 3826 + 277: e8 ef 34 00 00 call 376b printf(stdout, "openiput test ok\n"); - 288: 83 ec 08 sub $0x8,%esp - 28b: 68 44 3d 00 00 push $0x3d44 - 290: ff 35 8c 5c 00 00 pushl 0x5c8c - 296: e8 c7 36 00 00 call 3962 + 27c: 83 ec 08 sub $0x8,%esp + 27f: 68 6c 3c 00 00 push $0x3c6c + 284: ff 35 10 5c 00 00 push 0x5c10 + 28a: e8 1c 36 00 00 call 38ab } - 29b: 83 c4 10 add $0x10,%esp - 29e: c9 leave - 29f: c3 ret + 28f: 83 c4 10 add $0x10,%esp + 292: c9 leave + 293: c3 ret printf(stdout, "unlink failed\n"); - 2a0: 83 ec 08 sub $0x8,%esp - 2a3: 68 35 3d 00 00 push $0x3d35 - 2a8: ff 35 8c 5c 00 00 pushl 0x5c8c - 2ae: e8 af 36 00 00 call 3962 + 294: 83 ec 08 sub $0x8,%esp + 297: 68 5d 3c 00 00 push $0x3c5d + 29c: ff 35 10 5c 00 00 push 0x5c10 + 2a2: e8 04 36 00 00 call 38ab exit(); - 2b3: e8 66 35 00 00 call 381e + 2a7: e8 b7 34 00 00 call 3763 -000002b8 : +000002ac : // simple file system tests void opentest(void) { - 2b8: f3 0f 1e fb endbr32 - 2bc: 55 push %ebp - 2bd: 89 e5 mov %esp,%ebp - 2bf: 83 ec 10 sub $0x10,%esp + 2ac: 55 push %ebp + 2ad: 89 e5 mov %esp,%ebp + 2af: 83 ec 10 sub $0x10,%esp int fd; printf(stdout, "open test\n"); - 2c2: 68 56 3d 00 00 push $0x3d56 - 2c7: ff 35 8c 5c 00 00 pushl 0x5c8c - 2cd: e8 90 36 00 00 call 3962 + 2b2: 68 7e 3c 00 00 push $0x3c7e + 2b7: ff 35 10 5c 00 00 push 0x5c10 + 2bd: e8 e9 35 00 00 call 38ab fd = open("echo", 0); - 2d2: 83 c4 08 add $0x8,%esp - 2d5: 6a 00 push $0x0 - 2d7: 68 61 3d 00 00 push $0x3d61 - 2dc: e8 7d 35 00 00 call 385e + 2c2: 83 c4 08 add $0x8,%esp + 2c5: 6a 00 push $0x0 + 2c7: 68 89 3c 00 00 push $0x3c89 + 2cc: e8 d2 34 00 00 call 37a3 if(fd < 0){ - 2e1: 83 c4 10 add $0x10,%esp - 2e4: 85 c0 test %eax,%eax - 2e6: 78 37 js 31f + 2d1: 83 c4 10 add $0x10,%esp + 2d4: 85 c0 test %eax,%eax + 2d6: 78 37 js 30f printf(stdout, "open echo failed!\n"); exit(); } close(fd); - 2e8: 83 ec 0c sub $0xc,%esp - 2eb: 50 push %eax - 2ec: e8 55 35 00 00 call 3846 + 2d8: 83 ec 0c sub $0xc,%esp + 2db: 50 push %eax + 2dc: e8 aa 34 00 00 call 378b fd = open("doesnotexist", 0); - 2f1: 83 c4 08 add $0x8,%esp - 2f4: 6a 00 push $0x0 - 2f6: 68 79 3d 00 00 push $0x3d79 - 2fb: e8 5e 35 00 00 call 385e + 2e1: 83 c4 08 add $0x8,%esp + 2e4: 6a 00 push $0x0 + 2e6: 68 a1 3c 00 00 push $0x3ca1 + 2eb: e8 b3 34 00 00 call 37a3 if(fd >= 0){ - 300: 83 c4 10 add $0x10,%esp - 303: 85 c0 test %eax,%eax - 305: 79 30 jns 337 + 2f0: 83 c4 10 add $0x10,%esp + 2f3: 85 c0 test %eax,%eax + 2f5: 79 30 jns 327 printf(stdout, "open doesnotexist succeeded!\n"); exit(); } printf(stdout, "open test ok\n"); - 307: 83 ec 08 sub $0x8,%esp - 30a: 68 a4 3d 00 00 push $0x3da4 - 30f: ff 35 8c 5c 00 00 pushl 0x5c8c - 315: e8 48 36 00 00 call 3962 + 2f7: 83 ec 08 sub $0x8,%esp + 2fa: 68 cc 3c 00 00 push $0x3ccc + 2ff: ff 35 10 5c 00 00 push 0x5c10 + 305: e8 a1 35 00 00 call 38ab } - 31a: 83 c4 10 add $0x10,%esp - 31d: c9 leave - 31e: c3 ret + 30a: 83 c4 10 add $0x10,%esp + 30d: c9 leave + 30e: c3 ret printf(stdout, "open echo failed!\n"); - 31f: 83 ec 08 sub $0x8,%esp - 322: 68 66 3d 00 00 push $0x3d66 - 327: ff 35 8c 5c 00 00 pushl 0x5c8c - 32d: e8 30 36 00 00 call 3962 + 30f: 83 ec 08 sub $0x8,%esp + 312: 68 8e 3c 00 00 push $0x3c8e + 317: ff 35 10 5c 00 00 push 0x5c10 + 31d: e8 89 35 00 00 call 38ab exit(); - 332: e8 e7 34 00 00 call 381e + 322: e8 3c 34 00 00 call 3763 printf(stdout, "open doesnotexist succeeded!\n"); - 337: 83 ec 08 sub $0x8,%esp - 33a: 68 86 3d 00 00 push $0x3d86 - 33f: ff 35 8c 5c 00 00 pushl 0x5c8c - 345: e8 18 36 00 00 call 3962 + 327: 83 ec 08 sub $0x8,%esp + 32a: 68 ae 3c 00 00 push $0x3cae + 32f: ff 35 10 5c 00 00 push 0x5c10 + 335: e8 71 35 00 00 call 38ab exit(); - 34a: e8 cf 34 00 00 call 381e + 33a: e8 24 34 00 00 call 3763 -0000034f : +0000033f : void writetest(void) { - 34f: f3 0f 1e fb endbr32 - 353: 55 push %ebp - 354: 89 e5 mov %esp,%ebp - 356: 56 push %esi - 357: 53 push %ebx + 33f: 55 push %ebp + 340: 89 e5 mov %esp,%ebp + 342: 56 push %esi + 343: 53 push %ebx int fd; int i; printf(stdout, "small file test\n"); - 358: 83 ec 08 sub $0x8,%esp - 35b: 68 b2 3d 00 00 push $0x3db2 - 360: ff 35 8c 5c 00 00 pushl 0x5c8c - 366: e8 f7 35 00 00 call 3962 + 344: 83 ec 08 sub $0x8,%esp + 347: 68 da 3c 00 00 push $0x3cda + 34c: ff 35 10 5c 00 00 push 0x5c10 + 352: e8 54 35 00 00 call 38ab fd = open("small", O_CREATE|O_RDWR); - 36b: 83 c4 08 add $0x8,%esp - 36e: 68 02 02 00 00 push $0x202 - 373: 68 c3 3d 00 00 push $0x3dc3 - 378: e8 e1 34 00 00 call 385e + 357: 83 c4 08 add $0x8,%esp + 35a: 68 02 02 00 00 push $0x202 + 35f: 68 eb 3c 00 00 push $0x3ceb + 364: e8 3a 34 00 00 call 37a3 if(fd >= 0){ - 37d: 83 c4 10 add $0x10,%esp - 380: 85 c0 test %eax,%eax - 382: 0f 88 17 01 00 00 js 49f - 388: 89 c6 mov %eax,%esi + 369: 83 c4 10 add $0x10,%esp + 36c: 85 c0 test %eax,%eax + 36e: 0f 88 17 01 00 00 js 48b + 374: 89 c6 mov %eax,%esi printf(stdout, "creat small succeeded; ok\n"); - 38a: 83 ec 08 sub $0x8,%esp - 38d: 68 c9 3d 00 00 push $0x3dc9 - 392: ff 35 8c 5c 00 00 pushl 0x5c8c - 398: e8 c5 35 00 00 call 3962 - 39d: 83 c4 10 add $0x10,%esp + 376: 83 ec 08 sub $0x8,%esp + 379: 68 f1 3c 00 00 push $0x3cf1 + 37e: ff 35 10 5c 00 00 push 0x5c10 + 384: e8 22 35 00 00 call 38ab + 389: 83 c4 10 add $0x10,%esp } else { printf(stdout, "error: creat small failed!\n"); exit(); } for(i = 0; i < 100; i++){ - 3a0: bb 00 00 00 00 mov $0x0,%ebx + 38c: bb 00 00 00 00 mov $0x0,%ebx if(write(fd, "aaaaaaaaaa", 10) != 10){ - 3a5: 83 ec 04 sub $0x4,%esp - 3a8: 6a 0a push $0xa - 3aa: 68 00 3e 00 00 push $0x3e00 - 3af: 56 push %esi - 3b0: e8 89 34 00 00 call 383e - 3b5: 83 c4 10 add $0x10,%esp - 3b8: 83 f8 0a cmp $0xa,%eax - 3bb: 0f 85 f6 00 00 00 jne 4b7 + 391: 83 ec 04 sub $0x4,%esp + 394: 6a 0a push $0xa + 396: 68 28 3d 00 00 push $0x3d28 + 39b: 56 push %esi + 39c: e8 e2 33 00 00 call 3783 + 3a1: 83 c4 10 add $0x10,%esp + 3a4: 83 f8 0a cmp $0xa,%eax + 3a7: 0f 85 f6 00 00 00 jne 4a3 printf(stdout, "error: write aa %d new file failed\n", i); exit(); } if(write(fd, "bbbbbbbbbb", 10) != 10){ - 3c1: 83 ec 04 sub $0x4,%esp - 3c4: 6a 0a push $0xa - 3c6: 68 0b 3e 00 00 push $0x3e0b - 3cb: 56 push %esi - 3cc: e8 6d 34 00 00 call 383e - 3d1: 83 c4 10 add $0x10,%esp - 3d4: 83 f8 0a cmp $0xa,%eax - 3d7: 0f 85 f3 00 00 00 jne 4d0 + 3ad: 83 ec 04 sub $0x4,%esp + 3b0: 6a 0a push $0xa + 3b2: 68 33 3d 00 00 push $0x3d33 + 3b7: 56 push %esi + 3b8: e8 c6 33 00 00 call 3783 + 3bd: 83 c4 10 add $0x10,%esp + 3c0: 83 f8 0a cmp $0xa,%eax + 3c3: 0f 85 f3 00 00 00 jne 4bc for(i = 0; i < 100; i++){ - 3dd: 83 c3 01 add $0x1,%ebx - 3e0: 83 fb 64 cmp $0x64,%ebx - 3e3: 75 c0 jne 3a5 + 3c9: 83 c3 01 add $0x1,%ebx + 3cc: 83 fb 64 cmp $0x64,%ebx + 3cf: 75 c0 jne 391 printf(stdout, "error: write bb %d new file failed\n", i); exit(); } } printf(stdout, "writes ok\n"); - 3e5: 83 ec 08 sub $0x8,%esp - 3e8: 68 16 3e 00 00 push $0x3e16 - 3ed: ff 35 8c 5c 00 00 pushl 0x5c8c - 3f3: e8 6a 35 00 00 call 3962 + 3d1: 83 ec 08 sub $0x8,%esp + 3d4: 68 3e 3d 00 00 push $0x3d3e + 3d9: ff 35 10 5c 00 00 push 0x5c10 + 3df: e8 c7 34 00 00 call 38ab close(fd); - 3f8: 89 34 24 mov %esi,(%esp) - 3fb: e8 46 34 00 00 call 3846 + 3e4: 89 34 24 mov %esi,(%esp) + 3e7: e8 9f 33 00 00 call 378b fd = open("small", O_RDONLY); - 400: 83 c4 08 add $0x8,%esp - 403: 6a 00 push $0x0 - 405: 68 c3 3d 00 00 push $0x3dc3 - 40a: e8 4f 34 00 00 call 385e - 40f: 89 c3 mov %eax,%ebx + 3ec: 83 c4 08 add $0x8,%esp + 3ef: 6a 00 push $0x0 + 3f1: 68 eb 3c 00 00 push $0x3ceb + 3f6: e8 a8 33 00 00 call 37a3 + 3fb: 89 c3 mov %eax,%ebx if(fd >= 0){ - 411: 83 c4 10 add $0x10,%esp - 414: 85 c0 test %eax,%eax - 416: 0f 88 cd 00 00 00 js 4e9 + 3fd: 83 c4 10 add $0x10,%esp + 400: 85 c0 test %eax,%eax + 402: 0f 88 cd 00 00 00 js 4d5 printf(stdout, "open small succeeded ok\n"); - 41c: 83 ec 08 sub $0x8,%esp - 41f: 68 21 3e 00 00 push $0x3e21 - 424: ff 35 8c 5c 00 00 pushl 0x5c8c - 42a: e8 33 35 00 00 call 3962 + 408: 83 ec 08 sub $0x8,%esp + 40b: 68 49 3d 00 00 push $0x3d49 + 410: ff 35 10 5c 00 00 push 0x5c10 + 416: e8 90 34 00 00 call 38ab } else { printf(stdout, "error: open small failed!\n"); exit(); } i = read(fd, buf, 2000); - 42f: 83 c4 0c add $0xc,%esp - 432: 68 d0 07 00 00 push $0x7d0 - 437: 68 80 84 00 00 push $0x8480 - 43c: 53 push %ebx - 43d: e8 f4 33 00 00 call 3836 + 41b: 83 c4 0c add $0xc,%esp + 41e: 68 d0 07 00 00 push $0x7d0 + 423: 68 60 83 00 00 push $0x8360 + 428: 53 push %ebx + 429: e8 4d 33 00 00 call 377b if(i == 2000){ - 442: 83 c4 10 add $0x10,%esp - 445: 3d d0 07 00 00 cmp $0x7d0,%eax - 44a: 0f 85 b1 00 00 00 jne 501 + 42e: 83 c4 10 add $0x10,%esp + 431: 3d d0 07 00 00 cmp $0x7d0,%eax + 436: 0f 85 b1 00 00 00 jne 4ed printf(stdout, "read succeeded ok\n"); - 450: 83 ec 08 sub $0x8,%esp - 453: 68 55 3e 00 00 push $0x3e55 - 458: ff 35 8c 5c 00 00 pushl 0x5c8c - 45e: e8 ff 34 00 00 call 3962 + 43c: 83 ec 08 sub $0x8,%esp + 43f: 68 7d 3d 00 00 push $0x3d7d + 444: ff 35 10 5c 00 00 push 0x5c10 + 44a: e8 5c 34 00 00 call 38ab } else { printf(stdout, "read failed\n"); exit(); } close(fd); - 463: 89 1c 24 mov %ebx,(%esp) - 466: e8 db 33 00 00 call 3846 + 44f: 89 1c 24 mov %ebx,(%esp) + 452: e8 34 33 00 00 call 378b if(unlink("small") < 0){ - 46b: c7 04 24 c3 3d 00 00 movl $0x3dc3,(%esp) - 472: e8 f7 33 00 00 call 386e - 477: 83 c4 10 add $0x10,%esp - 47a: 85 c0 test %eax,%eax - 47c: 0f 88 97 00 00 00 js 519 + 457: c7 04 24 eb 3c 00 00 movl $0x3ceb,(%esp) + 45e: e8 50 33 00 00 call 37b3 + 463: 83 c4 10 add $0x10,%esp + 466: 85 c0 test %eax,%eax + 468: 0f 88 97 00 00 00 js 505 printf(stdout, "unlink small failed\n"); exit(); } printf(stdout, "small file test ok\n"); - 482: 83 ec 08 sub $0x8,%esp - 485: 68 7d 3e 00 00 push $0x3e7d - 48a: ff 35 8c 5c 00 00 pushl 0x5c8c - 490: e8 cd 34 00 00 call 3962 + 46e: 83 ec 08 sub $0x8,%esp + 471: 68 a5 3d 00 00 push $0x3da5 + 476: ff 35 10 5c 00 00 push 0x5c10 + 47c: e8 2a 34 00 00 call 38ab } - 495: 83 c4 10 add $0x10,%esp - 498: 8d 65 f8 lea -0x8(%ebp),%esp - 49b: 5b pop %ebx - 49c: 5e pop %esi - 49d: 5d pop %ebp - 49e: c3 ret + 481: 83 c4 10 add $0x10,%esp + 484: 8d 65 f8 lea -0x8(%ebp),%esp + 487: 5b pop %ebx + 488: 5e pop %esi + 489: 5d pop %ebp + 48a: c3 ret printf(stdout, "error: creat small failed!\n"); - 49f: 83 ec 08 sub $0x8,%esp - 4a2: 68 e4 3d 00 00 push $0x3de4 - 4a7: ff 35 8c 5c 00 00 pushl 0x5c8c - 4ad: e8 b0 34 00 00 call 3962 + 48b: 83 ec 08 sub $0x8,%esp + 48e: 68 0c 3d 00 00 push $0x3d0c + 493: ff 35 10 5c 00 00 push 0x5c10 + 499: e8 0d 34 00 00 call 38ab exit(); - 4b2: e8 67 33 00 00 call 381e + 49e: e8 c0 32 00 00 call 3763 printf(stdout, "error: write aa %d new file failed\n", i); - 4b7: 83 ec 04 sub $0x4,%esp - 4ba: 53 push %ebx - 4bb: 68 c4 4c 00 00 push $0x4cc4 - 4c0: ff 35 8c 5c 00 00 pushl 0x5c8c - 4c6: e8 97 34 00 00 call 3962 + 4a3: 83 ec 04 sub $0x4,%esp + 4a6: 53 push %ebx + 4a7: 68 ec 4b 00 00 push $0x4bec + 4ac: ff 35 10 5c 00 00 push 0x5c10 + 4b2: e8 f4 33 00 00 call 38ab exit(); - 4cb: e8 4e 33 00 00 call 381e + 4b7: e8 a7 32 00 00 call 3763 printf(stdout, "error: write bb %d new file failed\n", i); - 4d0: 83 ec 04 sub $0x4,%esp - 4d3: 53 push %ebx - 4d4: 68 e8 4c 00 00 push $0x4ce8 - 4d9: ff 35 8c 5c 00 00 pushl 0x5c8c - 4df: e8 7e 34 00 00 call 3962 + 4bc: 83 ec 04 sub $0x4,%esp + 4bf: 53 push %ebx + 4c0: 68 10 4c 00 00 push $0x4c10 + 4c5: ff 35 10 5c 00 00 push 0x5c10 + 4cb: e8 db 33 00 00 call 38ab exit(); - 4e4: e8 35 33 00 00 call 381e + 4d0: e8 8e 32 00 00 call 3763 printf(stdout, "error: open small failed!\n"); - 4e9: 83 ec 08 sub $0x8,%esp - 4ec: 68 3a 3e 00 00 push $0x3e3a - 4f1: ff 35 8c 5c 00 00 pushl 0x5c8c - 4f7: e8 66 34 00 00 call 3962 + 4d5: 83 ec 08 sub $0x8,%esp + 4d8: 68 62 3d 00 00 push $0x3d62 + 4dd: ff 35 10 5c 00 00 push 0x5c10 + 4e3: e8 c3 33 00 00 call 38ab exit(); - 4fc: e8 1d 33 00 00 call 381e + 4e8: e8 76 32 00 00 call 3763 printf(stdout, "read failed\n"); - 501: 83 ec 08 sub $0x8,%esp - 504: 68 81 41 00 00 push $0x4181 - 509: ff 35 8c 5c 00 00 pushl 0x5c8c - 50f: e8 4e 34 00 00 call 3962 + 4ed: 83 ec 08 sub $0x8,%esp + 4f0: 68 a9 40 00 00 push $0x40a9 + 4f5: ff 35 10 5c 00 00 push 0x5c10 + 4fb: e8 ab 33 00 00 call 38ab exit(); - 514: e8 05 33 00 00 call 381e + 500: e8 5e 32 00 00 call 3763 printf(stdout, "unlink small failed\n"); - 519: 83 ec 08 sub $0x8,%esp - 51c: 68 68 3e 00 00 push $0x3e68 - 521: ff 35 8c 5c 00 00 pushl 0x5c8c - 527: e8 36 34 00 00 call 3962 + 505: 83 ec 08 sub $0x8,%esp + 508: 68 90 3d 00 00 push $0x3d90 + 50d: ff 35 10 5c 00 00 push 0x5c10 + 513: e8 93 33 00 00 call 38ab exit(); - 52c: e8 ed 32 00 00 call 381e + 518: e8 46 32 00 00 call 3763 -00000531 : +0000051d : void writetest1(void) { - 531: f3 0f 1e fb endbr32 - 535: 55 push %ebp - 536: 89 e5 mov %esp,%ebp - 538: 56 push %esi - 539: 53 push %ebx + 51d: 55 push %ebp + 51e: 89 e5 mov %esp,%ebp + 520: 56 push %esi + 521: 53 push %ebx int i, fd, n; printf(stdout, "big files test\n"); - 53a: 83 ec 08 sub $0x8,%esp - 53d: 68 91 3e 00 00 push $0x3e91 - 542: ff 35 8c 5c 00 00 pushl 0x5c8c - 548: e8 15 34 00 00 call 3962 + 522: 83 ec 08 sub $0x8,%esp + 525: 68 b9 3d 00 00 push $0x3db9 + 52a: ff 35 10 5c 00 00 push 0x5c10 + 530: e8 76 33 00 00 call 38ab fd = open("big", O_CREATE|O_RDWR); - 54d: 83 c4 08 add $0x8,%esp - 550: 68 02 02 00 00 push $0x202 - 555: 68 0b 3f 00 00 push $0x3f0b - 55a: e8 ff 32 00 00 call 385e + 535: 83 c4 08 add $0x8,%esp + 538: 68 02 02 00 00 push $0x202 + 53d: 68 33 3e 00 00 push $0x3e33 + 542: e8 5c 32 00 00 call 37a3 if(fd < 0){ - 55f: 83 c4 10 add $0x10,%esp - 562: 85 c0 test %eax,%eax - 564: 0f 88 96 00 00 00 js 600 - 56a: 89 c6 mov %eax,%esi + 547: 83 c4 10 add $0x10,%esp + 54a: 85 c0 test %eax,%eax + 54c: 0f 88 96 00 00 00 js 5e8 + 552: 89 c6 mov %eax,%esi printf(stdout, "error: creat big failed!\n"); exit(); } for(i = 0; i < MAXFILE; i++){ - 56c: bb 00 00 00 00 mov $0x0,%ebx + 554: bb 00 00 00 00 mov $0x0,%ebx ((int*)buf)[0] = i; - 571: 89 1d 80 84 00 00 mov %ebx,0x8480 + 559: 89 1d 60 83 00 00 mov %ebx,0x8360 if(write(fd, buf, 512) != 512){ - 577: 83 ec 04 sub $0x4,%esp - 57a: 68 00 02 00 00 push $0x200 - 57f: 68 80 84 00 00 push $0x8480 - 584: 56 push %esi - 585: e8 b4 32 00 00 call 383e - 58a: 83 c4 10 add $0x10,%esp - 58d: 3d 00 02 00 00 cmp $0x200,%eax - 592: 0f 85 80 00 00 00 jne 618 + 55f: 83 ec 04 sub $0x4,%esp + 562: 68 00 02 00 00 push $0x200 + 567: 68 60 83 00 00 push $0x8360 + 56c: 56 push %esi + 56d: e8 11 32 00 00 call 3783 + 572: 83 c4 10 add $0x10,%esp + 575: 3d 00 02 00 00 cmp $0x200,%eax + 57a: 0f 85 80 00 00 00 jne 600 for(i = 0; i < MAXFILE; i++){ - 598: 83 c3 01 add $0x1,%ebx - 59b: 81 fb 8c 00 00 00 cmp $0x8c,%ebx - 5a1: 75 ce jne 571 + 580: 83 c3 01 add $0x1,%ebx + 583: 81 fb 8c 00 00 00 cmp $0x8c,%ebx + 589: 75 ce jne 559 printf(stdout, "error: write big file failed\n", i); exit(); } } close(fd); - 5a3: 83 ec 0c sub $0xc,%esp - 5a6: 56 push %esi - 5a7: e8 9a 32 00 00 call 3846 + 58b: 83 ec 0c sub $0xc,%esp + 58e: 56 push %esi + 58f: e8 f7 31 00 00 call 378b fd = open("big", O_RDONLY); - 5ac: 83 c4 08 add $0x8,%esp - 5af: 6a 00 push $0x0 - 5b1: 68 0b 3f 00 00 push $0x3f0b - 5b6: e8 a3 32 00 00 call 385e - 5bb: 89 c6 mov %eax,%esi + 594: 83 c4 08 add $0x8,%esp + 597: 6a 00 push $0x0 + 599: 68 33 3e 00 00 push $0x3e33 + 59e: e8 00 32 00 00 call 37a3 + 5a3: 89 c6 mov %eax,%esi if(fd < 0){ - 5bd: 83 c4 10 add $0x10,%esp - 5c0: 85 c0 test %eax,%eax - 5c2: 78 6d js 631 + 5a5: 83 c4 10 add $0x10,%esp + 5a8: 85 c0 test %eax,%eax + 5aa: 78 6d js 619 printf(stdout, "error: open big failed!\n"); exit(); } n = 0; - 5c4: bb 00 00 00 00 mov $0x0,%ebx + 5ac: bb 00 00 00 00 mov $0x0,%ebx for(;;){ i = read(fd, buf, 512); - 5c9: 83 ec 04 sub $0x4,%esp - 5cc: 68 00 02 00 00 push $0x200 - 5d1: 68 80 84 00 00 push $0x8480 - 5d6: 56 push %esi - 5d7: e8 5a 32 00 00 call 3836 + 5b1: 83 ec 04 sub $0x4,%esp + 5b4: 68 00 02 00 00 push $0x200 + 5b9: 68 60 83 00 00 push $0x8360 + 5be: 56 push %esi + 5bf: e8 b7 31 00 00 call 377b if(i == 0){ - 5dc: 83 c4 10 add $0x10,%esp - 5df: 85 c0 test %eax,%eax - 5e1: 74 66 je 649 + 5c4: 83 c4 10 add $0x10,%esp + 5c7: 85 c0 test %eax,%eax + 5c9: 74 66 je 631 if(n == MAXFILE - 1){ printf(stdout, "read only %d blocks from big", n); exit(); } break; } else if(i != 512){ - 5e3: 3d 00 02 00 00 cmp $0x200,%eax - 5e8: 0f 85 b9 00 00 00 jne 6a7 + 5cb: 3d 00 02 00 00 cmp $0x200,%eax + 5d0: 0f 85 b9 00 00 00 jne 68f printf(stdout, "read failed %d\n", i); exit(); } if(((int*)buf)[0] != n){ - 5ee: a1 80 84 00 00 mov 0x8480,%eax - 5f3: 39 d8 cmp %ebx,%eax - 5f5: 0f 85 c5 00 00 00 jne 6c0 + 5d6: a1 60 83 00 00 mov 0x8360,%eax + 5db: 39 d8 cmp %ebx,%eax + 5dd: 0f 85 c5 00 00 00 jne 6a8 printf(stdout, "read content of block %d is %d\n", n, ((int*)buf)[0]); exit(); } n++; - 5fb: 83 c3 01 add $0x1,%ebx + 5e3: 83 c3 01 add $0x1,%ebx i = read(fd, buf, 512); - 5fe: eb c9 jmp 5c9 + 5e6: eb c9 jmp 5b1 printf(stdout, "error: creat big failed!\n"); - 600: 83 ec 08 sub $0x8,%esp - 603: 68 a1 3e 00 00 push $0x3ea1 - 608: ff 35 8c 5c 00 00 pushl 0x5c8c - 60e: e8 4f 33 00 00 call 3962 + 5e8: 83 ec 08 sub $0x8,%esp + 5eb: 68 c9 3d 00 00 push $0x3dc9 + 5f0: ff 35 10 5c 00 00 push 0x5c10 + 5f6: e8 b0 32 00 00 call 38ab exit(); - 613: e8 06 32 00 00 call 381e + 5fb: e8 63 31 00 00 call 3763 printf(stdout, "error: write big file failed\n", i); - 618: 83 ec 04 sub $0x4,%esp - 61b: 53 push %ebx - 61c: 68 bb 3e 00 00 push $0x3ebb - 621: ff 35 8c 5c 00 00 pushl 0x5c8c - 627: e8 36 33 00 00 call 3962 + 600: 83 ec 04 sub $0x4,%esp + 603: 53 push %ebx + 604: 68 e3 3d 00 00 push $0x3de3 + 609: ff 35 10 5c 00 00 push 0x5c10 + 60f: e8 97 32 00 00 call 38ab exit(); - 62c: e8 ed 31 00 00 call 381e + 614: e8 4a 31 00 00 call 3763 printf(stdout, "error: open big failed!\n"); - 631: 83 ec 08 sub $0x8,%esp - 634: 68 d9 3e 00 00 push $0x3ed9 - 639: ff 35 8c 5c 00 00 pushl 0x5c8c - 63f: e8 1e 33 00 00 call 3962 + 619: 83 ec 08 sub $0x8,%esp + 61c: 68 01 3e 00 00 push $0x3e01 + 621: ff 35 10 5c 00 00 push 0x5c10 + 627: e8 7f 32 00 00 call 38ab exit(); - 644: e8 d5 31 00 00 call 381e + 62c: e8 32 31 00 00 call 3763 if(n == MAXFILE - 1){ - 649: 81 fb 8b 00 00 00 cmp $0x8b,%ebx - 64f: 74 39 je 68a + 631: 81 fb 8b 00 00 00 cmp $0x8b,%ebx + 637: 74 39 je 672 } close(fd); - 651: 83 ec 0c sub $0xc,%esp - 654: 56 push %esi - 655: e8 ec 31 00 00 call 3846 + 639: 83 ec 0c sub $0xc,%esp + 63c: 56 push %esi + 63d: e8 49 31 00 00 call 378b if(unlink("big") < 0){ - 65a: c7 04 24 0b 3f 00 00 movl $0x3f0b,(%esp) - 661: e8 08 32 00 00 call 386e - 666: 83 c4 10 add $0x10,%esp - 669: 85 c0 test %eax,%eax - 66b: 78 6a js 6d7 + 642: c7 04 24 33 3e 00 00 movl $0x3e33,(%esp) + 649: e8 65 31 00 00 call 37b3 + 64e: 83 c4 10 add $0x10,%esp + 651: 85 c0 test %eax,%eax + 653: 78 6a js 6bf printf(stdout, "unlink big failed\n"); exit(); } printf(stdout, "big files ok\n"); - 66d: 83 ec 08 sub $0x8,%esp - 670: 68 32 3f 00 00 push $0x3f32 - 675: ff 35 8c 5c 00 00 pushl 0x5c8c - 67b: e8 e2 32 00 00 call 3962 + 655: 83 ec 08 sub $0x8,%esp + 658: 68 5a 3e 00 00 push $0x3e5a + 65d: ff 35 10 5c 00 00 push 0x5c10 + 663: e8 43 32 00 00 call 38ab } - 680: 83 c4 10 add $0x10,%esp - 683: 8d 65 f8 lea -0x8(%ebp),%esp - 686: 5b pop %ebx - 687: 5e pop %esi - 688: 5d pop %ebp - 689: c3 ret + 668: 83 c4 10 add $0x10,%esp + 66b: 8d 65 f8 lea -0x8(%ebp),%esp + 66e: 5b pop %ebx + 66f: 5e pop %esi + 670: 5d pop %ebp + 671: c3 ret printf(stdout, "read only %d blocks from big", n); - 68a: 83 ec 04 sub $0x4,%esp - 68d: 68 8b 00 00 00 push $0x8b - 692: 68 f2 3e 00 00 push $0x3ef2 - 697: ff 35 8c 5c 00 00 pushl 0x5c8c - 69d: e8 c0 32 00 00 call 3962 + 672: 83 ec 04 sub $0x4,%esp + 675: 68 8b 00 00 00 push $0x8b + 67a: 68 1a 3e 00 00 push $0x3e1a + 67f: ff 35 10 5c 00 00 push 0x5c10 + 685: e8 21 32 00 00 call 38ab exit(); - 6a2: e8 77 31 00 00 call 381e + 68a: e8 d4 30 00 00 call 3763 printf(stdout, "read failed %d\n", i); - 6a7: 83 ec 04 sub $0x4,%esp - 6aa: 50 push %eax - 6ab: 68 0f 3f 00 00 push $0x3f0f - 6b0: ff 35 8c 5c 00 00 pushl 0x5c8c - 6b6: e8 a7 32 00 00 call 3962 + 68f: 83 ec 04 sub $0x4,%esp + 692: 50 push %eax + 693: 68 37 3e 00 00 push $0x3e37 + 698: ff 35 10 5c 00 00 push 0x5c10 + 69e: e8 08 32 00 00 call 38ab exit(); - 6bb: e8 5e 31 00 00 call 381e + 6a3: e8 bb 30 00 00 call 3763 printf(stdout, "read content of block %d is %d\n", - 6c0: 50 push %eax - 6c1: 53 push %ebx - 6c2: 68 0c 4d 00 00 push $0x4d0c - 6c7: ff 35 8c 5c 00 00 pushl 0x5c8c - 6cd: e8 90 32 00 00 call 3962 + 6a8: 50 push %eax + 6a9: 53 push %ebx + 6aa: 68 34 4c 00 00 push $0x4c34 + 6af: ff 35 10 5c 00 00 push 0x5c10 + 6b5: e8 f1 31 00 00 call 38ab exit(); - 6d2: e8 47 31 00 00 call 381e + 6ba: e8 a4 30 00 00 call 3763 printf(stdout, "unlink big failed\n"); - 6d7: 83 ec 08 sub $0x8,%esp - 6da: 68 1f 3f 00 00 push $0x3f1f - 6df: ff 35 8c 5c 00 00 pushl 0x5c8c - 6e5: e8 78 32 00 00 call 3962 + 6bf: 83 ec 08 sub $0x8,%esp + 6c2: 68 47 3e 00 00 push $0x3e47 + 6c7: ff 35 10 5c 00 00 push 0x5c10 + 6cd: e8 d9 31 00 00 call 38ab exit(); - 6ea: e8 2f 31 00 00 call 381e + 6d2: e8 8c 30 00 00 call 3763 -000006ef : +000006d7 : void createtest(void) { - 6ef: f3 0f 1e fb endbr32 - 6f3: 55 push %ebp - 6f4: 89 e5 mov %esp,%ebp - 6f6: 53 push %ebx - 6f7: 83 ec 0c sub $0xc,%esp + 6d7: 55 push %ebp + 6d8: 89 e5 mov %esp,%ebp + 6da: 53 push %ebx + 6db: 83 ec 0c sub $0xc,%esp int i, fd; printf(stdout, "many creates, followed by unlink test\n"); - 6fa: 68 2c 4d 00 00 push $0x4d2c - 6ff: ff 35 8c 5c 00 00 pushl 0x5c8c - 705: e8 58 32 00 00 call 3962 + 6de: 68 54 4c 00 00 push $0x4c54 + 6e3: ff 35 10 5c 00 00 push 0x5c10 + 6e9: e8 bd 31 00 00 call 38ab name[0] = 'a'; - 70a: c6 05 80 a4 00 00 61 movb $0x61,0xa480 + 6ee: c6 05 50 83 00 00 61 movb $0x61,0x8350 name[2] = '\0'; - 711: c6 05 82 a4 00 00 00 movb $0x0,0xa482 - 718: 83 c4 10 add $0x10,%esp - 71b: bb 30 00 00 00 mov $0x30,%ebx + 6f5: c6 05 52 83 00 00 00 movb $0x0,0x8352 + 6fc: 83 c4 10 add $0x10,%esp + 6ff: bb 30 00 00 00 mov $0x30,%ebx for(i = 0; i < 52; i++){ name[1] = '0' + i; - 720: 88 1d 81 a4 00 00 mov %bl,0xa481 + 704: 88 1d 51 83 00 00 mov %bl,0x8351 fd = open(name, O_CREATE|O_RDWR); - 726: 83 ec 08 sub $0x8,%esp - 729: 68 02 02 00 00 push $0x202 - 72e: 68 80 a4 00 00 push $0xa480 - 733: e8 26 31 00 00 call 385e + 70a: 83 ec 08 sub $0x8,%esp + 70d: 68 02 02 00 00 push $0x202 + 712: 68 50 83 00 00 push $0x8350 + 717: e8 87 30 00 00 call 37a3 close(fd); - 738: 89 04 24 mov %eax,(%esp) - 73b: e8 06 31 00 00 call 3846 + 71c: 89 04 24 mov %eax,(%esp) + 71f: e8 67 30 00 00 call 378b for(i = 0; i < 52; i++){ - 740: 83 c3 01 add $0x1,%ebx - 743: 83 c4 10 add $0x10,%esp - 746: 80 fb 64 cmp $0x64,%bl - 749: 75 d5 jne 720 + 724: 83 c3 01 add $0x1,%ebx + 727: 83 c4 10 add $0x10,%esp + 72a: 80 fb 64 cmp $0x64,%bl + 72d: 75 d5 jne 704 } name[0] = 'a'; - 74b: c6 05 80 a4 00 00 61 movb $0x61,0xa480 + 72f: c6 05 50 83 00 00 61 movb $0x61,0x8350 name[2] = '\0'; - 752: c6 05 82 a4 00 00 00 movb $0x0,0xa482 - 759: bb 30 00 00 00 mov $0x30,%ebx + 736: c6 05 52 83 00 00 00 movb $0x0,0x8352 + 73d: bb 30 00 00 00 mov $0x30,%ebx for(i = 0; i < 52; i++){ name[1] = '0' + i; - 75e: 88 1d 81 a4 00 00 mov %bl,0xa481 + 742: 88 1d 51 83 00 00 mov %bl,0x8351 unlink(name); - 764: 83 ec 0c sub $0xc,%esp - 767: 68 80 a4 00 00 push $0xa480 - 76c: e8 fd 30 00 00 call 386e + 748: 83 ec 0c sub $0xc,%esp + 74b: 68 50 83 00 00 push $0x8350 + 750: e8 5e 30 00 00 call 37b3 for(i = 0; i < 52; i++){ - 771: 83 c3 01 add $0x1,%ebx - 774: 83 c4 10 add $0x10,%esp - 777: 80 fb 64 cmp $0x64,%bl - 77a: 75 e2 jne 75e + 755: 83 c3 01 add $0x1,%ebx + 758: 83 c4 10 add $0x10,%esp + 75b: 80 fb 64 cmp $0x64,%bl + 75e: 75 e2 jne 742 } printf(stdout, "many creates, followed by unlink; ok\n"); - 77c: 83 ec 08 sub $0x8,%esp - 77f: 68 54 4d 00 00 push $0x4d54 - 784: ff 35 8c 5c 00 00 pushl 0x5c8c - 78a: e8 d3 31 00 00 call 3962 + 760: 83 ec 08 sub $0x8,%esp + 763: 68 7c 4c 00 00 push $0x4c7c + 768: ff 35 10 5c 00 00 push 0x5c10 + 76e: e8 38 31 00 00 call 38ab } - 78f: 83 c4 10 add $0x10,%esp - 792: 8b 5d fc mov -0x4(%ebp),%ebx - 795: c9 leave - 796: c3 ret + 773: 83 c4 10 add $0x10,%esp + 776: 8b 5d fc mov -0x4(%ebp),%ebx + 779: c9 leave + 77a: c3 ret -00000797 : +0000077b : void dirtest(void) { - 797: f3 0f 1e fb endbr32 - 79b: 55 push %ebp - 79c: 89 e5 mov %esp,%ebp - 79e: 83 ec 10 sub $0x10,%esp + 77b: 55 push %ebp + 77c: 89 e5 mov %esp,%ebp + 77e: 83 ec 10 sub $0x10,%esp printf(stdout, "mkdir test\n"); - 7a1: 68 40 3f 00 00 push $0x3f40 - 7a6: ff 35 8c 5c 00 00 pushl 0x5c8c - 7ac: e8 b1 31 00 00 call 3962 + 781: 68 68 3e 00 00 push $0x3e68 + 786: ff 35 10 5c 00 00 push 0x5c10 + 78c: e8 1a 31 00 00 call 38ab if(mkdir("dir0") < 0){ - 7b1: c7 04 24 4c 3f 00 00 movl $0x3f4c,(%esp) - 7b8: e8 c9 30 00 00 call 3886 - 7bd: 83 c4 10 add $0x10,%esp - 7c0: 85 c0 test %eax,%eax - 7c2: 78 54 js 818 + 791: c7 04 24 74 3e 00 00 movl $0x3e74,(%esp) + 798: e8 2e 30 00 00 call 37cb + 79d: 83 c4 10 add $0x10,%esp + 7a0: 85 c0 test %eax,%eax + 7a2: 78 54 js 7f8 printf(stdout, "mkdir failed\n"); exit(); } if(chdir("dir0") < 0){ - 7c4: 83 ec 0c sub $0xc,%esp - 7c7: 68 4c 3f 00 00 push $0x3f4c - 7cc: e8 bd 30 00 00 call 388e - 7d1: 83 c4 10 add $0x10,%esp - 7d4: 85 c0 test %eax,%eax - 7d6: 78 58 js 830 + 7a4: 83 ec 0c sub $0xc,%esp + 7a7: 68 74 3e 00 00 push $0x3e74 + 7ac: e8 22 30 00 00 call 37d3 + 7b1: 83 c4 10 add $0x10,%esp + 7b4: 85 c0 test %eax,%eax + 7b6: 78 58 js 810 printf(stdout, "chdir dir0 failed\n"); exit(); } if(chdir("..") < 0){ - 7d8: 83 ec 0c sub $0xc,%esp - 7db: 68 f1 44 00 00 push $0x44f1 - 7e0: e8 a9 30 00 00 call 388e - 7e5: 83 c4 10 add $0x10,%esp - 7e8: 85 c0 test %eax,%eax - 7ea: 78 5c js 848 + 7b8: 83 ec 0c sub $0xc,%esp + 7bb: 68 19 44 00 00 push $0x4419 + 7c0: e8 0e 30 00 00 call 37d3 + 7c5: 83 c4 10 add $0x10,%esp + 7c8: 85 c0 test %eax,%eax + 7ca: 78 5c js 828 printf(stdout, "chdir .. failed\n"); exit(); } if(unlink("dir0") < 0){ - 7ec: 83 ec 0c sub $0xc,%esp - 7ef: 68 4c 3f 00 00 push $0x3f4c - 7f4: e8 75 30 00 00 call 386e - 7f9: 83 c4 10 add $0x10,%esp - 7fc: 85 c0 test %eax,%eax - 7fe: 78 60 js 860 + 7cc: 83 ec 0c sub $0xc,%esp + 7cf: 68 74 3e 00 00 push $0x3e74 + 7d4: e8 da 2f 00 00 call 37b3 + 7d9: 83 c4 10 add $0x10,%esp + 7dc: 85 c0 test %eax,%eax + 7de: 78 60 js 840 printf(stdout, "unlink dir0 failed\n"); exit(); } printf(stdout, "mkdir test ok\n"); - 800: 83 ec 08 sub $0x8,%esp - 803: 68 89 3f 00 00 push $0x3f89 - 808: ff 35 8c 5c 00 00 pushl 0x5c8c - 80e: e8 4f 31 00 00 call 3962 + 7e0: 83 ec 08 sub $0x8,%esp + 7e3: 68 b1 3e 00 00 push $0x3eb1 + 7e8: ff 35 10 5c 00 00 push 0x5c10 + 7ee: e8 b8 30 00 00 call 38ab } - 813: 83 c4 10 add $0x10,%esp - 816: c9 leave - 817: c3 ret + 7f3: 83 c4 10 add $0x10,%esp + 7f6: c9 leave + 7f7: c3 ret printf(stdout, "mkdir failed\n"); - 818: 83 ec 08 sub $0x8,%esp - 81b: 68 7c 3c 00 00 push $0x3c7c - 820: ff 35 8c 5c 00 00 pushl 0x5c8c - 826: e8 37 31 00 00 call 3962 + 7f8: 83 ec 08 sub $0x8,%esp + 7fb: 68 a4 3b 00 00 push $0x3ba4 + 800: ff 35 10 5c 00 00 push 0x5c10 + 806: e8 a0 30 00 00 call 38ab exit(); - 82b: e8 ee 2f 00 00 call 381e + 80b: e8 53 2f 00 00 call 3763 printf(stdout, "chdir dir0 failed\n"); - 830: 83 ec 08 sub $0x8,%esp - 833: 68 51 3f 00 00 push $0x3f51 - 838: ff 35 8c 5c 00 00 pushl 0x5c8c - 83e: e8 1f 31 00 00 call 3962 + 810: 83 ec 08 sub $0x8,%esp + 813: 68 79 3e 00 00 push $0x3e79 + 818: ff 35 10 5c 00 00 push 0x5c10 + 81e: e8 88 30 00 00 call 38ab exit(); - 843: e8 d6 2f 00 00 call 381e + 823: e8 3b 2f 00 00 call 3763 printf(stdout, "chdir .. failed\n"); - 848: 83 ec 08 sub $0x8,%esp - 84b: 68 64 3f 00 00 push $0x3f64 - 850: ff 35 8c 5c 00 00 pushl 0x5c8c - 856: e8 07 31 00 00 call 3962 + 828: 83 ec 08 sub $0x8,%esp + 82b: 68 8c 3e 00 00 push $0x3e8c + 830: ff 35 10 5c 00 00 push 0x5c10 + 836: e8 70 30 00 00 call 38ab exit(); - 85b: e8 be 2f 00 00 call 381e + 83b: e8 23 2f 00 00 call 3763 printf(stdout, "unlink dir0 failed\n"); - 860: 83 ec 08 sub $0x8,%esp - 863: 68 75 3f 00 00 push $0x3f75 - 868: ff 35 8c 5c 00 00 pushl 0x5c8c - 86e: e8 ef 30 00 00 call 3962 + 840: 83 ec 08 sub $0x8,%esp + 843: 68 9d 3e 00 00 push $0x3e9d + 848: ff 35 10 5c 00 00 push 0x5c10 + 84e: e8 58 30 00 00 call 38ab exit(); - 873: e8 a6 2f 00 00 call 381e + 853: e8 0b 2f 00 00 call 3763 -00000878 : +00000858 : void exectest(void) { - 878: f3 0f 1e fb endbr32 - 87c: 55 push %ebp - 87d: 89 e5 mov %esp,%ebp - 87f: 83 ec 10 sub $0x10,%esp + 858: 55 push %ebp + 859: 89 e5 mov %esp,%ebp + 85b: 83 ec 10 sub $0x10,%esp printf(stdout, "exec test\n"); - 882: 68 98 3f 00 00 push $0x3f98 - 887: ff 35 8c 5c 00 00 pushl 0x5c8c - 88d: e8 d0 30 00 00 call 3962 + 85e: 68 c0 3e 00 00 push $0x3ec0 + 863: ff 35 10 5c 00 00 push 0x5c10 + 869: e8 3d 30 00 00 call 38ab if(exec("echo", echoargv) < 0){ - 892: 83 c4 08 add $0x8,%esp - 895: 68 90 5c 00 00 push $0x5c90 - 89a: 68 61 3d 00 00 push $0x3d61 - 89f: e8 b2 2f 00 00 call 3856 - 8a4: 83 c4 10 add $0x10,%esp - 8a7: 85 c0 test %eax,%eax - 8a9: 78 02 js 8ad + 86e: 83 c4 08 add $0x8,%esp + 871: 68 14 5c 00 00 push $0x5c14 + 876: 68 89 3c 00 00 push $0x3c89 + 87b: e8 1b 2f 00 00 call 379b + 880: 83 c4 10 add $0x10,%esp + 883: 85 c0 test %eax,%eax + 885: 78 02 js 889 printf(stdout, "exec echo failed\n"); exit(); } } - 8ab: c9 leave - 8ac: c3 ret + 887: c9 leave + 888: c3 ret printf(stdout, "exec echo failed\n"); - 8ad: 83 ec 08 sub $0x8,%esp - 8b0: 68 a3 3f 00 00 push $0x3fa3 - 8b5: ff 35 8c 5c 00 00 pushl 0x5c8c - 8bb: e8 a2 30 00 00 call 3962 + 889: 83 ec 08 sub $0x8,%esp + 88c: 68 cb 3e 00 00 push $0x3ecb + 891: ff 35 10 5c 00 00 push 0x5c10 + 897: e8 0f 30 00 00 call 38ab exit(); - 8c0: e8 59 2f 00 00 call 381e + 89c: e8 c2 2e 00 00 call 3763 -000008c5 : +000008a1 : // simple fork and pipe read/write void pipe1(void) { - 8c5: f3 0f 1e fb endbr32 - 8c9: 55 push %ebp - 8ca: 89 e5 mov %esp,%ebp - 8cc: 57 push %edi - 8cd: 56 push %esi - 8ce: 53 push %ebx - 8cf: 83 ec 28 sub $0x28,%esp + 8a1: 55 push %ebp + 8a2: 89 e5 mov %esp,%ebp + 8a4: 57 push %edi + 8a5: 56 push %esi + 8a6: 53 push %ebx + 8a7: 83 ec 28 sub $0x28,%esp int fds[2], pid; int seq, i, n, cc, total; if(pipe(fds) != 0){ - 8d2: 8d 45 e0 lea -0x20(%ebp),%eax - 8d5: 50 push %eax - 8d6: e8 53 2f 00 00 call 382e - 8db: 83 c4 10 add $0x10,%esp - 8de: 85 c0 test %eax,%eax - 8e0: 0f 85 8c 00 00 00 jne 972 - 8e6: 89 c3 mov %eax,%ebx + 8aa: 8d 45 e0 lea -0x20(%ebp),%eax + 8ad: 50 push %eax + 8ae: e8 c0 2e 00 00 call 3773 + 8b3: 83 c4 10 add $0x10,%esp + 8b6: 85 c0 test %eax,%eax + 8b8: 0f 85 8c 00 00 00 jne 94a + 8be: 89 c3 mov %eax,%ebx printf(1, "pipe() failed\n"); exit(); } pid = fork(); - 8e8: e8 29 2f 00 00 call 3816 - 8ed: 89 c6 mov %eax,%esi + 8c0: e8 96 2e 00 00 call 375b + 8c5: 89 c6 mov %eax,%esi seq = 0; if(pid == 0){ - 8ef: 85 c0 test %eax,%eax - 8f1: 0f 84 8f 00 00 00 je 986 + 8c7: 85 c0 test %eax,%eax + 8c9: 0f 84 8f 00 00 00 je 95e printf(1, "pipe1 oops 1\n"); exit(); } } exit(); } else if(pid > 0){ - 8f7: 0f 8e 4f 01 00 00 jle a4c + 8cf: 0f 8e 4f 01 00 00 jle a24 close(fds[1]); - 8fd: 83 ec 0c sub $0xc,%esp - 900: ff 75 e4 pushl -0x1c(%ebp) - 903: e8 3e 2f 00 00 call 3846 + 8d5: 83 ec 0c sub $0xc,%esp + 8d8: ff 75 e4 push -0x1c(%ebp) + 8db: e8 ab 2e 00 00 call 378b total = 0; cc = 1; while((n = read(fds[0], buf, cc)) > 0){ - 908: 83 c4 10 add $0x10,%esp + 8e0: 83 c4 10 add $0x10,%esp total = 0; - 90b: 89 df mov %ebx,%edi + 8e3: 89 df mov %ebx,%edi cc = 1; - 90d: be 01 00 00 00 mov $0x1,%esi + 8e5: be 01 00 00 00 mov $0x1,%esi while((n = read(fds[0], buf, cc)) > 0){ - 912: 83 ec 04 sub $0x4,%esp - 915: 56 push %esi - 916: 68 80 84 00 00 push $0x8480 - 91b: ff 75 e0 pushl -0x20(%ebp) - 91e: e8 13 2f 00 00 call 3836 - 923: 89 c2 mov %eax,%edx - 925: 83 c4 10 add $0x10,%esp - 928: 85 c0 test %eax,%eax - 92a: 0f 8e d8 00 00 00 jle a08 + 8ea: 83 ec 04 sub $0x4,%esp + 8ed: 56 push %esi + 8ee: 68 60 83 00 00 push $0x8360 + 8f3: ff 75 e0 push -0x20(%ebp) + 8f6: e8 80 2e 00 00 call 377b + 8fb: 89 c2 mov %eax,%edx + 8fd: 83 c4 10 add $0x10,%esp + 900: 85 c0 test %eax,%eax + 902: 0f 8e d8 00 00 00 jle 9e0 for(i = 0; i < n; i++){ if((buf[i] & 0xff) != (seq++ & 0xff)){ - 930: 89 d8 mov %ebx,%eax - 932: 32 05 80 84 00 00 xor 0x8480,%al - 938: 0f b6 c0 movzbl %al,%eax - 93b: 85 c0 test %eax,%eax - 93d: 75 19 jne 958 - 93f: 8d 4b 01 lea 0x1(%ebx),%ecx - 942: 8d 1c 01 lea (%ecx,%eax,1),%ebx + 908: 89 d8 mov %ebx,%eax + 90a: 32 05 60 83 00 00 xor 0x8360,%al + 910: 0f b6 c0 movzbl %al,%eax + 913: 85 c0 test %eax,%eax + 915: 75 19 jne 930 + 917: 8d 4b 01 lea 0x1(%ebx),%ecx + 91a: 8d 1c 01 lea (%ecx,%eax,1),%ebx for(i = 0; i < n; i++){ - 945: 83 c0 01 add $0x1,%eax - 948: 39 c2 cmp %eax,%edx - 94a: 0f 84 a1 00 00 00 je 9f1 + 91d: 83 c0 01 add $0x1,%eax + 920: 39 c2 cmp %eax,%edx + 922: 0f 84 a1 00 00 00 je 9c9 if((buf[i] & 0xff) != (seq++ & 0xff)){ - 950: 38 98 80 84 00 00 cmp %bl,0x8480(%eax) - 956: 74 ea je 942 + 928: 38 98 60 83 00 00 cmp %bl,0x8360(%eax) + 92e: 74 ea je 91a printf(1, "pipe1 oops 2\n"); - 958: 83 ec 08 sub $0x8,%esp - 95b: 68 d2 3f 00 00 push $0x3fd2 - 960: 6a 01 push $0x1 - 962: e8 fb 2f 00 00 call 3962 - return; - 967: 83 c4 10 add $0x10,%esp + 930: 83 ec 08 sub $0x8,%esp + 933: 68 fa 3e 00 00 push $0x3efa + 938: 6a 01 push $0x1 + 93a: e8 6c 2f 00 00 call 38ab + 93f: 83 c4 10 add $0x10,%esp } else { printf(1, "fork() failed\n"); exit(); } printf(1, "pipe1 ok\n"); } - 96a: 8d 65 f4 lea -0xc(%ebp),%esp - 96d: 5b pop %ebx - 96e: 5e pop %esi - 96f: 5f pop %edi - 970: 5d pop %ebp - 971: c3 ret + 942: 8d 65 f4 lea -0xc(%ebp),%esp + 945: 5b pop %ebx + 946: 5e pop %esi + 947: 5f pop %edi + 948: 5d pop %ebp + 949: c3 ret printf(1, "pipe() failed\n"); - 972: 83 ec 08 sub $0x8,%esp - 975: 68 b5 3f 00 00 push $0x3fb5 - 97a: 6a 01 push $0x1 - 97c: e8 e1 2f 00 00 call 3962 + 94a: 83 ec 08 sub $0x8,%esp + 94d: 68 dd 3e 00 00 push $0x3edd + 952: 6a 01 push $0x1 + 954: e8 52 2f 00 00 call 38ab exit(); - 981: e8 98 2e 00 00 call 381e + 959: e8 05 2e 00 00 call 3763 close(fds[0]); - 986: 83 ec 0c sub $0xc,%esp - 989: ff 75 e0 pushl -0x20(%ebp) - 98c: e8 b5 2e 00 00 call 3846 - 991: 83 c4 10 add $0x10,%esp + 95e: 83 ec 0c sub $0xc,%esp + 961: ff 75 e0 push -0x20(%ebp) + 964: e8 22 2e 00 00 call 378b + 969: 83 c4 10 add $0x10,%esp seq = 0; - 994: 89 f3 mov %esi,%ebx + 96c: 89 f3 mov %esi,%ebx for(i = 0; i < 1033; i++) - 996: 89 f0 mov %esi,%eax + 96e: 89 f0 mov %esi,%eax buf[i] = seq++; - 998: 8d 14 03 lea (%ebx,%eax,1),%edx - 99b: 88 90 80 84 00 00 mov %dl,0x8480(%eax) + 970: 8d 14 18 lea (%eax,%ebx,1),%edx + 973: 88 90 60 83 00 00 mov %dl,0x8360(%eax) for(i = 0; i < 1033; i++) - 9a1: 83 c0 01 add $0x1,%eax - 9a4: 3d 09 04 00 00 cmp $0x409,%eax - 9a9: 75 ed jne 998 - 9ab: 81 c3 09 04 00 00 add $0x409,%ebx + 979: 83 c0 01 add $0x1,%eax + 97c: 3d 09 04 00 00 cmp $0x409,%eax + 981: 75 ed jne 970 + buf[i] = seq++; + 983: 81 c3 09 04 00 00 add $0x409,%ebx if(write(fds[1], buf, 1033) != 1033){ - 9b1: 83 ec 04 sub $0x4,%esp - 9b4: 68 09 04 00 00 push $0x409 - 9b9: 68 80 84 00 00 push $0x8480 - 9be: ff 75 e4 pushl -0x1c(%ebp) - 9c1: e8 78 2e 00 00 call 383e - 9c6: 83 c4 10 add $0x10,%esp - 9c9: 3d 09 04 00 00 cmp $0x409,%eax - 9ce: 75 0d jne 9dd + 989: 83 ec 04 sub $0x4,%esp + 98c: 68 09 04 00 00 push $0x409 + 991: 68 60 83 00 00 push $0x8360 + 996: ff 75 e4 push -0x1c(%ebp) + 999: e8 e5 2d 00 00 call 3783 + 99e: 83 c4 10 add $0x10,%esp + 9a1: 3d 09 04 00 00 cmp $0x409,%eax + 9a6: 75 0d jne 9b5 for(n = 0; n < 5; n++){ - 9d0: 81 fb 2d 14 00 00 cmp $0x142d,%ebx - 9d6: 75 be jne 996 + 9a8: 81 fb 2d 14 00 00 cmp $0x142d,%ebx + 9ae: 75 be jne 96e exit(); - 9d8: e8 41 2e 00 00 call 381e + 9b0: e8 ae 2d 00 00 call 3763 printf(1, "pipe1 oops 1\n"); - 9dd: 83 ec 08 sub $0x8,%esp - 9e0: 68 c4 3f 00 00 push $0x3fc4 - 9e5: 6a 01 push $0x1 - 9e7: e8 76 2f 00 00 call 3962 + 9b5: 83 ec 08 sub $0x8,%esp + 9b8: 68 ec 3e 00 00 push $0x3eec + 9bd: 6a 01 push $0x1 + 9bf: e8 e7 2e 00 00 call 38ab exit(); - 9ec: e8 2d 2e 00 00 call 381e + 9c4: e8 9a 2d 00 00 call 3763 total += n; - 9f1: 01 c7 add %eax,%edi + 9c9: 01 c7 add %eax,%edi cc = cc * 2; - 9f3: 01 f6 add %esi,%esi + 9cb: 01 f6 add %esi,%esi cc = sizeof(buf); - 9f5: 81 fe 01 20 00 00 cmp $0x2001,%esi - 9fb: b8 00 20 00 00 mov $0x2000,%eax - a00: 0f 43 f0 cmovae %eax,%esi - a03: e9 0a ff ff ff jmp 912 + 9cd: 81 fe 01 20 00 00 cmp $0x2001,%esi + 9d3: b8 00 20 00 00 mov $0x2000,%eax + 9d8: 0f 43 f0 cmovae %eax,%esi + 9db: e9 0a ff ff ff jmp 8ea if(total != 5 * 1033){ - a08: 81 ff 2d 14 00 00 cmp $0x142d,%edi - a0e: 75 27 jne a37 + 9e0: 81 ff 2d 14 00 00 cmp $0x142d,%edi + 9e6: 75 27 jne a0f close(fds[0]); - a10: 83 ec 0c sub $0xc,%esp - a13: ff 75 e0 pushl -0x20(%ebp) - a16: e8 2b 2e 00 00 call 3846 + 9e8: 83 ec 0c sub $0xc,%esp + 9eb: ff 75 e0 push -0x20(%ebp) + 9ee: e8 98 2d 00 00 call 378b wait(); - a1b: e8 06 2e 00 00 call 3826 + 9f3: e8 73 2d 00 00 call 376b printf(1, "pipe1 ok\n"); - a20: 83 c4 08 add $0x8,%esp - a23: 68 f7 3f 00 00 push $0x3ff7 - a28: 6a 01 push $0x1 - a2a: e8 33 2f 00 00 call 3962 - a2f: 83 c4 10 add $0x10,%esp - a32: e9 33 ff ff ff jmp 96a + 9f8: 83 c4 08 add $0x8,%esp + 9fb: 68 1f 3f 00 00 push $0x3f1f + a00: 6a 01 push $0x1 + a02: e8 a4 2e 00 00 call 38ab + a07: 83 c4 10 add $0x10,%esp + a0a: e9 33 ff ff ff jmp 942 printf(1, "pipe1 oops 3 total %d\n", total); - a37: 83 ec 04 sub $0x4,%esp - a3a: 57 push %edi - a3b: 68 e0 3f 00 00 push $0x3fe0 - a40: 6a 01 push $0x1 - a42: e8 1b 2f 00 00 call 3962 + a0f: 83 ec 04 sub $0x4,%esp + a12: 57 push %edi + a13: 68 08 3f 00 00 push $0x3f08 + a18: 6a 01 push $0x1 + a1a: e8 8c 2e 00 00 call 38ab exit(); - a47: e8 d2 2d 00 00 call 381e + a1f: e8 3f 2d 00 00 call 3763 printf(1, "fork() failed\n"); - a4c: 83 ec 08 sub $0x8,%esp - a4f: 68 01 40 00 00 push $0x4001 - a54: 6a 01 push $0x1 - a56: e8 07 2f 00 00 call 3962 + a24: 83 ec 08 sub $0x8,%esp + a27: 68 29 3f 00 00 push $0x3f29 + a2c: 6a 01 push $0x1 + a2e: e8 78 2e 00 00 call 38ab exit(); - a5b: e8 be 2d 00 00 call 381e + a33: e8 2b 2d 00 00 call 3763 -00000a60 : +00000a38 : // meant to be run w/ at most two CPUs void preempt(void) { - a60: f3 0f 1e fb endbr32 - a64: 55 push %ebp - a65: 89 e5 mov %esp,%ebp - a67: 57 push %edi - a68: 56 push %esi - a69: 53 push %ebx - a6a: 83 ec 24 sub $0x24,%esp + a38: 55 push %ebp + a39: 89 e5 mov %esp,%ebp + a3b: 57 push %edi + a3c: 56 push %esi + a3d: 53 push %ebx + a3e: 83 ec 24 sub $0x24,%esp int pid1, pid2, pid3; int pfds[2]; printf(1, "preempt: "); - a6d: 68 10 40 00 00 push $0x4010 - a72: 6a 01 push $0x1 - a74: e8 e9 2e 00 00 call 3962 + a41: 68 38 3f 00 00 push $0x3f38 + a46: 6a 01 push $0x1 + a48: e8 5e 2e 00 00 call 38ab pid1 = fork(); - a79: e8 98 2d 00 00 call 3816 + a4d: e8 09 2d 00 00 call 375b if(pid1 == 0) - a7e: 83 c4 10 add $0x10,%esp - a81: 85 c0 test %eax,%eax - a83: 75 02 jne a87 + a52: 83 c4 10 add $0x10,%esp + a55: 85 c0 test %eax,%eax + a57: 75 02 jne a5b for(;;) - a85: eb fe jmp a85 - a87: 89 c7 mov %eax,%edi + a59: eb fe jmp a59 + a5b: 89 c3 mov %eax,%ebx ; pid2 = fork(); - a89: e8 88 2d 00 00 call 3816 - a8e: 89 c6 mov %eax,%esi + a5d: e8 f9 2c 00 00 call 375b + a62: 89 c6 mov %eax,%esi if(pid2 == 0) - a90: 85 c0 test %eax,%eax - a92: 75 02 jne a96 + a64: 85 c0 test %eax,%eax + a66: 75 02 jne a6a for(;;) - a94: eb fe jmp a94 + a68: eb fe jmp a68 ; pipe(pfds); - a96: 83 ec 0c sub $0xc,%esp - a99: 8d 45 e0 lea -0x20(%ebp),%eax - a9c: 50 push %eax - a9d: e8 8c 2d 00 00 call 382e + a6a: 83 ec 0c sub $0xc,%esp + a6d: 8d 45 e0 lea -0x20(%ebp),%eax + a70: 50 push %eax + a71: e8 fd 2c 00 00 call 3773 pid3 = fork(); - aa2: e8 6f 2d 00 00 call 3816 - aa7: 89 c3 mov %eax,%ebx + a76: e8 e0 2c 00 00 call 375b + a7b: 89 c7 mov %eax,%edi if(pid3 == 0){ - aa9: 83 c4 10 add $0x10,%esp - aac: 85 c0 test %eax,%eax - aae: 75 49 jne af9 + a7d: 83 c4 10 add $0x10,%esp + a80: 85 c0 test %eax,%eax + a82: 75 49 jne acd close(pfds[0]); - ab0: 83 ec 0c sub $0xc,%esp - ab3: ff 75 e0 pushl -0x20(%ebp) - ab6: e8 8b 2d 00 00 call 3846 + a84: 83 ec 0c sub $0xc,%esp + a87: ff 75 e0 push -0x20(%ebp) + a8a: e8 fc 2c 00 00 call 378b if(write(pfds[1], "x", 1) != 1) - abb: 83 c4 0c add $0xc,%esp - abe: 6a 01 push $0x1 - ac0: 68 d5 45 00 00 push $0x45d5 - ac5: ff 75 e4 pushl -0x1c(%ebp) - ac8: e8 71 2d 00 00 call 383e - acd: 83 c4 10 add $0x10,%esp - ad0: 83 f8 01 cmp $0x1,%eax - ad3: 75 10 jne ae5 + a8f: 83 c4 0c add $0xc,%esp + a92: 6a 01 push $0x1 + a94: 68 fd 44 00 00 push $0x44fd + a99: ff 75 e4 push -0x1c(%ebp) + a9c: e8 e2 2c 00 00 call 3783 + aa1: 83 c4 10 add $0x10,%esp + aa4: 83 f8 01 cmp $0x1,%eax + aa7: 75 10 jne ab9 printf(1, "preempt write error"); close(pfds[1]); - ad5: 83 ec 0c sub $0xc,%esp - ad8: ff 75 e4 pushl -0x1c(%ebp) - adb: e8 66 2d 00 00 call 3846 - ae0: 83 c4 10 add $0x10,%esp + aa9: 83 ec 0c sub $0xc,%esp + aac: ff 75 e4 push -0x1c(%ebp) + aaf: e8 d7 2c 00 00 call 378b + ab4: 83 c4 10 add $0x10,%esp for(;;) - ae3: eb fe jmp ae3 + ab7: eb fe jmp ab7 printf(1, "preempt write error"); - ae5: 83 ec 08 sub $0x8,%esp - ae8: 68 1a 40 00 00 push $0x401a - aed: 6a 01 push $0x1 - aef: e8 6e 2e 00 00 call 3962 - af4: 83 c4 10 add $0x10,%esp - af7: eb dc jmp ad5 + ab9: 83 ec 08 sub $0x8,%esp + abc: 68 42 3f 00 00 push $0x3f42 + ac1: 6a 01 push $0x1 + ac3: e8 e3 2d 00 00 call 38ab + ac8: 83 c4 10 add $0x10,%esp + acb: eb dc jmp aa9 ; } close(pfds[1]); - af9: 83 ec 0c sub $0xc,%esp - afc: ff 75 e4 pushl -0x1c(%ebp) - aff: e8 42 2d 00 00 call 3846 + acd: 83 ec 0c sub $0xc,%esp + ad0: ff 75 e4 push -0x1c(%ebp) + ad3: e8 b3 2c 00 00 call 378b if(read(pfds[0], buf, sizeof(buf)) != 1){ - b04: 83 c4 0c add $0xc,%esp - b07: 68 00 20 00 00 push $0x2000 - b0c: 68 80 84 00 00 push $0x8480 - b11: ff 75 e0 pushl -0x20(%ebp) - b14: e8 1d 2d 00 00 call 3836 - b19: 83 c4 10 add $0x10,%esp - b1c: 83 f8 01 cmp $0x1,%eax - b1f: 74 1a je b3b + ad8: 83 c4 0c add $0xc,%esp + adb: 68 00 20 00 00 push $0x2000 + ae0: 68 60 83 00 00 push $0x8360 + ae5: ff 75 e0 push -0x20(%ebp) + ae8: e8 8e 2c 00 00 call 377b + aed: 83 c4 10 add $0x10,%esp + af0: 83 f8 01 cmp $0x1,%eax + af3: 74 1a je b0f printf(1, "preempt read error"); - b21: 83 ec 08 sub $0x8,%esp - b24: 68 2e 40 00 00 push $0x402e - b29: 6a 01 push $0x1 - b2b: e8 32 2e 00 00 call 3962 - return; - b30: 83 c4 10 add $0x10,%esp + af5: 83 ec 08 sub $0x8,%esp + af8: 68 56 3f 00 00 push $0x3f56 + afd: 6a 01 push $0x1 + aff: e8 a7 2d 00 00 call 38ab + b04: 83 c4 10 add $0x10,%esp printf(1, "wait... "); wait(); wait(); wait(); printf(1, "preempt ok\n"); } - b33: 8d 65 f4 lea -0xc(%ebp),%esp - b36: 5b pop %ebx - b37: 5e pop %esi - b38: 5f pop %edi - b39: 5d pop %ebp - b3a: c3 ret + b07: 8d 65 f4 lea -0xc(%ebp),%esp + b0a: 5b pop %ebx + b0b: 5e pop %esi + b0c: 5f pop %edi + b0d: 5d pop %ebp + b0e: c3 ret close(pfds[0]); - b3b: 83 ec 0c sub $0xc,%esp - b3e: ff 75 e0 pushl -0x20(%ebp) - b41: e8 00 2d 00 00 call 3846 + b0f: 83 ec 0c sub $0xc,%esp + b12: ff 75 e0 push -0x20(%ebp) + b15: e8 71 2c 00 00 call 378b printf(1, "kill... "); - b46: 83 c4 08 add $0x8,%esp - b49: 68 41 40 00 00 push $0x4041 - b4e: 6a 01 push $0x1 - b50: e8 0d 2e 00 00 call 3962 + b1a: 83 c4 08 add $0x8,%esp + b1d: 68 69 3f 00 00 push $0x3f69 + b22: 6a 01 push $0x1 + b24: e8 82 2d 00 00 call 38ab kill(pid1); - b55: 89 3c 24 mov %edi,(%esp) - b58: e8 f1 2c 00 00 call 384e + b29: 89 1c 24 mov %ebx,(%esp) + b2c: e8 62 2c 00 00 call 3793 kill(pid2); - b5d: 89 34 24 mov %esi,(%esp) - b60: e8 e9 2c 00 00 call 384e + b31: 89 34 24 mov %esi,(%esp) + b34: e8 5a 2c 00 00 call 3793 kill(pid3); - b65: 89 1c 24 mov %ebx,(%esp) - b68: e8 e1 2c 00 00 call 384e + b39: 89 3c 24 mov %edi,(%esp) + b3c: e8 52 2c 00 00 call 3793 printf(1, "wait... "); - b6d: 83 c4 08 add $0x8,%esp - b70: 68 4a 40 00 00 push $0x404a - b75: 6a 01 push $0x1 - b77: e8 e6 2d 00 00 call 3962 + b41: 83 c4 08 add $0x8,%esp + b44: 68 72 3f 00 00 push $0x3f72 + b49: 6a 01 push $0x1 + b4b: e8 5b 2d 00 00 call 38ab wait(); - b7c: e8 a5 2c 00 00 call 3826 + b50: e8 16 2c 00 00 call 376b wait(); - b81: e8 a0 2c 00 00 call 3826 + b55: e8 11 2c 00 00 call 376b wait(); - b86: e8 9b 2c 00 00 call 3826 + b5a: e8 0c 2c 00 00 call 376b printf(1, "preempt ok\n"); - b8b: 83 c4 08 add $0x8,%esp - b8e: 68 53 40 00 00 push $0x4053 - b93: 6a 01 push $0x1 - b95: e8 c8 2d 00 00 call 3962 - b9a: 83 c4 10 add $0x10,%esp - b9d: eb 94 jmp b33 + b5f: 83 c4 08 add $0x8,%esp + b62: 68 7b 3f 00 00 push $0x3f7b + b67: 6a 01 push $0x1 + b69: e8 3d 2d 00 00 call 38ab + b6e: 83 c4 10 add $0x10,%esp + b71: eb 94 jmp b07 -00000b9f : +00000b73 : // try to find any races between exit and wait void exitwait(void) { - b9f: f3 0f 1e fb endbr32 - ba3: 55 push %ebp - ba4: 89 e5 mov %esp,%ebp - ba6: 56 push %esi - ba7: 53 push %ebx - ba8: be 64 00 00 00 mov $0x64,%esi + b73: 55 push %ebp + b74: 89 e5 mov %esp,%ebp + b76: 56 push %esi + b77: 53 push %ebx + b78: be 64 00 00 00 mov $0x64,%esi int i, pid; for(i = 0; i < 100; i++){ pid = fork(); - bad: e8 64 2c 00 00 call 3816 - bb2: 89 c3 mov %eax,%ebx + b7d: e8 d9 2b 00 00 call 375b + b82: 89 c3 mov %eax,%ebx if(pid < 0){ - bb4: 85 c0 test %eax,%eax - bb6: 78 24 js bdc + b84: 85 c0 test %eax,%eax + b86: 78 24 js bac printf(1, "fork failed\n"); return; } if(pid){ - bb8: 74 4f je c09 + b88: 74 4f je bd9 if(wait() != pid){ - bba: e8 67 2c 00 00 call 3826 - bbf: 39 d8 cmp %ebx,%eax - bc1: 75 32 jne bf5 + b8a: e8 dc 2b 00 00 call 376b + b8f: 39 d8 cmp %ebx,%eax + b91: 75 32 jne bc5 for(i = 0; i < 100; i++){ - bc3: 83 ee 01 sub $0x1,%esi - bc6: 75 e5 jne bad + b93: 83 ee 01 sub $0x1,%esi + b96: 75 e5 jne b7d } } else { exit(); } } printf(1, "exitwait ok\n"); - bc8: 83 ec 08 sub $0x8,%esp - bcb: 68 6f 40 00 00 push $0x406f - bd0: 6a 01 push $0x1 - bd2: e8 8b 2d 00 00 call 3962 - bd7: 83 c4 10 add $0x10,%esp - bda: eb 12 jmp bee + b98: 83 ec 08 sub $0x8,%esp + b9b: 68 97 3f 00 00 push $0x3f97 + ba0: 6a 01 push $0x1 + ba2: e8 04 2d 00 00 call 38ab + ba7: 83 c4 10 add $0x10,%esp + baa: eb 12 jmp bbe printf(1, "fork failed\n"); - bdc: 83 ec 08 sub $0x8,%esp - bdf: 68 bd 4b 00 00 push $0x4bbd - be4: 6a 01 push $0x1 - be6: e8 77 2d 00 00 call 3962 + bac: 83 ec 08 sub $0x8,%esp + baf: 68 e5 4a 00 00 push $0x4ae5 + bb4: 6a 01 push $0x1 + bb6: e8 f0 2c 00 00 call 38ab return; - beb: 83 c4 10 add $0x10,%esp + bbb: 83 c4 10 add $0x10,%esp } - bee: 8d 65 f8 lea -0x8(%ebp),%esp - bf1: 5b pop %ebx - bf2: 5e pop %esi - bf3: 5d pop %ebp - bf4: c3 ret + bbe: 8d 65 f8 lea -0x8(%ebp),%esp + bc1: 5b pop %ebx + bc2: 5e pop %esi + bc3: 5d pop %ebp + bc4: c3 ret printf(1, "wait wrong pid\n"); - bf5: 83 ec 08 sub $0x8,%esp - bf8: 68 5f 40 00 00 push $0x405f - bfd: 6a 01 push $0x1 - bff: e8 5e 2d 00 00 call 3962 + bc5: 83 ec 08 sub $0x8,%esp + bc8: 68 87 3f 00 00 push $0x3f87 + bcd: 6a 01 push $0x1 + bcf: e8 d7 2c 00 00 call 38ab return; - c04: 83 c4 10 add $0x10,%esp - c07: eb e5 jmp bee + bd4: 83 c4 10 add $0x10,%esp + bd7: eb e5 jmp bbe exit(); - c09: e8 10 2c 00 00 call 381e + bd9: e8 85 2b 00 00 call 3763 -00000c0e : +00000bde : void mem(void) { - c0e: f3 0f 1e fb endbr32 - c12: 55 push %ebp - c13: 89 e5 mov %esp,%ebp - c15: 56 push %esi - c16: 53 push %ebx + bde: 55 push %ebp + bdf: 89 e5 mov %esp,%ebp + be1: 56 push %esi + be2: 53 push %ebx void *m1, *m2; int pid, ppid; printf(1, "mem test\n"); - c17: 83 ec 08 sub $0x8,%esp - c1a: 68 7c 40 00 00 push $0x407c - c1f: 6a 01 push $0x1 - c21: e8 3c 2d 00 00 call 3962 + be3: 83 ec 08 sub $0x8,%esp + be6: 68 a4 3f 00 00 push $0x3fa4 + beb: 6a 01 push $0x1 + bed: e8 b9 2c 00 00 call 38ab ppid = getpid(); - c26: e8 73 2c 00 00 call 389e - c2b: 89 c6 mov %eax,%esi + bf2: e8 ec 2b 00 00 call 37e3 + bf7: 89 c6 mov %eax,%esi if((pid = fork()) == 0){ - c2d: e8 e4 2b 00 00 call 3816 - c32: 83 c4 10 add $0x10,%esp + bf9: e8 5d 2b 00 00 call 375b + bfe: 83 c4 10 add $0x10,%esp m1 = 0; - c35: bb 00 00 00 00 mov $0x0,%ebx + c01: bb 00 00 00 00 mov $0x0,%ebx if((pid = fork()) == 0){ - c3a: 85 c0 test %eax,%eax - c3c: 75 7f jne cbd - while((m2 = malloc(10001)) != 0){ - c3e: 83 ec 0c sub $0xc,%esp - c41: 68 11 27 00 00 push $0x2711 - c46: e8 57 2f 00 00 call 3ba2 - c4b: 83 c4 10 add $0x10,%esp - c4e: 85 c0 test %eax,%eax - c50: 74 06 je c58 + c06: 85 c0 test %eax,%eax + c08: 74 10 je c1a + } + free(m1); + printf(1, "mem ok\n"); + exit(); + } else { + wait(); + c0a: e8 5c 2b 00 00 call 376b + } +} + c0f: 8d 65 f8 lea -0x8(%ebp),%esp + c12: 5b pop %ebx + c13: 5e pop %esi + c14: 5d pop %ebp + c15: c3 ret *(char**)m2 = m1; - c52: 89 18 mov %ebx,(%eax) + c16: 89 18 mov %ebx,(%eax) m1 = m2; - c54: 89 c3 mov %eax,%ebx - c56: eb e6 jmp c3e - } + c18: 89 c3 mov %eax,%ebx + while((m2 = malloc(10001)) != 0){ + c1a: 83 ec 0c sub $0xc,%esp + c1d: 68 11 27 00 00 push $0x2711 + c22: e8 ab 2e 00 00 call 3ad2 + c27: 83 c4 10 add $0x10,%esp + c2a: 85 c0 test %eax,%eax + c2c: 75 e8 jne c16 while(m1){ - c58: 85 db test %ebx,%ebx - c5a: 74 14 je c70 + c2e: 85 db test %ebx,%ebx + c30: 74 14 je c46 m2 = *(char**)m1; - c5c: 89 d8 mov %ebx,%eax - c5e: 8b 1b mov (%ebx),%ebx + c32: 89 d8 mov %ebx,%eax + c34: 8b 1b mov (%ebx),%ebx free(m1); - c60: 83 ec 0c sub $0xc,%esp - c63: 50 push %eax - c64: e8 c7 2e 00 00 call 3b30 + c36: 83 ec 0c sub $0xc,%esp + c39: 50 push %eax + c3a: e8 2a 2e 00 00 call 3a69 while(m1){ - c69: 83 c4 10 add $0x10,%esp - c6c: 85 db test %ebx,%ebx - c6e: 75 ec jne c5c - m1 = m2; - } + c3f: 83 c4 10 add $0x10,%esp + c42: 85 db test %ebx,%ebx + c44: 75 ec jne c32 m1 = malloc(1024*20); - c70: 83 ec 0c sub $0xc,%esp - c73: 68 00 50 00 00 push $0x5000 - c78: e8 25 2f 00 00 call 3ba2 + c46: 83 ec 0c sub $0xc,%esp + c49: 68 00 50 00 00 push $0x5000 + c4e: e8 7f 2e 00 00 call 3ad2 if(m1 == 0){ - c7d: 83 c4 10 add $0x10,%esp - c80: 85 c0 test %eax,%eax - c82: 74 1d je ca1 - printf(1, "couldn't allocate mem?!!\n"); - kill(ppid); - exit(); - } + c53: 83 c4 10 add $0x10,%esp + c56: 85 c0 test %eax,%eax + c58: 74 1d je c77 free(m1); - c84: 83 ec 0c sub $0xc,%esp - c87: 50 push %eax - c88: e8 a3 2e 00 00 call 3b30 + c5a: 83 ec 0c sub $0xc,%esp + c5d: 50 push %eax + c5e: e8 06 2e 00 00 call 3a69 printf(1, "mem ok\n"); - c8d: 83 c4 08 add $0x8,%esp - c90: 68 a0 40 00 00 push $0x40a0 - c95: 6a 01 push $0x1 - c97: e8 c6 2c 00 00 call 3962 + c63: 83 c4 08 add $0x8,%esp + c66: 68 c8 3f 00 00 push $0x3fc8 + c6b: 6a 01 push $0x1 + c6d: e8 39 2c 00 00 call 38ab exit(); - c9c: e8 7d 2b 00 00 call 381e + c72: e8 ec 2a 00 00 call 3763 printf(1, "couldn't allocate mem?!!\n"); - ca1: 83 ec 08 sub $0x8,%esp - ca4: 68 86 40 00 00 push $0x4086 - ca9: 6a 01 push $0x1 - cab: e8 b2 2c 00 00 call 3962 + c77: 83 ec 08 sub $0x8,%esp + c7a: 68 ae 3f 00 00 push $0x3fae + c7f: 6a 01 push $0x1 + c81: e8 25 2c 00 00 call 38ab kill(ppid); - cb0: 89 34 24 mov %esi,(%esp) - cb3: e8 96 2b 00 00 call 384e + c86: 89 34 24 mov %esi,(%esp) + c89: e8 05 2b 00 00 call 3793 exit(); - cb8: e8 61 2b 00 00 call 381e - } else { - wait(); - cbd: e8 64 2b 00 00 call 3826 - } -} - cc2: 8d 65 f8 lea -0x8(%ebp),%esp - cc5: 5b pop %ebx - cc6: 5e pop %esi - cc7: 5d pop %ebp - cc8: c3 ret + c8e: e8 d0 2a 00 00 call 3763 -00000cc9 : +00000c93 : // two processes write to the same file descriptor // is the offset shared? does inode locking work? void sharedfd(void) { - cc9: f3 0f 1e fb endbr32 - ccd: 55 push %ebp - cce: 89 e5 mov %esp,%ebp - cd0: 57 push %edi - cd1: 56 push %esi - cd2: 53 push %ebx - cd3: 83 ec 34 sub $0x34,%esp + c93: 55 push %ebp + c94: 89 e5 mov %esp,%ebp + c96: 57 push %edi + c97: 56 push %esi + c98: 53 push %ebx + c99: 83 ec 34 sub $0x34,%esp int fd, pid, i, n, nc, np; char buf[10]; printf(1, "sharedfd test\n"); - cd6: 68 a8 40 00 00 push $0x40a8 - cdb: 6a 01 push $0x1 - cdd: e8 80 2c 00 00 call 3962 + c9c: 68 d0 3f 00 00 push $0x3fd0 + ca1: 6a 01 push $0x1 + ca3: e8 03 2c 00 00 call 38ab unlink("sharedfd"); - ce2: c7 04 24 b7 40 00 00 movl $0x40b7,(%esp) - ce9: e8 80 2b 00 00 call 386e + ca8: c7 04 24 df 3f 00 00 movl $0x3fdf,(%esp) + caf: e8 ff 2a 00 00 call 37b3 fd = open("sharedfd", O_CREATE|O_RDWR); - cee: 83 c4 08 add $0x8,%esp - cf1: 68 02 02 00 00 push $0x202 - cf6: 68 b7 40 00 00 push $0x40b7 - cfb: e8 5e 2b 00 00 call 385e + cb4: 83 c4 08 add $0x8,%esp + cb7: 68 02 02 00 00 push $0x202 + cbc: 68 df 3f 00 00 push $0x3fdf + cc1: e8 dd 2a 00 00 call 37a3 if(fd < 0){ - d00: 83 c4 10 add $0x10,%esp - d03: 85 c0 test %eax,%eax - d05: 78 4a js d51 - d07: 89 c6 mov %eax,%esi + cc6: 83 c4 10 add $0x10,%esp + cc9: 85 c0 test %eax,%eax + ccb: 78 4a js d17 + ccd: 89 c6 mov %eax,%esi printf(1, "fstests: cannot open sharedfd for writing"); return; } pid = fork(); - d09: e8 08 2b 00 00 call 3816 - d0e: 89 45 d4 mov %eax,-0x2c(%ebp) + ccf: e8 87 2a 00 00 call 375b + cd4: 89 45 d4 mov %eax,-0x2c(%ebp) memset(buf, pid==0?'c':'p', sizeof(buf)); - d11: 83 f8 01 cmp $0x1,%eax - d14: 19 c0 sbb %eax,%eax - d16: 83 e0 f3 and $0xfffffff3,%eax - d19: 83 c0 70 add $0x70,%eax - d1c: 83 ec 04 sub $0x4,%esp - d1f: 6a 0a push $0xa - d21: 50 push %eax - d22: 8d 45 de lea -0x22(%ebp),%eax - d25: 50 push %eax - d26: e8 8c 29 00 00 call 36b7 - d2b: 83 c4 10 add $0x10,%esp - d2e: bb e8 03 00 00 mov $0x3e8,%ebx + cd7: 83 f8 01 cmp $0x1,%eax + cda: 19 c0 sbb %eax,%eax + cdc: 83 e0 f3 and $0xfffffff3,%eax + cdf: 83 c0 70 add $0x70,%eax + ce2: 83 ec 04 sub $0x4,%esp + ce5: 6a 0a push $0xa + ce7: 50 push %eax + ce8: 8d 45 de lea -0x22(%ebp),%eax + ceb: 50 push %eax + cec: e8 1f 29 00 00 call 3610 + cf1: 83 c4 10 add $0x10,%esp + cf4: bb e8 03 00 00 mov $0x3e8,%ebx for(i = 0; i < 1000; i++){ if(write(fd, buf, sizeof(buf)) != sizeof(buf)){ - d33: 8d 7d de lea -0x22(%ebp),%edi - d36: 83 ec 04 sub $0x4,%esp - d39: 6a 0a push $0xa - d3b: 57 push %edi - d3c: 56 push %esi - d3d: e8 fc 2a 00 00 call 383e - d42: 83 c4 10 add $0x10,%esp - d45: 83 f8 0a cmp $0xa,%eax - d48: 75 1e jne d68 + cf9: 8d 7d de lea -0x22(%ebp),%edi + cfc: 83 ec 04 sub $0x4,%esp + cff: 6a 0a push $0xa + d01: 57 push %edi + d02: 56 push %esi + d03: e8 7b 2a 00 00 call 3783 + d08: 83 c4 10 add $0x10,%esp + d0b: 83 f8 0a cmp $0xa,%eax + d0e: 75 1e jne d2e for(i = 0; i < 1000; i++){ - d4a: 83 eb 01 sub $0x1,%ebx - d4d: 75 e7 jne d36 - d4f: eb 29 jmp d7a + d10: 83 eb 01 sub $0x1,%ebx + d13: 75 e7 jne cfc + d15: eb 29 jmp d40 printf(1, "fstests: cannot open sharedfd for writing"); - d51: 83 ec 08 sub $0x8,%esp - d54: 68 7c 4d 00 00 push $0x4d7c - d59: 6a 01 push $0x1 - d5b: e8 02 2c 00 00 call 3962 + d17: 83 ec 08 sub $0x8,%esp + d1a: 68 a4 4c 00 00 push $0x4ca4 + d1f: 6a 01 push $0x1 + d21: e8 85 2b 00 00 call 38ab return; - d60: 83 c4 10 add $0x10,%esp - d63: e9 dd 00 00 00 jmp e45 + d26: 83 c4 10 add $0x10,%esp + d29: e9 dd 00 00 00 jmp e0b printf(1, "fstests: write sharedfd failed\n"); - d68: 83 ec 08 sub $0x8,%esp - d6b: 68 a8 4d 00 00 push $0x4da8 - d70: 6a 01 push $0x1 - d72: e8 eb 2b 00 00 call 3962 + d2e: 83 ec 08 sub $0x8,%esp + d31: 68 d0 4c 00 00 push $0x4cd0 + d36: 6a 01 push $0x1 + d38: e8 6e 2b 00 00 call 38ab break; - d77: 83 c4 10 add $0x10,%esp + d3d: 83 c4 10 add $0x10,%esp } } if(pid == 0) - d7a: 83 7d d4 00 cmpl $0x0,-0x2c(%ebp) - d7e: 74 51 je dd1 + d40: 83 7d d4 00 cmpl $0x0,-0x2c(%ebp) + d44: 74 51 je d97 exit(); else wait(); - d80: e8 a1 2a 00 00 call 3826 + d46: e8 20 2a 00 00 call 376b close(fd); - d85: 83 ec 0c sub $0xc,%esp - d88: 56 push %esi - d89: e8 b8 2a 00 00 call 3846 + d4b: 83 ec 0c sub $0xc,%esp + d4e: 56 push %esi + d4f: e8 37 2a 00 00 call 378b fd = open("sharedfd", 0); - d8e: 83 c4 08 add $0x8,%esp - d91: 6a 00 push $0x0 - d93: 68 b7 40 00 00 push $0x40b7 - d98: e8 c1 2a 00 00 call 385e - d9d: 89 45 d4 mov %eax,-0x2c(%ebp) + d54: 83 c4 08 add $0x8,%esp + d57: 6a 00 push $0x0 + d59: 68 df 3f 00 00 push $0x3fdf + d5e: e8 40 2a 00 00 call 37a3 + d63: 89 45 d4 mov %eax,-0x2c(%ebp) if(fd < 0){ - da0: 83 c4 10 add $0x10,%esp + d66: 83 c4 10 add $0x10,%esp printf(1, "fstests: cannot open sharedfd for reading\n"); return; } nc = np = 0; - da3: bb 00 00 00 00 mov $0x0,%ebx - da8: bf 00 00 00 00 mov $0x0,%edi - dad: 8d 75 e8 lea -0x18(%ebp),%esi + d69: bb 00 00 00 00 mov $0x0,%ebx + d6e: bf 00 00 00 00 mov $0x0,%edi + d73: 8d 75 e8 lea -0x18(%ebp),%esi if(fd < 0){ - db0: 85 c0 test %eax,%eax - db2: 78 22 js dd6 + d76: 85 c0 test %eax,%eax + d78: 78 22 js d9c while((n = read(fd, buf, sizeof(buf))) > 0){ - db4: 83 ec 04 sub $0x4,%esp - db7: 6a 0a push $0xa - db9: 8d 45 de lea -0x22(%ebp),%eax - dbc: 50 push %eax - dbd: ff 75 d4 pushl -0x2c(%ebp) - dc0: e8 71 2a 00 00 call 3836 - dc5: 83 c4 10 add $0x10,%esp - dc8: 85 c0 test %eax,%eax - dca: 7e 3d jle e09 - dcc: 8d 45 de lea -0x22(%ebp),%eax - dcf: eb 2b jmp dfc - exit(); - dd1: e8 48 2a 00 00 call 381e + d7a: 83 ec 04 sub $0x4,%esp + d7d: 6a 0a push $0xa + d7f: 8d 45 de lea -0x22(%ebp),%eax + d82: 50 push %eax + d83: ff 75 d4 push -0x2c(%ebp) + d86: e8 f0 29 00 00 call 377b + d8b: 83 c4 10 add $0x10,%esp + d8e: 85 c0 test %eax,%eax + d90: 7e 3d jle dcf + d92: 8d 45 de lea -0x22(%ebp),%eax + d95: eb 2b jmp dc2 + exit(); + d97: e8 c7 29 00 00 call 3763 printf(1, "fstests: cannot open sharedfd for reading\n"); - dd6: 83 ec 08 sub $0x8,%esp - dd9: 68 c8 4d 00 00 push $0x4dc8 - dde: 6a 01 push $0x1 - de0: e8 7d 2b 00 00 call 3962 + d9c: 83 ec 08 sub $0x8,%esp + d9f: 68 f0 4c 00 00 push $0x4cf0 + da4: 6a 01 push $0x1 + da6: e8 00 2b 00 00 call 38ab return; - de5: 83 c4 10 add $0x10,%esp - de8: eb 5b jmp e45 + dab: 83 c4 10 add $0x10,%esp + dae: eb 5b jmp e0b for(i = 0; i < sizeof(buf); i++){ if(buf[i] == 'c') nc++; if(buf[i] == 'p') np++; - dea: 80 fa 70 cmp $0x70,%dl - ded: 0f 94 c2 sete %dl - df0: 0f b6 d2 movzbl %dl,%edx - df3: 01 d3 add %edx,%ebx + db0: 80 fa 70 cmp $0x70,%dl + db3: 0f 94 c2 sete %dl + db6: 0f b6 d2 movzbl %dl,%edx + db9: 01 d3 add %edx,%ebx for(i = 0; i < sizeof(buf); i++){ - df5: 83 c0 01 add $0x1,%eax - df8: 39 f0 cmp %esi,%eax - dfa: 74 b8 je db4 + dbb: 83 c0 01 add $0x1,%eax + dbe: 39 f0 cmp %esi,%eax + dc0: 74 b8 je d7a if(buf[i] == 'c') - dfc: 0f b6 10 movzbl (%eax),%edx - dff: 80 fa 63 cmp $0x63,%dl - e02: 75 e6 jne dea + dc2: 0f b6 10 movzbl (%eax),%edx + dc5: 80 fa 63 cmp $0x63,%dl + dc8: 75 e6 jne db0 nc++; - e04: 83 c7 01 add $0x1,%edi + dca: 83 c7 01 add $0x1,%edi if(buf[i] == 'p') - e07: eb ec jmp df5 + dcd: eb ec jmp dbb } } close(fd); - e09: 83 ec 0c sub $0xc,%esp - e0c: ff 75 d4 pushl -0x2c(%ebp) - e0f: e8 32 2a 00 00 call 3846 + dcf: 83 ec 0c sub $0xc,%esp + dd2: ff 75 d4 push -0x2c(%ebp) + dd5: e8 b1 29 00 00 call 378b unlink("sharedfd"); - e14: c7 04 24 b7 40 00 00 movl $0x40b7,(%esp) - e1b: e8 4e 2a 00 00 call 386e + dda: c7 04 24 df 3f 00 00 movl $0x3fdf,(%esp) + de1: e8 cd 29 00 00 call 37b3 if(nc == 10000 && np == 10000){ - e20: 83 c4 10 add $0x10,%esp - e23: 81 ff 10 27 00 00 cmp $0x2710,%edi - e29: 75 22 jne e4d - e2b: 81 fb 10 27 00 00 cmp $0x2710,%ebx - e31: 75 1a jne e4d + de6: 83 c4 10 add $0x10,%esp + de9: 81 ff 10 27 00 00 cmp $0x2710,%edi + def: 75 22 jne e13 + df1: 81 fb 10 27 00 00 cmp $0x2710,%ebx + df7: 75 1a jne e13 printf(1, "sharedfd ok\n"); - e33: 83 ec 08 sub $0x8,%esp - e36: 68 c0 40 00 00 push $0x40c0 - e3b: 6a 01 push $0x1 - e3d: e8 20 2b 00 00 call 3962 - e42: 83 c4 10 add $0x10,%esp + df9: 83 ec 08 sub $0x8,%esp + dfc: 68 e8 3f 00 00 push $0x3fe8 + e01: 6a 01 push $0x1 + e03: e8 a3 2a 00 00 call 38ab + e08: 83 c4 10 add $0x10,%esp } else { printf(1, "sharedfd oops %d %d\n", nc, np); exit(); } } - e45: 8d 65 f4 lea -0xc(%ebp),%esp - e48: 5b pop %ebx - e49: 5e pop %esi - e4a: 5f pop %edi - e4b: 5d pop %ebp - e4c: c3 ret + e0b: 8d 65 f4 lea -0xc(%ebp),%esp + e0e: 5b pop %ebx + e0f: 5e pop %esi + e10: 5f pop %edi + e11: 5d pop %ebp + e12: c3 ret printf(1, "sharedfd oops %d %d\n", nc, np); - e4d: 53 push %ebx - e4e: 57 push %edi - e4f: 68 cd 40 00 00 push $0x40cd - e54: 6a 01 push $0x1 - e56: e8 07 2b 00 00 call 3962 + e13: 53 push %ebx + e14: 57 push %edi + e15: 68 f5 3f 00 00 push $0x3ff5 + e1a: 6a 01 push $0x1 + e1c: e8 8a 2a 00 00 call 38ab exit(); - e5b: e8 be 29 00 00 call 381e + e21: e8 3d 29 00 00 call 3763 -00000e60 : +00000e26 : // four processes write different files at the same // time, to test block allocation. void fourfiles(void) { - e60: f3 0f 1e fb endbr32 - e64: 55 push %ebp - e65: 89 e5 mov %esp,%ebp - e67: 57 push %edi - e68: 56 push %esi - e69: 53 push %ebx - e6a: 83 ec 34 sub $0x34,%esp + e26: 55 push %ebp + e27: 89 e5 mov %esp,%ebp + e29: 57 push %edi + e2a: 56 push %esi + e2b: 53 push %ebx + e2c: 83 ec 34 sub $0x34,%esp int fd, pid, i, j, n, total, pi; char *names[] = { "f0", "f1", "f2", "f3" }; - e6d: c7 45 d8 e2 40 00 00 movl $0x40e2,-0x28(%ebp) - e74: c7 45 dc 2b 42 00 00 movl $0x422b,-0x24(%ebp) - e7b: c7 45 e0 2f 42 00 00 movl $0x422f,-0x20(%ebp) - e82: c7 45 e4 e5 40 00 00 movl $0x40e5,-0x1c(%ebp) + e2f: c7 45 d8 0a 40 00 00 movl $0x400a,-0x28(%ebp) + e36: c7 45 dc 53 41 00 00 movl $0x4153,-0x24(%ebp) + e3d: c7 45 e0 57 41 00 00 movl $0x4157,-0x20(%ebp) + e44: c7 45 e4 0d 40 00 00 movl $0x400d,-0x1c(%ebp) char *fname; printf(1, "fourfiles test\n"); - e89: 68 e8 40 00 00 push $0x40e8 - e8e: 6a 01 push $0x1 - e90: e8 cd 2a 00 00 call 3962 - e95: 83 c4 10 add $0x10,%esp + e4b: 68 10 40 00 00 push $0x4010 + e50: 6a 01 push $0x1 + e52: e8 54 2a 00 00 call 38ab + e57: 83 c4 10 add $0x10,%esp for(pi = 0; pi < 4; pi++){ - e98: bb 00 00 00 00 mov $0x0,%ebx + e5a: bb 00 00 00 00 mov $0x0,%ebx fname = names[pi]; - e9d: 8b 74 9d d8 mov -0x28(%ebp,%ebx,4),%esi + e5f: 8b 74 9d d8 mov -0x28(%ebp,%ebx,4),%esi unlink(fname); - ea1: 83 ec 0c sub $0xc,%esp - ea4: 56 push %esi - ea5: e8 c4 29 00 00 call 386e + e63: 83 ec 0c sub $0xc,%esp + e66: 56 push %esi + e67: e8 47 29 00 00 call 37b3 pid = fork(); - eaa: e8 67 29 00 00 call 3816 + e6c: e8 ea 28 00 00 call 375b if(pid < 0){ - eaf: 83 c4 10 add $0x10,%esp - eb2: 85 c0 test %eax,%eax - eb4: 78 28 js ede + e71: 83 c4 10 add $0x10,%esp + e74: 85 c0 test %eax,%eax + e76: 78 28 js ea0 printf(1, "fork failed\n"); exit(); } if(pid == 0){ - eb6: 74 3a je ef2 + e78: 74 3a je eb4 for(pi = 0; pi < 4; pi++){ - eb8: 83 c3 01 add $0x1,%ebx - ebb: 83 fb 04 cmp $0x4,%ebx - ebe: 75 dd jne e9d + e7a: 83 c3 01 add $0x1,%ebx + e7d: 83 fb 04 cmp $0x4,%ebx + e80: 75 dd jne e5f exit(); } } for(pi = 0; pi < 4; pi++){ wait(); - ec0: e8 61 29 00 00 call 3826 - ec5: e8 5c 29 00 00 call 3826 - eca: e8 57 29 00 00 call 3826 - ecf: e8 52 29 00 00 call 3826 - ed4: bb 30 00 00 00 mov $0x30,%ebx - ed9: e9 0c 01 00 00 jmp fea + e82: e8 e4 28 00 00 call 376b + e87: e8 df 28 00 00 call 376b + e8c: e8 da 28 00 00 call 376b + e91: e8 d5 28 00 00 call 376b + e96: bb 30 00 00 00 mov $0x30,%ebx + e9b: e9 0c 01 00 00 jmp fac printf(1, "fork failed\n"); - ede: 83 ec 08 sub $0x8,%esp - ee1: 68 bd 4b 00 00 push $0x4bbd - ee6: 6a 01 push $0x1 - ee8: e8 75 2a 00 00 call 3962 + ea0: 83 ec 08 sub $0x8,%esp + ea3: 68 e5 4a 00 00 push $0x4ae5 + ea8: 6a 01 push $0x1 + eaa: e8 fc 29 00 00 call 38ab exit(); - eed: e8 2c 29 00 00 call 381e + eaf: e8 af 28 00 00 call 3763 fd = open(fname, O_CREATE | O_RDWR); - ef2: 83 ec 08 sub $0x8,%esp - ef5: 68 02 02 00 00 push $0x202 - efa: 56 push %esi - efb: e8 5e 29 00 00 call 385e - f00: 89 c6 mov %eax,%esi + eb4: 83 ec 08 sub $0x8,%esp + eb7: 68 02 02 00 00 push $0x202 + ebc: 56 push %esi + ebd: e8 e1 28 00 00 call 37a3 + ec2: 89 c6 mov %eax,%esi if(fd < 0){ - f02: 83 c4 10 add $0x10,%esp - f05: 85 c0 test %eax,%eax - f07: 78 45 js f4e + ec4: 83 c4 10 add $0x10,%esp + ec7: 85 c0 test %eax,%eax + ec9: 78 45 js f10 memset(buf, '0'+pi, 512); - f09: 83 ec 04 sub $0x4,%esp - f0c: 68 00 02 00 00 push $0x200 - f11: 83 c3 30 add $0x30,%ebx - f14: 53 push %ebx - f15: 68 80 84 00 00 push $0x8480 - f1a: e8 98 27 00 00 call 36b7 - f1f: 83 c4 10 add $0x10,%esp - f22: bb 0c 00 00 00 mov $0xc,%ebx + ecb: 83 ec 04 sub $0x4,%esp + ece: 68 00 02 00 00 push $0x200 + ed3: 83 c3 30 add $0x30,%ebx + ed6: 53 push %ebx + ed7: 68 60 83 00 00 push $0x8360 + edc: e8 2f 27 00 00 call 3610 + ee1: 83 c4 10 add $0x10,%esp + ee4: bb 0c 00 00 00 mov $0xc,%ebx if((n = write(fd, buf, 500)) != 500){ - f27: 83 ec 04 sub $0x4,%esp - f2a: 68 f4 01 00 00 push $0x1f4 - f2f: 68 80 84 00 00 push $0x8480 - f34: 56 push %esi - f35: e8 04 29 00 00 call 383e - f3a: 83 c4 10 add $0x10,%esp - f3d: 3d f4 01 00 00 cmp $0x1f4,%eax - f42: 75 1e jne f62 + ee9: 83 ec 04 sub $0x4,%esp + eec: 68 f4 01 00 00 push $0x1f4 + ef1: 68 60 83 00 00 push $0x8360 + ef6: 56 push %esi + ef7: e8 87 28 00 00 call 3783 + efc: 83 c4 10 add $0x10,%esp + eff: 3d f4 01 00 00 cmp $0x1f4,%eax + f04: 75 1e jne f24 for(i = 0; i < 12; i++){ - f44: 83 eb 01 sub $0x1,%ebx - f47: 75 de jne f27 + f06: 83 eb 01 sub $0x1,%ebx + f09: 75 de jne ee9 exit(); - f49: e8 d0 28 00 00 call 381e + f0b: e8 53 28 00 00 call 3763 printf(1, "create failed\n"); - f4e: 83 ec 08 sub $0x8,%esp - f51: 68 83 43 00 00 push $0x4383 - f56: 6a 01 push $0x1 - f58: e8 05 2a 00 00 call 3962 + f10: 83 ec 08 sub $0x8,%esp + f13: 68 ab 42 00 00 push $0x42ab + f18: 6a 01 push $0x1 + f1a: e8 8c 29 00 00 call 38ab exit(); - f5d: e8 bc 28 00 00 call 381e + f1f: e8 3f 28 00 00 call 3763 printf(1, "write failed %d\n", n); - f62: 83 ec 04 sub $0x4,%esp - f65: 50 push %eax - f66: 68 f8 40 00 00 push $0x40f8 - f6b: 6a 01 push $0x1 - f6d: e8 f0 29 00 00 call 3962 + f24: 83 ec 04 sub $0x4,%esp + f27: 50 push %eax + f28: 68 20 40 00 00 push $0x4020 + f2d: 6a 01 push $0x1 + f2f: e8 77 29 00 00 call 38ab exit(); - f72: e8 a7 28 00 00 call 381e + f34: e8 2a 28 00 00 call 3763 fd = open(fname, 0); total = 0; while((n = read(fd, buf, sizeof(buf))) > 0){ for(j = 0; j < n; j++){ if(buf[j] != '0'+i){ printf(1, "wrong char\n"); - f77: 83 ec 08 sub $0x8,%esp - f7a: 68 09 41 00 00 push $0x4109 - f7f: 6a 01 push $0x1 - f81: e8 dc 29 00 00 call 3962 + f39: 83 ec 08 sub $0x8,%esp + f3c: 68 31 40 00 00 push $0x4031 + f41: 6a 01 push $0x1 + f43: e8 63 29 00 00 call 38ab exit(); - f86: e8 93 28 00 00 call 381e + f48: e8 16 28 00 00 call 3763 } } total += n; - f8b: 01 d6 add %edx,%esi + f4d: 01 d6 add %edx,%esi while((n = read(fd, buf, sizeof(buf))) > 0){ - f8d: 83 ec 04 sub $0x4,%esp - f90: 68 00 20 00 00 push $0x2000 - f95: 68 80 84 00 00 push $0x8480 - f9a: 57 push %edi - f9b: e8 96 28 00 00 call 3836 - fa0: 83 c4 10 add $0x10,%esp - fa3: 85 c0 test %eax,%eax - fa5: 7e 19 jle fc0 + f4f: 83 ec 04 sub $0x4,%esp + f52: 68 00 20 00 00 push $0x2000 + f57: 68 60 83 00 00 push $0x8360 + f5c: 57 push %edi + f5d: e8 19 28 00 00 call 377b + f62: 83 c4 10 add $0x10,%esp + f65: 85 c0 test %eax,%eax + f67: 7e 19 jle f82 for(j = 0; j < n; j++){ - fa7: ba 00 00 00 00 mov $0x0,%edx + f69: ba 00 00 00 00 mov $0x0,%edx if(buf[j] != '0'+i){ - fac: 0f be 8a 80 84 00 00 movsbl 0x8480(%edx),%ecx - fb3: 39 d9 cmp %ebx,%ecx - fb5: 75 c0 jne f77 + f6e: 0f be 8a 60 83 00 00 movsbl 0x8360(%edx),%ecx + f75: 39 d9 cmp %ebx,%ecx + f77: 75 c0 jne f39 for(j = 0; j < n; j++){ - fb7: 83 c2 01 add $0x1,%edx - fba: 39 d0 cmp %edx,%eax - fbc: 75 ee jne fac - fbe: eb cb jmp f8b + f79: 83 c2 01 add $0x1,%edx + f7c: 39 d0 cmp %edx,%eax + f7e: 75 ee jne f6e + f80: eb cb jmp f4d } close(fd); - fc0: 83 ec 0c sub $0xc,%esp - fc3: 57 push %edi - fc4: e8 7d 28 00 00 call 3846 + f82: 83 ec 0c sub $0xc,%esp + f85: 57 push %edi + f86: e8 00 28 00 00 call 378b if(total != 12*500){ - fc9: 83 c4 10 add $0x10,%esp - fcc: 81 fe 70 17 00 00 cmp $0x1770,%esi - fd2: 75 37 jne 100b + f8b: 83 c4 10 add $0x10,%esp + f8e: 81 fe 70 17 00 00 cmp $0x1770,%esi + f94: 75 37 jne fcd printf(1, "wrong length %d\n", total); exit(); } unlink(fname); - fd4: 83 ec 0c sub $0xc,%esp - fd7: ff 75 d4 pushl -0x2c(%ebp) - fda: e8 8f 28 00 00 call 386e + f96: 83 ec 0c sub $0xc,%esp + f99: ff 75 d4 push -0x2c(%ebp) + f9c: e8 12 28 00 00 call 37b3 for(i = 0; i < 2; i++){ - fdf: 83 c3 01 add $0x1,%ebx - fe2: 83 c4 10 add $0x10,%esp - fe5: 83 fb 32 cmp $0x32,%ebx - fe8: 74 36 je 1020 + fa1: 83 c3 01 add $0x1,%ebx + fa4: 83 c4 10 add $0x10,%esp + fa7: 83 fb 32 cmp $0x32,%ebx + faa: 74 36 je fe2 fname = names[i]; - fea: 8b 84 9d 18 ff ff ff mov -0xe8(%ebp,%ebx,4),%eax - ff1: 89 45 d4 mov %eax,-0x2c(%ebp) + fac: 8b 84 9d 18 ff ff ff mov -0xe8(%ebp,%ebx,4),%eax + fb3: 89 45 d4 mov %eax,-0x2c(%ebp) fd = open(fname, 0); - ff4: 83 ec 08 sub $0x8,%esp - ff7: 6a 00 push $0x0 - ff9: 50 push %eax - ffa: e8 5f 28 00 00 call 385e - fff: 89 c7 mov %eax,%edi + fb6: 83 ec 08 sub $0x8,%esp + fb9: 6a 00 push $0x0 + fbb: 50 push %eax + fbc: e8 e2 27 00 00 call 37a3 + fc1: 89 c7 mov %eax,%edi while((n = read(fd, buf, sizeof(buf))) > 0){ - 1001: 83 c4 10 add $0x10,%esp + fc3: 83 c4 10 add $0x10,%esp total = 0; - 1004: be 00 00 00 00 mov $0x0,%esi + fc6: be 00 00 00 00 mov $0x0,%esi while((n = read(fd, buf, sizeof(buf))) > 0){ - 1009: eb 82 jmp f8d + fcb: eb 82 jmp f4f printf(1, "wrong length %d\n", total); - 100b: 83 ec 04 sub $0x4,%esp - 100e: 56 push %esi - 100f: 68 15 41 00 00 push $0x4115 - 1014: 6a 01 push $0x1 - 1016: e8 47 29 00 00 call 3962 + fcd: 83 ec 04 sub $0x4,%esp + fd0: 56 push %esi + fd1: 68 3d 40 00 00 push $0x403d + fd6: 6a 01 push $0x1 + fd8: e8 ce 28 00 00 call 38ab exit(); - 101b: e8 fe 27 00 00 call 381e + fdd: e8 81 27 00 00 call 3763 } printf(1, "fourfiles ok\n"); - 1020: 83 ec 08 sub $0x8,%esp - 1023: 68 26 41 00 00 push $0x4126 - 1028: 6a 01 push $0x1 - 102a: e8 33 29 00 00 call 3962 + fe2: 83 ec 08 sub $0x8,%esp + fe5: 68 4e 40 00 00 push $0x404e + fea: 6a 01 push $0x1 + fec: e8 ba 28 00 00 call 38ab } - 102f: 83 c4 10 add $0x10,%esp - 1032: 8d 65 f4 lea -0xc(%ebp),%esp - 1035: 5b pop %ebx - 1036: 5e pop %esi - 1037: 5f pop %edi - 1038: 5d pop %ebp - 1039: c3 ret + ff1: 83 c4 10 add $0x10,%esp + ff4: 8d 65 f4 lea -0xc(%ebp),%esp + ff7: 5b pop %ebx + ff8: 5e pop %esi + ff9: 5f pop %edi + ffa: 5d pop %ebp + ffb: c3 ret -0000103a : +00000ffc : // four processes create and delete different files in same directory void createdelete(void) { - 103a: f3 0f 1e fb endbr32 - 103e: 55 push %ebp - 103f: 89 e5 mov %esp,%ebp - 1041: 57 push %edi - 1042: 56 push %esi - 1043: 53 push %ebx - 1044: 83 ec 44 sub $0x44,%esp + ffc: 55 push %ebp + ffd: 89 e5 mov %esp,%ebp + fff: 57 push %edi + 1000: 56 push %esi + 1001: 53 push %ebx + 1002: 83 ec 44 sub $0x44,%esp enum { N = 20 }; int pid, i, fd, pi; char name[32]; printf(1, "createdelete test\n"); - 1047: 68 34 41 00 00 push $0x4134 - 104c: 6a 01 push $0x1 - 104e: e8 0f 29 00 00 call 3962 - 1053: 83 c4 10 add $0x10,%esp + 1005: 68 5c 40 00 00 push $0x405c + 100a: 6a 01 push $0x1 + 100c: e8 9a 28 00 00 call 38ab + 1011: 83 c4 10 add $0x10,%esp for(pi = 0; pi < 4; pi++){ - 1056: be 00 00 00 00 mov $0x0,%esi + 1014: be 00 00 00 00 mov $0x0,%esi pid = fork(); - 105b: e8 b6 27 00 00 call 3816 + 1019: e8 3d 27 00 00 call 375b if(pid < 0){ - 1060: 85 c0 test %eax,%eax - 1062: 78 38 js 109c + 101e: 85 c0 test %eax,%eax + 1020: 78 38 js 105a printf(1, "fork failed\n"); exit(); } if(pid == 0){ - 1064: 74 4a je 10b0 + 1022: 74 4a je 106e for(pi = 0; pi < 4; pi++){ - 1066: 83 c6 01 add $0x1,%esi - 1069: 83 fe 04 cmp $0x4,%esi - 106c: 75 ed jne 105b + 1024: 83 c6 01 add $0x1,%esi + 1027: 83 fe 04 cmp $0x4,%esi + 102a: 75 ed jne 1019 exit(); } } for(pi = 0; pi < 4; pi++){ wait(); - 106e: e8 b3 27 00 00 call 3826 - 1073: e8 ae 27 00 00 call 3826 - 1078: e8 a9 27 00 00 call 3826 - 107d: e8 a4 27 00 00 call 3826 + 102c: e8 3a 27 00 00 call 376b + 1031: e8 35 27 00 00 call 376b + 1036: e8 30 27 00 00 call 376b + 103b: e8 2b 27 00 00 call 376b } name[0] = name[1] = name[2] = 0; - 1082: c6 45 ca 00 movb $0x0,-0x36(%ebp) - 1086: bf 30 00 00 00 mov $0x30,%edi - 108b: c7 45 c4 ff ff ff ff movl $0xffffffff,-0x3c(%ebp) + 1040: c6 45 ca 00 movb $0x0,-0x36(%ebp) + 1044: bf 30 00 00 00 mov $0x30,%edi + 1049: c7 45 c4 ff ff ff ff movl $0xffffffff,-0x3c(%ebp) for(i = 0; i < N; i++){ - 1092: be 00 00 00 00 mov $0x0,%esi - 1097: e9 38 01 00 00 jmp 11d4 + 1050: be 00 00 00 00 mov $0x0,%esi + 1055: e9 38 01 00 00 jmp 1192 printf(1, "fork failed\n"); - 109c: 83 ec 08 sub $0x8,%esp - 109f: 68 bd 4b 00 00 push $0x4bbd - 10a4: 6a 01 push $0x1 - 10a6: e8 b7 28 00 00 call 3962 + 105a: 83 ec 08 sub $0x8,%esp + 105d: 68 e5 4a 00 00 push $0x4ae5 + 1062: 6a 01 push $0x1 + 1064: e8 42 28 00 00 call 38ab exit(); - 10ab: e8 6e 27 00 00 call 381e - 10b0: 89 c3 mov %eax,%ebx + 1069: e8 f5 26 00 00 call 3763 name[0] = 'p' + pi; - 10b2: 8d 46 70 lea 0x70(%esi),%eax - 10b5: 88 45 c8 mov %al,-0x38(%ebp) + 106e: 89 c3 mov %eax,%ebx + 1070: 8d 46 70 lea 0x70(%esi),%eax + 1073: 88 45 c8 mov %al,-0x38(%ebp) name[2] = '\0'; - 10b8: c6 45 ca 00 movb $0x0,-0x36(%ebp) + 1076: c6 45 ca 00 movb $0x0,-0x36(%ebp) fd = open(name, O_CREATE | O_RDWR); - 10bc: 8d 75 c8 lea -0x38(%ebp),%esi - 10bf: eb 1c jmp 10dd + 107a: 8d 75 c8 lea -0x38(%ebp),%esi + 107d: eb 1c jmp 109b printf(1, "create failed\n"); - 10c1: 83 ec 08 sub $0x8,%esp - 10c4: 68 83 43 00 00 push $0x4383 - 10c9: 6a 01 push $0x1 - 10cb: e8 92 28 00 00 call 3962 + 107f: 83 ec 08 sub $0x8,%esp + 1082: 68 ab 42 00 00 push $0x42ab + 1087: 6a 01 push $0x1 + 1089: e8 1d 28 00 00 call 38ab exit(); - 10d0: e8 49 27 00 00 call 381e + 108e: e8 d0 26 00 00 call 3763 for(i = 0; i < N; i++){ - 10d5: 83 c3 01 add $0x1,%ebx - 10d8: 83 fb 14 cmp $0x14,%ebx - 10db: 74 63 je 1140 + 1093: 83 c3 01 add $0x1,%ebx + 1096: 83 fb 14 cmp $0x14,%ebx + 1099: 74 63 je 10fe name[1] = '0' + i; - 10dd: 8d 43 30 lea 0x30(%ebx),%eax - 10e0: 88 45 c9 mov %al,-0x37(%ebp) + 109b: 8d 43 30 lea 0x30(%ebx),%eax + 109e: 88 45 c9 mov %al,-0x37(%ebp) fd = open(name, O_CREATE | O_RDWR); - 10e3: 83 ec 08 sub $0x8,%esp - 10e6: 68 02 02 00 00 push $0x202 - 10eb: 56 push %esi - 10ec: e8 6d 27 00 00 call 385e + 10a1: 83 ec 08 sub $0x8,%esp + 10a4: 68 02 02 00 00 push $0x202 + 10a9: 56 push %esi + 10aa: e8 f4 26 00 00 call 37a3 if(fd < 0){ - 10f1: 83 c4 10 add $0x10,%esp - 10f4: 85 c0 test %eax,%eax - 10f6: 78 c9 js 10c1 + 10af: 83 c4 10 add $0x10,%esp + 10b2: 85 c0 test %eax,%eax + 10b4: 78 c9 js 107f close(fd); - 10f8: 83 ec 0c sub $0xc,%esp - 10fb: 50 push %eax - 10fc: e8 45 27 00 00 call 3846 + 10b6: 83 ec 0c sub $0xc,%esp + 10b9: 50 push %eax + 10ba: e8 cc 26 00 00 call 378b if(i > 0 && (i % 2 ) == 0){ - 1101: 83 c4 10 add $0x10,%esp - 1104: 85 db test %ebx,%ebx - 1106: 7e cd jle 10d5 - 1108: f6 c3 01 test $0x1,%bl - 110b: 75 c8 jne 10d5 + 10bf: 83 c4 10 add $0x10,%esp + 10c2: 85 db test %ebx,%ebx + 10c4: 7e cd jle 1093 + 10c6: f6 c3 01 test $0x1,%bl + 10c9: 75 c8 jne 1093 name[1] = '0' + (i / 2); - 110d: 89 d8 mov %ebx,%eax - 110f: c1 e8 1f shr $0x1f,%eax - 1112: 01 d8 add %ebx,%eax - 1114: d1 f8 sar %eax - 1116: 83 c0 30 add $0x30,%eax - 1119: 88 45 c9 mov %al,-0x37(%ebp) + 10cb: 89 d8 mov %ebx,%eax + 10cd: c1 e8 1f shr $0x1f,%eax + 10d0: 01 d8 add %ebx,%eax + 10d2: d1 f8 sar %eax + 10d4: 83 c0 30 add $0x30,%eax + 10d7: 88 45 c9 mov %al,-0x37(%ebp) if(unlink(name) < 0){ - 111c: 83 ec 0c sub $0xc,%esp - 111f: 56 push %esi - 1120: e8 49 27 00 00 call 386e - 1125: 83 c4 10 add $0x10,%esp - 1128: 85 c0 test %eax,%eax - 112a: 79 a9 jns 10d5 + 10da: 83 ec 0c sub $0xc,%esp + 10dd: 56 push %esi + 10de: e8 d0 26 00 00 call 37b3 + 10e3: 83 c4 10 add $0x10,%esp + 10e6: 85 c0 test %eax,%eax + 10e8: 79 a9 jns 1093 printf(1, "unlink failed\n"); - 112c: 83 ec 08 sub $0x8,%esp - 112f: 68 35 3d 00 00 push $0x3d35 - 1134: 6a 01 push $0x1 - 1136: e8 27 28 00 00 call 3962 + 10ea: 83 ec 08 sub $0x8,%esp + 10ed: 68 5d 3c 00 00 push $0x3c5d + 10f2: 6a 01 push $0x1 + 10f4: e8 b2 27 00 00 call 38ab exit(); - 113b: e8 de 26 00 00 call 381e + 10f9: e8 65 26 00 00 call 3763 exit(); - 1140: e8 d9 26 00 00 call 381e + 10fe: e8 60 26 00 00 call 3763 + for(pi = 0; pi < 4; pi++){ + name[0] = 'p' + pi; name[1] = '0' + i; fd = open(name, 0); if((i == 0 || i >= N/2) && fd < 0){ printf(1, "oops createdelete %s didn't exist\n", name); + 1103: 83 ec 04 sub $0x4,%esp + 1106: 8d 45 c8 lea -0x38(%ebp),%eax + 1109: 50 push %eax + 110a: 68 1c 4d 00 00 push $0x4d1c + 110f: 6a 01 push $0x1 + 1111: e8 95 27 00 00 call 38ab exit(); + 1116: e8 48 26 00 00 call 3763 } else if((i >= 1 && i < N/2) && fd >= 0){ - 1145: 85 c0 test %eax,%eax - 1147: 78 06 js 114f - 1149: 83 7d c4 08 cmpl $0x8,-0x3c(%ebp) - 114d: 76 50 jbe 119f printf(1, "oops createdelete %s did exist\n", name); exit(); } if(fd >= 0) - 114f: 85 c0 test %eax,%eax - 1151: 79 64 jns 11b7 + 111b: 85 c0 test %eax,%eax + 111d: 79 56 jns 1175 for(pi = 0; pi < 4; pi++){ - 1153: 83 c3 01 add $0x1,%ebx - 1156: 80 fb 74 cmp $0x74,%bl - 1159: 74 6a je 11c5 + 111f: 83 c3 01 add $0x1,%ebx + 1122: 80 fb 74 cmp $0x74,%bl + 1125: 74 5c je 1183 name[0] = 'p' + pi; - 115b: 88 5d c8 mov %bl,-0x38(%ebp) + 1127: 88 5d c8 mov %bl,-0x38(%ebp) name[1] = '0' + i; - 115e: 89 f8 mov %edi,%eax - 1160: 88 45 c9 mov %al,-0x37(%ebp) + 112a: 89 f8 mov %edi,%eax + 112c: 88 45 c9 mov %al,-0x37(%ebp) fd = open(name, 0); - 1163: 83 ec 08 sub $0x8,%esp - 1166: 6a 00 push $0x0 - 1168: 8d 45 c8 lea -0x38(%ebp),%eax - 116b: 50 push %eax - 116c: e8 ed 26 00 00 call 385e + 112f: 83 ec 08 sub $0x8,%esp + 1132: 6a 00 push $0x0 + 1134: 8d 45 c8 lea -0x38(%ebp),%eax + 1137: 50 push %eax + 1138: e8 66 26 00 00 call 37a3 if((i == 0 || i >= N/2) && fd < 0){ - 1171: 83 c4 10 add $0x10,%esp - 1174: 85 f6 test %esi,%esi - 1176: 0f 94 c1 sete %cl - 1179: 83 fe 09 cmp $0x9,%esi - 117c: 0f 9f c2 setg %dl - 117f: 08 d1 or %dl,%cl - 1181: 74 c2 je 1145 - 1183: 85 c0 test %eax,%eax - 1185: 79 be jns 1145 - printf(1, "oops createdelete %s didn't exist\n", name); - 1187: 83 ec 04 sub $0x4,%esp - 118a: 8d 45 c8 lea -0x38(%ebp),%eax - 118d: 50 push %eax - 118e: 68 f4 4d 00 00 push $0x4df4 - 1193: 6a 01 push $0x1 - 1195: e8 c8 27 00 00 call 3962 - exit(); - 119a: e8 7f 26 00 00 call 381e + 113d: 83 c4 10 add $0x10,%esp + 1140: 85 f6 test %esi,%esi + 1142: 0f 94 c2 sete %dl + 1145: 83 fe 09 cmp $0x9,%esi + 1148: 0f 9f c1 setg %cl + 114b: 08 ca or %cl,%dl + 114d: 74 04 je 1153 + 114f: 85 c0 test %eax,%eax + 1151: 78 b0 js 1103 + } else if((i >= 1 && i < N/2) && fd >= 0){ + 1153: 85 c0 test %eax,%eax + 1155: 78 c4 js 111b + 1157: 83 7d c4 08 cmpl $0x8,-0x3c(%ebp) + 115b: 77 be ja 111b printf(1, "oops createdelete %s did exist\n", name); - 119f: 83 ec 04 sub $0x4,%esp - 11a2: 8d 45 c8 lea -0x38(%ebp),%eax - 11a5: 50 push %eax - 11a6: 68 18 4e 00 00 push $0x4e18 - 11ab: 6a 01 push $0x1 - 11ad: e8 b0 27 00 00 call 3962 + 115d: 83 ec 04 sub $0x4,%esp + 1160: 8d 45 c8 lea -0x38(%ebp),%eax + 1163: 50 push %eax + 1164: 68 40 4d 00 00 push $0x4d40 + 1169: 6a 01 push $0x1 + 116b: e8 3b 27 00 00 call 38ab exit(); - 11b2: e8 67 26 00 00 call 381e + 1170: e8 ee 25 00 00 call 3763 close(fd); - 11b7: 83 ec 0c sub $0xc,%esp - 11ba: 50 push %eax - 11bb: e8 86 26 00 00 call 3846 - 11c0: 83 c4 10 add $0x10,%esp - 11c3: eb 8e jmp 1153 + 1175: 83 ec 0c sub $0xc,%esp + 1178: 50 push %eax + 1179: e8 0d 26 00 00 call 378b + 117e: 83 c4 10 add $0x10,%esp + 1181: eb 9c jmp 111f for(i = 0; i < N; i++){ - 11c5: 83 c6 01 add $0x1,%esi - 11c8: 83 45 c4 01 addl $0x1,-0x3c(%ebp) - 11cc: 83 c7 01 add $0x1,%edi - 11cf: 83 fe 14 cmp $0x14,%esi - 11d2: 74 38 je 120c + 1183: 83 c6 01 add $0x1,%esi + 1186: 83 45 c4 01 addl $0x1,-0x3c(%ebp) + 118a: 83 c7 01 add $0x1,%edi + 118d: 83 fe 14 cmp $0x14,%esi + 1190: 74 38 je 11ca for(pi = 0; pi < 4; pi++){ - 11d4: bb 70 00 00 00 mov $0x70,%ebx - 11d9: eb 80 jmp 115b + 1192: bb 70 00 00 00 mov $0x70,%ebx + 1197: eb 8e jmp 1127 } } for(i = 0; i < N; i++){ - 11db: 83 c6 01 add $0x1,%esi - 11de: 83 c7 01 add $0x1,%edi - 11e1: 89 f0 mov %esi,%eax - 11e3: 3c 84 cmp $0x84,%al - 11e5: 74 31 je 1218 + 1199: 83 c6 01 add $0x1,%esi + 119c: 83 c7 01 add $0x1,%edi + 119f: 89 f0 mov %esi,%eax + 11a1: 3c 84 cmp $0x84,%al + 11a3: 74 31 je 11d6 for(i = 0; i < N; i++){ - 11e7: bb 04 00 00 00 mov $0x4,%ebx + 11a5: bb 04 00 00 00 mov $0x4,%ebx for(pi = 0; pi < 4; pi++){ name[0] = 'p' + i; - 11ec: 89 f0 mov %esi,%eax - 11ee: 88 45 c8 mov %al,-0x38(%ebp) + 11aa: 89 f0 mov %esi,%eax + 11ac: 88 45 c8 mov %al,-0x38(%ebp) name[1] = '0' + i; - 11f1: 89 f8 mov %edi,%eax - 11f3: 88 45 c9 mov %al,-0x37(%ebp) + 11af: 89 f8 mov %edi,%eax + 11b1: 88 45 c9 mov %al,-0x37(%ebp) unlink(name); - 11f6: 83 ec 0c sub $0xc,%esp - 11f9: 8d 45 c8 lea -0x38(%ebp),%eax - 11fc: 50 push %eax - 11fd: e8 6c 26 00 00 call 386e + 11b4: 83 ec 0c sub $0xc,%esp + 11b7: 8d 45 c8 lea -0x38(%ebp),%eax + 11ba: 50 push %eax + 11bb: e8 f3 25 00 00 call 37b3 for(pi = 0; pi < 4; pi++){ - 1202: 83 c4 10 add $0x10,%esp - 1205: 83 eb 01 sub $0x1,%ebx - 1208: 75 e2 jne 11ec - 120a: eb cf jmp 11db - 120c: bf 30 00 00 00 mov $0x30,%edi - 1211: be 70 00 00 00 mov $0x70,%esi - 1216: eb cf jmp 11e7 + 11c0: 83 c4 10 add $0x10,%esp + 11c3: 83 eb 01 sub $0x1,%ebx + 11c6: 75 e2 jne 11aa + 11c8: eb cf jmp 1199 + 11ca: bf 30 00 00 00 mov $0x30,%edi + 11cf: be 70 00 00 00 mov $0x70,%esi + 11d4: eb cf jmp 11a5 } } printf(1, "createdelete ok\n"); - 1218: 83 ec 08 sub $0x8,%esp - 121b: 68 47 41 00 00 push $0x4147 - 1220: 6a 01 push $0x1 - 1222: e8 3b 27 00 00 call 3962 + 11d6: 83 ec 08 sub $0x8,%esp + 11d9: 68 6f 40 00 00 push $0x406f + 11de: 6a 01 push $0x1 + 11e0: e8 c6 26 00 00 call 38ab } - 1227: 83 c4 10 add $0x10,%esp - 122a: 8d 65 f4 lea -0xc(%ebp),%esp - 122d: 5b pop %ebx - 122e: 5e pop %esi - 122f: 5f pop %edi - 1230: 5d pop %ebp - 1231: c3 ret + 11e5: 83 c4 10 add $0x10,%esp + 11e8: 8d 65 f4 lea -0xc(%ebp),%esp + 11eb: 5b pop %ebx + 11ec: 5e pop %esi + 11ed: 5f pop %edi + 11ee: 5d pop %ebp + 11ef: c3 ret -00001232 : +000011f0 : // can I unlink a file and still read it? void unlinkread(void) { - 1232: f3 0f 1e fb endbr32 - 1236: 55 push %ebp - 1237: 89 e5 mov %esp,%ebp - 1239: 56 push %esi - 123a: 53 push %ebx + 11f0: 55 push %ebp + 11f1: 89 e5 mov %esp,%ebp + 11f3: 56 push %esi + 11f4: 53 push %ebx int fd, fd1; printf(1, "unlinkread test\n"); - 123b: 83 ec 08 sub $0x8,%esp - 123e: 68 58 41 00 00 push $0x4158 - 1243: 6a 01 push $0x1 - 1245: e8 18 27 00 00 call 3962 + 11f5: 83 ec 08 sub $0x8,%esp + 11f8: 68 80 40 00 00 push $0x4080 + 11fd: 6a 01 push $0x1 + 11ff: e8 a7 26 00 00 call 38ab fd = open("unlinkread", O_CREATE | O_RDWR); - 124a: 83 c4 08 add $0x8,%esp - 124d: 68 02 02 00 00 push $0x202 - 1252: 68 69 41 00 00 push $0x4169 - 1257: e8 02 26 00 00 call 385e + 1204: 83 c4 08 add $0x8,%esp + 1207: 68 02 02 00 00 push $0x202 + 120c: 68 91 40 00 00 push $0x4091 + 1211: e8 8d 25 00 00 call 37a3 if(fd < 0){ - 125c: 83 c4 10 add $0x10,%esp - 125f: 85 c0 test %eax,%eax - 1261: 0f 88 f0 00 00 00 js 1357 - 1267: 89 c3 mov %eax,%ebx + 1216: 83 c4 10 add $0x10,%esp + 1219: 85 c0 test %eax,%eax + 121b: 0f 88 f0 00 00 00 js 1311 + 1221: 89 c3 mov %eax,%ebx printf(1, "create unlinkread failed\n"); exit(); } write(fd, "hello", 5); - 1269: 83 ec 04 sub $0x4,%esp - 126c: 6a 05 push $0x5 - 126e: 68 8e 41 00 00 push $0x418e - 1273: 50 push %eax - 1274: e8 c5 25 00 00 call 383e + 1223: 83 ec 04 sub $0x4,%esp + 1226: 6a 05 push $0x5 + 1228: 68 b6 40 00 00 push $0x40b6 + 122d: 50 push %eax + 122e: e8 50 25 00 00 call 3783 close(fd); - 1279: 89 1c 24 mov %ebx,(%esp) - 127c: e8 c5 25 00 00 call 3846 + 1233: 89 1c 24 mov %ebx,(%esp) + 1236: e8 50 25 00 00 call 378b fd = open("unlinkread", O_RDWR); - 1281: 83 c4 08 add $0x8,%esp - 1284: 6a 02 push $0x2 - 1286: 68 69 41 00 00 push $0x4169 - 128b: e8 ce 25 00 00 call 385e - 1290: 89 c3 mov %eax,%ebx + 123b: 83 c4 08 add $0x8,%esp + 123e: 6a 02 push $0x2 + 1240: 68 91 40 00 00 push $0x4091 + 1245: e8 59 25 00 00 call 37a3 + 124a: 89 c3 mov %eax,%ebx if(fd < 0){ - 1292: 83 c4 10 add $0x10,%esp - 1295: 85 c0 test %eax,%eax - 1297: 0f 88 ce 00 00 00 js 136b + 124c: 83 c4 10 add $0x10,%esp + 124f: 85 c0 test %eax,%eax + 1251: 0f 88 ce 00 00 00 js 1325 printf(1, "open unlinkread failed\n"); exit(); } if(unlink("unlinkread") != 0){ - 129d: 83 ec 0c sub $0xc,%esp - 12a0: 68 69 41 00 00 push $0x4169 - 12a5: e8 c4 25 00 00 call 386e - 12aa: 83 c4 10 add $0x10,%esp - 12ad: 85 c0 test %eax,%eax - 12af: 0f 85 ca 00 00 00 jne 137f + 1257: 83 ec 0c sub $0xc,%esp + 125a: 68 91 40 00 00 push $0x4091 + 125f: e8 4f 25 00 00 call 37b3 + 1264: 83 c4 10 add $0x10,%esp + 1267: 85 c0 test %eax,%eax + 1269: 0f 85 ca 00 00 00 jne 1339 printf(1, "unlink unlinkread failed\n"); exit(); } fd1 = open("unlinkread", O_CREATE | O_RDWR); - 12b5: 83 ec 08 sub $0x8,%esp - 12b8: 68 02 02 00 00 push $0x202 - 12bd: 68 69 41 00 00 push $0x4169 - 12c2: e8 97 25 00 00 call 385e - 12c7: 89 c6 mov %eax,%esi + 126f: 83 ec 08 sub $0x8,%esp + 1272: 68 02 02 00 00 push $0x202 + 1277: 68 91 40 00 00 push $0x4091 + 127c: e8 22 25 00 00 call 37a3 + 1281: 89 c6 mov %eax,%esi write(fd1, "yyy", 3); - 12c9: 83 c4 0c add $0xc,%esp - 12cc: 6a 03 push $0x3 - 12ce: 68 c6 41 00 00 push $0x41c6 - 12d3: 50 push %eax - 12d4: e8 65 25 00 00 call 383e + 1283: 83 c4 0c add $0xc,%esp + 1286: 6a 03 push $0x3 + 1288: 68 ee 40 00 00 push $0x40ee + 128d: 50 push %eax + 128e: e8 f0 24 00 00 call 3783 close(fd1); - 12d9: 89 34 24 mov %esi,(%esp) - 12dc: e8 65 25 00 00 call 3846 + 1293: 89 34 24 mov %esi,(%esp) + 1296: e8 f0 24 00 00 call 378b if(read(fd, buf, sizeof(buf)) != 5){ - 12e1: 83 c4 0c add $0xc,%esp - 12e4: 68 00 20 00 00 push $0x2000 - 12e9: 68 80 84 00 00 push $0x8480 - 12ee: 53 push %ebx - 12ef: e8 42 25 00 00 call 3836 - 12f4: 83 c4 10 add $0x10,%esp - 12f7: 83 f8 05 cmp $0x5,%eax - 12fa: 0f 85 93 00 00 00 jne 1393 + 129b: 83 c4 0c add $0xc,%esp + 129e: 68 00 20 00 00 push $0x2000 + 12a3: 68 60 83 00 00 push $0x8360 + 12a8: 53 push %ebx + 12a9: e8 cd 24 00 00 call 377b + 12ae: 83 c4 10 add $0x10,%esp + 12b1: 83 f8 05 cmp $0x5,%eax + 12b4: 0f 85 93 00 00 00 jne 134d printf(1, "unlinkread read failed"); exit(); } if(buf[0] != 'h'){ - 1300: 80 3d 80 84 00 00 68 cmpb $0x68,0x8480 - 1307: 0f 85 9a 00 00 00 jne 13a7 + 12ba: 80 3d 60 83 00 00 68 cmpb $0x68,0x8360 + 12c1: 0f 85 9a 00 00 00 jne 1361 printf(1, "unlinkread wrong data\n"); exit(); } if(write(fd, buf, 10) != 10){ - 130d: 83 ec 04 sub $0x4,%esp - 1310: 6a 0a push $0xa - 1312: 68 80 84 00 00 push $0x8480 - 1317: 53 push %ebx - 1318: e8 21 25 00 00 call 383e - 131d: 83 c4 10 add $0x10,%esp - 1320: 83 f8 0a cmp $0xa,%eax - 1323: 0f 85 92 00 00 00 jne 13bb + 12c7: 83 ec 04 sub $0x4,%esp + 12ca: 6a 0a push $0xa + 12cc: 68 60 83 00 00 push $0x8360 + 12d1: 53 push %ebx + 12d2: e8 ac 24 00 00 call 3783 + 12d7: 83 c4 10 add $0x10,%esp + 12da: 83 f8 0a cmp $0xa,%eax + 12dd: 0f 85 92 00 00 00 jne 1375 printf(1, "unlinkread write failed\n"); exit(); } close(fd); - 1329: 83 ec 0c sub $0xc,%esp - 132c: 53 push %ebx - 132d: e8 14 25 00 00 call 3846 + 12e3: 83 ec 0c sub $0xc,%esp + 12e6: 53 push %ebx + 12e7: e8 9f 24 00 00 call 378b unlink("unlinkread"); - 1332: c7 04 24 69 41 00 00 movl $0x4169,(%esp) - 1339: e8 30 25 00 00 call 386e + 12ec: c7 04 24 91 40 00 00 movl $0x4091,(%esp) + 12f3: e8 bb 24 00 00 call 37b3 printf(1, "unlinkread ok\n"); - 133e: 83 c4 08 add $0x8,%esp - 1341: 68 11 42 00 00 push $0x4211 - 1346: 6a 01 push $0x1 - 1348: e8 15 26 00 00 call 3962 + 12f8: 83 c4 08 add $0x8,%esp + 12fb: 68 39 41 00 00 push $0x4139 + 1300: 6a 01 push $0x1 + 1302: e8 a4 25 00 00 call 38ab } - 134d: 83 c4 10 add $0x10,%esp - 1350: 8d 65 f8 lea -0x8(%ebp),%esp - 1353: 5b pop %ebx - 1354: 5e pop %esi - 1355: 5d pop %ebp - 1356: c3 ret + 1307: 83 c4 10 add $0x10,%esp + 130a: 8d 65 f8 lea -0x8(%ebp),%esp + 130d: 5b pop %ebx + 130e: 5e pop %esi + 130f: 5d pop %ebp + 1310: c3 ret printf(1, "create unlinkread failed\n"); - 1357: 83 ec 08 sub $0x8,%esp - 135a: 68 74 41 00 00 push $0x4174 - 135f: 6a 01 push $0x1 - 1361: e8 fc 25 00 00 call 3962 + 1311: 83 ec 08 sub $0x8,%esp + 1314: 68 9c 40 00 00 push $0x409c + 1319: 6a 01 push $0x1 + 131b: e8 8b 25 00 00 call 38ab exit(); - 1366: e8 b3 24 00 00 call 381e + 1320: e8 3e 24 00 00 call 3763 printf(1, "open unlinkread failed\n"); - 136b: 83 ec 08 sub $0x8,%esp - 136e: 68 94 41 00 00 push $0x4194 - 1373: 6a 01 push $0x1 - 1375: e8 e8 25 00 00 call 3962 + 1325: 83 ec 08 sub $0x8,%esp + 1328: 68 bc 40 00 00 push $0x40bc + 132d: 6a 01 push $0x1 + 132f: e8 77 25 00 00 call 38ab exit(); - 137a: e8 9f 24 00 00 call 381e + 1334: e8 2a 24 00 00 call 3763 printf(1, "unlink unlinkread failed\n"); - 137f: 83 ec 08 sub $0x8,%esp - 1382: 68 ac 41 00 00 push $0x41ac - 1387: 6a 01 push $0x1 - 1389: e8 d4 25 00 00 call 3962 + 1339: 83 ec 08 sub $0x8,%esp + 133c: 68 d4 40 00 00 push $0x40d4 + 1341: 6a 01 push $0x1 + 1343: e8 63 25 00 00 call 38ab exit(); - 138e: e8 8b 24 00 00 call 381e + 1348: e8 16 24 00 00 call 3763 printf(1, "unlinkread read failed"); - 1393: 83 ec 08 sub $0x8,%esp - 1396: 68 ca 41 00 00 push $0x41ca - 139b: 6a 01 push $0x1 - 139d: e8 c0 25 00 00 call 3962 + 134d: 83 ec 08 sub $0x8,%esp + 1350: 68 f2 40 00 00 push $0x40f2 + 1355: 6a 01 push $0x1 + 1357: e8 4f 25 00 00 call 38ab exit(); - 13a2: e8 77 24 00 00 call 381e + 135c: e8 02 24 00 00 call 3763 printf(1, "unlinkread wrong data\n"); - 13a7: 83 ec 08 sub $0x8,%esp - 13aa: 68 e1 41 00 00 push $0x41e1 - 13af: 6a 01 push $0x1 - 13b1: e8 ac 25 00 00 call 3962 + 1361: 83 ec 08 sub $0x8,%esp + 1364: 68 09 41 00 00 push $0x4109 + 1369: 6a 01 push $0x1 + 136b: e8 3b 25 00 00 call 38ab exit(); - 13b6: e8 63 24 00 00 call 381e + 1370: e8 ee 23 00 00 call 3763 printf(1, "unlinkread write failed\n"); - 13bb: 83 ec 08 sub $0x8,%esp - 13be: 68 f8 41 00 00 push $0x41f8 - 13c3: 6a 01 push $0x1 - 13c5: e8 98 25 00 00 call 3962 + 1375: 83 ec 08 sub $0x8,%esp + 1378: 68 20 41 00 00 push $0x4120 + 137d: 6a 01 push $0x1 + 137f: e8 27 25 00 00 call 38ab exit(); - 13ca: e8 4f 24 00 00 call 381e + 1384: e8 da 23 00 00 call 3763 -000013cf : +00001389 : void linktest(void) { - 13cf: f3 0f 1e fb endbr32 - 13d3: 55 push %ebp - 13d4: 89 e5 mov %esp,%ebp - 13d6: 53 push %ebx - 13d7: 83 ec 0c sub $0xc,%esp + 1389: 55 push %ebp + 138a: 89 e5 mov %esp,%ebp + 138c: 53 push %ebx + 138d: 83 ec 0c sub $0xc,%esp int fd; printf(1, "linktest\n"); - 13da: 68 20 42 00 00 push $0x4220 - 13df: 6a 01 push $0x1 - 13e1: e8 7c 25 00 00 call 3962 + 1390: 68 48 41 00 00 push $0x4148 + 1395: 6a 01 push $0x1 + 1397: e8 0f 25 00 00 call 38ab unlink("lf1"); - 13e6: c7 04 24 2a 42 00 00 movl $0x422a,(%esp) - 13ed: e8 7c 24 00 00 call 386e + 139c: c7 04 24 52 41 00 00 movl $0x4152,(%esp) + 13a3: e8 0b 24 00 00 call 37b3 unlink("lf2"); - 13f2: c7 04 24 2e 42 00 00 movl $0x422e,(%esp) - 13f9: e8 70 24 00 00 call 386e + 13a8: c7 04 24 56 41 00 00 movl $0x4156,(%esp) + 13af: e8 ff 23 00 00 call 37b3 fd = open("lf1", O_CREATE|O_RDWR); - 13fe: 83 c4 08 add $0x8,%esp - 1401: 68 02 02 00 00 push $0x202 - 1406: 68 2a 42 00 00 push $0x422a - 140b: e8 4e 24 00 00 call 385e + 13b4: 83 c4 08 add $0x8,%esp + 13b7: 68 02 02 00 00 push $0x202 + 13bc: 68 52 41 00 00 push $0x4152 + 13c1: e8 dd 23 00 00 call 37a3 if(fd < 0){ - 1410: 83 c4 10 add $0x10,%esp - 1413: 85 c0 test %eax,%eax - 1415: 0f 88 2a 01 00 00 js 1545 - 141b: 89 c3 mov %eax,%ebx + 13c6: 83 c4 10 add $0x10,%esp + 13c9: 85 c0 test %eax,%eax + 13cb: 0f 88 2a 01 00 00 js 14fb + 13d1: 89 c3 mov %eax,%ebx printf(1, "create lf1 failed\n"); exit(); } if(write(fd, "hello", 5) != 5){ - 141d: 83 ec 04 sub $0x4,%esp - 1420: 6a 05 push $0x5 - 1422: 68 8e 41 00 00 push $0x418e - 1427: 50 push %eax - 1428: e8 11 24 00 00 call 383e - 142d: 83 c4 10 add $0x10,%esp - 1430: 83 f8 05 cmp $0x5,%eax - 1433: 0f 85 20 01 00 00 jne 1559 + 13d3: 83 ec 04 sub $0x4,%esp + 13d6: 6a 05 push $0x5 + 13d8: 68 b6 40 00 00 push $0x40b6 + 13dd: 50 push %eax + 13de: e8 a0 23 00 00 call 3783 + 13e3: 83 c4 10 add $0x10,%esp + 13e6: 83 f8 05 cmp $0x5,%eax + 13e9: 0f 85 20 01 00 00 jne 150f printf(1, "write lf1 failed\n"); exit(); } close(fd); - 1439: 83 ec 0c sub $0xc,%esp - 143c: 53 push %ebx - 143d: e8 04 24 00 00 call 3846 + 13ef: 83 ec 0c sub $0xc,%esp + 13f2: 53 push %ebx + 13f3: e8 93 23 00 00 call 378b if(link("lf1", "lf2") < 0){ - 1442: 83 c4 08 add $0x8,%esp - 1445: 68 2e 42 00 00 push $0x422e - 144a: 68 2a 42 00 00 push $0x422a - 144f: e8 2a 24 00 00 call 387e - 1454: 83 c4 10 add $0x10,%esp - 1457: 85 c0 test %eax,%eax - 1459: 0f 88 0e 01 00 00 js 156d + 13f8: 83 c4 08 add $0x8,%esp + 13fb: 68 56 41 00 00 push $0x4156 + 1400: 68 52 41 00 00 push $0x4152 + 1405: e8 b9 23 00 00 call 37c3 + 140a: 83 c4 10 add $0x10,%esp + 140d: 85 c0 test %eax,%eax + 140f: 0f 88 0e 01 00 00 js 1523 printf(1, "link lf1 lf2 failed\n"); exit(); } unlink("lf1"); - 145f: 83 ec 0c sub $0xc,%esp - 1462: 68 2a 42 00 00 push $0x422a - 1467: e8 02 24 00 00 call 386e + 1415: 83 ec 0c sub $0xc,%esp + 1418: 68 52 41 00 00 push $0x4152 + 141d: e8 91 23 00 00 call 37b3 if(open("lf1", 0) >= 0){ - 146c: 83 c4 08 add $0x8,%esp - 146f: 6a 00 push $0x0 - 1471: 68 2a 42 00 00 push $0x422a - 1476: e8 e3 23 00 00 call 385e - 147b: 83 c4 10 add $0x10,%esp - 147e: 85 c0 test %eax,%eax - 1480: 0f 89 fb 00 00 00 jns 1581 + 1422: 83 c4 08 add $0x8,%esp + 1425: 6a 00 push $0x0 + 1427: 68 52 41 00 00 push $0x4152 + 142c: e8 72 23 00 00 call 37a3 + 1431: 83 c4 10 add $0x10,%esp + 1434: 85 c0 test %eax,%eax + 1436: 0f 89 fb 00 00 00 jns 1537 printf(1, "unlinked lf1 but it is still there!\n"); exit(); } fd = open("lf2", 0); - 1486: 83 ec 08 sub $0x8,%esp - 1489: 6a 00 push $0x0 - 148b: 68 2e 42 00 00 push $0x422e - 1490: e8 c9 23 00 00 call 385e - 1495: 89 c3 mov %eax,%ebx + 143c: 83 ec 08 sub $0x8,%esp + 143f: 6a 00 push $0x0 + 1441: 68 56 41 00 00 push $0x4156 + 1446: e8 58 23 00 00 call 37a3 + 144b: 89 c3 mov %eax,%ebx if(fd < 0){ - 1497: 83 c4 10 add $0x10,%esp - 149a: 85 c0 test %eax,%eax - 149c: 0f 88 f3 00 00 00 js 1595 + 144d: 83 c4 10 add $0x10,%esp + 1450: 85 c0 test %eax,%eax + 1452: 0f 88 f3 00 00 00 js 154b printf(1, "open lf2 failed\n"); exit(); } if(read(fd, buf, sizeof(buf)) != 5){ - 14a2: 83 ec 04 sub $0x4,%esp - 14a5: 68 00 20 00 00 push $0x2000 - 14aa: 68 80 84 00 00 push $0x8480 - 14af: 50 push %eax - 14b0: e8 81 23 00 00 call 3836 - 14b5: 83 c4 10 add $0x10,%esp - 14b8: 83 f8 05 cmp $0x5,%eax - 14bb: 0f 85 e8 00 00 00 jne 15a9 + 1458: 83 ec 04 sub $0x4,%esp + 145b: 68 00 20 00 00 push $0x2000 + 1460: 68 60 83 00 00 push $0x8360 + 1465: 50 push %eax + 1466: e8 10 23 00 00 call 377b + 146b: 83 c4 10 add $0x10,%esp + 146e: 83 f8 05 cmp $0x5,%eax + 1471: 0f 85 e8 00 00 00 jne 155f printf(1, "read lf2 failed\n"); exit(); } close(fd); - 14c1: 83 ec 0c sub $0xc,%esp - 14c4: 53 push %ebx - 14c5: e8 7c 23 00 00 call 3846 + 1477: 83 ec 0c sub $0xc,%esp + 147a: 53 push %ebx + 147b: e8 0b 23 00 00 call 378b if(link("lf2", "lf2") >= 0){ - 14ca: 83 c4 08 add $0x8,%esp - 14cd: 68 2e 42 00 00 push $0x422e - 14d2: 68 2e 42 00 00 push $0x422e - 14d7: e8 a2 23 00 00 call 387e - 14dc: 83 c4 10 add $0x10,%esp - 14df: 85 c0 test %eax,%eax - 14e1: 0f 89 d6 00 00 00 jns 15bd + 1480: 83 c4 08 add $0x8,%esp + 1483: 68 56 41 00 00 push $0x4156 + 1488: 68 56 41 00 00 push $0x4156 + 148d: e8 31 23 00 00 call 37c3 + 1492: 83 c4 10 add $0x10,%esp + 1495: 85 c0 test %eax,%eax + 1497: 0f 89 d6 00 00 00 jns 1573 printf(1, "link lf2 lf2 succeeded! oops\n"); exit(); } unlink("lf2"); - 14e7: 83 ec 0c sub $0xc,%esp - 14ea: 68 2e 42 00 00 push $0x422e - 14ef: e8 7a 23 00 00 call 386e + 149d: 83 ec 0c sub $0xc,%esp + 14a0: 68 56 41 00 00 push $0x4156 + 14a5: e8 09 23 00 00 call 37b3 if(link("lf2", "lf1") >= 0){ - 14f4: 83 c4 08 add $0x8,%esp - 14f7: 68 2a 42 00 00 push $0x422a - 14fc: 68 2e 42 00 00 push $0x422e - 1501: e8 78 23 00 00 call 387e - 1506: 83 c4 10 add $0x10,%esp - 1509: 85 c0 test %eax,%eax - 150b: 0f 89 c0 00 00 00 jns 15d1 + 14aa: 83 c4 08 add $0x8,%esp + 14ad: 68 52 41 00 00 push $0x4152 + 14b2: 68 56 41 00 00 push $0x4156 + 14b7: e8 07 23 00 00 call 37c3 + 14bc: 83 c4 10 add $0x10,%esp + 14bf: 85 c0 test %eax,%eax + 14c1: 0f 89 c0 00 00 00 jns 1587 printf(1, "link non-existant succeeded! oops\n"); exit(); } if(link(".", "lf1") >= 0){ - 1511: 83 ec 08 sub $0x8,%esp - 1514: 68 2a 42 00 00 push $0x422a - 1519: 68 f2 44 00 00 push $0x44f2 - 151e: e8 5b 23 00 00 call 387e - 1523: 83 c4 10 add $0x10,%esp - 1526: 85 c0 test %eax,%eax - 1528: 0f 89 b7 00 00 00 jns 15e5 + 14c7: 83 ec 08 sub $0x8,%esp + 14ca: 68 52 41 00 00 push $0x4152 + 14cf: 68 1a 44 00 00 push $0x441a + 14d4: e8 ea 22 00 00 call 37c3 + 14d9: 83 c4 10 add $0x10,%esp + 14dc: 85 c0 test %eax,%eax + 14de: 0f 89 b7 00 00 00 jns 159b printf(1, "link . lf1 succeeded! oops\n"); exit(); } printf(1, "linktest ok\n"); - 152e: 83 ec 08 sub $0x8,%esp - 1531: 68 c8 42 00 00 push $0x42c8 - 1536: 6a 01 push $0x1 - 1538: e8 25 24 00 00 call 3962 + 14e4: 83 ec 08 sub $0x8,%esp + 14e7: 68 f0 41 00 00 push $0x41f0 + 14ec: 6a 01 push $0x1 + 14ee: e8 b8 23 00 00 call 38ab } - 153d: 83 c4 10 add $0x10,%esp - 1540: 8b 5d fc mov -0x4(%ebp),%ebx - 1543: c9 leave - 1544: c3 ret + 14f3: 83 c4 10 add $0x10,%esp + 14f6: 8b 5d fc mov -0x4(%ebp),%ebx + 14f9: c9 leave + 14fa: c3 ret printf(1, "create lf1 failed\n"); - 1545: 83 ec 08 sub $0x8,%esp - 1548: 68 32 42 00 00 push $0x4232 - 154d: 6a 01 push $0x1 - 154f: e8 0e 24 00 00 call 3962 + 14fb: 83 ec 08 sub $0x8,%esp + 14fe: 68 5a 41 00 00 push $0x415a + 1503: 6a 01 push $0x1 + 1505: e8 a1 23 00 00 call 38ab exit(); - 1554: e8 c5 22 00 00 call 381e + 150a: e8 54 22 00 00 call 3763 printf(1, "write lf1 failed\n"); - 1559: 83 ec 08 sub $0x8,%esp - 155c: 68 45 42 00 00 push $0x4245 - 1561: 6a 01 push $0x1 - 1563: e8 fa 23 00 00 call 3962 + 150f: 83 ec 08 sub $0x8,%esp + 1512: 68 6d 41 00 00 push $0x416d + 1517: 6a 01 push $0x1 + 1519: e8 8d 23 00 00 call 38ab exit(); - 1568: e8 b1 22 00 00 call 381e + 151e: e8 40 22 00 00 call 3763 printf(1, "link lf1 lf2 failed\n"); - 156d: 83 ec 08 sub $0x8,%esp - 1570: 68 57 42 00 00 push $0x4257 - 1575: 6a 01 push $0x1 - 1577: e8 e6 23 00 00 call 3962 + 1523: 83 ec 08 sub $0x8,%esp + 1526: 68 7f 41 00 00 push $0x417f + 152b: 6a 01 push $0x1 + 152d: e8 79 23 00 00 call 38ab exit(); - 157c: e8 9d 22 00 00 call 381e + 1532: e8 2c 22 00 00 call 3763 printf(1, "unlinked lf1 but it is still there!\n"); - 1581: 83 ec 08 sub $0x8,%esp - 1584: 68 38 4e 00 00 push $0x4e38 - 1589: 6a 01 push $0x1 - 158b: e8 d2 23 00 00 call 3962 + 1537: 83 ec 08 sub $0x8,%esp + 153a: 68 60 4d 00 00 push $0x4d60 + 153f: 6a 01 push $0x1 + 1541: e8 65 23 00 00 call 38ab exit(); - 1590: e8 89 22 00 00 call 381e + 1546: e8 18 22 00 00 call 3763 printf(1, "open lf2 failed\n"); - 1595: 83 ec 08 sub $0x8,%esp - 1598: 68 6c 42 00 00 push $0x426c - 159d: 6a 01 push $0x1 - 159f: e8 be 23 00 00 call 3962 + 154b: 83 ec 08 sub $0x8,%esp + 154e: 68 94 41 00 00 push $0x4194 + 1553: 6a 01 push $0x1 + 1555: e8 51 23 00 00 call 38ab exit(); - 15a4: e8 75 22 00 00 call 381e + 155a: e8 04 22 00 00 call 3763 printf(1, "read lf2 failed\n"); - 15a9: 83 ec 08 sub $0x8,%esp - 15ac: 68 7d 42 00 00 push $0x427d - 15b1: 6a 01 push $0x1 - 15b3: e8 aa 23 00 00 call 3962 + 155f: 83 ec 08 sub $0x8,%esp + 1562: 68 a5 41 00 00 push $0x41a5 + 1567: 6a 01 push $0x1 + 1569: e8 3d 23 00 00 call 38ab exit(); - 15b8: e8 61 22 00 00 call 381e + 156e: e8 f0 21 00 00 call 3763 printf(1, "link lf2 lf2 succeeded! oops\n"); - 15bd: 83 ec 08 sub $0x8,%esp - 15c0: 68 8e 42 00 00 push $0x428e - 15c5: 6a 01 push $0x1 - 15c7: e8 96 23 00 00 call 3962 + 1573: 83 ec 08 sub $0x8,%esp + 1576: 68 b6 41 00 00 push $0x41b6 + 157b: 6a 01 push $0x1 + 157d: e8 29 23 00 00 call 38ab exit(); - 15cc: e8 4d 22 00 00 call 381e + 1582: e8 dc 21 00 00 call 3763 printf(1, "link non-existant succeeded! oops\n"); - 15d1: 83 ec 08 sub $0x8,%esp - 15d4: 68 60 4e 00 00 push $0x4e60 - 15d9: 6a 01 push $0x1 - 15db: e8 82 23 00 00 call 3962 + 1587: 83 ec 08 sub $0x8,%esp + 158a: 68 88 4d 00 00 push $0x4d88 + 158f: 6a 01 push $0x1 + 1591: e8 15 23 00 00 call 38ab exit(); - 15e0: e8 39 22 00 00 call 381e + 1596: e8 c8 21 00 00 call 3763 printf(1, "link . lf1 succeeded! oops\n"); - 15e5: 83 ec 08 sub $0x8,%esp - 15e8: 68 ac 42 00 00 push $0x42ac - 15ed: 6a 01 push $0x1 - 15ef: e8 6e 23 00 00 call 3962 + 159b: 83 ec 08 sub $0x8,%esp + 159e: 68 d4 41 00 00 push $0x41d4 + 15a3: 6a 01 push $0x1 + 15a5: e8 01 23 00 00 call 38ab exit(); - 15f4: e8 25 22 00 00 call 381e + 15aa: e8 b4 21 00 00 call 3763 -000015f9 : +000015af : // test concurrent create/link/unlink of the same file void concreate(void) { - 15f9: f3 0f 1e fb endbr32 - 15fd: 55 push %ebp - 15fe: 89 e5 mov %esp,%ebp - 1600: 57 push %edi - 1601: 56 push %esi - 1602: 53 push %ebx - 1603: 83 ec 54 sub $0x54,%esp + 15af: 55 push %ebp + 15b0: 89 e5 mov %esp,%ebp + 15b2: 57 push %edi + 15b3: 56 push %esi + 15b4: 53 push %ebx + 15b5: 83 ec 54 sub $0x54,%esp struct { ushort inum; char name[14]; } de; printf(1, "concreate test\n"); - 1606: 68 d5 42 00 00 push $0x42d5 - 160b: 6a 01 push $0x1 - 160d: e8 50 23 00 00 call 3962 + 15b8: 68 fd 41 00 00 push $0x41fd + 15bd: 6a 01 push $0x1 + 15bf: e8 e7 22 00 00 call 38ab file[0] = 'C'; - 1612: c6 45 e5 43 movb $0x43,-0x1b(%ebp) + 15c4: c6 45 e5 43 movb $0x43,-0x1b(%ebp) file[2] = '\0'; - 1616: c6 45 e7 00 movb $0x0,-0x19(%ebp) - 161a: 83 c4 10 add $0x10,%esp + 15c8: c6 45 e7 00 movb $0x0,-0x19(%ebp) + 15cc: 83 c4 10 add $0x10,%esp for(i = 0; i < 40; i++){ - 161d: bb 00 00 00 00 mov $0x0,%ebx + 15cf: bb 00 00 00 00 mov $0x0,%ebx file[1] = '0' + i; unlink(file); - 1622: 8d 75 e5 lea -0x1b(%ebp),%esi + 15d4: 8d 75 e5 lea -0x1b(%ebp),%esi pid = fork(); if(pid && (i % 3) == 1){ - 1625: bf 56 55 55 55 mov $0x55555556,%edi - 162a: e9 75 02 00 00 jmp 18a4 + 15d7: bf 56 55 55 55 mov $0x55555556,%edi + 15dc: e9 75 02 00 00 jmp 1856 link("C0", file); - 162f: 83 ec 08 sub $0x8,%esp - 1632: 56 push %esi - 1633: 68 e5 42 00 00 push $0x42e5 - 1638: e8 41 22 00 00 call 387e - 163d: 83 c4 10 add $0x10,%esp - 1640: e9 4e 02 00 00 jmp 1893 + 15e1: 83 ec 08 sub $0x8,%esp + 15e4: 56 push %esi + 15e5: 68 0d 42 00 00 push $0x420d + 15ea: e8 d4 21 00 00 call 37c3 + 15ef: 83 c4 10 add $0x10,%esp + 15f2: e9 4e 02 00 00 jmp 1845 } else if(pid == 0 && (i % 5) == 1){ - 1645: ba 67 66 66 66 mov $0x66666667,%edx - 164a: 89 d8 mov %ebx,%eax - 164c: f7 ea imul %edx - 164e: d1 fa sar %edx - 1650: 89 d8 mov %ebx,%eax - 1652: c1 f8 1f sar $0x1f,%eax - 1655: 29 c2 sub %eax,%edx - 1657: 8d 04 92 lea (%edx,%edx,4),%eax - 165a: 29 c3 sub %eax,%ebx - 165c: 83 fb 01 cmp $0x1,%ebx - 165f: 74 34 je 1695 + 15f7: ba 67 66 66 66 mov $0x66666667,%edx + 15fc: 89 d8 mov %ebx,%eax + 15fe: f7 ea imul %edx + 1600: d1 fa sar %edx + 1602: 89 d8 mov %ebx,%eax + 1604: c1 f8 1f sar $0x1f,%eax + 1607: 29 c2 sub %eax,%edx + 1609: 8d 04 92 lea (%edx,%edx,4),%eax + 160c: 29 c3 sub %eax,%ebx + 160e: 83 fb 01 cmp $0x1,%ebx + 1611: 74 34 je 1647 link("C0", file); } else { fd = open(file, O_CREATE | O_RDWR); - 1661: 83 ec 08 sub $0x8,%esp - 1664: 68 02 02 00 00 push $0x202 - 1669: 8d 45 e5 lea -0x1b(%ebp),%eax - 166c: 50 push %eax - 166d: e8 ec 21 00 00 call 385e + 1613: 83 ec 08 sub $0x8,%esp + 1616: 68 02 02 00 00 push $0x202 + 161b: 8d 45 e5 lea -0x1b(%ebp),%eax + 161e: 50 push %eax + 161f: e8 7f 21 00 00 call 37a3 if(fd < 0){ - 1672: 83 c4 10 add $0x10,%esp - 1675: 85 c0 test %eax,%eax - 1677: 0f 89 f9 01 00 00 jns 1876 + 1624: 83 c4 10 add $0x10,%esp + 1627: 85 c0 test %eax,%eax + 1629: 0f 89 f9 01 00 00 jns 1828 printf(1, "concreate create %s failed\n", file); - 167d: 83 ec 04 sub $0x4,%esp - 1680: 8d 45 e5 lea -0x1b(%ebp),%eax - 1683: 50 push %eax - 1684: 68 e8 42 00 00 push $0x42e8 - 1689: 6a 01 push $0x1 - 168b: e8 d2 22 00 00 call 3962 + 162f: 83 ec 04 sub $0x4,%esp + 1632: 8d 45 e5 lea -0x1b(%ebp),%eax + 1635: 50 push %eax + 1636: 68 10 42 00 00 push $0x4210 + 163b: 6a 01 push $0x1 + 163d: e8 69 22 00 00 call 38ab exit(); - 1690: e8 89 21 00 00 call 381e + 1642: e8 1c 21 00 00 call 3763 link("C0", file); - 1695: 83 ec 08 sub $0x8,%esp - 1698: 8d 45 e5 lea -0x1b(%ebp),%eax - 169b: 50 push %eax - 169c: 68 e5 42 00 00 push $0x42e5 - 16a1: e8 d8 21 00 00 call 387e - 16a6: 83 c4 10 add $0x10,%esp + 1647: 83 ec 08 sub $0x8,%esp + 164a: 8d 45 e5 lea -0x1b(%ebp),%eax + 164d: 50 push %eax + 164e: 68 0d 42 00 00 push $0x420d + 1653: e8 6b 21 00 00 call 37c3 + 1658: 83 c4 10 add $0x10,%esp } close(fd); } if(pid == 0) exit(); - 16a9: e8 70 21 00 00 call 381e + 165b: e8 03 21 00 00 call 3763 else wait(); } memset(fa, 0, sizeof(fa)); - 16ae: 83 ec 04 sub $0x4,%esp - 16b1: 6a 28 push $0x28 - 16b3: 6a 00 push $0x0 - 16b5: 8d 45 bd lea -0x43(%ebp),%eax - 16b8: 50 push %eax - 16b9: e8 f9 1f 00 00 call 36b7 + 1660: 83 ec 04 sub $0x4,%esp + 1663: 6a 28 push $0x28 + 1665: 6a 00 push $0x0 + 1667: 8d 45 bd lea -0x43(%ebp),%eax + 166a: 50 push %eax + 166b: e8 a0 1f 00 00 call 3610 fd = open(".", 0); - 16be: 83 c4 08 add $0x8,%esp - 16c1: 6a 00 push $0x0 - 16c3: 68 f2 44 00 00 push $0x44f2 - 16c8: e8 91 21 00 00 call 385e - 16cd: 89 c3 mov %eax,%ebx + 1670: 83 c4 08 add $0x8,%esp + 1673: 6a 00 push $0x0 + 1675: 68 1a 44 00 00 push $0x441a + 167a: e8 24 21 00 00 call 37a3 + 167f: 89 c3 mov %eax,%ebx n = 0; while(read(fd, &de, sizeof(de)) > 0){ - 16cf: 83 c4 10 add $0x10,%esp + 1681: 83 c4 10 add $0x10,%esp n = 0; - 16d2: bf 00 00 00 00 mov $0x0,%edi + 1684: bf 00 00 00 00 mov $0x0,%edi while(read(fd, &de, sizeof(de)) > 0){ - 16d7: 8d 75 ac lea -0x54(%ebp),%esi - 16da: 83 ec 04 sub $0x4,%esp - 16dd: 6a 10 push $0x10 - 16df: 56 push %esi - 16e0: 53 push %ebx - 16e1: e8 50 21 00 00 call 3836 - 16e6: 83 c4 10 add $0x10,%esp - 16e9: 85 c0 test %eax,%eax - 16eb: 7e 60 jle 174d + 1689: 8d 75 ac lea -0x54(%ebp),%esi + 168c: 83 ec 04 sub $0x4,%esp + 168f: 6a 10 push $0x10 + 1691: 56 push %esi + 1692: 53 push %ebx + 1693: e8 e3 20 00 00 call 377b + 1698: 83 c4 10 add $0x10,%esp + 169b: 85 c0 test %eax,%eax + 169d: 7e 60 jle 16ff if(de.inum == 0) - 16ed: 66 83 7d ac 00 cmpw $0x0,-0x54(%ebp) - 16f2: 74 e6 je 16da + 169f: 66 83 7d ac 00 cmpw $0x0,-0x54(%ebp) + 16a4: 74 e6 je 168c continue; if(de.name[0] == 'C' && de.name[2] == '\0'){ - 16f4: 80 7d ae 43 cmpb $0x43,-0x52(%ebp) - 16f8: 75 e0 jne 16da - 16fa: 80 7d b0 00 cmpb $0x0,-0x50(%ebp) - 16fe: 75 da jne 16da + 16a6: 80 7d ae 43 cmpb $0x43,-0x52(%ebp) + 16aa: 75 e0 jne 168c + 16ac: 80 7d b0 00 cmpb $0x0,-0x50(%ebp) + 16b0: 75 da jne 168c i = de.name[1] - '0'; - 1700: 0f be 45 af movsbl -0x51(%ebp),%eax - 1704: 83 e8 30 sub $0x30,%eax + 16b2: 0f be 45 af movsbl -0x51(%ebp),%eax + 16b6: 83 e8 30 sub $0x30,%eax if(i < 0 || i >= sizeof(fa)){ - 1707: 83 f8 27 cmp $0x27,%eax - 170a: 77 11 ja 171d + 16b9: 83 f8 27 cmp $0x27,%eax + 16bc: 77 11 ja 16cf printf(1, "concreate weird file %s\n", de.name); exit(); } if(fa[i]){ - 170c: 80 7c 05 bd 00 cmpb $0x0,-0x43(%ebp,%eax,1) - 1711: 75 22 jne 1735 + 16be: 80 7c 05 bd 00 cmpb $0x0,-0x43(%ebp,%eax,1) + 16c3: 75 22 jne 16e7 printf(1, "concreate duplicate file %s\n", de.name); exit(); } fa[i] = 1; - 1713: c6 44 05 bd 01 movb $0x1,-0x43(%ebp,%eax,1) + 16c5: c6 44 05 bd 01 movb $0x1,-0x43(%ebp,%eax,1) n++; - 1718: 83 c7 01 add $0x1,%edi - 171b: eb bd jmp 16da + 16ca: 83 c7 01 add $0x1,%edi + 16cd: eb bd jmp 168c printf(1, "concreate weird file %s\n", de.name); - 171d: 83 ec 04 sub $0x4,%esp - 1720: 8d 45 ae lea -0x52(%ebp),%eax - 1723: 50 push %eax - 1724: 68 04 43 00 00 push $0x4304 - 1729: 6a 01 push $0x1 - 172b: e8 32 22 00 00 call 3962 + 16cf: 83 ec 04 sub $0x4,%esp + 16d2: 8d 45 ae lea -0x52(%ebp),%eax + 16d5: 50 push %eax + 16d6: 68 2c 42 00 00 push $0x422c + 16db: 6a 01 push $0x1 + 16dd: e8 c9 21 00 00 call 38ab exit(); - 1730: e8 e9 20 00 00 call 381e + 16e2: e8 7c 20 00 00 call 3763 printf(1, "concreate duplicate file %s\n", de.name); - 1735: 83 ec 04 sub $0x4,%esp - 1738: 8d 45 ae lea -0x52(%ebp),%eax - 173b: 50 push %eax - 173c: 68 1d 43 00 00 push $0x431d - 1741: 6a 01 push $0x1 - 1743: e8 1a 22 00 00 call 3962 + 16e7: 83 ec 04 sub $0x4,%esp + 16ea: 8d 45 ae lea -0x52(%ebp),%eax + 16ed: 50 push %eax + 16ee: 68 45 42 00 00 push $0x4245 + 16f3: 6a 01 push $0x1 + 16f5: e8 b1 21 00 00 call 38ab exit(); - 1748: e8 d1 20 00 00 call 381e + 16fa: e8 64 20 00 00 call 3763 } } close(fd); - 174d: 83 ec 0c sub $0xc,%esp - 1750: 53 push %ebx - 1751: e8 f0 20 00 00 call 3846 + 16ff: 83 ec 0c sub $0xc,%esp + 1702: 53 push %ebx + 1703: e8 83 20 00 00 call 378b if(n != 40){ - 1756: 83 c4 10 add $0x10,%esp - 1759: 83 ff 28 cmp $0x28,%edi - 175c: 75 0d jne 176b + 1708: 83 c4 10 add $0x10,%esp + 170b: 83 ff 28 cmp $0x28,%edi + 170e: 75 0d jne 171d printf(1, "concreate not enough files in directory listing\n"); exit(); } for(i = 0; i < 40; i++){ - 175e: bb 00 00 00 00 mov $0x0,%ebx + 1710: bb 00 00 00 00 mov $0x0,%ebx printf(1, "fork failed\n"); exit(); } if(((i % 3) == 0 && pid == 0) || ((i % 3) == 1 && pid != 0)){ close(open(file, 0)); - 1763: 8d 7d e5 lea -0x1b(%ebp),%edi - 1766: e9 88 00 00 00 jmp 17f3 + 1715: 8d 7d e5 lea -0x1b(%ebp),%edi + 1718: e9 88 00 00 00 jmp 17a5 printf(1, "concreate not enough files in directory listing\n"); - 176b: 83 ec 08 sub $0x8,%esp - 176e: 68 84 4e 00 00 push $0x4e84 - 1773: 6a 01 push $0x1 - 1775: e8 e8 21 00 00 call 3962 + 171d: 83 ec 08 sub $0x8,%esp + 1720: 68 ac 4d 00 00 push $0x4dac + 1725: 6a 01 push $0x1 + 1727: e8 7f 21 00 00 call 38ab exit(); - 177a: e8 9f 20 00 00 call 381e + 172c: e8 32 20 00 00 call 3763 printf(1, "fork failed\n"); - 177f: 83 ec 08 sub $0x8,%esp - 1782: 68 bd 4b 00 00 push $0x4bbd - 1787: 6a 01 push $0x1 - 1789: e8 d4 21 00 00 call 3962 + 1731: 83 ec 08 sub $0x8,%esp + 1734: 68 e5 4a 00 00 push $0x4ae5 + 1739: 6a 01 push $0x1 + 173b: e8 6b 21 00 00 call 38ab exit(); - 178e: e8 8b 20 00 00 call 381e + 1740: e8 1e 20 00 00 call 3763 close(open(file, 0)); - 1793: 83 ec 08 sub $0x8,%esp - 1796: 6a 00 push $0x0 - 1798: 57 push %edi - 1799: e8 c0 20 00 00 call 385e - 179e: 89 04 24 mov %eax,(%esp) - 17a1: e8 a0 20 00 00 call 3846 + 1745: 83 ec 08 sub $0x8,%esp + 1748: 6a 00 push $0x0 + 174a: 57 push %edi + 174b: e8 53 20 00 00 call 37a3 + 1750: 89 04 24 mov %eax,(%esp) + 1753: e8 33 20 00 00 call 378b close(open(file, 0)); - 17a6: 83 c4 08 add $0x8,%esp - 17a9: 6a 00 push $0x0 - 17ab: 57 push %edi - 17ac: e8 ad 20 00 00 call 385e - 17b1: 89 04 24 mov %eax,(%esp) - 17b4: e8 8d 20 00 00 call 3846 + 1758: 83 c4 08 add $0x8,%esp + 175b: 6a 00 push $0x0 + 175d: 57 push %edi + 175e: e8 40 20 00 00 call 37a3 + 1763: 89 04 24 mov %eax,(%esp) + 1766: e8 20 20 00 00 call 378b close(open(file, 0)); - 17b9: 83 c4 08 add $0x8,%esp - 17bc: 6a 00 push $0x0 - 17be: 57 push %edi - 17bf: e8 9a 20 00 00 call 385e - 17c4: 89 04 24 mov %eax,(%esp) - 17c7: e8 7a 20 00 00 call 3846 + 176b: 83 c4 08 add $0x8,%esp + 176e: 6a 00 push $0x0 + 1770: 57 push %edi + 1771: e8 2d 20 00 00 call 37a3 + 1776: 89 04 24 mov %eax,(%esp) + 1779: e8 0d 20 00 00 call 378b close(open(file, 0)); - 17cc: 83 c4 08 add $0x8,%esp - 17cf: 6a 00 push $0x0 - 17d1: 57 push %edi - 17d2: e8 87 20 00 00 call 385e - 17d7: 89 04 24 mov %eax,(%esp) - 17da: e8 67 20 00 00 call 3846 - 17df: 83 c4 10 add $0x10,%esp + 177e: 83 c4 08 add $0x8,%esp + 1781: 6a 00 push $0x0 + 1783: 57 push %edi + 1784: e8 1a 20 00 00 call 37a3 + 1789: 89 04 24 mov %eax,(%esp) + 178c: e8 fa 1f 00 00 call 378b + 1791: 83 c4 10 add $0x10,%esp unlink(file); unlink(file); unlink(file); unlink(file); } if(pid == 0) - 17e2: 85 f6 test %esi,%esi - 17e4: 74 74 je 185a + 1794: 85 f6 test %esi,%esi + 1796: 74 74 je 180c exit(); else wait(); - 17e6: e8 3b 20 00 00 call 3826 + 1798: e8 ce 1f 00 00 call 376b for(i = 0; i < 40; i++){ - 17eb: 83 c3 01 add $0x1,%ebx - 17ee: 83 fb 28 cmp $0x28,%ebx - 17f1: 74 6c je 185f + 179d: 83 c3 01 add $0x1,%ebx + 17a0: 83 fb 28 cmp $0x28,%ebx + 17a3: 74 6c je 1811 file[1] = '0' + i; - 17f3: 8d 43 30 lea 0x30(%ebx),%eax - 17f6: 88 45 e6 mov %al,-0x1a(%ebp) + 17a5: 8d 43 30 lea 0x30(%ebx),%eax + 17a8: 88 45 e6 mov %al,-0x1a(%ebp) pid = fork(); - 17f9: e8 18 20 00 00 call 3816 - 17fe: 89 c6 mov %eax,%esi + 17ab: e8 ab 1f 00 00 call 375b + 17b0: 89 c6 mov %eax,%esi if(pid < 0){ - 1800: 85 c0 test %eax,%eax - 1802: 0f 88 77 ff ff ff js 177f + 17b2: 85 c0 test %eax,%eax + 17b4: 0f 88 77 ff ff ff js 1731 if(((i % 3) == 0 && pid == 0) || - 1808: b8 56 55 55 55 mov $0x55555556,%eax - 180d: f7 eb imul %ebx - 180f: 89 d8 mov %ebx,%eax - 1811: c1 f8 1f sar $0x1f,%eax - 1814: 29 c2 sub %eax,%edx - 1816: 8d 04 52 lea (%edx,%edx,2),%eax - 1819: 89 da mov %ebx,%edx - 181b: 29 c2 sub %eax,%edx - 181d: 89 d0 mov %edx,%eax - 181f: 09 f0 or %esi,%eax - 1821: 0f 84 6c ff ff ff je 1793 + 17ba: b8 56 55 55 55 mov $0x55555556,%eax + 17bf: f7 eb imul %ebx + 17c1: 89 d8 mov %ebx,%eax + 17c3: c1 f8 1f sar $0x1f,%eax + 17c6: 29 c2 sub %eax,%edx + 17c8: 8d 04 52 lea (%edx,%edx,2),%eax + 17cb: 89 da mov %ebx,%edx + 17cd: 29 c2 sub %eax,%edx + 17cf: 89 d0 mov %edx,%eax + 17d1: 09 f0 or %esi,%eax + 17d3: 0f 84 6c ff ff ff je 1745 ((i % 3) == 1 && pid != 0)){ - 1827: 85 f6 test %esi,%esi - 1829: 74 09 je 1834 - 182b: 83 fa 01 cmp $0x1,%edx - 182e: 0f 84 5f ff ff ff je 1793 + 17d9: 85 f6 test %esi,%esi + 17db: 74 09 je 17e6 + 17dd: 83 fa 01 cmp $0x1,%edx + 17e0: 0f 84 5f ff ff ff je 1745 unlink(file); - 1834: 83 ec 0c sub $0xc,%esp - 1837: 57 push %edi - 1838: e8 31 20 00 00 call 386e + 17e6: 83 ec 0c sub $0xc,%esp + 17e9: 57 push %edi + 17ea: e8 c4 1f 00 00 call 37b3 unlink(file); - 183d: 89 3c 24 mov %edi,(%esp) - 1840: e8 29 20 00 00 call 386e + 17ef: 89 3c 24 mov %edi,(%esp) + 17f2: e8 bc 1f 00 00 call 37b3 unlink(file); - 1845: 89 3c 24 mov %edi,(%esp) - 1848: e8 21 20 00 00 call 386e + 17f7: 89 3c 24 mov %edi,(%esp) + 17fa: e8 b4 1f 00 00 call 37b3 unlink(file); - 184d: 89 3c 24 mov %edi,(%esp) - 1850: e8 19 20 00 00 call 386e - 1855: 83 c4 10 add $0x10,%esp - 1858: eb 88 jmp 17e2 + 17ff: 89 3c 24 mov %edi,(%esp) + 1802: e8 ac 1f 00 00 call 37b3 + 1807: 83 c4 10 add $0x10,%esp + 180a: eb 88 jmp 1794 exit(); - 185a: e8 bf 1f 00 00 call 381e + 180c: e8 52 1f 00 00 call 3763 } printf(1, "concreate ok\n"); - 185f: 83 ec 08 sub $0x8,%esp - 1862: 68 3a 43 00 00 push $0x433a - 1867: 6a 01 push $0x1 - 1869: e8 f4 20 00 00 call 3962 + 1811: 83 ec 08 sub $0x8,%esp + 1814: 68 62 42 00 00 push $0x4262 + 1819: 6a 01 push $0x1 + 181b: e8 8b 20 00 00 call 38ab } - 186e: 8d 65 f4 lea -0xc(%ebp),%esp - 1871: 5b pop %ebx - 1872: 5e pop %esi - 1873: 5f pop %edi - 1874: 5d pop %ebp - 1875: c3 ret + 1820: 8d 65 f4 lea -0xc(%ebp),%esp + 1823: 5b pop %ebx + 1824: 5e pop %esi + 1825: 5f pop %edi + 1826: 5d pop %ebp + 1827: c3 ret close(fd); - 1876: 83 ec 0c sub $0xc,%esp - 1879: 50 push %eax - 187a: e8 c7 1f 00 00 call 3846 - 187f: 83 c4 10 add $0x10,%esp - 1882: e9 22 fe ff ff jmp 16a9 - 1887: 83 ec 0c sub $0xc,%esp - 188a: 50 push %eax - 188b: e8 b6 1f 00 00 call 3846 - 1890: 83 c4 10 add $0x10,%esp + 1828: 83 ec 0c sub $0xc,%esp + 182b: 50 push %eax + 182c: e8 5a 1f 00 00 call 378b + 1831: 83 c4 10 add $0x10,%esp + 1834: e9 22 fe ff ff jmp 165b + 1839: 83 ec 0c sub $0xc,%esp + 183c: 50 push %eax + 183d: e8 49 1f 00 00 call 378b + 1842: 83 c4 10 add $0x10,%esp wait(); - 1893: e8 8e 1f 00 00 call 3826 + 1845: e8 21 1f 00 00 call 376b for(i = 0; i < 40; i++){ - 1898: 83 c3 01 add $0x1,%ebx - 189b: 83 fb 28 cmp $0x28,%ebx - 189e: 0f 84 0a fe ff ff je 16ae + 184a: 83 c3 01 add $0x1,%ebx + 184d: 83 fb 28 cmp $0x28,%ebx + 1850: 0f 84 0a fe ff ff je 1660 file[1] = '0' + i; - 18a4: 8d 43 30 lea 0x30(%ebx),%eax - 18a7: 88 45 e6 mov %al,-0x1a(%ebp) + 1856: 8d 43 30 lea 0x30(%ebx),%eax + 1859: 88 45 e6 mov %al,-0x1a(%ebp) unlink(file); - 18aa: 83 ec 0c sub $0xc,%esp - 18ad: 56 push %esi - 18ae: e8 bb 1f 00 00 call 386e + 185c: 83 ec 0c sub $0xc,%esp + 185f: 56 push %esi + 1860: e8 4e 1f 00 00 call 37b3 pid = fork(); - 18b3: e8 5e 1f 00 00 call 3816 + 1865: e8 f1 1e 00 00 call 375b if(pid && (i % 3) == 1){ - 18b8: 83 c4 10 add $0x10,%esp - 18bb: 85 c0 test %eax,%eax - 18bd: 0f 84 82 fd ff ff je 1645 - 18c3: 89 d8 mov %ebx,%eax - 18c5: f7 ef imul %edi - 18c7: 89 d8 mov %ebx,%eax - 18c9: c1 f8 1f sar $0x1f,%eax - 18cc: 29 c2 sub %eax,%edx - 18ce: 8d 04 52 lea (%edx,%edx,2),%eax - 18d1: 89 d9 mov %ebx,%ecx - 18d3: 29 c1 sub %eax,%ecx - 18d5: 83 f9 01 cmp $0x1,%ecx - 18d8: 0f 84 51 fd ff ff je 162f + 186a: 83 c4 10 add $0x10,%esp + 186d: 85 c0 test %eax,%eax + 186f: 0f 84 82 fd ff ff je 15f7 + 1875: 89 d8 mov %ebx,%eax + 1877: f7 ef imul %edi + 1879: 89 d8 mov %ebx,%eax + 187b: c1 f8 1f sar $0x1f,%eax + 187e: 29 c2 sub %eax,%edx + 1880: 8d 14 52 lea (%edx,%edx,2),%edx + 1883: 89 d8 mov %ebx,%eax + 1885: 29 d0 sub %edx,%eax + 1887: 83 f8 01 cmp $0x1,%eax + 188a: 0f 84 51 fd ff ff je 15e1 fd = open(file, O_CREATE | O_RDWR); - 18de: 83 ec 08 sub $0x8,%esp - 18e1: 68 02 02 00 00 push $0x202 - 18e6: 56 push %esi - 18e7: e8 72 1f 00 00 call 385e + 1890: 83 ec 08 sub $0x8,%esp + 1893: 68 02 02 00 00 push $0x202 + 1898: 56 push %esi + 1899: e8 05 1f 00 00 call 37a3 if(fd < 0){ - 18ec: 83 c4 10 add $0x10,%esp - 18ef: 85 c0 test %eax,%eax - 18f1: 79 94 jns 1887 - 18f3: e9 85 fd ff ff jmp 167d + 189e: 83 c4 10 add $0x10,%esp + 18a1: 85 c0 test %eax,%eax + 18a3: 79 94 jns 1839 + 18a5: e9 85 fd ff ff jmp 162f -000018f8 : +000018aa : // another concurrent link/unlink/create test, // to look for deadlocks. void linkunlink() { - 18f8: f3 0f 1e fb endbr32 - 18fc: 55 push %ebp - 18fd: 89 e5 mov %esp,%ebp - 18ff: 57 push %edi - 1900: 56 push %esi - 1901: 53 push %ebx - 1902: 83 ec 24 sub $0x24,%esp + 18aa: 55 push %ebp + 18ab: 89 e5 mov %esp,%ebp + 18ad: 57 push %edi + 18ae: 56 push %esi + 18af: 53 push %ebx + 18b0: 83 ec 24 sub $0x24,%esp int pid, i; printf(1, "linkunlink test\n"); - 1905: 68 48 43 00 00 push $0x4348 - 190a: 6a 01 push $0x1 - 190c: e8 51 20 00 00 call 3962 + 18b3: 68 70 42 00 00 push $0x4270 + 18b8: 6a 01 push $0x1 + 18ba: e8 ec 1f 00 00 call 38ab unlink("x"); - 1911: c7 04 24 d5 45 00 00 movl $0x45d5,(%esp) - 1918: e8 51 1f 00 00 call 386e + 18bf: c7 04 24 fd 44 00 00 movl $0x44fd,(%esp) + 18c6: e8 e8 1e 00 00 call 37b3 pid = fork(); - 191d: e8 f4 1e 00 00 call 3816 - 1922: 89 45 e4 mov %eax,-0x1c(%ebp) + 18cb: e8 8b 1e 00 00 call 375b + 18d0: 89 45 e4 mov %eax,-0x1c(%ebp) if(pid < 0){ - 1925: 83 c4 10 add $0x10,%esp - 1928: 85 c0 test %eax,%eax - 192a: 78 18 js 1944 + 18d3: 83 c4 10 add $0x10,%esp + 18d6: 85 c0 test %eax,%eax + 18d8: 78 18 js 18f2 printf(1, "fork failed\n"); exit(); } unsigned int x = (pid ? 1 : 97); - 192c: 83 7d e4 01 cmpl $0x1,-0x1c(%ebp) - 1930: 19 db sbb %ebx,%ebx - 1932: 83 e3 60 and $0x60,%ebx - 1935: 83 c3 01 add $0x1,%ebx - 1938: be 64 00 00 00 mov $0x64,%esi + 18da: 83 7d e4 01 cmpl $0x1,-0x1c(%ebp) + 18de: 19 db sbb %ebx,%ebx + 18e0: 83 e3 60 and $0x60,%ebx + 18e3: 83 c3 01 add $0x1,%ebx + 18e6: be 64 00 00 00 mov $0x64,%esi for(i = 0; i < 100; i++){ x = x * 1103515245 + 12345; if((x % 3) == 0){ - 193d: bf ab aa aa aa mov $0xaaaaaaab,%edi - 1942: eb 48 jmp 198c + 18eb: bf ab aa aa aa mov $0xaaaaaaab,%edi + 18f0: eb 36 jmp 1928 printf(1, "fork failed\n"); - 1944: 83 ec 08 sub $0x8,%esp - 1947: 68 bd 4b 00 00 push $0x4bbd - 194c: 6a 01 push $0x1 - 194e: e8 0f 20 00 00 call 3962 + 18f2: 83 ec 08 sub $0x8,%esp + 18f5: 68 e5 4a 00 00 push $0x4ae5 + 18fa: 6a 01 push $0x1 + 18fc: e8 aa 1f 00 00 call 38ab exit(); - 1953: e8 c6 1e 00 00 call 381e + 1901: e8 5d 1e 00 00 call 3763 close(open("x", O_RDWR | O_CREATE)); - 1958: 83 ec 08 sub $0x8,%esp - 195b: 68 02 02 00 00 push $0x202 - 1960: 68 d5 45 00 00 push $0x45d5 - 1965: e8 f4 1e 00 00 call 385e - 196a: 89 04 24 mov %eax,(%esp) - 196d: e8 d4 1e 00 00 call 3846 - 1972: 83 c4 10 add $0x10,%esp - 1975: eb 10 jmp 1987 - } else if((x % 3) == 1){ - link("cat", "x"); - } else { - unlink("x"); - 1977: 83 ec 0c sub $0xc,%esp - 197a: 68 d5 45 00 00 push $0x45d5 - 197f: e8 ea 1e 00 00 call 386e - 1984: 83 c4 10 add $0x10,%esp + 1906: 83 ec 08 sub $0x8,%esp + 1909: 68 02 02 00 00 push $0x202 + 190e: 68 fd 44 00 00 push $0x44fd + 1913: e8 8b 1e 00 00 call 37a3 + 1918: 89 04 24 mov %eax,(%esp) + 191b: e8 6b 1e 00 00 call 378b + 1920: 83 c4 10 add $0x10,%esp for(i = 0; i < 100; i++){ - 1987: 83 ee 01 sub $0x1,%esi - 198a: 74 3b je 19c7 + 1923: 83 ee 01 sub $0x1,%esi + 1926: 74 4d je 1975 x = x * 1103515245 + 12345; - 198c: 69 db 6d 4e c6 41 imul $0x41c64e6d,%ebx,%ebx - 1992: 81 c3 39 30 00 00 add $0x3039,%ebx + 1928: 69 db 6d 4e c6 41 imul $0x41c64e6d,%ebx,%ebx + 192e: 81 c3 39 30 00 00 add $0x3039,%ebx if((x % 3) == 0){ - 1998: 89 d8 mov %ebx,%eax - 199a: f7 e7 mul %edi - 199c: 89 d0 mov %edx,%eax - 199e: d1 e8 shr %eax - 19a0: 83 e2 fe and $0xfffffffe,%edx - 19a3: 01 c2 add %eax,%edx - 19a5: 89 d8 mov %ebx,%eax - 19a7: 29 d0 sub %edx,%eax - 19a9: 74 ad je 1958 + 1934: 89 d8 mov %ebx,%eax + 1936: f7 e7 mul %edi + 1938: 89 d0 mov %edx,%eax + 193a: d1 e8 shr %eax + 193c: 83 e2 fe and $0xfffffffe,%edx + 193f: 01 c2 add %eax,%edx + 1941: 89 d8 mov %ebx,%eax + 1943: 29 d0 sub %edx,%eax + 1945: 74 bf je 1906 } else if((x % 3) == 1){ - 19ab: 83 f8 01 cmp $0x1,%eax - 19ae: 75 c7 jne 1977 + 1947: 83 f8 01 cmp $0x1,%eax + 194a: 74 12 je 195e + link("cat", "x"); + } else { + unlink("x"); + 194c: 83 ec 0c sub $0xc,%esp + 194f: 68 fd 44 00 00 push $0x44fd + 1954: e8 5a 1e 00 00 call 37b3 + 1959: 83 c4 10 add $0x10,%esp + 195c: eb c5 jmp 1923 link("cat", "x"); - 19b0: 83 ec 08 sub $0x8,%esp - 19b3: 68 d5 45 00 00 push $0x45d5 - 19b8: 68 59 43 00 00 push $0x4359 - 19bd: e8 bc 1e 00 00 call 387e - 19c2: 83 c4 10 add $0x10,%esp - 19c5: eb c0 jmp 1987 + 195e: 83 ec 08 sub $0x8,%esp + 1961: 68 fd 44 00 00 push $0x44fd + 1966: 68 81 42 00 00 push $0x4281 + 196b: e8 53 1e 00 00 call 37c3 + 1970: 83 c4 10 add $0x10,%esp + 1973: eb ae jmp 1923 } } if(pid) - 19c7: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp) - 19cb: 74 1c je 19e9 + 1975: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp) + 1979: 74 1c je 1997 wait(); - 19cd: e8 54 1e 00 00 call 3826 + 197b: e8 eb 1d 00 00 call 376b else exit(); printf(1, "linkunlink ok\n"); - 19d2: 83 ec 08 sub $0x8,%esp - 19d5: 68 5d 43 00 00 push $0x435d - 19da: 6a 01 push $0x1 - 19dc: e8 81 1f 00 00 call 3962 + 1980: 83 ec 08 sub $0x8,%esp + 1983: 68 85 42 00 00 push $0x4285 + 1988: 6a 01 push $0x1 + 198a: e8 1c 1f 00 00 call 38ab } - 19e1: 8d 65 f4 lea -0xc(%ebp),%esp - 19e4: 5b pop %ebx - 19e5: 5e pop %esi - 19e6: 5f pop %edi - 19e7: 5d pop %ebp - 19e8: c3 ret + 198f: 8d 65 f4 lea -0xc(%ebp),%esp + 1992: 5b pop %ebx + 1993: 5e pop %esi + 1994: 5f pop %edi + 1995: 5d pop %ebp + 1996: c3 ret exit(); - 19e9: e8 30 1e 00 00 call 381e + 1997: e8 c7 1d 00 00 call 3763 -000019ee : +0000199c : // directory that uses indirect blocks void bigdir(void) { - 19ee: f3 0f 1e fb endbr32 - 19f2: 55 push %ebp - 19f3: 89 e5 mov %esp,%ebp - 19f5: 57 push %edi - 19f6: 56 push %esi - 19f7: 53 push %ebx - 19f8: 83 ec 24 sub $0x24,%esp + 199c: 55 push %ebp + 199d: 89 e5 mov %esp,%ebp + 199f: 57 push %edi + 19a0: 56 push %esi + 19a1: 53 push %ebx + 19a2: 83 ec 24 sub $0x24,%esp int i, fd; char name[10]; printf(1, "bigdir test\n"); - 19fb: 68 6c 43 00 00 push $0x436c - 1a00: 6a 01 push $0x1 - 1a02: e8 5b 1f 00 00 call 3962 + 19a5: 68 94 42 00 00 push $0x4294 + 19aa: 6a 01 push $0x1 + 19ac: e8 fa 1e 00 00 call 38ab unlink("bd"); - 1a07: c7 04 24 79 43 00 00 movl $0x4379,(%esp) - 1a0e: e8 5b 1e 00 00 call 386e + 19b1: c7 04 24 a1 42 00 00 movl $0x42a1,(%esp) + 19b8: e8 f6 1d 00 00 call 37b3 fd = open("bd", O_CREATE); - 1a13: 83 c4 08 add $0x8,%esp - 1a16: 68 00 02 00 00 push $0x200 - 1a1b: 68 79 43 00 00 push $0x4379 - 1a20: e8 39 1e 00 00 call 385e + 19bd: 83 c4 08 add $0x8,%esp + 19c0: 68 00 02 00 00 push $0x200 + 19c5: 68 a1 42 00 00 push $0x42a1 + 19ca: e8 d4 1d 00 00 call 37a3 if(fd < 0){ - 1a25: 83 c4 10 add $0x10,%esp - 1a28: 85 c0 test %eax,%eax - 1a2a: 0f 88 e0 00 00 00 js 1b10 + 19cf: 83 c4 10 add $0x10,%esp + 19d2: 85 c0 test %eax,%eax + 19d4: 0f 88 e0 00 00 00 js 1aba printf(1, "bigdir create failed\n"); exit(); } close(fd); - 1a30: 83 ec 0c sub $0xc,%esp - 1a33: 50 push %eax - 1a34: e8 0d 1e 00 00 call 3846 - 1a39: 83 c4 10 add $0x10,%esp + 19da: 83 ec 0c sub $0xc,%esp + 19dd: 50 push %eax + 19de: e8 a8 1d 00 00 call 378b + 19e3: 83 c4 10 add $0x10,%esp for(i = 0; i < 500; i++){ - 1a3c: be 00 00 00 00 mov $0x0,%esi + 19e6: be 00 00 00 00 mov $0x0,%esi name[0] = 'x'; name[1] = '0' + (i / 64); name[2] = '0' + (i % 64); name[3] = '\0'; if(link("bd", name) != 0){ - 1a41: 8d 7d de lea -0x22(%ebp),%edi + 19eb: 8d 7d de lea -0x22(%ebp),%edi name[0] = 'x'; - 1a44: c6 45 de 78 movb $0x78,-0x22(%ebp) + 19ee: c6 45 de 78 movb $0x78,-0x22(%ebp) name[1] = '0' + (i / 64); - 1a48: 8d 46 3f lea 0x3f(%esi),%eax - 1a4b: 85 f6 test %esi,%esi - 1a4d: 0f 49 c6 cmovns %esi,%eax - 1a50: c1 f8 06 sar $0x6,%eax - 1a53: 83 c0 30 add $0x30,%eax - 1a56: 88 45 df mov %al,-0x21(%ebp) + 19f2: 8d 46 3f lea 0x3f(%esi),%eax + 19f5: 85 f6 test %esi,%esi + 19f7: 0f 49 c6 cmovns %esi,%eax + 19fa: c1 f8 06 sar $0x6,%eax + 19fd: 83 c0 30 add $0x30,%eax + 1a00: 88 45 df mov %al,-0x21(%ebp) name[2] = '0' + (i % 64); - 1a59: 89 f2 mov %esi,%edx - 1a5b: c1 fa 1f sar $0x1f,%edx - 1a5e: c1 ea 1a shr $0x1a,%edx - 1a61: 8d 04 16 lea (%esi,%edx,1),%eax - 1a64: 83 e0 3f and $0x3f,%eax - 1a67: 29 d0 sub %edx,%eax - 1a69: 83 c0 30 add $0x30,%eax - 1a6c: 88 45 e0 mov %al,-0x20(%ebp) + 1a03: 89 f2 mov %esi,%edx + 1a05: c1 fa 1f sar $0x1f,%edx + 1a08: c1 ea 1a shr $0x1a,%edx + 1a0b: 8d 04 16 lea (%esi,%edx,1),%eax + 1a0e: 83 e0 3f and $0x3f,%eax + 1a11: 29 d0 sub %edx,%eax + 1a13: 83 c0 30 add $0x30,%eax + 1a16: 88 45 e0 mov %al,-0x20(%ebp) name[3] = '\0'; - 1a6f: c6 45 e1 00 movb $0x0,-0x1f(%ebp) + 1a19: c6 45 e1 00 movb $0x0,-0x1f(%ebp) if(link("bd", name) != 0){ - 1a73: 83 ec 08 sub $0x8,%esp - 1a76: 57 push %edi - 1a77: 68 79 43 00 00 push $0x4379 - 1a7c: e8 fd 1d 00 00 call 387e - 1a81: 89 c3 mov %eax,%ebx - 1a83: 83 c4 10 add $0x10,%esp - 1a86: 85 c0 test %eax,%eax - 1a88: 0f 85 96 00 00 00 jne 1b24 + 1a1d: 83 ec 08 sub $0x8,%esp + 1a20: 57 push %edi + 1a21: 68 a1 42 00 00 push $0x42a1 + 1a26: e8 98 1d 00 00 call 37c3 + 1a2b: 89 c3 mov %eax,%ebx + 1a2d: 83 c4 10 add $0x10,%esp + 1a30: 85 c0 test %eax,%eax + 1a32: 0f 85 96 00 00 00 jne 1ace for(i = 0; i < 500; i++){ - 1a8e: 83 c6 01 add $0x1,%esi - 1a91: 81 fe f4 01 00 00 cmp $0x1f4,%esi - 1a97: 75 ab jne 1a44 + 1a38: 83 c6 01 add $0x1,%esi + 1a3b: 81 fe f4 01 00 00 cmp $0x1f4,%esi + 1a41: 75 ab jne 19ee printf(1, "bigdir link failed\n"); exit(); } } unlink("bd"); - 1a99: 83 ec 0c sub $0xc,%esp - 1a9c: 68 79 43 00 00 push $0x4379 - 1aa1: e8 c8 1d 00 00 call 386e - 1aa6: 83 c4 10 add $0x10,%esp + 1a43: 83 ec 0c sub $0xc,%esp + 1a46: 68 a1 42 00 00 push $0x42a1 + 1a4b: e8 63 1d 00 00 call 37b3 + 1a50: 83 c4 10 add $0x10,%esp for(i = 0; i < 500; i++){ name[0] = 'x'; name[1] = '0' + (i / 64); name[2] = '0' + (i % 64); name[3] = '\0'; if(unlink(name) != 0){ - 1aa9: 8d 75 de lea -0x22(%ebp),%esi + 1a53: 8d 75 de lea -0x22(%ebp),%esi name[0] = 'x'; - 1aac: c6 45 de 78 movb $0x78,-0x22(%ebp) + 1a56: c6 45 de 78 movb $0x78,-0x22(%ebp) name[1] = '0' + (i / 64); - 1ab0: 8d 43 3f lea 0x3f(%ebx),%eax - 1ab3: 85 db test %ebx,%ebx - 1ab5: 0f 49 c3 cmovns %ebx,%eax - 1ab8: c1 f8 06 sar $0x6,%eax - 1abb: 83 c0 30 add $0x30,%eax - 1abe: 88 45 df mov %al,-0x21(%ebp) + 1a5a: 8d 43 3f lea 0x3f(%ebx),%eax + 1a5d: 85 db test %ebx,%ebx + 1a5f: 0f 49 c3 cmovns %ebx,%eax + 1a62: c1 f8 06 sar $0x6,%eax + 1a65: 83 c0 30 add $0x30,%eax + 1a68: 88 45 df mov %al,-0x21(%ebp) name[2] = '0' + (i % 64); - 1ac1: 89 da mov %ebx,%edx - 1ac3: c1 fa 1f sar $0x1f,%edx - 1ac6: c1 ea 1a shr $0x1a,%edx - 1ac9: 8d 04 13 lea (%ebx,%edx,1),%eax - 1acc: 83 e0 3f and $0x3f,%eax - 1acf: 29 d0 sub %edx,%eax - 1ad1: 83 c0 30 add $0x30,%eax - 1ad4: 88 45 e0 mov %al,-0x20(%ebp) + 1a6b: 89 da mov %ebx,%edx + 1a6d: c1 fa 1f sar $0x1f,%edx + 1a70: c1 ea 1a shr $0x1a,%edx + 1a73: 8d 04 13 lea (%ebx,%edx,1),%eax + 1a76: 83 e0 3f and $0x3f,%eax + 1a79: 29 d0 sub %edx,%eax + 1a7b: 83 c0 30 add $0x30,%eax + 1a7e: 88 45 e0 mov %al,-0x20(%ebp) name[3] = '\0'; - 1ad7: c6 45 e1 00 movb $0x0,-0x1f(%ebp) + 1a81: c6 45 e1 00 movb $0x0,-0x1f(%ebp) if(unlink(name) != 0){ - 1adb: 83 ec 0c sub $0xc,%esp - 1ade: 56 push %esi - 1adf: e8 8a 1d 00 00 call 386e - 1ae4: 83 c4 10 add $0x10,%esp - 1ae7: 85 c0 test %eax,%eax - 1ae9: 75 4d jne 1b38 + 1a85: 83 ec 0c sub $0xc,%esp + 1a88: 56 push %esi + 1a89: e8 25 1d 00 00 call 37b3 + 1a8e: 83 c4 10 add $0x10,%esp + 1a91: 85 c0 test %eax,%eax + 1a93: 75 4d jne 1ae2 for(i = 0; i < 500; i++){ - 1aeb: 83 c3 01 add $0x1,%ebx - 1aee: 81 fb f4 01 00 00 cmp $0x1f4,%ebx - 1af4: 75 b6 jne 1aac + 1a95: 83 c3 01 add $0x1,%ebx + 1a98: 81 fb f4 01 00 00 cmp $0x1f4,%ebx + 1a9e: 75 b6 jne 1a56 printf(1, "bigdir unlink failed"); exit(); } } printf(1, "bigdir ok\n"); - 1af6: 83 ec 08 sub $0x8,%esp - 1af9: 68 bb 43 00 00 push $0x43bb - 1afe: 6a 01 push $0x1 - 1b00: e8 5d 1e 00 00 call 3962 + 1aa0: 83 ec 08 sub $0x8,%esp + 1aa3: 68 e3 42 00 00 push $0x42e3 + 1aa8: 6a 01 push $0x1 + 1aaa: e8 fc 1d 00 00 call 38ab } - 1b05: 83 c4 10 add $0x10,%esp - 1b08: 8d 65 f4 lea -0xc(%ebp),%esp - 1b0b: 5b pop %ebx - 1b0c: 5e pop %esi - 1b0d: 5f pop %edi - 1b0e: 5d pop %ebp - 1b0f: c3 ret + 1aaf: 83 c4 10 add $0x10,%esp + 1ab2: 8d 65 f4 lea -0xc(%ebp),%esp + 1ab5: 5b pop %ebx + 1ab6: 5e pop %esi + 1ab7: 5f pop %edi + 1ab8: 5d pop %ebp + 1ab9: c3 ret printf(1, "bigdir create failed\n"); - 1b10: 83 ec 08 sub $0x8,%esp - 1b13: 68 7c 43 00 00 push $0x437c - 1b18: 6a 01 push $0x1 - 1b1a: e8 43 1e 00 00 call 3962 + 1aba: 83 ec 08 sub $0x8,%esp + 1abd: 68 a4 42 00 00 push $0x42a4 + 1ac2: 6a 01 push $0x1 + 1ac4: e8 e2 1d 00 00 call 38ab exit(); - 1b1f: e8 fa 1c 00 00 call 381e + 1ac9: e8 95 1c 00 00 call 3763 printf(1, "bigdir link failed\n"); - 1b24: 83 ec 08 sub $0x8,%esp - 1b27: 68 92 43 00 00 push $0x4392 - 1b2c: 6a 01 push $0x1 - 1b2e: e8 2f 1e 00 00 call 3962 + 1ace: 83 ec 08 sub $0x8,%esp + 1ad1: 68 ba 42 00 00 push $0x42ba + 1ad6: 6a 01 push $0x1 + 1ad8: e8 ce 1d 00 00 call 38ab exit(); - 1b33: e8 e6 1c 00 00 call 381e + 1add: e8 81 1c 00 00 call 3763 printf(1, "bigdir unlink failed"); - 1b38: 83 ec 08 sub $0x8,%esp - 1b3b: 68 a6 43 00 00 push $0x43a6 - 1b40: 6a 01 push $0x1 - 1b42: e8 1b 1e 00 00 call 3962 + 1ae2: 83 ec 08 sub $0x8,%esp + 1ae5: 68 ce 42 00 00 push $0x42ce + 1aea: 6a 01 push $0x1 + 1aec: e8 ba 1d 00 00 call 38ab exit(); - 1b47: e8 d2 1c 00 00 call 381e + 1af1: e8 6d 1c 00 00 call 3763 -00001b4c : +00001af6 : void subdir(void) { - 1b4c: f3 0f 1e fb endbr32 - 1b50: 55 push %ebp - 1b51: 89 e5 mov %esp,%ebp - 1b53: 53 push %ebx - 1b54: 83 ec 0c sub $0xc,%esp + 1af6: 55 push %ebp + 1af7: 89 e5 mov %esp,%ebp + 1af9: 53 push %ebx + 1afa: 83 ec 0c sub $0xc,%esp int fd, cc; printf(1, "subdir test\n"); - 1b57: 68 c6 43 00 00 push $0x43c6 - 1b5c: 6a 01 push $0x1 - 1b5e: e8 ff 1d 00 00 call 3962 + 1afd: 68 ee 42 00 00 push $0x42ee + 1b02: 6a 01 push $0x1 + 1b04: e8 a2 1d 00 00 call 38ab unlink("ff"); - 1b63: c7 04 24 4f 44 00 00 movl $0x444f,(%esp) - 1b6a: e8 ff 1c 00 00 call 386e + 1b09: c7 04 24 77 43 00 00 movl $0x4377,(%esp) + 1b10: e8 9e 1c 00 00 call 37b3 if(mkdir("dd") != 0){ - 1b6f: c7 04 24 ec 44 00 00 movl $0x44ec,(%esp) - 1b76: e8 0b 1d 00 00 call 3886 - 1b7b: 83 c4 10 add $0x10,%esp - 1b7e: 85 c0 test %eax,%eax - 1b80: 0f 85 14 04 00 00 jne 1f9a + 1b15: c7 04 24 14 44 00 00 movl $0x4414,(%esp) + 1b1c: e8 aa 1c 00 00 call 37cb + 1b21: 83 c4 10 add $0x10,%esp + 1b24: 85 c0 test %eax,%eax + 1b26: 0f 85 14 04 00 00 jne 1f40 printf(1, "subdir mkdir dd failed\n"); exit(); } fd = open("dd/ff", O_CREATE | O_RDWR); - 1b86: 83 ec 08 sub $0x8,%esp - 1b89: 68 02 02 00 00 push $0x202 - 1b8e: 68 25 44 00 00 push $0x4425 - 1b93: e8 c6 1c 00 00 call 385e - 1b98: 89 c3 mov %eax,%ebx + 1b2c: 83 ec 08 sub $0x8,%esp + 1b2f: 68 02 02 00 00 push $0x202 + 1b34: 68 4d 43 00 00 push $0x434d + 1b39: e8 65 1c 00 00 call 37a3 + 1b3e: 89 c3 mov %eax,%ebx if(fd < 0){ - 1b9a: 83 c4 10 add $0x10,%esp - 1b9d: 85 c0 test %eax,%eax - 1b9f: 0f 88 09 04 00 00 js 1fae + 1b40: 83 c4 10 add $0x10,%esp + 1b43: 85 c0 test %eax,%eax + 1b45: 0f 88 09 04 00 00 js 1f54 printf(1, "create dd/ff failed\n"); exit(); } write(fd, "ff", 2); - 1ba5: 83 ec 04 sub $0x4,%esp - 1ba8: 6a 02 push $0x2 - 1baa: 68 4f 44 00 00 push $0x444f - 1baf: 50 push %eax - 1bb0: e8 89 1c 00 00 call 383e + 1b4b: 83 ec 04 sub $0x4,%esp + 1b4e: 6a 02 push $0x2 + 1b50: 68 77 43 00 00 push $0x4377 + 1b55: 50 push %eax + 1b56: e8 28 1c 00 00 call 3783 close(fd); - 1bb5: 89 1c 24 mov %ebx,(%esp) - 1bb8: e8 89 1c 00 00 call 3846 + 1b5b: 89 1c 24 mov %ebx,(%esp) + 1b5e: e8 28 1c 00 00 call 378b if(unlink("dd") >= 0){ - 1bbd: c7 04 24 ec 44 00 00 movl $0x44ec,(%esp) - 1bc4: e8 a5 1c 00 00 call 386e - 1bc9: 83 c4 10 add $0x10,%esp - 1bcc: 85 c0 test %eax,%eax - 1bce: 0f 89 ee 03 00 00 jns 1fc2 + 1b63: c7 04 24 14 44 00 00 movl $0x4414,(%esp) + 1b6a: e8 44 1c 00 00 call 37b3 + 1b6f: 83 c4 10 add $0x10,%esp + 1b72: 85 c0 test %eax,%eax + 1b74: 0f 89 ee 03 00 00 jns 1f68 printf(1, "unlink dd (non-empty dir) succeeded!\n"); exit(); } if(mkdir("/dd/dd") != 0){ - 1bd4: 83 ec 0c sub $0xc,%esp - 1bd7: 68 00 44 00 00 push $0x4400 - 1bdc: e8 a5 1c 00 00 call 3886 - 1be1: 83 c4 10 add $0x10,%esp - 1be4: 85 c0 test %eax,%eax - 1be6: 0f 85 ea 03 00 00 jne 1fd6 + 1b7a: 83 ec 0c sub $0xc,%esp + 1b7d: 68 28 43 00 00 push $0x4328 + 1b82: e8 44 1c 00 00 call 37cb + 1b87: 83 c4 10 add $0x10,%esp + 1b8a: 85 c0 test %eax,%eax + 1b8c: 0f 85 ea 03 00 00 jne 1f7c printf(1, "subdir mkdir dd/dd failed\n"); exit(); } fd = open("dd/dd/ff", O_CREATE | O_RDWR); - 1bec: 83 ec 08 sub $0x8,%esp - 1bef: 68 02 02 00 00 push $0x202 - 1bf4: 68 22 44 00 00 push $0x4422 - 1bf9: e8 60 1c 00 00 call 385e - 1bfe: 89 c3 mov %eax,%ebx + 1b92: 83 ec 08 sub $0x8,%esp + 1b95: 68 02 02 00 00 push $0x202 + 1b9a: 68 4a 43 00 00 push $0x434a + 1b9f: e8 ff 1b 00 00 call 37a3 + 1ba4: 89 c3 mov %eax,%ebx if(fd < 0){ - 1c00: 83 c4 10 add $0x10,%esp - 1c03: 85 c0 test %eax,%eax - 1c05: 0f 88 df 03 00 00 js 1fea + 1ba6: 83 c4 10 add $0x10,%esp + 1ba9: 85 c0 test %eax,%eax + 1bab: 0f 88 df 03 00 00 js 1f90 printf(1, "create dd/dd/ff failed\n"); exit(); } write(fd, "FF", 2); - 1c0b: 83 ec 04 sub $0x4,%esp - 1c0e: 6a 02 push $0x2 - 1c10: 68 43 44 00 00 push $0x4443 - 1c15: 50 push %eax - 1c16: e8 23 1c 00 00 call 383e + 1bb1: 83 ec 04 sub $0x4,%esp + 1bb4: 6a 02 push $0x2 + 1bb6: 68 6b 43 00 00 push $0x436b + 1bbb: 50 push %eax + 1bbc: e8 c2 1b 00 00 call 3783 close(fd); - 1c1b: 89 1c 24 mov %ebx,(%esp) - 1c1e: e8 23 1c 00 00 call 3846 + 1bc1: 89 1c 24 mov %ebx,(%esp) + 1bc4: e8 c2 1b 00 00 call 378b fd = open("dd/dd/../ff", 0); - 1c23: 83 c4 08 add $0x8,%esp - 1c26: 6a 00 push $0x0 - 1c28: 68 46 44 00 00 push $0x4446 - 1c2d: e8 2c 1c 00 00 call 385e - 1c32: 89 c3 mov %eax,%ebx + 1bc9: 83 c4 08 add $0x8,%esp + 1bcc: 6a 00 push $0x0 + 1bce: 68 6e 43 00 00 push $0x436e + 1bd3: e8 cb 1b 00 00 call 37a3 + 1bd8: 89 c3 mov %eax,%ebx if(fd < 0){ - 1c34: 83 c4 10 add $0x10,%esp - 1c37: 85 c0 test %eax,%eax - 1c39: 0f 88 bf 03 00 00 js 1ffe + 1bda: 83 c4 10 add $0x10,%esp + 1bdd: 85 c0 test %eax,%eax + 1bdf: 0f 88 bf 03 00 00 js 1fa4 printf(1, "open dd/dd/../ff failed\n"); exit(); } cc = read(fd, buf, sizeof(buf)); - 1c3f: 83 ec 04 sub $0x4,%esp - 1c42: 68 00 20 00 00 push $0x2000 - 1c47: 68 80 84 00 00 push $0x8480 - 1c4c: 50 push %eax - 1c4d: e8 e4 1b 00 00 call 3836 + 1be5: 83 ec 04 sub $0x4,%esp + 1be8: 68 00 20 00 00 push $0x2000 + 1bed: 68 60 83 00 00 push $0x8360 + 1bf2: 50 push %eax + 1bf3: e8 83 1b 00 00 call 377b if(cc != 2 || buf[0] != 'f'){ - 1c52: 83 c4 10 add $0x10,%esp - 1c55: 83 f8 02 cmp $0x2,%eax - 1c58: 0f 85 b4 03 00 00 jne 2012 - 1c5e: 80 3d 80 84 00 00 66 cmpb $0x66,0x8480 - 1c65: 0f 85 a7 03 00 00 jne 2012 + 1bf8: 83 c4 10 add $0x10,%esp + 1bfb: 83 f8 02 cmp $0x2,%eax + 1bfe: 0f 85 b4 03 00 00 jne 1fb8 + 1c04: 80 3d 60 83 00 00 66 cmpb $0x66,0x8360 + 1c0b: 0f 85 a7 03 00 00 jne 1fb8 printf(1, "dd/dd/../ff wrong content\n"); exit(); } close(fd); - 1c6b: 83 ec 0c sub $0xc,%esp - 1c6e: 53 push %ebx - 1c6f: e8 d2 1b 00 00 call 3846 + 1c11: 83 ec 0c sub $0xc,%esp + 1c14: 53 push %ebx + 1c15: e8 71 1b 00 00 call 378b if(link("dd/dd/ff", "dd/dd/ffff") != 0){ - 1c74: 83 c4 08 add $0x8,%esp - 1c77: 68 86 44 00 00 push $0x4486 - 1c7c: 68 22 44 00 00 push $0x4422 - 1c81: e8 f8 1b 00 00 call 387e - 1c86: 83 c4 10 add $0x10,%esp - 1c89: 85 c0 test %eax,%eax - 1c8b: 0f 85 95 03 00 00 jne 2026 + 1c1a: 83 c4 08 add $0x8,%esp + 1c1d: 68 ae 43 00 00 push $0x43ae + 1c22: 68 4a 43 00 00 push $0x434a + 1c27: e8 97 1b 00 00 call 37c3 + 1c2c: 83 c4 10 add $0x10,%esp + 1c2f: 85 c0 test %eax,%eax + 1c31: 0f 85 95 03 00 00 jne 1fcc printf(1, "link dd/dd/ff dd/dd/ffff failed\n"); exit(); } if(unlink("dd/dd/ff") != 0){ - 1c91: 83 ec 0c sub $0xc,%esp - 1c94: 68 22 44 00 00 push $0x4422 - 1c99: e8 d0 1b 00 00 call 386e - 1c9e: 83 c4 10 add $0x10,%esp - 1ca1: 85 c0 test %eax,%eax - 1ca3: 0f 85 91 03 00 00 jne 203a + 1c37: 83 ec 0c sub $0xc,%esp + 1c3a: 68 4a 43 00 00 push $0x434a + 1c3f: e8 6f 1b 00 00 call 37b3 + 1c44: 83 c4 10 add $0x10,%esp + 1c47: 85 c0 test %eax,%eax + 1c49: 0f 85 91 03 00 00 jne 1fe0 printf(1, "unlink dd/dd/ff failed\n"); exit(); } if(open("dd/dd/ff", O_RDONLY) >= 0){ - 1ca9: 83 ec 08 sub $0x8,%esp - 1cac: 6a 00 push $0x0 - 1cae: 68 22 44 00 00 push $0x4422 - 1cb3: e8 a6 1b 00 00 call 385e - 1cb8: 83 c4 10 add $0x10,%esp - 1cbb: 85 c0 test %eax,%eax - 1cbd: 0f 89 8b 03 00 00 jns 204e + 1c4f: 83 ec 08 sub $0x8,%esp + 1c52: 6a 00 push $0x0 + 1c54: 68 4a 43 00 00 push $0x434a + 1c59: e8 45 1b 00 00 call 37a3 + 1c5e: 83 c4 10 add $0x10,%esp + 1c61: 85 c0 test %eax,%eax + 1c63: 0f 89 8b 03 00 00 jns 1ff4 printf(1, "open (unlinked) dd/dd/ff succeeded\n"); exit(); } if(chdir("dd") != 0){ - 1cc3: 83 ec 0c sub $0xc,%esp - 1cc6: 68 ec 44 00 00 push $0x44ec - 1ccb: e8 be 1b 00 00 call 388e - 1cd0: 83 c4 10 add $0x10,%esp - 1cd3: 85 c0 test %eax,%eax - 1cd5: 0f 85 87 03 00 00 jne 2062 + 1c69: 83 ec 0c sub $0xc,%esp + 1c6c: 68 14 44 00 00 push $0x4414 + 1c71: e8 5d 1b 00 00 call 37d3 + 1c76: 83 c4 10 add $0x10,%esp + 1c79: 85 c0 test %eax,%eax + 1c7b: 0f 85 87 03 00 00 jne 2008 printf(1, "chdir dd failed\n"); exit(); } if(chdir("dd/../../dd") != 0){ - 1cdb: 83 ec 0c sub $0xc,%esp - 1cde: 68 ba 44 00 00 push $0x44ba - 1ce3: e8 a6 1b 00 00 call 388e - 1ce8: 83 c4 10 add $0x10,%esp - 1ceb: 85 c0 test %eax,%eax - 1ced: 0f 85 83 03 00 00 jne 2076 + 1c81: 83 ec 0c sub $0xc,%esp + 1c84: 68 e2 43 00 00 push $0x43e2 + 1c89: e8 45 1b 00 00 call 37d3 + 1c8e: 83 c4 10 add $0x10,%esp + 1c91: 85 c0 test %eax,%eax + 1c93: 0f 85 83 03 00 00 jne 201c printf(1, "chdir dd/../../dd failed\n"); exit(); } if(chdir("dd/../../../dd") != 0){ - 1cf3: 83 ec 0c sub $0xc,%esp - 1cf6: 68 e0 44 00 00 push $0x44e0 - 1cfb: e8 8e 1b 00 00 call 388e - 1d00: 83 c4 10 add $0x10,%esp - 1d03: 85 c0 test %eax,%eax - 1d05: 0f 85 7f 03 00 00 jne 208a + 1c99: 83 ec 0c sub $0xc,%esp + 1c9c: 68 08 44 00 00 push $0x4408 + 1ca1: e8 2d 1b 00 00 call 37d3 + 1ca6: 83 c4 10 add $0x10,%esp + 1ca9: 85 c0 test %eax,%eax + 1cab: 0f 85 7f 03 00 00 jne 2030 printf(1, "chdir dd/../../dd failed\n"); exit(); } if(chdir("./..") != 0){ - 1d0b: 83 ec 0c sub $0xc,%esp - 1d0e: 68 ef 44 00 00 push $0x44ef - 1d13: e8 76 1b 00 00 call 388e - 1d18: 83 c4 10 add $0x10,%esp - 1d1b: 85 c0 test %eax,%eax - 1d1d: 0f 85 7b 03 00 00 jne 209e + 1cb1: 83 ec 0c sub $0xc,%esp + 1cb4: 68 17 44 00 00 push $0x4417 + 1cb9: e8 15 1b 00 00 call 37d3 + 1cbe: 83 c4 10 add $0x10,%esp + 1cc1: 85 c0 test %eax,%eax + 1cc3: 0f 85 7b 03 00 00 jne 2044 printf(1, "chdir ./.. failed\n"); exit(); } fd = open("dd/dd/ffff", 0); - 1d23: 83 ec 08 sub $0x8,%esp - 1d26: 6a 00 push $0x0 - 1d28: 68 86 44 00 00 push $0x4486 - 1d2d: e8 2c 1b 00 00 call 385e - 1d32: 89 c3 mov %eax,%ebx + 1cc9: 83 ec 08 sub $0x8,%esp + 1ccc: 6a 00 push $0x0 + 1cce: 68 ae 43 00 00 push $0x43ae + 1cd3: e8 cb 1a 00 00 call 37a3 + 1cd8: 89 c3 mov %eax,%ebx if(fd < 0){ - 1d34: 83 c4 10 add $0x10,%esp - 1d37: 85 c0 test %eax,%eax - 1d39: 0f 88 73 03 00 00 js 20b2 + 1cda: 83 c4 10 add $0x10,%esp + 1cdd: 85 c0 test %eax,%eax + 1cdf: 0f 88 73 03 00 00 js 2058 printf(1, "open dd/dd/ffff failed\n"); exit(); } if(read(fd, buf, sizeof(buf)) != 2){ - 1d3f: 83 ec 04 sub $0x4,%esp - 1d42: 68 00 20 00 00 push $0x2000 - 1d47: 68 80 84 00 00 push $0x8480 - 1d4c: 50 push %eax - 1d4d: e8 e4 1a 00 00 call 3836 - 1d52: 83 c4 10 add $0x10,%esp - 1d55: 83 f8 02 cmp $0x2,%eax - 1d58: 0f 85 68 03 00 00 jne 20c6 + 1ce5: 83 ec 04 sub $0x4,%esp + 1ce8: 68 00 20 00 00 push $0x2000 + 1ced: 68 60 83 00 00 push $0x8360 + 1cf2: 50 push %eax + 1cf3: e8 83 1a 00 00 call 377b + 1cf8: 83 c4 10 add $0x10,%esp + 1cfb: 83 f8 02 cmp $0x2,%eax + 1cfe: 0f 85 68 03 00 00 jne 206c printf(1, "read dd/dd/ffff wrong len\n"); exit(); } close(fd); - 1d5e: 83 ec 0c sub $0xc,%esp - 1d61: 53 push %ebx - 1d62: e8 df 1a 00 00 call 3846 + 1d04: 83 ec 0c sub $0xc,%esp + 1d07: 53 push %ebx + 1d08: e8 7e 1a 00 00 call 378b if(open("dd/dd/ff", O_RDONLY) >= 0){ - 1d67: 83 c4 08 add $0x8,%esp - 1d6a: 6a 00 push $0x0 - 1d6c: 68 22 44 00 00 push $0x4422 - 1d71: e8 e8 1a 00 00 call 385e - 1d76: 83 c4 10 add $0x10,%esp - 1d79: 85 c0 test %eax,%eax - 1d7b: 0f 89 59 03 00 00 jns 20da + 1d0d: 83 c4 08 add $0x8,%esp + 1d10: 6a 00 push $0x0 + 1d12: 68 4a 43 00 00 push $0x434a + 1d17: e8 87 1a 00 00 call 37a3 + 1d1c: 83 c4 10 add $0x10,%esp + 1d1f: 85 c0 test %eax,%eax + 1d21: 0f 89 59 03 00 00 jns 2080 printf(1, "open (unlinked) dd/dd/ff succeeded!\n"); exit(); } if(open("dd/ff/ff", O_CREATE|O_RDWR) >= 0){ - 1d81: 83 ec 08 sub $0x8,%esp - 1d84: 68 02 02 00 00 push $0x202 - 1d89: 68 3a 45 00 00 push $0x453a - 1d8e: e8 cb 1a 00 00 call 385e - 1d93: 83 c4 10 add $0x10,%esp - 1d96: 85 c0 test %eax,%eax - 1d98: 0f 89 50 03 00 00 jns 20ee + 1d27: 83 ec 08 sub $0x8,%esp + 1d2a: 68 02 02 00 00 push $0x202 + 1d2f: 68 62 44 00 00 push $0x4462 + 1d34: e8 6a 1a 00 00 call 37a3 + 1d39: 83 c4 10 add $0x10,%esp + 1d3c: 85 c0 test %eax,%eax + 1d3e: 0f 89 50 03 00 00 jns 2094 printf(1, "create dd/ff/ff succeeded!\n"); exit(); } if(open("dd/xx/ff", O_CREATE|O_RDWR) >= 0){ - 1d9e: 83 ec 08 sub $0x8,%esp - 1da1: 68 02 02 00 00 push $0x202 - 1da6: 68 5f 45 00 00 push $0x455f - 1dab: e8 ae 1a 00 00 call 385e - 1db0: 83 c4 10 add $0x10,%esp - 1db3: 85 c0 test %eax,%eax - 1db5: 0f 89 47 03 00 00 jns 2102 + 1d44: 83 ec 08 sub $0x8,%esp + 1d47: 68 02 02 00 00 push $0x202 + 1d4c: 68 87 44 00 00 push $0x4487 + 1d51: e8 4d 1a 00 00 call 37a3 + 1d56: 83 c4 10 add $0x10,%esp + 1d59: 85 c0 test %eax,%eax + 1d5b: 0f 89 47 03 00 00 jns 20a8 printf(1, "create dd/xx/ff succeeded!\n"); exit(); } if(open("dd", O_CREATE) >= 0){ - 1dbb: 83 ec 08 sub $0x8,%esp - 1dbe: 68 00 02 00 00 push $0x200 - 1dc3: 68 ec 44 00 00 push $0x44ec - 1dc8: e8 91 1a 00 00 call 385e - 1dcd: 83 c4 10 add $0x10,%esp - 1dd0: 85 c0 test %eax,%eax - 1dd2: 0f 89 3e 03 00 00 jns 2116 + 1d61: 83 ec 08 sub $0x8,%esp + 1d64: 68 00 02 00 00 push $0x200 + 1d69: 68 14 44 00 00 push $0x4414 + 1d6e: e8 30 1a 00 00 call 37a3 + 1d73: 83 c4 10 add $0x10,%esp + 1d76: 85 c0 test %eax,%eax + 1d78: 0f 89 3e 03 00 00 jns 20bc printf(1, "create dd succeeded!\n"); exit(); } if(open("dd", O_RDWR) >= 0){ - 1dd8: 83 ec 08 sub $0x8,%esp - 1ddb: 6a 02 push $0x2 - 1ddd: 68 ec 44 00 00 push $0x44ec - 1de2: e8 77 1a 00 00 call 385e - 1de7: 83 c4 10 add $0x10,%esp - 1dea: 85 c0 test %eax,%eax - 1dec: 0f 89 38 03 00 00 jns 212a + 1d7e: 83 ec 08 sub $0x8,%esp + 1d81: 6a 02 push $0x2 + 1d83: 68 14 44 00 00 push $0x4414 + 1d88: e8 16 1a 00 00 call 37a3 + 1d8d: 83 c4 10 add $0x10,%esp + 1d90: 85 c0 test %eax,%eax + 1d92: 0f 89 38 03 00 00 jns 20d0 printf(1, "open dd rdwr succeeded!\n"); exit(); } if(open("dd", O_WRONLY) >= 0){ - 1df2: 83 ec 08 sub $0x8,%esp - 1df5: 6a 01 push $0x1 - 1df7: 68 ec 44 00 00 push $0x44ec - 1dfc: e8 5d 1a 00 00 call 385e - 1e01: 83 c4 10 add $0x10,%esp - 1e04: 85 c0 test %eax,%eax - 1e06: 0f 89 32 03 00 00 jns 213e + 1d98: 83 ec 08 sub $0x8,%esp + 1d9b: 6a 01 push $0x1 + 1d9d: 68 14 44 00 00 push $0x4414 + 1da2: e8 fc 19 00 00 call 37a3 + 1da7: 83 c4 10 add $0x10,%esp + 1daa: 85 c0 test %eax,%eax + 1dac: 0f 89 32 03 00 00 jns 20e4 printf(1, "open dd wronly succeeded!\n"); exit(); } if(link("dd/ff/ff", "dd/dd/xx") == 0){ - 1e0c: 83 ec 08 sub $0x8,%esp - 1e0f: 68 ce 45 00 00 push $0x45ce - 1e14: 68 3a 45 00 00 push $0x453a - 1e19: e8 60 1a 00 00 call 387e - 1e1e: 83 c4 10 add $0x10,%esp - 1e21: 85 c0 test %eax,%eax - 1e23: 0f 84 29 03 00 00 je 2152 + 1db2: 83 ec 08 sub $0x8,%esp + 1db5: 68 f6 44 00 00 push $0x44f6 + 1dba: 68 62 44 00 00 push $0x4462 + 1dbf: e8 ff 19 00 00 call 37c3 + 1dc4: 83 c4 10 add $0x10,%esp + 1dc7: 85 c0 test %eax,%eax + 1dc9: 0f 84 29 03 00 00 je 20f8 printf(1, "link dd/ff/ff dd/dd/xx succeeded!\n"); exit(); } if(link("dd/xx/ff", "dd/dd/xx") == 0){ - 1e29: 83 ec 08 sub $0x8,%esp - 1e2c: 68 ce 45 00 00 push $0x45ce - 1e31: 68 5f 45 00 00 push $0x455f - 1e36: e8 43 1a 00 00 call 387e - 1e3b: 83 c4 10 add $0x10,%esp - 1e3e: 85 c0 test %eax,%eax - 1e40: 0f 84 20 03 00 00 je 2166 + 1dcf: 83 ec 08 sub $0x8,%esp + 1dd2: 68 f6 44 00 00 push $0x44f6 + 1dd7: 68 87 44 00 00 push $0x4487 + 1ddc: e8 e2 19 00 00 call 37c3 + 1de1: 83 c4 10 add $0x10,%esp + 1de4: 85 c0 test %eax,%eax + 1de6: 0f 84 20 03 00 00 je 210c printf(1, "link dd/xx/ff dd/dd/xx succeeded!\n"); exit(); } if(link("dd/ff", "dd/dd/ffff") == 0){ - 1e46: 83 ec 08 sub $0x8,%esp - 1e49: 68 86 44 00 00 push $0x4486 - 1e4e: 68 25 44 00 00 push $0x4425 - 1e53: e8 26 1a 00 00 call 387e - 1e58: 83 c4 10 add $0x10,%esp - 1e5b: 85 c0 test %eax,%eax - 1e5d: 0f 84 17 03 00 00 je 217a + 1dec: 83 ec 08 sub $0x8,%esp + 1def: 68 ae 43 00 00 push $0x43ae + 1df4: 68 4d 43 00 00 push $0x434d + 1df9: e8 c5 19 00 00 call 37c3 + 1dfe: 83 c4 10 add $0x10,%esp + 1e01: 85 c0 test %eax,%eax + 1e03: 0f 84 17 03 00 00 je 2120 printf(1, "link dd/ff dd/dd/ffff succeeded!\n"); exit(); } if(mkdir("dd/ff/ff") == 0){ - 1e63: 83 ec 0c sub $0xc,%esp - 1e66: 68 3a 45 00 00 push $0x453a - 1e6b: e8 16 1a 00 00 call 3886 - 1e70: 83 c4 10 add $0x10,%esp - 1e73: 85 c0 test %eax,%eax - 1e75: 0f 84 13 03 00 00 je 218e + 1e09: 83 ec 0c sub $0xc,%esp + 1e0c: 68 62 44 00 00 push $0x4462 + 1e11: e8 b5 19 00 00 call 37cb + 1e16: 83 c4 10 add $0x10,%esp + 1e19: 85 c0 test %eax,%eax + 1e1b: 0f 84 13 03 00 00 je 2134 printf(1, "mkdir dd/ff/ff succeeded!\n"); exit(); } if(mkdir("dd/xx/ff") == 0){ - 1e7b: 83 ec 0c sub $0xc,%esp - 1e7e: 68 5f 45 00 00 push $0x455f - 1e83: e8 fe 19 00 00 call 3886 - 1e88: 83 c4 10 add $0x10,%esp - 1e8b: 85 c0 test %eax,%eax - 1e8d: 0f 84 0f 03 00 00 je 21a2 + 1e21: 83 ec 0c sub $0xc,%esp + 1e24: 68 87 44 00 00 push $0x4487 + 1e29: e8 9d 19 00 00 call 37cb + 1e2e: 83 c4 10 add $0x10,%esp + 1e31: 85 c0 test %eax,%eax + 1e33: 0f 84 0f 03 00 00 je 2148 printf(1, "mkdir dd/xx/ff succeeded!\n"); exit(); } if(mkdir("dd/dd/ffff") == 0){ - 1e93: 83 ec 0c sub $0xc,%esp - 1e96: 68 86 44 00 00 push $0x4486 - 1e9b: e8 e6 19 00 00 call 3886 - 1ea0: 83 c4 10 add $0x10,%esp - 1ea3: 85 c0 test %eax,%eax - 1ea5: 0f 84 0b 03 00 00 je 21b6 + 1e39: 83 ec 0c sub $0xc,%esp + 1e3c: 68 ae 43 00 00 push $0x43ae + 1e41: e8 85 19 00 00 call 37cb + 1e46: 83 c4 10 add $0x10,%esp + 1e49: 85 c0 test %eax,%eax + 1e4b: 0f 84 0b 03 00 00 je 215c printf(1, "mkdir dd/dd/ffff succeeded!\n"); exit(); } if(unlink("dd/xx/ff") == 0){ - 1eab: 83 ec 0c sub $0xc,%esp - 1eae: 68 5f 45 00 00 push $0x455f - 1eb3: e8 b6 19 00 00 call 386e - 1eb8: 83 c4 10 add $0x10,%esp - 1ebb: 85 c0 test %eax,%eax - 1ebd: 0f 84 07 03 00 00 je 21ca + 1e51: 83 ec 0c sub $0xc,%esp + 1e54: 68 87 44 00 00 push $0x4487 + 1e59: e8 55 19 00 00 call 37b3 + 1e5e: 83 c4 10 add $0x10,%esp + 1e61: 85 c0 test %eax,%eax + 1e63: 0f 84 07 03 00 00 je 2170 printf(1, "unlink dd/xx/ff succeeded!\n"); exit(); } if(unlink("dd/ff/ff") == 0){ - 1ec3: 83 ec 0c sub $0xc,%esp - 1ec6: 68 3a 45 00 00 push $0x453a - 1ecb: e8 9e 19 00 00 call 386e - 1ed0: 83 c4 10 add $0x10,%esp - 1ed3: 85 c0 test %eax,%eax - 1ed5: 0f 84 03 03 00 00 je 21de + 1e69: 83 ec 0c sub $0xc,%esp + 1e6c: 68 62 44 00 00 push $0x4462 + 1e71: e8 3d 19 00 00 call 37b3 + 1e76: 83 c4 10 add $0x10,%esp + 1e79: 85 c0 test %eax,%eax + 1e7b: 0f 84 03 03 00 00 je 2184 printf(1, "unlink dd/ff/ff succeeded!\n"); exit(); } if(chdir("dd/ff") == 0){ - 1edb: 83 ec 0c sub $0xc,%esp - 1ede: 68 25 44 00 00 push $0x4425 - 1ee3: e8 a6 19 00 00 call 388e - 1ee8: 83 c4 10 add $0x10,%esp - 1eeb: 85 c0 test %eax,%eax - 1eed: 0f 84 ff 02 00 00 je 21f2 + 1e81: 83 ec 0c sub $0xc,%esp + 1e84: 68 4d 43 00 00 push $0x434d + 1e89: e8 45 19 00 00 call 37d3 + 1e8e: 83 c4 10 add $0x10,%esp + 1e91: 85 c0 test %eax,%eax + 1e93: 0f 84 ff 02 00 00 je 2198 printf(1, "chdir dd/ff succeeded!\n"); exit(); } if(chdir("dd/xx") == 0){ - 1ef3: 83 ec 0c sub $0xc,%esp - 1ef6: 68 d1 45 00 00 push $0x45d1 - 1efb: e8 8e 19 00 00 call 388e - 1f00: 83 c4 10 add $0x10,%esp - 1f03: 85 c0 test %eax,%eax - 1f05: 0f 84 fb 02 00 00 je 2206 + 1e99: 83 ec 0c sub $0xc,%esp + 1e9c: 68 f9 44 00 00 push $0x44f9 + 1ea1: e8 2d 19 00 00 call 37d3 + 1ea6: 83 c4 10 add $0x10,%esp + 1ea9: 85 c0 test %eax,%eax + 1eab: 0f 84 fb 02 00 00 je 21ac printf(1, "chdir dd/xx succeeded!\n"); exit(); } if(unlink("dd/dd/ffff") != 0){ - 1f0b: 83 ec 0c sub $0xc,%esp - 1f0e: 68 86 44 00 00 push $0x4486 - 1f13: e8 56 19 00 00 call 386e - 1f18: 83 c4 10 add $0x10,%esp - 1f1b: 85 c0 test %eax,%eax - 1f1d: 0f 85 f7 02 00 00 jne 221a + 1eb1: 83 ec 0c sub $0xc,%esp + 1eb4: 68 ae 43 00 00 push $0x43ae + 1eb9: e8 f5 18 00 00 call 37b3 + 1ebe: 83 c4 10 add $0x10,%esp + 1ec1: 85 c0 test %eax,%eax + 1ec3: 0f 85 f7 02 00 00 jne 21c0 printf(1, "unlink dd/dd/ff failed\n"); exit(); } if(unlink("dd/ff") != 0){ - 1f23: 83 ec 0c sub $0xc,%esp - 1f26: 68 25 44 00 00 push $0x4425 - 1f2b: e8 3e 19 00 00 call 386e - 1f30: 83 c4 10 add $0x10,%esp - 1f33: 85 c0 test %eax,%eax - 1f35: 0f 85 f3 02 00 00 jne 222e + 1ec9: 83 ec 0c sub $0xc,%esp + 1ecc: 68 4d 43 00 00 push $0x434d + 1ed1: e8 dd 18 00 00 call 37b3 + 1ed6: 83 c4 10 add $0x10,%esp + 1ed9: 85 c0 test %eax,%eax + 1edb: 0f 85 f3 02 00 00 jne 21d4 printf(1, "unlink dd/ff failed\n"); exit(); } if(unlink("dd") == 0){ - 1f3b: 83 ec 0c sub $0xc,%esp - 1f3e: 68 ec 44 00 00 push $0x44ec - 1f43: e8 26 19 00 00 call 386e - 1f48: 83 c4 10 add $0x10,%esp - 1f4b: 85 c0 test %eax,%eax - 1f4d: 0f 84 ef 02 00 00 je 2242 + 1ee1: 83 ec 0c sub $0xc,%esp + 1ee4: 68 14 44 00 00 push $0x4414 + 1ee9: e8 c5 18 00 00 call 37b3 + 1eee: 83 c4 10 add $0x10,%esp + 1ef1: 85 c0 test %eax,%eax + 1ef3: 0f 84 ef 02 00 00 je 21e8 printf(1, "unlink non-empty dd succeeded!\n"); exit(); } if(unlink("dd/dd") < 0){ - 1f53: 83 ec 0c sub $0xc,%esp - 1f56: 68 01 44 00 00 push $0x4401 - 1f5b: e8 0e 19 00 00 call 386e - 1f60: 83 c4 10 add $0x10,%esp - 1f63: 85 c0 test %eax,%eax - 1f65: 0f 88 eb 02 00 00 js 2256 + 1ef9: 83 ec 0c sub $0xc,%esp + 1efc: 68 29 43 00 00 push $0x4329 + 1f01: e8 ad 18 00 00 call 37b3 + 1f06: 83 c4 10 add $0x10,%esp + 1f09: 85 c0 test %eax,%eax + 1f0b: 0f 88 eb 02 00 00 js 21fc printf(1, "unlink dd/dd failed\n"); exit(); } if(unlink("dd") < 0){ - 1f6b: 83 ec 0c sub $0xc,%esp - 1f6e: 68 ec 44 00 00 push $0x44ec - 1f73: e8 f6 18 00 00 call 386e - 1f78: 83 c4 10 add $0x10,%esp - 1f7b: 85 c0 test %eax,%eax - 1f7d: 0f 88 e7 02 00 00 js 226a + 1f11: 83 ec 0c sub $0xc,%esp + 1f14: 68 14 44 00 00 push $0x4414 + 1f19: e8 95 18 00 00 call 37b3 + 1f1e: 83 c4 10 add $0x10,%esp + 1f21: 85 c0 test %eax,%eax + 1f23: 0f 88 e7 02 00 00 js 2210 printf(1, "unlink dd failed\n"); exit(); } printf(1, "subdir ok\n"); - 1f83: 83 ec 08 sub $0x8,%esp - 1f86: 68 ce 46 00 00 push $0x46ce - 1f8b: 6a 01 push $0x1 - 1f8d: e8 d0 19 00 00 call 3962 + 1f29: 83 ec 08 sub $0x8,%esp + 1f2c: 68 f6 45 00 00 push $0x45f6 + 1f31: 6a 01 push $0x1 + 1f33: e8 73 19 00 00 call 38ab } - 1f92: 83 c4 10 add $0x10,%esp - 1f95: 8b 5d fc mov -0x4(%ebp),%ebx - 1f98: c9 leave - 1f99: c3 ret + 1f38: 83 c4 10 add $0x10,%esp + 1f3b: 8b 5d fc mov -0x4(%ebp),%ebx + 1f3e: c9 leave + 1f3f: c3 ret printf(1, "subdir mkdir dd failed\n"); - 1f9a: 83 ec 08 sub $0x8,%esp - 1f9d: 68 d3 43 00 00 push $0x43d3 - 1fa2: 6a 01 push $0x1 - 1fa4: e8 b9 19 00 00 call 3962 + 1f40: 83 ec 08 sub $0x8,%esp + 1f43: 68 fb 42 00 00 push $0x42fb + 1f48: 6a 01 push $0x1 + 1f4a: e8 5c 19 00 00 call 38ab exit(); - 1fa9: e8 70 18 00 00 call 381e + 1f4f: e8 0f 18 00 00 call 3763 printf(1, "create dd/ff failed\n"); - 1fae: 83 ec 08 sub $0x8,%esp - 1fb1: 68 eb 43 00 00 push $0x43eb - 1fb6: 6a 01 push $0x1 - 1fb8: e8 a5 19 00 00 call 3962 + 1f54: 83 ec 08 sub $0x8,%esp + 1f57: 68 13 43 00 00 push $0x4313 + 1f5c: 6a 01 push $0x1 + 1f5e: e8 48 19 00 00 call 38ab exit(); - 1fbd: e8 5c 18 00 00 call 381e + 1f63: e8 fb 17 00 00 call 3763 printf(1, "unlink dd (non-empty dir) succeeded!\n"); - 1fc2: 83 ec 08 sub $0x8,%esp - 1fc5: 68 b8 4e 00 00 push $0x4eb8 - 1fca: 6a 01 push $0x1 - 1fcc: e8 91 19 00 00 call 3962 + 1f68: 83 ec 08 sub $0x8,%esp + 1f6b: 68 e0 4d 00 00 push $0x4de0 + 1f70: 6a 01 push $0x1 + 1f72: e8 34 19 00 00 call 38ab exit(); - 1fd1: e8 48 18 00 00 call 381e + 1f77: e8 e7 17 00 00 call 3763 printf(1, "subdir mkdir dd/dd failed\n"); - 1fd6: 83 ec 08 sub $0x8,%esp - 1fd9: 68 07 44 00 00 push $0x4407 - 1fde: 6a 01 push $0x1 - 1fe0: e8 7d 19 00 00 call 3962 + 1f7c: 83 ec 08 sub $0x8,%esp + 1f7f: 68 2f 43 00 00 push $0x432f + 1f84: 6a 01 push $0x1 + 1f86: e8 20 19 00 00 call 38ab exit(); - 1fe5: e8 34 18 00 00 call 381e + 1f8b: e8 d3 17 00 00 call 3763 printf(1, "create dd/dd/ff failed\n"); - 1fea: 83 ec 08 sub $0x8,%esp - 1fed: 68 2b 44 00 00 push $0x442b - 1ff2: 6a 01 push $0x1 - 1ff4: e8 69 19 00 00 call 3962 + 1f90: 83 ec 08 sub $0x8,%esp + 1f93: 68 53 43 00 00 push $0x4353 + 1f98: 6a 01 push $0x1 + 1f9a: e8 0c 19 00 00 call 38ab exit(); - 1ff9: e8 20 18 00 00 call 381e + 1f9f: e8 bf 17 00 00 call 3763 printf(1, "open dd/dd/../ff failed\n"); - 1ffe: 83 ec 08 sub $0x8,%esp - 2001: 68 52 44 00 00 push $0x4452 - 2006: 6a 01 push $0x1 - 2008: e8 55 19 00 00 call 3962 + 1fa4: 83 ec 08 sub $0x8,%esp + 1fa7: 68 7a 43 00 00 push $0x437a + 1fac: 6a 01 push $0x1 + 1fae: e8 f8 18 00 00 call 38ab exit(); - 200d: e8 0c 18 00 00 call 381e + 1fb3: e8 ab 17 00 00 call 3763 printf(1, "dd/dd/../ff wrong content\n"); - 2012: 83 ec 08 sub $0x8,%esp - 2015: 68 6b 44 00 00 push $0x446b - 201a: 6a 01 push $0x1 - 201c: e8 41 19 00 00 call 3962 + 1fb8: 83 ec 08 sub $0x8,%esp + 1fbb: 68 93 43 00 00 push $0x4393 + 1fc0: 6a 01 push $0x1 + 1fc2: e8 e4 18 00 00 call 38ab exit(); - 2021: e8 f8 17 00 00 call 381e + 1fc7: e8 97 17 00 00 call 3763 printf(1, "link dd/dd/ff dd/dd/ffff failed\n"); - 2026: 83 ec 08 sub $0x8,%esp - 2029: 68 e0 4e 00 00 push $0x4ee0 - 202e: 6a 01 push $0x1 - 2030: e8 2d 19 00 00 call 3962 + 1fcc: 83 ec 08 sub $0x8,%esp + 1fcf: 68 08 4e 00 00 push $0x4e08 + 1fd4: 6a 01 push $0x1 + 1fd6: e8 d0 18 00 00 call 38ab exit(); - 2035: e8 e4 17 00 00 call 381e + 1fdb: e8 83 17 00 00 call 3763 printf(1, "unlink dd/dd/ff failed\n"); - 203a: 83 ec 08 sub $0x8,%esp - 203d: 68 91 44 00 00 push $0x4491 - 2042: 6a 01 push $0x1 - 2044: e8 19 19 00 00 call 3962 + 1fe0: 83 ec 08 sub $0x8,%esp + 1fe3: 68 b9 43 00 00 push $0x43b9 + 1fe8: 6a 01 push $0x1 + 1fea: e8 bc 18 00 00 call 38ab exit(); - 2049: e8 d0 17 00 00 call 381e + 1fef: e8 6f 17 00 00 call 3763 printf(1, "open (unlinked) dd/dd/ff succeeded\n"); - 204e: 83 ec 08 sub $0x8,%esp - 2051: 68 04 4f 00 00 push $0x4f04 - 2056: 6a 01 push $0x1 - 2058: e8 05 19 00 00 call 3962 + 1ff4: 83 ec 08 sub $0x8,%esp + 1ff7: 68 2c 4e 00 00 push $0x4e2c + 1ffc: 6a 01 push $0x1 + 1ffe: e8 a8 18 00 00 call 38ab exit(); - 205d: e8 bc 17 00 00 call 381e + 2003: e8 5b 17 00 00 call 3763 printf(1, "chdir dd failed\n"); - 2062: 83 ec 08 sub $0x8,%esp - 2065: 68 a9 44 00 00 push $0x44a9 - 206a: 6a 01 push $0x1 - 206c: e8 f1 18 00 00 call 3962 + 2008: 83 ec 08 sub $0x8,%esp + 200b: 68 d1 43 00 00 push $0x43d1 + 2010: 6a 01 push $0x1 + 2012: e8 94 18 00 00 call 38ab exit(); - 2071: e8 a8 17 00 00 call 381e + 2017: e8 47 17 00 00 call 3763 printf(1, "chdir dd/../../dd failed\n"); - 2076: 83 ec 08 sub $0x8,%esp - 2079: 68 c6 44 00 00 push $0x44c6 - 207e: 6a 01 push $0x1 - 2080: e8 dd 18 00 00 call 3962 + 201c: 83 ec 08 sub $0x8,%esp + 201f: 68 ee 43 00 00 push $0x43ee + 2024: 6a 01 push $0x1 + 2026: e8 80 18 00 00 call 38ab exit(); - 2085: e8 94 17 00 00 call 381e + 202b: e8 33 17 00 00 call 3763 printf(1, "chdir dd/../../dd failed\n"); - 208a: 83 ec 08 sub $0x8,%esp - 208d: 68 c6 44 00 00 push $0x44c6 - 2092: 6a 01 push $0x1 - 2094: e8 c9 18 00 00 call 3962 + 2030: 83 ec 08 sub $0x8,%esp + 2033: 68 ee 43 00 00 push $0x43ee + 2038: 6a 01 push $0x1 + 203a: e8 6c 18 00 00 call 38ab exit(); - 2099: e8 80 17 00 00 call 381e + 203f: e8 1f 17 00 00 call 3763 printf(1, "chdir ./.. failed\n"); - 209e: 83 ec 08 sub $0x8,%esp - 20a1: 68 f4 44 00 00 push $0x44f4 - 20a6: 6a 01 push $0x1 - 20a8: e8 b5 18 00 00 call 3962 + 2044: 83 ec 08 sub $0x8,%esp + 2047: 68 1c 44 00 00 push $0x441c + 204c: 6a 01 push $0x1 + 204e: e8 58 18 00 00 call 38ab exit(); - 20ad: e8 6c 17 00 00 call 381e + 2053: e8 0b 17 00 00 call 3763 printf(1, "open dd/dd/ffff failed\n"); - 20b2: 83 ec 08 sub $0x8,%esp - 20b5: 68 07 45 00 00 push $0x4507 - 20ba: 6a 01 push $0x1 - 20bc: e8 a1 18 00 00 call 3962 + 2058: 83 ec 08 sub $0x8,%esp + 205b: 68 2f 44 00 00 push $0x442f + 2060: 6a 01 push $0x1 + 2062: e8 44 18 00 00 call 38ab exit(); - 20c1: e8 58 17 00 00 call 381e + 2067: e8 f7 16 00 00 call 3763 printf(1, "read dd/dd/ffff wrong len\n"); - 20c6: 83 ec 08 sub $0x8,%esp - 20c9: 68 1f 45 00 00 push $0x451f - 20ce: 6a 01 push $0x1 - 20d0: e8 8d 18 00 00 call 3962 + 206c: 83 ec 08 sub $0x8,%esp + 206f: 68 47 44 00 00 push $0x4447 + 2074: 6a 01 push $0x1 + 2076: e8 30 18 00 00 call 38ab exit(); - 20d5: e8 44 17 00 00 call 381e + 207b: e8 e3 16 00 00 call 3763 printf(1, "open (unlinked) dd/dd/ff succeeded!\n"); - 20da: 83 ec 08 sub $0x8,%esp - 20dd: 68 28 4f 00 00 push $0x4f28 - 20e2: 6a 01 push $0x1 - 20e4: e8 79 18 00 00 call 3962 + 2080: 83 ec 08 sub $0x8,%esp + 2083: 68 50 4e 00 00 push $0x4e50 + 2088: 6a 01 push $0x1 + 208a: e8 1c 18 00 00 call 38ab exit(); - 20e9: e8 30 17 00 00 call 381e + 208f: e8 cf 16 00 00 call 3763 printf(1, "create dd/ff/ff succeeded!\n"); - 20ee: 83 ec 08 sub $0x8,%esp - 20f1: 68 43 45 00 00 push $0x4543 - 20f6: 6a 01 push $0x1 - 20f8: e8 65 18 00 00 call 3962 + 2094: 83 ec 08 sub $0x8,%esp + 2097: 68 6b 44 00 00 push $0x446b + 209c: 6a 01 push $0x1 + 209e: e8 08 18 00 00 call 38ab exit(); - 20fd: e8 1c 17 00 00 call 381e + 20a3: e8 bb 16 00 00 call 3763 printf(1, "create dd/xx/ff succeeded!\n"); - 2102: 83 ec 08 sub $0x8,%esp - 2105: 68 68 45 00 00 push $0x4568 - 210a: 6a 01 push $0x1 - 210c: e8 51 18 00 00 call 3962 + 20a8: 83 ec 08 sub $0x8,%esp + 20ab: 68 90 44 00 00 push $0x4490 + 20b0: 6a 01 push $0x1 + 20b2: e8 f4 17 00 00 call 38ab exit(); - 2111: e8 08 17 00 00 call 381e + 20b7: e8 a7 16 00 00 call 3763 printf(1, "create dd succeeded!\n"); - 2116: 83 ec 08 sub $0x8,%esp - 2119: 68 84 45 00 00 push $0x4584 - 211e: 6a 01 push $0x1 - 2120: e8 3d 18 00 00 call 3962 + 20bc: 83 ec 08 sub $0x8,%esp + 20bf: 68 ac 44 00 00 push $0x44ac + 20c4: 6a 01 push $0x1 + 20c6: e8 e0 17 00 00 call 38ab exit(); - 2125: e8 f4 16 00 00 call 381e + 20cb: e8 93 16 00 00 call 3763 printf(1, "open dd rdwr succeeded!\n"); - 212a: 83 ec 08 sub $0x8,%esp - 212d: 68 9a 45 00 00 push $0x459a - 2132: 6a 01 push $0x1 - 2134: e8 29 18 00 00 call 3962 + 20d0: 83 ec 08 sub $0x8,%esp + 20d3: 68 c2 44 00 00 push $0x44c2 + 20d8: 6a 01 push $0x1 + 20da: e8 cc 17 00 00 call 38ab exit(); - 2139: e8 e0 16 00 00 call 381e + 20df: e8 7f 16 00 00 call 3763 printf(1, "open dd wronly succeeded!\n"); - 213e: 83 ec 08 sub $0x8,%esp - 2141: 68 b3 45 00 00 push $0x45b3 - 2146: 6a 01 push $0x1 - 2148: e8 15 18 00 00 call 3962 + 20e4: 83 ec 08 sub $0x8,%esp + 20e7: 68 db 44 00 00 push $0x44db + 20ec: 6a 01 push $0x1 + 20ee: e8 b8 17 00 00 call 38ab exit(); - 214d: e8 cc 16 00 00 call 381e + 20f3: e8 6b 16 00 00 call 3763 printf(1, "link dd/ff/ff dd/dd/xx succeeded!\n"); - 2152: 83 ec 08 sub $0x8,%esp - 2155: 68 50 4f 00 00 push $0x4f50 - 215a: 6a 01 push $0x1 - 215c: e8 01 18 00 00 call 3962 + 20f8: 83 ec 08 sub $0x8,%esp + 20fb: 68 78 4e 00 00 push $0x4e78 + 2100: 6a 01 push $0x1 + 2102: e8 a4 17 00 00 call 38ab exit(); - 2161: e8 b8 16 00 00 call 381e + 2107: e8 57 16 00 00 call 3763 printf(1, "link dd/xx/ff dd/dd/xx succeeded!\n"); - 2166: 83 ec 08 sub $0x8,%esp - 2169: 68 74 4f 00 00 push $0x4f74 - 216e: 6a 01 push $0x1 - 2170: e8 ed 17 00 00 call 3962 + 210c: 83 ec 08 sub $0x8,%esp + 210f: 68 9c 4e 00 00 push $0x4e9c + 2114: 6a 01 push $0x1 + 2116: e8 90 17 00 00 call 38ab exit(); - 2175: e8 a4 16 00 00 call 381e + 211b: e8 43 16 00 00 call 3763 printf(1, "link dd/ff dd/dd/ffff succeeded!\n"); - 217a: 83 ec 08 sub $0x8,%esp - 217d: 68 98 4f 00 00 push $0x4f98 - 2182: 6a 01 push $0x1 - 2184: e8 d9 17 00 00 call 3962 + 2120: 83 ec 08 sub $0x8,%esp + 2123: 68 c0 4e 00 00 push $0x4ec0 + 2128: 6a 01 push $0x1 + 212a: e8 7c 17 00 00 call 38ab exit(); - 2189: e8 90 16 00 00 call 381e + 212f: e8 2f 16 00 00 call 3763 printf(1, "mkdir dd/ff/ff succeeded!\n"); - 218e: 83 ec 08 sub $0x8,%esp - 2191: 68 d7 45 00 00 push $0x45d7 - 2196: 6a 01 push $0x1 - 2198: e8 c5 17 00 00 call 3962 + 2134: 83 ec 08 sub $0x8,%esp + 2137: 68 ff 44 00 00 push $0x44ff + 213c: 6a 01 push $0x1 + 213e: e8 68 17 00 00 call 38ab exit(); - 219d: e8 7c 16 00 00 call 381e + 2143: e8 1b 16 00 00 call 3763 printf(1, "mkdir dd/xx/ff succeeded!\n"); - 21a2: 83 ec 08 sub $0x8,%esp - 21a5: 68 f2 45 00 00 push $0x45f2 - 21aa: 6a 01 push $0x1 - 21ac: e8 b1 17 00 00 call 3962 + 2148: 83 ec 08 sub $0x8,%esp + 214b: 68 1a 45 00 00 push $0x451a + 2150: 6a 01 push $0x1 + 2152: e8 54 17 00 00 call 38ab exit(); - 21b1: e8 68 16 00 00 call 381e + 2157: e8 07 16 00 00 call 3763 printf(1, "mkdir dd/dd/ffff succeeded!\n"); - 21b6: 83 ec 08 sub $0x8,%esp - 21b9: 68 0d 46 00 00 push $0x460d - 21be: 6a 01 push $0x1 - 21c0: e8 9d 17 00 00 call 3962 + 215c: 83 ec 08 sub $0x8,%esp + 215f: 68 35 45 00 00 push $0x4535 + 2164: 6a 01 push $0x1 + 2166: e8 40 17 00 00 call 38ab exit(); - 21c5: e8 54 16 00 00 call 381e + 216b: e8 f3 15 00 00 call 3763 printf(1, "unlink dd/xx/ff succeeded!\n"); - 21ca: 83 ec 08 sub $0x8,%esp - 21cd: 68 2a 46 00 00 push $0x462a - 21d2: 6a 01 push $0x1 - 21d4: e8 89 17 00 00 call 3962 + 2170: 83 ec 08 sub $0x8,%esp + 2173: 68 52 45 00 00 push $0x4552 + 2178: 6a 01 push $0x1 + 217a: e8 2c 17 00 00 call 38ab exit(); - 21d9: e8 40 16 00 00 call 381e + 217f: e8 df 15 00 00 call 3763 printf(1, "unlink dd/ff/ff succeeded!\n"); - 21de: 83 ec 08 sub $0x8,%esp - 21e1: 68 46 46 00 00 push $0x4646 - 21e6: 6a 01 push $0x1 - 21e8: e8 75 17 00 00 call 3962 + 2184: 83 ec 08 sub $0x8,%esp + 2187: 68 6e 45 00 00 push $0x456e + 218c: 6a 01 push $0x1 + 218e: e8 18 17 00 00 call 38ab exit(); - 21ed: e8 2c 16 00 00 call 381e + 2193: e8 cb 15 00 00 call 3763 printf(1, "chdir dd/ff succeeded!\n"); - 21f2: 83 ec 08 sub $0x8,%esp - 21f5: 68 62 46 00 00 push $0x4662 - 21fa: 6a 01 push $0x1 - 21fc: e8 61 17 00 00 call 3962 + 2198: 83 ec 08 sub $0x8,%esp + 219b: 68 8a 45 00 00 push $0x458a + 21a0: 6a 01 push $0x1 + 21a2: e8 04 17 00 00 call 38ab exit(); - 2201: e8 18 16 00 00 call 381e + 21a7: e8 b7 15 00 00 call 3763 printf(1, "chdir dd/xx succeeded!\n"); - 2206: 83 ec 08 sub $0x8,%esp - 2209: 68 7a 46 00 00 push $0x467a - 220e: 6a 01 push $0x1 - 2210: e8 4d 17 00 00 call 3962 + 21ac: 83 ec 08 sub $0x8,%esp + 21af: 68 a2 45 00 00 push $0x45a2 + 21b4: 6a 01 push $0x1 + 21b6: e8 f0 16 00 00 call 38ab exit(); - 2215: e8 04 16 00 00 call 381e + 21bb: e8 a3 15 00 00 call 3763 printf(1, "unlink dd/dd/ff failed\n"); - 221a: 83 ec 08 sub $0x8,%esp - 221d: 68 91 44 00 00 push $0x4491 - 2222: 6a 01 push $0x1 - 2224: e8 39 17 00 00 call 3962 + 21c0: 83 ec 08 sub $0x8,%esp + 21c3: 68 b9 43 00 00 push $0x43b9 + 21c8: 6a 01 push $0x1 + 21ca: e8 dc 16 00 00 call 38ab exit(); - 2229: e8 f0 15 00 00 call 381e + 21cf: e8 8f 15 00 00 call 3763 printf(1, "unlink dd/ff failed\n"); - 222e: 83 ec 08 sub $0x8,%esp - 2231: 68 92 46 00 00 push $0x4692 - 2236: 6a 01 push $0x1 - 2238: e8 25 17 00 00 call 3962 + 21d4: 83 ec 08 sub $0x8,%esp + 21d7: 68 ba 45 00 00 push $0x45ba + 21dc: 6a 01 push $0x1 + 21de: e8 c8 16 00 00 call 38ab exit(); - 223d: e8 dc 15 00 00 call 381e + 21e3: e8 7b 15 00 00 call 3763 printf(1, "unlink non-empty dd succeeded!\n"); - 2242: 83 ec 08 sub $0x8,%esp - 2245: 68 bc 4f 00 00 push $0x4fbc - 224a: 6a 01 push $0x1 - 224c: e8 11 17 00 00 call 3962 + 21e8: 83 ec 08 sub $0x8,%esp + 21eb: 68 e4 4e 00 00 push $0x4ee4 + 21f0: 6a 01 push $0x1 + 21f2: e8 b4 16 00 00 call 38ab exit(); - 2251: e8 c8 15 00 00 call 381e + 21f7: e8 67 15 00 00 call 3763 printf(1, "unlink dd/dd failed\n"); - 2256: 83 ec 08 sub $0x8,%esp - 2259: 68 a7 46 00 00 push $0x46a7 - 225e: 6a 01 push $0x1 - 2260: e8 fd 16 00 00 call 3962 + 21fc: 83 ec 08 sub $0x8,%esp + 21ff: 68 cf 45 00 00 push $0x45cf + 2204: 6a 01 push $0x1 + 2206: e8 a0 16 00 00 call 38ab exit(); - 2265: e8 b4 15 00 00 call 381e + 220b: e8 53 15 00 00 call 3763 printf(1, "unlink dd failed\n"); - 226a: 83 ec 08 sub $0x8,%esp - 226d: 68 bc 46 00 00 push $0x46bc - 2272: 6a 01 push $0x1 - 2274: e8 e9 16 00 00 call 3962 + 2210: 83 ec 08 sub $0x8,%esp + 2213: 68 e4 45 00 00 push $0x45e4 + 2218: 6a 01 push $0x1 + 221a: e8 8c 16 00 00 call 38ab exit(); - 2279: e8 a0 15 00 00 call 381e + 221f: e8 3f 15 00 00 call 3763 -0000227e : +00002224 : // test writes that are larger than the log. void bigwrite(void) { - 227e: f3 0f 1e fb endbr32 - 2282: 55 push %ebp - 2283: 89 e5 mov %esp,%ebp - 2285: 57 push %edi - 2286: 56 push %esi - 2287: 53 push %ebx - 2288: 83 ec 14 sub $0x14,%esp + 2224: 55 push %ebp + 2225: 89 e5 mov %esp,%ebp + 2227: 57 push %edi + 2228: 56 push %esi + 2229: 53 push %ebx + 222a: 83 ec 14 sub $0x14,%esp int fd, sz; printf(1, "bigwrite test\n"); - 228b: 68 d9 46 00 00 push $0x46d9 - 2290: 6a 01 push $0x1 - 2292: e8 cb 16 00 00 call 3962 + 222d: 68 01 46 00 00 push $0x4601 + 2232: 6a 01 push $0x1 + 2234: e8 72 16 00 00 call 38ab unlink("bigwrite"); - 2297: c7 04 24 e8 46 00 00 movl $0x46e8,(%esp) - 229e: e8 cb 15 00 00 call 386e - 22a3: 83 c4 10 add $0x10,%esp + 2239: c7 04 24 10 46 00 00 movl $0x4610,(%esp) + 2240: e8 6e 15 00 00 call 37b3 + 2245: 83 c4 10 add $0x10,%esp for(sz = 499; sz < 12*512; sz += 471){ - 22a6: bb f3 01 00 00 mov $0x1f3,%ebx + 2248: bb f3 01 00 00 mov $0x1f3,%ebx fd = open("bigwrite", O_CREATE | O_RDWR); - 22ab: 83 ec 08 sub $0x8,%esp - 22ae: 68 02 02 00 00 push $0x202 - 22b3: 68 e8 46 00 00 push $0x46e8 - 22b8: e8 a1 15 00 00 call 385e - 22bd: 89 c6 mov %eax,%esi + 224d: 83 ec 08 sub $0x8,%esp + 2250: 68 02 02 00 00 push $0x202 + 2255: 68 10 46 00 00 push $0x4610 + 225a: e8 44 15 00 00 call 37a3 + 225f: 89 c6 mov %eax,%esi if(fd < 0){ - 22bf: 83 c4 10 add $0x10,%esp - 22c2: 85 c0 test %eax,%eax - 22c4: 78 6e js 2334 + 2261: 83 c4 10 add $0x10,%esp + 2264: 85 c0 test %eax,%eax + 2266: 78 6e js 22d6 printf(1, "cannot create bigwrite\n"); exit(); } int i; for(i = 0; i < 2; i++){ int cc = write(fd, buf, sz); - 22c6: 83 ec 04 sub $0x4,%esp - 22c9: 53 push %ebx - 22ca: 68 80 84 00 00 push $0x8480 - 22cf: 50 push %eax - 22d0: e8 69 15 00 00 call 383e - 22d5: 89 c7 mov %eax,%edi + 2268: 83 ec 04 sub $0x4,%esp + 226b: 53 push %ebx + 226c: 68 60 83 00 00 push $0x8360 + 2271: 50 push %eax + 2272: e8 0c 15 00 00 call 3783 + 2277: 89 c7 mov %eax,%edi if(cc != sz){ - 22d7: 83 c4 10 add $0x10,%esp - 22da: 39 c3 cmp %eax,%ebx - 22dc: 75 6e jne 234c + 2279: 83 c4 10 add $0x10,%esp + 227c: 39 c3 cmp %eax,%ebx + 227e: 75 6a jne 22ea int cc = write(fd, buf, sz); - 22de: 83 ec 04 sub $0x4,%esp - 22e1: 53 push %ebx - 22e2: 68 80 84 00 00 push $0x8480 - 22e7: 56 push %esi - 22e8: e8 51 15 00 00 call 383e + 2280: 83 ec 04 sub $0x4,%esp + 2283: 53 push %ebx + 2284: 68 60 83 00 00 push $0x8360 + 2289: 56 push %esi + 228a: e8 f4 14 00 00 call 3783 if(cc != sz){ - 22ed: 83 c4 10 add $0x10,%esp - 22f0: 39 d8 cmp %ebx,%eax - 22f2: 75 54 jne 2348 + 228f: 83 c4 10 add $0x10,%esp + 2292: 39 d8 cmp %ebx,%eax + 2294: 75 56 jne 22ec printf(1, "write(%d) ret %d\n", sz, cc); exit(); } } close(fd); - 22f4: 83 ec 0c sub $0xc,%esp - 22f7: 56 push %esi - 22f8: e8 49 15 00 00 call 3846 + 2296: 83 ec 0c sub $0xc,%esp + 2299: 56 push %esi + 229a: e8 ec 14 00 00 call 378b unlink("bigwrite"); - 22fd: c7 04 24 e8 46 00 00 movl $0x46e8,(%esp) - 2304: e8 65 15 00 00 call 386e + 229f: c7 04 24 10 46 00 00 movl $0x4610,(%esp) + 22a6: e8 08 15 00 00 call 37b3 for(sz = 499; sz < 12*512; sz += 471){ - 2309: 81 c3 d7 01 00 00 add $0x1d7,%ebx - 230f: 83 c4 10 add $0x10,%esp - 2312: 81 fb 07 18 00 00 cmp $0x1807,%ebx - 2318: 75 91 jne 22ab + 22ab: 81 c3 d7 01 00 00 add $0x1d7,%ebx + 22b1: 83 c4 10 add $0x10,%esp + 22b4: 81 fb 07 18 00 00 cmp $0x1807,%ebx + 22ba: 75 91 jne 224d } printf(1, "bigwrite ok\n"); - 231a: 83 ec 08 sub $0x8,%esp - 231d: 68 1b 47 00 00 push $0x471b - 2322: 6a 01 push $0x1 - 2324: e8 39 16 00 00 call 3962 + 22bc: 83 ec 08 sub $0x8,%esp + 22bf: 68 43 46 00 00 push $0x4643 + 22c4: 6a 01 push $0x1 + 22c6: e8 e0 15 00 00 call 38ab } - 2329: 83 c4 10 add $0x10,%esp - 232c: 8d 65 f4 lea -0xc(%ebp),%esp - 232f: 5b pop %ebx - 2330: 5e pop %esi - 2331: 5f pop %edi - 2332: 5d pop %ebp - 2333: c3 ret + 22cb: 83 c4 10 add $0x10,%esp + 22ce: 8d 65 f4 lea -0xc(%ebp),%esp + 22d1: 5b pop %ebx + 22d2: 5e pop %esi + 22d3: 5f pop %edi + 22d4: 5d pop %ebp + 22d5: c3 ret printf(1, "cannot create bigwrite\n"); - 2334: 83 ec 08 sub $0x8,%esp - 2337: 68 f1 46 00 00 push $0x46f1 - 233c: 6a 01 push $0x1 - 233e: e8 1f 16 00 00 call 3962 + 22d6: 83 ec 08 sub $0x8,%esp + 22d9: 68 19 46 00 00 push $0x4619 + 22de: 6a 01 push $0x1 + 22e0: e8 c6 15 00 00 call 38ab exit(); - 2343: e8 d6 14 00 00 call 381e - 2348: 89 fb mov %edi,%ebx - int cc = write(fd, buf, sz); - 234a: 89 c7 mov %eax,%edi + 22e5: e8 79 14 00 00 call 3763 + if(cc != sz){ + 22ea: 89 df mov %ebx,%edi printf(1, "write(%d) ret %d\n", sz, cc); - 234c: 57 push %edi - 234d: 53 push %ebx - 234e: 68 09 47 00 00 push $0x4709 - 2353: 6a 01 push $0x1 - 2355: e8 08 16 00 00 call 3962 + 22ec: 50 push %eax + 22ed: 57 push %edi + 22ee: 68 31 46 00 00 push $0x4631 + 22f3: 6a 01 push $0x1 + 22f5: e8 b1 15 00 00 call 38ab exit(); - 235a: e8 bf 14 00 00 call 381e + 22fa: e8 64 14 00 00 call 3763 -0000235f : +000022ff : void bigfile(void) { - 235f: f3 0f 1e fb endbr32 - 2363: 55 push %ebp - 2364: 89 e5 mov %esp,%ebp - 2366: 57 push %edi - 2367: 56 push %esi - 2368: 53 push %ebx - 2369: 83 ec 14 sub $0x14,%esp + 22ff: 55 push %ebp + 2300: 89 e5 mov %esp,%ebp + 2302: 57 push %edi + 2303: 56 push %esi + 2304: 53 push %ebx + 2305: 83 ec 14 sub $0x14,%esp int fd, i, total, cc; printf(1, "bigfile test\n"); - 236c: 68 28 47 00 00 push $0x4728 - 2371: 6a 01 push $0x1 - 2373: e8 ea 15 00 00 call 3962 + 2308: 68 50 46 00 00 push $0x4650 + 230d: 6a 01 push $0x1 + 230f: e8 97 15 00 00 call 38ab unlink("bigfile"); - 2378: c7 04 24 44 47 00 00 movl $0x4744,(%esp) - 237f: e8 ea 14 00 00 call 386e + 2314: c7 04 24 6c 46 00 00 movl $0x466c,(%esp) + 231b: e8 93 14 00 00 call 37b3 fd = open("bigfile", O_CREATE | O_RDWR); - 2384: 83 c4 08 add $0x8,%esp - 2387: 68 02 02 00 00 push $0x202 - 238c: 68 44 47 00 00 push $0x4744 - 2391: e8 c8 14 00 00 call 385e + 2320: 83 c4 08 add $0x8,%esp + 2323: 68 02 02 00 00 push $0x202 + 2328: 68 6c 46 00 00 push $0x466c + 232d: e8 71 14 00 00 call 37a3 if(fd < 0){ - 2396: 83 c4 10 add $0x10,%esp - 2399: 85 c0 test %eax,%eax - 239b: 0f 88 c3 00 00 00 js 2464 - 23a1: 89 c6 mov %eax,%esi + 2332: 83 c4 10 add $0x10,%esp + 2335: 85 c0 test %eax,%eax + 2337: 0f 88 c3 00 00 00 js 2400 + 233d: 89 c6 mov %eax,%esi printf(1, "cannot create bigfile"); exit(); } for(i = 0; i < 20; i++){ - 23a3: bb 00 00 00 00 mov $0x0,%ebx + 233f: bb 00 00 00 00 mov $0x0,%ebx memset(buf, i, 600); - 23a8: 83 ec 04 sub $0x4,%esp - 23ab: 68 58 02 00 00 push $0x258 - 23b0: 53 push %ebx - 23b1: 68 80 84 00 00 push $0x8480 - 23b6: e8 fc 12 00 00 call 36b7 + 2344: 83 ec 04 sub $0x4,%esp + 2347: 68 58 02 00 00 push $0x258 + 234c: 53 push %ebx + 234d: 68 60 83 00 00 push $0x8360 + 2352: e8 b9 12 00 00 call 3610 if(write(fd, buf, 600) != 600){ - 23bb: 83 c4 0c add $0xc,%esp - 23be: 68 58 02 00 00 push $0x258 - 23c3: 68 80 84 00 00 push $0x8480 - 23c8: 56 push %esi - 23c9: e8 70 14 00 00 call 383e - 23ce: 83 c4 10 add $0x10,%esp - 23d1: 3d 58 02 00 00 cmp $0x258,%eax - 23d6: 0f 85 9c 00 00 00 jne 2478 + 2357: 83 c4 0c add $0xc,%esp + 235a: 68 58 02 00 00 push $0x258 + 235f: 68 60 83 00 00 push $0x8360 + 2364: 56 push %esi + 2365: e8 19 14 00 00 call 3783 + 236a: 83 c4 10 add $0x10,%esp + 236d: 3d 58 02 00 00 cmp $0x258,%eax + 2372: 0f 85 9c 00 00 00 jne 2414 for(i = 0; i < 20; i++){ - 23dc: 83 c3 01 add $0x1,%ebx - 23df: 83 fb 14 cmp $0x14,%ebx - 23e2: 75 c4 jne 23a8 + 2378: 83 c3 01 add $0x1,%ebx + 237b: 83 fb 14 cmp $0x14,%ebx + 237e: 75 c4 jne 2344 printf(1, "write bigfile failed\n"); exit(); } } close(fd); - 23e4: 83 ec 0c sub $0xc,%esp - 23e7: 56 push %esi - 23e8: e8 59 14 00 00 call 3846 + 2380: 83 ec 0c sub $0xc,%esp + 2383: 56 push %esi + 2384: e8 02 14 00 00 call 378b fd = open("bigfile", 0); - 23ed: 83 c4 08 add $0x8,%esp - 23f0: 6a 00 push $0x0 - 23f2: 68 44 47 00 00 push $0x4744 - 23f7: e8 62 14 00 00 call 385e - 23fc: 89 c7 mov %eax,%edi + 2389: 83 c4 08 add $0x8,%esp + 238c: 6a 00 push $0x0 + 238e: 68 6c 46 00 00 push $0x466c + 2393: e8 0b 14 00 00 call 37a3 + 2398: 89 c7 mov %eax,%edi if(fd < 0){ - 23fe: 83 c4 10 add $0x10,%esp - 2401: 85 c0 test %eax,%eax - 2403: 0f 88 83 00 00 00 js 248c + 239a: 83 c4 10 add $0x10,%esp + 239d: 85 c0 test %eax,%eax + 239f: 0f 88 83 00 00 00 js 2428 printf(1, "cannot open bigfile\n"); exit(); } total = 0; - 2409: be 00 00 00 00 mov $0x0,%esi + 23a5: be 00 00 00 00 mov $0x0,%esi for(i = 0; ; i++){ - 240e: bb 00 00 00 00 mov $0x0,%ebx + 23aa: bb 00 00 00 00 mov $0x0,%ebx cc = read(fd, buf, 300); - 2413: 83 ec 04 sub $0x4,%esp - 2416: 68 2c 01 00 00 push $0x12c - 241b: 68 80 84 00 00 push $0x8480 - 2420: 57 push %edi - 2421: e8 10 14 00 00 call 3836 + 23af: 83 ec 04 sub $0x4,%esp + 23b2: 68 2c 01 00 00 push $0x12c + 23b7: 68 60 83 00 00 push $0x8360 + 23bc: 57 push %edi + 23bd: e8 b9 13 00 00 call 377b if(cc < 0){ - 2426: 83 c4 10 add $0x10,%esp - 2429: 85 c0 test %eax,%eax - 242b: 78 73 js 24a0 + 23c2: 83 c4 10 add $0x10,%esp + 23c5: 85 c0 test %eax,%eax + 23c7: 78 73 js 243c printf(1, "read bigfile failed\n"); exit(); } if(cc == 0) - 242d: 0f 84 a9 00 00 00 je 24dc + 23c9: 0f 84 a9 00 00 00 je 2478 break; if(cc != 300){ - 2433: 3d 2c 01 00 00 cmp $0x12c,%eax - 2438: 75 7a jne 24b4 + 23cf: 3d 2c 01 00 00 cmp $0x12c,%eax + 23d4: 75 7a jne 2450 printf(1, "short read bigfile\n"); exit(); } if(buf[0] != i/2 || buf[299] != i/2){ - 243a: 89 d8 mov %ebx,%eax - 243c: c1 e8 1f shr $0x1f,%eax - 243f: 01 d8 add %ebx,%eax - 2441: d1 f8 sar %eax - 2443: 0f be 15 80 84 00 00 movsbl 0x8480,%edx - 244a: 39 c2 cmp %eax,%edx - 244c: 75 7a jne 24c8 - 244e: 0f be 15 ab 85 00 00 movsbl 0x85ab,%edx - 2455: 39 d0 cmp %edx,%eax - 2457: 75 6f jne 24c8 + 23d6: 89 d8 mov %ebx,%eax + 23d8: c1 e8 1f shr $0x1f,%eax + 23db: 01 d8 add %ebx,%eax + 23dd: d1 f8 sar %eax + 23df: 0f be 15 60 83 00 00 movsbl 0x8360,%edx + 23e6: 39 c2 cmp %eax,%edx + 23e8: 75 7a jne 2464 + 23ea: 0f be 15 8b 84 00 00 movsbl 0x848b,%edx + 23f1: 39 d0 cmp %edx,%eax + 23f3: 75 6f jne 2464 printf(1, "read bigfile wrong data\n"); exit(); } total += cc; - 2459: 81 c6 2c 01 00 00 add $0x12c,%esi + 23f5: 81 c6 2c 01 00 00 add $0x12c,%esi for(i = 0; ; i++){ - 245f: 83 c3 01 add $0x1,%ebx + 23fb: 83 c3 01 add $0x1,%ebx cc = read(fd, buf, 300); - 2462: eb af jmp 2413 + 23fe: eb af jmp 23af printf(1, "cannot create bigfile"); - 2464: 83 ec 08 sub $0x8,%esp - 2467: 68 36 47 00 00 push $0x4736 - 246c: 6a 01 push $0x1 - 246e: e8 ef 14 00 00 call 3962 + 2400: 83 ec 08 sub $0x8,%esp + 2403: 68 5e 46 00 00 push $0x465e + 2408: 6a 01 push $0x1 + 240a: e8 9c 14 00 00 call 38ab exit(); - 2473: e8 a6 13 00 00 call 381e + 240f: e8 4f 13 00 00 call 3763 printf(1, "write bigfile failed\n"); - 2478: 83 ec 08 sub $0x8,%esp - 247b: 68 4c 47 00 00 push $0x474c - 2480: 6a 01 push $0x1 - 2482: e8 db 14 00 00 call 3962 + 2414: 83 ec 08 sub $0x8,%esp + 2417: 68 74 46 00 00 push $0x4674 + 241c: 6a 01 push $0x1 + 241e: e8 88 14 00 00 call 38ab exit(); - 2487: e8 92 13 00 00 call 381e + 2423: e8 3b 13 00 00 call 3763 printf(1, "cannot open bigfile\n"); - 248c: 83 ec 08 sub $0x8,%esp - 248f: 68 62 47 00 00 push $0x4762 - 2494: 6a 01 push $0x1 - 2496: e8 c7 14 00 00 call 3962 + 2428: 83 ec 08 sub $0x8,%esp + 242b: 68 8a 46 00 00 push $0x468a + 2430: 6a 01 push $0x1 + 2432: e8 74 14 00 00 call 38ab exit(); - 249b: e8 7e 13 00 00 call 381e + 2437: e8 27 13 00 00 call 3763 printf(1, "read bigfile failed\n"); - 24a0: 83 ec 08 sub $0x8,%esp - 24a3: 68 77 47 00 00 push $0x4777 - 24a8: 6a 01 push $0x1 - 24aa: e8 b3 14 00 00 call 3962 + 243c: 83 ec 08 sub $0x8,%esp + 243f: 68 9f 46 00 00 push $0x469f + 2444: 6a 01 push $0x1 + 2446: e8 60 14 00 00 call 38ab exit(); - 24af: e8 6a 13 00 00 call 381e + 244b: e8 13 13 00 00 call 3763 printf(1, "short read bigfile\n"); - 24b4: 83 ec 08 sub $0x8,%esp - 24b7: 68 8c 47 00 00 push $0x478c - 24bc: 6a 01 push $0x1 - 24be: e8 9f 14 00 00 call 3962 + 2450: 83 ec 08 sub $0x8,%esp + 2453: 68 b4 46 00 00 push $0x46b4 + 2458: 6a 01 push $0x1 + 245a: e8 4c 14 00 00 call 38ab exit(); - 24c3: e8 56 13 00 00 call 381e + 245f: e8 ff 12 00 00 call 3763 printf(1, "read bigfile wrong data\n"); - 24c8: 83 ec 08 sub $0x8,%esp - 24cb: 68 a0 47 00 00 push $0x47a0 - 24d0: 6a 01 push $0x1 - 24d2: e8 8b 14 00 00 call 3962 + 2464: 83 ec 08 sub $0x8,%esp + 2467: 68 c8 46 00 00 push $0x46c8 + 246c: 6a 01 push $0x1 + 246e: e8 38 14 00 00 call 38ab exit(); - 24d7: e8 42 13 00 00 call 381e + 2473: e8 eb 12 00 00 call 3763 } close(fd); - 24dc: 83 ec 0c sub $0xc,%esp - 24df: 57 push %edi - 24e0: e8 61 13 00 00 call 3846 + 2478: 83 ec 0c sub $0xc,%esp + 247b: 57 push %edi + 247c: e8 0a 13 00 00 call 378b if(total != 20*600){ - 24e5: 83 c4 10 add $0x10,%esp - 24e8: 81 fe e0 2e 00 00 cmp $0x2ee0,%esi - 24ee: 75 27 jne 2517 + 2481: 83 c4 10 add $0x10,%esp + 2484: 81 fe e0 2e 00 00 cmp $0x2ee0,%esi + 248a: 75 27 jne 24b3 printf(1, "read bigfile wrong total\n"); exit(); } unlink("bigfile"); - 24f0: 83 ec 0c sub $0xc,%esp - 24f3: 68 44 47 00 00 push $0x4744 - 24f8: e8 71 13 00 00 call 386e + 248c: 83 ec 0c sub $0xc,%esp + 248f: 68 6c 46 00 00 push $0x466c + 2494: e8 1a 13 00 00 call 37b3 printf(1, "bigfile test ok\n"); - 24fd: 83 c4 08 add $0x8,%esp - 2500: 68 d3 47 00 00 push $0x47d3 - 2505: 6a 01 push $0x1 - 2507: e8 56 14 00 00 call 3962 + 2499: 83 c4 08 add $0x8,%esp + 249c: 68 fb 46 00 00 push $0x46fb + 24a1: 6a 01 push $0x1 + 24a3: e8 03 14 00 00 call 38ab } - 250c: 83 c4 10 add $0x10,%esp - 250f: 8d 65 f4 lea -0xc(%ebp),%esp - 2512: 5b pop %ebx - 2513: 5e pop %esi - 2514: 5f pop %edi - 2515: 5d pop %ebp - 2516: c3 ret + 24a8: 83 c4 10 add $0x10,%esp + 24ab: 8d 65 f4 lea -0xc(%ebp),%esp + 24ae: 5b pop %ebx + 24af: 5e pop %esi + 24b0: 5f pop %edi + 24b1: 5d pop %ebp + 24b2: c3 ret printf(1, "read bigfile wrong total\n"); - 2517: 83 ec 08 sub $0x8,%esp - 251a: 68 b9 47 00 00 push $0x47b9 - 251f: 6a 01 push $0x1 - 2521: e8 3c 14 00 00 call 3962 + 24b3: 83 ec 08 sub $0x8,%esp + 24b6: 68 e1 46 00 00 push $0x46e1 + 24bb: 6a 01 push $0x1 + 24bd: e8 e9 13 00 00 call 38ab exit(); - 2526: e8 f3 12 00 00 call 381e + 24c2: e8 9c 12 00 00 call 3763 -0000252b : +000024c7 : void fourteen(void) { - 252b: f3 0f 1e fb endbr32 - 252f: 55 push %ebp - 2530: 89 e5 mov %esp,%ebp - 2532: 83 ec 10 sub $0x10,%esp + 24c7: 55 push %ebp + 24c8: 89 e5 mov %esp,%ebp + 24ca: 83 ec 10 sub $0x10,%esp int fd; // DIRSIZ is 14. printf(1, "fourteen test\n"); - 2535: 68 e4 47 00 00 push $0x47e4 - 253a: 6a 01 push $0x1 - 253c: e8 21 14 00 00 call 3962 + 24cd: 68 0c 47 00 00 push $0x470c + 24d2: 6a 01 push $0x1 + 24d4: e8 d2 13 00 00 call 38ab if(mkdir("12345678901234") != 0){ - 2541: c7 04 24 1f 48 00 00 movl $0x481f,(%esp) - 2548: e8 39 13 00 00 call 3886 - 254d: 83 c4 10 add $0x10,%esp - 2550: 85 c0 test %eax,%eax - 2552: 0f 85 9c 00 00 00 jne 25f4 + 24d9: c7 04 24 47 47 00 00 movl $0x4747,(%esp) + 24e0: e8 e6 12 00 00 call 37cb + 24e5: 83 c4 10 add $0x10,%esp + 24e8: 85 c0 test %eax,%eax + 24ea: 0f 85 9c 00 00 00 jne 258c printf(1, "mkdir 12345678901234 failed\n"); exit(); } if(mkdir("12345678901234/123456789012345") != 0){ - 2558: 83 ec 0c sub $0xc,%esp - 255b: 68 dc 4f 00 00 push $0x4fdc - 2560: e8 21 13 00 00 call 3886 - 2565: 83 c4 10 add $0x10,%esp - 2568: 85 c0 test %eax,%eax - 256a: 0f 85 98 00 00 00 jne 2608 + 24f0: 83 ec 0c sub $0xc,%esp + 24f3: 68 04 4f 00 00 push $0x4f04 + 24f8: e8 ce 12 00 00 call 37cb + 24fd: 83 c4 10 add $0x10,%esp + 2500: 85 c0 test %eax,%eax + 2502: 0f 85 98 00 00 00 jne 25a0 printf(1, "mkdir 12345678901234/123456789012345 failed\n"); exit(); } fd = open("123456789012345/123456789012345/123456789012345", O_CREATE); - 2570: 83 ec 08 sub $0x8,%esp - 2573: 68 00 02 00 00 push $0x200 - 2578: 68 2c 50 00 00 push $0x502c - 257d: e8 dc 12 00 00 call 385e + 2508: 83 ec 08 sub $0x8,%esp + 250b: 68 00 02 00 00 push $0x200 + 2510: 68 54 4f 00 00 push $0x4f54 + 2515: e8 89 12 00 00 call 37a3 if(fd < 0){ - 2582: 83 c4 10 add $0x10,%esp - 2585: 85 c0 test %eax,%eax - 2587: 0f 88 8f 00 00 00 js 261c + 251a: 83 c4 10 add $0x10,%esp + 251d: 85 c0 test %eax,%eax + 251f: 0f 88 8f 00 00 00 js 25b4 printf(1, "create 123456789012345/123456789012345/123456789012345 failed\n"); exit(); } close(fd); - 258d: 83 ec 0c sub $0xc,%esp - 2590: 50 push %eax - 2591: e8 b0 12 00 00 call 3846 + 2525: 83 ec 0c sub $0xc,%esp + 2528: 50 push %eax + 2529: e8 5d 12 00 00 call 378b fd = open("12345678901234/12345678901234/12345678901234", 0); - 2596: 83 c4 08 add $0x8,%esp - 2599: 6a 00 push $0x0 - 259b: 68 9c 50 00 00 push $0x509c - 25a0: e8 b9 12 00 00 call 385e + 252e: 83 c4 08 add $0x8,%esp + 2531: 6a 00 push $0x0 + 2533: 68 c4 4f 00 00 push $0x4fc4 + 2538: e8 66 12 00 00 call 37a3 if(fd < 0){ - 25a5: 83 c4 10 add $0x10,%esp - 25a8: 85 c0 test %eax,%eax - 25aa: 0f 88 80 00 00 00 js 2630 + 253d: 83 c4 10 add $0x10,%esp + 2540: 85 c0 test %eax,%eax + 2542: 0f 88 80 00 00 00 js 25c8 printf(1, "open 12345678901234/12345678901234/12345678901234 failed\n"); exit(); } close(fd); - 25b0: 83 ec 0c sub $0xc,%esp - 25b3: 50 push %eax - 25b4: e8 8d 12 00 00 call 3846 + 2548: 83 ec 0c sub $0xc,%esp + 254b: 50 push %eax + 254c: e8 3a 12 00 00 call 378b if(mkdir("12345678901234/12345678901234") == 0){ - 25b9: c7 04 24 10 48 00 00 movl $0x4810,(%esp) - 25c0: e8 c1 12 00 00 call 3886 - 25c5: 83 c4 10 add $0x10,%esp - 25c8: 85 c0 test %eax,%eax - 25ca: 74 78 je 2644 + 2551: c7 04 24 38 47 00 00 movl $0x4738,(%esp) + 2558: e8 6e 12 00 00 call 37cb + 255d: 83 c4 10 add $0x10,%esp + 2560: 85 c0 test %eax,%eax + 2562: 74 78 je 25dc printf(1, "mkdir 12345678901234/12345678901234 succeeded!\n"); exit(); } if(mkdir("123456789012345/12345678901234") == 0){ - 25cc: 83 ec 0c sub $0xc,%esp - 25cf: 68 38 51 00 00 push $0x5138 - 25d4: e8 ad 12 00 00 call 3886 - 25d9: 83 c4 10 add $0x10,%esp - 25dc: 85 c0 test %eax,%eax - 25de: 74 78 je 2658 + 2564: 83 ec 0c sub $0xc,%esp + 2567: 68 60 50 00 00 push $0x5060 + 256c: e8 5a 12 00 00 call 37cb + 2571: 83 c4 10 add $0x10,%esp + 2574: 85 c0 test %eax,%eax + 2576: 74 78 je 25f0 printf(1, "mkdir 12345678901234/123456789012345 succeeded!\n"); exit(); } printf(1, "fourteen ok\n"); - 25e0: 83 ec 08 sub $0x8,%esp - 25e3: 68 2e 48 00 00 push $0x482e - 25e8: 6a 01 push $0x1 - 25ea: e8 73 13 00 00 call 3962 + 2578: 83 ec 08 sub $0x8,%esp + 257b: 68 56 47 00 00 push $0x4756 + 2580: 6a 01 push $0x1 + 2582: e8 24 13 00 00 call 38ab } - 25ef: 83 c4 10 add $0x10,%esp - 25f2: c9 leave - 25f3: c3 ret + 2587: 83 c4 10 add $0x10,%esp + 258a: c9 leave + 258b: c3 ret printf(1, "mkdir 12345678901234 failed\n"); - 25f4: 83 ec 08 sub $0x8,%esp - 25f7: 68 f3 47 00 00 push $0x47f3 - 25fc: 6a 01 push $0x1 - 25fe: e8 5f 13 00 00 call 3962 + 258c: 83 ec 08 sub $0x8,%esp + 258f: 68 1b 47 00 00 push $0x471b + 2594: 6a 01 push $0x1 + 2596: e8 10 13 00 00 call 38ab exit(); - 2603: e8 16 12 00 00 call 381e + 259b: e8 c3 11 00 00 call 3763 printf(1, "mkdir 12345678901234/123456789012345 failed\n"); - 2608: 83 ec 08 sub $0x8,%esp - 260b: 68 fc 4f 00 00 push $0x4ffc - 2610: 6a 01 push $0x1 - 2612: e8 4b 13 00 00 call 3962 + 25a0: 83 ec 08 sub $0x8,%esp + 25a3: 68 24 4f 00 00 push $0x4f24 + 25a8: 6a 01 push $0x1 + 25aa: e8 fc 12 00 00 call 38ab exit(); - 2617: e8 02 12 00 00 call 381e + 25af: e8 af 11 00 00 call 3763 printf(1, "create 123456789012345/123456789012345/123456789012345 failed\n"); - 261c: 83 ec 08 sub $0x8,%esp - 261f: 68 5c 50 00 00 push $0x505c - 2624: 6a 01 push $0x1 - 2626: e8 37 13 00 00 call 3962 + 25b4: 83 ec 08 sub $0x8,%esp + 25b7: 68 84 4f 00 00 push $0x4f84 + 25bc: 6a 01 push $0x1 + 25be: e8 e8 12 00 00 call 38ab exit(); - 262b: e8 ee 11 00 00 call 381e + 25c3: e8 9b 11 00 00 call 3763 printf(1, "open 12345678901234/12345678901234/12345678901234 failed\n"); - 2630: 83 ec 08 sub $0x8,%esp - 2633: 68 cc 50 00 00 push $0x50cc - 2638: 6a 01 push $0x1 - 263a: e8 23 13 00 00 call 3962 + 25c8: 83 ec 08 sub $0x8,%esp + 25cb: 68 f4 4f 00 00 push $0x4ff4 + 25d0: 6a 01 push $0x1 + 25d2: e8 d4 12 00 00 call 38ab exit(); - 263f: e8 da 11 00 00 call 381e + 25d7: e8 87 11 00 00 call 3763 printf(1, "mkdir 12345678901234/12345678901234 succeeded!\n"); - 2644: 83 ec 08 sub $0x8,%esp - 2647: 68 08 51 00 00 push $0x5108 - 264c: 6a 01 push $0x1 - 264e: e8 0f 13 00 00 call 3962 + 25dc: 83 ec 08 sub $0x8,%esp + 25df: 68 30 50 00 00 push $0x5030 + 25e4: 6a 01 push $0x1 + 25e6: e8 c0 12 00 00 call 38ab exit(); - 2653: e8 c6 11 00 00 call 381e + 25eb: e8 73 11 00 00 call 3763 printf(1, "mkdir 12345678901234/123456789012345 succeeded!\n"); - 2658: 83 ec 08 sub $0x8,%esp - 265b: 68 58 51 00 00 push $0x5158 - 2660: 6a 01 push $0x1 - 2662: e8 fb 12 00 00 call 3962 + 25f0: 83 ec 08 sub $0x8,%esp + 25f3: 68 80 50 00 00 push $0x5080 + 25f8: 6a 01 push $0x1 + 25fa: e8 ac 12 00 00 call 38ab exit(); - 2667: e8 b2 11 00 00 call 381e + 25ff: e8 5f 11 00 00 call 3763 -0000266c : +00002604 : void rmdot(void) { - 266c: f3 0f 1e fb endbr32 - 2670: 55 push %ebp - 2671: 89 e5 mov %esp,%ebp - 2673: 83 ec 10 sub $0x10,%esp + 2604: 55 push %ebp + 2605: 89 e5 mov %esp,%ebp + 2607: 83 ec 10 sub $0x10,%esp printf(1, "rmdot test\n"); - 2676: 68 3b 48 00 00 push $0x483b - 267b: 6a 01 push $0x1 - 267d: e8 e0 12 00 00 call 3962 + 260a: 68 63 47 00 00 push $0x4763 + 260f: 6a 01 push $0x1 + 2611: e8 95 12 00 00 call 38ab if(mkdir("dots") != 0){ - 2682: c7 04 24 47 48 00 00 movl $0x4847,(%esp) - 2689: e8 f8 11 00 00 call 3886 - 268e: 83 c4 10 add $0x10,%esp - 2691: 85 c0 test %eax,%eax - 2693: 0f 85 bc 00 00 00 jne 2755 + 2616: c7 04 24 6f 47 00 00 movl $0x476f,(%esp) + 261d: e8 a9 11 00 00 call 37cb + 2622: 83 c4 10 add $0x10,%esp + 2625: 85 c0 test %eax,%eax + 2627: 0f 85 bc 00 00 00 jne 26e9 printf(1, "mkdir dots failed\n"); exit(); } if(chdir("dots") != 0){ - 2699: 83 ec 0c sub $0xc,%esp - 269c: 68 47 48 00 00 push $0x4847 - 26a1: e8 e8 11 00 00 call 388e - 26a6: 83 c4 10 add $0x10,%esp - 26a9: 85 c0 test %eax,%eax - 26ab: 0f 85 b8 00 00 00 jne 2769 + 262d: 83 ec 0c sub $0xc,%esp + 2630: 68 6f 47 00 00 push $0x476f + 2635: e8 99 11 00 00 call 37d3 + 263a: 83 c4 10 add $0x10,%esp + 263d: 85 c0 test %eax,%eax + 263f: 0f 85 b8 00 00 00 jne 26fd printf(1, "chdir dots failed\n"); exit(); } if(unlink(".") == 0){ - 26b1: 83 ec 0c sub $0xc,%esp - 26b4: 68 f2 44 00 00 push $0x44f2 - 26b9: e8 b0 11 00 00 call 386e - 26be: 83 c4 10 add $0x10,%esp - 26c1: 85 c0 test %eax,%eax - 26c3: 0f 84 b4 00 00 00 je 277d + 2645: 83 ec 0c sub $0xc,%esp + 2648: 68 1a 44 00 00 push $0x441a + 264d: e8 61 11 00 00 call 37b3 + 2652: 83 c4 10 add $0x10,%esp + 2655: 85 c0 test %eax,%eax + 2657: 0f 84 b4 00 00 00 je 2711 printf(1, "rm . worked!\n"); exit(); } if(unlink("..") == 0){ - 26c9: 83 ec 0c sub $0xc,%esp - 26cc: 68 f1 44 00 00 push $0x44f1 - 26d1: e8 98 11 00 00 call 386e - 26d6: 83 c4 10 add $0x10,%esp - 26d9: 85 c0 test %eax,%eax - 26db: 0f 84 b0 00 00 00 je 2791 + 265d: 83 ec 0c sub $0xc,%esp + 2660: 68 19 44 00 00 push $0x4419 + 2665: e8 49 11 00 00 call 37b3 + 266a: 83 c4 10 add $0x10,%esp + 266d: 85 c0 test %eax,%eax + 266f: 0f 84 b0 00 00 00 je 2725 printf(1, "rm .. worked!\n"); exit(); } if(chdir("/") != 0){ - 26e1: 83 ec 0c sub $0xc,%esp - 26e4: 68 c5 3c 00 00 push $0x3cc5 - 26e9: e8 a0 11 00 00 call 388e - 26ee: 83 c4 10 add $0x10,%esp - 26f1: 85 c0 test %eax,%eax - 26f3: 0f 85 ac 00 00 00 jne 27a5 + 2675: 83 ec 0c sub $0xc,%esp + 2678: 68 ed 3b 00 00 push $0x3bed + 267d: e8 51 11 00 00 call 37d3 + 2682: 83 c4 10 add $0x10,%esp + 2685: 85 c0 test %eax,%eax + 2687: 0f 85 ac 00 00 00 jne 2739 printf(1, "chdir / failed\n"); exit(); } if(unlink("dots/.") == 0){ - 26f9: 83 ec 0c sub $0xc,%esp - 26fc: 68 8f 48 00 00 push $0x488f - 2701: e8 68 11 00 00 call 386e - 2706: 83 c4 10 add $0x10,%esp - 2709: 85 c0 test %eax,%eax - 270b: 0f 84 a8 00 00 00 je 27b9 + 268d: 83 ec 0c sub $0xc,%esp + 2690: 68 b7 47 00 00 push $0x47b7 + 2695: e8 19 11 00 00 call 37b3 + 269a: 83 c4 10 add $0x10,%esp + 269d: 85 c0 test %eax,%eax + 269f: 0f 84 a8 00 00 00 je 274d printf(1, "unlink dots/. worked!\n"); exit(); } if(unlink("dots/..") == 0){ - 2711: 83 ec 0c sub $0xc,%esp - 2714: 68 ad 48 00 00 push $0x48ad - 2719: e8 50 11 00 00 call 386e - 271e: 83 c4 10 add $0x10,%esp - 2721: 85 c0 test %eax,%eax - 2723: 0f 84 a4 00 00 00 je 27cd + 26a5: 83 ec 0c sub $0xc,%esp + 26a8: 68 d5 47 00 00 push $0x47d5 + 26ad: e8 01 11 00 00 call 37b3 + 26b2: 83 c4 10 add $0x10,%esp + 26b5: 85 c0 test %eax,%eax + 26b7: 0f 84 a4 00 00 00 je 2761 printf(1, "unlink dots/.. worked!\n"); exit(); } if(unlink("dots") != 0){ - 2729: 83 ec 0c sub $0xc,%esp - 272c: 68 47 48 00 00 push $0x4847 - 2731: e8 38 11 00 00 call 386e - 2736: 83 c4 10 add $0x10,%esp - 2739: 85 c0 test %eax,%eax - 273b: 0f 85 a0 00 00 00 jne 27e1 + 26bd: 83 ec 0c sub $0xc,%esp + 26c0: 68 6f 47 00 00 push $0x476f + 26c5: e8 e9 10 00 00 call 37b3 + 26ca: 83 c4 10 add $0x10,%esp + 26cd: 85 c0 test %eax,%eax + 26cf: 0f 85 a0 00 00 00 jne 2775 printf(1, "unlink dots failed!\n"); exit(); } printf(1, "rmdot ok\n"); - 2741: 83 ec 08 sub $0x8,%esp - 2744: 68 e2 48 00 00 push $0x48e2 - 2749: 6a 01 push $0x1 - 274b: e8 12 12 00 00 call 3962 + 26d5: 83 ec 08 sub $0x8,%esp + 26d8: 68 0a 48 00 00 push $0x480a + 26dd: 6a 01 push $0x1 + 26df: e8 c7 11 00 00 call 38ab } - 2750: 83 c4 10 add $0x10,%esp - 2753: c9 leave - 2754: c3 ret + 26e4: 83 c4 10 add $0x10,%esp + 26e7: c9 leave + 26e8: c3 ret printf(1, "mkdir dots failed\n"); - 2755: 83 ec 08 sub $0x8,%esp - 2758: 68 4c 48 00 00 push $0x484c - 275d: 6a 01 push $0x1 - 275f: e8 fe 11 00 00 call 3962 + 26e9: 83 ec 08 sub $0x8,%esp + 26ec: 68 74 47 00 00 push $0x4774 + 26f1: 6a 01 push $0x1 + 26f3: e8 b3 11 00 00 call 38ab exit(); - 2764: e8 b5 10 00 00 call 381e + 26f8: e8 66 10 00 00 call 3763 printf(1, "chdir dots failed\n"); - 2769: 83 ec 08 sub $0x8,%esp - 276c: 68 5f 48 00 00 push $0x485f - 2771: 6a 01 push $0x1 - 2773: e8 ea 11 00 00 call 3962 + 26fd: 83 ec 08 sub $0x8,%esp + 2700: 68 87 47 00 00 push $0x4787 + 2705: 6a 01 push $0x1 + 2707: e8 9f 11 00 00 call 38ab exit(); - 2778: e8 a1 10 00 00 call 381e + 270c: e8 52 10 00 00 call 3763 printf(1, "rm . worked!\n"); - 277d: 83 ec 08 sub $0x8,%esp - 2780: 68 72 48 00 00 push $0x4872 - 2785: 6a 01 push $0x1 - 2787: e8 d6 11 00 00 call 3962 + 2711: 83 ec 08 sub $0x8,%esp + 2714: 68 9a 47 00 00 push $0x479a + 2719: 6a 01 push $0x1 + 271b: e8 8b 11 00 00 call 38ab exit(); - 278c: e8 8d 10 00 00 call 381e + 2720: e8 3e 10 00 00 call 3763 printf(1, "rm .. worked!\n"); - 2791: 83 ec 08 sub $0x8,%esp - 2794: 68 80 48 00 00 push $0x4880 - 2799: 6a 01 push $0x1 - 279b: e8 c2 11 00 00 call 3962 + 2725: 83 ec 08 sub $0x8,%esp + 2728: 68 a8 47 00 00 push $0x47a8 + 272d: 6a 01 push $0x1 + 272f: e8 77 11 00 00 call 38ab exit(); - 27a0: e8 79 10 00 00 call 381e + 2734: e8 2a 10 00 00 call 3763 printf(1, "chdir / failed\n"); - 27a5: 83 ec 08 sub $0x8,%esp - 27a8: 68 c7 3c 00 00 push $0x3cc7 - 27ad: 6a 01 push $0x1 - 27af: e8 ae 11 00 00 call 3962 + 2739: 83 ec 08 sub $0x8,%esp + 273c: 68 ef 3b 00 00 push $0x3bef + 2741: 6a 01 push $0x1 + 2743: e8 63 11 00 00 call 38ab exit(); - 27b4: e8 65 10 00 00 call 381e + 2748: e8 16 10 00 00 call 3763 printf(1, "unlink dots/. worked!\n"); - 27b9: 83 ec 08 sub $0x8,%esp - 27bc: 68 96 48 00 00 push $0x4896 - 27c1: 6a 01 push $0x1 - 27c3: e8 9a 11 00 00 call 3962 + 274d: 83 ec 08 sub $0x8,%esp + 2750: 68 be 47 00 00 push $0x47be + 2755: 6a 01 push $0x1 + 2757: e8 4f 11 00 00 call 38ab exit(); - 27c8: e8 51 10 00 00 call 381e + 275c: e8 02 10 00 00 call 3763 printf(1, "unlink dots/.. worked!\n"); - 27cd: 83 ec 08 sub $0x8,%esp - 27d0: 68 b5 48 00 00 push $0x48b5 - 27d5: 6a 01 push $0x1 - 27d7: e8 86 11 00 00 call 3962 + 2761: 83 ec 08 sub $0x8,%esp + 2764: 68 dd 47 00 00 push $0x47dd + 2769: 6a 01 push $0x1 + 276b: e8 3b 11 00 00 call 38ab exit(); - 27dc: e8 3d 10 00 00 call 381e + 2770: e8 ee 0f 00 00 call 3763 printf(1, "unlink dots failed!\n"); - 27e1: 83 ec 08 sub $0x8,%esp - 27e4: 68 cd 48 00 00 push $0x48cd - 27e9: 6a 01 push $0x1 - 27eb: e8 72 11 00 00 call 3962 + 2775: 83 ec 08 sub $0x8,%esp + 2778: 68 f5 47 00 00 push $0x47f5 + 277d: 6a 01 push $0x1 + 277f: e8 27 11 00 00 call 38ab exit(); - 27f0: e8 29 10 00 00 call 381e + 2784: e8 da 0f 00 00 call 3763 -000027f5 : +00002789 : void dirfile(void) { - 27f5: f3 0f 1e fb endbr32 - 27f9: 55 push %ebp - 27fa: 89 e5 mov %esp,%ebp - 27fc: 53 push %ebx - 27fd: 83 ec 0c sub $0xc,%esp + 2789: 55 push %ebp + 278a: 89 e5 mov %esp,%ebp + 278c: 53 push %ebx + 278d: 83 ec 0c sub $0xc,%esp int fd; printf(1, "dir vs file\n"); - 2800: 68 ec 48 00 00 push $0x48ec - 2805: 6a 01 push $0x1 - 2807: e8 56 11 00 00 call 3962 + 2790: 68 14 48 00 00 push $0x4814 + 2795: 6a 01 push $0x1 + 2797: e8 0f 11 00 00 call 38ab fd = open("dirfile", O_CREATE); - 280c: 83 c4 08 add $0x8,%esp - 280f: 68 00 02 00 00 push $0x200 - 2814: 68 f9 48 00 00 push $0x48f9 - 2819: e8 40 10 00 00 call 385e + 279c: 83 c4 08 add $0x8,%esp + 279f: 68 00 02 00 00 push $0x200 + 27a4: 68 21 48 00 00 push $0x4821 + 27a9: e8 f5 0f 00 00 call 37a3 if(fd < 0){ - 281e: 83 c4 10 add $0x10,%esp - 2821: 85 c0 test %eax,%eax - 2823: 0f 88 22 01 00 00 js 294b + 27ae: 83 c4 10 add $0x10,%esp + 27b1: 85 c0 test %eax,%eax + 27b3: 0f 88 22 01 00 00 js 28db printf(1, "create dirfile failed\n"); exit(); } close(fd); - 2829: 83 ec 0c sub $0xc,%esp - 282c: 50 push %eax - 282d: e8 14 10 00 00 call 3846 + 27b9: 83 ec 0c sub $0xc,%esp + 27bc: 50 push %eax + 27bd: e8 c9 0f 00 00 call 378b if(chdir("dirfile") == 0){ - 2832: c7 04 24 f9 48 00 00 movl $0x48f9,(%esp) - 2839: e8 50 10 00 00 call 388e - 283e: 83 c4 10 add $0x10,%esp - 2841: 85 c0 test %eax,%eax - 2843: 0f 84 16 01 00 00 je 295f + 27c2: c7 04 24 21 48 00 00 movl $0x4821,(%esp) + 27c9: e8 05 10 00 00 call 37d3 + 27ce: 83 c4 10 add $0x10,%esp + 27d1: 85 c0 test %eax,%eax + 27d3: 0f 84 16 01 00 00 je 28ef printf(1, "chdir dirfile succeeded!\n"); exit(); } fd = open("dirfile/xx", 0); - 2849: 83 ec 08 sub $0x8,%esp - 284c: 6a 00 push $0x0 - 284e: 68 32 49 00 00 push $0x4932 - 2853: e8 06 10 00 00 call 385e + 27d9: 83 ec 08 sub $0x8,%esp + 27dc: 6a 00 push $0x0 + 27de: 68 5a 48 00 00 push $0x485a + 27e3: e8 bb 0f 00 00 call 37a3 if(fd >= 0){ - 2858: 83 c4 10 add $0x10,%esp - 285b: 85 c0 test %eax,%eax - 285d: 0f 89 10 01 00 00 jns 2973 + 27e8: 83 c4 10 add $0x10,%esp + 27eb: 85 c0 test %eax,%eax + 27ed: 0f 89 10 01 00 00 jns 2903 printf(1, "create dirfile/xx succeeded!\n"); exit(); } fd = open("dirfile/xx", O_CREATE); - 2863: 83 ec 08 sub $0x8,%esp - 2866: 68 00 02 00 00 push $0x200 - 286b: 68 32 49 00 00 push $0x4932 - 2870: e8 e9 0f 00 00 call 385e + 27f3: 83 ec 08 sub $0x8,%esp + 27f6: 68 00 02 00 00 push $0x200 + 27fb: 68 5a 48 00 00 push $0x485a + 2800: e8 9e 0f 00 00 call 37a3 if(fd >= 0){ - 2875: 83 c4 10 add $0x10,%esp - 2878: 85 c0 test %eax,%eax - 287a: 0f 89 07 01 00 00 jns 2987 + 2805: 83 c4 10 add $0x10,%esp + 2808: 85 c0 test %eax,%eax + 280a: 0f 89 07 01 00 00 jns 2917 printf(1, "create dirfile/xx succeeded!\n"); exit(); } if(mkdir("dirfile/xx") == 0){ - 2880: 83 ec 0c sub $0xc,%esp - 2883: 68 32 49 00 00 push $0x4932 - 2888: e8 f9 0f 00 00 call 3886 - 288d: 83 c4 10 add $0x10,%esp - 2890: 85 c0 test %eax,%eax - 2892: 0f 84 03 01 00 00 je 299b + 2810: 83 ec 0c sub $0xc,%esp + 2813: 68 5a 48 00 00 push $0x485a + 2818: e8 ae 0f 00 00 call 37cb + 281d: 83 c4 10 add $0x10,%esp + 2820: 85 c0 test %eax,%eax + 2822: 0f 84 03 01 00 00 je 292b printf(1, "mkdir dirfile/xx succeeded!\n"); exit(); } if(unlink("dirfile/xx") == 0){ - 2898: 83 ec 0c sub $0xc,%esp - 289b: 68 32 49 00 00 push $0x4932 - 28a0: e8 c9 0f 00 00 call 386e - 28a5: 83 c4 10 add $0x10,%esp - 28a8: 85 c0 test %eax,%eax - 28aa: 0f 84 ff 00 00 00 je 29af + 2828: 83 ec 0c sub $0xc,%esp + 282b: 68 5a 48 00 00 push $0x485a + 2830: e8 7e 0f 00 00 call 37b3 + 2835: 83 c4 10 add $0x10,%esp + 2838: 85 c0 test %eax,%eax + 283a: 0f 84 ff 00 00 00 je 293f printf(1, "unlink dirfile/xx succeeded!\n"); exit(); } if(link("README", "dirfile/xx") == 0){ - 28b0: 83 ec 08 sub $0x8,%esp - 28b3: 68 32 49 00 00 push $0x4932 - 28b8: 68 96 49 00 00 push $0x4996 - 28bd: e8 bc 0f 00 00 call 387e - 28c2: 83 c4 10 add $0x10,%esp - 28c5: 85 c0 test %eax,%eax - 28c7: 0f 84 f6 00 00 00 je 29c3 + 2840: 83 ec 08 sub $0x8,%esp + 2843: 68 5a 48 00 00 push $0x485a + 2848: 68 be 48 00 00 push $0x48be + 284d: e8 71 0f 00 00 call 37c3 + 2852: 83 c4 10 add $0x10,%esp + 2855: 85 c0 test %eax,%eax + 2857: 0f 84 f6 00 00 00 je 2953 printf(1, "link to dirfile/xx succeeded!\n"); exit(); } if(unlink("dirfile") != 0){ - 28cd: 83 ec 0c sub $0xc,%esp - 28d0: 68 f9 48 00 00 push $0x48f9 - 28d5: e8 94 0f 00 00 call 386e - 28da: 83 c4 10 add $0x10,%esp - 28dd: 85 c0 test %eax,%eax - 28df: 0f 85 f2 00 00 00 jne 29d7 + 285d: 83 ec 0c sub $0xc,%esp + 2860: 68 21 48 00 00 push $0x4821 + 2865: e8 49 0f 00 00 call 37b3 + 286a: 83 c4 10 add $0x10,%esp + 286d: 85 c0 test %eax,%eax + 286f: 0f 85 f2 00 00 00 jne 2967 printf(1, "unlink dirfile failed!\n"); exit(); } fd = open(".", O_RDWR); - 28e5: 83 ec 08 sub $0x8,%esp - 28e8: 6a 02 push $0x2 - 28ea: 68 f2 44 00 00 push $0x44f2 - 28ef: e8 6a 0f 00 00 call 385e + 2875: 83 ec 08 sub $0x8,%esp + 2878: 6a 02 push $0x2 + 287a: 68 1a 44 00 00 push $0x441a + 287f: e8 1f 0f 00 00 call 37a3 if(fd >= 0){ - 28f4: 83 c4 10 add $0x10,%esp - 28f7: 85 c0 test %eax,%eax - 28f9: 0f 89 ec 00 00 00 jns 29eb + 2884: 83 c4 10 add $0x10,%esp + 2887: 85 c0 test %eax,%eax + 2889: 0f 89 ec 00 00 00 jns 297b printf(1, "open . for writing succeeded!\n"); exit(); } fd = open(".", 0); - 28ff: 83 ec 08 sub $0x8,%esp - 2902: 6a 00 push $0x0 - 2904: 68 f2 44 00 00 push $0x44f2 - 2909: e8 50 0f 00 00 call 385e - 290e: 89 c3 mov %eax,%ebx + 288f: 83 ec 08 sub $0x8,%esp + 2892: 6a 00 push $0x0 + 2894: 68 1a 44 00 00 push $0x441a + 2899: e8 05 0f 00 00 call 37a3 + 289e: 89 c3 mov %eax,%ebx if(write(fd, "x", 1) > 0){ - 2910: 83 c4 0c add $0xc,%esp - 2913: 6a 01 push $0x1 - 2915: 68 d5 45 00 00 push $0x45d5 - 291a: 50 push %eax - 291b: e8 1e 0f 00 00 call 383e - 2920: 83 c4 10 add $0x10,%esp - 2923: 85 c0 test %eax,%eax - 2925: 0f 8f d4 00 00 00 jg 29ff + 28a0: 83 c4 0c add $0xc,%esp + 28a3: 6a 01 push $0x1 + 28a5: 68 fd 44 00 00 push $0x44fd + 28aa: 50 push %eax + 28ab: e8 d3 0e 00 00 call 3783 + 28b0: 83 c4 10 add $0x10,%esp + 28b3: 85 c0 test %eax,%eax + 28b5: 0f 8f d4 00 00 00 jg 298f printf(1, "write . succeeded!\n"); exit(); } close(fd); - 292b: 83 ec 0c sub $0xc,%esp - 292e: 53 push %ebx - 292f: e8 12 0f 00 00 call 3846 + 28bb: 83 ec 0c sub $0xc,%esp + 28be: 53 push %ebx + 28bf: e8 c7 0e 00 00 call 378b printf(1, "dir vs file OK\n"); - 2934: 83 c4 08 add $0x8,%esp - 2937: 68 c9 49 00 00 push $0x49c9 - 293c: 6a 01 push $0x1 - 293e: e8 1f 10 00 00 call 3962 + 28c4: 83 c4 08 add $0x8,%esp + 28c7: 68 f1 48 00 00 push $0x48f1 + 28cc: 6a 01 push $0x1 + 28ce: e8 d8 0f 00 00 call 38ab } - 2943: 83 c4 10 add $0x10,%esp - 2946: 8b 5d fc mov -0x4(%ebp),%ebx - 2949: c9 leave - 294a: c3 ret + 28d3: 83 c4 10 add $0x10,%esp + 28d6: 8b 5d fc mov -0x4(%ebp),%ebx + 28d9: c9 leave + 28da: c3 ret printf(1, "create dirfile failed\n"); - 294b: 83 ec 08 sub $0x8,%esp - 294e: 68 01 49 00 00 push $0x4901 - 2953: 6a 01 push $0x1 - 2955: e8 08 10 00 00 call 3962 + 28db: 83 ec 08 sub $0x8,%esp + 28de: 68 29 48 00 00 push $0x4829 + 28e3: 6a 01 push $0x1 + 28e5: e8 c1 0f 00 00 call 38ab exit(); - 295a: e8 bf 0e 00 00 call 381e + 28ea: e8 74 0e 00 00 call 3763 printf(1, "chdir dirfile succeeded!\n"); - 295f: 83 ec 08 sub $0x8,%esp - 2962: 68 18 49 00 00 push $0x4918 - 2967: 6a 01 push $0x1 - 2969: e8 f4 0f 00 00 call 3962 + 28ef: 83 ec 08 sub $0x8,%esp + 28f2: 68 40 48 00 00 push $0x4840 + 28f7: 6a 01 push $0x1 + 28f9: e8 ad 0f 00 00 call 38ab exit(); - 296e: e8 ab 0e 00 00 call 381e + 28fe: e8 60 0e 00 00 call 3763 printf(1, "create dirfile/xx succeeded!\n"); - 2973: 83 ec 08 sub $0x8,%esp - 2976: 68 3d 49 00 00 push $0x493d - 297b: 6a 01 push $0x1 - 297d: e8 e0 0f 00 00 call 3962 + 2903: 83 ec 08 sub $0x8,%esp + 2906: 68 65 48 00 00 push $0x4865 + 290b: 6a 01 push $0x1 + 290d: e8 99 0f 00 00 call 38ab exit(); - 2982: e8 97 0e 00 00 call 381e + 2912: e8 4c 0e 00 00 call 3763 printf(1, "create dirfile/xx succeeded!\n"); - 2987: 83 ec 08 sub $0x8,%esp - 298a: 68 3d 49 00 00 push $0x493d - 298f: 6a 01 push $0x1 - 2991: e8 cc 0f 00 00 call 3962 + 2917: 83 ec 08 sub $0x8,%esp + 291a: 68 65 48 00 00 push $0x4865 + 291f: 6a 01 push $0x1 + 2921: e8 85 0f 00 00 call 38ab exit(); - 2996: e8 83 0e 00 00 call 381e + 2926: e8 38 0e 00 00 call 3763 printf(1, "mkdir dirfile/xx succeeded!\n"); - 299b: 83 ec 08 sub $0x8,%esp - 299e: 68 5b 49 00 00 push $0x495b - 29a3: 6a 01 push $0x1 - 29a5: e8 b8 0f 00 00 call 3962 + 292b: 83 ec 08 sub $0x8,%esp + 292e: 68 83 48 00 00 push $0x4883 + 2933: 6a 01 push $0x1 + 2935: e8 71 0f 00 00 call 38ab exit(); - 29aa: e8 6f 0e 00 00 call 381e + 293a: e8 24 0e 00 00 call 3763 printf(1, "unlink dirfile/xx succeeded!\n"); - 29af: 83 ec 08 sub $0x8,%esp - 29b2: 68 78 49 00 00 push $0x4978 - 29b7: 6a 01 push $0x1 - 29b9: e8 a4 0f 00 00 call 3962 + 293f: 83 ec 08 sub $0x8,%esp + 2942: 68 a0 48 00 00 push $0x48a0 + 2947: 6a 01 push $0x1 + 2949: e8 5d 0f 00 00 call 38ab exit(); - 29be: e8 5b 0e 00 00 call 381e + 294e: e8 10 0e 00 00 call 3763 printf(1, "link to dirfile/xx succeeded!\n"); - 29c3: 83 ec 08 sub $0x8,%esp - 29c6: 68 8c 51 00 00 push $0x518c - 29cb: 6a 01 push $0x1 - 29cd: e8 90 0f 00 00 call 3962 + 2953: 83 ec 08 sub $0x8,%esp + 2956: 68 b4 50 00 00 push $0x50b4 + 295b: 6a 01 push $0x1 + 295d: e8 49 0f 00 00 call 38ab exit(); - 29d2: e8 47 0e 00 00 call 381e + 2962: e8 fc 0d 00 00 call 3763 printf(1, "unlink dirfile failed!\n"); - 29d7: 83 ec 08 sub $0x8,%esp - 29da: 68 9d 49 00 00 push $0x499d - 29df: 6a 01 push $0x1 - 29e1: e8 7c 0f 00 00 call 3962 + 2967: 83 ec 08 sub $0x8,%esp + 296a: 68 c5 48 00 00 push $0x48c5 + 296f: 6a 01 push $0x1 + 2971: e8 35 0f 00 00 call 38ab exit(); - 29e6: e8 33 0e 00 00 call 381e + 2976: e8 e8 0d 00 00 call 3763 printf(1, "open . for writing succeeded!\n"); - 29eb: 83 ec 08 sub $0x8,%esp - 29ee: 68 ac 51 00 00 push $0x51ac - 29f3: 6a 01 push $0x1 - 29f5: e8 68 0f 00 00 call 3962 + 297b: 83 ec 08 sub $0x8,%esp + 297e: 68 d4 50 00 00 push $0x50d4 + 2983: 6a 01 push $0x1 + 2985: e8 21 0f 00 00 call 38ab exit(); - 29fa: e8 1f 0e 00 00 call 381e + 298a: e8 d4 0d 00 00 call 3763 printf(1, "write . succeeded!\n"); - 29ff: 83 ec 08 sub $0x8,%esp - 2a02: 68 b5 49 00 00 push $0x49b5 - 2a07: 6a 01 push $0x1 - 2a09: e8 54 0f 00 00 call 3962 + 298f: 83 ec 08 sub $0x8,%esp + 2992: 68 dd 48 00 00 push $0x48dd + 2997: 6a 01 push $0x1 + 2999: e8 0d 0f 00 00 call 38ab exit(); - 2a0e: e8 0b 0e 00 00 call 381e + 299e: e8 c0 0d 00 00 call 3763 -00002a13 : +000029a3 : // test that iput() is called at the end of _namei() void iref(void) { - 2a13: f3 0f 1e fb endbr32 - 2a17: 55 push %ebp - 2a18: 89 e5 mov %esp,%ebp - 2a1a: 53 push %ebx - 2a1b: 83 ec 0c sub $0xc,%esp + 29a3: 55 push %ebp + 29a4: 89 e5 mov %esp,%ebp + 29a6: 53 push %ebx + 29a7: 83 ec 0c sub $0xc,%esp int i, fd; printf(1, "empty file name\n"); - 2a1e: 68 d9 49 00 00 push $0x49d9 - 2a23: 6a 01 push $0x1 - 2a25: e8 38 0f 00 00 call 3962 - 2a2a: 83 c4 10 add $0x10,%esp - 2a2d: bb 33 00 00 00 mov $0x33,%ebx - 2a32: eb 4f jmp 2a83 + 29aa: 68 01 49 00 00 push $0x4901 + 29af: 6a 01 push $0x1 + 29b1: e8 f5 0e 00 00 call 38ab + 29b6: 83 c4 10 add $0x10,%esp + 29b9: bb 33 00 00 00 mov $0x33,%ebx + 29be: eb 4f jmp 2a0f // the 50 is NINODE for(i = 0; i < 50 + 1; i++){ if(mkdir("irefd") != 0){ printf(1, "mkdir irefd failed\n"); - 2a34: 83 ec 08 sub $0x8,%esp - 2a37: 68 f0 49 00 00 push $0x49f0 - 2a3c: 6a 01 push $0x1 - 2a3e: e8 1f 0f 00 00 call 3962 + 29c0: 83 ec 08 sub $0x8,%esp + 29c3: 68 18 49 00 00 push $0x4918 + 29c8: 6a 01 push $0x1 + 29ca: e8 dc 0e 00 00 call 38ab exit(); - 2a43: e8 d6 0d 00 00 call 381e + 29cf: e8 8f 0d 00 00 call 3763 } if(chdir("irefd") != 0){ printf(1, "chdir irefd failed\n"); - 2a48: 83 ec 08 sub $0x8,%esp - 2a4b: 68 04 4a 00 00 push $0x4a04 - 2a50: 6a 01 push $0x1 - 2a52: e8 0b 0f 00 00 call 3962 + 29d4: 83 ec 08 sub $0x8,%esp + 29d7: 68 2c 49 00 00 push $0x492c + 29dc: 6a 01 push $0x1 + 29de: e8 c8 0e 00 00 call 38ab exit(); - 2a57: e8 c2 0d 00 00 call 381e + 29e3: e8 7b 0d 00 00 call 3763 mkdir(""); link("README", ""); fd = open("", O_CREATE); if(fd >= 0) close(fd); - 2a5c: 83 ec 0c sub $0xc,%esp - 2a5f: 50 push %eax - 2a60: e8 e1 0d 00 00 call 3846 - 2a65: 83 c4 10 add $0x10,%esp - 2a68: eb 7d jmp 2ae7 + 29e8: 83 ec 0c sub $0xc,%esp + 29eb: 50 push %eax + 29ec: e8 9a 0d 00 00 call 378b + 29f1: 83 c4 10 add $0x10,%esp + 29f4: eb 7d jmp 2a73 fd = open("xx", O_CREATE); if(fd >= 0) close(fd); unlink("xx"); - 2a6a: 83 ec 0c sub $0xc,%esp - 2a6d: 68 d4 45 00 00 push $0x45d4 - 2a72: e8 f7 0d 00 00 call 386e + 29f6: 83 ec 0c sub $0xc,%esp + 29f9: 68 fc 44 00 00 push $0x44fc + 29fe: e8 b0 0d 00 00 call 37b3 for(i = 0; i < 50 + 1; i++){ - 2a77: 83 c4 10 add $0x10,%esp - 2a7a: 83 eb 01 sub $0x1,%ebx - 2a7d: 0f 84 92 00 00 00 je 2b15 + 2a03: 83 c4 10 add $0x10,%esp + 2a06: 83 eb 01 sub $0x1,%ebx + 2a09: 0f 84 92 00 00 00 je 2aa1 if(mkdir("irefd") != 0){ - 2a83: 83 ec 0c sub $0xc,%esp - 2a86: 68 ea 49 00 00 push $0x49ea - 2a8b: e8 f6 0d 00 00 call 3886 - 2a90: 83 c4 10 add $0x10,%esp - 2a93: 85 c0 test %eax,%eax - 2a95: 75 9d jne 2a34 + 2a0f: 83 ec 0c sub $0xc,%esp + 2a12: 68 12 49 00 00 push $0x4912 + 2a17: e8 af 0d 00 00 call 37cb + 2a1c: 83 c4 10 add $0x10,%esp + 2a1f: 85 c0 test %eax,%eax + 2a21: 75 9d jne 29c0 if(chdir("irefd") != 0){ - 2a97: 83 ec 0c sub $0xc,%esp - 2a9a: 68 ea 49 00 00 push $0x49ea - 2a9f: e8 ea 0d 00 00 call 388e - 2aa4: 83 c4 10 add $0x10,%esp - 2aa7: 85 c0 test %eax,%eax - 2aa9: 75 9d jne 2a48 + 2a23: 83 ec 0c sub $0xc,%esp + 2a26: 68 12 49 00 00 push $0x4912 + 2a2b: e8 a3 0d 00 00 call 37d3 + 2a30: 83 c4 10 add $0x10,%esp + 2a33: 85 c0 test %eax,%eax + 2a35: 75 9d jne 29d4 mkdir(""); - 2aab: 83 ec 0c sub $0xc,%esp - 2aae: 68 9f 40 00 00 push $0x409f - 2ab3: e8 ce 0d 00 00 call 3886 + 2a37: 83 ec 0c sub $0xc,%esp + 2a3a: 68 c7 3f 00 00 push $0x3fc7 + 2a3f: e8 87 0d 00 00 call 37cb link("README", ""); - 2ab8: 83 c4 08 add $0x8,%esp - 2abb: 68 9f 40 00 00 push $0x409f - 2ac0: 68 96 49 00 00 push $0x4996 - 2ac5: e8 b4 0d 00 00 call 387e + 2a44: 83 c4 08 add $0x8,%esp + 2a47: 68 c7 3f 00 00 push $0x3fc7 + 2a4c: 68 be 48 00 00 push $0x48be + 2a51: e8 6d 0d 00 00 call 37c3 fd = open("", O_CREATE); - 2aca: 83 c4 08 add $0x8,%esp - 2acd: 68 00 02 00 00 push $0x200 - 2ad2: 68 9f 40 00 00 push $0x409f - 2ad7: e8 82 0d 00 00 call 385e + 2a56: 83 c4 08 add $0x8,%esp + 2a59: 68 00 02 00 00 push $0x200 + 2a5e: 68 c7 3f 00 00 push $0x3fc7 + 2a63: e8 3b 0d 00 00 call 37a3 if(fd >= 0) - 2adc: 83 c4 10 add $0x10,%esp - 2adf: 85 c0 test %eax,%eax - 2ae1: 0f 89 75 ff ff ff jns 2a5c + 2a68: 83 c4 10 add $0x10,%esp + 2a6b: 85 c0 test %eax,%eax + 2a6d: 0f 89 75 ff ff ff jns 29e8 fd = open("xx", O_CREATE); - 2ae7: 83 ec 08 sub $0x8,%esp - 2aea: 68 00 02 00 00 push $0x200 - 2aef: 68 d4 45 00 00 push $0x45d4 - 2af4: e8 65 0d 00 00 call 385e + 2a73: 83 ec 08 sub $0x8,%esp + 2a76: 68 00 02 00 00 push $0x200 + 2a7b: 68 fc 44 00 00 push $0x44fc + 2a80: e8 1e 0d 00 00 call 37a3 if(fd >= 0) - 2af9: 83 c4 10 add $0x10,%esp - 2afc: 85 c0 test %eax,%eax - 2afe: 0f 88 66 ff ff ff js 2a6a + 2a85: 83 c4 10 add $0x10,%esp + 2a88: 85 c0 test %eax,%eax + 2a8a: 0f 88 66 ff ff ff js 29f6 close(fd); - 2b04: 83 ec 0c sub $0xc,%esp - 2b07: 50 push %eax - 2b08: e8 39 0d 00 00 call 3846 - 2b0d: 83 c4 10 add $0x10,%esp - 2b10: e9 55 ff ff ff jmp 2a6a + 2a90: 83 ec 0c sub $0xc,%esp + 2a93: 50 push %eax + 2a94: e8 f2 0c 00 00 call 378b + 2a99: 83 c4 10 add $0x10,%esp + 2a9c: e9 55 ff ff ff jmp 29f6 } chdir("/"); - 2b15: 83 ec 0c sub $0xc,%esp - 2b18: 68 c5 3c 00 00 push $0x3cc5 - 2b1d: e8 6c 0d 00 00 call 388e + 2aa1: 83 ec 0c sub $0xc,%esp + 2aa4: 68 ed 3b 00 00 push $0x3bed + 2aa9: e8 25 0d 00 00 call 37d3 printf(1, "empty file name OK\n"); - 2b22: 83 c4 08 add $0x8,%esp - 2b25: 68 18 4a 00 00 push $0x4a18 - 2b2a: 6a 01 push $0x1 - 2b2c: e8 31 0e 00 00 call 3962 + 2aae: 83 c4 08 add $0x8,%esp + 2ab1: 68 40 49 00 00 push $0x4940 + 2ab6: 6a 01 push $0x1 + 2ab8: e8 ee 0d 00 00 call 38ab } - 2b31: 83 c4 10 add $0x10,%esp - 2b34: 8b 5d fc mov -0x4(%ebp),%ebx - 2b37: c9 leave - 2b38: c3 ret + 2abd: 83 c4 10 add $0x10,%esp + 2ac0: 8b 5d fc mov -0x4(%ebp),%ebx + 2ac3: c9 leave + 2ac4: c3 ret -00002b39 : +00002ac5 : // test that fork fails gracefully // the forktest binary also does this, but it runs out of proc entries first. // inside the bigger usertests binary, we run out of memory first. void forktest(void) { - 2b39: f3 0f 1e fb endbr32 - 2b3d: 55 push %ebp - 2b3e: 89 e5 mov %esp,%ebp - 2b40: 53 push %ebx - 2b41: 83 ec 0c sub $0xc,%esp + 2ac5: 55 push %ebp + 2ac6: 89 e5 mov %esp,%ebp + 2ac8: 53 push %ebx + 2ac9: 83 ec 0c sub $0xc,%esp int n, pid; printf(1, "fork test\n"); - 2b44: 68 2c 4a 00 00 push $0x4a2c - 2b49: 6a 01 push $0x1 - 2b4b: e8 12 0e 00 00 call 3962 - 2b50: 83 c4 10 add $0x10,%esp + 2acc: 68 54 49 00 00 push $0x4954 + 2ad1: 6a 01 push $0x1 + 2ad3: e8 d3 0d 00 00 call 38ab + 2ad8: 83 c4 10 add $0x10,%esp for(n=0; n<1000; n++){ - 2b53: bb 00 00 00 00 mov $0x0,%ebx + 2adb: bb 00 00 00 00 mov $0x0,%ebx pid = fork(); - 2b58: e8 b9 0c 00 00 call 3816 + 2ae0: e8 76 0c 00 00 call 375b if(pid < 0) - 2b5d: 85 c0 test %eax,%eax - 2b5f: 78 26 js 2b87 + 2ae5: 85 c0 test %eax,%eax + 2ae7: 78 26 js 2b0f break; if(pid == 0) - 2b61: 74 1f je 2b82 + 2ae9: 74 1f je 2b0a for(n=0; n<1000; n++){ - 2b63: 83 c3 01 add $0x1,%ebx - 2b66: 81 fb e8 03 00 00 cmp $0x3e8,%ebx - 2b6c: 75 ea jne 2b58 + 2aeb: 83 c3 01 add $0x1,%ebx + 2aee: 81 fb e8 03 00 00 cmp $0x3e8,%ebx + 2af4: 75 ea jne 2ae0 exit(); } if(n == 1000){ printf(1, "fork claimed to work 1000 times!\n"); - 2b6e: 83 ec 08 sub $0x8,%esp - 2b71: 68 cc 51 00 00 push $0x51cc - 2b76: 6a 01 push $0x1 - 2b78: e8 e5 0d 00 00 call 3962 + 2af6: 83 ec 08 sub $0x8,%esp + 2af9: 68 f4 50 00 00 push $0x50f4 + 2afe: 6a 01 push $0x1 + 2b00: e8 a6 0d 00 00 call 38ab exit(); - 2b7d: e8 9c 0c 00 00 call 381e + 2b05: e8 59 0c 00 00 call 3763 exit(); - 2b82: e8 97 0c 00 00 call 381e + 2b0a: e8 54 0c 00 00 call 3763 if(n == 1000){ - 2b87: 81 fb e8 03 00 00 cmp $0x3e8,%ebx - 2b8d: 74 df je 2b6e + 2b0f: 81 fb e8 03 00 00 cmp $0x3e8,%ebx + 2b15: 74 df je 2af6 } for(; n > 0; n--){ - 2b8f: 85 db test %ebx,%ebx - 2b91: 7e 0e jle 2ba1 + 2b17: 85 db test %ebx,%ebx + 2b19: 7e 0e jle 2b29 if(wait() < 0){ - 2b93: e8 8e 0c 00 00 call 3826 - 2b98: 85 c0 test %eax,%eax - 2b9a: 78 26 js 2bc2 + 2b1b: e8 4b 0c 00 00 call 376b + 2b20: 85 c0 test %eax,%eax + 2b22: 78 26 js 2b4a for(; n > 0; n--){ - 2b9c: 83 eb 01 sub $0x1,%ebx - 2b9f: 75 f2 jne 2b93 + 2b24: 83 eb 01 sub $0x1,%ebx + 2b27: 75 f2 jne 2b1b printf(1, "wait stopped early\n"); exit(); } } if(wait() != -1){ - 2ba1: e8 80 0c 00 00 call 3826 - 2ba6: 83 f8 ff cmp $0xffffffff,%eax - 2ba9: 75 2b jne 2bd6 + 2b29: e8 3d 0c 00 00 call 376b + 2b2e: 83 f8 ff cmp $0xffffffff,%eax + 2b31: 75 2b jne 2b5e printf(1, "wait got too many\n"); exit(); } printf(1, "fork test OK\n"); - 2bab: 83 ec 08 sub $0x8,%esp - 2bae: 68 5e 4a 00 00 push $0x4a5e - 2bb3: 6a 01 push $0x1 - 2bb5: e8 a8 0d 00 00 call 3962 + 2b33: 83 ec 08 sub $0x8,%esp + 2b36: 68 86 49 00 00 push $0x4986 + 2b3b: 6a 01 push $0x1 + 2b3d: e8 69 0d 00 00 call 38ab } - 2bba: 83 c4 10 add $0x10,%esp - 2bbd: 8b 5d fc mov -0x4(%ebp),%ebx - 2bc0: c9 leave - 2bc1: c3 ret + 2b42: 83 c4 10 add $0x10,%esp + 2b45: 8b 5d fc mov -0x4(%ebp),%ebx + 2b48: c9 leave + 2b49: c3 ret printf(1, "wait stopped early\n"); - 2bc2: 83 ec 08 sub $0x8,%esp - 2bc5: 68 37 4a 00 00 push $0x4a37 - 2bca: 6a 01 push $0x1 - 2bcc: e8 91 0d 00 00 call 3962 + 2b4a: 83 ec 08 sub $0x8,%esp + 2b4d: 68 5f 49 00 00 push $0x495f + 2b52: 6a 01 push $0x1 + 2b54: e8 52 0d 00 00 call 38ab exit(); - 2bd1: e8 48 0c 00 00 call 381e + 2b59: e8 05 0c 00 00 call 3763 printf(1, "wait got too many\n"); - 2bd6: 83 ec 08 sub $0x8,%esp - 2bd9: 68 4b 4a 00 00 push $0x4a4b - 2bde: 6a 01 push $0x1 - 2be0: e8 7d 0d 00 00 call 3962 + 2b5e: 83 ec 08 sub $0x8,%esp + 2b61: 68 73 49 00 00 push $0x4973 + 2b66: 6a 01 push $0x1 + 2b68: e8 3e 0d 00 00 call 38ab exit(); - 2be5: e8 34 0c 00 00 call 381e + 2b6d: e8 f1 0b 00 00 call 3763 -00002bea : +00002b72 : void sbrktest(void) { - 2bea: f3 0f 1e fb endbr32 - 2bee: 55 push %ebp - 2bef: 89 e5 mov %esp,%ebp - 2bf1: 57 push %edi - 2bf2: 56 push %esi - 2bf3: 53 push %ebx - 2bf4: 83 ec 64 sub $0x64,%esp + 2b72: 55 push %ebp + 2b73: 89 e5 mov %esp,%ebp + 2b75: 57 push %edi + 2b76: 56 push %esi + 2b77: 53 push %ebx + 2b78: 83 ec 64 sub $0x64,%esp int fds[2], pid, pids[10], ppid; char *a, *b, *c, *lastaddr, *oldbrk, *p, scratch; uint amt; printf(stdout, "sbrk test\n"); - 2bf7: 68 6c 4a 00 00 push $0x4a6c - 2bfc: ff 35 8c 5c 00 00 pushl 0x5c8c - 2c02: e8 5b 0d 00 00 call 3962 + 2b7b: 68 94 49 00 00 push $0x4994 + 2b80: ff 35 10 5c 00 00 push 0x5c10 + 2b86: e8 20 0d 00 00 call 38ab oldbrk = sbrk(0); - 2c07: c7 04 24 00 00 00 00 movl $0x0,(%esp) - 2c0e: e8 93 0c 00 00 call 38a6 - 2c13: 89 45 a4 mov %eax,-0x5c(%ebp) + 2b8b: c7 04 24 00 00 00 00 movl $0x0,(%esp) + 2b92: e8 54 0c 00 00 call 37eb + 2b97: 89 45 a4 mov %eax,-0x5c(%ebp) // can one sbrk() less than a page? a = sbrk(0); - 2c16: c7 04 24 00 00 00 00 movl $0x0,(%esp) - 2c1d: e8 84 0c 00 00 call 38a6 - 2c22: 89 c3 mov %eax,%ebx - 2c24: 83 c4 10 add $0x10,%esp + 2b9a: c7 04 24 00 00 00 00 movl $0x0,(%esp) + 2ba1: e8 45 0c 00 00 call 37eb + 2ba6: 89 c3 mov %eax,%ebx + 2ba8: 83 c4 10 add $0x10,%esp int i; for(i = 0; i < 5000; i++){ - 2c27: be 00 00 00 00 mov $0x0,%esi - 2c2c: eb 02 jmp 2c30 + 2bab: be 00 00 00 00 mov $0x0,%esi + 2bb0: eb 02 jmp 2bb4 if(b != a){ printf(stdout, "sbrk test failed %d %x %x\n", i, a, b); exit(); } *b = 1; a = b + 1; - 2c2e: 89 c3 mov %eax,%ebx + 2bb2: 89 c3 mov %eax,%ebx b = sbrk(1); - 2c30: 83 ec 0c sub $0xc,%esp - 2c33: 6a 01 push $0x1 - 2c35: e8 6c 0c 00 00 call 38a6 + 2bb4: 83 ec 0c sub $0xc,%esp + 2bb7: 6a 01 push $0x1 + 2bb9: e8 2d 0c 00 00 call 37eb if(b != a){ - 2c3a: 83 c4 10 add $0x10,%esp - 2c3d: 39 d8 cmp %ebx,%eax - 2c3f: 0f 85 90 01 00 00 jne 2dd5 + 2bbe: 83 c4 10 add $0x10,%esp + 2bc1: 39 d8 cmp %ebx,%eax + 2bc3: 0f 85 92 01 00 00 jne 2d5b *b = 1; - 2c45: c6 03 01 movb $0x1,(%ebx) + 2bc9: c6 03 01 movb $0x1,(%ebx) a = b + 1; - 2c48: 8d 43 01 lea 0x1(%ebx),%eax + 2bcc: 8d 43 01 lea 0x1(%ebx),%eax for(i = 0; i < 5000; i++){ - 2c4b: 83 c6 01 add $0x1,%esi - 2c4e: 81 fe 88 13 00 00 cmp $0x1388,%esi - 2c54: 75 d8 jne 2c2e + 2bcf: 83 c6 01 add $0x1,%esi + 2bd2: 81 fe 88 13 00 00 cmp $0x1388,%esi + 2bd8: 75 d8 jne 2bb2 } pid = fork(); - 2c56: e8 bb 0b 00 00 call 3816 - 2c5b: 89 c6 mov %eax,%esi + 2bda: e8 7c 0b 00 00 call 375b + 2bdf: 89 c6 mov %eax,%esi if(pid < 0){ - 2c5d: 85 c0 test %eax,%eax - 2c5f: 0f 88 8e 01 00 00 js 2df3 + 2be1: 85 c0 test %eax,%eax + 2be3: 0f 88 90 01 00 00 js 2d79 printf(stdout, "sbrk test fork failed\n"); exit(); } c = sbrk(1); - 2c65: 83 ec 0c sub $0xc,%esp - 2c68: 6a 01 push $0x1 - 2c6a: e8 37 0c 00 00 call 38a6 + 2be9: 83 ec 0c sub $0xc,%esp + 2bec: 6a 01 push $0x1 + 2bee: e8 f8 0b 00 00 call 37eb c = sbrk(1); - 2c6f: c7 04 24 01 00 00 00 movl $0x1,(%esp) - 2c76: e8 2b 0c 00 00 call 38a6 + 2bf3: c7 04 24 01 00 00 00 movl $0x1,(%esp) + 2bfa: e8 ec 0b 00 00 call 37eb if(c != a + 1){ - 2c7b: 83 c3 02 add $0x2,%ebx - 2c7e: 83 c4 10 add $0x10,%esp - 2c81: 39 c3 cmp %eax,%ebx - 2c83: 0f 85 82 01 00 00 jne 2e0b + 2bff: 83 c3 02 add $0x2,%ebx + 2c02: 83 c4 10 add $0x10,%esp + 2c05: 39 c3 cmp %eax,%ebx + 2c07: 0f 85 84 01 00 00 jne 2d91 printf(stdout, "sbrk test failed post-fork\n"); exit(); } if(pid == 0) - 2c89: 85 f6 test %esi,%esi - 2c8b: 0f 84 92 01 00 00 je 2e23 + 2c0d: 85 f6 test %esi,%esi + 2c0f: 0f 84 94 01 00 00 je 2da9 exit(); wait(); - 2c91: e8 90 0b 00 00 call 3826 + 2c15: e8 51 0b 00 00 call 376b // can one grow address space to something big? #define BIG (100*1024*1024) a = sbrk(0); - 2c96: 83 ec 0c sub $0xc,%esp - 2c99: 6a 00 push $0x0 - 2c9b: e8 06 0c 00 00 call 38a6 - 2ca0: 89 c3 mov %eax,%ebx + 2c1a: 83 ec 0c sub $0xc,%esp + 2c1d: 6a 00 push $0x0 + 2c1f: e8 c7 0b 00 00 call 37eb + 2c24: 89 c3 mov %eax,%ebx amt = (BIG) - (uint)a; - 2ca2: b8 00 00 40 06 mov $0x6400000,%eax - 2ca7: 29 d8 sub %ebx,%eax + 2c26: b8 00 00 40 06 mov $0x6400000,%eax + 2c2b: 29 d8 sub %ebx,%eax p = sbrk(amt); - 2ca9: 89 04 24 mov %eax,(%esp) - 2cac: e8 f5 0b 00 00 call 38a6 + 2c2d: 89 04 24 mov %eax,(%esp) + 2c30: e8 b6 0b 00 00 call 37eb if (p != a) { - 2cb1: 83 c4 10 add $0x10,%esp - 2cb4: 39 c3 cmp %eax,%ebx - 2cb6: 0f 85 6c 01 00 00 jne 2e28 + 2c35: 83 c4 10 add $0x10,%esp + 2c38: 39 c3 cmp %eax,%ebx + 2c3a: 0f 85 6e 01 00 00 jne 2dae printf(stdout, "sbrk test failed to grow big address space; enough phys mem?\n"); exit(); } lastaddr = (char*) (BIG-1); *lastaddr = 99; - 2cbc: c6 05 ff ff 3f 06 63 movb $0x63,0x63fffff + 2c40: c6 05 ff ff 3f 06 63 movb $0x63,0x63fffff // can one de-allocate? a = sbrk(0); - 2cc3: 83 ec 0c sub $0xc,%esp - 2cc6: 6a 00 push $0x0 - 2cc8: e8 d9 0b 00 00 call 38a6 - 2ccd: 89 c3 mov %eax,%ebx + 2c47: 83 ec 0c sub $0xc,%esp + 2c4a: 6a 00 push $0x0 + 2c4c: e8 9a 0b 00 00 call 37eb + 2c51: 89 c3 mov %eax,%ebx c = sbrk(-4096); - 2ccf: c7 04 24 00 f0 ff ff movl $0xfffff000,(%esp) - 2cd6: e8 cb 0b 00 00 call 38a6 + 2c53: c7 04 24 00 f0 ff ff movl $0xfffff000,(%esp) + 2c5a: e8 8c 0b 00 00 call 37eb if(c == (char*)0xffffffff){ - 2cdb: 83 c4 10 add $0x10,%esp - 2cde: 83 f8 ff cmp $0xffffffff,%eax - 2ce1: 0f 84 59 01 00 00 je 2e40 + 2c5f: 83 c4 10 add $0x10,%esp + 2c62: 83 f8 ff cmp $0xffffffff,%eax + 2c65: 0f 84 5b 01 00 00 je 2dc6 printf(stdout, "sbrk could not deallocate\n"); exit(); } c = sbrk(0); - 2ce7: 83 ec 0c sub $0xc,%esp - 2cea: 6a 00 push $0x0 - 2cec: e8 b5 0b 00 00 call 38a6 + 2c6b: 83 ec 0c sub $0xc,%esp + 2c6e: 6a 00 push $0x0 + 2c70: e8 76 0b 00 00 call 37eb if(c != a - 4096){ - 2cf1: 8d 93 00 f0 ff ff lea -0x1000(%ebx),%edx - 2cf7: 83 c4 10 add $0x10,%esp - 2cfa: 39 d0 cmp %edx,%eax - 2cfc: 0f 85 56 01 00 00 jne 2e58 + 2c75: 8d 93 00 f0 ff ff lea -0x1000(%ebx),%edx + 2c7b: 83 c4 10 add $0x10,%esp + 2c7e: 39 d0 cmp %edx,%eax + 2c80: 0f 85 58 01 00 00 jne 2dde printf(stdout, "sbrk deallocation produced wrong address, a %x c %x\n", a, c); exit(); } // can one re-allocate that page? a = sbrk(0); - 2d02: 83 ec 0c sub $0xc,%esp - 2d05: 6a 00 push $0x0 - 2d07: e8 9a 0b 00 00 call 38a6 - 2d0c: 89 c3 mov %eax,%ebx + 2c86: 83 ec 0c sub $0xc,%esp + 2c89: 6a 00 push $0x0 + 2c8b: e8 5b 0b 00 00 call 37eb + 2c90: 89 c3 mov %eax,%ebx c = sbrk(4096); - 2d0e: c7 04 24 00 10 00 00 movl $0x1000,(%esp) - 2d15: e8 8c 0b 00 00 call 38a6 - 2d1a: 89 c6 mov %eax,%esi + 2c92: c7 04 24 00 10 00 00 movl $0x1000,(%esp) + 2c99: e8 4d 0b 00 00 call 37eb + 2c9e: 89 c6 mov %eax,%esi if(c != a || sbrk(0) != a + 4096){ - 2d1c: 83 c4 10 add $0x10,%esp - 2d1f: 39 c3 cmp %eax,%ebx - 2d21: 0f 85 48 01 00 00 jne 2e6f - 2d27: 83 ec 0c sub $0xc,%esp - 2d2a: 6a 00 push $0x0 - 2d2c: e8 75 0b 00 00 call 38a6 - 2d31: 8d 93 00 10 00 00 lea 0x1000(%ebx),%edx - 2d37: 83 c4 10 add $0x10,%esp - 2d3a: 39 c2 cmp %eax,%edx - 2d3c: 0f 85 2d 01 00 00 jne 2e6f + 2ca0: 83 c4 10 add $0x10,%esp + 2ca3: 39 c3 cmp %eax,%ebx + 2ca5: 0f 85 4a 01 00 00 jne 2df5 + 2cab: 83 ec 0c sub $0xc,%esp + 2cae: 6a 00 push $0x0 + 2cb0: e8 36 0b 00 00 call 37eb + 2cb5: 8d 93 00 10 00 00 lea 0x1000(%ebx),%edx + 2cbb: 83 c4 10 add $0x10,%esp + 2cbe: 39 c2 cmp %eax,%edx + 2cc0: 0f 85 2f 01 00 00 jne 2df5 printf(stdout, "sbrk re-allocation failed, a %x c %x\n", a, c); exit(); } if(*lastaddr == 99){ - 2d42: 80 3d ff ff 3f 06 63 cmpb $0x63,0x63fffff - 2d49: 0f 84 37 01 00 00 je 2e86 + 2cc6: 80 3d ff ff 3f 06 63 cmpb $0x63,0x63fffff + 2ccd: 0f 84 39 01 00 00 je 2e0c // should be zero printf(stdout, "sbrk de-allocation didn't really deallocate\n"); exit(); } a = sbrk(0); - 2d4f: 83 ec 0c sub $0xc,%esp - 2d52: 6a 00 push $0x0 - 2d54: e8 4d 0b 00 00 call 38a6 - 2d59: 89 c3 mov %eax,%ebx + 2cd3: 83 ec 0c sub $0xc,%esp + 2cd6: 6a 00 push $0x0 + 2cd8: e8 0e 0b 00 00 call 37eb + 2cdd: 89 c3 mov %eax,%ebx c = sbrk(-(sbrk(0) - oldbrk)); - 2d5b: c7 04 24 00 00 00 00 movl $0x0,(%esp) - 2d62: e8 3f 0b 00 00 call 38a6 - 2d67: 8b 4d a4 mov -0x5c(%ebp),%ecx - 2d6a: 29 c1 sub %eax,%ecx - 2d6c: 89 0c 24 mov %ecx,(%esp) - 2d6f: e8 32 0b 00 00 call 38a6 + 2cdf: c7 04 24 00 00 00 00 movl $0x0,(%esp) + 2ce6: e8 00 0b 00 00 call 37eb + 2ceb: 89 c2 mov %eax,%edx + 2ced: 8b 45 a4 mov -0x5c(%ebp),%eax + 2cf0: 29 d0 sub %edx,%eax + 2cf2: 89 04 24 mov %eax,(%esp) + 2cf5: e8 f1 0a 00 00 call 37eb if(c != a){ - 2d74: 83 c4 10 add $0x10,%esp - 2d77: 39 c3 cmp %eax,%ebx - 2d79: 0f 85 1f 01 00 00 jne 2e9e + 2cfa: 83 c4 10 add $0x10,%esp + 2cfd: 39 c3 cmp %eax,%ebx + 2cff: 0f 85 1f 01 00 00 jne 2e24 printf(stdout, "sbrk downsize failed, a %x c %x\n", a, c); exit(); } // can we read the kernel's memory? for(a = (char*)(KERNBASE); a < (char*) (KERNBASE+2000000); a += 50000){ - 2d7f: bb 00 00 00 80 mov $0x80000000,%ebx + 2d05: bb 00 00 00 80 mov $0x80000000,%ebx ppid = getpid(); - 2d84: e8 15 0b 00 00 call 389e - 2d89: 89 c6 mov %eax,%esi + 2d0a: e8 d4 0a 00 00 call 37e3 + 2d0f: 89 c6 mov %eax,%esi pid = fork(); - 2d8b: e8 86 0a 00 00 call 3816 + 2d11: e8 45 0a 00 00 call 375b if(pid < 0){ - 2d90: 85 c0 test %eax,%eax - 2d92: 0f 88 1d 01 00 00 js 2eb5 + 2d16: 85 c0 test %eax,%eax + 2d18: 0f 88 1d 01 00 00 js 2e3b printf(stdout, "fork failed\n"); exit(); } if(pid == 0){ - 2d98: 0f 84 2f 01 00 00 je 2ecd + 2d1e: 0f 84 2f 01 00 00 je 2e53 printf(stdout, "oops could read %x = %x\n", a, *a); kill(ppid); exit(); } wait(); - 2d9e: e8 83 0a 00 00 call 3826 + 2d24: e8 42 0a 00 00 call 376b for(a = (char*)(KERNBASE); a < (char*) (KERNBASE+2000000); a += 50000){ - 2da3: 81 c3 50 c3 00 00 add $0xc350,%ebx - 2da9: 81 fb 80 84 1e 80 cmp $0x801e8480,%ebx - 2daf: 75 d3 jne 2d84 + 2d29: 81 c3 50 c3 00 00 add $0xc350,%ebx + 2d2f: 81 fb 80 84 1e 80 cmp $0x801e8480,%ebx + 2d35: 75 d3 jne 2d0a } // if we run the system out of memory, does it clean up the last // failed allocation? if(pipe(fds) != 0){ - 2db1: 83 ec 0c sub $0xc,%esp - 2db4: 8d 45 e0 lea -0x20(%ebp),%eax - 2db7: 50 push %eax - 2db8: e8 71 0a 00 00 call 382e - 2dbd: 83 c4 10 add $0x10,%esp - 2dc0: 85 c0 test %eax,%eax - 2dc2: 0f 85 27 01 00 00 jne 2eef - 2dc8: 8d 5d b8 lea -0x48(%ebp),%ebx - 2dcb: 8d 7d e0 lea -0x20(%ebp),%edi - 2dce: 89 de mov %ebx,%esi - 2dd0: e9 77 01 00 00 jmp 2f4c + 2d37: 83 ec 0c sub $0xc,%esp + 2d3a: 8d 45 e0 lea -0x20(%ebp),%eax + 2d3d: 50 push %eax + 2d3e: e8 30 0a 00 00 call 3773 + 2d43: 83 c4 10 add $0x10,%esp + 2d46: 85 c0 test %eax,%eax + 2d48: 0f 85 27 01 00 00 jne 2e75 + 2d4e: 8d 5d b8 lea -0x48(%ebp),%ebx + 2d51: 8d 7d e0 lea -0x20(%ebp),%edi + 2d54: 89 de mov %ebx,%esi + 2d56: e9 77 01 00 00 jmp 2ed2 printf(stdout, "sbrk test failed %d %x %x\n", i, a, b); - 2dd5: 83 ec 0c sub $0xc,%esp - 2dd8: 50 push %eax - 2dd9: 53 push %ebx - 2dda: 56 push %esi - 2ddb: 68 77 4a 00 00 push $0x4a77 - 2de0: ff 35 8c 5c 00 00 pushl 0x5c8c - 2de6: e8 77 0b 00 00 call 3962 + 2d5b: 83 ec 0c sub $0xc,%esp + 2d5e: 50 push %eax + 2d5f: 53 push %ebx + 2d60: 56 push %esi + 2d61: 68 9f 49 00 00 push $0x499f + 2d66: ff 35 10 5c 00 00 push 0x5c10 + 2d6c: e8 3a 0b 00 00 call 38ab exit(); - 2deb: 83 c4 20 add $0x20,%esp - 2dee: e8 2b 0a 00 00 call 381e + 2d71: 83 c4 20 add $0x20,%esp + 2d74: e8 ea 09 00 00 call 3763 printf(stdout, "sbrk test fork failed\n"); - 2df3: 83 ec 08 sub $0x8,%esp - 2df6: 68 92 4a 00 00 push $0x4a92 - 2dfb: ff 35 8c 5c 00 00 pushl 0x5c8c - 2e01: e8 5c 0b 00 00 call 3962 + 2d79: 83 ec 08 sub $0x8,%esp + 2d7c: 68 ba 49 00 00 push $0x49ba + 2d81: ff 35 10 5c 00 00 push 0x5c10 + 2d87: e8 1f 0b 00 00 call 38ab exit(); - 2e06: e8 13 0a 00 00 call 381e + 2d8c: e8 d2 09 00 00 call 3763 printf(stdout, "sbrk test failed post-fork\n"); - 2e0b: 83 ec 08 sub $0x8,%esp - 2e0e: 68 a9 4a 00 00 push $0x4aa9 - 2e13: ff 35 8c 5c 00 00 pushl 0x5c8c - 2e19: e8 44 0b 00 00 call 3962 + 2d91: 83 ec 08 sub $0x8,%esp + 2d94: 68 d1 49 00 00 push $0x49d1 + 2d99: ff 35 10 5c 00 00 push 0x5c10 + 2d9f: e8 07 0b 00 00 call 38ab exit(); - 2e1e: e8 fb 09 00 00 call 381e + 2da4: e8 ba 09 00 00 call 3763 exit(); - 2e23: e8 f6 09 00 00 call 381e + 2da9: e8 b5 09 00 00 call 3763 printf(stdout, "sbrk test failed to grow big address space; enough phys mem?\n"); - 2e28: 83 ec 08 sub $0x8,%esp - 2e2b: 68 f0 51 00 00 push $0x51f0 - 2e30: ff 35 8c 5c 00 00 pushl 0x5c8c - 2e36: e8 27 0b 00 00 call 3962 + 2dae: 83 ec 08 sub $0x8,%esp + 2db1: 68 18 51 00 00 push $0x5118 + 2db6: ff 35 10 5c 00 00 push 0x5c10 + 2dbc: e8 ea 0a 00 00 call 38ab exit(); - 2e3b: e8 de 09 00 00 call 381e + 2dc1: e8 9d 09 00 00 call 3763 printf(stdout, "sbrk could not deallocate\n"); - 2e40: 83 ec 08 sub $0x8,%esp - 2e43: 68 c5 4a 00 00 push $0x4ac5 - 2e48: ff 35 8c 5c 00 00 pushl 0x5c8c - 2e4e: e8 0f 0b 00 00 call 3962 + 2dc6: 83 ec 08 sub $0x8,%esp + 2dc9: 68 ed 49 00 00 push $0x49ed + 2dce: ff 35 10 5c 00 00 push 0x5c10 + 2dd4: e8 d2 0a 00 00 call 38ab exit(); - 2e53: e8 c6 09 00 00 call 381e + 2dd9: e8 85 09 00 00 call 3763 printf(stdout, "sbrk deallocation produced wrong address, a %x c %x\n", a, c); - 2e58: 50 push %eax - 2e59: 53 push %ebx - 2e5a: 68 30 52 00 00 push $0x5230 - 2e5f: ff 35 8c 5c 00 00 pushl 0x5c8c - 2e65: e8 f8 0a 00 00 call 3962 + 2dde: 50 push %eax + 2ddf: 53 push %ebx + 2de0: 68 58 51 00 00 push $0x5158 + 2de5: ff 35 10 5c 00 00 push 0x5c10 + 2deb: e8 bb 0a 00 00 call 38ab exit(); - 2e6a: e8 af 09 00 00 call 381e + 2df0: e8 6e 09 00 00 call 3763 printf(stdout, "sbrk re-allocation failed, a %x c %x\n", a, c); - 2e6f: 56 push %esi - 2e70: 53 push %ebx - 2e71: 68 68 52 00 00 push $0x5268 - 2e76: ff 35 8c 5c 00 00 pushl 0x5c8c - 2e7c: e8 e1 0a 00 00 call 3962 + 2df5: 56 push %esi + 2df6: 53 push %ebx + 2df7: 68 90 51 00 00 push $0x5190 + 2dfc: ff 35 10 5c 00 00 push 0x5c10 + 2e02: e8 a4 0a 00 00 call 38ab exit(); - 2e81: e8 98 09 00 00 call 381e + 2e07: e8 57 09 00 00 call 3763 printf(stdout, "sbrk de-allocation didn't really deallocate\n"); - 2e86: 83 ec 08 sub $0x8,%esp - 2e89: 68 90 52 00 00 push $0x5290 - 2e8e: ff 35 8c 5c 00 00 pushl 0x5c8c - 2e94: e8 c9 0a 00 00 call 3962 + 2e0c: 83 ec 08 sub $0x8,%esp + 2e0f: 68 b8 51 00 00 push $0x51b8 + 2e14: ff 35 10 5c 00 00 push 0x5c10 + 2e1a: e8 8c 0a 00 00 call 38ab exit(); - 2e99: e8 80 09 00 00 call 381e + 2e1f: e8 3f 09 00 00 call 3763 printf(stdout, "sbrk downsize failed, a %x c %x\n", a, c); - 2e9e: 50 push %eax - 2e9f: 53 push %ebx - 2ea0: 68 c0 52 00 00 push $0x52c0 - 2ea5: ff 35 8c 5c 00 00 pushl 0x5c8c - 2eab: e8 b2 0a 00 00 call 3962 + 2e24: 50 push %eax + 2e25: 53 push %ebx + 2e26: 68 e8 51 00 00 push $0x51e8 + 2e2b: ff 35 10 5c 00 00 push 0x5c10 + 2e31: e8 75 0a 00 00 call 38ab exit(); - 2eb0: e8 69 09 00 00 call 381e + 2e36: e8 28 09 00 00 call 3763 printf(stdout, "fork failed\n"); - 2eb5: 83 ec 08 sub $0x8,%esp - 2eb8: 68 bd 4b 00 00 push $0x4bbd - 2ebd: ff 35 8c 5c 00 00 pushl 0x5c8c - 2ec3: e8 9a 0a 00 00 call 3962 + 2e3b: 83 ec 08 sub $0x8,%esp + 2e3e: 68 e5 4a 00 00 push $0x4ae5 + 2e43: ff 35 10 5c 00 00 push 0x5c10 + 2e49: e8 5d 0a 00 00 call 38ab exit(); - 2ec8: e8 51 09 00 00 call 381e + 2e4e: e8 10 09 00 00 call 3763 printf(stdout, "oops could read %x = %x\n", a, *a); - 2ecd: 0f be 03 movsbl (%ebx),%eax - 2ed0: 50 push %eax - 2ed1: 53 push %ebx - 2ed2: 68 e0 4a 00 00 push $0x4ae0 - 2ed7: ff 35 8c 5c 00 00 pushl 0x5c8c - 2edd: e8 80 0a 00 00 call 3962 + 2e53: 0f be 03 movsbl (%ebx),%eax + 2e56: 50 push %eax + 2e57: 53 push %ebx + 2e58: 68 08 4a 00 00 push $0x4a08 + 2e5d: ff 35 10 5c 00 00 push 0x5c10 + 2e63: e8 43 0a 00 00 call 38ab kill(ppid); - 2ee2: 89 34 24 mov %esi,(%esp) - 2ee5: e8 64 09 00 00 call 384e + 2e68: 89 34 24 mov %esi,(%esp) + 2e6b: e8 23 09 00 00 call 3793 exit(); - 2eea: e8 2f 09 00 00 call 381e + 2e70: e8 ee 08 00 00 call 3763 printf(1, "pipe() failed\n"); - 2eef: 83 ec 08 sub $0x8,%esp - 2ef2: 68 b5 3f 00 00 push $0x3fb5 - 2ef7: 6a 01 push $0x1 - 2ef9: e8 64 0a 00 00 call 3962 + 2e75: 83 ec 08 sub $0x8,%esp + 2e78: 68 dd 3e 00 00 push $0x3edd + 2e7d: 6a 01 push $0x1 + 2e7f: e8 27 0a 00 00 call 38ab exit(); - 2efe: e8 1b 09 00 00 call 381e + 2e84: e8 da 08 00 00 call 3763 } for(i = 0; i < sizeof(pids)/sizeof(pids[0]); i++){ if((pids[i] = fork()) == 0){ // allocate a lot of memory sbrk(BIG - (uint)sbrk(0)); - 2f03: 83 ec 0c sub $0xc,%esp - 2f06: 6a 00 push $0x0 - 2f08: e8 99 09 00 00 call 38a6 - 2f0d: 89 c2 mov %eax,%edx - 2f0f: b8 00 00 40 06 mov $0x6400000,%eax - 2f14: 29 d0 sub %edx,%eax - 2f16: 89 04 24 mov %eax,(%esp) - 2f19: e8 88 09 00 00 call 38a6 + 2e89: 83 ec 0c sub $0xc,%esp + 2e8c: 6a 00 push $0x0 + 2e8e: e8 58 09 00 00 call 37eb + 2e93: 89 c2 mov %eax,%edx + 2e95: b8 00 00 40 06 mov $0x6400000,%eax + 2e9a: 29 d0 sub %edx,%eax + 2e9c: 89 04 24 mov %eax,(%esp) + 2e9f: e8 47 09 00 00 call 37eb write(fds[1], "x", 1); - 2f1e: 83 c4 0c add $0xc,%esp - 2f21: 6a 01 push $0x1 - 2f23: 68 d5 45 00 00 push $0x45d5 - 2f28: ff 75 e4 pushl -0x1c(%ebp) - 2f2b: e8 0e 09 00 00 call 383e - 2f30: 83 c4 10 add $0x10,%esp + 2ea4: 83 c4 0c add $0xc,%esp + 2ea7: 6a 01 push $0x1 + 2ea9: 68 fd 44 00 00 push $0x44fd + 2eae: ff 75 e4 push -0x1c(%ebp) + 2eb1: e8 cd 08 00 00 call 3783 + 2eb6: 83 c4 10 add $0x10,%esp // sit around until killed for(;;) sleep(1000); - 2f33: 83 ec 0c sub $0xc,%esp - 2f36: 68 e8 03 00 00 push $0x3e8 - 2f3b: e8 6e 09 00 00 call 38ae - 2f40: 83 c4 10 add $0x10,%esp - 2f43: eb ee jmp 2f33 + 2eb9: 83 ec 0c sub $0xc,%esp + 2ebc: 68 e8 03 00 00 push $0x3e8 + 2ec1: e8 2d 09 00 00 call 37f3 + 2ec6: 83 c4 10 add $0x10,%esp + 2ec9: eb ee jmp 2eb9 for(i = 0; i < sizeof(pids)/sizeof(pids[0]); i++){ - 2f45: 83 c6 04 add $0x4,%esi - 2f48: 39 fe cmp %edi,%esi - 2f4a: 74 26 je 2f72 + 2ecb: 83 c6 04 add $0x4,%esi + 2ece: 39 fe cmp %edi,%esi + 2ed0: 74 26 je 2ef8 if((pids[i] = fork()) == 0){ - 2f4c: e8 c5 08 00 00 call 3816 - 2f51: 89 06 mov %eax,(%esi) - 2f53: 85 c0 test %eax,%eax - 2f55: 74 ac je 2f03 + 2ed2: e8 84 08 00 00 call 375b + 2ed7: 89 06 mov %eax,(%esi) + 2ed9: 85 c0 test %eax,%eax + 2edb: 74 ac je 2e89 } if(pids[i] != -1) - 2f57: 83 f8 ff cmp $0xffffffff,%eax - 2f5a: 74 e9 je 2f45 + 2edd: 83 f8 ff cmp $0xffffffff,%eax + 2ee0: 74 e9 je 2ecb read(fds[0], &scratch, 1); - 2f5c: 83 ec 04 sub $0x4,%esp - 2f5f: 6a 01 push $0x1 - 2f61: 8d 45 b7 lea -0x49(%ebp),%eax - 2f64: 50 push %eax - 2f65: ff 75 e0 pushl -0x20(%ebp) - 2f68: e8 c9 08 00 00 call 3836 - 2f6d: 83 c4 10 add $0x10,%esp - 2f70: eb d3 jmp 2f45 + 2ee2: 83 ec 04 sub $0x4,%esp + 2ee5: 6a 01 push $0x1 + 2ee7: 8d 45 b7 lea -0x49(%ebp),%eax + 2eea: 50 push %eax + 2eeb: ff 75 e0 push -0x20(%ebp) + 2eee: e8 88 08 00 00 call 377b + 2ef3: 83 c4 10 add $0x10,%esp + 2ef6: eb d3 jmp 2ecb } // if those failed allocations freed up the pages they did allocate, // we'll be able to allocate here c = sbrk(4096); - 2f72: 83 ec 0c sub $0xc,%esp - 2f75: 68 00 10 00 00 push $0x1000 - 2f7a: e8 27 09 00 00 call 38a6 - 2f7f: 89 c6 mov %eax,%esi - 2f81: 83 c4 10 add $0x10,%esp - 2f84: eb 07 jmp 2f8d + 2ef8: 83 ec 0c sub $0xc,%esp + 2efb: 68 00 10 00 00 push $0x1000 + 2f00: e8 e6 08 00 00 call 37eb + 2f05: 89 c6 mov %eax,%esi + 2f07: 83 c4 10 add $0x10,%esp + 2f0a: eb 07 jmp 2f13 for(i = 0; i < sizeof(pids)/sizeof(pids[0]); i++){ - 2f86: 83 c3 04 add $0x4,%ebx - 2f89: 39 fb cmp %edi,%ebx - 2f8b: 74 1a je 2fa7 + 2f0c: 83 c3 04 add $0x4,%ebx + 2f0f: 39 fb cmp %edi,%ebx + 2f11: 74 1a je 2f2d if(pids[i] == -1) - 2f8d: 8b 03 mov (%ebx),%eax - 2f8f: 83 f8 ff cmp $0xffffffff,%eax - 2f92: 74 f2 je 2f86 + 2f13: 8b 03 mov (%ebx),%eax + 2f15: 83 f8 ff cmp $0xffffffff,%eax + 2f18: 74 f2 je 2f0c continue; kill(pids[i]); - 2f94: 83 ec 0c sub $0xc,%esp - 2f97: 50 push %eax - 2f98: e8 b1 08 00 00 call 384e + 2f1a: 83 ec 0c sub $0xc,%esp + 2f1d: 50 push %eax + 2f1e: e8 70 08 00 00 call 3793 wait(); - 2f9d: e8 84 08 00 00 call 3826 - 2fa2: 83 c4 10 add $0x10,%esp - 2fa5: eb df jmp 2f86 + 2f23: e8 43 08 00 00 call 376b + 2f28: 83 c4 10 add $0x10,%esp + 2f2b: eb df jmp 2f0c } if(c == (char*)0xffffffff){ - 2fa7: 83 fe ff cmp $0xffffffff,%esi - 2faa: 74 30 je 2fdc + 2f2d: 83 fe ff cmp $0xffffffff,%esi + 2f30: 74 30 je 2f62 printf(stdout, "failed sbrk leaked memory\n"); exit(); } if(sbrk(0) > oldbrk) - 2fac: 83 ec 0c sub $0xc,%esp - 2faf: 6a 00 push $0x0 - 2fb1: e8 f0 08 00 00 call 38a6 - 2fb6: 83 c4 10 add $0x10,%esp - 2fb9: 39 45 a4 cmp %eax,-0x5c(%ebp) - 2fbc: 72 36 jb 2ff4 + 2f32: 83 ec 0c sub $0xc,%esp + 2f35: 6a 00 push $0x0 + 2f37: e8 af 08 00 00 call 37eb + 2f3c: 83 c4 10 add $0x10,%esp + 2f3f: 39 45 a4 cmp %eax,-0x5c(%ebp) + 2f42: 72 36 jb 2f7a sbrk(-(sbrk(0) - oldbrk)); printf(stdout, "sbrk test OK\n"); - 2fbe: 83 ec 08 sub $0x8,%esp - 2fc1: 68 14 4b 00 00 push $0x4b14 - 2fc6: ff 35 8c 5c 00 00 pushl 0x5c8c - 2fcc: e8 91 09 00 00 call 3962 + 2f44: 83 ec 08 sub $0x8,%esp + 2f47: 68 3c 4a 00 00 push $0x4a3c + 2f4c: ff 35 10 5c 00 00 push 0x5c10 + 2f52: e8 54 09 00 00 call 38ab } - 2fd1: 83 c4 10 add $0x10,%esp - 2fd4: 8d 65 f4 lea -0xc(%ebp),%esp - 2fd7: 5b pop %ebx - 2fd8: 5e pop %esi - 2fd9: 5f pop %edi - 2fda: 5d pop %ebp - 2fdb: c3 ret + 2f57: 83 c4 10 add $0x10,%esp + 2f5a: 8d 65 f4 lea -0xc(%ebp),%esp + 2f5d: 5b pop %ebx + 2f5e: 5e pop %esi + 2f5f: 5f pop %edi + 2f60: 5d pop %ebp + 2f61: c3 ret printf(stdout, "failed sbrk leaked memory\n"); - 2fdc: 83 ec 08 sub $0x8,%esp - 2fdf: 68 f9 4a 00 00 push $0x4af9 - 2fe4: ff 35 8c 5c 00 00 pushl 0x5c8c - 2fea: e8 73 09 00 00 call 3962 + 2f62: 83 ec 08 sub $0x8,%esp + 2f65: 68 21 4a 00 00 push $0x4a21 + 2f6a: ff 35 10 5c 00 00 push 0x5c10 + 2f70: e8 36 09 00 00 call 38ab exit(); - 2fef: e8 2a 08 00 00 call 381e + 2f75: e8 e9 07 00 00 call 3763 sbrk(-(sbrk(0) - oldbrk)); - 2ff4: 83 ec 0c sub $0xc,%esp - 2ff7: 6a 00 push $0x0 - 2ff9: e8 a8 08 00 00 call 38a6 - 2ffe: 8b 4d a4 mov -0x5c(%ebp),%ecx - 3001: 29 c1 sub %eax,%ecx - 3003: 89 0c 24 mov %ecx,(%esp) - 3006: e8 9b 08 00 00 call 38a6 - 300b: 83 c4 10 add $0x10,%esp - 300e: eb ae jmp 2fbe - -00003010 : - -void -validateint(int *p) -{ - 3010: f3 0f 1e fb endbr32 + 2f7a: 83 ec 0c sub $0xc,%esp + 2f7d: 6a 00 push $0x0 + 2f7f: e8 67 08 00 00 call 37eb + 2f84: 89 c2 mov %eax,%edx + 2f86: 8b 45 a4 mov -0x5c(%ebp),%eax + 2f89: 29 d0 sub %edx,%eax + 2f8b: 89 04 24 mov %eax,(%esp) + 2f8e: e8 58 08 00 00 call 37eb + 2f93: 83 c4 10 add $0x10,%esp + 2f96: eb ac jmp 2f44 + +00002f98 : "int %2\n\t" "mov %%ebx, %%esp" : "=a" (res) : "a" (SYS_sleep), "n" (T_SYSCALL), "c" (p) : "ebx"); } - 3014: c3 ret + 2f98: c3 ret -00003015 : +00002f99 : void validatetest(void) { - 3015: f3 0f 1e fb endbr32 - 3019: 55 push %ebp - 301a: 89 e5 mov %esp,%ebp - 301c: 56 push %esi - 301d: 53 push %ebx + 2f99: 55 push %ebp + 2f9a: 89 e5 mov %esp,%ebp + 2f9c: 56 push %esi + 2f9d: 53 push %ebx int hi, pid; uint p; printf(stdout, "validate test\n"); - 301e: 83 ec 08 sub $0x8,%esp - 3021: 68 22 4b 00 00 push $0x4b22 - 3026: ff 35 8c 5c 00 00 pushl 0x5c8c - 302c: e8 31 09 00 00 call 3962 - 3031: 83 c4 10 add $0x10,%esp + 2f9e: 83 ec 08 sub $0x8,%esp + 2fa1: 68 4a 4a 00 00 push $0x4a4a + 2fa6: ff 35 10 5c 00 00 push 0x5c10 + 2fac: e8 fa 08 00 00 call 38ab + 2fb1: 83 c4 10 add $0x10,%esp hi = 1100*1024; for(p = 0; p <= (uint)hi; p += 4096){ - 3034: be 00 00 00 00 mov $0x0,%esi + 2fb4: be 00 00 00 00 mov $0x0,%esi if((pid = fork()) == 0){ - 3039: e8 d8 07 00 00 call 3816 - 303e: 89 c3 mov %eax,%ebx - 3040: 85 c0 test %eax,%eax - 3042: 74 64 je 30a8 + 2fb9: e8 9d 07 00 00 call 375b + 2fbe: 89 c3 mov %eax,%ebx + 2fc0: 85 c0 test %eax,%eax + 2fc2: 74 64 je 3028 // try to crash the kernel by passing in a badly placed integer validateint((int*)p); exit(); } sleep(0); - 3044: 83 ec 0c sub $0xc,%esp - 3047: 6a 00 push $0x0 - 3049: e8 60 08 00 00 call 38ae + 2fc4: 83 ec 0c sub $0xc,%esp + 2fc7: 6a 00 push $0x0 + 2fc9: e8 25 08 00 00 call 37f3 sleep(0); - 304e: c7 04 24 00 00 00 00 movl $0x0,(%esp) - 3055: e8 54 08 00 00 call 38ae + 2fce: c7 04 24 00 00 00 00 movl $0x0,(%esp) + 2fd5: e8 19 08 00 00 call 37f3 kill(pid); - 305a: 89 1c 24 mov %ebx,(%esp) - 305d: e8 ec 07 00 00 call 384e + 2fda: 89 1c 24 mov %ebx,(%esp) + 2fdd: e8 b1 07 00 00 call 3793 wait(); - 3062: e8 bf 07 00 00 call 3826 + 2fe2: e8 84 07 00 00 call 376b // try to crash the kernel by passing in a bad string pointer if(link("nosuchfile", (char*)p) != -1){ - 3067: 83 c4 08 add $0x8,%esp - 306a: 56 push %esi - 306b: 68 31 4b 00 00 push $0x4b31 - 3070: e8 09 08 00 00 call 387e - 3075: 83 c4 10 add $0x10,%esp - 3078: 83 f8 ff cmp $0xffffffff,%eax - 307b: 75 30 jne 30ad + 2fe7: 83 c4 08 add $0x8,%esp + 2fea: 56 push %esi + 2feb: 68 59 4a 00 00 push $0x4a59 + 2ff0: e8 ce 07 00 00 call 37c3 + 2ff5: 83 c4 10 add $0x10,%esp + 2ff8: 83 f8 ff cmp $0xffffffff,%eax + 2ffb: 75 30 jne 302d for(p = 0; p <= (uint)hi; p += 4096){ - 307d: 81 c6 00 10 00 00 add $0x1000,%esi - 3083: 81 fe 00 40 11 00 cmp $0x114000,%esi - 3089: 75 ae jne 3039 + 2ffd: 81 c6 00 10 00 00 add $0x1000,%esi + 3003: 81 fe 00 40 11 00 cmp $0x114000,%esi + 3009: 75 ae jne 2fb9 printf(stdout, "link should not succeed\n"); exit(); } } printf(stdout, "validate ok\n"); - 308b: 83 ec 08 sub $0x8,%esp - 308e: 68 55 4b 00 00 push $0x4b55 - 3093: ff 35 8c 5c 00 00 pushl 0x5c8c - 3099: e8 c4 08 00 00 call 3962 + 300b: 83 ec 08 sub $0x8,%esp + 300e: 68 7d 4a 00 00 push $0x4a7d + 3013: ff 35 10 5c 00 00 push 0x5c10 + 3019: e8 8d 08 00 00 call 38ab } - 309e: 83 c4 10 add $0x10,%esp - 30a1: 8d 65 f8 lea -0x8(%ebp),%esp - 30a4: 5b pop %ebx - 30a5: 5e pop %esi - 30a6: 5d pop %ebp - 30a7: c3 ret + 301e: 83 c4 10 add $0x10,%esp + 3021: 8d 65 f8 lea -0x8(%ebp),%esp + 3024: 5b pop %ebx + 3025: 5e pop %esi + 3026: 5d pop %ebp + 3027: c3 ret exit(); - 30a8: e8 71 07 00 00 call 381e + 3028: e8 36 07 00 00 call 3763 printf(stdout, "link should not succeed\n"); - 30ad: 83 ec 08 sub $0x8,%esp - 30b0: 68 3c 4b 00 00 push $0x4b3c - 30b5: ff 35 8c 5c 00 00 pushl 0x5c8c - 30bb: e8 a2 08 00 00 call 3962 + 302d: 83 ec 08 sub $0x8,%esp + 3030: 68 64 4a 00 00 push $0x4a64 + 3035: ff 35 10 5c 00 00 push 0x5c10 + 303b: e8 6b 08 00 00 call 38ab exit(); - 30c0: e8 59 07 00 00 call 381e + 3040: e8 1e 07 00 00 call 3763 -000030c5 : +00003045 : // does unintialized data start out zero? char uninit[10000]; void bsstest(void) { - 30c5: f3 0f 1e fb endbr32 - 30c9: 55 push %ebp - 30ca: 89 e5 mov %esp,%ebp - 30cc: 83 ec 10 sub $0x10,%esp + 3045: 55 push %ebp + 3046: 89 e5 mov %esp,%ebp + 3048: 83 ec 10 sub $0x10,%esp int i; printf(stdout, "bss test\n"); - 30cf: 68 62 4b 00 00 push $0x4b62 - 30d4: ff 35 8c 5c 00 00 pushl 0x5c8c - 30da: e8 83 08 00 00 call 3962 - 30df: 83 c4 10 add $0x10,%esp + 304b: 68 8a 4a 00 00 push $0x4a8a + 3050: ff 35 10 5c 00 00 push 0x5c10 + 3056: e8 50 08 00 00 call 38ab + 305b: 83 c4 10 add $0x10,%esp for(i = 0; i < sizeof(uninit); i++){ - 30e2: b8 00 00 00 00 mov $0x0,%eax + 305e: b8 00 00 00 00 mov $0x0,%eax if(uninit[i] != '\0'){ - 30e7: 80 b8 60 5d 00 00 00 cmpb $0x0,0x5d60(%eax) - 30ee: 75 22 jne 3112 + 3063: 80 b8 40 5c 00 00 00 cmpb $0x0,0x5c40(%eax) + 306a: 75 22 jne 308e for(i = 0; i < sizeof(uninit); i++){ - 30f0: 83 c0 01 add $0x1,%eax - 30f3: 3d 10 27 00 00 cmp $0x2710,%eax - 30f8: 75 ed jne 30e7 + 306c: 83 c0 01 add $0x1,%eax + 306f: 3d 10 27 00 00 cmp $0x2710,%eax + 3074: 75 ed jne 3063 printf(stdout, "bss test failed\n"); exit(); } } printf(stdout, "bss test ok\n"); - 30fa: 83 ec 08 sub $0x8,%esp - 30fd: 68 7d 4b 00 00 push $0x4b7d - 3102: ff 35 8c 5c 00 00 pushl 0x5c8c - 3108: e8 55 08 00 00 call 3962 + 3076: 83 ec 08 sub $0x8,%esp + 3079: 68 a5 4a 00 00 push $0x4aa5 + 307e: ff 35 10 5c 00 00 push 0x5c10 + 3084: e8 22 08 00 00 call 38ab } - 310d: 83 c4 10 add $0x10,%esp - 3110: c9 leave - 3111: c3 ret + 3089: 83 c4 10 add $0x10,%esp + 308c: c9 leave + 308d: c3 ret printf(stdout, "bss test failed\n"); - 3112: 83 ec 08 sub $0x8,%esp - 3115: 68 6c 4b 00 00 push $0x4b6c - 311a: ff 35 8c 5c 00 00 pushl 0x5c8c - 3120: e8 3d 08 00 00 call 3962 + 308e: 83 ec 08 sub $0x8,%esp + 3091: 68 94 4a 00 00 push $0x4a94 + 3096: ff 35 10 5c 00 00 push 0x5c10 + 309c: e8 0a 08 00 00 call 38ab exit(); - 3125: e8 f4 06 00 00 call 381e + 30a1: e8 bd 06 00 00 call 3763 -0000312a : +000030a6 : // does exec return an error if the arguments // are larger than a page? or does it write // below the stack and wreck the instructions/data? void bigargtest(void) { - 312a: f3 0f 1e fb endbr32 - 312e: 55 push %ebp - 312f: 89 e5 mov %esp,%ebp - 3131: 83 ec 14 sub $0x14,%esp + 30a6: 55 push %ebp + 30a7: 89 e5 mov %esp,%ebp + 30a9: 83 ec 14 sub $0x14,%esp int pid, fd; unlink("bigarg-ok"); - 3134: 68 8a 4b 00 00 push $0x4b8a - 3139: e8 30 07 00 00 call 386e + 30ac: 68 b2 4a 00 00 push $0x4ab2 + 30b1: e8 fd 06 00 00 call 37b3 pid = fork(); - 313e: e8 d3 06 00 00 call 3816 + 30b6: e8 a0 06 00 00 call 375b if(pid == 0){ - 3143: 83 c4 10 add $0x10,%esp - 3146: 85 c0 test %eax,%eax - 3148: 74 3f je 3189 + 30bb: 83 c4 10 add $0x10,%esp + 30be: 85 c0 test %eax,%eax + 30c0: 74 3f je 3101 exec("echo", args); printf(stdout, "bigarg test ok\n"); fd = open("bigarg-ok", O_CREATE); close(fd); exit(); } else if(pid < 0){ - 314a: 0f 88 ad 00 00 00 js 31fd + 30c2: 0f 88 ad 00 00 00 js 3175 printf(stdout, "bigargtest: fork failed\n"); exit(); } wait(); - 3150: e8 d1 06 00 00 call 3826 + 30c8: e8 9e 06 00 00 call 376b fd = open("bigarg-ok", 0); - 3155: 83 ec 08 sub $0x8,%esp - 3158: 6a 00 push $0x0 - 315a: 68 8a 4b 00 00 push $0x4b8a - 315f: e8 fa 06 00 00 call 385e + 30cd: 83 ec 08 sub $0x8,%esp + 30d0: 6a 00 push $0x0 + 30d2: 68 b2 4a 00 00 push $0x4ab2 + 30d7: e8 c7 06 00 00 call 37a3 if(fd < 0){ - 3164: 83 c4 10 add $0x10,%esp - 3167: 85 c0 test %eax,%eax - 3169: 0f 88 a6 00 00 00 js 3215 + 30dc: 83 c4 10 add $0x10,%esp + 30df: 85 c0 test %eax,%eax + 30e1: 0f 88 a6 00 00 00 js 318d printf(stdout, "bigarg test failed!\n"); exit(); } close(fd); - 316f: 83 ec 0c sub $0xc,%esp - 3172: 50 push %eax - 3173: e8 ce 06 00 00 call 3846 + 30e7: 83 ec 0c sub $0xc,%esp + 30ea: 50 push %eax + 30eb: e8 9b 06 00 00 call 378b unlink("bigarg-ok"); - 3178: c7 04 24 8a 4b 00 00 movl $0x4b8a,(%esp) - 317f: e8 ea 06 00 00 call 386e + 30f0: c7 04 24 b2 4a 00 00 movl $0x4ab2,(%esp) + 30f7: e8 b7 06 00 00 call 37b3 } - 3184: 83 c4 10 add $0x10,%esp - 3187: c9 leave - 3188: c3 ret + 30fc: 83 c4 10 add $0x10,%esp + 30ff: c9 leave + 3100: c3 ret args[i] = "bigargs test: failed\n "; - 3189: c7 04 85 c0 5c 00 00 movl $0x52e4,0x5cc0(,%eax,4) - 3190: e4 52 00 00 + 3101: c7 04 85 60 a3 00 00 movl $0x520c,0xa360(,%eax,4) + 3108: 0c 52 00 00 for(i = 0; i < MAXARG-1; i++) - 3194: 83 c0 01 add $0x1,%eax - 3197: 83 f8 1f cmp $0x1f,%eax - 319a: 75 ed jne 3189 + 310c: 83 c0 01 add $0x1,%eax + 310f: 83 f8 1f cmp $0x1f,%eax + 3112: 75 ed jne 3101 args[MAXARG-1] = 0; - 319c: c7 05 3c 5d 00 00 00 movl $0x0,0x5d3c - 31a3: 00 00 00 + 3114: c7 05 dc a3 00 00 00 movl $0x0,0xa3dc + 311b: 00 00 00 printf(stdout, "bigarg test\n"); - 31a6: 83 ec 08 sub $0x8,%esp - 31a9: 68 94 4b 00 00 push $0x4b94 - 31ae: ff 35 8c 5c 00 00 pushl 0x5c8c - 31b4: e8 a9 07 00 00 call 3962 + 311e: 83 ec 08 sub $0x8,%esp + 3121: 68 bc 4a 00 00 push $0x4abc + 3126: ff 35 10 5c 00 00 push 0x5c10 + 312c: e8 7a 07 00 00 call 38ab exec("echo", args); - 31b9: 83 c4 08 add $0x8,%esp - 31bc: 68 c0 5c 00 00 push $0x5cc0 - 31c1: 68 61 3d 00 00 push $0x3d61 - 31c6: e8 8b 06 00 00 call 3856 + 3131: 83 c4 08 add $0x8,%esp + 3134: 68 60 a3 00 00 push $0xa360 + 3139: 68 89 3c 00 00 push $0x3c89 + 313e: e8 58 06 00 00 call 379b printf(stdout, "bigarg test ok\n"); - 31cb: 83 c4 08 add $0x8,%esp - 31ce: 68 a1 4b 00 00 push $0x4ba1 - 31d3: ff 35 8c 5c 00 00 pushl 0x5c8c - 31d9: e8 84 07 00 00 call 3962 + 3143: 83 c4 08 add $0x8,%esp + 3146: 68 c9 4a 00 00 push $0x4ac9 + 314b: ff 35 10 5c 00 00 push 0x5c10 + 3151: e8 55 07 00 00 call 38ab fd = open("bigarg-ok", O_CREATE); - 31de: 83 c4 08 add $0x8,%esp - 31e1: 68 00 02 00 00 push $0x200 - 31e6: 68 8a 4b 00 00 push $0x4b8a - 31eb: e8 6e 06 00 00 call 385e + 3156: 83 c4 08 add $0x8,%esp + 3159: 68 00 02 00 00 push $0x200 + 315e: 68 b2 4a 00 00 push $0x4ab2 + 3163: e8 3b 06 00 00 call 37a3 close(fd); - 31f0: 89 04 24 mov %eax,(%esp) - 31f3: e8 4e 06 00 00 call 3846 + 3168: 89 04 24 mov %eax,(%esp) + 316b: e8 1b 06 00 00 call 378b exit(); - 31f8: e8 21 06 00 00 call 381e + 3170: e8 ee 05 00 00 call 3763 printf(stdout, "bigargtest: fork failed\n"); - 31fd: 83 ec 08 sub $0x8,%esp - 3200: 68 b1 4b 00 00 push $0x4bb1 - 3205: ff 35 8c 5c 00 00 pushl 0x5c8c - 320b: e8 52 07 00 00 call 3962 + 3175: 83 ec 08 sub $0x8,%esp + 3178: 68 d9 4a 00 00 push $0x4ad9 + 317d: ff 35 10 5c 00 00 push 0x5c10 + 3183: e8 23 07 00 00 call 38ab exit(); - 3210: e8 09 06 00 00 call 381e + 3188: e8 d6 05 00 00 call 3763 printf(stdout, "bigarg test failed!\n"); - 3215: 83 ec 08 sub $0x8,%esp - 3218: 68 ca 4b 00 00 push $0x4bca - 321d: ff 35 8c 5c 00 00 pushl 0x5c8c - 3223: e8 3a 07 00 00 call 3962 + 318d: 83 ec 08 sub $0x8,%esp + 3190: 68 f2 4a 00 00 push $0x4af2 + 3195: ff 35 10 5c 00 00 push 0x5c10 + 319b: e8 0b 07 00 00 call 38ab exit(); - 3228: e8 f1 05 00 00 call 381e + 31a0: e8 be 05 00 00 call 3763 -0000322d : +000031a5 : // what happens when the file system runs out of blocks? // answer: balloc panics, so this test is not useful. void fsfull() { - 322d: f3 0f 1e fb endbr32 - 3231: 55 push %ebp - 3232: 89 e5 mov %esp,%ebp - 3234: 57 push %edi - 3235: 56 push %esi - 3236: 53 push %ebx - 3237: 83 ec 54 sub $0x54,%esp + 31a5: 55 push %ebp + 31a6: 89 e5 mov %esp,%ebp + 31a8: 57 push %edi + 31a9: 56 push %esi + 31aa: 53 push %ebx + 31ab: 83 ec 64 sub $0x64,%esp int nfiles; int fsblocks = 0; printf(1, "fsfull test\n"); - 323a: 68 df 4b 00 00 push $0x4bdf - 323f: 6a 01 push $0x1 - 3241: e8 1c 07 00 00 call 3962 - 3246: 83 c4 10 add $0x10,%esp + 31ae: 68 07 4b 00 00 push $0x4b07 + 31b3: 6a 01 push $0x1 + 31b5: e8 f1 06 00 00 call 38ab + 31ba: 83 c4 10 add $0x10,%esp for(nfiles = 0; ; nfiles++){ - 3249: bb 00 00 00 00 mov $0x0,%ebx + 31bd: bb 00 00 00 00 mov $0x0,%ebx char name[64]; name[0] = 'f'; - 324e: c6 45 a8 66 movb $0x66,-0x58(%ebp) + 31c2: c6 45 a8 66 movb $0x66,-0x58(%ebp) name[1] = '0' + nfiles / 1000; - 3252: b8 d3 4d 62 10 mov $0x10624dd3,%eax - 3257: f7 eb imul %ebx - 3259: c1 fa 06 sar $0x6,%edx - 325c: 89 de mov %ebx,%esi - 325e: c1 fe 1f sar $0x1f,%esi - 3261: 29 f2 sub %esi,%edx - 3263: 8d 42 30 lea 0x30(%edx),%eax - 3266: 88 45 a9 mov %al,-0x57(%ebp) + 31c6: b8 d3 4d 62 10 mov $0x10624dd3,%eax + 31cb: f7 eb imul %ebx + 31cd: c1 fa 06 sar $0x6,%edx + 31d0: 89 de mov %ebx,%esi + 31d2: c1 fe 1f sar $0x1f,%esi + 31d5: 29 f2 sub %esi,%edx + 31d7: 8d 42 30 lea 0x30(%edx),%eax + 31da: 88 45 a9 mov %al,-0x57(%ebp) name[2] = '0' + (nfiles % 1000) / 100; - 3269: 69 d2 e8 03 00 00 imul $0x3e8,%edx,%edx - 326f: 89 d9 mov %ebx,%ecx - 3271: 29 d1 sub %edx,%ecx - 3273: b8 1f 85 eb 51 mov $0x51eb851f,%eax - 3278: f7 e9 imul %ecx - 327a: c1 fa 05 sar $0x5,%edx - 327d: c1 f9 1f sar $0x1f,%ecx - 3280: 29 ca sub %ecx,%edx - 3282: 83 c2 30 add $0x30,%edx - 3285: 88 55 aa mov %dl,-0x56(%ebp) + 31dd: 69 d2 e8 03 00 00 imul $0x3e8,%edx,%edx + 31e3: 89 d9 mov %ebx,%ecx + 31e5: 29 d1 sub %edx,%ecx + 31e7: b8 1f 85 eb 51 mov $0x51eb851f,%eax + 31ec: f7 e9 imul %ecx + 31ee: c1 fa 05 sar $0x5,%edx + 31f1: c1 f9 1f sar $0x1f,%ecx + 31f4: 29 ca sub %ecx,%edx + 31f6: 83 c2 30 add $0x30,%edx + 31f9: 88 55 aa mov %dl,-0x56(%ebp) name[3] = '0' + (nfiles % 100) / 10; - 3288: b8 1f 85 eb 51 mov $0x51eb851f,%eax - 328d: f7 eb imul %ebx - 328f: c1 fa 05 sar $0x5,%edx - 3292: 29 f2 sub %esi,%edx - 3294: 6b d2 64 imul $0x64,%edx,%edx - 3297: 89 df mov %ebx,%edi - 3299: 29 d7 sub %edx,%edi - 329b: b9 67 66 66 66 mov $0x66666667,%ecx - 32a0: 89 f8 mov %edi,%eax - 32a2: f7 e9 imul %ecx - 32a4: c1 fa 02 sar $0x2,%edx - 32a7: c1 ff 1f sar $0x1f,%edi - 32aa: 29 fa sub %edi,%edx - 32ac: 83 c2 30 add $0x30,%edx - 32af: 88 55 ab mov %dl,-0x55(%ebp) + 31fc: b8 1f 85 eb 51 mov $0x51eb851f,%eax + 3201: f7 eb imul %ebx + 3203: c1 fa 05 sar $0x5,%edx + 3206: 29 f2 sub %esi,%edx + 3208: 6b d2 64 imul $0x64,%edx,%edx + 320b: 89 df mov %ebx,%edi + 320d: 29 d7 sub %edx,%edi + 320f: b9 67 66 66 66 mov $0x66666667,%ecx + 3214: 89 f8 mov %edi,%eax + 3216: f7 e9 imul %ecx + 3218: c1 fa 02 sar $0x2,%edx + 321b: c1 ff 1f sar $0x1f,%edi + 321e: 29 fa sub %edi,%edx + 3220: 83 c2 30 add $0x30,%edx + 3223: 88 55 ab mov %dl,-0x55(%ebp) name[4] = '0' + (nfiles % 10); - 32b2: 89 d8 mov %ebx,%eax - 32b4: f7 e9 imul %ecx - 32b6: c1 fa 02 sar $0x2,%edx - 32b9: 29 f2 sub %esi,%edx - 32bb: 8d 04 92 lea (%edx,%edx,4),%eax - 32be: 01 c0 add %eax,%eax - 32c0: 89 df mov %ebx,%edi - 32c2: 29 c7 sub %eax,%edi - 32c4: 89 f8 mov %edi,%eax - 32c6: 83 c0 30 add $0x30,%eax - 32c9: 88 45 ac mov %al,-0x54(%ebp) + 3226: 89 d8 mov %ebx,%eax + 3228: f7 e9 imul %ecx + 322a: c1 fa 02 sar $0x2,%edx + 322d: 29 f2 sub %esi,%edx + 322f: 8d 14 92 lea (%edx,%edx,4),%edx + 3232: 01 d2 add %edx,%edx + 3234: 89 d8 mov %ebx,%eax + 3236: 29 d0 sub %edx,%eax + 3238: 83 c0 30 add $0x30,%eax + 323b: 88 45 ac mov %al,-0x54(%ebp) name[5] = '\0'; - 32cc: c6 45 ad 00 movb $0x0,-0x53(%ebp) + 323e: c6 45 ad 00 movb $0x0,-0x53(%ebp) printf(1, "writing %s\n", name); - 32d0: 83 ec 04 sub $0x4,%esp - 32d3: 8d 75 a8 lea -0x58(%ebp),%esi - 32d6: 56 push %esi - 32d7: 68 ec 4b 00 00 push $0x4bec - 32dc: 6a 01 push $0x1 - 32de: e8 7f 06 00 00 call 3962 + 3242: 83 ec 04 sub $0x4,%esp + 3245: 8d 75 a8 lea -0x58(%ebp),%esi + 3248: 56 push %esi + 3249: 68 14 4b 00 00 push $0x4b14 + 324e: 6a 01 push $0x1 + 3250: e8 56 06 00 00 call 38ab int fd = open(name, O_CREATE|O_RDWR); - 32e3: 83 c4 08 add $0x8,%esp - 32e6: 68 02 02 00 00 push $0x202 - 32eb: 56 push %esi - 32ec: e8 6d 05 00 00 call 385e - 32f1: 89 c6 mov %eax,%esi + 3255: 83 c4 08 add $0x8,%esp + 3258: 68 02 02 00 00 push $0x202 + 325d: 56 push %esi + 325e: e8 40 05 00 00 call 37a3 + 3263: 89 c6 mov %eax,%esi if(fd < 0){ - 32f3: 83 c4 10 add $0x10,%esp - 32f6: 85 c0 test %eax,%eax - 32f8: 0f 89 d5 00 00 00 jns 33d3 + 3265: 83 c4 10 add $0x10,%esp + 3268: 85 c0 test %eax,%eax + 326a: 0f 89 d6 00 00 00 jns 3346 printf(1, "open %s failed\n", name); - 32fe: 83 ec 04 sub $0x4,%esp - 3301: 8d 45 a8 lea -0x58(%ebp),%eax - 3304: 50 push %eax - 3305: 68 f8 4b 00 00 push $0x4bf8 - 330a: 6a 01 push $0x1 - 330c: e8 51 06 00 00 call 3962 + 3270: 83 ec 04 sub $0x4,%esp + 3273: 8d 45 a8 lea -0x58(%ebp),%eax + 3276: 50 push %eax + 3277: 68 20 4b 00 00 push $0x4b20 + 327c: 6a 01 push $0x1 + 327e: e8 28 06 00 00 call 38ab break; - 3311: 83 c4 10 add $0x10,%esp + 3283: 83 c4 10 add $0x10,%esp close(fd); if(total == 0) break; } while(nfiles >= 0){ - 3314: 85 db test %ebx,%ebx - 3316: 0f 88 9d 00 00 00 js 33b9 + 3286: 85 db test %ebx,%ebx + 3288: 0f 88 9e 00 00 00 js 332c char name[64]; name[0] = 'f'; - 331c: c6 45 a8 66 movb $0x66,-0x58(%ebp) name[1] = '0' + nfiles / 1000; - 3320: b8 d3 4d 62 10 mov $0x10624dd3,%eax - 3325: f7 eb imul %ebx - 3327: c1 fa 06 sar $0x6,%edx - 332a: 89 de mov %ebx,%esi - 332c: c1 fe 1f sar $0x1f,%esi - 332f: 29 f2 sub %esi,%edx - 3331: 8d 42 30 lea 0x30(%edx),%eax - 3334: 88 45 a9 mov %al,-0x57(%ebp) name[2] = '0' + (nfiles % 1000) / 100; - 3337: 69 d2 e8 03 00 00 imul $0x3e8,%edx,%edx - 333d: 89 d9 mov %ebx,%ecx - 333f: 29 d1 sub %edx,%ecx - 3341: b8 1f 85 eb 51 mov $0x51eb851f,%eax - 3346: f7 e9 imul %ecx - 3348: c1 fa 05 sar $0x5,%edx - 334b: c1 f9 1f sar $0x1f,%ecx - 334e: 29 ca sub %ecx,%edx - 3350: 83 c2 30 add $0x30,%edx - 3353: 88 55 aa mov %dl,-0x56(%ebp) + 328e: bf 1f 85 eb 51 mov $0x51eb851f,%edi + name[0] = 'f'; + 3293: c6 45 a8 66 movb $0x66,-0x58(%ebp) + name[1] = '0' + nfiles / 1000; + 3297: b8 d3 4d 62 10 mov $0x10624dd3,%eax + 329c: f7 eb imul %ebx + 329e: c1 fa 06 sar $0x6,%edx + 32a1: 89 de mov %ebx,%esi + 32a3: c1 fe 1f sar $0x1f,%esi + 32a6: 29 f2 sub %esi,%edx + 32a8: 8d 42 30 lea 0x30(%edx),%eax + 32ab: 88 45 a9 mov %al,-0x57(%ebp) + name[2] = '0' + (nfiles % 1000) / 100; + 32ae: 69 d2 e8 03 00 00 imul $0x3e8,%edx,%edx + 32b4: 89 d9 mov %ebx,%ecx + 32b6: 29 d1 sub %edx,%ecx + 32b8: 89 c8 mov %ecx,%eax + 32ba: f7 ef imul %edi + 32bc: c1 fa 05 sar $0x5,%edx + 32bf: c1 f9 1f sar $0x1f,%ecx + 32c2: 29 ca sub %ecx,%edx + 32c4: 83 c2 30 add $0x30,%edx + 32c7: 88 55 aa mov %dl,-0x56(%ebp) name[3] = '0' + (nfiles % 100) / 10; - 3356: b8 1f 85 eb 51 mov $0x51eb851f,%eax - 335b: f7 eb imul %ebx - 335d: c1 fa 05 sar $0x5,%edx - 3360: 29 f2 sub %esi,%edx - 3362: 6b d2 64 imul $0x64,%edx,%edx - 3365: 89 df mov %ebx,%edi - 3367: 29 d7 sub %edx,%edi - 3369: b9 67 66 66 66 mov $0x66666667,%ecx - 336e: 89 f8 mov %edi,%eax - 3370: f7 e9 imul %ecx - 3372: c1 fa 02 sar $0x2,%edx - 3375: c1 ff 1f sar $0x1f,%edi - 3378: 29 fa sub %edi,%edx - 337a: 83 c2 30 add $0x30,%edx - 337d: 88 55 ab mov %dl,-0x55(%ebp) + 32ca: 89 d8 mov %ebx,%eax + 32cc: f7 ef imul %edi + 32ce: c1 fa 05 sar $0x5,%edx + 32d1: 89 75 a4 mov %esi,-0x5c(%ebp) + 32d4: 29 f2 sub %esi,%edx + 32d6: 6b d2 64 imul $0x64,%edx,%edx + 32d9: 89 d8 mov %ebx,%eax + 32db: 29 d0 sub %edx,%eax + 32dd: 89 c6 mov %eax,%esi + 32df: b9 67 66 66 66 mov $0x66666667,%ecx + 32e4: f7 e9 imul %ecx + 32e6: c1 fa 02 sar $0x2,%edx + 32e9: c1 fe 1f sar $0x1f,%esi + 32ec: 29 f2 sub %esi,%edx + 32ee: 83 c2 30 add $0x30,%edx + 32f1: 88 55 ab mov %dl,-0x55(%ebp) name[4] = '0' + (nfiles % 10); - 3380: 89 d8 mov %ebx,%eax - 3382: f7 e9 imul %ecx - 3384: c1 fa 02 sar $0x2,%edx - 3387: 29 f2 sub %esi,%edx - 3389: 8d 04 92 lea (%edx,%edx,4),%eax - 338c: 01 c0 add %eax,%eax - 338e: 89 de mov %ebx,%esi - 3390: 29 c6 sub %eax,%esi - 3392: 89 f0 mov %esi,%eax - 3394: 83 c0 30 add $0x30,%eax - 3397: 88 45 ac mov %al,-0x54(%ebp) + 32f4: 89 d8 mov %ebx,%eax + 32f6: f7 e9 imul %ecx + 32f8: c1 fa 02 sar $0x2,%edx + 32fb: 2b 55 a4 sub -0x5c(%ebp),%edx + 32fe: 8d 14 92 lea (%edx,%edx,4),%edx + 3301: 01 d2 add %edx,%edx + 3303: 89 d8 mov %ebx,%eax + 3305: 29 d0 sub %edx,%eax + 3307: 83 c0 30 add $0x30,%eax + 330a: 88 45 ac mov %al,-0x54(%ebp) name[5] = '\0'; - 339a: c6 45 ad 00 movb $0x0,-0x53(%ebp) + 330d: c6 45 ad 00 movb $0x0,-0x53(%ebp) unlink(name); - 339e: 83 ec 0c sub $0xc,%esp - 33a1: 8d 45 a8 lea -0x58(%ebp),%eax - 33a4: 50 push %eax - 33a5: e8 c4 04 00 00 call 386e + 3311: 83 ec 0c sub $0xc,%esp + 3314: 8d 45 a8 lea -0x58(%ebp),%eax + 3317: 50 push %eax + 3318: e8 96 04 00 00 call 37b3 nfiles--; - 33aa: 83 eb 01 sub $0x1,%ebx + 331d: 83 eb 01 sub $0x1,%ebx while(nfiles >= 0){ - 33ad: 83 c4 10 add $0x10,%esp - 33b0: 83 fb ff cmp $0xffffffff,%ebx - 33b3: 0f 85 63 ff ff ff jne 331c + 3320: 83 c4 10 add $0x10,%esp + 3323: 83 fb ff cmp $0xffffffff,%ebx + 3326: 0f 85 67 ff ff ff jne 3293 } printf(1, "fsfull test finished\n"); - 33b9: 83 ec 08 sub $0x8,%esp - 33bc: 68 18 4c 00 00 push $0x4c18 - 33c1: 6a 01 push $0x1 - 33c3: e8 9a 05 00 00 call 3962 + 332c: 83 ec 08 sub $0x8,%esp + 332f: 68 40 4b 00 00 push $0x4b40 + 3334: 6a 01 push $0x1 + 3336: e8 70 05 00 00 call 38ab } - 33c8: 83 c4 10 add $0x10,%esp - 33cb: 8d 65 f4 lea -0xc(%ebp),%esp - 33ce: 5b pop %ebx - 33cf: 5e pop %esi - 33d0: 5f pop %edi - 33d1: 5d pop %ebp - 33d2: c3 ret + 333b: 83 c4 10 add $0x10,%esp + 333e: 8d 65 f4 lea -0xc(%ebp),%esp + 3341: 5b pop %ebx + 3342: 5e pop %esi + 3343: 5f pop %edi + 3344: 5d pop %ebp + 3345: c3 ret int total = 0; - 33d3: bf 00 00 00 00 mov $0x0,%edi + 3346: bf 00 00 00 00 mov $0x0,%edi int cc = write(fd, buf, 512); - 33d8: 83 ec 04 sub $0x4,%esp - 33db: 68 00 02 00 00 push $0x200 - 33e0: 68 80 84 00 00 push $0x8480 - 33e5: 56 push %esi - 33e6: e8 53 04 00 00 call 383e + 334b: 83 ec 04 sub $0x4,%esp + 334e: 68 00 02 00 00 push $0x200 + 3353: 68 60 83 00 00 push $0x8360 + 3358: 56 push %esi + 3359: e8 25 04 00 00 call 3783 if(cc < 512) - 33eb: 83 c4 10 add $0x10,%esp - 33ee: 3d ff 01 00 00 cmp $0x1ff,%eax - 33f3: 7e 04 jle 33f9 + 335e: 83 c4 10 add $0x10,%esp + 3361: 3d ff 01 00 00 cmp $0x1ff,%eax + 3366: 7e 04 jle 336c total += cc; - 33f5: 01 c7 add %eax,%edi + 3368: 01 c7 add %eax,%edi while(1){ - 33f7: eb df jmp 33d8 + 336a: eb df jmp 334b printf(1, "wrote %d bytes\n", total); - 33f9: 83 ec 04 sub $0x4,%esp - 33fc: 57 push %edi - 33fd: 68 08 4c 00 00 push $0x4c08 - 3402: 6a 01 push $0x1 - 3404: e8 59 05 00 00 call 3962 + 336c: 83 ec 04 sub $0x4,%esp + 336f: 57 push %edi + 3370: 68 30 4b 00 00 push $0x4b30 + 3375: 6a 01 push $0x1 + 3377: e8 2f 05 00 00 call 38ab close(fd); - 3409: 89 34 24 mov %esi,(%esp) - 340c: e8 35 04 00 00 call 3846 + 337c: 89 34 24 mov %esi,(%esp) + 337f: e8 07 04 00 00 call 378b if(total == 0) - 3411: 83 c4 10 add $0x10,%esp - 3414: 85 ff test %edi,%edi - 3416: 0f 84 f8 fe ff ff je 3314 + 3384: 83 c4 10 add $0x10,%esp + 3387: 85 ff test %edi,%edi + 3389: 0f 84 f7 fe ff ff je 3286 for(nfiles = 0; ; nfiles++){ - 341c: 83 c3 01 add $0x1,%ebx - 341f: e9 2a fe ff ff jmp 324e + 338f: 83 c3 01 add $0x1,%ebx + 3392: e9 2b fe ff ff jmp 31c2 -00003424 : +00003397 : void uio() { - 3424: f3 0f 1e fb endbr32 - 3428: 55 push %ebp - 3429: 89 e5 mov %esp,%ebp - 342b: 83 ec 10 sub $0x10,%esp + 3397: 55 push %ebp + 3398: 89 e5 mov %esp,%ebp + 339a: 83 ec 10 sub $0x10,%esp ushort port = 0; uchar val = 0; int pid; printf(1, "uio test\n"); - 342e: 68 2e 4c 00 00 push $0x4c2e - 3433: 6a 01 push $0x1 - 3435: e8 28 05 00 00 call 3962 + 339d: 68 56 4b 00 00 push $0x4b56 + 33a2: 6a 01 push $0x1 + 33a4: e8 02 05 00 00 call 38ab pid = fork(); - 343a: e8 d7 03 00 00 call 3816 + 33a9: e8 ad 03 00 00 call 375b if(pid == 0){ - 343f: 83 c4 10 add $0x10,%esp - 3442: 85 c0 test %eax,%eax - 3444: 74 1b je 3461 + 33ae: 83 c4 10 add $0x10,%esp + 33b1: 85 c0 test %eax,%eax + 33b3: 74 1b je 33d0 asm volatile("outb %0,%1"::"a"(val), "d" (port)); port = RTC_DATA; asm volatile("inb %1,%0" : "=a" (val) : "d" (port)); printf(1, "uio: uio succeeded; test FAILED\n"); exit(); } else if(pid < 0){ - 3446: 78 3e js 3486 + 33b5: 78 3e js 33f5 printf (1, "fork failed\n"); exit(); } wait(); - 3448: e8 d9 03 00 00 call 3826 + 33b7: e8 af 03 00 00 call 376b printf(1, "uio test done\n"); - 344d: 83 ec 08 sub $0x8,%esp - 3450: 68 38 4c 00 00 push $0x4c38 - 3455: 6a 01 push $0x1 - 3457: e8 06 05 00 00 call 3962 + 33bc: 83 ec 08 sub $0x8,%esp + 33bf: 68 60 4b 00 00 push $0x4b60 + 33c4: 6a 01 push $0x1 + 33c6: e8 e0 04 00 00 call 38ab } - 345c: 83 c4 10 add $0x10,%esp - 345f: c9 leave - 3460: c3 ret + 33cb: 83 c4 10 add $0x10,%esp + 33ce: c9 leave + 33cf: c3 ret asm volatile("outb %0,%1"::"a"(val), "d" (port)); - 3461: b8 09 00 00 00 mov $0x9,%eax - 3466: ba 70 00 00 00 mov $0x70,%edx - 346b: ee out %al,(%dx) + 33d0: b8 09 00 00 00 mov $0x9,%eax + 33d5: ba 70 00 00 00 mov $0x70,%edx + 33da: ee out %al,(%dx) asm volatile("inb %1,%0" : "=a" (val) : "d" (port)); - 346c: ba 71 00 00 00 mov $0x71,%edx - 3471: ec in (%dx),%al + 33db: ba 71 00 00 00 mov $0x71,%edx + 33e0: ec in (%dx),%al printf(1, "uio: uio succeeded; test FAILED\n"); - 3472: 83 ec 08 sub $0x8,%esp - 3475: 68 c4 53 00 00 push $0x53c4 - 347a: 6a 01 push $0x1 - 347c: e8 e1 04 00 00 call 3962 + 33e1: 83 ec 08 sub $0x8,%esp + 33e4: 68 ec 52 00 00 push $0x52ec + 33e9: 6a 01 push $0x1 + 33eb: e8 bb 04 00 00 call 38ab exit(); - 3481: e8 98 03 00 00 call 381e + 33f0: e8 6e 03 00 00 call 3763 printf (1, "fork failed\n"); - 3486: 83 ec 08 sub $0x8,%esp - 3489: 68 bd 4b 00 00 push $0x4bbd - 348e: 6a 01 push $0x1 - 3490: e8 cd 04 00 00 call 3962 + 33f5: 83 ec 08 sub $0x8,%esp + 33f8: 68 e5 4a 00 00 push $0x4ae5 + 33fd: 6a 01 push $0x1 + 33ff: e8 a7 04 00 00 call 38ab exit(); - 3495: e8 84 03 00 00 call 381e + 3404: e8 5a 03 00 00 call 3763 -0000349a : +00003409 : void argptest() { - 349a: f3 0f 1e fb endbr32 - 349e: 55 push %ebp - 349f: 89 e5 mov %esp,%ebp - 34a1: 53 push %ebx - 34a2: 83 ec 0c sub $0xc,%esp + 3409: 55 push %ebp + 340a: 89 e5 mov %esp,%ebp + 340c: 53 push %ebx + 340d: 83 ec 0c sub $0xc,%esp int fd; fd = open("init", O_RDONLY); - 34a5: 6a 00 push $0x0 - 34a7: 68 47 4c 00 00 push $0x4c47 - 34ac: e8 ad 03 00 00 call 385e + 3410: 6a 00 push $0x0 + 3412: 68 6f 4b 00 00 push $0x4b6f + 3417: e8 87 03 00 00 call 37a3 if (fd < 0) { - 34b1: 83 c4 10 add $0x10,%esp - 34b4: 85 c0 test %eax,%eax - 34b6: 78 3a js 34f2 - 34b8: 89 c3 mov %eax,%ebx + 341c: 83 c4 10 add $0x10,%esp + 341f: 85 c0 test %eax,%eax + 3421: 78 3a js 345d + 3423: 89 c3 mov %eax,%ebx printf(2, "open failed\n"); exit(); } read(fd, sbrk(0) - 1, -1); - 34ba: 83 ec 0c sub $0xc,%esp - 34bd: 6a 00 push $0x0 - 34bf: e8 e2 03 00 00 call 38a6 - 34c4: 83 c4 0c add $0xc,%esp - 34c7: 6a ff push $0xffffffff - 34c9: 83 e8 01 sub $0x1,%eax - 34cc: 50 push %eax - 34cd: 53 push %ebx - 34ce: e8 63 03 00 00 call 3836 + 3425: 83 ec 0c sub $0xc,%esp + 3428: 6a 00 push $0x0 + 342a: e8 bc 03 00 00 call 37eb + 342f: 83 c4 0c add $0xc,%esp + 3432: 6a ff push $0xffffffff + 3434: 83 e8 01 sub $0x1,%eax + 3437: 50 push %eax + 3438: 53 push %ebx + 3439: e8 3d 03 00 00 call 377b close(fd); - 34d3: 89 1c 24 mov %ebx,(%esp) - 34d6: e8 6b 03 00 00 call 3846 + 343e: 89 1c 24 mov %ebx,(%esp) + 3441: e8 45 03 00 00 call 378b printf(1, "arg test passed\n"); - 34db: 83 c4 08 add $0x8,%esp - 34de: 68 59 4c 00 00 push $0x4c59 - 34e3: 6a 01 push $0x1 - 34e5: e8 78 04 00 00 call 3962 + 3446: 83 c4 08 add $0x8,%esp + 3449: 68 81 4b 00 00 push $0x4b81 + 344e: 6a 01 push $0x1 + 3450: e8 56 04 00 00 call 38ab } - 34ea: 83 c4 10 add $0x10,%esp - 34ed: 8b 5d fc mov -0x4(%ebp),%ebx - 34f0: c9 leave - 34f1: c3 ret + 3455: 83 c4 10 add $0x10,%esp + 3458: 8b 5d fc mov -0x4(%ebp),%ebx + 345b: c9 leave + 345c: c3 ret printf(2, "open failed\n"); - 34f2: 83 ec 08 sub $0x8,%esp - 34f5: 68 4c 4c 00 00 push $0x4c4c - 34fa: 6a 02 push $0x2 - 34fc: e8 61 04 00 00 call 3962 + 345d: 83 ec 08 sub $0x8,%esp + 3460: 68 74 4b 00 00 push $0x4b74 + 3465: 6a 02 push $0x2 + 3467: e8 3f 04 00 00 call 38ab exit(); - 3501: e8 18 03 00 00 call 381e + 346c: e8 f2 02 00 00 call 3763 -00003506 : +00003471 : unsigned long randstate = 1; unsigned int rand() { - 3506: f3 0f 1e fb endbr32 randstate = randstate * 1664525 + 1013904223; - 350a: 69 05 88 5c 00 00 0d imul $0x19660d,0x5c88,%eax - 3511: 66 19 00 - 3514: 05 5f f3 6e 3c add $0x3c6ef35f,%eax - 3519: a3 88 5c 00 00 mov %eax,0x5c88 + 3471: 69 05 0c 5c 00 00 0d imul $0x19660d,0x5c0c,%eax + 3478: 66 19 00 + 347b: 05 5f f3 6e 3c add $0x3c6ef35f,%eax + 3480: a3 0c 5c 00 00 mov %eax,0x5c0c return randstate; } - 351e: c3 ret + 3485: c3 ret -0000351f
: +00003486
: int main(int argc, char *argv[]) { - 351f: f3 0f 1e fb endbr32 - 3523: 8d 4c 24 04 lea 0x4(%esp),%ecx - 3527: 83 e4 f0 and $0xfffffff0,%esp - 352a: ff 71 fc pushl -0x4(%ecx) - 352d: 55 push %ebp - 352e: 89 e5 mov %esp,%ebp - 3530: 51 push %ecx - 3531: 83 ec 0c sub $0xc,%esp + 3486: 8d 4c 24 04 lea 0x4(%esp),%ecx + 348a: 83 e4 f0 and $0xfffffff0,%esp + 348d: ff 71 fc push -0x4(%ecx) + 3490: 55 push %ebp + 3491: 89 e5 mov %esp,%ebp + 3493: 51 push %ecx + 3494: 83 ec 0c sub $0xc,%esp printf(1, "usertests starting\n"); - 3534: 68 6a 4c 00 00 push $0x4c6a - 3539: 6a 01 push $0x1 - 353b: e8 22 04 00 00 call 3962 + 3497: 68 92 4b 00 00 push $0x4b92 + 349c: 6a 01 push $0x1 + 349e: e8 08 04 00 00 call 38ab if(open("usertests.ran", 0) >= 0){ - 3540: 83 c4 08 add $0x8,%esp - 3543: 6a 00 push $0x0 - 3545: 68 7e 4c 00 00 push $0x4c7e - 354a: e8 0f 03 00 00 call 385e - 354f: 83 c4 10 add $0x10,%esp - 3552: 85 c0 test %eax,%eax - 3554: 78 14 js 356a + 34a3: 83 c4 08 add $0x8,%esp + 34a6: 6a 00 push $0x0 + 34a8: 68 a6 4b 00 00 push $0x4ba6 + 34ad: e8 f1 02 00 00 call 37a3 + 34b2: 83 c4 10 add $0x10,%esp + 34b5: 85 c0 test %eax,%eax + 34b7: 78 14 js 34cd printf(1, "already ran user tests -- rebuild fs.img\n"); - 3556: 83 ec 08 sub $0x8,%esp - 3559: 68 e8 53 00 00 push $0x53e8 - 355e: 6a 01 push $0x1 - 3560: e8 fd 03 00 00 call 3962 + 34b9: 83 ec 08 sub $0x8,%esp + 34bc: 68 10 53 00 00 push $0x5310 + 34c1: 6a 01 push $0x1 + 34c3: e8 e3 03 00 00 call 38ab exit(); - 3565: e8 b4 02 00 00 call 381e + 34c8: e8 96 02 00 00 call 3763 } close(open("usertests.ran", O_CREATE)); - 356a: 83 ec 08 sub $0x8,%esp - 356d: 68 00 02 00 00 push $0x200 - 3572: 68 7e 4c 00 00 push $0x4c7e - 3577: e8 e2 02 00 00 call 385e - 357c: 89 04 24 mov %eax,(%esp) - 357f: e8 c2 02 00 00 call 3846 + 34cd: 83 ec 08 sub $0x8,%esp + 34d0: 68 00 02 00 00 push $0x200 + 34d5: 68 a6 4b 00 00 push $0x4ba6 + 34da: e8 c4 02 00 00 call 37a3 + 34df: 89 04 24 mov %eax,(%esp) + 34e2: e8 a4 02 00 00 call 378b argptest(); - 3584: e8 11 ff ff ff call 349a + 34e7: e8 1d ff ff ff call 3409 createdelete(); - 3589: e8 ac da ff ff call 103a + 34ec: e8 0b db ff ff call ffc linkunlink(); - 358e: e8 65 e3 ff ff call 18f8 + 34f1: e8 b4 e3 ff ff call 18aa concreate(); - 3593: e8 61 e0 ff ff call 15f9 + 34f6: e8 b4 e0 ff ff call 15af fourfiles(); - 3598: e8 c3 d8 ff ff call e60 + 34fb: e8 26 d9 ff ff call e26 sharedfd(); - 359d: e8 27 d7 ff ff call cc9 + 3500: e8 8e d7 ff ff call c93 bigargtest(); - 35a2: e8 83 fb ff ff call 312a + 3505: e8 9c fb ff ff call 30a6 bigwrite(); - 35a7: e8 d2 ec ff ff call 227e + 350a: e8 15 ed ff ff call 2224 bigargtest(); - 35ac: e8 79 fb ff ff call 312a + 350f: e8 92 fb ff ff call 30a6 bsstest(); - 35b1: e8 0f fb ff ff call 30c5 + 3514: e8 2c fb ff ff call 3045 sbrktest(); - 35b6: e8 2f f6 ff ff call 2bea + 3519: e8 54 f6 ff ff call 2b72 validatetest(); - 35bb: e8 55 fa ff ff call 3015 + 351e: e8 76 fa ff ff call 2f99 opentest(); - 35c0: e8 f3 cc ff ff call 2b8 + 3523: e8 84 cd ff ff call 2ac writetest(); - 35c5: e8 85 cd ff ff call 34f + 3528: e8 12 ce ff ff call 33f writetest1(); - 35ca: e8 62 cf ff ff call 531 + 352d: e8 eb cf ff ff call 51d createtest(); - 35cf: e8 1b d1 ff ff call 6ef + 3532: e8 a0 d1 ff ff call 6d7 openiputtest(); - 35d4: e8 f2 cb ff ff call 1cb + 3537: e8 87 cc ff ff call 1c3 exitiputtest(); - 35d9: e8 03 cb ff ff call e1 + 353c: e8 9c cb ff ff call dd iputtest(); - 35de: e8 1d ca ff ff call 0 + 3541: e8 ba ca ff ff call 0 mem(); - 35e3: e8 26 d6 ff ff call c0e + 3546: e8 93 d6 ff ff call bde pipe1(); - 35e8: e8 d8 d2 ff ff call 8c5 + 354b: e8 51 d3 ff ff call 8a1 preempt(); - 35ed: e8 6e d4 ff ff call a60 + 3550: e8 e3 d4 ff ff call a38 exitwait(); - 35f2: e8 a8 d5 ff ff call b9f + 3555: e8 19 d6 ff ff call b73 rmdot(); - 35f7: e8 70 f0 ff ff call 266c + 355a: e8 a5 f0 ff ff call 2604 fourteen(); - 35fc: e8 2a ef ff ff call 252b + 355f: e8 63 ef ff ff call 24c7 bigfile(); - 3601: e8 59 ed ff ff call 235f + 3564: e8 96 ed ff ff call 22ff subdir(); - 3606: e8 41 e5 ff ff call 1b4c + 3569: e8 88 e5 ff ff call 1af6 linktest(); - 360b: e8 bf dd ff ff call 13cf + 356e: e8 16 de ff ff call 1389 unlinkread(); - 3610: e8 1d dc ff ff call 1232 + 3573: e8 78 dc ff ff call 11f0 dirfile(); - 3615: e8 db f1 ff ff call 27f5 + 3578: e8 0c f2 ff ff call 2789 iref(); - 361a: e8 f4 f3 ff ff call 2a13 + 357d: e8 21 f4 ff ff call 29a3 forktest(); - 361f: e8 15 f5 ff ff call 2b39 + 3582: e8 3e f5 ff ff call 2ac5 bigdir(); // slow - 3624: e8 c5 e3 ff ff call 19ee + 3587: e8 10 e4 ff ff call 199c uio(); - 3629: e8 f6 fd ff ff call 3424 + 358c: e8 06 fe ff ff call 3397 exectest(); - 362e: e8 45 d2 ff ff call 878 + 3591: e8 c2 d2 ff ff call 858 exit(); - 3633: e8 e6 01 00 00 call 381e + 3596: e8 c8 01 00 00 call 3763 -00003638 : +0000359b : #include "user.h" #include "x86.h" char* strcpy(char *s, const char *t) { - 3638: f3 0f 1e fb endbr32 - 363c: 55 push %ebp - 363d: 89 e5 mov %esp,%ebp - 363f: 53 push %ebx - 3640: 8b 4d 08 mov 0x8(%ebp),%ecx - 3643: 8b 5d 0c mov 0xc(%ebp),%ebx + 359b: 55 push %ebp + 359c: 89 e5 mov %esp,%ebp + 359e: 53 push %ebx + 359f: 8b 4d 08 mov 0x8(%ebp),%ecx + 35a2: 8b 5d 0c mov 0xc(%ebp),%ebx char *os; os = s; while((*s++ = *t++) != 0) - 3646: b8 00 00 00 00 mov $0x0,%eax - 364b: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 364f: 88 14 01 mov %dl,(%ecx,%eax,1) - 3652: 83 c0 01 add $0x1,%eax - 3655: 84 d2 test %dl,%dl - 3657: 75 f2 jne 364b + 35a5: b8 00 00 00 00 mov $0x0,%eax + 35aa: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx + 35ae: 88 14 01 mov %dl,(%ecx,%eax,1) + 35b1: 83 c0 01 add $0x1,%eax + 35b4: 84 d2 test %dl,%dl + 35b6: 75 f2 jne 35aa ; return os; } - 3659: 89 c8 mov %ecx,%eax - 365b: 5b pop %ebx - 365c: 5d pop %ebp - 365d: c3 ret + 35b8: 89 c8 mov %ecx,%eax + 35ba: 8b 5d fc mov -0x4(%ebp),%ebx + 35bd: c9 leave + 35be: c3 ret -0000365e : +000035bf : int strcmp(const char *p, const char *q) { - 365e: f3 0f 1e fb endbr32 - 3662: 55 push %ebp - 3663: 89 e5 mov %esp,%ebp - 3665: 8b 4d 08 mov 0x8(%ebp),%ecx - 3668: 8b 55 0c mov 0xc(%ebp),%edx + 35bf: 55 push %ebp + 35c0: 89 e5 mov %esp,%ebp + 35c2: 8b 4d 08 mov 0x8(%ebp),%ecx + 35c5: 8b 55 0c mov 0xc(%ebp),%edx while(*p && *p == *q) - 366b: 0f b6 01 movzbl (%ecx),%eax - 366e: 84 c0 test %al,%al - 3670: 74 11 je 3683 - 3672: 38 02 cmp %al,(%edx) - 3674: 75 0d jne 3683 + 35c8: 0f b6 01 movzbl (%ecx),%eax + 35cb: 84 c0 test %al,%al + 35cd: 74 11 je 35e0 + 35cf: 38 02 cmp %al,(%edx) + 35d1: 75 0d jne 35e0 p++, q++; - 3676: 83 c1 01 add $0x1,%ecx - 3679: 83 c2 01 add $0x1,%edx + 35d3: 83 c1 01 add $0x1,%ecx + 35d6: 83 c2 01 add $0x1,%edx while(*p && *p == *q) - 367c: 0f b6 01 movzbl (%ecx),%eax - 367f: 84 c0 test %al,%al - 3681: 75 ef jne 3672 + 35d9: 0f b6 01 movzbl (%ecx),%eax + 35dc: 84 c0 test %al,%al + 35de: 75 ef jne 35cf return (uchar)*p - (uchar)*q; - 3683: 0f b6 c0 movzbl %al,%eax - 3686: 0f b6 12 movzbl (%edx),%edx - 3689: 29 d0 sub %edx,%eax + 35e0: 0f b6 c0 movzbl %al,%eax + 35e3: 0f b6 12 movzbl (%edx),%edx + 35e6: 29 d0 sub %edx,%eax } - 368b: 5d pop %ebp - 368c: c3 ret + 35e8: 5d pop %ebp + 35e9: c3 ret -0000368d : +000035ea : uint strlen(const char *s) { - 368d: f3 0f 1e fb endbr32 - 3691: 55 push %ebp - 3692: 89 e5 mov %esp,%ebp - 3694: 8b 55 08 mov 0x8(%ebp),%edx + 35ea: 55 push %ebp + 35eb: 89 e5 mov %esp,%ebp + 35ed: 8b 55 08 mov 0x8(%ebp),%edx int n; for(n = 0; s[n]; n++) - 3697: 80 3a 00 cmpb $0x0,(%edx) - 369a: 74 14 je 36b0 - 369c: b8 00 00 00 00 mov $0x0,%eax - 36a1: 83 c0 01 add $0x1,%eax - 36a4: 89 c1 mov %eax,%ecx - 36a6: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - 36aa: 75 f5 jne 36a1 + 35f0: 80 3a 00 cmpb $0x0,(%edx) + 35f3: 74 14 je 3609 + 35f5: b8 00 00 00 00 mov $0x0,%eax + 35fa: 83 c0 01 add $0x1,%eax + 35fd: 89 c1 mov %eax,%ecx + 35ff: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) + 3603: 75 f5 jne 35fa ; return n; } - 36ac: 89 c8 mov %ecx,%eax - 36ae: 5d pop %ebp - 36af: c3 ret + 3605: 89 c8 mov %ecx,%eax + 3607: 5d pop %ebp + 3608: c3 ret for(n = 0; s[n]; n++) - 36b0: b9 00 00 00 00 mov $0x0,%ecx + 3609: b9 00 00 00 00 mov $0x0,%ecx return n; - 36b5: eb f5 jmp 36ac + 360e: eb f5 jmp 3605 -000036b7 : +00003610 : void* memset(void *dst, int c, uint n) { - 36b7: f3 0f 1e fb endbr32 - 36bb: 55 push %ebp - 36bc: 89 e5 mov %esp,%ebp - 36be: 57 push %edi - 36bf: 8b 55 08 mov 0x8(%ebp),%edx + 3610: 55 push %ebp + 3611: 89 e5 mov %esp,%ebp + 3613: 57 push %edi + 3614: 8b 55 08 mov 0x8(%ebp),%edx } static inline void stosb(void *addr, int data, int cnt) { asm volatile("cld; rep stosb" : - 36c2: 89 d7 mov %edx,%edi - 36c4: 8b 4d 10 mov 0x10(%ebp),%ecx - 36c7: 8b 45 0c mov 0xc(%ebp),%eax - 36ca: fc cld - 36cb: f3 aa rep stos %al,%es:(%edi) + 3617: 89 d7 mov %edx,%edi + 3619: 8b 4d 10 mov 0x10(%ebp),%ecx + 361c: 8b 45 0c mov 0xc(%ebp),%eax + 361f: fc cld + 3620: f3 aa rep stos %al,%es:(%edi) stosb(dst, c, n); return dst; } - 36cd: 89 d0 mov %edx,%eax - 36cf: 5f pop %edi - 36d0: 5d pop %ebp - 36d1: c3 ret + 3622: 89 d0 mov %edx,%eax + 3624: 8b 7d fc mov -0x4(%ebp),%edi + 3627: c9 leave + 3628: c3 ret -000036d2 : +00003629 : char* strchr(const char *s, char c) { - 36d2: f3 0f 1e fb endbr32 - 36d6: 55 push %ebp - 36d7: 89 e5 mov %esp,%ebp - 36d9: 8b 45 08 mov 0x8(%ebp),%eax - 36dc: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx + 3629: 55 push %ebp + 362a: 89 e5 mov %esp,%ebp + 362c: 8b 45 08 mov 0x8(%ebp),%eax + 362f: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx for(; *s; s++) - 36e0: 0f b6 10 movzbl (%eax),%edx - 36e3: 84 d2 test %dl,%dl - 36e5: 74 15 je 36fc + 3633: 0f b6 10 movzbl (%eax),%edx + 3636: 84 d2 test %dl,%dl + 3638: 74 15 je 364f if(*s == c) - 36e7: 38 d1 cmp %dl,%cl - 36e9: 74 0f je 36fa + 363a: 38 d1 cmp %dl,%cl + 363c: 74 0f je 364d for(; *s; s++) - 36eb: 83 c0 01 add $0x1,%eax - 36ee: 0f b6 10 movzbl (%eax),%edx - 36f1: 84 d2 test %dl,%dl - 36f3: 75 f2 jne 36e7 + 363e: 83 c0 01 add $0x1,%eax + 3641: 0f b6 10 movzbl (%eax),%edx + 3644: 84 d2 test %dl,%dl + 3646: 75 f2 jne 363a return (char*)s; return 0; - 36f5: b8 00 00 00 00 mov $0x0,%eax + 3648: b8 00 00 00 00 mov $0x0,%eax } - 36fa: 5d pop %ebp - 36fb: c3 ret + 364d: 5d pop %ebp + 364e: c3 ret return 0; - 36fc: b8 00 00 00 00 mov $0x0,%eax - 3701: eb f7 jmp 36fa + 364f: b8 00 00 00 00 mov $0x0,%eax + 3654: eb f7 jmp 364d -00003703 : +00003656 : char* gets(char *buf, int max) { - 3703: f3 0f 1e fb endbr32 - 3707: 55 push %ebp - 3708: 89 e5 mov %esp,%ebp - 370a: 57 push %edi - 370b: 56 push %esi - 370c: 53 push %ebx - 370d: 83 ec 2c sub $0x2c,%esp - 3710: 8b 75 08 mov 0x8(%ebp),%esi + 3656: 55 push %ebp + 3657: 89 e5 mov %esp,%ebp + 3659: 57 push %edi + 365a: 56 push %esi + 365b: 53 push %ebx + 365c: 83 ec 2c sub $0x2c,%esp + 365f: 8b 75 08 mov 0x8(%ebp),%esi int i, cc; char c; for(i=0; i+1 < max; ){ - 3713: bb 00 00 00 00 mov $0x0,%ebx + 3662: bb 00 00 00 00 mov $0x0,%ebx cc = read(0, &c, 1); - 3718: 8d 7d e7 lea -0x19(%ebp),%edi + 3667: 8d 7d e7 lea -0x19(%ebp),%edi for(i=0; i+1 < max; ){ - 371b: 89 5d d4 mov %ebx,-0x2c(%ebp) - 371e: 83 c3 01 add $0x1,%ebx - 3721: 3b 5d 0c cmp 0xc(%ebp),%ebx - 3724: 7d 27 jge 374d + 366a: 89 5d d4 mov %ebx,-0x2c(%ebp) + 366d: 83 c3 01 add $0x1,%ebx + 3670: 3b 5d 0c cmp 0xc(%ebp),%ebx + 3673: 7d 27 jge 369c cc = read(0, &c, 1); - 3726: 83 ec 04 sub $0x4,%esp - 3729: 6a 01 push $0x1 - 372b: 57 push %edi - 372c: 6a 00 push $0x0 - 372e: e8 03 01 00 00 call 3836 + 3675: 83 ec 04 sub $0x4,%esp + 3678: 6a 01 push $0x1 + 367a: 57 push %edi + 367b: 6a 00 push $0x0 + 367d: e8 f9 00 00 00 call 377b if(cc < 1) - 3733: 83 c4 10 add $0x10,%esp - 3736: 85 c0 test %eax,%eax - 3738: 7e 13 jle 374d + 3682: 83 c4 10 add $0x10,%esp + 3685: 85 c0 test %eax,%eax + 3687: 7e 13 jle 369c break; buf[i++] = c; - 373a: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 373e: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) + 3689: 0f b6 45 e7 movzbl -0x19(%ebp),%eax + 368d: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) if(c == '\n' || c == '\r') - 3742: 3c 0a cmp $0xa,%al - 3744: 74 04 je 374a - 3746: 3c 0d cmp $0xd,%al - 3748: 75 d1 jne 371b + 3691: 3c 0a cmp $0xa,%al + 3693: 74 04 je 3699 + 3695: 3c 0d cmp $0xd,%al + 3697: 75 d1 jne 366a for(i=0; i+1 < max; ){ - 374a: 89 5d d4 mov %ebx,-0x2c(%ebp) + 3699: 89 5d d4 mov %ebx,-0x2c(%ebp) break; } buf[i] = '\0'; - 374d: 8b 45 d4 mov -0x2c(%ebp),%eax - 3750: c6 04 06 00 movb $0x0,(%esi,%eax,1) + 369c: 8b 45 d4 mov -0x2c(%ebp),%eax + 369f: c6 04 06 00 movb $0x0,(%esi,%eax,1) return buf; } - 3754: 89 f0 mov %esi,%eax - 3756: 8d 65 f4 lea -0xc(%ebp),%esp - 3759: 5b pop %ebx - 375a: 5e pop %esi - 375b: 5f pop %edi - 375c: 5d pop %ebp - 375d: c3 ret + 36a3: 89 f0 mov %esi,%eax + 36a5: 8d 65 f4 lea -0xc(%ebp),%esp + 36a8: 5b pop %ebx + 36a9: 5e pop %esi + 36aa: 5f pop %edi + 36ab: 5d pop %ebp + 36ac: c3 ret -0000375e : +000036ad : int stat(const char *n, struct stat *st) { - 375e: f3 0f 1e fb endbr32 - 3762: 55 push %ebp - 3763: 89 e5 mov %esp,%ebp - 3765: 56 push %esi - 3766: 53 push %ebx + 36ad: 55 push %ebp + 36ae: 89 e5 mov %esp,%ebp + 36b0: 56 push %esi + 36b1: 53 push %ebx int fd; int r; fd = open(n, O_RDONLY); - 3767: 83 ec 08 sub $0x8,%esp - 376a: 6a 00 push $0x0 - 376c: ff 75 08 pushl 0x8(%ebp) - 376f: e8 ea 00 00 00 call 385e + 36b2: 83 ec 08 sub $0x8,%esp + 36b5: 6a 00 push $0x0 + 36b7: ff 75 08 push 0x8(%ebp) + 36ba: e8 e4 00 00 00 call 37a3 if(fd < 0) - 3774: 83 c4 10 add $0x10,%esp - 3777: 85 c0 test %eax,%eax - 3779: 78 24 js 379f - 377b: 89 c3 mov %eax,%ebx + 36bf: 83 c4 10 add $0x10,%esp + 36c2: 85 c0 test %eax,%eax + 36c4: 78 24 js 36ea + 36c6: 89 c3 mov %eax,%ebx return -1; r = fstat(fd, st); - 377d: 83 ec 08 sub $0x8,%esp - 3780: ff 75 0c pushl 0xc(%ebp) - 3783: 50 push %eax - 3784: e8 ed 00 00 00 call 3876 - 3789: 89 c6 mov %eax,%esi + 36c8: 83 ec 08 sub $0x8,%esp + 36cb: ff 75 0c push 0xc(%ebp) + 36ce: 50 push %eax + 36cf: e8 e7 00 00 00 call 37bb + 36d4: 89 c6 mov %eax,%esi close(fd); - 378b: 89 1c 24 mov %ebx,(%esp) - 378e: e8 b3 00 00 00 call 3846 + 36d6: 89 1c 24 mov %ebx,(%esp) + 36d9: e8 ad 00 00 00 call 378b return r; - 3793: 83 c4 10 add $0x10,%esp + 36de: 83 c4 10 add $0x10,%esp } - 3796: 89 f0 mov %esi,%eax - 3798: 8d 65 f8 lea -0x8(%ebp),%esp - 379b: 5b pop %ebx - 379c: 5e pop %esi - 379d: 5d pop %ebp - 379e: c3 ret + 36e1: 89 f0 mov %esi,%eax + 36e3: 8d 65 f8 lea -0x8(%ebp),%esp + 36e6: 5b pop %ebx + 36e7: 5e pop %esi + 36e8: 5d pop %ebp + 36e9: c3 ret return -1; - 379f: be ff ff ff ff mov $0xffffffff,%esi - 37a4: eb f0 jmp 3796 + 36ea: be ff ff ff ff mov $0xffffffff,%esi + 36ef: eb f0 jmp 36e1 -000037a6 : +000036f1 : int atoi(const char *s) { - 37a6: f3 0f 1e fb endbr32 - 37aa: 55 push %ebp - 37ab: 89 e5 mov %esp,%ebp - 37ad: 53 push %ebx - 37ae: 8b 55 08 mov 0x8(%ebp),%edx + 36f1: 55 push %ebp + 36f2: 89 e5 mov %esp,%ebp + 36f4: 53 push %ebx + 36f5: 8b 55 08 mov 0x8(%ebp),%edx int n; n = 0; while('0' <= *s && *s <= '9') - 37b1: 0f b6 02 movzbl (%edx),%eax - 37b4: 8d 48 d0 lea -0x30(%eax),%ecx - 37b7: 80 f9 09 cmp $0x9,%cl - 37ba: 77 22 ja 37de + 36f8: 0f b6 02 movzbl (%edx),%eax + 36fb: 8d 48 d0 lea -0x30(%eax),%ecx + 36fe: 80 f9 09 cmp $0x9,%cl + 3701: 77 24 ja 3727 n = 0; - 37bc: b9 00 00 00 00 mov $0x0,%ecx + 3703: b9 00 00 00 00 mov $0x0,%ecx n = n*10 + *s++ - '0'; - 37c1: 83 c2 01 add $0x1,%edx - 37c4: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 37c7: 0f be c0 movsbl %al,%eax - 37ca: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx + 3708: 83 c2 01 add $0x1,%edx + 370b: 8d 0c 89 lea (%ecx,%ecx,4),%ecx + 370e: 0f be c0 movsbl %al,%eax + 3711: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx while('0' <= *s && *s <= '9') - 37ce: 0f b6 02 movzbl (%edx),%eax - 37d1: 8d 58 d0 lea -0x30(%eax),%ebx - 37d4: 80 fb 09 cmp $0x9,%bl - 37d7: 76 e8 jbe 37c1 + 3715: 0f b6 02 movzbl (%edx),%eax + 3718: 8d 58 d0 lea -0x30(%eax),%ebx + 371b: 80 fb 09 cmp $0x9,%bl + 371e: 76 e8 jbe 3708 return n; } - 37d9: 89 c8 mov %ecx,%eax - 37db: 5b pop %ebx - 37dc: 5d pop %ebp - 37dd: c3 ret + 3720: 89 c8 mov %ecx,%eax + 3722: 8b 5d fc mov -0x4(%ebp),%ebx + 3725: c9 leave + 3726: c3 ret n = 0; - 37de: b9 00 00 00 00 mov $0x0,%ecx + 3727: b9 00 00 00 00 mov $0x0,%ecx return n; - 37e3: eb f4 jmp 37d9 + 372c: eb f2 jmp 3720 -000037e5 : +0000372e : void* memmove(void *vdst, const void *vsrc, int n) { - 37e5: f3 0f 1e fb endbr32 - 37e9: 55 push %ebp - 37ea: 89 e5 mov %esp,%ebp - 37ec: 56 push %esi - 37ed: 53 push %ebx - 37ee: 8b 75 08 mov 0x8(%ebp),%esi - 37f1: 8b 55 0c mov 0xc(%ebp),%edx - 37f4: 8b 5d 10 mov 0x10(%ebp),%ebx + 372e: 55 push %ebp + 372f: 89 e5 mov %esp,%ebp + 3731: 56 push %esi + 3732: 53 push %ebx + 3733: 8b 75 08 mov 0x8(%ebp),%esi + 3736: 8b 55 0c mov 0xc(%ebp),%edx + 3739: 8b 5d 10 mov 0x10(%ebp),%ebx char *dst; const char *src; dst = vdst; src = vsrc; while(n-- > 0) - 37f7: 85 db test %ebx,%ebx - 37f9: 7e 15 jle 3810 - 37fb: 01 f3 add %esi,%ebx + 373c: 85 db test %ebx,%ebx + 373e: 7e 15 jle 3755 + 3740: 01 f3 add %esi,%ebx dst = vdst; - 37fd: 89 f0 mov %esi,%eax + 3742: 89 f0 mov %esi,%eax *dst++ = *src++; - 37ff: 83 c2 01 add $0x1,%edx - 3802: 83 c0 01 add $0x1,%eax - 3805: 0f b6 4a ff movzbl -0x1(%edx),%ecx - 3809: 88 48 ff mov %cl,-0x1(%eax) + 3744: 83 c2 01 add $0x1,%edx + 3747: 83 c0 01 add $0x1,%eax + 374a: 0f b6 4a ff movzbl -0x1(%edx),%ecx + 374e: 88 48 ff mov %cl,-0x1(%eax) while(n-- > 0) - 380c: 39 c3 cmp %eax,%ebx - 380e: 75 ef jne 37ff + 3751: 39 c3 cmp %eax,%ebx + 3753: 75 ef jne 3744 return vdst; } - 3810: 89 f0 mov %esi,%eax - 3812: 5b pop %ebx - 3813: 5e pop %esi - 3814: 5d pop %ebp - 3815: c3 ret + 3755: 89 f0 mov %esi,%eax + 3757: 5b pop %ebx + 3758: 5e pop %esi + 3759: 5d pop %ebp + 375a: c3 ret -00003816 : +0000375b : name: \ movl $SYS_ ## name, %eax; \ int $T_SYSCALL; \ ret SYSCALL(fork) - 3816: b8 01 00 00 00 mov $0x1,%eax - 381b: cd 40 int $0x40 - 381d: c3 ret + 375b: b8 01 00 00 00 mov $0x1,%eax + 3760: cd 40 int $0x40 + 3762: c3 ret -0000381e : +00003763 : SYSCALL(exit) - 381e: b8 02 00 00 00 mov $0x2,%eax - 3823: cd 40 int $0x40 - 3825: c3 ret + 3763: b8 02 00 00 00 mov $0x2,%eax + 3768: cd 40 int $0x40 + 376a: c3 ret -00003826 : +0000376b : SYSCALL(wait) - 3826: b8 03 00 00 00 mov $0x3,%eax - 382b: cd 40 int $0x40 - 382d: c3 ret + 376b: b8 03 00 00 00 mov $0x3,%eax + 3770: cd 40 int $0x40 + 3772: c3 ret -0000382e : +00003773 : SYSCALL(pipe) - 382e: b8 04 00 00 00 mov $0x4,%eax - 3833: cd 40 int $0x40 - 3835: c3 ret + 3773: b8 04 00 00 00 mov $0x4,%eax + 3778: cd 40 int $0x40 + 377a: c3 ret -00003836 : +0000377b : SYSCALL(read) - 3836: b8 05 00 00 00 mov $0x5,%eax - 383b: cd 40 int $0x40 - 383d: c3 ret + 377b: b8 05 00 00 00 mov $0x5,%eax + 3780: cd 40 int $0x40 + 3782: c3 ret -0000383e : +00003783 : SYSCALL(write) - 383e: b8 10 00 00 00 mov $0x10,%eax - 3843: cd 40 int $0x40 - 3845: c3 ret + 3783: b8 10 00 00 00 mov $0x10,%eax + 3788: cd 40 int $0x40 + 378a: c3 ret -00003846 : +0000378b : SYSCALL(close) - 3846: b8 15 00 00 00 mov $0x15,%eax - 384b: cd 40 int $0x40 - 384d: c3 ret + 378b: b8 15 00 00 00 mov $0x15,%eax + 3790: cd 40 int $0x40 + 3792: c3 ret -0000384e : +00003793 : SYSCALL(kill) - 384e: b8 06 00 00 00 mov $0x6,%eax - 3853: cd 40 int $0x40 - 3855: c3 ret + 3793: b8 06 00 00 00 mov $0x6,%eax + 3798: cd 40 int $0x40 + 379a: c3 ret -00003856 : +0000379b : SYSCALL(exec) - 3856: b8 07 00 00 00 mov $0x7,%eax - 385b: cd 40 int $0x40 - 385d: c3 ret + 379b: b8 07 00 00 00 mov $0x7,%eax + 37a0: cd 40 int $0x40 + 37a2: c3 ret -0000385e : +000037a3 : SYSCALL(open) - 385e: b8 0f 00 00 00 mov $0xf,%eax - 3863: cd 40 int $0x40 - 3865: c3 ret + 37a3: b8 0f 00 00 00 mov $0xf,%eax + 37a8: cd 40 int $0x40 + 37aa: c3 ret -00003866 : +000037ab : SYSCALL(mknod) - 3866: b8 11 00 00 00 mov $0x11,%eax - 386b: cd 40 int $0x40 - 386d: c3 ret + 37ab: b8 11 00 00 00 mov $0x11,%eax + 37b0: cd 40 int $0x40 + 37b2: c3 ret -0000386e : +000037b3 : SYSCALL(unlink) - 386e: b8 12 00 00 00 mov $0x12,%eax - 3873: cd 40 int $0x40 - 3875: c3 ret + 37b3: b8 12 00 00 00 mov $0x12,%eax + 37b8: cd 40 int $0x40 + 37ba: c3 ret -00003876 : +000037bb : SYSCALL(fstat) - 3876: b8 08 00 00 00 mov $0x8,%eax - 387b: cd 40 int $0x40 - 387d: c3 ret + 37bb: b8 08 00 00 00 mov $0x8,%eax + 37c0: cd 40 int $0x40 + 37c2: c3 ret -0000387e : +000037c3 : SYSCALL(link) - 387e: b8 13 00 00 00 mov $0x13,%eax - 3883: cd 40 int $0x40 - 3885: c3 ret + 37c3: b8 13 00 00 00 mov $0x13,%eax + 37c8: cd 40 int $0x40 + 37ca: c3 ret -00003886 : +000037cb : SYSCALL(mkdir) - 3886: b8 14 00 00 00 mov $0x14,%eax - 388b: cd 40 int $0x40 - 388d: c3 ret + 37cb: b8 14 00 00 00 mov $0x14,%eax + 37d0: cd 40 int $0x40 + 37d2: c3 ret -0000388e : +000037d3 : SYSCALL(chdir) - 388e: b8 09 00 00 00 mov $0x9,%eax - 3893: cd 40 int $0x40 - 3895: c3 ret + 37d3: b8 09 00 00 00 mov $0x9,%eax + 37d8: cd 40 int $0x40 + 37da: c3 ret -00003896 : +000037db : SYSCALL(dup) - 3896: b8 0a 00 00 00 mov $0xa,%eax - 389b: cd 40 int $0x40 - 389d: c3 ret + 37db: b8 0a 00 00 00 mov $0xa,%eax + 37e0: cd 40 int $0x40 + 37e2: c3 ret -0000389e : +000037e3 : SYSCALL(getpid) - 389e: b8 0b 00 00 00 mov $0xb,%eax - 38a3: cd 40 int $0x40 - 38a5: c3 ret + 37e3: b8 0b 00 00 00 mov $0xb,%eax + 37e8: cd 40 int $0x40 + 37ea: c3 ret -000038a6 : +000037eb : SYSCALL(sbrk) - 38a6: b8 0c 00 00 00 mov $0xc,%eax - 38ab: cd 40 int $0x40 - 38ad: c3 ret + 37eb: b8 0c 00 00 00 mov $0xc,%eax + 37f0: cd 40 int $0x40 + 37f2: c3 ret -000038ae : +000037f3 : SYSCALL(sleep) - 38ae: b8 0d 00 00 00 mov $0xd,%eax - 38b3: cd 40 int $0x40 - 38b5: c3 ret + 37f3: b8 0d 00 00 00 mov $0xd,%eax + 37f8: cd 40 int $0x40 + 37fa: c3 ret -000038b6 : +000037fb : SYSCALL(uptime) - 38b6: b8 0e 00 00 00 mov $0xe,%eax - 38bb: cd 40 int $0x40 - 38bd: c3 ret + 37fb: b8 0e 00 00 00 mov $0xe,%eax + 3800: cd 40 int $0x40 + 3802: c3 ret -000038be : +00003803 : SYSCALL(slabtest) - 38be: b8 16 00 00 00 mov $0x16,%eax - 38c3: cd 40 int $0x40 - 38c5: c3 ret + 3803: b8 16 00 00 00 mov $0x16,%eax + 3808: cd 40 int $0x40 + 380a: c3 ret -000038c6 : +0000380b : SYSCALL(ps) - 38c6: b8 17 00 00 00 mov $0x17,%eax - 38cb: cd 40 int $0x40 - 38cd: c3 ret + 380b: b8 17 00 00 00 mov $0x17,%eax + 3810: cd 40 int $0x40 + 3812: c3 ret -000038ce : +00003813 : write(fd, &c, 1); } static void printint(int fd, int xx, int base, int sgn) { - 38ce: 55 push %ebp - 38cf: 89 e5 mov %esp,%ebp - 38d1: 57 push %edi - 38d2: 56 push %esi - 38d3: 53 push %ebx - 38d4: 83 ec 3c sub $0x3c,%esp - 38d7: 89 45 c4 mov %eax,-0x3c(%ebp) - 38da: 89 d3 mov %edx,%ebx + 3813: 55 push %ebp + 3814: 89 e5 mov %esp,%ebp + 3816: 57 push %edi + 3817: 56 push %esi + 3818: 53 push %ebx + 3819: 83 ec 3c sub $0x3c,%esp + 381c: 89 45 c4 mov %eax,-0x3c(%ebp) + 381f: 89 ce mov %ecx,%esi char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 38dc: 83 7d 08 00 cmpl $0x0,0x8(%ebp) - 38e0: 74 77 je 3959 - 38e2: 85 d2 test %edx,%edx - 38e4: 79 73 jns 3959 + 3821: 83 7d 08 00 cmpl $0x0,0x8(%ebp) + 3825: 74 79 je 38a0 + 3827: 85 d2 test %edx,%edx + 3829: 79 75 jns 38a0 neg = 1; x = -xx; - 38e6: f7 db neg %ebx + 382b: 89 d1 mov %edx,%ecx + 382d: f7 d9 neg %ecx neg = 1; - 38e8: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) + 382f: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) } else { x = xx; } i = 0; - 38ef: be 00 00 00 00 mov $0x0,%esi + 3836: bb 00 00 00 00 mov $0x0,%ebx do{ buf[i++] = digits[x % base]; - 38f4: 89 f7 mov %esi,%edi - 38f6: 83 c6 01 add $0x1,%esi - 38f9: 89 d8 mov %ebx,%eax - 38fb: ba 00 00 00 00 mov $0x0,%edx - 3900: f7 f1 div %ecx - 3902: 0f b6 92 1c 54 00 00 movzbl 0x541c(%edx),%edx - 3909: 88 54 35 d7 mov %dl,-0x29(%ebp,%esi,1) + 383b: 89 df mov %ebx,%edi + 383d: 83 c3 01 add $0x1,%ebx + 3840: 89 c8 mov %ecx,%eax + 3842: ba 00 00 00 00 mov $0x0,%edx + 3847: f7 f6 div %esi + 3849: 0f b6 92 9c 53 00 00 movzbl 0x539c(%edx),%edx + 3850: 88 54 1d d7 mov %dl,-0x29(%ebp,%ebx,1) }while((x /= base) != 0); - 390d: 89 da mov %ebx,%edx - 390f: 89 c3 mov %eax,%ebx - 3911: 39 d1 cmp %edx,%ecx - 3913: 76 df jbe 38f4 + 3854: 89 ca mov %ecx,%edx + 3856: 89 c1 mov %eax,%ecx + 3858: 39 d6 cmp %edx,%esi + 385a: 76 df jbe 383b if(neg) - 3915: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) - 3919: 74 08 je 3923 + 385c: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) + 3860: 74 08 je 386a buf[i++] = '-'; - 391b: c6 44 35 d8 2d movb $0x2d,-0x28(%ebp,%esi,1) - 3920: 8d 77 02 lea 0x2(%edi),%esi + 3862: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) + 3867: 8d 5f 02 lea 0x2(%edi),%ebx while(--i >= 0) - 3923: 85 f6 test %esi,%esi - 3925: 7e 2a jle 3951 - 3927: 8d 5c 35 d7 lea -0x29(%ebp,%esi,1),%ebx - 392b: 8d 7d d8 lea -0x28(%ebp),%edi + 386a: 85 db test %ebx,%ebx + 386c: 7e 2a jle 3898 + 386e: 8d 7d d8 lea -0x28(%ebp),%edi + 3871: 8d 5c 1d d7 lea -0x29(%ebp,%ebx,1),%ebx write(fd, &c, 1); - 392e: 8d 75 d7 lea -0x29(%ebp),%esi + 3875: 8d 75 d7 lea -0x29(%ebp),%esi putc(fd, buf[i]); - 3931: 0f b6 03 movzbl (%ebx),%eax - 3934: 88 45 d7 mov %al,-0x29(%ebp) + 3878: 0f b6 03 movzbl (%ebx),%eax + 387b: 88 45 d7 mov %al,-0x29(%ebp) write(fd, &c, 1); - 3937: 83 ec 04 sub $0x4,%esp - 393a: 6a 01 push $0x1 - 393c: 56 push %esi - 393d: ff 75 c4 pushl -0x3c(%ebp) - 3940: e8 f9 fe ff ff call 383e + 387e: 83 ec 04 sub $0x4,%esp + 3881: 6a 01 push $0x1 + 3883: 56 push %esi + 3884: ff 75 c4 push -0x3c(%ebp) + 3887: e8 f7 fe ff ff call 3783 while(--i >= 0) - 3945: 89 d8 mov %ebx,%eax - 3947: 83 eb 01 sub $0x1,%ebx - 394a: 83 c4 10 add $0x10,%esp - 394d: 39 f8 cmp %edi,%eax - 394f: 75 e0 jne 3931 + 388c: 89 d8 mov %ebx,%eax + 388e: 83 eb 01 sub $0x1,%ebx + 3891: 83 c4 10 add $0x10,%esp + 3894: 39 f8 cmp %edi,%eax + 3896: 75 e0 jne 3878 } - 3951: 8d 65 f4 lea -0xc(%ebp),%esp - 3954: 5b pop %ebx - 3955: 5e pop %esi - 3956: 5f pop %edi - 3957: 5d pop %ebp - 3958: c3 ret + 3898: 8d 65 f4 lea -0xc(%ebp),%esp + 389b: 5b pop %ebx + 389c: 5e pop %esi + 389d: 5f pop %edi + 389e: 5d pop %ebp + 389f: c3 ret + x = xx; + 38a0: 89 d1 mov %edx,%ecx neg = 0; - 3959: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) - 3960: eb 8d jmp 38ef + 38a2: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) + 38a9: eb 8b jmp 3836 -00003962 : +000038ab : // Print to the given fd. Only understands %d, %x, %p, %s. void printf(int fd, const char *fmt, ...) { - 3962: f3 0f 1e fb endbr32 - 3966: 55 push %ebp - 3967: 89 e5 mov %esp,%ebp - 3969: 57 push %edi - 396a: 56 push %esi - 396b: 53 push %ebx - 396c: 83 ec 2c sub $0x2c,%esp + 38ab: 55 push %ebp + 38ac: 89 e5 mov %esp,%ebp + 38ae: 57 push %edi + 38af: 56 push %esi + 38b0: 53 push %ebx + 38b1: 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++){ - 396f: 8b 75 0c mov 0xc(%ebp),%esi - 3972: 0f b6 1e movzbl (%esi),%ebx - 3975: 84 db test %bl,%bl - 3977: 0f 84 ab 01 00 00 je 3b28 - 397d: 83 c6 01 add $0x1,%esi + 38b4: 8b 75 0c mov 0xc(%ebp),%esi + 38b7: 0f b6 1e movzbl (%esi),%ebx + 38ba: 84 db test %bl,%bl + 38bc: 0f 84 9f 01 00 00 je 3a61 + 38c2: 83 c6 01 add $0x1,%esi ap = (uint*)(void*)&fmt + 1; - 3980: 8d 45 10 lea 0x10(%ebp),%eax - 3983: 89 45 d4 mov %eax,-0x2c(%ebp) + 38c5: 8d 45 10 lea 0x10(%ebp),%eax + 38c8: 89 45 d4 mov %eax,-0x2c(%ebp) state = 0; - 3986: bf 00 00 00 00 mov $0x0,%edi - 398b: eb 2d jmp 39ba + 38cb: bf 00 00 00 00 mov $0x0,%edi + 38d0: eb 2d jmp 38ff c = fmt[i] & 0xff; if(state == 0){ if(c == '%'){ state = '%'; } else { putc(fd, c); - 398d: 88 5d e7 mov %bl,-0x19(%ebp) + 38d2: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 3990: 83 ec 04 sub $0x4,%esp - 3993: 6a 01 push $0x1 - 3995: 8d 45 e7 lea -0x19(%ebp),%eax - 3998: 50 push %eax - 3999: ff 75 08 pushl 0x8(%ebp) - 399c: e8 9d fe ff ff call 383e + 38d5: 83 ec 04 sub $0x4,%esp + 38d8: 6a 01 push $0x1 + 38da: 8d 45 e7 lea -0x19(%ebp),%eax + 38dd: 50 push %eax + 38de: ff 75 08 push 0x8(%ebp) + 38e1: e8 9d fe ff ff call 3783 putc(fd, c); - 39a1: 83 c4 10 add $0x10,%esp - 39a4: eb 05 jmp 39ab + 38e6: 83 c4 10 add $0x10,%esp + 38e9: eb 05 jmp 38f0 } } else if(state == '%'){ - 39a6: 83 ff 25 cmp $0x25,%edi - 39a9: 74 22 je 39cd + 38eb: 83 ff 25 cmp $0x25,%edi + 38ee: 74 1f je 390f for(i = 0; fmt[i]; i++){ - 39ab: 83 c6 01 add $0x1,%esi - 39ae: 0f b6 5e ff movzbl -0x1(%esi),%ebx - 39b2: 84 db test %bl,%bl - 39b4: 0f 84 6e 01 00 00 je 3b28 + 38f0: 83 c6 01 add $0x1,%esi + 38f3: 0f b6 5e ff movzbl -0x1(%esi),%ebx + 38f7: 84 db test %bl,%bl + 38f9: 0f 84 62 01 00 00 je 3a61 c = fmt[i] & 0xff; - 39ba: 0f be d3 movsbl %bl,%edx - 39bd: 0f b6 c3 movzbl %bl,%eax + 38ff: 0f b6 c3 movzbl %bl,%eax if(state == 0){ - 39c0: 85 ff test %edi,%edi - 39c2: 75 e2 jne 39a6 + 3902: 85 ff test %edi,%edi + 3904: 75 e5 jne 38eb if(c == '%'){ - 39c4: 83 f8 25 cmp $0x25,%eax - 39c7: 75 c4 jne 398d + 3906: 83 f8 25 cmp $0x25,%eax + 3909: 75 c7 jne 38d2 state = '%'; - 39c9: 89 c7 mov %eax,%edi - 39cb: eb de jmp 39ab + 390b: 89 c7 mov %eax,%edi + 390d: eb e1 jmp 38f0 if(c == 'd'){ - 39cd: 83 f8 64 cmp $0x64,%eax - 39d0: 74 59 je 3a2b + 390f: 83 f8 25 cmp $0x25,%eax + 3912: 0f 84 f2 00 00 00 je 3a0a + 3918: 8d 50 9d lea -0x63(%eax),%edx + 391b: 83 fa 15 cmp $0x15,%edx + 391e: 0f 87 07 01 00 00 ja 3a2b + 3924: 0f 87 01 01 00 00 ja 3a2b + 392a: ff 24 95 44 53 00 00 jmp *0x5344(,%edx,4) printint(fd, *ap, 10, 1); + 3931: 83 ec 0c sub $0xc,%esp + 3934: 6a 01 push $0x1 + 3936: b9 0a 00 00 00 mov $0xa,%ecx + 393b: 8b 7d d4 mov -0x2c(%ebp),%edi + 393e: 8b 17 mov (%edi),%edx + 3940: 8b 45 08 mov 0x8(%ebp),%eax + 3943: e8 cb fe ff ff call 3813 ap++; - } else if(c == 'x' || c == 'p'){ - 39d2: 81 e2 f7 00 00 00 and $0xf7,%edx - 39d8: 83 fa 70 cmp $0x70,%edx - 39db: 74 7a je 3a57 - printint(fd, *ap, 16, 0); - ap++; - } else if(c == 's'){ - 39dd: 83 f8 73 cmp $0x73,%eax - 39e0: 0f 84 9d 00 00 00 je 3a83 - s = "(null)"; - while(*s != 0){ - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 39e6: 83 f8 63 cmp $0x63,%eax - 39e9: 0f 84 ec 00 00 00 je 3adb - putc(fd, *ap); - ap++; - } else if(c == '%'){ - 39ef: 83 f8 25 cmp $0x25,%eax - 39f2: 0f 84 0f 01 00 00 je 3b07 - putc(fd, c); + 3948: 89 f8 mov %edi,%eax + 394a: 83 c0 04 add $0x4,%eax + 394d: 89 45 d4 mov %eax,-0x2c(%ebp) + 3950: 83 c4 10 add $0x10,%esp } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); - 39f8: c6 45 e7 25 movb $0x25,-0x19(%ebp) - write(fd, &c, 1); - 39fc: 83 ec 04 sub $0x4,%esp - 39ff: 6a 01 push $0x1 - 3a01: 8d 45 e7 lea -0x19(%ebp),%eax - 3a04: 50 push %eax - 3a05: ff 75 08 pushl 0x8(%ebp) - 3a08: e8 31 fe ff ff call 383e - putc(fd, c); - 3a0d: 88 5d e7 mov %bl,-0x19(%ebp) - write(fd, &c, 1); - 3a10: 83 c4 0c add $0xc,%esp - 3a13: 6a 01 push $0x1 - 3a15: 8d 45 e7 lea -0x19(%ebp),%eax - 3a18: 50 push %eax - 3a19: ff 75 08 pushl 0x8(%ebp) - 3a1c: e8 1d fe ff ff call 383e putc(fd, c); - 3a21: 83 c4 10 add $0x10,%esp } state = 0; - 3a24: bf 00 00 00 00 mov $0x0,%edi - 3a29: eb 80 jmp 39ab - printint(fd, *ap, 10, 1); - 3a2b: 83 ec 0c sub $0xc,%esp - 3a2e: 6a 01 push $0x1 - 3a30: b9 0a 00 00 00 mov $0xa,%ecx - 3a35: 8b 7d d4 mov -0x2c(%ebp),%edi - 3a38: 8b 17 mov (%edi),%edx - 3a3a: 8b 45 08 mov 0x8(%ebp),%eax - 3a3d: e8 8c fe ff ff call 38ce - ap++; - 3a42: 89 f8 mov %edi,%eax - 3a44: 83 c0 04 add $0x4,%eax - 3a47: 89 45 d4 mov %eax,-0x2c(%ebp) - 3a4a: 83 c4 10 add $0x10,%esp - state = 0; - 3a4d: bf 00 00 00 00 mov $0x0,%edi - 3a52: e9 54 ff ff ff jmp 39ab + 3953: bf 00 00 00 00 mov $0x0,%edi + 3958: eb 96 jmp 38f0 printint(fd, *ap, 16, 0); - 3a57: 83 ec 0c sub $0xc,%esp - 3a5a: 6a 00 push $0x0 - 3a5c: b9 10 00 00 00 mov $0x10,%ecx - 3a61: 8b 7d d4 mov -0x2c(%ebp),%edi - 3a64: 8b 17 mov (%edi),%edx - 3a66: 8b 45 08 mov 0x8(%ebp),%eax - 3a69: e8 60 fe ff ff call 38ce + 395a: 83 ec 0c sub $0xc,%esp + 395d: 6a 00 push $0x0 + 395f: b9 10 00 00 00 mov $0x10,%ecx + 3964: 8b 7d d4 mov -0x2c(%ebp),%edi + 3967: 8b 17 mov (%edi),%edx + 3969: 8b 45 08 mov 0x8(%ebp),%eax + 396c: e8 a2 fe ff ff call 3813 ap++; - 3a6e: 89 f8 mov %edi,%eax - 3a70: 83 c0 04 add $0x4,%eax - 3a73: 89 45 d4 mov %eax,-0x2c(%ebp) - 3a76: 83 c4 10 add $0x10,%esp + 3971: 89 f8 mov %edi,%eax + 3973: 83 c0 04 add $0x4,%eax + 3976: 89 45 d4 mov %eax,-0x2c(%ebp) + 3979: 83 c4 10 add $0x10,%esp state = 0; - 3a79: bf 00 00 00 00 mov $0x0,%edi - 3a7e: e9 28 ff ff ff jmp 39ab + 397c: bf 00 00 00 00 mov $0x0,%edi + 3981: e9 6a ff ff ff jmp 38f0 s = (char*)*ap; - 3a83: 8b 4d d4 mov -0x2c(%ebp),%ecx - 3a86: 8b 01 mov (%ecx),%eax + 3986: 8b 4d d4 mov -0x2c(%ebp),%ecx + 3989: 8b 01 mov (%ecx),%eax ap++; - 3a88: 83 c1 04 add $0x4,%ecx - 3a8b: 89 4d d4 mov %ecx,-0x2c(%ebp) + 398b: 83 c1 04 add $0x4,%ecx + 398e: 89 4d d4 mov %ecx,-0x2c(%ebp) if(s == 0) - 3a8e: 85 c0 test %eax,%eax - 3a90: 74 13 je 3aa5 + 3991: 85 c0 test %eax,%eax + 3993: 74 13 je 39a8 s = (char*)*ap; - 3a92: 89 c3 mov %eax,%ebx + 3995: 89 c3 mov %eax,%ebx while(*s != 0){ - 3a94: 0f b6 00 movzbl (%eax),%eax + 3997: 0f b6 00 movzbl (%eax),%eax state = 0; - 3a97: bf 00 00 00 00 mov $0x0,%edi + 399a: bf 00 00 00 00 mov $0x0,%edi while(*s != 0){ - 3a9c: 84 c0 test %al,%al - 3a9e: 75 0f jne 3aaf - 3aa0: e9 06 ff ff ff jmp 39ab + 399f: 84 c0 test %al,%al + 39a1: 75 0f jne 39b2 + 39a3: e9 48 ff ff ff jmp 38f0 s = "(null)"; - 3aa5: bb 12 54 00 00 mov $0x5412,%ebx + 39a8: bb 3a 53 00 00 mov $0x533a,%ebx while(*s != 0){ - 3aaa: b8 28 00 00 00 mov $0x28,%eax - 3aaf: 8b 7d 08 mov 0x8(%ebp),%edi + 39ad: b8 28 00 00 00 mov $0x28,%eax + 39b2: 8b 7d 08 mov 0x8(%ebp),%edi putc(fd, *s); - 3ab2: 88 45 e7 mov %al,-0x19(%ebp) + 39b5: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 3ab5: 83 ec 04 sub $0x4,%esp - 3ab8: 6a 01 push $0x1 - 3aba: 8d 45 e7 lea -0x19(%ebp),%eax - 3abd: 50 push %eax - 3abe: 57 push %edi - 3abf: e8 7a fd ff ff call 383e + 39b8: 83 ec 04 sub $0x4,%esp + 39bb: 6a 01 push $0x1 + 39bd: 8d 45 e7 lea -0x19(%ebp),%eax + 39c0: 50 push %eax + 39c1: 57 push %edi + 39c2: e8 bc fd ff ff call 3783 s++; - 3ac4: 83 c3 01 add $0x1,%ebx + 39c7: 83 c3 01 add $0x1,%ebx while(*s != 0){ - 3ac7: 0f b6 03 movzbl (%ebx),%eax - 3aca: 83 c4 10 add $0x10,%esp - 3acd: 84 c0 test %al,%al - 3acf: 75 e1 jne 3ab2 + 39ca: 0f b6 03 movzbl (%ebx),%eax + 39cd: 83 c4 10 add $0x10,%esp + 39d0: 84 c0 test %al,%al + 39d2: 75 e1 jne 39b5 state = 0; - 3ad1: bf 00 00 00 00 mov $0x0,%edi - 3ad6: e9 d0 fe ff ff jmp 39ab + 39d4: bf 00 00 00 00 mov $0x0,%edi + 39d9: e9 12 ff ff ff jmp 38f0 putc(fd, *ap); - 3adb: 8b 7d d4 mov -0x2c(%ebp),%edi - 3ade: 8b 07 mov (%edi),%eax - 3ae0: 88 45 e7 mov %al,-0x19(%ebp) + 39de: 8b 7d d4 mov -0x2c(%ebp),%edi + 39e1: 8b 07 mov (%edi),%eax + 39e3: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 3ae3: 83 ec 04 sub $0x4,%esp - 3ae6: 6a 01 push $0x1 - 3ae8: 8d 45 e7 lea -0x19(%ebp),%eax - 3aeb: 50 push %eax - 3aec: ff 75 08 pushl 0x8(%ebp) - 3aef: e8 4a fd ff ff call 383e + 39e6: 83 ec 04 sub $0x4,%esp + 39e9: 6a 01 push $0x1 + 39eb: 8d 45 e7 lea -0x19(%ebp),%eax + 39ee: 50 push %eax + 39ef: ff 75 08 push 0x8(%ebp) + 39f2: e8 8c fd ff ff call 3783 ap++; - 3af4: 83 c7 04 add $0x4,%edi - 3af7: 89 7d d4 mov %edi,-0x2c(%ebp) - 3afa: 83 c4 10 add $0x10,%esp + 39f7: 83 c7 04 add $0x4,%edi + 39fa: 89 7d d4 mov %edi,-0x2c(%ebp) + 39fd: 83 c4 10 add $0x10,%esp + state = 0; + 3a00: bf 00 00 00 00 mov $0x0,%edi + 3a05: e9 e6 fe ff ff jmp 38f0 + putc(fd, c); + 3a0a: 88 5d e7 mov %bl,-0x19(%ebp) + write(fd, &c, 1); + 3a0d: 83 ec 04 sub $0x4,%esp + 3a10: 6a 01 push $0x1 + 3a12: 8d 45 e7 lea -0x19(%ebp),%eax + 3a15: 50 push %eax + 3a16: ff 75 08 push 0x8(%ebp) + 3a19: e8 65 fd ff ff call 3783 + 3a1e: 83 c4 10 add $0x10,%esp state = 0; - 3afd: bf 00 00 00 00 mov $0x0,%edi - 3b02: e9 a4 fe ff ff jmp 39ab + 3a21: bf 00 00 00 00 mov $0x0,%edi + 3a26: e9 c5 fe ff ff jmp 38f0 + putc(fd, '%'); + 3a2b: c6 45 e7 25 movb $0x25,-0x19(%ebp) + write(fd, &c, 1); + 3a2f: 83 ec 04 sub $0x4,%esp + 3a32: 6a 01 push $0x1 + 3a34: 8d 45 e7 lea -0x19(%ebp),%eax + 3a37: 50 push %eax + 3a38: ff 75 08 push 0x8(%ebp) + 3a3b: e8 43 fd ff ff call 3783 putc(fd, c); - 3b07: 88 5d e7 mov %bl,-0x19(%ebp) + 3a40: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 3b0a: 83 ec 04 sub $0x4,%esp - 3b0d: 6a 01 push $0x1 - 3b0f: 8d 45 e7 lea -0x19(%ebp),%eax - 3b12: 50 push %eax - 3b13: ff 75 08 pushl 0x8(%ebp) - 3b16: e8 23 fd ff ff call 383e - 3b1b: 83 c4 10 add $0x10,%esp + 3a43: 83 c4 0c add $0xc,%esp + 3a46: 6a 01 push $0x1 + 3a48: 8d 45 e7 lea -0x19(%ebp),%eax + 3a4b: 50 push %eax + 3a4c: ff 75 08 push 0x8(%ebp) + 3a4f: e8 2f fd ff ff call 3783 + putc(fd, c); + 3a54: 83 c4 10 add $0x10,%esp state = 0; - 3b1e: bf 00 00 00 00 mov $0x0,%edi - 3b23: e9 83 fe ff ff jmp 39ab + 3a57: bf 00 00 00 00 mov $0x0,%edi + 3a5c: e9 8f fe ff ff jmp 38f0 } } } - 3b28: 8d 65 f4 lea -0xc(%ebp),%esp - 3b2b: 5b pop %ebx - 3b2c: 5e pop %esi - 3b2d: 5f pop %edi - 3b2e: 5d pop %ebp - 3b2f: c3 ret - -00003b30 : + 3a61: 8d 65 f4 lea -0xc(%ebp),%esp + 3a64: 5b pop %ebx + 3a65: 5e pop %esi + 3a66: 5f pop %edi + 3a67: 5d pop %ebp + 3a68: c3 ret + +00003a69 : static Header base; static Header *freep; void free(void *ap) { - 3b30: f3 0f 1e fb endbr32 - 3b34: 55 push %ebp - 3b35: 89 e5 mov %esp,%ebp - 3b37: 57 push %edi - 3b38: 56 push %esi - 3b39: 53 push %ebx - 3b3a: 8b 5d 08 mov 0x8(%ebp),%ebx + 3a69: 55 push %ebp + 3a6a: 89 e5 mov %esp,%ebp + 3a6c: 57 push %edi + 3a6d: 56 push %esi + 3a6e: 53 push %ebx + 3a6f: 8b 5d 08 mov 0x8(%ebp),%ebx Header *bp, *p; bp = (Header*)ap - 1; - 3b3d: 8d 4b f8 lea -0x8(%ebx),%ecx + 3a72: 8d 4b f8 lea -0x8(%ebx),%ecx for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 3b40: a1 40 5d 00 00 mov 0x5d40,%eax - 3b45: eb 0c jmp 3b53 + 3a75: a1 e0 a3 00 00 mov 0xa3e0,%eax + 3a7a: eb 0c jmp 3a88 if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 3b47: 8b 10 mov (%eax),%edx - 3b49: 39 c2 cmp %eax,%edx - 3b4b: 77 04 ja 3b51 - 3b4d: 39 ca cmp %ecx,%edx - 3b4f: 77 10 ja 3b61 + 3a7c: 8b 10 mov (%eax),%edx + 3a7e: 39 c2 cmp %eax,%edx + 3a80: 77 04 ja 3a86 + 3a82: 39 ca cmp %ecx,%edx + 3a84: 77 10 ja 3a96 { - 3b51: 89 d0 mov %edx,%eax + 3a86: 89 d0 mov %edx,%eax for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 3b53: 39 c8 cmp %ecx,%eax - 3b55: 73 f0 jae 3b47 - 3b57: 8b 10 mov (%eax),%edx - 3b59: 39 ca cmp %ecx,%edx - 3b5b: 77 04 ja 3b61 + 3a88: 39 c8 cmp %ecx,%eax + 3a8a: 73 f0 jae 3a7c + 3a8c: 8b 10 mov (%eax),%edx + 3a8e: 39 ca cmp %ecx,%edx + 3a90: 77 04 ja 3a96 if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 3b5d: 39 c2 cmp %eax,%edx - 3b5f: 77 f0 ja 3b51 + 3a92: 39 c2 cmp %eax,%edx + 3a94: 77 f0 ja 3a86 break; if(bp + bp->s.size == p->s.ptr){ - 3b61: 8b 73 fc mov -0x4(%ebx),%esi - 3b64: 8b 10 mov (%eax),%edx - 3b66: 8d 3c f1 lea (%ecx,%esi,8),%edi - 3b69: 39 fa cmp %edi,%edx - 3b6b: 74 19 je 3b86 + 3a96: 8b 73 fc mov -0x4(%ebx),%esi + 3a99: 8b 10 mov (%eax),%edx + 3a9b: 8d 3c f1 lea (%ecx,%esi,8),%edi + 3a9e: 39 fa cmp %edi,%edx + 3aa0: 74 19 je 3abb bp->s.size += p->s.ptr->s.size; bp->s.ptr = p->s.ptr->s.ptr; + 3aa2: 89 53 f8 mov %edx,-0x8(%ebx) } else bp->s.ptr = p->s.ptr; - 3b6d: 89 53 f8 mov %edx,-0x8(%ebx) if(p + p->s.size == bp){ - 3b70: 8b 50 04 mov 0x4(%eax),%edx - 3b73: 8d 34 d0 lea (%eax,%edx,8),%esi - 3b76: 39 f1 cmp %esi,%ecx - 3b78: 74 1b je 3b95 + 3aa5: 8b 50 04 mov 0x4(%eax),%edx + 3aa8: 8d 34 d0 lea (%eax,%edx,8),%esi + 3aab: 39 f1 cmp %esi,%ecx + 3aad: 74 18 je 3ac7 p->s.size += bp->s.size; p->s.ptr = bp->s.ptr; + 3aaf: 89 08 mov %ecx,(%eax) } else p->s.ptr = bp; - 3b7a: 89 08 mov %ecx,(%eax) freep = p; - 3b7c: a3 40 5d 00 00 mov %eax,0x5d40 + 3ab1: a3 e0 a3 00 00 mov %eax,0xa3e0 } - 3b81: 5b pop %ebx - 3b82: 5e pop %esi - 3b83: 5f pop %edi - 3b84: 5d pop %ebp - 3b85: c3 ret + 3ab6: 5b pop %ebx + 3ab7: 5e pop %esi + 3ab8: 5f pop %edi + 3ab9: 5d pop %ebp + 3aba: c3 ret bp->s.size += p->s.ptr->s.size; - 3b86: 03 72 04 add 0x4(%edx),%esi - 3b89: 89 73 fc mov %esi,-0x4(%ebx) + 3abb: 03 72 04 add 0x4(%edx),%esi + 3abe: 89 73 fc mov %esi,-0x4(%ebx) bp->s.ptr = p->s.ptr->s.ptr; - 3b8c: 8b 10 mov (%eax),%edx - 3b8e: 8b 12 mov (%edx),%edx - 3b90: 89 53 f8 mov %edx,-0x8(%ebx) - 3b93: eb db jmp 3b70 + 3ac1: 8b 10 mov (%eax),%edx + 3ac3: 8b 12 mov (%edx),%edx + 3ac5: eb db jmp 3aa2 p->s.size += bp->s.size; - 3b95: 03 53 fc add -0x4(%ebx),%edx - 3b98: 89 50 04 mov %edx,0x4(%eax) + 3ac7: 03 53 fc add -0x4(%ebx),%edx + 3aca: 89 50 04 mov %edx,0x4(%eax) p->s.ptr = bp->s.ptr; - 3b9b: 8b 53 f8 mov -0x8(%ebx),%edx - 3b9e: 89 10 mov %edx,(%eax) - 3ba0: eb da jmp 3b7c + 3acd: 8b 4b f8 mov -0x8(%ebx),%ecx + 3ad0: eb dd jmp 3aaf -00003ba2 : +00003ad2 : return freep; } void* malloc(uint nbytes) { - 3ba2: f3 0f 1e fb endbr32 - 3ba6: 55 push %ebp - 3ba7: 89 e5 mov %esp,%ebp - 3ba9: 57 push %edi - 3baa: 56 push %esi - 3bab: 53 push %ebx - 3bac: 83 ec 0c sub $0xc,%esp + 3ad2: 55 push %ebp + 3ad3: 89 e5 mov %esp,%ebp + 3ad5: 57 push %edi + 3ad6: 56 push %esi + 3ad7: 53 push %ebx + 3ad8: 83 ec 0c sub $0xc,%esp Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 3baf: 8b 45 08 mov 0x8(%ebp),%eax - 3bb2: 8d 58 07 lea 0x7(%eax),%ebx - 3bb5: c1 eb 03 shr $0x3,%ebx - 3bb8: 83 c3 01 add $0x1,%ebx + 3adb: 8b 45 08 mov 0x8(%ebp),%eax + 3ade: 8d 58 07 lea 0x7(%eax),%ebx + 3ae1: c1 eb 03 shr $0x3,%ebx + 3ae4: 83 c3 01 add $0x1,%ebx if((prevp = freep) == 0){ - 3bbb: 8b 15 40 5d 00 00 mov 0x5d40,%edx - 3bc1: 85 d2 test %edx,%edx - 3bc3: 74 20 je 3be5 + 3ae7: 8b 15 e0 a3 00 00 mov 0xa3e0,%edx + 3aed: 85 d2 test %edx,%edx + 3aef: 74 1c je 3b0d base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 3bc5: 8b 02 mov (%edx),%eax + 3af1: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 3bc7: 8b 48 04 mov 0x4(%eax),%ecx - 3bca: 39 cb cmp %ecx,%ebx - 3bcc: 76 3c jbe 3c0a - 3bce: 81 fb 00 10 00 00 cmp $0x1000,%ebx - 3bd4: be 00 10 00 00 mov $0x1000,%esi - 3bd9: 0f 43 f3 cmovae %ebx,%esi + 3af3: 8b 48 04 mov 0x4(%eax),%ecx + 3af6: 39 cb cmp %ecx,%ebx + 3af8: 76 38 jbe 3b32 + 3afa: be 00 10 00 00 mov $0x1000,%esi + 3aff: 39 f3 cmp %esi,%ebx + 3b01: 0f 43 f3 cmovae %ebx,%esi p = sbrk(nu * sizeof(Header)); - 3bdc: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi - 3be3: eb 72 jmp 3c57 + 3b04: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi + 3b0b: eb 72 jmp 3b7f base.s.ptr = freep = prevp = &base; - 3be5: c7 05 40 5d 00 00 44 movl $0x5d44,0x5d40 - 3bec: 5d 00 00 - 3bef: c7 05 44 5d 00 00 44 movl $0x5d44,0x5d44 - 3bf6: 5d 00 00 + 3b0d: c7 05 e0 a3 00 00 e4 movl $0xa3e4,0xa3e0 + 3b14: a3 00 00 + 3b17: c7 05 e4 a3 00 00 e4 movl $0xa3e4,0xa3e4 + 3b1e: a3 00 00 base.s.size = 0; - 3bf9: c7 05 48 5d 00 00 00 movl $0x0,0x5d48 - 3c00: 00 00 00 + 3b21: c7 05 e8 a3 00 00 00 movl $0x0,0xa3e8 + 3b28: 00 00 00 for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 3c03: b8 44 5d 00 00 mov $0x5d44,%eax - 3c08: eb c4 jmp 3bce + 3b2b: b8 e4 a3 00 00 mov $0xa3e4,%eax + 3b30: eb c8 jmp 3afa if(p->s.size == nunits) - 3c0a: 39 cb cmp %ecx,%ebx - 3c0c: 74 1e je 3c2c + 3b32: 39 cb cmp %ecx,%ebx + 3b34: 74 1e je 3b54 prevp->s.ptr = p->s.ptr; else { p->s.size -= nunits; - 3c0e: 29 d9 sub %ebx,%ecx - 3c10: 89 48 04 mov %ecx,0x4(%eax) + 3b36: 29 d9 sub %ebx,%ecx + 3b38: 89 48 04 mov %ecx,0x4(%eax) p += p->s.size; - 3c13: 8d 04 c8 lea (%eax,%ecx,8),%eax + 3b3b: 8d 04 c8 lea (%eax,%ecx,8),%eax p->s.size = nunits; - 3c16: 89 58 04 mov %ebx,0x4(%eax) + 3b3e: 89 58 04 mov %ebx,0x4(%eax) } freep = prevp; - 3c19: 89 15 40 5d 00 00 mov %edx,0x5d40 + 3b41: 89 15 e0 a3 00 00 mov %edx,0xa3e0 return (void*)(p + 1); - 3c1f: 8d 50 08 lea 0x8(%eax),%edx + 3b47: 8d 50 08 lea 0x8(%eax),%edx } if(p == freep) if((p = morecore(nunits)) == 0) return 0; } } - 3c22: 89 d0 mov %edx,%eax - 3c24: 8d 65 f4 lea -0xc(%ebp),%esp - 3c27: 5b pop %ebx - 3c28: 5e pop %esi - 3c29: 5f pop %edi - 3c2a: 5d pop %ebp - 3c2b: c3 ret + 3b4a: 89 d0 mov %edx,%eax + 3b4c: 8d 65 f4 lea -0xc(%ebp),%esp + 3b4f: 5b pop %ebx + 3b50: 5e pop %esi + 3b51: 5f pop %edi + 3b52: 5d pop %ebp + 3b53: c3 ret prevp->s.ptr = p->s.ptr; - 3c2c: 8b 08 mov (%eax),%ecx - 3c2e: 89 0a mov %ecx,(%edx) - 3c30: eb e7 jmp 3c19 + 3b54: 8b 08 mov (%eax),%ecx + 3b56: 89 0a mov %ecx,(%edx) + 3b58: eb e7 jmp 3b41 hp->s.size = nu; - 3c32: 89 70 04 mov %esi,0x4(%eax) + 3b5a: 89 70 04 mov %esi,0x4(%eax) free((void*)(hp + 1)); - 3c35: 83 ec 0c sub $0xc,%esp - 3c38: 83 c0 08 add $0x8,%eax - 3c3b: 50 push %eax - 3c3c: e8 ef fe ff ff call 3b30 + 3b5d: 83 ec 0c sub $0xc,%esp + 3b60: 83 c0 08 add $0x8,%eax + 3b63: 50 push %eax + 3b64: e8 00 ff ff ff call 3a69 return freep; - 3c41: 8b 15 40 5d 00 00 mov 0x5d40,%edx + 3b69: 8b 15 e0 a3 00 00 mov 0xa3e0,%edx if((p = morecore(nunits)) == 0) - 3c47: 83 c4 10 add $0x10,%esp - 3c4a: 85 d2 test %edx,%edx - 3c4c: 74 d4 je 3c22 + 3b6f: 83 c4 10 add $0x10,%esp + 3b72: 85 d2 test %edx,%edx + 3b74: 74 d4 je 3b4a for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 3c4e: 8b 02 mov (%edx),%eax + 3b76: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 3c50: 8b 48 04 mov 0x4(%eax),%ecx - 3c53: 39 d9 cmp %ebx,%ecx - 3c55: 73 b3 jae 3c0a + 3b78: 8b 48 04 mov 0x4(%eax),%ecx + 3b7b: 39 d9 cmp %ebx,%ecx + 3b7d: 73 b3 jae 3b32 if(p == freep) - 3c57: 89 c2 mov %eax,%edx - 3c59: 39 05 40 5d 00 00 cmp %eax,0x5d40 - 3c5f: 75 ed jne 3c4e + 3b7f: 89 c2 mov %eax,%edx + 3b81: 39 05 e0 a3 00 00 cmp %eax,0xa3e0 + 3b87: 75 ed jne 3b76 p = sbrk(nu * sizeof(Header)); - 3c61: 83 ec 0c sub $0xc,%esp - 3c64: 57 push %edi - 3c65: e8 3c fc ff ff call 38a6 + 3b89: 83 ec 0c sub $0xc,%esp + 3b8c: 57 push %edi + 3b8d: e8 59 fc ff ff call 37eb if(p == (char*)-1) - 3c6a: 83 c4 10 add $0x10,%esp - 3c6d: 83 f8 ff cmp $0xffffffff,%eax - 3c70: 75 c0 jne 3c32 + 3b92: 83 c4 10 add $0x10,%esp + 3b95: 83 f8 ff cmp $0xffffffff,%eax + 3b98: 75 c0 jne 3b5a return 0; - 3c72: ba 00 00 00 00 mov $0x0,%edx - 3c77: eb a9 jmp 3c22 + 3b9a: ba 00 00 00 00 mov $0x0,%edx + 3b9f: eb a9 jmp 3b4a diff --git a/src/user/usertests.d b/src/user/usertests.d new file mode 100644 index 0000000..f665db0 --- /dev/null +++ b/src/user/usertests.d @@ -0,0 +1,2 @@ +user/usertests.o: user/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/src/user/usertests.o b/src/user/usertests.o new file mode 100644 index 0000000000000000000000000000000000000000..ee3a5627dcbd6eaffd1b24dabe6c8645223e031f GIT binary patch literal 70100 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 0){ - 27: eb 4d jmp 76 + 23: eb 4d jmp 72 + for(i=0; i - w++; - 2f: 83 45 e0 01 addl $0x1,-0x20(%ebp) - inword = 1; - 33: c7 45 e4 01 00 00 00 movl $0x1,-0x1c(%ebp) + 25: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) for(i=0; i + 2c: 83 c3 01 add $0x1,%ebx + 2f: 39 de cmp %ebx,%esi + 31: 74 3c je 6f if(buf[i] == '\n') - 41: 0f b6 83 c0 0a 00 00 movzbl 0xac0(%ebx),%eax + 33: 0f b6 83 c0 0a 00 00 movzbl 0xac0(%ebx),%eax l++; - 48: 3c 0a cmp $0xa,%al - 4a: 0f 94 c2 sete %dl - 4d: 0f b6 d2 movzbl %dl,%edx - 50: 01 d6 add %edx,%esi + 3a: 3c 0a cmp $0xa,%al + 3c: 0f 94 c2 sete %dl + 3f: 0f b6 d2 movzbl %dl,%edx + 42: 01 d7 add %edx,%edi if(strchr(" \r\t\n\v", buf[i])) - 52: 83 ec 08 sub $0x8,%esp - 55: 0f be c0 movsbl %al,%eax - 58: 50 push %eax - 59: 68 b0 07 00 00 push $0x7b0 - 5e: e8 a4 01 00 00 call 207 - 63: 83 c4 10 add $0x10,%esp - 66: 85 c0 test %eax,%eax - 68: 74 bf je 29 - inword = 0; - 6a: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) - 71: eb c7 jmp 3a - 73: 01 5d dc add %ebx,-0x24(%ebp) + 44: 83 ec 08 sub $0x8,%esp + 47: 0f be c0 movsbl %al,%eax + 4a: 50 push %eax + 4b: 68 6c 07 00 00 push $0x76c + 50: e8 9e 01 00 00 call 1f3 + 55: 83 c4 10 add $0x10,%esp + 58: 85 c0 test %eax,%eax + 5a: 75 c9 jne 25 + else if(!inword){ + 5c: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp) + 60: 75 ca jne 2c + w++; + 62: 83 45 e0 01 addl $0x1,-0x20(%ebp) + inword = 1; + 66: c7 45 e4 01 00 00 00 movl $0x1,-0x1c(%ebp) + 6d: eb bd jmp 2c + c++; + 6f: 01 5d dc add %ebx,-0x24(%ebp) while((n = read(fd, buf, sizeof(buf))) > 0){ - 76: 83 ec 04 sub $0x4,%esp - 79: 68 00 02 00 00 push $0x200 - 7e: 68 c0 0a 00 00 push $0xac0 - 83: ff 75 08 pushl 0x8(%ebp) - 86: e8 e0 02 00 00 call 36b - 8b: 89 c7 mov %eax,%edi - 8d: 83 c4 10 add $0x10,%esp - 90: 85 c0 test %eax,%eax - 92: 7e 07 jle 9b + 72: 83 ec 04 sub $0x4,%esp + 75: 68 00 02 00 00 push $0x200 + 7a: 68 c0 0a 00 00 push $0xac0 + 7f: ff 75 08 push 0x8(%ebp) + 82: e8 be 02 00 00 call 345 + 87: 89 c6 mov %eax,%esi + 89: 83 c4 10 add $0x10,%esp + 8c: 85 c0 test %eax,%eax + 8e: 7e 07 jle 97 for(i=0; i + 90: bb 00 00 00 00 mov $0x0,%ebx + 95: eb 9c jmp 33 } } } if(n < 0){ - 9b: 78 24 js c1 + 97: 78 24 js bd printf(1, "wc: read error\n"); exit(); } printf(1, "%d %d %d %s\n", l, w, c, name); - 9d: 83 ec 08 sub $0x8,%esp - a0: ff 75 0c pushl 0xc(%ebp) - a3: ff 75 dc pushl -0x24(%ebp) - a6: ff 75 e0 pushl -0x20(%ebp) - a9: 56 push %esi - aa: 68 c6 07 00 00 push $0x7c6 - af: 6a 01 push $0x1 - b1: e8 e1 03 00 00 call 497 + 99: 83 ec 08 sub $0x8,%esp + 9c: ff 75 0c push 0xc(%ebp) + 9f: ff 75 dc push -0x24(%ebp) + a2: ff 75 e0 push -0x20(%ebp) + a5: 57 push %edi + a6: 68 82 07 00 00 push $0x782 + ab: 6a 01 push $0x1 + ad: e8 c3 03 00 00 call 475 } - b6: 83 c4 20 add $0x20,%esp - b9: 8d 65 f4 lea -0xc(%ebp),%esp - bc: 5b pop %ebx - bd: 5e pop %esi - be: 5f pop %edi - bf: 5d pop %ebp - c0: c3 ret + b2: 83 c4 20 add $0x20,%esp + b5: 8d 65 f4 lea -0xc(%ebp),%esp + b8: 5b pop %ebx + b9: 5e pop %esi + ba: 5f pop %edi + bb: 5d pop %ebp + bc: c3 ret printf(1, "wc: read error\n"); - c1: 83 ec 08 sub $0x8,%esp - c4: 68 b6 07 00 00 push $0x7b6 - c9: 6a 01 push $0x1 - cb: e8 c7 03 00 00 call 497 + bd: 83 ec 08 sub $0x8,%esp + c0: 68 72 07 00 00 push $0x772 + c5: 6a 01 push $0x1 + c7: e8 a9 03 00 00 call 475 exit(); - d0: e8 7e 02 00 00 call 353 + cc: e8 5c 02 00 00 call 32d -000000d5
: +000000d1
: int main(int argc, char *argv[]) { - d5: f3 0f 1e fb endbr32 - d9: 8d 4c 24 04 lea 0x4(%esp),%ecx - dd: 83 e4 f0 and $0xfffffff0,%esp - e0: ff 71 fc pushl -0x4(%ecx) - e3: 55 push %ebp - e4: 89 e5 mov %esp,%ebp - e6: 57 push %edi - e7: 56 push %esi - e8: 53 push %ebx - e9: 51 push %ecx - ea: 83 ec 18 sub $0x18,%esp - ed: 8b 01 mov (%ecx),%eax - ef: 89 45 e4 mov %eax,-0x1c(%ebp) - f2: 8b 71 04 mov 0x4(%ecx),%esi + d1: 8d 4c 24 04 lea 0x4(%esp),%ecx + d5: 83 e4 f0 and $0xfffffff0,%esp + d8: ff 71 fc push -0x4(%ecx) + db: 55 push %ebp + dc: 89 e5 mov %esp,%ebp + de: 57 push %edi + df: 56 push %esi + e0: 53 push %ebx + e1: 51 push %ecx + e2: 83 ec 18 sub $0x18,%esp + e5: 8b 01 mov (%ecx),%eax + e7: 89 45 e4 mov %eax,-0x1c(%ebp) + ea: 8b 71 04 mov 0x4(%ecx),%esi int fd, i; if(argc <= 1){ - f5: 83 c6 04 add $0x4,%esi + ed: 83 c6 04 add $0x4,%esi wc(0, ""); exit(); } for(i = 1; i < argc; i++){ - f8: bf 01 00 00 00 mov $0x1,%edi + f0: bf 01 00 00 00 mov $0x1,%edi if(argc <= 1){ - fd: 83 f8 01 cmp $0x1,%eax - 100: 7e 3e jle 140 + f5: 83 f8 01 cmp $0x1,%eax + f8: 7e 3e jle 138 if((fd = open(argv[i], 0)) < 0){ - 102: 89 75 e0 mov %esi,-0x20(%ebp) - 105: 83 ec 08 sub $0x8,%esp - 108: 6a 00 push $0x0 - 10a: ff 36 pushl (%esi) - 10c: e8 82 02 00 00 call 393 - 111: 89 c3 mov %eax,%ebx - 113: 83 c4 10 add $0x10,%esp - 116: 85 c0 test %eax,%eax - 118: 78 3a js 154 + fa: 89 75 e0 mov %esi,-0x20(%ebp) + fd: 83 ec 08 sub $0x8,%esp + 100: 6a 00 push $0x0 + 102: ff 36 push (%esi) + 104: e8 64 02 00 00 call 36d + 109: 89 c3 mov %eax,%ebx + 10b: 83 c4 10 add $0x10,%esp + 10e: 85 c0 test %eax,%eax + 110: 78 3a js 14c printf(1, "wc: cannot open %s\n", argv[i]); exit(); } wc(fd, argv[i]); - 11a: 83 ec 08 sub $0x8,%esp - 11d: ff 36 pushl (%esi) - 11f: 50 push %eax - 120: e8 db fe ff ff call 0 + 112: 83 ec 08 sub $0x8,%esp + 115: ff 36 push (%esi) + 117: 50 push %eax + 118: e8 e3 fe ff ff call 0 close(fd); - 125: 89 1c 24 mov %ebx,(%esp) - 128: e8 4e 02 00 00 call 37b + 11d: 89 1c 24 mov %ebx,(%esp) + 120: e8 30 02 00 00 call 355 for(i = 1; i < argc; i++){ - 12d: 83 c7 01 add $0x1,%edi - 130: 83 c6 04 add $0x4,%esi - 133: 83 c4 10 add $0x10,%esp - 136: 39 7d e4 cmp %edi,-0x1c(%ebp) - 139: 75 c7 jne 102 + 125: 83 c7 01 add $0x1,%edi + 128: 83 c6 04 add $0x4,%esi + 12b: 83 c4 10 add $0x10,%esp + 12e: 39 7d e4 cmp %edi,-0x1c(%ebp) + 131: 75 c7 jne fa } exit(); - 13b: e8 13 02 00 00 call 353 + 133: e8 f5 01 00 00 call 32d wc(0, ""); - 140: 83 ec 08 sub $0x8,%esp - 143: 68 c5 07 00 00 push $0x7c5 - 148: 6a 00 push $0x0 - 14a: e8 b1 fe ff ff call 0 + 138: 83 ec 08 sub $0x8,%esp + 13b: 68 81 07 00 00 push $0x781 + 140: 6a 00 push $0x0 + 142: e8 b9 fe ff ff call 0 exit(); - 14f: e8 ff 01 00 00 call 353 + 147: e8 e1 01 00 00 call 32d printf(1, "wc: cannot open %s\n", argv[i]); - 154: 83 ec 04 sub $0x4,%esp - 157: 8b 45 e0 mov -0x20(%ebp),%eax - 15a: ff 30 pushl (%eax) - 15c: 68 d3 07 00 00 push $0x7d3 - 161: 6a 01 push $0x1 - 163: e8 2f 03 00 00 call 497 + 14c: 83 ec 04 sub $0x4,%esp + 14f: 8b 45 e0 mov -0x20(%ebp),%eax + 152: ff 30 push (%eax) + 154: 68 8f 07 00 00 push $0x78f + 159: 6a 01 push $0x1 + 15b: e8 15 03 00 00 call 475 exit(); - 168: e8 e6 01 00 00 call 353 + 160: e8 c8 01 00 00 call 32d -0000016d : +00000165 : #include "user.h" #include "x86.h" char* strcpy(char *s, const char *t) { - 16d: f3 0f 1e fb endbr32 - 171: 55 push %ebp - 172: 89 e5 mov %esp,%ebp - 174: 53 push %ebx - 175: 8b 4d 08 mov 0x8(%ebp),%ecx - 178: 8b 5d 0c mov 0xc(%ebp),%ebx + 165: 55 push %ebp + 166: 89 e5 mov %esp,%ebp + 168: 53 push %ebx + 169: 8b 4d 08 mov 0x8(%ebp),%ecx + 16c: 8b 5d 0c mov 0xc(%ebp),%ebx char *os; os = s; while((*s++ = *t++) != 0) - 17b: b8 00 00 00 00 mov $0x0,%eax - 180: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 184: 88 14 01 mov %dl,(%ecx,%eax,1) - 187: 83 c0 01 add $0x1,%eax - 18a: 84 d2 test %dl,%dl - 18c: 75 f2 jne 180 + 16f: b8 00 00 00 00 mov $0x0,%eax + 174: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx + 178: 88 14 01 mov %dl,(%ecx,%eax,1) + 17b: 83 c0 01 add $0x1,%eax + 17e: 84 d2 test %dl,%dl + 180: 75 f2 jne 174 ; return os; } - 18e: 89 c8 mov %ecx,%eax - 190: 5b pop %ebx - 191: 5d pop %ebp - 192: c3 ret + 182: 89 c8 mov %ecx,%eax + 184: 8b 5d fc mov -0x4(%ebp),%ebx + 187: c9 leave + 188: c3 ret -00000193 : +00000189 : int strcmp(const char *p, const char *q) { - 193: f3 0f 1e fb endbr32 - 197: 55 push %ebp - 198: 89 e5 mov %esp,%ebp - 19a: 8b 4d 08 mov 0x8(%ebp),%ecx - 19d: 8b 55 0c mov 0xc(%ebp),%edx + 189: 55 push %ebp + 18a: 89 e5 mov %esp,%ebp + 18c: 8b 4d 08 mov 0x8(%ebp),%ecx + 18f: 8b 55 0c mov 0xc(%ebp),%edx while(*p && *p == *q) - 1a0: 0f b6 01 movzbl (%ecx),%eax - 1a3: 84 c0 test %al,%al - 1a5: 74 11 je 1b8 - 1a7: 38 02 cmp %al,(%edx) - 1a9: 75 0d jne 1b8 + 192: 0f b6 01 movzbl (%ecx),%eax + 195: 84 c0 test %al,%al + 197: 74 11 je 1aa + 199: 38 02 cmp %al,(%edx) + 19b: 75 0d jne 1aa p++, q++; - 1ab: 83 c1 01 add $0x1,%ecx - 1ae: 83 c2 01 add $0x1,%edx + 19d: 83 c1 01 add $0x1,%ecx + 1a0: 83 c2 01 add $0x1,%edx while(*p && *p == *q) - 1b1: 0f b6 01 movzbl (%ecx),%eax - 1b4: 84 c0 test %al,%al - 1b6: 75 ef jne 1a7 + 1a3: 0f b6 01 movzbl (%ecx),%eax + 1a6: 84 c0 test %al,%al + 1a8: 75 ef jne 199 return (uchar)*p - (uchar)*q; - 1b8: 0f b6 c0 movzbl %al,%eax - 1bb: 0f b6 12 movzbl (%edx),%edx - 1be: 29 d0 sub %edx,%eax + 1aa: 0f b6 c0 movzbl %al,%eax + 1ad: 0f b6 12 movzbl (%edx),%edx + 1b0: 29 d0 sub %edx,%eax } - 1c0: 5d pop %ebp - 1c1: c3 ret + 1b2: 5d pop %ebp + 1b3: c3 ret -000001c2 : +000001b4 : uint strlen(const char *s) { - 1c2: f3 0f 1e fb endbr32 - 1c6: 55 push %ebp - 1c7: 89 e5 mov %esp,%ebp - 1c9: 8b 55 08 mov 0x8(%ebp),%edx + 1b4: 55 push %ebp + 1b5: 89 e5 mov %esp,%ebp + 1b7: 8b 55 08 mov 0x8(%ebp),%edx int n; for(n = 0; s[n]; n++) - 1cc: 80 3a 00 cmpb $0x0,(%edx) - 1cf: 74 14 je 1e5 - 1d1: b8 00 00 00 00 mov $0x0,%eax - 1d6: 83 c0 01 add $0x1,%eax - 1d9: 89 c1 mov %eax,%ecx - 1db: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - 1df: 75 f5 jne 1d6 + 1ba: 80 3a 00 cmpb $0x0,(%edx) + 1bd: 74 14 je 1d3 + 1bf: b8 00 00 00 00 mov $0x0,%eax + 1c4: 83 c0 01 add $0x1,%eax + 1c7: 89 c1 mov %eax,%ecx + 1c9: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) + 1cd: 75 f5 jne 1c4 ; return n; } - 1e1: 89 c8 mov %ecx,%eax - 1e3: 5d pop %ebp - 1e4: c3 ret + 1cf: 89 c8 mov %ecx,%eax + 1d1: 5d pop %ebp + 1d2: c3 ret for(n = 0; s[n]; n++) - 1e5: b9 00 00 00 00 mov $0x0,%ecx + 1d3: b9 00 00 00 00 mov $0x0,%ecx return n; - 1ea: eb f5 jmp 1e1 + 1d8: eb f5 jmp 1cf -000001ec : +000001da : void* memset(void *dst, int c, uint n) { - 1ec: f3 0f 1e fb endbr32 - 1f0: 55 push %ebp - 1f1: 89 e5 mov %esp,%ebp - 1f3: 57 push %edi - 1f4: 8b 55 08 mov 0x8(%ebp),%edx + 1da: 55 push %ebp + 1db: 89 e5 mov %esp,%ebp + 1dd: 57 push %edi + 1de: 8b 55 08 mov 0x8(%ebp),%edx } static inline void stosb(void *addr, int data, int cnt) { asm volatile("cld; rep stosb" : - 1f7: 89 d7 mov %edx,%edi - 1f9: 8b 4d 10 mov 0x10(%ebp),%ecx - 1fc: 8b 45 0c mov 0xc(%ebp),%eax - 1ff: fc cld - 200: f3 aa rep stos %al,%es:(%edi) + 1e1: 89 d7 mov %edx,%edi + 1e3: 8b 4d 10 mov 0x10(%ebp),%ecx + 1e6: 8b 45 0c mov 0xc(%ebp),%eax + 1e9: fc cld + 1ea: f3 aa rep stos %al,%es:(%edi) stosb(dst, c, n); return dst; } - 202: 89 d0 mov %edx,%eax - 204: 5f pop %edi - 205: 5d pop %ebp - 206: c3 ret + 1ec: 89 d0 mov %edx,%eax + 1ee: 8b 7d fc mov -0x4(%ebp),%edi + 1f1: c9 leave + 1f2: c3 ret -00000207 : +000001f3 : char* strchr(const char *s, char c) { - 207: f3 0f 1e fb endbr32 - 20b: 55 push %ebp - 20c: 89 e5 mov %esp,%ebp - 20e: 8b 45 08 mov 0x8(%ebp),%eax - 211: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx + 1f3: 55 push %ebp + 1f4: 89 e5 mov %esp,%ebp + 1f6: 8b 45 08 mov 0x8(%ebp),%eax + 1f9: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx for(; *s; s++) - 215: 0f b6 10 movzbl (%eax),%edx - 218: 84 d2 test %dl,%dl - 21a: 74 15 je 231 + 1fd: 0f b6 10 movzbl (%eax),%edx + 200: 84 d2 test %dl,%dl + 202: 74 15 je 219 if(*s == c) - 21c: 38 d1 cmp %dl,%cl - 21e: 74 0f je 22f + 204: 38 d1 cmp %dl,%cl + 206: 74 0f je 217 for(; *s; s++) - 220: 83 c0 01 add $0x1,%eax - 223: 0f b6 10 movzbl (%eax),%edx - 226: 84 d2 test %dl,%dl - 228: 75 f2 jne 21c + 208: 83 c0 01 add $0x1,%eax + 20b: 0f b6 10 movzbl (%eax),%edx + 20e: 84 d2 test %dl,%dl + 210: 75 f2 jne 204 return (char*)s; return 0; - 22a: b8 00 00 00 00 mov $0x0,%eax + 212: b8 00 00 00 00 mov $0x0,%eax } - 22f: 5d pop %ebp - 230: c3 ret + 217: 5d pop %ebp + 218: c3 ret return 0; - 231: b8 00 00 00 00 mov $0x0,%eax - 236: eb f7 jmp 22f + 219: b8 00 00 00 00 mov $0x0,%eax + 21e: eb f7 jmp 217 -00000238 : +00000220 : char* gets(char *buf, int max) { - 238: f3 0f 1e fb endbr32 - 23c: 55 push %ebp - 23d: 89 e5 mov %esp,%ebp - 23f: 57 push %edi - 240: 56 push %esi - 241: 53 push %ebx - 242: 83 ec 2c sub $0x2c,%esp - 245: 8b 75 08 mov 0x8(%ebp),%esi + 220: 55 push %ebp + 221: 89 e5 mov %esp,%ebp + 223: 57 push %edi + 224: 56 push %esi + 225: 53 push %ebx + 226: 83 ec 2c sub $0x2c,%esp + 229: 8b 75 08 mov 0x8(%ebp),%esi int i, cc; char c; for(i=0; i+1 < max; ){ - 248: bb 00 00 00 00 mov $0x0,%ebx + 22c: bb 00 00 00 00 mov $0x0,%ebx cc = read(0, &c, 1); - 24d: 8d 7d e7 lea -0x19(%ebp),%edi + 231: 8d 7d e7 lea -0x19(%ebp),%edi for(i=0; i+1 < max; ){ - 250: 89 5d d4 mov %ebx,-0x2c(%ebp) - 253: 83 c3 01 add $0x1,%ebx - 256: 3b 5d 0c cmp 0xc(%ebp),%ebx - 259: 7d 27 jge 282 + 234: 89 5d d4 mov %ebx,-0x2c(%ebp) + 237: 83 c3 01 add $0x1,%ebx + 23a: 3b 5d 0c cmp 0xc(%ebp),%ebx + 23d: 7d 27 jge 266 cc = read(0, &c, 1); - 25b: 83 ec 04 sub $0x4,%esp - 25e: 6a 01 push $0x1 - 260: 57 push %edi - 261: 6a 00 push $0x0 - 263: e8 03 01 00 00 call 36b + 23f: 83 ec 04 sub $0x4,%esp + 242: 6a 01 push $0x1 + 244: 57 push %edi + 245: 6a 00 push $0x0 + 247: e8 f9 00 00 00 call 345 if(cc < 1) - 268: 83 c4 10 add $0x10,%esp - 26b: 85 c0 test %eax,%eax - 26d: 7e 13 jle 282 + 24c: 83 c4 10 add $0x10,%esp + 24f: 85 c0 test %eax,%eax + 251: 7e 13 jle 266 break; buf[i++] = c; - 26f: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 273: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) + 253: 0f b6 45 e7 movzbl -0x19(%ebp),%eax + 257: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) if(c == '\n' || c == '\r') - 277: 3c 0a cmp $0xa,%al - 279: 74 04 je 27f - 27b: 3c 0d cmp $0xd,%al - 27d: 75 d1 jne 250 + 25b: 3c 0a cmp $0xa,%al + 25d: 74 04 je 263 + 25f: 3c 0d cmp $0xd,%al + 261: 75 d1 jne 234 for(i=0; i+1 < max; ){ - 27f: 89 5d d4 mov %ebx,-0x2c(%ebp) + 263: 89 5d d4 mov %ebx,-0x2c(%ebp) break; } buf[i] = '\0'; - 282: 8b 45 d4 mov -0x2c(%ebp),%eax - 285: c6 04 06 00 movb $0x0,(%esi,%eax,1) + 266: 8b 45 d4 mov -0x2c(%ebp),%eax + 269: c6 04 06 00 movb $0x0,(%esi,%eax,1) return buf; } - 289: 89 f0 mov %esi,%eax - 28b: 8d 65 f4 lea -0xc(%ebp),%esp - 28e: 5b pop %ebx - 28f: 5e pop %esi - 290: 5f pop %edi - 291: 5d pop %ebp - 292: c3 ret + 26d: 89 f0 mov %esi,%eax + 26f: 8d 65 f4 lea -0xc(%ebp),%esp + 272: 5b pop %ebx + 273: 5e pop %esi + 274: 5f pop %edi + 275: 5d pop %ebp + 276: c3 ret -00000293 : +00000277 : int stat(const char *n, struct stat *st) { - 293: f3 0f 1e fb endbr32 - 297: 55 push %ebp - 298: 89 e5 mov %esp,%ebp - 29a: 56 push %esi - 29b: 53 push %ebx + 277: 55 push %ebp + 278: 89 e5 mov %esp,%ebp + 27a: 56 push %esi + 27b: 53 push %ebx int fd; int r; fd = open(n, O_RDONLY); - 29c: 83 ec 08 sub $0x8,%esp - 29f: 6a 00 push $0x0 - 2a1: ff 75 08 pushl 0x8(%ebp) - 2a4: e8 ea 00 00 00 call 393 + 27c: 83 ec 08 sub $0x8,%esp + 27f: 6a 00 push $0x0 + 281: ff 75 08 push 0x8(%ebp) + 284: e8 e4 00 00 00 call 36d if(fd < 0) - 2a9: 83 c4 10 add $0x10,%esp - 2ac: 85 c0 test %eax,%eax - 2ae: 78 24 js 2d4 - 2b0: 89 c3 mov %eax,%ebx + 289: 83 c4 10 add $0x10,%esp + 28c: 85 c0 test %eax,%eax + 28e: 78 24 js 2b4 + 290: 89 c3 mov %eax,%ebx return -1; r = fstat(fd, st); - 2b2: 83 ec 08 sub $0x8,%esp - 2b5: ff 75 0c pushl 0xc(%ebp) - 2b8: 50 push %eax - 2b9: e8 ed 00 00 00 call 3ab - 2be: 89 c6 mov %eax,%esi + 292: 83 ec 08 sub $0x8,%esp + 295: ff 75 0c push 0xc(%ebp) + 298: 50 push %eax + 299: e8 e7 00 00 00 call 385 + 29e: 89 c6 mov %eax,%esi close(fd); - 2c0: 89 1c 24 mov %ebx,(%esp) - 2c3: e8 b3 00 00 00 call 37b + 2a0: 89 1c 24 mov %ebx,(%esp) + 2a3: e8 ad 00 00 00 call 355 return r; - 2c8: 83 c4 10 add $0x10,%esp + 2a8: 83 c4 10 add $0x10,%esp } - 2cb: 89 f0 mov %esi,%eax - 2cd: 8d 65 f8 lea -0x8(%ebp),%esp - 2d0: 5b pop %ebx - 2d1: 5e pop %esi - 2d2: 5d pop %ebp - 2d3: c3 ret + 2ab: 89 f0 mov %esi,%eax + 2ad: 8d 65 f8 lea -0x8(%ebp),%esp + 2b0: 5b pop %ebx + 2b1: 5e pop %esi + 2b2: 5d pop %ebp + 2b3: c3 ret return -1; - 2d4: be ff ff ff ff mov $0xffffffff,%esi - 2d9: eb f0 jmp 2cb + 2b4: be ff ff ff ff mov $0xffffffff,%esi + 2b9: eb f0 jmp 2ab -000002db : +000002bb : int atoi(const char *s) { - 2db: f3 0f 1e fb endbr32 - 2df: 55 push %ebp - 2e0: 89 e5 mov %esp,%ebp - 2e2: 53 push %ebx - 2e3: 8b 55 08 mov 0x8(%ebp),%edx + 2bb: 55 push %ebp + 2bc: 89 e5 mov %esp,%ebp + 2be: 53 push %ebx + 2bf: 8b 55 08 mov 0x8(%ebp),%edx int n; n = 0; while('0' <= *s && *s <= '9') - 2e6: 0f b6 02 movzbl (%edx),%eax - 2e9: 8d 48 d0 lea -0x30(%eax),%ecx - 2ec: 80 f9 09 cmp $0x9,%cl - 2ef: 77 22 ja 313 + 2c2: 0f b6 02 movzbl (%edx),%eax + 2c5: 8d 48 d0 lea -0x30(%eax),%ecx + 2c8: 80 f9 09 cmp $0x9,%cl + 2cb: 77 24 ja 2f1 n = 0; - 2f1: b9 00 00 00 00 mov $0x0,%ecx + 2cd: b9 00 00 00 00 mov $0x0,%ecx n = n*10 + *s++ - '0'; - 2f6: 83 c2 01 add $0x1,%edx - 2f9: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 2fc: 0f be c0 movsbl %al,%eax - 2ff: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx + 2d2: 83 c2 01 add $0x1,%edx + 2d5: 8d 0c 89 lea (%ecx,%ecx,4),%ecx + 2d8: 0f be c0 movsbl %al,%eax + 2db: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx while('0' <= *s && *s <= '9') - 303: 0f b6 02 movzbl (%edx),%eax - 306: 8d 58 d0 lea -0x30(%eax),%ebx - 309: 80 fb 09 cmp $0x9,%bl - 30c: 76 e8 jbe 2f6 + 2df: 0f b6 02 movzbl (%edx),%eax + 2e2: 8d 58 d0 lea -0x30(%eax),%ebx + 2e5: 80 fb 09 cmp $0x9,%bl + 2e8: 76 e8 jbe 2d2 return n; } - 30e: 89 c8 mov %ecx,%eax - 310: 5b pop %ebx - 311: 5d pop %ebp - 312: c3 ret + 2ea: 89 c8 mov %ecx,%eax + 2ec: 8b 5d fc mov -0x4(%ebp),%ebx + 2ef: c9 leave + 2f0: c3 ret n = 0; - 313: b9 00 00 00 00 mov $0x0,%ecx + 2f1: b9 00 00 00 00 mov $0x0,%ecx return n; - 318: eb f4 jmp 30e + 2f6: eb f2 jmp 2ea -0000031a : +000002f8 : void* memmove(void *vdst, const void *vsrc, int n) { - 31a: f3 0f 1e fb endbr32 - 31e: 55 push %ebp - 31f: 89 e5 mov %esp,%ebp - 321: 56 push %esi - 322: 53 push %ebx - 323: 8b 75 08 mov 0x8(%ebp),%esi - 326: 8b 55 0c mov 0xc(%ebp),%edx - 329: 8b 5d 10 mov 0x10(%ebp),%ebx + 2f8: 55 push %ebp + 2f9: 89 e5 mov %esp,%ebp + 2fb: 56 push %esi + 2fc: 53 push %ebx + 2fd: 8b 75 08 mov 0x8(%ebp),%esi + 300: 8b 55 0c mov 0xc(%ebp),%edx + 303: 8b 5d 10 mov 0x10(%ebp),%ebx char *dst; const char *src; dst = vdst; src = vsrc; while(n-- > 0) - 32c: 85 db test %ebx,%ebx - 32e: 7e 15 jle 345 - 330: 01 f3 add %esi,%ebx + 306: 85 db test %ebx,%ebx + 308: 7e 15 jle 31f + 30a: 01 f3 add %esi,%ebx dst = vdst; - 332: 89 f0 mov %esi,%eax + 30c: 89 f0 mov %esi,%eax *dst++ = *src++; - 334: 83 c2 01 add $0x1,%edx - 337: 83 c0 01 add $0x1,%eax - 33a: 0f b6 4a ff movzbl -0x1(%edx),%ecx - 33e: 88 48 ff mov %cl,-0x1(%eax) + 30e: 83 c2 01 add $0x1,%edx + 311: 83 c0 01 add $0x1,%eax + 314: 0f b6 4a ff movzbl -0x1(%edx),%ecx + 318: 88 48 ff mov %cl,-0x1(%eax) while(n-- > 0) - 341: 39 c3 cmp %eax,%ebx - 343: 75 ef jne 334 + 31b: 39 c3 cmp %eax,%ebx + 31d: 75 ef jne 30e return vdst; } - 345: 89 f0 mov %esi,%eax - 347: 5b pop %ebx - 348: 5e pop %esi - 349: 5d pop %ebp - 34a: c3 ret + 31f: 89 f0 mov %esi,%eax + 321: 5b pop %ebx + 322: 5e pop %esi + 323: 5d pop %ebp + 324: c3 ret -0000034b : +00000325 : name: \ movl $SYS_ ## name, %eax; \ int $T_SYSCALL; \ ret SYSCALL(fork) - 34b: b8 01 00 00 00 mov $0x1,%eax - 350: cd 40 int $0x40 - 352: c3 ret + 325: b8 01 00 00 00 mov $0x1,%eax + 32a: cd 40 int $0x40 + 32c: c3 ret -00000353 : +0000032d : SYSCALL(exit) - 353: b8 02 00 00 00 mov $0x2,%eax - 358: cd 40 int $0x40 - 35a: c3 ret + 32d: b8 02 00 00 00 mov $0x2,%eax + 332: cd 40 int $0x40 + 334: c3 ret -0000035b : +00000335 : SYSCALL(wait) - 35b: b8 03 00 00 00 mov $0x3,%eax - 360: cd 40 int $0x40 - 362: c3 ret + 335: b8 03 00 00 00 mov $0x3,%eax + 33a: cd 40 int $0x40 + 33c: c3 ret -00000363 : +0000033d : SYSCALL(pipe) - 363: b8 04 00 00 00 mov $0x4,%eax - 368: cd 40 int $0x40 - 36a: c3 ret + 33d: b8 04 00 00 00 mov $0x4,%eax + 342: cd 40 int $0x40 + 344: c3 ret -0000036b : +00000345 : SYSCALL(read) - 36b: b8 05 00 00 00 mov $0x5,%eax - 370: cd 40 int $0x40 - 372: c3 ret + 345: b8 05 00 00 00 mov $0x5,%eax + 34a: cd 40 int $0x40 + 34c: c3 ret -00000373 : +0000034d : SYSCALL(write) - 373: b8 10 00 00 00 mov $0x10,%eax - 378: cd 40 int $0x40 - 37a: c3 ret + 34d: b8 10 00 00 00 mov $0x10,%eax + 352: cd 40 int $0x40 + 354: c3 ret -0000037b : +00000355 : SYSCALL(close) - 37b: b8 15 00 00 00 mov $0x15,%eax - 380: cd 40 int $0x40 - 382: c3 ret + 355: b8 15 00 00 00 mov $0x15,%eax + 35a: cd 40 int $0x40 + 35c: c3 ret -00000383 : +0000035d : SYSCALL(kill) - 383: b8 06 00 00 00 mov $0x6,%eax - 388: cd 40 int $0x40 - 38a: c3 ret + 35d: b8 06 00 00 00 mov $0x6,%eax + 362: cd 40 int $0x40 + 364: c3 ret -0000038b : +00000365 : SYSCALL(exec) - 38b: b8 07 00 00 00 mov $0x7,%eax - 390: cd 40 int $0x40 - 392: c3 ret + 365: b8 07 00 00 00 mov $0x7,%eax + 36a: cd 40 int $0x40 + 36c: c3 ret -00000393 : +0000036d : SYSCALL(open) - 393: b8 0f 00 00 00 mov $0xf,%eax - 398: cd 40 int $0x40 - 39a: c3 ret + 36d: b8 0f 00 00 00 mov $0xf,%eax + 372: cd 40 int $0x40 + 374: c3 ret -0000039b : +00000375 : SYSCALL(mknod) - 39b: b8 11 00 00 00 mov $0x11,%eax - 3a0: cd 40 int $0x40 - 3a2: c3 ret + 375: b8 11 00 00 00 mov $0x11,%eax + 37a: cd 40 int $0x40 + 37c: c3 ret -000003a3 : +0000037d : SYSCALL(unlink) - 3a3: b8 12 00 00 00 mov $0x12,%eax - 3a8: cd 40 int $0x40 - 3aa: c3 ret + 37d: b8 12 00 00 00 mov $0x12,%eax + 382: cd 40 int $0x40 + 384: c3 ret -000003ab : +00000385 : SYSCALL(fstat) - 3ab: b8 08 00 00 00 mov $0x8,%eax - 3b0: cd 40 int $0x40 - 3b2: c3 ret + 385: b8 08 00 00 00 mov $0x8,%eax + 38a: cd 40 int $0x40 + 38c: c3 ret -000003b3 : +0000038d : SYSCALL(link) - 3b3: b8 13 00 00 00 mov $0x13,%eax - 3b8: cd 40 int $0x40 - 3ba: c3 ret + 38d: b8 13 00 00 00 mov $0x13,%eax + 392: cd 40 int $0x40 + 394: c3 ret -000003bb : +00000395 : SYSCALL(mkdir) - 3bb: b8 14 00 00 00 mov $0x14,%eax - 3c0: cd 40 int $0x40 - 3c2: c3 ret + 395: b8 14 00 00 00 mov $0x14,%eax + 39a: cd 40 int $0x40 + 39c: c3 ret -000003c3 : +0000039d : SYSCALL(chdir) - 3c3: b8 09 00 00 00 mov $0x9,%eax - 3c8: cd 40 int $0x40 - 3ca: c3 ret + 39d: b8 09 00 00 00 mov $0x9,%eax + 3a2: cd 40 int $0x40 + 3a4: c3 ret -000003cb : +000003a5 : SYSCALL(dup) - 3cb: b8 0a 00 00 00 mov $0xa,%eax - 3d0: cd 40 int $0x40 - 3d2: c3 ret + 3a5: b8 0a 00 00 00 mov $0xa,%eax + 3aa: cd 40 int $0x40 + 3ac: c3 ret -000003d3 : +000003ad : SYSCALL(getpid) - 3d3: b8 0b 00 00 00 mov $0xb,%eax - 3d8: cd 40 int $0x40 - 3da: c3 ret + 3ad: b8 0b 00 00 00 mov $0xb,%eax + 3b2: cd 40 int $0x40 + 3b4: c3 ret -000003db : +000003b5 : SYSCALL(sbrk) - 3db: b8 0c 00 00 00 mov $0xc,%eax - 3e0: cd 40 int $0x40 - 3e2: c3 ret + 3b5: b8 0c 00 00 00 mov $0xc,%eax + 3ba: cd 40 int $0x40 + 3bc: c3 ret -000003e3 : +000003bd : SYSCALL(sleep) - 3e3: b8 0d 00 00 00 mov $0xd,%eax - 3e8: cd 40 int $0x40 - 3ea: c3 ret + 3bd: b8 0d 00 00 00 mov $0xd,%eax + 3c2: cd 40 int $0x40 + 3c4: c3 ret -000003eb : +000003c5 : SYSCALL(uptime) - 3eb: b8 0e 00 00 00 mov $0xe,%eax - 3f0: cd 40 int $0x40 - 3f2: c3 ret + 3c5: b8 0e 00 00 00 mov $0xe,%eax + 3ca: cd 40 int $0x40 + 3cc: c3 ret -000003f3 : +000003cd : SYSCALL(slabtest) - 3f3: b8 16 00 00 00 mov $0x16,%eax - 3f8: cd 40 int $0x40 - 3fa: c3 ret + 3cd: b8 16 00 00 00 mov $0x16,%eax + 3d2: cd 40 int $0x40 + 3d4: c3 ret -000003fb : +000003d5 : SYSCALL(ps) - 3fb: b8 17 00 00 00 mov $0x17,%eax - 400: cd 40 int $0x40 - 402: c3 ret + 3d5: b8 17 00 00 00 mov $0x17,%eax + 3da: cd 40 int $0x40 + 3dc: c3 ret -00000403 : +000003dd : write(fd, &c, 1); } static void printint(int fd, int xx, int base, int sgn) { - 403: 55 push %ebp - 404: 89 e5 mov %esp,%ebp - 406: 57 push %edi - 407: 56 push %esi - 408: 53 push %ebx - 409: 83 ec 3c sub $0x3c,%esp - 40c: 89 45 c4 mov %eax,-0x3c(%ebp) - 40f: 89 d3 mov %edx,%ebx + 3dd: 55 push %ebp + 3de: 89 e5 mov %esp,%ebp + 3e0: 57 push %edi + 3e1: 56 push %esi + 3e2: 53 push %ebx + 3e3: 83 ec 3c sub $0x3c,%esp + 3e6: 89 45 c4 mov %eax,-0x3c(%ebp) + 3e9: 89 ce mov %ecx,%esi char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 411: 83 7d 08 00 cmpl $0x0,0x8(%ebp) - 415: 74 77 je 48e - 417: 85 d2 test %edx,%edx - 419: 79 73 jns 48e + 3eb: 83 7d 08 00 cmpl $0x0,0x8(%ebp) + 3ef: 74 79 je 46a + 3f1: 85 d2 test %edx,%edx + 3f3: 79 75 jns 46a neg = 1; x = -xx; - 41b: f7 db neg %ebx + 3f5: 89 d1 mov %edx,%ecx + 3f7: f7 d9 neg %ecx neg = 1; - 41d: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) + 3f9: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) } else { x = xx; } i = 0; - 424: be 00 00 00 00 mov $0x0,%esi + 400: bb 00 00 00 00 mov $0x0,%ebx do{ buf[i++] = digits[x % base]; - 429: 89 f7 mov %esi,%edi - 42b: 83 c6 01 add $0x1,%esi - 42e: 89 d8 mov %ebx,%eax - 430: ba 00 00 00 00 mov $0x0,%edx - 435: f7 f1 div %ecx - 437: 0f b6 92 f0 07 00 00 movzbl 0x7f0(%edx),%edx - 43e: 88 54 35 d7 mov %dl,-0x29(%ebp,%esi,1) + 405: 89 df mov %ebx,%edi + 407: 83 c3 01 add $0x1,%ebx + 40a: 89 c8 mov %ecx,%eax + 40c: ba 00 00 00 00 mov $0x0,%edx + 411: f7 f6 div %esi + 413: 0f b6 92 04 08 00 00 movzbl 0x804(%edx),%edx + 41a: 88 54 1d d7 mov %dl,-0x29(%ebp,%ebx,1) }while((x /= base) != 0); - 442: 89 da mov %ebx,%edx - 444: 89 c3 mov %eax,%ebx - 446: 39 d1 cmp %edx,%ecx - 448: 76 df jbe 429 + 41e: 89 ca mov %ecx,%edx + 420: 89 c1 mov %eax,%ecx + 422: 39 d6 cmp %edx,%esi + 424: 76 df jbe 405 if(neg) - 44a: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) - 44e: 74 08 je 458 + 426: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) + 42a: 74 08 je 434 buf[i++] = '-'; - 450: c6 44 35 d8 2d movb $0x2d,-0x28(%ebp,%esi,1) - 455: 8d 77 02 lea 0x2(%edi),%esi + 42c: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) + 431: 8d 5f 02 lea 0x2(%edi),%ebx while(--i >= 0) - 458: 85 f6 test %esi,%esi - 45a: 7e 2a jle 486 - 45c: 8d 5c 35 d7 lea -0x29(%ebp,%esi,1),%ebx - 460: 8d 7d d8 lea -0x28(%ebp),%edi + 434: 85 db test %ebx,%ebx + 436: 7e 2a jle 462 + 438: 8d 7d d8 lea -0x28(%ebp),%edi + 43b: 8d 5c 1d d7 lea -0x29(%ebp,%ebx,1),%ebx write(fd, &c, 1); - 463: 8d 75 d7 lea -0x29(%ebp),%esi + 43f: 8d 75 d7 lea -0x29(%ebp),%esi putc(fd, buf[i]); - 466: 0f b6 03 movzbl (%ebx),%eax - 469: 88 45 d7 mov %al,-0x29(%ebp) + 442: 0f b6 03 movzbl (%ebx),%eax + 445: 88 45 d7 mov %al,-0x29(%ebp) write(fd, &c, 1); - 46c: 83 ec 04 sub $0x4,%esp - 46f: 6a 01 push $0x1 - 471: 56 push %esi - 472: ff 75 c4 pushl -0x3c(%ebp) - 475: e8 f9 fe ff ff call 373 + 448: 83 ec 04 sub $0x4,%esp + 44b: 6a 01 push $0x1 + 44d: 56 push %esi + 44e: ff 75 c4 push -0x3c(%ebp) + 451: e8 f7 fe ff ff call 34d while(--i >= 0) - 47a: 89 d8 mov %ebx,%eax - 47c: 83 eb 01 sub $0x1,%ebx - 47f: 83 c4 10 add $0x10,%esp - 482: 39 f8 cmp %edi,%eax - 484: 75 e0 jne 466 + 456: 89 d8 mov %ebx,%eax + 458: 83 eb 01 sub $0x1,%ebx + 45b: 83 c4 10 add $0x10,%esp + 45e: 39 f8 cmp %edi,%eax + 460: 75 e0 jne 442 } - 486: 8d 65 f4 lea -0xc(%ebp),%esp - 489: 5b pop %ebx - 48a: 5e pop %esi - 48b: 5f pop %edi - 48c: 5d pop %ebp - 48d: c3 ret + 462: 8d 65 f4 lea -0xc(%ebp),%esp + 465: 5b pop %ebx + 466: 5e pop %esi + 467: 5f pop %edi + 468: 5d pop %ebp + 469: c3 ret + x = xx; + 46a: 89 d1 mov %edx,%ecx neg = 0; - 48e: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) - 495: eb 8d jmp 424 + 46c: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) + 473: eb 8b jmp 400 -00000497 : +00000475 : // Print to the given fd. Only understands %d, %x, %p, %s. void printf(int fd, const char *fmt, ...) { - 497: f3 0f 1e fb endbr32 - 49b: 55 push %ebp - 49c: 89 e5 mov %esp,%ebp - 49e: 57 push %edi - 49f: 56 push %esi - 4a0: 53 push %ebx - 4a1: 83 ec 2c sub $0x2c,%esp + 475: 55 push %ebp + 476: 89 e5 mov %esp,%ebp + 478: 57 push %edi + 479: 56 push %esi + 47a: 53 push %ebx + 47b: 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++){ - 4a4: 8b 75 0c mov 0xc(%ebp),%esi - 4a7: 0f b6 1e movzbl (%esi),%ebx - 4aa: 84 db test %bl,%bl - 4ac: 0f 84 ab 01 00 00 je 65d - 4b2: 83 c6 01 add $0x1,%esi + 47e: 8b 75 0c mov 0xc(%ebp),%esi + 481: 0f b6 1e movzbl (%esi),%ebx + 484: 84 db test %bl,%bl + 486: 0f 84 9f 01 00 00 je 62b + 48c: 83 c6 01 add $0x1,%esi ap = (uint*)(void*)&fmt + 1; - 4b5: 8d 45 10 lea 0x10(%ebp),%eax - 4b8: 89 45 d4 mov %eax,-0x2c(%ebp) + 48f: 8d 45 10 lea 0x10(%ebp),%eax + 492: 89 45 d4 mov %eax,-0x2c(%ebp) state = 0; - 4bb: bf 00 00 00 00 mov $0x0,%edi - 4c0: eb 2d jmp 4ef + 495: bf 00 00 00 00 mov $0x0,%edi + 49a: eb 2d jmp 4c9 c = fmt[i] & 0xff; if(state == 0){ if(c == '%'){ state = '%'; } else { putc(fd, c); - 4c2: 88 5d e7 mov %bl,-0x19(%ebp) + 49c: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 4c5: 83 ec 04 sub $0x4,%esp - 4c8: 6a 01 push $0x1 - 4ca: 8d 45 e7 lea -0x19(%ebp),%eax - 4cd: 50 push %eax - 4ce: ff 75 08 pushl 0x8(%ebp) - 4d1: e8 9d fe ff ff call 373 + 49f: 83 ec 04 sub $0x4,%esp + 4a2: 6a 01 push $0x1 + 4a4: 8d 45 e7 lea -0x19(%ebp),%eax + 4a7: 50 push %eax + 4a8: ff 75 08 push 0x8(%ebp) + 4ab: e8 9d fe ff ff call 34d putc(fd, c); - 4d6: 83 c4 10 add $0x10,%esp - 4d9: eb 05 jmp 4e0 + 4b0: 83 c4 10 add $0x10,%esp + 4b3: eb 05 jmp 4ba } } else if(state == '%'){ - 4db: 83 ff 25 cmp $0x25,%edi - 4de: 74 22 je 502 + 4b5: 83 ff 25 cmp $0x25,%edi + 4b8: 74 1f je 4d9 for(i = 0; fmt[i]; i++){ - 4e0: 83 c6 01 add $0x1,%esi - 4e3: 0f b6 5e ff movzbl -0x1(%esi),%ebx - 4e7: 84 db test %bl,%bl - 4e9: 0f 84 6e 01 00 00 je 65d + 4ba: 83 c6 01 add $0x1,%esi + 4bd: 0f b6 5e ff movzbl -0x1(%esi),%ebx + 4c1: 84 db test %bl,%bl + 4c3: 0f 84 62 01 00 00 je 62b c = fmt[i] & 0xff; - 4ef: 0f be d3 movsbl %bl,%edx - 4f2: 0f b6 c3 movzbl %bl,%eax + 4c9: 0f b6 c3 movzbl %bl,%eax if(state == 0){ - 4f5: 85 ff test %edi,%edi - 4f7: 75 e2 jne 4db + 4cc: 85 ff test %edi,%edi + 4ce: 75 e5 jne 4b5 if(c == '%'){ - 4f9: 83 f8 25 cmp $0x25,%eax - 4fc: 75 c4 jne 4c2 + 4d0: 83 f8 25 cmp $0x25,%eax + 4d3: 75 c7 jne 49c state = '%'; - 4fe: 89 c7 mov %eax,%edi - 500: eb de jmp 4e0 + 4d5: 89 c7 mov %eax,%edi + 4d7: eb e1 jmp 4ba if(c == 'd'){ - 502: 83 f8 64 cmp $0x64,%eax - 505: 74 59 je 560 + 4d9: 83 f8 25 cmp $0x25,%eax + 4dc: 0f 84 f2 00 00 00 je 5d4 + 4e2: 8d 50 9d lea -0x63(%eax),%edx + 4e5: 83 fa 15 cmp $0x15,%edx + 4e8: 0f 87 07 01 00 00 ja 5f5 + 4ee: 0f 87 01 01 00 00 ja 5f5 + 4f4: ff 24 95 ac 07 00 00 jmp *0x7ac(,%edx,4) printint(fd, *ap, 10, 1); + 4fb: 83 ec 0c sub $0xc,%esp + 4fe: 6a 01 push $0x1 + 500: b9 0a 00 00 00 mov $0xa,%ecx + 505: 8b 7d d4 mov -0x2c(%ebp),%edi + 508: 8b 17 mov (%edi),%edx + 50a: 8b 45 08 mov 0x8(%ebp),%eax + 50d: e8 cb fe ff ff call 3dd ap++; - } else if(c == 'x' || c == 'p'){ - 507: 81 e2 f7 00 00 00 and $0xf7,%edx - 50d: 83 fa 70 cmp $0x70,%edx - 510: 74 7a je 58c - printint(fd, *ap, 16, 0); - ap++; - } else if(c == 's'){ - 512: 83 f8 73 cmp $0x73,%eax - 515: 0f 84 9d 00 00 00 je 5b8 - s = "(null)"; - while(*s != 0){ - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 51b: 83 f8 63 cmp $0x63,%eax - 51e: 0f 84 ec 00 00 00 je 610 - putc(fd, *ap); - ap++; - } else if(c == '%'){ - 524: 83 f8 25 cmp $0x25,%eax - 527: 0f 84 0f 01 00 00 je 63c - putc(fd, c); + 512: 89 f8 mov %edi,%eax + 514: 83 c0 04 add $0x4,%eax + 517: 89 45 d4 mov %eax,-0x2c(%ebp) + 51a: 83 c4 10 add $0x10,%esp } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); - 52d: c6 45 e7 25 movb $0x25,-0x19(%ebp) - write(fd, &c, 1); - 531: 83 ec 04 sub $0x4,%esp - 534: 6a 01 push $0x1 - 536: 8d 45 e7 lea -0x19(%ebp),%eax - 539: 50 push %eax - 53a: ff 75 08 pushl 0x8(%ebp) - 53d: e8 31 fe ff ff call 373 - putc(fd, c); - 542: 88 5d e7 mov %bl,-0x19(%ebp) - write(fd, &c, 1); - 545: 83 c4 0c add $0xc,%esp - 548: 6a 01 push $0x1 - 54a: 8d 45 e7 lea -0x19(%ebp),%eax - 54d: 50 push %eax - 54e: ff 75 08 pushl 0x8(%ebp) - 551: e8 1d fe ff ff call 373 putc(fd, c); - 556: 83 c4 10 add $0x10,%esp } state = 0; - 559: bf 00 00 00 00 mov $0x0,%edi - 55e: eb 80 jmp 4e0 - printint(fd, *ap, 10, 1); - 560: 83 ec 0c sub $0xc,%esp - 563: 6a 01 push $0x1 - 565: b9 0a 00 00 00 mov $0xa,%ecx - 56a: 8b 7d d4 mov -0x2c(%ebp),%edi - 56d: 8b 17 mov (%edi),%edx - 56f: 8b 45 08 mov 0x8(%ebp),%eax - 572: e8 8c fe ff ff call 403 - ap++; - 577: 89 f8 mov %edi,%eax - 579: 83 c0 04 add $0x4,%eax - 57c: 89 45 d4 mov %eax,-0x2c(%ebp) - 57f: 83 c4 10 add $0x10,%esp - state = 0; - 582: bf 00 00 00 00 mov $0x0,%edi - 587: e9 54 ff ff ff jmp 4e0 + 51d: bf 00 00 00 00 mov $0x0,%edi + 522: eb 96 jmp 4ba printint(fd, *ap, 16, 0); - 58c: 83 ec 0c sub $0xc,%esp - 58f: 6a 00 push $0x0 - 591: b9 10 00 00 00 mov $0x10,%ecx - 596: 8b 7d d4 mov -0x2c(%ebp),%edi - 599: 8b 17 mov (%edi),%edx - 59b: 8b 45 08 mov 0x8(%ebp),%eax - 59e: e8 60 fe ff ff call 403 + 524: 83 ec 0c sub $0xc,%esp + 527: 6a 00 push $0x0 + 529: b9 10 00 00 00 mov $0x10,%ecx + 52e: 8b 7d d4 mov -0x2c(%ebp),%edi + 531: 8b 17 mov (%edi),%edx + 533: 8b 45 08 mov 0x8(%ebp),%eax + 536: e8 a2 fe ff ff call 3dd ap++; - 5a3: 89 f8 mov %edi,%eax - 5a5: 83 c0 04 add $0x4,%eax - 5a8: 89 45 d4 mov %eax,-0x2c(%ebp) - 5ab: 83 c4 10 add $0x10,%esp + 53b: 89 f8 mov %edi,%eax + 53d: 83 c0 04 add $0x4,%eax + 540: 89 45 d4 mov %eax,-0x2c(%ebp) + 543: 83 c4 10 add $0x10,%esp state = 0; - 5ae: bf 00 00 00 00 mov $0x0,%edi - 5b3: e9 28 ff ff ff jmp 4e0 + 546: bf 00 00 00 00 mov $0x0,%edi + 54b: e9 6a ff ff ff jmp 4ba s = (char*)*ap; - 5b8: 8b 4d d4 mov -0x2c(%ebp),%ecx - 5bb: 8b 01 mov (%ecx),%eax + 550: 8b 4d d4 mov -0x2c(%ebp),%ecx + 553: 8b 01 mov (%ecx),%eax ap++; - 5bd: 83 c1 04 add $0x4,%ecx - 5c0: 89 4d d4 mov %ecx,-0x2c(%ebp) + 555: 83 c1 04 add $0x4,%ecx + 558: 89 4d d4 mov %ecx,-0x2c(%ebp) if(s == 0) - 5c3: 85 c0 test %eax,%eax - 5c5: 74 13 je 5da + 55b: 85 c0 test %eax,%eax + 55d: 74 13 je 572 s = (char*)*ap; - 5c7: 89 c3 mov %eax,%ebx + 55f: 89 c3 mov %eax,%ebx while(*s != 0){ - 5c9: 0f b6 00 movzbl (%eax),%eax + 561: 0f b6 00 movzbl (%eax),%eax state = 0; - 5cc: bf 00 00 00 00 mov $0x0,%edi + 564: bf 00 00 00 00 mov $0x0,%edi while(*s != 0){ - 5d1: 84 c0 test %al,%al - 5d3: 75 0f jne 5e4 - 5d5: e9 06 ff ff ff jmp 4e0 + 569: 84 c0 test %al,%al + 56b: 75 0f jne 57c + 56d: e9 48 ff ff ff jmp 4ba s = "(null)"; - 5da: bb e7 07 00 00 mov $0x7e7,%ebx + 572: bb a3 07 00 00 mov $0x7a3,%ebx while(*s != 0){ - 5df: b8 28 00 00 00 mov $0x28,%eax - 5e4: 8b 7d 08 mov 0x8(%ebp),%edi + 577: b8 28 00 00 00 mov $0x28,%eax + 57c: 8b 7d 08 mov 0x8(%ebp),%edi putc(fd, *s); - 5e7: 88 45 e7 mov %al,-0x19(%ebp) + 57f: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 5ea: 83 ec 04 sub $0x4,%esp - 5ed: 6a 01 push $0x1 - 5ef: 8d 45 e7 lea -0x19(%ebp),%eax - 5f2: 50 push %eax - 5f3: 57 push %edi - 5f4: e8 7a fd ff ff call 373 + 582: 83 ec 04 sub $0x4,%esp + 585: 6a 01 push $0x1 + 587: 8d 45 e7 lea -0x19(%ebp),%eax + 58a: 50 push %eax + 58b: 57 push %edi + 58c: e8 bc fd ff ff call 34d s++; - 5f9: 83 c3 01 add $0x1,%ebx + 591: 83 c3 01 add $0x1,%ebx while(*s != 0){ - 5fc: 0f b6 03 movzbl (%ebx),%eax - 5ff: 83 c4 10 add $0x10,%esp - 602: 84 c0 test %al,%al - 604: 75 e1 jne 5e7 + 594: 0f b6 03 movzbl (%ebx),%eax + 597: 83 c4 10 add $0x10,%esp + 59a: 84 c0 test %al,%al + 59c: 75 e1 jne 57f state = 0; - 606: bf 00 00 00 00 mov $0x0,%edi - 60b: e9 d0 fe ff ff jmp 4e0 + 59e: bf 00 00 00 00 mov $0x0,%edi + 5a3: e9 12 ff ff ff jmp 4ba putc(fd, *ap); - 610: 8b 7d d4 mov -0x2c(%ebp),%edi - 613: 8b 07 mov (%edi),%eax - 615: 88 45 e7 mov %al,-0x19(%ebp) + 5a8: 8b 7d d4 mov -0x2c(%ebp),%edi + 5ab: 8b 07 mov (%edi),%eax + 5ad: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 618: 83 ec 04 sub $0x4,%esp - 61b: 6a 01 push $0x1 - 61d: 8d 45 e7 lea -0x19(%ebp),%eax - 620: 50 push %eax - 621: ff 75 08 pushl 0x8(%ebp) - 624: e8 4a fd ff ff call 373 + 5b0: 83 ec 04 sub $0x4,%esp + 5b3: 6a 01 push $0x1 + 5b5: 8d 45 e7 lea -0x19(%ebp),%eax + 5b8: 50 push %eax + 5b9: ff 75 08 push 0x8(%ebp) + 5bc: e8 8c fd ff ff call 34d ap++; - 629: 83 c7 04 add $0x4,%edi - 62c: 89 7d d4 mov %edi,-0x2c(%ebp) - 62f: 83 c4 10 add $0x10,%esp + 5c1: 83 c7 04 add $0x4,%edi + 5c4: 89 7d d4 mov %edi,-0x2c(%ebp) + 5c7: 83 c4 10 add $0x10,%esp + state = 0; + 5ca: bf 00 00 00 00 mov $0x0,%edi + 5cf: e9 e6 fe ff ff jmp 4ba + putc(fd, c); + 5d4: 88 5d e7 mov %bl,-0x19(%ebp) + write(fd, &c, 1); + 5d7: 83 ec 04 sub $0x4,%esp + 5da: 6a 01 push $0x1 + 5dc: 8d 45 e7 lea -0x19(%ebp),%eax + 5df: 50 push %eax + 5e0: ff 75 08 push 0x8(%ebp) + 5e3: e8 65 fd ff ff call 34d + 5e8: 83 c4 10 add $0x10,%esp state = 0; - 632: bf 00 00 00 00 mov $0x0,%edi - 637: e9 a4 fe ff ff jmp 4e0 + 5eb: bf 00 00 00 00 mov $0x0,%edi + 5f0: e9 c5 fe ff ff jmp 4ba + putc(fd, '%'); + 5f5: c6 45 e7 25 movb $0x25,-0x19(%ebp) + write(fd, &c, 1); + 5f9: 83 ec 04 sub $0x4,%esp + 5fc: 6a 01 push $0x1 + 5fe: 8d 45 e7 lea -0x19(%ebp),%eax + 601: 50 push %eax + 602: ff 75 08 push 0x8(%ebp) + 605: e8 43 fd ff ff call 34d putc(fd, c); - 63c: 88 5d e7 mov %bl,-0x19(%ebp) + 60a: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 63f: 83 ec 04 sub $0x4,%esp - 642: 6a 01 push $0x1 - 644: 8d 45 e7 lea -0x19(%ebp),%eax - 647: 50 push %eax - 648: ff 75 08 pushl 0x8(%ebp) - 64b: e8 23 fd ff ff call 373 - 650: 83 c4 10 add $0x10,%esp + 60d: 83 c4 0c add $0xc,%esp + 610: 6a 01 push $0x1 + 612: 8d 45 e7 lea -0x19(%ebp),%eax + 615: 50 push %eax + 616: ff 75 08 push 0x8(%ebp) + 619: e8 2f fd ff ff call 34d + putc(fd, c); + 61e: 83 c4 10 add $0x10,%esp state = 0; - 653: bf 00 00 00 00 mov $0x0,%edi - 658: e9 83 fe ff ff jmp 4e0 + 621: bf 00 00 00 00 mov $0x0,%edi + 626: e9 8f fe ff ff jmp 4ba } } } - 65d: 8d 65 f4 lea -0xc(%ebp),%esp - 660: 5b pop %ebx - 661: 5e pop %esi - 662: 5f pop %edi - 663: 5d pop %ebp - 664: c3 ret - -00000665 : + 62b: 8d 65 f4 lea -0xc(%ebp),%esp + 62e: 5b pop %ebx + 62f: 5e pop %esi + 630: 5f pop %edi + 631: 5d pop %ebp + 632: c3 ret + +00000633 : static Header base; static Header *freep; void free(void *ap) { - 665: f3 0f 1e fb endbr32 - 669: 55 push %ebp - 66a: 89 e5 mov %esp,%ebp - 66c: 57 push %edi - 66d: 56 push %esi - 66e: 53 push %ebx - 66f: 8b 5d 08 mov 0x8(%ebp),%ebx + 633: 55 push %ebp + 634: 89 e5 mov %esp,%ebp + 636: 57 push %edi + 637: 56 push %esi + 638: 53 push %ebx + 639: 8b 5d 08 mov 0x8(%ebp),%ebx Header *bp, *p; bp = (Header*)ap - 1; - 672: 8d 4b f8 lea -0x8(%ebx),%ecx + 63c: 8d 4b f8 lea -0x8(%ebx),%ecx for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 675: a1 a0 0a 00 00 mov 0xaa0,%eax - 67a: eb 0c jmp 688 + 63f: a1 c0 0c 00 00 mov 0xcc0,%eax + 644: eb 0c jmp 652 if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 67c: 8b 10 mov (%eax),%edx - 67e: 39 c2 cmp %eax,%edx - 680: 77 04 ja 686 - 682: 39 ca cmp %ecx,%edx - 684: 77 10 ja 696 + 646: 8b 10 mov (%eax),%edx + 648: 39 c2 cmp %eax,%edx + 64a: 77 04 ja 650 + 64c: 39 ca cmp %ecx,%edx + 64e: 77 10 ja 660 { - 686: 89 d0 mov %edx,%eax + 650: 89 d0 mov %edx,%eax for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 688: 39 c8 cmp %ecx,%eax - 68a: 73 f0 jae 67c - 68c: 8b 10 mov (%eax),%edx - 68e: 39 ca cmp %ecx,%edx - 690: 77 04 ja 696 + 652: 39 c8 cmp %ecx,%eax + 654: 73 f0 jae 646 + 656: 8b 10 mov (%eax),%edx + 658: 39 ca cmp %ecx,%edx + 65a: 77 04 ja 660 if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 692: 39 c2 cmp %eax,%edx - 694: 77 f0 ja 686 + 65c: 39 c2 cmp %eax,%edx + 65e: 77 f0 ja 650 break; if(bp + bp->s.size == p->s.ptr){ - 696: 8b 73 fc mov -0x4(%ebx),%esi - 699: 8b 10 mov (%eax),%edx - 69b: 8d 3c f1 lea (%ecx,%esi,8),%edi - 69e: 39 fa cmp %edi,%edx - 6a0: 74 19 je 6bb + 660: 8b 73 fc mov -0x4(%ebx),%esi + 663: 8b 10 mov (%eax),%edx + 665: 8d 3c f1 lea (%ecx,%esi,8),%edi + 668: 39 fa cmp %edi,%edx + 66a: 74 19 je 685 bp->s.size += p->s.ptr->s.size; bp->s.ptr = p->s.ptr->s.ptr; + 66c: 89 53 f8 mov %edx,-0x8(%ebx) } else bp->s.ptr = p->s.ptr; - 6a2: 89 53 f8 mov %edx,-0x8(%ebx) if(p + p->s.size == bp){ - 6a5: 8b 50 04 mov 0x4(%eax),%edx - 6a8: 8d 34 d0 lea (%eax,%edx,8),%esi - 6ab: 39 f1 cmp %esi,%ecx - 6ad: 74 1b je 6ca + 66f: 8b 50 04 mov 0x4(%eax),%edx + 672: 8d 34 d0 lea (%eax,%edx,8),%esi + 675: 39 f1 cmp %esi,%ecx + 677: 74 18 je 691 p->s.size += bp->s.size; p->s.ptr = bp->s.ptr; + 679: 89 08 mov %ecx,(%eax) } else p->s.ptr = bp; - 6af: 89 08 mov %ecx,(%eax) freep = p; - 6b1: a3 a0 0a 00 00 mov %eax,0xaa0 + 67b: a3 c0 0c 00 00 mov %eax,0xcc0 } - 6b6: 5b pop %ebx - 6b7: 5e pop %esi - 6b8: 5f pop %edi - 6b9: 5d pop %ebp - 6ba: c3 ret + 680: 5b pop %ebx + 681: 5e pop %esi + 682: 5f pop %edi + 683: 5d pop %ebp + 684: c3 ret bp->s.size += p->s.ptr->s.size; - 6bb: 03 72 04 add 0x4(%edx),%esi - 6be: 89 73 fc mov %esi,-0x4(%ebx) + 685: 03 72 04 add 0x4(%edx),%esi + 688: 89 73 fc mov %esi,-0x4(%ebx) bp->s.ptr = p->s.ptr->s.ptr; - 6c1: 8b 10 mov (%eax),%edx - 6c3: 8b 12 mov (%edx),%edx - 6c5: 89 53 f8 mov %edx,-0x8(%ebx) - 6c8: eb db jmp 6a5 + 68b: 8b 10 mov (%eax),%edx + 68d: 8b 12 mov (%edx),%edx + 68f: eb db jmp 66c p->s.size += bp->s.size; - 6ca: 03 53 fc add -0x4(%ebx),%edx - 6cd: 89 50 04 mov %edx,0x4(%eax) + 691: 03 53 fc add -0x4(%ebx),%edx + 694: 89 50 04 mov %edx,0x4(%eax) p->s.ptr = bp->s.ptr; - 6d0: 8b 53 f8 mov -0x8(%ebx),%edx - 6d3: 89 10 mov %edx,(%eax) - 6d5: eb da jmp 6b1 + 697: 8b 4b f8 mov -0x8(%ebx),%ecx + 69a: eb dd jmp 679 -000006d7 : +0000069c : return freep; } void* malloc(uint nbytes) { - 6d7: f3 0f 1e fb endbr32 - 6db: 55 push %ebp - 6dc: 89 e5 mov %esp,%ebp - 6de: 57 push %edi - 6df: 56 push %esi - 6e0: 53 push %ebx - 6e1: 83 ec 0c sub $0xc,%esp + 69c: 55 push %ebp + 69d: 89 e5 mov %esp,%ebp + 69f: 57 push %edi + 6a0: 56 push %esi + 6a1: 53 push %ebx + 6a2: 83 ec 0c sub $0xc,%esp Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 6e4: 8b 45 08 mov 0x8(%ebp),%eax - 6e7: 8d 58 07 lea 0x7(%eax),%ebx - 6ea: c1 eb 03 shr $0x3,%ebx - 6ed: 83 c3 01 add $0x1,%ebx + 6a5: 8b 45 08 mov 0x8(%ebp),%eax + 6a8: 8d 58 07 lea 0x7(%eax),%ebx + 6ab: c1 eb 03 shr $0x3,%ebx + 6ae: 83 c3 01 add $0x1,%ebx if((prevp = freep) == 0){ - 6f0: 8b 15 a0 0a 00 00 mov 0xaa0,%edx - 6f6: 85 d2 test %edx,%edx - 6f8: 74 20 je 71a + 6b1: 8b 15 c0 0c 00 00 mov 0xcc0,%edx + 6b7: 85 d2 test %edx,%edx + 6b9: 74 1c je 6d7 base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 6fa: 8b 02 mov (%edx),%eax + 6bb: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 6fc: 8b 48 04 mov 0x4(%eax),%ecx - 6ff: 39 cb cmp %ecx,%ebx - 701: 76 3c jbe 73f - 703: 81 fb 00 10 00 00 cmp $0x1000,%ebx - 709: be 00 10 00 00 mov $0x1000,%esi - 70e: 0f 43 f3 cmovae %ebx,%esi + 6bd: 8b 48 04 mov 0x4(%eax),%ecx + 6c0: 39 cb cmp %ecx,%ebx + 6c2: 76 38 jbe 6fc + 6c4: be 00 10 00 00 mov $0x1000,%esi + 6c9: 39 f3 cmp %esi,%ebx + 6cb: 0f 43 f3 cmovae %ebx,%esi p = sbrk(nu * sizeof(Header)); - 711: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi - 718: eb 72 jmp 78c + 6ce: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi + 6d5: eb 72 jmp 749 base.s.ptr = freep = prevp = &base; - 71a: c7 05 a0 0a 00 00 a4 movl $0xaa4,0xaa0 - 721: 0a 00 00 - 724: c7 05 a4 0a 00 00 a4 movl $0xaa4,0xaa4 - 72b: 0a 00 00 + 6d7: c7 05 c0 0c 00 00 c4 movl $0xcc4,0xcc0 + 6de: 0c 00 00 + 6e1: c7 05 c4 0c 00 00 c4 movl $0xcc4,0xcc4 + 6e8: 0c 00 00 base.s.size = 0; - 72e: c7 05 a8 0a 00 00 00 movl $0x0,0xaa8 - 735: 00 00 00 + 6eb: c7 05 c8 0c 00 00 00 movl $0x0,0xcc8 + 6f2: 00 00 00 for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 738: b8 a4 0a 00 00 mov $0xaa4,%eax - 73d: eb c4 jmp 703 + 6f5: b8 c4 0c 00 00 mov $0xcc4,%eax + 6fa: eb c8 jmp 6c4 if(p->s.size == nunits) - 73f: 39 cb cmp %ecx,%ebx - 741: 74 1e je 761 + 6fc: 39 cb cmp %ecx,%ebx + 6fe: 74 1e je 71e prevp->s.ptr = p->s.ptr; else { p->s.size -= nunits; - 743: 29 d9 sub %ebx,%ecx - 745: 89 48 04 mov %ecx,0x4(%eax) + 700: 29 d9 sub %ebx,%ecx + 702: 89 48 04 mov %ecx,0x4(%eax) p += p->s.size; - 748: 8d 04 c8 lea (%eax,%ecx,8),%eax + 705: 8d 04 c8 lea (%eax,%ecx,8),%eax p->s.size = nunits; - 74b: 89 58 04 mov %ebx,0x4(%eax) + 708: 89 58 04 mov %ebx,0x4(%eax) } freep = prevp; - 74e: 89 15 a0 0a 00 00 mov %edx,0xaa0 + 70b: 89 15 c0 0c 00 00 mov %edx,0xcc0 return (void*)(p + 1); - 754: 8d 50 08 lea 0x8(%eax),%edx + 711: 8d 50 08 lea 0x8(%eax),%edx } if(p == freep) if((p = morecore(nunits)) == 0) return 0; } } - 757: 89 d0 mov %edx,%eax - 759: 8d 65 f4 lea -0xc(%ebp),%esp - 75c: 5b pop %ebx - 75d: 5e pop %esi - 75e: 5f pop %edi - 75f: 5d pop %ebp - 760: c3 ret + 714: 89 d0 mov %edx,%eax + 716: 8d 65 f4 lea -0xc(%ebp),%esp + 719: 5b pop %ebx + 71a: 5e pop %esi + 71b: 5f pop %edi + 71c: 5d pop %ebp + 71d: c3 ret prevp->s.ptr = p->s.ptr; - 761: 8b 08 mov (%eax),%ecx - 763: 89 0a mov %ecx,(%edx) - 765: eb e7 jmp 74e + 71e: 8b 08 mov (%eax),%ecx + 720: 89 0a mov %ecx,(%edx) + 722: eb e7 jmp 70b hp->s.size = nu; - 767: 89 70 04 mov %esi,0x4(%eax) + 724: 89 70 04 mov %esi,0x4(%eax) free((void*)(hp + 1)); - 76a: 83 ec 0c sub $0xc,%esp - 76d: 83 c0 08 add $0x8,%eax - 770: 50 push %eax - 771: e8 ef fe ff ff call 665 + 727: 83 ec 0c sub $0xc,%esp + 72a: 83 c0 08 add $0x8,%eax + 72d: 50 push %eax + 72e: e8 00 ff ff ff call 633 return freep; - 776: 8b 15 a0 0a 00 00 mov 0xaa0,%edx + 733: 8b 15 c0 0c 00 00 mov 0xcc0,%edx if((p = morecore(nunits)) == 0) - 77c: 83 c4 10 add $0x10,%esp - 77f: 85 d2 test %edx,%edx - 781: 74 d4 je 757 + 739: 83 c4 10 add $0x10,%esp + 73c: 85 d2 test %edx,%edx + 73e: 74 d4 je 714 for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 783: 8b 02 mov (%edx),%eax + 740: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 785: 8b 48 04 mov 0x4(%eax),%ecx - 788: 39 d9 cmp %ebx,%ecx - 78a: 73 b3 jae 73f + 742: 8b 48 04 mov 0x4(%eax),%ecx + 745: 39 d9 cmp %ebx,%ecx + 747: 73 b3 jae 6fc if(p == freep) - 78c: 89 c2 mov %eax,%edx - 78e: 39 05 a0 0a 00 00 cmp %eax,0xaa0 - 794: 75 ed jne 783 + 749: 89 c2 mov %eax,%edx + 74b: 39 05 c0 0c 00 00 cmp %eax,0xcc0 + 751: 75 ed jne 740 p = sbrk(nu * sizeof(Header)); - 796: 83 ec 0c sub $0xc,%esp - 799: 57 push %edi - 79a: e8 3c fc ff ff call 3db + 753: 83 ec 0c sub $0xc,%esp + 756: 57 push %edi + 757: e8 59 fc ff ff call 3b5 if(p == (char*)-1) - 79f: 83 c4 10 add $0x10,%esp - 7a2: 83 f8 ff cmp $0xffffffff,%eax - 7a5: 75 c0 jne 767 + 75c: 83 c4 10 add $0x10,%esp + 75f: 83 f8 ff cmp $0xffffffff,%eax + 762: 75 c0 jne 724 return 0; - 7a7: ba 00 00 00 00 mov $0x0,%edx - 7ac: eb a9 jmp 757 + 764: ba 00 00 00 00 mov $0x0,%edx + 769: eb a9 jmp 714 diff --git a/src/user/wc.d b/src/user/wc.d new file mode 100644 index 0000000..444b2d8 --- /dev/null +++ b/src/user/wc.d @@ -0,0 +1 @@ +user/wc.o: user/wc.c /usr/include/stdc-predef.h types.h stat.h user.h diff --git a/src/user/wc.o b/src/user/wc.o new file mode 100644 index 0000000000000000000000000000000000000000..99026931242b0df288331c62206ac9362ef33a11 GIT binary patch literal 4908 zcma)9YjBj+89wK`Ws^;^8xk%NltmMY;BE+}2r-IWBBWx)axDdMv-y%;O?JcX_nBZt z9k-S;j2)Sw({_r3f7Csk}Llb^d(-aQr*{(IP#msYv<($)hn^YuTE~tQ~UQ%rlzK< zr<2c~4BxKqzbL}rRr@bU1YjbUPsrULRsLQhwO<`ZT|6+JH zQlaZx*mX2wt#c0bUzl2&@AyJcgXkPe>0hNmC~GcT zES7>)Y1}WSI-#s$wp<|{#)y3t)s5uftjO0(>^OBU6pmGQKS9P8E6LppsCV2#F%S(q z!L!5{qMDNM@>YOrq^@Z&92U~`2Ee;ED&gLRD(0mGXz+ELACsm!)Nt zN>AAn50k&edyhaD<(w4m2Jj8a<)720X->2_?hL3G)WtC}mZ%TrC_L6P+EK|4$&lwz zj!-;$9G;1(+X`S#L}mjpku6$7$k%&_{SozHK5WWDHD{t2{ar8OT`7q}T~VYz95| zgPTA>LJcazZ$tPN6-CjYhQzskfr?QPR~~ZptY}EqMerz@dXYeV8haWeS}zx z>}+n0+w;+B!brKpfPM4DF<2^CB6VjbYV9(E>zhxschm=GOOCHIoOLCp%PF^ z_J2UO_hIiObYfZ`WtBt&(Sp?C*kIQ?474(ld*(c@(r;Bs>yFq>oAQqJ>Tt$ah?(%z zYRnHjXCcSt$ZvYWL>4RI3iWX#14GU^`M$IcJI?#^V`=SmoR8&ki}G>nj79m3b&0a^ z7tSH;s3kW!N3G+Q-0Zw-ou_mjUUIW?QW4~KSfJXj+d1M5)yo_5gtUT~b3&e@46D;w z)(s<9%G;cS@)e1&ugG6YNGIewl-@xjxeb>M$*J$OmL79DUzg~M;m}uPxn^UZJDjM` zUAoU5pY|%#Ym4^Up}n?nqNcAn)7P+dc$YI=vbv8sCAQk7TRp5>?Gp2lnHA-yYF6gp zB;TPI;STV)LjT*`M1YbPD46;7T=2J{bfZ{uzLl_Vr*#D@o|Bd+WlHo6w>mbnCohXdvDC*bKMPd(3Sn z?~Oz{?>;vPIcD#B-d*hVD&ykVFx%Ol-G~lgwY_Do^kUU#QYpyuF1d1#C%*u7ENnxl z)vmkQd&r#)&t~-eN7q%kOtOB-Z70}|KjS8&%ZRnJB*J2) zFjDk~QoK_tK{=N%i?M8>Cr(8Z;7Ev`?s`w&X9?1z_fTEHwm4noE z(ZQi=Rz(>XGaU!N})IsDNAF8AU#}0?&>-6NBs(nm4NMXquEN{ zv@Vn|c@@9hHId8YL|48v=68jIVKE51D&@~m&{t&eCV;o9sL0@+TEBK}Z)(w2)l^SN zx;u*0{p7M`nWa6qYBhGIXk!JEkAF$XCt`ALqvL!7`3jt(O~4tv<8*?CRg5!Rom3->7|g=ZbZWQVb+rD-`Pzb~x@O>#XpJq-TYbN!tno zy3`UsCqs_-Xv*-!>tCvr)k9<2#TI<%T_aoIGN>V2)YnLC-}osRH&PARA~7A2W1oQ! zeL4a@;}#q=O*Q^W@Ma#Vrp#xEA<8Ku04eioXKc_`KQZ&y|u`PR^%0znNGk#H~d5E!C(FWyp7HdACMxFph7ZmcOa-C5^w($TeWRe{1BMi1Iul`dy;s zUXAOB*lrvbaht}S8b>rfs&Sl%IQuj{qw$c&BN|`O_ydhU)p%OtpNYupZ$$KaS>siW zpJ=Q{U$i%Ayg}nl8kcD7(%7f*9*zA(^s`CJTQq)|h%%`0QH_Dd{Tk7=`ZvNoOaGgR zSjUALxz8#0Xk4jLtsnFoD5G5pXaP5A6q(AtF`S>kpd4Y|aAkiq6Zn&X$P8tJtjG*j zDk4)ZQJ{BsrW+!BhWx>BWKW?uT!N?Kvx9?W|1l$tmU5$oO2Ed`-q~`tIO1QY8Z8uk z(*)rSOZ6Tl=SpK^K5nH9{;ByH+)Zh9-bZ2m{2q0YU|jz%&4(kFclu1?+|@o%Xe03% zf+-aDppdR&|Gx-qL!l3!Zdh7%_E5%Ws_45WfR>H81Ty`N--|S0O$?FgnQ=S--n0QL_Q0^cMqyZWCeT6C zYdCK{YyS4aZradwF3y`28BNAE2DvuBJkB%jcjkv9aXP=Rfj4cyiaQZ+QH{c|Ps3Il zZxZo1e~ibQ%8d7U@NC2RCgrd=YfKQxWLdta(fEBI!Ph}&$oTyT3i8J9AMm@)IB6U0 zuWH_yW^#}F0 literal 0 HcmV?d00001 diff --git a/src/user/wc.sym b/src/user/wc.sym index 5b1ce88..96b538c 100644 --- a/src/user/wc.sym +++ b/src/user/wc.sym @@ -1,61 +1,49 @@ -00000000 .text -000007b0 .rodata -00000804 .eh_frame -00000aa0 .bss -00000000 .comment -00000000 .debug_aranges -00000000 .debug_info -00000000 .debug_abbrev -00000000 .debug_line -00000000 .debug_str -00000000 .debug_loc -00000000 .debug_ranges 00000000 wc.c 00000000 ulib.c 00000000 printf.c -00000403 printint -000007f0 digits.1089 +000003dd printint +00000804 digits.0 00000000 umalloc.c -00000aa0 freep -00000aa4 base -0000016d strcpy -00000497 printf -0000031a memmove -0000039b mknod -000003fb ps -00000238 gets -000003d3 getpid -000006d7 malloc -000003e3 sleep -00000363 pipe -000003f3 slabtest -00000373 write -000003ab fstat -00000383 kill -000003c3 chdir -0000038b exec -0000035b wait -0000036b read -000003a3 unlink +00000cc0 freep +00000cc4 base +00000165 strcpy +00000475 printf +000002f8 memmove +00000375 mknod +000003d5 ps +00000220 gets +000003ad getpid +0000069c malloc +000003bd sleep +0000033d pipe +000003cd slabtest +0000034d write +00000385 fstat +0000035d kill +0000039d chdir +00000365 exec +00000335 wait +00000345 read +0000037d unlink 00000000 wc -0000034b fork -000003db sbrk -000003eb uptime -00000a94 __bss_start -000001ec memset -000000d5 main -00000193 strcmp -000003cb dup +00000325 fork +000003b5 sbrk +000003c5 uptime +00000aa8 __bss_start +000001da memset +000000d1 main +00000189 strcmp +000003a5 dup 00000ac0 buf -00000293 stat -00000a94 _edata -00000cc0 _end -000003b3 link -00000353 exit -000002db atoi -000001c2 strlen -00000393 open -00000207 strchr -000003bb mkdir -0000037b close -00000665 free +00000277 stat +00000aa8 _edata +00000ccc _end +0000038d link +0000032d exit +000002bb atoi +000001b4 strlen +0000036d open +000001f3 strchr +00000395 mkdir +00000355 close +00000633 free diff --git a/src/user/zombie.asm b/src/user/zombie.asm index 7d1f369..0a48613 100644 --- a/src/user/zombie.asm +++ b/src/user/zombie.asm @@ -11,1041 +11,1010 @@ Disassembly of section .text: int main(void) { - 0: f3 0f 1e fb endbr32 - 4: 8d 4c 24 04 lea 0x4(%esp),%ecx - 8: 83 e4 f0 and $0xfffffff0,%esp - b: ff 71 fc pushl -0x4(%ecx) - e: 55 push %ebp - f: 89 e5 mov %esp,%ebp - 11: 51 push %ecx - 12: 83 ec 04 sub $0x4,%esp + 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) - 15: e8 f6 01 00 00 call 210 - 1a: 85 c0 test %eax,%eax - 1c: 7f 05 jg 23 + 11: e8 d8 01 00 00 call 1ee + 16: 85 c0 test %eax,%eax + 18: 7f 05 jg 1f sleep(5); // Let child exit before parent. exit(); - 1e: e8 f5 01 00 00 call 218 + 1a: e8 d7 01 00 00 call 1f6 sleep(5); // Let child exit before parent. - 23: 83 ec 0c sub $0xc,%esp - 26: 6a 05 push $0x5 - 28: e8 7b 02 00 00 call 2a8 - 2d: 83 c4 10 add $0x10,%esp - 30: eb ec jmp 1e + 1f: 83 ec 0c sub $0xc,%esp + 22: 6a 05 push $0x5 + 24: e8 5d 02 00 00 call 286 + 29: 83 c4 10 add $0x10,%esp + 2c: eb ec jmp 1a -00000032 : +0000002e : #include "user.h" #include "x86.h" char* strcpy(char *s, const char *t) { - 32: f3 0f 1e fb endbr32 - 36: 55 push %ebp - 37: 89 e5 mov %esp,%ebp - 39: 53 push %ebx - 3a: 8b 4d 08 mov 0x8(%ebp),%ecx - 3d: 8b 5d 0c mov 0xc(%ebp),%ebx + 2e: 55 push %ebp + 2f: 89 e5 mov %esp,%ebp + 31: 53 push %ebx + 32: 8b 4d 08 mov 0x8(%ebp),%ecx + 35: 8b 5d 0c mov 0xc(%ebp),%ebx char *os; os = s; while((*s++ = *t++) != 0) - 40: b8 00 00 00 00 mov $0x0,%eax - 45: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx - 49: 88 14 01 mov %dl,(%ecx,%eax,1) - 4c: 83 c0 01 add $0x1,%eax - 4f: 84 d2 test %dl,%dl - 51: 75 f2 jne 45 + 38: b8 00 00 00 00 mov $0x0,%eax + 3d: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx + 41: 88 14 01 mov %dl,(%ecx,%eax,1) + 44: 83 c0 01 add $0x1,%eax + 47: 84 d2 test %dl,%dl + 49: 75 f2 jne 3d ; return os; } - 53: 89 c8 mov %ecx,%eax - 55: 5b pop %ebx - 56: 5d pop %ebp - 57: c3 ret + 4b: 89 c8 mov %ecx,%eax + 4d: 8b 5d fc mov -0x4(%ebp),%ebx + 50: c9 leave + 51: c3 ret -00000058 : +00000052 : int strcmp(const char *p, const char *q) { - 58: f3 0f 1e fb endbr32 - 5c: 55 push %ebp - 5d: 89 e5 mov %esp,%ebp - 5f: 8b 4d 08 mov 0x8(%ebp),%ecx - 62: 8b 55 0c mov 0xc(%ebp),%edx + 52: 55 push %ebp + 53: 89 e5 mov %esp,%ebp + 55: 8b 4d 08 mov 0x8(%ebp),%ecx + 58: 8b 55 0c mov 0xc(%ebp),%edx while(*p && *p == *q) - 65: 0f b6 01 movzbl (%ecx),%eax - 68: 84 c0 test %al,%al - 6a: 74 11 je 7d - 6c: 38 02 cmp %al,(%edx) - 6e: 75 0d jne 7d + 5b: 0f b6 01 movzbl (%ecx),%eax + 5e: 84 c0 test %al,%al + 60: 74 11 je 73 + 62: 38 02 cmp %al,(%edx) + 64: 75 0d jne 73 p++, q++; - 70: 83 c1 01 add $0x1,%ecx - 73: 83 c2 01 add $0x1,%edx + 66: 83 c1 01 add $0x1,%ecx + 69: 83 c2 01 add $0x1,%edx while(*p && *p == *q) - 76: 0f b6 01 movzbl (%ecx),%eax - 79: 84 c0 test %al,%al - 7b: 75 ef jne 6c + 6c: 0f b6 01 movzbl (%ecx),%eax + 6f: 84 c0 test %al,%al + 71: 75 ef jne 62 return (uchar)*p - (uchar)*q; - 7d: 0f b6 c0 movzbl %al,%eax - 80: 0f b6 12 movzbl (%edx),%edx - 83: 29 d0 sub %edx,%eax + 73: 0f b6 c0 movzbl %al,%eax + 76: 0f b6 12 movzbl (%edx),%edx + 79: 29 d0 sub %edx,%eax } - 85: 5d pop %ebp - 86: c3 ret + 7b: 5d pop %ebp + 7c: c3 ret -00000087 : +0000007d : uint strlen(const char *s) { - 87: f3 0f 1e fb endbr32 - 8b: 55 push %ebp - 8c: 89 e5 mov %esp,%ebp - 8e: 8b 55 08 mov 0x8(%ebp),%edx + 7d: 55 push %ebp + 7e: 89 e5 mov %esp,%ebp + 80: 8b 55 08 mov 0x8(%ebp),%edx int n; for(n = 0; s[n]; n++) - 91: 80 3a 00 cmpb $0x0,(%edx) - 94: 74 14 je aa - 96: b8 00 00 00 00 mov $0x0,%eax - 9b: 83 c0 01 add $0x1,%eax - 9e: 89 c1 mov %eax,%ecx - a0: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) - a4: 75 f5 jne 9b + 83: 80 3a 00 cmpb $0x0,(%edx) + 86: 74 14 je 9c + 88: b8 00 00 00 00 mov $0x0,%eax + 8d: 83 c0 01 add $0x1,%eax + 90: 89 c1 mov %eax,%ecx + 92: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1) + 96: 75 f5 jne 8d ; return n; } - a6: 89 c8 mov %ecx,%eax - a8: 5d pop %ebp - a9: c3 ret + 98: 89 c8 mov %ecx,%eax + 9a: 5d pop %ebp + 9b: c3 ret for(n = 0; s[n]; n++) - aa: b9 00 00 00 00 mov $0x0,%ecx + 9c: b9 00 00 00 00 mov $0x0,%ecx return n; - af: eb f5 jmp a6 + a1: eb f5 jmp 98 -000000b1 : +000000a3 : void* memset(void *dst, int c, uint n) { - b1: f3 0f 1e fb endbr32 - b5: 55 push %ebp - b6: 89 e5 mov %esp,%ebp - b8: 57 push %edi - b9: 8b 55 08 mov 0x8(%ebp),%edx + a3: 55 push %ebp + a4: 89 e5 mov %esp,%ebp + a6: 57 push %edi + a7: 8b 55 08 mov 0x8(%ebp),%edx } static inline void stosb(void *addr, int data, int cnt) { asm volatile("cld; rep stosb" : - bc: 89 d7 mov %edx,%edi - be: 8b 4d 10 mov 0x10(%ebp),%ecx - c1: 8b 45 0c mov 0xc(%ebp),%eax - c4: fc cld - c5: f3 aa rep stos %al,%es:(%edi) + aa: 89 d7 mov %edx,%edi + ac: 8b 4d 10 mov 0x10(%ebp),%ecx + af: 8b 45 0c mov 0xc(%ebp),%eax + b2: fc cld + b3: f3 aa rep stos %al,%es:(%edi) stosb(dst, c, n); return dst; } - c7: 89 d0 mov %edx,%eax - c9: 5f pop %edi - ca: 5d pop %ebp - cb: c3 ret + b5: 89 d0 mov %edx,%eax + b7: 8b 7d fc mov -0x4(%ebp),%edi + ba: c9 leave + bb: c3 ret -000000cc : +000000bc : char* strchr(const char *s, char c) { - cc: f3 0f 1e fb endbr32 - d0: 55 push %ebp - d1: 89 e5 mov %esp,%ebp - d3: 8b 45 08 mov 0x8(%ebp),%eax - d6: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx + bc: 55 push %ebp + bd: 89 e5 mov %esp,%ebp + bf: 8b 45 08 mov 0x8(%ebp),%eax + c2: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx for(; *s; s++) - da: 0f b6 10 movzbl (%eax),%edx - dd: 84 d2 test %dl,%dl - df: 74 15 je f6 + c6: 0f b6 10 movzbl (%eax),%edx + c9: 84 d2 test %dl,%dl + cb: 74 15 je e2 if(*s == c) - e1: 38 d1 cmp %dl,%cl - e3: 74 0f je f4 + cd: 38 d1 cmp %dl,%cl + cf: 74 0f je e0 for(; *s; s++) - e5: 83 c0 01 add $0x1,%eax - e8: 0f b6 10 movzbl (%eax),%edx - eb: 84 d2 test %dl,%dl - ed: 75 f2 jne e1 + d1: 83 c0 01 add $0x1,%eax + d4: 0f b6 10 movzbl (%eax),%edx + d7: 84 d2 test %dl,%dl + d9: 75 f2 jne cd return (char*)s; return 0; - ef: b8 00 00 00 00 mov $0x0,%eax + db: b8 00 00 00 00 mov $0x0,%eax } - f4: 5d pop %ebp - f5: c3 ret + e0: 5d pop %ebp + e1: c3 ret return 0; - f6: b8 00 00 00 00 mov $0x0,%eax - fb: eb f7 jmp f4 + e2: b8 00 00 00 00 mov $0x0,%eax + e7: eb f7 jmp e0 -000000fd : +000000e9 : char* gets(char *buf, int max) { - fd: f3 0f 1e fb endbr32 - 101: 55 push %ebp - 102: 89 e5 mov %esp,%ebp - 104: 57 push %edi - 105: 56 push %esi - 106: 53 push %ebx - 107: 83 ec 2c sub $0x2c,%esp - 10a: 8b 75 08 mov 0x8(%ebp),%esi + e9: 55 push %ebp + ea: 89 e5 mov %esp,%ebp + ec: 57 push %edi + ed: 56 push %esi + ee: 53 push %ebx + ef: 83 ec 2c sub $0x2c,%esp + f2: 8b 75 08 mov 0x8(%ebp),%esi int i, cc; char c; for(i=0; i+1 < max; ){ - 10d: bb 00 00 00 00 mov $0x0,%ebx + f5: bb 00 00 00 00 mov $0x0,%ebx cc = read(0, &c, 1); - 112: 8d 7d e7 lea -0x19(%ebp),%edi + fa: 8d 7d e7 lea -0x19(%ebp),%edi for(i=0; i+1 < max; ){ - 115: 89 5d d4 mov %ebx,-0x2c(%ebp) - 118: 83 c3 01 add $0x1,%ebx - 11b: 3b 5d 0c cmp 0xc(%ebp),%ebx - 11e: 7d 27 jge 147 + fd: 89 5d d4 mov %ebx,-0x2c(%ebp) + 100: 83 c3 01 add $0x1,%ebx + 103: 3b 5d 0c cmp 0xc(%ebp),%ebx + 106: 7d 27 jge 12f cc = read(0, &c, 1); - 120: 83 ec 04 sub $0x4,%esp - 123: 6a 01 push $0x1 - 125: 57 push %edi - 126: 6a 00 push $0x0 - 128: e8 03 01 00 00 call 230 + 108: 83 ec 04 sub $0x4,%esp + 10b: 6a 01 push $0x1 + 10d: 57 push %edi + 10e: 6a 00 push $0x0 + 110: e8 f9 00 00 00 call 20e if(cc < 1) - 12d: 83 c4 10 add $0x10,%esp - 130: 85 c0 test %eax,%eax - 132: 7e 13 jle 147 + 115: 83 c4 10 add $0x10,%esp + 118: 85 c0 test %eax,%eax + 11a: 7e 13 jle 12f break; buf[i++] = c; - 134: 0f b6 45 e7 movzbl -0x19(%ebp),%eax - 138: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) + 11c: 0f b6 45 e7 movzbl -0x19(%ebp),%eax + 120: 88 44 1e ff mov %al,-0x1(%esi,%ebx,1) if(c == '\n' || c == '\r') - 13c: 3c 0a cmp $0xa,%al - 13e: 74 04 je 144 - 140: 3c 0d cmp $0xd,%al - 142: 75 d1 jne 115 + 124: 3c 0a cmp $0xa,%al + 126: 74 04 je 12c + 128: 3c 0d cmp $0xd,%al + 12a: 75 d1 jne fd for(i=0; i+1 < max; ){ - 144: 89 5d d4 mov %ebx,-0x2c(%ebp) + 12c: 89 5d d4 mov %ebx,-0x2c(%ebp) break; } buf[i] = '\0'; - 147: 8b 45 d4 mov -0x2c(%ebp),%eax - 14a: c6 04 06 00 movb $0x0,(%esi,%eax,1) + 12f: 8b 45 d4 mov -0x2c(%ebp),%eax + 132: c6 04 06 00 movb $0x0,(%esi,%eax,1) return buf; } - 14e: 89 f0 mov %esi,%eax - 150: 8d 65 f4 lea -0xc(%ebp),%esp - 153: 5b pop %ebx - 154: 5e pop %esi - 155: 5f pop %edi - 156: 5d pop %ebp - 157: c3 ret + 136: 89 f0 mov %esi,%eax + 138: 8d 65 f4 lea -0xc(%ebp),%esp + 13b: 5b pop %ebx + 13c: 5e pop %esi + 13d: 5f pop %edi + 13e: 5d pop %ebp + 13f: c3 ret -00000158 : +00000140 : int stat(const char *n, struct stat *st) { - 158: f3 0f 1e fb endbr32 - 15c: 55 push %ebp - 15d: 89 e5 mov %esp,%ebp - 15f: 56 push %esi - 160: 53 push %ebx + 140: 55 push %ebp + 141: 89 e5 mov %esp,%ebp + 143: 56 push %esi + 144: 53 push %ebx int fd; int r; fd = open(n, O_RDONLY); - 161: 83 ec 08 sub $0x8,%esp - 164: 6a 00 push $0x0 - 166: ff 75 08 pushl 0x8(%ebp) - 169: e8 ea 00 00 00 call 258 + 145: 83 ec 08 sub $0x8,%esp + 148: 6a 00 push $0x0 + 14a: ff 75 08 push 0x8(%ebp) + 14d: e8 e4 00 00 00 call 236 if(fd < 0) - 16e: 83 c4 10 add $0x10,%esp - 171: 85 c0 test %eax,%eax - 173: 78 24 js 199 - 175: 89 c3 mov %eax,%ebx + 152: 83 c4 10 add $0x10,%esp + 155: 85 c0 test %eax,%eax + 157: 78 24 js 17d + 159: 89 c3 mov %eax,%ebx return -1; r = fstat(fd, st); - 177: 83 ec 08 sub $0x8,%esp - 17a: ff 75 0c pushl 0xc(%ebp) - 17d: 50 push %eax - 17e: e8 ed 00 00 00 call 270 - 183: 89 c6 mov %eax,%esi + 15b: 83 ec 08 sub $0x8,%esp + 15e: ff 75 0c push 0xc(%ebp) + 161: 50 push %eax + 162: e8 e7 00 00 00 call 24e + 167: 89 c6 mov %eax,%esi close(fd); - 185: 89 1c 24 mov %ebx,(%esp) - 188: e8 b3 00 00 00 call 240 + 169: 89 1c 24 mov %ebx,(%esp) + 16c: e8 ad 00 00 00 call 21e return r; - 18d: 83 c4 10 add $0x10,%esp + 171: 83 c4 10 add $0x10,%esp } - 190: 89 f0 mov %esi,%eax - 192: 8d 65 f8 lea -0x8(%ebp),%esp - 195: 5b pop %ebx - 196: 5e pop %esi - 197: 5d pop %ebp - 198: c3 ret + 174: 89 f0 mov %esi,%eax + 176: 8d 65 f8 lea -0x8(%ebp),%esp + 179: 5b pop %ebx + 17a: 5e pop %esi + 17b: 5d pop %ebp + 17c: c3 ret return -1; - 199: be ff ff ff ff mov $0xffffffff,%esi - 19e: eb f0 jmp 190 + 17d: be ff ff ff ff mov $0xffffffff,%esi + 182: eb f0 jmp 174 -000001a0 : +00000184 : int atoi(const char *s) { - 1a0: f3 0f 1e fb endbr32 - 1a4: 55 push %ebp - 1a5: 89 e5 mov %esp,%ebp - 1a7: 53 push %ebx - 1a8: 8b 55 08 mov 0x8(%ebp),%edx + 184: 55 push %ebp + 185: 89 e5 mov %esp,%ebp + 187: 53 push %ebx + 188: 8b 55 08 mov 0x8(%ebp),%edx int n; n = 0; while('0' <= *s && *s <= '9') - 1ab: 0f b6 02 movzbl (%edx),%eax - 1ae: 8d 48 d0 lea -0x30(%eax),%ecx - 1b1: 80 f9 09 cmp $0x9,%cl - 1b4: 77 22 ja 1d8 + 18b: 0f b6 02 movzbl (%edx),%eax + 18e: 8d 48 d0 lea -0x30(%eax),%ecx + 191: 80 f9 09 cmp $0x9,%cl + 194: 77 24 ja 1ba n = 0; - 1b6: b9 00 00 00 00 mov $0x0,%ecx + 196: b9 00 00 00 00 mov $0x0,%ecx n = n*10 + *s++ - '0'; - 1bb: 83 c2 01 add $0x1,%edx - 1be: 8d 0c 89 lea (%ecx,%ecx,4),%ecx - 1c1: 0f be c0 movsbl %al,%eax - 1c4: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx + 19b: 83 c2 01 add $0x1,%edx + 19e: 8d 0c 89 lea (%ecx,%ecx,4),%ecx + 1a1: 0f be c0 movsbl %al,%eax + 1a4: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx while('0' <= *s && *s <= '9') - 1c8: 0f b6 02 movzbl (%edx),%eax - 1cb: 8d 58 d0 lea -0x30(%eax),%ebx - 1ce: 80 fb 09 cmp $0x9,%bl - 1d1: 76 e8 jbe 1bb + 1a8: 0f b6 02 movzbl (%edx),%eax + 1ab: 8d 58 d0 lea -0x30(%eax),%ebx + 1ae: 80 fb 09 cmp $0x9,%bl + 1b1: 76 e8 jbe 19b return n; } - 1d3: 89 c8 mov %ecx,%eax - 1d5: 5b pop %ebx - 1d6: 5d pop %ebp - 1d7: c3 ret + 1b3: 89 c8 mov %ecx,%eax + 1b5: 8b 5d fc mov -0x4(%ebp),%ebx + 1b8: c9 leave + 1b9: c3 ret n = 0; - 1d8: b9 00 00 00 00 mov $0x0,%ecx + 1ba: b9 00 00 00 00 mov $0x0,%ecx return n; - 1dd: eb f4 jmp 1d3 + 1bf: eb f2 jmp 1b3 -000001df : +000001c1 : void* memmove(void *vdst, const void *vsrc, int n) { - 1df: f3 0f 1e fb endbr32 - 1e3: 55 push %ebp - 1e4: 89 e5 mov %esp,%ebp - 1e6: 56 push %esi - 1e7: 53 push %ebx - 1e8: 8b 75 08 mov 0x8(%ebp),%esi - 1eb: 8b 55 0c mov 0xc(%ebp),%edx - 1ee: 8b 5d 10 mov 0x10(%ebp),%ebx + 1c1: 55 push %ebp + 1c2: 89 e5 mov %esp,%ebp + 1c4: 56 push %esi + 1c5: 53 push %ebx + 1c6: 8b 75 08 mov 0x8(%ebp),%esi + 1c9: 8b 55 0c mov 0xc(%ebp),%edx + 1cc: 8b 5d 10 mov 0x10(%ebp),%ebx char *dst; const char *src; dst = vdst; src = vsrc; while(n-- > 0) - 1f1: 85 db test %ebx,%ebx - 1f3: 7e 15 jle 20a - 1f5: 01 f3 add %esi,%ebx + 1cf: 85 db test %ebx,%ebx + 1d1: 7e 15 jle 1e8 + 1d3: 01 f3 add %esi,%ebx dst = vdst; - 1f7: 89 f0 mov %esi,%eax + 1d5: 89 f0 mov %esi,%eax *dst++ = *src++; - 1f9: 83 c2 01 add $0x1,%edx - 1fc: 83 c0 01 add $0x1,%eax - 1ff: 0f b6 4a ff movzbl -0x1(%edx),%ecx - 203: 88 48 ff mov %cl,-0x1(%eax) + 1d7: 83 c2 01 add $0x1,%edx + 1da: 83 c0 01 add $0x1,%eax + 1dd: 0f b6 4a ff movzbl -0x1(%edx),%ecx + 1e1: 88 48 ff mov %cl,-0x1(%eax) while(n-- > 0) - 206: 39 c3 cmp %eax,%ebx - 208: 75 ef jne 1f9 + 1e4: 39 c3 cmp %eax,%ebx + 1e6: 75 ef jne 1d7 return vdst; } - 20a: 89 f0 mov %esi,%eax - 20c: 5b pop %ebx - 20d: 5e pop %esi - 20e: 5d pop %ebp - 20f: c3 ret + 1e8: 89 f0 mov %esi,%eax + 1ea: 5b pop %ebx + 1eb: 5e pop %esi + 1ec: 5d pop %ebp + 1ed: c3 ret -00000210 : +000001ee : name: \ movl $SYS_ ## name, %eax; \ int $T_SYSCALL; \ ret SYSCALL(fork) - 210: b8 01 00 00 00 mov $0x1,%eax - 215: cd 40 int $0x40 - 217: c3 ret + 1ee: b8 01 00 00 00 mov $0x1,%eax + 1f3: cd 40 int $0x40 + 1f5: c3 ret -00000218 : +000001f6 : SYSCALL(exit) - 218: b8 02 00 00 00 mov $0x2,%eax - 21d: cd 40 int $0x40 - 21f: c3 ret + 1f6: b8 02 00 00 00 mov $0x2,%eax + 1fb: cd 40 int $0x40 + 1fd: c3 ret -00000220 : +000001fe : SYSCALL(wait) - 220: b8 03 00 00 00 mov $0x3,%eax - 225: cd 40 int $0x40 - 227: c3 ret + 1fe: b8 03 00 00 00 mov $0x3,%eax + 203: cd 40 int $0x40 + 205: c3 ret -00000228 : +00000206 : SYSCALL(pipe) - 228: b8 04 00 00 00 mov $0x4,%eax - 22d: cd 40 int $0x40 - 22f: c3 ret + 206: b8 04 00 00 00 mov $0x4,%eax + 20b: cd 40 int $0x40 + 20d: c3 ret -00000230 : +0000020e : SYSCALL(read) - 230: b8 05 00 00 00 mov $0x5,%eax - 235: cd 40 int $0x40 - 237: c3 ret + 20e: b8 05 00 00 00 mov $0x5,%eax + 213: cd 40 int $0x40 + 215: c3 ret -00000238 : +00000216 : SYSCALL(write) - 238: b8 10 00 00 00 mov $0x10,%eax - 23d: cd 40 int $0x40 - 23f: c3 ret + 216: b8 10 00 00 00 mov $0x10,%eax + 21b: cd 40 int $0x40 + 21d: c3 ret -00000240 : +0000021e : SYSCALL(close) - 240: b8 15 00 00 00 mov $0x15,%eax - 245: cd 40 int $0x40 - 247: c3 ret + 21e: b8 15 00 00 00 mov $0x15,%eax + 223: cd 40 int $0x40 + 225: c3 ret -00000248 : +00000226 : SYSCALL(kill) - 248: b8 06 00 00 00 mov $0x6,%eax - 24d: cd 40 int $0x40 - 24f: c3 ret + 226: b8 06 00 00 00 mov $0x6,%eax + 22b: cd 40 int $0x40 + 22d: c3 ret -00000250 : +0000022e : SYSCALL(exec) - 250: b8 07 00 00 00 mov $0x7,%eax - 255: cd 40 int $0x40 - 257: c3 ret + 22e: b8 07 00 00 00 mov $0x7,%eax + 233: cd 40 int $0x40 + 235: c3 ret -00000258 : +00000236 : SYSCALL(open) - 258: b8 0f 00 00 00 mov $0xf,%eax - 25d: cd 40 int $0x40 - 25f: c3 ret + 236: b8 0f 00 00 00 mov $0xf,%eax + 23b: cd 40 int $0x40 + 23d: c3 ret -00000260 : +0000023e : SYSCALL(mknod) - 260: b8 11 00 00 00 mov $0x11,%eax - 265: cd 40 int $0x40 - 267: c3 ret + 23e: b8 11 00 00 00 mov $0x11,%eax + 243: cd 40 int $0x40 + 245: c3 ret -00000268 : +00000246 : SYSCALL(unlink) - 268: b8 12 00 00 00 mov $0x12,%eax - 26d: cd 40 int $0x40 - 26f: c3 ret + 246: b8 12 00 00 00 mov $0x12,%eax + 24b: cd 40 int $0x40 + 24d: c3 ret -00000270 : +0000024e : SYSCALL(fstat) - 270: b8 08 00 00 00 mov $0x8,%eax - 275: cd 40 int $0x40 - 277: c3 ret + 24e: b8 08 00 00 00 mov $0x8,%eax + 253: cd 40 int $0x40 + 255: c3 ret -00000278 : +00000256 : SYSCALL(link) - 278: b8 13 00 00 00 mov $0x13,%eax - 27d: cd 40 int $0x40 - 27f: c3 ret + 256: b8 13 00 00 00 mov $0x13,%eax + 25b: cd 40 int $0x40 + 25d: c3 ret -00000280 : +0000025e : SYSCALL(mkdir) - 280: b8 14 00 00 00 mov $0x14,%eax - 285: cd 40 int $0x40 - 287: c3 ret + 25e: b8 14 00 00 00 mov $0x14,%eax + 263: cd 40 int $0x40 + 265: c3 ret -00000288 : +00000266 : SYSCALL(chdir) - 288: b8 09 00 00 00 mov $0x9,%eax - 28d: cd 40 int $0x40 - 28f: c3 ret + 266: b8 09 00 00 00 mov $0x9,%eax + 26b: cd 40 int $0x40 + 26d: c3 ret -00000290 : +0000026e : SYSCALL(dup) - 290: b8 0a 00 00 00 mov $0xa,%eax - 295: cd 40 int $0x40 - 297: c3 ret + 26e: b8 0a 00 00 00 mov $0xa,%eax + 273: cd 40 int $0x40 + 275: c3 ret -00000298 : +00000276 : SYSCALL(getpid) - 298: b8 0b 00 00 00 mov $0xb,%eax - 29d: cd 40 int $0x40 - 29f: c3 ret + 276: b8 0b 00 00 00 mov $0xb,%eax + 27b: cd 40 int $0x40 + 27d: c3 ret -000002a0 : +0000027e : SYSCALL(sbrk) - 2a0: b8 0c 00 00 00 mov $0xc,%eax - 2a5: cd 40 int $0x40 - 2a7: c3 ret + 27e: b8 0c 00 00 00 mov $0xc,%eax + 283: cd 40 int $0x40 + 285: c3 ret -000002a8 : +00000286 : SYSCALL(sleep) - 2a8: b8 0d 00 00 00 mov $0xd,%eax - 2ad: cd 40 int $0x40 - 2af: c3 ret + 286: b8 0d 00 00 00 mov $0xd,%eax + 28b: cd 40 int $0x40 + 28d: c3 ret -000002b0 : +0000028e : SYSCALL(uptime) - 2b0: b8 0e 00 00 00 mov $0xe,%eax - 2b5: cd 40 int $0x40 - 2b7: c3 ret + 28e: b8 0e 00 00 00 mov $0xe,%eax + 293: cd 40 int $0x40 + 295: c3 ret -000002b8 : +00000296 : SYSCALL(slabtest) - 2b8: b8 16 00 00 00 mov $0x16,%eax - 2bd: cd 40 int $0x40 - 2bf: c3 ret + 296: b8 16 00 00 00 mov $0x16,%eax + 29b: cd 40 int $0x40 + 29d: c3 ret -000002c0 : +0000029e : SYSCALL(ps) - 2c0: b8 17 00 00 00 mov $0x17,%eax - 2c5: cd 40 int $0x40 - 2c7: c3 ret + 29e: b8 17 00 00 00 mov $0x17,%eax + 2a3: cd 40 int $0x40 + 2a5: c3 ret -000002c8 : +000002a6 : write(fd, &c, 1); } static void printint(int fd, int xx, int base, int sgn) { - 2c8: 55 push %ebp - 2c9: 89 e5 mov %esp,%ebp - 2cb: 57 push %edi - 2cc: 56 push %esi - 2cd: 53 push %ebx - 2ce: 83 ec 3c sub $0x3c,%esp - 2d1: 89 45 c4 mov %eax,-0x3c(%ebp) - 2d4: 89 d3 mov %edx,%ebx + 2a6: 55 push %ebp + 2a7: 89 e5 mov %esp,%ebp + 2a9: 57 push %edi + 2aa: 56 push %esi + 2ab: 53 push %ebx + 2ac: 83 ec 3c sub $0x3c,%esp + 2af: 89 45 c4 mov %eax,-0x3c(%ebp) + 2b2: 89 ce mov %ecx,%esi char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 2d6: 83 7d 08 00 cmpl $0x0,0x8(%ebp) - 2da: 74 77 je 353 - 2dc: 85 d2 test %edx,%edx - 2de: 79 73 jns 353 + 2b4: 83 7d 08 00 cmpl $0x0,0x8(%ebp) + 2b8: 74 79 je 333 + 2ba: 85 d2 test %edx,%edx + 2bc: 79 75 jns 333 neg = 1; x = -xx; - 2e0: f7 db neg %ebx + 2be: 89 d1 mov %edx,%ecx + 2c0: f7 d9 neg %ecx neg = 1; - 2e2: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) + 2c2: c7 45 c0 01 00 00 00 movl $0x1,-0x40(%ebp) } else { x = xx; } i = 0; - 2e9: be 00 00 00 00 mov $0x0,%esi + 2c9: bb 00 00 00 00 mov $0x0,%ebx do{ buf[i++] = digits[x % base]; - 2ee: 89 f7 mov %esi,%edi - 2f0: 83 c6 01 add $0x1,%esi - 2f3: 89 d8 mov %ebx,%eax - 2f5: ba 00 00 00 00 mov $0x0,%edx - 2fa: f7 f1 div %ecx - 2fc: 0f b6 92 7c 06 00 00 movzbl 0x67c(%edx),%edx - 303: 88 54 35 d7 mov %dl,-0x29(%ebp,%esi,1) + 2ce: 89 df mov %ebx,%edi + 2d0: 83 c3 01 add $0x1,%ebx + 2d3: 89 c8 mov %ecx,%eax + 2d5: ba 00 00 00 00 mov $0x0,%edx + 2da: f7 f6 div %esi + 2dc: 0f b6 92 94 06 00 00 movzbl 0x694(%edx),%edx + 2e3: 88 54 1d d7 mov %dl,-0x29(%ebp,%ebx,1) }while((x /= base) != 0); - 307: 89 da mov %ebx,%edx - 309: 89 c3 mov %eax,%ebx - 30b: 39 d1 cmp %edx,%ecx - 30d: 76 df jbe 2ee + 2e7: 89 ca mov %ecx,%edx + 2e9: 89 c1 mov %eax,%ecx + 2eb: 39 d6 cmp %edx,%esi + 2ed: 76 df jbe 2ce if(neg) - 30f: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) - 313: 74 08 je 31d + 2ef: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) + 2f3: 74 08 je 2fd buf[i++] = '-'; - 315: c6 44 35 d8 2d movb $0x2d,-0x28(%ebp,%esi,1) - 31a: 8d 77 02 lea 0x2(%edi),%esi + 2f5: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1) + 2fa: 8d 5f 02 lea 0x2(%edi),%ebx while(--i >= 0) - 31d: 85 f6 test %esi,%esi - 31f: 7e 2a jle 34b - 321: 8d 5c 35 d7 lea -0x29(%ebp,%esi,1),%ebx - 325: 8d 7d d8 lea -0x28(%ebp),%edi + 2fd: 85 db test %ebx,%ebx + 2ff: 7e 2a jle 32b + 301: 8d 7d d8 lea -0x28(%ebp),%edi + 304: 8d 5c 1d d7 lea -0x29(%ebp,%ebx,1),%ebx write(fd, &c, 1); - 328: 8d 75 d7 lea -0x29(%ebp),%esi + 308: 8d 75 d7 lea -0x29(%ebp),%esi putc(fd, buf[i]); - 32b: 0f b6 03 movzbl (%ebx),%eax - 32e: 88 45 d7 mov %al,-0x29(%ebp) + 30b: 0f b6 03 movzbl (%ebx),%eax + 30e: 88 45 d7 mov %al,-0x29(%ebp) write(fd, &c, 1); - 331: 83 ec 04 sub $0x4,%esp - 334: 6a 01 push $0x1 - 336: 56 push %esi - 337: ff 75 c4 pushl -0x3c(%ebp) - 33a: e8 f9 fe ff ff call 238 + 311: 83 ec 04 sub $0x4,%esp + 314: 6a 01 push $0x1 + 316: 56 push %esi + 317: ff 75 c4 push -0x3c(%ebp) + 31a: e8 f7 fe ff ff call 216 while(--i >= 0) - 33f: 89 d8 mov %ebx,%eax - 341: 83 eb 01 sub $0x1,%ebx - 344: 83 c4 10 add $0x10,%esp - 347: 39 f8 cmp %edi,%eax - 349: 75 e0 jne 32b + 31f: 89 d8 mov %ebx,%eax + 321: 83 eb 01 sub $0x1,%ebx + 324: 83 c4 10 add $0x10,%esp + 327: 39 f8 cmp %edi,%eax + 329: 75 e0 jne 30b } - 34b: 8d 65 f4 lea -0xc(%ebp),%esp - 34e: 5b pop %ebx - 34f: 5e pop %esi - 350: 5f pop %edi - 351: 5d pop %ebp - 352: c3 ret + 32b: 8d 65 f4 lea -0xc(%ebp),%esp + 32e: 5b pop %ebx + 32f: 5e pop %esi + 330: 5f pop %edi + 331: 5d pop %ebp + 332: c3 ret + x = xx; + 333: 89 d1 mov %edx,%ecx neg = 0; - 353: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) - 35a: eb 8d jmp 2e9 + 335: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp) + 33c: eb 8b jmp 2c9 -0000035c : +0000033e : // Print to the given fd. Only understands %d, %x, %p, %s. void printf(int fd, const char *fmt, ...) { - 35c: f3 0f 1e fb endbr32 - 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 2c sub $0x2c,%esp + 33e: 55 push %ebp + 33f: 89 e5 mov %esp,%ebp + 341: 57 push %edi + 342: 56 push %esi + 343: 53 push %ebx + 344: 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++){ - 369: 8b 75 0c mov 0xc(%ebp),%esi - 36c: 0f b6 1e movzbl (%esi),%ebx - 36f: 84 db test %bl,%bl - 371: 0f 84 ab 01 00 00 je 522 - 377: 83 c6 01 add $0x1,%esi + 347: 8b 75 0c mov 0xc(%ebp),%esi + 34a: 0f b6 1e movzbl (%esi),%ebx + 34d: 84 db test %bl,%bl + 34f: 0f 84 9f 01 00 00 je 4f4 + 355: 83 c6 01 add $0x1,%esi ap = (uint*)(void*)&fmt + 1; - 37a: 8d 45 10 lea 0x10(%ebp),%eax - 37d: 89 45 d4 mov %eax,-0x2c(%ebp) + 358: 8d 45 10 lea 0x10(%ebp),%eax + 35b: 89 45 d4 mov %eax,-0x2c(%ebp) state = 0; - 380: bf 00 00 00 00 mov $0x0,%edi - 385: eb 2d jmp 3b4 + 35e: bf 00 00 00 00 mov $0x0,%edi + 363: eb 2d jmp 392 c = fmt[i] & 0xff; if(state == 0){ if(c == '%'){ state = '%'; } else { putc(fd, c); - 387: 88 5d e7 mov %bl,-0x19(%ebp) + 365: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 38a: 83 ec 04 sub $0x4,%esp - 38d: 6a 01 push $0x1 - 38f: 8d 45 e7 lea -0x19(%ebp),%eax - 392: 50 push %eax - 393: ff 75 08 pushl 0x8(%ebp) - 396: e8 9d fe ff ff call 238 + 368: 83 ec 04 sub $0x4,%esp + 36b: 6a 01 push $0x1 + 36d: 8d 45 e7 lea -0x19(%ebp),%eax + 370: 50 push %eax + 371: ff 75 08 push 0x8(%ebp) + 374: e8 9d fe ff ff call 216 putc(fd, c); - 39b: 83 c4 10 add $0x10,%esp - 39e: eb 05 jmp 3a5 + 379: 83 c4 10 add $0x10,%esp + 37c: eb 05 jmp 383 } } else if(state == '%'){ - 3a0: 83 ff 25 cmp $0x25,%edi - 3a3: 74 22 je 3c7 + 37e: 83 ff 25 cmp $0x25,%edi + 381: 74 1f je 3a2 for(i = 0; fmt[i]; i++){ - 3a5: 83 c6 01 add $0x1,%esi - 3a8: 0f b6 5e ff movzbl -0x1(%esi),%ebx - 3ac: 84 db test %bl,%bl - 3ae: 0f 84 6e 01 00 00 je 522 + 383: 83 c6 01 add $0x1,%esi + 386: 0f b6 5e ff movzbl -0x1(%esi),%ebx + 38a: 84 db test %bl,%bl + 38c: 0f 84 62 01 00 00 je 4f4 c = fmt[i] & 0xff; - 3b4: 0f be d3 movsbl %bl,%edx - 3b7: 0f b6 c3 movzbl %bl,%eax + 392: 0f b6 c3 movzbl %bl,%eax if(state == 0){ - 3ba: 85 ff test %edi,%edi - 3bc: 75 e2 jne 3a0 + 395: 85 ff test %edi,%edi + 397: 75 e5 jne 37e if(c == '%'){ - 3be: 83 f8 25 cmp $0x25,%eax - 3c1: 75 c4 jne 387 + 399: 83 f8 25 cmp $0x25,%eax + 39c: 75 c7 jne 365 state = '%'; - 3c3: 89 c7 mov %eax,%edi - 3c5: eb de jmp 3a5 + 39e: 89 c7 mov %eax,%edi + 3a0: eb e1 jmp 383 if(c == 'd'){ - 3c7: 83 f8 64 cmp $0x64,%eax - 3ca: 74 59 je 425 + 3a2: 83 f8 25 cmp $0x25,%eax + 3a5: 0f 84 f2 00 00 00 je 49d + 3ab: 8d 50 9d lea -0x63(%eax),%edx + 3ae: 83 fa 15 cmp $0x15,%edx + 3b1: 0f 87 07 01 00 00 ja 4be + 3b7: 0f 87 01 01 00 00 ja 4be + 3bd: ff 24 95 3c 06 00 00 jmp *0x63c(,%edx,4) printint(fd, *ap, 10, 1); + 3c4: 83 ec 0c sub $0xc,%esp + 3c7: 6a 01 push $0x1 + 3c9: b9 0a 00 00 00 mov $0xa,%ecx + 3ce: 8b 7d d4 mov -0x2c(%ebp),%edi + 3d1: 8b 17 mov (%edi),%edx + 3d3: 8b 45 08 mov 0x8(%ebp),%eax + 3d6: e8 cb fe ff ff call 2a6 ap++; - } else if(c == 'x' || c == 'p'){ - 3cc: 81 e2 f7 00 00 00 and $0xf7,%edx - 3d2: 83 fa 70 cmp $0x70,%edx - 3d5: 74 7a je 451 - printint(fd, *ap, 16, 0); - ap++; - } else if(c == 's'){ - 3d7: 83 f8 73 cmp $0x73,%eax - 3da: 0f 84 9d 00 00 00 je 47d - s = "(null)"; - while(*s != 0){ - putc(fd, *s); - s++; - } - } else if(c == 'c'){ - 3e0: 83 f8 63 cmp $0x63,%eax - 3e3: 0f 84 ec 00 00 00 je 4d5 - putc(fd, *ap); - ap++; - } else if(c == '%'){ - 3e9: 83 f8 25 cmp $0x25,%eax - 3ec: 0f 84 0f 01 00 00 je 501 - putc(fd, c); + 3db: 89 f8 mov %edi,%eax + 3dd: 83 c0 04 add $0x4,%eax + 3e0: 89 45 d4 mov %eax,-0x2c(%ebp) + 3e3: 83 c4 10 add $0x10,%esp } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); - 3f2: c6 45 e7 25 movb $0x25,-0x19(%ebp) - write(fd, &c, 1); - 3f6: 83 ec 04 sub $0x4,%esp - 3f9: 6a 01 push $0x1 - 3fb: 8d 45 e7 lea -0x19(%ebp),%eax - 3fe: 50 push %eax - 3ff: ff 75 08 pushl 0x8(%ebp) - 402: e8 31 fe ff ff call 238 putc(fd, c); - 407: 88 5d e7 mov %bl,-0x19(%ebp) - write(fd, &c, 1); - 40a: 83 c4 0c add $0xc,%esp - 40d: 6a 01 push $0x1 - 40f: 8d 45 e7 lea -0x19(%ebp),%eax - 412: 50 push %eax - 413: ff 75 08 pushl 0x8(%ebp) - 416: e8 1d fe ff ff call 238 - putc(fd, c); - 41b: 83 c4 10 add $0x10,%esp } state = 0; - 41e: bf 00 00 00 00 mov $0x0,%edi - 423: eb 80 jmp 3a5 - printint(fd, *ap, 10, 1); - 425: 83 ec 0c sub $0xc,%esp - 428: 6a 01 push $0x1 - 42a: b9 0a 00 00 00 mov $0xa,%ecx - 42f: 8b 7d d4 mov -0x2c(%ebp),%edi - 432: 8b 17 mov (%edi),%edx - 434: 8b 45 08 mov 0x8(%ebp),%eax - 437: e8 8c fe ff ff call 2c8 - ap++; - 43c: 89 f8 mov %edi,%eax - 43e: 83 c0 04 add $0x4,%eax - 441: 89 45 d4 mov %eax,-0x2c(%ebp) - 444: 83 c4 10 add $0x10,%esp - state = 0; - 447: bf 00 00 00 00 mov $0x0,%edi - 44c: e9 54 ff ff ff jmp 3a5 + 3e6: bf 00 00 00 00 mov $0x0,%edi + 3eb: eb 96 jmp 383 printint(fd, *ap, 16, 0); - 451: 83 ec 0c sub $0xc,%esp - 454: 6a 00 push $0x0 - 456: b9 10 00 00 00 mov $0x10,%ecx - 45b: 8b 7d d4 mov -0x2c(%ebp),%edi - 45e: 8b 17 mov (%edi),%edx - 460: 8b 45 08 mov 0x8(%ebp),%eax - 463: e8 60 fe ff ff call 2c8 + 3ed: 83 ec 0c sub $0xc,%esp + 3f0: 6a 00 push $0x0 + 3f2: b9 10 00 00 00 mov $0x10,%ecx + 3f7: 8b 7d d4 mov -0x2c(%ebp),%edi + 3fa: 8b 17 mov (%edi),%edx + 3fc: 8b 45 08 mov 0x8(%ebp),%eax + 3ff: e8 a2 fe ff ff call 2a6 ap++; - 468: 89 f8 mov %edi,%eax - 46a: 83 c0 04 add $0x4,%eax - 46d: 89 45 d4 mov %eax,-0x2c(%ebp) - 470: 83 c4 10 add $0x10,%esp + 404: 89 f8 mov %edi,%eax + 406: 83 c0 04 add $0x4,%eax + 409: 89 45 d4 mov %eax,-0x2c(%ebp) + 40c: 83 c4 10 add $0x10,%esp state = 0; - 473: bf 00 00 00 00 mov $0x0,%edi - 478: e9 28 ff ff ff jmp 3a5 + 40f: bf 00 00 00 00 mov $0x0,%edi + 414: e9 6a ff ff ff jmp 383 s = (char*)*ap; - 47d: 8b 4d d4 mov -0x2c(%ebp),%ecx - 480: 8b 01 mov (%ecx),%eax + 419: 8b 4d d4 mov -0x2c(%ebp),%ecx + 41c: 8b 01 mov (%ecx),%eax ap++; - 482: 83 c1 04 add $0x4,%ecx - 485: 89 4d d4 mov %ecx,-0x2c(%ebp) + 41e: 83 c1 04 add $0x4,%ecx + 421: 89 4d d4 mov %ecx,-0x2c(%ebp) if(s == 0) - 488: 85 c0 test %eax,%eax - 48a: 74 13 je 49f + 424: 85 c0 test %eax,%eax + 426: 74 13 je 43b s = (char*)*ap; - 48c: 89 c3 mov %eax,%ebx + 428: 89 c3 mov %eax,%ebx while(*s != 0){ - 48e: 0f b6 00 movzbl (%eax),%eax + 42a: 0f b6 00 movzbl (%eax),%eax state = 0; - 491: bf 00 00 00 00 mov $0x0,%edi + 42d: bf 00 00 00 00 mov $0x0,%edi while(*s != 0){ - 496: 84 c0 test %al,%al - 498: 75 0f jne 4a9 - 49a: e9 06 ff ff ff jmp 3a5 + 432: 84 c0 test %al,%al + 434: 75 0f jne 445 + 436: e9 48 ff ff ff jmp 383 s = "(null)"; - 49f: bb 74 06 00 00 mov $0x674,%ebx + 43b: bb 34 06 00 00 mov $0x634,%ebx while(*s != 0){ - 4a4: b8 28 00 00 00 mov $0x28,%eax - 4a9: 8b 7d 08 mov 0x8(%ebp),%edi + 440: b8 28 00 00 00 mov $0x28,%eax + 445: 8b 7d 08 mov 0x8(%ebp),%edi putc(fd, *s); - 4ac: 88 45 e7 mov %al,-0x19(%ebp) + 448: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 4af: 83 ec 04 sub $0x4,%esp - 4b2: 6a 01 push $0x1 - 4b4: 8d 45 e7 lea -0x19(%ebp),%eax - 4b7: 50 push %eax - 4b8: 57 push %edi - 4b9: e8 7a fd ff ff call 238 + 44b: 83 ec 04 sub $0x4,%esp + 44e: 6a 01 push $0x1 + 450: 8d 45 e7 lea -0x19(%ebp),%eax + 453: 50 push %eax + 454: 57 push %edi + 455: e8 bc fd ff ff call 216 s++; - 4be: 83 c3 01 add $0x1,%ebx + 45a: 83 c3 01 add $0x1,%ebx while(*s != 0){ - 4c1: 0f b6 03 movzbl (%ebx),%eax - 4c4: 83 c4 10 add $0x10,%esp - 4c7: 84 c0 test %al,%al - 4c9: 75 e1 jne 4ac + 45d: 0f b6 03 movzbl (%ebx),%eax + 460: 83 c4 10 add $0x10,%esp + 463: 84 c0 test %al,%al + 465: 75 e1 jne 448 state = 0; - 4cb: bf 00 00 00 00 mov $0x0,%edi - 4d0: e9 d0 fe ff ff jmp 3a5 + 467: bf 00 00 00 00 mov $0x0,%edi + 46c: e9 12 ff ff ff jmp 383 putc(fd, *ap); - 4d5: 8b 7d d4 mov -0x2c(%ebp),%edi - 4d8: 8b 07 mov (%edi),%eax - 4da: 88 45 e7 mov %al,-0x19(%ebp) + 471: 8b 7d d4 mov -0x2c(%ebp),%edi + 474: 8b 07 mov (%edi),%eax + 476: 88 45 e7 mov %al,-0x19(%ebp) write(fd, &c, 1); - 4dd: 83 ec 04 sub $0x4,%esp - 4e0: 6a 01 push $0x1 - 4e2: 8d 45 e7 lea -0x19(%ebp),%eax - 4e5: 50 push %eax - 4e6: ff 75 08 pushl 0x8(%ebp) - 4e9: e8 4a fd ff ff call 238 + 479: 83 ec 04 sub $0x4,%esp + 47c: 6a 01 push $0x1 + 47e: 8d 45 e7 lea -0x19(%ebp),%eax + 481: 50 push %eax + 482: ff 75 08 push 0x8(%ebp) + 485: e8 8c fd ff ff call 216 ap++; - 4ee: 83 c7 04 add $0x4,%edi - 4f1: 89 7d d4 mov %edi,-0x2c(%ebp) - 4f4: 83 c4 10 add $0x10,%esp + 48a: 83 c7 04 add $0x4,%edi + 48d: 89 7d d4 mov %edi,-0x2c(%ebp) + 490: 83 c4 10 add $0x10,%esp state = 0; - 4f7: bf 00 00 00 00 mov $0x0,%edi - 4fc: e9 a4 fe ff ff jmp 3a5 + 493: bf 00 00 00 00 mov $0x0,%edi + 498: e9 e6 fe ff ff jmp 383 putc(fd, c); - 501: 88 5d e7 mov %bl,-0x19(%ebp) + 49d: 88 5d e7 mov %bl,-0x19(%ebp) write(fd, &c, 1); - 504: 83 ec 04 sub $0x4,%esp - 507: 6a 01 push $0x1 - 509: 8d 45 e7 lea -0x19(%ebp),%eax - 50c: 50 push %eax - 50d: ff 75 08 pushl 0x8(%ebp) - 510: e8 23 fd ff ff call 238 - 515: 83 c4 10 add $0x10,%esp + 4a0: 83 ec 04 sub $0x4,%esp + 4a3: 6a 01 push $0x1 + 4a5: 8d 45 e7 lea -0x19(%ebp),%eax + 4a8: 50 push %eax + 4a9: ff 75 08 push 0x8(%ebp) + 4ac: e8 65 fd ff ff call 216 + 4b1: 83 c4 10 add $0x10,%esp + state = 0; + 4b4: bf 00 00 00 00 mov $0x0,%edi + 4b9: e9 c5 fe ff ff jmp 383 + putc(fd, '%'); + 4be: c6 45 e7 25 movb $0x25,-0x19(%ebp) + write(fd, &c, 1); + 4c2: 83 ec 04 sub $0x4,%esp + 4c5: 6a 01 push $0x1 + 4c7: 8d 45 e7 lea -0x19(%ebp),%eax + 4ca: 50 push %eax + 4cb: ff 75 08 push 0x8(%ebp) + 4ce: e8 43 fd ff ff call 216 + putc(fd, c); + 4d3: 88 5d e7 mov %bl,-0x19(%ebp) + write(fd, &c, 1); + 4d6: 83 c4 0c add $0xc,%esp + 4d9: 6a 01 push $0x1 + 4db: 8d 45 e7 lea -0x19(%ebp),%eax + 4de: 50 push %eax + 4df: ff 75 08 push 0x8(%ebp) + 4e2: e8 2f fd ff ff call 216 + putc(fd, c); + 4e7: 83 c4 10 add $0x10,%esp state = 0; - 518: bf 00 00 00 00 mov $0x0,%edi - 51d: e9 83 fe ff ff jmp 3a5 + 4ea: bf 00 00 00 00 mov $0x0,%edi + 4ef: e9 8f fe ff ff jmp 383 } } } - 522: 8d 65 f4 lea -0xc(%ebp),%esp - 525: 5b pop %ebx - 526: 5e pop %esi - 527: 5f pop %edi - 528: 5d pop %ebp - 529: c3 ret - -0000052a : + 4f4: 8d 65 f4 lea -0xc(%ebp),%esp + 4f7: 5b pop %ebx + 4f8: 5e pop %esi + 4f9: 5f pop %edi + 4fa: 5d pop %ebp + 4fb: c3 ret + +000004fc : static Header base; static Header *freep; void free(void *ap) { - 52a: f3 0f 1e fb endbr32 - 52e: 55 push %ebp - 52f: 89 e5 mov %esp,%ebp - 531: 57 push %edi - 532: 56 push %esi - 533: 53 push %ebx - 534: 8b 5d 08 mov 0x8(%ebp),%ebx + 4fc: 55 push %ebp + 4fd: 89 e5 mov %esp,%ebp + 4ff: 57 push %edi + 500: 56 push %esi + 501: 53 push %ebx + 502: 8b 5d 08 mov 0x8(%ebp),%ebx Header *bp, *p; bp = (Header*)ap - 1; - 537: 8d 4b f8 lea -0x8(%ebx),%ecx + 505: 8d 4b f8 lea -0x8(%ebx),%ecx for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 53a: a1 e4 08 00 00 mov 0x8e4,%eax - 53f: eb 0c jmp 54d + 508: a1 fc 08 00 00 mov 0x8fc,%eax + 50d: eb 0c jmp 51b if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 541: 8b 10 mov (%eax),%edx - 543: 39 c2 cmp %eax,%edx - 545: 77 04 ja 54b - 547: 39 ca cmp %ecx,%edx - 549: 77 10 ja 55b + 50f: 8b 10 mov (%eax),%edx + 511: 39 c2 cmp %eax,%edx + 513: 77 04 ja 519 + 515: 39 ca cmp %ecx,%edx + 517: 77 10 ja 529 { - 54b: 89 d0 mov %edx,%eax + 519: 89 d0 mov %edx,%eax for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 54d: 39 c8 cmp %ecx,%eax - 54f: 73 f0 jae 541 - 551: 8b 10 mov (%eax),%edx - 553: 39 ca cmp %ecx,%edx - 555: 77 04 ja 55b + 51b: 39 c8 cmp %ecx,%eax + 51d: 73 f0 jae 50f + 51f: 8b 10 mov (%eax),%edx + 521: 39 ca cmp %ecx,%edx + 523: 77 04 ja 529 if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 557: 39 c2 cmp %eax,%edx - 559: 77 f0 ja 54b + 525: 39 c2 cmp %eax,%edx + 527: 77 f0 ja 519 break; if(bp + bp->s.size == p->s.ptr){ - 55b: 8b 73 fc mov -0x4(%ebx),%esi - 55e: 8b 10 mov (%eax),%edx - 560: 8d 3c f1 lea (%ecx,%esi,8),%edi - 563: 39 fa cmp %edi,%edx - 565: 74 19 je 580 + 529: 8b 73 fc mov -0x4(%ebx),%esi + 52c: 8b 10 mov (%eax),%edx + 52e: 8d 3c f1 lea (%ecx,%esi,8),%edi + 531: 39 fa cmp %edi,%edx + 533: 74 19 je 54e bp->s.size += p->s.ptr->s.size; bp->s.ptr = p->s.ptr->s.ptr; + 535: 89 53 f8 mov %edx,-0x8(%ebx) } else bp->s.ptr = p->s.ptr; - 567: 89 53 f8 mov %edx,-0x8(%ebx) if(p + p->s.size == bp){ - 56a: 8b 50 04 mov 0x4(%eax),%edx - 56d: 8d 34 d0 lea (%eax,%edx,8),%esi - 570: 39 f1 cmp %esi,%ecx - 572: 74 1b je 58f + 538: 8b 50 04 mov 0x4(%eax),%edx + 53b: 8d 34 d0 lea (%eax,%edx,8),%esi + 53e: 39 f1 cmp %esi,%ecx + 540: 74 18 je 55a p->s.size += bp->s.size; p->s.ptr = bp->s.ptr; + 542: 89 08 mov %ecx,(%eax) } else p->s.ptr = bp; - 574: 89 08 mov %ecx,(%eax) freep = p; - 576: a3 e4 08 00 00 mov %eax,0x8e4 + 544: a3 fc 08 00 00 mov %eax,0x8fc } - 57b: 5b pop %ebx - 57c: 5e pop %esi - 57d: 5f pop %edi - 57e: 5d pop %ebp - 57f: c3 ret + 549: 5b pop %ebx + 54a: 5e pop %esi + 54b: 5f pop %edi + 54c: 5d pop %ebp + 54d: c3 ret bp->s.size += p->s.ptr->s.size; - 580: 03 72 04 add 0x4(%edx),%esi - 583: 89 73 fc mov %esi,-0x4(%ebx) + 54e: 03 72 04 add 0x4(%edx),%esi + 551: 89 73 fc mov %esi,-0x4(%ebx) bp->s.ptr = p->s.ptr->s.ptr; - 586: 8b 10 mov (%eax),%edx - 588: 8b 12 mov (%edx),%edx - 58a: 89 53 f8 mov %edx,-0x8(%ebx) - 58d: eb db jmp 56a + 554: 8b 10 mov (%eax),%edx + 556: 8b 12 mov (%edx),%edx + 558: eb db jmp 535 p->s.size += bp->s.size; - 58f: 03 53 fc add -0x4(%ebx),%edx - 592: 89 50 04 mov %edx,0x4(%eax) + 55a: 03 53 fc add -0x4(%ebx),%edx + 55d: 89 50 04 mov %edx,0x4(%eax) p->s.ptr = bp->s.ptr; - 595: 8b 53 f8 mov -0x8(%ebx),%edx - 598: 89 10 mov %edx,(%eax) - 59a: eb da jmp 576 + 560: 8b 4b f8 mov -0x8(%ebx),%ecx + 563: eb dd jmp 542 -0000059c : +00000565 : return freep; } void* malloc(uint nbytes) { - 59c: f3 0f 1e fb endbr32 - 5a0: 55 push %ebp - 5a1: 89 e5 mov %esp,%ebp - 5a3: 57 push %edi - 5a4: 56 push %esi - 5a5: 53 push %ebx - 5a6: 83 ec 0c sub $0xc,%esp + 565: 55 push %ebp + 566: 89 e5 mov %esp,%ebp + 568: 57 push %edi + 569: 56 push %esi + 56a: 53 push %ebx + 56b: 83 ec 0c sub $0xc,%esp Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 5a9: 8b 45 08 mov 0x8(%ebp),%eax - 5ac: 8d 58 07 lea 0x7(%eax),%ebx - 5af: c1 eb 03 shr $0x3,%ebx - 5b2: 83 c3 01 add $0x1,%ebx + 56e: 8b 45 08 mov 0x8(%ebp),%eax + 571: 8d 58 07 lea 0x7(%eax),%ebx + 574: c1 eb 03 shr $0x3,%ebx + 577: 83 c3 01 add $0x1,%ebx if((prevp = freep) == 0){ - 5b5: 8b 15 e4 08 00 00 mov 0x8e4,%edx - 5bb: 85 d2 test %edx,%edx - 5bd: 74 20 je 5df + 57a: 8b 15 fc 08 00 00 mov 0x8fc,%edx + 580: 85 d2 test %edx,%edx + 582: 74 1c je 5a0 base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 5bf: 8b 02 mov (%edx),%eax + 584: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 5c1: 8b 48 04 mov 0x4(%eax),%ecx - 5c4: 39 cb cmp %ecx,%ebx - 5c6: 76 3c jbe 604 - 5c8: 81 fb 00 10 00 00 cmp $0x1000,%ebx - 5ce: be 00 10 00 00 mov $0x1000,%esi - 5d3: 0f 43 f3 cmovae %ebx,%esi + 586: 8b 48 04 mov 0x4(%eax),%ecx + 589: 39 cb cmp %ecx,%ebx + 58b: 76 38 jbe 5c5 + 58d: be 00 10 00 00 mov $0x1000,%esi + 592: 39 f3 cmp %esi,%ebx + 594: 0f 43 f3 cmovae %ebx,%esi p = sbrk(nu * sizeof(Header)); - 5d6: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi - 5dd: eb 72 jmp 651 + 597: 8d 3c f5 00 00 00 00 lea 0x0(,%esi,8),%edi + 59e: eb 72 jmp 612 base.s.ptr = freep = prevp = &base; - 5df: c7 05 e4 08 00 00 e8 movl $0x8e8,0x8e4 - 5e6: 08 00 00 - 5e9: c7 05 e8 08 00 00 e8 movl $0x8e8,0x8e8 - 5f0: 08 00 00 + 5a0: c7 05 fc 08 00 00 00 movl $0x900,0x8fc + 5a7: 09 00 00 + 5aa: c7 05 00 09 00 00 00 movl $0x900,0x900 + 5b1: 09 00 00 base.s.size = 0; - 5f3: c7 05 ec 08 00 00 00 movl $0x0,0x8ec - 5fa: 00 00 00 + 5b4: c7 05 04 09 00 00 00 movl $0x0,0x904 + 5bb: 00 00 00 for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 5fd: b8 e8 08 00 00 mov $0x8e8,%eax - 602: eb c4 jmp 5c8 + 5be: b8 00 09 00 00 mov $0x900,%eax + 5c3: eb c8 jmp 58d if(p->s.size == nunits) - 604: 39 cb cmp %ecx,%ebx - 606: 74 1e je 626 + 5c5: 39 cb cmp %ecx,%ebx + 5c7: 74 1e je 5e7 prevp->s.ptr = p->s.ptr; else { p->s.size -= nunits; - 608: 29 d9 sub %ebx,%ecx - 60a: 89 48 04 mov %ecx,0x4(%eax) + 5c9: 29 d9 sub %ebx,%ecx + 5cb: 89 48 04 mov %ecx,0x4(%eax) p += p->s.size; - 60d: 8d 04 c8 lea (%eax,%ecx,8),%eax + 5ce: 8d 04 c8 lea (%eax,%ecx,8),%eax p->s.size = nunits; - 610: 89 58 04 mov %ebx,0x4(%eax) + 5d1: 89 58 04 mov %ebx,0x4(%eax) } freep = prevp; - 613: 89 15 e4 08 00 00 mov %edx,0x8e4 + 5d4: 89 15 fc 08 00 00 mov %edx,0x8fc return (void*)(p + 1); - 619: 8d 50 08 lea 0x8(%eax),%edx + 5da: 8d 50 08 lea 0x8(%eax),%edx } if(p == freep) if((p = morecore(nunits)) == 0) return 0; } } - 61c: 89 d0 mov %edx,%eax - 61e: 8d 65 f4 lea -0xc(%ebp),%esp - 621: 5b pop %ebx - 622: 5e pop %esi - 623: 5f pop %edi - 624: 5d pop %ebp - 625: c3 ret + 5dd: 89 d0 mov %edx,%eax + 5df: 8d 65 f4 lea -0xc(%ebp),%esp + 5e2: 5b pop %ebx + 5e3: 5e pop %esi + 5e4: 5f pop %edi + 5e5: 5d pop %ebp + 5e6: c3 ret prevp->s.ptr = p->s.ptr; - 626: 8b 08 mov (%eax),%ecx - 628: 89 0a mov %ecx,(%edx) - 62a: eb e7 jmp 613 + 5e7: 8b 08 mov (%eax),%ecx + 5e9: 89 0a mov %ecx,(%edx) + 5eb: eb e7 jmp 5d4 hp->s.size = nu; - 62c: 89 70 04 mov %esi,0x4(%eax) + 5ed: 89 70 04 mov %esi,0x4(%eax) free((void*)(hp + 1)); - 62f: 83 ec 0c sub $0xc,%esp - 632: 83 c0 08 add $0x8,%eax - 635: 50 push %eax - 636: e8 ef fe ff ff call 52a + 5f0: 83 ec 0c sub $0xc,%esp + 5f3: 83 c0 08 add $0x8,%eax + 5f6: 50 push %eax + 5f7: e8 00 ff ff ff call 4fc return freep; - 63b: 8b 15 e4 08 00 00 mov 0x8e4,%edx + 5fc: 8b 15 fc 08 00 00 mov 0x8fc,%edx if((p = morecore(nunits)) == 0) - 641: 83 c4 10 add $0x10,%esp - 644: 85 d2 test %edx,%edx - 646: 74 d4 je 61c + 602: 83 c4 10 add $0x10,%esp + 605: 85 d2 test %edx,%edx + 607: 74 d4 je 5dd for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 648: 8b 02 mov (%edx),%eax + 609: 8b 02 mov (%edx),%eax if(p->s.size >= nunits){ - 64a: 8b 48 04 mov 0x4(%eax),%ecx - 64d: 39 d9 cmp %ebx,%ecx - 64f: 73 b3 jae 604 + 60b: 8b 48 04 mov 0x4(%eax),%ecx + 60e: 39 d9 cmp %ebx,%ecx + 610: 73 b3 jae 5c5 if(p == freep) - 651: 89 c2 mov %eax,%edx - 653: 39 05 e4 08 00 00 cmp %eax,0x8e4 - 659: 75 ed jne 648 + 612: 89 c2 mov %eax,%edx + 614: 39 05 fc 08 00 00 cmp %eax,0x8fc + 61a: 75 ed jne 609 p = sbrk(nu * sizeof(Header)); - 65b: 83 ec 0c sub $0xc,%esp - 65e: 57 push %edi - 65f: e8 3c fc ff ff call 2a0 + 61c: 83 ec 0c sub $0xc,%esp + 61f: 57 push %edi + 620: e8 59 fc ff ff call 27e if(p == (char*)-1) - 664: 83 c4 10 add $0x10,%esp - 667: 83 f8 ff cmp $0xffffffff,%eax - 66a: 75 c0 jne 62c + 625: 83 c4 10 add $0x10,%esp + 628: 83 f8 ff cmp $0xffffffff,%eax + 62b: 75 c0 jne 5ed return 0; - 66c: ba 00 00 00 00 mov $0x0,%edx - 671: eb a9 jmp 61c + 62d: ba 00 00 00 00 mov $0x0,%edx + 632: eb a9 jmp 5dd diff --git a/src/user/zombie.d b/src/user/zombie.d new file mode 100644 index 0000000..b838adc --- /dev/null +++ b/src/user/zombie.d @@ -0,0 +1,2 @@ +user/zombie.o: user/zombie.c /usr/include/stdc-predef.h types.h stat.h \ + user.h diff --git a/src/user/zombie.o b/src/user/zombie.o new file mode 100644 index 0000000000000000000000000000000000000000..5f558c5c0dba1d4cfda2c8837d16dab3a95a7b20 GIT binary patch literal 2508 zcma)8OKclO7@qNZodl?RJOFVZ#;pbd%&R0?p5*3QOWV(+HAYe=I& zkOBfE9=#w`i367+!IcXV9C`qWBS*M{ghUSIf{B2bTO1T0E*#2l|9W%x^6ka!Ki>p!QyU1j&>lcFTW=%3@??B7v?I28r{TFzy zU_S*Y+#(-Qd=<2dM$vtMR$Ezn`kA0dDhJFQNPd>P2fz-waeU@Uj^eY32KOORES@b| zeXw2-Z^*4-R6HmT_YD`V@v-qiIaC<97v<=%Zp_OS=SHo*)5Rx>r-~1c&JVvUM`uP+ zo-6m-XGSHGb=hJb(7nGGyY%eu!r^8|HsBKXqvcqkP^+kzSvV>cG#kDXKy2o%z5@hq zBiBI6af`E^M0*@9C&zRBmWrK)D%C33QrKz;t4G>a_pn_kNZWqJwh9Zj{c^4!Xa4|4 z>Q~c98`lCKUN5;4R_k#TMyXocdzS8Xg{pDdXk{5sO8cy8%B2c%pZs_Xnc5IfotHVhw(YsGS z(1~DuLpY}WnTP>!GdG&4^BNeTerE~QKB(iE*(&73LGKY_jEHg$6N|WeK)ywMDI^wx zaT4Y8T_D~^#6@_Jh-vb5U>q+GQC%D0S*<^(@giOBbn#!oeVt`Vt(wAyp* zjEg!Rq8<2%M!vt)Pia)+L%%>B`AfhYP`JsJCJsC>joVl^EcP32>aVB5UG`E>xRoRk zE{)56rBz!B!j%Xv#l1=;_Fv0-z1RzD{+Xs&8Ck#Q411fNf#WfNw#&-$2 z;dEVxQX5f-$9)Tf@h)*(&d-eNgPT5};s+=zBwCEmgPzTI75PrW#(cPPoqU(U z*@yF{9K$(1Xp%rDW!uzf;?7~gUx3YsiTeNsaufG4;vO|Y+DHEF_bUS z$WfM(?+`bmIf3g!xsH~d?~j--*NyWXKr`!?%>}dg8~JVk@zdW~XT~#Ewxn;6fM?u@ TsgM7cvT;9Q+^pfV$3p`ENUNpOLH3Zvk12tkN~h$Qw*S2FEvZ7*gbhygDi zJb28}qeqW(@a9?Y;Lq?Mc=7wXt0ol)=!2^7``&x?x@+rxcW>ps<2Yi>5m)w=$gjaX zay^3unUsR`nDC?Wy*HrI)yQ1>hcp&79@99i@rcGrjZ+$@HI8VU(KxH|sK!x^V;aXb zPG~G>Jg)IXjt>E@oJQ|Be+m=mvx#Fij->HUTwX&6HpF>}JLm4G#TtK zSC7MBoZcLov+GPrad^s^cHF{z;e26+3zOR^fF5sLV#d><-)FJjX{p7unzoa4F^+2T zVD(Aq&RXee`Py=S++pP4E^^*n{C#tUi@a~H=#ADcSH=#UgCZ0wm{HVRer_?1nw;~d zQFGf%6fo+Oz=cfZx&*#t=?mayR?NQ)U9sZK#>6hT2E&U4oi>2Ryf3>u1cA|!;Zji{fhb|04 zC6V%c*^YulNv+w5l{A886G^Hjolv!<)o6EoN!!h!-H^>V@e;WFAd*_0y`P4%rIIl4 zC9a}++*B%*G)#h)g7B(|it(hFuW<>DH-h`@;7;>eIXD(Y?dLUQe2$2t%ri_ZY0Spq zP@8-y$2+aWs{)fK$GTyO>Lyb5y~LApHIAhmsb<+%)pTnEGf}n<+M6AuW-+f?jnr#9 z>P23AOQArXfckiw|Fe0dVLJVr!Eap88p;^$3>rB|RbW@1;M`N^wj|2X!7^~cdbvqoJ(Gh;wy8G?7on2Ftj!>%`rBFpfx9`}wlSx z#(>H?1oz&UiLJw7IAdLi5{Wj}qCG>ipSyww@r>}f^qc3lz*&#$L)(Kmm(#3g%rqRc pzI}u9CmKKhW*)51+Ga19{1M_Ui8j`v@%LlrJ;w`mvq;{VyuUBv&X)iH literal 0 HcmV?d00001 diff --git a/src/vectors.o b/src/vectors.o new file mode 100644 index 0000000000000000000000000000000000000000..39b1252eabd1dfe6ba7556af25ed1654a8b472f6 GIT binary patch literal 16372 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≀zY`UH*&l_;lPP0RPx9hW6}w#q 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 z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ;9om*AOHXW03gWUdV~cEAp-^s7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ M0|pEjFkoN@0&tGM00000 literal 5120000 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 zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{ zAs_^VfDjM@LO=)zf&aq}9S8sb0002_zcxaG0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNvM; z=s*Sl003Z+zx6%7Ldbvt0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj WFkrxd0RsjM7%*VKfB^#r_5%U^y}i)@ From b9f33674c97fcd4fe2f181ed73e30d8b40d14e45 Mon Sep 17 00:00:00 2001 From: JaeSeon <58286830+se0nShine@users.noreply.github.com> Date: Wed, 12 Jun 2024 19:27:05 +0900 Subject: [PATCH 2/2] Update README --- README | 108 ++++++++++++++++++++++++++++++++------------------------- 1 file changed, 60 insertions(+), 48 deletions(-) diff --git a/README b/README index 842f487..453a142 100644 --- a/README +++ b/README @@ -1,48 +1,60 @@ -xv6 is a re-implementation of Dennis Ritchie's and Ken Thompson's Unix -Version 6 (v6). xv6 loosely follows the structure and style of v6, -but is implemented for a modern x86-based multiprocessor using ANSI C. - -ACKNOWLEDGMENTS - -xv6 is inspired by John Lions's Commentary on UNIX 6th Edition (Peer -to Peer Communications; ISBN: 1-57398-013-7; 1st edition (June 14, -2000)). See also https://pdos.csail.mit.edu/6.828/, which -provides pointers to on-line resources for v6. - -xv6 borrows code from the following sources: - JOS (asm.h, elf.h, mmu.h, bootasm.S, ide.c, console.c, and others) - Plan 9 (entryother.S, mp.h, mp.c, lapic.c) - FreeBSD (ioapic.c) - NetBSD (console.c) - -The following people have made contributions: Russ Cox (context switching, -locking), Cliff Frey (MP), Xiao Yu (MP), Nickolai Zeldovich, and Austin -Clements. - -We are also grateful for the bug reports and patches contributed by Silas -Boyd-Wickizer, Anton Burtsev, Cody Cutler, Mike CAT, Tej Chajed, eyalz800, -Nelson Elhage, Saar Ettinger, Alice Ferrazzi, Nathaniel Filardo, Peter -Froehlich, Yakir Goaron,Shivam Handa, Bryan Henry, Jim Huang, Alexander -Kapshuk, Anders Kaseorg, kehao95, Wolfgang Keller, Eddie Kohler, Austin -Liew, Imbar Marinescu, Yandong Mao, Matan Shabtay, Hitoshi Mitake, Carmi -Merimovich, Mark Morrissey, mtasm, Joel Nider, Greg Price, Ayan Shafqat, -Eldar Sehayek, Yongming Shen, Cam Tenny, tyfkda, Rafael Ubal, Warren -Toomey, Stephen Tu, Pablo Ventura, Xi Wang, Keiichi Watanabe, Nicolas -Wolovick, wxdao, Grant Wu, Jindong Zhang, Icenowy Zheng, and Zou Chang Wei. - -The code in the files that constitute xv6 is -Copyright 2006-2018 Frans Kaashoek, Robert Morris, and Russ Cox. - -ERROR REPORTS - -We switched our focus to xv6 on RISC-V; see the mit-pdos/xv6-riscv.git -repository on github.com. - -BUILDING AND RUNNING XV6 - -To build xv6 on an x86 ELF machine (like Linux or FreeBSD), run -"make". On non-x86 or non-ELF machines (like OS X, even on x86), you -will need to install a cross-compiler gcc suite capable of producing -x86 ELF binaries (see https://pdos.csail.mit.edu/6.828/). -Then run "make TOOLPREFIX=i386-jos-elf-". Now install the QEMU PC -simulator and run "make qemu". \ No newline at end of file +### linux환경에서 test를 하는 법 + +1. 터미널에서 다음 명령어를 실행합니다. + + ```bash + git clone https://github.com/SSUminiOS/A3teamOS/tree/main + ``` + +2. 터미널에서 makefile이 있는 디렉토리인 src에 접근을 합니다. + + ```bash + cd src + ``` + +3. 터미널에서 명령어로 make qemu-nox를 입력합니다. + + ```bash + make qemu-nox + ``` + +4. xv6를 실행 후 slabtest를 입력하여 출력 결과를 확인합니다. + + ```bash + slabtest + ``` + + +### docker환경에서 test를 하는 법 + +![Untitled](https://prod-files-secure.s3.us-west-2.amazonaws.com/59c44148-42ff-4519-bc90-b5b36d84abcb/033dbc13-afd8-4ad3-a580-798af2e64184/Untitled.png) + +![Untitled](https://prod-files-secure.s3.us-west-2.amazonaws.com/59c44148-42ff-4519-bc90-b5b36d84abcb/7db482d9-f9f6-4378-bb77-f43acf0eaac4/Untitled.png) + +git clone 이후, vscode에서 docker-compose 파일을 실행 `docker compose up -d` + +그리고 vscode 좌하단에 ><를 클릭하여 실행 중인 컨테이너에 연결을 누르고 /xv6에 연결 + +![Untitled](https://prod-files-secure.s3.us-west-2.amazonaws.com/59c44148-42ff-4519-bc90-b5b36d84abcb/54dff19d-6968-492c-a8e7-94fcef91ee06/Untitled.png) + +다음 vscode 파일 열기를 통해 `/home/ubuntu/src`경로에 접속 + +![Untitled](https://prod-files-secure.s3.us-west-2.amazonaws.com/59c44148-42ff-4519-bc90-b5b36d84abcb/97b005c3-c8da-4135-bc8c-ee554884d1b5/Untitled.png) + +`apt-update` 명령어 실행 + +![Untitled](https://prod-files-secure.s3.us-west-2.amazonaws.com/59c44148-42ff-4519-bc90-b5b36d84abcb/669ed7b5-d216-4471-931b-a6c6af04b0a8/Untitled.png) + +`apt-get install -y build-essential qemu gcc-multilib qemu-system-x86` 명령어 실행 + +![Untitled](https://prod-files-secure.s3.us-west-2.amazonaws.com/59c44148-42ff-4519-bc90-b5b36d84abcb/146531df-a8f9-4a64-aed9-13a6e1b2bf06/Untitled.png) + +![Untitled](https://prod-files-secure.s3.us-west-2.amazonaws.com/59c44148-42ff-4519-bc90-b5b36d84abcb/fe1db594-1fe7-4d95-9747-b1ea6453f037/Untitled.png) + +`make qemu-nox로 build`하고 `slabtest` 실행 시 테스트 결과 확인 가능 + +### 만약 make qemu-nox에서 `make: *** No rule to make target gnu/9/include/stdbool.h', needed by 'slab.o'. Stop.` 오류가 발생한 경우 + +![Untitled](https://prod-files-secure.s3.us-west-2.amazonaws.com/59c44148-42ff-4519-bc90-b5b36d84abcb/ac5df945-5985-4f05-b748-a088eadbbea2/Untitled.png) + +`apt install build-essential` 명령어 실행

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%0AjrgT)$g2#xemW;x!$)`6Q#BMl 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 Wx0e*QE*s^!#>w~Kb?I@o`Tj2}8CS&s diff --git a/src/user/_slabtest b/src/user/_slabtest index cf6aec7cb4450526059bfabc35f2d951f9c2a293..b400709fe99adb1573bc829cc3b7f60392b54aa5 100755 GIT binary patch literal 13444 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 literal 15632 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 diff --git a/src/user/_usertests b/src/user/_usertests index 7e8d9221344ab54d85f3f87dfeb7832c3688e319..12232fde67c40eb1eda21a05b0c6a2d295a4e10d 100755 GIT binary patch literal 59696 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�k84aC8CF40caGrSS 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 literal 16228 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 diff --git a/src/user/_zombie b/src/user/_zombie index 7906d28b944bebcd8fb4abbab8fa46839c03ba39..2f2def7212b04ae20de2646e22a226ca2be9cc62 100755 GIT binary patch literal 13472 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èW#31FD8?!xOtvL#v%;^vu` z0pX0}=;;_b?Ryhd98Un<=|1W7qfy_~L*^4EzhXRLzF^9g>IJi(C|<#B0p24(eCiSN zITWon<^&8SJ=>`3i zA#YG;jh!aCd(DSTP(7gsjW?mJ)SJdzhLP~8w~Tj*d+f)JeTH17_8G4l@sC%n}2 z#(r}4le5w#$sTR1$9Ryo^ephKcbEs|Tawg-q1Pve;;UAyJv2vQ~(%)lqsc5z{^3YPdCaFXm*B@;Y4haT2YT0;$MXwcJe=*YdwEN3`g zM+Nc8=eoaJzQ`!JC?asi*oB%>yUg#Hi2irXUSf}$ZvYz-`p*INqI{jfe_bAxHhwV~ z9NVjo%HNRmXZbYC;%Vcc;c*Tc@00XC%FrX7GR}~6#(30J9lsO3>J9TSJveOs&L#ZL zJZ*Z?r_JpO%Y#3C)JxC6JI0MBb+d*e0a*kvjOucnQ-}(l&jP! zc}}C}_I*yI}t3((Li|s-MFNIQgRd zm9FhyAtpc%8o$@*@3}0OVVo~C`UPTv<@u=j2kZt*)E~@~9Pp(1rUL4YqxK{2M$cLV z{vBzw3-yltH5L<#^+iBTJTLXn=2ML3Q|3=iNRj=h`7@YvxW6_(Aol~r+U34se&p;& zj=)*Oo1<)3-&P#u+p0@BqntLoz|m41XAcrUL8gI%PpYSs>6_fk5qASl6Mb6k)1v!S zzZUIRFVQ9n_9;Nag0Lzo;9bSNh~Y2qQ1?o#-^6UJ)!m4tJ2FLJi&E3H4NF&mfwm`O%eubRY}>~m&f zCNL#Vg|+EisQ#M4 zA2<9yWAA?|g&@53p9 zP4U@aW*V1x-Y9%5aPQYK9JIwG;QTF%ayUQezd7<$sDBv{{;b073~NhNlZkZmc}9E= zdVZlPN6QC=2Y2rmT;fZCzXT`wjfXgQf~(z`@UOSm0Dm|QzXkXSG|Evvf_`HfzXiDW zdky(<;CH9-w*cp_PrPV<8~X32;k$qrrQzMcuTR4t0)9~%z8iQ`8vZcwa2oy?@GsmX zaJ(M^&q?Dy1^k*c{Aa-V$$}Te?`ACP5&>z|CZ+e=fJ%` zk>U7X0Qdf!f;bMP;<7aTOyJ(%i;&O1^0_&UUkv<$G<-a8@AoUpi{UqA=iPYdHF(s! zeE5>I7h~t`T)+6c2M$MV_>{6C*48N6gsVENVvxb z=cuwF+R`E#)-^^ua5#!Ih)s1kAvxz4=VYSKhWgBqY)?d6BVz5^`gnXT-s3xPQgF^k z`t(HKaKLFywu`k9eTrHei8VS$F7E`yLz6ybQ5c7*)(srkIS6r@D24czRvhurCpw&d zod+c%n-e13(WY&OBkR`c!=wnq9T9G5Yi*6->=JH_)F+$Q)^*gynsM}T(P*rx&4cUe z>v62{Fr2<39*luJkYvnp7;kH6iN->gWd*pj^mjdQ~hc{cjR@$*X0)V~ClbZ*x@v%vH@0yLx{hRpF!n-`)w?Ob<^8Tq%|FyIy zHpE*$O0Et8U9ErLbwoWI8(leX9>2U0u}X^z<=E~TCHHYT{+0qX@ABk&Kp^a0b0*`D zv(7W_BM?ZJJ2_Q|X`WIVk1}cQh;lw$kenbogi_}%*M*rg?<&WHE=(K11NrPrm%FA4 L{&`C1J-Pn})3jS9 literal 14476 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 diff --git a/src/user/cat.asm b/src/user/cat.asm index 368adc9..e78a1be 100644 --- a/src/user/cat.asm +++ b/src/user/cat.asm @@ -11,1151 +11,1119 @@ char buf[512]; void cat(int fd) { - 0: f3 0f 1e fb endbr32 - 4: 55 push %ebp - 5: 89 e5 mov %esp,%ebp - 7: 56 push %esi - 8: 53 push %ebx - 9: 8b 75 08 mov 0x8(%ebp),%esi + 0: 55 push %ebp + 1: 89 e5 mov %esp,%ebp + 3: 56 push %esi + 4: 53 push %ebx + 5: 8b 75 08 mov 0x8(%ebp),%esi int n; while((n = read(fd, buf, sizeof(buf))) > 0) { - c: 83 ec 04 sub $0x4,%esp - f: 68 00 02 00 00 push $0x200 - 14: 68 60 0a 00 00 push $0xa60 - 19: 56 push %esi - 1a: e8 e0 02 00 00 call 2ff - 1f: 89 c3 mov %eax,%ebx - 21: 83 c4 10 add $0x10,%esp - 24: 85 c0 test %eax,%eax - 26: 7e 2b jle 53 + 8: 83 ec 04 sub $0x4,%esp + b: 68 00 02 00 00 push $0x200 + 10: 68 40 0a 00 00 push $0xa40 + 15: 56 push %esi + 16: e8 be 02 00 00 call 2d9 + 1b: 89 c3 mov %eax,%ebx + 1d: 83 c4 10 add $0x10,%esp + 20: 85 c0 test %eax,%eax + 22: 7e 2b jle 4f if (write(1, buf, n) != n) { - 28: 83 ec 04 sub $0x4,%esp - 2b: 53 push %ebx - 2c: 68 60 0a 00 00 push $0xa60 - 31: 6a 01 push $0x1 - 33: e8 cf 02 00 00 call 307 - 38: 83 c4 10 add $0x10,%esp - 3b: 39 d8 cmp %ebx,%eax - 3d: 74 cd je c + 24: 83 ec 04 sub $0x4,%esp + 27: 53 push %ebx + 28: 68 40 0a 00 00 push $0xa40 + 2d: 6a 01 push $0x1 + 2f: e8 ad 02 00 00 call 2e1 + 34: 83 c4 10 add $0x10,%esp + 37: 39 d8 cmp %ebx,%eax + 39: 74 cd je 8 printf(1, "cat: write error\n"); - 3f: 83 ec 08 sub $0x8,%esp - 42: 68 44 07 00 00 push $0x744 - 47: 6a 01 push $0x1 - 49: e8 dd 03 00 00 call 42b + 3b: 83 ec 08 sub $0x8,%esp + 3e: 68 00 07 00 00 push $0x700 + 43: 6a 01 push $0x1 + 45: e8 bf 03 00 00 call 409 exit(); - 4e: e8 94 02 00 00 call 2e7 + 4a: e8 72 02 00 00 call 2c1 } } if(n < 0){ - 53: 78 07 js 5c + 4f: 78 07 js 58 printf(1, "cat: read error\n"); exit(); } } - 55: 8d 65 f8 lea -0x8(%ebp),%esp - 58: 5b pop %ebx - 59: 5e pop %esi - 5a: 5d pop %ebp - 5b: c3 ret + 51: 8d 65 f8 lea -0x8(%ebp),%esp + 54: 5b pop %ebx + 55: 5e pop %esi + 56: 5d pop %ebp + 57: c3 ret printf(1, "cat: read error\n"); - 5c: 83 ec 08 sub $0x8,%esp - 5f: 68 56 07 00 00 push $0x756 - 64: 6a 01 push $0x1 - 66: e8 c0 03 00 00 call 42b + 58: 83 ec 08 sub $0x8,%esp + 5b: 68 12 07 00 00 push $0x712 + 60: 6a 01 push $0x1 + 62: e8 a2 03 00 00 call 409 exit(); - 6b: e8 77 02 00 00 call 2e7 + 67: e8 55 02 00 00 call 2c1 -00000070

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 B=iLAR literal 15356 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 literal 14792 zcmb7L3wTu3wcdNqoRgW%WM-1dgAlY)KtRca00P0F0!De-0Aiwun8zdxB$G5V6Tpff z1C=qRir2QcEgEfW-`>{SO08B!posQsKdQ9&xYt&z1&jSetrZ__?*H#|&df>R_OZWj z&Dv}2_1bH%z0a9F$(H&hmrE&y-CRNwHZ>j01vAZ&>7r7%GiK{cMV6@Vvug_s4% zL*ETp_C~VJF`VskJOp?zc=pEwOUAj=ub&+H%qJ@|Z(O}%S^6!1zwBS;PM?xDPZ+q? zJurP6SVPl}e;Lta+~bbdx`asYcc%}8YTrw}e*7b_({Fj!-e(B0&UL(66XN(E!J}|l6l*(+WqPmN{#@$a%%N4Q_ghjFTImn&k=yqs3un1f1?i_`dY@E` z)Z4*5dxLw5CLPX+uk>u4Et18`D$He`+FIulsrNI7R`35QJ)L;pGThj|(vvybzckce z@Biez?`96K$r-8l1ote3)6n+kk|nc#oeaW~qEhcF!>jizbm9Zs*3~Q0Z%yt`c^;#S zfz8JId5-@Hwv~a6<1+if9ZLBdj{h0V%)!iZ$dOLHHZXdxk#V;@2{|JgfVJy4C zEIaab3$x5fmsl88qG*;N`9TX8TDZu<9t(#pTx?-fx6;eEu+PGN3l~^8VBt~=mzfw9 z*~nzqW$F)Po=6b@F@Eqyc67W*Uu34&Z{mw znt3U+zxLOCze{i4E0UgrmtFWm)xZYVj=$b~{=jt?9v#^H!a(Y1aF4dL{-`R5tA|nt zj(_;~p`pwR=@XJW=2YtU_R_;4?VlJJQC_IXv$ww--2OdQ(m^>;AIj7pc~Xg1?Oc6K z86K!V*1%%92ex7Mgq|K6pF9`R!9CXxQ8^Cf;1kaW_w3&>lzJ_FYJBQI=IIl!q))Xa zues&54`40*QBU&5^r=K}`#q#iwFbApr8?t-+k?kyRb|18tL z8QoT#6YJzpxibBmkMx)I*L#lN&dHxj?{#Ai2viBac@;{Qvf`(#j;!nrXOf)=+5V+R z`ephlcV_949eb1E%>LjWp)76Rn+m>ZK;p3Kn{!P$N!MuUGS zylTd97|!T9&neB6E~5O??#$*~yx)NA$jpzWm_4C11ngzat!Dpf&%okS_w!Ib;qMRC z?%Uw5eRe}AbGY_U;w0#2LGRmevOn=je`uiYo!XC*<(Uf8toC$BjVJdp!-u-)5GT9CC#~j+lYGnD|jI5cz}1s3?FSQye>DKS5&rIJR- zaHVbvX|B{pQORMzrI0-jSkwnRJ6!V$^toy6y8Uy14wK4OCx+%hrrIgfp@x->+reLk z@$;SItMVx@mxop*;D>-l$W#F5{M@Q7d)o9<3HA}dm5`|c&dRjp>~L!{x7-KYw=R#FZ_ncrsO48<`%N zQdN^uRL#v(r$nYqk4&9p@@dShH$EKAH!;-_s`kvTsv(y!Ff%?fg&KQ>^Ryc4)g^lH z95u&h!88-gK?D)GFZ!sMz2~+>G*tw?uRghfhuT>5P zJFYxFM_tl03tBFhj{PSzw;qcph5K@_q#@@zRORk{p!CIRB%dQ@4B#~?UKz(#H3Azk zAw7AN%43oLhMih`yvh#Cly5(IjrjPG9mYnE@VF1D&tKuwC5^eT?B#0&!8J+uP6LDB z^6SWg*<6P1WmOYgV-3-cz}(_43|d)uj7lKsh0Dz@0;(+`1g8(#K>(H89!?!3Hjqwh9i@owSvc*cY9=+9HktHk{JizM>Z zNJwaAvh&Pjd#=Nnyg^O?@?xO-Z_(iT)W)9I8-m7_sxJ! z0DoH|DP)Ux3IrYieLs1L-c})7gY&>+eh&adfji)?1|t}7&j8ZQY=_tnxaZ*0!=%fV zlGdLE%@afJz7;)R0{kLcI|1G?fFE%*sw@Z2%PgCq8Pi%0&;NQ_s#%&{>8KLSIhb zcYu}`N+yBX;~^?{Z$NenTT<;9@pFXUyP7wGEa4pK9%VaI`T9D>`R&Nxipn$_EpZ$It}6hyk`w#%*uTb&d56OD~T<)_} zo(_WAOMTCesU9|$8#JGxa`(ej?*U(_zYoE80KU(FGnNS%h4Es5@bH-~Jt}+Lr+iGy z-JB4;djedqOCZRE_)syPv#5S2sGR_RH-z$4&A$xtMSv*X2LaawQe&l*-K2;D=CG_y z^;HT-wc@yQU2qQ5DayZ#0fHXT%fA9l&kP6E4Yzq{=nXVIQGO1p ze3HuDTu6hvXQF>8!`dbC+PjdbiDNkO4&>ejc)Uo|`QERBRe-eU059t4f;{RpgPKbY zcEJVt0pyQ{g1n%By!D_P0p4b;>truW;zN*s0Qk7vKL)4|b$rb5GUfhXg1N&G z;ue5^ABb!A4p8|LTRFf7-M1jz z3kb>vZI>{Da+#bhLU&ms4(_F}@BShrt%JVk4)hD%=I3}s5Z1wve#xrj%beW(1uRP* zOUfVM!v7xLUjpQ9#F6PQC9BYbbpsUhP?P?%Rn35&127UDI3@fO$wM`k1ZX}Gq)}bt zm+w+_6bC&IfaBWLz^V(WI@|*7Zh$u)?Ep_zqQv9=L-OFeP(4R41!p#(j77H!pqd=3 zn~BFr44_tRD>^p=3Stmbi5H_dae6MVfnLa@X-UyRF}j4|8d6fcf=Mt`92M9tMwrTC z%n&9`(7d{s365K+t!}=0MZn-0V85e1k7fHeH@Pdu7`%ZSUDT%}8$C%p z7Yo7I>On{(A`tmr&{T|di*hA(*-mB0P`EHtU@wp?zrR@9E0+s}S zgubrvyP%m z`~^U;l>+mE^b?KPNvEuBQP4EnrnB3r!%eCW{=E$1YIo0ixm( zXcM%uJk+xs9|-%jKt-TX78#*3q;H(?`7Q^+r?~cez%C*33-$lM!--PmoVTxZm z>Pz#=Wf;q*3wvx~*j4tEd9Y(l7n;YEUkH)B%r+?sWevKXAUu%gjfhLi>&oK+TbZ*v zLqw$x>$#{9pgSzJfX`=oQGpaVL}y{T1{m2W$jHmh$@35AgpFl~m7NowyAB?T!3Rdx zyftyZbK(}SfK$eD*fS5FhpC3n6U;*4FdHyhluK23m@SMIpM?}ImygWzaRHiq*Z3M? zw?r2;cHT=P$cep9l|E*r%o#Q+&FK)Q&KXxhgba9qsfqw91f}9CoAQI-vPWtqLAqoiD@Vk$oeMN*A5 z9_{pMu4{!eS$HU%aUoCN;Q#-2ax7X{I``G-+i2uQ^OTL)ieBf=!wGID(Kj+5{^9j8 z;%F%tmQrLZFf4s$Aq0onG%dHs?>BYpJPw9SQ3@dh>(WmPx-f-#g!7pc; zs6Ufek?M@Kz#ZDgSu@}bExD;DnlQVGWOLH&S;25z1;g)Cqg60Ri^IAHJsp0fagFXF zF4PMZDfJ-nB9q&W*q7*d*NGUHD&1%B?xB0p_0*~GA*dURbpsq<9jsnt4^l55+|oL| zxK5YV##E(0SgZ$_5EyAv0cZ$7<)ct9fn$yY6t1)K647N$4_*PCYn4H1OjDK~bh~s} zs%yo@_c4nC25DTUMvm%Ux~Nl;<$+aTEYt(QUhv4zU#iP%^!%zOD4E9I3m2=DaX z3iBvX=`f>^v;_^=(2Zww+SIXJuxUuIr?M;cu3Jjs?E`G<= z@@4vr&Ec7G+jZl6b-MQ=wXl$CKs6N` z+YpTwk-8tN%Bn0yXf8wB*rZ~0L02)%%5$;6(vZa>GNd^y9fZv-7`z6=r&TwA#s3so zp>~*DrD`K!Xx=-m-hU|UHSUH8;`qrH%+UWp&Hsg#0o#{dckEX;2WDvqmO2V z3bbcM9Tshss?5Lhgz}}HFtJ)xBk=8GXI!Z=K?kfCo(SZz zk0V4m#c_su>}yhbIubtygF)8LbxN1460nd>q_2FDQhf#o(|GhIwew`5`2tWn&-^Qu zRnEh#yhVCYTmRcT>7-EVe5Qr&1uOVsIsbS+EjcbQ}O7Wj%YmE8*2sG+}pZ#PHe`k8I@HX9c?X@RiCb@tZI*USGA;K zoyl0-BoawTC##w}W6gBF}g_~Q~SM~IEC!?*&Zj0Fy zi(<4nu_@lVwzoUpok~=t;u~V|wyI=vOJ_8JLA)?PueGx|vDVg(bu)n0b_cCqazr*a zt!tZmMOSkyE}DBgT7`L@v)?DWqFr6xeNoZYoNOkMh$clJe|f-c5QJ!MYwKmdGa6T{ zo=u`7noNk4vdM6gqBq*yCQ?j$cMrt+c=b*7t{(gCCz0$Cb;EWTbO zVmC(ZCl%LW?uyE(k!jPd0I{oEnjyQPHdx&|pVTfHG zqh`#YEvKQwF{fF|Nzq`7FbIc;o1%0l1%GwPHvXkb2EgEm>D?is-i{%>DJwQ*kYegb z8?o$*=<@1Tie=vfqOwa&$%biqsRLKtfr|#B>j6@%=m4T~N5~Xk0oJu9o5&Qt+BC!` z0-Aca=kG3m0MH%rn;Z};h+NRabe0g8C{rtl&a>E%u-eDKc-Ic- zqz8bWF}p;+08ql&s7Yz?-NckZdhn^56t@9?0RRDy$)kXSn=PMVTw7G(mH12o=$v>9 z;Ivg+17=JKO&KJnAm*?Ui1H&BidQVN6@Qn)^x+5`l=`K|5^)oARt~qI_^X*}xE@f^ z5fkzdsnH|O9VEe*SFgnwD+fuAb;_V`w~+?j4ukHI1{GttK~pAcP2d(xO=I}7-3{)O z04|y>YvV^zA-VX`|9^x(LnUDV~BlD2L_1_I)*qOo=CP8PN+yts)2}q zb!rc>udaec0}*d)?I8rLnj!87HZz(#4o*ugWGKfevl@x{bF37NL_-#vcojkeo6}xr zb~#NRKj3m&>X$Xqm|K=c&L9MU03%*$c4133-q4-i?g#5(fQG#}$PTA~Y!TfAFQ|_t z#B>fe(YGx&F#`dcXs^X4W`STQ5%H%*8X=x;MnuFMk_|W6whuiP2l#7H^tG?8f z$lA+wc-+A$Q9l4H{d#i3WRkhq8v4rIW!#4 z1ocegb4?w0=RlZlxF?ADvm9O+h=I+fP8lS1 zlY>(|NGh#3JxZo}5QJ*FdbZ-y5Y#9DBOqo(E>SZ`Y-Q__Y_>)|NTe7IvH1X;h(wGD zDLrGZ_+aWY$MLC}ODQmHwI~)B2>G$vmw@jDz$!PuO8`Tt-@*pj=fR1gPk{ImfNmL3 zrRpvxsx`S7x105xk!mZMrk6jAK>{9eL}&K0Jm+Qk*)Ti7^kUmJF{geCfP@fHB_E!Q zv3b+R<9S7Tq0)0aLDbbBm<+uPt66mE;&JEZi%@AXI~PopqBJ~MgFyle6J7C-WZ}fo zm>8eZY#<5&G|{tha5g$LgQVHgpi~~uByP*tn6GL)8;E-W!ybyEEHhjCcty)Hvkq?n zi$%lYU>(@)`{-~b7(3I#Df7ts7n_D?*zPk-1$@C*ox@pLQ#5};Wz(=_olO(NpBfs9 z&e=4)|?0B#G_ z&gC!oh2Z0ULsZ$qz?7c}%=vPr5}$K``I|ERke&y89pF4b5jYEh?Z0Fp%{B8PjWyPI z6Yy3(2E@OcR=%L&Bpot7w}yUn&mm$K|c!mSqIHG ziI*JoLC|)+g^+JP<@w#F0>Jsd2+YPcApHvPHbAvSzXANH!`>YnM}8Mr<8J~x?VkkA z|50M2zaIjB&7uE3=y?wMBhb&n-X*~FKLq>`;Czeb_orl`$XO#7F5+P8nGv3@|wUP7x*?jj&kGi6q-<4eE!4ZnpK2fTy8eT8-1Vc&Fgt&exN ziJpXckAce!{6V|@bwAO`>w%tF50r67gj9;iNBOcZ0f?*5OA{B#B1$dGP*G-BE8+pb|kuXjk<&q z5riWmt=(N+QQUt-+M+F~jy27_&G8Q0pjc!q-rjBZn_F6NHDXh^wTaq&II_FEDY0}d zOIY`RwXwdj+SwD6`}`i9Q+DGR+c^OCSu#Agi*dvbKf^G9HVI(M@jSl_a@SdP#&P>3 zpN2lqHlFm{7xw}D=-bVfn*|2#O|b?jcY!Trjd6Ug)whQZ)22-T(-#}hNy^);2S@)N zpH1b)xX+z(=amZaCC6jO9$Pm;?r|jaH;%`TE!Sts+4Hz-tPr1dc@6=PF0~dws_ncGcLBB$aO`d&`sUNw Pl>6Qc^ODA-a&rF%#4jT2 diff --git a/src/user/_ln b/src/user/_ln index fbeccb5f43248a38223bad7fb9e7b174400149ec..bf2a36b0fd46ff48679b8abefa15ba004c95c97b 100755 GIT binary patch literal 13776 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